gkjohnson / three-gpu-pathtracer

Path tracing renderer and utilities for three.js built on top of three-mesh-bvh.
https://gkjohnson.github.io/three-gpu-pathtracer/example/bundle/index.html
MIT License
1.28k stars 125 forks source link

How to handle blending buffers on ios? #468

Closed gkjohnson closed 2 months ago

gkjohnson commented 7 months ago

466 removed tiled blending due to seeming lack of support on ios. Though the float blend extension only seems to indicate that it's only for float32 targets.

gkjohnson commented 2 months ago

Relevant extensions are:

OES_texture_float_linear

Allows for linear interpolation of all available float32 targets.

~OES_texture_float~

Unneeded for WebGL2.

~OES_texture_half_float~

Unneeded for WebGL2.

EXT_color_buffer_half_float

Allows for linear interpolation of all available float16 targets.

EXT_color_buffer_float

Whether float / 16+ bit attachments are present and available to render to.

EXT_float_blend

Allows for blending the float buffers.

Path

If EXT_color_buffer_float is not available then we cannot render to float buffers - ie the pathtracer will not work.

It's possible we could make our selves independent of OES_texture_float_linear since we no longer need to linearly interpolate the floating point buffers. The env map will need floats but we can pick the one that's available to interpolate or fail.

If EXT_float_blend is not available we need to force alpha such that we use the weighted alpha blend texture even when alpha is not required.

We should allow a function for validating functionality.