réorg doc
This commit is contained in:
@@ -0,0 +1,178 @@
|
||||
# Effects: HDR, Post-process & Showcase
|
||||
|
||||
Examples covering **HDR / tone mapping** and **post-process effects**, plus
|
||||
the full showcase that combines everything.
|
||||
|
||||
| Example | Run command | What it shows |
|
||||
|---------|-------------|---------------|
|
||||
| `demo` | `cargo run -p wsg-lib --example demo` | **Full showcase**: 6 LOD primitives, 3 lights, shadows, HDR/ACES, bloom, culling, orbital camera |
|
||||
| `bloom` | `cargo run -p wsg-lib --example bloom` | Post-process bloom (glow around bright areas) |
|
||||
| `hdr` | `cargo run -p wsg-lib --example hdr` | HDR + tone mapping (ACES) + runtime exposure control |
|
||||
| `msaa` | `cargo run -p wsg-lib --example msaa` | MSAA 4× (multisample anti-aliasing, smooth edges) |
|
||||
| `fog` | `cargo run -p wsg-lib --example fog --features "all-prims"` | Distance fog (3 modes: linear, exp, exp²) |
|
||||
| `dof` | `cargo run -p wsg-lib --example dof --features "all-prims"` | Depth of field (cinematic bokeh, focus presets) |
|
||||
|
||||
> All commands run from the repo root. All effects are **opt-in** — a disabled
|
||||
> effect allocates nothing and executes nothing.
|
||||
|
||||
---
|
||||
|
||||
## `demo` — Full Showcase
|
||||
|
||||
Combines **all** effects: LOD primitives, procedural textures, lights
|
||||
(directional + point + spot), shadows, HDR/ACES, exposure, emissive, bloom, culling.
|
||||
|
||||
```sh
|
||||
cargo run -p wsg-lib --example demo
|
||||
```
|
||||
|
||||
### Keys
|
||||
|
||||
| Key | Action |
|
||||
|-----|--------|
|
||||
| Drag (LMB) | Orbit camera |
|
||||
| Wheel | Zoom |
|
||||
| `R` | Reset camera |
|
||||
| `1` / `2` / `3` | Presets: front / side / top |
|
||||
| `+` / `-` | Exposure ×1.3 / ÷1.3 |
|
||||
| `0` | Reset exposure |
|
||||
|
||||
---
|
||||
|
||||
## `bloom` — Post-process Bloom
|
||||
|
||||
Two emissive spheres (orange intensity 2.0, blue intensity 3.0) produce a
|
||||
visible halo. The cube and floor serve as reference (non-emissive).
|
||||
|
||||
Bloom is a 4-pass GPU pipeline: threshold → blur H → blur V → composite.
|
||||
|
||||
```sh
|
||||
cargo run -p wsg-lib --example bloom
|
||||
```
|
||||
|
||||
### Keys
|
||||
|
||||
| Key | Action |
|
||||
|-----|--------|
|
||||
| Drag (LMB) | Orbit camera |
|
||||
| Wheel | Zoom |
|
||||
| `R` | Reset camera |
|
||||
| `+` / `-` | **Bloom threshold** +0.1 / −0.1 |
|
||||
| `[` / `]` | **Bloom intensity** +0.1 / −0.1 |
|
||||
| `I` / `O` | **Bloom radius** +0.5 / −0.5 |
|
||||
| `E` / `Q` | Exposure ×1.3 / ÷1.3 |
|
||||
| `0` | Reset exposure |
|
||||
|
||||
### What to observe
|
||||
|
||||
- **Low threshold** (0.0): the entire image "blooms" (very diffuse effect).
|
||||
- **High threshold** (2.0+): only the bright emissive spheres produce glow.
|
||||
- **Intensity 0.0**: no visible glow (even though the threshold extracts pixels).
|
||||
- **Large radius** (10+): the glow spreads over a large area.
|
||||
|
||||
---
|
||||
|
||||
## `hdr` — HDR + Tone Mapping
|
||||
|
||||
Demonstrates HDR rendering with the ACES Filmic curve. Three objects:
|
||||
|
||||
- **Cube**: normal lighting (no emissive) — LDR reference.
|
||||
- **Bright sphere** (emissive 3.0): without HDR, it would be clamped to white.
|
||||
With ACES, highlights "roll off" smoothly toward white.
|
||||
- **Dark sphere** (emissive 0.3): stays dark even at high exposure.
|
||||
|
||||
```sh
|
||||
cargo run -p wsg-lib --example hdr
|
||||
```
|
||||
|
||||
### Keys
|
||||
|
||||
| Key | Action |
|
||||
|-----|--------|
|
||||
| Drag (LMB) | Orbit camera |
|
||||
| Wheel | Zoom |
|
||||
| `R` | Reset camera |
|
||||
| `E` | **Exposure ×1.3** (brighter) |
|
||||
| `Q` | **Exposure ÷1.3** (darker) |
|
||||
| `0` | Reset exposure to 1.0 |
|
||||
|
||||
### What to observe
|
||||
|
||||
- At exposure 1.0: the bright sphere is white but with detail (ACES rolloff).
|
||||
- At high exposure (E×E×E): the scene brightens, the bright sphere stays white
|
||||
(saturated), but the cube gains detail.
|
||||
- At low exposure (Q×Q): everything darkens, the bright sphere becomes orange
|
||||
(HDR values > 1.0 are compressed).
|
||||
|
||||
> **Note**: the tone mapper is compiled into the pipeline at build time. To
|
||||
> compare ACES vs Reinhard, change `ToneMapper::Aces` → `ToneMapper::Reinhard`
|
||||
> in the source.
|
||||
|
||||
---
|
||||
|
||||
## `msaa` — MSAA 4× (Anti-aliasing)
|
||||
|
||||
Demonstrates multisample anti-aliasing: object edges (cube, sphere) are smooth
|
||||
instead of "stair-stepped". The scene contains a cube (sharp edges), a sphere
|
||||
(curved silhouette), and a small cube near the camera (maximum aliasing).
|
||||
|
||||
```sh
|
||||
cargo run -p wsg-lib --example msaa
|
||||
```
|
||||
|
||||
### Keys
|
||||
|
||||
| Key | Action |
|
||||
|-----|--------|
|
||||
| Drag (LMB) | Orbit camera |
|
||||
| Wheel | Zoom |
|
||||
| `R` | Reset camera |
|
||||
| `M` | Show sample count |
|
||||
|
||||
### To compare with/without MSAA
|
||||
|
||||
Remove the `.with_msaa(4)` line in the source and recompile: the scene is
|
||||
identical, only the edges differ (stair-stepped vs smooth).
|
||||
|
||||
> **Note**: MSAA is a build-time setting (multisample texture allocation). It
|
||||
> works independently of HDR: with HDR, the MSAA texture is `Rgba16Float` and
|
||||
> resolves into the HDR texture before bloom/TM.
|
||||
|
||||
---
|
||||
|
||||
## `fog` — Distance Fog
|
||||
|
||||
Demonstrates the 3 fog modes: **linear**, **exponential**, **exponential²**.
|
||||
The scene contains a row of cubes receding into the distance and scattered
|
||||
spheres on a large floor plane. Fog blends objects toward a background color,
|
||||
creating the illusion of an infinite world.
|
||||
|
||||
```sh
|
||||
cargo run -p wsg-lib --example fog --features "all-prims"
|
||||
```
|
||||
|
||||
**Keys**: `1` = linear, `2` = exp, `3` = exp², `4` = off, `R` = reset.
|
||||
|
||||
> Fog is applied in the main fragment shader (after lighting, before tone
|
||||
> mapping). It uses the Euclidean distance from the fragment to the camera.
|
||||
|
||||
---
|
||||
|
||||
## `dof` — Depth of Field (Cinematic Bokeh)
|
||||
|
||||
Demonstrates depth of field blur: an object at the focus plane stays sharp
|
||||
while foreground and background blur according to their distance from the
|
||||
focus plane. Creates a natural attention effect (cinematic style).
|
||||
|
||||
The scene contains 20 cubes in a row along Z (z=3 to z=-25.5) and 5 spheres to
|
||||
the sides, on a floor plane. Focus presets at 3 m / 8 m / 15 m.
|
||||
|
||||
```sh
|
||||
cargo run -p wsg-lib --example dof --features "all-prims"
|
||||
```
|
||||
|
||||
**Keys**: `1` = cinematic, `2` = subtle, `3` = focus 3 m, `4` = focus 15 m,
|
||||
`5` = off, `R` = reset.
|
||||
|
||||
> DoF operates in linear HDR (after bloom, before tone mapping). Two passes:
|
||||
> CoC (depth → per-pixel blur radius) then 12-tap disc blur with variable radius.
|
||||
Reference in New Issue
Block a user