Shadows cleanup

This commit is contained in:
luboslenco 2019-03-23 10:56:30 +01:00
parent cafaaf9643
commit c29e8fdbd0
16 changed files with 0 additions and 431 deletions

View file

@ -1,58 +0,0 @@
#version 450
#include "compiled.inc"
#include "std/gbuffer.glsl"
uniform sampler2D tex;
uniform sampler2D gbuffer0;
uniform sampler2D dist;
uniform vec2 dirInv; // texStep
in vec2 texCoord;
out float fragColor;
const float blurWeights[10] = float[] (0.132572, 0.125472, 0.106373, 0.08078, 0.05495, 0.033482, 0.018275, 0.008934, 0.003912, 0.001535);
const float discardThreshold = 0.95;
float doBlur(const float blurWeight, const int pos, const vec3 nor, const float depth, const vec2 texCoord) {
const float posadd = pos + 0.5;
vec4 g0 = textureLod(gbuffer0, texCoord + pos * dirInv, 0.0);
vec3 nor2 = getNor(g0.rg);
float influenceFactor = step(discardThreshold, dot(nor2, nor)) * step(abs(depth - g0.a), 0.001);
float col = textureLod(tex, texCoord + posadd * dirInv, 0.0).r;
fragColor += col * blurWeight * influenceFactor;
float weight = blurWeight * influenceFactor;
g0 = textureLod(gbuffer0, texCoord - pos * dirInv, 0.0);
nor2 = getNor(g0.rg);
influenceFactor = step(discardThreshold, dot(nor2, nor)) * step(abs(depth - g0.a), 0.001);
col = textureLod(tex, texCoord - posadd * dirInv, 0.0).r;
fragColor += col * blurWeight * influenceFactor;
weight += blurWeight * influenceFactor;
return weight;
}
void main() {
vec4 g0 = textureLod(gbuffer0, texCoord, 0.0);
vec3 nor = getNor(g0.rg);
float depth = g0.a;
float sm = textureLod(tex, texCoord, 0.0).r;
fragColor = sm * blurWeights[0];
float weight = blurWeights[0];
float d = textureLod(dist, texCoord, 0.0).r;
int numTaps = clamp(int(d * 10 * penumbraScale), 2, 10 * penumbraScale);
#ifdef _PenumbraScale
for (int i = 1; i < numTaps; ++i) {
weight += doBlur(blurWeights[int(i / penumbraScale)], i, nor, depth, texCoord);
}
#else
for (int i = 1; i < numTaps; ++i){
weight += doBlur(blurWeights[i - 1], i, nor, depth, texCoord);
}
#endif
fragColor /= weight;
}

View file

@ -1,74 +0,0 @@
{
"contexts": [
{
"name": "blur_shadow_pass_x",
"depth_write": false,
"compare_mode": "always",
"cull_mode": "none",
"links": [
{
"name": "dirInv",
"link": "_vec2xInv"
}
],
"texture_params": [],
"vertex_shader": "../include/pass.vert.glsl",
"fragment_shader": "blur_shadow_pass.frag.glsl"
},
{
"name": "blur_shadow_pass_y",
"depth_write": false,
"compare_mode": "always",
"cull_mode": "none",
"links": [
{
"name": "dirInv",
"link": "_vec2yInv"
}
],
"texture_params": [],
"vertex_shader": "../include/pass.vert.glsl",
"fragment_shader": "blur_shadow_pass.frag.glsl"
},
{
"name": "blur_shadow_pass_y_blend",
"depth_write": false,
"compare_mode": "always",
"cull_mode": "none",
"blend_source": "destination_color",
"blend_destination": "blend_zero",
"blend_operation": "add",
"links": [
{
"name": "dirInv",
"link": "_vec2yInv"
}
],
"texture_params": [],
"vertex_shader": "../include/pass.vert.glsl",
"fragment_shader": "blur_shadow_pass.frag.glsl"
},
{
"name": "blur_shadow_pass_y_blend_add",
"depth_write": false,
"compare_mode": "always",
"cull_mode": "none",
"blend_source": "blend_one",
"blend_destination": "blend_one",
"blend_operation": "add",
"alpha_blend_source": "blend_one",
"alpha_blend_destination": "blend_one",
"alpha_blend_operation": "add",
"links": [
{
"name": "dirInv",
"link": "_vec2yInv"
}
],
"texture_params": [],
"vertex_shader": "../include/pass.vert.glsl",
"fragment_shader": "blur_shadow_pass.frag.glsl"
}
]
}

View file

@ -145,9 +145,6 @@ uniform vec3 sunCol;
#else
uniform mat4 LWVP;
#endif
// #ifdef _SoftShadows
// uniform sampler2D svisibility;
// #else
#endif // _ShadowMap
#endif
@ -316,10 +313,6 @@ void main() {
vec3 sdirect = lambertDiffuseBRDF(albedo, sdotNL) +
specularBRDF(f0, metrough.y, sdotNL, sdotNH, dotNV, sdotVH) * occspec.y;
// #ifdef _SoftShadows
// svisibility = textureLod(svisibility, texCoord, 0.0).r;
// #endif
#ifdef _ShadowMap
#ifdef _CSM
svisibility = shadowTestCascade(shadowMap, eye, p + n * shadowsBias * 10, shadowsBias);

View file

@ -77,9 +77,6 @@ uniform vec3 sunCol;
#else
uniform mat4 LWVP;
#endif
// #ifdef _SoftShadows
// uniform sampler2D svisibility;
// #else
#endif // _ShadowMap
#endif

View file

@ -1,17 +0,0 @@
#version 450
#include "compiled.inc"
#include "std/gbuffer.glsl"
uniform sampler2D shadowMap;
in vec2 texCoord;
out float fragColor;
uniform vec2 step;
void main() {
fragColor = 1.0;
const vec2 smStep = 1.0 / shadowmapSize;
for (int i = -20 * penumbraScale; i < 20 * penumbraScale; i++) fragColor = min(fragColor, textureLod(shadowMap, texCoord.xy + step * smStep * i, 0.0).r);
}

View file

@ -1,34 +0,0 @@
{
"contexts": [
{
"name": "dilate_pass_x",
"depth_write": false,
"compare_mode": "always",
"cull_mode": "none",
"links": [
{
"name": "step",
"link": "_vec2x"
}
],
"texture_params": [],
"vertex_shader": "../include/pass.vert.glsl",
"fragment_shader": "dilate_pass.frag.glsl"
},
{
"name": "dilate_pass_y",
"depth_write": false,
"compare_mode": "always",
"cull_mode": "none",
"links": [
{
"name": "step",
"link": "_vec2y"
}
],
"texture_params": [],
"vertex_shader": "../include/pass.vert.glsl",
"fragment_shader": "dilate_pass.frag.glsl"
}
]
}

View file

@ -1,55 +0,0 @@
#version 450
#include "compiled.inc"
#include "std/gbuffer.glsl"
#include "std/math.glsl"
#include "std/shadows.glsl"
uniform sampler2D shadowMap;
uniform samplerCube shadowMapCube;
uniform sampler2D dilate;
uniform sampler2D gbufferD;
uniform vec2 cameraProj;
uniform float shadowsBias;
uniform vec3 eye;
uniform vec3 eyeLook;
uniform mat4 LWVP;
uniform int lightShadow;
uniform vec2 lightProj;
uniform vec3 lightPos;
in vec2 texCoord;
in vec3 viewRay;
out float fragColor[2];
void main() {
float depth = textureLod(gbufferD, texCoord, 0.0).r * 2.0 - 1.0;
vec3 p = getPos(eye, eyeLook, normalize(viewRay), depth, cameraProj);
vec4 lightPosition = LWVP * vec4(p, 1.0);
vec3 lPos = lightPosition.xyz / lightPosition.w;
// Visibility
if (lightShadow == 1) {
float sm = texture(shadowMap, lPos.xy).r;
fragColor[0] = float(sm + shadowsBias > lPos.z);
// Distance
float d = textureLod(dilate, lPos.xy, 0.0).r;
fragColor[1] = max((lPos.z - d), 0.0);
fragColor[1] *= 100 * penumbraDistance;
}
else { // Cube
vec3 lp = lightPos - p;
vec3 l = normalize(lp);
#ifdef HLSL
l.y = -l.y;
#endif
fragColor[0] = float(texture(shadowMapCube, -l).r + shadowsBias > lpToDepth(lp, lightProj));
fragColor[1] = 0.0;
}
// Mask non-occluded pixels
// fragColor.b = mask;
}

View file

@ -1,50 +0,0 @@
{
"contexts": [
{
"name": "visibility_pass",
"depth_write": false,
"compare_mode": "always",
"cull_mode": "none",
"links": [
{
"name": "eye",
"link": "_cameraPosition"
},
{
"name": "eyeLook",
"link": "_cameraLook"
},
{
"name": "invVP",
"link": "_inverseViewProjectionMatrix"
},
{
"name": "cameraProj",
"link": "_cameraPlaneProj"
},
{
"name": "shadowsBias",
"link": "_lightShadowsBias"
},
{
"name": "LWVP",
"link": "_biasLightWorldViewProjectionMatrix"
},
{
"name": "lightShadow",
"link": "_lightCastShadow"
},
{
"name": "lightProj",
"link": "_lightPlaneProj"
},
{
"name": "lightPos",
"link": "_lightPosition"
}
],
"vertex_shader": "visibility_pass.vert.glsl",
"fragment_shader": "visibility_pass.frag.glsl"
}
]
}

View file

@ -1,28 +0,0 @@
#version 450
#include "compiled.inc"
uniform mat4 invVP;
uniform vec3 eye;
in vec2 pos;
out vec2 texCoord;
out vec3 viewRay;
void main() {
// Scale vertex attribute to [0-1] range
const vec2 madd = vec2(0.5, 0.5);
texCoord = pos.xy * madd + madd;
#ifdef HLSL
texCoord.y = 1.0 - texCoord.y;
#endif
gl_Position = vec4(pos.xy, 0.0, 1.0);
// NDC (at the back of cube)
vec4 v = vec4(pos.x, pos.y, 1.0, 1.0);
v = vec4(invVP * v);
v.xyz /= v.w;
viewRay = v.xyz - eye;
}

View file

@ -54,9 +54,6 @@ uniform vec3 sunCol;
#else
uniform mat4 LWVP;
#endif
// #ifdef _SoftShadows
// uniform sampler2D svisibility;
// #else
#endif // _ShadowMap
#endif

View file

@ -150,41 +150,7 @@ class Inc {
if (l.data.raw.type == "point") pointIndex++;
else if (l.data.raw.type == "spot" || l.data.raw.type == "area") spotIndex++;
}
// One light at a time for now, precompute all lights for tiled
// #if rp_soft_shadows
// if (l.raw.type != "point") {
// path.setTarget("visa"); // Merge using min blend
// Inc.bindShadowMap();
// path.drawShader("shader_datas/dilate_pass/dilate_pass_x");
// path.setTarget("visb");
// path.bindTarget("visa", "shadowMap");
// path.drawShader("shader_datas/dilate_pass/dilate_pass_y");
// }
// path.setTarget("visa", ["dist"]);
// //if (i == 0) path.clearTarget(0x00000000);
// if (l.raw.type != "point") path.bindTarget("visb", "dilate");
// Inc.bindShadowMap();
// //path.bindTarget("_main", "gbufferD");
// path.bindTarget("gbuffer0", "gbuffer0");
// path.drawShader("shader_datas/visibility_pass/visibility_pass");
// path.setTarget("visb");
// path.bindTarget("visa", "tex");
// path.bindTarget("gbuffer0", "gbuffer0");
// path.bindTarget("dist", "dist");
// path.drawShader("shader_datas/blur_shadow_pass/blur_shadow_pass_x");
// path.setTarget("visa");
// path.bindTarget("visb", "tex");
// path.bindTarget("gbuffer0", "gbuffer0");
// path.bindTarget("dist", "dist");
// path.drawShader("shader_datas/blur_shadow_pass/blur_shadow_pass_y");
// #end
#end // rp_shadowmap
}

View file

@ -349,40 +349,6 @@ class RenderPathDeferred {
}
#end
#if rp_soft_shadows
{
path.loadShader("shader_datas/dilate_pass/dilate_pass_x");
path.loadShader("shader_datas/dilate_pass/dilate_pass_y");
path.loadShader("shader_datas/visibility_pass/visibility_pass");
path.loadShader("shader_datas/blur_shadow_pass/blur_shadow_pass_x");
path.loadShader("shader_datas/blur_shadow_pass/blur_shadow_pass_y");
{
var t = new RenderTargetRaw();
t.name = "visa";
t.width = 0;
t.height = 0;
t.format = 'R16';
path.createRenderTarget(t);
}
{
var t = new RenderTargetRaw();
t.name = "visb";
t.width = 0;
t.height = 0;
t.format = 'R16';
path.createRenderTarget(t);
}
{
var t = new RenderTargetRaw();
t.name = "dist";
t.width = 0;
t.height = 0;
t.format = 'R16';
path.createRenderTarget(t);
}
}
#end
#if arm_config
{
var t = new RenderTargetRaw();
@ -613,11 +579,7 @@ class RenderPathDeferred {
#if rp_shadowmap
{
#if rp_soft_shadows
path.bindTarget("visa", "svisibility");
#else
Inc.bindShadowMap();
#end
}
#end

View file

@ -339,18 +339,6 @@ def build():
if rpdat.rp_dynres:
assets.add_khafile_def('rp_dynres')
# if rpdat.arm_soft_shadows == 'On':
# if rpdat.rp_shadowmap_cascades == '1':
# assets.add_shader_pass('dilate_pass')
# assets.add_shader_pass('visibility_pass')
# assets.add_shader_pass('blur_shadow_pass')
# assets.add_khafile_def('rp_soft_shadows')
# wrd.world_defs += '_SoftShadows'
# if rpdat.arm_soft_shadows_penumbra != 1:
# wrd.world_defs += '_PenumbraScale'
# else:
# log.warn('Disabling soft shadows - "Armory Render Path - Cascades" requires to be set to 1 for now')
gbuffer2 = '_Veloc' in wrd.world_defs
if gbuffer2:
assets.add_khafile_def('rp_gbuffer2')

View file

@ -346,13 +346,6 @@ class ArmRPListItem(bpy.types.PropertyGroup):
('0.25', '0.25', '0.25')],
name="Resolution Z", description="3D texture z resolution multiplier", default='1.0', update=update_renderpath)
arm_clouds: BoolProperty(name="Clouds", default=False, update=assets.invalidate_shader_cache)
arm_soft_shadows: EnumProperty(
items=[('On', 'On', 'On'),
('Off', 'Off', 'Off'),
('Auto', 'Auto', 'Auto')],
name="Soft Shadows", description="Soft shadows with variable penumbra (spot and non-cascaded sun light supported)", default='Off', update=assets.invalidate_shader_cache)
arm_soft_shadows_penumbra: IntProperty(name="Penumbra", description="Variable penumbra scale", default=1, min=0, max=10, update=assets.invalidate_shader_cache)
arm_soft_shadows_distance: FloatProperty(name="Distance", description="Variable penumbra distance", default=1.0, min=0, max=10, update=assets.invalidate_shader_cache)
arm_ssrs: BoolProperty(name="SSRS", description="Screen-space ray-traced shadows", default=False, update=assets.invalidate_shader_cache)
arm_texture_filter: EnumProperty(
items=[('Anisotropic', 'Anisotropic', 'Anisotropic'),

View file

@ -808,11 +808,6 @@ class ArmRenderPathShadowsPanel(bpy.types.Panel):
col2.enabled = rpdat.rp_shadowmap_cascades != '1'
col2.prop(rpdat, 'arm_shadowmap_split')
col.prop(rpdat, 'arm_shadowmap_bounds')
# col.prop(rpdat, 'arm_soft_shadows')
# col2 = col.column()
# col2.enabled = rpdat.arm_soft_shadows != 'Off'
# col2.prop(rpdat, 'arm_soft_shadows_penumbra')
# col2.prop(rpdat, 'arm_soft_shadows_distance')
col.prop(rpdat, 'arm_pcfsize')
class ArmRenderPathVoxelsPanel(bpy.types.Panel):

View file

@ -523,12 +523,6 @@ const float ssrJitter = """ + str(round(rpdat.arm_ssr_jitter * 100) / 100) + """
if rpdat.arm_ssrs:
f.write(
"""const float ssrsRayStep = """ + str(round(rpdat.arm_ssrs_ray_step * 100) / 100) + """;
""")
if rpdat.arm_soft_shadows == 'On':
f.write(
"""const int penumbraScale = """ + str(rpdat.arm_soft_shadows_penumbra) + """;
const float penumbraDistance = """ + str(rpdat.arm_soft_shadows_distance) + """;
""")
if rpdat.rp_volumetriclight: