RetroFed Forum
Your home away from modern life.
[Shaders, Godot] Is there a simple way to get an unshaded-but-lit look?
Post Reply
AuthorMessage
insomniac_lemon lemmy.cafe insomniac_lemon@lemmy.cafe
Joined: 2024-11-20
Quote

A scene with vertex colors. 3 low-poly badgers are on screen, each with different brightness levels due to their placement in the scene.

This is for models that use vertex colors. I want all faces with the max brightness of the object. So in daytime lighting it should look unshaded, but in a dark environment it should darken (like the thumbnail).

What I've tried:

  • using vertex_lighting* and then setting the normal directly (eg NORMAL = vec3(0.0, 1.0, 0.0);)
    • this works, but only if the lighting is perfectly overhead... a slightly wrong angle or even too far into the middle of an omnilight will create a shadow
  • attempting to save the original color value, change the normal, and then bring it the old brightness back via max() if the new value is dimmer
    • lots of moving parts/assumptions on my part here
  • other math stuff with NORMAL/VERTEX, abs() and normalize() etc
    • on top of the direction failure, there's also failure to keep consistent brightness (with a spinning animation), and darkening across a TextMesh

I also know I could do this with unshaded and just multiply/mix it in the shader, but I don't really like the idea of making a custom lighting/detection system (rather than using actual lights, that is).

I am not totally against diffuse shading, something like a vertex toon shader (2-3 brightness bands) could be interesting aesthetically. If that's even possible, it seems like the vertex light calculation is hardcoded (though it's also possible I just don't understand it).

* this is a relatively re-added feature (4.4)

1   Original
Post Reply
Back to top