forked from LeenkxTeam/LNXSDK
Update leenkx/Shaders/deferred_light/deferred_light.frag.glsl
This commit is contained in:
@ -20,7 +20,7 @@ uniform sampler2D gbuffer0;
|
|||||||
uniform sampler2D gbuffer1;
|
uniform sampler2D gbuffer1;
|
||||||
|
|
||||||
#ifdef _gbuffer2
|
#ifdef _gbuffer2
|
||||||
//!uniform sampler2D gbuffer2;
|
uniform sampler2D gbuffer2;
|
||||||
#endif
|
#endif
|
||||||
#ifdef _EmissionShaded
|
#ifdef _EmissionShaded
|
||||||
uniform sampler2D gbufferEmission;
|
uniform sampler2D gbufferEmission;
|
||||||
@ -29,10 +29,11 @@ uniform sampler2D gbuffer1;
|
|||||||
#ifdef _VoxelGI
|
#ifdef _VoxelGI
|
||||||
uniform sampler2D voxels_diffuse;
|
uniform sampler2D voxels_diffuse;
|
||||||
uniform sampler2D voxels_specular;
|
uniform sampler2D voxels_specular;
|
||||||
#endif
|
#else
|
||||||
#ifdef _VoxelAOvar
|
#ifdef _VoxelAOvar
|
||||||
uniform sampler2D voxels_ao;
|
uniform sampler2D voxels_ao;
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
#ifdef _VoxelShadow
|
#ifdef _VoxelShadow
|
||||||
uniform sampler3D voxels;
|
uniform sampler3D voxels;
|
||||||
uniform sampler3D voxelsSDF;
|
uniform sampler3D voxelsSDF;
|
||||||
@ -117,11 +118,15 @@ uniform vec2 cameraPlane;
|
|||||||
#ifdef _SinglePoint
|
#ifdef _SinglePoint
|
||||||
#ifdef _Spot
|
#ifdef _Spot
|
||||||
//!uniform sampler2DShadow shadowMapSpot[1];
|
//!uniform sampler2DShadow shadowMapSpot[1];
|
||||||
|
#ifdef _ShadowMapTransparent
|
||||||
//!uniform sampler2D shadowMapSpotTransparent[1];
|
//!uniform sampler2D shadowMapSpotTransparent[1];
|
||||||
|
#endif
|
||||||
//!uniform mat4 LWVPSpot[1];
|
//!uniform mat4 LWVPSpot[1];
|
||||||
#else
|
#else
|
||||||
//!uniform samplerCubeShadow shadowMapPoint[1];
|
//!uniform samplerCubeShadow shadowMapPoint[1];
|
||||||
|
#ifdef _ShadowMapTransparent
|
||||||
//!uniform samplerCube shadowMapPointTransparent[1];
|
//!uniform samplerCube shadowMapPointTransparent[1];
|
||||||
|
#endif
|
||||||
//!uniform vec2 lightProj;
|
//!uniform vec2 lightProj;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@ -129,30 +134,40 @@ uniform vec2 cameraPlane;
|
|||||||
#ifdef _ShadowMapAtlas
|
#ifdef _ShadowMapAtlas
|
||||||
#ifdef _SingleAtlas
|
#ifdef _SingleAtlas
|
||||||
uniform sampler2DShadow shadowMapAtlas;
|
uniform sampler2DShadow shadowMapAtlas;
|
||||||
|
#ifdef _ShadowMapTransparent
|
||||||
uniform sampler2D shadowMapAtlasTransparent;
|
uniform sampler2D shadowMapAtlasTransparent;
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifdef _ShadowMapAtlas
|
#ifdef _ShadowMapAtlas
|
||||||
#ifndef _SingleAtlas
|
#ifndef _SingleAtlas
|
||||||
//!uniform sampler2DShadow shadowMapAtlasPoint;
|
//!uniform sampler2DShadow shadowMapAtlasPoint;
|
||||||
|
#ifdef _ShadowMapTransparent
|
||||||
//!uniform sampler2D shadowMapAtlasPointTransparent;
|
//!uniform sampler2D shadowMapAtlasPointTransparent;
|
||||||
#endif
|
#endif
|
||||||
//!uniform vec4 pointLightDataArray[4];
|
#endif
|
||||||
|
//!uniform vec4 pointLightDataArray[maxLightsCluster * 6];
|
||||||
#else
|
#else
|
||||||
//!uniform samplerCubeShadow shadowMapPoint[4];
|
//!uniform samplerCubeShadow shadowMapPoint[4];
|
||||||
|
#ifdef _ShadowMapTransparent
|
||||||
//!uniform samplerCube shadowMapPointTransparent[4];
|
//!uniform samplerCube shadowMapPointTransparent[4];
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
//!uniform vec2 lightProj;
|
//!uniform vec2 lightProj;
|
||||||
#ifdef _Spot
|
#ifdef _Spot
|
||||||
#ifdef _ShadowMapAtlas
|
#ifdef _ShadowMapAtlas
|
||||||
#ifndef _SingleAtlas
|
#ifndef _SingleAtlas
|
||||||
//!uniform sampler2DShadow shadowMapAtlasSpot;
|
//!uniform sampler2DShadow shadowMapAtlasSpot;
|
||||||
|
#ifdef _ShadowMapTransparent
|
||||||
//!uniform sampler2D shadowMapAtlasSpotTransparent;
|
//!uniform sampler2D shadowMapAtlasSpotTransparent;
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
//!uniform sampler2DShadow shadowMapSpot[4];
|
//!uniform sampler2DShadow shadowMapSpot[4];
|
||||||
|
#ifdef _ShadowMapTransparent
|
||||||
//!uniform sampler2D shadowMapSpotTransparent[4];
|
//!uniform sampler2D shadowMapSpotTransparent[4];
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
//!uniform mat4 LWVPSpotArray[maxLightsCluster];
|
//!uniform mat4 LWVPSpotArray[maxLightsCluster];
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@ -165,12 +180,16 @@ uniform vec3 sunCol;
|
|||||||
#ifdef _ShadowMapAtlas
|
#ifdef _ShadowMapAtlas
|
||||||
#ifndef _SingleAtlas
|
#ifndef _SingleAtlas
|
||||||
uniform sampler2DShadow shadowMapAtlasSun;
|
uniform sampler2DShadow shadowMapAtlasSun;
|
||||||
|
#ifdef _ShadowMapTransparent
|
||||||
uniform sampler2D shadowMapAtlasSunTransparent;
|
uniform sampler2D shadowMapAtlasSunTransparent;
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
uniform sampler2DShadow shadowMap;
|
uniform sampler2DShadow shadowMap;
|
||||||
|
#ifdef _ShadowMapTransparent
|
||||||
uniform sampler2D shadowMapTransparent;
|
uniform sampler2D shadowMapTransparent;
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
uniform float shadowsBias;
|
uniform float shadowsBias;
|
||||||
#ifdef _CSM
|
#ifdef _CSM
|
||||||
//!uniform vec4 casData[shadowmapCascades * 4 + 4];
|
//!uniform vec4 casData[shadowmapCascades * 4 + 4];
|
||||||
@ -231,21 +250,22 @@ void main() {
|
|||||||
vec4 g2 = textureLod(gbuffer2, texCoord, 0.0);
|
vec4 g2 = textureLod(gbuffer2, texCoord, 0.0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef _MicroShadowing
|
#ifdef _MicroShadowing
|
||||||
occspec.x = mix(1.0, occspec.x, dotNV); // AO Fresnel
|
occspec.x = mix(1.0, occspec.x, dotNV); // AO Fresnel
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _Brdf
|
#ifdef _Brdf
|
||||||
vec2 envBRDF = texelFetch(senvmapBrdf, ivec2(vec2(dotNV, 1.0 - roughness) * 256.0), 0).xy;
|
vec2 envBRDF = texelFetch(senvmapBrdf, ivec2(vec2(dotNV, 1.0 - roughness) * 256.0), 0).xy;
|
||||||
vec3 F = f0 * envBRDF.x + envBRDF.y;
|
vec3 F = f0 * envBRDF.x + envBRDF.y;
|
||||||
|
#else
|
||||||
|
vec3 F = f0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifndef _VoxelAOvar
|
#ifndef _VoxelAOvar
|
||||||
#ifndef _VoxelGI
|
#ifndef _VoxelGI
|
||||||
// Envmap
|
// Envmap
|
||||||
#ifdef _Irr
|
#ifdef _Irr
|
||||||
|
|
||||||
vec3 envl = shIrradiance(n, shirr);
|
vec3 envl = shIrradiance(n, shirr);
|
||||||
|
|
||||||
#ifdef _gbuffer2
|
#ifdef _gbuffer2
|
||||||
@ -279,14 +299,14 @@ void main() {
|
|||||||
envl.rgb *= albedo;
|
envl.rgb *= albedo;
|
||||||
|
|
||||||
#ifdef _Brdf
|
#ifdef _Brdf
|
||||||
envl.rgb *= 1.0 - F;
|
envl.rgb *= 1.0 - F; //LV: We should take refracted light into account
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _Rad // Indirect specular
|
#ifdef _Rad // Indirect specular
|
||||||
envl.rgb += prefilteredColor * F;
|
envl.rgb += prefilteredColor * F; //LV: Removed "1.5 * occspec.y". Specular should be weighted only by FV LUT
|
||||||
#else
|
#else
|
||||||
#ifdef _EnvCol
|
#ifdef _EnvCol
|
||||||
envl.rgb += backgroundCol * F;
|
envl.rgb += backgroundCol * F; //LV: Eh, what's the point of weighting it only by F0?
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -301,7 +321,6 @@ void main() {
|
|||||||
if(roughness < 1.0 && occspec.y > 0.0)
|
if(roughness < 1.0 && occspec.y > 0.0)
|
||||||
fragColor.rgb += textureLod(voxels_specular, texCoord, 0.0).rgb * F * voxelgiRefl;
|
fragColor.rgb += textureLod(voxels_specular, texCoord, 0.0).rgb * F * voxelgiRefl;
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#ifdef _VoxelAOvar
|
#ifdef _VoxelAOvar
|
||||||
fragColor.rgb = textureLod(voxels_ao, texCoord, 0.0).rgb * voxelgiOcc;
|
fragColor.rgb = textureLod(voxels_ao, texCoord, 0.0).rgb * voxelgiOcc;
|
||||||
#endif
|
#endif
|
||||||
@ -356,46 +375,76 @@ void main() {
|
|||||||
float sdotVH = max(0.0, dot(v, sh));
|
float sdotVH = max(0.0, dot(v, sh));
|
||||||
float sdotNL = max(0.0, dot(n, sunDir));
|
float sdotNL = max(0.0, dot(n, sunDir));
|
||||||
vec3 svisibility = vec3(1.0);
|
vec3 svisibility = vec3(1.0);
|
||||||
vec3 sdirect = lambertDiffuseBRDF(albedo, sdotNL) +
|
vec3 sdirect = lambertDiffuseBRDF(albedo, sdotNL) +
|
||||||
specularBRDF(f0, roughness, sdotNL, sdotNH, dotNV, sdotVH) * occspec.y;
|
specularBRDF(f0, roughness, sdotNL, sdotNH, dotNV, sdotVH) * occspec.y;
|
||||||
|
|
||||||
#ifdef _ShadowMap
|
#ifdef _ShadowMap
|
||||||
#ifdef _CSM
|
#ifdef _CSM
|
||||||
svisibility = shadowTestCascade(
|
svisibility = shadowTestCascade(
|
||||||
#ifdef _ShadowMapAtlas
|
#ifdef _ShadowMapAtlas
|
||||||
#ifndef _SingleAtlas
|
#ifdef _ShadowMapTransparent
|
||||||
shadowMapAtlasSun, shadowMapAtlasSunTransparent
|
#ifndef _SingleAtlas
|
||||||
#else
|
shadowMapAtlasSun, shadowMapAtlasSunTransparent
|
||||||
shadowMapAtlas, shadowMapAtlasTransparent
|
#else
|
||||||
#endif
|
shadowMapAtlas, shadowMapAtlasTransparent
|
||||||
#else
|
#endif
|
||||||
shadowMap, shadowMapTransparent
|
#else
|
||||||
#endif
|
#ifndef _SingleAtlas
|
||||||
, eye, p + n * shadowsBias * 10, shadowsBias, false
|
shadowMapAtlasSun
|
||||||
);
|
#else
|
||||||
|
shadowMapAtlas
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef _ShadowMapTransparent
|
||||||
|
shadowMap, shadowMapTransparent
|
||||||
|
#else
|
||||||
|
shadowMap
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
, eye, p + n * shadowsBias * 10, shadowsBias
|
||||||
|
#ifdef _ShadowMapTransparent
|
||||||
|
, false
|
||||||
|
#endif
|
||||||
|
);
|
||||||
#else
|
#else
|
||||||
vec4 lPos = LWVP * vec4(p + n * shadowsBias * 100, 1.0);
|
vec4 lPos = LWVP * vec4(p + n * shadowsBias * 100, 1.0);
|
||||||
if (lPos.w > 0.0) {
|
if (lPos.w > 0.0) {
|
||||||
svisibility = shadowTest(
|
svisibility = shadowTest(
|
||||||
#ifdef _ShadowMapAtlas
|
#ifdef _ShadowMapAtlas
|
||||||
#ifndef _SingleAtlas
|
#ifdef _ShadowMapTransparent
|
||||||
shadowMapAtlasSun, shadowMapAtlasSunTransparent
|
#ifndef _SingleAtlas
|
||||||
#else
|
shadowMapAtlasSun, shadowMapAtlasSunTransparent
|
||||||
shadowMapAtlas, shadowMapAtlasTransparent
|
#else
|
||||||
#endif
|
shadowMapAtlas, shadowMapAtlasTransparent
|
||||||
#else
|
#endif
|
||||||
shadowMap, shadowMapTransparent
|
#else
|
||||||
#endif
|
#ifndef _SingleAtlas
|
||||||
, lPos.xyz / lPos.w, shadowsBias, false
|
shadowMapAtlasSun
|
||||||
);
|
#else
|
||||||
|
shadowMapAtlas
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef _ShadowMapTransparent
|
||||||
|
shadowMap, shadowMapTransparent
|
||||||
|
#else
|
||||||
|
shadowMap
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
, lPos.xyz / lPos.w, shadowsBias
|
||||||
|
#ifdef _ShadowMapTransparent
|
||||||
|
, false
|
||||||
|
#endif
|
||||||
|
);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _VoxelShadow
|
#ifdef _VoxelShadow
|
||||||
svisibility *= (1.0 - traceShadow(p, n, voxels, voxelsSDF, sunDir, clipmaps, gl_FragCoord.xy, g2.rg).r) * voxelgiShad;
|
svisibility *= (1.0 - traceShadow(p, n, voxels, voxelsSDF, sunDir, clipmaps, gl_FragCoord.xy, -g2.rg).r) * voxelgiShad;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _SSRS
|
#ifdef _SSRS
|
||||||
// vec2 coords = getProjectedCoord(hitCoord);
|
// vec2 coords = getProjectedCoord(hitCoord);
|
||||||
// vec2 deltaCoords = abs(vec2(0.5, 0.5) - coords.xy);
|
// vec2 deltaCoords = abs(vec2(0.5, 0.5) - coords.xy);
|
||||||
@ -452,7 +501,10 @@ void main() {
|
|||||||
fragColor.rgb += sampleLight(
|
fragColor.rgb += sampleLight(
|
||||||
p, n, v, dotNV, pointPos, pointCol, albedo, roughness, occspec.y, f0
|
p, n, v, dotNV, pointPos, pointCol, albedo, roughness, occspec.y, f0
|
||||||
#ifdef _ShadowMap
|
#ifdef _ShadowMap
|
||||||
, 0, pointBias, true, false
|
, 0, pointBias, true
|
||||||
|
#ifdef _ShadowMapTransparent
|
||||||
|
, false
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifdef _Spot
|
#ifdef _Spot
|
||||||
, true, spotData.x, spotData.y, spotDir, spotData.zw, spotRight
|
, true, spotData.x, spotData.y, spotDir, spotData.zw, spotRight
|
||||||
@ -505,7 +557,10 @@ void main() {
|
|||||||
f0
|
f0
|
||||||
#ifdef _ShadowMap
|
#ifdef _ShadowMap
|
||||||
// light index, shadow bias, cast_shadows
|
// light index, shadow bias, cast_shadows
|
||||||
, li, lightsArray[li * 3 + 2].x, lightsArray[li * 3 + 2].z != 0.0, false
|
, li, lightsArray[li * 3 + 2].x, lightsArray[li * 3 + 2].z != 0.0
|
||||||
|
#ifdef _ShadowMapTransparent
|
||||||
|
, false
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifdef _Spot
|
#ifdef _Spot
|
||||||
, lightsArray[li * 3 + 2].y != 0.0
|
, lightsArray[li * 3 + 2].y != 0.0
|
||||||
@ -527,6 +582,5 @@ void main() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
#endif // _Clusters
|
#endif // _Clusters
|
||||||
|
|
||||||
fragColor.a = 1.0; // Mark as opaque
|
fragColor.a = 1.0; // Mark as opaque
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user