godotengine / godot-proposals

Godot Improvement Proposals (GIPs)
MIT License
1.15k stars 96 forks source link

Implement single pass lighting in the Compatibility rendering method #8050

Open QbieShay opened 1 year ago

QbieShay commented 1 year ago

Describe the project you are working on

Enabling stylized games support in Godot Engine

Describe the problem or limitation you are having in your project

NPR rendering often requires to act at the end of the lighting step and perform some operations on the accumulated light. While this would be theoretically possible in vulkan, gles3 using multi pass lights makes it impossible to implement and keep compatibility with low-end renderer.

The final goal is to have all the lights be resolved in a single pass so that there can exist a post-light function.

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

Lighting in gles3 is done in a single pass

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

See above

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

No, this is the built-in shading pipeline.

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

/

Calinou commented 1 year ago

Single-pass lighting has a higher base cost and is less compatible with old low-end devices, so it should be opt-in. Godot 3.x GLES3 used single-pass lighting and it was a big reason for it being too slow to render on mobile devices at the time.

QbieShay commented 1 year ago

From what I understood the higher cost was usage of some extensions of opengl that were poorly supported on certain devices

QbieShay commented 11 months ago

Discussed at godotcon, consider removing support for omni shadow in compatibility to enable passing multiple lights in a single pass. Tbd if it's actually worth it or possible at all.

morganholly commented 11 months ago

maybe make it a setting the user can select, multi pass lights with abc not possible, or single pass lights with def not possible