Expose cone aperture

This commit is contained in:
luboslenco 2019-02-09 15:34:16 +01:00
parent 9c5cc51235
commit a1da8b0824
7 changed files with 25 additions and 5 deletions

View file

@ -331,7 +331,7 @@ void main() {
#ifdef _VoxelAOvar
#ifdef _VoxelShadow
svisibility *= 1.0 - traceShadow(voxels, voxpos, sunDir, 0.14, 5.0);
svisibility *= 1.0 - traceShadow(voxels, voxpos, sunDir);
#endif
#endif

View file

@ -146,8 +146,25 @@ float traceConeAO(sampler3D voxels, const vec3 origin, vec3 dir, const float ape
return sampleCol;
}
float traceShadow(sampler3D voxels, const vec3 origin, const vec3 dir, const float aperture, const float targetDistance) {
return traceConeAO(voxels, origin, dir, aperture, targetDistance);
float traceConeAOShadow(sampler3D voxels, const vec3 origin, vec3 dir, const float aperture, const float maxDist, const float offset) {
dir = normalize(dir);
float sampleCol = 0.0;
float dist = 1.5 * VOXEL_SIZE * voxelgiOffset * 2.5; //
float diam = dist * aperture;
vec3 samplePos;
while (sampleCol < 1.0 && dist < maxDist) {
samplePos = dir * dist + origin;
float mip = max(log2(diam * voxelgiResolution.x), 0);
float mipSample = textureLod(voxels, samplePos * 0.5 + vec3(0.5), mip).r;
sampleCol += (1 - sampleCol) * mipSample;
dist += max(diam / 2, VOXEL_SIZE);
diam = dist * aperture;
}
return sampleCol;
}
float traceShadow(sampler3D voxels, const vec3 origin, const vec3 dir) {
return traceConeAO(voxels, origin, dir, 0.14 * voxelgiAperture, 2.5 * voxelgiRange);
}
float traceAO(const vec3 origin, const vec3 normal, sampler3D voxels) {

View file

@ -105,7 +105,7 @@ vec3 sampleLight(const vec3 p, const vec3 n, const vec3 v, const float dotNV, co
#ifdef _VoxelAOvar
#ifdef _VoxelShadow
direct *= 1.0 - traceShadow(voxels, voxpos, l, 0.14, 5.0);
direct *= 1.0 - traceShadow(voxels, voxpos, l);
#endif
#endif

View file

@ -670,7 +670,7 @@ def make_forward_base(con_mesh, parse_opacity=False, transluc_pass=False):
frag.write('svisibility = PCF(shadowMap, lPos.xy, lPos.z - shadowsBias, smSize);')
frag.write('}') # receiveShadow
if '_VoxelShadow' in wrd.world_defs and '_VoxelAOvar' in wrd.world_defs:
frag.write('svisibility *= 1.0 - traceShadow(voxels, voxpos, sunDir, 0.14, 5.0);')
frag.write('svisibility *= 1.0 - traceShadow(voxels, voxpos, sunDir);')
frag.write('direct += (lambertDiffuseBRDF(albedo, sdotNL) + specularBRDF(f0, roughness, sdotNL, sdotNH, dotNV, sdotVH) * specular) * sunCol * svisibility;')
# sun

View file

@ -418,6 +418,7 @@ class ArmRPListItem(bpy.types.PropertyGroup):
arm_voxelgi_step: FloatProperty(name="Step", description="Step size", default=1.0, update=assets.invalidate_shader_cache)
arm_voxelgi_offset: FloatProperty(name="Offset", description="Ray offset", default=1.0, update=assets.invalidate_shader_cache)
arm_voxelgi_range: FloatProperty(name="Range", description="Maximum range", default=2.0, update=assets.invalidate_shader_cache)
arm_voxelgi_aperture: FloatProperty(name="Aperture", description="Cone aperture for shadow trace", default=1.0, update=assets.invalidate_shader_cache)
arm_sss_width: FloatProperty(name="Width", description="SSS blur strength", default=1.0, update=assets.invalidate_shader_cache)
arm_clouds_density: FloatProperty(name="Density", default=1.0, min=0.0, max=1.0, update=assets.invalidate_shader_cache)
arm_clouds_size: FloatProperty(name="Size", default=1.0, min=0.0, max=10.0, update=assets.invalidate_shader_cache)

View file

@ -840,6 +840,7 @@ class ArmRenderPathVoxelsPanel(bpy.types.Panel):
col.prop(rpdat, 'arm_voxelgi_step')
col.prop(rpdat, 'arm_voxelgi_range')
col.prop(rpdat, 'arm_voxelgi_offset')
col.prop(rpdat, 'arm_voxelgi_aperture')
class ArmRenderPathWorldPanel(bpy.types.Panel):
bl_label = "World"

View file

@ -582,6 +582,7 @@ const float voxelgiEnv = """ + str(round(rpdat.arm_voxelgi_env * 100) / 100) + "
const float voxelgiStep = """ + str(round(rpdat.arm_voxelgi_step * 100) / 100) + """;
const float voxelgiRange = """ + str(round(rpdat.arm_voxelgi_range * 100) / 100) + """;
const float voxelgiOffset = """ + str(round(rpdat.arm_voxelgi_offset * 100) / 100) + """;
const float voxelgiAperture = """ + str(round(rpdat.arm_voxelgi_aperture * 100) / 100) + """;
""")
if rpdat.rp_sss_state == 'On':