@@ -26,8 +26,7 @@ void main() {
2626#include utils.glsl
2727#include shadow_mapping.glsl
2828#include fresnel.glsl
29- #include IBL.glsl
30- #include BRDFs/ schlick_smith_BRDF.glsl
29+ #include BRDFs/ cook_torrance_BRDF.glsl
3130#include BRDFs/ marschner_BSDF.glsl
3231#include warp.glsl
3332#include raytracing.glsl
@@ -63,6 +62,7 @@ layout(set = 1, binding = 6) uniform sampler2D prevBuffer;
6362layout (push_constant) uniform Settings {
6463 uint bufferOutput;
6564 uint enableAO;
65+ uint AOtype;
6666 VXGI vxgi; // Voxel Based GI
6767 SSR ssr; // Screen Space Reflections
6868} settings;
@@ -134,7 +134,7 @@ void main()
134134 // ////////////////////////////////////
135135 if (g_material.w == PHYSICAL_MATERIAL){
136136 // Populate BRDF ________________________
137- SchlickSmithBRDF brdf;
137+ CookTorranceBRDF brdf;
138138 brdf.albedo = g_albedo;
139139 brdf.opacity = g_opacity;
140140 brdf.normal = g_normal;
@@ -151,17 +151,23 @@ void main()
151151 if (settings.vxgi.enabled == 1 ){
152152
153153 // Diffuse
154- indirect = diffuseVoxelGI2(voxelMap, modelPos, modelNormal, settings.vxgi, scene.maxCoord.x- scene.minCoord.x);
154+ indirect = diffuseVoxelGI2(voxelMap , modelPos, modelNormal, settings.vxgi, scene.maxCoord.x- scene.minCoord.x);
155155 indirect.rgb *= g_albedo;
156- indirect.rgb *= settings.enableAO == 1 ? (brdf.ao * SSAO) : brdf.ao; // Add ambient occlusion
156+ indirect.rgb *= (1.0 - indirect.a);
157+ // indirect.rgb = evalDiffuseCookTorranceBRDF(
158+ // modelNormal,
159+ // normalize(camera.position.xyz-modelPos),
160+ // indirect.rgb,
161+ // brdf);
162+ // indirect = diffuseVoxelGI_CookTorrance(voxelMap, irradianceMap, modelPos, modelNormal,normalize(camera.position.xyz-modelPos), settings.vxgi, brdf, scene.maxCoord.x-scene.minCoord.x);
157163
158164 // Specular
159- vec3 specularConeDirection = reflect (- normalize (camera.position.xyz- modelPos), modelNormal);
160- float voxelWorldSize = (scene.maxCoord.x- scene.minCoord.x) / float (settings.vxgi.resolution);
161- vec3 startPos = modelPos + modelNormal * voxelWorldSize * settings.vxgi.offset;
165+ // vec3 specularConeDirection = reflect(-normalize(camera.position.xyz-modelPos), modelNormal);
166+ // float voxelWorldSize = (scene.maxCoord.x-scene.minCoord.x) / float(settings.vxgi.resolution);
167+ // vec3 startPos = modelPos + modelNormal * voxelWorldSize * settings.vxgi.offset;
162168
163- const float CONE_SPREAD = mix (0.005 , settings.vxgi.diffuseConeSpread, brdf.roughness);
164- indirectSpecular = traceCone(voxelMap, startPos, specularConeDirection, settings.vxgi.maxDistance, CONE_SPREAD, voxelWorldSize ).rgb;
169+ // const float CONE_SPREAD = mix(0.005, settings.vxgi.diffuseConeSpread, brdf.roughness);
170+ // indirectSpecular = traceCone(voxelMap, startPos, specularConeDirection, settings.vxgi.maxDistance, CONE_SPREAD, voxelWorldSize ).rgb;
165171
166172 // indirect+=specularIndirect.rgb;
167173 }
@@ -172,7 +178,7 @@ void main()
172178
173179 // Direct Component ________________________
174180 vec3 lighting = vec3 (0.0 );
175- lighting = evalSchlickSmithBRDF (
181+ lighting = evalCookTorranceBRDF (
176182 scene.lights[i].type != DIRECTIONAL_LIGHT ? normalize (scene.lights[i].position - g_pos) : normalize (scene.lights[i].position.xyz), // wi
177183 normalize (- g_pos), // wo
178184 scene.lights[i].color * computeAttenuation(scene.lights[i].position, g_pos,scene.lights[i].areaEffect,int (scene.lights[i].type)) * scene.lights[i].intensity, // radiance
@@ -202,20 +208,18 @@ void main()
202208 direct += brdf.emission;
203209 // Ambient Component ________________________
204210 if (scene.useIBL){
205- ambient = computeAmbient(
206- irradianceMap,
207- scene.envRotation,
208- modelNormal,
209- normalize (camera.position.xyz- modelPos),
210- brdf.albedo,
211- brdf.F0,
212- brdf.metalness,
213- brdf.roughness,
214- scene.ambientIntensity);
211+ mat3 rotY = rotationY(radians (scene.envRotation));
212+ vec3 rotatedNormal = normalize (rotY * modelNormal);
213+ vec3 irradiance = texture(irradianceMap, rotatedNormal).rgb* scene.ambientIntensity;
214+ ambient = evalDiffuseCookTorranceBRDF(
215+ rotatedNormal,
216+ normalize (camera.position.xyz- modelPos),
217+ irradiance,
218+ brdf);
215219 }else {
216220 ambient = (scene.ambientIntensity * scene.ambientColor) * brdf.albedo;
217221 }
218- ambient *= settings.enableAO == 1 ? (brdf.ao * SSAO) : brdf.ao;
222+ ambient *= settings.enableAO == 1 ? settings.AOtype != 2 ? (brdf.ao * SSAO) : 1.0 - indirect.a : brdf.ao;
219223
220224 // SSR ________________________________
221225 vec3 fresnel = fresnelSchlick(max (dot (g_normal, normalize (g_pos)), 0.0 ), brdf.F0);
0 commit comments