22#extension GL_ARB_separate_shader_objects : enable
33#extension GL_EXT_nonuniform_qualifier : enable
44
5- #include "pl_shader_interop_renderer.h"
6- #include "lights.glsl"
5+ #include "global.inc"
76
87// -----------------------------------------------------------------------------
98// [SECTION] specialication constants
@@ -17,30 +16,6 @@ layout(constant_id = 4) const int iRenderingFlags = 0;
1716layout (constant_id = 5 ) const int iLightCount = 0 ;
1817layout (constant_id = 6 ) const int iProbeCount = 0 ;
1918
20- // -----------------------------------------------------------------------------
21- // [SECTION] bind group 0
22- // -----------------------------------------------------------------------------
23-
24- layout (std140, set = 0 , binding = 0 ) readonly buffer _tVertexBuffer
25- {
26- vec4 atVertexData[];
27- } tVertexBuffer;
28-
29- layout (std140, set = 0 , binding = 1 ) readonly buffer _tTransformBuffer
30- {
31- mat4 atTransform[];
32- } tTransformBuffer;
33-
34- layout (set = 0 , binding = 2 ) readonly buffer plMaterialInfo
35- {
36- plGpuMaterial atMaterials[];
37- } tMaterialInfo;
38-
39- layout (set = 0 , binding = 3 ) uniform sampler tDefaultSampler;
40- layout (set = 0 , binding = 4 ) uniform sampler tEnvSampler;
41- layout (set = 0 , binding = 5 ) uniform texture2D at2DTextures[PL_MAX_BINDLESS_TEXTURES];
42- layout (set = 0 , binding = PL_MAX_BINDLESS_CUBE_TEXTURE_SLOT) uniform textureCube atCubeTextures[PL_MAX_BINDLESS_TEXTURES];
43-
4419// -----------------------------------------------------------------------------
4520// [SECTION] bind group 1
4621// -----------------------------------------------------------------------------
@@ -125,7 +100,7 @@ void main()
125100 materialInfo.baseColor = tBaseColor.rgb;
126101
127102 // The default index of refraction of 1.5 yields a dielectric normal incidence reflectance of 0.04.
128- materialInfo.f0 = vec3 (0.04 );
103+ materialInfo.f0_dielectric = vec3 (0.04 );
129104 float specularWeight = 1.0 ;
130105
131106 if (bool (iMaterialFlags & PL_INFO_MATERIAL_METALLICROUGHNESS))
@@ -190,8 +165,8 @@ void main()
190165 if (iProbeIndex > - 1 )
191166 {
192167 int iMips = textureQueryLevels(samplerCube (atCubeTextures[nonuniformEXT(tProbeData.atData[iProbeIndex].uGGXEnvSampler)], tEnvSampler));
193- f_specular += getIBLRadianceGGX(n, v, materialInfo.perceptualRoughness, materialInfo.f0 , specularWeight, iMips, iProbeIndex, tShaderIn.tWorldPosition);
194- f_diffuse += getIBLRadianceLambertian(n, v, materialInfo.perceptualRoughness, materialInfo.c_diff, materialInfo.f0 , specularWeight, iProbeIndex, tShaderIn.tWorldPosition);
168+ f_specular += getIBLRadianceGGX(n, v, materialInfo.perceptualRoughness, materialInfo.f0_dielectric , specularWeight, iMips, iProbeIndex, tShaderIn.tWorldPosition);
169+ f_diffuse += getIBLRadianceLambertian(n, v, materialInfo.perceptualRoughness, materialInfo.c_diff, materialInfo.f0_dielectric , specularWeight, iProbeIndex, tShaderIn.tWorldPosition);
195170 }
196171 }
197172
@@ -262,11 +237,13 @@ void main()
262237 float NdotH = clampedDot(n, h);
263238 float LdotH = clampedDot(l, h);
264239 float VdotH = clampedDot(v, h);
240+ vec3 dielectric_fresnel = pl_fresnel_schlick(materialInfo.f0_dielectric, materialInfo.f90, abs (VdotH));
241+
265242 if (NdotL > 0.0 || NdotV > 0.0 )
266243 {
267244 vec3 intensity = getLightIntensity(tLightData, pointToLight);
268- f_diffuse += shadow * intensity * NdotL * BRDF_lambertian(materialInfo.f0, materialInfo.f90, materialInfo.c_diff, specularWeight, VdotH );
269- f_specular += shadow * intensity * NdotL * BRDF_specularGGX(materialInfo.f0, materialInfo.f90, materialInfo. alphaRoughness, specularWeight, VdotH , NdotL, NdotV, NdotH);
245+ f_diffuse += shadow * intensity * NdotL * ( 1.0 - specularWeight * dielectric_fresnel) * pl_brdf_lambertian( materialInfo.c_diff);
246+ f_specular += shadow * intensity * NdotL * dielectric_fresnel * specularWeight * BRDF_specularGGX(materialInfo.alphaRoughness, NdotL, NdotV, NdotH);
270247 }
271248 }
272249
@@ -312,11 +289,12 @@ void main()
312289 float NdotH = clampedDot(n, h);
313290 float LdotH = clampedDot(l, h);
314291 float VdotH = clampedDot(v, h);
292+ vec3 dielectric_fresnel = pl_fresnel_schlick(materialInfo.f0_dielectric, materialInfo.f90, abs (VdotH));
315293 if (NdotL > 0.0 || NdotV > 0.0 )
316294 {
317295 vec3 intensity = getLightIntensity(tLightData, pointToLight);
318- f_diffuse += shadow * intensity * NdotL * BRDF_lambertian(materialInfo.f0, materialInfo.f90, materialInfo.c_diff, specularWeight, VdotH );
319- f_specular += shadow * intensity * NdotL * BRDF_specularGGX(materialInfo.f0, materialInfo.f90, materialInfo. alphaRoughness, specularWeight, VdotH , NdotL, NdotV, NdotH);
296+ f_diffuse += shadow * intensity * NdotL * ( 1.0 - specularWeight * dielectric_fresnel) * pl_brdf_lambertian( materialInfo.c_diff);
297+ f_specular += shadow * intensity * NdotL * dielectric_fresnel * specularWeight * BRDF_specularGGX(materialInfo.alphaRoughness, NdotL, NdotV, NdotH);
320298 }
321299 }
322300
@@ -356,11 +334,12 @@ void main()
356334 float NdotH = clampedDot(n, h);
357335 float LdotH = clampedDot(l, h);
358336 float VdotH = clampedDot(v, h);
337+ vec3 dielectric_fresnel = pl_fresnel_schlick(materialInfo.f0_dielectric, materialInfo.f90, abs (VdotH));
359338 if (NdotL > 0.0 || NdotV > 0.0 )
360339 {
361340 vec3 intensity = getLightIntensity(tLightData, pointToLight);
362- f_diffuse += shadow * intensity * NdotL * BRDF_lambertian(materialInfo.f0, materialInfo.f90, materialInfo.c_diff, specularWeight, VdotH );
363- f_specular += shadow * intensity * NdotL * BRDF_specularGGX(materialInfo.f0, materialInfo.f90, materialInfo. alphaRoughness, specularWeight, VdotH , NdotL, NdotV, NdotH);
341+ f_diffuse += shadow * intensity * NdotL * ( 1.0 - specularWeight * dielectric_fresnel) * pl_brdf_lambertian( materialInfo.c_diff);
342+ f_specular += shadow * intensity * NdotL * dielectric_fresnel * specularWeight * BRDF_specularGGX(materialInfo.alphaRoughness, NdotL, NdotV, NdotH);
364343 }
365344 }
366345
0 commit comments