forge-ibl-bake 0.1.0

Drop in an HDRI, get wgpu/Bevy-ready IBL textures. No Blender, no Substance, no C++ build.
Documentation
  • Coverage
  • 74.51%
    38 out of 51 items documented0 out of 28 items with examples
  • Size
  • Source code size: 87.98 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 731.14 kB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 3s Average build duration of successful builds.
  • all releases: 3s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • Repository
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • architect-minder

forge-ibl-bake

Drop in an HDRI, get wgpu/Bevy-ready IBL textures. No Blender, no Substance, no C++ build.

A single static binary (or library) that converts an equirectangular .hdr file into the three engine-ready IBL textures required by any PBR renderer. Outputs standard KTX2 — wgpu, Bevy, and any Vulkan/Metal/DX12 loader can consume them directly.


Features

By default, forge-ibl-bake builds as a lean, single-threaded binary. You can enable performance and format extensions via feature flags:

  • parallel — Enables multi-core bake processing powered by Rayon. Drops total bake times linearly with your CPU core count.
  • exr — Adds support for parsing OpenEXR (.exr) input files in addition to standard Radiance HDR files.

Install

To install the standard single-threaded version:

cargo install forge-ibl-bake

To install with full multi-core performance and EXR support enabled (recommended):Bashcargo install forge-ibl-bake --features parallel,exr
Requirements: Stable Rust ≥ 1.85 (edition 2024). Zero system dependencies. Cross-compiles out of the box to any Rust target.UsageBashforge-ibl-bake --input env.hdr --out ./baked/
Advanced OptionsBashforge-ibl-bake --input env.hdr --out ./baked/ \
  [--specular-size 256]     # Cubemap face px for prefiltered specular (default 256)
  [--irradiance-size 32]    # Cubemap face px for diffuse irradiance (default 32)
  [--lut-size 128]          # BRDF LUT texture dimension (default 128)
  [--samples 1024]          # Monte-Carlo samples per texel (default 1024)
  [--format ktx2]           # Output format: ktx2 (default)
  [--sh]                    # Emit SH9 JSON instead of irradiance cubemap
  [--seed 0]                # Reserved; v0 bake is fully deterministic (Hammersley)
OutputsFileDescriptionwgpu bindibl_specular.ktx2Prefiltered specular cubemap mip-chain (GGX split-sum, Karis 2013)TextureViewDimension::Cubeibl_irradiance.ktx2Diffuse irradiance cubemap (cosine-weighted convolution)TextureViewDimension::Cubeibl_brdf_lut.ktx2Split-sum BRDF integration LUT, R16G16 (DFG term)TextureViewDimension::D2If --sh is supplied, ibl_sh9.json replaces the irradiance cubemap with 9 RGB Spherical Harmonics coefficients.30-Second DemoBash# Download any HDRI from Poly Haven (e.g. kloppenheim_06_4k.hdr)
forge-ibl-bake --input kloppenheim_06_4k.hdr --out ./baked/ --specular-size 256 --samples 1024

# Load the asset directly in Bevy:
# asset_server.load::<Image>("baked/ibl_specular.ktx2")
Expected Assets & Performance:baked/ibl_specular.ktx2 (~3.1 MB)baked/ibl_irradiance.ktx2 (~24 KB)baked/ibl_brdf_lut.ktx2 (~32 KB)Total wall time: ~10 seconds on a modern multi-core CPU (compiled with --features parallel at 1024 samples).Math & MethodologySpecular Prefilter: GGX importance sampling (Karis, "Real Shading in Unreal Engine 4", SIGGRAPH 2013). Hammersley low-discrepancy sequence used for perfect determinism.Diffuse Irradiance: Cosine-weighted hemisphere convolution calculated via Hammersley sampling.BRDF LUT: Split-sum DFG pre-integration embedded with a Smith G visibility term.SH9: Real spherical harmonics ($l=0..2$) projected precisely using Fibonacci-sphere sampling.All math configurations are completely hand-written from open public references. No proprietary algorithms or opaque dependencies.LicenseDual-licensed under either MIT or Apache-2.0 at your discretion.