Bliss-Shader/shaders/lib/lpv_render.glsl

54 lines
1.8 KiB
Plaintext
Raw Normal View History

2024-05-02 23:38:35 -04:00
// LPV falloff curve
const float LpvBlockPower = 4.0;
2024-05-02 23:38:35 -04:00
// LPV block brightness scale
2024-05-03 11:39:21 -04:00
const float LpvBlockBrightness = 2.0;
2024-05-02 23:38:35 -04:00
2024-05-01 16:59:19 -04:00
vec4 SampleLpvNearest(const in ivec3 lpvPos) {
vec4 lpvSample = (frameCounter % 2) == 0
? texelFetch(texLpv1, lpvPos, 0)
: texelFetch(texLpv2, lpvPos, 0);
2024-05-01 16:59:19 -04:00
2024-05-02 23:38:35 -04:00
lpvSample.b = pow(lpvSample.b, LpvBlockPower) * LpvBlockSkyRange.x;
2024-05-01 16:59:19 -04:00
lpvSample.rgb = HsvToRgb(lpvSample.rgb);
2024-05-02 13:00:51 -04:00
return lpvSample;
2024-05-01 16:59:19 -04:00
}
vec4 SampleLpvLinear(const in vec3 lpvPos) {
2024-05-02 14:25:20 -04:00
vec3 pos = lpvPos - 0.5;
2024-05-01 16:59:19 -04:00
ivec3 lpvCoord = ivec3(floor(pos));
vec3 lpvF = fract(pos);
vec4 sample_x1y1z1 = SampleLpvNearest(lpvCoord + ivec3(0, 0, 0));
vec4 sample_x2y1z1 = SampleLpvNearest(lpvCoord + ivec3(1, 0, 0));
vec4 sample_x1y2z1 = SampleLpvNearest(lpvCoord + ivec3(0, 1, 0));
vec4 sample_x2y2z1 = SampleLpvNearest(lpvCoord + ivec3(1, 1, 0));
vec4 sample_x1y1z2 = SampleLpvNearest(lpvCoord + ivec3(0, 0, 1));
vec4 sample_x2y1z2 = SampleLpvNearest(lpvCoord + ivec3(1, 0, 1));
vec4 sample_x1y2z2 = SampleLpvNearest(lpvCoord + ivec3(0, 1, 1));
vec4 sample_x2y2z2 = SampleLpvNearest(lpvCoord + ivec3(1, 1, 1));
vec4 sample_y1z1 = mix(sample_x1y1z1, sample_x2y1z1, lpvF.x);
vec4 sample_y2z1 = mix(sample_x1y2z1, sample_x2y2z1, lpvF.x);
vec4 sample_y1z2 = mix(sample_x1y1z2, sample_x2y1z2, lpvF.x);
vec4 sample_y2z2 = mix(sample_x1y2z2, sample_x2y2z2, lpvF.x);
vec4 sample_z1 = mix(sample_y1z1, sample_y2z1, lpvF.y);
vec4 sample_z2 = mix(sample_y1z2, sample_y2z2, lpvF.y);
2024-05-02 14:36:06 -04:00
return mix(sample_z1, sample_z2, lpvF.z);
2024-05-01 16:59:19 -04:00
}
vec3 GetLpvBlockLight(const in vec4 lpvSample) {
2024-05-02 23:38:35 -04:00
return LpvBlockBrightness * lpvSample.rgb;
2024-05-01 16:59:19 -04:00
}
float GetLpvSkyLight(const in vec4 lpvSample) {
float skyLight = saturate(lpvSample.a);
2024-05-02 12:43:30 -04:00
return skyLight*skyLight;
2024-05-01 16:59:19 -04:00
}