From 09e791be0336713c224f7fec6d8179597142c0be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Sun, 24 Jul 2016 16:07:09 -0700 Subject: [PATCH] Rebuilt shaders. --- .../31-reflectiveshadowmap/fs_rsm_combine.sc | 76 +++++++++--------- .../31-reflectiveshadowmap/fs_rsm_gbuffer.sc | 12 +-- .../31-reflectiveshadowmap/fs_rsm_lbuffer.sc | 56 ++++++------- .../31-reflectiveshadowmap/fs_rsm_shadow.sc | 8 +- .../31-reflectiveshadowmap/vs_rsm_gbuffer.sc | 22 ++--- .../31-reflectiveshadowmap/vs_rsm_lbuffer.sc | 44 +++++----- .../31-reflectiveshadowmap/vs_rsm_shadow.sc | 16 ++-- .../runtime/shaders/dx11/fs_rsm_combine.bin | Bin 0 -> 3396 bytes .../runtime/shaders/dx11/fs_rsm_gbuffer.bin | Bin 0 -> 369 bytes .../runtime/shaders/dx11/fs_rsm_lbuffer.bin | Bin 0 -> 1226 bytes .../runtime/shaders/dx11/fs_rsm_shadow.bin | Bin 0 -> 317 bytes .../runtime/shaders/dx11/vs_rsm_combine.bin | Bin 0 -> 518 bytes .../runtime/shaders/dx11/vs_rsm_gbuffer.bin | Bin 0 -> 812 bytes .../runtime/shaders/dx11/vs_rsm_lbuffer.bin | Bin 0 -> 1105 bytes .../runtime/shaders/dx11/vs_rsm_shadow.bin | Bin 0 -> 756 bytes .../runtime/shaders/dx9/fs_rsm_combine.bin | Bin 0 -> 2433 bytes .../runtime/shaders/dx9/fs_rsm_gbuffer.bin | Bin 0 -> 238 bytes .../runtime/shaders/dx9/fs_rsm_lbuffer.bin | Bin 0 -> 903 bytes .../runtime/shaders/dx9/fs_rsm_shadow.bin | Bin 0 -> 210 bytes .../runtime/shaders/dx9/vs_rsm_combine.bin | Bin 0 -> 323 bytes .../runtime/shaders/dx9/vs_rsm_gbuffer.bin | Bin 0 -> 501 bytes .../runtime/shaders/dx9/vs_rsm_lbuffer.bin | Bin 0 -> 908 bytes .../runtime/shaders/dx9/vs_rsm_shadow.bin | Bin 0 -> 505 bytes .../runtime/shaders/gles/fs_rsm_combine.bin | Bin 0 -> 7922 bytes .../runtime/shaders/gles/fs_rsm_gbuffer.bin | Bin 0 -> 188 bytes .../runtime/shaders/gles/fs_rsm_lbuffer.bin | Bin 0 -> 1309 bytes .../runtime/shaders/gles/fs_rsm_shadow.bin | Bin 0 -> 173 bytes .../runtime/shaders/gles/vs_rsm_combine.bin | Bin 0 -> 337 bytes .../runtime/shaders/gles/vs_rsm_gbuffer.bin | Bin 0 -> 506 bytes .../runtime/shaders/gles/vs_rsm_lbuffer.bin | Bin 0 -> 1196 bytes .../runtime/shaders/gles/vs_rsm_shadow.bin | Bin 0 -> 516 bytes .../runtime/shaders/glsl/fs_rsm_combine.bin | Bin 0 -> 7517 bytes .../runtime/shaders/glsl/fs_rsm_gbuffer.bin | Bin 0 -> 176 bytes .../runtime/shaders/glsl/fs_rsm_lbuffer.bin | Bin 0 -> 1102 bytes .../runtime/shaders/glsl/fs_rsm_shadow.bin | Bin 0 -> 161 bytes .../runtime/shaders/glsl/vs_rsm_combine.bin | Bin 0 -> 307 bytes .../runtime/shaders/glsl/vs_rsm_gbuffer.bin | Bin 0 -> 470 bytes .../runtime/shaders/glsl/vs_rsm_lbuffer.bin | Bin 0 -> 1116 bytes .../runtime/shaders/glsl/vs_rsm_shadow.bin | Bin 0 -> 474 bytes .../runtime/shaders/metal/fs_rsm_combine.bin | Bin 0 -> 10144 bytes .../runtime/shaders/metal/fs_rsm_gbuffer.bin | Bin 0 -> 549 bytes .../runtime/shaders/metal/fs_rsm_lbuffer.bin | Bin 0 -> 1883 bytes .../runtime/shaders/metal/fs_rsm_shadow.bin | Bin 0 -> 491 bytes .../runtime/shaders/metal/vs_rsm_combine.bin | Bin 0 -> 659 bytes .../runtime/shaders/metal/vs_rsm_gbuffer.bin | Bin 0 -> 815 bytes .../runtime/shaders/metal/vs_rsm_lbuffer.bin | Bin 0 -> 1801 bytes .../runtime/shaders/metal/vs_rsm_shadow.bin | Bin 0 -> 829 bytes 47 files changed, 117 insertions(+), 117 deletions(-) create mode 100644 examples/runtime/shaders/dx11/fs_rsm_combine.bin create mode 100644 examples/runtime/shaders/dx11/fs_rsm_gbuffer.bin create mode 100644 examples/runtime/shaders/dx11/fs_rsm_lbuffer.bin create mode 100644 examples/runtime/shaders/dx11/fs_rsm_shadow.bin create mode 100644 examples/runtime/shaders/dx11/vs_rsm_combine.bin create mode 100644 examples/runtime/shaders/dx11/vs_rsm_gbuffer.bin create mode 100644 examples/runtime/shaders/dx11/vs_rsm_lbuffer.bin create mode 100644 examples/runtime/shaders/dx11/vs_rsm_shadow.bin create mode 100644 examples/runtime/shaders/dx9/fs_rsm_combine.bin create mode 100644 examples/runtime/shaders/dx9/fs_rsm_gbuffer.bin create mode 100644 examples/runtime/shaders/dx9/fs_rsm_lbuffer.bin create mode 100644 examples/runtime/shaders/dx9/fs_rsm_shadow.bin create mode 100644 examples/runtime/shaders/dx9/vs_rsm_combine.bin create mode 100644 examples/runtime/shaders/dx9/vs_rsm_gbuffer.bin create mode 100644 examples/runtime/shaders/dx9/vs_rsm_lbuffer.bin create mode 100644 examples/runtime/shaders/dx9/vs_rsm_shadow.bin create mode 100644 examples/runtime/shaders/gles/fs_rsm_combine.bin create mode 100644 examples/runtime/shaders/gles/fs_rsm_gbuffer.bin create mode 100644 examples/runtime/shaders/gles/fs_rsm_lbuffer.bin create mode 100644 examples/runtime/shaders/gles/fs_rsm_shadow.bin create mode 100644 examples/runtime/shaders/gles/vs_rsm_combine.bin create mode 100644 examples/runtime/shaders/gles/vs_rsm_gbuffer.bin create mode 100644 examples/runtime/shaders/gles/vs_rsm_lbuffer.bin create mode 100644 examples/runtime/shaders/gles/vs_rsm_shadow.bin create mode 100644 examples/runtime/shaders/glsl/fs_rsm_combine.bin create mode 100644 examples/runtime/shaders/glsl/fs_rsm_gbuffer.bin create mode 100644 examples/runtime/shaders/glsl/fs_rsm_lbuffer.bin create mode 100644 examples/runtime/shaders/glsl/fs_rsm_shadow.bin create mode 100644 examples/runtime/shaders/glsl/vs_rsm_combine.bin create mode 100644 examples/runtime/shaders/glsl/vs_rsm_gbuffer.bin create mode 100644 examples/runtime/shaders/glsl/vs_rsm_lbuffer.bin create mode 100644 examples/runtime/shaders/glsl/vs_rsm_shadow.bin create mode 100644 examples/runtime/shaders/metal/fs_rsm_combine.bin create mode 100644 examples/runtime/shaders/metal/fs_rsm_gbuffer.bin create mode 100644 examples/runtime/shaders/metal/fs_rsm_lbuffer.bin create mode 100644 examples/runtime/shaders/metal/fs_rsm_shadow.bin create mode 100644 examples/runtime/shaders/metal/vs_rsm_combine.bin create mode 100644 examples/runtime/shaders/metal/vs_rsm_gbuffer.bin create mode 100644 examples/runtime/shaders/metal/vs_rsm_lbuffer.bin create mode 100644 examples/runtime/shaders/metal/vs_rsm_shadow.bin diff --git a/examples/31-reflectiveshadowmap/fs_rsm_combine.sc b/examples/31-reflectiveshadowmap/fs_rsm_combine.sc index cf144c07f..af4f5fc23 100644 --- a/examples/31-reflectiveshadowmap/fs_rsm_combine.sc +++ b/examples/31-reflectiveshadowmap/fs_rsm_combine.sc @@ -22,7 +22,7 @@ uniform vec4 u_rsmAmount; float hardShadow(sampler2DShadow _sampler, vec4 _shadowCoord, float _bias) { - vec2 texCoord = _shadowCoord.xy; + vec2 texCoord = _shadowCoord.xy; return shadow2D(_sampler, vec3(texCoord.xy, _shadowCoord.z-_bias) ); } @@ -31,8 +31,8 @@ float PCF(sampler2DShadow _sampler, vec4 _shadowCoord, float _bias, vec2 _texelS vec2 texCoord = _shadowCoord.xy; bool outside = any(greaterThan(texCoord, vec2_splat(1.0))) - || any(lessThan (texCoord, vec2_splat(0.0))) - ; + || any(lessThan (texCoord, vec2_splat(0.0))) + ; if (outside) { @@ -69,63 +69,63 @@ float PCF(sampler2DShadow _sampler, vec4 _shadowCoord, float _bias, vec2 _texelS float toClipSpaceDepth(float _depthTextureZ) { #if BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_METAL - return _depthTextureZ; + return _depthTextureZ; #else - return _depthTextureZ * 2.0 - 1.0; + return _depthTextureZ * 2.0 - 1.0; #endif // BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_METAL } vec3 clipToWorld(mat4 _invViewProj, vec3 _clipPos) { - vec4 wpos = mul(_invViewProj, vec4(_clipPos, 1.0) ); - return wpos.xyz / wpos.w; + vec4 wpos = mul(_invViewProj, vec4(_clipPos, 1.0) ); + return wpos.xyz / wpos.w; } void main() { vec3 n = texture2D(s_normal, v_texcoord0).xyz; - // Expand out normal - n = n*2.0+-1.0; - vec3 l = u_lightDir.xyz;//normalize(vec3(-0.8,0.75,-1.0)); - float dirLightIntensity = 1.0; - float dirLight = max(0.0,dot(n,l)) * dirLightIntensity; + // Expand out normal + n = n*2.0+-1.0; + vec3 l = u_lightDir.xyz;//normalize(vec3(-0.8,0.75,-1.0)); + float dirLightIntensity = 1.0; + float dirLight = max(0.0,dot(n,l)) * dirLightIntensity; - // Apply shadow map - - // Get world position so we can transform it into light space, to look into shadow map - vec2 texCoord = v_texcoord0.xy; - float deviceDepth = texture2D(s_depth, texCoord).x; - float depth = toClipSpaceDepth(deviceDepth); - vec3 clip = vec3(texCoord * 2.0 - 1.0, depth); + // Apply shadow map + + // Get world position so we can transform it into light space, to look into shadow map + vec2 texCoord = v_texcoord0.xy; + float deviceDepth = texture2D(s_depth, texCoord).x; + float depth = toClipSpaceDepth(deviceDepth); + vec3 clip = vec3(texCoord * 2.0 - 1.0, depth); #if BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_METAL - clip.y = -clip.y; + clip.y = -clip.y; #endif // BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_METAL - vec3 wpos = clipToWorld(u_invMvp, clip); + vec3 wpos = clipToWorld(u_invMvp, clip); - const float shadowMapOffset = 0.003; - vec3 posOffset = wpos + n.xyz * shadowMapOffset; - vec4 shadowCoord = mul(u_lightMtx, vec4(posOffset, 1.0) ); + const float shadowMapOffset = 0.003; + vec3 posOffset = wpos + n.xyz * shadowMapOffset; + vec4 shadowCoord = mul(u_lightMtx, vec4(posOffset, 1.0) ); #if BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_METAL - shadowCoord.y *= -1.0; + shadowCoord.y *= -1.0; #endif // BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_METAL - - float shadowMapBias = 0.001; - vec2 texelSize = vec2_splat(u_shadowDimsInv.x); - shadowCoord.xy /= shadowCoord.w; - shadowCoord.xy = shadowCoord.xy*0.5+0.5; + float shadowMapBias = 0.001; + vec2 texelSize = vec2_splat(u_shadowDimsInv.x); - float visibility = PCF(s_shadowMap, shadowCoord, shadowMapBias, texelSize); + shadowCoord.xy /= shadowCoord.w; + shadowCoord.xy = shadowCoord.xy*0.5+0.5; - dirLight *= visibility; - - // Light from light buffer - vec3 albedo = texture2D(s_color, v_texcoord0).xyz; - vec3 lightBuffer = texture2D(s_light, v_texcoord0).xyz; + float visibility = PCF(s_shadowMap, shadowCoord, shadowMapBias, texelSize); - gl_FragColor.xyz = mix(dirLight * albedo, lightBuffer * albedo, u_rsmAmount.x); + dirLight *= visibility; - gl_FragColor.w = 1.0; + // Light from light buffer + vec3 albedo = texture2D(s_color, v_texcoord0).xyz; + vec3 lightBuffer = texture2D(s_light, v_texcoord0).xyz; + + gl_FragColor.xyz = mix(dirLight * albedo, lightBuffer * albedo, u_rsmAmount.x); + + gl_FragColor.w = 1.0; } diff --git a/examples/31-reflectiveshadowmap/fs_rsm_gbuffer.sc b/examples/31-reflectiveshadowmap/fs_rsm_gbuffer.sc index a3d3af8a9..a220ecf9d 100644 --- a/examples/31-reflectiveshadowmap/fs_rsm_gbuffer.sc +++ b/examples/31-reflectiveshadowmap/fs_rsm_gbuffer.sc @@ -11,12 +11,12 @@ uniform vec4 u_tint; void main() { - vec3 normalWorldSpace = v_normal; + vec3 normalWorldSpace = v_normal; - // Write normal - gl_FragData[0].xyz = normalWorldSpace.xyz; // Normal is already compressed to [0,1] so can fit in gbuffer - gl_FragData[0].w = 0.0; + // Write normal + gl_FragData[0].xyz = normalWorldSpace.xyz; // Normal is already compressed to [0,1] so can fit in gbuffer + gl_FragData[0].w = 0.0; - // Write color - gl_FragData[1] = u_tint; + // Write color + gl_FragData[1] = u_tint; } diff --git a/examples/31-reflectiveshadowmap/fs_rsm_lbuffer.sc b/examples/31-reflectiveshadowmap/fs_rsm_lbuffer.sc index a5554752e..259c850a3 100644 --- a/examples/31-reflectiveshadowmap/fs_rsm_lbuffer.sc +++ b/examples/31-reflectiveshadowmap/fs_rsm_lbuffer.sc @@ -15,53 +15,53 @@ uniform mat4 u_invMvp; float toClipSpaceDepth(float _depthTextureZ) { #if BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_METAL - return _depthTextureZ; + return _depthTextureZ; #else - return _depthTextureZ * 2.0 - 1.0; + return _depthTextureZ * 2.0 - 1.0; #endif // BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_METAL } vec3 clipToWorld(mat4 _invViewProj, vec3 _clipPos) { - vec4 wpos = mul(_invViewProj, vec4(_clipPos, 1.0) ); - return wpos.xyz / wpos.w; + vec4 wpos = mul(_invViewProj, vec4(_clipPos, 1.0) ); + return wpos.xyz / wpos.w; } void main() { #if BGFX_SHADER_LANGUAGE_HLSL && (BGFX_SHADER_LANGUAGE_HLSL < 4) - vec2 texCoord = gl_FragCoord.xy * u_viewTexel.xy + u_viewTexel.xy * vec2_splat(0.5); + vec2 texCoord = gl_FragCoord.xy * u_viewTexel.xy + u_viewTexel.xy * vec2_splat(0.5); #else - vec2 texCoord = gl_FragCoord.xy * u_viewTexel.xy; + vec2 texCoord = gl_FragCoord.xy * u_viewTexel.xy; #endif - // Get world position - float deviceDepth = texture2D(s_depth, texCoord).x; - float depth = toClipSpaceDepth(deviceDepth); + // Get world position + float deviceDepth = texture2D(s_depth, texCoord).x; + float depth = toClipSpaceDepth(deviceDepth); - vec3 clip = vec3(texCoord * 2.0 - 1.0, depth); + vec3 clip = vec3(texCoord * 2.0 - 1.0, depth); #if BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_METAL - clip.y = -clip.y; + clip.y = -clip.y; #endif // BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_METAL - vec3 wpos = clipToWorld(u_invMvp, clip); - - // Get normal from its map, and decompress - vec3 n = texture2D(s_normal, texCoord).xyz*2.0-1.0; - - // Do lighting - vec3 pointToLight = v_lightCenterScale.xyz-wpos; - float lightLen = sqrt(dot(pointToLight, pointToLight)); + vec3 wpos = clipToWorld(u_invMvp, clip); - float lightFalloff; + // Get normal from its map, and decompress + vec3 n = texture2D(s_normal, texCoord).xyz*2.0-1.0; - if (lightLen > v_lightCenterScale.w) - lightFalloff = 0.0; - else - lightFalloff = 1.0-(lightLen/v_lightCenterScale.w); // Linear falloff for light (could use dist sq if you want) + // Do lighting + vec3 pointToLight = v_lightCenterScale.xyz-wpos; + float lightLen = sqrt(dot(pointToLight, pointToLight)); - vec3 l = normalize(pointToLight)*lightFalloff; - - gl_FragColor.xyz = v_color0.xyz * max(0.0, dot(n,l)); + float lightFalloff; - gl_FragColor.w = 1.0; + if (lightLen > v_lightCenterScale.w) + lightFalloff = 0.0; + else + lightFalloff = 1.0-(lightLen/v_lightCenterScale.w); // Linear falloff for light (could use dist sq if you want) + + vec3 l = normalize(pointToLight)*lightFalloff; + + gl_FragColor.xyz = v_color0.xyz * max(0.0, dot(n,l)); + + gl_FragColor.w = 1.0; } diff --git a/examples/31-reflectiveshadowmap/fs_rsm_shadow.sc b/examples/31-reflectiveshadowmap/fs_rsm_shadow.sc index 25f71c4a4..56026da16 100644 --- a/examples/31-reflectiveshadowmap/fs_rsm_shadow.sc +++ b/examples/31-reflectiveshadowmap/fs_rsm_shadow.sc @@ -12,11 +12,11 @@ uniform vec4 u_tint; void main() { #if BGFX_SHADER_LANGUAGE_HLSL && (BGFX_SHADER_LANGUAGE_HLSL < 4) - vec2 texCoord = gl_FragCoord.xy * u_viewTexel.xy + u_viewTexel.xy * vec2_splat(0.5); + vec2 texCoord = gl_FragCoord.xy * u_viewTexel.xy + u_viewTexel.xy * vec2_splat(0.5); #else - vec2 texCoord = gl_FragCoord.xy * u_viewTexel.xy; + vec2 texCoord = gl_FragCoord.xy * u_viewTexel.xy; #endif - gl_FragData[0].xyz = u_tint.xyz; // Color of light sphere - gl_FragData[0].w = -v_normal.z; // Radius of light sphere + gl_FragData[0].xyz = u_tint.xyz; // Color of light sphere + gl_FragData[0].w = -v_normal.z; // Radius of light sphere } diff --git a/examples/31-reflectiveshadowmap/vs_rsm_gbuffer.sc b/examples/31-reflectiveshadowmap/vs_rsm_gbuffer.sc index ae37125a8..123e4fbf4 100644 --- a/examples/31-reflectiveshadowmap/vs_rsm_gbuffer.sc +++ b/examples/31-reflectiveshadowmap/vs_rsm_gbuffer.sc @@ -2,9 +2,9 @@ $input a_position, a_normal $output v_normal /* -* Copyright 2016 Joseph Cherlin. All rights reserved. -* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause -*/ + * Copyright 2016 Joseph Cherlin. All rights reserved. + * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause + */ #include "../common/common.sh" @@ -13,15 +13,15 @@ uniform vec4 u_tint; void main() { - // Calculate vertex position + // Calculate vertex position vec3 pos = a_position; - gl_Position = mul(u_modelViewProj, vec4(pos, 1.0) ); + gl_Position = mul(u_modelViewProj, vec4(pos, 1.0) ); - // Calculate normal. Note that compressed normal is stored in the vertices + // Calculate normal. Note that compressed normal is stored in the vertices vec3 normalObjectSpace = a_normal.xyz*2.0+-1.0; // Normal is stored in [0,1], remap to [-1,1]. - - // Transform normal into world space. - vec3 normalWorldSpace = mul(u_model[0], vec4(normalObjectSpace, 0.0) ).xyz; - // Normalize to remove (uniform...) scaling, however, recompress - v_normal.xyz = normalize(normalWorldSpace)*0.5+0.5; + + // Transform normal into world space. + vec3 normalWorldSpace = mul(u_model[0], vec4(normalObjectSpace, 0.0) ).xyz; + // Normalize to remove (uniform...) scaling, however, recompress + v_normal.xyz = normalize(normalWorldSpace)*0.5+0.5; } diff --git a/examples/31-reflectiveshadowmap/vs_rsm_lbuffer.sc b/examples/31-reflectiveshadowmap/vs_rsm_lbuffer.sc index 1178faf8a..357b38ec3 100644 --- a/examples/31-reflectiveshadowmap/vs_rsm_lbuffer.sc +++ b/examples/31-reflectiveshadowmap/vs_rsm_lbuffer.sc @@ -19,42 +19,42 @@ SAMPLER2D(s_rsm, 3); // Reflective shadow map, used to scale/color light float toClipSpaceDepth(float _depthTextureZ) { #if BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_METAL - return _depthTextureZ; + return _depthTextureZ; #else - return _depthTextureZ * 2.0 - 1.0; + return _depthTextureZ * 2.0 - 1.0; #endif // BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_METAL } vec3 clipToWorld(mat4 _invViewProj, vec3 _clipPos) { - vec4 wpos = mul(_invViewProj, vec4(_clipPos, 1.0) ); - return wpos.xyz / wpos.w; + vec4 wpos = mul(_invViewProj, vec4(_clipPos, 1.0) ); + return wpos.xyz / wpos.w; } void main() { - // Calculate vertex position + // Calculate vertex position vec3 objectSpacePos = a_position; - vec2 texCoord = u_sphereInfo.xy; + vec2 texCoord = u_sphereInfo.xy; - // Get world position using the shadow map - float deviceDepth = texture2DLod(s_shadowMap, texCoord, 0).x; - float depth = toClipSpaceDepth(deviceDepth); - vec3 clip = vec3(texCoord * 2.0 - 1.0, depth); + // Get world position using the shadow map + float deviceDepth = texture2DLod(s_shadowMap, texCoord, 0).x; + float depth = toClipSpaceDepth(deviceDepth); + vec3 clip = vec3(texCoord * 2.0 - 1.0, depth); #if BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_METAL - clip.y = -clip.y; + clip.y = -clip.y; #endif // BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_METAL - vec3 wPos = clipToWorld(u_invMvpShadow, clip); - wPos.y -= 0.001; // Would be much better to perturb in normal direction, but I didn't do that. + vec3 wPos = clipToWorld(u_invMvpShadow, clip); + wPos.y -= 0.001; // Would be much better to perturb in normal direction, but I didn't do that. - // Scale and color are already in the rsm - vec4 rsm = texture2DLod(s_rsm, texCoord, 0).xyzw; - float radScale = u_sphereInfo.z; - float rad = rsm.w * radScale; + // Scale and color are already in the rsm + vec4 rsm = texture2DLod(s_rsm, texCoord, 0).xyzw; + float radScale = u_sphereInfo.z; + float rad = rsm.w * radScale; - gl_Position = mul(u_viewProj, vec4(wPos+objectSpacePos*rad, 1.0) ); - - v_lightCenterScale.xyz = wPos.xyz; - v_lightCenterScale.w = rad; - v_color0.xyz = rsm.xyz; + gl_Position = mul(u_viewProj, vec4(wPos+objectSpacePos*rad, 1.0) ); + + v_lightCenterScale.xyz = wPos.xyz; + v_lightCenterScale.w = rad; + v_color0.xyz = rsm.xyz; } diff --git a/examples/31-reflectiveshadowmap/vs_rsm_shadow.sc b/examples/31-reflectiveshadowmap/vs_rsm_shadow.sc index f2f96b385..41bf8ab11 100644 --- a/examples/31-reflectiveshadowmap/vs_rsm_shadow.sc +++ b/examples/31-reflectiveshadowmap/vs_rsm_shadow.sc @@ -13,12 +13,12 @@ uniform vec4 u_tint; void main() { gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); - - // Calculate normal. Note that compressed normal is stored in the vertices - vec3 normalObjectSpace = a_normal.xyz*2.0+-1.0; // Normal is stored in [0,1], remap to [-1,1]. - - // Transform normal into view space. - v_normal = mul(u_modelView, vec4(normalObjectSpace, 0.0) ).xyz; - // Normalize to remove (uniform...) scaling - v_normal = normalize(v_normal); + + // Calculate normal. Note that compressed normal is stored in the vertices + vec3 normalObjectSpace = a_normal.xyz*2.0+-1.0; // Normal is stored in [0,1], remap to [-1,1]. + + // Transform normal into view space. + v_normal = mul(u_modelView, vec4(normalObjectSpace, 0.0) ).xyz; + // Normalize to remove (uniform...) scaling + v_normal = normalize(v_normal); } diff --git a/examples/runtime/shaders/dx11/fs_rsm_combine.bin b/examples/runtime/shaders/dx11/fs_rsm_combine.bin new file mode 100644 index 0000000000000000000000000000000000000000..5c633734433b2dda2f0169421a3f38802b9bcacb GIT binary patch literal 3396 zcmdT`y-!n76hD2GQj3w=XfzH|9gRapqsA{DS{^b$2}Of06~zbf+F1xwf>Dk>|8iEiIKRi!%$k7|r%nOSj4k#aHm zV>8RSSR9h4JM+^QFZCz;Kb<=CZT!ub9z}nI{tA7xI5Iu~8lWf9 zPouLDPb^y>dftrehjKHILGfy7qEH;28ZC^=)bRABLSZs5>+9qttWkqlt}~2Vw&zevVunR_Y+_HaMGhA|u)O9l zfYMeJ6WF;Rq=qR0N9+=W_(*-D*@arkwHDoIElZ$jCq#O5{*1%LLOZ9iF?T;U=E~Se z8QV?h5tG<$X%K?3Ed*hgAjHQsjnC{MlRInqB9*QWff`?KEh&fn6zjvWt}!uJyRENi zmz`6bug~}rE;hwMl%zd_gRYO~dh9|ySZgCktx3Q3SqdLJw_Ar7&+=!r11^!%!x?G# zV!UR~<(2@mUCiB(GiHNz@ok6e0RT1If&H5Yj|_(C!(IZ4G=J zWnK;XTIYh02!RdL4HJZhY>^$qT2hyB1tC7xFEOS?F1B-6gNtr_z~NJl`Zg3FgjV1G z(niMVwA%3PA8~%vem~Br%D8?S2hRrMPSvx<%?^CIA2uO(``5^WkmT(~v&%*lx9fz7 zMojcUdpv99%){3sBE5&5jCs*!0{0O2B+nYD#z-vVqW(whflgRJdepA^)OvJ|pKEFI z7}WTEzdwqxlV9J?pNU^w{Yjhk_x=9+@td>6JpRY}H}($q(C^+qx^H>E>m3+`VC?vI4C^L54KMr{F i-$qjgm$h*v>RF1AXY+rEx@^pI&EYi93+C7FrF;jHBNPMx literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/dx11/fs_rsm_gbuffer.bin b/examples/runtime/shaders/dx11/fs_rsm_gbuffer.bin new file mode 100644 index 0000000000000000000000000000000000000000..71c20d5bfc5869456b808aeadbdc3d5943291a6f GIT binary patch literal 369 zcmZ<@_F#E@C?=JWfvq&YBr~r>h=GBDks*Z9CBn%$@>F{Bi|Cf$3EvV8kA*kbF#_d6 zfCMv;)&b%MAU*@cp26;ZK0ulYh&h1R0*FBXq#mRe1o(m21R=C- zpa!6r0}v|!aU=r+i(4Ov1<{)%z`$H2AOJQe6==*S1p%-ej14m1jDdl*2rBL-1W^kT cYl4a~I)Jr+)Uko|gY>}c0Lj>atrB1W0B<5J!2kdN literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/dx11/fs_rsm_lbuffer.bin b/examples/runtime/shaders/dx11/fs_rsm_lbuffer.bin new file mode 100644 index 0000000000000000000000000000000000000000..ae81827f81bc6dfd7ad357f0261896516b9e531c GIT binary patch literal 1226 zcmZuwJ#Q015FI;*ZHyG3ED9=gKY$`w2v7>RVEYpDk+WZOuM`(>{gw;P>CyeifBdEAmty<3grR!yccYLWwUux0?!mDGd*IXX+N<$6b^ z)AmZObqX+q{Ws*5h!=edpov_Ath4-vZ_cVSfA<#VHMI7%wTm+`p0@(=D!#>O+w^5_ zgtO{1=azvBBocXC>6yF`5^Q>PsB$BKUTA1ZGS(9^- z$vJXgpCOh!{+9g7lEbxUazg&1`ly}$XGOLnkZb*}7Z zr19BH{eisYhC3*ZdY?Gy7zN8Ra8AVx!LM{W literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/dx11/fs_rsm_shadow.bin b/examples/runtime/shaders/dx11/fs_rsm_shadow.bin new file mode 100644 index 0000000000000000000000000000000000000000..faf21f024b81212e9218d3c39c2cef908ca56423 GIT binary patch literal 317 zcmZ<@_F#E@C?=JWfvq&YBr~r>h=GBDkwJmcCBn(M_4tbqclP!eX#AHx=kjz$H6u_? z0Z1?dX&oSL0OBn`>>2Ft=L4jffS3b_Er1vVKE2c>4P>`1uFjGBB{X^(g>Z5Ob0Q7?_;|1i)sd0-g3rK>#dg#=yW<1ZBH5DS*X51W3FIDy}6U Q(BKFZ1G&czObIXm08Aq)4*&oF literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/dx11/vs_rsm_combine.bin b/examples/runtime/shaders/dx11/vs_rsm_combine.bin new file mode 100644 index 0000000000000000000000000000000000000000..2278290e567c5229e244a0a508a5b74e0077bac0 GIT binary patch literal 518 zcmWFw_F&1Ev$J7j;4h8O%}+_q3Cm0^4=BpdVqsulU}3n!=n~=N%$-%VuIt0mU7^ay z(~lm1*~|!(y8|ScfwT?~HvsVsAodJ)_wxbLOhC*5#1=pd10b~^z|PLV;0R%YNsu_m zJZ2yxz(3eC#M9r8A;dMp+223Ng<R=C-pg%yh4nW)OfpjF$yKa37Ko-c~3=Hu=V~PX>zY5S?5uxg$jqf;M7tSX)_%g`OJD1Y$1a^iWjNc=&-52#AeEJQc;l!pdKe z#?C(=SXufDY^-d9So`L7Cn3Rw+1+{X&D+_%3xkUJ^|l)sWSzB6+xyXp=@50PptJBO zI&XB^$0m_&(vMNzT3L;E?murf_a+{{XYx<)b}2;!hA5477IA_2KvaXZdIc*evJvwL z8LZ`DSwu@}o6L-}ALDhuxxQSZh96Wns(zh(_|?FT`>|g93fPwsG6sHVAP8FnFYWyt zRLae17`iz17Dd}cruX0^<=2>7u7rYBRi}TpW%d6V|bTRne)Tj=SEj>xC_+Ej8Pobmx@k+|ua6$0(hd~Bs z)O{U>x(nBGUtvboda=X81mhlG#QRR+%w+|$RW0iVJ?MIVt6olfrqznsilx@joL=#L tGr}!s4c^)k-`~QhKDoD}-%5KJE)G?{9{+wEWVo2dutmNezGjMC`wysFQt$u( literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/dx11/vs_rsm_lbuffer.bin b/examples/runtime/shaders/dx11/vs_rsm_lbuffer.bin new file mode 100644 index 0000000000000000000000000000000000000000..be1624f7796662d7914504b2ecbd9fad6e1d8e31 GIT binary patch literal 1105 zcmaJ=zl#%55T4y+lUxkRl1i)=OA&-CL@YF3;+lYW8?tvHim-QLG$(oqyCmskIjz;s z|G*}#jUuQB*I3y2AJ|--!rJfK_g*~laLDYN-}AkhmwwpJfBXJs?nrqW&Gv`$ZajXR z7m>VFrcp8(4dY?w;NjSohFDUaM*9b|&DkUz?L8RJ^U_7!nIuXwb#rgxSvJC)B#M)# zo|S`qoNEm>nlI`fU-dSAE|c1qcb7hU?=5sV&WYeB7s0#WAK*@SYl}MlC9nrJ#8^_X zDAEnW&UPo*lEq>XAm<6}^fRXmCb5ResX@L+qbAzvr~N+I29s!~OncamR&AQW?Vu;y zHwVoi=(S`Kwp+alf;p70h`ob>`7b?4B5UBgEVb)qwT#T#gR>aeMA>(C{^;~kkB}F; zE;NxxsJZl%OsqrrsGpRHbp*&f*G1fQQSpB2!NM)V*}#WT6;l?wfsdr06jK(t0_aQR zvwq)k(;Jyp#N4X@9X-m7AsM>^xnOKnmERVrm|7>X_|Mec&1|d&E1g~!YtHHtkB_>V zN~`|bW^i!#RXmT_V6j!sui7fNc&L5n^vV9?`tuL}!^_8Lwz?jkM#OA{+%pKUdwNK&3F6& literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/dx11/vs_rsm_shadow.bin b/examples/runtime/shaders/dx11/vs_rsm_shadow.bin new file mode 100644 index 0000000000000000000000000000000000000000..1a351d8cd6167e8c4a028ecee6edb9d5e4048b17 GIT binary patch literal 756 zcmZuuy-LGS6h2MUCbVFR;NsK=aB>m{ty{ zbrXF8@d1h;zCaOYzmt1UYsCvE_uljU-0$9mfoFca?8OG<&!f}UetZ%h#TOT>Z=AmUvCeey7o|DgW+B%OrtGta80KWdD$lx7y zo+hR4!dlK1W|Y?L7MYmzIOC&u_f(&;tn_T9W!^Z0*7IBSbJ{blW_+!#Xbp|&8UHsU X*s|u}tu1-~Z)cjn!V&RDQq-XzhdWX3 literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/dx9/fs_rsm_combine.bin b/examples/runtime/shaders/dx9/fs_rsm_combine.bin new file mode 100644 index 0000000000000000000000000000000000000000..28d904d898614f805a20cfc3d06a7323a1c9a600 GIT binary patch literal 2433 zcmcguOKTff6h3!mY)vFt29fSU>O~eU6f+_v1o}whnBqdbXdOf8Mm2F7D_9<(hm+-) zY_m|;O<}xf0@AX(Zc@mutNsXW`uqi@)9*WXu5?|y+m1cVJ>U7x``(K_-r0)Ms~^5! zmCB%fKRrzQi7{d*?LX)Z4-ykv>9F(gV3?QyQaorMrTy;SVPXVgZO|SZ?CqzIxA%I9 ziAWf=J4eUc$GyuSL{c5K)q1njZ<-i-2W$_YT!uj;wNbl2=-%$8qoZNdR6$uCl}4NvYVytt4l|zAT9XS8&Q;z2XTw8qsZbv55>GZs>`TWk=xk=KFy<-(Fhs9WBYP7HC zbeOPsv&GtmDyJ&FLHl|;k?qd?emY3M8m_(d+1qPdcX#ft?O;ni=&#*LyS>gK7OiAG zS#KpttF_*`asB4INa$0MrJAhf=*UMR*(-MD#W$Pp5w9zr-70Z>f4oI}#q!Bj4Ehg< zH-M+jr$2x<*S(4HE`fj@GUggKV~JODw>I87@YbQXj-tmIIh<${>NvW+=sHV)$jCjbXCAU8u&p{So(76M<^JY(pJGxk#2<7BIEKaXIJ z6?v>NjdEi611}6DhAdf4CS{%#jm;RyCG%>*+UCjHBCG{=ti|?VHCt9}qL`n11vq6R zQ6@6U8t9X)g>s=WpvHQZ)xl*u4!`GuB8f#JGucs~+&L{jWVmW)8M_v8-zFaKM z(dFgqVW+X|9xk#K+4|q=YRJQRtpBRZ&(+OGfJcnQTI*6E zKJO9}GNzj)V_vk!TugtDk?VTl_PWd6&xiZZ$*@8ENqKG~U9TV)>Nzvybb@>E^mF9u z&Nc2AoWI@a7m68j^yR%{c~$i9%j_&K0Ot>V7d+?R`m;IFA9LExtS^;Mm?QH*-ALbZ z0`zS|^W=V+jSbGU)mPL9&kpqg`bm8NJ$uf(mG>d_tdE$)l?=a4@)CniaGk~)vnWL5 EA7uy1r2qf` literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/dx9/fs_rsm_gbuffer.bin b/examples/runtime/shaders/dx9/fs_rsm_gbuffer.bin new file mode 100644 index 0000000000000000000000000000000000000000..7facc87fc7247afe35bcd71394f9d5f3cce40a3b GIT binary patch literal 238 zcmXwzJqp4=5QX2G_|pZf1%p^<6LyJ+oqr%HBBHSrf@s8m8cAaB5%dP>y@hA+26_(H zS;c|J%zVSVnUUw{&-)@^D4hH>Jfvj?FgyTF%D1dxIPVWC045~GXbjck3OJNFDMwPg zLsIc`!i_;Au778W9~0m9ImY2Cj*@7TnvGf0bX?Chz3p-x#O5&CAHy9Lf?M1YoC{%z uw%uvrHU;twMh2X_%IhChI~$;=w(3tLOxX=FVeyJ{BSM-;MLHj3mq*!$Y9#*lhJhae%5{T`f+#vpnuTqpB|rNlkV>5 zY&;m!N#b7IOX4_5ddbtxXHT$r1+-e|lzd`~whiQ8XEC9knehXf1 z&~ZMia;*DHzd+O}RYSZm^tl82CU0?#G_KYs5Apz2$$j$2c)cnV0~K*$Ypi+6o;U2d zaeaJ`n7uMhUmdIGhFYq8heV#Msd5ulrD8NO7}vZZIjUP;VdC+~Ns*3+w=YbbKJm8G zA2GI0n?dMujg}&E?Rtn^U7!#J}o s-nzZq)~LVP%Zk6&V%&_ literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/dx9/fs_rsm_shadow.bin b/examples/runtime/shaders/dx9/fs_rsm_shadow.bin new file mode 100644 index 0000000000000000000000000000000000000000..d93441c2f28c02f02845d7f4a819d656834f4e7d GIT binary patch literal 210 zcmZ<@_F#E@C?=JWfvq&YBr~r>h>?MTkzoe|1M~m?|Nbj6IEOeo$uKZ5_yaLW3@FV2 z;xkNSVDJD^20+XN#2|4CAO-=5NertQ8JL0MEMPg1ctLTzal8S8Z)S2)esO+UiGoIu zrh_GOD1rRm|kiBZ+|NlTs07AAaoB#j- literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/dx9/vs_rsm_combine.bin b/examples/runtime/shaders/dx9/vs_rsm_combine.bin new file mode 100644 index 0000000000000000000000000000000000000000..fe8592c138dd449fed38182df0fc8d75323178c5 GIT binary patch literal 323 zcmZ8dJ5Iwu5PkM8wJ#8bEhwO|c9jTGL@1CZMIuF*gwjI92%|(BIec0l!Q6nFT*^hx z5%b0fAu+R0GyCSVGrLH}+IKGp0ixG*?U&hVk!SC-!awT(&@chip*b`s7~Ni7cL3ZG z!Z8fF;{%w{SRy1eF(gF(wS=N-s?>_SZPQ+AG0h(ezx9tV=Je*wj3>#&Bv1FttS}?L z-sCGf&c-%&);brv^WH@tyW^kdN+7DlKLSc_(fVvHeEr9(nsG&rIr~pwUU5#Ih literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/dx9/vs_rsm_gbuffer.bin b/examples/runtime/shaders/dx9/vs_rsm_gbuffer.bin new file mode 100644 index 0000000000000000000000000000000000000000..3cc1c15e95a341f3275addf9bda8a2b76c1e469a GIT binary patch literal 501 zcmYjMyH3ME5FFbVuAuM_AmM@nnqVsk(eVgHiXZ_YsUk&)7-8hdDB;mioWu_}f8ZjO z`3NM$heU!;ppKb!9%6N)y`7ugo$It3>ie@B+R#tELDCOn zFAL7Bm=(LIUmc%p0C*#WvzesE7`qjYqgPC>c0Q13oNMMup=+^*lDtA)G`gbQkU1}`oX@x&0N6k-Wp`G$yJTCjCM#^lK zoLzEx$#JmsP37GoKi6pKOEr*bv@@B_9pu`kveK+`-XsIW*JLqUn>D@zIkmrLi@xW5 S^WEZ;{)|S>xp`I;?EVAo>SB=q literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/dx9/vs_rsm_lbuffer.bin b/examples/runtime/shaders/dx9/vs_rsm_lbuffer.bin new file mode 100644 index 0000000000000000000000000000000000000000..12579db146ce57ba02b0324375f5ba7b936f1396 GIT binary patch literal 908 zcmY*WJ#W)c6g}_RPMlC-iMdiemL;-PgxL5fLy;OO5MZ?`NYx-(M>a`TBNoPVg3$w0 zvv%szg^huQACSQ#BXiBU&yJirvEF^>o_p@O*Kdah_OIXH<_?@RO43tbSx~r>M(N4X z`*_|zn)pf+xjT)!!RZ2iSl8^w~Cm7IDEG9&*PyQ1Zz5k}S>em9aeE`C1SIUHmWzaLH3s+2;AP#{L*g z3;;!q{WF+&Xn1BuESL07uKcQJV_x!a=Wb7qrFfL?>)OpFP&u3UVAn0R(^k;_~P?Ui__=4vxnEF`b- tmvzvZ`6hPB-JDmn8?UU*QG2cQJnA$%5dX4g>1PqI`n#(Ry_F>^{{!mhu+snl literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/dx9/vs_rsm_shadow.bin b/examples/runtime/shaders/dx9/vs_rsm_shadow.bin new file mode 100644 index 0000000000000000000000000000000000000000..2d9ef91e8bb1b7da83aec9e4b3bedec3ccf89034 GIT binary patch literal 505 zcmYjMK}y3=5PeC0O`(fiKrl-MDG3#Esn$go6{@ja2~}*wN=r(scKeSIZ;(Y-^$>!1 zkbpgc>&7=up?ne`j} z0O!NIX);UhpZwj+J-^kC+J5wKJBX)#GZ{~YBPL-`59(nMgke2AY#bfn?Ez-YPVNPL MjAt&n)QbYZ4^9ndMF0Q* literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/gles/fs_rsm_combine.bin b/examples/runtime/shaders/gles/fs_rsm_combine.bin new file mode 100644 index 0000000000000000000000000000000000000000..23364eb50e39782abbb199a065aacfa367afd04a GIT binary patch literal 7922 zcmb`MZExE)5XZBjzzX-pzCpp4_UgJ8A7lqzI}9y~4Om}w?**-K69cwo$PaN+^t8~fn^S8ebuAc6)O;N7%)zwc|@c)-x_PJOUrM+4$ zZ}0Z@>SnRs-|4GoyKHxt-xT*B^R2!!IAmn~ep&uZ&Ym8!<>vVDxP3yG)%eH#N#FSO zU|hUku6KWLj{2!*hpgPK|6CV`&0gR6~@tLz@wqKk+7e#q9 zeLXmAmS12UY?rUMt3}D*vua`CFxnTSC7P2Li=&Je~>?ov0&Que> zWYxUZ_^};6?Ytj-+eH@XK>!&JDq?M(B=OmiJ$m8*4>Gm6qlt;r)o zF{_xv75Z^4^xjz$xU})jA->oH!zp?3uf5ylVs}{WvxN5SzoJ-G zp(gZFEWfZ}zIhnlmWzD9DF407;Z^eIg|q>^8p6hpDc44$5&H_W+w@ElK!DDN35E5I zEmpflzy_yUEq1%J^U%uzKVTYM%s2djaheq-i8uQ-Om33WnYct-OR7s%r8UENuE69e0mP~bqqNtVYBh` zB!HYxedJ))Mh<5EA?HaHId_GL^G@Vo(n|Bow1gW0b8?JR;S_8A1+1+FO=$8AtBQ9|v8-&+#+*4JJ+Gkl+{VH#c(TGN+0t#@v_2nz>P_iaCl1 zEWmT!VvZu>D+>o%?T`5^&fFD4j@42JbEB6=%{B82rNzjZ3kGY3*k>l6$D~CVnKH}; zsz{4DilL+CU>0Bwvf3MS0kx8zvZ{G(Su0#M6d-dQ%)z9U=a(TDM$R1Mf~u`Znv1G# zsN%P2F5Egxpo;j&1&X1I996_mb1>@>x#=SUAE3fjLjf|^h1>{cGtDnkb7ADnMXt_d zxsYDU)X3eUOPGqvbKOFYBGN*RH?uwxRmFq%o^im`L5iu7=&0H?jI>xeG zw~uwo)X3eMOPGSnbKOFY8qz|JwPSC{ucOGNtA!Fot^+xkG=$|xv|Ji7bGS%sK4V%g z^*1sBON(w`vkK9 z@jkmx8Sg%&tAw(<`vj8)ae#esS*}9er#jbt%4qkg+WKEbSw9L)Mlaux4B zm8*oRyZZ!_7V^t{80pWUa5cc03YLe<@Uf{Bm( zLgJy`Q=RKQRkZh1Zn>pGy{AGUbd(&-0>u05JypE-RIU`N?%oqjeBzfWxiV7bloaY* z=c%HdXX;j4X{hs5tu05JX70wnx2@JSAP}xiY2Kz6{GL*oujc~Xd0b&t0&_bNBG&`wF~DmU1Yu9t8=7mOrD?S34M;pCxt5J;y& u?o?=3e~WLQYa9emPE-}$uCfnhe)|rOsOcela-;)u#<85HbB%9jx|?lUS=AQiI6l=fatg8D$CDIQOHfq%u~?NZA#O6#{vaKp?`|yX#=5QJf>n7!@g0Bf>v&5_ zzE`W;L!1@O_okf4;Gcj6@{*Ej`V|I}ug4_gOGr`66CT3AAE~iy3we?i;JEg)4Sn&HvV?=A zxK1c#X&MJB9mV#h!1EIOil<_Gc!$s6>}b5MlHDU?)z<5d@DZzNadE>H2PkVxP(}K) zGXrNPa2!rLey9kx>GbN~=|Zm8A@J1mUHAk6{*B1ZhP==K4FwsA+Y`SA=&6L>2@_3T zhO7PdgMs|uwV01AMtj}SK#@eQQRc>pxga+fgWQHf7rjt+-Pyu8xlnDHa;e!J>4kLu zL$S!fjRbBJ|2wFt;|W!FdV+Jgz90C`z1B6{7HZ#P^jYXCSmDZzVZsoYBq_?%${)$e+bS`>5RrOzQ(* z=%yUVPGq1Txv2k`;>FsLOo6;=eb+&NXnE3sgWcSLsn$ZP75GXnefRLYBW;les?U&I R>#+&~S$uRrPx0Bdt-lKPo^t>I literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/gles/fs_rsm_shadow.bin b/examples/runtime/shaders/gles/fs_rsm_shadow.bin new file mode 100644 index 0000000000000000000000000000000000000000..6c9adff2df924e38136af19f601200e9737cadde GIT binary patch literal 173 zcmZ<@_F#E@C?=JWfvq&YBr~ssiIIVUkzpbO14CJ2QDtUcxjx|?lUS=AQiI6l=fatg8D$CDIQOHfq%u~?N-x}%*hSF5_^0kR@lzkjh_@DmJ!FEMFd<|@zVVdSR(exg1v{PY zN@&#c45TPbmCG!l|H!3z(^i`zp^dB#x=6>{jo+>d{eni2OFM@y!fM9X3GI~@I@bG$ zXl?WsS9Jj_q#qOp#vE*3B3Vom9QXHV5BD&Q;Pvs*5KT+c|Dvw$!V||h6$)h-g8@R=QC)>Uymw>f(>!V@_1RrS?uZJ`|M9n#e QIE$k@=jJ{M{iKxq0%drf{r~^~ literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/gles/vs_rsm_lbuffer.bin b/examples/runtime/shaders/gles/vs_rsm_lbuffer.bin new file mode 100644 index 0000000000000000000000000000000000000000..68d4a767431f6478180bf7f9ad8f737c93cc69e8 GIT binary patch literal 1196 zcmZ`(+m6#P5Y3|QOF(?XJf_PM+9th76;G@XNUXF{C0;Glx~)+XM~QQ3S9}K_#RI>@ z*ohmb8=^{yXU>ezIb-+x=F8~M-`~}(;})dkta{4C&(V$J+&FIvlBY+Ov9HNqywah! z1>s5gSf-mJ-HEEfz0OIlmya~XGW^}!SsWVI|ZHhcIcc7Ts(F~09PfZgt4f?fRjWmhwn zzz_;-%Atvd7K6~QkO9)_#p;vdWmF9|nOg;OC8B@ikX&0H+JXaxY!h?Ta)u8EH}@-z zY`pesi$Q=ZwOyOi9=A;b|Ae-pA(N@DHWpmOE-ao4CF-TsIQ{>ad{MrS1eJ#A(rUT1 z1TE0ZyZ*G!!=zSLhtUN9R87m=mLb41ssjJwIf|JrBevX~5;753Fn#4td z&AQj`p6ln;!~OL8^HE)p%SITtR^>{o-E>08gj_|+vUb}}{X$QAU+bsFE7<5_Q$eeq z=OBf3wUK2`|FA3fs=anLr>(5_+7|J2J4`oLzhKbGG}131Dw5Ox{ZJGEPOrg8ZGk29 zox(_3fHxKL#Vkj;Kc_pmgISuLX>a=js#1)-0g6&APtQP)Ma2Rbu7|`VL=D>+s5~O@ xBQ-mt^0cEe)~^#Yd733~1GiZ47~AjaSA&txlMoY7(bevE^g*#+#IO%a$q$}Ns1pDH literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/fs_rsm_combine.bin b/examples/runtime/shaders/glsl/fs_rsm_combine.bin new file mode 100644 index 0000000000000000000000000000000000000000..fd9c2e5cf0c355d9840769dfd32c15bbab6ec342 GIT binary patch literal 7517 zcmb`M+iu%N5Qg0%Km+BXFHjVFNi~Wh?tzk#q(G4%Xo31Fy(idMu?0w?K^^Qk$P4u; zJ2Sgna>%790|X4)Tn=Yvza9RZAwPcl^I87u?{7yJ&v)rIFE-iw;)e_P`DvGa&ewV2 zkJhW3+r2-!Uf%6*?a_-}y1UJ;^ZTpp&W?-@DOrD56+e=*=ZAE)JzgE}p3z}>{%ZeV z2Yx;{7avxe-Cx_Iz3RmwEq0qfHu+(@w} ztzn7+AXO)vBRhqI)jI2;y%`ddzej9o{02t9tn+Lyu2;q1 zxXG!+F|br(n=1St{)l%XiU9WhP%MFLRHB{K_h3AI`1&Y*6LLBmimO=lBvo$o~iz9%&{=wVD3Q2_hR9c*~2(M$P1m{2se%`fMCCCVwi@nbu3+QMew zZ5PDK`7yNs%=8|7!bEHgSN_h&h^Ok;CpFsyBPur?rY)x^SFOvDdF`TkVA46^rj4(7T;h_pMY@;3rFWsOu>8?%k^#c;VVmF;^;QlugQ~}sKpXRZob-J0HS~@MF+gymoAO_Di2@;{Cqbg_057NzA z#bm5tG`zwf58X^jDw<}G;uYOGcCUr-DF$KLsH_~?|KS-psp0@Vv~vIsf5XM31yy)S zKUKW1kwTp+-4SO|B^hZ_ou8tbgs75GRADbdR8f&QRZs?;iBp}!U^msMLj1B1@d6N6 z!B&h(6RKb@`x#%h8J~?#5nzsI)qrY5bF?Pki%iJSn3YMT*xFS z6h3oL=r5Sm5kmq$MSrDJCeE13l`h8iaqOza5~>p%e;8tnlE#!mq9`<#LV`FB#CYDp zn9G{PN~VXgQ$DB0mht&g;gpFp#)o>>Gfpl7QlXsUIK~Q90em#PHW`CifH8>UFpSkK z%vf<(XLv-)C^dnpZ;Fl{pQsO~hcHeM$Oqz(#CmibNv_3^R)X`~P2{tirp-pHdc^P=`C$EZwQrK{%_Ey1%T;d(x5GAWfTd{v)ju53ZB_BkJ+DlhaFMI0VEh{mpC4*BSgrv&v*dMir{-q8! zCMIbm1b962-kay~^5wbz|Ks1j@BG@4lC%9^Rx$CT=Qus*CMT)P5-RW?pPxBdvu*LJ zS2sJt)ACQb?W@gR-*HNs9eBEdlC36Cl9d!P8!g<6u;825;)$gN%U)Jgu!Xxzd5k=| z&QfvS$!W3`EDL{wk@WSR(s$lUXfXk!6NN~=hJ^AIJl}nH0b(I(0ZP!43L)c|+%GVW z4TMl6TU1WMI$-|c0lbYM%ZzTGq|DYqb$|gfw8mk;ZxF_&YHT5l>k0(%TEqc_!N`YO zxW`W?^QaS9RqQf`t$U6CLjxT8L51`e^~(JQeqsSmf;|EvOD9$xYMLfpDYfgTR_?Tx zW6VTaLvhvb%qp5)_n=3r(*$bxs*Tpc$U=;2#FAW25&C*W6OFG^wZ1bVr@`J=I`xS+ z(&rZJ9AWdftnk*dXi=h8Wu(h_d_KB4JmQdF=|CcQ$B}`HxkCJr_WlG+v* bRf9Ozm`cil3UoDK_UKhCM99fhFlV!FwOI<{NN8ochD6kORYqYI@gKAzWMrQr>TDVD zHqnEs^6_W|txcLrol%!iCMJZxSh_=%5mFVn9=~%K4MH$wO@<)fDj;8?Q3eyZc_S9G9Y9?KJe5bly*@C1GRY` zfmY6!h0Z1YV{HA44c0qJYhCWGTQ?JRKT$cm!eJH~jv*9V%uz#$LU+%0a1XNiIGOC#MUyc+ZrWtXQlSdp5u=1Gbl*H=Ms6}+uTS?rl)5BXNSGNyMG z;d%X77ppzph^C8sQM z!1JAUBv6yJNQE3;m{Y#ntIsS~Os>{6Wy`S2`BumbGO7~jk@pT$&}Y!QY>v;Qca}6O zQYOdu;L&>7jT{lF;2T82bBG4v&k#C_&66m}Xz8vhE08D|YlAz-?EyYP6!{pn?H0!I zZ~z}*guj!7qls6nRh4Ap`>$dHkq7b)b?6@qOWnZ`OT_JEN%IUA$i$*d9J0h~n#2t@ zMI1%%e|; o{!~Phd6B^l+)}j&Jl^D&d+^FEU=Hr#YrH(}jp%Pmun*4J51Iy;nE(I) literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/metal/fs_rsm_combine.bin b/examples/runtime/shaders/metal/fs_rsm_combine.bin new file mode 100644 index 0000000000000000000000000000000000000000..ef8a8cf216c7d6cfdc9956d1f1f48f1175c21165 GIT binary patch literal 10144 zcmc&)&2F4X5cXkDeu!0{c40FnL(`3a@*}MhMH^|YJw$toEJS7)dn5)%3}a6m{;IdA2K)!?s|%c(YBDf<>D$jSgwFyNj3kL!`w{yj&K^Zg+LHNI@|w^C(%~CNs8L zr)5%HU8UDY=f<8FPsIC^XjW^XFX|-zE^<%?;)lK#RK;^(ud>5ZuE(U-qk2QaE$><^~oy zV~jzD%YBjX<>keN6IZGBCt&#ZFT0pKk~QxZS6yFf@ZF$$S8Vp!9dd4d1X{+i|JFiuFT*up%T`^#{t!r$fu6z0o z%v)ul>qgZ@j#XFfgUZ4?+&z(R!~t8R>uto%Z?;?)e`DE4fe{5Pi-h?hSh?BW$3-Mj zV*Y1uDj$w10j~>>6)G;^w0VjZcT1LL2k1u(i);fwq)+^@3*;m5Z+iFvDw;~9vtXWmvuB+N|12ysk zns(G5ze4FdOVV9JXwvRpcibtefIoWw!{LH44A!6`xm(wrmz4 zv1}ASW6f82*QW&UaHz}16n_nyIfm4B6*Dz@#z%#g4!!8T^N6~|%56;*aHktr5JSk~l{22j(nW+bl9jvYTe z0IPGN&6*tg$5Gb&={xY81`x!<0NR~`LkqwYlx9b|?}3udp|JTT^*yeM+s>?Yj6Kr# z_yvhzpvhSy7$9B3YC3+p2!a~Hq0mj99Km2tB8cKa1OvNo1kezUA_z(pg5yav(8O(J zHo$}2*gY8N!)E8?5@>cd2qIs05e%>cSY0qcz69T$aGnFffJP9+!wA}qBY=)@96{Y( z>T`_RgA)MM#BFCxou)?~Jp(~+LHi&bgcN|-0c-$~FM9w&H+lLk7}5ZOco;ytaRks2 zjsvK>iw)rTE*NOywgJ4DvIEa)05v(A9jFh?9X~w)kuG}x;seF8XNRBN1%pc(KoAcC zDD1u=pdlOu5R@zqo!SJ2=4~sn!Wx4dX@WwJKsppE>_fHC=jD!{E`Xrc2T96;S$%nqyo98aM_)3%-1YT~M3JqAi@5+kQfVkA9@k@kUFQj-|jo5X+`0pN2? zVkA9@LGdtvcGHk!CNZEy063mOB{hkWQzkKzp2SG|KrN|Bj70Xg7!=e90H0$LBk4&D ziiZKTyM`Pyi29^&!-Vu42E~K; zg?85n$IM|ssgK|I4j58Xm~hGzCZwk@p?#bVsVPj@o5FxvA3sog`VJV#g4(7YTfKl~rG*z-K$(Pft(& E2Y+y2zW@LL literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/metal/fs_rsm_gbuffer.bin b/examples/runtime/shaders/metal/fs_rsm_gbuffer.bin new file mode 100644 index 0000000000000000000000000000000000000000..fdd2b86573ac24c06de28218cad74574d60f64bf GIT binary patch literal 549 zcmZ`#%}T>S5MIPn9>DXQqy-5H_Ex+}(L?c2Jk_v_aT6Cdvt=`@Rq^F~6<@^7pCzTa z?XchfYIAq~`}3rPxHuES*P2QotW>?jTtTH6%`&Rl`J7>Ikk@QBulSyN6mC2gFZovw#@+DD;}*B?>|1_ru)+IVe<*}d%z}fGNG0ZN)iSt+>c{^rL#{ zFLlL-Oeap;lTC6tJ3F&n-QIn8_3QV~?O^cf^>PxLdO&mmiC&QSf63kcyJ27*-;=m27oWmU0RA_f=VEDl3cm{AwSwNfxCj<>+8b zWUIBh;f3PzZove<8a^IR`MFUp=bDMsONp2--uhZ(X(@A`YLjd-zWu^mj>WkG+8CN7 zD>k!DrLj^hCP!9>Wm^tbiW$oaAV+jbawU=sWvCTfafF@E16Y&=E}tS=es4hEY4Fas zCQZ2{BRZcWy8r+bZ&f4tc==9?eGPR|U`%6=SeJCN7|j1f@x6R8tjRcLC`NsNYiI{>29A5-F} zP})OJ9Q4$Ko_3@R`k0XZ8uA>6BMK)F;g5!}h|_R~@pci1ZHHw<30v<3ad+NPm*d2t zPs1bio_VCs!mZ^*y7UJp?L(JkZ-aSfme08tdX8a)=woW!Xi#+Xe6T#DR7~y7v%OBe z1s5LLg(VcD1*Wl|dtmne(}YV8{8Cf3OfJxoT}QB^POS@O;l$`pdN(6ItL)`y)K@*R zRcGNQc{;#!iW92=20Hol{;6~KJluNi<8~wc8eF~z^VQ#_BFj>N!-+;gA8orQOVJFY zxsyDK;M%-~qZBc>o`~?|Em|YU$acmfa8dJ@LQMxyR1SODE}ru^{W}lcfjIKPgq8bO zjbmMF=331c-F!%#oBCnWoVAVx@(;jQ?J@w&06){9MFZW0KXr@;ouKPj%pDA literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/metal/fs_rsm_shadow.bin b/examples/runtime/shaders/metal/fs_rsm_shadow.bin new file mode 100644 index 0000000000000000000000000000000000000000..c88531c9d786168748fb33b7a4a51907a6af891a GIT binary patch literal 491 zcmZ{g%}T>S5XU2U%2Uiq5~!hIZ^fGwdng`?ry7Y_7SXT~I$*SnwG^7lasrj5a6L|p6j#uDeDFMbrR2b#r`=XY z1(Bdv+j;mMPQ_>e#s2*Ow=uF9rt03#>feI;IvcQyzx5Y~yfZk--cjrcyGhgJ7dVow A2><{9 literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/metal/vs_rsm_combine.bin b/examples/runtime/shaders/metal/vs_rsm_combine.bin new file mode 100644 index 0000000000000000000000000000000000000000..10fb2d926e2aac1c1d4353da5d043c5fff7fa15e GIT binary patch literal 659 zcmZ{iPfNov7>A2^>W7f`B%4TCU2k=s^)MU^cNryQT{(o2$i5XN3ndTTc%%RVGzE3 zfJ`WgQ=p_!B}c9#tk)D#^Nm3^nv9bqKBgXQ3R#sZrMD9&7B;b;%dA&}4lIJ5Ad8-M z1UsaCPm2A24t|q7Q#$Xj5mgZwlB+EfE6xrJtv;IJJ=3b_3s4W(pDT2EbW;~c3yugrh`T^>wW@xnRXjZlF Fdw+r_<-h;{ literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/metal/vs_rsm_gbuffer.bin b/examples/runtime/shaders/metal/vs_rsm_gbuffer.bin new file mode 100644 index 0000000000000000000000000000000000000000..83a9b434292a34ba5469410b1f2ca86b2cb32ace GIT binary patch literal 815 zcmZ{i(N2Rf7==mnil_Lm3``}A;nlKxy;xkbxEmy-+sdqgLdxF_XM8zd#TT(a88GKn z>7UbczMisLK3@NPzf!}1E5ncl<2&FarA1CQ6jF*LnVJO(xj`rsf^$rkZ)8iw6VD~W zrwI@z8NmsVh-V@t2?PN_6l^V#TCN?2)4nFp3WhA>1J$@zeO(TEmN-cAVV6XU&Zc!7 z1no7<)cnWwg|k@Ub{FtVA7qqfTbcwDuY>N*SBxGOB73h*_f#M)hn;9t-P4>f4%UUz zq7;*esRjxpI~p+_hIg>ZxZ3iwmNn)L)MunRvzBp8MP00IR`m}8G(oM-PR09xX}%{S z8dszC+d04t#*RCfl^;hnZ3rC_wdGct#?sF5u;H9BaKjGIvz4TZv(?OX9xCr@ RsR#u{DY(A3dUVq?egQN#5xxKb literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/metal/vs_rsm_lbuffer.bin b/examples/runtime/shaders/metal/vs_rsm_lbuffer.bin new file mode 100644 index 0000000000000000000000000000000000000000..1050eb976bf80e659367c3231845535b5daf952c GIT binary patch literal 1801 zcmbVNO>f#j5am$yz^|B7wN8nP!33hTz4X!?P$QxC5~0S?WYl<(vz+(+6PB#j;tS0L<+BB0^lZQHS+dM|dY~OQF;uut=;n^+ zKNY4{qYlerO*y^ImiggWXD3-btqbKszR{g($^~uO_E=@svMEV2KqvgesbDyfhLwV> zC{D8Zya$Uslb_j<;gJhke1;O2n&*@hvcQIQ zMGs1n7L0O@SEdDS=i2B$(0Q49xRIRoDO{7~5LH&teUg-0hFHh6I&Ha{_YgL6A8_QR zJ%j~I3OsP%F^IIN3CBZq;(o&?vn zWtjQ@Z~ooI{PFtd`;|EkxpEwxbFl+KQEW@GB5B~t8up{lQ~B&MXzgEb$wknde+!;8o@4!X01%4 z*fZK&n6dkh>Wkp9!EF~96(i75Dz_|IaCSIBpVendzE`4qrjQl=Of0I+X-c^O??Px% zib=#x0y)whi?~>=?qDN@`4ndo{hr3f6ba_Zu%4OYB17?u8ar