mirror of
https://github.com/X0nk/Bliss-Shader.git
synced 2025-06-20 16:07:22 +08:00
fix shadowmap blending when DH is enabled. Fix slime not being shiny. add CLOUDS INTERSECT TERRAIN misc setting. make minimum DH overdraw prevention distance 2 chunks
This commit is contained in:
parent
a74595afb6
commit
d431109ec5
@ -19,11 +19,11 @@ block.16=vine
|
|||||||
|
|
||||||
## ground waving
|
## ground waving
|
||||||
## add a newline to organize for modded blocks
|
## add a newline to organize for modded blocks
|
||||||
block.60=minecraft:sunflower:half=upper minecraft:beetroots minecraft:potatoes minecraft:carrots minecraft:wheat minecraft:nether_wart minecraft:kelp minecraft:large_fern:half=upper minecraft:peony:half=upper minecraft:rose_bush:half=upper minecraft:lilac:half=upper minecraft:crimson_roots minecraft:nether_sprouts minecraft:warped_roots minecraft:seagrass minecraft:tall_seagrass:half=upper minecraft:wither_rose minecraft:lily_of_the_valley minecraft:cornflower minecraft:sweet_berry_bush minecraft:oxeye_daisy minecraft:pink_tulip minecraft:white_tulip minecraft:orange_tulip minecraft:red_tulip minecraft:azure_bluet minecraft:allium minecraft:blue_orchid minecraft:poppy minecraft:dandelion minecraft:dead_bush
|
block.60 = minecraft:sunflower:half=upper minecraft:beetroots minecraft:potatoes minecraft:carrots minecraft:wheat minecraft:nether_wart minecraft:kelp minecraft:large_fern:half=upper minecraft:peony:half=upper minecraft:rose_bush:half=upper minecraft:lilac:half=upper minecraft:crimson_roots minecraft:nether_sprouts minecraft:warped_roots minecraft:seagrass minecraft:tall_seagrass:half=upper minecraft:wither_rose minecraft:lily_of_the_valley minecraft:cornflower minecraft:sweet_berry_bush minecraft:oxeye_daisy minecraft:pink_tulip minecraft:white_tulip minecraft:orange_tulip minecraft:red_tulip minecraft:azure_bluet minecraft:allium minecraft:blue_orchid minecraft:poppy minecraft:dandelion minecraft:dead_bush
|
||||||
# removed: sapling(s)
|
# removed: sapling(s)
|
||||||
|
|
||||||
## ground waving vertical models. this exists to brighten up the sides of grass and stuff in shaded places they blend in better with the world.
|
## ground waving vertical models. this exists to brighten up the sides of grass and stuff in shaded places they blend in better with the world.
|
||||||
block.61=minecraft:fern conquest:acacia_sapling conquest:alder_tree_sapling conquest:apple_tree_sapling conquest:aspen_tree_sapling conquest:birch_sapling conquest:cherry_tree_sapling conquest:dark_oak_sapling conquest:downy_willow_tree_sapling conquest:gorse_tree_sapling conquest:grape_vine_sapling conquest:horse_chestnut_tree_sapling conquest:jungle_sapling conquest:larch_tree_sapling conquest:mallorn_tree_sapling conquest:oak_sapling conquest:orange_tree_sapling conquest:pear_tree_sapling conquest:pine_tree_sapling conquest:plum_tree_sapling conquest:rowan_tree_sapling conquest:spruce_sapling conquest:willow_tree_sapling conquest:angelica conquest:black_knapweed conquest:buttercups conquest:cornflower conquest:dandelion conquest:elanor conquest:goldenrod conquest:harebell conquest:lily_of_the_valley conquest:lobelia_flowers conquest:marsh_ragwort conquest:meadow_saffron conquest:mediterranean_wild_tulip conquest:moorland_spotted_orchid conquest:niphredil conquest:orange_tulip conquest:orpine conquest:oxeye_daisy conquest:pasque_flower conquest:pink_tulip conquest:poppy conquest:red_tulip conquest:rock_rose conquest:sea_lavender conquest:simbelmyne conquest:white_clematis conquest:white_tulip conquest:wild_dagga conquest:allium conquest:barley conquest:bean_pole conquest:beetroots conquest:cabbage conquest:carrots conquest:common_beans conquest:corn conquest:flax conquest:heirloom_wheat_crops conquest:hemp conquest:lavender conquest:peas conquest:potatoes conquest:rice conquest:thyme conquest:tobacco conquest:turnips conquest:water_mint conquest:wheat conquest:wild_basil conquest:wild_parsley conquest:wild_wheat conquest:common_meadow_grass conquest:cotton_grass conquest:dead_grass conquest:deergrass conquest:grass conquest:kentucky_bluegrass conquest:lush_grass conquest:purple_moor_grass conquest:sea_arrowgrass conquest:seagrass conquest:sweet_grass conquest:timothy_grass conquest:wavy_hair_grass conquest:pine_cones conquest:spruce_cones conquest:beautyberry_bush conquest:bilberry_bush conquest:blackberry_bush conquest:bog_blueberry_bush conquest:broom_bush conquest:dead_bush conquest:hawthorn_bush conquest:lingonberry_bush conquest:raspberry_bush conquest:alpine_sow_thristle conquest:athelas conquest:autumnal_dwarf_birch conquest:birdsfoot_trefoil conquest:bog_asphodel conquest:bottle_sedge conquest:cattails conquest:common_cow_wheat conquest:cow_parsley conquest:cross leaved heath conquest:dead_reeds conquest:dead_shrubs conquest:desert_shrub conquest:dogs_mercury conquest:dooryard_dock conquest:dry_reeds conquest:greater_fen_sedge conquest:greater_wood_rush conquest:green_meadow_fescue conquest:green_spurge conquest:heather conquest:meadow_fescue conquest:melancholy_thristle conquest:nettles conquest:nightshade conquest:papyrus conquest:purple_wolfs_bane conquest:red_common_cow_wheat conquest:rosebay_willowherb conquest:rushes conquest:wild_shrub conquest:sedge conquest:small_fescue conquest:small_scabious conquest:sweet_woodruff conquest:wild_overgrown_nettles conquest:wild_shrub conquest:wood_horsetail conquest:woodland_sedge conquest:wormwood conquest:yellow_wolfs_bane conquest:autumnal_bracken conquest:bracken conquest:dark_autumnal_bracken conquest:dead_bracken conquest:fern conquest:fern_1 conquest:fern_2 conquest:harts_tongue_fern conquest:large_fern_1 conquest:large_fern_2 conquest:large_fern_3 conquest:thick_fern conquest:tall_grass conquest:large_fern conquest:sunflower conquest:tall_lilac conquest:peony conquest:rose_bush conquest:tall_seagrass conquest:cypress conquest:young_tree conquest:young_frozen_tree conquest:cross_leaved_heath conquest:jungle_ground_cover conquest:alpine_sow_thistle conquest:duckweed conquest:red_mushroom conquest:brown_mushroom
|
block.61=minecraft:fern conquest:red_clover_flowers conquest:acacia_sapling conquest:alder_tree_sapling conquest:apple_tree_sapling conquest:aspen_tree_sapling conquest:birch_sapling conquest:cherry_tree_sapling conquest:dark_oak_sapling conquest:downy_willow_tree_sapling conquest:gorse_tree_sapling conquest:grape_vine_sapling conquest:horse_chestnut_tree_sapling conquest:jungle_sapling conquest:larch_tree_sapling conquest:mallorn_tree_sapling conquest:oak_sapling conquest:orange_tree_sapling conquest:pear_tree_sapling conquest:pine_tree_sapling conquest:plum_tree_sapling conquest:rowan_tree_sapling conquest:spruce_sapling conquest:willow_tree_sapling conquest:angelica conquest:black_knapweed conquest:buttercups conquest:cornflower conquest:dandelion conquest:elanor conquest:goldenrod conquest:harebell conquest:lily_of_the_valley conquest:lobelia_flowers conquest:marsh_ragwort conquest:meadow_saffron conquest:mediterranean_wild_tulip conquest:moorland_spotted_orchid conquest:niphredil conquest:orange_tulip conquest:orpine conquest:oxeye_daisy conquest:pasque_flower conquest:pink_tulip conquest:poppy conquest:red_tulip conquest:rock_rose conquest:sea_lavender conquest:simbelmyne conquest:white_clematis conquest:white_tulip conquest:wild_dagga conquest:allium conquest:barley conquest:bean_pole conquest:beetroots conquest:cabbage conquest:carrots conquest:common_beans conquest:corn conquest:flax conquest:heirloom_wheat_crops conquest:hemp conquest:lavender conquest:peas conquest:potatoes conquest:rice conquest:thyme conquest:tobacco conquest:turnips conquest:water_mint conquest:wheat conquest:wild_basil conquest:wild_parsley conquest:wild_wheat conquest:common_meadow_grass conquest:cotton_grass conquest:dead_grass conquest:deergrass conquest:grass conquest:kentucky_bluegrass conquest:lush_grass conquest:purple_moor_grass conquest:sea_arrowgrass conquest:seagrass conquest:sweet_grass conquest:timothy_grass conquest:wavy_hair_grass conquest:pine_cones conquest:spruce_cones conquest:beautyberry_bush conquest:bilberry_bush conquest:blackberry_bush conquest:bog_blueberry_bush conquest:broom_bush conquest:dead_bush conquest:hawthorn_bush conquest:lingonberry_bush conquest:raspberry_bush conquest:alpine_sow_thristle conquest:athelas conquest:autumnal_dwarf_birch conquest:birdsfoot_trefoil conquest:bog_asphodel conquest:bottle_sedge conquest:cattails conquest:common_cow_wheat conquest:cow_parsley conquest:cross leaved heath conquest:dead_reeds conquest:dead_shrubs conquest:desert_shrub conquest:dogs_mercury conquest:dooryard_dock conquest:dry_reeds conquest:greater_fen_sedge conquest:greater_wood_rush conquest:green_meadow_fescue conquest:green_spurge conquest:heather conquest:meadow_fescue conquest:melancholy_thristle conquest:nettles conquest:nightshade conquest:papyrus conquest:purple_wolfs_bane conquest:red_common_cow_wheat conquest:rosebay_willowherb conquest:rushes conquest:wild_shrub conquest:sedge conquest:small_fescue conquest:small_scabious conquest:sweet_woodruff conquest:wild_overgrown_nettles conquest:wild_shrub conquest:wood_horsetail conquest:woodland_sedge conquest:wormwood conquest:yellow_wolfs_bane conquest:autumnal_bracken conquest:bracken conquest:dark_autumnal_bracken conquest:dead_bracken conquest:fern conquest:fern_1 conquest:fern_2 conquest:harts_tongue_fern conquest:large_fern_1 conquest:large_fern_2 conquest:large_fern_3 conquest:thick_fern conquest:tall_grass conquest:large_fern conquest:sunflower conquest:tall_lilac conquest:peony conquest:rose_bush conquest:tall_seagrass conquest:cypress conquest:young_tree conquest:young_frozen_tree conquest:cross_leaved_heath conquest:jungle_ground_cover conquest:alpine_sow_thistle conquest:duckweed conquest:red_mushroom conquest:brown_mushroom
|
||||||
|
|
||||||
## air waving
|
## air waving
|
||||||
## add a newline to organize for modded blocks
|
## add a newline to organize for modded blocks
|
||||||
|
@ -101,7 +101,7 @@ uniform vec3 cameraPosition;
|
|||||||
void main() {
|
void main() {
|
||||||
|
|
||||||
#ifdef DH_OVERDRAW_PREVENTION
|
#ifdef DH_OVERDRAW_PREVENTION
|
||||||
if(clamp(1.0-length(pos.xyz)/max(far - 32.0,0.0),0.0,1.0) > 0.0 ){
|
if(clamp(1.0-length(pos.xyz)/max(far - 32.0,32.0),0.0,1.0) > 0.0 ){
|
||||||
discard;
|
discard;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -385,7 +385,6 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 )
|
|||||||
#ifdef SNELLS_WINDOW
|
#ifdef SNELLS_WINDOW
|
||||||
if(isEyeInWater == 1) fresnel = pow(clamp(1.5 + normalDotEye,0.0,1.0), 25.0);
|
if(isEyeInWater == 1) fresnel = pow(clamp(1.5 + normalDotEye,0.0,1.0), 25.0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef SCREENSPACE_REFLECTIONS
|
#ifdef SCREENSPACE_REFLECTIONS
|
||||||
vec3 rtPos = rayTrace(reflectedVector, viewPos, interleaved_gradientNoise(), fresnel, false);
|
vec3 rtPos = rayTrace(reflectedVector, viewPos, interleaved_gradientNoise(), fresnel, false);
|
||||||
if (rtPos.z < 1.){
|
if (rtPos.z < 1.){
|
||||||
@ -398,13 +397,13 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WATER_BACKGROUND_SPECULAR
|
#ifdef WATER_BACKGROUND_SPECULAR
|
||||||
BackgroundReflection = skyCloudsFromTex(mat3(gbufferModelViewInverse) * reflectedVector, colortex4).rgb / 30.0;
|
BackgroundReflection = skyCloudsFromTex(mat3(gbufferModelViewInverse) * reflectedVector, colortex4).rgb / 30.0;
|
||||||
#endif
|
#endif
|
||||||
#ifdef WATER_SUN_SPECULAR
|
#ifdef WATER_SUN_SPECULAR
|
||||||
SunReflection = Direct_lighting * GGX(normalize(normals), -normalize(viewPos), normalize(WsunVec2), roughness, f0);
|
SunReflection = Direct_lighting * GGX(normalize(normals), -normalize(viewPos), normalize(WsunVec2), roughness, f0) * (1.0-Reflections.a);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Reflections_Final = mix(BackgroundReflection, Reflections.rgb, Reflections.a) * fresnel;
|
Reflections_Final = mix(BackgroundReflection, Reflections.rgb, Reflections.a) * fresnel;
|
||||||
Reflections_Final += SunReflection;
|
Reflections_Final += SunReflection;
|
||||||
|
|
||||||
|
@ -456,6 +456,7 @@ void main() {
|
|||||||
gl_FragData[3].a = 0.0;
|
gl_FragData[3].a = 0.0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////// ////////////////////////////////
|
//////////////////////////////// ////////////////////////////////
|
||||||
//////////////////////////////// NORMAL ////////////////////////////////
|
//////////////////////////////// NORMAL ////////////////////////////////
|
||||||
//////////////////////////////// ////////////////////////////////
|
//////////////////////////////// ////////////////////////////////
|
||||||
|
@ -753,10 +753,6 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 )
|
|||||||
#undef WATER_REFLECTIONS
|
#undef WATER_REFLECTIONS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// #ifdef ENTITIES
|
|
||||||
// #undef WATER_BACKGROUND_SPECULAR
|
|
||||||
// #endif
|
|
||||||
|
|
||||||
#ifndef OVERWORLD_SHADER
|
#ifndef OVERWORLD_SHADER
|
||||||
#undef WATER_SUN_SPECULAR
|
#undef WATER_SUN_SPECULAR
|
||||||
#endif
|
#endif
|
||||||
@ -889,7 +885,6 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 )
|
|||||||
#ifndef HAND
|
#ifndef HAND
|
||||||
gl_FragData[1] = vec4(Albedo, MATERIALS);
|
gl_FragData[1] = vec4(Albedo, MATERIALS);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if DEBUG_VIEW == debug_DH_WATER_BLENDING
|
#if DEBUG_VIEW == debug_DH_WATER_BLENDING
|
||||||
if(gl_FragCoord.x*texelSize.x < 0.47) gl_FragData[0] = vec4(0.0);
|
if(gl_FragCoord.x*texelSize.x < 0.47) gl_FragData[0] = vec4(0.0);
|
||||||
#endif
|
#endif
|
||||||
|
@ -116,7 +116,7 @@ void main() {
|
|||||||
// translucent entities
|
// translucent entities
|
||||||
#if defined ENTITIES || defined BLOCKENTITIES
|
#if defined ENTITIES || defined BLOCKENTITIES
|
||||||
mat = 0.9;
|
mat = 0.9;
|
||||||
if (entityId == 1403) mat = 0.8;
|
if (entityId == 1803) mat = 0.8;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// translucent blocks
|
// translucent blocks
|
||||||
|
@ -8,9 +8,10 @@ flat varying vec2 TAA_Offset;
|
|||||||
|
|
||||||
uniform sampler2D depthtex0;
|
uniform sampler2D depthtex0;
|
||||||
uniform sampler2D depthtex1;
|
uniform sampler2D depthtex1;
|
||||||
|
|
||||||
#ifdef DISTANT_HORIZONS
|
#ifdef DISTANT_HORIZONS
|
||||||
uniform sampler2D dhDepthTex;
|
uniform sampler2D dhDepthTex;
|
||||||
uniform sampler2D dhDepthTex1;
|
uniform sampler2D dhDepthTex1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uniform sampler2D colortex1;
|
uniform sampler2D colortex1;
|
||||||
@ -23,11 +24,11 @@ uniform sampler2D colortex15; // Noise
|
|||||||
|
|
||||||
uniform sampler2D shadow;
|
uniform sampler2D shadow;
|
||||||
|
|
||||||
// #ifdef TRANSLUCENT_COLORED_SHADOWS
|
#ifdef TRANSLUCENT_COLORED_SHADOWS
|
||||||
uniform sampler2D shadowcolor0;
|
uniform sampler2D shadowcolor0;
|
||||||
uniform sampler2D shadowtex0;
|
uniform sampler2D shadowtex0;
|
||||||
uniform sampler2D shadowtex1;
|
uniform sampler2D shadowtex1;
|
||||||
// #endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
uniform sampler2D noisetex;
|
uniform sampler2D noisetex;
|
||||||
|
@ -170,6 +170,7 @@ vec3 toScreenSpace(vec3 p) {
|
|||||||
|
|
||||||
#ifdef OVERWORLD_SHADER
|
#ifdef OVERWORLD_SHADER
|
||||||
#include "/lib/volumetricClouds.glsl"
|
#include "/lib/volumetricClouds.glsl"
|
||||||
|
// #define CLOUDS_INTERSECT_TERRAIN
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "/lib/util.glsl"
|
#include "/lib/util.glsl"
|
||||||
@ -360,120 +361,6 @@ vec3 worldToView(vec3 worldPos) {
|
|||||||
return pos.xyz;
|
return pos.xyz;
|
||||||
}
|
}
|
||||||
|
|
||||||
void waterVolumetrics_notoverworld(inout vec3 inColor, vec3 rayStart, vec3 rayEnd, float estEndDepth, float estSunDepth, float rayLength, float dither, vec3 waterCoefs, vec3 scatterCoef, vec3 ambient){
|
|
||||||
inColor *= exp(-rayLength * waterCoefs); //No need to take the integrated value
|
|
||||||
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;
|
|
||||||
vec3 dVWorld = -mat3(gbufferModelViewInverse) * (rayEnd - rayStart) * maxZ;
|
|
||||||
rayLength *= maxZ;
|
|
||||||
estEndDepth *= maxZ;
|
|
||||||
estSunDepth *= maxZ;
|
|
||||||
vec3 absorbance = vec3(1.0);
|
|
||||||
vec3 vL = vec3(0.0);
|
|
||||||
|
|
||||||
|
|
||||||
float expFactor = 11.0;
|
|
||||||
vec3 progressW = gbufferModelViewInverse[3].xyz+cameraPosition;
|
|
||||||
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);
|
|
||||||
vec3 spPos = start.xyz + dV*d;
|
|
||||||
progressW = gbufferModelViewInverse[3].xyz+cameraPosition + d*dVWorld;
|
|
||||||
|
|
||||||
vec3 ambientMul = exp(-max(estEndDepth * d,0.0) * waterCoefs);
|
|
||||||
|
|
||||||
vec3 light = (ambientMul*ambient) * scatterCoef;
|
|
||||||
|
|
||||||
vL += (light - light * exp(-waterCoefs * dd * rayLength)) / waterCoefs *absorbance;
|
|
||||||
absorbance *= exp(-dd * rayLength * waterCoefs);
|
|
||||||
}
|
|
||||||
inColor += vL;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef OVERWORLD_SHADER
|
|
||||||
|
|
||||||
|
|
||||||
float fogPhase(float lightPoint){
|
|
||||||
float linear = 1.0 - clamp(lightPoint*0.5+0.5,0.0,1.0);
|
|
||||||
float linear2 = 1.0 - clamp(lightPoint,0.0,1.0);
|
|
||||||
|
|
||||||
float exponential = exp2(pow(linear,0.3) * -15.0 ) * 1.5;
|
|
||||||
exponential += sqrt(exp2(sqrt(linear) * -12.5));
|
|
||||||
|
|
||||||
return exponential;
|
|
||||||
}
|
|
||||||
|
|
||||||
void waterVolumetrics(inout vec3 inColor, 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);
|
|
||||||
|
|
||||||
inColor *= exp(-rayLength * waterCoefs); // No need to take the integrated value
|
|
||||||
float phase = fogPhase(VdotL) * 5.0;
|
|
||||||
vec3 absorbance = vec3(1.0);
|
|
||||||
vec3 vL = vec3(0.0);
|
|
||||||
|
|
||||||
float expFactor = 11.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);
|
|
||||||
vec3 spPos = start.xyz + dV*d;
|
|
||||||
|
|
||||||
vec3 progressW = start.xyz+cameraPosition+dVWorld;
|
|
||||||
|
|
||||||
//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);
|
|
||||||
float sh = 1.0;
|
|
||||||
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 VL_CLOUDS_SHADOWS
|
|
||||||
sh *= GetCloudShadow_VLFOG(progressW,WsunVec);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
vec3 sunMul = exp(-estSunDepth * d * waterCoefs * 1.1);
|
|
||||||
vec3 ambientMul = exp(-estEndDepth * d * waterCoefs );
|
|
||||||
|
|
||||||
vec3 Directlight = (lightSource * phase * sunMul) * sh;
|
|
||||||
vec3 Indirectlight = ambient * ambientMul;
|
|
||||||
|
|
||||||
vec3 light = (Indirectlight + Directlight) * scatterCoef;
|
|
||||||
|
|
||||||
vL += (light - light * exp(-waterCoefs * dd * rayLength)) / waterCoefs * absorbance;
|
|
||||||
absorbance *= exp(-waterCoefs * dd * rayLength);
|
|
||||||
}
|
|
||||||
inColor += vL;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
vec2 SSRT_Shadows(vec3 viewPos, bool depthCheck, vec3 lightDir, float noise, bool isSSS, bool hand){
|
vec2 SSRT_Shadows(vec3 viewPos, bool depthCheck, vec3 lightDir, float noise, bool isSSS, bool hand){
|
||||||
|
|
||||||
float handSwitch = hand ? 1.0 : 0.0;
|
float handSwitch = hand ? 1.0 : 0.0;
|
||||||
@ -930,16 +817,7 @@ void main() {
|
|||||||
vec3 waterEpsilon = vec3(Water_Absorb_R, Water_Absorb_G, Water_Absorb_B);
|
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 dirtEpsilon = vec3(Dirt_Absorb_R, Dirt_Absorb_G, Dirt_Absorb_B);
|
||||||
vec3 totEpsilon = dirtEpsilon*dirtAmount + waterEpsilon;
|
vec3 totEpsilon = dirtEpsilon*dirtAmount + waterEpsilon;
|
||||||
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 translucentdata = texture2D(colortex11,texcoord).gb;
|
|
||||||
vec3 wateralbedo = vec3(decodeVec2(translucentdata.x),decodeVec2(translucentdata.y).x);
|
|
||||||
scatterCoef = dirtAmount * wateralbedo / 3.14;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
vec3 Absorbtion = vec3(1.0);
|
vec3 Absorbtion = vec3(1.0);
|
||||||
vec3 AmbientLightColor = vec3(0.0);
|
vec3 AmbientLightColor = vec3(0.0);
|
||||||
vec3 MinimumLightColor = vec3(1.0);
|
vec3 MinimumLightColor = vec3(1.0);
|
||||||
@ -971,11 +849,6 @@ void main() {
|
|||||||
bool inShadowmapBounds = false;
|
bool inShadowmapBounds = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CLOUDS_INFRONT_OF_WORLD
|
|
||||||
float heightRelativeToClouds = clamp(cameraPosition.y - LAYER0_minHEIGHT,0.0,1.0);
|
|
||||||
vec4 Clouds = texture2D_bicubic_offset(colortex0, texcoord*CLOUDS_QUALITY, noise, RENDER_SCALE.x);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
/////////////////////////////////// FILTER STUFF //////////////////////////////////
|
/////////////////////////////////// FILTER STUFF //////////////////////////////////
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -1036,13 +909,9 @@ void main() {
|
|||||||
vec3 Sky = skyFromTex(feetPlayerPos_normalized, colortex4)/30.0;
|
vec3 Sky = skyFromTex(feetPlayerPos_normalized, colortex4)/30.0;
|
||||||
Background += Sky;
|
Background += Sky;
|
||||||
|
|
||||||
#ifdef VOLUMETRIC_CLOUDS
|
#if defined VOLUMETRIC_CLOUDS && !defined CLOUDS_INTERSECT_TERRAIN
|
||||||
#ifdef CLOUDS_INFRONT_OF_WORLD
|
vec4 Clouds = texture2D_bicubic_offset(colortex0, texcoord*CLOUDS_QUALITY, noise, RENDER_SCALE.x);
|
||||||
if(heightRelativeToClouds < 1.0) Background = Background * Clouds.a + Clouds.rgb;
|
Background = Background * Clouds.a + Clouds.rgb;
|
||||||
#else
|
|
||||||
vec4 Clouds = texture2D_bicubic_offset(colortex0, texcoord*CLOUDS_QUALITY, noise, RENDER_SCALE.x);
|
|
||||||
Background = Background * Clouds.a + Clouds.rgb;
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
gl_FragData[0].rgb = clamp(fp10Dither(Background, triangularize(noise_2)), 0.0, 65000.);
|
gl_FragData[0].rgb = clamp(fp10Dither(Background, triangularize(noise_2)), 0.0, 65000.);
|
||||||
@ -1296,8 +1165,8 @@ void main() {
|
|||||||
float sunSSS_density = LabSSS;
|
float sunSSS_density = LabSSS;
|
||||||
float SSS_shadow = ShadowAlpha * Shadows;
|
float SSS_shadow = ShadowAlpha * Shadows;
|
||||||
|
|
||||||
#ifdef DISTANT_HORIZONS_SHADOWMAP
|
#ifdef DISTANT_HORIZONS
|
||||||
shadowMapFalloff2 = smoothstep(0.0, 1.0, min(max(1.0 - length(feetPlayerPos) / min(shadowDistance, far-32),0.0)*5.0,1.0));
|
shadowMapFalloff2 = smoothstep(0.0, 1.0, min(max(1.0 - length(feetPlayerPos) / min(shadowDistance, max(far-32.0,32.0)),0.0)*5.0,1.0));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef RENDER_ENTITY_SHADOWS
|
#ifndef RENDER_ENTITY_SHADOWS
|
||||||
@ -1370,6 +1239,15 @@ void main() {
|
|||||||
gl_FragData[0].rgb = gl_FragData[0].rgb * vlBehingTranslucents.a + vlBehingTranslucents.rgb;
|
gl_FragData[0].rgb = gl_FragData[0].rgb * vlBehingTranslucents.a + vlBehingTranslucents.rgb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined VOLUMETRIC_CLOUDS && defined CLOUDS_INTERSECT_TERRAIN
|
||||||
|
vec4 Clouds = texture2D_bicubic_offset(colortex0, texcoord*CLOUDS_QUALITY, noise, RENDER_SCALE.x);
|
||||||
|
// vec4 Clouds = BilateralUpscale_REUSE_Z_clouds(colortex0, colortex12, DH_mixedLinearZ, gl_FragCoord.xy*CLOUDS_QUALITY, texcoord*CLOUDS_QUALITY);
|
||||||
|
|
||||||
|
gl_FragData[1] = texture2D(colortex2, texcoord);
|
||||||
|
gl_FragData[0].rgb = gl_FragData[0].rgb * Clouds.a + Clouds.rgb;
|
||||||
|
gl_FragData[1].a = gl_FragData[1].a * pow(Clouds.a,5.0);
|
||||||
|
#endif
|
||||||
|
|
||||||
// gl_FragData[0].rgb = vec3(1.0) * clamp(1.0 - filteredShadow.y/1,0,1);
|
// gl_FragData[0].rgb = vec3(1.0) * clamp(1.0 - filteredShadow.y/1,0,1);
|
||||||
// if(hideGUI > 0) gl_FragData[0].rgb = vec3(1.0) * Shadows;
|
// if(hideGUI > 0) gl_FragData[0].rgb = vec3(1.0) * Shadows;
|
||||||
////// DEBUG VIEW STUFF
|
////// DEBUG VIEW STUFF
|
||||||
@ -1403,24 +1281,5 @@ void main() {
|
|||||||
// if(hideGUI == 0) gl_FragData[0].rgb = vec3(1) * filteredShadow.z;//exp(-7*(1-clamp(1.0 - filteredShadow.x,0.0,1.0)));
|
// if(hideGUI == 0) gl_FragData[0].rgb = vec3(1) * filteredShadow.z;//exp(-7*(1-clamp(1.0 - filteredShadow.x,0.0,1.0)));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* DRAWBUFFERS:3 */
|
||||||
// float shadew = clamp(1.0 - filteredShadow.y/1,0.0,1.0);
|
|
||||||
// // if(hideGUI == 1)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef CLOUDS_INFRONT_OF_WORLD
|
|
||||||
gl_FragData[1] = texture2D(colortex2, texcoord);
|
|
||||||
if(heightRelativeToClouds > 0.0 && !hand){
|
|
||||||
gl_FragData[0].rgb = gl_FragData[0].rgb * Clouds.a + Clouds.rgb;
|
|
||||||
gl_FragData[1].a = gl_FragData[1].a*Clouds.a*Clouds.a*Clouds.a;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* DRAWBUFFERS:32 */
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
/* DRAWBUFFERS:3 */
|
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
}
|
@ -217,6 +217,7 @@ void ApplyDistortion(inout vec2 Texcoord, vec2 TangentNormals, float lineardista
|
|||||||
|
|
||||||
uniform int dhRenderDistance;
|
uniform int dhRenderDistance;
|
||||||
uniform float eyeAltitude;
|
uniform float eyeAltitude;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
/* DRAWBUFFERS:73 */
|
/* DRAWBUFFERS:73 */
|
||||||
|
|
||||||
|
@ -236,7 +236,6 @@ if (gl_FragCoord.x > pixelPos6.x && gl_FragCoord.x < pixelPos6.x + 1 && gl_FragC
|
|||||||
#else
|
#else
|
||||||
if (gl_FragCoord.x > 6. && gl_FragCoord.x < 7. && gl_FragCoord.y > 19.+18. && gl_FragCoord.y < 19.+18.+1 )
|
if (gl_FragCoord.x > 6. && gl_FragCoord.x < 7. && gl_FragCoord.y > 19.+18. && gl_FragCoord.y < 19.+18.+1 )
|
||||||
gl_FragData[0] = vec4(lightSourceColor,1.0);
|
gl_FragData[0] = vec4(lightSourceColor,1.0);
|
||||||
|
|
||||||
if (gl_FragCoord.x > 8. && gl_FragCoord.x < 9. && gl_FragCoord.y > 19.+18. && gl_FragCoord.y < 19.+18.+1 )
|
if (gl_FragCoord.x > 8. && gl_FragCoord.x < 9. && gl_FragCoord.y > 19.+18. && gl_FragCoord.y < 19.+18.+1 )
|
||||||
gl_FragData[0] = vec4(sunColor,1.0);
|
gl_FragData[0] = vec4(sunColor,1.0);
|
||||||
if (gl_FragCoord.x > 9. && gl_FragCoord.x < 10. && gl_FragCoord.y > 19.+18. && gl_FragCoord.y < 19.+18.+1 )
|
if (gl_FragCoord.x > 9. && gl_FragCoord.x < 10. && gl_FragCoord.y > 19.+18. && gl_FragCoord.y < 19.+18.+1 )
|
||||||
|
@ -19,7 +19,10 @@ uniform sampler2D depthtex0;
|
|||||||
|
|
||||||
#ifdef DISTANT_HORIZONS
|
#ifdef DISTANT_HORIZONS
|
||||||
uniform sampler2D dhDepthTex;
|
uniform sampler2D dhDepthTex;
|
||||||
|
uniform sampler2D dhDepthTex1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// uniform sampler2D colortex4;
|
// uniform sampler2D colortex4;
|
||||||
uniform sampler2D noisetex;
|
uniform sampler2D noisetex;
|
||||||
|
|
||||||
@ -37,8 +40,12 @@ uniform mat4 gbufferModelViewInverse;
|
|||||||
uniform vec3 cameraPosition;
|
uniform vec3 cameraPosition;
|
||||||
|
|
||||||
uniform mat4 gbufferModelView;
|
uniform mat4 gbufferModelView;
|
||||||
|
uniform mat4 gbufferProjection;
|
||||||
// flat varying vec2 TAA_Offset;
|
// flat varying vec2 TAA_Offset;
|
||||||
|
|
||||||
|
#define diagonal3(m) vec3((m)[0].x, (m)[1].y, m[2].z)
|
||||||
|
#define projMAD(m, v) (diagonal3(m) * (v) + (m)[3].xyz)
|
||||||
|
|
||||||
|
|
||||||
vec3 toScreenSpace(vec3 p) {
|
vec3 toScreenSpace(vec3 p) {
|
||||||
vec4 iProjDiag = vec4(gbufferProjectionInverse[0].x, gbufferProjectionInverse[1].y, gbufferProjectionInverse[2].zw);
|
vec4 iProjDiag = vec4(gbufferProjectionInverse[0].x, gbufferProjectionInverse[1].y, gbufferProjectionInverse[2].zw);
|
||||||
@ -47,6 +54,9 @@ vec3 toScreenSpace(vec3 p) {
|
|||||||
return fragposition.xyz / fragposition.w;
|
return fragposition.xyz / fragposition.w;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#include "/lib/DistantHorizons_projections.glsl"
|
||||||
|
|
||||||
float R2_dither(){
|
float R2_dither(){
|
||||||
#ifdef TAA
|
#ifdef TAA
|
||||||
vec2 coord = gl_FragCoord.xy + (frameCounter%40000) * 2.0;
|
vec2 coord = gl_FragCoord.xy + (frameCounter%40000) * 2.0;
|
||||||
@ -86,14 +96,26 @@ float blueNoise(){
|
|||||||
vec3 normVec (vec3 vec){
|
vec3 normVec (vec3 vec){
|
||||||
return vec*inversesqrt(dot(vec,vec));
|
return vec*inversesqrt(dot(vec,vec));
|
||||||
}
|
}
|
||||||
|
uniform float far;
|
||||||
|
|
||||||
|
|
||||||
|
float ld(float dist) {
|
||||||
|
return (2.0 * near) / (far + near - dist * (far - near));
|
||||||
|
}
|
||||||
|
|
||||||
|
uniform int dhRenderDistance;
|
||||||
|
|
||||||
#include "/lib/lightning_stuff.glsl"
|
#include "/lib/lightning_stuff.glsl"
|
||||||
|
|
||||||
#include "/lib/sky_gradient.glsl"
|
#include "/lib/sky_gradient.glsl"
|
||||||
|
|
||||||
|
// #define CLOUDS_INTERSECT_TERRAIN
|
||||||
#include "/lib/volumetricClouds.glsl"
|
#include "/lib/volumetricClouds.glsl"
|
||||||
#include "/lib/res_params.glsl"
|
#include "/lib/res_params.glsl"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////VOID MAIN//////////////////////////////
|
//////////////////////////////VOID MAIN//////////////////////////////
|
||||||
//////////////////////////////VOID MAIN//////////////////////////////
|
//////////////////////////////VOID MAIN//////////////////////////////
|
||||||
//////////////////////////////VOID MAIN//////////////////////////////
|
//////////////////////////////VOID MAIN//////////////////////////////
|
||||||
@ -106,11 +128,21 @@ void main() {
|
|||||||
#if defined OVERWORLD_SHADER && defined VOLUMETRIC_CLOUDS
|
#if defined OVERWORLD_SHADER && defined VOLUMETRIC_CLOUDS
|
||||||
vec2 halfResTC = vec2(floor(gl_FragCoord.xy)/CLOUDS_QUALITY/RENDER_SCALE+0.5+offsets[framemod8]*CLOUDS_QUALITY*RENDER_SCALE*0.5);
|
vec2 halfResTC = vec2(floor(gl_FragCoord.xy)/CLOUDS_QUALITY/RENDER_SCALE+0.5+offsets[framemod8]*CLOUDS_QUALITY*RENDER_SCALE*0.5);
|
||||||
|
|
||||||
vec3 viewPos = toScreenSpace(vec3(halfResTC*texelSize,1.0));
|
float depth = texture2D(depthtex0, halfResTC*texelSize).x;
|
||||||
|
|
||||||
|
|
||||||
|
// vec3 viewPos = toScreenSpace(vec3(halfResTC*texelSize, depth));
|
||||||
|
|
||||||
|
#ifdef DISTANT_HORIZONS
|
||||||
|
float DH_depth = texture2D(dhDepthTex, halfResTC*texelSize).x;
|
||||||
|
vec3 viewPos = toScreenSpace_DH(halfResTC*texelSize, depth, DH_depth);
|
||||||
|
#else
|
||||||
|
vec3 viewPos = toScreenSpace(vec3(halfResTC*texelSize, depth));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
vec4 VolumetricClouds = renderClouds(viewPos, vec2(R2_dither(), blueNoise()), sunColor/80.0, averageSkyCol/30.0);
|
vec4 VolumetricClouds = renderClouds(viewPos, vec2(R2_dither(), blueNoise()), sunColor/80.0, averageSkyCol/30.0);
|
||||||
|
|
||||||
// gl_FragData[0] = vec4(0.0,0.0,0.0,1.0);
|
|
||||||
gl_FragData[0] = VolumetricClouds;
|
gl_FragData[0] = VolumetricClouds;
|
||||||
#else
|
#else
|
||||||
gl_FragData[0] = vec4(0.0,0.0,0.0,1.0);
|
gl_FragData[0] = vec4(0.0,0.0,0.0,1.0);
|
||||||
|
@ -155,14 +155,6 @@ void main() {
|
|||||||
|
|
||||||
applyGameplayEffects_FRAGMENT(FINAL_COLOR, texcoord, interleaved_gradientNoise()); // for making the fun, more fun
|
applyGameplayEffects_FRAGMENT(FINAL_COLOR, texcoord, interleaved_gradientNoise()); // for making the fun, more fun
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// float reprojectedBuffer = texture2D(colortex14, texcoord).a;
|
|
||||||
|
|
||||||
// gl_FragColor.rgb = vec3(1.0) * reprojectedBuffer;
|
|
||||||
|
|
||||||
gl_FragColor.rgb = FINAL_COLOR;
|
gl_FragColor.rgb = FINAL_COLOR;
|
||||||
|
|
||||||
#if DEBUG_VIEW == debug_SHADOWMAP
|
#if DEBUG_VIEW == debug_SHADOWMAP
|
||||||
|
@ -24,6 +24,7 @@ uniform sampler2D colortex3;
|
|||||||
// uniform sampler2D colortex4;
|
// uniform sampler2D colortex4;
|
||||||
uniform sampler2D colortex6;
|
uniform sampler2D colortex6;
|
||||||
uniform sampler2D colortex7;
|
uniform sampler2D colortex7;
|
||||||
|
uniform sampler2D colortex11;
|
||||||
uniform sampler2D colortex14;
|
uniform sampler2D colortex14;
|
||||||
|
|
||||||
flat varying vec3 WsunVec;
|
flat varying vec3 WsunVec;
|
||||||
@ -319,6 +320,15 @@ void main() {
|
|||||||
vec3 totEpsilon = dirtEpsilon*dirtAmount + waterEpsilon;
|
vec3 totEpsilon = dirtEpsilon*dirtAmount + waterEpsilon;
|
||||||
vec3 scatterCoef = dirtAmount * vec3(Dirt_Scatter_R, Dirt_Scatter_G, Dirt_Scatter_B) / 3.14;
|
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 translucentdata = texture2D(colortex11,tc).gb;
|
||||||
|
vec3 wateralbedo = normalize(vec3(decodeVec2(translucentdata.x),decodeVec2(translucentdata.y).x)+0.00001) * 0.5 + 0.5;
|
||||||
|
scatterCoef = dirtAmount * wateralbedo / 3.14;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
vec3 directLightColor = lightCol.rgb/80.0;
|
vec3 directLightColor = lightCol.rgb/80.0;
|
||||||
vec3 indirectLightColor = averageSkyCol/30.0;
|
vec3 indirectLightColor = averageSkyCol/30.0;
|
||||||
vec3 indirectLightColor_dynamic = averageSkyCol_Clouds/30.0;
|
vec3 indirectLightColor_dynamic = averageSkyCol_Clouds/30.0;
|
||||||
@ -350,9 +360,9 @@ void main() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
indirectLightColor_dynamic *= ambient_brightness * pow(1.0-pow(1.0-lightmap.y,0.5),3.0) ;
|
// indirectLightColor_dynamic *= ambient_brightness * pow(1.0-pow(1.0-lightmap.y,0.5),3.0) ;
|
||||||
float TorchBrightness_autoAdjust = mix(1.0, 30.0, clamp(exp(-10.0*exposure),0.0,1.0)) ;
|
// float TorchBrightness_autoAdjust = mix(1.0, 30.0, clamp(exp(-10.0*exposure),0.0,1.0)) ;
|
||||||
indirectLightColor_dynamic += vec3(TORCH_R,TORCH_G,TORCH_B) * TorchBrightness_autoAdjust * pow(1.0-sqrt(1.0-clamp(lightmap.x,0.0,1.0)),2.0) * 2.0;
|
// indirectLightColor_dynamic += vec3(TORCH_R,TORCH_G,TORCH_B) * TorchBrightness_autoAdjust * pow(1.0-sqrt(1.0-clamp(lightmap.x,0.0,1.0)),2.0) * 2.0;
|
||||||
|
|
||||||
vec4 VolumetricFog2 = vec4(0,0,0,1);
|
vec4 VolumetricFog2 = vec4(0,0,0,1);
|
||||||
#ifdef OVERWORLD_SHADER
|
#ifdef OVERWORLD_SHADER
|
||||||
|
@ -251,7 +251,6 @@ float phaseg(float x, float g){
|
|||||||
return (gg * -0.25 + 0.25) * pow(-2.0 * (g * x) + (gg + 1.0), -1.5) / 3.14;
|
return (gg * -0.25 + 0.25) * pow(-2.0 * (g * x) + (gg + 1.0), -1.5) / 3.14;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
vec3 DoCloudLighting(
|
vec3 DoCloudLighting(
|
||||||
float density,
|
float density,
|
||||||
float densityFaded,
|
float densityFaded,
|
||||||
@ -263,12 +262,10 @@ vec3 DoCloudLighting(
|
|||||||
vec3 sunScatter,
|
vec3 sunScatter,
|
||||||
vec3 sunMultiScatter,
|
vec3 sunMultiScatter,
|
||||||
float distantfog
|
float distantfog
|
||||||
|
|
||||||
){
|
){
|
||||||
float powder = 1.0 - exp(-5.0 * sqrt(density));
|
float powder = 1.0 - exp(-5.0 * sqrt(density));
|
||||||
// float powder = 1.0 - exp(-15.0 * density);
|
|
||||||
|
|
||||||
vec3 indirectLight = skyLightCol * mix(1.0, 1.0 - exp(-1.0 * (1.0-sqrt(density))), skyScatter*skyScatter*skyScatter * distantfog);
|
vec3 indirectLight = skyLightCol * mix(1.0, 1.0 - exp(-1.0 * (1.0-sqrt(density))), skyScatter*skyScatter*skyScatter * distantfog);
|
||||||
|
|
||||||
vec3 directLight = sunMultiScatter * exp(-3.0 * sunShadows) * powder + sunScatter * exp(-10.0 * sunShadows);
|
vec3 directLight = sunMultiScatter * exp(-3.0 * sunShadows) * powder + sunScatter * exp(-10.0 * sunShadows);
|
||||||
|
|
||||||
@ -276,26 +273,6 @@ vec3 DoCloudLighting(
|
|||||||
// return directLight;
|
// return directLight;
|
||||||
return indirectLight + directLight;
|
return indirectLight + directLight;
|
||||||
}
|
}
|
||||||
vec3 rodSample_CLOUD(vec2 Xi)
|
|
||||||
{
|
|
||||||
float r = sqrt(1.0f - Xi.x*Xi.y);
|
|
||||||
float phi = 2 * 3.14159265359 * Xi.y;
|
|
||||||
|
|
||||||
return normalize(vec3(cos(phi) * r, sin(phi) * r, Xi.x)).xzy;
|
|
||||||
}
|
|
||||||
vec2 R2_samples_CLOUD(int n){
|
|
||||||
vec2 alpha = vec2(0.75487765, 0.56984026);
|
|
||||||
return fract(alpha * n);
|
|
||||||
}
|
|
||||||
vec3 cosineHemisphereSample_CLOUD(vec2 Xi){
|
|
||||||
float theta = 2.0 * 3.14159265359 * Xi.y;
|
|
||||||
|
|
||||||
float r = sqrt(Xi.x);
|
|
||||||
float x = r * cos(theta);
|
|
||||||
float y = r * sin(theta);
|
|
||||||
|
|
||||||
return vec3(x, y, sqrt(clamp(1.0 - Xi.x,0.,1.)));
|
|
||||||
}
|
|
||||||
|
|
||||||
vec4 renderLayer(
|
vec4 renderLayer(
|
||||||
int layer,
|
int layer,
|
||||||
@ -317,14 +294,32 @@ vec4 renderLayer(
|
|||||||
in vec3 sunMultiScatter,
|
in vec3 sunMultiScatter,
|
||||||
in vec3 indirectScatter,
|
in vec3 indirectScatter,
|
||||||
in float distantfog,
|
in float distantfog,
|
||||||
bool notVisible
|
bool notVisible,
|
||||||
|
vec3 FragPosition
|
||||||
){
|
){
|
||||||
vec3 COLOR = vec3(0.0);
|
vec3 COLOR = vec3(0.0);
|
||||||
float TOTAL_EXTINCTION = 1.0;
|
float TOTAL_EXTINCTION = 1.0;
|
||||||
|
|
||||||
|
bool IntersecTerrain = false;
|
||||||
|
|
||||||
|
#ifdef CLOUDS_INTERSECT_TERRAIN
|
||||||
|
// thank you emin for this world intersection thing
|
||||||
|
#if defined DISTANT_HORIZONS
|
||||||
|
float maxdist = dhRenderDistance + 16 * 64;
|
||||||
|
#else
|
||||||
|
float maxdist = far + 16*5;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
float lViewPosM = length(FragPosition) < maxdist ? length(FragPosition) - 1.0 : 100000000.0;
|
||||||
|
#endif
|
||||||
|
|
||||||
if(layer == 2){
|
if(layer == 2){
|
||||||
if(notVisible) return vec4(COLOR, TOTAL_EXTINCTION);
|
|
||||||
|
#ifdef CLOUDS_INTERSECT_TERRAIN
|
||||||
|
IntersecTerrain = length(rayProgress - cameraPosition) > lViewPosM;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if(notVisible || IntersecTerrain) return vec4(COLOR, TOTAL_EXTINCTION);
|
||||||
|
|
||||||
float signFlip = mix(-1.0, 1.0, clamp(cameraPosition.y - minHeight,0.0,1.0));
|
float signFlip = mix(-1.0, 1.0, clamp(cameraPosition.y - minHeight,0.0,1.0));
|
||||||
|
|
||||||
@ -362,8 +357,11 @@ if(layer == 2){
|
|||||||
|
|
||||||
for(int i = 0; i < QUALITY; i++) {
|
for(int i = 0; i < QUALITY; i++) {
|
||||||
|
|
||||||
|
#ifdef CLOUDS_INTERSECT_TERRAIN
|
||||||
|
IntersecTerrain = length(rayProgress - cameraPosition) > lViewPosM;
|
||||||
|
#endif
|
||||||
/// avoid overdraw
|
/// avoid overdraw
|
||||||
if(notVisible) break;
|
if(notVisible || IntersecTerrain) break;
|
||||||
|
|
||||||
// do not sample anything unless within a clouds bounding box
|
// do not sample anything unless within a clouds bounding box
|
||||||
if(clamp(rayProgress.y - maxHeight,0.0,1.0) < 1.0 && clamp(rayProgress.y - minHeight,0.0,1.0) > 0.0){
|
if(clamp(rayProgress.y - maxHeight,0.0,1.0) < 1.0 && clamp(rayProgress.y - minHeight,0.0,1.0) > 0.0){
|
||||||
@ -404,6 +402,7 @@ if(layer == 2){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
rayProgress += dV_view;
|
rayProgress += dV_view;
|
||||||
|
|
||||||
}
|
}
|
||||||
return vec4(COLOR, TOTAL_EXTINCTION);
|
return vec4(COLOR, TOTAL_EXTINCTION);
|
||||||
}
|
}
|
||||||
@ -537,7 +536,7 @@ vec4 renderClouds(
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CloudLayer0
|
#ifdef CloudLayer0
|
||||||
vec4 layer0 = renderLayer(0, layer0_start, dV_view, mult, Dither.x, maxIT_clouds, MinHeight, MaxHeight, dV_Sun, LAYER0_DENSITY, SkyColor, directScattering, directMultiScattering, sunIndirectScattering, distantfog, false);
|
vec4 layer0 = renderLayer(0, layer0_start, dV_view, mult, Dither.x, maxIT_clouds, MinHeight, MaxHeight, dV_Sun, LAYER0_DENSITY, SkyColor, directScattering, directMultiScattering* 2.0, sunIndirectScattering, distantfog, false, FragPosition);
|
||||||
total_extinction *= layer0.a;
|
total_extinction *= layer0.a;
|
||||||
|
|
||||||
// stop overdraw.
|
// stop overdraw.
|
||||||
@ -549,7 +548,7 @@ vec4 renderClouds(
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CloudLayer1
|
#ifdef CloudLayer1
|
||||||
vec4 layer1 = renderLayer(1, layer1_start, dV_view, mult, Dither.x, maxIT_clouds, MinHeight1, MaxHeight1, dV_Sun, LAYER1_DENSITY, SkyColor, directScattering, directMultiScattering,sunIndirectScattering, distantfog, notVisible);
|
vec4 layer1 = renderLayer(1, layer1_start, dV_view, mult, Dither.x, maxIT_clouds, MinHeight1, MaxHeight1, dV_Sun, LAYER1_DENSITY, SkyColor, directScattering, directMultiScattering* 2.0, sunIndirectScattering, distantfog, notVisible, FragPosition);
|
||||||
total_extinction *= layer1.a;
|
total_extinction *= layer1.a;
|
||||||
|
|
||||||
// stop overdraw.
|
// stop overdraw.
|
||||||
@ -557,7 +556,7 @@ vec4 renderClouds(
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CloudLayer2
|
#ifdef CloudLayer2
|
||||||
vec4 layer2 = renderLayer(2, layer2_start, dV_view_Alto, mult_alto, Dither.x, maxIT_clouds, Height2, Height2, dV_Sun, LAYER2_DENSITY, SkyColor, directScattering, directMultiScattering,sunIndirectScattering, distantfog, altoNotVisible);
|
vec4 layer2 = renderLayer(2, layer2_start, dV_view_Alto, mult_alto, Dither.x, maxIT_clouds, Height2, Height2, dV_Sun, LAYER2_DENSITY, SkyColor, directScattering, directMultiScattering,sunIndirectScattering, distantfog, altoNotVisible, FragPosition);
|
||||||
total_extinction *= layer2.a;
|
total_extinction *= layer2.a;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -36,13 +36,15 @@ iris.features.optional = ENTITY_TRANSLUCENT REVERSED_CULLING COMPUTE_SHADERS CUS
|
|||||||
#ifdef TRANSLUCENT_ENTITIES
|
#ifdef TRANSLUCENT_ENTITIES
|
||||||
separateEntityDraws = true
|
separateEntityDraws = true
|
||||||
#else
|
#else
|
||||||
separateEntityDraws = true
|
separateEntityDraws = false
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
program.world0/gbuffers_entities_translucent.enabled = TRANSLUCENT_ENTITIES
|
program.world0/gbuffers_entities_translucent.enabled = TRANSLUCENT_ENTITIES
|
||||||
program.world0/gbuffers_block_translucent.enabled = TRANSLUCENT_ENTITIES
|
program.world0/gbuffers_block_translucent.enabled = TRANSLUCENT_ENTITIES
|
||||||
|
|
||||||
program.world-1/gbuffers_entities_translucent.enabled = TRANSLUCENT_ENTITIES
|
program.world-1/gbuffers_entities_translucent.enabled = TRANSLUCENT_ENTITIES
|
||||||
program.world-1/gbuffers_block_translucent.enabled = TRANSLUCENT_ENTITIES
|
program.world-1/gbuffers_block_translucent.enabled = TRANSLUCENT_ENTITIES
|
||||||
|
|
||||||
program.world1/gbuffers_entities_translucent.enabled = TRANSLUCENT_ENTITIES
|
program.world1/gbuffers_entities_translucent.enabled = TRANSLUCENT_ENTITIES
|
||||||
program.world1/gbuffers_block_translucent.enabled = TRANSLUCENT_ENTITIES
|
program.world1/gbuffers_block_translucent.enabled = TRANSLUCENT_ENTITIES
|
||||||
|
|
||||||
@ -322,7 +324,7 @@ BLISS_SHADERS <empty> \
|
|||||||
|
|
||||||
|
|
||||||
######## MISC SETTINGS
|
######## MISC SETTINGS
|
||||||
screen.Misc_Settings = DEBUG_VIEW [the_orb] display_LUT WhiteWorld SSS_view ambientLight_only LIGHTNING_FLASH LIT_PARTICLE_BRIGHTNESS PLANET_GROUND_BRIGHTNESS BLOOMY_PARTICLES ORIGINAL_CHOCAPIC_SKY BIOME_TINT_WATER CLOUDS_INFRONT_OF_WORLD SELECT_BOX DENOISE_SSS_AND_SSAO WATER_CAUSTICS_BRIGHTNESS HYPER_DETAILED_WAVES OLD_BLOOM DISABLE_ENCHANT_GLINT DISABLE_VANILLA_EMISSIVES PARTICLE_RENDERING_FIX
|
screen.Misc_Settings = DEBUG_VIEW [the_orb] display_LUT WhiteWorld SSS_view ambientLight_only LIGHTNING_FLASH LIT_PARTICLE_BRIGHTNESS PLANET_GROUND_BRIGHTNESS BLOOMY_PARTICLES ORIGINAL_CHOCAPIC_SKY BIOME_TINT_WATER CLOUDS_INTERSECT_TERRAIN SELECT_BOX WATER_CAUSTICS_BRIGHTNESS HYPER_DETAILED_WAVES OLD_BLOOM DISABLE_ENCHANT_GLINT DISABLE_VANILLA_EMISSIVES PARTICLE_RENDERING_FIX
|
||||||
|
|
||||||
screen.the_orb.columns = 1
|
screen.the_orb.columns = 1
|
||||||
screen.the_orb = THE_ORB ORB_X ORB_Y ORB_Z ORB_ColMult ORB_R ORB_G ORB_B
|
screen.the_orb = THE_ORB ORB_X ORB_Y ORB_Z ORB_ColMult ORB_R ORB_G ORB_B
|
||||||
|
Loading…
x
Reference in New Issue
Block a user