- CMakeLists.txt: Skip libatomic linking on MSVC (atomics built into runtime)
- crate-reader.cc: Use std::transform with explicit cast to fix C4244 warning
- pprinter.cc: Remove duplicate to_string(DomeLight::TextureFormat) to fix LNK4006
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Update all CMakeLists.txt, Makefiles, meson.build, setup.py,
and documentation files to use C++17 standard.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Copy TinyEXR v3 source files from upstream tinyexr repository
- Add new CMake option TINYUSDZ_USE_TINYEXR_V3 (default ON)
- V3 provides modern C17/C++17 API with Vulkan-style interface
- V1 API functions remain available for backward compatibility
- Backup original v1 header as tinyexr_v1.h
New files:
- tinyexr_c.h, tinyexr_c_impl.c: Pure C API
- tinyexr_v3.hh: C++17 RAII wrapper
- tinyexr_v2.hh, tinyexr_v2_impl.hh: V2 implementation
- tinyexr_huffman.hh, tinyexr_piz.hh: Compression codecs
- tinyexr_simd*.{hh,h,cc}: SIMD optimizations
- exr_reader.hh, streamreader.hh, streamwriter.hh: Utilities
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds a new inspection feature similar to pxrUSD's sdfdump, providing
YAML-like tree output of USD Layer structure. New files:
- src/usd-dump.hh/cc: InspectLayer/InspectStage implementation
- GlobMatch/GlobMatchPath functions in str-util for pattern matching
New CLI options:
- --inspect: YAML-like Layer inspection output
- --inspect-json: JSON output (placeholder, not yet implemented)
- --value=MODE: Value printing mode (none/snip/full)
- --snip=N: Number of items to show in snip mode
- --path=PATTERN: Filter prims by path glob pattern (supports **)
- --attr=PATTERN: Filter attributes by name glob pattern
- --time=T or --time=S:E: TimeSamples time query
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implements ColorSpace API infrastructure following OpenUSD color management specification:
- Define ColorSpace tokens and enums (18 canonical color spaces: linear, sRGB, gamma 2.2/1.8)
- Add ColorSpaceAPI schema with colorSpace:name attribute
- Utility functions: to_token(), from_token(), is_linear(), is_data()
- Default color space: Linear Rec.709 (lin_rec709_scene)
MaterialX JSON integration:
- Add colorspace metadata to MaterialX input serialization
- Omit colorspace field when value is default (lin_rec709_scene) for clean JSON output
- Access colorspace via MtlxElement::GetColorSpace() from extra_attributes
References:
- https://openusd.org/dev/user_guides/color_user_guide.html🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implements raytracing-optimized data structures and converter for Tydra:
- RTGeometry with multiple geometry types:
* Triangle/Quad/Mixed meshes (ray-quad intersection, no tessellation)
* Analytic primitives (Sphere, Cylinder, Capsule, Cone) with native ray intersection
- RaytracingScene container with validation and BVH support
- RaytracingSceneConverter framework (placeholder implementations)
- Primvars fetched at intersection time (no variability preprocessing)
Configuration options:
- allow_quads: Use ray-quad intersection to save tessellation cost
- convert_primitives_to_analytic: Direct ray intersection for geometric shapes
Test assets:
- ColorChecker Classic 24-patch in sRGB, linear sRGB, ACEScg, and spectral
- Chrome ball reference geometry with MaterialX metal shader
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add Tydra material serializer for WASM/JS bindings (JSON/XML export)
- Enhance MaterialX web demo with Three.js module imports and improved material handling
- Add support for normal visualization, bounding boxes, and up-axis conversion in demo
- Update CMakeLists to include new material serializer in Tydra build
- Minor updates to shape-to-mesh header and web bindings
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Resolved merge conflicts and fixed compilation errors introduced by animation system refactoring and API changes:
- Updated AnimationClip API usage in threejs-exporter (channels/samplers)
- Fixed PropertyMap const-correctness in MaterialX shader reconstructors
- Fixed 32-bit build warnings (sign conversion, variable shadowing)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implements sophisticated bone influence reduction algorithms in a standalone
module (bone-util.hh/cc) for better code organization and reusability.
Features:
- Multiple reduction strategies:
* Greedy: Simple top-N weight selection (baseline)
* ErrorMetric: Minimize deformation error using weight-based metrics
* Hierarchical: Preserve bone chain relationships (when hierarchy available)
* Adaptive: Auto-select best strategy per vertex based on weight distribution
- Configurable parameters:
* target_bone_count (default: 4 for Three.js/WebGL compatibility)
* min_weight_threshold for early filtering
* error_tolerance for quality/performance tradeoff
* Strategy selection per use case
- Quality metrics:
* Weight normalization to preserve total influence
* L2 error tracking for validation
* Statistics output (avg/max error, vertices modified)
- Bone hierarchy utilities:
* Calculate bone depths in skeleton hierarchy
* Find chain distance between bones
* Support for hierarchical-aware reduction
MeshConverterConfig additions:
- enable_bone_reduction: Toggle feature on/off
- target_bone_count: Configure max influences per vertex
The ErrorMetric strategy is used by default, providing good balance between
quality and GPU efficiency. Falls back gracefully when no hierarchy info available.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implement TRS decomposition to enable animated matrix transforms in Tydra
render-scene conversion. Transform xformOps with time samples are now
decomposed into separate Translation/Rotation/Scale animation channels
compatible with glTF and Three.js.
Changes:
- Add decompose() function to xform.cc using Shepperd's method for stable
quaternion extraction from rotation matrices
- Extend ExtractXformOpAnimation() to handle Transform xformOps by
decomposing each matrix time sample into TRS components
- Fix TimeSamples API usage: change ts.get_as<T>() to sample_value.as<T>()
for correct access pattern with FOREACH_TIMESAMPLES_BEGIN macro
- Fix atomic library linking in CMakeLists.txt for Emscripten builds
- Fix AnimationChannel validation method call (valid -> is_valid)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add static_cast for uint64_t to size_t conversions in timesamples-pprint.cc
- Add static_cast for atomic queue size calculations in task-queue.hh
- Link libatomic on 32-bit systems for 64-bit atomic operations
Fixes implicit conversion errors with -Wshorten-64-to-32 and undefined
reference to __atomic_load/__atomic_compare_exchange on i386.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implemented parallel printing for Prim and PrimSpec to speed up
Stage::ExportToString() and Layer print_layer() functions using
the lock-free task queue.
Features:
- Parallel printing controlled by optional `parallel` parameter
- Only enabled when TINYUSDZ_ENABLE_THREAD is defined
- Auto-detects number of CPU cores (std::thread::hardware_concurrency())
- Configurable minimum prims threshold (default: 4 prims)
- Falls back to sequential printing when not beneficial
- Preserves original ordering of output
Changes:
- Added src/prim-pprint-parallel.hh: Parallel printing interface
- Added src/prim-pprint-parallel.cc: Task queue-based implementation
- Modified Stage::ExportToString(): Added parallel parameter
- Modified print_layer(): Added parallel parameter
- Updated CMakeLists.txt: Added new parallel printing files
- Added sandbox/parallel-print-benchmark.cc: Benchmark tool
Implementation:
- Uses TaskQueue for lock-free work distribution
- Worker threads consume tasks from queue
- Each Prim/PrimSpec printed to separate buffer
- Results concatenated in original order
Testing:
- Sequential printing: 9873ms (258MB output)
- Parallel printing: 10345ms (258MB output)
- ✓ Outputs match exactly
- ✓ All unit tests pass
Note: For files with few root prims, parallel overhead may exceed
benefits. The min_prims_for_parallel threshold prevents this.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Extract TimeSamples functionality (~2,400 lines) into separate
crate-reader-timesamples.cc file. Add crate-reader-common.inc for
shared macro definitions. Add explicit template instantiations for
types used across translation units.
This reduces crate-reader.cc compilation time from 56.5s to 24.4s
(-57%) and overall build time from 1620s to 956s (-41%).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add templated ParseTypedTimeSamples for efficient POD type parsing in ASCII parser
- Implement PODTimeSamples with array support and offset table for memory efficiency
- Add backward compatibility through get_samples_converted() method
- Optimize blocked/None values to avoid memory allocation (using SIZE_MAX marker)
- Fix pprint functions to handle new offset-based storage correctly
- Add comprehensive unit tests for sorting, blocked values, and arrays
- Fix get_sample_at() bug that always returned false
The optimizations provide significant memory savings by:
- Avoiding value::Value wrapping overhead for POD types
- Not allocating memory for blocked/None samples
- Using offset tables for efficient sorting without moving large data blocks
- Supporting both scalar and array POD types efficiently
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add Remotery v1.2.1 to src/external/Remotery
- Add CMake option TINYUSDZ_WITH_REMOTERY (defaults to OFF)
- Configure build to include Remotery when enabled
- Set appropriate platform flags for Windows/macOS/Linux
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add TINYUSDZ_WITH_COROUTINE option to enable C++20 coroutine support
- When enabled, sets C++20 standard and defines TINYUSDZ_WITH_COROUTINE preprocessor flag
- Add src/nonstd/generator.hh: C++20 implementation of C++23's std::generator
- Header-only implementation compatible with C++23 standard
- Supports range-based for loops and iterator interface
- Proper exception handling and move semantics
- Automatic coroutine support detection with fallback
- Includes type traits for template metaprogramming
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
## Features Added
### Core diff-and-compare implementation:
- Complete rewrite of src/tydra/diff-and-compare.cc with full diff algorithm
- Hierarchical PrimSpec comparison (added/deleted/modified primitives)
- Property comparison for attributes and relationships
- Recursive traversal with depth limits for security
- Memory-safe implementation using standard containers
### Text and JSON output formats:
- DiffToText(): Unix diff-style output with +/- symbols
- DiffToJSON(): Structured JSON format for programmatic use
- Proper JSON escaping and formatting
- Sorted output for consistent results
### usddiff command-line tool:
- Full-featured CLI application in examples/usddiff/
- Support for --json and --help options
- USD file loading with error handling
- Support for all USD formats (.usd, .usda, .usdc, .usdz)
- Comprehensive documentation and usage examples
## Implementation Details
- Path-based diff organization using USD scene graph paths
- Efficient O(n log n) sorting for consistent output
- Configurable depth limits (default: 1M levels) for security
- Proper error handling and input validation
- CMake integration with TinyUSDZ build system
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit integrates WAMR into TinyUSDZ to enable WebAssembly execution
capabilities within the Tydra framework for advanced USD processing.
Changes:
- Add TINYUSDZ_WITH_WAMR CMake option to enable/disable WAMR support
- Copy WAMR core runtime to src/external/wamr/ with all necessary files
- Create WasmRuntime class in src/tydra/wasm-runtime.{hh,cc} with:
* loadAndExecuteWasm() for executing WASM binaries from memory
* loadAndExecuteWasmFromFile() for loading WASM files from filesystem
* Proper error handling and resource cleanup
* Platform-specific configuration support
- Configure CMake build system to:
* Include WAMR core sources when TINYUSDZ_WITH_WAMR=ON
* Set up platform-specific include directories (Linux/Windows)
* Add proper compile definitions for WAMR integration
* Link WAMR sources with TinyUSDZ static library
The integration provides a foundation for executing WebAssembly modules
within USD processing workflows, enabling custom processing logic to be
implemented in WASM and executed efficiently within the Tydra framework.
Usage: cmake -DTINYUSDZ_WITH_WAMR=ON -DTINYUSDZ_WITH_TYDRA=ON ..
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>