Skip to content

Implement a bounding-box/volume-based approach for local environments and post-processing #4466

@PrecisionRender

Description

@PrecisionRender

Describe the project you are working on

A 3D project that has multiple different themed areas.

Describe the problem or limitation you are having in your project

The WorldEnvironment node and resource are global, to the entire scene. There is no way to set up a smaller area (e.g. inside a volcano) to have a different post processing setup to the rest of the scene.

Describe the feature / enhancement and how it helps to overcome the problem or limitation

Most game engines, like Unity and UE5, use a volume-based approach, where one can specify post processing settings inside of an AABB, that can modify a predefined area's post processing effects. Example:

World has XY as global ambient light

Smaller volume has WZ as local ambient light inside of predefined area

Describe how your proposal will work, with code, pseudo-code, mock-ups, and/or diagrams

Instead of a WorldEnvirinment node, there would be an EnvironmentVolume node, where one could specify the post processing effects that are active inside of the area. Or, one can turn off an option such as "Is Bounded" so that the EnvironmentVolume node acts as a WorldEnvironment node. Then one can put more EnvironmentVolume nodes into the Scene where one needs different post processing.

UE_1.mp4

Here is an example of a global post-process volume (left) and a local post-process volume (right).

If this enhancement will not be used often, can it be worked around with a few lines of script?

No, this system requires quite deep knowledge on how environments are rendered, and the code required to blend between them is quite complex.
Plus, having such a node built-in allows the ability for one to move the viewport camera into an EnvironmentVolume area and examine its effects in the editor, whereas if such a tool was scripted, post processing areas could only be examined at runtime, by changing WorldEnvironments dynamically through code.

And something that can't be easily achieved through GDScript or even GDExtension is having a proper fade between areas, so as not to have a sharp "pop" between different visual effects.

Is there a reason why this should be core and not an add-on in the asset library?

See above.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions