A little preview of the ongoing work:
Since 2.11 has some major changes to shader architecture, I had to rebuild my design.
In addition to restoring all my basic features, I gave considerable thought about how finicky and full of
fudge factors my last design was.
For the longest time, I have been unhappy about what I call the "velvet effect" on diffuse surfaces. This seems to happen
because the original design has the fresnel multiplied by the diffuse. I went to great lengths to achieve the following conditions:
1) Set a dry looking default fresnel for diffuse textures
2) Make specular fresnel match the look of the specular reflections from above
3) Don't make everything shiny ( an issue that was caused by fresnel in 1.03 due to a default minimum boost in specular to everything )
4) Avoid the velvet effect
Happily, I have achieved all the goals and then some.
How did it do it?
Like some of my earlier designs, there are two different fresnel equations for specular vs diffuse.
Diffuse has a hard-coded low power constant which spreads the effect wide over surfaces rather than being a rim effect
The specular fresnel power value is initially high but is multiplied by the specular texture causing shinier values to have tighter fresnel that looks more like specular
How did I apply the fresnel effect to diffuse without multiplying it or causing the velvet effect?
I multiplied the diffuse fresnel by 1.0 minus the specular texture ( inversion ).
This caused all the shiny areas to remain dark but brightened low or no specular areas.
This still was too foggy when added to the top of surfaces so I then also multiplied the results from
the inverted specular pass with an inverted diffuse map. This cause the effect to retain most of the diffuse features without
becoming too high contrast or causing neutral textures to glow.
Finally, probably the biggest change was that I was able to adapt one of stgatilov's changes to make the entire underside of structures darker the way it used to be in 1.03. This has a dramatic improvement to scenes like the one above.
Here are the 2.11 files ( currently requires building from SVN source ). I will attempt to back-port my improvements to the 2.10 shader a little later.
tdm_interaction.glsl
interaction.ambient.fs.glsl
Since the new dev build is out ( dev16617-10107 ) here is a pack file to place in your darkmod dev build folder:
https://www.moddb.com/mods/the-dark-mod/addons/211-alpha-dev-build-fresnel-mod
Edit:
Woo! I got the down-shading to work in 2.10:
vec4 worldN2 = normalize( params[var_DrawId].modelMatrix * vec4(N, 0) ) ;
vec3 worldL2 = vec3(0, 0, 1);
float NdotL2 = dot(worldN2.xyz, worldL2);
float downshading2 = min (( NdotL2 + 1.38 ), 1.0 ) ;
gotta cleanup the rest of the shader design and I'll post a new version.