mirror of
https://github.com/X0nk/Bliss-Shader.git
synced 2025-06-20 07:57:55 +08:00
314 lines
11 KiB
Tcsh
314 lines
11 KiB
Tcsh
![]() |
layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
|
||
|
|
||
|
const ivec3 workGroups = ivec3(4, 5, 1);
|
||
|
|
||
|
#ifdef IS_LPV_ENABLED
|
||
|
#include "/lib/blocks.glsl"
|
||
|
#include "/lib/lpv_blocks.glsl"
|
||
|
|
||
|
const vec3 LightColor_Candles = vec3(1.0, 0.4, 0.1);
|
||
|
const vec3 LightColor_SeaPickle = vec3(0.283, 0.394, 0.212);
|
||
|
|
||
|
uint BuildLpvMask(const in uint north, const in uint east, const in uint south, const in uint west, const in uint up, const in uint down) {
|
||
|
return east | (west << 1) | (down << 2) | (up << 3) | (south << 4) | (north << 5);
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
|
||
|
void main() {
|
||
|
#ifdef IS_LPV_ENABLED
|
||
|
uint blockId = uint(gl_GlobalInvocationID.x + gl_GlobalInvocationID.y * 32 + LpvBlockMapOffset);
|
||
|
//if (blockId >= 1280) return;
|
||
|
|
||
|
vec3 lightColor = vec3(0.0);
|
||
|
float lightRange = 0.0;
|
||
|
float mixWeight = 0.0;
|
||
|
uint mixMask = 0xFFFF;
|
||
|
vec3 tintColor = vec3(1.0);
|
||
|
|
||
|
switch (blockId) {
|
||
|
case BLOCK_BEACON:
|
||
|
lightColor = vec3(1.0);
|
||
|
lightRange = 15.0;
|
||
|
break;
|
||
|
case BLOCK_CANDLES_LIT_1:
|
||
|
lightColor = LightColor_Candles;
|
||
|
lightRange = 3.0;
|
||
|
mixWeight = 1.0;
|
||
|
break;
|
||
|
case BLOCK_CANDLES_LIT_2:
|
||
|
lightColor = LightColor_Candles;
|
||
|
lightRange = 6.0;
|
||
|
mixWeight = 1.0;
|
||
|
break;
|
||
|
case BLOCK_CANDLES_LIT_3:
|
||
|
lightColor = LightColor_Candles;
|
||
|
lightRange = 9.0;
|
||
|
mixWeight = 1.0;
|
||
|
break;
|
||
|
case BLOCK_CANDLES_LIT_4:
|
||
|
lightColor = LightColor_Candles;
|
||
|
lightRange = 12.0;
|
||
|
mixWeight = 1.0;
|
||
|
break;
|
||
|
case BLOCK_CAVE_VINE_BERRIES:
|
||
|
lightColor = vec3(0.717, 0.541, 0.188);
|
||
|
lightRange = 14.0;
|
||
|
mixWeight = 1.0;
|
||
|
break;
|
||
|
case BLOCK_CONDUIT:
|
||
|
lightColor = vec3(1.0);
|
||
|
lightRange = 15.0;
|
||
|
break;
|
||
|
case BLOCK_END_GATEWAY:
|
||
|
lightColor = vec3(1.0);
|
||
|
lightRange = 15.0;
|
||
|
break;
|
||
|
case BLOCK_END_ROD:
|
||
|
lightColor = vec3(0.957, 0.929, 0.875);
|
||
|
lightRange = 14.0;
|
||
|
break;
|
||
|
case BLOCK_FIRE:
|
||
|
lightColor = vec3(0.864, 0.598, 0.348);
|
||
|
lightRange = 15.0;
|
||
|
mixWeight = 1.0;
|
||
|
break;
|
||
|
case BLOCK_FROGLIGHT_OCHRE:
|
||
|
lightColor = vec3(0.768, 0.648, 0.108);
|
||
|
lightRange = 15.0;
|
||
|
break;
|
||
|
case BLOCK_FROGLIGHT_PEARLESCENT:
|
||
|
lightColor = vec3(0.737, 0.435, 0.658);
|
||
|
lightRange = 15.0;
|
||
|
break;
|
||
|
case BLOCK_FROGLIGHT_VERDANT:
|
||
|
lightColor = vec3(0.463, 0.763, 0.409);
|
||
|
lightRange = 15.0;
|
||
|
break;
|
||
|
case BLOCK_GLOWSTONE:
|
||
|
lightColor = vec3(0.747, 0.594, 0.326);
|
||
|
lightRange = 15.0;
|
||
|
break;
|
||
|
case BLOCK_JACK_O_LANTERN:
|
||
|
lightColor = vec3(1.0, 0.7, 0.1);
|
||
|
lightRange = 15.0;
|
||
|
break;
|
||
|
case BLOCK_LANTERN:
|
||
|
lightColor = vec3(1.0, 0.7, 0.1);
|
||
|
lightRange = 15.0;
|
||
|
mixWeight = 0.8;
|
||
|
break;
|
||
|
case BLOCK_LAVA:
|
||
|
lightColor = vec3(0.804, 0.424, 0.149);
|
||
|
lightRange = 15.0;
|
||
|
break;
|
||
|
case BLOCK_MAGMA:
|
||
|
lightColor = vec3(0.747, 0.323, 0.110);
|
||
|
lightRange = 3.0;
|
||
|
break;
|
||
|
case BLOCK_REDSTONE_LAMP_LIT:
|
||
|
lightColor = vec3(0.953, 0.796, 0.496);
|
||
|
lightRange = 15.0;
|
||
|
break;
|
||
|
case BLOCK_REDSTONE_TORCH_LIT:
|
||
|
lightColor = vec3(0.939, 0.305, 0.164);
|
||
|
lightRange = 7.0;
|
||
|
break;
|
||
|
case BLOCK_RESPAWN_ANCHOR_4:
|
||
|
lightColor = vec3(1.0, 0.2, 1.0);
|
||
|
lightRange = 15.0;
|
||
|
break;
|
||
|
case BLOCK_SCULK_SENSOR_ACTIVE:
|
||
|
lightColor = vec3(0.1, 0.4, 1.0);
|
||
|
lightRange = 1.0;
|
||
|
break;
|
||
|
case BLOCK_SEA_PICKLE_WET_1:
|
||
|
lightColor = LightColor_SeaPickle;
|
||
|
lightRange = 6.0;
|
||
|
mixWeight = 1.0;
|
||
|
break;
|
||
|
case BLOCK_SEA_PICKLE_WET_2:
|
||
|
lightColor = LightColor_SeaPickle;
|
||
|
lightRange = 9.0;
|
||
|
mixWeight = 1.0;
|
||
|
break;
|
||
|
case BLOCK_SEA_PICKLE_WET_3:
|
||
|
lightColor = LightColor_SeaPickle;
|
||
|
lightRange = 12.0;
|
||
|
mixWeight = 1.0;
|
||
|
break;
|
||
|
case BLOCK_SEA_PICKLE_WET_4:
|
||
|
lightColor = LightColor_SeaPickle;
|
||
|
lightRange = 15.0;
|
||
|
mixWeight = 1.0;
|
||
|
break;
|
||
|
case BLOCK_SEA_LANTERN:
|
||
|
lightColor = vec3(0.553, 0.748, 0.859);
|
||
|
lightRange = 15.0;
|
||
|
break;
|
||
|
case BLOCK_SHROOMLIGHT:
|
||
|
lightColor = vec3(0.848, 0.469, 0.205);
|
||
|
lightRange = 15.0;
|
||
|
break;
|
||
|
case BLOCK_SMOKER_LIT:
|
||
|
lightColor = vec3(0.8, 0.7, 0.1);
|
||
|
lightRange = 13.0;
|
||
|
break;
|
||
|
case BLOCK_SOUL_FIRE:
|
||
|
lightColor = vec3(0.1, 0.6, 1.0);
|
||
|
lightRange = 10.0;
|
||
|
mixWeight = 1.0;
|
||
|
break;
|
||
|
case BLOCK_SOUL_LANTERN:
|
||
|
case BLOCK_SOUL_TORCH:
|
||
|
lightColor = vec3(0.1, 0.6, 1.0);
|
||
|
lightRange = 10.0;
|
||
|
mixWeight = 0.8;
|
||
|
break;
|
||
|
case BLOCK_TORCH:
|
||
|
lightColor = vec3(1.0, 0.6, 0.1);
|
||
|
lightRange = 14.0;
|
||
|
mixWeight = 0.8;
|
||
|
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;
|
||
|
|
||
|
|
||
|
case BLOCK_DOOR_N:
|
||
|
mixMask = BuildLpvMask(0u, 1u, 1u, 1u, 1u, 1u);
|
||
|
mixWeight = 0.8;
|
||
|
break;
|
||
|
case BLOCK_DOOR_E:
|
||
|
mixMask = BuildLpvMask(1u, 0u, 1u, 1u, 1u, 1u);
|
||
|
mixWeight = 0.8;
|
||
|
break;
|
||
|
case BLOCK_DOOR_S:
|
||
|
mixMask = BuildLpvMask(1u, 1u, 0u, 1u, 1u, 1u);
|
||
|
mixWeight = 0.8;
|
||
|
break;
|
||
|
case BLOCK_DOOR_W:
|
||
|
mixMask = BuildLpvMask(1u, 1u, 1u, 0u, 1u, 1u);
|
||
|
mixWeight = 0.8;
|
||
|
break;
|
||
|
|
||
|
case BLOCK_SLAB_TOP:
|
||
|
mixMask = BuildLpvMask(1u, 1u, 1u, 1u, 0u, 1u);
|
||
|
mixWeight = 0.5;
|
||
|
break;
|
||
|
case BLOCK_SLAB_BOTTOM:
|
||
|
mixMask = BuildLpvMask(1u, 1u, 1u, 1u, 1u, 0u);
|
||
|
mixWeight = 0.5;
|
||
|
break;
|
||
|
|
||
|
case BLOCK_TRAPDOOR_BOTTOM:
|
||
|
mixMask = BuildLpvMask(1u, 1u, 1u, 1u, 1u, 0u);
|
||
|
mixWeight = 0.8;
|
||
|
break;
|
||
|
case BLOCK_TRAPDOOR_TOP:
|
||
|
mixMask = BuildLpvMask(1u, 1u, 1u, 1u, 0u, 1u);
|
||
|
mixWeight = 0.8;
|
||
|
break;
|
||
|
case BLOCK_TRAPDOOR_N:
|
||
|
mixMask = BuildLpvMask(0u, 1u, 1u, 1u, 1u, 1u);
|
||
|
mixWeight = 0.8;
|
||
|
break;
|
||
|
case BLOCK_TRAPDOOR_E:
|
||
|
mixMask = BuildLpvMask(1u, 0u, 1u, 1u, 1u, 1u);
|
||
|
mixWeight = 0.8;
|
||
|
break;
|
||
|
case BLOCK_TRAPDOOR_S:
|
||
|
mixMask = BuildLpvMask(1u, 1u, 0u, 1u, 1u, 1u);
|
||
|
mixWeight = 0.8;
|
||
|
break;
|
||
|
case BLOCK_TRAPDOOR_W:
|
||
|
mixMask = BuildLpvMask(1u, 1u, 1u, 0u, 1u, 1u);
|
||
|
mixWeight = 0.8;
|
||
|
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
|
||
|
}
|