Expose penumbra scale
This commit is contained in:
parent
0025e77121
commit
9a20302114
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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'),
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in a new issue