mirror of
https://github.com/X0nk/Bliss-Shader.git
synced 2025-06-22 00:37:35 +08:00
floodfill more lights
This commit is contained in:
@ -13,10 +13,12 @@ const ivec3 workGroups = ivec3(4, 5, 1);
|
||||
#include "/lib/lpv_blocks.glsl"
|
||||
#endif
|
||||
|
||||
const vec3 LightColor_SeaPickle = vec3(0.283, 0.394, 0.212);
|
||||
|
||||
|
||||
void main() {
|
||||
#ifdef IS_LPV_ENABLED
|
||||
uint blockId = uint(gl_GlobalInvocationID.x + gl_GlobalInvocationID.y * 32);
|
||||
uint blockId = uint(gl_GlobalInvocationID.x + gl_GlobalInvocationID.y * 32 + LpvBlockMapOffset);
|
||||
//if (blockId >= 1280) return;
|
||||
|
||||
vec3 lightColor = vec3(0.0);
|
||||
@ -25,18 +27,108 @@ void main() {
|
||||
uint mixMask = 0xFFFF;
|
||||
|
||||
switch (blockId) {
|
||||
case BLOCK_GLOWSTONE:
|
||||
lightColor = vec3(0.8, 0.7, 0.1);
|
||||
lightRange = 15.0;
|
||||
break;
|
||||
case BLOCK_REDSTONE_TORCH:
|
||||
lightColor = vec3(1.0, 0.1, 0.1);
|
||||
lightRange = 7.0;
|
||||
break;
|
||||
case BLOCK_SEA_LANTERN:
|
||||
case BLOCK_BEACON:
|
||||
lightColor = vec3(1.0);
|
||||
lightRange = 15.0;
|
||||
break;
|
||||
case BLOCK_CAVE_VINE_BERRIES:
|
||||
lightColor = vec3(0.717, 0.541, 0.188);
|
||||
lightRange = 14.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;
|
||||
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;
|
||||
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;
|
||||
break;
|
||||
case BLOCK_SEA_PICKLE_WET_2:
|
||||
lightColor = LightColor_SeaPickle;
|
||||
lightRange = 9.0;
|
||||
break;
|
||||
case BLOCK_SEA_PICKLE_WET_3:
|
||||
lightColor = LightColor_SeaPickle;
|
||||
lightRange = 12.0;
|
||||
break;
|
||||
case BLOCK_SEA_PICKLE_WET_4:
|
||||
lightColor = LightColor_SeaPickle;
|
||||
lightRange = 15.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:
|
||||
case BLOCK_SOUL_LANTERN:
|
||||
case BLOCK_SOUL_TORCH:
|
||||
lightColor = vec3(0.1, 0.6, 1.0);
|
||||
lightRange = 10.0;
|
||||
@ -45,11 +137,17 @@ void main() {
|
||||
lightColor = vec3(1.0, 0.6, 0.1);
|
||||
lightRange = 14.0;
|
||||
break;
|
||||
|
||||
|
||||
case BLOCK_NETHER_PORTAL:
|
||||
lightColor = vec3(0.502, 0.165, 0.831);
|
||||
lightRange = 11.0;
|
||||
break;
|
||||
}
|
||||
|
||||
LpvBlockData block;
|
||||
block.MaskWeight = BuildBlockLpvData(mixMask, mixWeight);
|
||||
block.ColorRange = packUnorm4x8(vec4(lightColor, lightRange/255.0));
|
||||
LpvBlockMap[blockId] = block;
|
||||
block.MaskWeight = BuildBlockLpvData(mixMask, mixWeight);
|
||||
LpvBlockMap[blockId - LpvBlockMapOffset] = block;
|
||||
#endif
|
||||
}
|
||||
|
@ -34,8 +34,6 @@ layout (local_size_x = 8, local_size_y = 8, local_size_z = 8) in;
|
||||
#include "/lib/voxel_common.glsl"
|
||||
#include "/lib/voxel_read.glsl"
|
||||
|
||||
// uniform mat4 gbufferModelViewInverse;
|
||||
|
||||
int sumOf(ivec3 vec) {return vec.x + vec.y + vec.z;}
|
||||
|
||||
vec3 RGBToLinear(const in vec3 color) {
|
||||
@ -77,7 +75,7 @@ layout (local_size_x = 8, local_size_y = 8, local_size_z = 8) in;
|
||||
uint blockId = voxelSharedData[shared_index];
|
||||
|
||||
if (blockId > 0 && blockId != BLOCK_EMPTY)
|
||||
ParseBlockLpvData(LpvBlockMap[blockId].MaskWeight, mixMask, mixWeight);
|
||||
ParseBlockLpvData(LpvBlockMap[blockId - LpvBlockMapOffset].MaskWeight, mixMask, mixWeight);
|
||||
|
||||
return lpvSharedData[shared_index] * ((mixMask >> mask_index) & 1u);// * mixWeight;
|
||||
}
|
||||
@ -141,7 +139,7 @@ void main() {
|
||||
float mixWeight = blockId == BLOCK_EMPTY ? 1.0 : 0.0;
|
||||
|
||||
if (blockId > 0 && blockId != BLOCK_EMPTY)
|
||||
ParseBlockLpvData(LpvBlockMap[blockId].MaskWeight, mixMask, mixWeight);
|
||||
ParseBlockLpvData(LpvBlockMap[blockId - LpvBlockMapOffset].MaskWeight, mixMask, mixWeight);
|
||||
|
||||
#ifdef LPV_GLASS_TINT
|
||||
if (blockId >= BLOCK_HONEY && blockId <= BLOCK_TINTED_GLASS) {
|
||||
@ -160,16 +158,11 @@ void main() {
|
||||
lightValue.ba = log2(lightValue.ba + 1.0) / LpvBlockSkyRange;
|
||||
|
||||
if (blockId > 0 && blockId != BLOCK_EMPTY) {
|
||||
vec4 lightColorRange = unpackUnorm4x8(LpvBlockMap[blockId].ColorRange);
|
||||
vec3 lightColor = RGBToLinear(lightColorRange.rgb);
|
||||
vec4 lightColorRange = unpackUnorm4x8(LpvBlockMap[blockId - LpvBlockMapOffset].ColorRange);
|
||||
float lightRange = lightColorRange.a * 255.0;
|
||||
|
||||
// #ifdef LIGHTING_FLICKER
|
||||
// vec2 lightNoise = GetDynLightNoise(cameraPosition + blockLocalPos);
|
||||
// ApplyLightFlicker(lightColor, lightType, lightNoise);
|
||||
// #endif
|
||||
|
||||
if (lightRange > EPSILON) {
|
||||
vec3 lightColor = RGBToLinear(lightColorRange.rgb);
|
||||
lightValue.rgb = Lpv_RgbToHsv(lightColor, lightRange);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user