mirror of
https://github.com/lighttransport/tinyusdz.git
synced 2026-01-18 01:11:17 +01:00
This commit adds comprehensive OpenPBR documentation and a powerful synthetic environment map generation tool for testing and visualization workflows. ## OpenPBR Parameters Reference (doc/openpbr-parameters-reference.md) - Complete mapping of all 38 OpenPBR parameters - Blender v4.5+ MaterialX export parameter names - Three.js MeshPhysicalMaterial support status with detailed notes - Parameter categories: base, specular, transmission, subsurface, sheen, coat, emission, and geometry - Support summary: 15 fully supported (39%), 7 partial (18%), 16 not supported (42%) - Critical limitations clearly marked (subsurface, transmission effects, advanced coat) - Conversion recommendations for Three.js WebGL target - Blender MaterialX and USD format examples - 8KB comprehensive reference with all technical details ## HDRGen Tool (tools/hdrgen/) Pure Node.js synthetic HDR/EXR/LDR environment map generator with zero dependencies. ### Version 1.0.0 Features: - Three presets: white-furnace (testing), sun-sky (outdoor), studio (3-point lighting) - Dual projections: lat-long and cubemap (6 faces) - HDR output: Radiance RGBE format with proper encoding - Procedural generation: Hosek-Wilkie sky approximation, studio lighting model - Comprehensive CLI with preset-specific options - Full test suite: 8 unit tests, all passing - Documentation: 15KB README, quick start guide, examples ### Version 1.1.0 Features (added in this commit): - Image rotation: rotate environment maps around Y axis with bilinear filtering - Intensity scaling: global brightness multiplier for testing and adjustment - LDR output formats: PNG (8-bit RGB), BMP (24-bit), JPEG placeholder - Tone mapping: three operators (simple, Reinhard, ACES filmic) - Exposure control: EV-based exposure adjustment - Gamma correction: configurable gamma for different displays ### Code Statistics: - Total: ~1,500 lines of pure JavaScript - Core library: 913 lines (hdrgen.js) - CLI: 254 lines (cli.js) - Tests: 194 lines - Zero external dependencies ### Technical Implementation: - HDR: Proper RGBE encoding with 8-bit mantissa + shared exponent - PNG: Uncompressed RGB with CRC32 validation - BMP: 24-bit RGB with proper padding - Tone mapping: Reinhard, ACES filmic, simple clamp operators - Image transforms: Bilinear filtering for rotation - Math utilities: Vec3, coordinate conversions, color space operations ### Output Examples Included: - test_furnace.hdr (white furnace for energy conservation testing) - test_sunsky.hdr (procedural sky with sun disk) - test_studio.hdr (3-point studio lighting) - test_cube_*.hdr (cubemap faces, 6 files) - studio_test.png (LDR preview with tone mapping) - sky_test.bmp (BMP format example) ### Use Cases: - Material energy conservation validation (white furnace) - IBL testing and debugging - Web-friendly environment map previews (LDR output) - Lighting direction adjustment (rotation) - Brightness testing (intensity scaling) - DCC integration (Blender, Houdini, Maya, Unreal, Unity) ## Documentation Updates (doc/materialx.md) - Added "Related Documentation" section linking to OpenPBR parameters reference - Cross-reference for developers working with OpenPBR materials - Better discoverability of comprehensive parameter mappings ## Testing All functionality tested and verified: - HDR output: Valid Radiance RGBE format - PNG output: Valid PNG with correct CRC32 - BMP output: Valid 24-bit bitmap - Rotation: Smooth 90° rotation with bilinear filtering - Intensity scaling: Correct 0.5x and 2.0x multipliers - Tone mapping: All three methods produce correct output 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
384 KiB
512x256px
384 KiB
512x256px