floodfill static block/light data

This commit is contained in:
NULL511
2024-05-01 16:59:19 -04:00
parent 2f6b51bbff
commit 2c4eea5b26
4 changed files with 287 additions and 816 deletions

59
shaders/world0/setup.csh Normal file
View File

@ -0,0 +1,59 @@
#version 430 compatibility
#define RENDER_SETUP
#include "/lib/settings.glsl"
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/lpv_blocks.glsl"
vec3 GetSceneLightColor(const in uint blockId) {
if (blockId == 10005) return vec3(1.0);
return vec3(0.0);
}
float GetSceneLightRange(const in uint blockId) {
if (blockId == 10005) return 12.0;
return 0.0;
}
void GetLpvBlockMask(const in uint blockId, out float mixWeight, out uint mixMask) {
mixWeight = 0.0;
mixMask = 0xFFFF;
}
#endif
void main() {
#ifdef IS_LPV_ENABLED
uint blockId = uint(gl_GlobalInvocationID.x + gl_GlobalInvocationID.y * 32);
//if (blockId >= 1280) return;
LpvBlockData block;
uint mixMask;
float mixWeight;
GetLpvBlockMask(blockId, mixWeight, mixMask);
block.data = BuildBlockLpvData(mixMask, mixWeight);
// vec3 lightOffset = GetSceneLightOffset(lightType);
vec3 lightColor = GetSceneLightColor(blockId);
float lightRange = GetSceneLightRange(blockId);
float lightSize = 0.0;//GetSceneLightSize(lightType);
// bool lightTraced = GetLightTraced(lightType);
// bool lightSelfTraced = GetLightSelfTraced(lightType);
// light.Offset = packSnorm4x8(vec4(lightOffset, 0.0));
block.LightColor = packUnorm4x8(vec4(lightColor, 0.0));
block.LightRangeSize = packUnorm4x8(vec4(lightRange/255.0, lightSize, 0.0, 0.0));
// light.LightMetadata = (lightTraced ? 1u : 0u);
// light.LightMetadata |= (lightSelfTraced ? 1u : 0u) << 1u;
LpvBlockMap[blockId] = block;
#endif
}

View File

@ -24,15 +24,9 @@ layout (local_size_x = 8, local_size_y = 8, local_size_z = 8) in;
#define EPSILON 1e-6
// varying vec2 texcoord;
// uniform sampler2D tex;
// uniform sampler2D noisetex;
uniform int frameCounter;
// uniform float frameTimeCounter;
uniform vec3 cameraPosition;
// varying vec4 color;
// #include "/lib/waterBump.glsl"
#include "/lib/hsv.glsl"
#include "/lib/blocks.glsl"
#include "/lib/lpv_common.glsl"
@ -40,12 +34,7 @@ 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 gbufferProjectionInverse;
// uniform mat4 gbufferModelViewInverse;
// uniform mat4 gbufferModelView;
// uniform mat4 shadowModelView;
// uniform mat4 shadowModelViewInverse;
// uniform mat4 shadowProjection;
int sumOf(ivec3 vec) {return vec.x + vec.y + vec.z;}
@ -141,8 +130,6 @@ void main() {
ivec3 imgCoord = ivec3(gl_GlobalInvocationID);
if (any(greaterThanEqual(imgCoord, LpvSize3))) return;
// vec3 blockLocalPos = gridCell * LIGHT_BIN_SIZE + blockCell - VoxelBlockCenter + cameraOffset + 0.5;
// vec3 viewDir = gbufferModelViewInverse[2].xyz;
vec3 lpvCenter = vec3(0.0);//GetLpvCenter(cameraPosition, viewDir);
vec3 blockLocalPos = imgCoord - lpvCenter + 0.5;
@ -176,23 +163,20 @@ void main() {
#if LIGHTING_MODE >= LIGHTING_MODE_FLOODFILL
if (blockId > 0 && blockId != BLOCK_EMPTY) {
//uint lightType = LpvBlockMap[blockId].lightType;
vec3 lightColor = unpackUnorm4x8(blockData.LightColor).rgb;
vec2 lightRangeSize = unpackUnorm4x8(blockData.LightRangeSize).xy;
float lightRange = lightRangeSize.x * 255.0;
//if (lightType != LIGHT_NONE && lightType != LIGHT_IGNORED) {
//StaticLightData lightInfo = StaticLightMap[lightType];
vec3 lightColor = unpackUnorm4x8(blockData.LightColor).rgb;
vec2 lightRangeSize = unpackUnorm4x8(blockData.LightRangeSize).xy;
float lightRange = lightRangeSize.x * 255.0;
lightColor = RGBToLinear(lightColor);
lightColor = RGBToLinear(lightColor);
// #ifdef LIGHTING_FLICKER
// vec2 lightNoise = GetDynLightNoise(cameraPosition + blockLocalPos);
// ApplyLightFlicker(lightColor, lightType, lightNoise);
// #endif
// #ifdef LIGHTING_FLICKER
// vec2 lightNoise = GetDynLightNoise(cameraPosition + blockLocalPos);
// ApplyLightFlicker(lightColor, lightType, lightNoise);
// #endif
if (lightRange > EPSILON) {
lightValue.rgb = Lpv_RgbToHsv(lightColor, lightRange);
//}
}
}
#endif