godotengine / godot-proposals

Godot Improvement Proposals (GIPs)
MIT License
1.12k stars 69 forks source link

Improve Default 3D Lighting & World Environment #348

Closed TokisanGames closed 2 years ago

TokisanGames commented 4 years ago

Issue Tracker

This section summarizes and tracks progress on this proposal. Detail follows.

Merged:

Pending Issues/PRs: n/a

Discussed Topics:

Minor/No Discussion:

The Issue

Describe the problem or limitation you are having in your project:

The default lighting environment is extremely unattractive. Unaware devs use the defaults, which detracts from their demos, as well as makes Godot look bad. For comparison, UE4 has a great lighting setup by default - no configuration is necessary.

These objects are white, but appear blue: white-cube

Materials look terrible by default: materials

Highlights are blown out by default, which also makes HDRIs unattractive: tone-mapper

Is this a real problem for people?

Look on facebook, twitter, youtube, or reddit for 3D demos from devs. Many of them use the default lighting and their demos look bad.

Examples. All of these have a heavy blue cast and muted colors, even if they've added a light: https://twitter.com/dalton8000/status/1208794768337190912 https://twitter.com/m4gr3d/status/1210249791017570304 https://twitter.com/nightblade99/status/1209324080907857925 https://twitter.com/skooterkurt/status/1210625650807263233 https://www.facebook.com/groups/godotengine/permalink/1764599440343309/ https://www.facebook.com/buzzmandt/posts/10216181547837595 https://www.reddit.com/r/godot/comments/eiv38x/getting_better_at_working_with_vehiclebodykinda/ https://www.reddit.com/r/godot/comments/eik633/20_days_with_godot_so_much_fun/

Further, this twitter thread was very popular and seemed to hit a nerve with people: https://twitter.com/TokisanGames/status/1210610419556999168 "it's not easy to get lighting right in Godot" "I'm really looking forward to that, the unnatural blue hue and lost contrast has been a big problem in a project I'm working on!" "I agree. The default environment make anything bluish."

Referenced tickets showing its a continuing issue:

30

https://github.com/godotengine/godot/issues/18226 https://github.com/godotengine/godot/pull/20786 (It was really bad before this, now it is only bad) https://github.com/godotengine/godot/issues/10451

Users should not have to hunt to find an obscure Sky Contribution setting just to remove the blue cast. Or even know they need a light before their materials will look good. The first brand new scene should just look good by default.

Other Template Questions

Describe how this feature / enhancement will help you overcome this problem or limitation:

Anyone can work around the issue now. However, most don't because the knowledge of how to do it takes months of using Godot and trial and error to learn how.

Describe the project you are working on: Voxel Tools demos, YT Tutorials, prototypes w/ voxels.

If this enhancement will not be used often, can it be worked around with a few lines of script?: It will be used by everyone. A script is insufficient.

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

My Proposal

Show a mock up screenshots/video or a flow diagram explaining how your proposal will work:

I made a 30 minute tutorial video showing devs how to work around all the limitations and setup a good scene. It also illustrates the issues highlighted in this proposal. TLDR - here is where the issues are demonstrated:

It would be ideal if the default environment was just set up as I show in the video. Some suggestions require code changes.

Describe implementation detail for your proposal (in code), if possible:

Here is my proposal, but these points and values are open to discussion on how best to achieve an attractive default lighting setup. I've created the settings based on a decently calibrated monitor, and comparing and tuning settings with white materials, grass/rock materials in my own prototypes, and all the materials in the 3D materials demo. This took me about 5 weeks of testing and retesting. I had to make my video 3 times as I tweaked my settings.

Once there is a consensus as to the best way forward, I can create individual issues if desired.

Tonemap * Mode: Filmic (like Blender; UE4 uses ACES, but I think it's too contrasty for a default). I can't think of any reason why we'd leave this at Linear. PR * White: 6 (at least 4, up to 16. 4-8 allows the very center of the sun to blow out, giving it the effect of a ball with a coronoa. The ball is also visible in reflections. See the white plastic in material demo.) PR

Ambient Light * Color: value 50 (128,128,128) * Energy: 3 * Sky contribution: 0.3 Edit; I no longer recommend adding ambient light as a default, especially with SDGFI. However reducing sky contribution or turning ambient light black I do recommend.

At 1, procedural sky is unnaturally blue. It appears far stronger than it is with HDRIs - maybe reduce the ProcSky scale to 1/3rd. Some HDRIs look fine at 1. So I'd either default the settings for both at 3/0.3, or reduce the internal ProcSky Sky Contrib scale down to 33-50% of what it is now, and boost energy x3, then you could leave both HDRI Sky Contrib and ProcSky Sky Contrib at 1 and 1.

Procedural Sky

Colors were chosen under filmic, based on my reference photos below. I recently took these here in the Philippines. The air has very little pollution and it's an equatorial sky, so perhaps it's the ideal reference sky. The deepest part of the sky has a hue of 219-222.

reference-sky-philippines reference-sky-boat reference-sky-clouds

PanoramaSky (HDRI/Shader)

Nice to have:

Directional Light

New Scenes

image

Sample Project & Summary

Project file Here is a sample project. Start by downloading the 3d materials demo. Then drop these files inside. Load cory_scene.tscn which should load cory_procsky_env.tres, and you can view the white cube with all the other materials.

You can also switch to cory_hdr_env.tres. But note, that all of the HDRIs included in the demo are 50% the brightness they should be. So adjust Tonemap/Exposure to 2. People should use properly exposed HDRIs, so this setting should default to 1.

Norrox commented 4 years ago

I think a change to the default one is very welcome

srcrip commented 4 years ago

I agree the default looks rather ugly and some of the changes here would be absolutely amazing defaults.

fakedeltatime commented 4 years ago

New defaults and a tutorial on good practices in the docs would be nice (I didn't see one at least).

Calinou commented 4 years ago

Shadow Color: value 60 (153,153,153)

Won't this cause shadows to not fully darken things when you use GIProbe or BakedLightmap?

TokisanGames commented 4 years ago

Shadow Color: value 60 (153,153,153)

Won't this cause shadows to not fully darken things when you use GIProbe or BakedLightmap?

I'm not sure. I didn't test these settings against GI/BL. The high Ambient Light is also likely to cause issues with GI/BL as well. My tutorial and resulting proposal was all geared toward a non GI/BL environment, since it's the default and seems to be what most people use for demos/tutorials/prototypes.

So assuming there will be an issue, what is better?

  1. To provide a good looking default environment that is set up with GI/BL? (UE4 does this and has baking lights as part of the workflow).
  2. Or to provide a good looking non-GI/BL environment. (which is Godot's current setup, except it doesn't look good.)

As far as all my settings, Shadow Color is one of the least critical. However without it, black shadows do look unusually dark in a non-GI/BL environment once materials are applied.

Calinou commented 4 years ago

As far as all my settings, Shadow Color is one of the least critical. However without it, black shadows do look unusually dark in a non-GI/BL environment once materials are applied.

Maybe that could be compensated by increasing the sky contribution with a procedural sky (while leaving it below 1)?

Either way, it's quite important to have a way to set up a good-looking GIProbe without having to tweak shadow colors. Maybe the shadow color could be adjusted automatically in areas not affected by a GIProbe…

TokisanGames commented 4 years ago

Sky Contribution makes everything blue. It's the primary thing that gives everyone the issues demonstrated here and prompted me to create this video and proprosal.

Sky Contribution is part of ambient light. My settings essentially shift the luminance from AL/sky contribution over to AL color/energy so it retains luminance but not color cast.

So yes it could be compensated by increasing ambient light color &/or energy, which lightens up both the shadows and shaded faces. However in my experience this doesn't look good. Shadow gives an object dimension, and if AL is too high, it will cause objects to look flat as they aren't shaded properly.

Since DL/Shadow Color affects only shadows and not shadowed faces, it fills in the gap by lightening up the shadows only. It's not technically correct, because mathematically the scene is only lit by a directional light, not a sky. But it's artistically correct as if the sky were lightening up shadows. AL and DL/Shadow Color are both used to provide fake bounce lighting.

I suppose we need to do more testing to see how the lights respond under a GI probe.

ghost commented 4 years ago

This is my default setting, maybe it will help

It would be a good idea to add a directional light when the 3d Scene button is pressed

Repo

davthedev commented 4 years ago

Definitely worth looking into it. Now I'm getting why all my objects look blueish with the default environment.

PLyczkowski commented 4 years ago

'These are white materials, and these object should be white' - while you do know the color theory and how light works, you don't really mention this in the video, I think this should be stated here so there is no misinformation: White materials in real life are blueish under a diffuse lighting from the sky, since the atmosphere scatters blue light more, and so the sky 'emits' blue light. You can see it in this hdr:

image

Godot's base scene setup doesn't have the sun as the light source, while having a lit unclouded sky, a scenario that does not happen in real life, which makes it look unnaturally blue.

Adding the light back in, by using a directional warm light for instance, brings the scene back to looking more natural:

image

Switching to Filmic makes it more natural still.

image

I'm guessing the developers (@reduz?) left those kinds of decisions (how to add the sun light etc) to the user, and just set up a blank canvas in default_env.

There may be a bit too much sky contribution because as you said, the warm light from the sun is not properly bounced around and mixed back in into the blueish light.

Do we even need a ground?

Procedural Sky works just like an hdr in the end, and hdr give light from all directions, including from below, to give that natural lighting.

Now, the Sun option in Procedural Sky in straight out broken as you mention in the video. The energy is far too low, and is not really helpful if it can't cast shadows.

For the defaults I would go with a bit less sky contribution, and a warm properly working sun with enough Energy, preferably that can give shadows like a directional light. Also maybe Filmic on, unless there are arguments against that.

golddotasksquestions commented 4 years ago

Do we also want a directional light added automatically by default, at the right default translation Transform, if the user creates a new scene with Procedural Sky?

Personally I would vote yes. I would also like a cube in a default new scene. Things like these are easy to delete (or to turn off in the preferences) but tedious to set up every time and complicated for the uninformed newcomer to get right.

It's always easier to return to the defaults that look good after fiddling with the settings to find out why they look good, than to tiring to make defaults that don't look good, to look right.

Zireael07 commented 4 years ago

I think I saw an issue or a comment that suggests a directional light being added automatically to 3D scenes. Extending that to having a directional light automatic with proc sky is a good idea. That way the proc sky sun doesn't have to be extended to casting shadows. BTW the only thing that dir light needs is rotation, not translation.

Calinou commented 4 years ago

@reduz said we could have a default DirectionalLight in Environment that would be removed automatically as soon as you add a DirectionalLight node to the scene. Its angle could match the sun angle automatically when using a ProceduralSky. This way, you can get good-looking lighting out of the box without having to add a node to every scene.

Edit: This was implemented as the Preview Sun and Sky functionality.

Zireael07 commented 4 years ago

Aaa, my bad. Still, an extremely good idea.

Two-Tone commented 4 years ago

I really like that idea, but it may seem unintuitive to new users to have a node/light source disappear when you manually add one in for the first time.

On Sat, Jan 4, 2020 at 10:46 AM Zireael07 notifications@github.com wrote:

Aaa, my bad. Still, an extremely good idea.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/godotengine/godot-proposals/issues/348?email_source=notifications&email_token=ABBEIS2SJUXAE3EVRL242ADQ4C4NLA5CNFSM4KCONBH2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEIC3ROA#issuecomment-570800312, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABBEIS7XMJIV6P24FO6BQX3Q4C4NLANCNFSM4KCONBHQ .

Calinou commented 4 years ago

@Two-Tone Maybe we could have the DirectionalLight node display a configuration warning when it's newly added. This could be done by checking for its property values and checking whether they all match the default – it's very unlikely that you'll use a DirectionalLight that points straight towards a wall.

While we're at it, we could also make DirectionalLight point straight down when it's newly added. However, there's a slight chance you may actually use this direction in a real project, so this would conflict with the aforementioned warning.

ghost commented 4 years ago

I think the least confusing is to add a "3d Scene With Lighting" button, just like "3D Scene" but with a directional light set as sun.

Calinou commented 4 years ago

@Simiopsis The issue is that if someone instances such a scene into another scene, they'll end up with multiple directional lights. This may not be obvious to a beginner, especially if the directional lights have the same angle.

golddotasksquestions commented 4 years ago

@Calinou I think what @Simiopsis means to have an additional button next to 3D Scene: 3D_scene_with_lighting

Calinou commented 4 years ago

@golddotasksquestions I understood that, but the concern I raised still stands :slightly_smiling_face:

golddotasksquestions commented 4 years ago

Can you explain why? I would assume if someone intentionally creates a scene with Lights, instead the basic one without, they would delete the directional light once they instance that particular scene into another, or not click the button in the first place.

ghost commented 4 years ago

The simplest thing that comes to mind is the following.

Calinou commented 4 years ago

Pressing 3D Scene adds a directional light marked as editor only.

This means you lose the advantages of the default light when you run the project. Moreover, this will also confuse a lot of people out there :slightly_frowning_face:

We had an editor-only default light in Godot 2.x; many people wondered why the running project was darker compared to the view in the editor.

ghost commented 4 years ago

@Calinou I think what @reduz mentions is more appropriate, but instead of destroying the directional light by adding another, the directional light generated by the world environment must be able to be configured in the world environment, allowing this light to be activated and deactivated.

for example

Sunlight

Enabled: this bool would generate the light and destroy it.

On: just turn the light on and off.

PLyczkowski commented 4 years ago

I would go with fixing Procedural Sky so that it's sun can give light like a directional light, like proper hdr's do, and adding a Shadow option to the Sun, that can work like a shadow from a directional light placed at the Suns angle.

This makes everything work like before, no extra objects added, but sun and shadow can be set in the default_env then.

TokisanGames commented 4 years ago

I have updated the top of the proposal with an issue tracker as there are a lot of threads here. I'll provide my responses on separate messages so people can thumbs up or down on individual ideas.

@Calinou I'm still going to get back to you on GI + Shadow color. @Eko7 I'll get back to you after looking at your repo as well.

ProceduralSky Ground

@tinmanjuggernaut: Decouple the ground energy from shadows and shaded faces on objects.

@PLyczkowski: Procedural Sky works just like an hdr in the end, and hdr give light from all directions, including from below, to give that natural lighting.

I played with it more, rotated my cube, and I get it now. It's a little odd because the light is not occluded by other objects. But I think the biggest problem is that Sky Contribution is so strong that it didn't appear to behave like HDRIs. When SC is reduced it doesn't seem as odd. Ok, no need to do anything here. I have removed this point.

Do we even need a ground?

However, this is still an open question. IMO, having an HDRI/ProcSky ground is ugly and something most devs would try to hide in their games. UE4 devs apparently agree since they have only sky below the horizon.

I discuss having no ground in my video and show examples with an HDRI 14:29 and ProcSky 19:37.

What do you guys think about hiding the ground by default as per my settings? Thumbs up for yay (ground colors=sky horizon color), down for nay (no change).

clayjohn commented 4 years ago

Regarding the blue tint of the white objects see this tweet: https://twitter.com/matkovskid/status/1214561009794347009?s=20

In nature, shaded objects appear very blue, due to the sky accounting for most of their light. Whereas it is only within direct sunlight that they appear their proper color. Similarly here, when a direct light is applied, whites appear properly white.

TokisanGames commented 4 years ago

Color of Included Directional Light

@PLyczkowski suggested including a warm directional light. In my video I brought up this point as not recommended.

To you and and @Calinou, there's no disagreement that the sky casts blue light on objects and that the sun is yellow in real life. But in photography, we white balance for the primary light.

If we were in a GI environment, light bounces around and does all sorts of different stuff from hard to soft shadows, lighter blues as it mixes with sunlight, to stronger blues as it is farther away from bounced sun.

This shot is raytraced from blender. The portion of the cube reflecting direct sunlight is white (since the HDRI is properly white balanced), while everything else is mostly lit from the sky and is blue. Still, this is not a good environment for working with materials because it's so blue. It would be better to have a shot from midday, or even better, a cloudy sky or white studio lighting so you can see what your materials truly look like. image

In our default, non-GI world, none of this fancy light stuff happens. Lights and shadows are loose approximations with harsh distinctions. IMO, this does not look attractive. It's not white balanced. The blue shadows are too strong, the yellow makes white look jaundiced. Both will have a negative impact when working on materials as you'll over correct your colors since your camera does not appear white balanced. Bbut it's not the camera, it's the light. image

For individual scenes, devs can obviously color grade or setup artistic colored lights (such as sunrise/sunset/fire) as they see fit.

But for a univeral, godot default lighting environment, I strongly recommend that we provide a properly white balanced setup with as neutral lighting as possible.

That means a white primary light, with a very subtle sky contribution. 0.3 puts ProcSky influence intensity on par with HDRIs.

Unless you guys want to go with GI on by default, then by all means we can match real life. But we still need white balance.

Do you agree we should have a white default light? Thumbs up for yay, thumbs down for a warm light.

TokisanGames commented 4 years ago

New Scene discussion

Overall, I'm not partial as to how this gets implemented. Any of the ideas I and others have floated can work. I just think it's very important for new people that the aspects that make up the initial scene are readily accessible, as they aren't now.

PLyczkowski commented 4 years ago

Yeah, white default main light seems the way to go then. Also thanks, I learned some things from your posts and the video.

TokisanGames commented 4 years ago

Shadow Color: value 60 (153,153,153)

Won't this cause shadows to not fully darken things when you use GIProbe or BakedLightmap?

@Calinou I had a chance to look at these settings under GI.

This image shows the GI probe on the left, and non-GI on right. The dark strip is the border of the GI probe. I just added the node, baked it, and ran the demo.

image

The shadow color looks fine to me. The GI lighting is a little hot, so I'd probably reduce Ambient Light Energy down to 1 if anything. But it's within the realm of acceptability.

Here's with a black shadow color. Hardly any difference in GI, but a huge difference for non-GI.

image

Also if I turn off the directional light, then the GI environment looks as terrible as the original setup.

TokisanGames commented 4 years ago

@Ekho7

This is my default setting, maybe it will help Repo

Thanks for this, I checked it out. These are attractive scenes for sure. For your repo, here's my feedback:

As for whether the other settings are right for Godot defaults, I think this is a reasonable alternative, but I still recommend against colored lights as I did above. Your materials here look light brown and dark brown, and blue in the shadows. But they are actually white and grey. The GI on the rightlooks OK, but the non-GI on the left has a lot of extra color.

image

This could be a lovely setup for a game. But I maintain the opinion that the default environment should be:

Then from there, they can take their lighting into artistic realms once they're ready to learn about the lighting tools available.

ghost commented 4 years ago

@tinmanjuggernaut I have improved the configuration a bit. but I'm not sure with the sun, I gave a configuration similar to Henyeygreenstein a g value = 0.85. - 0.90

Edit: the zenith of the sky in real life is a bit darker, but the procedural sky has only 2 colors.

nikhilCad commented 4 years ago

I think this should be fixed before Godot 4.0 is released as that release aims to improve the rendering, and seeing the current default lighting does not give a good first impression.

jasperbrooks79 commented 4 years ago

I have another suggestion, maybe make it so, under default conditions, if you import a flat ground plane texture, from MS Paint, that the pixel colors match 100 %, right now when I import a flat ground that is green ( 134 green in MS Paint ), sampling the texture with a screenshot, it is 124, in Godot . . It would be nice if the textures one makes in paint programs by default were color matched, so a 134 value green in MS Paint ( any program ) is 134 on a flat plane, with that texture, in Godot . . <3 Maybe it's been mentioned, it would help artists a lot, and wouldn't get in the way, of coders, programmers . . .

Calinou commented 4 years ago

@jasperbrooks79 If you want that to happen, you need to enable the Unshaded flag on the mesh's SpatialMaterial. I don't think 1:1 color mapping should be a goal for the default environment settings.

jasperbrooks79 commented 4 years ago

No, I want it to have shadows, but in the default layout, a flat plane, with a texture, should be a direct match . . but, if there are added like a directional sun, so on, it should change, so it becomes as it should look . . Maybe that's dumb, it's nice when what one does makes sense . . I mean, if you put a rock on it, there should be a darker shadow, from the rock, I don't mean no shading, but a 1-to-1 continuity, on a flat texture, in default view mode, opening Godot . .

TokisanGames commented 4 years ago

@jasperbrooks79 Accurate color fidelity of materials in the default setup is already a primary component of this proposal and discussion. That's achieved through defaults that provide a pure white light and a background that doesn't influence the colors. You don't need this proposal to achieve it now, just follow my tutorial video linked in the first post.

However, you cannot compare a texture map to a rendered image and expect colors to match 1:1. If you want to verify your texture is read accurately, then load the texture map in the Godot inspector and compare it with your paint program. Those should match. If not then either your import settings are wrong, or you've found a bug which can be reported in the main repo.

Once you put a texture in a rendered environment, the colors are going to change due to the way the light, camera, renderer, background, and environment impact it. It's your job as a 3D artist to learn about all of those settings and configure them for the best possible art.

jasperbrooks79 commented 4 years ago

I've seen your video, you're a god, you're right, I will master Godot settings, instead of asking for easy things . . I hope your proposal gets accepted, we need a better standard set-up, in Godot, for lighting, it's crazy . . . ;)

Maybe the devs knew the sky is part of color, naturally, it was probably physically accurate, but it's a problem that the game can't make a ' white color ' as it should, right now, everything is blue, tinted, no matter what under standard settings, it is difficult, for noobs, has taken me three months to find the correct tutorial, now it pops, just set Sky contribution to zero, and filmic space, like you say <3 :D Godot devs will fix this, noobs need it, even if it is more ' scientifically ' correct to include sky contributions, or they could make it white, so we can have white objects, right away <3 :D Can't wait, good proposal <3 The engine should be good for making games, textures, graphics, not physically accurate when it works against game makers, even if it is probably the CORRECT way, to simulate a sky, in real world . . We need the colors to match, as much as possible . . <3 :D

Saw your tutorial, made this sky-box, looks like heaven . . <3

2020-03-03 0405 2020-03-03 0400

You have made the BEST suggestions, are an EXPERT, please Godot, listen, and fix this <3

TokisanGames commented 4 years ago

@clayjohn Has been doing some incredible work on sky shaders for Godot 4 here: https://github.com/godotengine/godot/pull/37179

nezvers commented 4 years ago

If Vulcan is not going to work for html5 and mobiles, then we need better defaults for GLES2. I've been trying for hours and it still looks weird and procedural sky doesn't affect box shades differently too.

clayjohn commented 4 years ago

@tinmanjuggernaut and others interested. I would just like to summarize what I am seeing arising from this post and what I think are the most important things to implement in time for 4.0.

First off, with the recent addition of Sky Shaders, many of the above points are no longer relevant as some of the restrictions of the ProceduralSky have been lifted. Most notably, the Sun(s) in the ProceduralSky now take their properties from the DirectionalLight(s) in the scene. So shadows now line up with the sky fine.

The two highest priority issues I see discussed here are the awkward colors of the default sky, and the lack of DirectionalLight in default scenes.

Awkward sky colors

I tweaked the default sky colors when adding Sky Shaders, however, it is difficult to balance a HDR/Vulkan workflow with a non-HDR/GLES2 workflow. The default settings should work well for both. So currently (and in 3.2) the ProceduralSky generates a sky of LDR values resulting in way too much blue color. In real life the brightness of the sun more than makes up for the blue of the sky.

Regarding the ground, I personally like the look of having the sky continue all around. The issue with that is that the sky is used for radiance reflections. So if sky went all the way around, objects would reflect the sky even on the bottoms and it would look awkward. The best approach is to set ground color the same as the ground in your level so that radiance reflections look approximately okay.

Default DirectionalLight

Adding a DirectionalLight to every new scene is out of the question because of the scenes-as-nodes structure of Godot.

One other option is to have a "Sun" property in the Sky/Environment that is treated as another DirectionalLight under the hood.

The solution reduz prefers (and we will likely go ahead with) is having a default DirectionalLight in the editor. This will go along with reworking the default environment. The editor will provide a default environment and a default DirectionalLight. If a WorldEnvironment or a DirectionalLight is added, then the corresponding default will go away. There will also be a button in the UI to add the environment to the scene as nodes if you want (so that you can tweak them).

In my opinion, these two changes should be enough to address most issues. The default DirectionalLight on its own should address the issues users have with over-blue environments as the light will wash out the blueness. (I also expect many users will choose to use the PhysicalSky, which suffers from being whiter than the real sky 😛, so problem may solve itself)

Other defaults

Default GIProbe and tonemapping

This won't work on GLES2 and so won't be included as defaults

Ambient settings

Personally, I am uncomfortable moving away from the PBR workflow for default settings. IMO our default should stick to a full PBR workflow and then allow users to tweak away from it in there personal projects. I think having a good sky with a proper luminance balance will remove the need to tweak the ambient lighting sky contribution.

jasperbrooks79 commented 4 years ago

Okay, you are all very smart, I guess it won't be fixed until Godot 4.0, then the new sun and sky setup will fix it, but I do wish the ' skycontribution ' was set to zero, for Ambient Light in the default environment file made, simply because the engine looks prettier, and if one wants a bluish light on everything, it could just be set, people looking for that would know they needed to change it themselves, but for a new user, figuring this out is just trouble . . It took me 6 months, almost, and I had to google around for it, heard in a video tutorial by accident, someone told me how to change it there, but it was an accident . . . It made no sense, also yea . . . I think everyone would benefit from the default skycontribution to zero, as far as I can see it doesn't change the looks of the standard viewport, at least in my simple games . . . But, I don't know . . . . :( <3

jasperbrooks79 commented 4 years ago

All that time I thought I was making a mistake, importing things wrong, or using the engine wrong, at least for new users this is confusing, and people looking for a red color, or blue color on everything can just set the sun color to ' blue ', or ' green ', that makes more sense, if not strictly in 100 % PBR world, I guess . . . Thanks, my two cents, nothing more . .

aaronfranke commented 4 years ago

For situations like the first image in the OP, perhaps the sky itself shouldn't be blue unless there is also a sun. The blue light coming from the sky only looks natural if you have a DirectionalLight for a sun.

This would be equivalent to overcast weather in real life, where the sky is covered with clouds and the sun is not visible, but the environment is still well lit. In overcast weather, the sky being covered in clouds makes the ambient skylight a white color.

aaronfranke commented 3 years ago

@tinmanjuggernaut https://github.com/godotengine/godot/pull/46315 should significantly help with this issue. Would you mind testing the latest master and looking over everything here to figure out what's still relevant / what issues still exist?

jasperbrooks79 commented 3 years ago

When Godot 4 is alpha realized, I will start use it and, report major or, severe bugs I find and, give some feed-back . .

I know you want short, precise replices, to not waste time <3

I learn, from past, and write nicer bug reports, proposals, more 'realistic' Thanks . . :O :O <3 . .

ps. When's Godot 4 . .

TokisanGames commented 3 years ago

@aaronfranke I will review it this weekend.

TokisanGames commented 3 years ago

Per @aaronfranke 's request, I'm reviewing the progress on the master branch in regards to default lighting.

Let's review the purposes for this proposal:

  1. Provide reasonably good default lighting for blank and outdoor scenes. Good being defined by photographic and artistic standards.
  2. Make lighting and environments easier to manage for new people.
  3. Maintain control over the environment for experienced people.

Regarding 2, The new buttons for lights and environment, are simple to use and a big improvement over 3.2. Barring bugs and default settings, I think the functionality will clear up a lot of confusion for new people.

Regarding 1, Aside from defaulting to filmic, it doesn't appear that any of my recommendations were incorporated. So now let us review the default lighting environments.

Sun and Sky

In the image below I have included these photos, left to right:

  1. Reference photo
  2. Default ProceduralSky, Editor default
  3. Default PhysicalSky
  4. My settings for the ProceduralSky
  5. My settings for the PhysicalSky

image

Thoughts:

Horizon

  1. Reference
  2. Default ProceduralSky
  3. My ProceduralSky
  4. Default PhysicalSky
  5. My PhysicalSky

image

Thoughts:

Sample Scene

Finally, lets' look at a scene under various lighting conditions. The box has no material, so is pure white. The prisms are pure red, green, and blue. The ring is gold metal, and looks terrible in all of these samples. I think the problem is that reflection probes didn't work at all, and the sky is too plain to accurately show good reflective metal. It might look better under a more full scene or an HDRI, and working reflections.

Pure white studio lights

We'll start with the scene under a pure white sky and lights, and perfect white-balance. This is what it would look like if I took a picture on a cloudy day. Under this lighting, the top of the box becomes a light, pure grey (228, 228, 228). The shadows are soft and well illuminated. I added SSAO and a direct light to more accurately represent what reality would look like. The light gives hotspots on the gold ring, which would not be there.

image

Default settings / Procedural Sky

With the default settings, the scene looks OK. There is a blue cast still. It's better than 3.2 because of the default light, but its still blue. If you take the white box into photoshop you'll see the color is (217,226,235). Compare with the above picture you'll see the white parts of the fox are bluish, and the red prism, gold ring, and grass have a bluish tint. The back end of the fox looks greennish. The gold ring is very odd. I can't accurately create materials under these lighting conditions. They would likely come out too yellow if moved to different lighting. I would have to create a studio with pure white light in order to work on materials.

Bottom line: While the default lighting is ok though a little blue, the sky is unattractive, and the two are connected as we shall see.

image

My Procedural Sky

Using my proc sky, the sky becomes more realistic, but now the scene lighting is no good. You can see that the shadow side of the box and under the fox are too dark and too blue. Even if I enable GI, as it is in this picture it doesn't help. The only material difference with GI is the gold light reflecting on the fox's chest and in the ring's shadows.

image

In order to have an attractive sky and have good lighting, I would have to add another light source or ambient light to fix it. Enabling SDGFI does help illuminate the shadows, but it's still too blue and offers no control over the color.

Instead here I use ambient light to brighten the shadows and leave them just slightly blue. This is more realistic to what you would see if you were actually there. Can you see it? Can you imagine seeing the previous picture in real life? You'd only see the above with a cheap digital camera with low dynamic range. Your eye has a lot of dynamic range and below is what it would see.

image

Default Physical Sky

The default physical sky scene lighting is ok, though it is a little dark. Blue tint is subtle and fine. Here I've added GI for the ring to look somewhat normal, it looks washed out without. Again, the only material difference is a little reflective gold light shines on the fox's chest, the ring's shadow on the box, and in the nearby grass. Comparing closely with studio lighting, I would say that the color fidelity is pretty close to what it should be. The sky itself is unattractive, and again the lighting and sky appearance are connected as we shall see.

image

My Physical Sky

If I adjust the sky to look normal, then we reveal negative side-effect 2. The shadows are extremely blue and have the odd color from the horizon. The only way I have found to fix this is with ambient light. In that scenario the picture looks a lot like the one above with ambient light.

image

So, in conclusion I would say the current state does not provide reasonably good looking defaults, failing objective 1. The new functionality meets objective 2 very well. And for objective 3, while all of the old functionality is maintained, some of the new options (PhysicalSky, SDGFI) don't provide enough control.

While the default ProceduralSky lighting on the scene is OK, the bluish cast is still a problem for accurate materials. The default sun and skies are unattractive on both P*Skies, and if you correct those settings, it destroys the lighting.

@clayjohn expressed a desire to maintain a PBR workflow. Unfortunately, I do not see how to achieve a realistic looking sky, with realistic looking scene lighting, without cheating with ambient light. I'm not concerned about the math, only about the look. If it can be done using PBR only, but I can't figure it out, it's way too hard for a new person. However, if someone can do it, then those should be the defaults.

Edit: Regarding my default recommendations, though the sky colors remain the same, the values for ambient light have changed slightly in the new setup. Perhaps an ambient light of #878e9c w/ sky/energy @ 1. Directional light energy @ 2 and a color of white or very soft yellow. I didn't do anything with direct light shadow color as before.

TokisanGames commented 3 years ago

Bugs:

The white one is a very good environment with beautiful scene lighting. It should be the default. Or as I suggested before, have templates which include a studio setup like this one, and a good looking blue sky as I made above.

PanoramaSky

Regarding using HDRIs, here I used the same image as before. I bumped the tonemap whitepoint to 6 so the sun didn't blow out, and boosted my directLight to 3. No ambient light.

This is the only image where the gold actually looks good. No GI, no reflection probes. The skycontribution property appears to be missing so I can no longer control it. Even without that setting, this is the only lighting setup I would use in Godot 4 right now. I would create an HDR with sun, sky, and clouds and no ground as I did in my tutorial video. This is far easier to get accurate results, rather than using either of the procedural skies. Metalic reflection (roughness) looks amazing here. Roughness under procedural skies are broken in 3.2 and if my above tests are any indication it doesn't appear to have been fixed in 4 yet.

image