If you are not using a threshold, what do you use ? Underexposure ?
Oh okay, that makes sense.
Yeah that's the same method I was talking about. But now that you implemented that, you can look at the other github implementation (KinoBloom) to have some interesting bits added to it, like having an algorithm to compute the number of iterations depending on the radius, so that the bloom radius is independent of the resolution.
Nice, I knew it would had depth to the image, even in LDR mode.
In the HDR mode I think the headlights would have been even brighter compared to the street lamps, and the bloom would have shown it.
By the way, I don't know if that's already the case right now, but for the best results with auto-exposition, the bloom needs to use the buffer multiplied by exposure, so that the bloom is based on received camera intensity instead of "raw" luminance of this point in the world.
Nice, I hope we could see some of it sooner rather than later
Vertex lighting can be really cheap but also so hard to have perfect everywhere (unless you have a really high and constant vertex density (which never happens sadly ).
Do you have a way to manually tweak some spots for you or Eric to fix if needed ?
BTW, I just had a that rare case of weird automatic gearbox glitch, your fix worked properly
Yep, the tunnel one the outdoor is over-exposed as the camera exposed for the indoor light range.
The screeenshots in your EDIT are better but now IMO your car is overexposed compared to the environement, especially the sky in the reflection compared to the sky in the frame.
I get what you are looking to create (the pop and bright shine of the car paint in outdoor light) but is not really possible to have it without proper HDR rendering.
I don't think it is possible, as the sky doesn't have its own shader pass.
But is it really a problem ? You boosted the reflection and now you have the indoor lighting reflecting brighter than the sky, which is far from realist as the sky is at least 100 times brigher than any indoor light.
Interesting, thanks for the insight. If you can have the histogram method working on DX9 with no compute shaders, it could be interesting to see its performance. The advantage being that the current method can stay as a fallback for people those PC can't handle the histogram technique.
Correct. Well was standard for a time, I think most modern games are using the mip pyramid technique nowadays, as it has low performance impact and scales well with resolution.
Nice, I would really like to see the same blackwood video in HDR mode for comparaison.
I think HDR rendering should really be your main target (with SDR fallback of course) as with a time of day and decent light ranges, without it you'll probably have a lot of clipping.
For most PCs, having basic tonemmapper (like Reinhard or others, nice resource here) would have virtually no performance impact compared to current "Post Processing ON" if you put it in the same pass as the final frame composition (where you'd add the bloom to your framebuffer, which would be in the current PostProcess.psh)
I had this shader experiment laying on my computer for a while now, today I decided to continue it a bit and I'm satisfied with the result for now.
It's a new car shader based that started as a PBR experiment.
Quite hard to fit a nice lighting in a PS 2.0 shader. The base version was already nicer than the standard LFS shader IMO, but i found a small trick to add some pop to the shader, by computing a cheap base coat specular highlight on the vertex shader and integrating to the rest of the lighting, giving the paint that two coat look (base + clear coats).
I think there is still some margin to improve the rendering, by fixing the energy conservation between the two layers and doing more stuff on the vertex shader), I can do that if you guys are interested in it)
Screenshots (EDIT: I just realised that I took the 3 shoots with the same car colour, well played )
Comparisons in 'attached images' section (sorted like this: default LFS, base version, base + simple two coats)
Yeah it looks like baked lighting for pits and night lamp posts. I wonder if thses baked lights will have specular lighting, night would be really flat at without it.
I agree, is the auto-exposition using camera framebuffer histogram like usual or it is "hardcoded" depending on the time of day ?
Scawen, I think you really need to add bloom to your todo list if it isn't already, it would really add to the final image if you have proper HDR data. I recommend an implementation close to KinoBloom (bloom by using downsampling instead of bluring), it allow really long bloom trail with low impact on performance (I used a similar implementation on Nintendo Switch, in a production game).
Anyway, keep it up, I'm really looking forward for the final result
EDIT: It seems Vladimir_nose was thinking the same thing
So to recap what I see on this graphics update, correct me if I'm wrong (considering that some features are just experiments may never see the light of day, pun intended ) :
- HD tracks
- cascaded shadow maps
- per pixel lighting with Cook-Torrance BRDF, in pixel shader 3.0
- car headlights (with working pop ups for XR models ?)
- procedual sky (clouds and fog are the next steps I suppose, please don't forget cloud shadows )
- HDR rendering (with which tonemapper do you use btw ? )
- Automatic camera exposure (using standard screen information or some Scawen trickery ? )
- HD number plates, gauges, and UI fonts
That seems like the biggest update will have since I joined so far
Nice to see other people experimenting with shaders!
The added reflection coefficient might add some "pop" effect, but it make things emit more light in reflection than the actual frame (like in your latest screenshot), which is not physically correct. Reflection don't "pop" in LFS mainly because it's missing HDR rendering, so the sky and direct lighting are not in a correct luminance range.
BTW, the "120000000.0f" multiplier isn't really necessary, it will just create a sharp line around the car where reflection goes from OFF to ON.
The goal is to have a nice gradient to fade out reflection on the bottom half of the car, as they are not rendered.
If you want more reflection, even if they're not correct, you can remove the "saturate(env_dir.z * 120000000.0f)". This way you'll also have reflection on the bottom half of the car (it will be the same as the top half reflection, but mirrored).
BTW, I playing with the car shader, and I'm getting really limited by the 64 arithmetic instructions of shader model 2.0. Would it be possible to compile in shader model 3.0 and fallback to 2.0 if compilation failed?
I don't even know if the fallback is necessary, because looking at Steam hardware survey, 98.78% of GPUs are compatible with Shader Model 3.0 and up, as the first SM 3.0 cards arrived in 2004.
I think it's just the same skybox rotating on itself, not a proper dynamic skybox for now.
Btw Scawen, which approach do you consider for the skybox ? A procedural one (like Project CARS) or blending between real HDRI skybox (like Forza Horizon 4) ?
It's a DirectX 11+ feature, so it can't be implemented into LFS. It's a nice performance optimisation for CPU and GPU though
BTW Scawen, super sampling would be awesome (actually a render scale slider from 25% to 400%) to have even for non-VR use. I'm already using AMD's VSR for that but having it integrated into LFS would allow me to play in borderless fullscreen mode.
Since you're developing / fixing small things for this small update, may I ask something that would be really convenient for me: Having "analog steering smoothing" per controller instead of global. I frequently switch between gamepad and wheel (and sometimes both at the same time when I play in "split screen" with two instances on the same PC) so I have to change this setting each time.
I was wondering if it would be easily doable to do a unlock verification of the licence when you start the game. I think it would help newcomers when they buy a license. I'm seeing a lot of people not understanding why their game is saying "DEMO license" when they just bought S2/S3.