{"slug": "neural-block-textures-vs-gpu-textures-like-bc7-at-equal-bitrates", "title": "Neural block textures vs. GPU textures (like BC7) at Equal Bitrates", "summary": "Developer Rich Geldreich released neural block textures, a GPU texture compression method that replaces the fixed hardware decoder with a small configurable MLP (roughly 250-1200 weights) and PVRTC1-style bilinear endpoint sampling. In a matched-bitrate test on a 1080x1080 photo at 8.0 bpp, the neural format reached 43.15 dB versus 43.78 dB for the analytical bc7f encoder and 41.03-45.59 dB across bc7e scalar levels. Geldreich reports the approach is implemented and working with CUDA training, scales easily to multi-channel PBR materials, and could plausibly be built into GPU hardware.", "body_md": "The GitHub release is \n\n[here](https://github.com/richgel999/neural_block_textures)\n.\n\nThe existing neural texture work has made the entire space overly complicated.\n\nThe first step beyond GPU textures is to essentially keep the current GPU texture-style latent, but replace the fixed hardware generative decoder with a configurable MLP, and adopt PVRTC1-like block (which is at 1/4 resolution in PVRTC1) endpoint bilinear sampling:\n\nReplace the classical GPU texture decoder (ASTC/BC1-7 etc.) with a neural net (MLP). Now you get as many output channels as needed. Then bilinear filter the \"color\" endpoints (like PVRTC1), and use a flexible (say 2-4) # of channels. \n\nI've been testing the \"colors\" latent (which is typically 2-4 channels) at 1/4, 1/6, 1/8 and 1/16 sizes relative to the texture's resolution.\n\nPer-texel \"selectors\"/\"weights\" can be unchanged: use 1 channel for single textures, 2-3 for materials. I've tested 1-5 bits per channel, with potentially a different number of bits on each channel. \n\nThe \"encoder\" is the training step which can use backprop or ES (Evolution Strategies) etc. It's amazingly flexible and looks remarkable. ES on the per-texel or lower res latents is \n\n[easily optimized](https://github.com/richgel999/neural_tex_block_compression)\n, and at this tiny MLP size it's not a big deal.\n\nEven on a single texture (not a material), the bitrate and quality is roughly competitive vs. transform methods on GPU texture latents. Except this method scales easily to materials and inference (decoding) cost is amortized across the material. The more channels the MLP outputs, the lower the effective bitrate.\n\nAround 250-1200 MLP weights seems like a good range for this method. Tiny networks. I don't see why this can't be implemented directly in GPU hardware.\n\nFor inference on load (on the CPU) this approach seems entirely reasonable, using threading and SIMD to accelerate inference. No sidebands (like NTC uses) are needed for fast full-format BC7 encoding - the math is simple, and is already solved by \n\n[bc7f](https://github.com/BinomialLLC/basis_universal/wiki/Transcoder-Internals-Analytical-Real-Time-Encoders-and-Transcoders#bc7f)\n. \n\nNone of this is theoretical - I have this working now using CUDA for training (with a CPU SIMD fallback if needed). It's exciting.\n\nSome hard numbers, comparing this neural texture design vs. BC7, are from \n\n[this X post](https://x.com/richgel999/status/2096742398093144311)\n:\n\nA single complex 1080x1080 photo, neural block texture vs. two BC7 encoders at matched 8.0 bpp bitrates (neural was 8.02, including quantized latents+all MLP weights as FP16):\n\nNeural block texture: 43.15 dB\n\nbc7f analytical: 43.78 dB\n\nbc7e_scalar level 0: 41.03 dB\n\nbc7e_scalar level 1: 44.85 dB\n\nbc7e_scalar level 2: 44.67 dB\n\nbc7e_scalar level 3: 45.18 dB\n\nbc7e_scalar level 6 (slowest): 45.59 dB\n\nNeural config: Per-texel \"selectors\" latent: 2 channels, 4+2 bits (6 bits total)\n\n1/4 resolution \"colors\" latent: 4 channels, 8-bit channels (32 bits total)\n\nMLP: 1,083 weights\n\nTraining: Quant aware, ES+CD, 8k iterations, 106 secs on a 5090\n\nThis is a sanity check: at equal very high bitrates, can this format and my trainer match a highly tuned widely deployed BC7 encoder? Yes it can, or very close. \n\nUnlike any GPU texture format, this design is highly configurable/flexible. It easily scales down to low bitrates, or scales wider to handle multi-channel PBR textures with the same latents.", "url": "https://wpnews.pro/news/neural-block-textures-vs-gpu-textures-like-bc7-at-equal-bitrates", "canonical_source": "https://richg42.blogspot.com/2026/09/neural-block-textures-vs-gpu-textures.html", "published_at": "2026-09-06 20:54:03+00:00", "updated_at": "2026-09-14 17:24:57.226705+00:00", "lang": "en", "topics": ["machine-learning", "neural-networks", "ai-research", "developer-tools", "ai-infrastructure"], "entities": ["Rich Geldreich", "bc7f", "bc7e", "BC7", "PVRTC1", "CUDA", "GitHub", "NVIDIA GeForce RTX 5090"], "alternates": {"html": "https://wpnews.pro/news/neural-block-textures-vs-gpu-textures-like-bc7-at-equal-bitrates", "markdown": "https://wpnews.pro/news/neural-block-textures-vs-gpu-textures-like-bc7-at-equal-bitrates.md", "text": "https://wpnews.pro/news/neural-block-textures-vs-gpu-textures-like-bc7-at-equal-bitrates.txt", "jsonld": "https://wpnews.pro/news/neural-block-textures-vs-gpu-textures-like-bc7-at-equal-bitrates.jsonld"}}