Jarvis, Optimise my shit
This commit is contained in:
parent
d1abde919d
commit
9424b29d0a
50 changed files with 1469 additions and 1232 deletions
|
|
@ -68,9 +68,12 @@ float chebyshevUpperBound(vec2 moments, float t) {
|
|||
return p_max;
|
||||
}
|
||||
|
||||
float calcVisibility(vec4 worldPosition, uint cascadeIndex, float ShadowBias, vec2 texelSize) {
|
||||
float calcVisibility(vec4 worldPosition, uint cascadeIndex, vec2 texelSize) {
|
||||
vec4 shadowMapPosition = shadows.cascadeshadows[cascadeIndex].projViewMatrix * worldPosition;
|
||||
|
||||
if (!(shadowMapPosition.w > 0.0) || any(isnan(shadowMapPosition)) || any(isinf(shadowMapPosition))) {
|
||||
return 1.0;
|
||||
}
|
||||
shadowMapPosition.xyz /= shadowMapPosition.w;
|
||||
|
||||
vec2 uv = vec2(
|
||||
|
|
@ -82,17 +85,27 @@ float calcVisibility(vec4 worldPosition, uint cascadeIndex, float ShadowBias, ve
|
|||
|
||||
if (uv.x < 0.0 || uv.x > 1.0 ||
|
||||
uv.y < 0.0 || uv.y > 1.0 ||
|
||||
depth < ShadowBias || depth > 1.0) {
|
||||
depth < 0.0 || depth > 1.0) {
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
float shadow = 0.0;
|
||||
|
||||
// vec2 moments = texture(shadowSampler, vec3((uv), cascadeIndex)).rg;
|
||||
// float visibility = chebyshevUpperBound(moments, depth);
|
||||
// shadow += visibility;
|
||||
|
||||
for(int x = -1; x <= 1; ++x)
|
||||
{
|
||||
for(int y = -1; y <= 1; ++y)
|
||||
{
|
||||
vec2 moments = texture(shadowSampler, vec3((uv + vec2(x, y) * texelSize), cascadeIndex)).rg;
|
||||
vec2 sampleUV = uv + vec2(x, y) * texelSize;
|
||||
if (any(lessThan(sampleUV, vec2(0.0))) || any(greaterThan(sampleUV, vec2(1.0)))) {
|
||||
shadow += 1.0;
|
||||
continue;
|
||||
}
|
||||
sampleUV = clamp(sampleUV, texelSize * 0.5, vec2(1.0) - texelSize * 0.5);
|
||||
vec2 moments = texture(shadowSampler, vec3(sampleUV, cascadeIndex)).rg;
|
||||
float visibility = chebyshevUpperBound(moments, depth);
|
||||
shadow += visibility;
|
||||
}
|
||||
|
|
@ -212,8 +225,6 @@ void main() {
|
|||
// outFragColor = vec4(emissive,1);
|
||||
// return;
|
||||
|
||||
float ShadowBias = 0.05f;
|
||||
|
||||
float opacityf = Opacity.x + Opacity.y + Opacity.z;
|
||||
opacityf = opacityf/3.0;
|
||||
|
||||
|
|
@ -228,18 +239,21 @@ void main() {
|
|||
vec3 F0 = vec3(0.04);
|
||||
F0 = mix(F0, albedo, metallic);
|
||||
|
||||
uint cascadeIndex = 0;
|
||||
vec4 viewPos = sceneInfo.viewMatrix * worldPosW;
|
||||
for (uint i = 0; i < SHADOW_MAP_CASCADE_COUNT - 1; ++i) {
|
||||
if (viewPos.z < shadows.cascadeshadows[i].splitDistance.x) {
|
||||
cascadeIndex = i + 1;
|
||||
uint cascadeIndex = SHADOW_MAP_CASCADE_COUNT;
|
||||
vec4 viewPos = sceneInfo.viewMatrix * vec4(worldPos, 1.0);
|
||||
float lastSplit = shadows.cascadeshadows[SHADOW_MAP_CASCADE_COUNT - 1].splitDistance.x;
|
||||
float shadow = 1.0;
|
||||
if (lastSplit < 0.0 && viewPos.z < 0.0 && viewPos.z >= lastSplit) {
|
||||
cascadeIndex = 0;
|
||||
for (uint i = 0; i < SHADOW_MAP_CASCADE_COUNT - 1; ++i) {
|
||||
if (viewPos.z < shadows.cascadeshadows[i].splitDistance.x) {
|
||||
cascadeIndex = i + 1;
|
||||
}
|
||||
}
|
||||
vec2 texelSizeShadow = 1.0 / textureSize(shadowSampler, 0).rg;
|
||||
shadow = calcVisibility(vec4(worldPos, 1), cascadeIndex, texelSizeShadow);
|
||||
}
|
||||
|
||||
vec2 texelSizeShadow = 1.0 / textureSize(shadowSampler, 0).rg;
|
||||
|
||||
float shadow = calcVisibility(vec4(worldPos, 1), cascadeIndex,ShadowBias, texelSizeShadow);
|
||||
|
||||
vec3 Lo = vec3(0.0);
|
||||
for (uint i = 0; i < sceneInfo.numLights; i++) {
|
||||
Light light = lights.lights[i];
|
||||
|
|
@ -254,7 +268,7 @@ void main() {
|
|||
outFragColor = vec4(Lo + ambient, 1.0f);
|
||||
outFragColor = vec4(outFragColor.xyz/2 + (outFragColor.xyz/2) * vec3(ssao,ssao,ssao),1);
|
||||
|
||||
if (DEBUG_SHADOWS == 1) {
|
||||
if (DEBUG_SHADOWS == 1 && cascadeIndex < SHADOW_MAP_CASCADE_COUNT) {
|
||||
switch (cascadeIndex) {
|
||||
case 0:
|
||||
outFragColor.rgb *= vec3(1.0f, 0.25f, 0.25f);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue