HDR + GT7 tracking issue
- Dominant language
- Rust
- Stars
- 48.2k
- Forks
- 4.8k
- Avg merge
- 3d 16h
- Merged PRs (30d)
- 171
Description
Building upon the HDR display & surface work that I built and shipped in wgpu v30 (https://github.com/gfx-rs/wgpu/pull/9658, https://github.com/gfx-rs/wgpu/pull/9739) I'm am working through upstreaming [my HDR implementation](https://github.com/stuartparmenter/bevy/tree/hdr-implementation) ([design](https://bevy-hdr-design.pavlov-5eb.workers.dev/hdr-design)) plus GT7 tonemapper (and the other parts that go along with the tonemapper). The starting plan involves 16 PRs split in to 5 waves (expect these to change a little). My current plan is to post PRs from one wave at a time, incorporate any feedback from the PRs back in to my full implementation, and then post the next wave.
Rough plan is:
Wave 1 · mechanical
~~1 | #25372 - Incidental render infra fixes (buffer labels)~~
~~2 | #25373 - bevy_color: LinearRec2020~~ -- deferring for longer discussion, not blocking next wave
~~2.1 | #25393 - bevy_color: primaries module~~
~~2.2 | #25394 - bevy_color: HDR-safe clamps~~
3 | #25472 - Image source-primaries metadata (KTX2 / HDR / EXR / glTF) - Needs release notes
Wave 2 · render path backbone
~~4.1 | #25478 - Add a CI screenshot run for the tonemapping example~~ -- dropped for now, mostly covered by testbed
~~4.2 | #25480 - Move Tonemapping and DebandDither to bevy_render::view~~
~~4.3 | #25499 - Make Tonemapping::None a passthrough and add Tonemapping::Linear~~
4.4 | #25544 - Run the tonemapping pass for cameras off the SDR in-shader fast path
~~5.1 | #25479 - Count sorted camera indices per render target~~
~~5.2 | #25481 - Resolve one compositing space per camera stack~~
5.3 | #25624 - Resolve camera stacks into a per-view composition contract
5.4 | #25625 - Encode UI, 2D gizmos, and FXAA for the compositing space
Wave 3 · display target & encoding
6 | #25658 - Add DisplayTarget to bevy_window and require it on Window
7 | Negotiate the window surface from DisplayTarget: surface negotiation + downgrade, WindowSurfaceTransfers, ViewDisplayTarget (after 6)
8.1 | Display-encoding pass: DisplayTargetUniform, transfer functions (Rust + WGSL), paper white scaling (after 5.3 and 7)
8.2 | Gamut compression for wide-gamut output
9.1 | #25657 - Keep float values when saving screenshots to .exr or .hdr
9.2 | HDR screenshot decode: PQ and extended sRGB readback to display-linear values (after 8.1)
9.3 | HDR PNG output
10 | Display sensing: WindowDisplayState, MonitorDisplayCapability, DisplayCalibrationPolicy, EffectiveDisplayTarget (after 7)
Wave 4 · net new features
11 | GT7 tone-mapping operator (gt7.rs / gt7.wgsl, GranTurismo7Params)
12 | GT7 glare as a bloom scatter model
13 | Physiological auto exposure + automatic white balance
14 | Rec.2020 working color space (RenderPlugin::working_color_space)
15 | AA + bloom HDR correctness (CAS, FXAA, SMAA, fp16 pyramid, threshold_nits)
Wave 5 - misc
16 | hdr_calibration example, HDR helper plugin, GPU test fixture, CI
17 | release notes
---
Wave 6 - not yet built but important follow-ons:
18 | wide gamut image rendering (using metadata from 3 above)
Contributor guide
Assessment
This issue has not been assessed yet.