Update leenkx/Shaders/std/conetrace.glsl
This commit is contained in:
		@ -125,7 +125,7 @@ vec4 traceCone(const sampler3D voxels, const sampler3D voxelsSDF, const vec3 ori
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		if(clipmap_blend > 0.0 && clipmap_index < voxelgiClipmapCount - 1) {
 | 
							if(clipmap_blend > 0.0 && clipmap_index < voxelgiClipmapCount - 1) {
 | 
				
			||||||
			vec4 mipSampleNext = sampleVoxel(voxels, p0, clipmaps, clipmap_index + 1.0, step_dist, precomputed_direction, face_offset, direction_weight);
 | 
								vec4 mipSampleNext = sampleVoxel(voxels, p0, clipmaps, clipmap_index + 1.0, step_dist, precomputed_direction, face_offset, direction_weight);
 | 
				
			||||||
			mipSample = mix(mipSample, mipSampleNext, smoothstep(0.0, 1.0, clipmap_blend));
 | 
								mipSample = mix(mipSample, mipSampleNext, clipmap_blend);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		sampleCol += (1.0 - sampleCol.a) * mipSample;
 | 
							sampleCol += (1.0 - sampleCol.a) * mipSample;
 | 
				
			||||||
@ -148,8 +148,9 @@ vec4 traceCone(const sampler3D voxels, const sampler3D voxelsSDF, const vec3 ori
 | 
				
			|||||||
vec4 traceDiffuse(const vec3 origin, const vec3 normal, const sampler3D voxels, const float clipmaps[voxelgiClipmapCount * 10]) {
 | 
					vec4 traceDiffuse(const vec3 origin, const vec3 normal, const sampler3D voxels, const float clipmaps[voxelgiClipmapCount * 10]) {
 | 
				
			||||||
	float sum = 0.0;
 | 
						float sum = 0.0;
 | 
				
			||||||
	vec4 amount = vec4(0.0);
 | 
						vec4 amount = vec4(0.0);
 | 
				
			||||||
 | 
						mat3 TBN = makeTangentBasis(normal);
 | 
				
			||||||
	for (int i = 0; i < DIFFUSE_CONE_COUNT; ++i) {
 | 
						for (int i = 0; i < DIFFUSE_CONE_COUNT; ++i) {
 | 
				
			||||||
		vec3 coneDir = DIFFUSE_CONE_DIRECTIONS[i];
 | 
							vec3 coneDir = TBN * DIFFUSE_CONE_DIRECTIONS[i];
 | 
				
			||||||
		const float cosTheta = dot(normal, coneDir);
 | 
							const float cosTheta = dot(normal, coneDir);
 | 
				
			||||||
		if (cosTheta <= 0)
 | 
							if (cosTheta <= 0)
 | 
				
			||||||
			continue;
 | 
								continue;
 | 
				
			||||||
@ -166,7 +167,7 @@ vec4 traceDiffuse(const vec3 origin, const vec3 normal, const sampler3D voxels,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
vec4 traceSpecular(const vec3 origin, const vec3 normal, const sampler3D voxels, const sampler3D voxelsSDF, const vec3 viewDir, const float roughness, const float clipmaps[voxelgiClipmapCount * 10], const vec2 pixel, const vec2 velocity) {
 | 
					vec4 traceSpecular(const vec3 origin, const vec3 normal, const sampler3D voxels, const sampler3D voxelsSDF, const vec3 viewDir, const float roughness, const float clipmaps[voxelgiClipmapCount * 10], const vec2 pixel, const vec2 velocity) {
 | 
				
			||||||
	vec3 specularDir = reflect(-viewDir, normal);
 | 
						vec3 specularDir = reflect(normalize(-viewDir), normal);
 | 
				
			||||||
	vec3 P = origin + specularDir * ((BayerMatrix8[int(pixel.x + velocity.x) % 8][int(pixel.y + velocity.y) % 8] - 0.5)) * voxelgiStep;
 | 
						vec3 P = origin + specularDir * ((BayerMatrix8[int(pixel.x + velocity.x) % 8][int(pixel.y + velocity.y) % 8] - 0.5)) * voxelgiStep;
 | 
				
			||||||
	vec4 amount = traceCone(voxels, voxelsSDF, P, normal, specularDir, 0, true, roughness, voxelgiStep, clipmaps);
 | 
						vec4 amount = traceCone(voxels, voxelsSDF, P, normal, specularDir, 0, true, roughness, voxelgiStep, clipmaps);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -177,8 +178,8 @@ vec4 traceSpecular(const vec3 origin, const vec3 normal, const sampler3D voxels,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
vec4 traceRefraction(const vec3 origin, const vec3 normal, sampler3D voxels, sampler3D voxelsSDF, const vec3 viewDir, const float ior, const float roughness, const float clipmaps[voxelgiClipmapCount * 10], const vec2 pixel, const vec2 velocity, const float opacity) {
 | 
					vec4 traceRefraction(const vec3 origin, const vec3 normal, sampler3D voxels, sampler3D voxelsSDF, const vec3 viewDir, const float ior, const float roughness, const float clipmaps[voxelgiClipmapCount * 10], const vec2 pixel, const vec2 velocity, const float opacity) {
 | 
				
			||||||
 	const float transmittance = 1.0;
 | 
					 	const float transmittance = 1.0 - opacity;
 | 
				
			||||||
 	vec3 refractionDir = refract(-viewDir, normal, 1.0 / ior);
 | 
					 	vec3 refractionDir = refract(normalize(-viewDir), normal, 1.0 / ior);
 | 
				
			||||||
 	vec3 P = origin + refractionDir * (BayerMatrix8[int(pixel.x + velocity.x) % 8][int(pixel.y + velocity.y) % 8] - 0.5) * voxelgiStep;
 | 
					 	vec3 P = origin + refractionDir * (BayerMatrix8[int(pixel.x + velocity.x) % 8][int(pixel.y + velocity.y) % 8] - 0.5) * voxelgiStep;
 | 
				
			||||||
	vec4 amount =  transmittance * traceCone(voxels, voxelsSDF, P, normal, refractionDir, 0, true, roughness, voxelgiStep, clipmaps);
 | 
						vec4 amount =  transmittance * traceCone(voxels, voxelsSDF, P, normal, refractionDir, 0, true, roughness, voxelgiStep, clipmaps);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -259,7 +260,6 @@ float traceAO(const vec3 origin, const vec3 normal, const sampler3D voxels, cons
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef _VoxelShadow
 | 
					#ifdef _VoxelShadow
 | 
				
			||||||
float traceConeShadow(const sampler3D voxels, const sampler3D voxelsSDF, const vec3 origin, const vec3 n, const vec3 dir, const float aperture, const float step_size, const float clipmaps[voxelgiClipmapCount * 10]) {
 | 
					float traceConeShadow(const sampler3D voxels, const sampler3D voxelsSDF, const vec3 origin, const vec3 n, const vec3 dir, const float aperture, const float step_size, const float clipmaps[voxelgiClipmapCount * 10]) {
 | 
				
			||||||
    float sampleCol = 0.0;
 | 
					    float sampleCol = 0.0;
 | 
				
			||||||
@ -287,7 +287,7 @@ float traceConeShadow(const sampler3D voxels, const sampler3D voxelsSDF, const v
 | 
				
			|||||||
		float clipmap_blend = fract(lod);
 | 
							float clipmap_blend = fract(lod);
 | 
				
			||||||
		vec3 p0 = start_pos + dir * dist;
 | 
							vec3 p0 = start_pos + dir * dist;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        samplePos = (p0 - vec3(clipmaps[int(clipmap_index * 10 + 4)], clipmaps[int(clipmap_index * 10 + 5)], clipmaps[int(clipmap_index * 10 + 6)])) / (float(clipmaps[int(clipmap_index * 10)]) * voxelgiResolution.x);
 | 
					        samplePos = (p0 - vec3(clipmaps[int(clipmap_index * 10 + 4)], clipmaps[int(clipmap_index * 10 + 5)], clipmaps[int(clipmap_index * 10 + 6)])) / (float(clipmaps[int(clipmap_index * 10)]) * voxelgiResolution);
 | 
				
			||||||
		samplePos = samplePos * 0.5 + 0.5;
 | 
							samplePos = samplePos * 0.5 + 0.5;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if ((any(notEqual(samplePos, clamp(samplePos, 0.0, 1.0))))) {
 | 
							if ((any(notEqual(samplePos, clamp(samplePos, 0.0, 1.0))))) {
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user