appleseedhq / appleseed

A modern open source rendering engine for animation and visual effects
https://appleseedhq.net/
MIT License
2.19k stars 329 forks source link

Add Bloom post-processing stage #2875

Closed laurelkeys closed 3 years ago

laurelkeys commented 4 years ago

Added Bloom as a new post-processing stage. Its 5 parameters are:

Main changes:

The implementation is pretty similar to Keijiro Takahashi's KinoBloom (used in EEVEE) and to Unity's Post-Processing Bloom.

However, instead of using the sampling filters from Jorge Jimenez's SIGGRAPH2014 presentation, it is based on Marius Bjørge's "Bandwidth-Efficient Rendering" presentation from SIGGRAPH2015 (and also, it is not implemented with shaders).

oktomus commented 4 years ago

iterations: number of downsampling iterations used for blurring, which indirectly controls the spread distance / radius

For the user, it makes more sense to expose the distance or radius parameter.

threshold: filters out pixels under this level of brightness soft_threshold: makes the trasition between under/over-threshold gradual (0 = hard, 1 = soft)

Maybe you can find a way to expose only one parameter for the threshold instead of 2 ? Or call one of them differently ? I think Unity calls it "soft knee"

laurelkeys commented 4 years ago

Maybe you can find a way to expose only one parameter for the threshold instead of 2 ? Or call one of them differently ? I think Unity calls it "soft knee"

I used threshold instead of knee as I thought that'd make its purpose clearer (i.e. to soften the threshold, so 0 is a harsh boundary and 1 is a "soft" one), since using knee refers to shape of the function that is used for thresholding: WZlkyidpry

However, it may be better to use soft knee so it's more familiar, Unity uses that (as you mentioned) and Blender calls it knee (GIMP calls if softness, btw). What do you think?

oktomus commented 4 years ago

However, it may be better to use soft knee so it's more familiar, Unity uses that (as you mentioned) and Blender calls it knee (GIMP calls if softness, btw). What do you think?

I think the less parameter we have, the better it is. And if we can use something that is already established by the community, it's also better.

oktomus commented 4 years ago

I have tested the bloom build you provided.

First of all, thanks for sharing a build, it really makes reviewing/testing easier.


I have encountered python issues with your build. But it's not related to your work and not a problem for testing. Although it's worth saying, as it may be related to your build. There is module import errors in the python console where opening appleseed.studio.


The bloom post process works well, good job !

In order to be able to use that post process, I think we need some kind of changes to see the post process effect interactively. A first step could be to add a button somewhere that render the post process without rendering the whole scene. Maybe in Rendering > Render post process. A better way to do this would be to run post process when releasing a slider in the post process editor window. That would be perfect. What do you think @dictoon ? This could be done in a separate PR.

Regarding performance, it takes around 6seconds on a 4K frame on my 6-core 4Ghz AMD Processor, which I is too slow. But improvements can be made in a future work.