Expose penumbra scale

This commit is contained in:
Lubos Lenco 2017-12-04 19:49:06 +01:00
parent 0025e77121
commit 9a20302114
11 changed files with 37 additions and 26 deletions

View file

@ -15,8 +15,6 @@ 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;
const int penumbraScale = 1;
float doBlur(const float blurWeight, const int pos, const vec3 nor, const vec2 texCoord) {
const float posadd = pos + 0.5;
@ -43,8 +41,10 @@ void main() {
float weight = blurWeights[0];
float d = texture(dist, texCoord).r;
int numTaps = min(int(d * 10 * penumbraScale), 10 * penumbraScale);
#ifdef _PenumbraScale
for (int i = 1; i < numTaps; ++i) weight += doBlur(blurWeights[int(i / penumbraScale)], i, nor, texCoord);
#else
for (int i = 1; i < numTaps; ++i) weight += doBlur(blurWeights[i - 1], i, nor, texCoord);
// scale=2
// for (int i = 1; i < numTaps; ++i) weight += doBlur(blurWeights[int(i / 2)], i, nor, texCoord);
#endif
fragColor /= weight;
}

View file

@ -43,11 +43,12 @@ uniform sampler2D gbuffer1;
// TODO: separate shaders
#ifndef _NoShadows
//!uniform sampler2D shadowMap;
//!uniform samplerCube shadowMapCube;
#endif
#ifdef _SoftShadows
uniform sampler2D svisibility;
#ifdef _SoftShadows
uniform sampler2D svisibility;
#else
//!uniform sampler2D shadowMap;
//!uniform samplerCube shadowMapCube;
#endif
#endif
#ifdef _DFRS
//!uniform sampler3D sdftex;

View file

@ -37,16 +37,17 @@ vec2 lightPlane;
#endif
#ifndef _NoShadows
//!uniform sampler2D shadowMap;
#ifdef _CSM
//!uniform vec4 casData[shadowmapCascades * 4 + 4];
#ifdef _SoftShadows
uniform sampler2D svisibility;
#else
uniform mat4 LWVP;
//!uniform sampler2D shadowMap;
#ifdef _CSM
//!uniform vec4 casData[shadowmapCascades * 4 + 4];
#else
uniform mat4 LWVP;
#endif
#endif
#endif
#ifdef _SoftShadows
uniform sampler2D svisibility;
#endif
#ifdef _LampClouds
uniform sampler2D texClouds;
uniform float time;

View file

@ -10,8 +10,6 @@ out float fragColor;
uniform vec2 step;
const int penumbraScale = 1;
void main() {
fragColor = 1.0;
const vec2 smStep = 1.0 / shadowmapSize;

View file

@ -45,7 +45,7 @@ void main() {
// Distance
float d = texture(dilate, lPos.xy).r;
fragColor[1] = max((lPos.z - d), 0.0);
fragColor[1] *= 200;
fragColor[1] *= 100 * penumbraDistance;
// Mask non-occluded pixels
// fragColor.b = mask;

View file

@ -547,7 +547,6 @@ class RenderPathCreator {
path.bindTarget("gbuffer0", "gbuffer0");
path.drawShader("visibility_pass/visibility_pass/visibility_pass");
path.setTarget("visb");
path.bindTarget("visa", "tex");
path.bindTarget("gbuffer0", "gbuffer0");

View file

@ -196,3 +196,5 @@ def build():
assets.add_shader2('blur_shadow_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'

View file

@ -148,15 +148,13 @@ def build_node_tree(world):
assets.add_khafile_def('arm_voxelgi_revox')
if rpdat.arm_voxelgi_camera:
wrd.world_defs += '_VoxelGICam'
if voxelgi and wrd.arm_voxelgi_diff_cones == '5':
wrd.world_defs += '_VoxelGICone5'
if voxelao and wrd.arm_voxelgi_ao_cones == '9':
wrd.world_defs += '_VoxelAOCone9'
wrd.world_defs += '_Rad' # Always do radiance for voxels
wrd.world_defs += '_Irr'
if voxelgi:
assets.add_khafile_def('arm_voxelgi')
wrd.world_defs += '_VoxelGI'
if wrd.arm_voxelgi_diff_cones == '5':
wrd.world_defs += '_VoxelGICone5'
if rpdat.arm_voxelgi_shadows:
wrd.world_defs += '_VoxelGIDirect'
wrd.world_defs += '_VoxelGIShadow'
@ -165,9 +163,10 @@ def build_node_tree(world):
wrd.world_defs += '_VoxelGIRefract'
if rpdat.arm_voxelgi_emission:
wrd.world_defs += '_VoxelGIEmission'
wrd.world_defs += '_VoxelGI'
elif voxelao:
wrd.world_defs += '_VoxelAO'
if wrd.arm_voxelgi_ao_cones == '9':
wrd.world_defs += '_VoxelAOCone9'
if arm.utils.get_gapi().startswith('direct3d'): # Flip Y axis in drawQuad command
wrd.world_defs += '_InvY'

View file

@ -420,6 +420,8 @@ class ArmRPListItem(bpy.types.PropertyGroup):
('Off', 'Off', 'Off'),
('Auto', 'Auto', 'Auto')],
name="Soft Shadows", description="Soft shadows with variable penumbra (spot and non-cascaded sun lamp supported)", default='Off', update=assets.invalidate_shader_cache)
arm_soft_shadows_penumbra = bpy.props.IntProperty(name="Penumbra", description="Variable penumbra scale", default=1, min=0, max=10, update=assets.invalidate_shader_cache)
arm_soft_shadows_distance = bpy.props.FloatProperty(name="Distance", description="Variable penumbra distance", default=2.0, min=0, max=10, update=assets.invalidate_shader_cache)
arm_ssrs = bpy.props.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

@ -1006,6 +1006,9 @@ class ArmRenderPathPanel(bpy.types.Panel):
layout.separator()
layout.prop(rpdat, 'arm_soft_shadows')
if rpdat.arm_soft_shadows != 'Off':
layout.prop(rpdat, 'arm_soft_shadows_penumbra')
layout.prop(rpdat, 'arm_soft_shadows_distance')
layout.prop(rpdat, 'arm_samples_per_pixel')
layout.prop(rpdat, 'arm_texture_filter')
layout.prop(rpdat, "arm_diffuse_model")

View file

@ -441,6 +441,12 @@ const float ssrJitter = """ + str(round(wrd.arm_ssr_jitter * 100) / 100) + """;
if rpdat.arm_ssrs:
f.write(
"""const float ssrsRayStep = """ + str(round(wrd.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: