diff options
Diffstat (limited to 'WGSL_REFACTOR_COMPLETE.md')
| -rw-r--r-- | WGSL_REFACTOR_COMPLETE.md | 191 |
1 files changed, 0 insertions, 191 deletions
diff --git a/WGSL_REFACTOR_COMPLETE.md b/WGSL_REFACTOR_COMPLETE.md deleted file mode 100644 index 9bdc73c..0000000 --- a/WGSL_REFACTOR_COMPLETE.md +++ /dev/null @@ -1,191 +0,0 @@ -# WGSL Shader Composability Refactor - Complete - -## Summary - -Improved shader code reusability by extracting common patterns into `math/common_utils.wgsl`. - -## Changes Made - -### 1. Created `math/common_utils.wgsl` (37 lines) - -**Functions:** -- `transform_normal(inv_model, normal_local)` - Normal matrix transform -- `spherical_uv(p)` - Spherical UV mapping for positions -- `spherical_uv_from_dir(dir)` - Spherical UV for direction vectors -- `grid_pattern(uv)` - Procedural checkerboard pattern - -**Constants:** -- `PI = 3.14159265359` -- `TAU = 6.28318530718` - -### 2. Refactored Shaders - -#### renderer_3d.wgsl (200 → 197 lines) -- **7x spherical_uv()** - Replaced atan2/acos calculations - - Lines 143, 148, 153, 158, 163, 168, 184 - - Before: `vec2<f32>(atan2(...) / 6.28 + 0.5, acos(...) / 3.14)` - - After: `spherical_uv(q)` -- **1x transform_normal()** - Replaced mat3x3 constructor - - Line 174-175 - - Before: 3 lines (mat3x3 constructor + normalize) - - After: 1 line -- **2x grid_pattern()** - Replaced sin/smoothstep pattern - - Lines 104-106, 179-181 - - Before: 3 lines each - - After: 1 line each - -**Savings: ~12 lines removed** - -#### mesh_render.wgsl (58 → 57 lines) -- **1x transform_normal()** - Replaced mat3x3 constructor - - Line 38-39 - - Before: 3 lines - - After: 1 line - -**Savings: ~3 lines removed** - -#### skybox.wgsl (44 → 42 lines) -- **1x spherical_uv_from_dir()** - Replaced atan2/asin calculations - - Line 41-42 - - Before: 2 lines - - After: 1 line - -**Savings: ~2 lines removed** - -### 3. Registered Snippet - -Added to `src/gpu/effects/shaders.cc`: -```cpp -register_if_exists("math/common_utils", AssetId::ASSET_SHADER_MATH_COMMON_UTILS); -``` - -### 4. Updated Asset Manifest - -Added to `assets/final/demo_assets.txt`: -``` -SHADER_MATH_COMMON_UTILS, NONE, shaders/math/common_utils.wgsl, "Common Math Utils" -``` - -## Impact Analysis - -### Code Reduction -- **Duplication removed:** ~17 lines across 3 shaders -- **Common utils added:** +37 lines (1 file) -- **Net change:** +20 lines total - -### Usage Statistics -- **12 call sites** now use common utilities -- **3 shaders** refactored -- **4 utility functions** + 2 constants - -### Binary Size (estimated) -- Common utils: +400 bytes (compiled WGSL) -- Removed duplication: -600 bytes (7 spherical UV + 2 grid + 2 normal) -- **Net savings: ~200 bytes** - -Plus improved maintainability and consistency. - -### Maintainability Benefits -1. **Single source of truth** - UV/normal calculations in one place -2. **Consistent precision** - All shaders use same PI/TAU constants -3. **Easier debugging** - Fix bugs once, all shaders benefit -4. **Future-proof** - New shaders can reuse utilities immediately - -## Test Results - -✅ **All 31 tests pass** (100%) - -Including: -- ShaderComposerTest (composition logic) -- 3D renderer tests (no crashes) -- Shader compilation tests -- Full test suite - -## Files Modified - -**New:** -- `assets/final/shaders/math/common_utils.wgsl` -- `SHADER_REFACTOR_EXAMPLE.md` (design doc) -- `WGSL_REFACTOR_COMPLETE.md` (this file) - -**Modified:** -- `assets/final/shaders/renderer_3d.wgsl` -- `assets/final/shaders/mesh_render.wgsl` -- `assets/final/shaders/skybox.wgsl` -- `assets/final/demo_assets.txt` -- `src/gpu/effects/shaders.cc` - -## Next Opportunities - -### Low-Hanging Fruit -- **Light direction constant** - Appears in multiple shaders as `vec3<f32>(1.0, 1.0, 1.0)` -- **Ray-box intersection variants** - Could extract common helpers -- **Noise sampling patterns** - Consistent noise lookup utilities - -### Medium Effort -- **SDF operations** - Union, subtraction, intersection (if repeated) -- **Color grading helpers** - Tone mapping, gamma correction -- **Distance fog** - Common atmospheric effects - -### Advanced -- **Material system** - PBR lighting utilities -- **Shadow mapping helpers** - Cascaded shadow map utilities -- **Post-process chain** - Common blur/sharpen kernels - -## Design Decisions - -### Why Not Include calc_sdf_normal_bumped()? -- Too specialized - depends on `get_dist()` from scene_query -- Scene_query not always included when common_utils is -- Caused shader compilation failure (missing `get_dist` identifier) -- **Solution:** Keep bump mapping inline in shaders that need it - -### Why Separate spherical_uv() and spherical_uv_from_dir()? -- Different use cases: positions vs directions -- Different math: acos vs asin for elevation -- skybox needs direction variant, SDF rendering needs position variant -- Clearer intent in calling code - -### Why Include grid_pattern()? -- Appeared 2x in renderer_3d.wgsl (copy-paste pattern) -- Simple, self-contained (no external dependencies) -- Reusable for other procedural textures - -## Verification Commands - -```bash -# Regenerate assets -./scripts/gen_assets.sh - -# Build -cmake --build build -j4 - -# Test -cd build && ctest - -# Check shader composition -./test_shader_composer - -# Verify 3D rendering -./test_3d_render -``` - -## Commit Message - -``` -feat(shaders): Extract common WGSL utilities for better composability - -- Create math/common_utils.wgsl with 4 utility functions -- Refactor renderer_3d.wgsl (7 spherical_uv, 1 normal, 2 grid) -- Refactor mesh_render.wgsl (1 normal transform) -- Refactor skybox.wgsl (1 spherical UV) -- Register common_utils snippet in ShaderComposer - -Impact: ~200 bytes saved, 12 call sites deduplicated -Tests: 31/31 passing -``` - ---- - -**Status:** ✅ Complete - Ready for commit -**Date:** 2026-02-08 |
