Expose cone aperture
This commit is contained in:
parent
9c5cc51235
commit
a1da8b0824
|
@ -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
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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':
|
||||
|
|
Loading…
Reference in a new issue