floodfill stained glass tinting

This commit is contained in:
NULL511
2024-05-02 17:53:49 -04:00
parent 28a51779a0
commit 6ec7e0187e
6 changed files with 130 additions and 22 deletions

View File

@ -25,6 +25,7 @@ void main() {
float lightRange = 0.0;
float mixWeight = 0.0;
uint mixMask = 0xFFFF;
vec3 tintColor = vec3(1.0);
switch (blockId) {
case BLOCK_BEACON:
@ -139,15 +140,90 @@ void main() {
break;
case BLOCK_HONEY:
tintColor = vec3(0.984, 0.733, 0.251);
mixWeight = 1.0;
break;
case BLOCK_NETHER_PORTAL:
lightColor = vec3(0.502, 0.165, 0.831);
tintColor = vec3(0.502, 0.165, 0.831);
lightRange = 11.0;
mixWeight = 1.0;
break;
case BLOCK_SLIME:
tintColor = vec3(0.408, 0.725, 0.329);
mixWeight = 1.0;
break;
case BLOCK_GLASS_BLACK:
tintColor = vec3(0.3);
mixWeight = 1.0;
break;
case BLOCK_GLASS_BLUE:
tintColor = vec3(0.1, 0.1, 0.98);
mixWeight = 1.0;
break;
case BLOCK_GLASS_BROWN:
tintColor = vec3(0.566, 0.388, 0.148);
mixWeight = 1.0;
break;
case BLOCK_GLASS_CYAN:
tintColor = vec3(0.082, 0.533, 0.763);
mixWeight = 1.0;
break;
case BLOCK_GLASS_GRAY:
tintColor = vec3(0.4, 0.4, 0.4);
mixWeight = 1.0;
break;
case BLOCK_GLASS_GREEN:
tintColor = vec3(0.125, 0.808, 0.081);
mixWeight = 1.0;
break;
case BLOCK_GLASS_LIGHT_BLUE:
tintColor = vec3(0.320, 0.685, 0.955);
mixWeight = 1.0;
break;
case BLOCK_GLASS_LIGHT_GRAY:
tintColor = vec3(0.7);
mixWeight = 1.0;
break;
case BLOCK_GLASS_LIME:
tintColor = vec3(0.633, 0.924, 0.124);
mixWeight = 1.0;
break;
case BLOCK_GLASS_MAGENTA:
tintColor = vec3(0.698, 0.298, 0.847);
mixWeight = 1.0;
break;
case BLOCK_GLASS_ORANGE:
tintColor = vec3(0.919, 0.586, 0.185);
mixWeight = 1.0;
break;
case BLOCK_GLASS_PINK:
tintColor = vec3(0.949, 0.274, 0.497);
mixWeight = 1.0;
break;
case BLOCK_GLASS_PURPLE:
tintColor = vec3(0.578, 0.170, 0.904);
mixWeight = 1.0;
break;
case BLOCK_GLASS_RED:
tintColor = vec3(0.999, 0.188, 0.188);
mixWeight = 1.0;
break;
case BLOCK_GLASS_WHITE:
tintColor = vec3(0.96, 0.96, 0.96);
mixWeight = 1.0;
break;
case BLOCK_GLASS_YELLOW:
tintColor = vec3(0.965, 0.965, 0.123);
mixWeight = 1.0;
break;
}
LpvBlockData block;
block.ColorRange = packUnorm4x8(vec4(lightColor, lightRange/255.0));
block.MaskWeight = BuildBlockLpvData(mixMask, mixWeight);
block.Tint = packUnorm4x8(vec4(tintColor, 0.0));
LpvBlockMap[blockId - LpvBlockMapOffset] = block;
#endif
}

View File

@ -121,43 +121,35 @@ void main() {
if (any(greaterThanEqual(chunkPos, LpvSize3))) return;
PopulateShared();
barrier();
ivec3 imgCoord = ivec3(gl_GlobalInvocationID);
if (any(greaterThanEqual(imgCoord, LpvSize3))) return;
// vec3 viewDir = gbufferModelViewInverse[2].xyz;
//vec3 lpvCenter = vec3(0.0);//GetLpvCenter(cameraPosition, viewDir);
//vec3 blockLocalPos = imgCoord - lpvCenter + 0.5;
vec4 lightValue = vec4(0.0);
uint mixMask = 0xFFFF;
vec3 tint = vec3(1.0);
uint blockId = voxelSharedData[getSharedCoord(ivec3(gl_LocalInvocationID) + 1)];
float mixWeight = blockId == BLOCK_EMPTY ? 1.0 : 0.0;
vec3 tintColor = vec3(1.0);
if (blockId > 0 && blockId != BLOCK_EMPTY)
if (blockId > 0u) {//&& blockId != BLOCK_EMPTY)
ParseBlockLpvData(LpvBlockMap[blockId - LpvBlockMapOffset].MaskWeight, mixMask, mixWeight);
#ifdef LPV_GLASS_TINT
if (blockId >= BLOCK_HONEY && blockId <= BLOCK_TINTED_GLASS) {
tint = GetLightGlassTint(blockId);
mixWeight = 1.0;
}
#endif
uint tintData = LpvBlockMap[blockId - LpvBlockMapOffset].Tint;
tintColor = unpackUnorm4x8(tintData).rgb;
}
if (mixWeight > EPSILON) {
vec4 lightMixed = mixNeighbours(ivec3(gl_LocalInvocationID), mixMask);
lightMixed.rgb *= mixWeight * tint;
lightMixed.rgb *= RGBToLinear(tintColor) * mixWeight;
lightValue += lightMixed;
}
lightValue.rgb = RgbToHsv(lightValue.rgb);
lightValue.ba = log2(lightValue.ba + 1.0) / LpvBlockSkyRange;
if (blockId > 0 && blockId != BLOCK_EMPTY) {
if (blockId > 0u) {// && blockId != BLOCK_EMPTY) {
vec4 lightColorRange = unpackUnorm4x8(LpvBlockMap[blockId - LpvBlockMapOffset].ColorRange);
float lightRange = lightColorRange.a * 255.0;