main #136
@ -75,9 +75,15 @@ vec3 PCFTileAware(sampler2DShadow shadowMap,
|
|||||||
|
|
||||||
#ifdef _ShadowMapTransparent
|
#ifdef _ShadowMapTransparent
|
||||||
if (transparent == false) {
|
if (transparent == false) {
|
||||||
vec4 shadowmap_transparent = texture(shadowMapTransparent, uv);
|
vec3 transResult = vec3(0.0);
|
||||||
if (shadowmap_transparent.a < compare)
|
for (int x = -1; x <= 1; x++) {
|
||||||
result *= shadowmap_transparent.rgb;
|
for (int y = -1; y <= 1; y++) {
|
||||||
|
vec4 smt = texture(shadowMapTransparent,
|
||||||
|
clamp(uv + vec2(x, y) / smSize, tileMin, tileMax));
|
||||||
|
transResult += (smt.a < compare) ? smt.rgb : vec3(1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result *= transResult / 9.0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -142,9 +148,15 @@ vec3 PCF(sampler2DShadow shadowMap,
|
|||||||
|
|
||||||
#ifdef _ShadowMapTransparent
|
#ifdef _ShadowMapTransparent
|
||||||
if (transparent == false) {
|
if (transparent == false) {
|
||||||
vec4 shadowmap_transparent = texture(shadowMapTransparent, uv);
|
vec3 transResult = vec3(0.0);
|
||||||
if (shadowmap_transparent.a < compare)
|
for (int x = -1; x <= 1; x++) {
|
||||||
result *= shadowmap_transparent.rgb;
|
for (int y = -1; y <= 1; y++) {
|
||||||
|
vec4 smt = texture(shadowMapTransparent,
|
||||||
|
uv + vec2(x, y) / smSize);
|
||||||
|
transResult += (smt.a < compare) ? smt.rgb : vec3(1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result *= transResult / 9.0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -187,9 +199,19 @@ vec3 PCFCube(samplerCubeShadow shadowMapCube,
|
|||||||
|
|
||||||
#ifdef _ShadowMapTransparent
|
#ifdef _ShadowMapTransparent
|
||||||
if (transparent == false) {
|
if (transparent == false) {
|
||||||
vec4 shadowmap_transparent = texture(shadowMapCubeTransparent, ml);
|
vec3 transResult = vec3(0.0);
|
||||||
if (shadowmap_transparent.a < compare)
|
vec4 smt = texture(shadowMapCubeTransparent, ml);
|
||||||
result *= shadowmap_transparent.rgb;
|
transResult += (smt.a < compare) ? smt.rgb : vec3(1.0);
|
||||||
|
for (int x = -1; x <= 1; x += 2) {
|
||||||
|
for (int y = -1; y <= 1; y += 2) {
|
||||||
|
for (int z = -1; z <= 1; z += 2) {
|
||||||
|
smt = texture(shadowMapCubeTransparent,
|
||||||
|
ml + vec3(x, y, z) * s);
|
||||||
|
transResult += (smt.a < compare) ? smt.rgb : vec3(1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result *= transResult / 9.0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -385,9 +407,15 @@ vec3 PCFFakeCube(sampler2DShadow shadowMap,
|
|||||||
|
|
||||||
#ifdef _ShadowMapTransparent
|
#ifdef _ShadowMapTransparent
|
||||||
if (transparent == false) {
|
if (transparent == false) {
|
||||||
vec4 shadowmap_transparent = texture(shadowMapTransparent, uvtiled);
|
vec3 transResult = vec3(0.0);
|
||||||
if (shadowmap_transparent.a < compare)
|
for (int x = -1; x <= 1; x++) {
|
||||||
result *= shadowmap_transparent.rgb;
|
for (int y = -1; y <= 1; y++) {
|
||||||
|
vec4 smt = texture(shadowMapTransparent,
|
||||||
|
clamp(uvtiled + vec2(x, y) / smSize, 0.0, 1.0));
|
||||||
|
transResult += (smt.a < compare) ? smt.rgb : vec3(1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result *= transResult / 9.0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@ -333,7 +333,7 @@ class Inc {
|
|||||||
var shadowmap = getShadowMapAtlas(atlas, true);
|
var shadowmap = getShadowMapAtlas(atlas, true);
|
||||||
path.setTargetStream(shadowmap);
|
path.setTargetStream(shadowmap);
|
||||||
|
|
||||||
path.clearTarget(0xffffff, 0.0);
|
path.currentG.clear(0xffffffff, 0.0);
|
||||||
|
|
||||||
for (tile in atlas.activeTiles) {
|
for (tile in atlas.activeTiles) {
|
||||||
if (tile.light == null || !tile.light.visible || tile.light.culledLight
|
if (tile.light == null || !tile.light.visible || tile.light.culledLight
|
||||||
@ -549,7 +549,7 @@ class Inc {
|
|||||||
for (i in 0...faces) {
|
for (i in 0...faces) {
|
||||||
if (faces > 1) path.currentFace = i;
|
if (faces > 1) path.currentFace = i;
|
||||||
path.setTarget(shadowmap_transparent);
|
path.setTarget(shadowmap_transparent);
|
||||||
path.clearTarget(0xffffff, 0.0);
|
path.currentG.clear(0xffffffff, 0.0);
|
||||||
if (l.data.raw.cast_shadow) {
|
if (l.data.raw.cast_shadow) {
|
||||||
path.drawMeshes("shadowmap_transparent");
|
path.drawMeshes("shadowmap_transparent");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -543,7 +543,7 @@ class RenderPathDeferred {
|
|||||||
t2.format = "RGBA64";
|
t2.format = "RGBA64";
|
||||||
path.createRenderTarget(t2);
|
path.createRenderTarget(t2);
|
||||||
path.setTarget("empty_shadowmap_transparent");
|
path.setTarget("empty_shadowmap_transparent");
|
||||||
path.clearTarget(0xffffffff, null);
|
path.currentG.clear(0xffffffff, null);
|
||||||
#end
|
#end
|
||||||
}
|
}
|
||||||
#end
|
#end
|
||||||
|
|||||||
Reference in New Issue
Block a user