mirror of
https://github.com/X0nk/Bliss-Shader.git
synced 2025-06-22 00:37:35 +08:00
fix floodfill frame offset
This commit is contained in:
@ -1,8 +1,6 @@
|
||||
struct LpvBlockData { // 12 x1280 =?
|
||||
uint data; // 4
|
||||
uint LightColor; // 4
|
||||
uint LightRangeSize; // 4
|
||||
// uint LightMetadata;
|
||||
struct LpvBlockData { // 8 x1280 =?
|
||||
uint MaskWeight; // 4
|
||||
uint ColorRange; // 4
|
||||
};
|
||||
|
||||
#ifdef RENDER_SETUP
|
||||
@ -24,6 +22,5 @@ uint BuildBlockLpvData(uint mixMask, float mixWeight) {
|
||||
|
||||
void ParseBlockLpvData(const in uint data, out uint mixMask, out float mixWeight) {
|
||||
mixWeight = (data & 0xFF) / 255.0;
|
||||
|
||||
mixMask = (data >> 8) & 0xFF;
|
||||
}
|
||||
|
@ -1,21 +1,12 @@
|
||||
layout(rgba8) uniform image3D imgLpv1;
|
||||
layout(rgba8) uniform image3D imgLpv2;
|
||||
|
||||
// How far light propagates (block, sky)
|
||||
const vec2 LpvBlockSkyRange = vec2(15.0, 24.0);
|
||||
|
||||
const uint LpvSize = uint(exp2(LPV_SIZE));
|
||||
const uvec3 LpvSize3 = uvec3(LpvSize);
|
||||
|
||||
const vec2 LpvBlockSkyRange = vec2(1.0, 24.0);
|
||||
|
||||
// #if defined RENDER_SHADOWCOMP || defined RENDER_GBUFFER
|
||||
// layout(r16ui) uniform uimage2D imgVoxelMask;
|
||||
// #elif defined RENDER_BEGIN || defined RENDER_GEOMETRY || defined RENDER_VERTEX
|
||||
// layout(r16ui) uniform writeonly uimage2D imgVoxelMask;
|
||||
// #else
|
||||
// layout(r16ui) uniform readonly uimage2D imgVoxelMask;
|
||||
// #endif
|
||||
|
||||
// #define LIGHT_NONE 0
|
||||
|
||||
vec3 GetLpvPosition(const in vec3 playerPos) {
|
||||
vec3 cameraOffset = fract(cameraPosition);
|
||||
return playerPos + cameraOffset + LpvSize3/2u;
|
||||
|
@ -9,22 +9,18 @@
|
||||
|
||||
vec4 SampleLpvNearest(const in ivec3 lpvPos) {
|
||||
vec4 lpvSample = (frameCounter % 2) == 0
|
||||
// #ifndef RENDER_GBUFFER
|
||||
? imageLoad(imgLpv1, lpvPos)
|
||||
: imageLoad(imgLpv2, lpvPos);
|
||||
// #else
|
||||
// ? imageLoad(imgLpv2, lpvPos, 0)
|
||||
// : imageLoad(imgLpv1, lpvPos, 0);
|
||||
// #endif
|
||||
|
||||
lpvSample.ba = exp2(lpvSample.ba * LpvBlockSkyRange) - 1.0;
|
||||
//lpvSample.ba = exp2(lpvSample.ba * LpvBlockSkyRange) - 1.0;
|
||||
lpvSample.b = (lpvSample.b*lpvSample.b) * LpvBlockSkyRange.x;
|
||||
lpvSample.rgb = HsvToRgb(lpvSample.rgb);
|
||||
|
||||
return lpvSample;
|
||||
}
|
||||
|
||||
vec4 SampleLpvLinear(const in vec3 lpvPos) {
|
||||
vec3 pos = lpvPos - 0.5;
|
||||
vec3 pos = lpvPos;// - 0.5;
|
||||
ivec3 lpvCoord = ivec3(floor(pos));
|
||||
vec3 lpvF = fract(pos);
|
||||
|
||||
@ -102,7 +98,7 @@ vec4 SampleLpvLinear(const in vec3 lpvPos) {
|
||||
|
||||
vec3 GetLpvBlockLight(const in vec4 lpvSample) {
|
||||
// return GetLpvBlockLight(lpvSample, 1.0);
|
||||
return 8.0 * lpvSample.rgb;// * LPV_BLOCKLIGHT_SCALE);// * DynamicLightBrightness;
|
||||
return lpvSample.rgb;// * LPV_BLOCKLIGHT_SCALE);// * DynamicLightBrightness;
|
||||
}
|
||||
|
||||
float GetLpvSkyLight(const in vec4 lpvSample) {
|
||||
|
@ -3,9 +3,11 @@ layout(r16ui) uniform uimage3D imgVoxelMask;
|
||||
const uint VoxelSize = uint(exp2(LPV_SIZE));
|
||||
const uvec3 VoxelSize3 = uvec3(VoxelSize);
|
||||
|
||||
const float voxelDistance = 64.0;
|
||||
|
||||
#define BLOCK_EMPTY 0
|
||||
|
||||
ivec3 GetVoxelIndex(const in vec3 playerPos) {
|
||||
vec3 cameraOffset = fract(cameraPosition);
|
||||
return ivec3(floor(playerPos + cameraOffset + VoxelSize3/2u));
|
||||
return ivec3(floor(playerPos + cameraOffset) + VoxelSize3/2u);
|
||||
}
|
||||
|
@ -4,9 +4,9 @@ uint GetVoxelBlock(const in ivec3 voxelPos) {
|
||||
return imageLoad(imgVoxelMask, voxelPos).r;
|
||||
}
|
||||
|
||||
uint GetVoxelBlock(const in vec3 playerPos) {
|
||||
ivec3 voxelPos = GetVoxelIndex(playerPos);
|
||||
// uint GetVoxelBlock(const in vec3 playerPos) {
|
||||
// ivec3 voxelPos = GetVoxelIndex(playerPos);
|
||||
|
||||
// TODO: exit early if outside bounds
|
||||
return imageLoad(imgVoxelMask, voxelPos).r;
|
||||
}
|
||||
// // TODO: exit early if outside bounds
|
||||
// return imageLoad(imgVoxelMask, voxelPos).r;
|
||||
// }
|
||||
|
@ -1,6 +1,6 @@
|
||||
void SetVoxelBlock(const in vec3 playerPos, const in uint blockId) {
|
||||
ivec3 voxelPos = GetVoxelIndex(playerPos);
|
||||
if (clamp(voxelPos, ivec3(0), ivec3(VoxelSize-1u)) != voxelPos) return;
|
||||
|
||||
// TODO: exit early if outside bounds
|
||||
imageStore(imgVoxelMask, voxelPos, uvec4(blockId));
|
||||
}
|
||||
|
Reference in New Issue
Block a user