forked from LeenkxTeam/LNXSDK
Scaled slope bias and transparent shadows fixes
This commit is contained in:
@ -674,7 +674,7 @@ class LightObject extends Object {
|
||||
break;
|
||||
}
|
||||
if (discardLightCulled(light)) continue;
|
||||
if (light.data.raw.type == type) {
|
||||
if (light.data.raw.type == type || (type == "spot" && light.data.raw.type == "area")) {
|
||||
m.setFrom(light.VP);
|
||||
m.multmat(Uniforms.biasMat);
|
||||
#if lnx_shadowmap_atlas
|
||||
@ -711,8 +711,8 @@ class LightObject extends Object {
|
||||
LWVPMatrixArray[i * 16 + 13] = m._31;
|
||||
LWVPMatrixArray[i * 16 + 14] = m._32;
|
||||
LWVPMatrixArray[i * 16 + 15] = m._33;
|
||||
i++; // only increment in light type
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return LWVPMatrixArray;
|
||||
}
|
||||
@ -791,7 +791,7 @@ class LightObject extends Object {
|
||||
public static var spotTileBoundsArray: Float32Array = null;
|
||||
|
||||
public static function updateSpotTileBoundsArray(): Float32Array {
|
||||
var maxLights = getMaxLights();
|
||||
var maxLights = maxLightsCluster;
|
||||
if (spotTileBoundsArray == null) {
|
||||
spotTileBoundsArray = new Float32Array(maxLights * 4);
|
||||
}
|
||||
@ -799,19 +799,20 @@ class LightObject extends Object {
|
||||
var i = 0;
|
||||
for (light in Scene.active.lights) {
|
||||
if (i >= maxLights) break;
|
||||
if (!light.visible || light.data.raw.type != "spot") continue;
|
||||
if (!light.data.raw.cast_shadow || light.data.raw.strength == 0.0) continue;
|
||||
var idx = i * 4;
|
||||
spotTileBoundsArray[idx ] = light.tileOffsetX[0];
|
||||
spotTileBoundsArray[idx + 2] = light.tileOffsetX[0] + light.tileScale[0];
|
||||
#if (!kha_opengl)
|
||||
// flip bounds
|
||||
spotTileBoundsArray[idx + 1] = 1.0 - (light.tileOffsetY[0] + light.tileScale[0]);
|
||||
spotTileBoundsArray[idx + 3] = 1.0 - light.tileOffsetY[0];
|
||||
#else
|
||||
spotTileBoundsArray[idx + 1] = light.tileOffsetY[0];
|
||||
spotTileBoundsArray[idx + 3] = light.tileOffsetY[0] + light.tileScale[0];
|
||||
#end
|
||||
if (discardLightCulled(light)) continue;
|
||||
if ((light.data.raw.type == "spot" || light.data.raw.type == "area") && light.data.raw.cast_shadow) {
|
||||
var idx = i * 4;
|
||||
spotTileBoundsArray[idx ] = light.tileOffsetX[0];
|
||||
spotTileBoundsArray[idx + 2] = light.tileOffsetX[0] + light.tileScale[0];
|
||||
#if (!kha_opengl)
|
||||
// flip bounds
|
||||
spotTileBoundsArray[idx + 1] = 1.0 - (light.tileOffsetY[0] + light.tileScale[0]);
|
||||
spotTileBoundsArray[idx + 3] = 1.0 - light.tileOffsetY[0];
|
||||
#else
|
||||
spotTileBoundsArray[idx + 1] = light.tileOffsetY[0];
|
||||
spotTileBoundsArray[idx + 3] = light.tileOffsetY[0] + light.tileScale[0];
|
||||
#end
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return spotTileBoundsArray;
|
||||
|
||||
Reference in New Issue
Block a user