1
0
Fork 0

More work on ALS glass and cockpit interior

This commit is contained in:
Thorsten Renk 2015-03-16 10:47:10 +02:00
parent f4a3977127
commit 1a169d6de3
5 changed files with 60 additions and 17 deletions

View file

@ -29,6 +29,7 @@
</images>
</texture>
<glass-tint type="vec4d" n="0"> 1.0 1.0 1.0 1.0</glass-tint>
<overlay-color type="vec3d" n="0"> 1.0 1.0 1.0</overlay-color>
<splash-x><use>/environment/aircraft-effects/splash-vector-x</use></splash-x>
<splash-y><use>/environment/aircraft-effects/splash-vector-y</use></splash-y>
<splash-z><use>/environment/aircraft-effects/splash-vector-z</use></splash-z>
@ -37,7 +38,10 @@
<frost-level><use>/environment/aircraft-effects/frost-level</use></frost-level>
<fog-level><use>/environment/aircraft-effects/fog-level</use></fog-level>
<use-wipers><use>/environment/aircraft-effects/use-wipers</use></use-wipers>
<use-overlay><use>/environment/aircraft-effects/use-overlay</use></use-overlay>
<overlay-alpha><use>/environment/aircraft-effects/overlay-alpha</use></overlay-alpha>
<use-reflection type="int">0</use-reflection>
<reflection-strength type="float">1.0</reflection-strength>
<use-mask type="int">0</use-mask>
</parameters>
@ -127,6 +131,11 @@
<type>float-vec4</type>
<value><use>glass-tint</use></value>
</uniform>
<uniform>
<name>overlay_color</name>
<type>float-vec3</type>
<value><use>overlay-color</use></value>
</uniform>
<uniform>
<name>splash_x</name>
<type>float</type>
@ -207,6 +216,16 @@
<type>float</type>
<value><use>air_pollution</use></value>
</uniform>
<uniform>
<name>reflection_strength</name>
<type>float</type>
<value><use>reflection-strength</use></value>
</uniform>
<uniform>
<name>overlay_alpha</name>
<type>float</type>
<value><use>overlay-alpha</use></value>
</uniform>
<uniform>
<name>texture</name>
<type>sampler-2d</type>
@ -242,6 +261,11 @@
<type>int</type>
<value><use>use-wipers</use></value>
</uniform>
<uniform>
<name>use_overlay</name>
<type>int</type>
<value><use>use-overlay</use></value>
</uniform>
<uniform>
<name>colorMode</name>
<type>int</type>

View file

@ -458,6 +458,8 @@
<fog-level type="float" userarchive="n">0.0</fog-level>
<ground-splash-norm type="float" userarchive="n">0.0</ground-splash-norm>
<use-wipers type="int" userarchive="n">0</use-wipers>
<use-overlay type="int" userarchive="n">0</use-overlay>
<overlay-alpha type="float" userarchive="n">1.0</overlay-alpha>
</aircraft-effects>

View file

@ -7,6 +7,7 @@ varying vec3 refl_vec;
varying vec3 light_diffuse;
varying float splash_angle;
varying float Mie;
varying float ambient_fraction;
uniform sampler2D texture;
uniform sampler2D frost_texture;
@ -14,12 +15,15 @@ uniform sampler2D func_texture;
uniform samplerCube cube_texture;
uniform vec4 tint;
uniform vec3 overlay_color;
uniform float rain_norm;
uniform float ground_splash_norm;
uniform float frost_level;
uniform float fog_level;
uniform float reflection_strength;
uniform float overlay_alpha;
uniform float splash_x;
uniform float splash_y;
uniform float splash_z;
@ -28,6 +32,7 @@ uniform float osg_SimulationTime;
uniform int use_reflection;
uniform int use_mask;
uniform int use_wipers;
uniform int use_overlay;
float DotNoise2D(in vec2 coord, in float wavelength, in float fractionalMaxDotSize, in float dot_density);
float DropletNoise2D(in vec2 coord, in float wavelength, in float fractionalMaxDotSize, in float dot_density);
@ -45,17 +50,35 @@ texel *=gl_Color;
frost_texel = texture2D(frost_texture, vertPos.xy * 7.0);
func_texel = texture2D(func_texture, gl_TexCoord[0].st);
//func_texel = texture2D(func_texture, vertPos.xy * 3.0);
float noise_003m = Noise2D(vertPos.xy, 0.03);
float noise_0003m = Noise2D(vertPos.xy, 0.003);
// damage_pattern
// environment reflection
if (use_mask == 1)
vec4 reflection = textureCube(cube_texture, refl_vec);
if (use_reflection ==1)
{
texel = mix(texel, vec4(light_diffuse.rgb,1.0), func_texel.b);
// to determine whether what we see reflected is currently in light, we make the somewhat drastic
// assumption that its normal will be opposite to the glass normal
// (which is mostly truish in a normal cockpit)
float reflection_shade = ambient_fraction + (1.0-ambient_fraction) * max(0.0, dot (normalize(normal), normalize(gl_LightSource[0].position.xyz)));
texel.rgb = mix(texel.rgb, reflection.rgb, reflection_strength * reflection_shade * (1.0-Mie));
}
// overlay pattern
if ((use_mask == 1) && (use_overlay==1))
{
vec4 overlay_texel = vec4(overlay_color, overlay_alpha);
overlay_texel.rgb *= light_diffuse.rgb* (1.0 + 1.5*Mie);
overlay_texel.a *=(1.0 + 0.5* Mie);
texel = mix(texel, overlay_texel, func_texel.b * overlay_texel.a);
}
@ -65,8 +88,6 @@ float fth = (1.0-frost_level) * 0.4 + 0.3;
float fbl = 0.2 * frost_level;
float frost_factor = (fbl + (1.0-fbl)* smoothstep(fth,fth+0.2,noise_003m)) * (4.0 + 4.0* Mie);
@ -137,12 +158,7 @@ rain_factor = smoothstep(0.1,0.2, rain_factor) * (1.0 - smoothstep(0.4,1.0, rain
vec4 rainColor = vec4 (0.2,0.2, 0.2, 0.6 - 0.3 * smoothstep(1.0,2.0, splash_speed));
rainColor.rgb *= length(light_diffuse)/1.73;
// environment reflection
vec4 reflection = textureCube(cube_texture, refl_vec);
if (use_reflection ==1)
{texel.rgb = mix(texel.rgb, reflection.rgb, 0.5);}
// glass tint

View file

@ -7,6 +7,7 @@ varying vec3 light_diffuse;
varying vec3 refl_vec;
varying float splash_angle;
varying float Mie;
varying float ambient_fraction;
uniform float ground_scattering;
uniform float hazeLayerAltitude;
@ -107,7 +108,7 @@ splash_angle = dot(gl_Normal, corrected_splash);
ambient_fraction = length(light_ambient.rgb)/length(light_diffuse.rgb +light_ambient.rgb );
gl_Position = ftransform();

View file

@ -121,19 +121,20 @@ void main()
vec4 opacity = textureCube(cube_texture, lookup_vec);
vec4 diffuse = diffuse_term;
NdotL = dot(n, lightDir);
//NdotL = dot(n, (gl_ModelViewMatrix * vec4 (light_vec,0.0)).xyz);
//NdotL = dot(n, (gl_ModelViewMatrix * vec4 (light_vec,0.0)).xyz);
if (NdotL > 0.0) {
diffuse_term.rgb += 2.0 * diffuse_term.rgb * (1.0 - opacity.a);
color += diffuse_term * NdotL * opacity;
diffuse.rgb += 2.0 * diffuse.rgb * (1.0 - opacity.a);
color += diffuse * NdotL * opacity;
NdotHV = max(dot(n, halfVector), 0.0);
if (gl_FrontMaterial.shininess > 0.0)
specular.rgb = (gl_FrontMaterial.specular.rgb
* light_specular.rgb
* pow(NdotHV, gl_FrontMaterial.shininess));
}
color.a = diffuse_term.a;
color.a = diffuse.a;
// This shouldn't be necessary, but our lighting becomes very
// saturated. Clamping the color before modulating by the texture
// is closer to what the OpenGL fixed function pipeline does.
@ -148,6 +149,5 @@ void main()
gl_FragColor = fragColor;
}