(Finish scene controller) Add daily weather, daily rainy weather, daily rainy weather for hot/cold biomes., and create controls for all of them. improve water caustics. add dedicated LPV fog illumination raymarcher. add individual minimum indoor/outdoor light control. fix bloomy fog and disallow it to apply on clouds. Cleanup code and remove unused shader settings. fix lightning bolts and readd lightning flashes. fix puddles appearing in biomes they shouldnt. fix puddles using wrong normals in full wetness. improve cloud to fog intersection data (thank you merlin). remove unused shader programs

This commit is contained in:
Xonk
2025-11-13 21:49:57 -05:00
parent b63816a1cb
commit 11a2df348b
173 changed files with 2875 additions and 2267 deletions
+114
View File
@@ -0,0 +1,114 @@
/*
--------------------------------------
// hello
// this file is meant to be an interface for map makers (or whoever really do whatever you want) to control the shader in a handfull of ways depending on the circumstances surrounding the player.
// one usage example would be like: When the player is within a specific area within the world coordinates, make it super foggy there.
// this file is specifically made to be drop-in ready inside the shaderpack expected at the file path: shaderpacks/<bliss_vN.N.N>/shaders/CUSTOM_SCENE_PARAMETERS.glsl
--------------------------------------
--------------------------------------
// these are all the parameters you can freely set. you can do it any amount of times in any amount of profiles.
// if a parameter is not written below, it does not exist. writing new parameters will not create anything but a shader compile error.
--------------------------------------
--------------------------------------
// for cloud coverage input numerical values within the range of 0.0 - 2.0
--------------------------------------
altostratusCoverage = 0.0;
largeCumulusCoverage = 0.0;
smallCumulusCoverage = 0.0;
--------------------------------------
// for cloud density input numerical values within the range of 0.0 - 1.0
--------------------------------------
altostratusDensity = 0.0;
largeCumulusDensity = 0.0;
smallCumulusDensity = 0.0;
--------------------------------------
// for fog density input numerical values within the range of 0.0 - 1.0
--------------------------------------
uniformFogDensity = 0.0;
clumpyFogDensity = 0.0;
LocalUniformFogDensity = 0.0;
LocalClumpyFogDensity = 0.0;
--------------------------------------
// for fog colors, input the numerical color values of red, green and blue, within the range of 0.0 - 1.0 or N/255.0
// this website is extremely helpful, just copy its RGB values https://rgbcolorpicker.com/0-1
--------------------------------------
localFogColor = vec3(R, G, B);
--------------------------------------
// here are some pre-made functions to make creating profiles more user friendly.
// these are used the same way as the /fill command in-game. i recommend finding world coordinates to use with that command.
// the left most input is the first set of coordinates, the right most input is the second set of coordinates
--------------------------------------
playerIsInsideArea(vec3(X, Y, Z), vec3(X, Y, Z))
playerIsOutsideArea(vec3(X, Y, Z), vec3(X, Y, Z))
--------------------------------------
// HOW TO USE: first start with your condition (this code writing formatting is arbitrary)
--------------------------------------
if(
conditionIsTrue
){
thenDoStuff
}
--------------------------------------
// input some sort of condition to check if its true or false, and then to set the parameters to specific values when it is true.
// these are functional examples of usage
--------------------------------------
if(
playerIsWithinArea(vec3(-5, -5, -3), vec3(5, 1, 100))
){
uniformFogDensity = 0.5;
smallCumulusCoverage = 1.5;
}
if(
playerIsOutsideArea(vec3(-5, -5, -3), vec3(5, 1, 100))
){
uniformFogDensity = 1.5;
smallCumulusCoverage = 0.0;
LocalClumpyFogDensity = 0.0;
}
--------------------------------------
// IMPORTANT INFORMATION
//
// ALL VARIABLE NAMES, UNIFORM NAMES, AND FUNCTION NAMES ARE CASE SENSITIVE
//
// IF THIS FILE IS DELETED, MISSING, NAMED INCORRECTLY, OR IN THE WRONG FILEPATH, THE SHADERPACK WILL THROW AN ERROR: "failed to resolve #include directive --> /lib/scene_controller.glsl"
//
// the code is executed in a very specific order, think top-to-bottom, or the order of operations that math dictates.
// you CAN have multiple profiles alter the same parameters at the same time!
// BUT, the code executed last will be the final result! meaning if many profiles are true at once, the bottom most true one will be the one actually used.
// So dont worry about overlapping profiles! just be aware of the order of operations!
//
// when a custom profile is active, it will overwrite any of bliss's pre-existing profiles
// That includes daily weather, rainy weather, and biome specific enviornments
--------------------------------------
*/
#ifdef DECLARE_UNIFORMS_OR_WRITE_FUNCTIONS_FOR_CUSTOM_SCENE_CONTROLLER_PROFILES
// DECLARE UNIFORMS PROVIDED BY IRIS HERE. if they are already declared elswhere in the shaderpack, there will be an error. not all uniforms are viable to be used.
// read the iris documentation for a complete list of uniforms to call https://shaders.properties/current/reference/uniforms/overview/
// you can also write functions here if you want. you must follow the syntax of the programming language "GLSL"
// go google that i aint helping you https://wikis.khronos.org/opengl/OpenGL_Shading_Language | https://www.shadertoy.com/
#endif
#ifdef WRITE_CUSTOM_SCENE_CONTROLLER_PROFILES
// WRITE YOUR PROFILES HERE WITHIN THE #ifdef --- DO NOT WRITE ABOVE THE #ifdef OR BELOW THE #endif --- YOU CAN SAFELY REMOVE THIS TEXT AND HAVE NOTHING WRITTEN HERE AT ALL
#endif
+4 -1
View File
@@ -95,12 +95,15 @@ void main() {
gcolor = gl_Color;
EMISSIVE = 0.0;
if(dhMaterialId == DH_BLOCK_ILLUMINATED || gl_MultiTexCoord1.x >= 0.95) EMISSIVE = 0.5;
SSSAMOUNT = 0.0;
#if defined DH_SUBSURFACE_SCATTERING
#if defined COLOR_TEST_FOR_SUBSURFACE_SCATTERING_MATERIAL
if(dot(gl_Color.rgb, vec3(DH_SSS_THRESHOLD_R, DH_SSS_THRESHOLD_G, DH_SSS_THRESHOLD_B)) > 0.0 && dhMaterialId == DH_BLOCK_UNKNOWN) SSSAMOUNT = 0.25;
#endif
if (dhMaterialId == DH_BLOCK_LEAVES) SSSAMOUNT = 1.0;
if (dhMaterialId == DH_BLOCK_SNOW) SSSAMOUNT = 0.5;
#endif
+1 -1
View File
@@ -431,7 +431,7 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 )
#ifdef DH_OVERDRAW_PREVENTION
float distancefade = min(max(1.0 - length(playerPos)/clamp(far-16*4, 16, maxOverdrawDistance),0.0)*5,1.0);
if(texture2D(depthtex0, gl_FragCoord.xy*texelSize).x < 1.0 || distancefade > 0.0){
if(texture2D(depthtex0, gl_FragCoord.xy*texelSize).x < 1.0 || distancefade > 0.0){
gl_FragData[0].a = 0.0;
material = 0.0;
}
+3 -1
View File
@@ -102,7 +102,9 @@ void main() {
averageSkyCol_Clouds = texelFetch2D(colortex4,ivec2(0,37),0).rgb;
#ifdef OVERWORLD_SHADER
readSceneControllerParameters(colortex4, parameters.smallCumulus, parameters.largeCumulus, parameters.altostratus, parameters.fog);
#define READ_SCENE_CONTROLLER_PARAMETERS
#include "/lib/scene_controller.glsl"
// readSceneControllerParameters(colortex4, parameters.smallCumulus, parameters.largeCumulus, parameters.altostratus, parameters.fog);
#endif
+1 -1
View File
@@ -491,7 +491,7 @@ void main() {
if(TEXTURE.a < 0.7 && TEXTURE.a > 0.2) gl_FragData[0] *= clamp(1.0 - length(feetPlayerPos) / 100.0 ,0.0,1.0);
#if DEBUG_VIEW == debug_LIGHTMAPS
gl_FragData[0].rgb = vec3(lmtexcoord.z,lmtexcoord.w,0.0);
gl_FragData[0].rgb = vec3(lmtexcoord.z,lmtexcoord.w,0.0)*0.1;
#endif
gl_FragData[0].rgb *= 0.1;
+6 -4
View File
@@ -26,6 +26,7 @@ uniform sampler2D colortex4;
#endif
uniform bool isInRainFallEnviornment;
uniform vec3 sunPosition;
uniform float sunElevation;
@@ -100,9 +101,9 @@ void main() {
#ifdef WEATHER
worldpos += cameraPosition;
bool istopv = worldpos.y > cameraPosition.y + 5.0 && lmtexcoord.w > 0.99;
bool istopv = (worldpos.y > cameraPosition.y + 5.0 && lmtexcoord.w > 0.99);
if(!istopv){
if(!istopv && isInRainFallEnviornment){
worldpos.xyz -= cameraPosition - vec3(2.0,0.0,2.0) * min(max(clamp(eyeBrightnessSmooth.y/240.0,0,1)-0.95,0)/0.05,1);
}else{
worldpos.xyz -= cameraPosition;
@@ -121,7 +122,6 @@ void main() {
gl_Position = ftransform();
#endif
color = gl_Color;
#ifdef LINES
@@ -135,7 +135,9 @@ void main() {
averageSkyCol_Clouds = texelFetch2D(colortex4,ivec2(0,37),0).rgb;
WsunVec = lightCol.a * normalize(mat3(gbufferModelViewInverse) * sunPosition);
readSceneControllerParameters(colortex4, parameters.smallCumulus, parameters.largeCumulus, parameters.altostratus, parameters.fog);
#define READ_SCENE_CONTROLLER_PARAMETERS
#include "/lib/scene_controller.glsl"
// readSceneControllerParameters(colortex4, parameters.smallCumulus, parameters.largeCumulus, parameters.altostratus, parameters.fog);
#endif
+9 -2
View File
@@ -98,7 +98,6 @@ flat varying int SIGN;
flat varying float HELD_ITEM_BRIGHTNESS;
uniform float noPuddleAreas;
uniform float nightVision;
// float interleaved_gradientNoise(){
@@ -651,8 +650,16 @@ void main() {
#endif
#ifdef WORLD
// apply noise to lightmaps to reduce banding.
vec2 PackLightmaps = vec2(torchlightmap, lmtexcoord.w);
// special curve to give more precision on high/low values of the gradient. this curve will be inverted after sampling and decoding.
// PackLightmaps = pow(1.0-pow(1.0-PackLightmaps,vec2(0.5)),vec2(0.5));
#if defined WORLD && !defined HAND && !defined ENTITIES
// some dither to lightmaps to reduce banding.
PackLightmaps = clamp( PackLightmaps + PackLightmaps * (interleaved_gradientNoise()-0.5)*0.005,0,1);
#endif
vec4 data1 = clamp( encode(viewToWorld(normal), PackLightmaps), 0.0, 1.0);
gl_FragData[0] = vec4(encodeVec2(Albedo.x,data1.x), encodeVec2(Albedo.y,data1.y), encodeVec2(Albedo.z,data1.z), encodeVec2(data1.w,Albedo.w));
+1 -1
View File
@@ -211,7 +211,7 @@ void main() {
// #endif
vec2 lmcoord = gl_MultiTexCoord1.xy / 240.0;
vec2 lmcoord = max(gl_MultiTexCoord1.xy - 8.0, 0.0) / (240.0-8.0);
lmtexcoord.zw = lmcoord;
+17 -5
View File
@@ -46,6 +46,7 @@ uniform sampler2D depthtex0;
#ifdef DISTANT_HORIZONS
uniform sampler2D dhDepthTex1;
uniform sampler2D dhDepthTex0;
#endif
uniform sampler2D colortex7;
@@ -111,9 +112,11 @@ uniform float waterEnteredAltitude;
#include "/lib/sky_gradient.glsl"
#include "/lib/waterBump.glsl"
#define LIGHTNINGFLASH_DIFFUSE
#include "/lib/lightning_stuff.glsl"
#ifdef OVERWORLD_SHADER
flat varying float Flashing;
#include "/lib/lightning_stuff.glsl"
#include "/lib/scene_controller.glsl"
@@ -440,7 +443,7 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 )
#ifdef WhiteWorld
gl_FragData[0].rgb = vec3(1.0);
gl_FragData[0].a = 1.0/255.0;
gl_FragData[0].a = 1.0;
#endif
vec3 Albedo = toLinear(gl_FragData[0].rgb);
@@ -450,8 +453,8 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 )
if (isWater) Albedo *= sqrt(luma(Albedo));
#else
if (isWater){
Albedo = vec3(0.0);
gl_FragData[0].a = 1.0/255.0;
Albedo = vec3(0.0);
}
#endif
#endif
@@ -555,7 +558,7 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 )
#if defined ENTITIES && defined IS_IRIS
if(NAMETAG > 0) nameTagMask = 0.1;
#endif
gl_FragData[2] = vec4(encodeVec2(TangentNormal*0.5+0.5), encodeVec2(GLASS_TINT_COLORS.rg), encodeVec2(GLASS_TINT_COLORS.ba), encodeVec2(0.0, nameTagMask));
////////////////////////////////////////////////////////////////////////////////
@@ -609,7 +612,7 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 )
float waterdepth = max(-(feetPlayerPos.y + distanceFromWaterSurface),0.0);
DirectLightColor *= exp(-vec3(Water_Absorb_R, Water_Absorb_G, Water_Absorb_B) * (waterdepth/abs(WsunVec.y)));
DirectLightColor *= pow(waterCaustics(feetPlayerPos + cameraPosition, WsunVec)*WATER_CAUSTICS_BRIGHTNESS, WATER_CAUSTICS_POWER);
DirectLightColor *= pow(waterCaustics(feetPlayerPos + cameraPosition, WsunVec, -(feetPlayerPos.y + distanceFromWaterSurface))*WATER_CAUSTICS_BRIGHTNESS, WATER_CAUSTICS_POWER);
}
// float NdotL = clamp((-15 + dot(normal, normalize(WsunVec*mat3(gbufferModelViewInverse)))*255.0) / 240.0 ,0.0,1.0);
@@ -695,10 +698,15 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 )
Indirect_lighting += doBlockLightLighting( vec3(TORCH_R,TORCH_G,TORCH_B), lightmap.x, feetPlayerPos, lpvPos);
vec4 flashLightSpecularData = vec4(0.0);
#ifdef FLASHLIGHT
Indirect_lighting += calculateFlashlight(FragCoord.xy*texelSize/RENDER_SCALE, viewPos, vec3(0.0), worldSpaceNormal, flashLightSpecularData, false);
#endif
#if defined LIGHTNING_FLASH
Indirect_lighting += createLightningPointLight(feetPlayerPos, lightningBoltPosition.xyz, worldSpaceNormal) * lightmap.y*lightmap.y*lightmap.y*lightmap.y;
#endif
vec3 FinalColor = (Indirect_lighting + Direct_lighting) * Albedo;
#if EMISSIVE_TYPE == 2 || EMISSIVE_TYPE == 3
@@ -780,6 +788,10 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 )
#endif
bool WATER = texture2D(colortex7, gl_FragCoord.xy*texelSize).a > 0.0 && length(feetPlayerPos) > clamp(far-16*4, 16, maxOverdrawDistance) && texture2D(depthtex1, gl_FragCoord.xy*texelSize).x >= 1.0;
// bool WATER = length(feetPlayerPos) > clamp(far-16*4, 17.5, maxOverdrawDistance) && texelFetch2D(depthtex1, ivec2(gl_FragCoord.xy), 0).x >= 1.0 || texelFetch2D(depthtex1, ivec2(gl_FragCoord.xy), 0).x < gl_FragCoord.z;
// float depth = texelFetch2D(depthtex1, ivec2(gl_FragCoord.xy), 0).x;
// bool WATER = (abs(depth - texelFetch2D(dhDepthTex0, ivec2(gl_FragCoord.xy), 0).x) > 0.23 && length(feetPlayerPos) > clamp(far-16*4, 16, maxOverdrawDistance)) || (length(feetPlayerPos) > clamp(far-16*4, 20, maxOverdrawDistance) && depth >= 1.0);// && texelFetch2D(depthtex1, ivec2(gl_FragCoord.xy), 0).x < 1.0;
// bool WATER = texelFetch2D(dhDepthTex0, ivec2(gl_FragCoord.xy),0).x == texelFetch2D(depthtex1, ivec2(gl_FragCoord.xy), 0).x;
if(WATER) {
gl_FragData[0].a = 0.0;
+3 -1
View File
@@ -246,7 +246,9 @@ void main() {
WsunVec = mix(WmoonVec, WsunVec, clamp(lightCol.a,0,1));
readSceneControllerParameters(colortex4, parameters.smallCumulus, parameters.largeCumulus, parameters.altostratus, parameters.fog);
#define READ_SCENE_CONTROLLER_PARAMETERS
#include "/lib/scene_controller.glsl"
// readSceneControllerParameters(colortex4, parameters.smallCumulus, parameters.largeCumulus, parameters.altostratus, parameters.fog);
#endif
+3 -1
View File
@@ -45,6 +45,7 @@ uniform float frameTimeCounter;
uniform float rainStrength;
uniform int frameCounter;
uniform ivec2 eyeBrightnessSmooth;
uniform ivec2 eyeBrightness;
uniform mat4 gbufferModelViewInverse;
@@ -308,6 +309,7 @@ vec2 SSAO(
sss += clamp(-dot(normalize(viewPosDiff), flatnormal),0.0,1.0) * exp(-10*occlusion);
#else
sss += clamp(-dot(normalize(viewPosDiff), flatnormal) - occlusion/n,0.0,1.0) * 0.25 + (normalize(mat3(gbufferModelViewInverse) * -viewPosDiff).y - occlusion/n) * threshHold;
// sss += (normalize(mat3(gbufferModelViewInverse) * -viewPosDiff).y - (occlusion/n)*0.5) * threshHold;
#endif
#endif
@@ -363,7 +365,7 @@ void main() {
float lightLeakFix = clamp(pow(eyeBrightnessSmooth.y/240. + lightmap.y,2.0) ,0.0,1.0);
gl_FragData[1] = vec4(0.0,0.0,0.0, texelFetch2D(colortex14,ivec2((floor(gl_FragCoord.xy)/VL_RENDER_RESOLUTION*texelSize+0.5*texelSize)/texelSize),0).a);
gl_FragData[1] = vec4(0.0,0.0,0.0, texelFetch2D(colortex14,ivec2((floor(gl_FragCoord.xy)/VL_RENDERING_RESOLUTION_SCALE*texelSize+0.5*texelSize)/texelSize),0).a);
// bool lightningBolt = abs(dataUnpacked1.w-0.5) <0.01;
+89 -115
View File
@@ -35,19 +35,14 @@ uniform float nightVision;
#if SUN_SPECULAR_MULT != 0
#define LIGHTSOURCE_REFLECTION
#endif
#include "/lib/lightning_stuff.glsl"
#endif
#ifdef NETHER_SHADER
const bool colortex4MipmapEnabled = true;
uniform vec3 lightningEffect;
#undef LIGHTSOURCE_REFLECTION
#endif
#ifdef END_SHADER
uniform vec3 lightningEffect;
flat varying float Flashing;
#undef LIGHTSOURCE_REFLECTION
#endif
@@ -115,6 +110,7 @@ uniform float frameTimeCounter;
uniform float rainStrength;
uniform int isEyeInWater;
uniform ivec2 eyeBrightnessSmooth;
uniform ivec2 eyeBrightness;
uniform vec3 sunVec;
flat varying vec3 WsunVec;
@@ -165,6 +161,9 @@ float convertHandDepth_2(in float depth, bool hand) {
#include "/lib/lpv_render.glsl"
#endif
#define LIGHTNINGFLASH_DIFFUSE
#include "/lib/lightning_stuff.glsl"
// #define DEFERRED_SPECULAR
#define DEFERRED_SSR_QUALITY 30 // [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 200 300 400 500]
#define DEFERRED_BACKGROUND_REFLECTION
@@ -334,70 +333,6 @@ float swapperlinZ(float depth, float _near, float _far) {
}
// vec2 SSRT_Shadows(vec3 viewPos, bool depthCheck, vec3 lightDir, float noise, bool isSSS, bool hand){
// float handSwitch = hand ? 1.0 : 0.0;
// float steps = 16.0;
// float Shadow = 1.0;
// float SSS = 0.0;
// // isSSS = true;
// float _near = near; float _far = far*4.0;
// if (depthCheck) {
// _near = dhNearPlane;
// _far = dhFarPlane;
// }
// vec3 clipPosition = toClipSpace3_DH(viewPos, depthCheck);
// //prevents the ray from going behind the camera
// float rayLength = ((viewPos.z + lightDir.z * _far*sqrt(3.)) > -_near) ?
// (-_near -viewPos.z) / lightDir.z : _far*sqrt(3.);
// vec3 direction = toClipSpace3_DH(viewPos + lightDir*rayLength, depthCheck) - clipPosition; //convert to clip space
// direction.xyz = direction.xyz / max(abs(direction.x)/0.0005, abs(direction.y)/0.0005); //fixed step size
// // float Stepmult = depthCheck ? (isSSS ? 1.0 : 3.0) : (isSSS ? 1.0 : 3.0);
// float Stepmult = isSSS ? 3.0 : 6.0;
// vec3 rayDir = direction * Stepmult * vec3(RENDER_SCALE,1.0);
// vec3 screenPos = clipPosition * vec3(RENDER_SCALE,1.0) + rayDir*noise - (isSSS ? rayDir*0.9 : vec3(0.0));
// float minZ = screenPos.z - 1.0;
// float maxZ = screenPos.z;
// // as distance increases, add larger values to the SSS value. this scales the "density" with distance, as far things should appear denser.
// float dist = 1.0 + length(mat3(gbufferModelViewInverse) * viewPos) / 500.0;
// for (int i = 0; i < int(steps); i++) {
// float samplePos = convertHandDepth_2(texture2D(depthtex1, screenPos.xy).x, hand);
// #ifdef DISTANT_HORIZONS
// if(depthCheck) samplePos = texture2D(dhDepthTex1, screenPos.xy).x;
// #endif
// if(samplePos < screenPos.z && (samplePos <= max(minZ,maxZ) && samplePos >= min(minZ,maxZ))){
// vec2 linearZ = vec2(swapperlinZ(screenPos.z, _near, _far), swapperlinZ(samplePos, _near, _far));
// float calcthreshold = abs(linearZ.x - linearZ.y) / linearZ.x;
// if (calcthreshold < 0.035) Shadow = 0.0;
// SSS += dist;
// }
// minZ = maxZ - (isSSS ? 1.0 : 0.0001) / swapperlinZ(samplePos, _near, _far);
// maxZ += rayDir.z;
// screenPos += rayDir;
// }
// return vec2(Shadow, SSS / steps);
// }
vec2 SSRT_Shadows(vec3 viewPos, bool depthCheck, vec3 lightDir, float noise, bool isSSS, bool hand){
// return 1.0;
@@ -433,6 +368,7 @@ vec2 SSRT_Shadows(vec3 viewPos, bool depthCheck, vec3 lightDir, float noise, boo
float distanceScale2 = 1.0 + length(mat3(gbufferModelViewInverse) * viewPos) / 150.0;
for (int i = 0; i < int(samples); i++) {
if(newPos.x < 0 || newPos.x > 1 || newPos.y < 0 || newPos.y > 1) break;
float sampleDepth = convertHandDepth_2(texelFetch2D(depthtex1, ivec2(newPos.xy/texelSize),0).x,hand);
@@ -588,9 +524,9 @@ vec4 BilateralUpscale_VLFOG(sampler2D tex, sampler2D depth, float referenceDepth
vec2 coord = gl_FragCoord.xy - 1.5;
vec2 UV = coord;
const ivec2 SCALE = ivec2(1.0/VL_RENDER_RESOLUTION);
ivec2 UV_DEPTH = ivec2(UV*VL_RENDER_RESOLUTION)*SCALE;
ivec2 UV_COLOR = ivec2(UV*VL_RENDER_RESOLUTION);
const ivec2 SCALE = ivec2(1.0/VL_RENDERING_RESOLUTION_SCALE);
ivec2 UV_DEPTH = ivec2(UV*VL_RENDERING_RESOLUTION_SCALE)*SCALE;
ivec2 UV_COLOR = ivec2(UV*VL_RENDERING_RESOLUTION_SCALE);
ivec2 UV_NOISE = ivec2(gl_FragCoord.xy*texelSize + 1);
ivec2 OFFSET[5] = ivec2[](
@@ -613,7 +549,6 @@ vec4 BilateralUpscale_VLFOG(sampler2D tex, sampler2D depth, float referenceDepth
colorSum += offsetColor*edgeDiff;
edgeSum += edgeDiff;
}
return colorSum/edgeSum;
}
@@ -744,7 +679,6 @@ void applyPuddles(
2 = only puddles
3 = only full wetness
*/
vec3 unchangedNormals = normals;
float halfWet = min(wetnessAmount,1.0);
@@ -767,19 +701,22 @@ void applyPuddles(
#if PUDDLE_MODE == 1
float puddles = max(halfWet - noise,0.0);
puddles = clamp(halfWet - exp(-25.0 * puddles*puddles*puddles*puddles*puddles),0.0,1.0);
puddles = mix(puddles, 1.0, fullWet);
float wetnessStages = max(puddles, fullWet) * lightmap;
#endif
#if PUDDLE_MODE == 2
float puddles = max(halfWet - noise,0.0);
puddles = clamp(halfWet - exp(-25.0 * puddles*puddles*puddles*puddles*puddles),0.0,1.0);
float wetnessStages = puddles * lightmap;
#endif
#if PUDDLE_MODE == 3
float puddles = fullWet;
float puddles = 0.0;
float wetnessStages = fullWet * lightmap;
#endif
float wetnessStages = puddles * lightmap;
if(isWater) wetnessStages = 0.0;
normals = mix(normals, flatNormals, puddles * lightmap * clamp(flatNormals.y,0.0,1.0));
@@ -812,6 +749,7 @@ void main() {
float noise_2 = R2_dither();
vec2 bnoise = blueNoise(gl_FragCoord.xy).rg;
float ig_noise = interleaved_gradientNoise_temporal();
#if TAA_MODE > 0
int seed = frameCounter*8%40000;
@@ -870,8 +808,11 @@ void main() {
vec3 albedo = toLinear(vec3(dataUnpacked0.xz,dataUnpacked1.x));
vec3 normal = decode(dataUnpacked0.yw);
vec2 lightmap = dataUnpacked1.yz;
lightmap.xy = min(max(lightmap.xy - 0.05,0.0)*1.06,1.0); // small offset to hide flickering from precision error in the encoding/decoding on values close to 1.0 or 0.0
// special curve to give more precision on high/low values of the gradient. this curve will be inverted after sampling and decoding.
// lightmap = 1.0-pow(1.0-pow(lightmap,vec2(2)),vec2(2));
// small offset to hide flickering from precision error in the encoding/decoding on values close to 1.0 or 0.0
lightmap.xy = min(max(lightmap.xy - 0.05,0.0)*1.06,1.0);
#if MC_VERSION < 12109
#if !defined OVERWORLD_SHADER
lightmap.y = 1.0;
@@ -882,6 +823,7 @@ void main() {
#endif
#endif
////// --------------- UNPACK MISC --------------- //////
vec4 SpecularTex = texelFetch2D(colortex8, ivec2(gl_FragCoord.xy), 0);
@@ -969,7 +911,7 @@ void main() {
float Shadows = 1.0;
vec3 shadowColor = vec3(1.0);
vec3 SSSColor = vec3(1.0);
vec3 SSSColor = vec3(0.0);
vec3 filteredShadow = vec3(Min_Shadow_Filter_Radius,1.0,0.0);
float NdotL = 1.0;
@@ -1007,7 +949,16 @@ void main() {
#endif
float Vdiff = distance(feetPlayerPos, playerPos0);
float estimatedDepth = Vdiff * abs(feetPlayerPos_normalized.y);// assuming water plane
float estimatedDepth = Vdiff* abs(feetPlayerPos_normalized.y);// assuming water plane
// vec3 waterNormal = clamp(normalize(cross(dFdx(playerPos0), dFdy(playerPos0))),-1,1); // it uses depth that has POM written to it.
// vec3 absPlayerPosNorm = abs(feetPlayerPos_normalized);
// estimatedDepth = mix(estimatedDepth, Vdiff*absPlayerPosNorm.y, max(waterNormal.y,0));
// estimatedDepth = mix(estimatedDepth, Vdiff*absPlayerPosNorm.y, max(-waterNormal.y,0));
// estimatedDepth = mix(estimatedDepth, Vdiff*absPlayerPosNorm.z, max(waterNormal.z,0));
// estimatedDepth = mix(estimatedDepth, Vdiff*absPlayerPosNorm.z, max(-waterNormal.z,0));
// estimatedDepth = mix(estimatedDepth, Vdiff*absPlayerPosNorm.x, max(waterNormal.x,0));
// estimatedDepth = mix(estimatedDepth, Vdiff*absPlayerPosNorm.x, max(-waterNormal.x,0));
// force the absorbance to start way closer to the water surface in low light areas, so the water is visible in caves and such.
#if MINIMUM_WATER_ABSORBANCE > -1
@@ -1022,27 +973,50 @@ void main() {
// sunlight gets absorbed by water on the way down to the floor, and on the way back up to your eye. im gonna ingore the latter part lol
// based on the angle of the sun, sunlight will travel through more/less water to reach the same spot. scale absorbtion depth accordingly
vec3 sunlightAbsorbtion = exp(-totEpsilon * (estimatedDepth/abs(WsunVec.y)));
float percievedWaterDepth = estimatedDepth;
if (isEyeInWater == 1){
estimatedDepth = 1.0;
// viewerWaterDepth = max(0.9-lightmap.y,0.0)*3.0;
float distanceFromWaterSurface = max(-(feetPlayerPos.y + (cameraPosition.y - waterEnteredAltitude)),0.0) ;
float distanceFromWaterSurface = -(feetPlayerPos.y + (cameraPosition.y - waterEnteredAltitude));//max(-(feetPlayerPos.y + (cameraPosition.y - waterEnteredAltitude)),0.0) ;
percievedWaterDepth = distanceFromWaterSurface;
distanceFromWaterSurface = max(distanceFromWaterSurface,0.0);
Absorbtion = exp(-totEpsilon * distanceFromWaterSurface);
sunlightAbsorbtion = exp(-totEpsilon * (distanceFromWaterSurface/abs(WsunVec.y)));
} else {
// use hardcoded gradient position if the water surface normal does not face upwards.
vec3 waterNormal = clamp(normalize(cross(dFdx(playerPos0), dFdy(playerPos0))),0,1); // it uses depth that has POM written to it.
percievedWaterDepth = mix(-(feetPlayerPos.y + cameraPosition.y), percievedWaterDepth, waterNormal.y);
}
DEBUG = vec3(estimatedDepth);
DirectLightColor *= sunlightAbsorbtion;
if( nightVision > 0.0 ) Absorbtion += exp(-totEpsilon * 25.0) * nightVision;
// apply caustics to the lighting, and make sure they dont look weird
DirectLightColor *= pow(mix(1.0, waterCaustics(feetPlayerPos + cameraPosition, WsunVec)*WATER_CAUSTICS_BRIGHTNESS, clamp(estimatedDepth,0,1)), WATER_CAUSTICS_POWER);
}
vec3 pos = feetPlayerPos + cameraPosition;
vec2 causticPos = pos.xz;
causticPos = mix(causticPos, pos.xz, max(FlatNormals.y,0));
// causticPos = mix(causticPos, pos.xy, max(-FlatNormals.y,0));
causticPos = mix(causticPos, pos.zy, max(FlatNormals.x,0));
causticPos = mix(causticPos, pos.xy, max(-FlatNormals.z,0));
// causticPos = mix(causticPos, pos.xy, max(FlatNormals.x,0));
// causticPos = mix(causticPos, pos.xy, max(-FlatNormals.x,0));
DirectLightColor *= pow(mix(1.0, waterCaustics(feetPlayerPos + cameraPosition, WsunVec, percievedWaterDepth)*WATER_CAUSTICS_BRIGHTNESS, clamp(estimatedDepth,0,1)), WATER_CAUSTICS_POWER);
}
// albedo *= waterCaustics(feetPlayerPos + cameraPosition, WsunVec);
if (swappedDepth < 1.0) {
// idk why this do
@@ -1064,12 +1038,8 @@ void main() {
////////////////////////////////////////////////////////////////////////////////////
#ifdef OVERWORLD_SHADER
float LM_shadowMapFallback = clamp(lightmap.y, 0.0,1.0);
float LightningPhase = 0.0;
vec3 LightningFlashLighting = Iris_Lightningflash(feetPlayerPos, lightningBoltPosition.xyz, slopednormal, LightningPhase) * pow(lightmap.y,10);
NdotL = clamp((-15 + dot(slopednormal, WsunVec)*255.0) / 240.0 ,0.0,1.0);
// NdotL = 1;
@@ -1122,7 +1092,6 @@ void main() {
//////////////////////////////// SUN SSS ////////////////////////////////
#if SSS_TYPE != 0
float sunSSS_density = LabSSS;
float SSS_shadow = ShadowAlpha;
@@ -1135,7 +1104,7 @@ void main() {
#endif
#ifdef SCREENSPACE_CONTACT_SHADOWS
vec2 SS_directLight = SSRT_Shadows(toScreenSpace_DH(texcoord/RENDER_SCALE, z, DH_depth1), isDHrange, normalize(WsunVec*mat3(gbufferModelViewInverse)), interleaved_gradientNoise_temporal(), sunSSS_density > 0.0 && shadowMapFalloff2 < 1.0, hand);
vec2 SS_directLight = SSRT_Shadows(toScreenSpace_DH(texcoord/RENDER_SCALE, z, DH_depth1), isDHrange, normalize(WsunVec*mat3(gbufferModelViewInverse)), ig_noise, sunSSS_density > 0.0 && shadowMapFalloff2 < 1.0, hand);
// combine shadowmap with screenspace shadows.
shadowColor *= SS_directLight.r;
#else
@@ -1149,16 +1118,17 @@ void main() {
#else
SSSColor = DirectLightColor;
#endif
SSSColor = SubsurfaceScattering_sun(albedo, ShadowBlockerDepth, sunSSS_density, clamp(dot(feetPlayerPos_normalized, WsunVec),0.0,1.0), SS_directLight.g, shadowMapFalloff2, hand);
if(isEyeInWater != 1) SSSColor *= lightLeakFix;
float cloudShadows = GetCloudShadow(feetPlayerPos.xyz + cameraPosition, WsunVec);
shadowColor *= cloudShadows;
SSSColor *= cloudShadow*cloudShadows;
#endif
float cloudShadows = GetCloudShadow(feetPlayerPos.xyz + cameraPosition, WsunVec);
shadowColor *= cloudShadows;
SSSColor *= cloudShadow*cloudShadows;
#endif
#ifdef END_SHADER
@@ -1200,7 +1170,7 @@ void main() {
if(isGrass) SkylightDir = 1.0;
SkylightDir = clamp(SkylightDir*0.7+0.3, 0.0, pow(1-pow(1-SSAO_SSS.x, 0.5),4.0) * 0.7 + 0.3);
skylight = mix(0.2 + 2.3*(1.0-lightmap.y), 2.5, SkylightDir)/2.5;
skylight = mix(0.08 + 0.92*(1.0-lightmap.y), 1.0, SkylightDir);
// skylight = 1.0;
#endif
@@ -1257,12 +1227,16 @@ void main() {
Indirect_lighting += blockLightColor;
vec4 flashLightSpecularData = vec4(0.0);
#ifdef FLASHLIGHT
// vec3 newViewPos = viewPos;
// float flashlightshadows = SSRT_FlashLight_Shadows(toScreenSpace_DH(texcoord/RENDER_SCALE, z, DH_depth1), isDHrange, newViewPos, interleaved_gradientNoise_temporal());
Indirect_lighting += calculateFlashlight(texcoord, viewPos, albedoSmooth, slopednormal, flashLightSpecularData, hand);
#endif
#if defined LIGHTNING_FLASH
Indirect_lighting += createLightningPointLight(feetPlayerPos, lightningBoltPosition.xyz, slopednormal) * lightmap.y*lightmap.y*lightmap.y*lightmap.y;
#endif
/////////////////////////////////////////////////////////////////////////////////////
///////////////////////////// EFFECTS FOR INDIRECT /////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
@@ -1305,7 +1279,6 @@ void main() {
#endif
////////////////////////////////////////////////////////////////////////////////
///////////////////////// SUB SURFACE SCATTERING ////////////////////////////
////////////////////////////////////////////////////////////////////////////////
@@ -1313,7 +1286,6 @@ void main() {
///////////////////////////// SKY SSS /////////////////////////////
#if defined Ambient_SSS && defined OVERWORLD_SHADER && (indirect_effect == SSAO_FILTERED || indirect_effect == SSAO_HQ)
vec3 ambientColor = AmbientLightColor * ambientsss_brightness * ambient_brightness * 2.0;
Indirect_SSS = SubsurfaceScattering_sky(albedo, SkySSS, LabSSS);
Indirect_SSS *= lightmap.y;
@@ -1343,10 +1315,8 @@ void main() {
#endif
#ifdef OVERWORLD_SHADER
#ifdef AO_in_sunlight
// Direct_lighting = shadowColor*NdotL*(AO*0.7+0.3) + SSSColor * (1.0-NdotL);
Direct_lighting = DirectLightColor * mix(SSSColor, vec3(1.0), NdotL*shadowColor * (AO*0.7+0.3));
#else
// Direct_lighting = shadowColor*NdotL + SSSColor * (1.0-NdotL);
Direct_lighting = DirectLightColor * mix(SSSColor, vec3(1.0), NdotL*shadowColor);
#endif
#endif
@@ -1362,10 +1332,9 @@ void main() {
if(lightningBolt) FINAL_COLOR = vec3(77.0, 153.0, 255.0);
#if defined DEFERRED_SPECULAR
vec3 specularNoises = vec3(BN.xy, blueNoise());
vec3 specularNoises = vec3(vec2(blueNoise(), ig_noise), ig_noise);
vec3 specularNormal = normal;
if (dot(normal, (feetPlayerPos_normalized)) > 0.0) specularNormal = FlatNormals;
FINAL_COLOR = specularReflections(viewPos, feetPlayerPos_normalized, WsunVec, specularNoises, specularNormal, SpecularTex.r, SpecularTex.g, albedo, FINAL_COLOR, DirectLightColor*shadowColor, lightmap.y, hand, flashLightSpecularData);
#endif
@@ -1401,7 +1370,6 @@ void main() {
vec3 moonLightCol = moonCol / 2400.0;
Background += drawMoon(feetPlayerPos_normalized, WmoonVec, moonLightCol, Background);
// Background += drawSun(dot(WmoonVec, feetPlayerPos_normalized),0, moonLightCol,vec3(0.0));
#endif
Background *= atmosphereGround;
@@ -1428,21 +1396,21 @@ void main() {
}
if(translucentMasks > 0.0 ){
if(translucentMasks > 0.0){
// water absorbtion will impact ALL light coming up from terrain underwater.
gl_FragData[0].rgb *= Absorbtion;
#ifdef DISTANT_HORIZONS
float DH_mixedLinearZ = sqrt(texelFetch2D(colortex12,ivec2(gl_FragCoord.xy),0).a/65000.0);
vec4 vlBehingTranslucents = BilateralUpscale_VLFOG(colortex13, colortex12, DH_mixedLinearZ);
#else
vec4 vlBehingTranslucents = BilateralUpscale_VLFOG(colortex13, depthtex1, ld(z));
#endif
// #ifdef DISTANT_HORIZONS
// float DH_mixedLinearZ = sqrt(texelFetch2D(colortex12,ivec2(gl_FragCoord.xy),0).a/65000.0);
// vec4 vlBehingTranslucents = BilateralUpscale_VLFOG(colortex13, colortex12, DH_mixedLinearZ);
// #else
// vec4 vlBehingTranslucents = BilateralUpscale_VLFOG(colortex13, depthtex1, ld(z));
// #endif
gl_FragData[0].rgb = gl_FragData[0].rgb * vlBehingTranslucents.a + vlBehingTranslucents.rgb;
// gl_FragData[0].rgb = gl_FragData[0].rgb * vlBehingTranslucents.a + vlBehingTranslucents.rgb;
}
// gl_FragData[0].rgb = lightmap.x* vec3(1.0);
// gl_FragData[0].rgb = (sqrt(texelFetch2D(colortex4,ivec2(gl_FragCoord.xy/4.0),0).a/65000.0)) * vec3(1.0);
////// DEBUG VIEW STUFF
#if DEBUG_VIEW == debug_SHADOWMAP
@@ -1476,11 +1444,17 @@ void main() {
value = 1-pow(1-value,5);
if(hideGUI == 1) value = pow(SSAO_SSS.x,6);
// value = filteredShadow.x;
// value = exp(-10*sqrt(filteredShadow.y));
// value = 1.0-filteredShadow.z;
gl_FragData[0].rgb = vec3(value);
if(swappedDepth >= 1.0) gl_FragData[0].rgb = vec3(1.0);
// }
#endif
// gl_FragData[0].rgb = DEBUG;
/* RENDERTARGETS:3 */
}
+3 -4
View File
@@ -15,8 +15,6 @@ flat varying vec4 lightCol;
flat varying vec3 moonCol;
flat varying vec3 albedoSmooth;
flat varying float exposure;
flat varying vec2 TAA_Offset;
flat varying vec3 zMults;
uniform sampler2D colortex4;
@@ -71,8 +69,9 @@ void main() {
WsunVec = mix(WmoonVec, unsigned_WsunVec, clamp(lightCol.a,0,1));
readSceneControllerParameters(colortex4, parameters.smallCumulus, parameters.largeCumulus, parameters.altostratus, parameters.fog);
#define READ_SCENE_CONTROLLER_PARAMETERS
#include "/lib/scene_controller.glsl"
// readSceneControllerParameters(colortex4, parameters.smallCumulus, parameters.largeCumulus, parameters.altostratus, parameters.fog);
#if TAA_MODE > 0
TAA_Offset = offsets[framemod8];
+279 -33
View File
@@ -1,11 +1,100 @@
#include "/lib/settings.glsl"
uniform sampler2D colortex3;
uniform sampler2D colortex6;
#include "/lib/res_params.glsl"
flat varying vec4 exposure;
flat varying vec2 rodExposureDepth;
varying vec2 texcoord;
#if DOF_QUALITY > -1
const bool colortex5MipmapEnabled = true;
#endif
// uniform sampler2D colortex4;
uniform sampler2D colortex5;
uniform sampler2D colortex3;
// uniform sampler2D colortex6;
uniform sampler2D colortex7;
// uniform sampler2D colortex8; // specular
uniform sampler2D colortex9; // specular
uniform sampler2D depthtex0;
uniform sampler2D depthtex1;
uniform sampler2D noisetex;
uniform vec2 texelSize;
uniform ivec2 eyeBrightnessSmooth;
uniform float viewWidth;
uniform float viewHeight;
uniform float frameTimeCounter;
uniform int frameCounter;
uniform int isEyeInWater;
uniform float near;
uniform float aspectRatio;
uniform float far;
uniform float rainStrength;
uniform float screenBrightness;
uniform vec4 Moon_Weather_properties; // R = cloud coverage G = fog density
uniform int hideGUI;
uniform int framemod8;
#include "/lib/TAA_jitter.glsl"
uniform mat4 gbufferModelViewInverse;
uniform mat4 gbufferProjectionInverse;
vec4 Weather_properties = Moon_Weather_properties;
#include "/lib/color_transforms.glsl"
#include "/lib/color_dither.glsl"
// #include "/lib/biome_specifics.glsl"
#include "/lib/bokeh.glsl"
float cdist(vec2 coord) {
return max(abs(coord.s-0.5),abs(coord.t-0.5))*2.0;
}
float blueNoise(){
return fract(texelFetch2D(noisetex, ivec2(gl_FragCoord.xy)%512, 0).a + 1.0/1.6180339887 * frameCounter);
}
float ld(float depth) {
return (2.0 * near) / (far + near - depth * (far - near)); // (-depth * (far - near)) = (2.0 * near)/ld - far - near
}
// uniform float viewWidth;
// uniform float viewHeight;
// uniform sampler2D depthtex0;
#ifdef DISTANT_HORIZONS
uniform sampler2D dhDepthTex;
#endif
uniform float dhNearPlane;
uniform float dhFarPlane;
float linearizeDepthFast(const in float depth, const in float near, const in float far) {
return (near * far) / (depth * (near - far) + far);
}
float bloomWeight(){
float weights[7] = float[]( 1.0, 1.0/2.0, 1.0/3.0, 1.0/5.5, 1.0/8.0, 1.0/10.0, 1.0/12.0 );
// float weights[7] = float[]( 0.7, pow(0.5,2), pow(0.5,3), pow(0.5,4), pow(0.5,5), pow(0.5,6), pow(0.5,7) );
float result = 0.0;
for ( int i = 0; i < 7; i++) {
result += weights[i];
}
return result;
}
vec3 invTonemap(vec3 col){
return col/(1-luma(col));
}
#define linear_to_srgb(x) (pow(x, vec3(1.0/2.2)))
uniform sampler2D colortex6;
float w0(float a)
{
@@ -72,42 +161,199 @@ vec4 texture2D_bicubic(sampler2D tex, vec2 uv)
g1x * texture2D(tex, p3));
}
//////////////////////////////VOID MAIN//////////////////////////////
//////////////////////////////VOID MAIN//////////////////////////////
//////////////////////////////VOID MAIN//////////////////////////////
//////////////////////////////VOID MAIN//////////////////////////////
//////////////////////////////VOID MAIN//////////////////////////////
// vec3 lenseFlare(vec2 UV){
// float noise = blueNoise();
// float vignetteLength = 0.2;
// float vignette = 0.5+length(texcoord-0.5);//min(max(length(texcoord-0.5) - vignetteLength,0.0) / (1.0/(1.0-vignetteLength)),1.0);
// float aberrationStrength = vignette;//clamp(CHROMATIC_ABERRATION_STRENGTH * 0.01 * (1.0 - vignette),0.0,0.9) * vignette * 0.75;
// vec2 centeredUV = texcoord - 0.5;
// vec3 color = vec3(0.0);
// color = texture2D(colortex7, texcoord).rgb;
// vec2 distortedUV = (centeredUV - (centeredUV ) * aberrationStrength) + 0.5;
// color += texture2D(colortex7, distortedUV).rgb;
// // color.r = texture2D(colortex7, (centeredUV - (centeredUV + centeredUV*noise) * aberrationStrength) + 0.5).r;
// // color.g = texture2D(colortex7, texcoord).g;
// // color.b = texture2D(colortex7, (centeredUV + (centeredUV + centeredUV*noise) * aberrationStrength) + 0.5).b;
// return color;
// }
vec3 srgbToLinear(vec3 srgb){
return mix(
srgb / 12.92,
pow(.947867 * srgb + .0521327, vec3(2.4) ),
step( .04045, srgb )
);
}
vec3 blackbody(float Temp)
{
float t = pow(Temp, -1.5);
float lt = log(Temp);
vec3 WB_temp = vec3(0.0);
WB_temp.r = 220000.0 * t + 0.58039215686;
WB_temp.g = 0.39231372549 * lt - 2.44549019608;
WB_temp.g = Temp > 6500. ? 138039.215686 * t + 0.72156862745 : WB_temp.g;
WB_temp.b = 0.76078431372 * lt - 5.68078431373;
WB_temp = clamp(WB_temp,0,1);
WB_temp = Temp < 1000. ? WB_temp * Temp * 0.001 : WB_temp;
return srgbToLinear(WB_temp);
}
void main() {
/* DRAWBUFFERS:3 */
vec2 resScale = vec2(1920.,1080.)/max(vec2(viewWidth,viewHeight),vec2(1920.0,1080.));
vec2 texcoord = ((gl_FragCoord.xy)*2.0 + 0.5)*texelSize;
/* DRAWBUFFERS:7 */
float vignette = (1.5-dot(texcoord-0.5,texcoord-0.5)*2.);
#if DOF_QUALITY == -1 || DOF_QUALITY == 5
vec3 col = texture2D(colortex5,texcoord).rgb;
#endif
#ifdef OLD_BLOOM
vec3 bloom = texture2D_bicubic(colortex3,texcoord/2.).rgb; //1/4 res
bloom += texture2D_bicubic(colortex6,texcoord/4.).rgb; //1/8 res
bloom += texture2D_bicubic(colortex6,texcoord/8.+vec2(0.25*resScale.x+2.5*texelSize.x,.0)).rgb; //1/16 res
bloom += texture2D_bicubic(colortex6,texcoord/16.+vec2(0.375*resScale.x+4.5*texelSize.x,.0)).rgb; //1/32 res
bloom += texture2D_bicubic(colortex6,texcoord/32.+vec2(0.4375*resScale.x+6.5*texelSize.x,.0)).rgb; //1/64 res
bloom += texture2D_bicubic(colortex6,texcoord/64.+vec2(0.46875*resScale.x+8.5*texelSize.x,.0)).rgb; //1/128 res
bloom += texture2D_bicubic(colortex6,texcoord/128.+vec2(0.484375*resScale.x+10.5*texelSize.x,.0)).rgb; //1/256 res
#if DOF_QUALITY >= 0
/*--------------------------------*/
float z = ld(texture2D(depthtex1, texcoord.st*RENDER_SCALE).r)*far;
gl_FragData[0].rgb = bloom * 2.0;
#else
#if MANUAL_FOCUS == -2
float focus = rodExposureDepth.y*far;
#elif MANUAL_FOCUS == -1
float focus = mix(pow(512.0, screenBrightness), 512.0 * screenBrightness, 0.25);
#elif MANUAL_FOCUS > 0
float focus = MANUAL_FOCUS;
#endif
float weights[7] = float[]( 1.0, 1.0/2.0, 1.0/3.0, 1.0/5.5, 1.0/8.0, 1.0/10.0, 1.0/12.0 );
// float weights[7] = float[]( 0.7, pow(0.5,2), pow(0.5,3), pow(0.5,4), pow(0.5,5), pow(0.5,6), pow(0.5,7) );
#if DOF_QUALITY < 5
float pcoc = min(abs(aperture * (focal/100.0 * (z - focus)) / (z * (focus - focal/100.0))),texelSize.x*15.0);
#ifdef FAR_BLUR_ONLY
pcoc *= float(z > focus);
#endif
#ifdef REMOVE_HAND_BLUR
pcoc *= float(z > 0.56);
#endif
vec3 bloom = texture2D_bicubic(colortex3,texcoord/2.).rgb * weights[0]; //1/4 res
bloom += texture2D_bicubic(colortex6,texcoord/4.).rgb * weights[1]; //1/8 res
bloom += texture2D_bicubic(colortex6,texcoord/8.+vec2(0.25*resScale.x+2.5*texelSize.x,.0)).rgb * weights[2]; //1/16 res
bloom += texture2D_bicubic(colortex6,texcoord/16.+vec2(0.375*resScale.x+4.5*texelSize.x,.0)).rgb * weights[3]; //1/32 res
bloom += texture2D_bicubic(colortex6,texcoord/32.+vec2(0.4375*resScale.x+6.5*texelSize.x,.0)).rgb * weights[4]; //1/64 res
bloom += texture2D_bicubic(colortex6,texcoord/64.+vec2(0.46875*resScale.x+8.5*texelSize.x,.0)).rgb * weights[5]; //1/128 res
bloom += texture2D_bicubic(colortex6,texcoord/128.+vec2(0.484375*resScale.x+10.5*texelSize.x,.0)).rgb * weights[6]; //1/256 res
vec3 bcolor = vec3(0.);
float nb = 0.0;
vec2 bcoord = vec2(0.0);
/*--------------------------------*/
float dofLodLevel = pcoc * 200.0;
gl_FragData[0].rgb = bloom * 2.0;
#endif
vec2 dispersion = (texcoord - 0.5) * pcoc * 200.0 * DOF_DISPERSION_MULT;
gl_FragData[0].rgb = clamp(gl_FragData[0].rgb,0.0,65000.);
}
for ( int i = 0; i < BOKEH_SAMPLES; i++) {
// bcolor += texture2DLod(colortex5, texcoord.xy + bokeh_offsets[i]*pcoc*vec2(DOF_ANAMORPHIC_RATIO,aspectRatio), dofLodLevel).rgb;
vec2 bokeh_pos = bokeh_offsets[i];
bcolor.r += texture2DLod(colortex5, texcoord.xy + (bokeh_pos + dispersion)*pcoc*vec2(DOF_ANAMORPHIC_RATIO,aspectRatio), dofLodLevel).r;
bcolor.g += texture2DLod(colortex5, texcoord.xy + bokeh_pos*pcoc*vec2(DOF_ANAMORPHIC_RATIO,aspectRatio), dofLodLevel).g;
bcolor.b += texture2DLod(colortex5, texcoord.xy + (bokeh_pos - dispersion)*pcoc*vec2(DOF_ANAMORPHIC_RATIO,aspectRatio), dofLodLevel).b;
}
vec3 col = bcolor/BOKEH_SAMPLES;
#endif
#endif
vec2 clampedRes = max(vec2(viewWidth,viewHeight),vec2(1920.0,1080.));
vec2 resScale = vec2(1920.,1080.)/clampedRes;
vec2 bloomTileUV = (((gl_FragCoord.xy)*2.0 + 0.5)*texelSize/2.0) / clampedRes*vec2(1920.,1080.);
vec3 bloomTile0 = texture2D_bicubic(colortex3, bloomTileUV/2.).rgb; //1/4 res
vec3 bloomTile1 = texture2D_bicubic(colortex6, bloomTileUV/4.).rgb; //1/8 res
vec3 bloomTile2 = texture2D_bicubic(colortex6, bloomTileUV/8.+vec2(0.25*resScale.x+2.5*texelSize.x,.0)).rgb; //1/16 res
vec3 bloomTile3 = texture2D_bicubic(colortex6, bloomTileUV/16.+vec2(0.375*resScale.x+4.5*texelSize.x,.0)).rgb; //1/32 res
vec3 bloomTile4 = texture2D_bicubic(colortex6, bloomTileUV/32.+vec2(0.4375*resScale.x+6.5*texelSize.x,.0)).rgb; //1/64 res
vec3 bloomTile5 = texture2D_bicubic(colortex6, bloomTileUV/64.+vec2(0.46875*resScale.x+8.5*texelSize.x,.0)).rgb; //1/128 res
vec3 bloomTile6 = texture2D_bicubic(colortex6, bloomTileUV/128.+vec2(0.484375*resScale.x+10.5*texelSize.x,.0)).rgb; //1/256 res
#ifdef OLD_BLOOM
vec3 bloom = (bloomTile0 + bloomTile1 + bloomTile2 + bloomTile3 + bloomTile4 + bloomTile5 + bloomTile6) / 7.0;
vec3 fogBloom = bloom;
float lightScat = clamp((BLOOM_STRENGTH+3) * 0.05 * pow(exposure.a, 0.2) ,0.0,1.0) * vignette;
#else
float weights[7] = float[]( 1.0, 1.0/2.0, 1.0/3.0, 1.0/5.5, 1.0/8.0, 1.0/10.0, 1.0/12.0 );
vec3 bloom = (bloomTile0*weights[0] + bloomTile1*weights[1] + bloomTile2*weights[2] + bloomTile3*weights[3] + bloomTile4*weights[4] + bloomTile5*weights[5] + bloomTile6*weights[6]) / bloomWeight();
vec3 fogBloom = (bloomTile0 + bloomTile1 + bloomTile2 + bloomTile3 + bloomTile4 + bloomTile5 + bloomTile6) / 7.0;
float lightScat = clamp(BLOOM_STRENGTH * 0.3,0.0,1.0) * vignette;
#endif
float VL_abs = texture2D(colortex7, texcoord*RENDER_SCALE).r;
#if Purkinje_strength > 0
float pstrength = float(Purkinje_strength) / 100.0;
#ifdef AUTO_EXPOSURE
float purkinje = clamp(exposure.a*exposure.a,0.0,1.0) * clamp(rodExposureDepth.x/(1.0+rodExposureDepth.x)*pstrength,0,1);
#else
float purkinje = clamp(rodExposureDepth.x/(1.0+rodExposureDepth.x)*pstrength,0,1);
#endif
VL_abs = clamp((1.0-VL_abs)*BLOOMY_FOG,0.0,1.0)*clamp(1.0-pow(cdist(texcoord.xy),15.0),0.0,1.0);
col = (mix(col, fogBloom, VL_abs) + bloom*lightScat) * exposure.rgb;
float lum = dot(col, vec3(0.15,0.3,0.55));
float lum2 = dot(col, vec3(0.85,0.7,0.45));
float rodLum = lum2*200.0;
float rodCurve = clamp(mix(1.0, rodLum/(2.5+rodLum), purkinje),0.0,1.0);
col = mix(lum * vec3(Purkinje_R, Purkinje_G, Purkinje_B) * Purkinje_Multiplier, col, rodCurve);
#else
VL_abs = clamp((1.0-VL_abs)*BLOOMY_FOG*0.75*(1.0+rainStrength),0.0,1.0)*clamp(1.0-pow(cdist(texcoord.xy),15.0),0.0,1.0);
col = (mix(col, fogBloom, VL_abs) + bloom*lightScat) * exposure.rgb;
#endif
#if WHITE_BALANCE != 6500
col *= blackbody(WHITE_BALANCE);
#endif
#ifndef USE_ACES_COLORSPACE_APPROXIMATION
col = LinearTosRGB(TONEMAP(col));
#else
col = col * ACESInputMat;
col = TONEMAP(col);
col = LinearTosRGB(clamp(col * ACESOutputMat, 0.0, 1.0));
#endif
gl_FragData[0].rgb = clamp(int8Dither(col,texcoord),0.0,1.0);
#if DOF_QUALITY == 5
#if FOCUS_LASER_COLOR == 0 // Red
vec3 laserColor = vec3(25, 0, 0);
#elif FOCUS_LASER_COLOR == 1 // Green
vec3 laserColor = vec3(0, 25, 0);
#elif FOCUS_LASER_COLOR == 2 // Blue
vec3 laserColor = vec3(0, 0, 25);
#elif FOCUS_LASER_COLOR == 3 // Pink
vec3 laserColor = vec3(25, 10, 15);
#elif FOCUS_LASER_COLOR == 4 // Yellow
vec3 laserColor = vec3(25, 25, 0);
#elif FOCUS_LASER_COLOR == 5 // White
vec3 laserColor = vec3(25);
#endif
float depth = texture(depthtex0, texcoord).r;
#ifdef DISTANT_HORIZONS
float _near = near;
float _far = far*4.0;
if (depth >= 1.0) {
depth = texture2D(dhDepthTex, texcoord).x;
_near = dhNearPlane;
_far = dhFarPlane;
}
depth = linearizeDepthFast(depth, _near, _far);
#else
depth = linearizeDepthFast(depth, near, far);
#endif
// focus = gl_FragCoord.x * 0.1;
if( hideGUI < 1) gl_FragData[0].rgb += laserColor * pow( clamp( 1.0-abs(focus-abs(depth)) ,0,1),25) ;
#endif
}
+16 -7
View File
@@ -1,5 +1,12 @@
uniform float viewWidth;
uniform float viewHeight;
#include "/lib/settings.glsl"
varying vec2 texcoord;
uniform sampler2D colortex4;
flat varying vec4 exposure;
flat varying vec2 rodExposureDepth;
//////////////////////////////VOID MAIN//////////////////////////////
//////////////////////////////VOID MAIN//////////////////////////////
//////////////////////////////VOID MAIN//////////////////////////////
@@ -7,9 +14,11 @@ uniform float viewHeight;
//////////////////////////////VOID MAIN//////////////////////////////
void main() {
//Improves performances and makes sure bloom radius stays the same at high resolution (>1080p)
vec2 clampedRes = max(vec2(viewWidth,viewHeight),vec2(1920.0,1080.));
gl_Position = ftransform();
//*0.51 to avoid errors when sampling outside since clearing is disabled
gl_Position.xy = (gl_Position.xy*0.5+0.5)*0.51/clampedRes*vec2(1920.0,1080.)*2.0-1.0;
}
texcoord = gl_MultiTexCoord0.xy;
exposure = vec4(vec3(texelFetch2D(colortex4,ivec2(10,37),0).r),texelFetch2D(colortex4,ivec2(10,37),0).r);
rodExposureDepth = texelFetch2D(colortex4,ivec2(14,37),0).rg;
rodExposureDepth.y = sqrt(rodExposureDepth.y/65000.0);
}
+160 -324
View File
@@ -1,353 +1,189 @@
#include "/lib/settings.glsl"
#include "/lib/res_params.glsl"
flat varying vec4 exposure;
flat varying vec2 rodExposureDepth;
varying vec2 texcoord;
const bool colortex5MipmapEnabled = true;
// uniform sampler2D colortex4;
uniform sampler2D colortex5;
uniform sampler2D colortex3;
// uniform sampler2D colortex6;
uniform sampler2D colortex7;
// uniform sampler2D colortex8; // specular
uniform sampler2D colortex9; // specular
uniform sampler2D depthtex0;
uniform sampler2D depthtex1;
uniform sampler2D noisetex;
uniform vec2 texelSize;
uniform ivec2 eyeBrightnessSmooth;
uniform float viewWidth;
uniform sampler2D colortex7;
uniform sampler2D colortex14;
uniform sampler2D depthtex0;
uniform sampler2D noisetex;
uniform float viewHeight;
uniform float viewWidth;
uniform float aspectRatio;
uniform float frameTimeCounter;
uniform int frameCounter;
uniform int isEyeInWater;
uniform float near;
uniform float aspectRatio;
uniform float far;
uniform float rainStrength;
uniform float screenBrightness;
uniform vec4 Moon_Weather_properties; // R = cloud coverage G = fog density
uniform int hideGUI;
uniform int framemod8;
#include "/lib/TAA_jitter.glsl"
uniform mat4 gbufferModelViewInverse;
uniform mat4 gbufferProjectionInverse;
vec4 Weather_properties = Moon_Weather_properties;
#include "/lib/color_transforms.glsl"
#include "/lib/color_dither.glsl"
// #include "/lib/biome_specifics.glsl"
#include "/lib/bokeh.glsl"
#include "/lib/res_params.glsl"
float cdist(vec2 coord) {
return max(abs(coord.s-0.5),abs(coord.t-0.5))*2.0;
/*
vec4 SampleTextureCatmullRom(sampler2D tex, vec2 uv, vec2 texSize )
{
// We're going to sample a a 4x4 grid of texels surrounding the target UV coordinate. We'll do this by rounding
// down the sample location to get the exact center of our "starting" texel. The starting texel will be at
// location [1, 1] in the grid, where [0, 0] is the top left corner.
vec2 samplePos = uv * texSize;
vec2 texPos1 = floor(samplePos - 0.5) + 0.5;
// Compute the fractional offset from our starting texel to our original sample location, which we'll
// feed into the Catmull-Rom spline function to get our filter weights.
vec2 f = samplePos - texPos1;
// Compute the Catmull-Rom weights using the fractional offset that we calculated earlier.
// These equations are pre-expanded based on our knowledge of where the texels will be located,
// which lets us avoid having to evaluate a piece-wise function.
vec2 w0 = f * ( -0.5 + f * (1.0 - 0.5*f));
vec2 w1 = 1.0 + f * f * (-2.5 + 1.5*f);
vec2 w2 = f * ( 0.5 + f * (2.0 - 1.5*f) );
vec2 w3 = f * f * (-0.5 + 0.5 * f);
// Work out weighting factors and sampling offsets that will let us use bilinear filtering to
// simultaneously evaluate the middle 2 samples from the 4x4 grid.
vec2 w12 = w1 + w2;
vec2 offset12 = w2 / (w1 + w2);
// Compute the final UV coordinates we'll use for sampling the texture
vec2 texPos0 = texPos1 - vec2(1.0);
vec2 texPos3 = texPos1 + vec2(2.0);
vec2 texPos12 = texPos1 + offset12;
texPos0 *= texelSize;
texPos3 *= texelSize;
texPos12 *= texelSize;
vec4 result = vec4(0.0);
result += texture2D(tex, vec2(texPos0.x, texPos0.y)) * w0.x * w0.y;
result += texture2D(tex, vec2(texPos12.x, texPos0.y)) * w12.x * w0.y;
result += texture2D(tex, vec2(texPos3.x, texPos0.y)) * w3.x * w0.y;
result += texture2D(tex, vec2(texPos0.x, texPos12.y)) * w0.x * w12.y;
result += texture2D(tex, vec2(texPos12.x, texPos12.y)) * w12.x * w12.y;
result += texture2D(tex, vec2(texPos3.x, texPos12.y)) * w3.x * w12.y;
result += texture2D(tex, vec2(texPos0.x, texPos3.y)) * w0.x * w3.y;
result += texture2D(tex, vec2(texPos12.x, texPos3.y)) * w12.x * w3.y;
result += texture2D(tex, vec2(texPos3.x, texPos3.y)) * w3.x * w3.y;
return result;
}
*/
float lowerCurve(float x) {
float y = 16 * x * (0.5 - x) * 0.1;
return clamp(y, 0.0, 1.0);
}
float upperCurve(float x) {
float y = 16 * (0.5 - x) * (x - 1.0) * 0.1;
return clamp(y, 0.0, 1.0);
}
vec3 luminanceCurve(vec3 color){
color.r += LOWER_CURVE * lowerCurve(color.r) + UPPER_CURVE * upperCurve(color.r);
color.g += LOWER_CURVE * lowerCurve(color.g) + UPPER_CURVE * upperCurve(color.g);
color.b += LOWER_CURVE * lowerCurve(color.b) + UPPER_CURVE * upperCurve(color.b);
return color;
}
vec3 colorGrading(vec3 color) {
float grade_luma = dot(color, vec3(1.0 / 3.0));
float shadows_amount = saturate(-6.0 * grade_luma + 2.75);
float mids_amount = saturate(-abs(6.0 * grade_luma - 3.0) + 1.25);
float highlights_amount = saturate(6.0 * grade_luma - 3.25);
vec3 graded_shadows = color * SHADOWS_TARGET * SHADOWS_GRADE_MUL * 1.7320508076;
vec3 graded_mids = color * MIDS_TARGET * MIDS_GRADE_MUL * 1.7320508076;
vec3 graded_highlights = color * HIGHLIGHTS_TARGET * HIGHLIGHTS_GRADE_MUL * 1.7320508076;
return saturate(graded_shadows * shadows_amount + graded_mids * mids_amount + graded_highlights * highlights_amount);
}
vec3 contrastAdaptiveSharpening(vec3 color, vec2 texcoord){
float sharpen_strength = float(SHARPENING)/100.0;
//Weights : 1 in the center, 0.5 middle, 0.25 corners
vec3 albedoCurrent1 = texture2D(colortex7, texcoord + vec2(texelSize.x,texelSize.y)/MC_RENDER_QUALITY*0.5).rgb;
vec3 albedoCurrent2 = texture2D(colortex7, texcoord + vec2(texelSize.x,-texelSize.y)/MC_RENDER_QUALITY*0.5).rgb;
vec3 albedoCurrent3 = texture2D(colortex7, texcoord + vec2(-texelSize.x,-texelSize.y)/MC_RENDER_QUALITY*0.5).rgb;
vec3 albedoCurrent4 = texture2D(colortex7, texcoord + vec2(-texelSize.x,texelSize.y)/MC_RENDER_QUALITY*0.5).rgb;
vec3 m1 = -0.5/3.5*color + albedoCurrent1/3.5 + albedoCurrent2/3.5 + albedoCurrent3/3.5 + albedoCurrent4/3.5;
vec3 std = abs(color - m1) + abs(albedoCurrent1 - m1) + abs(albedoCurrent2 - m1) +
abs(albedoCurrent3 - m1) + abs(albedoCurrent3 - m1) + abs(albedoCurrent4 - m1);
float contrast = 1.0 - luma(std)/5.0;
color = color*(1.0+(sharpen_strength+UPSCALING_SHARPNENING)*contrast) -
(sharpen_strength+UPSCALING_SHARPNENING)/(1.0-0.5/3.5)*contrast*(m1 - 0.5/3.5*color);
return color;
}
vec3 saturationAndCrosstalk(vec3 color){
float luminance = luma(color);
vec3 lumaColDiff = color - luminance;
color = color + lumaColDiff*(-luminance*CROSSTALK + SATURATION);
return color;
}
float interleaved_gradientNoise(){
vec2 coord = gl_FragCoord.xy;
float noise = fract(52.9829189*fract(0.06711056*coord.x + 0.00583715*coord.y));
return noise;
}
float blueNoise(){
return fract(texelFetch2D(noisetex, ivec2(gl_FragCoord.xy)%512, 0).a + 1.0/1.6180339887 * frameCounter);
}
float ld(float depth) {
return (2.0 * near) / (far + near - depth * (far - near)); // (-depth * (far - near)) = (2.0 * near)/ld - far - near
}
// uniform float viewWidth;
// uniform float viewHeight;
vec3 chromaticAberration(vec2 UV){
float noise = blueNoise() - 0.5;
// uniform sampler2D depthtex0;
vec2 centeredUV = (texcoord - 0.5);
// not stretched by aspect ratio; circular by choice :) it makes most the abberation on the left/right of the screen.
float vignette = 1.0 - clamp(1.0 - length(centeredUV * vec2(aspectRatio,1.0)) / 200.0,0.0,1.0);
#ifdef DISTANT_HORIZONS
uniform sampler2D dhDepthTex;
#endif
uniform float dhNearPlane;
uniform float dhFarPlane;
float aberrationStrength = CHROMATIC_ABERRATION_STRENGTH * vignette;
float linearizeDepthFast(const in float depth, const in float near, const in float far) {
return (near * far) / (depth * (near - far) + far);
}
vec3 color = vec3(0.0);
color.r = texture2D(colortex7, (centeredUV - (centeredUV + centeredUV*noise) * aberrationStrength) + 0.5).r;
color.g = texture2D(colortex7, texcoord).g;
color.b = texture2D(colortex7, (centeredUV + (centeredUV + centeredUV*noise) * aberrationStrength) + 0.5).b;
float bloomWeight(){
float weights[7] = float[]( 1.0, 1.0/2.0, 1.0/3.0, 1.0/5.5, 1.0/8.0, 1.0/10.0, 1.0/12.0 );
// float weights[7] = float[]( 0.7, pow(0.5,2), pow(0.5,3), pow(0.5,4), pow(0.5,5), pow(0.5,6), pow(0.5,7) );
float result = 0.0;
for ( int i = 0; i < 7; i++) {
result += weights[i];
}
return result;
}
vec3 invTonemap(vec3 col){
return col/(1-luma(col));
}
#define linear_to_srgb(x) (pow(x, vec3(1.0/2.2)))
uniform sampler2D colortex6;
float w0(float a)
{
return (1.0/6.0)*(a*(a*(-a + 3.0) - 3.0) + 1.0);
}
float w1(float a)
{
return (1.0/6.0)*(a*a*(3.0*a - 6.0) + 4.0);
}
float w2(float a)
{
return (1.0/6.0)*(a*(a*(-3.0*a + 3.0) + 3.0) + 1.0);
}
float w3(float a)
{
return (1.0/6.0)*(a*a*a);
}
float g0(float a)
{
return w0(a) + w1(a);
}
float g1(float a)
{
return w2(a) + w3(a);
}
float h0(float a)
{
return -1.0 + w1(a) / (w0(a) + w1(a));
}
float h1(float a)
{
return 1.0 + w3(a) / (w2(a) + w3(a));
}
vec4 texture2D_bicubic(sampler2D tex, vec2 uv)
{
vec4 texelSize = vec4(texelSize,1.0/texelSize);
uv = uv*texelSize.zw;
vec2 iuv = floor( uv );
vec2 fuv = fract( uv );
float g0x = g0(fuv.x);
float g1x = g1(fuv.x);
float h0x = h0(fuv.x);
float h1x = h1(fuv.x);
float h0y = h0(fuv.y);
float h1y = h1(fuv.y);
vec2 p0 = (vec2(iuv.x + h0x, iuv.y + h0y) - 0.5) * texelSize.xy;
vec2 p1 = (vec2(iuv.x + h1x, iuv.y + h0y) - 0.5) * texelSize.xy;
vec2 p2 = (vec2(iuv.x + h0x, iuv.y + h1y) - 0.5) * texelSize.xy;
vec2 p3 = (vec2(iuv.x + h1x, iuv.y + h1y) - 0.5) * texelSize.xy;
return g0(fuv.y) * (g0x * texture2D(tex, p0) +
g1x * texture2D(tex, p1)) +
g1(fuv.y) * (g0x * texture2D(tex, p2) +
g1x * texture2D(tex, p3));
}
// vec3 lenseFlare(vec2 UV){
// float noise = blueNoise();
// float vignetteLength = 0.2;
// float vignette = 0.5+length(texcoord-0.5);//min(max(length(texcoord-0.5) - vignetteLength,0.0) / (1.0/(1.0-vignetteLength)),1.0);
// float aberrationStrength = vignette;//clamp(CHROMATIC_ABERRATION_STRENGTH * 0.01 * (1.0 - vignette),0.0,0.9) * vignette * 0.75;
// vec2 centeredUV = texcoord - 0.5;
// vec3 color = vec3(0.0);
// color = texture2D(colortex7, texcoord).rgb;
// vec2 distortedUV = (centeredUV - (centeredUV ) * aberrationStrength) + 0.5;
// color += texture2D(colortex7, distortedUV).rgb;
// // color.r = texture2D(colortex7, (centeredUV - (centeredUV + centeredUV*noise) * aberrationStrength) + 0.5).r;
// // color.g = texture2D(colortex7, texcoord).g;
// // color.b = texture2D(colortex7, (centeredUV + (centeredUV + centeredUV*noise) * aberrationStrength) + 0.5).b;
// return color;
// }
vec3 srgbToLinear(vec3 srgb){
return mix(
srgb / 12.92,
pow(.947867 * srgb + .0521327, vec3(2.4) ),
step( .04045, srgb )
);
}
vec3 blackbody(float Temp)
{
float t = pow(Temp, -1.5);
float lt = log(Temp);
vec3 WB_temp = vec3(0.0);
WB_temp.r = 220000.0 * t + 0.58039215686;
WB_temp.g = 0.39231372549 * lt - 2.44549019608;
WB_temp.g = Temp > 6500. ? 138039.215686 * t + 0.72156862745 : WB_temp.g;
WB_temp.b = 0.76078431372 * lt - 5.68078431373;
WB_temp = clamp(WB_temp,0,1);
WB_temp = Temp < 1000. ? WB_temp * Temp * 0.001 : WB_temp;
return srgbToLinear(WB_temp);
return color;
}
void main() {
/* DRAWBUFFERS:7 */
float vignette = (1.5-dot(texcoord-0.5,texcoord-0.5)*2.);
vec3 col = texture2D(colortex5,texcoord).rgb;
#ifdef CHROMATIC_ABERRATION
vec3 color = chromaticAberration(texcoord);
#else
vec3 color = texture2D(colortex7,texcoord).rgb;
#endif
#if DOF_QUALITY >= 0
/*--------------------------------*/
float z = ld(texture2D(depthtex1, texcoord.st*RENDER_SCALE).r)*far;
#if MANUAL_FOCUS == -2
float focus = rodExposureDepth.y*far;
#elif MANUAL_FOCUS == -1
float focus = mix(pow(512.0, screenBrightness), 512.0 * screenBrightness, 0.25);
#elif MANUAL_FOCUS > 0
float focus = MANUAL_FOCUS;
#endif
#if DOF_QUALITY < 5
float pcoc = min(abs(aperture * (focal/100.0 * (z - focus)) / (z * (focus - focal/100.0))),texelSize.x*15.0);
#ifdef FAR_BLUR_ONLY
pcoc *= float(z > focus);
#endif
#ifdef REMOVE_HAND_BLUR
pcoc *= float(z > 0.56);
#endif
// float noise = blueNoise()*6.28318530718;
// mat2 noiseM = mat2( cos( noise ), -sin( noise ),
// sin( noise ), cos( noise )
// );
vec3 bcolor = vec3(0.);
float nb = 0.0;
vec2 bcoord = vec2(0.0);
/*--------------------------------*/
float dofLodLevel = pcoc * 200.0;
vec2 dispersion = (texcoord - 0.5) * pcoc * 200.0 * DOF_DISPERSION_MULT;
for ( int i = 0; i < BOKEH_SAMPLES; i++) {
// bcolor += texture2DLod(colortex5, texcoord.xy + bokeh_offsets[i]*pcoc*vec2(DOF_ANAMORPHIC_RATIO,aspectRatio), dofLodLevel).rgb;
bcolor.r += texture2DLod(colortex5, texcoord.xy + (bokeh_offsets[i] + dispersion)*pcoc*vec2(DOF_ANAMORPHIC_RATIO,aspectRatio), dofLodLevel).r;
bcolor.g += texture2DLod(colortex5, texcoord.xy + bokeh_offsets[i]*pcoc*vec2(DOF_ANAMORPHIC_RATIO,aspectRatio), dofLodLevel).g;
bcolor.b += texture2DLod(colortex5, texcoord.xy + (bokeh_offsets[i] - dispersion)*pcoc*vec2(DOF_ANAMORPHIC_RATIO,aspectRatio), dofLodLevel).b;
}
col = bcolor/BOKEH_SAMPLES;
#endif
#if SHARPENING > 0
color = contrastAdaptiveSharpening(color, texcoord);
#endif
color = saturationAndCrosstalk(color);
#ifdef LUMINANCE_CURVE
color = luminanceCurve(color);
#endif
vec2 clampedRes = max(vec2(viewWidth,viewHeight),vec2(1920.0,1080.));
vec2 resScale = vec2(1920.,1080.)/clampedRes;
vec2 bloomTileUV = (((gl_FragCoord.xy)*2.0 + 0.5)*texelSize/2.0) / clampedRes*vec2(1920.,1080.);
vec3 bloomTile0 = texture2D_bicubic(colortex3, bloomTileUV/2.).rgb; //1/4 res
vec3 bloomTile1 = texture2D_bicubic(colortex6, bloomTileUV/4.).rgb; //1/8 res
vec3 bloomTile2 = texture2D_bicubic(colortex6, bloomTileUV/8.+vec2(0.25*resScale.x+2.5*texelSize.x,.0)).rgb; //1/16 res
vec3 bloomTile3 = texture2D_bicubic(colortex6, bloomTileUV/16.+vec2(0.375*resScale.x+4.5*texelSize.x,.0)).rgb; //1/32 res
vec3 bloomTile4 = texture2D_bicubic(colortex6, bloomTileUV/32.+vec2(0.4375*resScale.x+6.5*texelSize.x,.0)).rgb; //1/64 res
vec3 bloomTile5 = texture2D_bicubic(colortex6, bloomTileUV/64.+vec2(0.46875*resScale.x+8.5*texelSize.x,.0)).rgb; //1/128 res
vec3 bloomTile6 = texture2D_bicubic(colortex6, bloomTileUV/128.+vec2(0.484375*resScale.x+10.5*texelSize.x,.0)).rgb; //1/256 res
#ifdef OLD_BLOOM
vec3 bloom = (bloomTile0 + bloomTile1 + bloomTile2 + bloomTile3 + bloomTile4 + bloomTile5 + bloomTile6) / 7.0;
vec3 fogBloom = bloom;
float lightScat = clamp((BLOOM_STRENGTH+3) * 0.05 * pow(exposure.a, 0.2) ,0.0,1.0) * vignette;
#else
float weights[7] = float[]( 1.0, 1.0/2.0, 1.0/3.0, 1.0/5.5, 1.0/8.0, 1.0/10.0, 1.0/12.0 );
vec3 bloom = (bloomTile0*weights[0] + bloomTile1*weights[1] + bloomTile2*weights[2] + bloomTile3*weights[3] + bloomTile4*weights[4] + bloomTile5*weights[5] + bloomTile6*weights[6]) / bloomWeight();
vec3 fogBloom = (bloomTile0 + bloomTile1 + bloomTile2 + bloomTile3 + bloomTile4 + bloomTile5 + bloomTile6) / 7.0;
float lightScat = clamp(BLOOM_STRENGTH * 0.3,0.0,1.0) * vignette;
#endif
float VL_abs = texture2D(colortex7, texcoord*RENDER_SCALE).r;
#if Purkinje_strength > 0
float pstrength = float(Purkinje_strength) / 100.0;
#ifdef AUTO_EXPOSURE
float purkinje = clamp(exposure.a*exposure.a,0.0,1.0) * clamp(rodExposureDepth.x/(1.0+rodExposureDepth.x)*pstrength,0,1);
#else
float purkinje = clamp(rodExposureDepth.x/(1.0+rodExposureDepth.x)*pstrength,0,1);
#endif
VL_abs = clamp((1.0-VL_abs)*BLOOMY_FOG*0.75*(1.0+rainStrength) * (1.0-purkinje*0.3),0.0,1.0)*clamp(1.0-pow(cdist(texcoord.xy),15.0),0.0,1.0);
col = (mix(col, fogBloom, VL_abs) + bloom*lightScat) * exposure.rgb;
float lum = dot(col, vec3(0.15,0.3,0.55));
float lum2 = dot(col, vec3(0.85,0.7,0.45));
float rodLum = lum2*200.0;
float rodCurve = clamp(mix(1.0, rodLum/(2.5+rodLum), purkinje),0.0,1.0);
col = mix(lum * vec3(Purkinje_R, Purkinje_G, Purkinje_B) * Purkinje_Multiplier, col, rodCurve);
#else
VL_abs = clamp((1.0-VL_abs)*BLOOMY_FOG*0.75*(1.0+rainStrength),0.0,1.0)*clamp(1.0-pow(cdist(texcoord.xy),15.0),0.0,1.0);
col = (mix(col, fogBloom, VL_abs) + bloom*lightScat) * exposure.rgb;
#endif
#if WHITE_BALANCE != 6500
col *= blackbody(WHITE_BALANCE);
#endif
#ifndef USE_ACES_COLORSPACE_APPROXIMATION
col = LinearTosRGB(TONEMAP(col));
#else
col = col * ACESInputMat;
col = TONEMAP(col);
col = LinearTosRGB(clamp(col * ACESOutputMat, 0.0, 1.0));
#endif
gl_FragData[0].rgb = clamp(int8Dither(col,texcoord),0.0,1.0);
#if DOF_QUALITY == 5
#if FOCUS_LASER_COLOR == 0 // Red
vec3 laserColor = vec3(25, 0, 0);
#elif FOCUS_LASER_COLOR == 1 // Green
vec3 laserColor = vec3(0, 25, 0);
#elif FOCUS_LASER_COLOR == 2 // Blue
vec3 laserColor = vec3(0, 0, 25);
#elif FOCUS_LASER_COLOR == 3 // Pink
vec3 laserColor = vec3(25, 10, 15);
#elif FOCUS_LASER_COLOR == 4 // Yellow
vec3 laserColor = vec3(25, 25, 0);
#elif FOCUS_LASER_COLOR == 5 // White
vec3 laserColor = vec3(25);
#endif
float depth = texture(depthtex0, texcoord).r;
#ifdef DISTANT_HORIZONS
float _near = near;
float _far = far*4.0;
if (depth >= 1.0) {
depth = texture2D(dhDepthTex, texcoord).x;
_near = dhNearPlane;
_far = dhFarPlane;
}
depth = linearizeDepthFast(depth, _near, _far);
#else
depth = linearizeDepthFast(depth, near, far);
#endif
// focus = gl_FragCoord.x * 0.1;
if( hideGUI < 1) gl_FragData[0].rgb += laserColor * pow( clamp( 1.0-abs(focus-abs(depth)) ,0,1),25) ;
#endif
}
#ifdef COLOR_GRADING_ENABLED
color = colorGrading(color);
#endif
gl_FragData[0].rgb = clamp(int8Dither(color, texcoord),0.0,1.0);
}
+1 -10
View File
@@ -2,10 +2,6 @@
varying vec2 texcoord;
uniform sampler2D colortex4;
flat varying vec4 exposure;
flat varying vec2 rodExposureDepth;
//////////////////////////////VOID MAIN//////////////////////////////
//////////////////////////////VOID MAIN//////////////////////////////
@@ -14,11 +10,6 @@ flat varying vec2 rodExposureDepth;
//////////////////////////////VOID MAIN//////////////////////////////
void main() {
gl_Position = ftransform();
texcoord = gl_MultiTexCoord0.xy;
exposure = vec4(vec3(texelFetch2D(colortex4,ivec2(10,37),0).r),texelFetch2D(colortex4,ivec2(10,37),0).r);
rodExposureDepth = texelFetch2D(colortex4,ivec2(14,37),0).rg;
rodExposureDepth.y = sqrt(rodExposureDepth.y/65000.0);
}
}
-189
View File
@@ -1,189 +0,0 @@
#include "/lib/settings.glsl"
varying vec2 texcoord;
uniform vec2 texelSize;
uniform sampler2D colortex7;
uniform sampler2D colortex14;
uniform sampler2D depthtex0;
uniform sampler2D noisetex;
uniform float viewHeight;
uniform float viewWidth;
uniform float aspectRatio;
uniform float frameTimeCounter;
uniform int frameCounter;
uniform int hideGUI;
#include "/lib/color_transforms.glsl"
#include "/lib/color_dither.glsl"
#include "/lib/res_params.glsl"
/*
vec4 SampleTextureCatmullRom(sampler2D tex, vec2 uv, vec2 texSize )
{
// We're going to sample a a 4x4 grid of texels surrounding the target UV coordinate. We'll do this by rounding
// down the sample location to get the exact center of our "starting" texel. The starting texel will be at
// location [1, 1] in the grid, where [0, 0] is the top left corner.
vec2 samplePos = uv * texSize;
vec2 texPos1 = floor(samplePos - 0.5) + 0.5;
// Compute the fractional offset from our starting texel to our original sample location, which we'll
// feed into the Catmull-Rom spline function to get our filter weights.
vec2 f = samplePos - texPos1;
// Compute the Catmull-Rom weights using the fractional offset that we calculated earlier.
// These equations are pre-expanded based on our knowledge of where the texels will be located,
// which lets us avoid having to evaluate a piece-wise function.
vec2 w0 = f * ( -0.5 + f * (1.0 - 0.5*f));
vec2 w1 = 1.0 + f * f * (-2.5 + 1.5*f);
vec2 w2 = f * ( 0.5 + f * (2.0 - 1.5*f) );
vec2 w3 = f * f * (-0.5 + 0.5 * f);
// Work out weighting factors and sampling offsets that will let us use bilinear filtering to
// simultaneously evaluate the middle 2 samples from the 4x4 grid.
vec2 w12 = w1 + w2;
vec2 offset12 = w2 / (w1 + w2);
// Compute the final UV coordinates we'll use for sampling the texture
vec2 texPos0 = texPos1 - vec2(1.0);
vec2 texPos3 = texPos1 + vec2(2.0);
vec2 texPos12 = texPos1 + offset12;
texPos0 *= texelSize;
texPos3 *= texelSize;
texPos12 *= texelSize;
vec4 result = vec4(0.0);
result += texture2D(tex, vec2(texPos0.x, texPos0.y)) * w0.x * w0.y;
result += texture2D(tex, vec2(texPos12.x, texPos0.y)) * w12.x * w0.y;
result += texture2D(tex, vec2(texPos3.x, texPos0.y)) * w3.x * w0.y;
result += texture2D(tex, vec2(texPos0.x, texPos12.y)) * w0.x * w12.y;
result += texture2D(tex, vec2(texPos12.x, texPos12.y)) * w12.x * w12.y;
result += texture2D(tex, vec2(texPos3.x, texPos12.y)) * w3.x * w12.y;
result += texture2D(tex, vec2(texPos0.x, texPos3.y)) * w0.x * w3.y;
result += texture2D(tex, vec2(texPos12.x, texPos3.y)) * w12.x * w3.y;
result += texture2D(tex, vec2(texPos3.x, texPos3.y)) * w3.x * w3.y;
return result;
}
*/
float lowerCurve(float x) {
float y = 16 * x * (0.5 - x) * 0.1;
return clamp(y, 0.0, 1.0);
}
float upperCurve(float x) {
float y = 16 * (0.5 - x) * (x - 1.0) * 0.1;
return clamp(y, 0.0, 1.0);
}
vec3 luminanceCurve(vec3 color){
color.r += LOWER_CURVE * lowerCurve(color.r) + UPPER_CURVE * upperCurve(color.r);
color.g += LOWER_CURVE * lowerCurve(color.g) + UPPER_CURVE * upperCurve(color.g);
color.b += LOWER_CURVE * lowerCurve(color.b) + UPPER_CURVE * upperCurve(color.b);
return color;
}
vec3 colorGrading(vec3 color) {
float grade_luma = dot(color, vec3(1.0 / 3.0));
float shadows_amount = saturate(-6.0 * grade_luma + 2.75);
float mids_amount = saturate(-abs(6.0 * grade_luma - 3.0) + 1.25);
float highlights_amount = saturate(6.0 * grade_luma - 3.25);
vec3 graded_shadows = color * SHADOWS_TARGET * SHADOWS_GRADE_MUL * 1.7320508076;
vec3 graded_mids = color * MIDS_TARGET * MIDS_GRADE_MUL * 1.7320508076;
vec3 graded_highlights = color * HIGHLIGHTS_TARGET * HIGHLIGHTS_GRADE_MUL * 1.7320508076;
return saturate(graded_shadows * shadows_amount + graded_mids * mids_amount + graded_highlights * highlights_amount);
}
vec3 contrastAdaptiveSharpening(vec3 color, vec2 texcoord){
float sharpen_strength = float(SHARPENING)/100.0;
//Weights : 1 in the center, 0.5 middle, 0.25 corners
vec3 albedoCurrent1 = texture2D(colortex7, texcoord + vec2(texelSize.x,texelSize.y)/MC_RENDER_QUALITY*0.5).rgb;
vec3 albedoCurrent2 = texture2D(colortex7, texcoord + vec2(texelSize.x,-texelSize.y)/MC_RENDER_QUALITY*0.5).rgb;
vec3 albedoCurrent3 = texture2D(colortex7, texcoord + vec2(-texelSize.x,-texelSize.y)/MC_RENDER_QUALITY*0.5).rgb;
vec3 albedoCurrent4 = texture2D(colortex7, texcoord + vec2(-texelSize.x,texelSize.y)/MC_RENDER_QUALITY*0.5).rgb;
vec3 m1 = -0.5/3.5*color + albedoCurrent1/3.5 + albedoCurrent2/3.5 + albedoCurrent3/3.5 + albedoCurrent4/3.5;
vec3 std = abs(color - m1) + abs(albedoCurrent1 - m1) + abs(albedoCurrent2 - m1) +
abs(albedoCurrent3 - m1) + abs(albedoCurrent3 - m1) + abs(albedoCurrent4 - m1);
float contrast = 1.0 - luma(std)/5.0;
color = color*(1.0+(sharpen_strength+UPSCALING_SHARPNENING)*contrast) -
(sharpen_strength+UPSCALING_SHARPNENING)/(1.0-0.5/3.5)*contrast*(m1 - 0.5/3.5*color);
return color;
}
vec3 saturationAndCrosstalk(vec3 color){
float luminance = luma(color);
vec3 lumaColDiff = color - luminance;
color = color + lumaColDiff*(-luminance*CROSSTALK + SATURATION);
return color;
}
float interleaved_gradientNoise(){
vec2 coord = gl_FragCoord.xy;
float noise = fract(52.9829189*fract(0.06711056*coord.x + 0.00583715*coord.y));
return noise;
}
float blueNoise(){
return fract(texelFetch2D(noisetex, ivec2(gl_FragCoord.xy)%512, 0).a + 1.0/1.6180339887 * frameCounter);
}
vec3 chromaticAberration(vec2 UV){
float noise = blueNoise() - 0.5;
vec2 centeredUV = (texcoord - 0.5);
// not stretched by aspect ratio; circular by choice :) it makes most the abberation on the left/right of the screen.
float vignette = 1.0 - clamp(1.0 - length(centeredUV * vec2(aspectRatio,1.0)) / 200.0,0.0,1.0);
float aberrationStrength = CHROMATIC_ABERRATION_STRENGTH * vignette;
vec3 color = vec3(0.0);
color.r = texture2D(colortex7, (centeredUV - (centeredUV + centeredUV*noise) * aberrationStrength) + 0.5).r;
color.g = texture2D(colortex7, texcoord).g;
color.b = texture2D(colortex7, (centeredUV + (centeredUV + centeredUV*noise) * aberrationStrength) + 0.5).b;
return color;
}
void main() {
/* DRAWBUFFERS:7 */
#ifdef CHROMATIC_ABERRATION
vec3 color = chromaticAberration(texcoord);
#else
vec3 color = texture2D(colortex7,texcoord).rgb;
#endif
#if SHARPENING > 0
color = contrastAdaptiveSharpening(color, texcoord);
#endif
color = saturationAndCrosstalk(color);
#ifdef LUMINANCE_CURVE
color = luminanceCurve(color);
#endif
#ifdef COLOR_GRADING_ENABLED
color = colorGrading(color);
#endif
gl_FragData[0].rgb = clamp(int8Dither(color, texcoord),0.0,1.0);
}
-15
View File
@@ -1,15 +0,0 @@
#include "/lib/settings.glsl"
varying vec2 texcoord;
//////////////////////////////VOID MAIN//////////////////////////////
//////////////////////////////VOID MAIN//////////////////////////////
//////////////////////////////VOID MAIN//////////////////////////////
//////////////////////////////VOID MAIN//////////////////////////////
//////////////////////////////VOID MAIN//////////////////////////////
void main() {
gl_Position = ftransform();
texcoord = gl_MultiTexCoord0.xy;
}
+316 -135
View File
@@ -6,7 +6,6 @@ flat varying vec4 lightCol;
flat varying vec3 averageSkyCol;
flat varying vec3 averageSkyCol_Clouds;
uniform sampler2D noisetex;
uniform sampler2D depthtex0;
uniform sampler2D depthtex1;
@@ -23,6 +22,8 @@ uniform sampler2D colortex3;
uniform sampler2D colortex6;
uniform sampler2D colortex7;
uniform sampler2D colortex10;
uniform sampler2D colortex12;
uniform sampler2D colortex14;
flat varying vec3 WsunVec;
uniform vec3 sunVec;
@@ -56,7 +57,17 @@ uniform float rainStrength;
uniform ivec2 eyeBrightnessSmooth;
uniform float eyeAltitude;
uniform float caveDetection;
uniform float skyLightLevelSmooth;
vec4 blueNoise(vec2 coord){
return texelFetch2D(colortex6, ivec2(coord)%512 , 0) ;
}
vec2 R2_samples(int n){
vec2 alpha = vec2(0.75487765, 0.56984026);
return fract(alpha * n);
}
uniform int hideGUI;
// uniform int dhRenderDistance;
#define DHVLFOG
#define diagonal3(m) vec3((m)[0].x, (m)[1].y, m[2].z)
@@ -87,8 +98,6 @@ float linearizeDepthFast(const in float depth, const in float near, const in flo
#if defined LPV_VL_FOG_ILLUMINATION && defined IS_LPV_ENABLED
flat varying float exposure;
#ifdef IS_LPV_ENABLED
#extension GL_ARB_shader_image_load_store: enable
#extension GL_ARB_shading_language_packing: enable
@@ -110,41 +119,74 @@ float linearizeDepthFast(const in float depth, const in float near, const in flo
#include "/lib/lpv_common.glsl"
#include "/lib/lpv_render.glsl"
#endif
vec4 raymarchLPV(
in vec3 viewPos,
in float dither
){
#if !defined LPV_VL_FOG_ILLUMINATION
return vec3(0.0);
#endif
int SAMPLECOUNT = 8;
vec3 playerPos = mat3(gbufferModelViewInverse) * viewPos + gbufferModelViewInverse[3].xyz;
vec3 LPVrayStartPos = playerPos - gbufferModelViewInverse[3].xyz;
// ensure the max marching distance is the voxel distance, or the render distance if the voxels go farther than it
float LPVRayLength = length(LPVrayStartPos);
#if LPV_SIZE == 8
LPVrayStartPos *= min(LPVRayLength, min(256.0,far))/LPVRayLength;
#elif LPV_SIZE == 7
LPVrayStartPos *= min(LPVRayLength, min(128.0,far))/LPVRayLength;
#elif LPV_SIZE == 6
LPVrayStartPos *= min(LPVRayLength, min(64.0,far))/LPVRayLength;
#endif
LPVRayLength = length(LPVrayStartPos);
vec3 LPV_FOG_ILLUMINATION(in vec3 playerPos, float dd, float dL){
vec3 color = vec3(0.0);
vec3 LPVrayProgress = vec3(0.0);
vec4 color = vec4(0.0,0.0,0.0,1.0);
float expFactor = 11.0;
vec3 lpvPos = GetLpvPosition(playerPos);
for (int i = 0; i < SAMPLECOUNT; i++) {
float d = (pow(expFactor, float(i+dither)/float(SAMPLECOUNT))/expFactor - 1.0/expFactor)/(1-1.0/expFactor);
float dd = pow(expFactor, float(i+dither)/float(SAMPLECOUNT)) * log(expFactor) / float(SAMPLECOUNT)/(expFactor-1.0);
float fadeLength = 10.0; // in blocks
vec3 cubicRadius = clamp( min(((LpvSize3-1.0) - lpvPos)/fadeLength, lpvPos/fadeLength) ,0.0,1.0);
float LpvFadeF = cubicRadius.x*cubicRadius.y*cubicRadius.z;
LPVrayProgress = gbufferModelViewInverse[3].xyz + d*LPVrayStartPos;
if(LpvFadeF > 0.0){
// if(length(lpvSample.xyz) > 1e-5){
vec3 lpvPos = GetLpvPosition(LPVrayProgress);
vec3 lighting = SampleLpvLinear(lpvPos).rgb * (LPV_VL_FOG_ILLUMINATION_BRIGHTNESS/100.0);
// float density = exp(-5.0 * clamp( 1.0 - length(lpvSample.xyz) / 16.0,0.0,1.0)) * (LPV_VL_FOG_ILLUMINATION_BRIGHTNESS/100.0) * LpvFadeF;
float density = exp(-5.0 * (1.0-length(lighting.xyz))) * LpvFadeF;
// float density = (1-exp(-1.0-clamp(length(lighting.rgb),0.0,1.0),25) )* LpvFadeF;
float fadeLength = 10.0; // in blocks
vec3 cubicRadius = clamp( min(((LpvSize3-1.0) - lpvPos)/fadeLength, lpvPos/fadeLength) ,0.0,1.0);
float LpvFadeF = cubicRadius.x*cubicRadius.y*cubicRadius.z;
// float density = 0.01 * LpvFadeF;
if(LpvFadeF < 0.01) break;
color = lighting - lighting * exp(-density*dd*dL);
// }
vec3 sampleColor = SampleLpvLinear(lpvPos).rgb;
#ifdef VANILLA_LIGHTMAP_MASK
vec3 lighting = sampleColor * LPV_VL_FOG_ILLUMINATION_BRIGHTNESS * 25. * exp(-10 * (1.0-luma(sampleColor)));
#else
vec3 lighting = sampleColor * LPV_VL_FOG_ILLUMINATION_BRIGHTNESS * 25. * exp(-5 * (1.0-luma(sampleColor)));
#endif
float density = 0.0001;
float volumeCoeff = exp(-dd*density*LPVRayLength);
color.rgb += (lighting - lighting * volumeCoeff) * color.a;
color.a *= volumeCoeff;
}
return color;
return color.rgba;
}
#endif
float invLinZ (float lindepth){
return -((2.0*near/lindepth)-far-near)/(far-near);
}
uniform float nightVision;
#define LIGHTNINGFLASH_VL
#include "/lib/lightning_stuff.glsl"
#ifdef OVERWORLD_SHADER
const bool shadowHardwareFiltering = true;
uniform sampler2DShadow shadow;
@@ -163,11 +205,8 @@ uniform float nightVision;
// uniform int dhRenderDistance;
#define TIMEOFDAYFOG
#include "/lib/lightning_stuff.glsl"
// #define CLOUDS_INTERSECT_TERRAIN
#include "/lib/volumetricClouds.glsl"
#include "/lib/climate_settings.glsl"
#include "/lib/overworld_fog.glsl"
#endif
@@ -254,7 +293,7 @@ void waterVolumetrics_notoverworld(inout vec3 inColor, vec3 rayStart, vec3 rayEn
uniform float waterEnteredAltitude;
vec4 waterVolumetrics(vec3 rayStart, vec3 rayEnd, float rayLength, vec2 dither, vec3 waterCoefs, vec3 scatterCoef, vec3 ambient, vec3 lightSource, float VdotL){
vec4 waterVolumetrics(vec3 rayStart, vec3 rayEnd, float rayLength, vec2 dither, vec3 waterCoefs, vec3 scatterCoef, vec3 ambient, vec3 lightSource, float VdotL, vec3 LPV){
int spCount = 8;
vec3 start = toShadowSpaceProjected(rayStart);
@@ -329,7 +368,7 @@ vec4 waterVolumetrics(vec3 rayStart, vec3 rayEnd, float rayLength, vec2 dither,
float bubble = exp2(-10.0 * clamp(1.0 - length(d*dVWorld) / 16.0, 0.0,1.0));
float caustics = max(max(waterCaustics(progressW, WsunVec), phase*0.5) * mix(0.5, 1.5, bubble), phase);
float caustics = max(max(waterCaustics(progressW, WsunVec, -(progressW.y - waterEnteredAltitude)), phase*0.5) * mix(0.5, 1.5, bubble), phase);
vec3 sunAbsorbance = exp(-waterCoefs * (distanceFromWaterSurface/abs(WsunVec.y)));
vec3 WaterAbsorbance = exp(-waterCoefs * (distanceFromWaterSurface + thing));
@@ -337,25 +376,17 @@ vec4 waterVolumetrics(vec3 rayStart, vec3 rayEnd, float rayLength, vec2 dither,
vec3 Directlight = lightSource * sh * phase * caustics * sunAbsorbance;
vec3 Indirectlight = ambient * WaterAbsorbance;
vec3 light = (Indirectlight + Directlight) * scatterCoef;
vec3 light = (Indirectlight + Directlight + LPV) * scatterCoef;
vec3 volumeCoeff = exp(-waterCoefs * length(dd*dVWorld));
vL += (light - light * volumeCoeff) / waterCoefs * absorbance;
absorbance *= volumeCoeff;
}
// waterabsorbtion = absorbance;
return vec4(vL, dot(absorbance,vec3(0.335)));
}
vec4 blueNoise(vec2 coord){
return texelFetch2D(colortex6, ivec2(coord)%512 , 0) ;
}
vec2 R2_samples(int n){
vec2 alpha = vec2(0.75487765, 0.56984026);
return fract(alpha * n);
}
float fogPhase2(float lightPoint){
float linear = 1.0 - clamp(lightPoint*0.5+0.5,0.0,1.0);
@@ -373,6 +404,12 @@ float encodeVec2(vec2 a){
return temp.x*constant1.x+temp.y*constant1.y;
}
vec2 decodeVec2(float a){
const vec2 constant1 = 65535. / vec2( 256., 65536.);
const float constant2 = 256. / 255.;
return fract( a * constant1 ) * constant2 ;
}
uniform int framemod8;
@@ -384,97 +421,164 @@ float convertHandDepth(float depth) {
return ndcDepth * 0.5 + 0.5;
}
float swapperlinZ(float depth, float _near, float _far) {
return (2.0 * _near) / (_far + _near - depth * (_far - _near));
// l = (2*n)/(f+n-d(f-n))
// f+n-d(f-n) = 2n/l
// -d(f-n) = ((2n/l)-f-n)
// d = -((2n/l)-f-n)/(f-n)
vec3 alterCoords(in vec3 coords, bool lighting){
float theDistance = length(coords + (lighting ? vec3(0.0) : cameraPosition));
coords.x = coords.x*3;
coords.y = coords.y;
coords.z = coords.z*3;
return coords;
}
vec4 raymarchTest(
in vec3 viewPosition,
in vec2 dither
){
vec3 color = vec3(0.0);
float totalAbsorbance = 1.0;
float expFactor = 16.0;
float minHeight = 250.0;
float maxHeight = minHeight + 100.0;
uniform float viewHeight;
uniform float viewWidth;
float godrayTest( in vec3 viewPos, in vec3 lightDir, float noise, float vanilladepth){
// return 1.0;1
float godrays = 0.0;
float samples = 8.0;
float _near = near; float _far = far*4.0;
// #ifdef DISTANT_HORIZONS
// bool depthCheck = true;
// #else
// bool depthCheck = false;
// #endif
bool depthCheck = true;
if (depthCheck) {
_near = dhNearPlane;
_far = dhFarPlane;
}
float lightRange = pow(clamp(-dot(normalize(viewPos), lightDir)+0.65,0.0,1.0),2.0);
vec3 position = toClipSpace3_DH(viewPos, depthCheck) ;
#if defined DISTANT_HORIZONS
float maxdist = dhFarPlane - 16.0;
//prevents the ray from going behind the camera
float rayLength = ((viewPos.z + lightDir.z * _far * sqrt(3.)) > -_near) ? (-_near - viewPos.z) / lightDir.z : _far * sqrt(3.);
vec3 direction = toClipSpace3_DH(viewPos + lightDir*rayLength, depthCheck) - position;
direction.xyz = direction.xyz / max(max(abs(direction.x)/0.0005, abs(direction.y)/0.0005),500.0); //fixed step size
direction *= 60.0;
position.xy *= RENDER_SCALE;
direction.xy *= RENDER_SCALE;
vec3 newPos = position + direction*noise;
vec2 screenEdges = 2.0/vec2(viewWidth, viewHeight);
for (int i = 0; i < int(samples); i++) {
newPos.xy = clamp(newPos.xy, screenEdges, 1.0-screenEdges);
float sampleDepth = invLinZ(sqrt(texelFetch2D(colortex4, ivec2(newPos.xy/texelSize/4.0),0).a/65000.0));
#ifdef DISTANT_HORIZONS
if(depthCheck) sampleDepth = texelFetch2D(dhDepthTex1, ivec2(newPos.xy/texelSize),0).x;
#endif
godrays += (swapperlinZ(sampleDepth, _near, _far) > 1.0 ? 1.0 : lightRange);
newPos += direction;
}
return godrays/samples;
}
vec4 waterVolumetrics_alt( vec3 rayStart, vec3 rayEnd, float estEndDepth, float estSunDepth, float rayLength, float dither, vec3 waterCoefs, vec3 scatterCoef, vec3 ambient, vec3 lightSource, float VdotL){
int spCount = rayMarchSampleCount;
vec3 start = toShadowSpaceProjected(rayStart);
vec3 end = toShadowSpaceProjected(rayEnd);
vec3 dV = (end-start);
//limit ray length at 32 blocks for performance and reducing integration error
//you can't see above this anyway
float maxZ = min(rayLength,12.0)/(1e-8+rayLength);
dV *= maxZ;
rayLength *= maxZ;
estEndDepth *= maxZ;
estSunDepth *= maxZ;
vec3 wpos = mat3(gbufferModelViewInverse) * rayStart + gbufferModelViewInverse[3].xyz;
vec3 dVWorld = (wpos - gbufferModelViewInverse[3].xyz);
#ifdef OVERWORLD_SHADER
float phase = fogPhase(VdotL) * 5.0;
#else
float maxdist = far*4;
float phase = 1.0;
#endif
float referenceDistance = length(viewPosition) < maxdist ? length(viewPosition) - 1.0 : 100000000.0;
int SAMPLECOUNT = 8;
//project pixel position into projected shadowmap space
vec3 wpos = mat3(gbufferModelViewInverse) * viewPosition + gbufferModelViewInverse[3].xyz;
vec3 dVWorld = wpos - gbufferModelViewInverse[3].xyz;
vec3 dVWorldN = normalize(dVWorld);
// dVWorld *= dVWorldN/abs(dVWorldN.y);
// float maxLength = min(length(dVWorld), 16 * 8)/length(dVWorld);
// dVWorld *= maxLength;
// float cloudRange = max(minHeight - cameraPosition.y,0.0);
float cloudRange = max(minHeight - cameraPosition.y, 0.0);
vec3 rayDirection = dVWorldN.xyz * ( (maxHeight - minHeight) / length(alterCoords(dVWorldN, false)) / SAMPLECOUNT);
vec3 absorbance = vec3(1.0);
vec3 vL = vec3(0.0);
// float cloudRange = mix(max(cameraPosition.y - maxHeight,0.0), max(minHeight - cameraPosition.y,0.0), clamp(rayDirection.y,0.0,1.0));
float expFactor = 11.0;
vec3 sh = vec3(1.0);
vec3 rayProgress = rayDirection + cameraPosition + (rayDirection / length(alterCoords(rayDirection, false))) * 200.0;
float dL = length(rayDirection);
// do this outside raymarch loop, masking the water surface is good enough
#if defined OVERWORLD_SHADER
sh *= GetCloudShadow(wpos+cameraPosition, WsunVec);
#endif
// vec3 rayDirection = dVWorldN.xyz * ( (maxHeight - minHeight) / abs(dVWorldN.y) / SAMPLECOUNT);
// float flip = mix(max(cameraPosition.y - maxHeight,0.0), max(minHeight - cameraPosition.y,0.0), clamp(rayDirection.y,0.0,1.0));
// vec3 rayProgress = rayDirection*dither.x + cameraPosition + (rayDirection / abs(rayDirection.y)) *flip;
// float dL = length(rayDirection);
float thing = -normalize(dVWorld).y;
thing = clamp(thing - 0.333,0.0,1.0);
thing = pow(1.0-pow(1.0-thing,2.0),2.0);
thing *= 15.0;
for (int i=0;i<spCount;i++) {
float d = (pow(expFactor, float(i+dither)/float(spCount))/expFactor - 1.0/expFactor)/(1-1.0/expFactor);
float dd = pow(expFactor, float(i+dither)/float(spCount)) * log(expFactor) / float(spCount)/(expFactor-1.0);
for (int i = 0; i < SAMPLECOUNT; i++) {
// progressW = gbufferModelViewInverse[3].xyz+cameraPosition + d*dVWorld;
if(length(rayProgress - cameraPosition) > referenceDistance) break;
vec3 progressW = gbufferModelViewInverse[3].xyz + cameraPosition + d*dVWorld;
float d = (pow(expFactor, float(i + dither.x)/float(SAMPLECOUNT))/expFactor - 1.0/expFactor)/(1-1.0/expFactor);
float dd = pow(expFactor, float(i + dither.y)/float(SAMPLECOUNT)) * log(expFactor) / float(SAMPLECOUNT)/(expFactor-1.0);
#ifdef OVERWORLD_SHADER
vec3 spPos = start.xyz + dV*d;
//project into biased shadowmap space
#ifdef DISTORT_SHADOWMAP
float distortFactor = calcDistort(spPos.xy);
#else
float distortFactor = 1.0;
#endif
vec3 pos = vec3(spPos.xy*distortFactor, spPos.z);
if (abs(pos.x) < 1.0-0.5/2048. && abs(pos.y) < 1.0-0.5/2048.){
pos = pos*vec3(0.5,0.5,0.5/6.0)+0.5;
// sh = shadow2D( shadow, pos).x;
#ifdef TRANSLUCENT_COLORED_SHADOWS
sh = vec3(shadow2D(shadowtex0, pos).x);
if(shadow2D(shadowtex1, pos).x > pos.z && sh.x < 1.0){
vec4 translucentShadow = texture2D(shadowcolor0, pos.xy);
if(translucentShadow.a < 0.9) sh = normalize(translucentShadow.rgb+0.0001);
}
#else
sh *= vec3(shadow2D(shadow, pos).x);
#endif
}
#endif
vec3 sunAbsorbance = exp(-waterCoefs * estSunDepth * d);
vec3 ambientAbsorbance = exp(-waterCoefs * (estEndDepth * d + thing));
vec3 Directlight = lightSource * sh * phase * sunAbsorbance;
vec3 Indirectlight = ambient * ambientAbsorbance;
vec3 light = (Indirectlight + Directlight) * scatterCoef;
float theDistance = length(alterCoords(rayProgress-cameraPosition, true));
float fogDensity = min(max(texture2D(noisetex, rayProgress.xz/2048).b-0.5,0.0)*2.0,1.0) * clamp((minHeight+50) - theDistance, 0.0, clamp(theDistance-minHeight,0,1));
float fogVolumeCoeff = exp(-fogDensity*dd*dL);
// vec3 lighting = vec3(1.0) * (1.0-clamp((minHeight-50) - theDistance,0,1));
vec3 lighting = vec3(1.0) * clamp(minHeight - theDistance/1.2,0,1);
color += (lighting - lighting * fogVolumeCoeff) * totalAbsorbance;
totalAbsorbance *= fogVolumeCoeff;
rayProgress += rayDirection;
vec3 volumeCoeff = exp(-waterCoefs * dd * rayLength);
vL += (light - light * volumeCoeff) / waterCoefs * absorbance;
absorbance *= volumeCoeff;
}
return vec4(color, totalAbsorbance);
return vec4(vL, dot(absorbance,vec3(0.333333)));
}
//////////////////////////////VOID MAIN//////////////////////////////
//////////////////////////////VOID MAIN//////////////////////////////
//////////////////////////////VOID MAIN//////////////////////////////
@@ -484,37 +588,61 @@ vec4 raymarchTest(
void main() {
/* RENDERTARGETS:0 */
/* RENDERTARGETS:0,13 */
gl_FragData[1] = vec4(0.0,0.0,0.0, 1.0);
float noise_2 = blueNoise();
float noise_1 = max(1.0 - R2_dither(),0.0015);
// float noise_2 = interleaved_gradientNoise_temporal();
vec2 bnoise = blueNoise(gl_FragCoord.xy ).rg;
int seed = (frameCounter*5)%40000;
vec2 r2_sequence = R2_samples(seed).xy;
int seed = frameCounter%40000;
vec2 r2_sequence = R2_samples(seed).xy*5.0;
vec2 BN = fract(r2_sequence + bnoise);
// vec2 tc = floor(gl_FragCoord.xy)/VL_RENDER_RESOLUTION*texelSize + texelSize*0.5;
vec2 tc = (gl_FragCoord.xy - 0.5)/VL_RENDER_RESOLUTION*texelSize;
vec2 tc = floor(gl_FragCoord.xy - 0.5)/VL_RENDERING_RESOLUTION_SCALE*texelSize;
bool iswater = texture2D(colortex7,tc).a > 0.99;
vec2 texcoord = tc/texelSize;
vec2 texcoord_norm = tc;
ivec2 texcoord_cast = ivec2(texcoord);
// vec2 tc = floor(gl_FragCoord.xy)/VL_RENDERING_RESOLUTION_SCALE*texelSize + 0.5*texelSize;
float depth = texelFetch2D(depthtex0, ivec2(tc/texelSize),0).x;
float z0 = depth < 0.56 ? convertHandDepth(depth) : depth;
#ifdef OVERWORLD_SHADER
vec2 lightmap = decodeVec2(texelFetch2D(colortex14,texcoord_cast,0).x);
// #ifdef DISTANT_HORIZONS
// if(z >= 1.0) lightmap.y = 0.99;
// #endif
#else
vec2 lightmap = decodeVec2(texelFetch2D(colortex14,texcoord_cast,0).a);
lightmap.y = 1.0;
#endif
float alpha = texelFetch2D(colortex7,texcoord_cast,0).a ;
float blendedAlpha = texelFetch2D(colortex2, texcoord_cast,0).a;
bool iswater = alpha > 0.99;
float z0 = texelFetch2D(depthtex0, texcoord_cast,0).x;
float z1 = texelFetch2D(depthtex1, texcoord_cast,0).x;
#ifdef DISTANT_HORIZONS
float DH_z0 = texelFetch2D(dhDepthTex, ivec2(tc/texelSize),0).x;
float DH_z0 = texelFetch2D(dhDepthTex, texcoord_cast,0).x;
float DH_z1 = texelFetch2D(dhDepthTex1, texcoord_cast,0).x;
#else
float DH_z0 = 0.0;
float DH_z1 = 0.0;
#endif
vec3 viewPos0 = toScreenSpace_DH(tc/RENDER_SCALE, z0, DH_z0);
vec3 viewPos0_water = toScreenSpace(vec3(tc/RENDER_SCALE, z0));
vec3 viewPos1 = toScreenSpace_DH(tc/RENDER_SCALE, z1, DH_z1);
vec3 playerPos = mat3(gbufferModelViewInverse) * viewPos0 + gbufferModelViewInverse[3].xyz;
vec3 playerPos_normalized = normalize(playerPos);
float Vdiff = distance(viewPos1, viewPos0);
float estimatedDepth = Vdiff * abs(playerPos_normalized.y);
float estimatedSunDepth = Vdiff / abs(WsunVec.y); //assuming water plane
float dirtAmount = Dirt_Amount;
vec3 waterEpsilon = vec3(Water_Absorb_R, Water_Absorb_G, Water_Absorb_B);
vec3 dirtEpsilon = vec3(Dirt_Absorb_R, Dirt_Absorb_G, Dirt_Absorb_B);
@@ -524,7 +652,29 @@ void main() {
vec3 directLightColor = lightCol.rgb / 2400.0;
vec3 indirectLightColor = averageSkyCol / 1200.0;
vec3 indirectLightColor_dynamic = averageSkyCol_Clouds / 1200.0;
vec3 indirectLight = indirectLightColor_dynamic * skyLightLevelSmooth * ambient_brightness;
float minimumLightAmount = 0.02*nightVision + 0.005 * mix(MINIMUM_INDOOR_LIGHT, MINIMUM_OUTDOOR_LIGHT, skyLightLevelSmooth);
indirectLight += vec3(1.0) * minimumLightAmount;
vec3 indirectLight_fog = indirectLightColor * skyLightLevelSmooth * ambient_brightness;
indirectLight_fog += vec3(1.0) * minimumLightAmount;
float cloudPlaneDistance = 0.0;
// #ifdef DISTANT_HORIZONS
// float godrays = godrayTest(viewPos0, normalize(WsunVec*mat3(gbufferModelViewInverse)),BN.x, z0);
// #else
// float godrays = 1.0;
// #endifd
#if defined LPV_VL_FOG_ILLUMINATION
vec4 LPV_ILLUMINATION = raymarchLPV(viewPos0, R2_dither());
#else
vec4 LPV_ILLUMINATION = vec4(0.0,0.0,0.0,1.0);
#endif
float passAbsorbance = 1.0;
#if defined OVERWORLD_SHADER
vec4 VolumetricClouds = GetVolumetricClouds(viewPos0, BN, WsunVec, directLightColor, indirectLightColor, cloudPlaneDistance);
@@ -536,33 +686,64 @@ void main() {
VolumetricClouds.a = mix(VolumetricClouds.a, 1.0, skyhole);
}
#endif
vec4 VolumetricFog = GetVolumetricFog(viewPos0, BN, WsunVec, directLightColor, indirectLight_fog, indirectLight, cloudPlaneDistance);
#if defined LPV_VL_FOG_ILLUMINATION
VolumetricFog.a *= LPV_ILLUMINATION.a;
VolumetricFog.rgb = VolumetricFog.rgb * LPV_ILLUMINATION.a + LPV_ILLUMINATION.rgb;
#endif
// for bloomy fog mask
gl_FragData[1].a = VolumetricFog.a;
VolumetricFog = vec4(VolumetricClouds.rgb*VolumetricFog.a + VolumetricFog.rgb, VolumetricFog.a*VolumetricClouds.a);
#endif
#ifdef OVERWORLD_SHADER
float atmosphereAlpha = 1.0;
vec3 sceneColor = texelFetch2D(colortex3,ivec2(tc/texelSize),0).rgb * VolumetricClouds.a + VolumetricClouds.rgb;
vec4 VolumetricFog = GetVolumetricFog(viewPos0, WsunVec, BN, directLightColor, indirectLightColor, indirectLightColor_dynamic, atmosphereAlpha, VolumetricClouds.rgb, cloudPlaneDistance);
#endif
#if defined NETHER_SHADER || defined END_SHADER
vec4 VolumetricFog = GetVolumetricFog(viewPos0, BN.x, BN.y);
#endif
#if defined LPV_VL_FOG_ILLUMINATION
VolumetricFog.a *= LPV_ILLUMINATION.a;
VolumetricFog.rgb = VolumetricFog.rgb * LPV_ILLUMINATION.a + LPV_ILLUMINATION.rgb;
#endif
#if defined OVERWORLD_SHADER
VolumetricFog = vec4(VolumetricClouds.rgb * VolumetricFog.a + VolumetricFog.rgb, VolumetricFog.a*VolumetricClouds.a);
// for bloomy fog mask
gl_FragData[1].a = VolumetricFog.a;
#endif
if (isEyeInWater == 1){
vec4 underWaterFog = waterVolumetrics(vec3(0.0), viewPos0_water, length(viewPos0_water), BN, totEpsilon, scatterCoef, indirectLightColor_dynamic, directLightColor , dot(normalize(viewPos0_water), normalize(sunVec* lightCol.a ) ));
vec4 underWaterFog = waterVolumetrics(vec3(0.0), viewPos0, length(viewPos0), BN, totEpsilon, scatterCoef, indirectLightColor_dynamic, directLightColor , dot(normalize(viewPos0), normalize(sunVec* lightCol.a ) ), LPV_ILLUMINATION.rgb);
VolumetricFog = vec4(underWaterFog.rgb, 1.0);
}
// VolumetricFog = raymarchTest2(viewPos0, BN.x);
// VolumetricFog = vec4(godrays,godrays,godrays,0.0);
// VolumetricFog = raymarchTest(viewPos0, BN);
// VolumetricFog = vec4(0.0,0.0,0.0,1.0);
// VolumetricFog.rgb = vec3(0);
gl_FragData[0] = clamp(VolumetricFog, 0.0, 65000.0);
if(blendedAlpha > 0.0 || iswater){
gl_FragData[1] = vec4(0.0,0.0,0.0,1.0);
#if defined OVERWORLD_SHADER
VolumetricClouds = GetVolumetricClouds(viewPos1, BN, WsunVec, directLightColor, indirectLightColor, cloudPlaneDistance);
VolumetricFog = GetVolumetricFog(viewPos1, vec2(noise_1), WsunVec, directLightColor, indirectLight_fog, indirectLight, cloudPlaneDistance);
VolumetricFog = vec4(VolumetricClouds.rgb*VolumetricFog.a + VolumetricFog.rgb, VolumetricFog.a*VolumetricClouds.a);
#endif
#if defined NETHER_SHADER || defined END_SHADER
VolumetricFog = GetVolumetricFog(viewPos1, noise_1, noise_1);
#endif
gl_FragData[1] = clamp(VolumetricFog, 0.0, 65000.0);
if(iswater && isEyeInWater != 1){
vec4 underWaterVL = waterVolumetrics_alt(viewPos0, viewPos1, estimatedDepth, estimatedSunDepth, Vdiff, noise_1, totEpsilon, scatterCoef, indirectLight, directLightColor, dot(normalize(viewPos0), normalize(sunVec*lightCol.a)));
gl_FragData[1] = clamp(underWaterVL, 0.0, 65000.0);
}
}
}
+5 -12
View File
@@ -6,10 +6,6 @@ flat varying vec4 lightCol;
flat varying vec3 averageSkyCol;
flat varying vec3 averageSkyCol_Clouds;
#if defined LPV_VL_FOG_ILLUMINATION && defined IS_LPV_ENABLED
flat varying float exposure;
#endif
#include "/lib/scene_controller.glsl"
@@ -45,7 +41,7 @@ uniform float frameTimeCounter;
void main() {
gl_Position = ftransform();
gl_Position.xy = (gl_Position.xy*0.5+0.5)*(0.01+VL_RENDER_RESOLUTION)*2.0-1.0;
gl_Position.xy = (gl_Position.xy*0.5+0.5)*(0.01+VL_RENDERING_RESOLUTION_SCALE)*2.0-1.0;
#ifdef OVERWORLD_SHADER
@@ -53,7 +49,9 @@ void main() {
averageSkyCol = texelFetch2D(colortex4,ivec2(1,37),0).rgb;
averageSkyCol_Clouds = texelFetch2D(colortex4,ivec2(0,37),0).rgb;
readSceneControllerParameters(colortex4, parameters.smallCumulus, parameters.largeCumulus, parameters.altostratus, parameters.fog);
#define READ_SCENE_CONTROLLER_PARAMETERS
#include "/lib/scene_controller.glsl"
// readSceneControllerParameters(colortex4, parameters.smallCumulus, parameters.largeCumulus, parameters.altostratus, parameters.fog);
#endif
#ifdef NETHER_SHADER
@@ -79,14 +77,9 @@ void main() {
refractedSunVec = refract(lightCol.a*WsunVec, -vec3(0.0,1.0,0.0), 1.0/1.33333);
#if defined LPV_VL_FOG_ILLUMINATION && defined IS_LPV_ENABLED
exposure = texelFetch2D(colortex4,ivec2(10,37),0).r;
#endif
#if TAA_MODE > 0
TAA_Offset = offsets[framemod8];
#else
TAA_Offset = vec2(0.0);
#endif
}
}
+49 -27
View File
@@ -31,13 +31,13 @@ uniform sampler2D colortex9;
uniform sampler2D colortex10;
uniform sampler2D colortex11;
uniform sampler2D colortex12;
// uniform sampler2D colortex13;
uniform sampler2D colortex13;
// uniform sampler2D colortex14;
// uniform sampler2D colortex15;
uniform vec2 texelSize;
// uniform float viewHeight;
// uniform float viewWidth;
uniform float viewHeight;
uniform float viewWidth;
// uniform vec3 sunVec;
uniform float frameTimeCounter;
uniform int frameCounter;
@@ -269,18 +269,18 @@ vec3 toClipSpace3Prev_DH( vec3 viewSpacePosition, bool depthCheck ) {
#endif
}
vec4 bilateralUpsample(out float outerEdgeResults, float referenceDepth, sampler2D depth, bool hand){
vec4 bilateralUpsample(vec2 fragcoord, sampler2D colortex, out float outerEdgeResults, float referenceDepth, sampler2D depth, bool hand){
vec4 colorSum = vec4(0.0);
float edgeSum = 0.0;
float threshold = 0.005;
vec2 coord = gl_FragCoord.xy - 1.5;
vec2 coord = fragcoord - 1.5;
vec2 UV = coord;
const ivec2 SCALE = ivec2(1.0/VL_RENDER_RESOLUTION);
ivec2 UV_DEPTH = ivec2(UV*VL_RENDER_RESOLUTION)*SCALE;
ivec2 UV_COLOR = ivec2(UV*VL_RENDER_RESOLUTION);
const ivec2 SCALE = ivec2(1.0/VL_RENDERING_RESOLUTION_SCALE);
ivec2 UV_DEPTH = ivec2(UV*VL_RENDERING_RESOLUTION_SCALE)*SCALE;
ivec2 UV_COLOR = ivec2(UV*VL_RENDERING_RESOLUTION_SCALE);
ivec2 UV_NOISE = ivec2(gl_FragCoord.xy*texelSize + 1);
ivec2 OFFSET[5] = ivec2[](
@@ -302,7 +302,7 @@ vec4 bilateralUpsample(out float outerEdgeResults, float referenceDepth, sampler
float edgeDiff = abs(offsetDepth - referenceDepth) < threshold ? 1.0 : 1e-7;
outerEdgeResults = max(outerEdgeResults, abs(referenceDepth - offsetDepth));
vec4 offsetColor = texelFetch2D(colortex0, UV_COLOR + OFFSET[i] + UV_NOISE, 0).rgba;
vec4 offsetColor = texelFetch2D(colortex, UV_COLOR + OFFSET[i] + UV_NOISE, 0).rgba;
colorSum += offsetColor*edgeDiff;
edgeSum += edgeDiff;
@@ -314,9 +314,11 @@ vec4 bilateralUpsample(out float outerEdgeResults, float referenceDepth, sampler
}
vec4 VLTemporalFiltering(vec3 viewPos, in float referenceDepth, sampler2D depth, bool hand){
vec2 offsetTexcoord = gl_FragCoord.xy*texelSize;
vec2 VLtexCoord = offsetTexcoord * VL_RENDER_RESOLUTION;
vec2 screenEdges = 2.0/vec2(viewWidth, viewHeight);
vec2 offsetTexcoord = clamp(gl_FragCoord.xy*texelSize, screenEdges, 1.0-screenEdges);
vec2 VLtexCoord = offsetTexcoord * VL_RENDERING_RESOLUTION_SCALE;
// get previous frames position stuff for UV
vec3 playerPos = mat3(gbufferModelViewInverse) * viewPos + gbufferModelViewInverse[3].xyz + (cameraPosition - previousCameraPosition);
vec3 previousPosition = mat3(gbufferPreviousModelView) * playerPos + gbufferPreviousModelView[3].xyz;
@@ -330,11 +332,12 @@ vec4 VLTemporalFiltering(vec3 viewPos, in float referenceDepth, sampler2D depth,
// to fill pixel gaps in geometry edges, do a bilateral upsample.
// pass a mask to only show upsampled color around the edges of blocks. this is so it doesnt blur reprojected results.
float outerEdgeResults = 0.0;
vec4 upsampledCurrentFrame = bilateralUpsample(outerEdgeResults, referenceDepth, depth, hand);
vec4 upsampledCurrentFrame = bilateralUpsample(gl_FragCoord.xy , colortex0, outerEdgeResults, referenceDepth, depth, hand);
// vec4 upsampledCurrentFrame = BilateralUpscale(colortex0, depth, gl_FragCoord.xy - 1.5, referenceDepth);
// return vec4(outerEdgeResults,0,0,1);
// return upsampledCurrentFrame;
// return currentFrame;
if (previousPosition.x < 0.0 || previousPosition.y < 0.0 || previousPosition.x > 1.0 || previousPosition.y > 1.0) return currentFrame;
@@ -398,15 +401,14 @@ void blendAllFogTypes( inout vec3 color, inout float bloomyFogMult, vec4 volumet
float fogfade = 1.0 - max((1.0 - linearDistance / min(far, 16.0*7.0) ),0);
color.rgb += (transmittance2 * scatterCoef) * fogfade;
bloomyFogMult *= dot(transmittance,vec3(0.3333))*0.5;
bloomyFogMult *= dot(transmittance,vec3(0.3333))*0.75 + 0.25;
}
/// blend volumetrics
color = color * volumetrics.a + volumetrics.rgb;
// make bloomy fog only work outside of the overworld (unless underwater)
#if !defined OVERWORLD_SHADER
bloomyFogMult *= volumetrics.a;
bloomyFogMult = min(bloomyFogMult, volumetrics.a);
#endif
// blend vanilla fogs (blindness, darkness, lava, powdered snow)
@@ -457,8 +459,7 @@ void main() {
float depth = texelFetch2D(depthtex0, ivec2(gl_FragCoord.xy),0).x;
bool hand = depth < 0.56;
float z = depth;
float z2 = texture2D(depthtex1, texcoord).x;
float z2 = texelFetch2D(depthtex1, ivec2(gl_FragCoord.xy),0).x;
float frDepth = linearize(z);
float swappedDepth = z;
@@ -518,7 +519,7 @@ void main() {
// 0.9 = entity mask
// 0.8 = reflective entities
// 0.7 = reflective blocks
float translucentMasks = texture2D(colortex7, texcoord).a;
float translucentMasks = texelFetch2D(colortex7,ivec2(gl_FragCoord.xy),0).a;
bool isWater = translucentMasks > 0.99;
bool isReflectiveEntity = abs(translucentMasks - 0.8) < 0.01;
@@ -538,16 +539,32 @@ void main() {
////// --------------- MAIN COLOR BUFFER
////// --------------- distort texcoords as a refraction effect
vec2 refractedCoord = texcoord;
#if FAKE_REFRACTION_AMOUNT > 0
vec3 color = doRefractionEffect(refractedCoord, tangentNormals.xy, linearDistance, isReflectiveEntity, isWater && isEyeInWater == 1);
#else
vec3 color = texture2D(colortex3, texcoord).rgb;
#endif
////// --------------- get volumetrics
float blank = 0.0;
#ifdef DISTANT_HORIZONS
vec4 VLBehindTranslucents = bilateralUpsample(refractedCoord/texelSize, colortex13, blank, DH_mixedLinearZ, depthtex1, hand);
#else
vec4 VLBehindTranslucents = bilateralUpsample(refractedCoord/texelSize, colortex13, blank, linearize(texelFetch2D(depthtex1, ivec2(refractedCoord/texelSize),0).x), depthtex1, hand);
#endif
////// --------------- START BLENDING FOGS AND FORWARD RENDERED COLOR
vec4 TranslucentShader = texture2D(colortex2, texcoord);
// ensure that bloomy fog mask in this VLBehindTranslucents.a does not darken outside of glass areas.
if(TranslucentShader.a > 0.0 && TranslucentShader.a < 1.0) color.rgb = color.rgb * VLBehindTranslucents.a + VLBehindTranslucents.rgb;
// to avoid bloomy fog applying to the surface of water, and the clouds, swap between high and low quality VL buffers.
bloomyFogMult *= isWater ? temporallyFilteredVL.a * 0.75 + 0.25 : (TranslucentShader.a < 0.9995 ? VLBehindTranslucents.a * 0.75 + 0.25 : 1.0);
// blend border fog. be sure to blend before and after forward rendered color blends.
#if defined BorderFog && defined OVERWORLD_SHADER
vec4 borderFog = vec4(skyGroundColor, getBorderFogDensity(linearDistance_cylinder, playerPos_normalized, swappedDepth >= 1.0));
@@ -588,17 +605,23 @@ void main() {
////// --------------- bloomy rain effect
#ifdef OVERWORLD_SHADER
float rainDrops = clamp(texture2D(colortex9,texcoord).a,0.0,1.0);
if(rainDrops > 0.0) bloomyFogMult *= clamp(1.0 - pow(rainDrops*5.0,2),0.0,1.0);
float rainDrops = texelFetch2D(colortex9,ivec2(texcoord/texelSize),0).a;
if(rainDrops > 0.0) {
bloomyFogMult *= clamp(1.0 - pow(rainDrops*5.0,2),0.0,1.0);
color.rgb += color.rgb * 0.2 * rainDrops;
}
#endif
////// --------------- FINALIZE
#ifdef display_LUT
float zoomLevel = 1.0;
vec3 thingy = texelFetch2D(colortex4,ivec2(gl_FragCoord.xy/zoomLevel),0).rgb /1200.0;
vec2 coord = (gl_FragCoord.xy/2.0);
vec3 thingy = texelFetch2D(colortex4,ivec2(coord),0).rgb /1200.0;
coord *= texelSize;
if(luma(thingy) > 0.0){
color.rgb = thingy;
if(coord.x < 1 && coord.x > 0 && coord.y < 1 && coord.y > 0){
color.rgb = thingy;
bloomyFogMult = 1.0;
}
@@ -607,8 +630,8 @@ void main() {
#else
if( hideGUI == 1) color.rgb = volumetricsFromTex(playerPos_normalized, colortex4, 0.0).rgb/1200.0;
#endif
#endif
gl_FragData[0].r = bloomyFogMult; // pass fog alpha so bloom can do bloomy fog
gl_FragData[1].rgb = clamp(color.rgb, 0.0,68000.0);
@@ -622,5 +645,4 @@ void main() {
// gl_FragData[1].rgb = vec3(1.0) * ld( (data.a > 0.0 ? data.a : texture2D(depthtex0, texcoord).x ) ) ;
// gl_FragData[1].rgb = gl_FragData[1].rgb * (1.0-TranslucentShader.a) + TranslucentShader.rgb*10.0;
// gl_FragData[1].rgb = 1-(texcoord.x > 0.5 ? vec3(TranslucentShader.a) : vec3(data.a));
}
-4
View File
@@ -23,10 +23,6 @@ uniform int framemod8;
#include "/lib/TAA_jitter.glsl"
#ifdef OVERWORLD_SHADER
#endif
//////////////////////////////VOID MAIN//////////////////////////////
//////////////////////////////VOID MAIN//////////////////////////////
//////////////////////////////VOID MAIN//////////////////////////////
+10 -1
View File
@@ -1,8 +1,15 @@
#include "/lib/settings.glsl"
uniform sampler2D colortex3;
uniform vec2 texelSize;
uniform int framemod8;
#include "/lib/TAA_jitter.glsl"
// Compute 3x3 min max for TAA
uniform float viewHeight;
uniform float viewWidth;
//////////////////////////////VOID MAIN//////////////////////////////
//////////////////////////////VOID MAIN//////////////////////////////
//////////////////////////////VOID MAIN//////////////////////////////
@@ -11,7 +18,9 @@ uniform sampler2D colortex3;
void main() {
/* DRAWBUFFERS:06 */
ivec2 center = ivec2(gl_FragCoord.xy);
vec2 screenEdges = 2.0/vec2(viewWidth, viewHeight);
vec2 jitter = offsets[framemod8]*texelSize*0.5;
ivec2 center = ivec2(clamp(gl_FragCoord.xy*texelSize, screenEdges, 1.0-screenEdges)/texelSize);
// vec3 current = texelFetch2D(colortex3, center, 0).rgb;
// vec3 cMin = current;
+11 -14
View File
@@ -14,12 +14,21 @@ const int colortex9Format = RGBA8; // rain in alpha
const int colortex10Format = RGBA16F; // resourcepack Skies
const int colortex11Format = RGBA16; // unchanged translucents albedo, alpha and tangent normals
const int colortex12Format = RGBA16F; // DISTANT HORIZONS + VANILLA MIXED DEPTHs
const int colortex13Format = RGBA16F; // low res VL (composite5->composite15)
const int colortex14Format = RGBA16; // rg = SSAO and SS-SSS. a = skylightmap for translucents.
const int colortex14Format = RGBA16; // rg = SSAO and SS-SSS. a = skylightmap for translucents.
const int colortex15Format = RGBA8; // flat normals and vanilla AO
*/
#ifdef SCREENSHOT_MODE
/*
const int colortex5Format = RGBA32F; //TAA buffer (everything)
*/
#else
/*
const int colortex5Format = RGBA16F; //TAA buffer (everything)
*/
#endif
//no need to clear the buffers, saves a few fps
const bool colortex0Clear = false;
const bool colortex1Clear = false;
@@ -38,18 +47,6 @@ const bool colortex13Clear = false;
const bool colortex14Clear = true;
const bool colortex15Clear = false;
#ifdef SCREENSHOT_MODE
/*
const int colortex5Format = RGBA32F; //TAA buffer (everything)
*/
#else
/*
const int colortex5Format = RGBA16F; //TAA buffer (everything)
*/
#endif
varying vec2 texcoord;
flat varying float tempOffsets;
uniform sampler2D colortex0;
+19 -15
View File
@@ -61,6 +61,15 @@ uniform ivec2 eyeBrightnessSmooth;
uniform float caveDetection;
uniform int isEyeInWater;
uniform float dayChangeSmooth;
uniform bool worldTimeChangeCheck;
uniform int hideGUI;
uniform float near;
uniform float dhFarPlane;
uniform float dhNearPlane;
vec4 lightCol = vec4(lightSourceColor, float(sunElevation > 1e-5)*2-1.);
#include "/lib/util.glsl"
@@ -106,9 +115,6 @@ vec3 toScreenSpace(vec3 p) {
return viewPos.xyz / viewPos.w;
}
uniform float near;
uniform float dhFarPlane;
uniform float dhNearPlane;
#include "/lib/DistantHorizons_projections.glsl"
@@ -144,6 +150,10 @@ float linearizeDepthFast(const in float depth, const in float near, const in flo
float invLinZ (float lindepth){
return -((2.0*near/lindepth)-far-near)/(far-near);
}
// #define LIGHTNINGFLASH_VL
#include "/lib/lightning_stuff.glsl"
#ifdef OVERWORLD_SHADER
// uniform sampler2D colortex4;
@@ -161,7 +171,6 @@ float invLinZ (float lindepth){
// #define TEST
#define TIMEOFDAYFOG
#include "/lib/lightning_stuff.glsl"
#include "/lib/scene_controller.glsl"
@@ -195,10 +204,6 @@ vec2 R2_samples(float n){
return fract(alpha * n);
}
uniform float dayChangeSmooth;
uniform bool worldTimeChangeCheck;
uniform int hideGUI;
void main() {
@@ -219,7 +224,7 @@ float mixhistory = 0.06;
if (gl_FragCoord.x > 1 && gl_FragCoord.x < 4 && gl_FragCoord.y > 1 && gl_FragCoord.y < 4){
mixhistory = 10.0 * frameTime;
gl_FragData[0].rgb = writeSceneControllerParameters(gl_FragCoord.xy, parameters.smallCumulus, parameters.largeCumulus, parameters.altostratus, parameters.fog);
gl_FragData[0].rgb = writeSceneControllerParameters(gl_FragCoord.xy, parameters.smallCumulus, parameters.largeCumulus, parameters.altostratus, parameters.fog, parameters.localFog, parameters.localFogColor);
}
///////////////////////////////
@@ -298,11 +303,11 @@ if (gl_FragCoord.x > 18. && gl_FragCoord.y > 1. && gl_FragCoord.x < 18+257){
vec3 mC = vec3(fog_coefficientMieR*1e-6, fog_coefficientMieG*1e-6, fog_coefficientMieB*1e-6);
sky = calculateAtmosphere((averageSkyCol*4000.0/2.0), viewVector, vec3(0.0,1.0,0.0), WsunVec, -WsunVec, planetSphere, skyAbsorb, 10, blueNoise());
sky = calculateAtmosphere(averageSkyCol*2000.0, viewVector, vec3(0.0,1.0,0.0), WsunVec, -WsunVec, planetSphere, skyAbsorb, 10, blueNoise());
// fade atmosphere conditions for rain away when you pass above the cloud plane.
// float heightRelativeToClouds = clamp(1.0 - max(eyeAltitude - CloudLayer0_height,0.0) / 200.0 ,0.0,1.0);
// if(rainStrength > 0.0) sky = mix(sky, 3.0 + averageSkyCol*4000 * (skyAbsorb*0.7+0.3), clamp(1.0 - exp(pow(clamp(-viewVector.y+0.9,0.0,1.0),2) * -5.0),0.0,1.0) * heightRelativeToClouds * rainStrength);
float heightRelativeToClouds = clamp(1.0 - max(eyeAltitude - CloudLayer0_height,0.0) / 200.0 ,0.0,1.0);
if(rainStrength > 0.0) sky = mix(sky, averageSkyCol * 2000.0 * (skyAbsorb*0.7+0.3), clamp(1.0 - exp(pow(clamp(-viewVector.y+0.9,0.0,1.0),2) * -5.0),0.0,1.0) * heightRelativeToClouds * rainStrength);
#ifdef AEROCHROME_MODE
sky *= vec3(0.0, 0.18, 0.35);
@@ -316,6 +321,7 @@ if (gl_FragCoord.x > 18. && gl_FragCoord.y > 1. && gl_FragCoord.x < 18+257){
/// --- Sky + clouds + fog
if (gl_FragCoord.x > 18.+257. && gl_FragCoord.y > 1. && gl_FragCoord.x < 18+257+257.){
vec2 p = clamp(floor(gl_FragCoord.xy-vec2(18.+257,1.))/256.+tempOffsets/256.,0.0,1.0);
vec3 viewVector = cartToSphere(p);
vec3 viewPos = mat3(gbufferModelView)*viewVector*1024.0;
@@ -339,9 +345,7 @@ if (gl_FragCoord.x > 18.+257. && gl_FragCoord.y > 1. && gl_FragCoord.x < 18+257+
float cloudPlaneDistance = 0.0;
vec4 volumetricClouds = GetVolumetricClouds(viewPos, vec2(noise, 1.0-noise), WsunVec, suncol*2.5, skyGroundCol/30.0, cloudPlaneDistance);
float atmosphereAlpha = 1.0;
vec4 volumetricFog = GetVolumetricFog(viewPos, WsunVec, vec2(noise, 1.0-noise), suncol*2.5, skyGroundCol/30.0, averageSkyCol_Clouds*5.0, atmosphereAlpha, volumetricClouds.rgb, cloudPlaneDistance);
vec4 volumetricFog = GetVolumetricFog(viewPos,vec2(noise, 1.0-noise), WsunVec, suncol*2.5, skyGroundCol/30.0, averageSkyCol_Clouds*5.0, cloudPlaneDistance);
sky = sky * volumetricClouds.a + volumetricClouds.rgb / 5.0;
sky = sky * volumetricFog.a + volumetricFog.rgb / 5.0;
+6 -4
View File
@@ -123,19 +123,20 @@ void main() {
// }
float maxIT = 20.0;
for (int i = 0; i < int(maxIT); i++) {
vec2 ij = R2_samples(((i*50+1)%1000)*int(maxIT)+i) ;//* vec2(0.3183,0.9000);
vec2 ij = R2_samples(((i*50+1)%1000)*int(maxIT)+i) * vec2(1.0,0.9000);
vec3 pos = normalize(rodSample(ij)) * vec3(1.0,0.5,1.0) + vec3(0.0,0.5,0.0);
averageSkyCol_Clouds += skyCloudsFromTex(pos,colortex4).rgb/maxIT/150.0;
averageSkyCol += 1.5 * skyFromTex(pos,colortex4).rgb/maxIT/150.0;
}
vec3 minimumlight = vec3(1.0) * 0.01 * MIN_LIGHT_AMOUNT + nightVision * 0.05;
// vec3 minimumlight = vec3(1.0) * 0.01 * MIN_LIGHT_AMOUNT + nightVision * 0.05;
// vec3 minimumlight = vec3(1.0) * 0.01 * MIN_LIGHT_AMOUNT + nightVision * 0.05;
// luminance based reinhard is useful ouside of tonemapping too.
averageSkyCol_Clouds = 1.5 * (averageSkyCol_Clouds / (1.0+luma(averageSkyCol_Clouds)*0.2));
averageSkyCol = max(averageSkyCol * PLANET_GROUND_BRIGHTNESS,0.0) + minimumlight;
averageSkyCol = max(averageSkyCol * PLANET_GROUND_BRIGHTNESS,0.0) ;
#ifdef USE_CUSTOM_SKY_GROUND_LIGHTING_COLORS
averageSkyCol = luma(averageSkyCol) * vec3(SKY_GROUND_R,SKY_GROUND_G,SKY_GROUND_B);
@@ -175,7 +176,8 @@ void main() {
parameters.smallCumulus.x, parameters.smallCumulus.y,
parameters.largeCumulus.x, parameters.largeCumulus.y,
parameters.altostratus.x, parameters.altostratus.y,
parameters.fog.x, parameters.fog.y
parameters.fog.x, parameters.fog.y,
parameters.localFog.x, parameters.localFog.y, parameters.localFogColor.rgb
);
//////////////////////////////
+1 -1
View File
@@ -29,7 +29,7 @@ void main() {
vec2 texcoord = gl_FragCoord.xy * texelSize;
gl_FragData[0] = texelFetch2D(colortex1, ivec2(gl_FragCoord.xy),0);
gl_FragData[0] = texelFetch2D(colortex1, ivec2(gl_FragCoord.xy), 0);
if(
texelFetch2D(depthtex0, ivec2(gl_FragCoord.xy), 0).x < 1.0
@@ -1,3 +1,4 @@
#include "/lib/settings.glsl"
// #if defined END_SHADER || defined NETHER_SHADER
#undef IS_LPV_ENABLED
@@ -93,9 +94,8 @@ float linearizeDepthFast(const in float depth, const in float near, const in flo
#include "/lib/diffuse_lighting.glsl"
#define TIMEOFDAYFOG
#include "/lib/lightning_stuff.glsl"
// #include "/lib/lightning_stuff.glsl"
#define CLOUDS_INTERSECT_TERRAIN
// #define CLOUDSHADOWSONLY
#include "/lib/volumetricClouds.glsl"
#include "/lib/climate_settings.glsl"
@@ -257,14 +257,17 @@ vec2 decodeVec2(float a){
void main() {
/* RENDERTARGETS:13 */
gl_FragData[0] = vec4(0,0,0,1);
vec2 tc = floor(gl_FragCoord.xy)/VL_RENDER_RESOLUTION*texelSize+0.5*texelSize;
vec2 texcoord = floor(gl_FragCoord.xy - 0.5)/VL_RENDERING_RESOLUTION_SCALE;
vec2 texcoord_norm = texcoord*texelSize;
ivec2 texcoord_cast = ivec2(texcoord);
// vec2 tc = floor(gl_FragCoord.xy)/VL_RENDERING_RESOLUTION_SCALE*texelSize + 0.5*texelSize;
float alpha = texture2D(colortex7,tc).a ;
float blendedAlpha = texture2D(colortex2, tc).a;
float alpha = texelFetch2D(colortex7,texcoord_cast,0).a ;
float blendedAlpha = texelFetch2D(colortex2, texcoord_cast,0).a;
bool iswater = alpha > 0.99;
@@ -277,36 +280,33 @@ void main() {
float noise_1 = R2_dither();
float noise_2 = blueNoise();
float z0 = texelFetch2D(depthtex0, ivec2((floor(gl_FragCoord.xy - 0.5)/VL_RENDER_RESOLUTION*texelSize)/texelSize), 0 ).x;
float z0 = texelFetch2D(depthtex0, texcoord_cast, 0 ).x;
#ifdef DISTANT_HORIZONS
float DH_z0 = texelFetch2D(dhDepthTex, ivec2((floor(gl_FragCoord.xy - 0.5)/VL_RENDER_RESOLUTION*texelSize)/texelSize), 0 ).x;//texture2D(dhDepthTex,tc).x;
float DH_z0 = texelFetch2D(dhDepthTex, texcoord_cast, 0 ).x;//texture2D(dhDepthTex,tc).x;
#else
float DH_z0 = 0.0;
#endif
float z = texelFetch2D(depthtex1, ivec2((floor(gl_FragCoord.xy - 0.5)/VL_RENDER_RESOLUTION*texelSize)/texelSize), 0 ).x;
float z = texelFetch2D(depthtex1, texcoord_cast, 0 ).x;
#ifdef DISTANT_HORIZONS
// float DH_z = texture2D(dhDepthTex1,tc).x;
float DH_z = texelFetch2D(dhDepthTex1, ivec2((floor(gl_FragCoord.xy - 0.5)/VL_RENDER_RESOLUTION*texelSize)/texelSize), 0 ).x;//texture2D(dhDepthTex,tc).x;
float DH_z = texelFetch2D(dhDepthTex1, texcoord_cast, 0 ).x;
#else
float DH_z = 0.0;
#endif
// vec3 lightningColor = (lightningEffect / 3) * (max(eyeBrightnessSmooth.y,0)/240.);
float dirtAmount = Dirt_Amount ;
// float dirtAmount = Dirt_Amount + 0.01;
float dirtAmount = Dirt_Amount;
vec3 waterEpsilon = vec3(Water_Absorb_R, Water_Absorb_G, Water_Absorb_B);
vec3 dirtEpsilon = vec3(Dirt_Absorb_R, Dirt_Absorb_G, Dirt_Absorb_B);
vec3 totEpsilon = vec3(Water_Absorb_R, Water_Absorb_G, Water_Absorb_B);//dirtEpsilon * dirtAmount + waterEpsilon;
vec3 totEpsilon = vec3(Water_Absorb_R, Water_Absorb_G, Water_Absorb_B);
vec3 scatterCoef = dirtAmount * vec3(Dirt_Scatter_R, Dirt_Scatter_G, Dirt_Scatter_B) / 3.14;
#ifdef BIOME_TINT_WATER
// yoink the biome tint written in this buffer for water only.
if(iswater){
vec2 data = texelFetch2D(colortex11,ivec2(tc/texelSize),0).gb;
vec2 data = texelFetch2D(colortex11,texcoord_cast,0).gb;
vec3 wateralbedo = vec3(decodeVec2(data.x),decodeVec2(data.y).r);
scatterCoef = dirtAmount * normalize(wateralbedo.rgb+1e-7) / 3.14;
}
@@ -316,21 +316,20 @@ void main() {
vec3 indirectLightColor = averageSkyCol / 1200.0;
vec3 indirectLightColor_dynamic = averageSkyCol_Clouds / 1200.0;
vec3 viewPos1 = toScreenSpace_DH(tc/RENDER_SCALE, z, DH_z);
vec3 viewPos0 = toScreenSpace_DH(tc/RENDER_SCALE, z0, DH_z0);
vec3 viewPos1 = toScreenSpace_DH(texcoord_norm/RENDER_SCALE, z, DH_z);
vec3 viewPos0 = toScreenSpace_DH(texcoord_norm/RENDER_SCALE, z0, DH_z0);
vec3 playerPos = mat3(gbufferModelViewInverse) * viewPos1;
vec3 playerPos0 = mat3(gbufferModelViewInverse) * viewPos0;
#ifdef OVERWORLD_SHADER
vec2 lightmap = decodeVec2(texelFetch2D(colortex14,ivec2(tc/texelSize),0).x);
vec2 lightmap = decodeVec2(texelFetch2D(colortex14,texcoord_cast,0).x);
#ifdef DISTANT_HORIZONS
if(z >= 1.0) lightmap.y = 0.99;
#endif
#else
vec2 lightmap = decodeVec2(texelFetch2D(colortex14,ivec2(tc/texelSize),0).a);
vec2 lightmap = decodeVec2(texelFetch2D(colortex14,texcoord_cast,0).a);
lightmap.y = 1.0;
#endif
@@ -340,19 +339,17 @@ void main() {
indirectLightColor_dynamic *= ambient_brightness * lightmap.y*lightmap.y;
indirectLightColor_dynamic += MIN_LIGHT_AMOUNT * 0.02 * 0.2 + nightVision*0.02;
// indirectLightColor_dynamic += MIN_LIGHT_AMOUNT * 0.02 * 0.2 + nightVision*0.02;
indirectLightColor_dynamic += vec3(TORCH_R,TORCH_G,TORCH_B) * pow(1.0-sqrt(1.0-clamp(lightmap.x,0.0,1.0)),2.0) * TORCH_AMOUNT;
vec4 finalVolumetrics = vec4(0.0,0.0,0.0,1.0);
float cloudPlaneDistance = 0.0;
#ifdef OVERWORLD_SHADER
float cloudPlaneDistance = 0.0;
vec4 VolumetricClouds = GetVolumetricClouds(viewPos1, vec2(noise_1, noise_2), WsunVec, directLightColor, indirectLightColor, cloudPlaneDistance);
vec4 VolumetricFog = GetVolumetricFog(viewPos1, vec2(noise_1, noise_2), WsunVec, directLightColor, indirectLightColor, indirectLightColor_dynamic, cloudPlaneDistance);
float atmosphereAlpha = 1.0;
vec4 VolumetricFog = GetVolumetricFog(viewPos1, WsunVec, vec2(noise_1, noise_2), directLightColor, indirectLightColor, indirectLightColor_dynamic, atmosphereAlpha, VolumetricClouds.rgb,cloudPlaneDistance);
finalVolumetrics.rgb += VolumetricClouds.rgb;
finalVolumetrics.a *= VolumetricClouds.a;
#endif
@@ -40,7 +40,7 @@ void main() {
gl_Position = ftransform();
// gl_Position.xy = (gl_Position.xy*0.5+0.5)*0.51*2.0-1.0;
gl_Position.xy = (gl_Position.xy*0.5+0.5)*(0.01+VL_RENDER_RESOLUTION)*2.0-1.0;
gl_Position.xy = (gl_Position.xy*0.5+0.5)*(0.01+VL_RENDERING_RESOLUTION_SCALE)*2.0-1.0;
// #if TAA_MODE > 0
// tempOffsets = HaltonSeq2(frameCounter%10000);
@@ -53,7 +53,9 @@ void main() {
averageSkyCol = texelFetch2D(colortex4,ivec2(1,37),0).rgb;
averageSkyCol_Clouds = texelFetch2D(colortex4,ivec2(0,37),0).rgb;
readSceneControllerParameters(colortex4, parameters.smallCumulus, parameters.largeCumulus, parameters.altostratus, parameters.fog);
#define READ_SCENE_CONTROLLER_PARAMETERS
#include "/lib/scene_controller.glsl"
// readSceneControllerParameters(colortex4, parameters.smallCumulus, parameters.largeCumulus, parameters.altostratus, parameters.fog);
#endif
#ifdef NETHER_SHADER
+2 -1
View File
@@ -492,7 +492,8 @@ void main() {
}
if (blockId == BLOCK_END_ROD || blockId == ITEM_END_ROD) {
lightColor = vec3(0.957, 0.929, 0.875);
// lightColor = vec3(0.957, 0.929, 0.875);
lightColor = vec3(0.8, 0.3, 1.0);
lightRange = 14.0;
}
+219 -117
View File
@@ -164,7 +164,8 @@ screen.Ambient_light = Ambient Light
screen.Fog = Fog Settings
option.VL_RENDER_RESOLUTION = Fog Resolution Scaling
option.VL_RENDERING_RESOLUTION_SCALE = Volumetrics Render Scale
suffix.VL_RENDERING_RESOLUTION_SCALE = x
option.VL_SAMPLES = Fog Samples
option.BLOOMY_FOG = Bloomy Fog Multiplier
option.Haze_amount = Atmospheric Haze Density
@@ -172,7 +173,9 @@ screen.Fog = Fog Settings
option.BorderFog = Chunk Border Fog
screen.TOD_fog = Time Of Day Fog
option.TOD_Fog_mult = Fog Density Multiplier
option.TOD_FOG_AMOUNT = Fog Amount
value.TOD_FOG_AMOUNT.0 = NONE
suffix.TOD_FOG_AMOUNT = %
option.Morning_Uniform_Fog = Morning Fog Density
option.Noon_Uniform_Fog = Noon Fog Density
option.Evening_Uniform_Fog = Evening Fog Density
@@ -196,130 +199,229 @@ screen.Fog = Fog Settings
option.NETHER_PLUME_DENSITY = Nether Smoke Density
screen.Clouds = Cloud Settings
option.VOLUMETRIC_CLOUDS = Volumetric Clouds
option.CLOUDS_QUALITY = Cloud Resolution Scaling
option.CLOUDS_SHADOWS = Cloud Shadows
option.SMALL_CUMULUS_LABEL = Small Cumulus Layer
option.LARGE_CUMULUS_LABEL = Large Cumulus Layer
option.ALTOSTRATUS_LABEL = Altostratus Layer
value.SMALL_CUMULUS_LABEL.0 = §f↓
value.LARGE_CUMULUS_LABEL.0 = §f↓
value.ALTOSTRATUS_LABEL.0 = §f↓
option.CLOUD_SHADOW_AMOUNT = Cloud Shadow Visibilty
value.CLOUD_SHADOW_AMOUNT.0 = OFF
suffix.CLOUD_SHADOW_AMOUNT = %
option.Cloud_Speed = Cloud Speed Multiplier
option.Rain_coverage = Coverage When Raining
option.Daily_Weather = Daily Weather
option.CloudLayer0 = Small Cumulus Clouds
option.CloudLayer0_coverage = Coverage
option.CloudLayer0_density = Density
option.CloudLayer0_height = Height
option.CloudLayer0 = Small Cumulus Clouds
option.CloudLayer1 = Large Cumulus Clouds
option.CloudLayer2 = Altostratus Clouds
screen.CloudLayer0_config = Small Cumulus Config §cTEMPORARY SUBMENU§r
screen.CloudLayer1_config = Large Cumulus Config §cTEMPORARY SUBMENU§r
screen.CloudLayer2_config = Altostratus Config §cTEMPORARY SUBMENU§r
option.CloudLayer1 = Large Cumulus Clouds
option.CloudLayer1_coverage = Coverage
option.CloudLayer1_density = Density
option.CloudLayer1_height = Height
option.CloudLayer0_height = Altitude
option.CloudLayer0_scale = Scale
option.CloudLayer0_tallness = Tallness
option.CloudLayer1_height = Altitude
option.CloudLayer1_scale = Scale
option.CloudLayer1_tallness = Tallness
option.CloudLayer2_height = Altitude
option.CloudLayer2_scale = Scale
option.CloudLayer2_tallness = Tallness
screen.DAILY_WEATHER = Daily Weather Presets
option.USE_CUSTOM_DAILY_WEATHER_PROFILE = Daily Weather Mode
value.USE_CUSTOM_DAILY_WEATHER_PROFILE.0 = Hardcoded
value.USE_CUSTOM_DAILY_WEATHER_PROFILE.1 =§f↓§r Only Use Preset 1 §f↓§r
value.USE_CUSTOM_DAILY_WEATHER_PROFILE.2 =§f↓§r Use Presets 1 to 2 §f↓§r
value.USE_CUSTOM_DAILY_WEATHER_PROFILE.3 =§f↓§r Use Presets 1 to 3 §f↓§r
value.USE_CUSTOM_DAILY_WEATHER_PROFILE.4 =§f↓§r Use Presets 1 to 4 §f↓§r
value.USE_CUSTOM_DAILY_WEATHER_PROFILE.5 =§f↓§r Use Presets 1 to 5 §f↓§r
value.USE_CUSTOM_DAILY_WEATHER_PROFILE.6 =§f↓§r Use Presets 1 to 6 §f↓§r
screen.DAILY_WEATHER_PROFILE_1 = Preset 1
screen.DAILY_WEATHER_PROFILE_2 = Preset 2
screen.DAILY_WEATHER_PROFILE_3 = Preset 3
screen.DAILY_WEATHER_PROFILE_4 = Preset 4
screen.DAILY_WEATHER_PROFILE_5 = Preset 5
screen.DAILY_WEATHER_PROFILE_6 = Preset 6
option.CloudLayer2 = Altostratus Clouds
option.CloudLayer2_coverage = Coverage
option.CloudLayer2_density = Density
option.CloudLayer2_height = Height
screen.RAINY_WEATHER = Rainy Weather Presets
option.USE_CUSTOM_DAILY_RAIN_PROFILE = Rainy Weather Mode
value.USE_CUSTOM_DAILY_RAIN_PROFILE.0 = Hardcoded
value.USE_CUSTOM_DAILY_RAIN_PROFILE.1 =§f↓§r Only Use Preset 1 §f↓§r
value.USE_CUSTOM_DAILY_RAIN_PROFILE.2 =§f↓§r Use Presets 1 to 2 §f↓§r
value.USE_CUSTOM_DAILY_RAIN_PROFILE.3 =§f↓§r Use Presets 1 to 3 §f↓§r
value.USE_CUSTOM_DAILY_RAIN_PROFILE.4 =§f↓§r Use Presets 1 to 4 §f↓§r
value.USE_CUSTOM_DAILY_RAIN_PROFILE.5 =§f↓§r Use Presets 1 to 5 §f↓§r
value.USE_CUSTOM_DAILY_RAIN_PROFILE.6 =§f↓§r Use Presets 1 to 6 §f↓§r
screen.RAINY_WEATHER_PROFILE_1 = Preset 1
screen.RAINY_WEATHER_PROFILE_2 = Preset 2
screen.RAINY_WEATHER_PROFILE_3 = Preset 3
screen.RAINY_WEATHER_PROFILE_4 = Preset 4
screen.RAINY_WEATHER_PROFILE_5 = Preset 5
screen.RAINY_WEATHER_PROFILE_6 = Preset 6
screen.DAILY_WEATHER = Daily Weather Settings
option.CHOOSE_RANDOM_WEATHER_PROFILE = Random Weather Profile
screen.DAY0_WEATHER = Day 0 Weather Profile
option.DAY0_l0_coverage = Small Cumulus coverage
option.DAY0_l0_density = Small Cumulus Density
option.DAY0_l1_coverage = Large Cumulus Coverage
option.DAY0_l1_density = Large Cumulus Density
option.DAY0_l2_coverage = Altostratus Clouds Coverage
option.DAY0_l2_density = Altostratus Clouds Density
option.DAY0_ufog_density = Uniform Fog Density
option.DAY0_cfog_density = Cloudy Fog Density
screen.DAY1_WEATHER = Day 1 Weather Profile
option.DAY1_l0_coverage = Small Cumulus coverage
option.DAY1_l0_density = Small Cumulus Density
option.DAY1_l1_coverage = Large Cumulus Coverage
option.DAY1_l1_density = Large Cumulus Density
option.DAY1_l2_coverage = Altostratus Clouds Coverage
option.DAY1_l2_density = Altostratus Clouds Density
option.DAY1_ufog_density = Uniform Fog Density
option.DAY1_cfog_density = Cloudy Fog Density
screen.DAY2_WEATHER = Day 2 Weather Profile
option.DAY2_l0_coverage = Small Cumulus coverage
option.DAY2_l0_density = Small Cumulus Density
option.DAY2_l1_coverage = Large Cumulus Coverage
option.DAY2_l1_density = Large Cumulus Density
option.DAY2_l2_coverage = Altostratus Clouds Coverage
option.DAY2_l2_density = Altostratus Clouds Density
option.DAY2_ufog_density = Uniform Fog Density
option.DAY2_cfog_density = Cloudy Fog Density
option.DAILY_PROFILE_1_LAYER0_COVERAGE = Coverage
option.DAILY_PROFILE_1_LAYER0_DENSITY = Density
option.DAILY_PROFILE_1_LAYER1_COVERAGE = Coverage
option.DAILY_PROFILE_1_LAYER1_DENSITY = Density
option.DAILY_PROFILE_1_LAYER2_COVERAGE = Coverage
option.DAILY_PROFILE_1_LAYER2_DENSITY = Density
screen.DAY3_WEATHER = Day 3 Weather Profile
option.DAY3_l0_coverage = Small Cumulus coverage
option.DAY3_l0_density = Small Cumulus Density
option.DAY3_l1_coverage = Large Cumulus Coverage
option.DAY3_l1_density = Large Cumulus Density
option.DAY3_l2_coverage = Altostratus Clouds Coverage
option.DAY3_l2_density = Altostratus Clouds Density
option.DAY3_ufog_density = Uniform Fog Density
option.DAY3_cfog_density = Cloudy Fog Density
option.DAILY_PROFILE_2_LAYER0_COVERAGE = Coverage
option.DAILY_PROFILE_2_LAYER0_DENSITY = Density
option.DAILY_PROFILE_2_LAYER1_COVERAGE = Coverage
option.DAILY_PROFILE_2_LAYER1_DENSITY = Density
option.DAILY_PROFILE_2_LAYER2_COVERAGE = Coverage
option.DAILY_PROFILE_2_LAYER2_DENSITY = Density
screen.DAY4_WEATHER = Day 4 Weather Profile
option.DAY4_l0_coverage = Small Cumulus coverage
option.DAY4_l0_density = Small Cumulus Density
option.DAY4_l1_coverage = Large Cumulus Coverage
option.DAY4_l1_density = Large Cumulus Density
option.DAY4_l2_coverage = Altostratus Clouds Coverage
option.DAY4_l2_density = Altostratus Clouds Density
option.DAY4_ufog_density = Uniform Fog Density
option.DAY4_cfog_density = Cloudy Fog Density
option.DAILY_PROFILE_3_LAYER0_COVERAGE = Coverage
option.DAILY_PROFILE_3_LAYER0_DENSITY = Density
option.DAILY_PROFILE_3_LAYER1_COVERAGE = Coverage
option.DAILY_PROFILE_3_LAYER1_DENSITY = Density
option.DAILY_PROFILE_3_LAYER2_COVERAGE = Coverage
option.DAILY_PROFILE_3_LAYER2_DENSITY = Density
screen.DAY5_WEATHER = Day 5 Weather Profile
option.DAY5_l0_coverage = Small Cumulus coverage
option.DAY5_l0_density = Small Cumulus Density
option.DAY5_l1_coverage = Large Cumulus Coverage
option.DAY5_l1_density = Large Cumulus Density
option.DAY5_l2_coverage = Altostratus Clouds Coverage
option.DAY5_l2_density = Altostratus Clouds Density
option.DAY5_ufog_density = Uniform Fog Density
option.DAY5_cfog_density = Cloudy Fog Density
option.DAILY_PROFILE_4_LAYER0_COVERAGE = Coverage
option.DAILY_PROFILE_4_LAYER0_DENSITY = Density
option.DAILY_PROFILE_4_LAYER1_COVERAGE = Coverage
option.DAILY_PROFILE_4_LAYER1_DENSITY = Density
option.DAILY_PROFILE_4_LAYER2_COVERAGE = Coverage
option.DAILY_PROFILE_4_LAYER2_DENSITY = Density
screen.DAY6_WEATHER = Day 6 Weather Profile
option.DAY6_l0_coverage = Small Cumulus coverage
option.DAY6_l0_density = Small Cumulus Density
option.DAY6_l1_coverage = Large Cumulus Coverage
option.DAY6_l1_density = Large Cumulus Density
option.DAY6_l2_coverage = Altostratus Clouds Coverage
option.DAY6_l2_density = Altostratus Clouds Density
option.DAY6_ufog_density = Uniform Fog Density
option.DAY6_cfog_density = Cloudy Fog Density
option.DAILY_PROFILE_5_LAYER0_COVERAGE = Coverage
option.DAILY_PROFILE_5_LAYER0_DENSITY = Density
option.DAILY_PROFILE_5_LAYER1_COVERAGE = Coverage
option.DAILY_PROFILE_5_LAYER1_DENSITY = Density
option.DAILY_PROFILE_5_LAYER2_COVERAGE = Coverage
option.DAILY_PROFILE_5_LAYER2_DENSITY = Density
screen.DAY7_WEATHER = Day 7 Weather Profile
option.DAY7_l0_coverage = Small Cumulus coverage
option.DAY7_l0_density = Small Cumulus Density
option.DAY7_l1_coverage = Large Cumulus Coverage
option.DAY7_l1_density = Large Cumulus Density
option.DAY7_l2_coverage = Altostratus Clouds Coverage
option.DAY7_l2_density = Altostratus Clouds Density
option.DAY7_ufog_density = Uniform Fog Density
option.DAY7_cfog_density = Cloudy Fog Density
option.DAILY_PROFILE_6_LAYER0_COVERAGE = Coverage
option.DAILY_PROFILE_6_LAYER0_DENSITY = Density
option.DAILY_PROFILE_6_LAYER1_COVERAGE = Coverage
option.DAILY_PROFILE_6_LAYER1_DENSITY = Density
option.DAILY_PROFILE_6_LAYER2_COVERAGE = Coverage
option.DAILY_PROFILE_6_LAYER2_DENSITY = Density
screen.DAY8_WEATHER = Day 8 Weather Profile
option.DAY8_l0_coverage = Small Cumulus coverage
option.DAY8_l0_density = Small Cumulus Density
option.DAY8_l1_coverage = Large Cumulus Coverage
option.DAY8_l1_density = Large Cumulus Density
option.DAY8_l2_coverage = Altostratus Clouds Coverage
option.DAY8_l2_density = Altostratus Clouds Density
option.DAY8_ufog_density = Uniform Fog Density
option.DAY8_cfog_density = Cloudy Fog Density
option.RAINY_PROFILE_1_LAYER0_COVERAGE = Coverage
option.RAINY_PROFILE_1_LAYER0_DENSITY = Density
option.RAINY_PROFILE_1_LAYER1_COVERAGE = Coverage
option.RAINY_PROFILE_1_LAYER1_DENSITY = Density
option.RAINY_PROFILE_1_LAYER2_COVERAGE = Coverage
option.RAINY_PROFILE_1_LAYER2_DENSITY = Density
screen.DAY9_WEATHER = Day 9 Weather Profile
option.DAY9_l0_coverage = Small Cumulus coverage
option.DAY9_l0_density = Small Cumulus Density
option.DAY9_l1_coverage = Large Cumulus Coverage
option.DAY9_l1_density = Large Cumulus Density
option.DAY9_l2_coverage = Altostratus Clouds Coverage
option.DAY9_l2_density = Altostratus Clouds Density
option.DAY9_ufog_density = Uniform Fog Density
option.DAY9_cfog_density = Cloudy Fog Density
option.RAINY_PROFILE_2_LAYER0_COVERAGE = Coverage
option.RAINY_PROFILE_2_LAYER0_DENSITY = Density
option.RAINY_PROFILE_2_LAYER1_COVERAGE = Coverage
option.RAINY_PROFILE_2_LAYER1_DENSITY = Density
option.RAINY_PROFILE_2_LAYER2_COVERAGE = Coverage
option.RAINY_PROFILE_2_LAYER2_DENSITY = Density
option.RAINY_PROFILE_3_LAYER0_COVERAGE = Coverage
option.RAINY_PROFILE_3_LAYER0_DENSITY = Density
option.RAINY_PROFILE_3_LAYER1_COVERAGE = Coverage
option.RAINY_PROFILE_3_LAYER1_DENSITY = Density
option.RAINY_PROFILE_3_LAYER2_COVERAGE = Coverage
option.RAINY_PROFILE_3_LAYER2_DENSITY = Density
option.RAINY_PROFILE_4_LAYER0_COVERAGE = Coverage
option.RAINY_PROFILE_4_LAYER0_DENSITY = Density
option.RAINY_PROFILE_4_LAYER1_COVERAGE = Coverage
option.RAINY_PROFILE_4_LAYER1_DENSITY = Density
option.RAINY_PROFILE_4_LAYER2_COVERAGE = Coverage
option.RAINY_PROFILE_4_LAYER2_DENSITY = Density
option.RAINY_PROFILE_5_LAYER0_COVERAGE = Coverage
option.RAINY_PROFILE_5_LAYER0_DENSITY = Density
option.RAINY_PROFILE_5_LAYER1_COVERAGE = Coverage
option.RAINY_PROFILE_5_LAYER1_DENSITY = Density
option.RAINY_PROFILE_5_LAYER2_COVERAGE = Coverage
option.RAINY_PROFILE_5_LAYER2_DENSITY = Density
option.RAINY_PROFILE_6_LAYER0_COVERAGE = Coverage
option.RAINY_PROFILE_6_LAYER0_DENSITY = Density
option.RAINY_PROFILE_6_LAYER1_COVERAGE = Coverage
option.RAINY_PROFILE_6_LAYER1_DENSITY = Density
option.RAINY_PROFILE_6_LAYER2_COVERAGE = Coverage
option.RAINY_PROFILE_6_LAYER2_DENSITY = Density
option.USE_CUSTOM_HOT_BIOME_RAIN_PROFILE = Hot Biome Rainy Weather Mode
value.USE_CUSTOM_HOT_BIOME_RAIN_PROFILE.-1 = OFF
value.USE_CUSTOM_HOT_BIOME_RAIN_PROFILE.0 = Hardcoded
value.USE_CUSTOM_HOT_BIOME_RAIN_PROFILE.1 = §f↓§r Only Use Preset 1 §f↓§r
value.USE_CUSTOM_HOT_BIOME_RAIN_PROFILE.2 = §f↓§r Use Presets 1 to 2 §f↓§r
value.USE_CUSTOM_HOT_BIOME_RAIN_PROFILE.3 = §f↓§r Use Presets 1 to 3 §f↓§r
screen.HOT_BIOME_RAINY_WEATHER_PROFILE_1 = Preset 1
screen.HOT_BIOME_RAINY_WEATHER_PROFILE_2 = Preset 2
screen.HOT_BIOME_RAINY_WEATHER_PROFILE_3 = Preset 3
option.USE_CUSTOM_COLD_BIOME_RAIN_PROFILE = Cold Biome Rainy Weather Mode
value.USE_CUSTOM_COLD_BIOME_RAIN_PROFILE.-1 = OFF
value.USE_CUSTOM_COLD_BIOME_RAIN_PROFILE.0 = Hardcoded
value.USE_CUSTOM_COLD_BIOME_RAIN_PROFILE.1 = §f↓§r Only Use Preset 1 §f↓§r
value.USE_CUSTOM_COLD_BIOME_RAIN_PROFILE.2 = §f↓§r Use Presets 1 to 2 §f↓§r
value.USE_CUSTOM_COLD_BIOME_RAIN_PROFILE.3 = §f↓§r Use Presets 1 to 3 §f↓§r
screen.COLD_BIOME_RAINY_WEATHER_PROFILE_1 = Preset 1
screen.COLD_BIOME_RAINY_WEATHER_PROFILE_2 = Preset 2
screen.COLD_BIOME_RAINY_WEATHER_PROFILE_3 = Preset 3
option.HOT_BIOME_RAINY_PROFILE_1_UNIFORM_FOG_DENSITY = Uniform Fog Density
option.HOT_BIOME_RAINY_PROFILE_1_CLUMPY_FOG_DENSITY = Clumpy Fog Density
option.HOT_BIOME_RAINY_PROFILE_1_FOG_COLOR_R = Fog Color Red
option.HOT_BIOME_RAINY_PROFILE_1_FOG_COLOR_G = Fog Color Green
option.HOT_BIOME_RAINY_PROFILE_1_FOG_COLOR_B = Fog Color Blue
option.HOT_BIOME_RAINY_PROFILE_2_UNIFORM_FOG_DENSITY = Uniform Fog Density
option.HOT_BIOME_RAINY_PROFILE_2_CLUMPY_FOG_DENSITY = Clumpy Fog Density
option.HOT_BIOME_RAINY_PROFILE_2_FOG_COLOR_R = Fog Color Red
option.HOT_BIOME_RAINY_PROFILE_2_FOG_COLOR_G = Fog Color Green
option.HOT_BIOME_RAINY_PROFILE_2_FOG_COLOR_B = Fog Color Blue
option.HOT_BIOME_RAINY_PROFILE_3_UNIFORM_FOG_DENSITY = Uniform Fog Density
option.HOT_BIOME_RAINY_PROFILE_3_CLUMPY_FOG_DENSITY = Clumpy Fog Density
option.HOT_BIOME_RAINY_PROFILE_3_FOG_COLOR_R = Fog Color Red
option.HOT_BIOME_RAINY_PROFILE_3_FOG_COLOR_G = Fog Color Green
option.HOT_BIOME_RAINY_PROFILE_3_FOG_COLOR_B = Fog Color Blue
option.COLD_BIOME_RAINY_PROFILE_1_UNIFORM_FOG_DENSITY = Uniform Fog Density
option.COLD_BIOME_RAINY_PROFILE_1_CLUMPY_FOG_DENSITY = Clumpy Fog Density
option.COLD_BIOME_RAINY_PROFILE_1_FOG_COLOR_R = Fog Color Red
option.COLD_BIOME_RAINY_PROFILE_1_FOG_COLOR_G = Fog Color Green
option.COLD_BIOME_RAINY_PROFILE_1_FOG_COLOR_B = Fog Color Blue
option.COLD_BIOME_RAINY_PROFILE_2_UNIFORM_FOG_DENSITY = Uniform Fog Density
option.COLD_BIOME_RAINY_PROFILE_2_CLUMPY_FOG_DENSITY = Clumpy Fog Density
option.COLD_BIOME_RAINY_PROFILE_2_FOG_COLOR_R = Fog Color Red
option.COLD_BIOME_RAINY_PROFILE_2_FOG_COLOR_G = Fog Color Green
option.COLD_BIOME_RAINY_PROFILE_2_FOG_COLOR_B = Fog Color Blue
option.COLD_BIOME_RAINY_PROFILE_3_UNIFORM_FOG_DENSITY = Uniform Fog Density
option.COLD_BIOME_RAINY_PROFILE_3_CLUMPY_FOG_DENSITY = Clumpy Fog Density
option.COLD_BIOME_RAINY_PROFILE_3_FOG_COLOR_R = Fog Color Red
option.COLD_BIOME_RAINY_PROFILE_3_FOG_COLOR_G = Fog Color Green
option.COLD_BIOME_RAINY_PROFILE_3_FOG_COLOR_B = Fog Color Blue
option.USE_CUSTOM_SWAMP_CATEGORY_PROFILE = Swamp Biome Mode
value.USE_CUSTOM_SWAMP_CATEGORY_PROFILE.-1 = OFF
value.USE_CUSTOM_SWAMP_CATEGORY_PROFILE.0 = Hardcoded
value.USE_CUSTOM_SWAMP_CATEGORY_PROFILE.1 = §f↓§r Use Custom Preset §f↓§r
screen.CUSTOM_SWAMP_CATEGORY_PROFILE_1 = Custom Preset
option.USE_CUSTOM_JUNGLE_CATEGORY_PROFILE = Jungle Biome Mode
value.USE_CUSTOM_JUNGLE_CATEGORY_PROFILE.-1 = OFF
value.USE_CUSTOM_JUNGLE_CATEGORY_PROFILE.0 = Hardcoded
value.USE_CUSTOM_JUNGLE_CATEGORY_PROFILE.1 = §f↓§r Use Custom Preset §f↓§r
screen.CUSTOM_JUNGLE_CATEGORY_PROFILE_1 = Custom Preset
option.CUSTOM_SWAMP_PROFILE_1_UNIFORM_FOG_DENSITY = Uniform Fog Density
option.CUSTOM_SWAMP_PROFILE_1_CLUMPY_FOG_DENSITY = Clumpy Fog Density
option.CUSTOM_SWAMP_PROFILE_1_FOG_COLOR_R = Fog Color Red
option.CUSTOM_SWAMP_PROFILE_1_FOG_COLOR_G = Fog Color Green
option.CUSTOM_SWAMP_PROFILE_1_FOG_COLOR_B = Fog Color Blue
option.CUSTOM_JUNGLE_PROFILE_1_UNIFORM_FOG_DENSITY = Uniform Fog Density
option.CUSTOM_JUNGLE_PROFILE_1_CLUMPY_FOG_DENSITY = Clumpy Fog Density
option.CUSTOM_JUNGLE_PROFILE_1_FOG_COLOR_R = Fog Color Red
option.CUSTOM_JUNGLE_PROFILE_1_FOG_COLOR_G = Fog Color Green
option.CUSTOM_JUNGLE_PROFILE_1_FOG_COLOR_B = Fog Color Blue
screen.Climate = Climate Settings
option.Seasons = Seasonal Colors
@@ -739,7 +841,7 @@ option.FAKE_DISPERSION_AMOUNT.comment = Configure the amount of dispersion withi
option.REFRACTION_SMUDGE_AMOUNT.comment = Configure the amount of smudge within the refraction. §bWhat is this?§r when refraction happens, the parts that get really distorted will get smudged. §cWill cause visaul noise within refraction. §aPERFORMANCE COST:§r very low
screen.Fog.comment = Configure settings related to the raymarched volumetric fog, or distance based fog.
option.VL_RENDER_RESOLUTION.comment = Configure the resolution of the volumetric fog. §aPERFORMANCE COST:§r high
option.VL_RENDERING_RESOLUTION_SCALE.comment = Configure the resolution of the volumetric fog. §aPERFORMANCE COST:§r high
option.VL_SAMPLES.comment = Configure the quality of the volumetric fog. §aPERFORMANCE COST:§r high
option.BLOOMY_FOG.comment = Configure the strength of bloom that is applied to fog. §bWhat is this?§r This effect makes the fog look soft, it helps hide a little noise too. can cause some visible flickering on detailed edges. §aPERFORMANCE COST:§r very low
option.Haze_amount.comment = Configure how dense the atmosphere around you is. §bWhat is this?§r This is the blue haze you see in the distance.
@@ -747,7 +849,7 @@ screen.Fog.comment = Configure settings related to the raymarched volumetric fog
option.BorderFog.comment = §bWhat is this?§r Toggle a fog that attempts to hide the chunks loading in. But because the sky is all over the place, it is difficult to do well. §aPERFORMANCE COST:§r very very low
screen.TOD_fog.comment = Configure the density of fog that appears at specific times of the day.
option.TOD_Fog_mult.comment = Configure how much total fog there is that appears at specific times during the day. this does not effect the atmospheric haze.
option.TOD_FOG_AMOUNT.comment = Configure how much total fog there is that appears at specific times during the day. this does not effect the atmospheric haze.
screen.Cave_Fog.comment = Configure settings for fog that appears when you are in very dark places such as caves.
option.Cave_Fog.comment = Toggle the fog that appears in dark places. It is impossible to accurately tell when you are in a cave with a shader, so this fog might appear in places that are not a cave. §aPERFORMANCE COST:§r low
@@ -757,7 +859,7 @@ screen.Clouds.comment = Configure settings related to the raymarched volumetric
option.VOLUMETRIC_CLOUDS.comment = Toggle the clouds. §aPERFORMANCE COST:§r medium to high
option.CLOUDS_QUALITY.comment = Configure the resolution of the volumetric clouds. §aPERFORMANCE COST:§r high
option.CLOUDS_SHADOWS.comment = Toggle shadows that are casted from the clouds onto the ground, and fog below them. §aPERFORMANCE COST:§r low to medium
option.Daily_Weather.comment = Toggle the weather that changes every day. §bWhat is this?§r There are 10 weather profiles that the shader cycles through every day. You cannot change any cloud coverage settings when this is enabled. §aPERFORMANCE COST:§r low
option.DAILY_WEATHER_PROFILE.comment = Toggle the weather that changes every day. §bWhat is this?§r There are 10 weather profiles that the shader cycles through every day. You cannot change any cloud coverage settings when this is enabled. §aPERFORMANCE COST:§r low
option.CHOOSE_RANDOM_WEATHER_PROFILE.comment = §bWhat is this?§r Configure the shader to randomly choose the weather from one of the days below. When this is turned off, the shader will choose the day in order.
option.Cloud_Speed.comment = Configure how fast the clouds move as the day goes by.
option.Rain_coverage.comment = Configure how much of the sky the clouds cover during rain.
+14 -12
View File
@@ -1,5 +1,6 @@
// this file contains all things for seasons, weather, and biome specific settings.
// i gotta start centralizing shit someday.
// THAT DAY HAS COME!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
@@ -12,7 +13,7 @@
#ifdef SEASONS_VSH
uniform int worldDay;
uniform float noPuddleAreas;
uniform float NoRainFallEnviornmentSmooth;
void YearCycleColor (
inout vec3 FinalColor,
@@ -80,7 +81,7 @@
// // this is to make snow only exist in winter
// float FallToWinter_snowfall = mix(0.0, 1.0, AutumnTime);
// float WinterToSpring_snowfall = mix(FallToWinter_snowfall, 0.0, WinterTime);
// // SnowySeason = clamp(pow(sin(WinterToSpring_snowfall*SeasonLength)*0.5+0.5,5),0,1) * WinterToSpring_snowfall * noPuddleAreas;
// // SnowySeason = clamp(pow(sin(WinterToSpring_snowfall*SeasonLength)*0.5+0.5,5),0,1) * WinterToSpring_snowfall * NoRainFallEnviornmentSmooth;
// #else
// // SnowySeason = 0.0;
// #endif
@@ -123,12 +124,12 @@
///////////////////////////////////////////////////////////////////////////////
uniform float isJungles;
uniform float isSwamps;
uniform float isDarkForests;
uniform float sandStorm;
uniform float snowStorm;
// uniform float isJungles;
// uniform float isSwamps;
// uniform float isDarkForests;
// uniform float sandStorm;
// uniform float snowStorm;
/*
#ifdef PER_BIOME_ENVIRONMENT
void BiomeFogColor(
@@ -193,11 +194,11 @@
}
#endif
*/
///////////////////////////////////////////////////////////////////////////////
////////////////////////////// FOG CONTROLLER /////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/*
#ifdef TIMEOFDAYFOG
// uniform int worldTime;
void FogDensities(
@@ -213,8 +214,8 @@
float Night = clamp((Time-13000.0)/2000.0,0.0,1.0) * clamp((23000.0-Time)/2000.0,0.0,1.0);
// set densities. morn, noon, even, night
vec4 UniformDensity = TOD_Fog_mult * vec4(Morning_Uniform_Fog, Noon_Uniform_Fog, Evening_Uniform_Fog, Night_Uniform_Fog);
vec4 CloudyDensity = TOD_Fog_mult * vec4(Morning_Cloudy_Fog, Noon_Cloudy_Fog, Evening_Cloudy_Fog, Night_Cloudy_Fog);
vec4 UniformDensity = TOD_FOG_AMOUNT * vec4(Morning_Uniform_Fog, Noon_Uniform_Fog, Evening_Uniform_Fog, Night_Uniform_Fog);
vec4 CloudyDensity = TOD_FOG_AMOUNT * vec4(Morning_Cloudy_Fog, Noon_Cloudy_Fog, Evening_Cloudy_Fog, Night_Cloudy_Fog);
Rainy = Rainy*RainFog_amount;
@@ -226,3 +227,4 @@
Cloudy *= Morning*CloudyDensity.r + Noon*CloudyDensity.g + Evening*CloudyDensity.b + Night*CloudyDensity.a;
}
#endif
*/
+8 -3
View File
@@ -34,6 +34,7 @@ vec3 doBlockLightLighting(
lightmapLight *= lightmapLight;
float lightmapCurve = mix(lightmapLight, 2.5, lightmapBrightspot);
// lightmapCurve = lightmap;
vec3 blockLight = lightmapCurve * lightColor;
#if defined IS_LPV_ENABLED && defined MC_GL_EXT_shader_image_load_store
@@ -74,12 +75,16 @@ vec3 doIndirectLighting(
// float lightmapCurve = pow(1.0-pow(1.0-lightmap,2.0),2.0);
// float lightmapCurve = lightmap*lightmap;
float lightmapCurve = (pow(lightmap,15.0)*2.0 + lightmap*lightmap)/3.0; //make sure its 0.0-1.0
// lightmapCurve = lightmap;
vec3 indirectLight = lightColor * lightmapCurve * ambient_brightness;
// indirectLight = max(indirectLight, minimumLightColor * (MIN_LIGHT_AMOUNT * 0.02 * 0.2 + nightVision));
indirectLight += minimumLightColor * (MIN_LIGHT_AMOUNT * 0.02 * 0.2 + nightVision*0.02);
// indirectLight += minimumLightColor * (MIN_LIGHT_AMOUNT * 0.02 * 0.2 + nightVision*0.02);
float minimumLightAmount = 0.02*nightVision + 0.005 * mix(MINIMUM_INDOOR_LIGHT, MINIMUM_OUTDOOR_LIGHT, clamp(eyeBrightnessSmooth.y/240.0 + lightmap,0.0,1.0));
indirectLight += minimumLightColor * minimumLightAmount;
return indirectLight;
}
-9
View File
@@ -254,10 +254,6 @@ vec4 GetVolumetricFog(
vec3 hazeColor = normalize(gl_Fog.color.rgb + 1e-6) * 0.1;
float lightningflash = texelFetch2D(colortex4,ivec2(1,1),0).x/150.0;
#if defined LPV_VL_FOG_ILLUMINATION && defined EXCLUDE_WRITE_TO_LUT
float TorchBrightness_autoAdjust = mix(1.0, 30.0, clamp(exp(-10.0*exposure),0.0,1.0)) / 5.0;
#endif
for (int i = 0; i < SAMPLECOUNT; i++) {
float d = (pow(expFactor, float(i+dither)/float(SAMPLECOUNT))/expFactor - 1.0/expFactor)/(1-1.0/expFactor);
@@ -319,11 +315,6 @@ vec4 GetVolumetricFog(
color += (flashlightGlow - flashlightGlow * exp(-max(stormDensity,0.005)*dd*dL)) * absorbance;
#endif
//------ LPV FOG EFFECT
#if defined LPV_VL_FOG_ILLUMINATION && defined EXCLUDE_WRITE_TO_LUT
color += LPV_FOG_ILLUMINATION(progressW-cameraPosition, dd, dL) * TorchBrightness_autoAdjust * absorbance;
#endif
}
return vec4(color, absorbance);
}
+39 -52
View File
@@ -1,62 +1,49 @@
uniform vec3 lightningEffect;
#ifdef IS_IRIS
uniform vec4 lightningBoltPosition;
#else
vec4 lightningBoltPosition = vec4(0.0, 100.0, 0.0, lightningEffect.x);
#endif
vec3 Iris_Lightningflash(vec3 feetPlayerPos, vec3 lightningBoltPos, vec3 WorldSpace_normal, inout float Phase){
if(lightningBoltPosition.w > 0.0){
vec3 LightningPos = feetPlayerPos - vec3(lightningBoltPosition.x, clamp(feetPlayerPos.y, lightningBoltPosition.y+16, lightningBoltPosition.y+116.0),lightningBoltPosition.z);
vec3 createLightningPointLight(
vec3 playerPos, vec3 lightningBoltPos
// point light, max distance is ~500 blocks (the maximim entity render distance)
float lightDistance = 300.0 ;
float lightningLight = max(1.0 - length(LightningPos) / lightDistance, 0.0);
// the light above ^^^ is a linear curve. me no likey. here's an exponential one instead.
lightningLight = exp((1.0 - lightningLight) * -10.0);
// a phase for subsurface scattering.
vec3 PhasePos = normalize(feetPlayerPos) + vec3(lightningBoltPosition.x, lightningBoltPosition.y + 60, lightningBoltPosition.z);
float PhaseOrigin = 1.0 - clamp(dot(normalize(feetPlayerPos), normalize(PhasePos)),0.0,1.0);
Phase = exp(sqrt(PhaseOrigin) * -2.0) * 5.0 * lightningLight;
// good old NdotL. only normals facing towards the lightning bolt origin rise to 1.0
float NdotL = clamp(dot(LightningPos, -WorldSpace_normal), 0.0, 1.0);
return lightningEffect * lightningLight * NdotL;
}else return vec3(0.0);
}
vec3 Iris_Lightningflash_VLcloud(vec3 feetPlayerPos, vec3 lightningBoltPos){
if(lightningBoltPosition.w > 0.0){
vec3 LightningPos = feetPlayerPos - vec3(lightningBoltPosition.x, clamp(feetPlayerPos.y, lightningBoltPosition.y, lightningBoltPosition.y+116.0),lightningBoltPosition.z);
float lightDistance = 400.0;
float lightningLight = max(1.0 - length(LightningPos) / lightDistance, 0.0);
lightningLight = exp((1.0 - lightningLight) * -10.0);
return lightningEffect * lightningLight;
}else return vec3(0.0);
}
vec3 Iris_Lightningflash_VLfog(vec3 feetPlayerPos, vec3 lightningBoltPos){
if(lightningBoltPosition.w > 0.0){
if(lightningBoltPosition.w < 1.0) return vec3(0.0);
vec3 LightningPos = feetPlayerPos - vec3(lightningBoltPosition.x, clamp(feetPlayerPos.y, lightningBoltPosition.y, lightningBoltPosition.y+116.0),lightningBoltPosition.z);
#ifdef TEST
float lightningLight = max(1.0 - length(LightningPos) / 50, 0.0);
lightningLight = exp((1.0 - lightningLight) * -15.0) ;
#else
float lightDistance = 300.0;
float lightningLight = max(1.0 - length(LightningPos) / lightDistance, 0.0) ;
lightningLight = exp((1.0 - lightningLight) * -15.0) ;
#if defined LIGHTNINGFLASH_DIFFUSE
, vec3 normal
#endif
#if defined LIGHTNINGFLASH_VL
,float cloudDensity
,float gradient
#endif
){
if(lightningBoltPosition.w > 0.0){
// make it only get 5x brighter than 1.0 as that is default emissive brightness.
vec3 flashColor = lightningEffect.rgb * 1.0;
// flashy flashy
flashColor *= (sin(lightningEffect.r*10.0)*0.5+0.5)*0.8+0.2;
return lightningEffect * lightningLight;
}else return vec3(0.0);
}
vec3 boltPos = playerPos - lightningBoltPos;
// stretch the vertical component to cover the upper part of the bolt.
vec3 boltPos_stretched = playerPos - vec3(lightningBoltPos.x, clamp(playerPos.y, lightningBoltPos.y, lightningBoltPos.y+150.0), lightningBoltPos.z);
float flashDistance = length(boltPos_stretched);
#if defined LIGHTNINGFLASH_DIFFUSE
// lerp between 2 points for ndotl, for the lower and upper part of the bolt.
float NdotL = clamp(dot(normalize(boltPos - vec3(0,10,0)), -normal), 0, 1);
float NdotL2 = clamp(dot(normalize(boltPos - vec3(0,100,0)), -normal),0,1);
flashColor *= NdotL * (1.0 - NdotL2) + NdotL2;
flashColor *= exp(sqrt(flashDistance) * -0.5) * 15.0 * 3.0 * clamp(1.0-flashDistance/500.,0,1);
#endif
#if defined LIGHTNINGFLASH_VL
flashColor *= (1.0-exp(-3.0*cloudDensity)) * exp(-3.0*(1.0-gradient));
flashColor *= exp(sqrt(flashDistance) * -0.5) * 15.0 * clamp(1.0-flashDistance/500.,0,1);
#endif
return flashColor;
}else return vec3(0.0);
}
+1 -9
View File
@@ -49,7 +49,7 @@ vec4 GetVolumetricFog(
vec3 dVWorld = (wpos-gbufferModelViewInverse[3].xyz);
vec3 progressW = vec3(0.0);
float maxLength = min(length(dVWorld), far)/length(dVWorld);
float maxLength = min(length(dVWorld), min(far,16*12))/length(dVWorld);
dVWorld *= maxLength;
@@ -64,10 +64,6 @@ vec4 GetVolumetricFog(
vec3 hazeColor = normalize(gl_Fog.color.rgb + 1e-6) * 0.25;
#if defined LPV_VL_FOG_ILLUMINATION && defined EXCLUDE_WRITE_TO_LUT
float TorchBrightness_autoAdjust = mix(1.0, 30.0, clamp(exp(-10.0*exposure),0.0,1.0)) / 5.0;
#endif
for (int i = 0; i < SAMPLECOUNT; i++) {
float d = (pow(expFactor, float(i+dither2)/float(SAMPLECOUNT))/expFactor - 1.0/expFactor)/(1-1.0/expFactor);
float dd = pow(expFactor, float(i+dither)/float(SAMPLECOUNT)) * log(expFactor) / float(SAMPLECOUNT)/(expFactor-1.0);
@@ -134,10 +130,6 @@ vec4 GetVolumetricFog(
color += (flashlightGlow - flashlightGlow * exp(-max(plumeDensity,0.005)*dd*dL)) * absorbance;
#endif
#if defined LPV_VL_FOG_ILLUMINATION && defined EXCLUDE_WRITE_TO_LUT
color += LPV_FOG_ILLUMINATION(progressW-cameraPosition, dd, dL) * TorchBrightness_autoAdjust * absorbance;
#endif
}
return vec4(color, absorbance);
}
+263 -243
View File
@@ -1,4 +1,5 @@
uniform float noPuddleAreas;
// uniform float NoRainFallEnviornmentSmooth;
uniform ivec2 eyeBrightness;
float densityAtPosFog(in vec3 pos){
pos /= 18.;
@@ -13,44 +14,12 @@ float densityAtPosFog(in vec3 pos){
}
float cloudVol(in vec3 pos, float maxDistance ){
float fogYstart = FOG_START_HEIGHT+3;
vec3 samplePos = pos*vec3(1.0,1./24.,1.0);
vec3 samplePos2 = pos*vec3(1.0,1./48.,1.0);
float uniformFog = 0.0;
float low_gradientFog = exp2(-0.3 * max(pos.y - fogYstart,0.0));
float medium_gradientFog = exp2(-0.15 * max(pos.y - fogYstart,0.0));
float high_gradientFog = exp2(-0.06 * max(pos.y - fogYstart,0.0));
float fog_shape = 0.0;
float fog_erosion = 0.0;
if(sandStorm < 1.0 && snowStorm < 1.0){
fog_shape = 1.0 - densityAtPosFog(samplePos * 24.0);
fog_erosion = 1.0 - densityAtPosFog(samplePos2 * 200.0 - vec3(min(max(fog_shape - 0.6 ,0.0) * 2.0 ,1.0)*200.0));
}
float cloudyFog = max(min(max(fog_shape - 0.6 ,0.0) * 2.0 ,1.0) - fog_erosion * 0.4 , 0.0) * exp(-0.05 * max(pos.y - (fogYstart+20),0.0));
float rainyFog = (low_gradientFog * 0.5 + exp2(-0.06 * max(pos.y - fogYstart,0.0))) * rainStrength * noPuddleAreas;
if(sandStorm > 0.0 || snowStorm > 0.0){
float IntenseFogs = pow(1.0 - densityAtPosFog( (samplePos2 - vec3(frameTimeCounter,0,frameTimeCounter)*15.0) * 100.0),2.0) * mix(1.0, high_gradientFog, snowStorm);
cloudyFog = mix(cloudyFog, IntenseFogs, sandStorm+snowStorm);
medium_gradientFog = 1.0;
}
FogDensities(medium_gradientFog, cloudyFog, rainyFog, maxDistance, 1.0, 1.0);
return uniformFog + medium_gradientFog + cloudyFog;
}
float phaseRayleigh(float cosTheta) {
const vec2 mul_add = vec2(0.1, 0.28) / acos(-1.0);
const float oneOverPi = 1.0 / acos(-1.0);
const vec2 mul_add = vec2(0.1, 0.28) * oneOverPi;
return cosTheta * mul_add.x + mul_add.y; // optimized version from [Elek09], divided by 4 pi for energy conservation
}
float fogPhase(float lightPoint){
float linear = clamp(-lightPoint*0.5+0.5,0.0,1.0);
float linear2 = 1.0 - clamp(lightPoint,0.0,1.0);
@@ -62,256 +31,307 @@ float fogPhase(float lightPoint){
return exponential;
}
float phaseCloudFog(float x, float g){
float gg = g * g;
return (gg * -0.25 + 0.25) * pow(-2.0 * (g * x) + (gg + 1.0), -1.5) / 3.14;
}
uniform ivec2 eyeBrightness;
vec3 sampleShadowmapVL(vec3 start, vec3 shadowMapRayStartPos, vec3 shadowMapRayProgress, float increment){
vec3 shadowColor = vec3(1.0);
shadowMapRayProgress = start.xyz + increment*shadowMapRayStartPos;
#ifdef DISTORT_SHADOWMAP
float distortFactor = calcDistort(shadowMapRayProgress.xy);
#else
float distortFactor = 1.0;
#endif
vec3 shadowPos = vec3(shadowMapRayProgress.xy*distortFactor, shadowMapRayProgress.z);
if (abs(shadowPos.x) < 1.0-0.5/2048. && abs(shadowPos.y) < 1.0-0.5/2048){
shadowPos = shadowPos * vec3(0.5, 0.5, 0.5/6.0) + 0.5;
#ifdef TRANSLUCENT_COLORED_SHADOWS
shadowColor = vec3(shadow2D(shadowtex0, shadowPos).x);
if(shadow2D(shadowtex1, shadowPos).x > shadowPos.z && shadowColor.x < 1.0){
vec4 translucentShadow = texture2D(shadowcolor0, shadowPos.xy);
if(translucentShadow.a < 0.9) shadowColor = normalize(translucentShadow.rgb+0.0001);
}
#else
float shadowMap = shadow2D(shadow, shadowPos).x;
shadowColor = vec3(shadowMap);
#endif
}
return shadowColor;
}
vec3 getShadows(
vec3 rayProgress, in vec3 sunVector,
float increment, vec3 start, vec3 shadowMapRayStartPos, vec3 shadowMapRayProgress
,float flatPhase
,inout float sunPhase
){
vec3 shadows = vec3(1.0);
shadows *= sampleShadowmapVL(start, shadowMapRayStartPos, shadowMapRayProgress, increment);
float cloudShadow = GetCloudShadow(rayProgress, sunVector);
shadows *= cloudShadow;
return shadows;
}
uniform bool isInSpecialEnviornment;
uniform vec3 exitedBiomePos;
// uniform float fadeAwayLocalEffect;
float getLocalEffectDensity(
in vec3 playerPos
){
float fogResult = 0.0;
fogResult = parameters.localFog.x;
if(parameters.localFog.y > 0.0){
vec3 pos = playerPos;
vec3 samplePos = playerPos * vec3(1.0,1.0/48.0,1.0) * 24.0 * 7.0;
samplePos += vec3(1.0, -0.01, 1.0)*frameTimeCounter*1500.0;
float clumpyFog = min(max(densityAtPosFog(samplePos) - 0.2,0.0)/0.8,1.0);
fogResult += clumpyFog * parameters.localFog.y;
}
return fogResult;
}
float getFogDensities(
in vec3 playerPos,
float localEffectRadius
){
float fogResult = 0.0;
fogResult = pow(parameters.fog.x,3);
if(parameters.fog.y > 0.0){
vec3 movement = vec3(1.0, -0.01, 1.0)*frameTimeCounter;
vec3 pos = playerPos;
vec3 samplePos = playerPos * vec3(1.0,1.0/24.0,1.0) + movement;
vec3 samplePos2 = playerPos * vec3(1.0,1.0/48.0,1.0) + movement;
float shape = 1.0 - densityAtPosFog(samplePos * 24.0);
float shape2 = 1.0 - densityAtPosFog(samplePos2 * 200.0 - vec3(min(max(shape - 0.6 ,0.0) * 2.0 ,1.0)*200.0));
float finalShape = max(min(max(shape - 0.6 ,0.0) * 2.0 ,1.0) - shape2 * 0.4, 0.0) * exp(-0.05 * max(pos.y - 60,0.0));
fogResult += finalShape * pow(parameters.fog.y,3);
}
return fogResult;
// FogDensities(medium_gradientFog, cloudyFog, rainyFog, maxDistance, dailyWeatherParams0.a, dailyWeatherParams1.a);
// return uniformFog + medium_gradientFog + cloudyFog + rainyFog;
// float fog = pow(parameters.fog.x,5);
// if(parameters.localFog.y > 0.0){
// }
// return fog;
// vec3 samplePos = playerPos * vec3(1.0,1.0/48.0,1.0) * 24.0 * 5;
// samplePos += vec3(1.0, -0.01, 1.0)*frameTimeCounter*1500.0;
// float clumpyFog = densityAtPosFog(samplePos);
// float localUniformFogDensity = pow(parameters.localFog.x,5.0);
// float localClumpyFogDensity = pow(parameters.localFog.y,5.0);
// float localFogEffects = localEffectRadius * (localUniformFogDensity + max(clumpyFog*localClumpyFogDensity - 0.3,0.0));
// return localFogEffects;
// float fogYstart = FOG_START_HEIGHT+3;
// vec3 samplePos = pos*vec3(1.0,1./24.,1.0);
// vec3 samplePos2 = pos*vec3(1.0,1./48.,1.0);
// float uniformFog = 0.0;
// float low_gradientFog = exp2(-0.3 * max(pos.y - fogYstart,0.0));
// float medium_gradientFog = exp2(-0.15 * max(pos.y - fogYstart,0.0));
// float high_gradientFog = exp2(-0.06 * max(pos.y - fogYstart,0.0));
// float fog_shape = 0.0;
// float fog_erosion = 0.0;
// if(sandStorm < 1.0 && snowStorm < 1.0){
// fog_shape = 1.0 - densityAtPosFog(samplePos * 24.0);
// fog_erosion = 1.0 - densityAtPosFog(samplePos2 * 200.0 - vec3(min(max(fog_shape - 0.6 ,0.0) * 2.0 ,1.0)*200.0));
// }
// float cloudyFog = max(min(max(fog_shape - 0.6 ,0.0) * 2.0 ,1.0) - fog_erosion * 0.4 , 0.0) * exp(-0.05 * max(pos.y - (fogYstart+20),0.0));
// float rainyFog = (low_gradientFog * 0.5 + exp2(-0.06 * max(pos.y - fogYstart,0.0))) * rainStrength * NoRainFallEnviornmentSmooth;
// if(sandStorm > 0.0 || snowStorm > 0.0){
// float IntenseFogs = pow(1.0 - densityAtPosFog( (samplePos2 - vec3(frameTimeCounter,0,frameTimeCounter)*15.0) * 100.0),2.0) * mix(1.0, high_gradientFog, snowStorm);
// cloudyFog = mix(cloudyFog, IntenseFogs, sandStorm+snowStorm);
// medium_gradientFog = 1.0;
// }
// FogDensities(medium_gradientFog, cloudyFog, rainyFog, maxDistance, 1.0, 1.0);
// return uniformFog + medium_gradientFog + cloudyFog;
}
vec4 GetVolumetricFog(
in vec3 viewPosition,
in vec3 sunVector,
in vec3 viewPos,
in vec2 dither,
in vec3 sunVector,
in vec3 LightColor,
in vec3 AmbientColor,
in vec3 AveragedAmbientColor,
inout float atmosphereAlpha,
inout vec3 sceneColor,
in float cloudPlaneDistance
// #if defined LPV_VL_FOG_ILLUMINATION && defined EXCLUDE_WRITE_TO_LUT
// ,in vec3 LPV_ILLUMINATION
// #endif
){
#ifndef TOGGLE_VL_FOG
return vec4(0.0,0.0,0.0,1.0);
#endif
/// ------------- RAYMARCHING STUFF ------------- \\\
int SAMPLECOUNT = VL_SAMPLES;
//project pixel position into projected shadowmap space
vec3 wpos = mat3(gbufferModelViewInverse) * viewPosition + gbufferModelViewInverse[3].xyz;
vec3 fragposition = mat3(shadowModelView) * wpos + shadowModelView[3].xyz;
fragposition = diagonal3(shadowProjection) * fragposition + shadowProjection[3].xyz;
vec3 playerPos = mat3(gbufferModelViewInverse) * viewPos + gbufferModelViewInverse[3].xyz;
vec3 rayStartPos = playerPos - gbufferModelViewInverse[3].xyz;
//project view origin into projected shadowmap space
vec3 localRayStartPos = rayStartPos;
float localRayLength = length(localRayStartPos);
localRayStartPos *= min(localRayLength, 64.0)/localRayLength;
localRayLength = length(localRayStartPos);
vec3 localRayProgress = vec3(0.0);
// shadowmap stuff
vec3 shadowViewPos = mat3(shadowModelView) * playerPos + shadowModelView[3].xyz;
shadowViewPos = diagonal3(shadowProjection) * shadowViewPos + shadowProjection[3].xyz;
vec3 start = toShadowSpaceProjected(vec3(0.0));
vec3 shadowMapRayStartPos = shadowViewPos - start;
//rayvector into projected shadow map space
//we can use a projected vector because its orthographic projection
//however we still have to send it to curved shadow map space every step
vec3 dV = fragposition - start;
vec3 dVWorld = wpos - gbufferModelViewInverse[3].xyz;
float rayLength = length(rayStartPos);
#ifdef DISTANT_HORIZONS
float maxLength = min(length(dVWorld), max(far, dhRenderDistance))/length(dVWorld);
float maxLength = min(rayLength, max(far, dhRenderDistance))/rayLength;
#else
float maxLength = min(length(dVWorld), far)/length(dVWorld);
float maxLength = min(rayLength, far)/rayLength;
#endif
dV *= maxLength;
dVWorld *= maxLength;
float dL = length(dVWorld)/8.0;
shadowMapRayStartPos *= maxLength;
rayStartPos *= maxLength;
vec3 progress = start.xyz;
vec3 progressW = vec3(0.0);
rayLength = length(rayStartPos);
vec3 rayProgress = vec3(0.0);
vec3 shadowMapRayProgress = vec3(0.0);
float expFactor = 11.0;
float indoors = clamp(eyeBrightnessSmooth.y/240.0,0,1);
/// ------------- COLOR/LIGHTING STUFF ------------- \\\
vec3 localFogColor = parameters.localFogColor.rgb;
vec3 localFogColor_lightCol = localFogColor * dot(LightColor,vec3(0.33333));
vec3 localFogColor_ambientCol = localFogColor * dot(AmbientColor,vec3(0.33333));
vec3 color = vec3(0.0);
vec3 finalAbsorbance = vec3(1.0);
// float totalAbsorbance = 1.0;
vec3 totalAbsorbance = vec3(1.0);
float fogAbsorbance = 1.0;
// float atmosphereAbsorbance = 1.0;
vec3 atmosphereAbsorbance = vec3(1.0);
float SdotV = dot(mat3(gbufferModelView) * sunVector, normalize(viewPosition));
///// ----- fog lighting
//Mie phase + somewhat simulates multiple scattering (Horizon zero down cloud approx)
float sunPhase = fogPhase(SdotV)*5.0;// phaseCloudFog(SdotV, 0.9) + phaseCloudFog(SdotV, 0.85) + phaseCloudFog(SdotV, 0.5) * 5.0;
float sunPhase2 = (phaseCloudFog(SdotV, 0.85) + phaseCloudFog(SdotV, 0.5)) * 5.0;
float skyPhase = 2.0 + pow(1.0-pow(1.0-clamp(normalize(wpos).y*0.5+0.5,0.0,1.0),2.0),5.0)*2.0 ;//pow(clamp(normalize(wpos).y*0.5+0.5,0.0,1.0),4.0)*5.0;
float rayL = phaseRayleigh(SdotV);
vec3 rC = vec3(sky_coefficientRayleighR*1e-6, sky_coefficientRayleighG*1e-5, sky_coefficientRayleighB*1e-5) ;
vec3 mC = vec3(fog_coefficientMieR*1e-6, fog_coefficientMieG*1e-6, fog_coefficientMieB*1e-6);
float absorbance = 1.0;
float localAbsorbance = 1.0;
float LPVAbsorb = 1.0;
vec3 airAbsorbance = vec3(1.0);
#if defined EXCLUDE_WRITE_TO_LUT && defined USE_CUSTOM_FOG_LIGHTING_COLORS
LightColor = dot(LightColor,vec3(0.21, 0.72, 0.07)) * vec3(DIRECTLIGHT_FOG_R,DIRECTLIGHT_FOG_G,DIRECTLIGHT_FOG_B);
AmbientColor = dot(AmbientColor,vec3(0.21, 0.72, 0.07)) * vec3(INDIRECTLIGHT_FOG_R,INDIRECTLIGHT_FOG_G,INDIRECTLIGHT_FOG_B);
#endif
float SdotV = dot(sunVector, normalize(playerPos));
float rayleighPhase = phaseRayleigh(SdotV);
float sunPhase = fogPhase(SdotV) * 5.0;
float flatPhase = clamp(SdotV*0.5+0.5,0.0,1.0);
vec3 skyLightPhased = AmbientColor;
vec3 LightSourcePhased = LightColor;
skyLightPhased *= skyPhase;
LightSourcePhased *= sunPhase;
#ifdef ambientLight_only
LightSourcePhased = vec3(0.0);
#endif
#ifdef PER_BIOME_ENVIRONMENT
vec3 biomeDirect = LightSourcePhased;
vec3 biomeIndirect = skyLightPhased;
float inBiome = BiomeVLFogColors(biomeDirect, biomeIndirect);
#endif
#if defined LPV_VL_FOG_ILLUMINATION && defined EXCLUDE_WRITE_TO_LUT
float TorchBrightness_autoAdjust = mix(1.0, 30.0, clamp(exp(-10.0*exposure),0.0,1.0)) / 5.0;
#endif
float inACave = 1.0 - caveDetection;
float lightLevelZero = pow(clamp(eyeBrightnessSmooth.y/240.0 ,0.0,1.0),3.0);
// SkyLightColor *= lightLevelZero*0.9 + 0.1;
vec3 finalsceneColor = vec3(0.0);
float skyPhase = 0.5 + pow(1.0-pow(1.0-clamp(normalize(playerPos).y*0.5+0.5,0.0,1.0),2.0),5.0)*2.0;
vec3 rayleighCoeffs = vec3(sky_coefficientRayleighR*1e-6, sky_coefficientRayleighG*1e-5, sky_coefficientRayleighB*1e-5);
vec3 mieCoeffs = vec3(sky_coefficientMieR*1e-6, sky_coefficientMieG*1e-6, sky_coefficientMieB*1e-6);
// this is to reduce sampling problems with shadows when thick local fog is used.
float localFogExists = (parameters.localFog.x > 0.0 || parameters.localFog.y > 0.0) ? 1.0 : 0.0;
for (int i = 0; i < SAMPLECOUNT; i++) {
float d = (pow(expFactor, float(i+dither.x)/float(SAMPLECOUNT))/expFactor - 1.0/expFactor)/(1-1.0/expFactor);
float dd = pow(expFactor, float(i+dither.y)/float(SAMPLECOUNT)) * log(expFactor) / float(SAMPLECOUNT)/(expFactor-1.0);
#ifdef VOLUMETRIC_CLOUDS
// #if (defined CloudLayer0 || defined CloudLayer1 || defined CloudLayer2)
// check if the fog intersects clouds
if(length(d*dVWorld) > cloudPlaneDistance) break;
#endif
progress = start.xyz + d*dV;
progressW = gbufferModelViewInverse[3].xyz + cameraPosition + d*dVWorld;
//------------------------------------
//------ SAMPLE SHADOWS FOR FOG EFFECTS
//------------------------------------
#ifdef DISTORT_SHADOWMAP
float distortFactor = calcDistort(progress.xy);
#else
float distortFactor = 1.0;
#endif
vec3 shadowPos = vec3(progress.xy*distortFactor, progress.z);
vec3 sh = vec3(1.0);
if (abs(shadowPos.x) < 1.0-0.5/2048. && abs(shadowPos.y) < 1.0-0.5/2048){
shadowPos = shadowPos*vec3(0.5,0.5,0.5/6.0)+0.5;
#ifdef TRANSLUCENT_COLORED_SHADOWS
sh = vec3(shadow2D(shadowtex0, shadowPos).x);
if(shadow2D(shadowtex1, shadowPos).x > shadowPos.z && sh.x < 1.0){
vec4 translucentShadow = texture2D(shadowcolor0, shadowPos.xy);
if(translucentShadow.a < 0.9) sh = normalize(translucentShadow.rgb+0.0001);
}
#else
sh = vec3(shadow2D(shadow, shadowPos).x);
#endif
}
#ifdef RAYMARCH_CLOUDS_WITH_FOG
vec3 sh_forClouds = sh;
#endif
sh *= GetCloudShadow(progressW, sunVector);
#ifdef PER_BIOME_ENVIRONMENT
float maxDistance = inBiome * min(max(1.0 - length(d*dVWorld.xz)/(32*8),0.0)*2.0,1.0);
float densityVol = cloudVol(progressW, maxDistance) * inACave;
#else
float densityVol = cloudVol(progressW, 0.0) * inACave;
#endif
//------------------------------------
//------ MAIN FOG EFFECT
//------------------------------------
float fogDensity = densityVol;
float fogVolumeCoeff = exp(-fogDensity*dd*dL); // this is like beer-lambert law or something
#ifdef PER_BIOME_ENVIRONMENT
vec3 indirectLight = mix(skyLightPhased, biomeIndirect, maxDistance);
vec3 DirectLight = mix(LightSourcePhased, biomeDirect, maxDistance) * sh;
#else
vec3 indirectLight = skyLightPhased;
vec3 DirectLight = LightSourcePhased * sh;
#endif
vec3 Lightning = Iris_Lightningflash_VLfog(progressW-cameraPosition, lightningBoltPosition.xyz);
vec3 lighting = DirectLight + indirectLight;
color += (lighting - lighting * fogVolumeCoeff) * totalAbsorbance;
#if defined FLASHLIGHT && defined FLASHLIGHT_FOG_ILLUMINATION && !defined VL_CLOUDS_DEFERRED
// vec3 shiftedViewPos = mat3(gbufferModelView)*(progressW-cameraPosition) + vec3(-0.25, 0.2, 0.0);
// vec3 shiftedPlayerPos = mat3(gbufferModelViewInverse) * shiftedViewPos;
vec3 shiftedViewPos;
vec3 shiftedPlayerPos;
float forwardOffset;
#ifdef VIVECRAFT
if (vivecraftIsVR) {
forwardOffset = 0.0;
shiftedPlayerPos = (progressW - cameraPosition) + ( vivecraftRelativeMainHandPos);
shiftedViewPos = shiftedPlayerPos * mat3(vivecraftRelativeMainHandRot);
} else
#endif
{
forwardOffset = 0.5;
shiftedViewPos = mat3(gbufferModelView)*(progressW-cameraPosition) + vec3(-0.25, 0.2, 0.0);
shiftedPlayerPos = mat3(gbufferModelViewInverse) * shiftedViewPos;
}
vec2 scaledViewPos = shiftedViewPos.xy / max(-shiftedViewPos.z - forwardOffset, 1e-7);
float linearDistance = length(shiftedPlayerPos);
float shiftedLinearDistance = length(scaledViewPos);
float lightFalloff = 1.0 - clamp(1.0-linearDistance/FLASHLIGHT_RANGE, -0.999,1.0);
lightFalloff = max(exp(-30.0 * lightFalloff),0.0);
float projectedCircle = clamp(1.0 - shiftedLinearDistance*FLASHLIGHT_SIZE,0.0,1.0);
vec3 flashlightGlow = vec3(FLASHLIGHT_R,FLASHLIGHT_G,FLASHLIGHT_B) * lightFalloff * projectedCircle * 0.5;
color += (flashlightGlow - flashlightGlow * exp(-max(fogDensity,0.005)*dd*dL)) * totalAbsorbance;
#endif
// kill fog absorbance when in caves.
totalAbsorbance *= mix(1.0, fogVolumeCoeff, lightLevelZero);
//------------------------------------
//------ ATMOSPHERE HAZE EFFECT
//------------------------------------
// maximum range for atmosphere haze, basically.
float planetVolume = 1.0 - exp(clamp(1.0 - length(progressW-cameraPosition) / (16*150), 0.0,1.0) * -10);
// just air
vec2 airCoef = (exp2(-max(progressW.y-SEA_LEVEL,0.0)/vec2(8.0e3, 1.2e3)*vec2(6.,7.0)) * 192.0 * Haze_amount) * planetVolume;
// Pbr for air, yolo mix between mie and rayleigh for water droplets
vec3 rL = rC*airCoef.x;
vec3 m = mC*(airCoef.y+densityVol*300.0);
// calculate the atmosphere haze seperately and purely additive to color, do not contribute to absorbtion.
vec3 atmosphereVolumeCoeff = exp(-(rL+m)*dd*dL);
// vec3 Atmosphere = LightSourcePhased * sh * (rayL*rL + sunPhase*m) + AveragedAmbientColor * (rL+m);
vec3 Atmosphere = (LightSourcePhased * sh * (rayL*rL + sunPhase*m) + AveragedAmbientColor * (rL+m) * (lightLevelZero*0.99 + 0.01)) * inACave;
color += (Atmosphere - Atmosphere * atmosphereVolumeCoeff) / (rL+m+1e-6) * atmosphereAbsorbance;
// if(length(d*rayStartPos) > cloudPlaneDistance) break;
// #endif
atmosphereAbsorbance *= atmosphereVolumeCoeff*fogVolumeCoeff;
#if (defined CloudLayer0 || defined CloudLayer1 || defined CloudLayer2)
float kill = length(d*rayStartPos) > cloudPlaneDistance ? 0.0 : 1.0;
#else
float kill = 1.0;
#endif
// totalAbsorbance *= dot(atmosphereVolumeCoeff,vec3(0.33333));
rayProgress = gbufferModelViewInverse[3].xyz + cameraPosition + d*rayStartPos;
localRayProgress = gbufferModelViewInverse[3].xyz + cameraPosition + d*localRayStartPos;
vec3 shadows = getShadows(mix(rayProgress, localRayProgress, localFogExists), sunVector, d, start, shadowMapRayStartPos, shadowMapRayProgress, flatPhase, sunPhase);
#if defined LIGHTNING_FLASH && defined LIGHTNINGFLASH_VL
vec3 lightningFlash = createLightningPointLight(rayProgress - cameraPosition, lightningBoltPosition.xyz, 1.0, 1.0) * indoors;
#endif
/// ATMOSOPHERE
float planetVolume = clamp(1.0 - length((rayProgress-cameraPosition) - vec3(0.0, 250.0, 0.0)) / 2500.0, 0.0,1.0);
vec2 airCoef = exp2(-max(rayProgress.y-SEA_LEVEL,0.0)/vec2(8.0e3, 1.2e3)*vec2(6.,7.0)) * planetVolume * 25.0 * Haze_amount;
vec3 rayleigh = rayleighCoeffs*airCoef.x;
vec3 mie = mieCoeffs*(airCoef.y + min(Haze_amount,1.0));
vec3 airDensity = kill*(rayleigh + mie);
vec3 airDensityPhased = rayleighPhase*rayleigh + sunPhase*mie;
vec3 airVolumeCoeff = exp(-airDensity*dd*rayLength);
vec3 airLighting = LightColor*shadows*sunPhase * airDensityPhased + AveragedAmbientColor*0.666*airDensity;
#if defined LIGHTNING_FLASH && defined LIGHTNINGFLASH_VL
airLighting += lightningFlash*airDensity;
#endif
color += (airLighting - airLighting * airVolumeCoeff) / (airDensity+1e-6)*airAbsorbance;
//------------------------------------
//------ LPV FOG EFFECT
//------------------------------------
#if defined LPV_VL_FOG_ILLUMINATION && defined EXCLUDE_WRITE_TO_LUT
color += LPV_FOG_ILLUMINATION(progressW-cameraPosition, dd, dL) * totalAbsorbance;
#endif
/// GLOBAL FOG
float fogDensity = kill*getFogDensities(rayProgress, 0.0);
float fogVolumeCoeff = exp(-fogDensity*dd*rayLength);
vec3 fogLighting = LightColor*sunPhase*shadows + AmbientColor*skyPhase;
// #if defined LPV_VL_FOG_ILLUMINATION && defined EXCLUDE_WRITE_TO_LUT
// color += LPV_ILLUMINATION;
// #endif
#if defined LIGHTNING_FLASH && defined LIGHTNINGFLASH_VL
fogLighting += lightningFlash;
#endif
color += (fogLighting - fogLighting * fogVolumeCoeff) * absorbance;
/// LOCAL FOG
#if (defined CloudLayer0 || defined CloudLayer1 || defined CloudLayer2)
kill = length(d*localRayStartPos) > cloudPlaneDistance ? 0.0 : 1.0;
#endif
float localEffectDensity = kill * getLocalEffectDensity(localRayProgress);
float localFogVolumeCoeff = exp(-localEffectDensity*dd*localRayLength);
vec3 localFogLighting = localFogColor_lightCol*shadows*sunPhase + localFogColor_ambientCol*skyPhase;
color += (localFogLighting - localFogLighting * localFogVolumeCoeff) * localAbsorbance;
localAbsorbance *= localFogVolumeCoeff;
airAbsorbance *= airVolumeCoeff*fogVolumeCoeff*localFogVolumeCoeff;
absorbance *= fogVolumeCoeff*localFogVolumeCoeff*dot(airVolumeCoeff,vec3(0.33333));
}
// sceneColor = finalsceneColor;
// atmosphereAlpha = atmosphereAbsorbance;
return vec4(color, totalAbsorbance);
return vec4(color, absorbance);
}
+1 -1
View File
@@ -9,4 +9,4 @@
#endif
#define BLOOM_QUALITY 0.5 // Reduces the resolution at which bloom is computed. (0.5 = half of default resolution) [0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1. ]
#define VL_RENDER_RESOLUTION 0.5 // Reduces the resolution at which volumetric fog is computed. (0.5 = half of default resolution) [0.25 0.5 1.0]
#define VL_RENDERING_RESOLUTION_SCALE 0.5 // Reduces the resolution at which volumetric fog is computed. (0.5 = half of default resolution) [0.25 0.5 1.0]
+614 -176
View File
@@ -1,197 +1,604 @@
#if !defined READ_SCENE_CONTROLLER_PARAMETERS
#if defined USE_SCENE_CONTROLLER_SETTINGS
/*===============================================================================================================================================================
=============== HOW TO MAKE FUNCTIONAL CUSTOM SCENE CONTROLLER PARAMETERS ===============
THERE ARE 2 FILES YOU NEED TO OPEN INSIDE OF THE SHADERPACK FOLDER AS TO OPERATE WITHIN
- the "shaders.properties" file located in shaderpacks/bliss/shaders/shaders.properties
- the "scene_controller.glsl" file located in shaderpacks/bliss/shaders/lib/scene_controller.glsl (you are already in it reading its contents)
you can create a custom configuration of parameters that appear in specific circumstances within minecraft.
to do this, you first need to know when you are in a specific circumstance.
you need to create "triggers", which have 2 states, a true and a false state. these are known as "boolean" variables
here is a step by step process of how to create and use your own custom uniform "trigger", and use it to activate your own parameters in the scene controller.
------------- STEP 1 -------------
create a "custom uniform". it should be a boolean value that returns as true or false.
these are created and named in the "shaders.properties" file
take note of writing style and syntax or errors will happen
examples:
blank slates for syntax clarity
uniform.bool.blankBool = if(VALUE <is greater/less than, or equal to> ANOTHER_VALUE)
uniform.bool.blankBool = if(VALUE > ANOTHE_RVALUE)
uniform.bool.blankBool = if(VALUE < ANOTHER_VALUE)
uniform.bool.blankBool = if(VALUE == ANOTHER_VALUE)
uniform.bool.blankBool = in(biome, BIOME_A, BIOME_B, BIOME_C)
uniform.bool.blankBool = in(biome, BIOME_A)
uniform.bool.nameWhateverYouWant_isExampleBool1 = in(biome, BIOME_DARK_FOREST, BIOME_DESERT, BIOME_PLAINS)
uniform.bool.nameWhateverYouWant_isExampleBool2 = if(nightvision > 0.0)
uniform.bool.nameWhateverYouWant_isExampleBool3 = if(cameraPosition.x < 40.0 && cameraPosition.y > -100.0)
uniform.bool.nameWhateverYouWant_isExampleBool4 = if(rainStrength > 0.0)
uniform.bool.nameWhateverYouWant_isExampleBool5 = if(eyeBrightness.x/240.0 > 0.0)
there are many things you can detect (this is by no means a complete list, links to the iris documentation of what you can detect are linked below)
-if it is raining/thunderstorming (snowing and raining are one in the same here sadly)
-what biome the player is standing in
-the torch/sky light level the player is standing in
-the position in world coordinates the player is standing in
-if the player is above or under water/lava/powderedsnow
-if the player has above or below specific health/armor/hunger values
-if the player has nightvision/darkness/blindness/invisibility (theres only a few potion status effects you can detect)
-if the player is on fire or not
documentation for creating custom uniforms in shaders.properties https://shaders.properties/current/reference/shadersproperties/custom_uniforms/
documentation for player status related uniforms https://shaders.properties/current/reference/uniforms/status/
documentation for player position/camera related uniforms https://shaders.properties/current/reference/uniforms/camera/
------------- STEP 2 -------------
declare/call the variable in the "scene_controller.glsl" file
this is required to make use of the custom uniform you made in the shader.properties file
take note of writing style and syntax or errors will happen
example:
uniform bool nameWhateverYouWant_isExampleBool1;
uniform bool nameWhateverYouWant_isExampleBool2;
uniform bool nameWhateverYouWant_isExampleBool3;
------------- STEP 3 -------------
use the custom uniform
in the scene_controller.glsl file, within the applySceneControllerParameters() function, there is a designated area.
in that area, you will check if the custom uniforms you have made are true or false or "triggered", and if any are true, make the parameters equal whatever values you want.
take note of writing style and syntax or errors will happen
example:
blank slate for syntax clarity
if( <arguements go here> ){
<what runs does when the arguement is true>;
}
if( nameWhateverYouWant_isExampleBool1 ){
smallCumulusCoverage = 1.0;
smallCumulusDensity = 0.5;
fogColor = vec3(1.0, 0.0, 0.0);
}
if( nameWhateverYouWant_isExampleBool2 ){
smallCumulusCoverage = 0.0;
smallCumulusDensity = 0.2;
fogColor = vec3(1.0, 1.0, 1.0);
}
if( nameWhateverYouWant_isExampleBool3 ){
smallCumulusCoverage = 0.0;
smallCumulusDensity = 0.2;
fogColor = vec3(1.0, 1.0, 1.0);
}
for color picking, the shader is mixing RGB values together. the values are in the 0.0 to 1.0 range instead of 0.0 to 255.0
example:
vec3 exampleColor1 = vec3(RedValue, GreenValue, BlueValue);
vec3 exampleColor2 = vec3(1.0, 0.724, 0.1114);
this is a handy tool for colorpicking in the correct number range: https://rgbcolorpicker.com/0-1
------------- STEP 4 -------------
save both files, and reload the shaderpack (you can click R or just enable/disable it).
that is the end of the guide.
=============== DEBUGGING ===============
for debugging shaders.properties, you will need to
1. look at the game's latest.log, it will spit errors out, while nothing apparent will be wrong in-game when reloading the shader
for debugging scene_controller.glsl,you will need to
1. open the shaderpacks selection menu
2. click the key combination CTRL + D and enable debug mode
3. if errors happen it will tell you whats wrong, kind of.
if you follow syntax it should not error, if it does, check for incorrect:
-spelling (capitalization, incorrect variable names)
-use of semicolons ; (they should be a stopper at the end-point of EVERY line of code but only in scene_controller.glsl. DO NOT use them like that in shaders.propertes, or it will error)
-use of brackets ()
-use of other brackets {}
=============== IMPORTANT NOTES ===============
different custom uniforms SHOULD NOT be allowed to return true at the same times, otherwise they will overwrite eachother in order of what is done last, reading from the top of the file to the bottom.
example:
if you make a custom uniform that returns true if the player is in the swamp, and a second different custom uniform that returns true when a player is above the Y coord of 40
if( isInSwampBiome ){
smallCumulusCoverage = 1.0;
smallCumulusDensity = 0.5;
}
if( isAboveYCoord ){
smallCumulusCoverage = 0.2;
smallCumulusDensity = 0.1;
}
THIS WILL CONFLICT if you are at the same time in a swamp, and above Y coord 40.
in this case, isAboveYCoord's settings wins and will overwrite isInSwampBiome's settings.
this will not cause an error or warning, its just how the math works and how the shader compiler reads the code.
YOU CANNOT ADD NEW PARAMETERS TO CONTROL, YOU ARE ONLY ABLE TO CONTROL PRE-EXISTING ONES
BECAUSE ADDING NEW ONES IS ALOT MORE COMPLEX AND REQUIRES KNOWING HOW TO CODE IN GLSL AND KNOWLEDGE OF HOW THE SHADER IS DESIGNED
===============================================================================================================================================================*/
//=============== DECLARE UNIFORMS BELOW HERE ===============
uniform int worldDay;
//=============== DECLARE UNIFORMS ABOVE HERE ===============
uniform ivec3 cameraPositionInt;
uniform bool isInColdArea;
uniform bool isInHotArea;
uniform bool isInJungleBiomes;
uniform bool isInSwampBiomes;
uniform bool isInSpecialEnviornment;
uniform bool isInSnowFallEnviornment;
uniform bool isInRainFallEnviornment;
uniform bool isInNoRainFallEnviornment;
uniform int worldTime;
#define DECLARE_UNIFORMS_OR_WRITE_FUNCTIONS_FOR_CUSTOM_SCENE_CONTROLLER_PROFILES
#include /CUSTOM_SCENE_PARAMETERS.glsl
// https://www.shadertoy.com/view/llGSzw
float hash11( uint n )
{
// integer hash copied from Hugo Elias
n = (n << 13U) ^ n;
n = n * (n * n * 15731U + 789221U) + 1376312589U;
return float( n & uint(0x7fffffffU))/float(0x7fffffff);
}
bool playerIsWithinArea(in vec3 positionA, in vec3 positionB){
return cameraPositionInt.x > positionA.x && cameraPositionInt.y > positionA.y && cameraPositionInt.z > positionA.z && cameraPositionInt.x < positionB.x && cameraPositionInt.y < positionB.y && cameraPositionInt.z < positionB.z;
}
bool playerIsOutsideArea(in vec3 positionA, in vec3 positionB){
return !(cameraPositionInt.x > positionA.x && cameraPositionInt.y > positionA.y && cameraPositionInt.z > positionA.z && cameraPositionInt.x < positionB.x && cameraPositionInt.y < positionB.y && cameraPositionInt.z < positionB.z);
}
vec4 timesOfDay(){
float time = float(worldTime%24000);
// set schedules for fog to appear at specific ranges of time in the day.
float morning = clamp((time-22000.0)/2000.0,0.0,1.0) + clamp((2000.0-time)/2000.0,0.0,1.0);
float noon = clamp(time/2000.0,0.0,1.0) * clamp((12000.0-time)/2000.0,0.0,1.0);
float evening = clamp((time-10000.0)/2000.0,0.0,1.0) * clamp((14000.0-time)/2000.0,0.0,1.0);
float night = clamp((time-13000.0)/2000.0,0.0,1.0) * clamp((23000.0-time)/2000.0,0.0,1.0);
return (float(TOD_FOG_AMOUNT) / 100.0) * vec4(morning, noon, evening, night);
}
void applySceneControllerParameters(
out float smallCumulusCoverage, out float smallCumulusDensity,
out float largeCumulusCoverage, out float largeCumulusDensity,
out float altostratusCoverage, out float altostratusDensity,
out float fogA, out float fogB
out float uniformFogDensity, out float clumpyFogDensity,
out float LocalUniformFogDensity, out float LocalClumpyFogDensity, out vec3 localFogColor
){
// these are the default parameters if no "trigger" or custom uniform is being used.
// do not remove them
smallCumulusCoverage = CloudLayer0_coverage;
smallCumulusDensity = CloudLayer0_density;
largeCumulusCoverage = CloudLayer1_coverage;
largeCumulusDensity = CloudLayer1_density;
altostratusCoverage = CloudLayer2_coverage;
altostratusDensity = CloudLayer2_density;
fogA = 1.0;
fogB = 1.0;
smallCumulusCoverage = 0.0;
smallCumulusDensity = 0.0;
largeCumulusCoverage = 0.0;
largeCumulusDensity = 0.0;
altostratusCoverage = 0.0;
altostratusDensity = 0.0;
uniformFogDensity = 0.0;
clumpyFogDensity = 0.0;
LocalUniformFogDensity = 0.0;
LocalClumpyFogDensity = 0.0;
localFogColor = vec3(1.0);
//=============== CONFIGURE CUSTOM SCENE PARAMETERS BELOW HERE ===============
#if TOD_FOG_AMOUNT > 0
vec4 timesOfDay = timesOfDay();
uniformFogDensity = dot(timesOfDay, vec4(Morning_Uniform_Fog, Noon_Uniform_Fog, Evening_Uniform_Fog, Night_Uniform_Fog));
clumpyFogDensity = dot(timesOfDay, vec4(Morning_Cloudy_Fog, Noon_Cloudy_Fog, Evening_Cloudy_Fog, Night_Cloudy_Fog));
#endif
//=============== CONFIGURE CUSTOM SCENE PARAMETERS ABOVE HERE ===============
// the seed is the in-game day counter.
// give a random value within the range 0.0-1.0 which is scaled up to the wanted range, and then quantized to choose a profile
float RNG = hash11(worldDay + 0.2);
#if USE_CUSTOM_DAILY_WEATHER_PROFILE == 0
int dailyWeatherProfile = int(RNG * 11.0);
switch (dailyWeatherProfile){
default : {
altostratusCoverage = 0.0;
largeCumulusCoverage = 0.0;
smallCumulusCoverage = 0.0;
altostratusDensity = 0.0;
largeCumulusDensity = 0.0;
smallCumulusDensity = 0.0;
break;
}
case 1: {
altostratusCoverage = 0.0;
largeCumulusCoverage = 1.0;
smallCumulusCoverage = 1.0;
altostratusDensity = 0.0;
largeCumulusDensity = 0.5;
smallCumulusDensity = 0.25;
break;
}
case 2: {
altostratusCoverage = 1.0;
largeCumulusCoverage = 1.0;
smallCumulusCoverage = 0.0;
altostratusDensity = 0.5;
largeCumulusDensity = 0.5;
smallCumulusDensity = 0.0;
break;
}
case 3: {
altostratusCoverage = 0.0;
largeCumulusCoverage = 1.1;
smallCumulusCoverage = 0.0;
altostratusDensity = 0.0;
largeCumulusDensity = 0.5;
smallCumulusDensity = 0.0;
break;
}
case 4: {
altostratusCoverage = 1.5;
largeCumulusCoverage = 0.0;
smallCumulusCoverage = 1.0;
altostratusDensity = 0.25;
largeCumulusDensity = 0.1;
smallCumulusDensity = 0.1;
break;
}
case 5 : {
altostratusCoverage = 1.0;
largeCumulusCoverage = 0.1;
smallCumulusCoverage = 1.0;
altostratusDensity = 0.1;
largeCumulusDensity = 0.5;
smallCumulusDensity = 0.5;
break;
}
case 6: {
altostratusCoverage = 1.0;
largeCumulusCoverage = 0.0;
smallCumulusCoverage = 0.0;
altostratusDensity = 0.5;
largeCumulusDensity = 0.0;
smallCumulusDensity = 0.0;
break;
}
case 7: {
altostratusCoverage = 0.0;
largeCumulusCoverage = 1.9;
smallCumulusCoverage = 0.0;
altostratusDensity = 0.0;
largeCumulusDensity = 0.2;
smallCumulusDensity = 0.0;
break;
}
case 8: {
altostratusCoverage = 0.0;
largeCumulusCoverage = 0.0;
smallCumulusCoverage = 1.4;
altostratusDensity = 0.0;
largeCumulusDensity = 0.0;
smallCumulusDensity = 0.5;
break;
}
case 9: {
altostratusCoverage = 2.0;
largeCumulusCoverage = 0.0;
smallCumulusCoverage = 0.0;
altostratusDensity = 0.3;
largeCumulusDensity = 0.0;
smallCumulusDensity = 0.0;
break;
}
case 10: {
altostratusCoverage = 0.0;
largeCumulusCoverage = 0.0;
smallCumulusCoverage = 1.0;
altostratusDensity = 0.0;
largeCumulusDensity = 0.0;
smallCumulusDensity = 0.5;
break;
}
}
#endif
#if USE_CUSTOM_DAILY_WEATHER_PROFILE > 0
int customDailyWeatherProfile = int(RNG * float(USE_CUSTOM_DAILY_WEATHER_PROFILE));
switch (customDailyWeatherProfile){
default : {
smallCumulusCoverage = DAILY_PROFILE_1_LAYER0_COVERAGE;
largeCumulusCoverage = DAILY_PROFILE_1_LAYER1_COVERAGE;
altostratusCoverage = DAILY_PROFILE_1_LAYER2_COVERAGE;
smallCumulusDensity = DAILY_PROFILE_1_LAYER0_DENSITY;
largeCumulusDensity = DAILY_PROFILE_1_LAYER1_DENSITY;
altostratusDensity = DAILY_PROFILE_1_LAYER2_DENSITY;
break;
}
#if USE_CUSTOM_DAILY_WEATHER_PROFILE >= 2
case 1: {
smallCumulusCoverage = DAILY_PROFILE_2_LAYER0_COVERAGE;
largeCumulusCoverage = DAILY_PROFILE_2_LAYER1_COVERAGE;
altostratusCoverage = DAILY_PROFILE_2_LAYER2_COVERAGE;
smallCumulusDensity = DAILY_PROFILE_2_LAYER0_DENSITY;
largeCumulusDensity = DAILY_PROFILE_2_LAYER1_DENSITY;
altostratusDensity = DAILY_PROFILE_2_LAYER2_DENSITY;
break;
}
#endif
#if USE_CUSTOM_DAILY_WEATHER_PROFILE >= 3
case 2: {
smallCumulusCoverage = DAILY_PROFILE_3_LAYER0_COVERAGE;
largeCumulusCoverage = DAILY_PROFILE_3_LAYER1_COVERAGE;
altostratusCoverage = DAILY_PROFILE_3_LAYER2_COVERAGE;
smallCumulusDensity = DAILY_PROFILE_3_LAYER0_DENSITY;
largeCumulusDensity = DAILY_PROFILE_3_LAYER1_DENSITY;
altostratusDensity = DAILY_PROFILE_3_LAYER2_DENSITY;
break;
}
#endif
#if USE_CUSTOM_DAILY_WEATHER_PROFILE >= 4
case 3: {
smallCumulusCoverage = DAILY_PROFILE_4_LAYER0_COVERAGE;
largeCumulusCoverage = DAILY_PROFILE_4_LAYER1_COVERAGE;
altostratusCoverage = DAILY_PROFILE_4_LAYER2_COVERAGE;
smallCumulusDensity = DAILY_PROFILE_4_LAYER0_DENSITY;
largeCumulusDensity = DAILY_PROFILE_4_LAYER1_DENSITY;
altostratusDensity = DAILY_PROFILE_4_LAYER2_DENSITY;
break;
}
#endif
#if USE_CUSTOM_DAILY_WEATHER_PROFILE >= 5
case 4: {
smallCumulusCoverage = DAILY_PROFILE_5_LAYER0_COVERAGE;
largeCumulusCoverage = DAILY_PROFILE_5_LAYER1_COVERAGE;
altostratusCoverage = DAILY_PROFILE_5_LAYER2_COVERAGE;
smallCumulusDensity = DAILY_PROFILE_5_LAYER0_DENSITY;
largeCumulusDensity = DAILY_PROFILE_5_LAYER1_DENSITY;
altostratusDensity = DAILY_PROFILE_5_LAYER2_DENSITY;
break;
}
#endif
#if USE_CUSTOM_DAILY_WEATHER_PROFILE >= 6
case 5 : {
smallCumulusCoverage = DAILY_PROFILE_6_LAYER0_COVERAGE;
largeCumulusCoverage = DAILY_PROFILE_6_LAYER1_COVERAGE;
altostratusCoverage = DAILY_PROFILE_6_LAYER2_COVERAGE;
smallCumulusDensity = DAILY_PROFILE_6_LAYER0_DENSITY;
largeCumulusDensity = DAILY_PROFILE_6_LAYER1_DENSITY;
altostratusDensity = DAILY_PROFILE_6_LAYER2_DENSITY;
break;
}
#endif
}
#endif
if(rainStrength > 0.0001){
#if USE_CUSTOM_DAILY_RAIN_PROFILE == 0
int rainyWeatherProfile = int(RNG * 6.0);
switch (rainyWeatherProfile){
///////////////////////// TEMPERATE WEATHER PROFILES
default : { // light rain
smallCumulusCoverage = 1.5;
smallCumulusDensity = 0.25;
largeCumulusCoverage = 0.0;
altostratusCoverage = 2.0;
altostratusDensity = 0.1;
uniformFogDensity = 0.1;
clumpyFogDensity = 0.2;
break;
}
case 1: { // medium rain
smallCumulusCoverage = 0.0;
largeCumulusCoverage = 1.5;
largeCumulusDensity = 0.25;
altostratusCoverage = 1.5;
altostratusDensity = 0.5;
uniformFogDensity = 0.2;
clumpyFogDensity = 0.4;
break;
}
case 2: { // heavy rain
smallCumulusCoverage = 1.5;
smallCumulusDensity = 0.25;
largeCumulusCoverage = 1.5;
largeCumulusDensity = 0.25;
altostratusCoverage = 1.3;
altostratusDensity = 0.5;
uniformFogDensity = 0.3;
clumpyFogDensity = 0.2;
break;
}
case 3: { // heavy rain
smallCumulusCoverage = 1.5;
smallCumulusDensity = 0.25;
largeCumulusCoverage = 1.5;
largeCumulusDensity = 0.25;
altostratusCoverage = 1.3;
altostratusDensity = 0.5;
uniformFogDensity = 0.1;
clumpyFogDensity = 0.2;
break;
}
case 4: { // medium rain
smallCumulusCoverage = 0.0;
largeCumulusCoverage = 1.5;
largeCumulusDensity = 0.25;
altostratusCoverage = 2.0;
altostratusDensity = 0.3;
uniformFogDensity = 0.1;
clumpyFogDensity = 0.2;
break;
}
case 5: { // light rain
smallCumulusCoverage = 0.0;
largeCumulusCoverage = 1.8;
largeCumulusDensity = 0.1;
altostratusCoverage = 0.0;
uniformFogDensity = 0.1;
clumpyFogDensity = 0.2;
break;
}
}
#endif
#if USE_CUSTOM_DAILY_RAIN_PROFILE > 0
int customRainyWeatherProfile = int(RNG * USE_CUSTOM_DAILY_RAIN_PROFILE);
switch (customRainyWeatherProfile){
default : {
smallCumulusCoverage = RAINY_PROFILE_1_LAYER0_COVERAGE;
largeCumulusCoverage = RAINY_PROFILE_1_LAYER1_COVERAGE;
altostratusCoverage = RAINY_PROFILE_1_LAYER2_COVERAGE;
smallCumulusDensity = RAINY_PROFILE_1_LAYER0_DENSITY;
largeCumulusDensity = RAINY_PROFILE_1_LAYER1_DENSITY;
altostratusDensity = RAINY_PROFILE_1_LAYER2_DENSITY;
break;
}
#if USE_CUSTOM_DAILY_RAIN_PROFILE >= 2
case 1: {
smallCumulusCoverage = RAINY_PROFILE_2_LAYER0_COVERAGE;
largeCumulusCoverage = RAINY_PROFILE_2_LAYER1_COVERAGE;
altostratusCoverage = RAINY_PROFILE_2_LAYER2_COVERAGE;
smallCumulusDensity = RAINY_PROFILE_2_LAYER0_DENSITY;
largeCumulusDensity = RAINY_PROFILE_2_LAYER1_DENSITY;
altostratusDensity = RAINY_PROFILE_2_LAYER2_DENSITY;
break;
}
#endif
#if USE_CUSTOM_DAILY_RAIN_PROFILE >= 3
case 2: {
smallCumulusCoverage = RAINY_PROFILE_3_LAYER0_COVERAGE;
largeCumulusCoverage = RAINY_PROFILE_3_LAYER1_COVERAGE;
altostratusCoverage = RAINY_PROFILE_3_LAYER2_COVERAGE;
smallCumulusDensity = RAINY_PROFILE_3_LAYER0_DENSITY;
largeCumulusDensity = RAINY_PROFILE_3_LAYER1_DENSITY;
altostratusDensity = RAINY_PROFILE_3_LAYER2_DENSITY;
break;
}
#endif
#if USE_CUSTOM_DAILY_RAIN_PROFILE >= 4
case 3: {
smallCumulusCoverage = RAINY_PROFILE_4_LAYER0_COVERAGE;
largeCumulusCoverage = RAINY_PROFILE_4_LAYER1_COVERAGE;
altostratusCoverage = RAINY_PROFILE_4_LAYER2_COVERAGE;
smallCumulusDensity = RAINY_PROFILE_4_LAYER0_DENSITY;
largeCumulusDensity = RAINY_PROFILE_4_LAYER1_DENSITY;
altostratusDensity = RAINY_PROFILE_4_LAYER2_DENSITY;
break;
}
#endif
#if USE_CUSTOM_DAILY_RAIN_PROFILE >= 5
case 4: {
smallCumulusCoverage = RAINY_PROFILE_5_LAYER0_COVERAGE;
largeCumulusCoverage = RAINY_PROFILE_5_LAYER1_COVERAGE;
altostratusCoverage = RAINY_PROFILE_5_LAYER2_COVERAGE;
smallCumulusDensity = RAINY_PROFILE_5_LAYER0_DENSITY;
largeCumulusDensity = RAINY_PROFILE_5_LAYER1_DENSITY;
altostratusDensity = RAINY_PROFILE_5_LAYER2_DENSITY;
break;
}
#endif
#if USE_CUSTOM_DAILY_RAIN_PROFILE >= 6
case 5 : {
smallCumulusCoverage = RAINY_PROFILE_6_LAYER0_COVERAGE;
largeCumulusCoverage = RAINY_PROFILE_6_LAYER1_COVERAGE;
altostratusCoverage = RAINY_PROFILE_6_LAYER2_COVERAGE;
smallCumulusDensity = RAINY_PROFILE_6_LAYER0_DENSITY;
largeCumulusDensity = RAINY_PROFILE_6_LAYER1_DENSITY;
altostratusDensity = RAINY_PROFILE_6_LAYER2_DENSITY;
break;
}
#endif
}
#endif
#if USE_CUSTOM_HOT_BIOME_RAIN_PROFILE == 0 || USE_CUSTOM_COLD_BIOME_RAIN_PROFILE == 0
// simply shift the index ahead for enviornment switching
int biomeRainyWeatherProfile = int(RNG * 3.0);
#if USE_CUSTOM_HOT_BIOME_RAIN_PROFILE == 0
if(isInHotArea && isInNoRainFallEnviornment) biomeRainyWeatherProfile += 3;
#endif
#if USE_CUSTOM_COLD_BIOME_RAIN_PROFILE == 0
if(isInColdArea && isInSnowFallEnviornment) biomeRainyWeatherProfile += 6;
#endif
switch (biomeRainyWeatherProfile){
default : {
break;
}
#if USE_CUSTOM_HOT_BIOME_RAIN_PROFILE == 0
case 3: { // clear
uniformFogDensity = 0.0;
clumpyFogDensity = 0.0;
break;
}
case 4: { // dust storm
LocalUniformFogDensity = 0.03;
LocalClumpyFogDensity = 0.2;
localFogColor = vec3(1.0,0.5,0.3);
uniformFogDensity = 0.0;
clumpyFogDensity = 0.0;
break;
}
case 5: { // sand storm
LocalUniformFogDensity = 0.08;
LocalClumpyFogDensity = 0.5;
localFogColor = vec3(1.0,0.3,0.1)*2.0;
uniformFogDensity = 0.0;
clumpyFogDensity = 0.0;
break;
}
#endif
#if USE_CUSTOM_COLD_BIOME_RAIN_PROFILE == 0
case 6: { // light snow
LocalUniformFogDensity = 0.0085;
LocalClumpyFogDensity = 0.0;
localFogColor = vec3(0.4,0.6,1.0) * 5.0;
uniformFogDensity = 0.0;
clumpyFogDensity = 0.0;
break;
}
case 7: { // snow storm
LocalUniformFogDensity = 0.03;
LocalClumpyFogDensity = 0.2;
localFogColor = vec3(0.4,0.6,1.0) * 5.0;
uniformFogDensity = 0.0;
clumpyFogDensity = 0.0;
break;
}
case 8: { // blizzard
LocalUniformFogDensity = 0.07;
LocalClumpyFogDensity = 1.0;
localFogColor = vec3(0.4,0.6,1.0) * 5.0;
uniformFogDensity = 0.0;
clumpyFogDensity = 0.0;
break;
}
#endif
}
#endif
#if USE_CUSTOM_HOT_BIOME_RAIN_PROFILE > 0
if(isInHotArea && isInNoRainFallEnviornment){
uniformFogDensity = 0.0;
clumpyFogDensity = 0.0;
int customHotBiomeRainyWeatherProfile = int(RNG * USE_CUSTOM_HOT_BIOME_RAIN_PROFILE);
switch (customHotBiomeRainyWeatherProfile){
default : {
LocalUniformFogDensity = HOT_BIOME_RAINY_PROFILE_1_UNIFORM_FOG_DENSITY;
LocalClumpyFogDensity = HOT_BIOME_RAINY_PROFILE_1_CLUMPY_FOG_DENSITY;
localFogColor = vec3(HOT_BIOME_RAINY_PROFILE_1_FOG_COLOR_R, HOT_BIOME_RAINY_PROFILE_1_FOG_COLOR_G, HOT_BIOME_RAINY_PROFILE_1_FOG_COLOR_B);
break;
}
#if USE_CUSTOM_HOT_BIOME_RAIN_PROFILE >= 2
case 1: {
LocalUniformFogDensity = HOT_BIOME_RAINY_PROFILE_2_UNIFORM_FOG_DENSITY;
LocalClumpyFogDensity = HOT_BIOME_RAINY_PROFILE_2_CLUMPY_FOG_DENSITY;
localFogColor = vec3(HOT_BIOME_RAINY_PROFILE_2_FOG_COLOR_R, HOT_BIOME_RAINY_PROFILE_2_FOG_COLOR_G, HOT_BIOME_RAINY_PROFILE_2_FOG_COLOR_B);
break;
}
#endif
#if USE_CUSTOM_HOT_BIOME_RAIN_PROFILE >= 3
case 2: {
LocalUniformFogDensity = HOT_BIOME_RAINY_PROFILE_3_UNIFORM_FOG_DENSITY;
LocalClumpyFogDensity = HOT_BIOME_RAINY_PROFILE_3_CLUMPY_FOG_DENSITY;
localFogColor = vec3(HOT_BIOME_RAINY_PROFILE_3_FOG_COLOR_R, HOT_BIOME_RAINY_PROFILE_3_FOG_COLOR_G, HOT_BIOME_RAINY_PROFILE_3_FOG_COLOR_B);
break;
}
#endif
}
}
#endif
#if USE_CUSTOM_COLD_BIOME_RAIN_PROFILE > 0
if(isInColdArea && isInSnowFallEnviornment){
uniformFogDensity = 0.0;
clumpyFogDensity = 0.0;
int customHotBiomeRainyWeatherProfile = int(RNG * USE_CUSTOM_COLD_BIOME_RAIN_PROFILE);
switch (customHotBiomeRainyWeatherProfile){
default : {
LocalUniformFogDensity = COLD_BIOME_RAINY_PROFILE_1_UNIFORM_FOG_DENSITY;
LocalClumpyFogDensity = COLD_BIOME_RAINY_PROFILE_1_CLUMPY_FOG_DENSITY;
localFogColor = vec3(COLD_BIOME_RAINY_PROFILE_1_FOG_COLOR_R, COLD_BIOME_RAINY_PROFILE_1_FOG_COLOR_G, COLD_BIOME_RAINY_PROFILE_1_FOG_COLOR_B);
break;
}
#if USE_CUSTOM_COLD_BIOME_RAIN_PROFILE >= 2
case 1: {
LocalUniformFogDensity = COLD_BIOME_RAINY_PROFILE_2_UNIFORM_FOG_DENSITY;
LocalClumpyFogDensity = COLD_BIOME_RAINY_PROFILE_2_CLUMPY_FOG_DENSITY;
localFogColor = vec3(COLD_BIOME_RAINY_PROFILE_2_FOG_COLOR_R, COLD_BIOME_RAINY_PROFILE_2_FOG_COLOR_G, HCOLDBIOME_RAINY_PROFILE_2_FOG_COLOR_B);
break;
}
#endif
#if USE_CUSTOM_COLD_BIOME_RAIN_PROFILE >= 3
case 2: {
LocalUniformFogDensity = COLD_BIOME_RAINY_PROFILE_3_UNIFORM_FOG_DENSITY;
LocalClumpyFogDensity = COLD_BIOME_RAINY_PROFILE_3_CLUMPY_FOG_DENSITY;
localFogColor = vec3(HCOLDBIOME_RAINY_PROFILE_3_FOG_COLOR_R, COLD_BIOME_RAINY_PROFILE_3_FOG_COLOR_G, COLD_BIOME_RAINY_PROFILE_3_FOG_COLOR_B);
break;
}
#endif
}
}
#endif
}
#if USE_CUSTOM_SWAMP_CATEGORY_PROFILE == 0
if(isInSwampBiomes){
uniformFogDensity = 0.0;
clumpyFogDensity = 0.0;
LocalUniformFogDensity = 0.01;
LocalClumpyFogDensity = 0.1;
localFogColor = vec3(0.8,1.0,0.1);
}
#endif
#if USE_CUSTOM_SWAMP_CATEGORY_PROFILE == 1
if(isInSwampBiomes){
uniformFogDensity = 0.0;
clumpyFogDensity = 0.0;
LocalUniformFogDensity = CUSTOM_SWAMP_PROFILE_1_UNIFORM_FOG_DENSITY;
LocalClumpyFogDensity = CUSTOM_SWAMP_PROFILE_1_CLUMPY_FOG_DENSITY;
localFogColor = vec3(CUSTOM_SWAMP_PROFILE_1_FOG_COLOR_R, CUSTOM_SWAMP_PROFILE_1_FOG_COLOR_G, CUSTOM_SWAMP_PROFILE_1_FOG_COLOR_B);
}
#endif
#if USE_CUSTOM_JUNGLE_CATEGORY_PROFILE == 0
if(isInJungleBiomes){
uniformFogDensity = 0.0;
clumpyFogDensity = 0.0;
LocalUniformFogDensity = 0.01;
LocalClumpyFogDensity = 0.0;
localFogColor = vec3(0.5,1.0,0.8);
}
#endif
#if USE_CUSTOM_JUNGLE_CATEGORY_PROFILE == 1
if(isInJungleBiomes){
uniformFogDensity = 0.0;
clumpyFogDensity = 0.0;
LocalUniformFogDensity = CUSTOM_JUNGLE_PROFILE_1_UNIFORM_FOG_DENSITY;
LocalClumpyFogDensity = CUSTOM_JUNGLE_PROFILE_1_CLUMPY_FOG_DENSITY;
localFogColor = vec3(CUSTOM_JUNGLE_PROFILE_1_FOG_COLOR_R, CUSTOM_JUNGLE_PROFILE_1_FOG_COLOR_G, CUSTOM_JUNGLE_PROFILE_1_FOG_COLOR_B);
}
#endif
#define WRITE_CUSTOM_SCENE_CONTROLLER_PROFILES
#include /CUSTOM_SCENE_PARAMETERS.glsl
//====================================================================================================================================================================
//=============== EVERYTHING BELOW HERE IS NOT FOR CUSTOM SCENE CONTROLLER STUFF AND SHOULD NOT BE MODIFIED UNLESS YOU KNOW EXACTLY WHAT YOU ARE DOING ===============
//====================================================================================================================================================================
// write various parameters within singular pixels of a texture, which is a non-clearing buffer reprojecting the previous frame of itself, onto itself.
// this allows smooth interpolation over time from any old parameter value, to any new parameter value.
// read in vertex stage of post processing passes (deferred, composite), so it only runs on 4 vertices
// pass to fragment stage for use.
// the parameters are stored as such:
// smallCumulus = (coverage, density)
// largeCumulus = (coverage, density)
// altostratus = (coverage, density)
// fog = (uniform fog density, cloudy fog density)
// ... and more, eventually
}
#endif
flat varying struct sceneController {
vec2 smallCumulus;
vec2 largeCumulus;
vec2 altostratus;
vec2 fog;
vec2 localFog;
vec3 localFogColor;
} parameters;
vec3 writeSceneControllerParameters(
@@ -199,7 +606,9 @@ vec3 writeSceneControllerParameters(
vec2 smallCumulus,
vec2 largeCumulus,
vec2 altostratus,
vec2 fog
vec2 fog,
vec2 localFog,
vec3 localFogColor
){
// in colortex4, data is written in a 3x3 pixel area from (1,1) to (3,3)
@@ -208,9 +617,9 @@ vec3 writeSceneControllerParameters(
/* (1,3) */ bool topLeft = uv.x > 1 && uv.x < 2 && uv.y > 3 && uv.y < 4;
/* (2,3) */ bool topMiddle = uv.x > 2 && uv.x < 3 && uv.y > 3 && uv.y < 4;
// /* (3,3) */ bool topRight = uv.x > 3 && uv.x < 5 && uv.y > 3 && uv.y < 4;
// /* (1,2) */ bool middleLeft = uv.x > 1 && uv.x < 2 && uv.y > 2 && uv.y < 3;
// /* (2,2) */ bool middleMiddle = uv.x > 2 && uv.x < 3 && uv.y > 2 && uv.y < 3;
/* (3,3) */ bool topRight = uv.x > 3 && uv.x < 5 && uv.y > 3 && uv.y < 4;
/* (1,2) */ bool middleLeft = uv.x > 1 && uv.x < 2 && uv.y > 2 && uv.y < 3;
/* (2,2) */ bool middleMiddle = uv.x > 2 && uv.x < 3 && uv.y > 2 && uv.y < 3;
// /* (3,2) */ bool middleRight = uv.x > 3 && uv.x < 5 && uv.y > 2 && uv.y < 3;
// /* (1,1) */ bool bottomLeft = uv.x > 1 && uv.x < 2 && uv.y > 1 && uv.y < 2;
// /* (2,1) */ bool bottomMiddle = uv.x > 2 && uv.x < 3 && uv.y > 1 && uv.y < 2;
@@ -220,6 +629,10 @@ vec3 writeSceneControllerParameters(
if(topLeft) data = vec3(smallCumulus.xy, largeCumulus.x);
if(topMiddle) data = vec3(largeCumulus.y, altostratus.xy);
if(topRight) data = vec3(fog.xy, localFog.x);
if(middleLeft) data = vec3(localFog.y, 0.0, 0.0);
if(middleMiddle) data = vec3(localFogColor.rgb);
// if(topRight) data = vec4(groundSunColor,fogSunColor.r);
// if(middleLeft) data = vec4(groundAmbientColor,fogSunColor.g);
@@ -237,16 +650,41 @@ void readSceneControllerParameters(
out vec2 smallCumulus,
out vec2 largeCumulus,
out vec2 altostratus,
out vec2 fog
out vec2 fog,
out vec2 localFog,
out vec3 localFogColor
){
// in colortex4, read the data stored within the 3 components of the sampled pixels, and pass it to the fragment stage
// 4th compnent/alpha is storing 1/4 res depth so i cant store there lol
vec3 data1 = texelFetch2D(colortex,ivec2(1,3),0).rgb/150.0;
vec3 data2 = texelFetch2D(colortex,ivec2(2,3),0).rgb/150.0;
vec3 data3 = texelFetch2D(colortex,ivec2(3,3),0).rgb/150.0;
float data4 = texelFetch2D(colortex,ivec2(1,2),0).r/150.0;
vec3 data5 = texelFetch2D(colortex,ivec2(2,2),0).rgb/150.0; // this samples a color
smallCumulus = vec2(data1.x,data1.y);
largeCumulus = vec2(data1.z,data2.x);
altostratus = vec2(data2.y,data2.z);
fog = vec2(0.0);
fog = vec2(data3.x, data3.y);
localFog = vec2(data3.z, data4);
localFogColor = vec3(data5.r,data5.g,data5.b);
}
#endif
// call the reading function within the main function
// this is so i dont have to edit the function call across every file :)))))))))))))
#if defined READ_SCENE_CONTROLLER_PARAMETERS
readSceneControllerParameters(
colortex4,
parameters.smallCumulus,
parameters.largeCumulus,
parameters.altostratus,
parameters.fog,
parameters.localFog,
parameters.localFogColor
);
#endif
+202 -210
View File
@@ -21,7 +21,6 @@
#define MINIMUM_WATER_ABSORBANCE -1 // [-1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 60 70 80 90 100]
#define rayMarchSampleCount 2 // [1 2 3 4 6 8 12 16 32 64]
#define Water_Top_Layer 62.90 // [0.90 1.90 2.90 3.90 4.90 5.90 6.90 7.90 8.90 9.90 10.90 11.90 12.90 13.90 14.90 15.90 16.90 17.90 18.90 19.90 20.90 21.90 22.90 23.90 24.90 25.90 26.90 27.90 28.90 29.90 30.90 31.90 32.90 33.90 34.90 35.90 36.90 37.90 38.90 39.90 40.90 41.90 42.90 43.90 44.90 45.90 46.90 47.90 48.90 49.90 50.90 51.90 52.90 53.90 54.90 55.90 56.90 57.90 58.90 59.90 60.90 61.90 62.90 63.90 64.90 65.90 66.90 67.90 68.90 69.90 70.90 71.90 72.90 73.90 74.90 75.90 76.90 77.90 78.90 79.90 80.90 81.90 82.90 83.90 84.90 85.90 86.90 87.90 88.90 89.90 90.90 91.90 92.90 93.90 94.90 95.90 96.90 97.90 98.90 99.90 100.90 101.90 102.90 103.90 104.90 105.90 106.90 107.90 108.90 109.90 110.90 111.90 112.90 113.90 114.90 115.90 116.90 117.90 118.90 119.90 120.90 121.90 122.90 123.90 124.90 125.90 126.90 127.90 128.90 129.90 130.90 131.90 132.90 133.90 134.90 135.90 136.90 137.90 138.90 139.90 140.90 141.90 142.90 143.90 144.90 145.90 146.90 147.90 148.90 149.90 150.90 151.90 152.90 153.90 154.90 155.90 156.90 157.90 158.90 159.90 160.90 161.90 162.90 163.90 164.90 165.90 166.90 167.90 168.90 169.90 170.90 171.90 172.90 173.90 174.90 175.90 176.90 177.90 178.90 179.90 180.90 181.90 182.90 183.90 184.90 185.90 186.90 187.90 188.90 189.90 190.90 191.90 192.90 193.90 194.90 195.90 196.90 197.90 198.90 199.90]
#define SNELLS_WINDOW
@@ -75,14 +74,16 @@
// ----- INDIRECT LIGHT RELATED SETTINGS ----- //
/////////////////////////////////////////////////
#define MIN_LIGHT_AMOUNT 0.5 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 15.0 20.0 25.0 30.0 35.0 40.0 45.0 50.0 100.0 ]
#define MIN_LIGHT_AMOUNT 0.5 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 15.0 20.0 25.0 30.0 35.0 40.0 45.0 50.0 100.0 ]
#define MINIMUM_OUTDOOR_LIGHT 0.0 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 15.0 20.0 25.0 30.0 35.0 40.0 45.0 50.0 100.0 ]
#define MINIMUM_INDOOR_LIGHT 0.2 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 15.0 20.0 25.0 30.0 35.0 40.0 45.0 50.0 100.0 ]
#define ambient_brightness 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 ]
#define AmbientLight_R 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define AmbientLight_G 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define AmbientLight_B 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define TORCH_AMOUNT 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5.0 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 6.0 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 7.0 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 8.0 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 9.0 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9 10.0]
#define TORCH_R 1.0 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
#define TORCH_G 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
@@ -104,20 +105,13 @@
#define AO_Strength 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0]
// #define SKY_CONTRIBUTION_IN_SSRT
#define UseQuarterResDepth
// #define HQ_SSGI
#define GI_Strength 1.0 // [1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 ]
#define RAY_COUNT 4 // [1 2 3 4 5 6 7 8 9 10 12 14 16 18 21 24 28 32 37 43 49 57 65 75 86 100]
#define STEPS 8 // [6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99]
#define STEP_LENGTH 12. // [4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.]
#define SEPARATE_AO
const float ambientOcclusionLevel = 1.0; // this controls vanilla minecrafts ambient occlusion. [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 ]
/////////////////////////////////////////
// ----- SHADOW RELATED SETTINGS ----- //
/////////////////////////////////////////
@@ -160,7 +154,7 @@ const float entityShadowDistanceMul = 0.25; // [0.01 0.02 0.03 0.04 0.05 0.10 0.
#define FOG_START_HEIGHT 60 // [-200 -190 -180 -170 -160 -150 -130 -120 -110 -100 -90 -80 -70 -60 -50 -40 -30 -20 -10 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200]
#define TOD_Fog_mult 1.0 // [0.00 0.25 0.50 0.75 1.0 1.25 1.50 1.75 2.00 3.00 4.00 5.00]
#define TOD_FOG_AMOUNT 100 // [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 150 200 250 300 350 400 450 500 550 600 650 700 750 800 850 900 950 1000]
#define Morning_Uniform_Fog 0.01 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
#define Morning_Cloudy_Fog 0.05 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
@@ -174,7 +168,7 @@ const float entityShadowDistanceMul = 0.25; // [0.01 0.02 0.03 0.04 0.05 0.10 0.
#define Night_Uniform_Fog 0.2 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
#define Night_Cloudy_Fog 0.05 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
#define Haze_amount 1.0 // [0.0 0.2 0.4 0.6 0.8 1.0 1.25 1.5 1.75 2.0 3.0 4.0 5.0]
#define Haze_amount 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 4.0 5.0]
#define fog_coefficientRayleighR 5.8 // [0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0]
#define fog_coefficientRayleighG 1.35 // [0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0]
#define fog_coefficientRayleighB 3.31 // [0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0]
@@ -182,8 +176,6 @@ const float entityShadowDistanceMul = 0.25; // [0.01 0.02 0.03 0.04 0.05 0.10 0.
#define fog_coefficientMieG 3.0 // [0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0]
#define fog_coefficientMieB 3.0 // [0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0]
#define RainFog_amount 0.1 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
#define BLOOMY_FOG 1.0 // [0.0 0.25 0.5 0.75 1.0 1.25 1.5 1.75 2.0 3.0 4.0 6.0 10.0 15.0 20.0]
#define BLOOM_STRENGTH 1.0 // [0.0 0.25 0.5 0.75 1.0 1.25 1.5 1.75 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 15.0 20.0 25.0 50.0 75.0 100.0]
@@ -206,48 +198,6 @@ const float entityShadowDistanceMul = 0.25; // [0.01 0.02 0.03 0.04 0.05 0.10 0.
#define SEA_LEVEL 62 // [-200 -195 -190 -185 -180 -175 -170 -165 -160 -155 -150 -145 -140 -135 -130 -125 -120 -115 -110 -105 -100 -95 -90 -85 -80 -75 -70 -65 -60 -55 -50 -45 -40 -35 -30 -25 -20 -15 -10 -5 0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175 180 185 190 195 200]
//////////////////////////////////////////////////////
// ----- BIOME SPECIFIC ENVIORNMENTS SETTINGS ----- //
//////////////////////////////////////////////////////
// #define PER_BIOME_ENVIRONMENT
#define SWAMP_ENV
#define SWAMP_UNIFORM_DENSITY 0.3 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
#define SWAMP_CLOUDY_DENSITY 0 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
#define SWAMP_R 0.15 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
#define SWAMP_G 0.25 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
#define SWAMP_B 0.05 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
#define JUNGLE_ENV
#define JUNGLE_UNIFORM_DENSITY 0.1 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
#define JUNGLE_CLOUDY_DENSITY 0.2 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
#define JUNGLE_R 0.5 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
#define JUNGLE_G 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
#define JUNGLE_B 0.5 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
#define DARKFOREST_ENV
#define DARKFOREST_UNIFORM_DENSITY 0.1 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
#define DARKFOREST_CLOUDY_DENSITY 0 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
#define DARKFOREST_R 0.3 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
#define DARKFOREST_G 0.4 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
#define DARKFOREST_B 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
#define SNOW_STORMS
#define SAND_STORMS
// i have to do this so it shows up in the menu lmao
#ifdef SWAMP_ENV
#endif
#ifdef JUNGLE_ENV
#endif
#ifdef DARKFOREST_ENV
#endif
#ifdef SNOW_STORMS
#endif
#ifdef SAND_STORMS
#endif
///////////////////////////////////////////////////
// ----- LABPBR MATERIALS RELATED SETTINGS ----- //
///////////////////////////////////////////////////
@@ -263,7 +213,6 @@ const float entityShadowDistanceMul = 0.25; // [0.01 0.02 0.03 0.04 0.05 0.10 0.
#define Emissive_Brightness 1.0 // [1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 15.0 20.0 25.0 30.0 35.0 40.0 45.0 50.0 100.]
#define Emissive_Curve 2.0 // [0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 ]
// #define POM
// #define Horrible_slope_normals
#define Adaptive_Step_length
@@ -281,7 +230,6 @@ const float entityShadowDistanceMul = 0.25; // [0.01 0.02 0.03 0.04 0.05 0.10 0.
#define sss_density_multiplier 1.0 // [0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0]
#define SCREENSPACE_DIRECT_SSS_BLENDING 0.5 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
// #define Porosity
#define PUDDLE_MODE 1 // [0 1 2 3]
#define Puddle_Size 1.0 // [0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5]
@@ -345,157 +293,191 @@ uniform int moonPhase;
////////////////////////////////////////
#define CloudLayer0
#define CloudLayer0_coverage 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define CloudLayer0_density 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define CloudLayer0_height 250.0 // [-300.0 -290.0 -280.0 -270.0 -260.0 -250.0 -240.0 -230.0 -220.0 -210.0 -200.0 -190.0 -180.0 -170.0 -160.0 -150.0 -140.0 -130.0 -120.0 -110.0 -100.0 -90.0 -80.0 -70.0 -60.0 -50.0 -40.0 -30.0 -20.0 -10.0 0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 210.0 220.0 230.0 240.0 250.0 260.0 270.0 280.0 290.0 300.0 310.0 320.0 330.0 340.0 350.0 360.0 370.0 380.0 390.0 400.0 410.0 420.0 430.0 440.0 450.0 460.0 470.0 480.0 490.0 500.0 510.0 520.0 530.0 540.0 550.0 560.0 570.0 580.0 590.0 600.0 700.0 800.0 900.0 1000.0 1250.0 1500.0 1750.0 2000.0 2250.0 2500.0 2750.0 3000.0 4000.0 5000.0]
#define CloudLayer0_tallness 100.0 // [0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 210.0 220.0 230.0 240.0 250.0 260.0 270.0 280.0 290.0 300.0 310.0 320.0 330.0 340.0 350.0 360.0 370.0 380.0 390.0 400.0 410.0 420.0 430.0 440.0 450.0 460.0 470.0 480.0 490.0 500.0 510.0 520.0 530.0 540.0 550.0 560.0 570.0 580.0 590.0 600.0 700.0 800.0 900.0 1000.0 1250.0 1500.0 1750.0 2000.0 2250.0 2500.0 2750.0 3000.0 4000.0 5000.0]
#define CloudLayer0_scale 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define CloudLayer1
#define CloudLayer1_coverage 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define CloudLayer1_density 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define CloudLayer1_height 500.0 // [-300.0 -290.0 -280.0 -270.0 -260.0 -250.0 -240.0 -230.0 -220.0 -210.0 -200.0 -190.0 -180.0 -170.0 -160.0 -150.0 -140.0 -130.0 -120.0 -110.0 -100.0 -90.0 -80.0 -70.0 -60.0 -50.0 -40.0 -30.0 -20.0 -10.0 0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 210.0 220.0 230.0 240.0 250.0 260.0 270.0 280.0 290.0 300.0 310.0 320.0 330.0 340.0 350.0 360.0 370.0 380.0 390.0 400.0 410.0 420.0 430.0 440.0 450.0 460.0 470.0 480.0 490.0 500.0 510.0 520.0 530.0 540.0 550.0 560.0 570.0 580.0 590.0 600.0 700.0 800.0 900.0 1000.0 1250.0 1500.0 1750.0 2000.0 2250.0 2500.0 2750.0 3000.0 4000.0 5000.0]
#define CloudLayer1_tallness 200.0 // [0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 210.0 220.0 230.0 240.0 250.0 260.0 270.0 280.0 290.0 300.0 310.0 320.0 330.0 340.0 350.0 360.0 370.0 380.0 390.0 400.0 410.0 420.0 430.0 440.0 450.0 460.0 470.0 480.0 490.0 500.0 510.0 520.0 530.0 540.0 550.0 560.0 570.0 580.0 590.0 600.0 700.0 800.0 900.0 1000.0 1250.0 1500.0 1750.0 2000.0 2250.0 2500.0 2750.0 3000.0 4000.0 5000.0]
#define CloudLayer1_scale 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define CloudLayer2
#define CloudLayer2_coverage 0.3 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define CloudLayer2_density 0.1 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define CloudLayer2_height 2000.0 // [-300.0 -290.0 -280.0 -270.0 -260.0 -250.0 -240.0 -230.0 -220.0 -210.0 -200.0 -190.0 -180.0 -170.0 -160.0 -150.0 -140.0 -130.0 -120.0 -110.0 -100.0 -90.0 -80.0 -70.0 -60.0 -50.0 -40.0 -30.0 -20.0 -10.0 0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0 140.0 150.0 160.0 170.0 180.0 190.0 200.0 210.0 220.0 230.0 240.0 250.0 260.0 270.0 280.0 290.0 300.0 310.0 320.0 330.0 340.0 350.0 360.0 370.0 380.0 390.0 400.0 410.0 420.0 430.0 440.0 450.0 460.0 470.0 480.0 490.0 500.0 510.0 520.0 530.0 540.0 550.0 560.0 570.0 580.0 590.0 600.0 700.0 800.0 900.0 1000.0 1250.0 1500.0 1750.0 2000.0 2250.0 2500.0 2750.0 3000.0 4000.0 5000.0]
#define CloudLayer2_scale 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#if (defined CloudLayer0 || defined CloudLayer1 || defined CloudLayer2)
#define VOLUMETRIC_CLOUDS
#endif
#define CLOUD_SHADOW_AMOUNT 100 // [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100]
#ifdef VOLUMETRIC_CLOUDS
#ifndef ambientLight_only
#define CLOUDS_SHADOWS
#endif
#ifdef CLOUDS_SHADOWS
#define VL_CLOUDS_SHADOWS
#endif
#endif
#define CLOUD_SHADOW_STRENGTH 1.0 // [0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define Cloud_Speed 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0]
#define CLOUDS_QUALITY 0.5 // [0.1 0.125 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.9 1.0]
#define Rain_coverage 1.1 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
// just for display :D
#define SMALL_CUMULUS_LABEL 0 // [0]
#define LARGE_CUMULUS_LABEL 0 // [0]
#define ALTOSTRATUS_LABEL 0 // [0]
#define fbmAmount 0.5 // [0.00 0.02 0.04 0.06 0.08 0.10 0.12 0.14 0.16 0.18 0.20 0.22 0.24 0.26 0.28 0.30 0.32 0.34 0.36 0.38 0.40 0.42 0.44 0.46 0.48 0.50 0.52 0.54 0.56 0.58 0.60 0.62 0.64 0.66 0.68 0.70 0.72 0.74 0.76 0.78 0.80 0.82 0.84 0.86 0.88 0.90 0.92 0.94 0.96 0.98 1.00 1.02 1.04 1.06 1.08 1.10 1.12 1.14 1.16 1.18 1.20 1.22 1.24 1.26 1.28 1.30 1.32 1.34 1.36 1.38 1.40 1.42 1.44 1.46 1.48 1.50 1.52 1.54 1.56 1.58 1.60 1.62 1.64 1.66 1.68 1.70 1.72 1.74 1.76 1.78 1.80 1.82 1.84 1.86 1.88 1.90 1.92 1.94 1.96 1.98 2.00 2.02 2.04 2.06 2.08 2.10 2.12 2.14 2.16 2.18 2.20 2.22 2.24 2.26 2.28 2.30 2.32 2.34 2.36 2.38 2.40 2.42 2.44 2.46 2.48 2.50 2.52 2.54 2.56 2.58 2.60 2.62 2.64 2.66 2.68 2.70 2.72 2.74 2.76 2.78 2.80 2.82 2.84 2.86 2.88 2.90 2.92 2.94 2.96 2.98 3.00]
#define fbmPower1 3.00 // [1.0 1.50 1.52 1.54 1.56 1.58 1.60 1.62 1.64 1.66 1.68 1.70 1.72 1.74 1.76 1.78 1.80 1.82 1.84 1.86 1.88 1.90 1.92 1.94 1.96 1.98 2.00 2.02 2.04 2.06 2.08 2.10 2.12 2.14 2.16 2.18 2.20 2.22 2.24 2.26 2.28 2.30 2.32 2.34 2.36 2.38 2.40 2.42 2.44 2.46 2.48 2.50 2.52 2.54 2.56 2.58 2.60 2.62 2.64 2.66 2.68 2.70 2.72 2.74 2.76 2.78 2.80 2.82 2.84 2.86 2.88 2.90 2.92 2.94 2.96 2.98 3.00 3.02 3.04 3.06 3.08 3.10 3.12 3.14 3.16 3.18 3.20 3.22 3.24 3.26 3.28 3.30 3.32 3.34 3.36 3.38 3.40 3.42 3.44 3.46 3.48 3.50 3.52 3.54 3.56 3.58 3.60 3.62 3.64 3.66 3.68 3.70 3.72 3.74 3.76 3.78 3.80 3.82 3.84 3.86 3.88 3.90 3.92 3.94 3.96 3.98 4.00 5. 6. 7. 8. 9. 10.]
#define fbmPower2 2.50 // [1.00 1.50 1.52 1.54 1.56 1.58 1.60 1.62 1.64 1.66 1.68 1.70 1.72 1.74 1.76 1.78 1.80 1.82 1.84 1.86 1.88 1.90 1.92 1.94 1.96 1.98 2.00 2.02 2.04 2.06 2.08 2.10 2.12 2.14 2.16 2.18 2.20 2.22 2.24 2.26 2.28 2.30 2.32 2.34 2.36 2.38 2.40 2.42 2.44 2.46 2.48 2.50 2.52 2.54 2.56 2.58 2.60 2.62 2.64 2.66 2.68 2.70 2.72 2.74 2.76 2.78 2.80 2.82 2.84 2.86 2.88 2.90 2.92 2.94 2.96 2.98 3.00 3.02 3.04 3.06 3.08 3.10 3.12 3.14 3.16 3.18 3.20 3.22 3.24 3.26 3.28 3.30 3.32 3.34 3.36 3.38 3.40 3.42 3.44 3.46 3.48 3.50 3.52 3.54 3.56 3.58 3.60 3.62 3.64 3.66 3.68 3.70 3.72 3.74 3.76 3.78 3.80 3.82 3.84 3.86 3.88 3.90 3.92 3.94 3.96 3.98 4.00 5. 6. 7. 8. 9. 10.]
#define cloud_LevelOfDetail 1 // [-1 0 1 2 3 4 5 6 7 8]
#define cloud_ShadowLevelOfDetail 0 // [-1 0 1 2 3 4 5 6 7 8]
#define cloud_LevelOfDetailLQ 1 // [-1 0 1 2 3 4 5 6 7 8]
#define cloud_ShadowLevelOfDetailLQ 0 // [-1 0 1 2 3 4 5 6 7 8]
#define minRayMarchSteps 15 // [20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175 180 185 190 195 200]
#define maxRayMarchSteps 15 // [5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175 180 185 190 195 200]
#define minRayMarchStepsLQ 10 // [5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100]
#define maxRayMarchStepsLQ 30 // [ 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100]
#define HQ_CLOUDS
// #define Daily_Weather
// #define CHOOSE_RANDOM_WEATHER_PROFILE
#ifdef Daily_Weather
// DAY 0 WEATHER PARAMETERS
#define DAY0_l0_coverage 0.7 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY0_l1_coverage 0.7 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY0_l2_coverage 0.1 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY0_ufog_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY0_l0_density 0.5 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY0_l1_density 0.5 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY0_l2_density 0.1 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY0_cfog_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
// DAY 1 WEATHER PARAMETERS
#define DAY1_l0_coverage 0.7 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY1_l1_coverage 1.1 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY1_l2_coverage 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY1_ufog_density 0.01 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY1_l0_density 0.5 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY1_l1_density 0.5 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY1_l2_density 0.5 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY1_cfog_density 0.1 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
// DAY 2 WEATHER PARAMETERS
#define DAY2_l0_coverage 0.9 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY2_l1_coverage 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY2_l2_coverage 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY2_ufog_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY2_l0_density 0.25 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY2_l1_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY2_l2_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY2_cfog_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
// DAY 3 WEATHER PARAMETERS
#define DAY3_l0_coverage 0.8 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY3_l1_coverage 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY3_l2_coverage 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY3_ufog_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY3_l0_density 0.7 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY3_l1_density 0.7 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY3_l2_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY3_cfog_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
// DAY 4 WEATHER PARAMETERS
#define DAY4_l0_coverage 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY4_l1_coverage 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY4_l2_coverage 0.6 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY4_ufog_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY4_l0_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY4_l1_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY4_l2_density 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY4_cfog_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
// DAY 5 WEATHER PARAMETERS
#define DAY5_l0_coverage 0.8 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY5_l1_coverage 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY5_l2_coverage 1.5 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY5_ufog_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY5_l0_density 0.5 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY5_l1_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY5_l2_density 0.1 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY5_cfog_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
// DAY 6 WEATHER PARAMETERS
#define DAY6_l0_coverage 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY6_l1_coverage 0.8 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY6_l2_coverage 1.5 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY6_ufog_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY6_l0_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY6_l1_density 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY6_l2_density 0.02 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY6_cfog_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
// DAY 7 WEATHER PARAMETERS
#define DAY7_l0_coverage 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY7_l1_coverage 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY7_l2_coverage 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY7_ufog_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY7_l0_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY7_l1_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY7_l2_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY7_cfog_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
// DAY 8 WEATHER PARAMETERS
#define DAY8_l0_coverage 0.6 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY8_l1_coverage 0.7 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY8_l2_coverage 0.3 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY8_ufog_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY8_l0_density 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY8_l1_density 0.5 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY8_l2_density 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY8_cfog_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
// DAY 9 WEATHER PARAMETERS
#define DAY9_l0_coverage 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY9_l1_coverage 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY9_l2_coverage 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAY9_ufog_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY9_l0_density 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY9_l1_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY9_l2_density 0.1 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY9_cfog_density 1 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define USE_CUSTOM_DAILY_WEATHER_PROFILE 0 // [0 1 2 3 4 5 6]
#if USE_CUSTOM_DAILY_WEATHER_PROFILE >= 1
#define DAILY_PROFILE_1_LAYER0_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAILY_PROFILE_1_LAYER0_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define DAILY_PROFILE_1_LAYER1_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAILY_PROFILE_1_LAYER1_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define DAILY_PROFILE_1_LAYER2_COVERAGE 0.3 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAILY_PROFILE_1_LAYER2_DENSITY 0.1 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#endif
#if USE_CUSTOM_DAILY_WEATHER_PROFILE >= 2
#define DAILY_PROFILE_2_LAYER0_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAILY_PROFILE_2_LAYER0_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define DAILY_PROFILE_2_LAYER1_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAILY_PROFILE_2_LAYER1_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define DAILY_PROFILE_2_LAYER2_COVERAGE 0.3 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAILY_PROFILE_2_LAYER2_DENSITY 0.1 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#endif
#if USE_CUSTOM_DAILY_WEATHER_PROFILE >= 3
#define DAILY_PROFILE_3_LAYER0_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAILY_PROFILE_3_LAYER0_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define DAILY_PROFILE_3_LAYER1_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAILY_PROFILE_3_LAYER1_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define DAILY_PROFILE_3_LAYER2_COVERAGE 0.3 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAILY_PROFILE_3_LAYER2_DENSITY 0.1 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#endif
#if USE_CUSTOM_DAILY_WEATHER_PROFILE >= 4
#define DAILY_PROFILE_4_LAYER0_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAILY_PROFILE_4_LAYER0_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define DAILY_PROFILE_4_LAYER1_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAILY_PROFILE_4_LAYER1_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define DAILY_PROFILE_4_LAYER2_COVERAGE 0.3 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAILY_PROFILE_4_LAYER2_DENSITY 0.1 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#endif
#if USE_CUSTOM_DAILY_WEATHER_PROFILE >= 5
#define DAILY_PROFILE_5_LAYER0_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAILY_PROFILE_5_LAYER0_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define DAILY_PROFILE_5_LAYER1_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAILY_PROFILE_5_LAYER1_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define DAILY_PROFILE_5_LAYER2_COVERAGE 0.3 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAILY_PROFILE_5_LAYER2_DENSITY 0.1 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#endif
#if USE_CUSTOM_DAILY_WEATHER_PROFILE >= 6
#define DAILY_PROFILE_6_LAYER0_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAILY_PROFILE_6_LAYER0_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define DAILY_PROFILE_6_LAYER1_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAILY_PROFILE_6_LAYER1_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define DAILY_PROFILE_6_LAYER2_COVERAGE 0.3 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define DAILY_PROFILE_6_LAYER2_DENSITY 0.1 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#endif
#define USE_CUSTOM_DAILY_RAIN_PROFILE 0 // [0 1 2 3 4 5 6]
#if USE_CUSTOM_DAILY_RAIN_PROFILE >= 1
#define RAINY_PROFILE_1_LAYER0_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define RAINY_PROFILE_1_LAYER0_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define RAINY_PROFILE_1_LAYER1_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define RAINY_PROFILE_1_LAYER1_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define RAINY_PROFILE_1_LAYER2_COVERAGE 0.3 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define RAINY_PROFILE_1_LAYER2_DENSITY 0.1 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#endif
#if USE_CUSTOM_DAILY_RAIN_PROFILE >= 2
#define RAINY_PROFILE_2_LAYER0_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define RAINY_PROFILE_2_LAYER0_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define RAINY_PROFILE_2_LAYER1_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define RAINY_PROFILE_2_LAYER1_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define RAINY_PROFILE_2_LAYER2_COVERAGE 0.3 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define RAINY_PROFILE_2_LAYER2_DENSITY 0.1 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#endif
#if USE_CUSTOM_DAILY_RAIN_PROFILE >= 3
#define RAINY_PROFILE_3_LAYER0_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define RAINY_PROFILE_3_LAYER0_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define RAINY_PROFILE_3_LAYER1_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define RAINY_PROFILE_3_LAYER1_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define RAINY_PROFILE_3_LAYER2_COVERAGE 0.3 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define RAINY_PROFILE_3_LAYER2_DENSITY 0.1 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#endif
#if USE_CUSTOM_DAILY_RAIN_PROFILE >= 4
#define RAINY_PROFILE_4_LAYER0_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define RAINY_PROFILE_4_LAYER0_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define RAINY_PROFILE_4_LAYER1_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define RAINY_PROFILE_4_LAYER1_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define RAINY_PROFILE_4_LAYER2_COVERAGE 0.3 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define RAINY_PROFILE_4_LAYER2_DENSITY 0.1 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#endif
#if USE_CUSTOM_DAILY_RAIN_PROFILE >= 5
#define RAINY_PROFILE_5_LAYER0_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define RAINY_PROFILE_5_LAYER0_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define RAINY_PROFILE_5_LAYER1_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define RAINY_PROFILE_5_LAYER1_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define RAINY_PROFILE_5_LAYER2_COVERAGE 0.3 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define RAINY_PROFILE_5_LAYER2_DENSITY 0.1 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#endif
#if USE_CUSTOM_DAILY_RAIN_PROFILE >= 6
#define RAINY_PROFILE_6_LAYER0_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define RAINY_PROFILE_6_LAYER0_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define RAINY_PROFILE_6_LAYER1_COVERAGE 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define RAINY_PROFILE_6_LAYER1_DENSITY 0.5 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define RAINY_PROFILE_6_LAYER2_COVERAGE 0.3 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#define RAINY_PROFILE_6_LAYER2_DENSITY 0.1 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#endif
#define USE_CUSTOM_HOT_BIOME_RAIN_PROFILE 0 // [-1 0 1 2 3]
#if USE_CUSTOM_HOT_BIOME_RAIN_PROFILE >= 1
#define HOT_BIOME_RAINY_PROFILE_1_UNIFORM_FOG_DENSITY 1.0 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define HOT_BIOME_RAINY_PROFILE_1_CLUMPY_FOG_DENSITY 1.0 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define HOT_BIOME_RAINY_PROFILE_1_FOG_COLOR_R 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#define HOT_BIOME_RAINY_PROFILE_1_FOG_COLOR_G 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#define HOT_BIOME_RAINY_PROFILE_1_FOG_COLOR_B 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#endif
#if USE_CUSTOM_HOT_BIOME_RAIN_PROFILE >= 2
#define HOT_BIOME_RAINY_PROFILE_2_UNIFORM_FOG_DENSITY 1.0 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define HOT_BIOME_RAINY_PROFILE_2_CLUMPY_FOG_DENSITY 1.0 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define HOT_BIOME_RAINY_PROFILE_2_FOG_COLOR_R 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#define HOT_BIOME_RAINY_PROFILE_2_FOG_COLOR_G 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#define HOT_BIOME_RAINY_PROFILE_2_FOG_COLOR_B 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#endif
#if USE_CUSTOM_HOT_BIOME_RAIN_PROFILE >= 3
#define HOT_BIOME_RAINY_PROFILE_3_UNIFORM_FOG_DENSITY 1.0 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define HOT_BIOME_RAINY_PROFILE_3_CLUMPY_FOG_DENSITY 1.0 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define HOT_BIOME_RAINY_PROFILE_3_FOG_COLOR_R 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#define HOT_BIOME_RAINY_PROFILE_3_FOG_COLOR_G 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#define HOT_BIOME_RAINY_PROFILE_3_FOG_COLOR_B 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#endif
#define USE_CUSTOM_COLD_BIOME_RAIN_PROFILE 0 // [-1 0 1 2 3]
#if USE_CUSTOM_COLD_BIOME_RAIN_PROFILE >= 1
#define COLD_BIOME_RAINY_PROFILE_1_UNIFORM_FOG_DENSITY 1.0 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define COLD_BIOME_RAINY_PROFILE_1_CLUMPY_FOG_DENSITY 1.0 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define COLD_BIOME_RAINY_PROFILE_1_FOG_COLOR_R 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#define COLD_BIOME_RAINY_PROFILE_1_FOG_COLOR_G 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#define COLD_BIOME_RAINY_PROFILE_1_FOG_COLOR_B 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#endif
#if USE_CUSTOM_COLD_BIOME_RAIN_PROFILE >= 2
#define COLD_BIOME_RAINY_PROFILE_2_UNIFORM_FOG_DENSITY 1.0 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define COLD_BIOME_RAINY_PROFILE_2_CLUMPY_FOG_DENSITY 1.0 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define COLD_BIOME_RAINY_PROFILE_2_FOG_COLOR_R 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#define COLD_BIOME_RAINY_PROFILE_2_FOG_COLOR_G 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#define COLD_BIOME_RAINY_PROFILE_2_FOG_COLOR_B 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#endif
#if USE_CUSTOM_COLD_BIOME_RAIN_PROFILE >= 3
#define COLD_BIOME_RAINY_PROFILE_3_UNIFORM_FOG_DENSITY 1.0 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define COLD_BIOME_RAINY_PROFILE_3_CLUMPY_FOG_DENSITY 1.0 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define COLD_BIOME_RAINY_PROFILE_3_FOG_COLOR_R 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#define COLD_BIOME_RAINY_PROFILE_3_FOG_COLOR_G 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#define COLD_BIOME_RAINY_PROFILE_3_FOG_COLOR_B 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#endif
#define USE_CUSTOM_SWAMP_CATEGORY_PROFILE 0 // [-1 0 1]
#if USE_CUSTOM_SWAMP_CATEGORY_PROFILE == 1
#define CUSTOM_SWAMP_PROFILE_1_UNIFORM_FOG_DENSITY 1.0 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define CUSTOM_SWAMP_PROFILE_1_CLUMPY_FOG_DENSITY 1.0 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define CUSTOM_SWAMP_PROFILE_1_FOG_COLOR_R 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#define CUSTOM_SWAMP_PROFILE_1_FOG_COLOR_G 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#define CUSTOM_SWAMP_PROFILE_1_FOG_COLOR_B 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#endif
#define USE_CUSTOM_JUNGLE_CATEGORY_PROFILE 0 // [-1 0 1]
#if USE_CUSTOM_JUNGLE_CATEGORY_PROFILE == 1
#define CUSTOM_JUNGLE_PROFILE_1_UNIFORM_FOG_DENSITY 1.0 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define CUSTOM_JUNGLE_PROFILE_1_CLUMPY_FOG_DENSITY 1.0 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
#define CUSTOM_JUNGLE_PROFILE_1_FOG_COLOR_R 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#define CUSTOM_JUNGLE_PROFILE_1_FOG_COLOR_G 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#define CUSTOM_JUNGLE_PROFILE_1_FOG_COLOR_B 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.0]
#endif
//////////////////////////////////////
// ----- TAA RELATED SETTINGS ----- //
//////////////////////////////////////
@@ -616,14 +598,7 @@ const vec3 aerochrome_color = mix(vec3(1.0, 0.0, 0.0), vec3(0.715, 0.303, 0.631)
#define ON_FIRE_DISTORT_EFFECT
#define ON_FIRE_DISTORT_EFFECT_STRENGTH 0.7 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0]
#ifdef LOW_HEALTH_EFFECT
#endif
#ifdef DAMAGE_TAKEN_EFFECT
#endif
#ifdef WATER_ON_CAMERA_EFFECT
#endif
#ifdef ON_FIRE_DISTORT_EFFECT
#endif
// #define FLASHLIGHT
#define FLASHLIGHT_SPECULAR
@@ -637,16 +612,6 @@ const vec3 aerochrome_color = mix(vec3(1.0, 0.0, 0.0), vec3(0.715, 0.303, 0.631)
#define FLASHLIGHT_G 0.9 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
#define FLASHLIGHT_B 0.8 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0]
#ifdef FLASHLIGHT
#endif
#ifdef FLASHLIGHT_SPECULAR
#endif
#ifdef FLASHLIGHT_BOUNCED_INDIRECT
#endif
#ifdef FLASHLIGHT_FOG_ILLUMINATION
#endif
#if !defined FLASHLIGHT
#undef FLASHLIGHT_SPECULAR
#endif
@@ -654,8 +619,6 @@ const vec3 aerochrome_color = mix(vec3(1.0, 0.0, 0.0), vec3(0.715, 0.303, 0.631)
#undef Hand_Held_lights
#endif
/////////////////////////////////////////
// ----- NETHER RELATED SETTINGS ----- //
/////////////////////////////////////////
@@ -741,7 +704,6 @@ const vec3 aerochrome_color = mix(vec3(1.0, 0.0, 0.0), vec3(0.715, 0.303, 0.631)
#define LIT_PARTICLE_BRIGHTNESS 1.0 // [1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 15.0 20.0 25.0 30.0 35.0 40.0 45.0 50.0 100.]
#define LIGHTNING_FLASH // FOR OPTIFINE USERS. some mods change the sky color, which can trigger the lightning flash detection.
#define RESOURCEPACK_SKY 0 // [0 1 2 3]
@@ -806,6 +768,10 @@ const vec3 aerochrome_color = mix(vec3(1.0, 0.0, 0.0), vec3(0.715, 0.303, 0.631)
#define NOISE_RESOLUTION 16 // [1 2 3 4 5 6 7 8 12 14 16 24 32 48 64]
#define NOISE_INTENSITY 12.0 // [1.0 2.0 3.0 4.0 6.0 8.0 10.0 12.0 14.0 16.0 18.0 20.0 22.0 24.0 32.0 48.0 64.0]
#define NOISE_DROPOFF 1024 // [128 256 512 768 1024 1536 2048 3072 4096 8192]
#define COLOR_TEST_FOR_SUBSURFACE_SCATTERING_MATERIAL
#define DH_SSS_THRESHOLD_R 0.25 // [-1.0 -0.99 -0.98 -0.96 -0.94 -0.92 -0.9 -0.88 -0.86 -0.84 -0.82 -0.8 -0.78 -0.76 -0.74 -0.72 -0.7 -0.68 -0.66 -0.64 -0.62 -0.6 -0.58 -0.56 -0.54 -0.52 -0.5 -0.48 -0.46 -0.44 -0.42 -0.4 -0.38 -0.36 -0.34 -0.32 -0.3 -0.28 -0.26 -0.24 -0.22 -0.2 -0.18 -0.16 -0.14 -0.12 -0.1 -0.08 -0.06 -0.04 -0.02 0.0 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2 0.22 0.24 0.26 0.28 0.3 0.32 0.34 0.36 0.38 0.4 0.42 0.44 0.46 0.48 0.5 0.52 0.54 0.56 0.58 0.6 0.62 0.64 0.66 0.68 0.7 0.72 0.74 0.76 0.78 0.8 0.82 0.84 0.86 0.88 0.9 0.92 0.94 0.96 0.98 0.99 1.0]
#define DH_SSS_THRESHOLD_G 1.0 // [-1.0 -0.99 -0.98 -0.96 -0.94 -0.92 -0.9 -0.88 -0.86 -0.84 -0.82 -0.8 -0.78 -0.76 -0.74 -0.72 -0.7 -0.68 -0.66 -0.64 -0.62 -0.6 -0.58 -0.56 -0.54 -0.52 -0.5 -0.48 -0.46 -0.44 -0.42 -0.4 -0.38 -0.36 -0.34 -0.32 -0.3 -0.28 -0.26 -0.24 -0.22 -0.2 -0.18 -0.16 -0.14 -0.12 -0.1 -0.08 -0.06 -0.04 -0.02 0.0 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2 0.22 0.24 0.26 0.28 0.3 0.32 0.34 0.36 0.38 0.4 0.42 0.44 0.46 0.48 0.5 0.52 0.54 0.56 0.58 0.6 0.62 0.64 0.66 0.68 0.7 0.72 0.74 0.76 0.78 0.8 0.82 0.84 0.86 0.88 0.9 0.92 0.94 0.96 0.98 0.99 1.0]
#define DH_SSS_THRESHOLD_B 0.3 // [-1.0 -0.99 -0.98 -0.96 -0.94 -0.92 -0.9 -0.88 -0.86 -0.84 -0.82 -0.8 -0.78 -0.76 -0.74 -0.72 -0.7 -0.68 -0.66 -0.64 -0.62 -0.6 -0.58 -0.56 -0.54 -0.52 -0.5 -0.48 -0.46 -0.44 -0.42 -0.4 -0.38 -0.36 -0.34 -0.32 -0.3 -0.28 -0.26 -0.24 -0.22 -0.2 -0.18 -0.16 -0.14 -0.12 -0.1 -0.08 -0.06 -0.04 -0.02 0.0 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2 0.22 0.24 0.26 0.28 0.3 0.32 0.34 0.36 0.38 0.4 0.42 0.44 0.46 0.48 0.5 0.52 0.54 0.56 0.58 0.6 0.62 0.64 0.66 0.68 0.7 0.72 0.74 0.76 0.78 0.8 0.82 0.84 0.86 0.88 0.9 0.92 0.94 0.96 0.98 0.99 1.0]
///////////////////////////////////////////
// ----- FLOODFILL [LPV] SETTINGS ----- //
@@ -902,9 +868,35 @@ const vec3 aerochrome_color = mix(vec3(1.0, 0.0, 0.0), vec3(0.715, 0.303, 0.631)
#endif
#ifdef USE_CUSTOM_SKY_GROUND_LIGHTING_COLORS
#endif
#ifdef COLOR_TEST_FOR_SUBSURFACE_SCATTERING_MATERIAL
#endif
#ifdef CAVE_FOG
#endif
#ifdef CAVE_FOG_DARKEN_SKY
#endif
#if TAA_MODE > 0
#endif
#ifdef DAILY_WEATHER_PROFILE
#endif
#ifdef DAILY_RAIN_PROFILE
#endif
#ifdef BIOME_SPECIFIC_RAIN_PROFILE
#endif
#ifdef BIOME_SPECIFIC_PROFILE
#endif
#ifdef FLASHLIGHT
#endif
#ifdef FLASHLIGHT_SPECULAR
#endif
#ifdef FLASHLIGHT_BOUNCED_INDIRECT
#endif
#ifdef FLASHLIGHT_FOG_ILLUMINATION
#endif
#ifdef LOW_HEALTH_EFFECT
#endif
#ifdef DAMAGE_TAKEN_EFFECT
#endif
#ifdef WATER_ON_CAMERA_EFFECT
#endif
#ifdef ON_FIRE_DISTORT_EFFECT
#endif
-36
View File
@@ -1,11 +1,7 @@
#define ffstep(x,y) clamp((y - x) * 1e35,0.0,1.0)
vec3 drawSun(float cosY, float sunInt,vec3 nsunlight, vec3 inColor){
// return nsunlight * min(max(cosY-0.9994,0.0)/(1.0-0.9994),1.0) * 100.0;
return (inColor+nsunlight/0.0008821203*pow(smoothstep(cos(0.0093084168595*3.2),cos(0.0093084168595*1.8),cosY),3.)*0.62);
}
vec3 drawMoon(vec3 PlayerPos, vec3 WorldSunVec, vec3 Color, inout vec3 occludeStars){
@@ -108,38 +104,6 @@ vec4 texture2D_bicubic(sampler2D tex, vec2 uv)
g1(fuv.y) * (g0x * texture2D(tex, p2) +
g1x * texture2D(tex, p3));
}
vec4 texture2D_bicubic_offset(sampler2D tex, vec2 uv, float noise, float scale)
{
float offsets = noise * (2.0 * 3.141592653589793238462643383279502884197169);
vec2 circleOffsets = vec2(sin(offsets), cos(offsets)) * scale;
#ifdef SCREENSHOT_MODE
circleOffsets = vec2(0.0);
#endif
vec4 texelSize = vec4(texelSize,1.0/texelSize);
uv = (uv + texelSize.xy)*texelSize.zw;
vec2 iuv = floor( uv + circleOffsets );
vec2 fuv = fract( uv + circleOffsets );
float g0x = g0(fuv.x);
float g1x = g1(fuv.x);
float h0x = h0(fuv.x);
float h1x = h1(fuv.x);
float h0y = h0(fuv.y);
float h1y = h1(fuv.y);
vec2 p0 = (vec2(iuv.x + h0x, iuv.y + h0y) - 0.5) * (texelSize.xy);
vec2 p1 = (vec2(iuv.x + h1x, iuv.y + h0y) - 0.5) * (texelSize.xy);
vec2 p2 = (vec2(iuv.x + h0x, iuv.y + h1y) - 0.5) * (texelSize.xy);
vec2 p3 = (vec2(iuv.x + h1x, iuv.y + h1y) - 0.5) * (texelSize.xy);
return (g0(fuv.y) * (g0x * texture2D(tex, p0) +
g1x * texture2D(tex, p1)) +
g1(fuv.y) * (g0x * texture2D(tex, p2) +
g1x * texture2D(tex, p3)));
}
vec2 sphereToCarte(vec3 dir) {
float lonlat = clamp(atan(-dir.x, -dir.z), -pi, pi);
+24 -19
View File
@@ -45,8 +45,8 @@ float getCloudShape(int LayerIndex, int LOD, in vec3 position, float minHeight,
case LARGECUMULUS_LAYER: {
coverage = parameters.largeCumulus.x;
largeCloud = texture2D(noisetex, (samplePos.zx + cloud_movement*2.0)/10000.0 * CloudLayer1_scale).b;
smallCloud = texture2D(noisetex, (samplePos.zx - cloud_movement*2.0)/2500.0 * CloudLayer1_scale).b;
largeCloud = texture2D(noisetex, (samplePos.zx + cloud_movement*3.0)/10000.0 * CloudLayer1_scale).b;
smallCloud = texture2D(noisetex, (samplePos.zx - cloud_movement*3.0)/2500.0 * CloudLayer1_scale).b;
smallCloud = abs(largeCloud* -0.7) + smallCloud;
shape = min(max(coverage - smallCloud,0.0)/(1e-6+sqrt(coverage)),1.0) ;
@@ -55,8 +55,8 @@ float getCloudShape(int LayerIndex, int LOD, in vec3 position, float minHeight,
case ALTOSTRATUS_LAYER: {
coverage = parameters.altostratus.x;
largeCloud = texture2D(noisetex, (position.xz + cloud_movement)/100000. * CloudLayer2_scale).b;
smallCloud = 1.0 - texture2D(noisetex, ((position.xz - cloud_movement)/7500. - vec2(1.0-largeCloud, -largeCloud)/5.0) * CloudLayer2_scale).b;
largeCloud = texture2D(noisetex, (position.xz + cloud_movement*20.0)/100000. * CloudLayer2_scale).b;
smallCloud = 1.0 - texture2D(noisetex, ((position.xz + vec2(-cloud_movement,cloud_movement)*20.0)/7500. - vec2(1.0-largeCloud, -largeCloud)/5.0) * CloudLayer2_scale).b;
smallCloud = largeCloud + smallCloud * 0.4 * clamp(1.5-largeCloud,0.0,1.0);
shape = min(max(coverage - smallCloud,0.0) / (1e-6+sqrt(coverage)),1.0);
@@ -84,7 +84,7 @@ float getCloudShape(int LayerIndex, int LOD, in vec3 position, float minHeight,
// shrink the coverage slightly so it is a similar shape to clouds with erosion. this helps cloud lighting and cloud shadows.
if (LOD < 1) return max(shape - 0.27*erodeAmount,0.0);
samplePos.xz -= cloud_movement/4.0;
samplePos.xz += cloud_movement/4.0;
samplePos.xz += pow( max(position.y - (minHeight+20.0), 0.0) / (max(maxHeight-minHeight,1.0)*0.20), 1.5);
float erosion = 0.0;
@@ -142,7 +142,7 @@ float GetCloudShadow(vec3 playerPos, vec3 sunVector){
float layer2Height = CloudLayer2_height;
#endif
#ifdef CLOUDS_SHADOWS
#if CLOUD_SHADOW_AMOUNT > 0
float cloudShadows = 0.0;
#ifdef CloudLayer0
@@ -158,7 +158,7 @@ float GetCloudShadow(vec3 playerPos, vec3 sunVector){
cloudShadows += getCloudShape(ALTOSTRATUS_LAYER, 0, startPosition, layer2Height, layer2Height)*parameters.altostratus.y * (1.0-abs(WsunVec.y));
#endif
cloudShadows *= CLOUD_SHADOW_STRENGTH;
cloudShadows *= float(CLOUD_SHADOW_AMOUNT)/100.0;
#if defined CloudLayer0 || defined CloudLayer1 || defined CloudLayer2
totalShadow *= exp((cloudShadows*cloudShadows) * -200.0);
@@ -187,6 +187,9 @@ float getCloudScattering(
){
int samples = 3;
int LOD = 0;
// crazy mode
// samples = 10;
// LOD = 1;
if(LayerIndex == ALTOSTRATUS_LAYER) samples = 2;
@@ -263,8 +266,6 @@ vec4 raymarchCloud(
){
vec3 color = vec3(0.0);
float totalAbsorbance = 1.0;
float GetPos = 0.0;
float planetShadow = getPlanetShadow(rayPosition, sunVector);
sunScattering *= planetShadow;
@@ -279,6 +280,7 @@ vec4 raymarchCloud(
densityTresholdCheck = mix(1e-5, densityTresholdCheck, dither);
if(LayerIndex == ALTOSTRATUS_LAYER){
float density = parameters.altostratus.y;
bool ifAboveOrBelowPlane = max(mix(-1.0, 1.0, clamp(cameraPosition.y - minHeight,0.0,1.0)) * normalize(rayDirection).y + 0.0001,0.0) > 0.0;
@@ -294,7 +296,7 @@ vec4 raymarchCloud(
float shape = getCloudShape(LayerIndex, 1, rayPosition, minHeight, maxHeight);
float shapeWithDensity = shape*density;
if(shapeWithDensity > mix(1e-5, 0.06, dither)){
if(shapeWithDensity > mix(1e-5, 0.06, dither) && cloudPlaneDistance.y > 0.5){
cloudPlaneDistance.x = length(rayPosition - cameraPosition); cloudPlaneDistance.y = 0.0;
}
@@ -350,7 +352,7 @@ vec4 raymarchCloud(
float shapeWithDensity = shape*density;
float shapeWithDensityFaded = shape*density * pow(clamp((rayPosition.y - minHeight)/(max(maxHeight-minHeight,1.0)*0.25),0.0,1.0),2.0);
if(shapeWithDensityFaded > densityTresholdCheck){
if(shapeWithDensityFaded > densityTresholdCheck && cloudPlaneDistance.y > 0.5){
cloudPlaneDistance.x = length(rayPosition - cameraPosition); cloudPlaneDistance.y = 0.0;
}
@@ -377,7 +379,7 @@ vec4 raymarchCloud(
vec3 lighting = getCloudLighting(shapeWithDensity, shapeWithDensityFaded, sunShadowMask, sunScattering, indirectShadowMask, skyScattering * skylightOcclusion, backScatterPhase, phaseLevels);
#if defined LIGHTNINGFLASH_VL
#if defined LIGHTNING_FLASH && defined LIGHTNINGFLASH_VL
lighting += createLightningPointLight(rayPosition - cameraPosition, lightningBoltPosition.xyz, shapeWithDensity, indirectShadowMask);
#endif
@@ -385,7 +387,7 @@ vec4 raymarchCloud(
newPos.xz /= max(newPos.y,0.0)*0.0025 + 1.0;
newPos.y = min(newPos.y,0.0);
float distancefog = exp(-0.00035 * length(newPos));
float distancefog = exp(-(0.00035 + rainStrength * 0.0015) * length(newPos));
vec3 atmosphereHaze = (sampledSkyCol - sampledSkyCol * distancefog);
lighting = lighting * distancefog + atmosphereHaze;
@@ -414,6 +416,7 @@ vec3 getRayOrigin(
float minHeight,
float maxHeight
,int samples
){
vec3 cloudDist = vec3(1.0);
@@ -422,7 +425,7 @@ vec3 getRayOrigin(
float flip = mix(max(cameraPos.y - maxHeight,0.0), max(minHeight - cameraPos.y,0.0), clamp(rayStartPos.y,0.0,1.0));
// orient the ray to be a flat plane facing up/down
// vec3 position = rayStartPos*dither + cameraPos + (rayStartPos/abs(rayStartPos.y)) * flip;
// vec3 position = rayStartPos*dither + cameraPos + (rayStartPos/abs(rayStartPos.y/cloudDist)) * flip;
vec3 position = rayStartPos*dither + cameraPos + (rayStartPos/length(rayStartPos/cloudDist)) * flip;
return position;
@@ -496,7 +499,7 @@ vec4 GetVolumetricClouds(
inout float cloudPlaneDistance
){
#ifndef VOLUMETRIC_CLOUDS
#if !(defined CloudLayer0 || defined CloudLayer1 || defined CloudLayer2)
return vec4(0.0,0.0,0.0,1.0);
#endif
@@ -543,14 +546,14 @@ vec4 GetVolumetricClouds(
float maxSamples = 15.0;
float minSamples = 10.0;
int samples = int(clamp(maxSamples / sqrt(exp2(NormPlayerPos.y)), 1.0, minSamples));
// int samples = 30;
// samples = 200;
///------- setup the ray
vec3 cloudDist = vec3(1.0);
cloudDist.xz = mix(vec2(255.0), vec2(5.0), clamp(cameraPosition.y - minHeight,0.0,clamp((maxHeight-5) - cameraPosition.y ,0.0,1.0)));
vec3 rayDirection = NormPlayerPos.xyz * (cloudheight/length(NormPlayerPos.xyz/cloudDist)/samples);
vec3 rayPosition = getRayOrigin(rayDirection, cameraPosition, dither.y, minHeight, maxHeight);
vec3 rayPosition = getRayOrigin(rayDirection, cameraPosition, dither.y, minHeight, maxHeight,samples);
#ifdef SKY_GROUND
vec3 sampledSkyCol = mix(skyFromTex(normalize(rayPosition - cameraPosition), colortex4)/1200.0 * Sky_Brightness, indirectLightCol, 1.0);
@@ -604,7 +607,7 @@ vec4 GetVolumetricClouds(
cloudDist.xz = mix(vec2(255.0), vec2(5.0), clamp(cameraPosition.y - minHeight,0.0,clamp((maxHeight-15) - cameraPosition.y ,0.0,1.0)));
rayDirection = NormPlayerPos.xyz * (cloudheight/length(NormPlayerPos.xyz/cloudDist)/samples);
rayPosition = getRayOrigin(rayDirection, cameraPosition, dither.y, minHeight, maxHeight);
rayPosition = getRayOrigin(rayDirection, cameraPosition, dither.y, minHeight, maxHeight,samples);
vec2 cloudLayer1_Distance = vec2(startDistance, 1.0);
@@ -622,7 +625,7 @@ vec4 GetVolumetricClouds(
cloudDist.xz = mix(vec2(255.0), vec2(5.0), clamp(cameraPosition.y - minHeight,0.0,clamp((maxHeight-15) - cameraPosition.y ,0.0,1.0)));
rayDirection = NormPlayerPos.xyz * (cloudheight/length(NormPlayerPos.xyz/cloudDist));
rayPosition = getRayOrigin(rayDirection, cameraPosition, dither.y, minHeight, maxHeight);
rayPosition = getRayOrigin(rayDirection, cameraPosition, dither.y, minHeight, maxHeight,1);
vec2 cloudLayer2_Distance = vec2(startDistance, 1.0);
@@ -664,6 +667,8 @@ vec4 GetVolumetricClouds(
color = blendedCloudColor.rgb;
totalAbsorbance = blendedCloudColor.a;
// return vec4(vec3(cloudPlaneDistance/1500.0), 0.0);
return vec4(color, totalAbsorbance);
}
#endif
+3 -2
View File
@@ -1,7 +1,8 @@
float waterCaustics(vec3 worldPos, vec3 sunVec) {
float waterCaustics(vec3 worldPos, vec3 sunVec, float surfacePos) {
vec3 projectedPos = worldPos - (sunVec/sunVec.y*worldPos.y);
vec3 projectedPos = worldPos + (sunVec/abs(sunVec.y))*surfacePos;
vec2 pos = projectedPos.xz;
float movement = frameTimeCounter * 0.035 * WATER_WAVE_SPEED;
+193 -145
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/fogBehindTranslucent_pass.fsh"
#include "/dimensions/composite.fsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/fogBehindTranslucent_pass.vsh"
#include "/dimensions/composite.vsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/composite.fsh"
#include "/dimensions/composite1.fsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/composite.vsh"
#include "/dimensions/composite1.vsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/composite9.fsh"
#include "/dimensions/composite10.fsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/composite9.vsh"
#include "/dimensions/composite10.vsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/composite10.fsh"
#include "/dimensions/composite11.fsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/composite10.vsh"
#include "/dimensions/composite11.vsh"
-5
View File
@@ -1,5 +0,0 @@
#version 120
#define NETHER_SHADER
#include "/dimensions/composite11.fsh"
-5
View File
@@ -1,5 +0,0 @@
#version 120
#define NETHER_SHADER
#include "/dimensions/composite11.vsh"
-5
View File
@@ -1,5 +0,0 @@
#version 120
#define NETHER_SHADER
#include "/dimensions/composite12.fsh"
-5
View File
@@ -1,5 +0,0 @@
#version 120
#define NETHER_SHADER
#include "/dimensions/composite12.vsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/composite1.fsh"
#include "/dimensions/composite2.fsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/composite1.vsh"
#include "/dimensions/composite2.vsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/composite2.fsh"
#include "/dimensions/composite3.fsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/composite2.vsh"
#include "/dimensions/composite3.vsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/composite3.fsh"
#include "/dimensions/composite4.fsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/composite3.vsh"
#include "/dimensions/composite4.vsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/composite4.fsh"
#include "/dimensions/composite5.fsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/composite4.vsh"
#include "/dimensions/composite5.vsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/composite5.fsh"
#include "/dimensions/composite6.fsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/composite5.vsh"
#include "/dimensions/composite6.vsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/composite6.fsh"
#include "/dimensions/composite7.fsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/composite6.vsh"
#include "/dimensions/composite7.vsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/composite7.fsh"
#include "/dimensions/composite8.fsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/composite7.vsh"
#include "/dimensions/composite8.vsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/composite8.fsh"
#include "/dimensions/composite9.fsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define NETHER_SHADER
#include "/dimensions/composite8.vsh"
#include "/dimensions/composite9.vsh"
+1 -1
View File
@@ -1,6 +1,6 @@
#version 120
#define DAMAGE_BLOCK_EFFECT
#define NETHER_SHADER
#define DAMAGE_BLOCK_EFFECT
#include "/dimensions/all_particles.fsh"
+1 -1
View File
@@ -1,6 +1,6 @@
#version 120
#define DAMAGE_BLOCK_EFFECT
#define NETHER_SHADER
#define DAMAGE_BLOCK_EFFECT
#include "/dimensions/all_particles.vsh"
-2
View File
@@ -1,7 +1,5 @@
#version 120
#define NETHER
#define NETHER_SHADER
#include "/dimensions/all_translucent.fsh"
-2
View File
@@ -1,7 +1,5 @@
#version 120
#define NETHER
#define NETHER_SHADER
#include "/dimensions/all_translucent.vsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define OVERWORLD_SHADER
#include "/dimensions/fogBehindTranslucent_pass.fsh"
#include "/dimensions/composite.fsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define OVERWORLD_SHADER
#include "/dimensions/fogBehindTranslucent_pass.vsh"
#include "/dimensions/composite.vsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define OVERWORLD_SHADER
#include "/dimensions/composite.fsh"
#include "/dimensions/composite1.fsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define OVERWORLD_SHADER
#include "/dimensions/composite.vsh"
#include "/dimensions/composite1.vsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define OVERWORLD_SHADER
#include "/dimensions/composite9.fsh"
#include "/dimensions/composite10.fsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define OVERWORLD_SHADER
#include "/dimensions/composite9.vsh"
#include "/dimensions/composite10.vsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define OVERWORLD_SHADER
#include "/dimensions/composite10.fsh"
#include "/dimensions/composite11.fsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define OVERWORLD_SHADER
#include "/dimensions/composite10.vsh"
#include "/dimensions/composite11.vsh"
-5
View File
@@ -1,5 +0,0 @@
#version 120
#define OVERWORLD_SHADER
#include "/dimensions/composite11.fsh"
-5
View File
@@ -1,5 +0,0 @@
#version 120
#define OVERWORLD_SHADER
#include "/dimensions/composite11.vsh"
-5
View File
@@ -1,5 +0,0 @@
#version 120
#define OVERWORLD_SHADER
#include "/dimensions/composite12.fsh"
-5
View File
@@ -1,5 +0,0 @@
#version 120
#define OVERWORLD_SHADER
#include "/dimensions/composite12.vsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define OVERWORLD_SHADER
#include "/dimensions/composite1.fsh"
#include "/dimensions/composite2.fsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define OVERWORLD_SHADER
#include "/dimensions/composite1.vsh"
#include "/dimensions/composite2.vsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define OVERWORLD_SHADER
#include "/dimensions/composite2.fsh"
#include "/dimensions/composite3.fsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define OVERWORLD_SHADER
#include "/dimensions/composite2.vsh"
#include "/dimensions/composite3.vsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define OVERWORLD_SHADER
#include "/dimensions/composite3.fsh"
#include "/dimensions/composite4.fsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define OVERWORLD_SHADER
#include "/dimensions/composite3.vsh"
#include "/dimensions/composite4.vsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define OVERWORLD_SHADER
#include "/dimensions/composite4.fsh"
#include "/dimensions/composite5.fsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define OVERWORLD_SHADER
#include "/dimensions/composite4.vsh"
#include "/dimensions/composite5.vsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define OVERWORLD_SHADER
#include "/dimensions/composite5.fsh"
#include "/dimensions/composite6.fsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define OVERWORLD_SHADER
#include "/dimensions/composite5.vsh"
#include "/dimensions/composite6.vsh"
+1 -1
View File
@@ -2,4 +2,4 @@
#define OVERWORLD_SHADER
#include "/dimensions/composite6.fsh"
#include "/dimensions/composite7.fsh"

Some files were not shown because too many files have changed in this diff Show More