Add the possibility to use shadow mapping on model-interior
This commit is contained in:
parent
d2e5ad9d60
commit
7c16104149
7 changed files with 139 additions and 9 deletions
|
@ -103,10 +103,12 @@
|
||||||
</vertex-program-two-side>
|
</vertex-program-two-side>
|
||||||
<program>
|
<program>
|
||||||
<vertex-shader>Shaders/model-interior-ALS-detailed.vert</vertex-shader>
|
<vertex-shader>Shaders/model-interior-ALS-detailed.vert</vertex-shader>
|
||||||
|
<vertex-shader>Shaders/shadows-include.vert</vertex-shader>
|
||||||
<fragment-shader>Shaders/model-interior-display-ALS.frag</fragment-shader>
|
<fragment-shader>Shaders/model-interior-display-ALS.frag</fragment-shader>
|
||||||
<fragment-shader>Shaders/secondary_lights.frag</fragment-shader>
|
<fragment-shader>Shaders/secondary_lights.frag</fragment-shader>
|
||||||
<fragment-shader>Shaders/noise.frag</fragment-shader>
|
<fragment-shader>Shaders/noise.frag</fragment-shader>
|
||||||
<fragment-shader>Shaders/filters-ALS.frag</fragment-shader>
|
<fragment-shader>Shaders/filters-ALS.frag</fragment-shader>
|
||||||
|
<fragment-shader>Shaders/shadows-include.frag</fragment-shader>
|
||||||
</program>
|
</program>
|
||||||
<uniform>
|
<uniform>
|
||||||
<name>visibility</name>
|
<name>visibility</name>
|
||||||
|
@ -439,6 +441,34 @@
|
||||||
<type>int</type>
|
<type>int</type>
|
||||||
<value><use>grain-texture-enabled</use></value>
|
<value><use>grain-texture-enabled</use></value>
|
||||||
</uniform>
|
</uniform>
|
||||||
|
<!-- BEGIN shadows include -->
|
||||||
|
<uniform>
|
||||||
|
<name>shadow_tex</name>
|
||||||
|
<type>sampler-2d</type>
|
||||||
|
<value type="int">10</value>
|
||||||
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>shadows_enabled</name>
|
||||||
|
<type>bool</type>
|
||||||
|
<value>
|
||||||
|
<use>shadows_enabled</use>
|
||||||
|
</value>
|
||||||
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>sun_atlas_size</name>
|
||||||
|
<type>int</type>
|
||||||
|
<value>
|
||||||
|
<use>sun_atlas_size</use>
|
||||||
|
</value>
|
||||||
|
</uniform>
|
||||||
|
<!-- END shadows include -->
|
||||||
|
<uniform>
|
||||||
|
<name>shadow_mapping_enabled</name>
|
||||||
|
<type>bool</type>
|
||||||
|
<value>
|
||||||
|
<use>shadow-mapping-enabled</use>
|
||||||
|
</value>
|
||||||
|
</uniform>
|
||||||
</pass>
|
</pass>
|
||||||
</technique>
|
</technique>
|
||||||
|
|
||||||
|
|
|
@ -64,6 +64,7 @@
|
||||||
<residual-ambience-b type="float">0.0</residual-ambience-b>
|
<residual-ambience-b type="float">0.0</residual-ambience-b>
|
||||||
<ra-irradiance-map-type type="int">0</ra-irradiance-map-type>
|
<ra-irradiance-map-type type="int">0</ra-irradiance-map-type>
|
||||||
<ra-irradiance-map-strength type="float">0.0</ra-irradiance-map-strength>
|
<ra-irradiance-map-strength type="float">0.0</ra-irradiance-map-strength>
|
||||||
|
<shadow-mapping-enabled type="bool">false</shadow-mapping-enabled>
|
||||||
</parameters>
|
</parameters>
|
||||||
|
|
||||||
<technique n="3">
|
<technique n="3">
|
||||||
|
@ -141,10 +142,12 @@
|
||||||
</vertex-program-two-side>
|
</vertex-program-two-side>
|
||||||
<program>
|
<program>
|
||||||
<vertex-shader>Shaders/model-interior-ALS-detailed.vert</vertex-shader>
|
<vertex-shader>Shaders/model-interior-ALS-detailed.vert</vertex-shader>
|
||||||
|
<vertex-shader>Shaders/shadows-include.vert</vertex-shader>
|
||||||
<fragment-shader>Shaders/model-interior-ALS-detailed.frag</fragment-shader>
|
<fragment-shader>Shaders/model-interior-ALS-detailed.frag</fragment-shader>
|
||||||
<fragment-shader>Shaders/secondary_lights.frag</fragment-shader>
|
<fragment-shader>Shaders/secondary_lights.frag</fragment-shader>
|
||||||
<fragment-shader>Shaders/noise.frag</fragment-shader>
|
<fragment-shader>Shaders/noise.frag</fragment-shader>
|
||||||
<fragment-shader>Shaders/filters-ALS.frag</fragment-shader>
|
<fragment-shader>Shaders/filters-ALS.frag</fragment-shader>
|
||||||
|
<fragment-shader>Shaders/shadows-include.frag</fragment-shader>
|
||||||
</program>
|
</program>
|
||||||
<uniform>
|
<uniform>
|
||||||
<name>visibility</name>
|
<name>visibility</name>
|
||||||
|
@ -467,6 +470,34 @@
|
||||||
<type>int</type>
|
<type>int</type>
|
||||||
<value><use>grain-texture-enabled</use></value>
|
<value><use>grain-texture-enabled</use></value>
|
||||||
</uniform>
|
</uniform>
|
||||||
|
<!-- BEGIN shadows include -->
|
||||||
|
<uniform>
|
||||||
|
<name>shadow_tex</name>
|
||||||
|
<type>sampler-2d</type>
|
||||||
|
<value type="int">10</value>
|
||||||
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>shadows_enabled</name>
|
||||||
|
<type>bool</type>
|
||||||
|
<value>
|
||||||
|
<use>shadows_enabled</use>
|
||||||
|
</value>
|
||||||
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>sun_atlas_size</name>
|
||||||
|
<type>int</type>
|
||||||
|
<value>
|
||||||
|
<use>sun_atlas_size</use>
|
||||||
|
</value>
|
||||||
|
</uniform>
|
||||||
|
<!-- END shadows include -->
|
||||||
|
<uniform>
|
||||||
|
<name>shadow_mapping_enabled</name>
|
||||||
|
<type>bool</type>
|
||||||
|
<value>
|
||||||
|
<use>shadow-mapping-enabled</use>
|
||||||
|
</value>
|
||||||
|
</uniform>
|
||||||
</pass>
|
</pass>
|
||||||
</technique>
|
</technique>
|
||||||
|
|
||||||
|
@ -527,11 +558,13 @@
|
||||||
</vertex-program-two-side>
|
</vertex-program-two-side>
|
||||||
<program>
|
<program>
|
||||||
<vertex-shader>Shaders/model-interior-ALS-base.vert</vertex-shader>
|
<vertex-shader>Shaders/model-interior-ALS-base.vert</vertex-shader>
|
||||||
|
<vertex-shader>Shaders/shadows-include.vert</vertex-shader>
|
||||||
<fragment-shader>Shaders/model-interior-ALS-base.frag</fragment-shader>
|
<fragment-shader>Shaders/model-interior-ALS-base.frag</fragment-shader>
|
||||||
<fragment-shader>Shaders/hazes.frag</fragment-shader>
|
<fragment-shader>Shaders/hazes.frag</fragment-shader>
|
||||||
<fragment-shader>Shaders/secondary_lights.frag</fragment-shader>
|
<fragment-shader>Shaders/secondary_lights.frag</fragment-shader>
|
||||||
<fragment-shader>Shaders/noise.frag</fragment-shader>
|
<fragment-shader>Shaders/noise.frag</fragment-shader>
|
||||||
<fragment-shader>Shaders/filters-ALS.frag</fragment-shader>
|
<fragment-shader>Shaders/filters-ALS.frag</fragment-shader>
|
||||||
|
<fragment-shader>Shaders/shadows-include.frag</fragment-shader>
|
||||||
</program>
|
</program>
|
||||||
<uniform>
|
<uniform>
|
||||||
<name>visibility</name>
|
<name>visibility</name>
|
||||||
|
@ -749,6 +782,34 @@
|
||||||
<type>int</type>
|
<type>int</type>
|
||||||
<value><use>use-flashlight</use></value>
|
<value><use>use-flashlight</use></value>
|
||||||
</uniform>
|
</uniform>
|
||||||
|
<!-- BEGIN shadows include -->
|
||||||
|
<uniform>
|
||||||
|
<name>shadow_tex</name>
|
||||||
|
<type>sampler-2d</type>
|
||||||
|
<value type="int">10</value>
|
||||||
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>shadows_enabled</name>
|
||||||
|
<type>bool</type>
|
||||||
|
<value>
|
||||||
|
<use>shadows_enabled</use>
|
||||||
|
</value>
|
||||||
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>sun_atlas_size</name>
|
||||||
|
<type>int</type>
|
||||||
|
<value>
|
||||||
|
<use>sun_atlas_size</use>
|
||||||
|
</value>
|
||||||
|
</uniform>
|
||||||
|
<!-- END shadows include -->
|
||||||
|
<uniform>
|
||||||
|
<name>shadow_mapping_enabled</name>
|
||||||
|
<type>bool</type>
|
||||||
|
<value>
|
||||||
|
<use>shadow-mapping-enabled</use>
|
||||||
|
</value>
|
||||||
|
</uniform>
|
||||||
</pass>
|
</pass>
|
||||||
</technique>
|
</technique>
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,8 @@ uniform int use_searchlight;
|
||||||
uniform int implicit_lightmap_enabled;
|
uniform int implicit_lightmap_enabled;
|
||||||
uniform int use_flashlight;
|
uniform int use_flashlight;
|
||||||
|
|
||||||
|
uniform bool shadow_mapping_enabled;
|
||||||
|
|
||||||
|
|
||||||
const float EarthRadius = 5800000.0;
|
const float EarthRadius = 5800000.0;
|
||||||
const float terminator_width = 200000.0;
|
const float terminator_width = 200000.0;
|
||||||
|
@ -60,6 +62,8 @@ vec3 get_hazeColor(in float light_arg);
|
||||||
vec3 flashlight(in vec3 color, in float radius);
|
vec3 flashlight(in vec3 color, in float radius);
|
||||||
vec3 filter_combined (in vec3 color) ;
|
vec3 filter_combined (in vec3 color) ;
|
||||||
|
|
||||||
|
float getShadowing();
|
||||||
|
|
||||||
float luminance(vec3 color)
|
float luminance(vec3 color)
|
||||||
{
|
{
|
||||||
return dot(vec3(0.212671, 0.715160, 0.072169), color);
|
return dot(vec3(0.212671, 0.715160, 0.072169), color);
|
||||||
|
@ -135,14 +139,18 @@ void main()
|
||||||
NdotL = dot(n, lightDir);
|
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) {
|
if (NdotL > 0.0) {
|
||||||
|
float shadowmap = 1.0;
|
||||||
|
if (shadow_mapping_enabled) {
|
||||||
|
shadowmap = getShadowing();
|
||||||
|
}
|
||||||
diffuse.rgb += 2.0 * diffuse.rgb * (1.0 - opacity.a);
|
diffuse.rgb += 2.0 * diffuse.rgb * (1.0 - opacity.a);
|
||||||
color += diffuse * NdotL * opacity;
|
color += diffuse * NdotL * opacity * shadowmap;
|
||||||
NdotHV = max(dot(n, halfVector), 0.0);
|
NdotHV = max(dot(n, halfVector), 0.0);
|
||||||
if (gl_FrontMaterial.shininess > 0.0)
|
if (gl_FrontMaterial.shininess > 0.0)
|
||||||
specular.rgb = (gl_FrontMaterial.specular.rgb
|
specular.rgb = (gl_FrontMaterial.specular.rgb
|
||||||
* light_specular.rgb
|
* light_specular.rgb
|
||||||
* pow(NdotHV, gl_FrontMaterial.shininess));
|
* pow(NdotHV, gl_FrontMaterial.shininess)
|
||||||
|
* shadowmap);
|
||||||
}
|
}
|
||||||
color.a = diffuse.a;
|
color.a = diffuse.a;
|
||||||
// This shouldn't be necessary, but our lighting becomes very
|
// This shouldn't be necessary, but our lighting becomes very
|
||||||
|
|
|
@ -36,6 +36,10 @@ uniform float overcast;
|
||||||
uniform float ground_scattering;
|
uniform float ground_scattering;
|
||||||
uniform float moonlight;
|
uniform float moonlight;
|
||||||
|
|
||||||
|
uniform bool shadow_mapping_enabled;
|
||||||
|
|
||||||
|
void setupShadows(vec4 eyeSpacePos);
|
||||||
|
|
||||||
// This is the value used in the skydome scattering shader - use the same here for consistency?
|
// This is the value used in the skydome scattering shader - use the same here for consistency?
|
||||||
const float EarthRadius = 5800000.0;
|
const float EarthRadius = 5800000.0;
|
||||||
const float terminator_width = 200000.0;
|
const float terminator_width = 200000.0;
|
||||||
|
@ -237,4 +241,8 @@ else // the faster, full-day version without lightfields
|
||||||
// gl_FrontFacing in the fragment shader.
|
// gl_FrontFacing in the fragment shader.
|
||||||
gl_FrontColor.rgb = constant_term.rgb; gl_FrontColor.a = 1.0;
|
gl_FrontColor.rgb = constant_term.rgb; gl_FrontColor.a = 1.0;
|
||||||
gl_BackColor.rgb = constant_term.rgb; gl_BackColor.a = 0.0;
|
gl_BackColor.rgb = constant_term.rgb; gl_BackColor.a = 0.0;
|
||||||
|
|
||||||
|
if (shadow_mapping_enabled) {
|
||||||
|
setupShadows(gl_ModelViewMatrix * gl_Vertex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,6 +59,8 @@ uniform int lightmap_enabled;
|
||||||
uniform int lightmap_multi;
|
uniform int lightmap_multi;
|
||||||
uniform int grain_texture_enabled;
|
uniform int grain_texture_enabled;
|
||||||
|
|
||||||
|
uniform bool shadow_mapping_enabled;
|
||||||
|
|
||||||
|
|
||||||
const float EarthRadius = 5800000.0;
|
const float EarthRadius = 5800000.0;
|
||||||
const float terminator_width = 200000.0;
|
const float terminator_width = 200000.0;
|
||||||
|
@ -76,6 +78,8 @@ vec3 addLights(in vec3 color1, in vec3 color2);
|
||||||
vec3 flashlight(in vec3 color, in float radius);
|
vec3 flashlight(in vec3 color, in float radius);
|
||||||
vec3 filter_combined (in vec3 color) ;
|
vec3 filter_combined (in vec3 color) ;
|
||||||
|
|
||||||
|
float getShadowing();
|
||||||
|
|
||||||
float luminance(vec3 color)
|
float luminance(vec3 color)
|
||||||
{
|
{
|
||||||
return dot(vec3(0.212671, 0.715160, 0.072169), color);
|
return dot(vec3(0.212671, 0.715160, 0.072169), color);
|
||||||
|
@ -151,9 +155,12 @@ void main()
|
||||||
NdotL = dot(n, lightDir);
|
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) {
|
if (NdotL > 0.0) {
|
||||||
|
float shadowmap = 1.0;
|
||||||
|
if (shadow_mapping_enabled) {
|
||||||
|
shadowmap = getShadowing();
|
||||||
|
}
|
||||||
diffuse.rgb += 2.0 * diffuse.rgb * (1.0 - opacity.a);
|
diffuse.rgb += 2.0 * diffuse.rgb * (1.0 - opacity.a);
|
||||||
color += diffuse * NdotL * opacity;
|
color += diffuse * NdotL * opacity * shadowmap;
|
||||||
|
|
||||||
//NdotHV = max(dot(n, halfVector), 0.0);
|
//NdotHV = max(dot(n, halfVector), 0.0);
|
||||||
if (gl_FrontMaterial.shininess > 0.0) {
|
if (gl_FrontMaterial.shininess > 0.0) {
|
||||||
|
@ -162,7 +169,9 @@ void main()
|
||||||
NdotHV = max(0.0, dot(n,HV));
|
NdotHV = max(0.0, dot(n,HV));
|
||||||
specular = (gl_FrontMaterial.specular.rgb
|
specular = (gl_FrontMaterial.specular.rgb
|
||||||
* (light_specular.rgb+2.0*light_specular.rgb*(1.0-opacity.a))
|
* (light_specular.rgb+2.0*light_specular.rgb*(1.0-opacity.a))
|
||||||
* pow(NdotHV, gl_FrontMaterial.shininess)*opacity.rgb);
|
* pow(NdotHV, gl_FrontMaterial.shininess)
|
||||||
|
* opacity.rgb
|
||||||
|
* shadowmap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
color.a = diffuse.a;
|
color.a = diffuse.a;
|
||||||
|
|
|
@ -46,6 +46,9 @@ uniform float residual_ambience_r;
|
||||||
uniform float residual_ambience_g;
|
uniform float residual_ambience_g;
|
||||||
uniform float residual_ambience_b;
|
uniform float residual_ambience_b;
|
||||||
|
|
||||||
|
uniform bool shadow_mapping_enabled;
|
||||||
|
|
||||||
|
void setupShadows(vec4 eyeSpacePos);
|
||||||
|
|
||||||
// This is the value used in the skydome scattering shader - use the same here for consistency?
|
// This is the value used in the skydome scattering shader - use the same here for consistency?
|
||||||
const float EarthRadius = 5800000.0;
|
const float EarthRadius = 5800000.0;
|
||||||
|
@ -297,6 +300,9 @@ else // the faster, full-day version without lightfields
|
||||||
gl_FrontColor.rgb = constant_term.rgb; gl_FrontColor.a = 1.0;
|
gl_FrontColor.rgb = constant_term.rgb; gl_FrontColor.a = 1.0;
|
||||||
gl_BackColor.rgb = constant_term.rgb; gl_BackColor.a = 0.0;
|
gl_BackColor.rgb = constant_term.rgb; gl_BackColor.a = 0.0;
|
||||||
|
|
||||||
|
if (shadow_mapping_enabled) {
|
||||||
|
setupShadows(gl_ModelViewMatrix * gl_Vertex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,8 @@ uniform int lightmap_enabled;
|
||||||
uniform int lightmap_multi;
|
uniform int lightmap_multi;
|
||||||
uniform int grain_texture_enabled;
|
uniform int grain_texture_enabled;
|
||||||
|
|
||||||
|
uniform bool shadow_mapping_enabled;
|
||||||
|
|
||||||
|
|
||||||
const float EarthRadius = 5800000.0;
|
const float EarthRadius = 5800000.0;
|
||||||
const float terminator_width = 200000.0;
|
const float terminator_width = 200000.0;
|
||||||
|
@ -82,6 +84,8 @@ vec3 addLights(in vec3 color1, in vec3 color2);
|
||||||
vec3 flashlight(in vec3 color, in float radius);
|
vec3 flashlight(in vec3 color, in float radius);
|
||||||
vec3 filter_combined (in vec3 color) ;
|
vec3 filter_combined (in vec3 color) ;
|
||||||
|
|
||||||
|
float getShadowing();
|
||||||
|
|
||||||
float luminance(vec3 color)
|
float luminance(vec3 color)
|
||||||
{
|
{
|
||||||
return dot(vec3(0.212671, 0.715160, 0.072169), color);
|
return dot(vec3(0.212671, 0.715160, 0.072169), color);
|
||||||
|
@ -259,14 +263,18 @@ void main()
|
||||||
NdotL = dot(n, lightDir);
|
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) {
|
if (NdotL > 0.0) {
|
||||||
|
float shadowmap = 1.0;
|
||||||
|
if (shadow_mapping_enabled) {
|
||||||
|
shadowmap = getShadowing();
|
||||||
|
}
|
||||||
diffuse.rgb += 2.0 * diffuse.rgb * (1.0 - opacity.a);
|
diffuse.rgb += 2.0 * diffuse.rgb * (1.0 - opacity.a);
|
||||||
color += diffuse * NdotL * opacity;
|
color += diffuse * NdotL * opacity * shadowmap;
|
||||||
NdotHV = max(dot(n, halfVector), 0.0);
|
NdotHV = max(dot(n, halfVector), 0.0);
|
||||||
if (gl_FrontMaterial.shininess > 0.0)
|
if (gl_FrontMaterial.shininess > 0.0)
|
||||||
specular.rgb = (gl_FrontMaterial.specular.rgb
|
specular.rgb = (gl_FrontMaterial.specular.rgb
|
||||||
* light_specular.rgb
|
* light_specular.rgb
|
||||||
* pow(NdotHV, gl_FrontMaterial.shininess));
|
* pow(NdotHV, gl_FrontMaterial.shininess)
|
||||||
|
* shadowmap);
|
||||||
}
|
}
|
||||||
color.a = diffuse.a;
|
color.a = diffuse.a;
|
||||||
// This shouldn't be necessary, but our lighting becomes very
|
// This shouldn't be necessary, but our lighting becomes very
|
||||||
|
|
Loading…
Add table
Reference in a new issue