| Age | Commit message (Collapse) | Author |
|
Normalize textures once in fs_main instead of in every conv function.
Keep all intermediate layers in [-1,1] range, denormalize only for final display.
Changes:
- train_cnn.py: Generator normalizes input once, keeps [-1,1] between layers
- cnn_conv*.wgsl: Remove texture normalization (already [-1,1])
- cnn_layer.wgsl: Regenerated with new normalization flow
- CNN_EFFECT.md: Updated documentation
Eliminates redundant [0,1]↔[-1,1] conversions, reducing shader complexity.
handoff(Claude): CNN normalization optimized, all tests passing (35/36).
|
|
Training script was hardcoded to generate cnn_conv3x3_* calls regardless
of actual kernel size, causing shader validation errors when layer 1 used
5×5 kernel (100 weights) but called 3×3 function (expected 36).
Changes:
- train_cnn.py: Generate correct conv function based on kernel_sizes[i]
- cnn_conv5x5.wgsl: Add cnn_conv5x5_7to4 and cnn_conv5x5_7to1 variants
- Regenerate cnn_layer.wgsl with correct function calls for [3,5,3]
- Document kernel size→function mapping in HOWTO.md
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
|
- Implement CoordConv2d custom layer accepting (x,y) patch center
- Split layer 0 weights: rgba_weights (9x mat4x4) + coord_weights (mat2x4)
- Add *_with_coord() functions to 3x3/5x5/7x7 convolution shaders
- Update training script to generate coordinate grid and export split weights
- Regenerate placeholder weights with new format
Size impact: +32B coord weights + ~100B shader code = +132B total
All 36 tests passing (100%)
handoff(Claude): CNN coordinate awareness implemented, ready for training
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
|
Implements multi-layer convolutional neural network shader for stylized
post-processing of 3D rendered scenes:
**Core Components:**
- CNNEffect: C++ effect class with single-layer rendering (expandable to multi-pass)
- Modular WGSL snippets: cnn_activation, cnn_conv3x3/5x5/7x7, cnn_weights_generated
- Placeholder identity-like weights for initial testing (to be replaced by trained weights)
**Architecture:**
- Flexible kernel sizes (3×3, 5×5, 7×7) via separate snippet files
- ShaderComposer integration (#include resolution)
- Residual connections (input + processed output)
- Supports parallel convolutions (design ready, single conv implemented)
**Size Impact:**
- ~3-4 KB shader code (snippets + main shader)
- ~2-4 KB weights (depends on network architecture when trained)
- Total: ~5-8 KB (acceptable for 64k demo)
**Testing:**
- CNNEffect added to test_demo_effects.cc
- 36/36 tests passing (100%)
**Next Steps:**
- Training script (scripts/train_cnn.py) to generate real weights
- Multi-layer rendering with ping-pong textures
- Weight quantization for size optimization
handoff(Claude): CNN effect foundation complete, ready for training integration
|