From 33b1cb8822714891ec43db6ce8c85e7ff2a2e13c Mon Sep 17 00:00:00 2001 From: Seungyeop Lee Date: Mon, 22 Jul 2024 18:28:10 +0900 Subject: [PATCH 001/147] Create ko_KR.lang --- shaders/lang/ko_KR.lang | 293 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 293 insertions(+) create mode 100644 shaders/lang/ko_KR.lang diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang new file mode 100644 index 00000000..8d792f41 --- /dev/null +++ b/shaders/lang/ko_KR.lang @@ -0,0 +1,293 @@ +#프로필 +############################ +profile.no_effects=효과 없음 +profile.shadowless_low=그림자 없음 낮음 +profile.shadowless_medium=그림자 없음 중간 +profile.shadowless_high=그림자 없음 높음 +profile.low=낮음 +profile.medium=중간 +profile.high=높음 +profile.extreme=극한 +profile.extremeplus=극한+ + +profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설계되었으며, 그림자를 무시합니다. 전통적인 프로필은 천천히 더 높은 품질의 그림자와 더 고급스러운 무거운 효과를 추가합니다. 사용 가능한 옵션을 실험해보고 가장 적합한 조합을 찾으십시오. + +#정보 +############################# +option.ACERCADE=MakeUp +option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. +value.ACERCADE.0=v.9.0 + +#옵션 +############################# +option.SHADOW_CASTING=그림자 생성 + +option.SHADOW_DISTANCE_SLIDER=그림자 거리 +value.SHADOW_DISTANCE_SLIDER.0=짧음 +value.SHADOW_DISTANCE_SLIDER.1=중간 +value.SHADOW_DISTANCE_SLIDER.2=김 + +option.SHADOW_QTY_SLIDER=그림자 품질 +value.SHADOW_QTY_SLIDER.0=없음 +value.SHADOW_QTY_SLIDER.1=낮음 +value.SHADOW_QTY_SLIDER.2=중간 +value.SHADOW_QTY_SLIDER.3=높음 + +option.REFLECTION_SLIDER=반사 +value.REFLECTION_SLIDER.0=끔 +value.REFLECTION_SLIDER.1=반전 이미지 +value.REFLECTION_SLIDER.2=Raymarching + +option.SHADOW_TYPE=그림자 유형 +value.SHADOW_TYPE.0=단순 +value.SHADOW_TYPE.1=필터 적용 + +option.SHADOW_BLUR=그림자 블러 강도 + +option.COLORED_SHADOW=컬러 그림자 + +option.VOL_LIGHT=빛 기둥 +value.VOL_LIGHT.0=비활성화 +value.VOL_LIGHT.1=깊이 기반 +value.VOL_LIGHT.2=부피 효과 + +option.DOF=깊이 감지 + +option.DOF_STRENGTH=깊이 감지 강도 + +option.DOF_SAMPLES_FACTOR=깊이 감지 샘플 수 + +option.AO=환경 폐색 +value.AO.0=끔 +value.AO.1=켬 + +option.AOSTEPS=환경 폐색 샘플 쌍 + +option.AO_STRENGTH=환경 폐색 강도 + +option.AA_TYPE=시간적 샘플링 +value.AA_TYPE.0=끔 +value.AA_TYPE.1=노이즈 제거 +value.AA_TYPE.2=TAA +value.AA_TYPE.3=날카로운 TAA + +option.MOTION_BLUR=모션 블러 +option.MOTION_BLUR_STRENGTH=모션 블러 강도 +option.MOTION_BLUR_SAMPLES=모션 블러 샘플 수 + +option.VANILLA_WATER=바닐라 같은 물 + +option.WATER_TEXTURE=물 텍스처 +value.WATER_TEXTURE.0=아니요 +value.WATER_TEXTURE.1=예 + +option.WATER_COLOR_SOURCE=물 색상 +value.WATER_COLOR_SOURCE.0=셰이더 방식 +value.WATER_COLOR_SOURCE.1=리소스 팩 + +option.REFLECTION=반사 +value.REFLECTION.0=끔 +value.REFLECTION.1=켬 + +option.REFRACTION=굴절 +value.REFRACTION.0=끔 +value.REFRACTION.1=켬 + +option.SSR_TYPE=반사 유형 +value.SSR_TYPE.0=반전 이미지 +value.SSR_TYPE.1=Raymarching + +option.SUN_REFLECTION=태양 반사 +value.SUN_REFLECTION.0=끔 +value.SUN_REFLECTION.1=켬 + +option.CLOUD_REFLECTION=부피 구름 반사 + +option.WAVING=흔들리는 식물 +value.WAVING.0=아니요 +value.WAVING.1=예 + +option.CHROMA_ABER=색수차 +value.CHROMA_ABER.0=아니요 +value.CHROMA_ABER.1=예 + +option.CHROMA_ABER_STRENGTH=색수차 강도 + +option.WATER_ABSORPTION=물 흡수 지수 + +option.WATER_TURBULENCE=파도 강도 +value.WATER_TURBULENCE.7.0=매우 낮음 +value.WATER_TURBULENCE.1.75=낮음 +value.WATER_TURBULENCE.0.9=중간 +value.WATER_TURBULENCE.0.5=높음 + +option.COLOR_SCHEME=색상 체계 +value.COLOR_SCHEME.0=에테르 +value.COLOR_SCHEME.1=새로운 쇼카 (New Shoka) +value.COLOR_SCHEME.2=쇼카 (Shoka) +value.COLOR_SCHEME.3=레거시 +value.COLOR_SCHEME.4=캡틴 (Captain) +value.COLOR_SCHEME.5=환각적 +value.COLOR_SCHEME.6=코코아 +value.COLOR_SCHEME.99=사용자 지정 + +option.LIGHT_SUNSET_COLOR_R=일몰 빛 R +option.LIGHT_SUNSET_COLOR_G=일몰 빛 G +option.LIGHT_SUNSET_COLOR_B=일몰 빛 B + +option.LIGHT_DAY_COLOR_R=낮 빛 R +option.LIGHT_DAY_COLOR_G=낮 빛 G +option.LIGHT_DAY_COLOR_B=낮 빛 B + +option.LIGHT_NIGHT_COLOR_R=밤 빛 R +option.LIGHT_NIGHT_COLOR_G=밤 빛 G +option.LIGHT_NIGHT_COLOR_B=밤 빛 B + +option.ZENITH_SUNSET_COLOR_R=정점 일몰 R +option.ZENITH_SUNSET_COLOR_G=정점 일몰 G +option.ZENITH_SUNSET_COLOR_B=정점 일몰 B + +option.ZENITH_DAY_COLOR_R=정점 낮 R +option.ZENITH_DAY_COLOR_G=정점 낮 G +option.ZENITH_DAY_COLOR_B=정점 낮 B + +option.ZENITH_NIGHT_COLOR_R=정점 밤 R +option.ZENITH_NIGHT_COLOR_G=정점 밤 G +option.ZENITH_NIGHT_COLOR_B=정점 밤 B + +option.HORIZON_SUNSET_COLOR_R=지평선 일몰 R +option.HORIZON_SUNSET_COLOR_G=지평선 일몰 G +option.HORIZON_SUNSET_COLOR_B=지평선 일몰 B + +option.HORIZON_DAY_COLOR_R=지평선 낮 R +option.HORIZON_DAY_COLOR_G=지평선 낮 G +option.HORIZON_DAY_COLOR_B=지평선 낮 B + +option.HORIZON_NIGHT_COLOR_R=지평선 밤 R +option.HORIZON_NIGHT_COLOR_G=지평선 밤 G +option.HORIZON_NIGHT_COLOR_B=지평선 밤 B + +option.WATER_COLOR_R=물 R +option.WATER_COLOR_G=물 G +option.WATER_COLOR_B=물 B + +option.NV_COLOR_R=야간 투시 R 배수 +option.NV_COLOR_G=야간 투시 G 배수 +option.NV_COLOR_B=야간 투시 B 배수 + +option.OMNI_TINT_CUSTOM=Omni 색조 + +option.AVOID_DARK_LEVEL=동굴 밝기 + +option.NIGHT_BRIGHT=밤 밝기 + +option.V_CLOUDS=구름 +value.V_CLOUDS.0=바닐라 +value.V_CLOUDS.1=부피 정적 +value.V_CLOUDS.2=부피 동적 + +option.CLOUD_VOL_STYLE=부피 구름 스타일 +value.CLOUD_VOL_STYLE.0=자연스러운 +value.CLOUD_VOL_STYLE.1=박스형 + +option.CLOUD_SPEED=구름 속도 +value.CLOUD_SPEED.0=보통 +value.CLOUD_SPEED.1=타임랩스 1 +value.CLOUD_SPEED.2=타임랩스 2 + +option.END_CLOUDS=엔드의 구름 + +option.CLOUD_STEPS_AVG=구름 샘플 수 + +option.BLOOM=블룸 + +option.COLOR_BLINDNESS=색맹 + +option.COLOR_BLIND_MODE=색맹 유형 +value.COLOR_BLIND_MODE.0=적색맥 (Protanopia) +value.COLOR_BLIND_MODE.1=녹색맹 (Deuteranopia) +value.COLOR_BLIND_MODE.2=청색맹 (Tritanopia) + +option.DEBUG_MODE=디버그 모드 + +option.BLOOM_SAMPLES=블룸 샘플 쌍 + +option.BLACK_ENTITY_FIX=검은 개체 버그 수정 +value.BLACK_ENTITY_FIX.0=끔 +value.BLACK_ENTITY_FIX.1=켬 + +option.FOG_ACTIVE=안개 활성화 + +option.FOG_ADJUST=안개 강도 +value.FOG_ADJUST.20.0=안개 없음 +value.FOG_ADJUST.10.0=극저 +value.FOG_ADJUST.8.0=매우 낮음 +value.FOG_ADJUST.4.0=낮음 +value.FOG_ADJUST.2.0=중간 +value.FOG_ADJUST.1.0=높음 + +option.NETHER_FOG_DISTANCE=네더 안개 거리 +value.NETHER_FOG_DISTANCE.0=렌더 거리 +value.NETHER_FOG_DISTANCE.1=바닐라 + +option.BLOCKLIGHT_TEMP=블록 조명 온도 +value.BLOCKLIGHT_TEMP.0=더 따뜻함 +value.BLOCKLIGHT_TEMP.1=따뜻함 +value.BLOCKLIGHT_TEMP.2=노란색 +value.BLOCKLIGHT_TEMP.3=옅은 노란색 +value.BLOCKLIGHT_TEMP.4=흰색 빛 + +option.sunPathRotation=태양 각도 + +option.USE_BASIC_SH=커스텀 차원 기본 셰이더 사용 + +option.MATERIAL_GLOSS=재료 광택 + +option.SIMPLE_AUTOEXP=간단한 노출 + +option.DYN_HAND_LIGHT=가짜 동적 빛 + +#화면 +screen.ADVANCED_SCREEN=고급 옵션 +screen.ADVANCED_SCREEN.comment=고급 옵션 설정 + +screen.COMPATIBILITY_SCREEN=호환성 +screen.COMPATIBILITY_SCREEN.comment=호환성 옵션 설정 + +screen.SHADOWS_SCREEN=그림자 +screen.SHADOWS_SCREEN.comment=그림자 옵션 설정 + +screen.DOF_SCREEN=깊이 감지 +screen.DOF_SCREEN.comment=깊이 감지 옵션 설정 + +screen.AO_SCREEN=환경 폐색 +screen.AO_SCREEN.comment=환경 폐색 옵션 설정 + +screen.WATER_SCREEN=물 +screen.WATER_SCREEN.comment=물 옵션 설정 + +screen.POST_SCREEN=후처리 효과 +screen.POST_SCREEN.comment=후처리 효과 옵션 설정 + +screen.LIGHT_SCREEN=빛 +screen.LIGHT_SCREEN.comment=빛 옵션 설정 + +screen.CLOUDS_SCREEN=태양 & 구름 +screen.CLOUDS_SCREEN.comment=태양과 구름 옵션 설정 + +screen.FOG_SCREEN=안개 +screen.FOG_SCREEN.comment=안개 옵션 설정 + +screen.MOTION_BLUR_SCREEN=모션 블러 +screen.MOTION_BLUR_SCREEN.comment=모션 블러 옵션 설정 + +screen.ACCESIBILITY_SCREEN=접근성 +screen.ACCESIBILITY_SCREEN.comment=접근성 옵션 설정 + +screen.CUSTOM_COLORS_SCREEN=커스텀 색상 +screen.CUSTOM_COLORS_SCREEN.comment=커스텀 색상 설정 +screen.CUSTOM_COLORS_DAY=낮 커스텀 색상 +screen.CUSTOM_COLORS_SUNSET=일몰/새벽 커스텀 색상 +screen.CUSTOM_COLORS_NIGHT=밤 커스텀 색상 +screen.CUSTOM_COLORS_WATER=물 커스텀 색상 +screen.CUSTOM_COLORS_NV=야간 투시 커스텀 색상 From c007204a785ec0d6a600b349d3b3498abc6d5c79 Mon Sep 17 00:00:00 2001 From: Seungyeop Lee Date: Mon, 22 Jul 2024 18:43:28 +0900 Subject: [PATCH 002/147] Update ko_KR.lang --- shaders/lang/ko_KR.lang | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 8d792f41..f7c47379 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -123,10 +123,10 @@ value.WATER_TURBULENCE.0.5=높음 option.COLOR_SCHEME=색상 체계 value.COLOR_SCHEME.0=에테르 -value.COLOR_SCHEME.1=새로운 쇼카 (New Shoka) -value.COLOR_SCHEME.2=쇼카 (Shoka) +value.COLOR_SCHEME.1=새로운 쇼카 +value.COLOR_SCHEME.2=쇼카 value.COLOR_SCHEME.3=레거시 -value.COLOR_SCHEME.4=캡틴 (Captain) +value.COLOR_SCHEME.4=캡틴 value.COLOR_SCHEME.5=환각적 value.COLOR_SCHEME.6=코코아 value.COLOR_SCHEME.99=사용자 지정 @@ -204,9 +204,9 @@ option.BLOOM=블룸 option.COLOR_BLINDNESS=색맹 option.COLOR_BLIND_MODE=색맹 유형 -value.COLOR_BLIND_MODE.0=적색맥 (Protanopia) -value.COLOR_BLIND_MODE.1=녹색맹 (Deuteranopia) -value.COLOR_BLIND_MODE.2=청색맹 (Tritanopia) +value.COLOR_BLIND_MODE.0=적색맥 +value.COLOR_BLIND_MODE.1=녹색맹 +value.COLOR_BLIND_MODE.2=청색맹 option.DEBUG_MODE=디버그 모드 From 80e5761327b6dd0afe4b5bc4e61c76f47134e7b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 17 Aug 2024 13:27:17 -0600 Subject: [PATCH 003/147] Version 9.0a --- README.md | 2 +- shaders/common/solid_dh_water_fragment.glsl | 2 +- shaders/lang/en_US.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 70b12e42..df2046ed 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp - Code High performance Minecraft shader (Java). -## Version: 9.0 +## Version: 9.0a ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/common/solid_dh_water_fragment.glsl b/shaders/common/solid_dh_water_fragment.glsl index 12b1c9ed..dbdb368b 100644 --- a/shaders/common/solid_dh_water_fragment.glsl +++ b/shaders/common/solid_dh_water_fragment.glsl @@ -241,7 +241,7 @@ void main() { } else { // Otros translúcidos - block_color *= tint_color; + block_color = tint_color; float shadow_c = abs((light_mix * 2.0) - 1.0); diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 6fa7059b..af955686 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -16,7 +16,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.0 +value.ACERCADE.0=v.9.0a #Options ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index f7c47379..bda697ac 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -16,7 +16,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.0 +value.ACERCADE.0=v.9.0a #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 8ae30399..d1d8c8eb 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -16,7 +16,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.0 +value.ACERCADE.0=v.9.0a #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index dfc2af2e..0496fe46 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -16,7 +16,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.0 +value.ACERCADE.0=v.9.0a #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index fdda2ee2..6a807edb 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -16,7 +16,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.0 +value.ACERCADE.0=v.9.0a #Options ############################# From ba14d9594f78404b8eaa76c4aac0c6c91a61de47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 30 Sep 2024 21:56:34 -0600 Subject: [PATCH 004/147] Version 9.0b --- README.md | 2 +- shaders/block.properties | 2 +- shaders/lang/en_US.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index df2046ed..53b9d0f8 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp - Code High performance Minecraft shader (Java). -## Version: 9.0a +## Version: 9.0b ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/block.properties b/shaders/block.properties index 1e24e8bf..4c89186b 100644 --- a/shaders/block.properties +++ b/shaders/block.properties @@ -21,7 +21,7 @@ block.10032 = sugar_cane tube_coral brain_coral fire_coral bubble_coral horn_coral dead_tube_coral dead_brain_coral dead_fire_coral dead_bubble_coral dead_horn_coral tube_coral_fan brain_coral_fan fire_coral_fan bubble_coral_fan horn_coral_fan dead_tube_coral_fan dead_brain_coral_fan dead_fire_coral_fan dead_bubble_coral_fan dead_horn_coral_fan nether_wart # REFLECTIVE - block.10008 = minecraft:water minecraft:flowing_water subwild:water_puddle + block.10008 = minecraft:water minecraft:flowing_water subwild:water_puddle tfc:fluid/finite_fresh_water tfc:fluid/fresh_water tfc:fluid/finite_salt_water tfc:fluid/salt_water tfc:fluid/finite_river_water tfc:fluid/river_water block.10079 = ice slime_block white_stained_glass orange_stained_glass magenta_stained_glass light_blue_stained_glass yellow_stained_glass lime_stained_glass pink_stained_glass gray_stained_glass light_gray_stained_glass cyan_stained_glass purple_stained_glass blue_stained_glass brown_stained_glass green_stained_glass red_stained_glass black_stained_glass white_stained_glass_pane orange_stained_glass_pane magenta_stained_glass_pane light_blue_stained_glass_pane yellow_stained_glass_pane lime_stained_glass_pane pink_stained_glass_pane gray_stained_glass_pane light_gray_stained_glass_pane cyan_stained_glass_pane purple_stained_glass_pane blue_stained_glass_pane brown_stained_glass_pane green_stained_glass_pane red_stained_glass_pane black_stained_glass_pane tinted_glass # EMMISIVE (LIKE GLOWSTONE) diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index af955686..f082522a 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -16,7 +16,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.0a +value.ACERCADE.0=v.9.0b #Options ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index bda697ac..e842ba2a 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -16,7 +16,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.0a +value.ACERCADE.0=v.9.0b #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index d1d8c8eb..a63e8ac5 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -16,7 +16,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.0a +value.ACERCADE.0=v.9.0b #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 0496fe46..25e77198 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -16,7 +16,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.0a +value.ACERCADE.0=v.9.0b #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 6a807edb..ba177ca3 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -16,7 +16,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.0a +value.ACERCADE.0=v.9.0b #Options ############################# From e50a1276191309b5a140c21df8f7d1c20d299452 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Fri, 4 Oct 2024 23:42:16 -0600 Subject: [PATCH 005/147] Dithers --- shaders/common/composite1_fragment.glsl | 2 +- shaders/common/composite_fragment.glsl | 2 +- shaders/common/deferred_fragment.glsl | 3 +- shaders/common/solid_blocks_fragment.glsl | 2 +- shaders/common/solid_dh_blocks_fragment.glsl | 2 +- shaders/common/solid_dh_water_fragment.glsl | 2 +- shaders/lib/dither.glsl | 134 +++++-------------- shaders/shaders.properties | 46 +++++-- 8 files changed, 73 insertions(+), 120 deletions(-) diff --git a/shaders/common/composite1_fragment.glsl b/shaders/common/composite1_fragment.glsl index e8c25f98..12458084 100644 --- a/shaders/common/composite1_fragment.glsl +++ b/shaders/common/composite1_fragment.glsl @@ -40,7 +40,7 @@ void main() { #if defined BLOOM || defined DOF #if AA_TYPE > 0 - float dither = shifted_eclectic_makeup_dither(gl_FragCoord.xy); + float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); #else float dither = semiblue(gl_FragCoord.xy); #endif diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index d7c9df3f..8e6cf4c3 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -129,7 +129,7 @@ void main() { #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) #if AA_TYPE > 0 - float dither = shifted_eclectic_makeup_dither(gl_FragCoord.xy); + float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); #else float dither = semiblue(gl_FragCoord.xy); #endif diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index 7e8328af..7fb95220 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -108,9 +108,10 @@ void main() { #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) #if AA_TYPE > 0 - float dither = shifted_eclectic_makeup_dither(gl_FragCoord.xy); + float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); #else float dither = semiblue(gl_FragCoord.xy); + // float dither = dither_makeup(gl_FragCoord.xy); #endif #endif diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 4c5190e7..32090c31 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -111,7 +111,7 @@ varying vec3 omni_light; void main() { #if (defined SHADOW_CASTING && !defined NETHER) || defined DISTANT_HORIZONS #if AA_TYPE > 0 - float dither = shifted_makeup_dither(gl_FragCoord.xy); + float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); #else float dither = r_dither(gl_FragCoord.xy); #endif diff --git a/shaders/common/solid_dh_blocks_fragment.glsl b/shaders/common/solid_dh_blocks_fragment.glsl index 606a3c5f..1bdfa64e 100644 --- a/shaders/common/solid_dh_blocks_fragment.glsl +++ b/shaders/common/solid_dh_blocks_fragment.glsl @@ -30,7 +30,7 @@ varying float frog_adjust; void main() { #if AA_TYPE > 0 - float dither = shifted_makeup_dither(gl_FragCoord.xy); + float dither = shifted_r_dither(gl_FragCoord.xy); #else float dither = r_dither(gl_FragCoord.xy); #endif diff --git a/shaders/common/solid_dh_water_fragment.glsl b/shaders/common/solid_dh_water_fragment.glsl index dbdb368b..340d0cb6 100644 --- a/shaders/common/solid_dh_water_fragment.glsl +++ b/shaders/common/solid_dh_water_fragment.glsl @@ -90,7 +90,7 @@ varying float frog_adjust; void main() { #if AA_TYPE > 0 - float dither = shifted_makeup_dither(gl_FragCoord.xy); + float dither = shifted_r_dither(gl_FragCoord.xy); #else float dither = r_dither(gl_FragCoord.xy); #endif diff --git a/shaders/lib/dither.glsl b/shaders/lib/dither.glsl index 4d4cf42e..0b83acbe 100644 --- a/shaders/lib/dither.glsl +++ b/shaders/lib/dither.glsl @@ -30,6 +30,7 @@ but there is no such texture currently. #if MC_VERSION >= 11300 uniform float dither_shift; + uniform vec2 pos_offset; #else uniform int frame_mod; #endif @@ -62,23 +63,10 @@ float r_dither(vec2 frag) { float eclectic_r_dither(vec2 frag) { vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; + float p4 = (fract(state * state * 7142.0) - 0.5) * 0.25; - return fract(p4 + dot(frag, vec2(0.75487766624669276, 0.569840290998))); -} - -float dither_plastic(vec2 frag) -{ - return 2.0 * abs(fract(dot(frag, vec2(0.75487766624669276, 0.569840290998))) - 0.5); -} - -float eclectic_dither_plastic(vec2 frag) -{ - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; - - return fract(p4 + (2.0 * abs(fract(dot(frag, vec2(0.75487766624669276, 0.569840290998))) - 0.5))); + // return fract(p4 + dot(frag, vec2(0.75487766624669276, 0.569840290998))); + return clamp(fract(dot(frag, vec2(0.75487766624669276, 0.569840290998))) + p4, 0.0, 1.0); } float dither13(vec2 pos) @@ -90,23 +78,11 @@ float eclectic_dither13(vec2 pos) { vec2 v = 0.0002314814814814815 * pos + vec2(0.25, 0.0); float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; + float p4 = (fract(state * state * 7142.0) - 0.5) * 0.3; return fract(p4 + dot(pos, vec2(0.3076923076923077, 0.5384615384615384))); } -float dither17(vec2 pos) { - return fract(dot(pos, vec2(0.11764705882352941, 0.4117647058823529))); -} - -float eclectic_dither17(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; - - return fract(p4 + dot(frag, vec2(0.11764705882352941, 0.4117647058823529))); -} - float dither_grad_noise(vec2 frag) { return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag))); } @@ -114,9 +90,9 @@ float dither_grad_noise(vec2 frag) { float eclectic_dither_grad_noise(vec2 frag) { vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; + float p4 = (fract(state * state * 7142.0) - 0.5) * 0.25; - return fract(p4 + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))); + return clamp(fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag))) + p4, 0.0, 1.0); } float texture_noise_64(vec2 p, sampler2D noise) { @@ -131,16 +107,15 @@ float semiblue(vec2 xy) { return fract(dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); } -float makeup_dither(vec2 frag) { - return fract(dot(frag, vec2(0.8085512046226566, 0.5562305898749054))); -} +float dither_makeup(vec2 xy) { + vec2 tile = floor(xy * 0.25); + float flip = mod(tile.x + tile.y, 2.0); + xy = mix(xy, xy.yx, flip); -float eclectic_makeup_dither(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; + float r_dither = fract(dot(xy, vec2(0.75487766624669276, 0.569840290998))); + float plastic = 2.0 * abs(fract(dot(tile, vec2(0.8085512046226566, 0.5562305898749054))) - 0.5); - return fract(p4 + dot(frag, vec2(0.8085512046226566, 0.5562305898749054))); + return fract(r_dither + plastic); } #if MC_VERSION >= 11300 @@ -166,14 +141,9 @@ float eclectic_makeup_dither(vec2 frag) { float shifted_eclectic_r_dither(vec2 frag) { vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; - - return fract(dither_shift + p4 + dot(frag, vec2(0.75487766624669276, 0.569840290998))); - } + float p4 = fract(state * state * 7142.0) * 0.075; - float shifted_dither_plastic(vec2 frag) - { - return fract(dither_shift + (2.0 * abs(fract(dot(frag, vec2(0.75487766624669276, 0.569840290998))) - 0.5))); + return clamp(fract(dot(frag, vec2(0.75487766624669276, 0.569840290998)) + dither_shift) + p4, 0.0, 1.0); } float shifted_dither13(vec2 pos) @@ -181,25 +151,13 @@ float eclectic_makeup_dither(vec2 frag) { return fract(dither_shift + dot(pos, vec2(0.3076923076923077, 0.5384615384615384))); } - float shifted_dither17(vec2 frag) { - return fract(dither_shift + dot(frag, vec2(0.5882352941176471, 0.8823529411764706))); - } - float shifted_eclectic_dither13(vec2 pos) { vec2 v = 0.0002314814814814815 * pos + vec2(0.25, 0.0); float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; + float p4 = fract(state * state * 7142.0) * 0.075; - return fract(dither_shift + p4 + dot(pos, vec2(0.3076923076923077, 0.5384615384615384))); - } - - float shifted_eclectic_dither17(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; - - return fract(dither_shift + p4 + dot(frag, vec2(0.11764705882352941, 0.4117647058823529))); + return clamp(fract(dot(frag, vec2(0.3076923076923077, 0.5384615384615384)) + dither_shift) + p4, 0.0, 1.0); } float shifted_dither_grad_noise(vec2 frag) { @@ -209,9 +167,9 @@ float eclectic_makeup_dither(vec2 frag) { float shifted_eclectic_dither_grad_noise(vec2 frag) { vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; + float p4 = fract(state * state * 7142.0) * 0.075; - return fract(dither_shift + p4 + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))); + return clamp(fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)) + dither_shift) + p4, 0.0, 1.0); } float shifted_texture_noise_64(vec2 p, sampler2D noise) { @@ -227,16 +185,15 @@ float eclectic_makeup_dither(vec2 frag) { return fract(dither_shift + dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); } - float shifted_makeup_dither(vec2 frag) { - return fract(dither_shift + dot(frag, vec2(0.8085512046226566, 0.5562305898749054))); - } + float shifted_dither_makeup(vec2 xy) { + vec2 tile = floor(xy * 0.25); + float flip = mod(tile.x + tile.y, 2.0); + xy = mix(xy, xy.yx, flip); - float shifted_eclectic_makeup_dither(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; + float r_dither = fract(dot(xy, vec2(0.75487766624669276, 0.569840290998))); + float plastic = 2.0 * abs(fract(dot(tile, vec2(0.8085512046226566, 0.5562305898749054))) - 0.5); - return fract(dither_shift + p4 + dot(frag, vec2(0.8085512046226566, 0.5562305898749054))); + return fract(dither_shift + r_dither + plastic); } #else @@ -262,14 +219,9 @@ float eclectic_makeup_dither(vec2 frag) { float shifted_eclectic_r_dither(vec2 frag) { vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; + float p4 = fract(state * state * 7142.0) * 0.075; - return fract((frame_mod * 0.4) + p4 + dot(frag, vec2(0.75487766624669276, 0.569840290998))); - } - - float shifted_dither_plastic(vec2 frag) - { - return fract((frame_mod * 0.4) + (2.0 * abs(fract(dot(frag, vec2(0.75487766624669276, 0.569840290998))) - 0.5))); + return clamp(fract(dot(frag, vec2(0.75487766624669276, 0.569840290998)) + (frame_mod * 0.4)) + p4, 0.0, 1.0); } float shifted_dither13(vec2 pos) @@ -277,18 +229,6 @@ float eclectic_makeup_dither(vec2 frag) { return fract((frame_mod * 0.4) + dot(pos, vec2(0.3076923076923077, 0.5384615384615384))); } - float shifted_dither17(vec2 frag) { - return fract((frame_mod * 0.4) + dot(frag, vec2(0.5882352941176471, 0.8823529411764706))); - } - - float shifted_eclectic_dither17(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; - - return fract((frame_mod * 0.4) + p4 + dot(frag, vec2(0.11764705882352941, 0.4117647058823529))); - } - float shifted_dither_grad_noise(vec2 frag) { return fract((frame_mod * 0.4) + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))); } @@ -296,9 +236,9 @@ float eclectic_makeup_dither(vec2 frag) { float shifted_eclectic_dither_grad_noise(vec2 frag) { vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; + float p4 = fract(state * state * 7142.0) * 0.075; - return fract((frame_mod * 0.4) + p4 + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))); + return clamp(fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)) + (frame_mod * 0.4)) + p4, 0.0, 1.0); } float shifted_texture_noise_64(vec2 p, sampler2D noise) { @@ -314,16 +254,4 @@ float eclectic_makeup_dither(vec2 frag) { return fract((frame_mod * 0.4) + dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); } - float shifted_makeup_dither(vec2 frag) { - return fract((frame_mod * 0.4) + dot(frag, vec2(0.8085512046226566, 0.5562305898749054))); - } - - float shifted_eclectic_makeup_dither(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; - - return fract((frame_mod * 0.4) + p4 + dot(frag, vec2(0.8085512046226566, 0.5562305898749054))); - } - #endif diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 254fd4fd..89ec9b70 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -143,7 +143,7 @@ uniform.int.frame_mod = fmod(frameCounter, 10) # as much as possible from one to the next. It helps to make the flickering of the image # so fast that it is "absorbed" and better masked by the TAA history. -#if AA_TYPE > 0 +#if AA_TYPE > -1 # Pentagon uniform.vec2.taa_offset = vec2((if( \ frame_mod == 0, 0.7071067811865476, \ @@ -180,17 +180,41 @@ uniform.int.frame_mod = fmod(frameCounter, 10) # of Minecraft/Optifine. For older versions, a mechanism that depends on the # uniform "frame_mod" is used to calculate the increment. uniform.float.dither_shift = if( \ - frame_mod == 0, 0.0, \ - frame_mod == 1, 0.3264030514570224, \ - frame_mod == 2, 0.5978843761620217, \ - frame_mod == 3, 0.881799481995884, \ - frame_mod == 4, 0.22336905198854695, \ - frame_mod == 5, 0.5245207896967208, \ - frame_mod == 6, 0.7563679947882336, \ - frame_mod == 7, 0.08526513298080163, \ - frame_mod == 8, 0.39176966992085394, \ - frame_mod == 9, 0.6919630956391005, \ + frame_mod == 1, 0.1, \ + frame_mod == 2, 0.2, \ + frame_mod == 3, 0.3, \ + frame_mod == 4, 0.4, \ + frame_mod == 5, 0.5, \ + frame_mod == 6, 0.6, \ + frame_mod == 7, 0.7, \ + frame_mod == 8, 0.8, \ + frame_mod == 9, 0.9, \ 0.0) + + uniform.vec2.pos_offset = vec2((if( \ + frame_mod == 0, 0.0, \ + frame_mod == 1, -1.0, \ + frame_mod == 2, 0.0, \ + frame_mod == 3, 2.0, \ + frame_mod == 4, 3.0, \ + frame_mod == 5, 4.0, \ + frame_mod == 6, 0.0, \ + frame_mod == 7, -5.0, \ + frame_mod == 8, -6.0, \ + frame_mod == 9, 0.0, \ + 0.0)), \ + (if( \ + frame_mod == 0, 0.0, \ + frame_mod == 1, 1.0, \ + frame_mod == 2, 2.0, \ + frame_mod == 3, 3.0, \ + frame_mod == 4, 0.0, \ + frame_mod == 5, -4.0, \ + frame_mod == 6, -5.0, \ + frame_mod == 7, -6.0, \ + frame_mod == 8, 0.0, \ + frame_mod == 9, 0.0, \ + 0.0))) #endif # FOV - A precalculated value related to FOV From 08a4192f8f7be4a415ec2ba4753b6e22037fbd42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 5 Oct 2024 15:54:47 -0600 Subject: [PATCH 006/147] Debug --- shaders/block.properties | 2 +- shaders/common/deferred_fragment.glsl | 3 +- shaders/item.properties | 2 +- shaders/lib/color_utils.glsl | 60 +++++++++++++++++++++++++++ shaders/lib/dither.glsl | 47 ++++++++++++--------- shaders/shaders.properties | 46 +++++--------------- 6 files changed, 102 insertions(+), 58 deletions(-) diff --git a/shaders/block.properties b/shaders/block.properties index 4c89186b..d831ab79 100644 --- a/shaders/block.properties +++ b/shaders/block.properties @@ -15,7 +15,7 @@ block.10176 = minecraft:pitcher_plant:half=upper minecraft:sunflower:half=upper minecraft:lilac:half=upper minecraft:tall_grass:half=upper minecraft:large_fern:half=upper minecraft:rose_bush:half=upper minecraft:peony:half=upper minecraft:tall_seagrass:half=upper atmospheric:water_hyacinth:half=upper atmospheric:tall_yucca_flower:half=upper environmental:tall_cattail:half=upper environmental:pink_delphinium:half=upper environmental:blue_delphinium:half=upper environmental:purple_delphinium:half=upper environmental:white_delphinium:half=upper environmental:bird_of_paradise:half=upper environmental:giant_tall_grass:half=upper farmersdelight:wild_rice:half=upper upgrade_aquatic:flowering_rush:half=upper upgrade_aquatic:tall_beachgrass:half=upper upgrade_aquatic:tall_blue_pickerelweed:half=upper upgrade_aquatic:tall_purple_pickerelweed:half=upper biomesoplenty:barley:half=upper biomesoplenty:goldenrod:half=upper biomesoplenty:blue_hydrangea:half=upper biomesoplenty:watergrass:half=upper botania:white_double_flower:half=upper botania:orange_double_flower:half=upper botania:magenta_double_flower:half=upper botania:light_blue_double_flower:half=upper botania:yellow_double_flower:half=upper botania:lime_double_flower:half=upper botania:pink_double_flower:half=upper botania:gray_double_flower:half=upper botania:light_gray_double_flower:half=upper botania:cyan_double_flower:half=upper botania:purple_double_flower:half=upper botania:blue_double_flower:half=upper botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=upper biomesoplenty:reed:half=upper biomesoplenty:cattail:half=upper byg:tall_crimson_roots:half=upper byg:tall_ether_grass:half=upper byg:reeds:half=upper byg:tall_prairie_grass:half=upper byg:tall_allium:half=upper byg:azalea:half=upper byg:tall_pink_allium:half=upper moreflowerbushes:purple_hibiscus:half=upper moreflowerbushes:mountain_laurel:half=upper moreflowerbushes:larkspur:half=upper moreflowerbushes:golden_shower:half=upper moreflowerbushes:fuchsia:half=upper moreflowerbushes:butterfly_weed:half=upper moreflowerbushes:blue_sage:half=upper moreflowerbushes:blue_hortensia:half=upper byg:japanese_orchid:half=upper byg:delphinium:half=upper byg:foxglove:half=upper cutecore:pink_rosebush:half=upper cutecore:white_rosebush:half=upper cutecore:pink_hydrangeas:half=upper cutecore:blue_hydrangeas:half=upper cutecore:purple_hydrangeas:half=upper # LEAVES - block.10018 = minecraft:cherry_leaves minecraft:oak_leaves minecraft:spruce_leaves minecraft:birch_leaves minecraft:jungle_leaves minecraft:acacia_leaves minecraft:dark_oak_leaves minecraft:azalea_leaves minecraft:azalea_leaves_flowers minecraft:flowering_azalea_leaves minecraft:mangrove_leaves biomesoplenty:origin_leaves biomesoplenty:flowering_oak_leaves biomesoplenty:rainbow_birch_leaves biomesoplenty:yellow_autumn_leaves biomesoplenty:orange_autumn_leaves biomesoplenty:maple_leaves biomesoplenty:fir_leaves biomesoplenty:redwood_leaves biomesoplenty:mahogany_leaves biomesoplenty:palm_leaves biomesoplenty:willow_leaves biomesoplenty:dead_leaves biomesoplenty:magic_leaves biomesoplenty:umbran_leaves biomesoplenty:hellbark_leaves biomesoplenty:pink_cherry_leaves biomesoplenty:white_cherry_leaves biomesoplenty:jacaranda_leaves quark:blue_blossom_leaves quark:lavender_blossom_leaves quark:orange_blossom_leaves quark:pink_blossom_leaves quark:yellow_blossom_leaves atmospheric:rosewood_leaves atmospheric:morado_leaves atmospheric:flowering_morado_leaves atmospheric:yucca_leaves atmospheric:kousa_leaves atmospheric:aspen_leaves atmospheric:grimwood_leaves autumnity:red_maple_leaves autumnity:orange_maple_leaves autumnity:yellow_maple_leaves autumnity:maple_leaves environmental:willow_leaves environmental:cherry_leaves environmental:pink_wisteria_leaves environmental:blue_wisteria_leaves environmental:purple_wisteria_leaves environmental:white_wisteria_leaves environmental:pink_hanging_wisteria_leaves environmental:blue_hanging_wisteria_leaves environmental:purple_hanging_wisteria_leaves environmental:white_hanging_wisteria_leaves environmental:hanging_willow_leaves upgrade_aquatic:river_leaves byg:aspen_leaves byg:araucaria_leaves byg:baobab_leaves byg:blooming_witch_hazel_leaves byg:blue_enchanted_leaves byg:blue_spruce_leaves byg:brown_birch_leaves byg:brown_oak_leaves byg:brown_zelkova_leaves byg:cika_leaves byg:cypress_leaves byg:ebony_leaves byg:fir_leaves byg:flowering_orchard_leaves byg:flowering_nightshade_leaves byg:flowering_palo_verde_leaves byg:green_apple_skyris_leaves byg:green_enchanted_leaves byg:holly_berry_leaves byg:holly_leaves byg:indigo_jacaranda_leaves byg:jacaranda_leaves byg:joshua_leaves byg:mahogany_leaves byg:mangrove_leaves byg:maple_leaves byg:orange_birch_leaves byg:orange_oak_leaves byg:orange_spruce_leaves byg:orchard_leaves byg:palo_verde_leaves byg:pine_leaves byg:pink_cherry_leaves byg:rainbow_eucalyptus_leaves byg:red_birch_leaves byg:red_maple_leaves byg:red_oak_leaves byg:red_spruce_leaves byg:redwood_leaves byg:ripe_joshua_leaves byg:ripe_orchard_leaves byg:silver_maple_leaves byg:skyris_leaves byg:white_cherry_leaves byg:willow_leaves byg:witch_hazel_leaves byg:yellow_birch_leaves byg:yellow_spruce_leaves byg:zelkova_leaves ecotones:hazel_leaves sakurarosea:alt_sakura_leaves sakurarosea:sakura_leaves sakurarosea:white_sakura_leaves terrestria:cypress_leaves terrestria:dark_japanese_maple_leaves terrestria:hemlock_leaves terrestria:japanese_maple_leaves terrestria:japanese_maple_shrub_leaves terrestria:jungle_palm_leaves terrestria:rainbow_eucalyptus_leaves terrestria:redwood_leaves terrestria:rubber_leaves terrestria:sakura_leaves terrestria:willow_leaves terrestria:yucca_palm_leaves traverse:brown_autumnal_leaves traverse:fir_leaves traverse:orange_autumnal_leaves traverse:red_autumnal_leaves traverse:yellow_autumnal_leaves vanillaenhanced:redwood_leaves wild_explorer:autumn_oak_leaves wild_explorer:autumn_birch_leaves wild_explorer:pink_cherry_oak_leaves wild_explorer:white_cherry_oak_leaves wild_explorer:palm_leaves cutecore:cherry_wood_leaves cutecore:cherry_wood_leaves_fruit cutecore:wisteria_leaves cutecore:lemon_leaves cutecore:lemon_leaves_fruiting dynamictrees:jungle_leaves dynamictrees:oak_leaves dynamictrees:spruce_leaves dynamictrees:dark_oak_leaves dynamictrees:acacia_leaves dynamictrees:birch_leaves simplefarming:apple_leaves simplefarming:apricot_leaves simplefarming:banana_leaves simplefarming:cherry_leaves simplefarming:mango_leaves simplefarming:olive_leaves simplefarming:orange_leaves simplefarming:pear_leaves simplefarming:plum_leaves mythicbotany:dreamwood_leaves undergarden:smogstem_leaves undergarden:wigglewood_leaves occultism:otherworld_leaves occultism:otherworld_leaves_natural integrateddynamics:menril_leaves extlights:xmas_leaves extlights:xmas_leaves_bulb extlights:xmas_leaves_bulb_red extlights:xmas_leaves_bulb_green extlights:xmas_leaves_bulb_blue extlights:xmas_leaves_bulb_blinking_redgreen extlights:xmas_leaves_bulb_blinking_redblue extlights:xmas_leaves_bulb_blinking_greenblue extlights:xmas_leaves_bulb_blinking_rgb extlights:xmas_leaves_bulb_smooth_redgreen extlights:xmas_leaves_bulb_smooth_redblue extlights:xmas_leaves_bulb_smooth_greenblue extlights:xmas_leaves_bulb_smooth_rgb techreborn:rubber_leaves blockus:legacy_leaves blockus:white_oak_leaves architects_palette:twisted_leaves twilightforest:twilight_oak_leaves twilightforest:canopy_leaves twilightforest:mangrove_leaves twilightforest:dark_leaves twilightforest:time_leaves twilightforest:transformation_leaves twilightforest:mining_leaves twilightforest:sorting_leaves twilightforest:giant_leaves twilightforest:thorn_leaves + block.10018 = minecraft:cherry_leaves minecraft:oak_leaves minecraft:spruce_leaves minecraft:birch_leaves minecraft:jungle_leaves minecraft:acacia_leaves minecraft:dark_oak_leaves minecraft:pale_oak_leaves minecraft:azalea_leaves minecraft:azalea_leaves_flowers minecraft:flowering_azalea_leaves minecraft:mangrove_leaves biomesoplenty:origin_leaves biomesoplenty:flowering_oak_leaves biomesoplenty:rainbow_birch_leaves biomesoplenty:yellow_autumn_leaves biomesoplenty:orange_autumn_leaves biomesoplenty:maple_leaves biomesoplenty:fir_leaves biomesoplenty:redwood_leaves biomesoplenty:mahogany_leaves biomesoplenty:palm_leaves biomesoplenty:willow_leaves biomesoplenty:dead_leaves biomesoplenty:magic_leaves biomesoplenty:umbran_leaves biomesoplenty:hellbark_leaves biomesoplenty:pink_cherry_leaves biomesoplenty:white_cherry_leaves biomesoplenty:jacaranda_leaves quark:blue_blossom_leaves quark:lavender_blossom_leaves quark:orange_blossom_leaves quark:pink_blossom_leaves quark:yellow_blossom_leaves atmospheric:rosewood_leaves atmospheric:morado_leaves atmospheric:flowering_morado_leaves atmospheric:yucca_leaves atmospheric:kousa_leaves atmospheric:aspen_leaves atmospheric:grimwood_leaves autumnity:red_maple_leaves autumnity:orange_maple_leaves autumnity:yellow_maple_leaves autumnity:maple_leaves environmental:willow_leaves environmental:cherry_leaves environmental:pink_wisteria_leaves environmental:blue_wisteria_leaves environmental:purple_wisteria_leaves environmental:white_wisteria_leaves environmental:pink_hanging_wisteria_leaves environmental:blue_hanging_wisteria_leaves environmental:purple_hanging_wisteria_leaves environmental:white_hanging_wisteria_leaves environmental:hanging_willow_leaves upgrade_aquatic:river_leaves byg:aspen_leaves byg:araucaria_leaves byg:baobab_leaves byg:blooming_witch_hazel_leaves byg:blue_enchanted_leaves byg:blue_spruce_leaves byg:brown_birch_leaves byg:brown_oak_leaves byg:brown_zelkova_leaves byg:cika_leaves byg:cypress_leaves byg:ebony_leaves byg:fir_leaves byg:flowering_orchard_leaves byg:flowering_nightshade_leaves byg:flowering_palo_verde_leaves byg:green_apple_skyris_leaves byg:green_enchanted_leaves byg:holly_berry_leaves byg:holly_leaves byg:indigo_jacaranda_leaves byg:jacaranda_leaves byg:joshua_leaves byg:mahogany_leaves byg:mangrove_leaves byg:maple_leaves byg:orange_birch_leaves byg:orange_oak_leaves byg:orange_spruce_leaves byg:orchard_leaves byg:palo_verde_leaves byg:pine_leaves byg:pink_cherry_leaves byg:rainbow_eucalyptus_leaves byg:red_birch_leaves byg:red_maple_leaves byg:red_oak_leaves byg:red_spruce_leaves byg:redwood_leaves byg:ripe_joshua_leaves byg:ripe_orchard_leaves byg:silver_maple_leaves byg:skyris_leaves byg:white_cherry_leaves byg:willow_leaves byg:witch_hazel_leaves byg:yellow_birch_leaves byg:yellow_spruce_leaves byg:zelkova_leaves ecotones:hazel_leaves sakurarosea:alt_sakura_leaves sakurarosea:sakura_leaves sakurarosea:white_sakura_leaves terrestria:cypress_leaves terrestria:dark_japanese_maple_leaves terrestria:hemlock_leaves terrestria:japanese_maple_leaves terrestria:japanese_maple_shrub_leaves terrestria:jungle_palm_leaves terrestria:rainbow_eucalyptus_leaves terrestria:redwood_leaves terrestria:rubber_leaves terrestria:sakura_leaves terrestria:willow_leaves terrestria:yucca_palm_leaves traverse:brown_autumnal_leaves traverse:fir_leaves traverse:orange_autumnal_leaves traverse:red_autumnal_leaves traverse:yellow_autumnal_leaves vanillaenhanced:redwood_leaves wild_explorer:autumn_oak_leaves wild_explorer:autumn_birch_leaves wild_explorer:pink_cherry_oak_leaves wild_explorer:white_cherry_oak_leaves wild_explorer:palm_leaves cutecore:cherry_wood_leaves cutecore:cherry_wood_leaves_fruit cutecore:wisteria_leaves cutecore:lemon_leaves cutecore:lemon_leaves_fruiting dynamictrees:jungle_leaves dynamictrees:oak_leaves dynamictrees:spruce_leaves dynamictrees:dark_oak_leaves dynamictrees:acacia_leaves dynamictrees:birch_leaves simplefarming:apple_leaves simplefarming:apricot_leaves simplefarming:banana_leaves simplefarming:cherry_leaves simplefarming:mango_leaves simplefarming:olive_leaves simplefarming:orange_leaves simplefarming:pear_leaves simplefarming:plum_leaves mythicbotany:dreamwood_leaves undergarden:smogstem_leaves undergarden:wigglewood_leaves occultism:otherworld_leaves occultism:otherworld_leaves_natural integrateddynamics:menril_leaves extlights:xmas_leaves extlights:xmas_leaves_bulb extlights:xmas_leaves_bulb_red extlights:xmas_leaves_bulb_green extlights:xmas_leaves_bulb_blue extlights:xmas_leaves_bulb_blinking_redgreen extlights:xmas_leaves_bulb_blinking_redblue extlights:xmas_leaves_bulb_blinking_greenblue extlights:xmas_leaves_bulb_blinking_rgb extlights:xmas_leaves_bulb_smooth_redgreen extlights:xmas_leaves_bulb_smooth_redblue extlights:xmas_leaves_bulb_smooth_greenblue extlights:xmas_leaves_bulb_smooth_rgb techreborn:rubber_leaves blockus:legacy_leaves blockus:white_oak_leaves architects_palette:twisted_leaves twilightforest:twilight_oak_leaves twilightforest:canopy_leaves twilightforest:mangrove_leaves twilightforest:dark_leaves twilightforest:time_leaves twilightforest:transformation_leaves twilightforest:mining_leaves twilightforest:sorting_leaves twilightforest:giant_leaves twilightforest:thorn_leaves # NO-WAVEABLE SMALL ELEMENTS block.10032 = sugar_cane tube_coral brain_coral fire_coral bubble_coral horn_coral dead_tube_coral dead_brain_coral dead_fire_coral dead_bubble_coral dead_horn_coral tube_coral_fan brain_coral_fan fire_coral_fan bubble_coral_fan horn_coral_fan dead_tube_coral_fan dead_brain_coral_fan dead_fire_coral_fan dead_bubble_coral_fan dead_horn_coral_fan nether_wart diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index 7fb95220..7e58719e 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -108,10 +108,9 @@ void main() { #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) #if AA_TYPE > 0 - float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); + float dither = shifted_hash12(gl_FragCoord.xy); #else float dither = semiblue(gl_FragCoord.xy); - // float dither = dither_makeup(gl_FragCoord.xy); #endif #endif diff --git a/shaders/item.properties b/shaders/item.properties index 87041215..c81a5a7a 100644 --- a/shaders/item.properties +++ b/shaders/item.properties @@ -1,5 +1,5 @@ # Normal light -item.11001=minecraft:glowstone minecraft:sea_lantern minecraft:shroomlight minecraft:jack_o_lantern minecraft:beacon minecraft:end_rod minecraft:lantern minecraft:soul_lantern minecraft:torch minecraft:soul_torch minecraft:campfire minecraft:soul_campfire minecraft:lava_bucket +item.11001=minecraft:glowstone minecraft:sea_lantern minecraft:shroomlight minecraft:jack_o_lantern minecraft:beacon minecraft:end_rod minecraft:lantern minecraft:soul_lantern minecraft:torch minecraft:soul_torch minecraft:campfire minecraft:soul_campfire minecraft:lava_bucket additionallanterns:andesite_chain additionallanterns:andesite_lantern additionallanterns:basalt_chain additionallanterns:basalt_lantern additionallanterns:black_andesite_lantern additionallanterns:black_basalt_lantern additionallanterns:black_blackstone_lantern additionallanterns:black_bone_lantern additionallanterns:black_bricks_lantern additionallanterns:black_cobblestone_lantern additionallanterns:black_crimson_lantern additionallanterns:black_dark_prismarine_lantern additionallanterns:black_diamond_lantern additionallanterns:black_diorite_lantern additionallanterns:black_emerald_lantern additionallanterns:black_end_stone_lantern additionallanterns:black_gold_lantern additionallanterns:black_granite_lantern additionallanterns:black_iron_lantern additionallanterns:black_mossy_cobblestone_lantern additionallanterns:black_netherite_lantern additionallanterns:black_normal_lantern additionallanterns:black_normal_nether_bricks_lantern additionallanterns:black_normal_sandstone_lantern additionallanterns:black_obsidian_lantern additionallanterns:black_prismarine_lantern additionallanterns:black_purpur_lantern additionallanterns:black_quartz_lantern additionallanterns:black_red_nether_bricks_lantern additionallanterns:black_red_sandstone_lantern additionallanterns:black_smooth_stone_lantern additionallanterns:black_stone_bricks_lantern additionallanterns:black_stone_lantern additionallanterns:black_warped_lantern additionallanterns:blackstone_chain additionallanterns:blackstone_lantern additionallanterns:blue_andesite_lantern additionallanterns:blue_basalt_lantern additionallanterns:blue_blackstone_lantern additionallanterns:blue_bone_lantern additionallanterns:blue_bricks_lantern additionallanterns:blue_cobblestone_lantern additionallanterns:blue_crimson_lantern additionallanterns:blue_dark_prismarine_lantern additionallanterns:blue_diamond_lantern additionallanterns:blue_diorite_lantern additionallanterns:blue_emerald_lantern additionallanterns:blue_end_stone_lantern additionallanterns:blue_gold_lantern additionallanterns:blue_granite_lantern additionallanterns:blue_iron_lantern additionallanterns:blue_mossy_cobblestone_lantern additionallanterns:blue_netherite_lantern additionallanterns:blue_normal_lantern additionallanterns:blue_normal_nether_bricks_lantern additionallanterns:blue_normal_sandstone_lantern additionallanterns:blue_obsidian_lantern additionallanterns:blue_prismarine_lantern additionallanterns:blue_purpur_lantern additionallanterns:blue_quartz_lantern additionallanterns:blue_red_nether_bricks_lantern additionallanterns:blue_red_sandstone_lantern additionallanterns:blue_smooth_stone_lantern additionallanterns:blue_stone_bricks_lantern additionallanterns:blue_stone_lantern additionallanterns:blue_warped_lantern additionallanterns:bone_chain additionallanterns:bone_lantern additionallanterns:bricks_chain additionallanterns:bricks_lantern additionallanterns:brown_andesite_lantern additionallanterns:brown_basalt_lantern additionallanterns:brown_blackstone_lantern additionallanterns:brown_bone_lantern additionallanterns:brown_bricks_lantern additionallanterns:brown_cobblestone_lantern additionallanterns:brown_crimson_lantern additionallanterns:brown_dark_prismarine_lantern additionallanterns:brown_diamond_lantern additionallanterns:brown_diorite_lantern additionallanterns:brown_emerald_lantern additionallanterns:brown_end_stone_lantern additionallanterns:brown_gold_lantern additionallanterns:brown_granite_lantern additionallanterns:brown_iron_lantern additionallanterns:brown_mossy_cobblestone_lantern additionallanterns:brown_netherite_lantern additionallanterns:brown_normal_lantern additionallanterns:brown_normal_nether_bricks_lantern additionallanterns:brown_normal_sandstone_lantern additionallanterns:brown_obsidian_lantern additionallanterns:brown_prismarine_lantern additionallanterns:brown_purpur_lantern additionallanterns:brown_quartz_lantern additionallanterns:brown_red_nether_bricks_lantern additionallanterns:brown_red_sandstone_lantern additionallanterns:brown_smooth_stone_lantern additionallanterns:brown_stone_bricks_lantern additionallanterns:brown_stone_lantern additionallanterns:brown_warped_lantern additionallanterns:cobblestone_chain additionallanterns:cobblestone_lantern additionallanterns:crimson_chain additionallanterns:crimson_lantern additionallanterns:cyan_andesite_lantern additionallanterns:cyan_basalt_lantern additionallanterns:cyan_blackstone_lantern additionallanterns:cyan_bone_lantern additionallanterns:cyan_bricks_lantern additionallanterns:cyan_cobblestone_lantern additionallanterns:cyan_crimson_lantern additionallanterns:cyan_dark_prismarine_lantern additionallanterns:cyan_diamond_lantern additionallanterns:cyan_diorite_lantern additionallanterns:cyan_emerald_lantern additionallanterns:cyan_end_stone_lantern additionallanterns:cyan_gold_lantern additionallanterns:cyan_granite_lantern additionallanterns:cyan_iron_lantern additionallanterns:cyan_mossy_cobblestone_lantern additionallanterns:cyan_netherite_lantern additionallanterns:cyan_normal_lantern additionallanterns:cyan_normal_nether_bricks_lantern additionallanterns:cyan_normal_sandstone_lantern additionallanterns:cyan_obsidian_lantern additionallanterns:cyan_prismarine_lantern additionallanterns:cyan_purpur_lantern additionallanterns:cyan_quartz_lantern additionallanterns:cyan_red_nether_bricks_lantern additionallanterns:cyan_red_sandstone_lantern additionallanterns:cyan_smooth_stone_lantern additionallanterns:cyan_stone_bricks_lantern additionallanterns:cyan_stone_lantern additionallanterns:cyan_warped_lantern additionallanterns:dark_prismarine_chain additionallanterns:dark_prismarine_lantern additionallanterns:diamond_chain additionallanterns:diamond_lantern additionallanterns:diorite_chain additionallanterns:diorite_lantern additionallanterns:emerald_chain additionallanterns:emerald_lantern additionallanterns:end_stone_chain additionallanterns:end_stone_lantern additionallanterns:gold_chain additionallanterns:gold_lantern additionallanterns:granite_chain additionallanterns:granite_lantern additionallanterns:gray_andesite_lantern additionallanterns:gray_basalt_lantern additionallanterns:gray_blackstone_lantern additionallanterns:gray_bone_lantern additionallanterns:gray_bricks_lantern additionallanterns:gray_cobblestone_lantern additionallanterns:gray_crimson_lantern additionallanterns:gray_dark_prismarine_lantern additionallanterns:gray_diamond_lantern additionallanterns:gray_diorite_lantern additionallanterns:gray_emerald_lantern additionallanterns:gray_end_stone_lantern additionallanterns:gray_gold_lantern additionallanterns:gray_granite_lantern additionallanterns:gray_iron_lantern additionallanterns:gray_mossy_cobblestone_lantern additionallanterns:gray_netherite_lantern additionallanterns:gray_normal_lantern additionallanterns:gray_normal_nether_bricks_lantern additionallanterns:gray_normal_sandstone_lantern additionallanterns:gray_obsidian_lantern additionallanterns:gray_prismarine_lantern additionallanterns:gray_purpur_lantern additionallanterns:gray_quartz_lantern additionallanterns:gray_red_nether_bricks_lantern additionallanterns:gray_red_sandstone_lantern additionallanterns:gray_smooth_stone_lantern additionallanterns:gray_stone_bricks_lantern additionallanterns:gray_stone_lantern additionallanterns:gray_warped_lantern additionallanterns:green_andesite_lantern additionallanterns:green_basalt_lantern additionallanterns:green_blackstone_lantern additionallanterns:green_bone_lantern additionallanterns:green_bricks_lantern additionallanterns:green_cobblestone_lantern additionallanterns:green_crimson_lantern additionallanterns:green_dark_prismarine_lantern additionallanterns:green_diamond_lantern additionallanterns:green_diorite_lantern additionallanterns:green_emerald_lantern additionallanterns:green_end_stone_lantern additionallanterns:green_gold_lantern additionallanterns:green_granite_lantern additionallanterns:green_iron_lantern additionallanterns:green_mossy_cobblestone_lantern additionallanterns:green_netherite_lantern additionallanterns:green_normal_lantern additionallanterns:green_normal_nether_bricks_lantern additionallanterns:green_normal_sandstone_lantern additionallanterns:green_obsidian_lantern additionallanterns:green_prismarine_lantern additionallanterns:green_purpur_lantern additionallanterns:green_quartz_lantern additionallanterns:green_red_nether_bricks_lantern additionallanterns:green_red_sandstone_lantern additionallanterns:green_smooth_stone_lantern additionallanterns:green_stone_bricks_lantern additionallanterns:green_stone_lantern additionallanterns:green_warped_lantern additionallanterns:iron_lantern additionallanterns:light_blue_andesite_lantern additionallanterns:light_blue_basalt_lantern additionallanterns:light_blue_blackstone_lantern additionallanterns:light_blue_bone_lantern additionallanterns:light_blue_bricks_lantern additionallanterns:light_blue_cobblestone_lantern additionallanterns:light_blue_crimson_lantern additionallanterns:light_blue_dark_prismarine_lantern additionallanterns:light_blue_diamond_lantern additionallanterns:light_blue_diorite_lantern additionallanterns:light_blue_emerald_lantern additionallanterns:light_blue_end_stone_lantern additionallanterns:light_blue_gold_lantern additionallanterns:light_blue_granite_lantern additionallanterns:light_blue_iron_lantern additionallanterns:light_blue_mossy_cobblestone_lantern additionallanterns:light_blue_netherite_lantern additionallanterns:light_blue_normal_lantern additionallanterns:light_blue_normal_nether_bricks_lantern additionallanterns:light_blue_normal_sandstone_lantern additionallanterns:light_blue_obsidian_lantern additionallanterns:light_blue_prismarine_lantern additionallanterns:light_blue_purpur_lantern additionallanterns:light_blue_quartz_lantern additionallanterns:light_blue_red_nether_bricks_lantern additionallanterns:light_blue_red_sandstone_lantern additionallanterns:light_blue_smooth_stone_lantern additionallanterns:light_blue_stone_bricks_lantern additionallanterns:light_blue_stone_lantern additionallanterns:light_blue_warped_lantern additionallanterns:light_gray_andesite_lantern additionallanterns:light_gray_basalt_lantern additionallanterns:light_gray_blackstone_lantern additionallanterns:light_gray_bone_lantern additionallanterns:light_gray_bricks_lantern additionallanterns:light_gray_cobblestone_lantern additionallanterns:light_gray_crimson_lantern additionallanterns:light_gray_dark_prismarine_lantern additionallanterns:light_gray_diamond_lantern additionallanterns:light_gray_diorite_lantern additionallanterns:light_gray_emerald_lantern additionallanterns:light_gray_end_stone_lantern additionallanterns:light_gray_gold_lantern additionallanterns:light_gray_granite_lantern additionallanterns:light_gray_iron_lantern additionallanterns:light_gray_mossy_cobblestone_lantern additionallanterns:light_gray_netherite_lantern additionallanterns:light_gray_normal_lantern additionallanterns:light_gray_normal_nether_bricks_lantern additionallanterns:light_gray_normal_sandstone_lantern additionallanterns:light_gray_obsidian_lantern additionallanterns:light_gray_prismarine_lantern additionallanterns:light_gray_purpur_lantern additionallanterns:light_gray_quartz_lantern additionallanterns:light_gray_red_nether_bricks_lantern additionallanterns:light_gray_red_sandstone_lantern additionallanterns:light_gray_smooth_stone_lantern additionallanterns:light_gray_stone_bricks_lantern additionallanterns:light_gray_stone_lantern additionallanterns:light_gray_warped_lantern additionallanterns:lime_andesite_lantern additionallanterns:lime_basalt_lantern additionallanterns:lime_blackstone_lantern additionallanterns:lime_bone_lantern additionallanterns:lime_bricks_lantern additionallanterns:lime_cobblestone_lantern additionallanterns:lime_crimson_lantern additionallanterns:lime_dark_prismarine_lantern additionallanterns:lime_diamond_lantern additionallanterns:lime_diorite_lantern additionallanterns:lime_emerald_lantern additionallanterns:lime_end_stone_lantern additionallanterns:lime_gold_lantern additionallanterns:lime_granite_lantern additionallanterns:lime_iron_lantern additionallanterns:lime_mossy_cobblestone_lantern additionallanterns:lime_netherite_lantern additionallanterns:lime_normal_lantern additionallanterns:lime_normal_nether_bricks_lantern additionallanterns:lime_normal_sandstone_lantern additionallanterns:lime_obsidian_lantern additionallanterns:lime_prismarine_lantern additionallanterns:lime_purpur_lantern additionallanterns:lime_quartz_lantern additionallanterns:lime_red_nether_bricks_lantern additionallanterns:lime_red_sandstone_lantern additionallanterns:lime_smooth_stone_lantern additionallanterns:lime_stone_bricks_lantern additionallanterns:lime_stone_lantern additionallanterns:lime_warped_lantern additionallanterns:magenta_andesite_lantern additionallanterns:magenta_basalt_lantern additionallanterns:magenta_blackstone_lantern additionallanterns:magenta_bone_lantern additionallanterns:magenta_bricks_lantern additionallanterns:magenta_cobblestone_lantern additionallanterns:magenta_crimson_lantern additionallanterns:magenta_dark_prismarine_lantern additionallanterns:magenta_diamond_lantern additionallanterns:magenta_diorite_lantern additionallanterns:magenta_emerald_lantern additionallanterns:magenta_end_stone_lantern additionallanterns:magenta_gold_lantern additionallanterns:magenta_granite_lantern additionallanterns:magenta_iron_lantern additionallanterns:magenta_mossy_cobblestone_lantern additionallanterns:magenta_netherite_lantern additionallanterns:magenta_normal_lantern additionallanterns:magenta_normal_nether_bricks_lantern additionallanterns:magenta_normal_sandstone_lantern additionallanterns:magenta_obsidian_lantern additionallanterns:magenta_prismarine_lantern additionallanterns:magenta_purpur_lantern additionallanterns:magenta_quartz_lantern additionallanterns:magenta_red_nether_bricks_lantern additionallanterns:magenta_red_sandstone_lantern additionallanterns:magenta_smooth_stone_lantern additionallanterns:magenta_stone_bricks_lantern additionallanterns:magenta_stone_lantern additionallanterns:magenta_warped_lantern additionallanterns:mossy_cobblestone_chain additionallanterns:mossy_cobblestone_lantern additionallanterns:netherite_chain additionallanterns:netherite_lantern additionallanterns:normal_nether_bricks_chain additionallanterns:normal_nether_bricks_lantern additionallanterns:normal_sandstone_chain additionallanterns:normal_sandstone_lantern additionallanterns:obsidian_chain additionallanterns:obsidian_lantern additionallanterns:orange_andesite_lantern additionallanterns:orange_basalt_lantern additionallanterns:orange_blackstone_lantern additionallanterns:orange_bone_lantern additionallanterns:orange_bricks_lantern additionallanterns:orange_cobblestone_lantern additionallanterns:orange_crimson_lantern additionallanterns:orange_dark_prismarine_lantern additionallanterns:orange_diamond_lantern additionallanterns:orange_diorite_lantern additionallanterns:orange_emerald_lantern additionallanterns:orange_end_stone_lantern additionallanterns:orange_gold_lantern additionallanterns:orange_granite_lantern additionallanterns:orange_iron_lantern additionallanterns:orange_mossy_cobblestone_lantern additionallanterns:orange_netherite_lantern additionallanterns:orange_normal_lantern additionallanterns:orange_normal_nether_bricks_lantern additionallanterns:orange_normal_sandstone_lantern additionallanterns:orange_obsidian_lantern additionallanterns:orange_prismarine_lantern additionallanterns:orange_purpur_lantern additionallanterns:orange_quartz_lantern additionallanterns:orange_red_nether_bricks_lantern additionallanterns:orange_red_sandstone_lantern additionallanterns:orange_smooth_stone_lantern additionallanterns:orange_stone_bricks_lantern additionallanterns:orange_stone_lantern additionallanterns:orange_warped_lantern additionallanterns:pink_andesite_lantern additionallanterns:pink_basalt_lantern additionallanterns:pink_blackstone_lantern additionallanterns:pink_bone_lantern additionallanterns:pink_bricks_lantern additionallanterns:pink_cobblestone_lantern additionallanterns:pink_crimson_lantern additionallanterns:pink_dark_prismarine_lantern additionallanterns:pink_diamond_lantern additionallanterns:pink_diorite_lantern additionallanterns:pink_emerald_lantern additionallanterns:pink_end_stone_lantern additionallanterns:pink_gold_lantern additionallanterns:pink_granite_lantern additionallanterns:pink_iron_lantern additionallanterns:pink_mossy_cobblestone_lantern additionallanterns:pink_netherite_lantern additionallanterns:pink_normal_lantern additionallanterns:pink_normal_nether_bricks_lantern additionallanterns:pink_normal_sandstone_lantern additionallanterns:pink_obsidian_lantern additionallanterns:pink_prismarine_lantern additionallanterns:pink_purpur_lantern additionallanterns:pink_quartz_lantern additionallanterns:pink_red_nether_bricks_lantern additionallanterns:pink_red_sandstone_lantern additionallanterns:pink_smooth_stone_lantern additionallanterns:pink_stone_bricks_lantern additionallanterns:pink_stone_lantern additionallanterns:pink_warped_lantern additionallanterns:prismarine_chain additionallanterns:prismarine_lantern additionallanterns:purple_andesite_lantern additionallanterns:purple_basalt_lantern additionallanterns:purple_blackstone_lantern additionallanterns:purple_bone_lantern additionallanterns:purple_bricks_lantern additionallanterns:purple_cobblestone_lantern additionallanterns:purple_crimson_lantern additionallanterns:purple_dark_prismarine_lantern additionallanterns:purple_diamond_lantern additionallanterns:purple_diorite_lantern additionallanterns:purple_emerald_lantern additionallanterns:purple_end_stone_lantern additionallanterns:purple_gold_lantern additionallanterns:purple_granite_lantern additionallanterns:purple_iron_lantern additionallanterns:purple_mossy_cobblestone_lantern additionallanterns:purple_netherite_lantern additionallanterns:purple_normal_lantern additionallanterns:purple_normal_nether_bricks_lantern additionallanterns:purple_normal_sandstone_lantern additionallanterns:purple_obsidian_lantern additionallanterns:purple_prismarine_lantern additionallanterns:purple_purpur_lantern additionallanterns:purple_quartz_lantern additionallanterns:purple_red_nether_bricks_lantern additionallanterns:purple_red_sandstone_lantern additionallanterns:purple_smooth_stone_lantern additionallanterns:purple_stone_bricks_lantern additionallanterns:purple_stone_lantern additionallanterns:purple_warped_lantern additionallanterns:purpur_chain additionallanterns:purpur_lantern additionallanterns:quartz_chain additionallanterns:quartz_lantern additionallanterns:red_andesite_lantern additionallanterns:red_basalt_lantern additionallanterns:red_blackstone_lantern additionallanterns:red_bone_lantern additionallanterns:red_bricks_lantern additionallanterns:red_cobblestone_lantern additionallanterns:red_crimson_lantern additionallanterns:red_dark_prismarine_lantern additionallanterns:red_diamond_lantern additionallanterns:red_diorite_lantern additionallanterns:red_emerald_lantern additionallanterns:red_end_stone_lantern additionallanterns:red_gold_lantern additionallanterns:red_granite_lantern additionallanterns:red_iron_lantern additionallanterns:red_mossy_cobblestone_lantern additionallanterns:red_nether_bricks_chain additionallanterns:red_nether_bricks_lantern additionallanterns:red_netherite_lantern additionallanterns:red_normal_lantern additionallanterns:red_normal_nether_bricks_lantern additionallanterns:red_normal_sandstone_lantern additionallanterns:red_obsidian_lantern additionallanterns:red_prismarine_lantern additionallanterns:red_purpur_lantern additionallanterns:red_quartz_lantern additionallanterns:red_red_nether_bricks_lantern additionallanterns:red_red_sandstone_lantern additionallanterns:red_sandstone_chain additionallanterns:red_sandstone_lantern additionallanterns:red_smooth_stone_lantern additionallanterns:red_stone_bricks_lantern additionallanterns:red_stone_lantern additionallanterns:red_warped_lantern additionallanterns:smooth_stone_chain additionallanterns:smooth_stone_lantern additionallanterns:stone_bricks_chain additionallanterns:stone_bricks_lantern additionallanterns:stone_chain additionallanterns:stone_lantern additionallanterns:warped_chain additionallanterns:warped_lantern additionallanterns:white_andesite_lantern additionallanterns:white_basalt_lantern additionallanterns:white_blackstone_lantern additionallanterns:white_bone_lantern additionallanterns:white_bricks_lantern additionallanterns:white_cobblestone_lantern additionallanterns:white_crimson_lantern additionallanterns:white_dark_prismarine_lantern additionallanterns:white_diamond_lantern additionallanterns:white_diorite_lantern additionallanterns:white_emerald_lantern additionallanterns:white_end_stone_lantern additionallanterns:white_gold_lantern additionallanterns:white_granite_lantern additionallanterns:white_iron_lantern additionallanterns:white_mossy_cobblestone_lantern additionallanterns:white_netherite_lantern additionallanterns:white_normal_lantern additionallanterns:white_normal_nether_bricks_lantern additionallanterns:white_normal_sandstone_lantern additionallanterns:white_obsidian_lantern additionallanterns:white_prismarine_lantern additionallanterns:white_purpur_lantern additionallanterns:white_quartz_lantern additionallanterns:white_red_nether_bricks_lantern additionallanterns:white_red_sandstone_lantern additionallanterns:white_smooth_stone_lantern additionallanterns:white_stone_bricks_lantern additionallanterns:white_stone_lantern additionallanterns:white_warped_lantern additionallanterns:yellow_andesite_lantern additionallanterns:yellow_basalt_lantern additionallanterns:yellow_blackstone_lantern additionallanterns:yellow_bone_lantern additionallanterns:yellow_bricks_lantern additionallanterns:yellow_cobblestone_lantern additionallanterns:yellow_crimson_lantern additionallanterns:yellow_dark_prismarine_lantern additionallanterns:yellow_diamond_lantern additionallanterns:yellow_diorite_lantern additionallanterns:yellow_emerald_lantern additionallanterns:yellow_end_stone_lantern additionallanterns:yellow_gold_lantern additionallanterns:yellow_granite_lantern additionallanterns:yellow_iron_lantern additionallanterns:yellow_mossy_cobblestone_lantern additionallanterns:yellow_netherite_lantern additionallanterns:yellow_normal_lantern additionallanterns:yellow_normal_nether_bricks_lantern additionallanterns:yellow_normal_sandstone_lantern additionallanterns:yellow_obsidian_lantern additionallanterns:yellow_prismarine_lantern additionallanterns:yellow_purpur_lantern additionallanterns:yellow_quartz_lantern additionallanterns:yellow_red_nether_bricks_lantern additionallanterns:yellow_red_sandstone_lantern additionallanterns:yellow_smooth_stone_lantern additionallanterns:yellow_stone_bricks_lantern additionallanterns:yellow_stone_lantern additionallanterns:yellow_warped_lantern # Low light item.11002=minecraft:redstone_torch minecraft:crying_obsidian minecraft:respawn_anchor minecraft:nether_star minecraft:magma_cream minecraft:blaze_powder minecraft:blaze_rod minecraft:prismarine_crystals minecraft:glowstone_dust minecraft:glow_item_frame minecraft:glow_berries minecraft:glow_lichen minecraft:glow_ink_sac \ No newline at end of file diff --git a/shaders/lib/color_utils.glsl b/shaders/lib/color_utils.glsl index 0a35d2bd..6a404bb1 100644 --- a/shaders/lib/color_utils.glsl +++ b/shaders/lib/color_utils.glsl @@ -194,3 +194,63 @@ float day_blend_float(float sunset, float day, float night) { #define FOG_SUNSET 2.0 #define FOG_NIGHT 3.0 #endif + +// Color conversion + +vec3 rgb_to_xyz(vec3 rgb) { + vec3 xyz; + vec3 rgb2 = rgb; + vec3 mask = vec3(greaterThan(rgb, vec3(0.04045))); + rgb2 = mix(rgb2 / 12.92, pow((rgb2 + 0.055) / 1.055, vec3(2.4)), mask); + + const mat3 rgb_to_xyz_matrix = mat3( + 0.4124564, 0.3575761, 0.1804375, + 0.2126729, 0.7151522, 0.0721750, + 0.0193339, 0.1191920, 0.9503041 + ); + + xyz = rgb_to_xyz_matrix * rgb2; + return xyz; +} + +vec3 xyz_to_lab(vec3 xyz) { + vec3 xyz2 = xyz / vec3(0.95047, 1.0, 1.08883); + vec3 mask = vec3(greaterThan(xyz2, vec3(0.008856))); + xyz2 = mix(7.787 * xyz2 + 16.0 / 116.0, pow(xyz2, vec3(1.0 / 3.0)), mask); + + float L = 116.0 * xyz2.y - 16.0; + float a = 500.0 * (xyz2.x - xyz2.y); + float b = 200.0 * (xyz2.y - xyz2.z); + + return vec3(L, a, b); +} + +vec3 lab_to_xyz(vec3 lab) { + float L = lab.x; + float a = lab.y; + float b = lab.z; + + float y = (L + 16.0) / 116.0; + float x = a / 500.0 + y; + float z = y - b / 200.0; + + vec3 xyz = vec3(x, y, z); + vec3 mask = vec3(greaterThan(xyz, vec3(0.2068966))); + xyz = mix((xyz - 16.0 / 116.0) / 7.787, xyz * xyz * xyz, mask); + + return xyz * vec3(0.95047, 1.0, 1.08883); +} + +vec3 xyz_to_rgb(vec3 xyz) { + const mat3 xyz_to_rgb_matrix = mat3( + 3.2404542, -1.5371385, -0.4985314, + -0.9692660, 1.8760108, 0.0415560, + 0.0556434, -0.2040259, 1.0572252 + ); + + vec3 rgb = xyz_to_rgb_matrix * xyz; + vec3 mask = vec3(greaterThan(rgb, vec3(0.0031308))); + rgb = mix(12.92 * rgb, 1.055 * pow(rgb, vec3(1.0 / 2.4)) - 0.055, mask); + + return clamp(rgb, 0.0, 1.0); +} diff --git a/shaders/lib/dither.glsl b/shaders/lib/dither.glsl index 0b83acbe..3c9d00b5 100644 --- a/shaders/lib/dither.glsl +++ b/shaders/lib/dither.glsl @@ -30,7 +30,6 @@ but there is no such texture currently. #if MC_VERSION >= 11300 uniform float dither_shift; - uniform vec2 pos_offset; #else uniform int frame_mod; #endif @@ -45,15 +44,15 @@ float hash12(vec2 v) float hash13(vec3 v) { v = fract(v * .1031); - v += dot(v, v.zyx + 31.32); - return fract((v.x + v.y) * v.z); + v += dot(v, v.zyx + 31.32); + return fract((v.x + v.y) * v.z); } vec2 hash22(vec2 p) { vec3 p3 = fract(vec3(p.xyx) * vec3(.1031, .1030, .0973)); - p3 += dot(p3, p3.yzx+33.33); - return fract((p3.xx+p3.yz)*p3.zy); + p3 += dot(p3, p3.yzx+33.33); + return fract((p3.xx+p3.yz)*p3.zy); } float r_dither(vec2 frag) { @@ -63,10 +62,9 @@ float r_dither(vec2 frag) { float eclectic_r_dither(vec2 frag) { vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); float state = fract(dot(v * v, vec2(3571.0))); - float p4 = (fract(state * state * 7142.0) - 0.5) * 0.25; + float p4 = fract(state * state * 7142.0) * 0.075; - // return fract(p4 + dot(frag, vec2(0.75487766624669276, 0.569840290998))); - return clamp(fract(dot(frag, vec2(0.75487766624669276, 0.569840290998))) + p4, 0.0, 1.0); + return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998)) + p4); } float dither13(vec2 pos) @@ -78,9 +76,9 @@ float eclectic_dither13(vec2 pos) { vec2 v = 0.0002314814814814815 * pos + vec2(0.25, 0.0); float state = fract(dot(v * v, vec2(3571.0))); - float p4 = (fract(state * state * 7142.0) - 0.5) * 0.3; + float p4 = fract(state * state * 7142.0) * 0.075; - return fract(p4 + dot(pos, vec2(0.3076923076923077, 0.5384615384615384))); + return fract(dot(pos, vec2(0.3076923076923077, 0.5384615384615384)) + p4); } float dither_grad_noise(vec2 frag) { @@ -90,9 +88,9 @@ float dither_grad_noise(vec2 frag) { float eclectic_dither_grad_noise(vec2 frag) { vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); float state = fract(dot(v * v, vec2(3571.0))); - float p4 = (fract(state * state * 7142.0) - 0.5) * 0.25; + float p4 = fract(state * state * 7142.0) * 0.075; - return clamp(fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag))) + p4, 0.0, 1.0); + return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)) + p4); } float texture_noise_64(vec2 p, sampler2D noise) { @@ -130,8 +128,8 @@ float dither_makeup(vec2 xy) { float shifted_hash13(vec3 v) { v = fract(v * .1031); - v += dot(v, v.zyx + 31.32); - return fract(dither_shift + ((v.x + v.y) * v.z)); + v += dot(v, v.zyx + 31.32); + return fract(dither_shift + ((v.x + v.y) * v.z)); } float shifted_r_dither(vec2 frag) { @@ -143,7 +141,7 @@ float dither_makeup(vec2 xy) { float state = fract(dot(v * v, vec2(3571.0))); float p4 = fract(state * state * 7142.0) * 0.075; - return clamp(fract(dot(frag, vec2(0.75487766624669276, 0.569840290998)) + dither_shift) + p4, 0.0, 1.0); + return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998)) + dither_shift + p4); } float shifted_dither13(vec2 pos) @@ -157,7 +155,7 @@ float dither_makeup(vec2 xy) { float state = fract(dot(v * v, vec2(3571.0))); float p4 = fract(state * state * 7142.0) * 0.075; - return clamp(fract(dot(frag, vec2(0.3076923076923077, 0.5384615384615384)) + dither_shift) + p4, 0.0, 1.0); + return fract(dot(frag, vec2(0.3076923076923077, 0.5384615384615384)) + dither_shift + p4); } float shifted_dither_grad_noise(vec2 frag) { @@ -169,7 +167,7 @@ float dither_makeup(vec2 xy) { float state = fract(dot(v * v, vec2(3571.0))); float p4 = fract(state * state * 7142.0) * 0.075; - return clamp(fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)) + dither_shift) + p4, 0.0, 1.0); + return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)) + dither_shift + p4); } float shifted_texture_noise_64(vec2 p, sampler2D noise) { @@ -221,7 +219,7 @@ float dither_makeup(vec2 xy) { float state = fract(dot(v * v, vec2(3571.0))); float p4 = fract(state * state * 7142.0) * 0.075; - return clamp(fract(dot(frag, vec2(0.75487766624669276, 0.569840290998)) + (frame_mod * 0.4)) + p4, 0.0, 1.0); + return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998)) + (frame_mod * 0.4) + p4); } float shifted_dither13(vec2 pos) @@ -238,7 +236,7 @@ float dither_makeup(vec2 xy) { float state = fract(dot(v * v, vec2(3571.0))); float p4 = fract(state * state * 7142.0) * 0.075; - return clamp(fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)) + (frame_mod * 0.4)) + p4, 0.0, 1.0); + return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)) + (frame_mod * 0.4) + p4); } float shifted_texture_noise_64(vec2 p, sampler2D noise) { @@ -254,4 +252,15 @@ float dither_makeup(vec2 xy) { return fract((frame_mod * 0.4) + dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); } + float shifted_dither_makeup(vec2 xy) { + vec2 tile = floor(xy * 0.25); + float flip = mod(tile.x + tile.y, 2.0); + xy = mix(xy, xy.yx, flip); + + float r_dither = fract(dot(xy, vec2(0.75487766624669276, 0.569840290998))); + float plastic = 2.0 * abs(fract(dot(tile, vec2(0.8085512046226566, 0.5562305898749054))) - 0.5); + + return fract((frame_mod * 0.4) + r_dither + plastic); + } + #endif diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 89ec9b70..33b61e1b 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -143,7 +143,7 @@ uniform.int.frame_mod = fmod(frameCounter, 10) # as much as possible from one to the next. It helps to make the flickering of the image # so fast that it is "absorbed" and better masked by the TAA history. -#if AA_TYPE > -1 +#if AA_TYPE > 0 # Pentagon uniform.vec2.taa_offset = vec2((if( \ frame_mod == 0, 0.7071067811865476, \ @@ -180,41 +180,17 @@ uniform.int.frame_mod = fmod(frameCounter, 10) # of Minecraft/Optifine. For older versions, a mechanism that depends on the # uniform "frame_mod" is used to calculate the increment. uniform.float.dither_shift = if( \ - frame_mod == 1, 0.1, \ - frame_mod == 2, 0.2, \ - frame_mod == 3, 0.3, \ - frame_mod == 4, 0.4, \ - frame_mod == 5, 0.5, \ - frame_mod == 6, 0.6, \ - frame_mod == 7, 0.7, \ - frame_mod == 8, 0.8, \ - frame_mod == 9, 0.9, \ + frame_mod == 0, 0.0 \ + frame_mod == 1, 0.3264030514570224, \ + frame_mod == 2, 0.5978843761620217, \ + frame_mod == 3, 0.881799481995884, \ + frame_mod == 4, 0.22336905198854695, \ + frame_mod == 5, 0.5245207896967208, \ + frame_mod == 6, 0.7563679947882336, \ + frame_mod == 7, 0.08526513298080163, \ + frame_mod == 8, 0.39176966992085394, \ + frame_mod == 9, 0.6919630956391005, \ 0.0) - - uniform.vec2.pos_offset = vec2((if( \ - frame_mod == 0, 0.0, \ - frame_mod == 1, -1.0, \ - frame_mod == 2, 0.0, \ - frame_mod == 3, 2.0, \ - frame_mod == 4, 3.0, \ - frame_mod == 5, 4.0, \ - frame_mod == 6, 0.0, \ - frame_mod == 7, -5.0, \ - frame_mod == 8, -6.0, \ - frame_mod == 9, 0.0, \ - 0.0)), \ - (if( \ - frame_mod == 0, 0.0, \ - frame_mod == 1, 1.0, \ - frame_mod == 2, 2.0, \ - frame_mod == 3, 3.0, \ - frame_mod == 4, 0.0, \ - frame_mod == 5, -4.0, \ - frame_mod == 6, -5.0, \ - frame_mod == 7, -6.0, \ - frame_mod == 8, 0.0, \ - frame_mod == 9, 0.0, \ - 0.0))) #endif # FOV - A precalculated value related to FOV From 998067bcc7f53b9892b8f4cbb78f4597f2724dd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 5 Oct 2024 16:29:31 -0600 Subject: [PATCH 007/147] Dither Shift --- shaders/common/deferred_fragment.glsl | 2 +- shaders/shaders.properties | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index 7e58719e..42d83ff7 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -108,7 +108,7 @@ void main() { #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) #if AA_TYPE > 0 - float dither = shifted_hash12(gl_FragCoord.xy); + float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); #else float dither = semiblue(gl_FragCoord.xy); #endif diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 33b61e1b..e1e55773 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -143,7 +143,7 @@ uniform.int.frame_mod = fmod(frameCounter, 10) # as much as possible from one to the next. It helps to make the flickering of the image # so fast that it is "absorbed" and better masked by the TAA history. -#if AA_TYPE > 0 +#if AA_TYPE > -1 # Pentagon uniform.vec2.taa_offset = vec2((if( \ frame_mod == 0, 0.7071067811865476, \ @@ -180,16 +180,16 @@ uniform.int.frame_mod = fmod(frameCounter, 10) # of Minecraft/Optifine. For older versions, a mechanism that depends on the # uniform "frame_mod" is used to calculate the increment. uniform.float.dither_shift = if( \ - frame_mod == 0, 0.0 \ - frame_mod == 1, 0.3264030514570224, \ - frame_mod == 2, 0.5978843761620217, \ - frame_mod == 3, 0.881799481995884, \ - frame_mod == 4, 0.22336905198854695, \ - frame_mod == 5, 0.5245207896967208, \ - frame_mod == 6, 0.7563679947882336, \ - frame_mod == 7, 0.08526513298080163, \ - frame_mod == 8, 0.39176966992085394, \ - frame_mod == 9, 0.6919630956391005, \ + frame_mod == 0, 0.0, \ + frame_mod == 1, 0.9, \ + frame_mod == 2, 0.5, \ + frame_mod == 3, 0.8, \ + frame_mod == 4, 0.3, \ + frame_mod == 5, 0.7, \ + frame_mod == 6, 0.1, \ + frame_mod == 7, 0.6, \ + frame_mod == 8, 0.4, \ + frame_mod == 9, 0.2, \ 0.0) #endif From 65af4aa3651b99e8e2a49122dc014124b6ce60b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sun, 6 Oct 2024 00:26:46 -0600 Subject: [PATCH 008/147] Version 9.0b --- shaders/common/prepare_fragment.glsl | 4 +- shaders/common/prepare_vertex.glsl | 5 +- shaders/common/solid_dh_water_fragment.glsl | 2 + shaders/common/solid_dh_water_vertex.glsl | 3 + shaders/common/water_blocks_fragment.glsl | 2 + shaders/lib/color_conversion.glsl | 57 +++++++++++++++ shaders/lib/color_utils.glsl | 80 +-------------------- shaders/lib/color_utils_end.glsl | 22 +----- shaders/lib/color_utils_nether.glsl | 22 +----- shaders/lib/day_blend.glsl | 19 +++++ shaders/src/finalcolor_dh.glsl | 1 + shaders/src/sky_color_vertex.glsl | 5 ++ 12 files changed, 104 insertions(+), 118 deletions(-) create mode 100644 shaders/lib/color_conversion.glsl create mode 100644 shaders/lib/day_blend.glsl diff --git a/shaders/common/prepare_fragment.glsl b/shaders/common/prepare_fragment.glsl index 552699dd..cfb78ccd 100644 --- a/shaders/common/prepare_fragment.glsl +++ b/shaders/common/prepare_fragment.glsl @@ -47,9 +47,11 @@ void main() { vec3 block_color = mix( low_sky_color, hi_sky_color, - sqrt(n_u) + smoothstep(0.0, 1.0, pow(n_u, 0.333)) ); + block_color = xyz_to_rgb(block_color); + #endif #include "/src/writebuffers.glsl" diff --git a/shaders/common/prepare_vertex.glsl b/shaders/common/prepare_vertex.glsl index e9ffaa66..dca9cbe6 100644 --- a/shaders/common/prepare_vertex.glsl +++ b/shaders/common/prepare_vertex.glsl @@ -1,6 +1,7 @@ /* Config, uniforms, ins, outs */ #include "/lib/config.glsl" +/* Color utils */ #ifdef THE_END #include "/lib/color_utils_end.glsl" #elif defined NETHER @@ -9,7 +10,7 @@ #include "/lib/color_utils.glsl" #endif -/* Config, uniforms, ins, outs */ +/* Uniforms, ins, outs */ uniform mat4 gbufferModelView; uniform float rainStrength; @@ -17,6 +18,8 @@ varying vec3 up_vec; varying vec3 hi_sky_color; varying vec3 low_sky_color; +/* Functions includes */ + #include "/lib/luma.glsl" void main() { diff --git a/shaders/common/solid_dh_water_fragment.glsl b/shaders/common/solid_dh_water_fragment.glsl index 340d0cb6..74528655 100644 --- a/shaders/common/solid_dh_water_fragment.glsl +++ b/shaders/common/solid_dh_water_fragment.glsl @@ -156,6 +156,8 @@ void main() { hi_sky_color * .5 * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667); } + sky_color_reflect = xyz_to_rgb(sky_color_reflect); + if (block_type < DH_BLOCK_WATER + 0.5 && block_type > DH_BLOCK_WATER - 0.5) { // Water #ifdef VANILLA_WATER float shadow_c = abs((light_mix * 2.0) - 1.0); diff --git a/shaders/common/solid_dh_water_vertex.glsl b/shaders/common/solid_dh_water_vertex.glsl index 5b6eb514..f1abbebc 100644 --- a/shaders/common/solid_dh_water_vertex.glsl +++ b/shaders/common/solid_dh_water_vertex.glsl @@ -61,6 +61,9 @@ void main() { #include "/src/sky_color_vertex.glsl" #include "/src/light_vertex_dh.glsl" + hi_sky_color = rgb_to_xyz(hi_sky_color); + low_sky_color = rgb_to_xyz(low_sky_color); + vec4 position2 = gl_ModelViewMatrix * gl_Vertex; fragposition = position2.xyz; diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index f4d3b5e1..731fe66a 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -164,6 +164,8 @@ void main() { hi_sky_color * .5 * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667); } + sky_color_reflect = xyz_to_rgb(sky_color_reflect); + #if defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER sky_color_reflect = get_cloud( normalize((gbufferModelViewInverse * vec4(reflect_water_vec * far, 1.0)).xyz), diff --git a/shaders/lib/color_conversion.glsl b/shaders/lib/color_conversion.glsl new file mode 100644 index 00000000..ddf9cfb1 --- /dev/null +++ b/shaders/lib/color_conversion.glsl @@ -0,0 +1,57 @@ +vec3 rgb_to_xyz(vec3 rgb) { + vec3 xyz; + vec3 rgb2 = rgb; + vec3 mask = vec3(greaterThan(rgb, vec3(0.04045))); + rgb2 = mix(rgb2 / 12.92, pow((rgb2 + 0.055) / 1.055, vec3(2.4)), mask); + + const mat3 rgb_to_xyz_matrix = mat3( + 0.4124564, 0.3575761, 0.1804375, + 0.2126729, 0.7151522, 0.0721750, + 0.0193339, 0.1191920, 0.9503041 + ); + + xyz = rgb_to_xyz_matrix * rgb2; + return xyz; +} + +vec3 xyz_to_lab(vec3 xyz) { + vec3 xyz2 = xyz / vec3(0.95047, 1.0, 1.08883); + vec3 mask = vec3(greaterThan(xyz2, vec3(0.008856))); + xyz2 = mix(7.787 * xyz2 + 16.0 / 116.0, pow(xyz2, vec3(1.0 / 3.0)), mask); + + float L = 116.0 * xyz2.y - 16.0; + float a = 500.0 * (xyz2.x - xyz2.y); + float b = 200.0 * (xyz2.y - xyz2.z); + + return vec3(L, a, b); +} + +vec3 lab_to_xyz(vec3 lab) { + float L = lab.x; + float a = lab.y; + float b = lab.z; + + float y = (L + 16.0) / 116.0; + float x = a / 500.0 + y; + float z = y - b / 200.0; + + vec3 xyz = vec3(x, y, z); + vec3 mask = vec3(greaterThan(xyz, vec3(0.2068966))); + xyz = mix((xyz - 16.0 / 116.0) / 7.787, xyz * xyz * xyz, mask); + + return xyz * vec3(0.95047, 1.0, 1.08883); +} + +vec3 xyz_to_rgb(vec3 xyz) { + const mat3 xyz_to_rgb_matrix = mat3( + 3.2404542, -1.5371385, -0.4985314, + -0.9692660, 1.8760108, 0.0415560, + 0.0556434, -0.2040259, 1.0572252 + ); + + vec3 rgb = xyz_to_rgb_matrix * xyz; + vec3 mask = vec3(greaterThan(rgb, vec3(0.0031308))); + rgb = mix(12.92 * rgb, 1.055 * pow(rgb, vec3(1.0 / 2.4)) - 0.055, mask); + + return clamp(rgb, 0.0, 1.0); +} \ No newline at end of file diff --git a/shaders/lib/color_utils.glsl b/shaders/lib/color_utils.glsl index 6a404bb1..4fd0b990 100644 --- a/shaders/lib/color_utils.glsl +++ b/shaders/lib/color_utils.glsl @@ -153,25 +153,7 @@ uniform int moonPhase; #define CANDLE_BASELIGHT vec3(0.19, 0.19, 0.19) #endif -vec3 day_blend(vec3 sunset, vec3 day, vec3 night) { - // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) - // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) - - vec3 day_color = mix(sunset, day, day_mixer); - vec3 night_color = mix(sunset, night, night_mixer); - - return mix(day_color, night_color, step(0.5, day_moment)); -} - -float day_blend_float(float sunset, float day, float night) { - // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) - // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) - - float day_value = mix(sunset, day, day_mixer); - float night_value = mix(sunset, night, night_mixer); - - return mix(day_value, night_value, step(0.5, day_moment)); -} +#include "/lib/day_blend.glsl" #if defined SIMPLE_AUTOEXP // Ambient color luma per hour in exposure calculation @@ -195,62 +177,4 @@ float day_blend_float(float sunset, float day, float night) { #define FOG_NIGHT 3.0 #endif -// Color conversion - -vec3 rgb_to_xyz(vec3 rgb) { - vec3 xyz; - vec3 rgb2 = rgb; - vec3 mask = vec3(greaterThan(rgb, vec3(0.04045))); - rgb2 = mix(rgb2 / 12.92, pow((rgb2 + 0.055) / 1.055, vec3(2.4)), mask); - - const mat3 rgb_to_xyz_matrix = mat3( - 0.4124564, 0.3575761, 0.1804375, - 0.2126729, 0.7151522, 0.0721750, - 0.0193339, 0.1191920, 0.9503041 - ); - - xyz = rgb_to_xyz_matrix * rgb2; - return xyz; -} - -vec3 xyz_to_lab(vec3 xyz) { - vec3 xyz2 = xyz / vec3(0.95047, 1.0, 1.08883); - vec3 mask = vec3(greaterThan(xyz2, vec3(0.008856))); - xyz2 = mix(7.787 * xyz2 + 16.0 / 116.0, pow(xyz2, vec3(1.0 / 3.0)), mask); - - float L = 116.0 * xyz2.y - 16.0; - float a = 500.0 * (xyz2.x - xyz2.y); - float b = 200.0 * (xyz2.y - xyz2.z); - - return vec3(L, a, b); -} - -vec3 lab_to_xyz(vec3 lab) { - float L = lab.x; - float a = lab.y; - float b = lab.z; - - float y = (L + 16.0) / 116.0; - float x = a / 500.0 + y; - float z = y - b / 200.0; - - vec3 xyz = vec3(x, y, z); - vec3 mask = vec3(greaterThan(xyz, vec3(0.2068966))); - xyz = mix((xyz - 16.0 / 116.0) / 7.787, xyz * xyz * xyz, mask); - - return xyz * vec3(0.95047, 1.0, 1.08883); -} - -vec3 xyz_to_rgb(vec3 xyz) { - const mat3 xyz_to_rgb_matrix = mat3( - 3.2404542, -1.5371385, -0.4985314, - -0.9692660, 1.8760108, 0.0415560, - 0.0556434, -0.2040259, 1.0572252 - ); - - vec3 rgb = xyz_to_rgb_matrix * xyz; - vec3 mask = vec3(greaterThan(rgb, vec3(0.0031308))); - rgb = mix(12.92 * rgb, 1.055 * pow(rgb, vec3(1.0 / 2.4)) - 0.055, mask); - - return clamp(rgb, 0.0, 1.0); -} +#include "/lib/color_conversion.glsl" diff --git a/shaders/lib/color_utils_end.glsl b/shaders/lib/color_utils_end.glsl index 57d434d8..3f7eba0c 100644 --- a/shaders/lib/color_utils_end.glsl +++ b/shaders/lib/color_utils_end.glsl @@ -35,25 +35,7 @@ uniform float night_mixer; #define CANDLE_BASELIGHT vec3(0.19, 0.19, 0.19) #endif -vec3 day_blend(vec3 sunset, vec3 day, vec3 night) { - // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) - // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) - - vec3 day_color = mix(sunset, day, day_mixer); - vec3 night_color = mix(sunset, night, night_mixer); - - return mix(day_color, night_color, step(0.5, day_moment)); -} - -float day_blend_float(float sunset, float day, float night) { - // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) - // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) - - float day_value = mix(sunset, day, day_mixer); - float night_value = mix(sunset, night, night_mixer); - - return mix(day_value, night_value, step(0.5, day_moment)); -} +#include "/lib/day_blend.glsl" #if defined SIMPLE_AUTOEXP // Ambient color luma per hour in exposure calculation @@ -70,3 +52,5 @@ float day_blend_float(float sunset, float day, float night) { #define FOG_SUNSET 1.0 #define FOG_NIGHT 1.0 #endif + +#include "/lib/color_conversion.glsl" \ No newline at end of file diff --git a/shaders/lib/color_utils_nether.glsl b/shaders/lib/color_utils_nether.glsl index 7958ed34..6ea81818 100644 --- a/shaders/lib/color_utils_nether.glsl +++ b/shaders/lib/color_utils_nether.glsl @@ -35,25 +35,7 @@ uniform float night_mixer; #define CANDLE_BASELIGHT vec3(0.19, 0.19, 0.19) #endif -vec3 day_blend(vec3 sunset, vec3 day, vec3 night) { - // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) - // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) - - vec3 day_color = mix(sunset, day, day_mixer); - vec3 night_color = mix(sunset, night, night_mixer); - - return mix(day_color, night_color, step(0.5, day_moment)); -} - -float day_blend_float(float sunset, float day, float night) { - // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) - // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) - - float day_value = mix(sunset, day, day_mixer); - float night_value = mix(sunset, night, night_mixer); - - return mix(day_value, night_value, step(0.5, day_moment)); -} +#include "/lib/day_blend.glsl" #if defined SIMPLE_AUTOEXP // Ambient color luma per hour in exposure calculation @@ -66,3 +48,5 @@ float day_blend_float(float sunset, float day, float night) { #define FOG_DAY 1.0 #define FOG_SUNSET 1.0 #define FOG_NIGHT 1.0 + +#include "/lib/color_conversion.glsl" diff --git a/shaders/lib/day_blend.glsl b/shaders/lib/day_blend.glsl new file mode 100644 index 00000000..3603034f --- /dev/null +++ b/shaders/lib/day_blend.glsl @@ -0,0 +1,19 @@ +vec3 day_blend(vec3 sunset, vec3 day, vec3 night) { + // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) + // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) + + vec3 day_color = mix(sunset, day, day_mixer); + vec3 night_color = mix(sunset, night, night_mixer); + + return mix(day_color, night_color, step(0.5, day_moment)); +} + +float day_blend_float(float sunset, float day, float night) { + // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) + // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) + + float day_value = mix(sunset, day, day_mixer); + float night_value = mix(sunset, night, night_mixer); + + return mix(day_value, night_value, step(0.5, day_moment)); +} \ No newline at end of file diff --git a/shaders/src/finalcolor_dh.glsl b/shaders/src/finalcolor_dh.glsl index 14f9a8a7..992c6164 100644 --- a/shaders/src/finalcolor_dh.glsl +++ b/shaders/src/finalcolor_dh.glsl @@ -17,6 +17,7 @@ ); #else vec3 fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; + block_color.rgb = mix( block_color.rgb, diff --git a/shaders/src/sky_color_vertex.glsl b/shaders/src/sky_color_vertex.glsl index aa20d1a6..3fe664dd 100644 --- a/shaders/src/sky_color_vertex.glsl +++ b/shaders/src/sky_color_vertex.glsl @@ -25,4 +25,9 @@ HORIZON_SKY_RAIN_COLOR * luma(low_sky_color), rainStrength ); + + #if !defined DH_BLOCK && !defined DH_WATER + hi_sky_color = rgb_to_xyz(hi_sky_color); + low_sky_color = rgb_to_xyz(low_sky_color); + #endif #endif \ No newline at end of file From 9a4dd1dce5c1b2f0f98f450866c9a443d160ec88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sun, 6 Oct 2024 18:04:56 -0600 Subject: [PATCH 009/147] =?UTF-8?q?Versi=C3=B3n=209.0c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- shaders/block.properties | 8 ++++---- shaders/lang/en_US.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- shaders/lib/config.glsl | 2 +- shaders/lib/dither.glsl | 22 +++++++++++----------- shaders/shaders.properties | 18 +++++++++--------- shaders/src/position_vertex.glsl | 4 ++++ 11 files changed, 35 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 53b9d0f8..6d637308 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp - Code High performance Minecraft shader (Java). -## Version: 9.0b +## Version: 9.0c ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/block.properties b/shaders/block.properties index d831ab79..84621503 100644 --- a/shaders/block.properties +++ b/shaders/block.properties @@ -15,13 +15,13 @@ block.10176 = minecraft:pitcher_plant:half=upper minecraft:sunflower:half=upper minecraft:lilac:half=upper minecraft:tall_grass:half=upper minecraft:large_fern:half=upper minecraft:rose_bush:half=upper minecraft:peony:half=upper minecraft:tall_seagrass:half=upper atmospheric:water_hyacinth:half=upper atmospheric:tall_yucca_flower:half=upper environmental:tall_cattail:half=upper environmental:pink_delphinium:half=upper environmental:blue_delphinium:half=upper environmental:purple_delphinium:half=upper environmental:white_delphinium:half=upper environmental:bird_of_paradise:half=upper environmental:giant_tall_grass:half=upper farmersdelight:wild_rice:half=upper upgrade_aquatic:flowering_rush:half=upper upgrade_aquatic:tall_beachgrass:half=upper upgrade_aquatic:tall_blue_pickerelweed:half=upper upgrade_aquatic:tall_purple_pickerelweed:half=upper biomesoplenty:barley:half=upper biomesoplenty:goldenrod:half=upper biomesoplenty:blue_hydrangea:half=upper biomesoplenty:watergrass:half=upper botania:white_double_flower:half=upper botania:orange_double_flower:half=upper botania:magenta_double_flower:half=upper botania:light_blue_double_flower:half=upper botania:yellow_double_flower:half=upper botania:lime_double_flower:half=upper botania:pink_double_flower:half=upper botania:gray_double_flower:half=upper botania:light_gray_double_flower:half=upper botania:cyan_double_flower:half=upper botania:purple_double_flower:half=upper botania:blue_double_flower:half=upper botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=upper biomesoplenty:reed:half=upper biomesoplenty:cattail:half=upper byg:tall_crimson_roots:half=upper byg:tall_ether_grass:half=upper byg:reeds:half=upper byg:tall_prairie_grass:half=upper byg:tall_allium:half=upper byg:azalea:half=upper byg:tall_pink_allium:half=upper moreflowerbushes:purple_hibiscus:half=upper moreflowerbushes:mountain_laurel:half=upper moreflowerbushes:larkspur:half=upper moreflowerbushes:golden_shower:half=upper moreflowerbushes:fuchsia:half=upper moreflowerbushes:butterfly_weed:half=upper moreflowerbushes:blue_sage:half=upper moreflowerbushes:blue_hortensia:half=upper byg:japanese_orchid:half=upper byg:delphinium:half=upper byg:foxglove:half=upper cutecore:pink_rosebush:half=upper cutecore:white_rosebush:half=upper cutecore:pink_hydrangeas:half=upper cutecore:blue_hydrangeas:half=upper cutecore:purple_hydrangeas:half=upper # LEAVES - block.10018 = minecraft:cherry_leaves minecraft:oak_leaves minecraft:spruce_leaves minecraft:birch_leaves minecraft:jungle_leaves minecraft:acacia_leaves minecraft:dark_oak_leaves minecraft:pale_oak_leaves minecraft:azalea_leaves minecraft:azalea_leaves_flowers minecraft:flowering_azalea_leaves minecraft:mangrove_leaves biomesoplenty:origin_leaves biomesoplenty:flowering_oak_leaves biomesoplenty:rainbow_birch_leaves biomesoplenty:yellow_autumn_leaves biomesoplenty:orange_autumn_leaves biomesoplenty:maple_leaves biomesoplenty:fir_leaves biomesoplenty:redwood_leaves biomesoplenty:mahogany_leaves biomesoplenty:palm_leaves biomesoplenty:willow_leaves biomesoplenty:dead_leaves biomesoplenty:magic_leaves biomesoplenty:umbran_leaves biomesoplenty:hellbark_leaves biomesoplenty:pink_cherry_leaves biomesoplenty:white_cherry_leaves biomesoplenty:jacaranda_leaves quark:blue_blossom_leaves quark:lavender_blossom_leaves quark:orange_blossom_leaves quark:pink_blossom_leaves quark:yellow_blossom_leaves atmospheric:rosewood_leaves atmospheric:morado_leaves atmospheric:flowering_morado_leaves atmospheric:yucca_leaves atmospheric:kousa_leaves atmospheric:aspen_leaves atmospheric:grimwood_leaves autumnity:red_maple_leaves autumnity:orange_maple_leaves autumnity:yellow_maple_leaves autumnity:maple_leaves environmental:willow_leaves environmental:cherry_leaves environmental:pink_wisteria_leaves environmental:blue_wisteria_leaves environmental:purple_wisteria_leaves environmental:white_wisteria_leaves environmental:pink_hanging_wisteria_leaves environmental:blue_hanging_wisteria_leaves environmental:purple_hanging_wisteria_leaves environmental:white_hanging_wisteria_leaves environmental:hanging_willow_leaves upgrade_aquatic:river_leaves byg:aspen_leaves byg:araucaria_leaves byg:baobab_leaves byg:blooming_witch_hazel_leaves byg:blue_enchanted_leaves byg:blue_spruce_leaves byg:brown_birch_leaves byg:brown_oak_leaves byg:brown_zelkova_leaves byg:cika_leaves byg:cypress_leaves byg:ebony_leaves byg:fir_leaves byg:flowering_orchard_leaves byg:flowering_nightshade_leaves byg:flowering_palo_verde_leaves byg:green_apple_skyris_leaves byg:green_enchanted_leaves byg:holly_berry_leaves byg:holly_leaves byg:indigo_jacaranda_leaves byg:jacaranda_leaves byg:joshua_leaves byg:mahogany_leaves byg:mangrove_leaves byg:maple_leaves byg:orange_birch_leaves byg:orange_oak_leaves byg:orange_spruce_leaves byg:orchard_leaves byg:palo_verde_leaves byg:pine_leaves byg:pink_cherry_leaves byg:rainbow_eucalyptus_leaves byg:red_birch_leaves byg:red_maple_leaves byg:red_oak_leaves byg:red_spruce_leaves byg:redwood_leaves byg:ripe_joshua_leaves byg:ripe_orchard_leaves byg:silver_maple_leaves byg:skyris_leaves byg:white_cherry_leaves byg:willow_leaves byg:witch_hazel_leaves byg:yellow_birch_leaves byg:yellow_spruce_leaves byg:zelkova_leaves ecotones:hazel_leaves sakurarosea:alt_sakura_leaves sakurarosea:sakura_leaves sakurarosea:white_sakura_leaves terrestria:cypress_leaves terrestria:dark_japanese_maple_leaves terrestria:hemlock_leaves terrestria:japanese_maple_leaves terrestria:japanese_maple_shrub_leaves terrestria:jungle_palm_leaves terrestria:rainbow_eucalyptus_leaves terrestria:redwood_leaves terrestria:rubber_leaves terrestria:sakura_leaves terrestria:willow_leaves terrestria:yucca_palm_leaves traverse:brown_autumnal_leaves traverse:fir_leaves traverse:orange_autumnal_leaves traverse:red_autumnal_leaves traverse:yellow_autumnal_leaves vanillaenhanced:redwood_leaves wild_explorer:autumn_oak_leaves wild_explorer:autumn_birch_leaves wild_explorer:pink_cherry_oak_leaves wild_explorer:white_cherry_oak_leaves wild_explorer:palm_leaves cutecore:cherry_wood_leaves cutecore:cherry_wood_leaves_fruit cutecore:wisteria_leaves cutecore:lemon_leaves cutecore:lemon_leaves_fruiting dynamictrees:jungle_leaves dynamictrees:oak_leaves dynamictrees:spruce_leaves dynamictrees:dark_oak_leaves dynamictrees:acacia_leaves dynamictrees:birch_leaves simplefarming:apple_leaves simplefarming:apricot_leaves simplefarming:banana_leaves simplefarming:cherry_leaves simplefarming:mango_leaves simplefarming:olive_leaves simplefarming:orange_leaves simplefarming:pear_leaves simplefarming:plum_leaves mythicbotany:dreamwood_leaves undergarden:smogstem_leaves undergarden:wigglewood_leaves occultism:otherworld_leaves occultism:otherworld_leaves_natural integrateddynamics:menril_leaves extlights:xmas_leaves extlights:xmas_leaves_bulb extlights:xmas_leaves_bulb_red extlights:xmas_leaves_bulb_green extlights:xmas_leaves_bulb_blue extlights:xmas_leaves_bulb_blinking_redgreen extlights:xmas_leaves_bulb_blinking_redblue extlights:xmas_leaves_bulb_blinking_greenblue extlights:xmas_leaves_bulb_blinking_rgb extlights:xmas_leaves_bulb_smooth_redgreen extlights:xmas_leaves_bulb_smooth_redblue extlights:xmas_leaves_bulb_smooth_greenblue extlights:xmas_leaves_bulb_smooth_rgb techreborn:rubber_leaves blockus:legacy_leaves blockus:white_oak_leaves architects_palette:twisted_leaves twilightforest:twilight_oak_leaves twilightforest:canopy_leaves twilightforest:mangrove_leaves twilightforest:dark_leaves twilightforest:time_leaves twilightforest:transformation_leaves twilightforest:mining_leaves twilightforest:sorting_leaves twilightforest:giant_leaves twilightforest:thorn_leaves + block.10018 = minecraft:cherry_leaves minecraft:oak_leaves minecraft:spruce_leaves minecraft:birch_leaves minecraft:jungle_leaves minecraft:acacia_leaves minecraft:dark_oak_leaves minecraft:pale_oak_leaves minecraft:azalea_leaves minecraft:azalea_leaves_flowers minecraft:flowering_azalea_leaves minecraft:mangrove_leaves biomesoplenty:origin_leaves biomesoplenty:flowering_oak_leaves biomesoplenty:rainbow_birch_leaves biomesoplenty:yellow_autumn_leaves biomesoplenty:orange_autumn_leaves biomesoplenty:maple_leaves biomesoplenty:fir_leaves biomesoplenty:redwood_leaves biomesoplenty:mahogany_leaves biomesoplenty:palm_leaves biomesoplenty:willow_leaves biomesoplenty:dead_leaves biomesoplenty:magic_leaves biomesoplenty:umbran_leaves biomesoplenty:hellbark_leaves biomesoplenty:pink_cherry_leaves biomesoplenty:white_cherry_leaves biomesoplenty:jacaranda_leaves quark:blue_blossom_leaves quark:lavender_blossom_leaves quark:orange_blossom_leaves quark:pink_blossom_leaves quark:yellow_blossom_leaves atmospheric:rosewood_leaves atmospheric:morado_leaves atmospheric:flowering_morado_leaves atmospheric:yucca_leaves atmospheric:kousa_leaves atmospheric:aspen_leaves atmospheric:grimwood_leaves autumnity:red_maple_leaves autumnity:orange_maple_leaves autumnity:yellow_maple_leaves autumnity:maple_leaves environmental:willow_leaves environmental:cherry_leaves environmental:pink_wisteria_leaves environmental:blue_wisteria_leaves environmental:purple_wisteria_leaves environmental:white_wisteria_leaves environmental:pink_hanging_wisteria_leaves environmental:blue_hanging_wisteria_leaves environmental:purple_hanging_wisteria_leaves environmental:white_hanging_wisteria_leaves environmental:hanging_willow_leaves upgrade_aquatic:river_leaves byg:aspen_leaves byg:araucaria_leaves byg:baobab_leaves byg:blooming_witch_hazel_leaves byg:blue_enchanted_leaves byg:blue_spruce_leaves byg:brown_birch_leaves byg:brown_oak_leaves byg:brown_zelkova_leaves byg:cika_leaves byg:cypress_leaves byg:ebony_leaves byg:fir_leaves byg:flowering_orchard_leaves byg:flowering_nightshade_leaves byg:flowering_palo_verde_leaves byg:green_apple_skyris_leaves byg:green_enchanted_leaves byg:holly_berry_leaves byg:holly_leaves byg:indigo_jacaranda_leaves byg:jacaranda_leaves byg:joshua_leaves byg:mahogany_leaves byg:mangrove_leaves byg:maple_leaves byg:orange_birch_leaves byg:orange_oak_leaves byg:orange_spruce_leaves byg:orchard_leaves byg:palo_verde_leaves byg:pine_leaves byg:pink_cherry_leaves byg:rainbow_eucalyptus_leaves byg:red_birch_leaves byg:red_maple_leaves byg:red_oak_leaves byg:red_spruce_leaves byg:redwood_leaves byg:ripe_joshua_leaves byg:ripe_orchard_leaves byg:silver_maple_leaves byg:skyris_leaves byg:white_cherry_leaves byg:willow_leaves byg:witch_hazel_leaves byg:yellow_birch_leaves byg:yellow_spruce_leaves byg:zelkova_leaves ecotones:hazel_leaves sakurarosea:alt_sakura_leaves sakurarosea:sakura_leaves sakurarosea:white_sakura_leaves terrestria:cypress_leaves terrestria:dark_japanese_maple_leaves terrestria:hemlock_leaves terrestria:japanese_maple_leaves terrestria:japanese_maple_shrub_leaves terrestria:jungle_palm_leaves terrestria:rainbow_eucalyptus_leaves terrestria:redwood_leaves terrestria:rubber_leaves terrestria:sakura_leaves terrestria:willow_leaves terrestria:yucca_palm_leaves traverse:brown_autumnal_leaves traverse:fir_leaves traverse:orange_autumnal_leaves traverse:red_autumnal_leaves traverse:yellow_autumnal_leaves vanillaenhanced:redwood_leaves wild_explorer:autumn_oak_leaves wild_explorer:autumn_birch_leaves wild_explorer:pink_cherry_oak_leaves wild_explorer:white_cherry_oak_leaves wild_explorer:palm_leaves cutecore:cherry_wood_leaves cutecore:cherry_wood_leaves_fruit cutecore:wisteria_leaves cutecore:lemon_leaves cutecore:lemon_leaves_fruiting dynamictrees:jungle_leaves dynamictrees:oak_leaves dynamictrees:spruce_leaves dynamictrees:dark_oak_leaves dynamictrees:acacia_leaves dynamictrees:birch_leaves simplefarming:apple_leaves simplefarming:apricot_leaves simplefarming:banana_leaves simplefarming:cherry_leaves simplefarming:mango_leaves simplefarming:olive_leaves simplefarming:orange_leaves simplefarming:pear_leaves simplefarming:plum_leaves mythicbotany:dreamwood_leaves undergarden:smogstem_leaves undergarden:wigglewood_leaves occultism:otherworld_leaves occultism:otherworld_leaves_natural integrateddynamics:menril_leaves extlights:xmas_leaves extlights:xmas_leaves_bulb extlights:xmas_leaves_bulb_red extlights:xmas_leaves_bulb_green extlights:xmas_leaves_bulb_blue extlights:xmas_leaves_bulb_blinking_redgreen extlights:xmas_leaves_bulb_blinking_redblue extlights:xmas_leaves_bulb_blinking_greenblue extlights:xmas_leaves_bulb_blinking_rgb extlights:xmas_leaves_bulb_smooth_redgreen extlights:xmas_leaves_bulb_smooth_redblue extlights:xmas_leaves_bulb_smooth_greenblue extlights:xmas_leaves_bulb_smooth_rgb techreborn:rubber_leaves blockus:legacy_leaves blockus:white_oak_leaves architects_palette:twisted_leaves twilightforest:twilight_oak_leaves twilightforest:canopy_leaves twilightforest:mangrove_leaves twilightforest:dark_leaves twilightforest:time_leaves twilightforest:transformation_leaves twilightforest:mining_leaves twilightforest:sorting_leaves twilightforest:giant_leaves twilightforest:thorn_leaves tfc:wood/leaves/acacia tfc:wood/leaves/ash tfc:wood/leaves/aspen tfc:wood/leaves/birch tfc:wood/leaves/blackwood tfc:wood/leaves/chestnut tfc:wood/leaves/douglas_fir tfc:wood/leaves/hickory tfc:wood/leaves/kapok tfc:wood/leaves/mangrove tfc:wood/leaves/maple tfc:wood/leaves/oak tfc:wood/leaves/palm tfc:wood/leaves/pine tfc:wood/leaves/rosewood tfc:wood/leaves/sequoia tfc:wood/leaves/spruce tfc:wood/leaves/sycamore tfc:wood/leaves/white_cedar tfc:wood/leaves/willow tfc:plant/cherry_leaves tfc:plant/green_apple_leaves tfc:plant/lemon_leaves tfc:plant/olive_leaves tfc:plant/orange_leaves tfc:plant/peach_leaves tfc:plant/plum_leaves tfc:plant/red_apple_leaves # NO-WAVEABLE SMALL ELEMENTS - block.10032 = sugar_cane tube_coral brain_coral fire_coral bubble_coral horn_coral dead_tube_coral dead_brain_coral dead_fire_coral dead_bubble_coral dead_horn_coral tube_coral_fan brain_coral_fan fire_coral_fan bubble_coral_fan horn_coral_fan dead_tube_coral_fan dead_brain_coral_fan dead_fire_coral_fan dead_bubble_coral_fan dead_horn_coral_fan nether_wart + block.10032 = sugar_cane tube_coral brain_coral fire_coral bubble_coral horn_coral dead_tube_coral dead_brain_coral dead_fire_coral dead_bubble_coral dead_horn_coral tube_coral_fan brain_coral_fan fire_coral_fan bubble_coral_fan horn_coral_fan dead_tube_coral_fan dead_brain_coral_fan dead_fire_coral_fan dead_bubble_coral_fan dead_horn_coral_fan nether_wart tfc:plant/athyrium_fern tfc:plant/canna tfc:plant/goldenrod tfc:plant/pampas_grass tfc:plant/perovskia tfc:plant/rose tfc:plant/beachgrass tfc:plant/bluegrass tfc:plant/bromegrass tfc:plant/fountain_grass tfc:plant/manatee_grass tfc:plant/orchard_grass tfc:plant/ryegrass tfc:plant/scutch_grass tfc:plant/star_grass tfc:plant/timothy_grass tfc:plant/raddia_grass tfc:plant/allium tfc:plant/anthurium tfc:plant/arrowhead tfc:plant/badderlocks tfc:plant/barrel_cactus tfc:plant/blood_lily tfc:plant/blue_ginger tfc:plant/blue_orchid tfc:plant/bur_reed tfc:plant/butterfly_milkweed tfc:plant/black_orchid tfc:plant/calendula tfc:plant/cattail tfc:plant/cobblestone_lichen tfc:plant/coontail tfc:plant/cordgrass tfc:plant/dandelion tfc:plant/dead_bush tfc:plant/desert_flame tfc:plant/duckweed tfc:plant/eel_grass tfc:plant/field_horsetail tfc:plant/foxglove tfc:plant/grape_hyacinth tfc:plant/green_algae tfc:plant/gutweed tfc:plant/guzmania tfc:plant/heliconia tfc:plant/heather tfc:plant/hibiscus tfc:plant/houstonia tfc:plant/kangaroo_paw tfc:plant/king_fern tfc:plant/labrador_tea tfc:plant/lady_fern tfc:plant/laminaria tfc:plant/licorice_fern tfc:plant/artists_conk tfc:plant/lily_of_the_valley tfc:plant/lilac tfc:plant/lotus tfc:plant/maiden_pink tfc:plant/marigold tfc:plant/meads_milkweed tfc:plant/milfoil tfc:plant/morning_glory tfc:plant/philodendron tfc:plant/moss tfc:plant/nasturtium tfc:plant/ostrich_fern tfc:plant/oxeye_daisy tfc:plant/phragmite tfc:plant/pickerelweed tfc:plant/pistia tfc:plant/poppy tfc:plant/primrose tfc:plant/pulsatilla tfc:plant/red_algae tfc:plant/reindeer_lichen tfc:plant/red_sealing_wax_palm tfc:plant/sacred_datura tfc:plant/sagebrush tfc:plant/sago tfc:plant/saguaro_fruit tfc:plant/sapphire_tower tfc:plant/sargassum tfc:plant/sea_lavender tfc:plant/sea_palm tfc:plant/silver_spurflower tfc:plant/snapdragon_pink tfc:plant/snapdragon_red tfc:plant/snapdragon_white tfc:plant/snapdragon_yellow tfc:plant/strelitzia tfc:plant/switchgrass tfc:plant/sword_fern tfc:plant/tall_fescue_grass tfc:plant/toquilla_palm tfc:plant/trillium tfc:plant/tropical_milkweed tfc:plant/tulip_orange tfc:plant/tulip_pink tfc:plant/tulip_red tfc:plant/tulip_white tfc:plant/turtle_grass tfc:plant/vriesea tfc:plant/water_canna tfc:plant/white_water_lily tfc:plant/purple_water_lily tfc:plant/yellow_water_lily tfc:plant/water_taro tfc:plant/yucca tfc:plant/hanging_vines_plant tfc:plant/hanging_vines tfc:plant/spanish_moss_plant tfc:plant/spanish_moss tfc:plant/liana_plant tfc:plant/liana tfc:plant/tree_fern_plant tfc:plant/tree_fern tfc:plant/arundo_plant tfc:plant/arundo tfc:plant/dry_phragmite_plant tfc:plant/dry_phragmite tfc:plant/winged_kelp_plant tfc:plant/winged_kelp tfc:plant/leafy_kelp_plant tfc:plant/leafy_kelp tfc:plant/giant_kelp_plant tfc:plant/giant_kelp_flower tfc:plant/ivy tfc:plant/jungle_vines tfc:plant/saguaro_plant tfc:plant/saguaro tfc:plant/golden_bamboo tfc:plant/golden_bamboo_sapling tfc:wild_crop/barley tfc:wild_crop/oat tfc:wild_crop/rye tfc:wild_crop/maize tfc:wild_crop/wheat tfc:wild_crop/rice tfc:wild_crop/beet tfc:wild_crop/cabbage tfc:wild_crop/carrot tfc:wild_crop/garlic tfc:wild_crop/green_bean tfc:wild_crop/potato tfc:wild_crop/onion tfc:wild_crop/soybean tfc:wild_crop/squash tfc:wild_crop/sugarcane tfc:wild_crop/tomato tfc:wild_crop/jute tfc:wild_crop/papyrus tfc:wild_crop/pumpkin tfc:wild_crop/melon tfc:wild_crop/red_bell_pepper tfc:wild_crop/yellow_bell_pepper tfc:plant/snowberry_bush tfc:plant/bunchberry_bush tfc:plant/gooseberry_bush tfc:plant/cloudberry_bush tfc:plant/strawberry_bush tfc:plant/wintergreen_berry_bush tfc:plant/cranberry_bush # REFLECTIVE - block.10008 = minecraft:water minecraft:flowing_water subwild:water_puddle tfc:fluid/finite_fresh_water tfc:fluid/fresh_water tfc:fluid/finite_salt_water tfc:fluid/salt_water tfc:fluid/finite_river_water tfc:fluid/river_water + block.10008 = minecraft:water minecraft:flowing_water subwild:water_puddle tfc:fluid/finite_fresh_water tfc:fluid/fresh_water tfc:fluid/finite_salt_water tfc:fluid/salt_water tfc:fluid/finite_river_water tfc:fluid/river_water tfc:fluid/spring_water tfc:fluid/finite_spring_water block.10079 = ice slime_block white_stained_glass orange_stained_glass magenta_stained_glass light_blue_stained_glass yellow_stained_glass lime_stained_glass pink_stained_glass gray_stained_glass light_gray_stained_glass cyan_stained_glass purple_stained_glass blue_stained_glass brown_stained_glass green_stained_glass red_stained_glass black_stained_glass white_stained_glass_pane orange_stained_glass_pane magenta_stained_glass_pane light_blue_stained_glass_pane yellow_stained_glass_pane lime_stained_glass_pane pink_stained_glass_pane gray_stained_glass_pane light_gray_stained_glass_pane cyan_stained_glass_pane purple_stained_glass_pane blue_stained_glass_pane brown_stained_glass_pane green_stained_glass_pane red_stained_glass_pane black_stained_glass_pane tinted_glass # EMMISIVE (LIKE GLOWSTONE) @@ -34,7 +34,7 @@ block.10213 = soul_fire # METAL-LIKE - block.10400 = iron_block iron_trapdoor gold_block emerald_block lapis_block diamond_block copper_block exposed_copper weathered_copper oxidized_copper cut_copper exposed_cut_copper weathered_cut_copper oxidized_cut_copper cut_copper_stairs exposed_cut_copper_stairs weathered_cut_copper_stairs oxidized_cut_copper_stairs cut_copper_slab exposed_cut_copper_slab weathered_cut_copper_slab oxidized_cut_copper_slab waxed_cut_copper_slab waxed_weathered_cut_copper_slab waxed_weathered_copper waxed_exposed_copper waxed_copper_block waxed_oxidized_cut_copper_slab waxed_weathered_cut_copper_slab waxed_exposed_cut_copper_slab waxed_cuyt_copper_slab waxed_oxidized_copper waxed_cut_copper waxed_exposed_cut_copper waxed_weathered_cut_copper waxed_oxidized_cut_copper waxed_cut_copper_stairs waxed_exposed_cut_copper_stairs waxed_weathered_cut_copper_stairs waxed_oxidized_cut_copper_stairs heavy_weighted_pressure_plate light_weighted_pressure_plate + block.10400 = iron_block iron_trapdoor gold_block emerald_block lapis_block diamond_block copper_block exposed_copper weathered_copper oxidized_copper cut_copper exposed_cut_copper weathered_cut_copper oxidized_cut_copper cut_copper_stairs exposed_cut_copper_stairs weathered_cut_copper_stairs oxidized_cut_copper_stairs cut_copper_slab exposed_cut_copper_slab weathered_cut_copper_slab oxidized_cut_copper_slab waxed_cut_copper_slab waxed_weathered_cut_copper_slab waxed_weathered_copper waxed_exposed_copper waxed_copper_block waxed_oxidized_cut_copper_slab waxed_weathered_cut_copper_slab waxed_exposed_cut_copper_slab waxed_cuyt_copper_slab waxed_oxidized_copper waxed_cut_copper waxed_exposed_cut_copper waxed_weathered_cut_copper waxed_oxidized_cut_copper waxed_cut_copper_stairs waxed_exposed_cut_copper_stairs waxed_weathered_cut_copper_stairs waxed_oxidized_cut_copper_stairs heavy_weighted_pressure_plate light_weighted_pressure_plate iron_bars tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top tfc:metal/anvil/bismuth_bronze tfc:metal/block/bismuth_bronze tfc:metal/bars/bismuth_bronze tfc:metal/trapdoor/bismuth_bronze tfc:metal/block/bismuth_bronze_stairs tfc:block/metal/block/bismuth_bronze_slab tfc:block/metal/block/bismuth_bronze_slab_top tfc:metal/anvil/black_bronze tfc:metal/block/black_bronze tfc:metal/bars/black_bronze tfc:metal/trapdoor/black_bronze tfc:metal/block/black_bronze_stairs tfc:block/metal/block/black_bronze_slab tfc:block/metal/block/black_bronze_slab_top tfc:metal/anvil/bronze tfc:metal/block/bronze tfc:metal/bars/bronze tfc:metal/trapdoor/bronze tfc:metal/block/bronze_stairs tfc:block/metal/block/bronze_slab tfc:block/metal/block/bronze_slab_top tfc:metal/anvil/brass tfc:metal/block/brass tfc:metal/bars/brass tfc:metal/trapdoor/brass tfc:metal/block/brass_stairs tfc:block/metal/block/brass_slab tfc:block/metal/block/brass_slab_top tfc:metal/anvil/copper tfc:metal/block/copper tfc:metal/bars/copper tfc:metal/trapdoor/copper tfc:metal/block/copper_stairs tfc:block/metal/block/copper_slab tfc:block/metal/block/copper_slab_top tfc:metal/anvil/gold tfc:metal/block/gold tfc:metal/bars/gold tfc:metal/trapdoor/gold tfc:metal/block/gold_stairs tfc:block/metal/block/gold_slab tfc:block/metal/block/gold_slab_top tfc:metal/anvil/nickel tfc:metal/block/nickel tfc:metal/bars/nickel tfc:metal/trapdoor/nickel tfc:metal/block/nickel_stairs tfc:block/metal/block/nickel_slab tfc:block/metal/block/nickel_slab_top tfc:metal/anvil/rose_gold tfc:metal/block/rose_gold tfc:metal/bars/rose_gold tfc:metal/trapdoor/rose_gold tfc:metal/block/rose_gold_stairs tfc:block/metal/block/rose_gold_slab tfc:block/metal/block/rose_gold_slab_top tfc:metal/anvil/silver tfc:metal/block/silver tfc:metal/bars/silver tfc:metal/trapdoor/silver tfc:metal/block/silver_stairs tfc:block/metal/block/silver_slab tfc:block/metal/block/silver_slab_top tfc:metal/anvil/tin tfc:metal/block/tin tfc:metal/bars/tin tfc:metal/trapdoor/tin tfc:metal/block/tin_stairs tfc:block/metal/block/tin_slab tfc:block/metal/block/tin_slab_top tfc:metal/anvil/zinc tfc:metal/block/zinc tfc:metal/bars/zinc tfc:metal/trapdoor/zinc tfc:metal/block/zinc_stairs tfc:block/metal/block/zinc_slab tfc:block/metal/block/zinc_slab_top tfc:metal/anvil/sterling_silver tfc:metal/block/sterling_silver tfc:metal/bars/sterling_silver tfc:metal/trapdoor/sterling_silver tfc:metal/block/sterling_silver_stairs tfc:block/metal/block/sterling_silver_slab tfc:block/metal/block/sterling_silver_slab_top tfc:metal/anvil/wrought_iron tfc:metal/block/wrought_iron tfc:metal/bars/wrought_iron tfc:metal/trapdoor/wrought_iron tfc:metal/block/wrought_iron_stairs tfc:block/metal/block/wrought_iron_slab tfc:block/metal/block/wrought_iron_slab_top tfc:metal/anvil/cast_iron tfc:metal/block/cast_iron tfc:metal/bars/cast_iron tfc:metal/trapdoor/cast_iron tfc:metal/block/cast_iron_stairs tfc:block/metal/block/cast_iron_slab tfc:block/metal/block/cast_iron_slab_top tfc:metal/anvil/pig_iron tfc:metal/block/pig_iron tfc:metal/bars/pig_iron tfc:metal/trapdoor/pig_iron tfc:metal/block/pig_iron_stairs tfc:block/metal/block/pig_iron_slab tfc:block/metal/block/pig_iron_slab_top tfc:metal/anvil/steel tfc:metal/block/steel tfc:metal/bars/steel tfc:metal/trapdoor/steel tfc:metal/block/steel_stairs tfc:block/metal/block/steel_slab tfc:block/metal/block/steel_slab_top tfc:metal/anvil/black_steel tfc:metal/block/black_steel tfc:metal/bars/black_steel tfc:metal/trapdoor/black_steel tfc:metal/block/black_steel_stairs tfc:block/metal/block/black_steel_slab tfc:block/metal/block/black_steel_slab_top tfc:metal/anvil/blue_steel tfc:metal/block/blue_steel tfc:metal/bars/blue_steel tfc:metal/trapdoor/blue_steel tfc:metal/block/blue_steel_stairs tfc:block/metal/block/blue_steel_slab tfc:block/metal/block/blue_steel_slab_top tfc:metal/anvil/red_steel tfc:metal/block/red_steel tfc:metal/bars/red_steel tfc:metal/trapdoor/red_steel tfc:metal/block/red_steel_stairs tfc:block/metal/block/red_steel_slab tfc:block/metal/block/red_steel_slab_top tfc:metal/anvil/weak_steel tfc:metal/block/weak_steel tfc:metal/bars/weak_steel tfc:metal/trapdoor/weak_steel tfc:metal/block/weak_steel_stairs tfc:block/metal/block/weak_steel_slab tfc:block/metal/block/weak_steel_slab_top tfc:metal/anvil/weak_blue_steel tfc:metal/block/weak_blue_steel tfc:metal/bars/weak_blue_steel tfc:metal/trapdoor/weak_blue_steel tfc:metal/block/weak_blue_steel_stairs tfc:block/metal/block/weak_blue_steel_slab tfc:block/metal/block/weak_blue_steel_slab_top tfc:metal/anvil/weak_red_steel tfc:metal/block/weak_red_steel tfc:metal/bars/weak_red_steel tfc:metal/trapdoor/weak_red_steel tfc:metal/block/weak_red_steel_stairs tfc:block/metal/block/weak_red_steel_slab tfc:block/metal/block/weak_red_steel_slab_top tfc:metal/anvil/high_carbon_steel tfc:metal/block/high_carbon_steel tfc:metal/bars/high_carbon_steel tfc:metal/trapdoor/high_carbon_steel tfc:metal/block/high_carbon_steel_stairs tfc:block/metal/block/high_carbon_steel_slab tfc:block/metal/block/high_carbon_steel_slab_top tfc:metal/anvil/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel tfc:metal/bars/high_carbon_black_steel tfc:metal/trapdoor/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel_stairs tfc:block/metal/block/high_carbon_black_steel_slab tfc:block/metal/block/high_carbon_black_steel_slab_top tfc:metal/anvil/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel tfc:metal/bars/high_carbon_blue_steel tfc:metal/trapdoor/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel_stairs tfc:block/metal/block/high_carbon_blue_steel_slab tfc:block/metal/block/high_carbon_blue_steel_slab_top tfc:metal/anvil/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel tfc:metal/bars/high_carbon_red_steel tfc:metal/trapdoor/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel_stairs tfc:block/metal/block/high_carbon_red_steel_slab tfc:block/metal/block/high_carbon_red_steel_slab_top tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top # SAND-LIKE block.10410 = sand red_sand dirt_path diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index f082522a..4b37909d 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -16,7 +16,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.0b +value.ACERCADE.0=v.9.0c #Options ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index e842ba2a..faad46fa 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -16,7 +16,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.0b +value.ACERCADE.0=v.9.0c #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index a63e8ac5..3c8990bc 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -16,7 +16,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.0b +value.ACERCADE.0=v.9.0c #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 25e77198..02eb96f9 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -16,7 +16,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.0b +value.ACERCADE.0=v.9.0c #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index ba177ca3..92016cbe 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -16,7 +16,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.0b +value.ACERCADE.0=v.9.0c #Options ############################# diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index c8dc7f2b..039bd700 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -53,7 +53,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define DOF_STRENGTH 0.09 // [0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13] Depth of field strength. #define AO 1 // [0 1] Turn on for enhanced ambient occlusion (medium performance cost). #define AOSTEPS 4 // [4 5 6 7 8 9 10 11] How many samples are taken for AO (high performance cost). -#define AO_STRENGTH 0.70 // [0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.66 0.70 0.75 0.80 0.85] Ambient occlusion strength (strength NOT affect performance). +#define AO_STRENGTH 0.80 // [0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.66 0.70 0.75 0.80 0.85] Ambient occlusion strength (strength NOT affect performance). #define AA_TYPE 2 // [0 1 2 3] No: Disable antialiasing (not recommended). Denoise only: Supersampling is only used to eliminate noise. TAA: Enable antialiasing (Recommended). Sharp TAA: A subtle sharpening effect is used on the TAA. //#define MOTION_BLUR // Turn on motion blur #define MOTION_BLUR_STRENGTH 1.0 // [0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0] Set Motion blur strength. Lower framerate -> Lower strength and vice versa is recommended. diff --git a/shaders/lib/dither.glsl b/shaders/lib/dither.glsl index 3c9d00b5..ca0e5def 100644 --- a/shaders/lib/dither.glsl +++ b/shaders/lib/dither.glsl @@ -67,18 +67,18 @@ float eclectic_r_dither(vec2 frag) { return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998)) + p4); } -float dither13(vec2 pos) +float dither13(vec2 frag) { - return fract(dot(pos, vec2(0.3076923076923077, 0.5384615384615384))); + return fract(dot(frag, vec2(0.3076923076923077, 0.5384615384615384))); } -float eclectic_dither13(vec2 pos) +float eclectic_dither13(vec2 frag) { - vec2 v = 0.0002314814814814815 * pos + vec2(0.25, 0.0); + vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); float state = fract(dot(v * v, vec2(3571.0))); float p4 = fract(state * state * 7142.0) * 0.075; - return fract(dot(pos, vec2(0.3076923076923077, 0.5384615384615384)) + p4); + return fract(dot(frag, vec2(0.3076923076923077, 0.5384615384615384)) + p4); } float dither_grad_noise(vec2 frag) { @@ -144,14 +144,14 @@ float dither_makeup(vec2 xy) { return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998)) + dither_shift + p4); } - float shifted_dither13(vec2 pos) + float shifted_dither13(vec2 frag) { - return fract(dither_shift + dot(pos, vec2(0.3076923076923077, 0.5384615384615384))); + return fract(dither_shift + dot(frag, vec2(0.3076923076923077, 0.5384615384615384))); } - float shifted_eclectic_dither13(vec2 pos) + float shifted_eclectic_dither13(vec2 frag) { - vec2 v = 0.0002314814814814815 * pos + vec2(0.25, 0.0); + vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); float state = fract(dot(v * v, vec2(3571.0))); float p4 = fract(state * state * 7142.0) * 0.075; @@ -222,9 +222,9 @@ float dither_makeup(vec2 xy) { return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998)) + (frame_mod * 0.4) + p4); } - float shifted_dither13(vec2 pos) + float shifted_dither13(vec2 frag) { - return fract((frame_mod * 0.4) + dot(pos, vec2(0.3076923076923077, 0.5384615384615384))); + return fract((frame_mod * 0.4) + dot(frag, vec2(0.3076923076923077, 0.5384615384615384))); } float shifted_dither_grad_noise(vec2 frag) { diff --git a/shaders/shaders.properties b/shaders/shaders.properties index e1e55773..90f26da7 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -1,15 +1,15 @@ # MakeUp - shader.properties #Profiles -profile.no_effects= SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=0 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=0 SUN_REFLECTION=0 WAVING=0 V_CLOUDS=0 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS -profile.shadowless_low= SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS -profile.shadowless_medium= SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.shadowless_high= !SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.low= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.medium= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.high= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.extreme= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.extremeplus= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.no_effects= SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=0 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.80 AA_TYPE=0 !MOTION_BLUR REFRACTION=0 SUN_REFLECTION=0 WAVING=0 V_CLOUDS=0 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS +profile.shadowless_low= SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.80 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS +profile.shadowless_medium= SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.80 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.shadowless_high= !SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.80 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.low= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.80 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.medium= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.80 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.high= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.80 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.extreme= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.80 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.extremeplus= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.80 AA_TYPE=2 MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS # Default forced options vignette = false diff --git a/shaders/src/position_vertex.glsl b/shaders/src/position_vertex.glsl index 2f910e51..3184fa90 100644 --- a/shaders/src/position_vertex.glsl +++ b/shaders/src/position_vertex.glsl @@ -9,6 +9,10 @@ is_foliage = 0.0; + if (mc_Entity.x == ENTITY_SMALLENTS_NW) { + is_foliage = .4; + } + if ( mc_Entity.x == ENTITY_LOWERGRASS || mc_Entity.x == ENTITY_UPPERGRASS || From af7b9f5ca3fbf388dc2af9e17e6214f630eb8a40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sun, 6 Oct 2024 19:36:54 -0600 Subject: [PATCH 010/147] Version 9.0c --- shaders/lib/config.glsl | 2 +- shaders/shaders.properties | 18 +++++++++--------- shaders/src/finalcolor_dh.glsl | 16 ++++++++++------ 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index 039bd700..c8dc7f2b 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -53,7 +53,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define DOF_STRENGTH 0.09 // [0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13] Depth of field strength. #define AO 1 // [0 1] Turn on for enhanced ambient occlusion (medium performance cost). #define AOSTEPS 4 // [4 5 6 7 8 9 10 11] How many samples are taken for AO (high performance cost). -#define AO_STRENGTH 0.80 // [0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.66 0.70 0.75 0.80 0.85] Ambient occlusion strength (strength NOT affect performance). +#define AO_STRENGTH 0.70 // [0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.66 0.70 0.75 0.80 0.85] Ambient occlusion strength (strength NOT affect performance). #define AA_TYPE 2 // [0 1 2 3] No: Disable antialiasing (not recommended). Denoise only: Supersampling is only used to eliminate noise. TAA: Enable antialiasing (Recommended). Sharp TAA: A subtle sharpening effect is used on the TAA. //#define MOTION_BLUR // Turn on motion blur #define MOTION_BLUR_STRENGTH 1.0 // [0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0] Set Motion blur strength. Lower framerate -> Lower strength and vice versa is recommended. diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 90f26da7..e1e55773 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -1,15 +1,15 @@ # MakeUp - shader.properties #Profiles -profile.no_effects= SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=0 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.80 AA_TYPE=0 !MOTION_BLUR REFRACTION=0 SUN_REFLECTION=0 WAVING=0 V_CLOUDS=0 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS -profile.shadowless_low= SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.80 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS -profile.shadowless_medium= SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.80 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.shadowless_high= !SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.80 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.low= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.80 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.medium= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.80 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.high= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.80 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.extreme= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.80 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.extremeplus= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.80 AA_TYPE=2 MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.no_effects= SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=0 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=0 SUN_REFLECTION=0 WAVING=0 V_CLOUDS=0 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS +profile.shadowless_low= SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS +profile.shadowless_medium= SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.shadowless_high= !SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.low= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.medium= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.high= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.extreme= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.extremeplus= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS # Default forced options vignette = false diff --git a/shaders/src/finalcolor_dh.glsl b/shaders/src/finalcolor_dh.glsl index 992c6164..0c19858f 100644 --- a/shaders/src/finalcolor_dh.glsl +++ b/shaders/src/finalcolor_dh.glsl @@ -9,12 +9,16 @@ ); } #elif defined NETHER - block_color.rgb = - mix( - block_color.rgb, - mix(fogColor * 0.1, vec3(1.0), 0.04), - frog_adjust - ); + #if NETHER_FOG_DISTANCE == 1 + block_color.rgb = mix(fogColor * 0.1, vec3(1.0), 0.04); + #else + block_color.rgb = + mix( + block_color.rgb, + mix(fogColor * 0.1, vec3(1.0), 0.04), + frog_adjust + ); + #endif #else vec3 fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; From c1dde509eacfe8c4a8ac347666a011342781d40e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 7 Oct 2024 23:39:18 -0600 Subject: [PATCH 011/147] Opti I --- shaders/common/basic_blocks_fragment.glsl | 5 +++-- shaders/common/basic_blocks_vertex.glsl | 10 ++++++---- shaders/common/prepare_fragment.glsl | 8 ++++++-- shaders/common/prepare_vertex.glsl | 5 +++-- shaders/src/position_vertex.glsl | 16 ++++++++-------- 5 files changed, 26 insertions(+), 18 deletions(-) diff --git a/shaders/common/basic_blocks_fragment.glsl b/shaders/common/basic_blocks_fragment.glsl index e95de96b..6fc74d06 100644 --- a/shaders/common/basic_blocks_fragment.glsl +++ b/shaders/common/basic_blocks_fragment.glsl @@ -1,13 +1,14 @@ #include "/lib/config.glsl" -/* Config, uniforms, ins, outs */ +/* Uniforms, ins, outs */ varying vec4 tint_color; varying vec2 texcoord; varying vec3 basic_light; +// MAIN FUNCTION ------------------ + void main() { vec4 block_color = tint_color; - block_color.rgb *= basic_light; #include "/src/writebuffers.glsl" diff --git a/shaders/common/basic_blocks_vertex.glsl b/shaders/common/basic_blocks_vertex.glsl index e695394a..a6509d30 100644 --- a/shaders/common/basic_blocks_vertex.glsl +++ b/shaders/common/basic_blocks_vertex.glsl @@ -1,5 +1,6 @@ #include "/lib/config.glsl" +/* Color utils */ #ifdef THE_END #include "/lib/color_utils_end.glsl" #elif defined NETHER @@ -8,6 +9,7 @@ #include "/lib/color_utils.glsl" #endif +/* Uniforms, ins, outs */ uniform float rainStrength; uniform mat4 gbufferProjectionInverse; @@ -19,6 +21,8 @@ varying vec4 tint_color; varying vec2 texcoord; varying vec3 basic_light; +/* Utility functions */ + #include "/lib/luma.glsl" #include "/lib/basic_utils.glsl" @@ -26,15 +30,13 @@ varying vec3 basic_light; #include "/src/taa_offset.glsl" #endif +// MAIN FUNCTION ------------------ + void main() { #include "/src/basiccoords_vertex.glsl" #include "/src/position_vertex.glsl" tint_color = gl_Color; - // vec2 lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy * 1.0323886639676114; - - // vec2 basic_light_2 = (max(lmcoord, vec2(0.065)) - vec2(0.065)) * 1.06951871657754; - basic_light = day_blend( LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, diff --git a/shaders/common/prepare_fragment.glsl b/shaders/common/prepare_fragment.glsl index cfb78ccd..13aeb13d 100644 --- a/shaders/common/prepare_fragment.glsl +++ b/shaders/common/prepare_fragment.glsl @@ -1,6 +1,6 @@ -/* Config, uniforms, ins, outs */ #include "/lib/config.glsl" +/* Color utils */ #ifdef THE_END #include "/lib/color_utils_end.glsl" #elif defined NETHER @@ -9,7 +9,7 @@ #include "/lib/color_utils.glsl" #endif -/* Config, uniforms, ins, outs */ +/* Uniforms, ins, outs */ uniform mat4 gbufferProjectionInverse; uniform float pixel_size_x; uniform float pixel_size_y; @@ -19,8 +19,12 @@ varying vec3 up_vec; varying vec3 hi_sky_color; varying vec3 low_sky_color; +/* Utility functions */ + #include "/lib/dither.glsl" +// MAIN FUNCTION ------------------ + void main() { #if defined THE_END || defined NETHER vec3 block_color = ZENITH_DAY_COLOR; diff --git a/shaders/common/prepare_vertex.glsl b/shaders/common/prepare_vertex.glsl index dca9cbe6..7cf1ec66 100644 --- a/shaders/common/prepare_vertex.glsl +++ b/shaders/common/prepare_vertex.glsl @@ -1,4 +1,3 @@ -/* Config, uniforms, ins, outs */ #include "/lib/config.glsl" /* Color utils */ @@ -18,10 +17,12 @@ varying vec3 up_vec; varying vec3 hi_sky_color; varying vec3 low_sky_color; -/* Functions includes */ +/* Utility functions */ #include "/lib/luma.glsl" +// MAIN FUNCTION ------------------ + void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; diff --git a/shaders/src/position_vertex.glsl b/shaders/src/position_vertex.glsl index 3184fa90..d0446f71 100644 --- a/shaders/src/position_vertex.glsl +++ b/shaders/src/position_vertex.glsl @@ -1,16 +1,13 @@ -// Waving plants calculation -#ifdef FOLIAGE_V +#ifdef FOLIAGE_V // General block shader (it has foliage) #if WAVING == 1 vec4 sub_position = gl_ModelViewMatrix * gl_Vertex; vec4 position = gbufferModelViewInverse * sub_position; - vec3 worldpos = position.xyz + cameraPosition; - is_foliage = 0.0; if (mc_Entity.x == ENTITY_SMALLENTS_NW) { - is_foliage = .4; + is_foliage = 0.4; } if ( @@ -20,7 +17,9 @@ mc_Entity.x == ENTITY_SMALLENTS || mc_Entity.x == ENTITY_LEAVES) { - is_foliage = .4; + vec3 worldpos = position.xyz + cameraPosition; + + is_foliage = 0.4; float weight = float(gl_MultiTexCoord0.t < mc_midTexCoord.t); @@ -44,9 +43,10 @@ mc_Entity.x == ENTITY_UPPERGRASS || mc_Entity.x == ENTITY_SMALLGRASS || mc_Entity.x == ENTITY_SMALLENTS || - mc_Entity.x == ENTITY_LEAVES) + mc_Entity.x == ENTITY_LEAVES || + mc_Entity.x == ENTITY_SMALLENTS_NW) { - is_foliage = .4; + is_foliage = 0.4; } vec4 sub_position = gl_ModelViewMatrix * gl_Vertex; From 2d756e39986ae85e4fe02c8d86533c1a0cc51a6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Tue, 8 Oct 2024 01:52:40 -0600 Subject: [PATCH 012/147] Pos --- shaders/src/position_vertex.glsl | 11 ++++------- shaders/src/position_vertex_dh.glsl | 4 +--- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/shaders/src/position_vertex.glsl b/shaders/src/position_vertex.glsl index d0446f71..bc7aae07 100644 --- a/shaders/src/position_vertex.glsl +++ b/shaders/src/position_vertex.glsl @@ -6,10 +6,6 @@ is_foliage = 0.0; - if (mc_Entity.x == ENTITY_SMALLENTS_NW) { - is_foliage = 0.4; - } - if ( mc_Entity.x == ENTITY_LOWERGRASS || mc_Entity.x == ENTITY_UPPERGRASS || @@ -33,6 +29,8 @@ weight *= lmcoord.y * lmcoord.y; // Evitamos movimiento en cuevas position.xyz += wave_move(worldpos.xzy) * weight * (0.03 + (rainStrength * .05)); + } else if (mc_Entity.x == ENTITY_SMALLENTS_NW) { + is_foliage = 0.4; } gl_Position = gl_ProjectionMatrix * gbufferModelView * position; @@ -83,9 +81,8 @@ #endif #ifndef SHADER_BASIC - vec3 viewPos = gl_Position.xyz / gl_Position.w; - vec4 homopos = gbufferProjectionInverse * vec4(viewPos, 1.0); - viewPos = homopos.xyz / homopos.w; + vec4 homopos = gbufferProjectionInverse * vec4(gl_Position.xyz / gl_Position.w, 1.0); + vec3 viewPos = homopos.xyz / homopos.w; #if defined GBUFFER_CLOUDS gl_FogFragCoord = length(viewPos.xz); #else diff --git a/shaders/src/position_vertex_dh.glsl b/shaders/src/position_vertex_dh.glsl index db216c7d..3083c2d1 100644 --- a/shaders/src/position_vertex_dh.glsl +++ b/shaders/src/position_vertex_dh.glsl @@ -6,8 +6,6 @@ gl_Position = dhProjection * gbufferModelView * position; #endif // Fog intensity calculation - -float fog_intensity_coeff = eye_bright_smooth.y * 0.004166666666666667; #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) float fog_density_coeff = FOG_DENSITY * FOG_ADJUST; #else @@ -21,11 +19,11 @@ float fog_intensity_coeff = eye_bright_smooth.y * 0.004166666666666667; gl_FogFragCoord = length(position.xyz); #if !defined THE_END && !defined NETHER +float fog_intensity_coeff = eye_bright_smooth.y * 0.004166666666666667; frog_adjust = pow( clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fog_intensity_coeff, mix(fog_density_coeff * 0.2, 0.5, rainStrength) ); #else frog_adjust = sqrt(clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0)); - // frog_adjust = clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0); #endif From e0625ab2a20393131a013ffaad5be484d86939ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 12 Oct 2024 22:21:11 -0600 Subject: [PATCH 013/147] Partial light HD broken --- shaders/common/solid_blocks_vertex.glsl | 5 +- shaders/common/water_blocks_vertex.glsl | 22 ++----- shaders/lib/config.glsl | 4 +- shaders/src/hi_sky.glsl | 18 ++++++ shaders/src/light_vertex.glsl | 84 +++++++++++-------------- shaders/src/low_sky.glsl | 18 ++++++ shaders/src/position_vertex_water.glsl | 16 +++++ shaders/src/sky_color_vertex.glsl | 1 + 8 files changed, 101 insertions(+), 67 deletions(-) create mode 100644 shaders/src/hi_sky.glsl create mode 100644 shaders/src/low_sky.glsl create mode 100644 shaders/src/position_vertex_water.glsl diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index e1d91dc2..7d1a7eb4 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -1,7 +1,5 @@ #include "/lib/config.glsl" -// uniform int worldTime; -// uniform int frameCounter; uniform float viewWidth; uniform float viewHeight; @@ -116,9 +114,12 @@ varying vec3 omni_light; void main() { vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + vec3 hi_sky_color; + float visible_sky; #include "/src/basiccoords_vertex.glsl" #include "/src/position_vertex.glsl" + #include "/src/hi_sky.glsl" #include "/src/light_vertex.glsl" #include "/src/fog_vertex.glsl" diff --git a/shaders/common/water_blocks_vertex.glsl b/shaders/common/water_blocks_vertex.glsl index 04f974af..b57f4403 100644 --- a/shaders/common/water_blocks_vertex.glsl +++ b/shaders/common/water_blocks_vertex.glsl @@ -89,26 +89,14 @@ void main() { vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); #include "/src/basiccoords_vertex.glsl" + #include "/src/position_vertex_water.glsl" - vec4 position2 = gl_ModelViewMatrix * gl_Vertex; - fragposition = position2.xyz; - vec4 position = gbufferModelViewInverse * position2; - worldposition = position + vec4(cameraPosition.xyz, 0.0); - gl_Position = gl_ProjectionMatrix * gbufferModelView * position; - - #if AA_TYPE > 1 - gl_Position.xy += taa_offset * gl_Position.w; - #endif - - vec3 viewPos = gl_Position.xyz / gl_Position.w; - vec4 homopos = gbufferProjectionInverse * vec4(viewPos, 1.0); - viewPos = homopos.xyz / homopos.w; - gl_FogFragCoord = length(viewPos.xyz); - - // Reflected sky color calculation - #include "/src/sky_color_vertex.glsl" + // Sky color calculation + #include "/src/hi_sky.glsl" + #include "/src/low_sky.glsl" #include "/src/light_vertex.glsl" + water_normal = normal; tangent = normalize(gl_NormalMatrix * at_tangent.xyz); diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index c8dc7f2b..010e8818 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -66,8 +66,8 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define WATER_ABSORPTION 0.10 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.20 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.30 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38] Sets how much light the water absorbs. Low levels make the water more transparent. High levels make it more opaque. #define COLOR_SCHEME 1 // [0 1 2 3 4 5 6 99] Ethereal: Old default theme. New shoka: Reinterpretation of a classic. Shoka: The classic. Legacy: Very old default. Captain: A cold preset of stylish colors. Psycodelic: Remaster of old vivid scheme. Cocoa: Warm theme. Custom: Choose your colors in advanced options. #define WATER_TEXTURE 0 // [0 1] Enable or disable resource pack water texture. It does not work properly in 1.12. In that case the default value is recommended. -#define AVOID_DARK_LEVEL 0.09 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.18 0.19 0.20] Minimal omni light intensity in caves (percentaje). -#define NIGHT_BRIGHT 0.6 // [0.4 0.5 0.6 0.7 0.8 0.9 1.0] Adjusts the brightness of the night light in exteriors. +#define AVOID_DARK_LEVEL 0.030 // [0.000 0.005 0.010 0.015 0.020 0.025 0.030 0.035 0.040 0.045 0.050 0.055 0.060] Minimal omni light intensity in caves. +#define NIGHT_BRIGHT 0.60 // [0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70] Adjusts the brightness of the night light in exteriors. #define V_CLOUDS 1 // [0 1 2] Volumetric static: The clouds move, but they keep their shape. Volumetric dynamic: Clouds change shape over time, a different cloud landscape every time (medium performance hit). Vanilla: Original vanilla clouds. #define CLOUD_VOL_STYLE 0 // [0 1] Set the volumetric cloud style. #define CLOUD_REFLECTION // Set off-screen volumetric clouds reflection (volumetric clouds must be active). diff --git a/shaders/src/hi_sky.glsl b/shaders/src/hi_sky.glsl new file mode 100644 index 00000000..979ae9da --- /dev/null +++ b/shaders/src/hi_sky.glsl @@ -0,0 +1,18 @@ +#ifdef UNKNOWN_DIM + vec3 hi_sky_color_rgb = skyColor; + hi_sky_color = rgb_to_xyz(hi_sky_color_rgb); +#else + vec3 hi_sky_color_rgb = day_blend( + ZENITH_SUNSET_COLOR, + ZENITH_DAY_COLOR, + ZENITH_NIGHT_COLOR + ); + + hi_sky_color_rgb = mix( + hi_sky_color_rgb, + ZENITH_SKY_RAIN_COLOR * luma(hi_sky_color_rgb), + rainStrength + ); + + hi_sky_color = rgb_to_xyz(hi_sky_color_rgb); +#endif \ No newline at end of file diff --git a/shaders/src/light_vertex.glsl b/shaders/src/light_vertex.glsl index 01fe7cf6..524cc91d 100644 --- a/shaders/src/light_vertex.glsl +++ b/shaders/src/light_vertex.glsl @@ -1,18 +1,13 @@ tint_color = gl_Color; -// Luz nativa (lmcoord.x: candela, lmcoord.y: cielo) ---- +// Native light (lmcoord.x: candel, lmcoord.y: sky) ---- vec2 illumination = lmcoord; -illumination.y = (max(illumination.y, 0.065) - 0.065) * 1.06951871657754; -// Visibilidad del cielo -#ifdef WATER_F - visible_sky = illumination.y; -#else - float visible_sky = illumination.y; -#endif -visible_sky = clamp(visible_sky, 0.0, 1.0); +// Sky visibility +illumination.y = (max(illumination.y, 0.065) - 0.065) * 1.06951871657754; +visible_sky = clamp(illumination.y, 0.0, 1.0); -// Ajuste de intensidad luminosa bajo el agua +// Underwater light adjust if (isEyeInWater == 1) { visible_sky = (visible_sky * .95) + .05; } @@ -21,7 +16,7 @@ if (isEyeInWater == 1) { visible_sky = (visible_sky * 0.6) + 0.4; #endif -// Intensidad y color de luz de candelas +// Candels color and intensity #if defined UNKNOWN_DIM candle_color = CANDLE_BASELIGHT * ((illumination.x * illumination.x) + sixth_pow(illumination.x * 1.205)) * 2.75; @@ -35,12 +30,9 @@ if (isEyeInWater == 1) { float hand_dist; vec3 hand_light; - if (heldItemId == 11001 || heldItemId2 == 11001) { // Normal light - hand_dist = (1.0 - clamp((gl_FogFragCoord * 0.06666666666666667), 0.0, 1.0)); - hand_light = CANDLE_BASELIGHT * (pow(hand_dist, 1.5) + sixth_pow(hand_dist * 1.17)); - candle_color = max(candle_color, hand_light); - } else if (heldItemId == 11002 || heldItemId2 == 11002) { - hand_dist = (1.0 - clamp((gl_FogFragCoord * 0.06666666666666667) + 0.5, 0.0, 1.0)); + if (heldItemId == 11001 || heldItemId2 == 11001 || heldItemId == 11002 || heldItemId2 == 11002) { + float dist_offset = (heldItemId == 11001 || heldItemId2 == 11001) ? 0.0 : 0.5; + hand_dist = (1.0 - clamp((gl_FogFragCoord * 0.06666666666666667) + dist_offset, 0.0, 1.0)); hand_light = CANDLE_BASELIGHT * (pow(hand_dist, 1.5) + sixth_pow(hand_dist * 1.17)); candle_color = max(candle_color, hand_light); } @@ -48,7 +40,7 @@ if (isEyeInWater == 1) { candle_color = clamp(candle_color, vec3(0.0), vec3(4.0)); -// Atenuación por dirección de luz directa =================================== +// Atenuation by light angle =================================== #if defined THE_END || defined NETHER vec3 sun_vec = normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; @@ -73,10 +65,10 @@ if (length(normal) != 0.0) { // Workaround for undefined normals mix(-sun_light_strength, sun_light_strength, light_mix); #endif -// Intensidad por dirección +// Omni light intensity changes by angle float omni_strength = (direct_light_strength * .125) + 1.0; -// Calculamos color de luz directa +// Direct light color #ifdef UNKNOWN_DIM direct_light_color = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; #else @@ -87,9 +79,10 @@ float omni_strength = (direct_light_strength * .125) + 1.0; ); #endif -#ifdef FOLIAGE_V // Puede haber plantas en este shader +// Direct light strenght -- +#ifdef FOLIAGE_V // This shader has foliage float original_direct_light_strength = clamp(direct_light_strength, 0.0, 1.0) * 0.9 + 0.1; - if (is_foliage > .2) { // Es "planta" y se atenúa luz por dirección + if (is_foliage > .2) { // It's foliage, light is atenuated by angle #ifdef SHADOW_CASTING direct_light_strength = sqrt(abs(direct_light_strength)); #else @@ -104,19 +97,10 @@ float omni_strength = (direct_light_strength * .125) + 1.0; direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); #endif +// Omni light color #if defined THE_END || defined NETHER omni_light = LIGHT_DAY_COLOR; #else - // Calculamos color de luz ambiental - - vec3 hi_sky_color = day_blend( - ZENITH_SUNSET_COLOR, - ZENITH_DAY_COLOR, - ZENITH_NIGHT_COLOR - ); - - vec3 sky_rain_color = ZENITH_SKY_RAIN_COLOR * luma(hi_sky_color); - #ifdef SIMPLE_AUTOEXP direct_light_color = mix( direct_light_color, @@ -131,28 +115,36 @@ float omni_strength = (direct_light_strength * .125) + 1.0; ); #endif - hi_sky_color = mix( - hi_sky_color, - sky_rain_color, - rainStrength - ); + // Minimal light + // float sky_day_pseudoluma = color_average(ZENITH_DAY_COLOR); + // float current_sky_pseudoluma = color_average(hi_sky_color_rgb); + + // float luma_ratio = sky_day_pseudoluma / current_sky_pseudoluma; + + // // float sky_day_luma = luma(ZENITH_DAY_COLOR); + // // float luma_ratio = sky_day_luma / hi_sky_color.y; - float sky_day_pseudoluma = color_average(ZENITH_DAY_COLOR); - float current_sky_pseudoluma = color_average(hi_sky_color); + // float omni_minimal = AVOID_DARK_LEVEL * luma_ratio; + // float visible_avoid_dark = (pow(visible_sky, 1.5) * (1.0 - omni_minimal)) + omni_minimal; - float luma_ratio = sky_day_pseudoluma / current_sky_pseudoluma; - // Luz mínima - float omni_minimal = AVOID_DARK_LEVEL * luma_ratio; - float visible_avoid_dark = (pow(visible_sky, 1.5) * (1.0 - omni_minimal)) + omni_minimal; + // omni_light = visible_avoid_dark * omni_strength * + // mix(hi_sky_color_rgb, direct_light_color * 0.75, OMNI_TINT); - omni_light = visible_avoid_dark * omni_strength * - mix(hi_sky_color, direct_light_color * 0.75, OMNI_TINT); + // Minimal light + vec3 omni_color = mix(hi_sky_color_rgb, direct_light_color * 0.75, OMNI_TINT); + float omni_color_luma = color_average(omni_color); + float luma_ratio = AVOID_DARK_LEVEL / omni_color_luma; + vec3 omni_color_min = omni_color * luma_ratio; + omni_color = max(omni_color, omni_color_min); + + // omni_light = omni_color * mix(AVOID_DARK_LEVEL, 1.0, visible_sky); + omni_light = mix(omni_color_min, omni_color, visible_sky); #endif +// Avoid flat illumination in caves for entities #ifdef CAVEENTITY_V - // Avoid flat illumination in caves for entities float candle_cave_strength = (direct_light_strength * .5) + .5; candle_cave_strength = mix(candle_cave_strength, 1.0, visible_sky); diff --git a/shaders/src/low_sky.glsl b/shaders/src/low_sky.glsl new file mode 100644 index 00000000..40deba36 --- /dev/null +++ b/shaders/src/low_sky.glsl @@ -0,0 +1,18 @@ +#ifdef UNKNOWN_DIM + vec3 low_sky_color_rgb = fogColor; + low_sky_color = rgb_to_xyz(low_sky_color_rgb); +#else + vec3 low_sky_color_rgb = day_blend( + HORIZON_SUNSET_COLOR, + HORIZON_DAY_COLOR, + HORIZON_NIGHT_COLOR + ); + + low_sky_color_rgb = mix( + low_sky_color_rgb, + HORIZON_SKY_RAIN_COLOR * luma(low_sky_color_rgb), + rainStrength + ); + + low_sky_color = rgb_to_xyz(low_sky_color_rgb); +#endif \ No newline at end of file diff --git a/shaders/src/position_vertex_water.glsl b/shaders/src/position_vertex_water.glsl new file mode 100644 index 00000000..1d53694e --- /dev/null +++ b/shaders/src/position_vertex_water.glsl @@ -0,0 +1,16 @@ +vec4 position2 = gl_ModelViewMatrix * gl_Vertex; +fragposition = position2.xyz; +vec4 position = gbufferModelViewInverse * position2; +worldposition = position + vec4(cameraPosition.xyz, 0.0); +gl_Position = gl_ProjectionMatrix * gbufferModelView * position; + +#if AA_TYPE > 1 + gl_Position.xy += taa_offset * gl_Position.w; +#endif + +vec4 homopos = gbufferProjectionInverse * vec4(gl_Position.xyz / gl_Position.w, 1.0); +vec3 viewPos = homopos.xyz / homopos.w; +gl_FogFragCoord = length(viewPos); + + + diff --git a/shaders/src/sky_color_vertex.glsl b/shaders/src/sky_color_vertex.glsl index 3fe664dd..d39126b2 100644 --- a/shaders/src/sky_color_vertex.glsl +++ b/shaders/src/sky_color_vertex.glsl @@ -26,6 +26,7 @@ rainStrength ); + vec3 hi_sky_color_rgb = hi_sky_color; #if !defined DH_BLOCK && !defined DH_WATER hi_sky_color = rgb_to_xyz(hi_sky_color); low_sky_color = rgb_to_xyz(low_sky_color); From 2438694e5c6d2424a4182739c84661ee9c967bc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sun, 13 Oct 2024 12:26:36 -0600 Subject: [PATCH 014/147] Light DH --- shaders/common/composite_fragment.glsl | 24 ++------- shaders/common/composite_vertex.glsl | 29 ++--------- shaders/common/final_vertex.glsl | 48 ++++++------------ shaders/common/solid_dh_blocks_vertex.glsl | 4 +- shaders/common/solid_dh_water_vertex.glsl | 6 +-- shaders/lang/en_US.lang | 2 - shaders/lang/ko_KR.lang | 2 - shaders/lang/sv_SE.lang | 2 - shaders/lang/tr_TR.lang | 2 - shaders/lang/zh_CN.lang | 2 - shaders/lib/color_utils.glsl | 13 ----- shaders/lib/color_utils_end.glsl | 7 --- shaders/lib/color_utils_nether.glsl | 7 --- shaders/lib/config.glsl | 5 -- shaders/shaders.properties | 20 ++++---- shaders/src/light_vertex.glsl | 35 ++----------- shaders/src/light_vertex_dh.glsl | 58 +++++----------------- 17 files changed, 53 insertions(+), 213 deletions(-) diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index 8e6cf4c3..e37a391d 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -85,9 +85,7 @@ varying float exposure; #include "/lib/volumetric_light.glsl" #endif -#if !defined SIMPLE_AUTOEXP - const bool colortex1MipmapEnabled = true; -#endif +const bool colortex1MipmapEnabled = true; void main() { vec4 block_color = texture2D(colortex1, texcoord); @@ -256,33 +254,17 @@ void main() { #endif #ifdef BLOOM - // Bloom source - #ifdef SIMPLE_AUTOEXP - float bloom_luma = - smoothstep(0.825, 1.0, luma(block_color.rgb * exposure)) * 0.4; - #else + // Bloom source float bloom_luma = - smoothstep(0.85, 1.0, luma(block_color.rgb * exposure)) * 0.5; - #endif + smoothstep(0.85, 1.0, luma(block_color.rgb * exposure)) * 0.5; - #if defined SIMPLE_AUTOEXP - /* DRAWBUFFERS:14 */ - gl_FragData[0] = block_color; - gl_FragData[1] = block_color * bloom_luma; - #else /* DRAWBUFFERS:146 */ gl_FragData[0] = block_color; gl_FragData[1] = block_color * bloom_luma; gl_FragData[2] = vec4(exposure, 0.0, 0.0, 0.0); - #endif #else - #if defined SIMPLE_AUTOEXP - /* DRAWBUFFERS:1 */ - gl_FragData[0] = block_color; - #else /* DRAWBUFFERS:16 */ gl_FragData[0] = block_color; gl_FragData[1] = vec4(exposure, 0.0, 0.0, 0.0); - #endif #endif } \ No newline at end of file diff --git a/shaders/common/composite_vertex.glsl b/shaders/common/composite_vertex.glsl index 6e3962fa..c865566b 100644 --- a/shaders/common/composite_vertex.glsl +++ b/shaders/common/composite_vertex.glsl @@ -27,13 +27,11 @@ uniform ivec2 eyeBrightnessSmooth; uniform mat4 gbufferProjectionInverse; #endif -#if !defined SIMPLE_AUTOEXP - uniform sampler2D colortex1; - uniform sampler2D gaux3; - uniform float viewWidth; - uniform float viewHeight; - uniform float frameTime; -#endif +uniform sampler2D colortex1; +uniform sampler2D gaux3; +uniform float viewWidth; +uniform float viewHeight; +uniform float frameTime; varying vec2 texcoord; varying vec3 direct_light_color; @@ -75,22 +73,6 @@ void main() { // Exposure #if !defined UNKNOWN_DIM - #if defined SIMPLE_AUTOEXP - - float exposure_coef = day_blend_float( - EXPOSURE_SUNSET, - EXPOSURE_DAY, - EXPOSURE_NIGHT - ); - - float candle_bright = eye_bright_smooth.x * 0.0003125; // (0.004166666666666667 * 0.075) - - exposure = - ((eye_bright_smooth.y * 0.004166666666666667) * exposure_coef) + candle_bright; - - // Map from 1.0 - 0.0 to 1.0 - 3.4 - exposure = (exposure * -2.4) + 3.4; - #else float mipmap_level = log2(min(viewWidth, viewHeight)) - 1.0; vec3 exposure_col = texture2DLod(colortex1, vec2(0.5), mipmap_level).rgb; @@ -105,7 +87,6 @@ void main() { exposure = (exp(-exposure) * 3.03) + 0.6; exposure = mix(exposure, prev_exposure, exp(-frameTime * 1.25)); - #endif #else exposure = 1.0; #endif diff --git a/shaders/common/final_vertex.glsl b/shaders/common/final_vertex.glsl index 43e38399..618724ac 100644 --- a/shaders/common/final_vertex.glsl +++ b/shaders/common/final_vertex.glsl @@ -3,53 +3,33 @@ /* Config, uniforms, ins, outs */ #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif uniform ivec2 eyeBrightnessSmooth; - -#if !defined SIMPLE_AUTOEXP - uniform sampler2D gaux3; - uniform float viewWidth; -#endif +uniform sampler2D gaux3; +uniform float viewWidth; varying vec2 texcoord; varying float exposure; - #include "/lib/luma.glsl" +#include "/lib/luma.glsl" void main() { - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - texcoord = gl_MultiTexCoord0.xy; - - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - - // Tonemaping --- - // x: Block, y: Sky --- - #if !defined UNKNOWN_DIM - #if defined SIMPLE_AUTOEXP - - float exposure_coef = day_blend_float( - EXPOSURE_SUNSET, - EXPOSURE_DAY, - EXPOSURE_NIGHT - ); - - float candle_bright = eye_bright_smooth.x * 0.0003125; // (0.004166666666666667 * 0.075) + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + texcoord = gl_MultiTexCoord0.xy; - exposure = - ((eye_bright_smooth.y * 0.004166666666666667) * exposure_coef) + candle_bright; + vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - // Map from 1.0 - 0.0 to 1.0 - 3.4 - exposure = (exposure * -2.4) + 3.4; + // Tonemaping --- + // x: Block, y: Sky --- + #if !defined UNKNOWN_DIM + exposure = texture2D(gaux3, vec2(0.5)).r; #else - exposure = texture2D(gaux3, vec2(0.5)).r; + exposure = 1.0; #endif - #else - exposure = 1.0; - #endif } diff --git a/shaders/common/solid_dh_blocks_vertex.glsl b/shaders/common/solid_dh_blocks_vertex.glsl index db9d866b..35946cbe 100644 --- a/shaders/common/solid_dh_blocks_vertex.glsl +++ b/shaders/common/solid_dh_blocks_vertex.glsl @@ -46,11 +46,11 @@ varying float frog_adjust; void main() { vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + float visible_sky; vec3 hi_sky_color; - vec3 low_sky_color; #include "/src/basiccoords_vertex_dh.glsl" #include "/src/position_vertex_dh.glsl" - #include "/src/sky_color_vertex.glsl" + #include "/src/hi_sky.glsl" #include "/src/light_vertex_dh.glsl" } diff --git a/shaders/common/solid_dh_water_vertex.glsl b/shaders/common/solid_dh_water_vertex.glsl index f1abbebc..71e83188 100644 --- a/shaders/common/solid_dh_water_vertex.glsl +++ b/shaders/common/solid_dh_water_vertex.glsl @@ -58,12 +58,10 @@ void main() { vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); #include "/src/basiccoords_vertex_dh.glsl" #include "/src/position_vertex_dh.glsl" - #include "/src/sky_color_vertex.glsl" + #include "/src/hi_sky.glsl" + #include "/src/low_sky.glsl" #include "/src/light_vertex_dh.glsl" - hi_sky_color = rgb_to_xyz(hi_sky_color); - low_sky_color = rgb_to_xyz(low_sky_color); - vec4 position2 = gl_ModelViewMatrix * gl_Vertex; fragposition = position2.xyz; diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 4b37909d..0ab5f06f 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -243,8 +243,6 @@ option.USE_BASIC_SH=Custom dimensions basic shader option.MATERIAL_GLOSS=Material gloss -option.SIMPLE_AUTOEXP=Simpler exposure - option.DYN_HAND_LIGHT=Fake dynamic light #Screens diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index faad46fa..f65075ec 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -243,8 +243,6 @@ option.USE_BASIC_SH=커스텀 차원 기본 셰이더 사용 option.MATERIAL_GLOSS=재료 광택 -option.SIMPLE_AUTOEXP=간단한 노출 - option.DYN_HAND_LIGHT=가짜 동적 빛 #화면 diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 3c8990bc..3ac9b893 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -242,8 +242,6 @@ option.USE_BASIC_SH=Enkel shader för anpassade dimensioner option.MATERIAL_GLOSS=Materialglans -option.SIMPLE_AUTOEXP=Enklare exponering - option.DYN_HAND_LIGHT=Konstgjort dynamiskt ljus #Screens diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 02eb96f9..5010e43e 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -239,8 +239,6 @@ option.USE_BASIC_SH=Özel boyutsal basit shader option.MATERIAL_GLOSS=Malzeme parlaklığı -option.SIMPLE_AUTOEXP=Daha basit pozlama - option.DYN_HAND_LIGHT=Sahte dinamik ışık #Screens diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 92016cbe..2ae1a248 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -243,8 +243,6 @@ option.USE_BASIC_SH=自定义维度基础着色器 option.MATERIAL_GLOSS=材质光泽 -option.SIMPLE_AUTOEXP=简单曝光 - option.DYN_HAND_LIGHT=伪动态光源 #Screens diff --git a/shaders/lib/color_utils.glsl b/shaders/lib/color_utils.glsl index 4fd0b990..b365b174 100644 --- a/shaders/lib/color_utils.glsl +++ b/shaders/lib/color_utils.glsl @@ -155,19 +155,6 @@ uniform int moonPhase; #include "/lib/day_blend.glsl" -#if defined SIMPLE_AUTOEXP - // Ambient color luma per hour in exposure calculation - #if !defined UNKNOWN_DIM - #define EXPOSURE_DAY 1.0 - #define EXPOSURE_SUNSET 1.0 - #define EXPOSURE_NIGHT 0.01 - #else - #define EXPOSURE_DAY 1.0 - #define EXPOSURE_SUNSET 1.0 - #define EXPOSURE_NIGHT 1.0 - #endif -#endif - // Fog parameter per hour #if VOL_LIGHT == 1 || (VOL_LIGHT == 2 && defined SHADOW_CASTING) || defined UNKNOWN_DIM #define FOG_DENSITY 3.0 diff --git a/shaders/lib/color_utils_end.glsl b/shaders/lib/color_utils_end.glsl index 3f7eba0c..2be4ff16 100644 --- a/shaders/lib/color_utils_end.glsl +++ b/shaders/lib/color_utils_end.glsl @@ -37,13 +37,6 @@ uniform float night_mixer; #include "/lib/day_blend.glsl" -#if defined SIMPLE_AUTOEXP - // Ambient color luma per hour in exposure calculation - #define EXPOSURE_DAY 1.0 - #define EXPOSURE_SUNSET 1.0 - #define EXPOSURE_NIGHT 1.0 -#endif - // Fog parameter per hour #if VOL_LIGHT == 1 || (VOL_LIGHT == 2 && defined SHADOW_CASTING) #define FOG_DENSITY 1.0 diff --git a/shaders/lib/color_utils_nether.glsl b/shaders/lib/color_utils_nether.glsl index 6ea81818..59356fb7 100644 --- a/shaders/lib/color_utils_nether.glsl +++ b/shaders/lib/color_utils_nether.glsl @@ -37,13 +37,6 @@ uniform float night_mixer; #include "/lib/day_blend.glsl" -#if defined SIMPLE_AUTOEXP - // Ambient color luma per hour in exposure calculation - #define EXPOSURE_DAY 1.0 - #define EXPOSURE_SUNSET 1.0 - #define EXPOSURE_NIGHT 1.0 -#endif - // Fog parameter per hour #define FOG_DAY 1.0 #define FOG_SUNSET 1.0 diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index 010e8818..8ea8547c 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -85,7 +85,6 @@ Javier Garduño - GNU Lesser General Public License v3.0 // #define DEBUG_MODE // Set debug mode. #define BLOCKLIGHT_TEMP 1 // [0 1 2 3 4] Set blocklight temperature #define MATERIAL_GLOSS // A very subtle effect that adds some ability to reflect direct light on some blocks. It is most noticeable on metals and luminous objects. -// #define SIMPLE_AUTOEXP // Toggle between advanced and simple auto-exposure. The advanced version may work strangely on some GPUs. If the brightness of the scene changes very abruptly, use the simplest. #define DYN_HAND_LIGHT // Toggle the fake dynamic light // Custom colors @@ -135,10 +134,6 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define OMNI_TINT_CUSTOM 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 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] -#ifdef SIMPLE_AUTOEXP - // Don't remove -#endif - #ifdef FOG_ACTIVE // Don't remove #endif diff --git a/shaders/shaders.properties b/shaders/shaders.properties index e1e55773..4e8fc9a6 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -1,15 +1,15 @@ # MakeUp - shader.properties #Profiles -profile.no_effects= SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=0 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=0 SUN_REFLECTION=0 WAVING=0 V_CLOUDS=0 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS -profile.shadowless_low= SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS -profile.shadowless_medium= SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.shadowless_high= !SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.low= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.medium= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.high= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.extreme= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.extremeplus= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.no_effects= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=0 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=0 SUN_REFLECTION=0 WAVING=0 V_CLOUDS=0 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS +profile.shadowless_low= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS +profile.shadowless_medium= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.shadowless_high= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.extreme= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS # Default forced options vignette = false @@ -44,7 +44,7 @@ program.world-1/shadow.enabled=SHADOW_CASTING # Config main screen screen.columns = 3 -screen = ACERCADE WAVING COLOR_SCHEME BLOOM REFLECTION_SLIDER AO SUN_REFLECTION SHADOW_CASTING V_CLOUDS CLOUD_REFLECTION COLORED_SHADOW AA_TYPE REFRACTION VOL_LIGHT DOF MATERIAL_GLOSS CHROMA_ABER SIMPLE_AUTOEXP MOTION_BLUR [ADVANCED_SCREEN] +screen = ACERCADE WAVING COLOR_SCHEME BLOOM REFLECTION_SLIDER AO SUN_REFLECTION SHADOW_CASTING V_CLOUDS CLOUD_REFLECTION COLORED_SHADOW AA_TYPE REFRACTION VOL_LIGHT DOF MATERIAL_GLOSS CHROMA_ABER MOTION_BLUR [ADVANCED_SCREEN] # Sub-screens: screen.ADVANCED_SCREEN.columns=3 diff --git a/shaders/src/light_vertex.glsl b/shaders/src/light_vertex.glsl index 524cc91d..2fb5a539 100644 --- a/shaders/src/light_vertex.glsl +++ b/shaders/src/light_vertex.glsl @@ -101,35 +101,11 @@ float omni_strength = (direct_light_strength * .125) + 1.0; #if defined THE_END || defined NETHER omni_light = LIGHT_DAY_COLOR; #else - #ifdef SIMPLE_AUTOEXP - direct_light_color = mix( - direct_light_color, - ZENITH_SKY_RAIN_COLOR * luma(direct_light_color), - rainStrength - ); - #else - direct_light_color = mix( - direct_light_color, - ZENITH_SKY_RAIN_COLOR * luma(direct_light_color) * 0.4, - rainStrength - ); - #endif - - // Minimal light - // float sky_day_pseudoluma = color_average(ZENITH_DAY_COLOR); - // float current_sky_pseudoluma = color_average(hi_sky_color_rgb); - - // float luma_ratio = sky_day_pseudoluma / current_sky_pseudoluma; - - // // float sky_day_luma = luma(ZENITH_DAY_COLOR); - // // float luma_ratio = sky_day_luma / hi_sky_color.y; - - // float omni_minimal = AVOID_DARK_LEVEL * luma_ratio; - // float visible_avoid_dark = (pow(visible_sky, 1.5) * (1.0 - omni_minimal)) + omni_minimal; - - - // omni_light = visible_avoid_dark * omni_strength * - // mix(hi_sky_color_rgb, direct_light_color * 0.75, OMNI_TINT); + direct_light_color = mix( + direct_light_color, + ZENITH_SKY_RAIN_COLOR * luma(direct_light_color) * 0.4, + rainStrength + ); // Minimal light vec3 omni_color = mix(hi_sky_color_rgb, direct_light_color * 0.75, OMNI_TINT); @@ -138,7 +114,6 @@ float omni_strength = (direct_light_strength * .125) + 1.0; vec3 omni_color_min = omni_color * luma_ratio; omni_color = max(omni_color, omni_color_min); - // omni_light = omni_color * mix(AVOID_DARK_LEVEL, 1.0, visible_sky); omni_light = mix(omni_color_min, omni_color, visible_sky); #endif diff --git a/shaders/src/light_vertex_dh.glsl b/shaders/src/light_vertex_dh.glsl index f9e06a42..9ae6cc5c 100644 --- a/shaders/src/light_vertex_dh.glsl +++ b/shaders/src/light_vertex_dh.glsl @@ -7,14 +7,7 @@ tint_color = gl_Color; vec2 illumination = lmcoord; #endif illumination.y = (max(illumination.y, 0.065) - 0.065) * 1.06951871657754; - -// Visibilidad del cielo -#if defined WATER_F || defined DH_WATER - visible_sky = illumination.y; -#else - float visible_sky = illumination.y; -#endif -visible_sky = clamp(visible_sky, 0.0, 1.0); +visible_sky = clamp(illumination.y, 0.0, 1.0); #if defined UNKNOWN_DIM visible_sky = (visible_sky * 0.6) + 0.4; @@ -75,47 +68,20 @@ direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); #if defined THE_END || defined NETHER omni_light = LIGHT_DAY_COLOR; #else - // Calculamos color de luz ambiental - - // vec3 hi_sky_color = day_blend( - // ZENITH_SUNSET_COLOR, - // ZENITH_DAY_COLOR, - // ZENITH_NIGHT_COLOR - // ); - - vec3 sky_rain_color = ZENITH_SKY_RAIN_COLOR * luma(hi_sky_color); - - #ifdef SIMPLE_AUTOEXP - direct_light_color = mix( - direct_light_color, - ZENITH_SKY_RAIN_COLOR * luma(direct_light_color), - rainStrength - ); - #else - direct_light_color = mix( - direct_light_color, - ZENITH_SKY_RAIN_COLOR * luma(direct_light_color) * 0.4, - rainStrength - ); - #endif - - hi_sky_color = mix( - hi_sky_color, - sky_rain_color, + direct_light_color = mix( + direct_light_color, + ZENITH_SKY_RAIN_COLOR * luma(direct_light_color) * 0.4, rainStrength ); - float sky_day_pseudoluma = color_average(ZENITH_DAY_COLOR); - float current_sky_pseudoluma = color_average(hi_sky_color); - - float luma_ratio = sky_day_pseudoluma / current_sky_pseudoluma; - - // Luz mínima - float omni_minimal = AVOID_DARK_LEVEL * luma_ratio; - float visible_avoid_dark = (pow(visible_sky, 1.5) * (1.0 - omni_minimal)) + omni_minimal; - - omni_light = visible_avoid_dark * omni_strength * - mix(hi_sky_color, direct_light_color * 0.75, OMNI_TINT); + // Minimal light + vec3 omni_color = mix(hi_sky_color_rgb, direct_light_color * 0.75, OMNI_TINT); + float omni_color_luma = color_average(omni_color); + float luma_ratio = AVOID_DARK_LEVEL / omni_color_luma; + vec3 omni_color_min = omni_color * luma_ratio; + omni_color = max(omni_color, omni_color_min); + + omni_light = mix(omni_color_min, omni_color, visible_sky); #endif From 0daf8f689edb894957632bc3fe8018a5402b544a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sun, 13 Oct 2024 19:19:36 -0600 Subject: [PATCH 015/147] Refactor I --- shaders/common/basic_blocks_fragment.glsl | 6 +- shaders/common/basic_blocks_vertex.glsl | 64 ++- shaders/common/clouds_blocks_fragment.glsl | 38 +- shaders/common/clouds_blocks_vertex.glsl | 31 +- shaders/common/composite1_fragment.glsl | 78 ++-- shaders/common/composite1_vertex.glsl | 9 +- shaders/common/composite2_fragment.glsl | 160 ++++---- shaders/common/composite2_vertex.glsl | 9 +- shaders/common/composite_fragment.glsl | 373 ++++++++--------- shaders/common/composite_vertex.glsl | 151 ++++--- shaders/common/damage_fragment.glsl | 13 +- shaders/common/damage_vertex.glsl | 21 +- shaders/common/deferred_fragment.glsl | 270 ++++++------- shaders/common/deferred_vertex.glsl | 58 +-- shaders/common/final_fragment.glsl | 122 +++--- shaders/common/final_vertex.glsl | 12 +- shaders/common/glint_blocks_fragment.glsl | 13 +- shaders/common/glint_blocks_vertex.glsl | 15 +- shaders/common/line_blocks_fragment.glsl | 9 +- shaders/common/line_blocks_vertex.glsl | 41 +- shaders/common/prepare_fragment.glsl | 65 ++- shaders/common/prepare_vertex.glsl | 20 +- shaders/common/shadow_fragment.glsl | 21 +- shaders/common/shadow_vertex.glsl | 36 +- shaders/common/skybasic_fragment.glsl | 118 +++--- shaders/common/skybasic_vertex.glsl | 62 +-- shaders/common/skytextured_fragment.glsl | 48 ++- shaders/common/skytextured_vertex.glsl | 52 +-- shaders/common/solid_blocks_fragment.glsl | 300 +++++++------- shaders/common/solid_blocks_vertex.glsl | 186 ++++----- shaders/common/solid_dh_blocks_fragment.glsl | 98 ++--- shaders/common/solid_dh_blocks_vertex.glsl | 39 +- shaders/common/solid_dh_water_fragment.glsl | 294 ++++++-------- shaders/common/solid_dh_water_vertex.glsl | 62 +-- .../common/spidereyes_blocks_fragment.glsl | 13 +- shaders/common/spidereyes_blocks_vertex.glsl | 17 +- shaders/common/water_blocks_fragment.glsl | 376 ++++++++---------- shaders/common/water_blocks_vertex.glsl | 101 ++--- shaders/gbuffers_line.fsh | 1 + shaders/lib/mu_ftransform.glsl | 18 + shaders/src/taa_offset.glsl | 34 +- 41 files changed, 1732 insertions(+), 1722 deletions(-) create mode 100644 shaders/lib/mu_ftransform.glsl diff --git a/shaders/common/basic_blocks_fragment.glsl b/shaders/common/basic_blocks_fragment.glsl index 6fc74d06..fa3ecf69 100644 --- a/shaders/common/basic_blocks_fragment.glsl +++ b/shaders/common/basic_blocks_fragment.glsl @@ -8,8 +8,8 @@ varying vec3 basic_light; // MAIN FUNCTION ------------------ void main() { - vec4 block_color = tint_color; - block_color.rgb *= basic_light; + vec4 block_color = tint_color; + block_color.rgb *= basic_light; - #include "/src/writebuffers.glsl" + #include "/src/writebuffers.glsl" } diff --git a/shaders/common/basic_blocks_vertex.glsl b/shaders/common/basic_blocks_vertex.glsl index a6509d30..389df5e9 100644 --- a/shaders/common/basic_blocks_vertex.glsl +++ b/shaders/common/basic_blocks_vertex.glsl @@ -1,22 +1,26 @@ #include "/lib/config.glsl" /* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif -/* Uniforms, ins, outs */ +/* Uniforms */ + uniform float rainStrength; uniform mat4 gbufferProjectionInverse; #if defined SHADOW_CASTING && !defined NETHER - uniform mat4 gbufferModelViewInverse; + uniform mat4 gbufferModelViewInverse; #endif +/* Ins / Outs */ + varying vec4 tint_color; varying vec2 texcoord; varying vec3 basic_light; @@ -27,38 +31,30 @@ varying vec3 basic_light; #include "/lib/basic_utils.glsl" #if AA_TYPE > 0 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif // MAIN FUNCTION ------------------ void main() { - #include "/src/basiccoords_vertex.glsl" - #include "/src/position_vertex.glsl" - tint_color = gl_Color; - - basic_light = day_blend( - LIGHT_SUNSET_COLOR, - LIGHT_DAY_COLOR, - LIGHT_NIGHT_COLOR - ); - - basic_light = mix( - basic_light, - ZENITH_SKY_RAIN_COLOR * luma(basic_light), - rainStrength - ); - - vec2 illumination = clamp(abs(lmcoord), 0.0, 1.0); // Fix lines without correct illumination data - illumination.y = (max(illumination.y, 0.065) - 0.065) * 1.06951871657754; - - #if defined UNKNOWN_DIM - vec3 candle_color = - CANDLE_BASELIGHT * ((illumination.x * illumination.x) + pow(illumination.x * 1.205, 6.0)) * 2.75; - #else - vec3 candle_color = - CANDLE_BASELIGHT * ((illumination.x * illumination.x) + pow(illumination.x * 1.165, 6.0)); - #endif - - basic_light += candle_color; + #include "/src/basiccoords_vertex.glsl" + #include "/src/position_vertex.glsl" + tint_color = gl_Color; + + basic_light = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); + + basic_light = mix(basic_light, ZENITH_SKY_RAIN_COLOR * luma(basic_light), rainStrength); + + vec2 illumination = clamp(abs(lmcoord), 0.0, 1.0); // Fix lines without correct illumination data + illumination.y = (max(illumination.y, 0.065) - 0.065) * 1.06951871657754; + + #if defined UNKNOWN_DIM + vec3 candle_color = + CANDLE_BASELIGHT * ((illumination.x * illumination.x) + pow(illumination.x * 1.205, 6.0)) * 2.75; + #else + vec3 candle_color = + CANDLE_BASELIGHT * ((illumination.x * illumination.x) + pow(illumination.x * 1.165, 6.0)); + #endif + + basic_light += candle_color; } diff --git a/shaders/common/clouds_blocks_fragment.glsl b/shaders/common/clouds_blocks_fragment.glsl index 25b3e617..4624cfdd 100644 --- a/shaders/common/clouds_blocks_fragment.glsl +++ b/shaders/common/clouds_blocks_fragment.glsl @@ -1,34 +1,38 @@ #include "/lib/config.glsl" -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform sampler2D tex; uniform float far; uniform float blindness; #if MC_VERSION >= 11900 - uniform float darknessFactor; - uniform float darknessLightFactor; + uniform float darknessFactor; + uniform float darknessLightFactor; #endif #if V_CLOUDS == 0 || defined UNKNOWN_DIM - uniform float pixel_size_x; - uniform float pixel_size_y; - uniform sampler2D gaux4; + uniform float pixel_size_x; + uniform float pixel_size_y; + uniform sampler2D gaux4; #endif -// Varyings (per thread shared variables) +/* Ins / Outs */ + #if V_CLOUDS == 0 || defined UNKNOWN_DIM - varying vec2 texcoord; - varying vec4 tint_color; + varying vec2 texcoord; + varying vec4 tint_color; #endif +// Main function --------- + void main() { - #if V_CLOUDS == 0 || defined UNKNOWN_DIM - vec4 block_color = texture2D(tex, texcoord) * tint_color; - #include "/src/cloudfinalcolor.glsl" - #include "/src/writebuffers.glsl" - #elif MC_VERSION <= 11300 - vec4 block_color = vec4(0.0); - #include "/src/writebuffers.glsl" - #endif + #if V_CLOUDS == 0 || defined UNKNOWN_DIM + vec4 block_color = texture2D(tex, texcoord) * tint_color; + #include "/src/cloudfinalcolor.glsl" + #include "/src/writebuffers.glsl" + #elif MC_VERSION <= 11300 + vec4 block_color = vec4(0.0); + #include "/src/writebuffers.glsl" + #endif } diff --git a/shaders/common/clouds_blocks_vertex.glsl b/shaders/common/clouds_blocks_vertex.glsl index 1758924f..b6063d27 100644 --- a/shaders/common/clouds_blocks_vertex.glsl +++ b/shaders/common/clouds_blocks_vertex.glsl @@ -1,33 +1,40 @@ #include "/lib/config.glsl" -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform mat4 gbufferProjectionInverse; #if V_CLOUDS == 0 || defined UNKNOWN_DIM - uniform float rainStrength; + uniform float rainStrength; #endif #if defined SHADOW_CASTING && !defined NETHER - uniform mat4 gbufferModelViewInverse; + uniform mat4 gbufferModelViewInverse; #endif +/* Ins / Outs */ + #if V_CLOUDS == 0 || defined UNKNOWN_DIM - varying vec2 texcoord; - varying vec4 tint_color; + varying vec2 texcoord; + varying vec4 tint_color; #endif +/* Utility functions */ + #if AA_TYPE > 0 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif #if V_CLOUDS == 0 || defined UNKNOWN_DIM - #include "/lib/luma.glsl" + #include "/lib/luma.glsl" #endif +// MAIN FUNCTION ------------------ + void main() { - #if V_CLOUDS == 0 || defined UNKNOWN_DIM - texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; - tint_color = gl_Color; - #endif - #include "/src/position_vertex.glsl" + #if V_CLOUDS == 0 || defined UNKNOWN_DIM + texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + tint_color = gl_Color; + #endif + #include "/src/position_vertex.glsl" } diff --git a/shaders/common/composite1_fragment.glsl b/shaders/common/composite1_fragment.glsl index 12458084..e51ad025 100644 --- a/shaders/common/composite1_fragment.glsl +++ b/shaders/common/composite1_fragment.glsl @@ -1,28 +1,36 @@ -/* Config, uniforms, ins, outs */ #include "/lib/config.glsl" +#ifdef DOF + const bool colortex1MipmapEnabled = true; +#endif + +#ifdef BLOOM + const bool gaux1MipmapEnabled = true; +#endif + +/* Uniforms */ + uniform sampler2D colortex1; uniform sampler2D gaux1; uniform float inv_aspect_ratio; #ifdef DOF - uniform float centerDepthSmooth; - uniform float pixel_size_x; - uniform float pixel_size_y; - uniform float viewWidth; - uniform float viewHeight; - uniform float fov_y_inv; + uniform float centerDepthSmooth; + uniform float pixel_size_x; + uniform float pixel_size_y; + uniform float viewWidth; + uniform float viewHeight; + uniform float fov_y_inv; #endif -#ifdef DOF - const bool colortex1MipmapEnabled = true; -#endif +/* Ins / Outs */ -// Varyings (per thread shared variables) varying vec2 texcoord; #include "/lib/bloom.glsl" +/* Utility functions */ + #if defined BLOOM || defined DOF #include "/lib/dither.glsl" #endif @@ -31,36 +39,28 @@ varying vec2 texcoord; #include "/lib/blur.glsl" #endif -#ifdef BLOOM - const bool gaux1MipmapEnabled = true; -#endif +// MAIN FUNCTION ------------------ void main() { - vec4 block_color = texture2D(colortex1, texcoord); + vec4 block_color = texture2D(colortex1, texcoord); + + #if defined BLOOM || defined DOF + #if AA_TYPE > 0 + float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); + #else + float dither = semiblue(gl_FragCoord.xy); + #endif + #endif + + #ifdef DOF + block_color.rgb = noised_blur(block_color, colortex1, texcoord, DOF_STRENGTH, dither); + #endif - #if defined BLOOM || defined DOF - #if AA_TYPE > 0 - float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); - #else - float dither = semiblue(gl_FragCoord.xy); + #ifdef BLOOM + vec3 bloom = mipmap_bloom(gaux1, texcoord, dither); + block_color.rgb += bloom; #endif - #endif - - #ifdef DOF - block_color.rgb = noised_blur( - block_color, - colortex1, - texcoord, - DOF_STRENGTH, - dither - ); - #endif - - #ifdef BLOOM - vec3 bloom = mipmap_bloom(gaux1, texcoord, dither); - block_color.rgb += bloom; - #endif - - /* DRAWBUFFERS:1 */ - gl_FragData[0] = block_color; + + /* DRAWBUFFERS:1 */ + gl_FragData[0] = block_color; } diff --git a/shaders/common/composite1_vertex.glsl b/shaders/common/composite1_vertex.glsl index 7b2940f9..6fadd410 100644 --- a/shaders/common/composite1_vertex.glsl +++ b/shaders/common/composite1_vertex.glsl @@ -1,9 +1,12 @@ #include "/lib/config.glsl" -/* Config, uniforms, ins, outs */ +/* Ins / Outs */ + varying vec2 texcoord; +// MAIN FUNCTION ------------------ + void main() { - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - texcoord = gl_MultiTexCoord0.xy; + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + texcoord = gl_MultiTexCoord0.xy; } diff --git a/shaders/common/composite2_fragment.glsl b/shaders/common/composite2_fragment.glsl index bfd844b3..af702c47 100644 --- a/shaders/common/composite2_fragment.glsl +++ b/shaders/common/composite2_fragment.glsl @@ -1,100 +1,108 @@ +#include "/lib/config.glsl" + #if MC_VERSION < 11300 - const bool colortex0Clear = false; - const bool colortex1Clear = false; - const bool colortex2Clear = false; - const bool colortex3Clear = false; - const bool gaux1Clear = false; - const bool gaux2Clear = false; - const bool gaux3Clear = false; - const bool gaux4Clear = false; + const bool colortex0Clear = false; + const bool colortex1Clear = false; + const bool colortex2Clear = false; + const bool colortex3Clear = false; + const bool gaux1Clear = false; + const bool gaux2Clear = false; + const bool gaux3Clear = false; + const bool gaux4Clear = false; #endif -/* Config, uniforms, ins, outs */ -#include "/lib/config.glsl" +/* Uniforms */ -// 'Global' constants from system uniform sampler2D colortex1; - #if AA_TYPE > 0 || defined MOTION_BLUR - uniform sampler2D colortex3; // TAA past averages - uniform float pixel_size_x; - uniform float pixel_size_y; - uniform mat4 gbufferProjectionInverse; - uniform mat4 gbufferProjection; - uniform mat4 gbufferModelViewInverse; - uniform vec3 cameraPosition; - uniform vec3 previousCameraPosition; - uniform mat4 gbufferPreviousProjection; - uniform mat4 gbufferPreviousModelView; - uniform sampler2D depthtex0; - uniform float frameTime; + uniform sampler2D colortex3; // TAA past averages + uniform float pixel_size_x; + uniform float pixel_size_y; + uniform mat4 gbufferProjectionInverse; + uniform mat4 gbufferProjection; + uniform mat4 gbufferModelViewInverse; + uniform vec3 cameraPosition; + uniform vec3 previousCameraPosition; + uniform mat4 gbufferPreviousProjection; + uniform mat4 gbufferPreviousModelView; + uniform sampler2D depthtex0; + uniform float frameTime; #endif -// Varyings (per thread shared variables) +/* Ins / Outs */ + varying vec2 texcoord; +/* Utility functions */ + #if AA_TYPE > 0 || defined MOTION_BLUR - #include "/lib/projection_utils.glsl" - #include "/lib/past_projection_utils.glsl" + #include "/lib/projection_utils.glsl" + #include "/lib/past_projection_utils.glsl" #endif #ifdef MOTION_BLUR - #include "/lib/dither.glsl" - #include "/lib/motion_blur.glsl" + #include "/lib/dither.glsl" + #include "/lib/motion_blur.glsl" #endif #if AA_TYPE > 0 - #include "/lib/luma.glsl" - #include "/lib/fast_taa.glsl" + #include "/lib/luma.glsl" + #include "/lib/fast_taa.glsl" #endif +// MAIN FUNCTION ------------------ + void main() { - vec4 block_color = texture2D(colortex1, texcoord); - - // Precalc past position and velocity - #if AA_TYPE > 0 || defined MOTION_BLUR - // Reproyección del cuadro anterior - float z_depth = texture2D(depthtex0, texcoord).r; - vec2 texcoord_past; - vec3 curr_view_pos; - vec3 curr_feet_player_pos; - vec3 prev_feet_player_pos; - vec3 prev_view_pos; - vec2 final_pos; - - if (z_depth < 0.56) { - texcoord_past = texcoord; - } else { - curr_view_pos = vec3(vec2(gbufferProjectionInverse[0].x, gbufferProjectionInverse[1].y) * (texcoord * 2.0 - 1.0) + gbufferProjectionInverse[3].xy, gbufferProjectionInverse[3].z); - curr_view_pos /= (gbufferProjectionInverse[2].w * (z_depth * 2.0 - 1.0) + gbufferProjectionInverse[3].w); - curr_feet_player_pos = mat3(gbufferModelViewInverse) * curr_view_pos + gbufferModelViewInverse[3].xyz; - - prev_feet_player_pos = z_depth > 0.56 ? curr_feet_player_pos + cameraPosition - previousCameraPosition : curr_feet_player_pos; - prev_view_pos = mat3(gbufferPreviousModelView) * prev_feet_player_pos + gbufferPreviousModelView[3].xyz; - final_pos = vec2(gbufferPreviousProjection[0].x, gbufferPreviousProjection[1].y) * prev_view_pos.xy + gbufferPreviousProjection[3].xy; - texcoord_past = (final_pos / -prev_view_pos.z) * 0.5 + 0.5; - } - - #endif - - #ifdef MOTION_BLUR - // "Velocidad" - vec2 velocity = texcoord - texcoord_past; - block_color.rgb = motion_blur(block_color.rgb, z_depth, velocity, colortex1); - #endif - - #if AA_TYPE > 0 - #ifdef DOF - block_color = fast_taa_depth(block_color, texcoord_past); + vec4 block_color = texture2D(colortex1, texcoord); + + // Precalc past position and velocity + #if AA_TYPE > 0 || defined MOTION_BLUR + // Retrojection of previous frame + float z_depth = texture2D(depthtex0, texcoord).r; + vec2 texcoord_past; + vec3 curr_view_pos; + vec3 curr_feet_player_pos; + vec3 prev_feet_player_pos; + vec3 prev_view_pos; + vec2 final_pos; + + if(z_depth < 0.56) { + texcoord_past = texcoord; + } else { + curr_view_pos = + vec3(vec2(gbufferProjectionInverse[0].x, gbufferProjectionInverse[1].y) * (texcoord * 2.0 - 1.0) + gbufferProjectionInverse[3].xy, gbufferProjectionInverse[3].z); + curr_view_pos /= (gbufferProjectionInverse[2].w * (z_depth * 2.0 - 1.0) + gbufferProjectionInverse[3].w); + curr_feet_player_pos = mat3(gbufferModelViewInverse) * curr_view_pos + gbufferModelViewInverse[3].xyz; + + prev_feet_player_pos = + z_depth > 0.56 ? curr_feet_player_pos + cameraPosition - previousCameraPosition : curr_feet_player_pos; + prev_view_pos = mat3(gbufferPreviousModelView) * prev_feet_player_pos + gbufferPreviousModelView[3].xyz; + final_pos = + vec2(gbufferPreviousProjection[0].x, gbufferPreviousProjection[1].y) * prev_view_pos.xy + gbufferPreviousProjection[3].xy; + texcoord_past = (final_pos / -prev_view_pos.z) * 0.5 + 0.5; + } + + #endif + + #ifdef MOTION_BLUR + // "Speed" + vec2 velocity = texcoord - texcoord_past; + block_color.rgb = motion_blur(block_color.rgb, z_depth, velocity, colortex1); + #endif + + #if AA_TYPE > 0 + #ifdef DOF + block_color = fast_taa_depth(block_color, texcoord_past); + #else + block_color.rgb = fast_taa(block_color.rgb, texcoord_past); + #endif + + /* DRAWBUFFERS:13 */ + gl_FragData[0] = block_color; // colortex1 + gl_FragData[1] = block_color; // To TAA averages #else - block_color.rgb = fast_taa(block_color.rgb, texcoord_past); + /* DRAWBUFFERS:1 */ + gl_FragData[0] = block_color; // colortex1 #endif - /* DRAWBUFFERS:13 */ - gl_FragData[0] = block_color; // colortex1 - gl_FragData[1] = block_color; // To TAA averages - #else - /* DRAWBUFFERS:1 */ - gl_FragData[0] = block_color; // colortex1 - #endif } diff --git a/shaders/common/composite2_vertex.glsl b/shaders/common/composite2_vertex.glsl index ff00cd37..5266c0be 100644 --- a/shaders/common/composite2_vertex.glsl +++ b/shaders/common/composite2_vertex.glsl @@ -1,9 +1,12 @@ #include "/lib/config.glsl" -/* Config, uniforms, ins, outs */ +/* Ins / Outs */ + varying vec2 texcoord; +// MAIN FUNCTION ------------------ + void main() { - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - texcoord = gl_MultiTexCoord0.xy; + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + texcoord = gl_MultiTexCoord0.xy; } \ No newline at end of file diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index e37a391d..2c9ad2d3 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -1,14 +1,18 @@ -/* Config, uniforms, ins, outs */ #include "/lib/config.glsl" +const bool colortex1MipmapEnabled = true; + +/* Color utils */ #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif +/* Uniforms */ + uniform sampler2D colortex1; uniform float far; uniform float near; @@ -19,252 +23,217 @@ uniform int isEyeInWater; uniform ivec2 eyeBrightnessSmooth; #if MC_VERSION >= 11900 - uniform float darknessFactor; + uniform float darknessFactor; #endif #if VOL_LIGHT == 1 && !defined NETHER - uniform sampler2D depthtex1; - uniform vec3 sunPosition; - uniform vec3 moonPosition; - uniform float light_mix; - uniform mat4 gbufferProjectionInverse; - uniform mat4 gbufferModelViewInverse; - uniform mat4 gbufferModelView; - uniform float vol_mixer; + uniform sampler2D depthtex1; + uniform vec3 sunPosition; + uniform vec3 moonPosition; + uniform float light_mix; + uniform mat4 gbufferProjectionInverse; + uniform mat4 gbufferModelViewInverse; + uniform mat4 gbufferModelView; + uniform float vol_mixer; #endif #if VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER - uniform float light_mix; - uniform mat4 gbufferProjectionInverse; - uniform mat4 gbufferModelViewInverse; - uniform mat4 gbufferModelView; - uniform float vol_mixer; - uniform vec3 shadowLightPosition; - uniform mat4 shadowModelView; - uniform mat4 shadowProjection; - uniform sampler2DShadow shadowtex1; - - #if defined COLORED_SHADOW - uniform sampler2DShadow shadowtex0; - uniform sampler2D shadowcolor0; - #endif + uniform float light_mix; + uniform mat4 gbufferProjectionInverse; + uniform mat4 gbufferModelViewInverse; + uniform mat4 gbufferModelView; + uniform float vol_mixer; + uniform vec3 shadowLightPosition; + uniform mat4 shadowModelView; + uniform mat4 shadowProjection; + uniform sampler2DShadow shadowtex1; + + #if defined COLORED_SHADOW + uniform sampler2DShadow shadowtex0; + uniform sampler2D shadowcolor0; + #endif #endif +/* Ins / Outs */ + varying vec2 texcoord; varying vec3 direct_light_color; varying float exposure; #if VOL_LIGHT == 1 && !defined NETHER - varying vec3 vol_light_color; - varying vec2 lightpos; - varying vec3 astro_pos; + varying vec3 vol_light_color; + varying vec2 lightpos; + varying vec3 astro_pos; #endif #if VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER - varying vec3 vol_light_color; + varying vec3 vol_light_color; #endif #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - varying mat4 modeli_times_projectioni; + varying mat4 modeli_times_projectioni; #endif +/* Utility functions */ + #include "/lib/basic_utils.glsl" #include "/lib/depth.glsl" #ifdef BLOOM - #include "/lib/luma.glsl" + #include "/lib/luma.glsl" #endif #if VOL_LIGHT == 1 && !defined NETHER - #include "/lib/dither.glsl" - #include "/lib/volumetric_light.glsl" + #include "/lib/dither.glsl" + #include "/lib/volumetric_light.glsl" #endif #if VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER - #include "/lib/dither.glsl" - #include "/lib/volumetric_light.glsl" + #include "/lib/dither.glsl" + #include "/lib/volumetric_light.glsl" #endif -const bool colortex1MipmapEnabled = true; +// MAIN FUNCTION ------------------ void main() { - vec4 block_color = texture2D(colortex1, texcoord); - float d = texture2D(depthtex0, texcoord).r; - float linear_d = ld(d); - - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - - // Depth to distance - float screen_distance = - 2.0 * near * far / (far + near - (2.0 * d - 1.0) * (far - near)); - - // "Niebla" submarina - if (isEyeInWater == 1) { - float water_absorption = (1.0 / -((screen_distance * WATER_ABSORPTION) + 1.0)) + 1.0; - - block_color.rgb = mix( - block_color.rgb, - WATER_COLOR * direct_light_color * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), - water_absorption); - - } else if (isEyeInWater == 2) { - block_color = mix( - block_color, - vec4(1.0, .1, 0.0, 1.0), - clamp(sqrt(linear_d * far * 0.125), 0.0, 1.0) - ); - } - - #if MC_VERSION >= 11900 - if ((blindness > .01 || darknessFactor > .01) && linear_d > 0.999) { - block_color.rgb = vec3(0.0); - } - #else - if (blindness > .01 && linear_d > 0.999) { - block_color.rgb = vec3(0.0); + vec4 block_color = texture2D(colortex1, texcoord); + float d = texture2D(depthtex0, texcoord).r; + float linear_d = ld(d); + + vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + + // Depth to distance + float screen_distance = 2.0 * near * far / (far + near - (2.0 * d - 1.0) * (far - near)); + + // Underwater fog + if(isEyeInWater == 1) { + float water_absorption = (1.0 / -((screen_distance * WATER_ABSORPTION) + 1.0)) + 1.0; + + block_color.rgb = + mix(block_color.rgb, WATER_COLOR * direct_light_color * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), water_absorption); + + } else if(isEyeInWater == 2) { + block_color = mix(block_color, vec4(1.0, .1, 0.0, 1.0), clamp(sqrt(linear_d * far * 0.125), 0.0, 1.0)); } - #endif - #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - #if AA_TYPE > 0 - float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); - #else - float dither = semiblue(gl_FragCoord.xy); - #endif - #endif - - #if VOL_LIGHT == 1 && !defined NETHER - #if defined THE_END - float vol_light = 0.1; - if (d > 0.9999) { - vol_light = 0.5; - } + #if MC_VERSION >= 11900 + if((blindness > .01 || darknessFactor > .01) && linear_d > 0.999) { + block_color.rgb = vec3(0.0); + } #else - float vol_light = ss_godrays(dither); + if(blindness > .01 && linear_d > 0.999) { + block_color.rgb = vec3(0.0); + } #endif - vec4 center_world_pos = - modeli_times_projectioni * (vec4(0.5, 0.5, 1.0, 1.0) * 2.0 - 1.0); - vec3 center_view_vector = normalize(center_world_pos.xyz); - - vec4 world_pos = - modeli_times_projectioni * (vec4(texcoord, 1.0, 1.0) * 2.0 - 1.0); - vec3 view_vector = normalize(world_pos.xyz); - - #if defined THE_END - // Fixed light source position in sky for intensity calculation - vec3 intermediate_vector = normalize((gbufferModelViewInverse * gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz); - float vol_intensity = clamp( - dot( - center_view_vector, - intermediate_vector - ), - 0.0, - 1.0 - ); - - vol_intensity *= clamp( - dot( - view_vector, - intermediate_vector - ), - 0.0, - 1.0 - ); - - vol_intensity *= 0.666; - - block_color.rgb += (vol_light_color * vol_light * vol_intensity * 2.0); - #else - // Light source position for intensity calculation - vec3 intermediate_vector = normalize((gbufferModelViewInverse * vec4(astro_pos, 0.0)).xyz); - float vol_intensity = clamp(dot(center_view_vector, intermediate_vector), 0.0, 1.0); - clamp(dot(center_view_vector, intermediate_vector), 0.0, 1.0); - vol_intensity *= dot( - view_vector, - intermediate_vector - ); - vol_intensity = - pow(clamp(vol_intensity, 0.0, 1.0), vol_mixer) * 0.5 * abs(light_mix * 2.0 - 1.0); - - block_color.rgb = - mix(block_color.rgb, vol_light_color * vol_light, vol_intensity * (vol_light * 0.5 + 0.5) * (1.0 - rainStrength)); + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + #if AA_TYPE > 0 + float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); + #else + float dither = semiblue(gl_FragCoord.xy); + #endif #endif - #endif - #if VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER - #if defined COLORED_SHADOW - vec3 vol_light = get_volumetric_color_light(dither, screen_distance, modeli_times_projectioni); - #else - float vol_light = get_volumetric_light(dither, screen_distance, modeli_times_projectioni); + #if VOL_LIGHT == 1 && !defined NETHER + #if defined THE_END + float vol_light = 0.1; + if(d > 0.9999) { + vol_light = 0.5; + } + #else + float vol_light = ss_godrays(dither); + #endif + + vec4 center_world_pos = modeli_times_projectioni * (vec4(0.5, 0.5, 1.0, 1.0) * 2.0 - 1.0); + vec3 center_view_vector = normalize(center_world_pos.xyz); + + vec4 world_pos = modeli_times_projectioni * (vec4(texcoord, 1.0, 1.0) * 2.0 - 1.0); + vec3 view_vector = normalize(world_pos.xyz); + + #if defined THE_END + // Fixed light source position in sky for intensity calculation + vec3 intermediate_vector = + normalize((gbufferModelViewInverse * gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz); + float vol_intensity = + clamp(dot(center_view_vector, intermediate_vector), 0.0, 1.0); + + vol_intensity *= clamp(dot(view_vector, intermediate_vector), 0.0, 1.0); + + vol_intensity *= 0.666; + + block_color.rgb += (vol_light_color * vol_light * vol_intensity * 2.0); + #else + // Light source position for depth based godrays intensity calculation + vec3 intermediate_vector = + normalize((gbufferModelViewInverse * vec4(astro_pos, 0.0)).xyz); + float vol_intensity = + clamp(dot(center_view_vector, intermediate_vector), 0.0, 1.0); + vol_intensity *= dot(view_vector, intermediate_vector); + vol_intensity = + pow(clamp(vol_intensity, 0.0, 1.0), vol_mixer) * 0.5 * abs(light_mix * 2.0 - 1.0); + + block_color.rgb = + mix(block_color.rgb, vol_light_color * vol_light, vol_intensity * (vol_light * 0.5 + 0.5) * (1.0 - rainStrength)); + #endif #endif - // Ajuste de intensidad - - vec4 world_pos = - modeli_times_projectioni * (vec4(texcoord, 1.0, 1.0) * 2.0 - 1.0); - vec3 view_vector = normalize(world_pos.xyz); + #if VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER + #if defined COLORED_SHADOW + vec3 vol_light = get_volumetric_color_light(dither, screen_distance, modeli_times_projectioni); + #else + float vol_light = get_volumetric_light(dither, screen_distance, modeli_times_projectioni); + #endif + + // Volumetric intensity adjustments + + vec4 world_pos = modeli_times_projectioni * (vec4(texcoord, 1.0, 1.0) * 2.0 - 1.0); + vec3 view_vector = normalize(world_pos.xyz); + + #if defined THE_END + // Fixed light source position in sky for volumetrics intensity calculation (The End) + float vol_intensity = dot(view_vector, normalize((gbufferModelViewInverse * gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz)); + #else + // Light source position for volumetrics intensity calculation + float vol_intensity = dot(view_vector, normalize((gbufferModelViewInverse * vec4(shadowLightPosition, 0.0)).xyz)); + #endif + + #if defined THE_END + vol_intensity = + ((square_pow(clamp((vol_intensity + .666667) * 0.6, 0.0, 1.0)) * 0.5)); + block_color.rgb += (vol_light_color * vol_light * vol_intensity * 2.0); + #else + vol_intensity = + pow(clamp((vol_intensity + 0.5) * 0.666666666666666, 0.0, 1.0), vol_mixer) * 0.6 * abs(light_mix * 2.0 - 1.0); + + block_color.rgb = + mix(block_color.rgb, vol_light_color * vol_light, vol_intensity * (vol_light * 0.5 + 0.5) * (1.0 - rainStrength)); + #endif + #endif - #if defined THE_END - // Fixed light source position in sky for intensity calculation - float vol_intensity = - dot( - view_vector, - normalize((gbufferModelViewInverse * gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz) - ); + // Dentro de la nieve + #ifdef BLOOM + if(isEyeInWater == 3) { + block_color.rgb = + mix(block_color.rgb, vec3(0.7, 0.8, 1.0) / exposure, clamp(screen_distance * .5, 0.0, 1.0)); + } #else - // Light source position for intensity calculation - float vol_intensity = - dot( - view_vector, - normalize((gbufferModelViewInverse * vec4(shadowLightPosition, 0.0)).xyz) - ); + if(isEyeInWater == 3) { + block_color.rgb = + mix(block_color.rgb, vec3(0.85, 0.9, 0.6), clamp(screen_distance * .5, 0.0, 1.0)); + } #endif - #if defined THE_END - vol_intensity = - ((square_pow(clamp((vol_intensity + .666667) * 0.6, 0.0, 1.0)) * 0.5)); - block_color.rgb += (vol_light_color * vol_light * vol_intensity * 2.0); - #else - vol_intensity = - pow(clamp((vol_intensity + 0.5) * 0.666666666666666, 0.0, 1.0), vol_mixer) * 0.6 * abs(light_mix * 2.0 - 1.0); + #ifdef BLOOM + // Bloom source + float bloom_luma = smoothstep(0.85, 1.0, luma(block_color.rgb * exposure)) * 0.5; - block_color.rgb = - mix(block_color.rgb, vol_light_color * vol_light, vol_intensity * (vol_light * 0.5 + 0.5) * (1.0 - rainStrength)); + /* DRAWBUFFERS:146 */ + gl_FragData[0] = block_color; + gl_FragData[1] = block_color * bloom_luma; + gl_FragData[2] = vec4(exposure, 0.0, 0.0, 0.0); + #else + /* DRAWBUFFERS:16 */ + gl_FragData[0] = block_color; + gl_FragData[1] = vec4(exposure, 0.0, 0.0, 0.0); #endif - #endif - - // Dentro de la nieve - #ifdef BLOOM - if (isEyeInWater == 3) { - block_color.rgb = mix( - block_color.rgb, - vec3(0.7, 0.8, 1.0) / exposure, - clamp(screen_distance * .5, 0.0, 1.0) - ); - } - #else - if (isEyeInWater == 3) { - block_color.rgb = mix( - block_color.rgb, - vec3(0.85, 0.9, 0.6), - clamp(screen_distance * .5, 0.0, 1.0) - ); - } - #endif - - #ifdef BLOOM - // Bloom source - float bloom_luma = - smoothstep(0.85, 1.0, luma(block_color.rgb * exposure)) * 0.5; - - /* DRAWBUFFERS:146 */ - gl_FragData[0] = block_color; - gl_FragData[1] = block_color * bloom_luma; - gl_FragData[2] = vec4(exposure, 0.0, 0.0, 0.0); - #else - /* DRAWBUFFERS:16 */ - gl_FragData[0] = block_color; - gl_FragData[1] = vec4(exposure, 0.0, 0.0, 0.0); - #endif } \ No newline at end of file diff --git a/shaders/common/composite_vertex.glsl b/shaders/common/composite_vertex.glsl index c865566b..f624efb5 100644 --- a/shaders/common/composite_vertex.glsl +++ b/shaders/common/composite_vertex.glsl @@ -1,30 +1,32 @@ -/* Config, uniforms, ins, outs */ #include "/lib/config.glsl" +/* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif +/* Uniforms */ + uniform float rainStrength; uniform ivec2 eyeBrightnessSmooth; #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - uniform int isEyeInWater; + uniform int isEyeInWater; #endif - #if VOL_LIGHT == 1 && !defined NETHER - uniform float light_mix; - uniform vec3 sunPosition; - uniform vec3 moonPosition; - uniform mat4 gbufferProjection; + uniform float light_mix; + uniform vec3 sunPosition; + uniform vec3 moonPosition; + uniform mat4 gbufferProjection; #endif #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - uniform mat4 gbufferModelViewInverse; - uniform mat4 gbufferProjectionInverse; + uniform mat4 gbufferModelViewInverse; + uniform mat4 gbufferProjectionInverse; #endif uniform sampler2D colortex1; @@ -33,88 +35,81 @@ uniform float viewWidth; uniform float viewHeight; uniform float frameTime; +/* Ins / Outs */ + varying vec2 texcoord; varying vec3 direct_light_color; #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - varying vec3 vol_light_color; // Flat + varying vec3 vol_light_color; // Flat #endif varying float exposure; // Flat #if VOL_LIGHT == 1 && !defined NETHER - varying vec2 lightpos; // Flat - varying vec3 astro_pos; // Flat + varying vec2 lightpos; // Flat + varying vec3 astro_pos; // Flat #endif #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - varying mat4 modeli_times_projectioni; + varying mat4 modeli_times_projectioni; #endif +/* Utility functions */ + #include "/lib/luma.glsl" +// MAIN FUNCTION ------------------ + void main() { - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - texcoord = gl_MultiTexCoord0.xy; - - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - - direct_light_color = day_blend( - LIGHT_SUNSET_COLOR, - LIGHT_DAY_COLOR, - LIGHT_NIGHT_COLOR - ); - - direct_light_color = mix( - direct_light_color, - ZENITH_SKY_RAIN_COLOR * luma(direct_light_color), - rainStrength - ); - - // Exposure - #if !defined UNKNOWN_DIM - float mipmap_level = log2(min(viewWidth, viewHeight)) - 1.0; - - vec3 exposure_col = texture2DLod(colortex1, vec2(0.5), mipmap_level).rgb; - exposure_col += texture2DLod(colortex1, vec2(0.25), mipmap_level).rgb; - exposure_col += texture2DLod(colortex1, vec2(0.75), mipmap_level).rgb; - exposure_col += texture2DLod(colortex1, vec2(0.25, 0.75), mipmap_level).rgb; - exposure_col += texture2DLod(colortex1, vec2(0.75, 0.25), mipmap_level).rgb; - - exposure = clamp(luma(exposure_col), 0.0005, 100.0); - - float prev_exposure = texture2D(gaux3, vec2(0.5)).r; - - exposure = (exp(-exposure) * 3.03) + 0.6; - exposure = mix(exposure, prev_exposure, exp(-frameTime * 1.25)); - #else - exposure = 1.0; - #endif - - #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - float vol_attenuation; - if (isEyeInWater == 0) { - vol_attenuation = 1.0; - } else { - vol_attenuation = 0.1 + (eye_bright_smooth.y * 0.002); - } - - vol_light_color = day_blend( - LIGHT_SUNSET_COLOR, - LIGHT_DAY_COLOR, - LIGHT_NIGHT_COLOR - ) * 1.2 * vol_attenuation; - #endif - - #if VOL_LIGHT == 1 && !defined NETHER - astro_pos = sunPosition * step(0.5, light_mix) * 2.0 + moonPosition; - vec4 tpos = vec4(astro_pos, 1.0) * gbufferProjection; - tpos = vec4(tpos.xyz / tpos.w, 1.0); - vec2 pos1 = tpos.xy / tpos.z; - lightpos = pos1 * 0.5 + 0.5; - #endif - - #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - modeli_times_projectioni = gbufferModelViewInverse * gbufferProjectionInverse; - #endif + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + texcoord = gl_MultiTexCoord0.xy; + + vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + + direct_light_color = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); + direct_light_color = mix(direct_light_color, ZENITH_SKY_RAIN_COLOR * luma(direct_light_color), rainStrength); + + // Exposure + #if !defined UNKNOWN_DIM + float mipmap_level = log2(min(viewWidth, viewHeight)) - 1.0; + + vec3 exposure_col = texture2DLod(colortex1, vec2(0.5), mipmap_level).rgb; + exposure_col += texture2DLod(colortex1, vec2(0.25), mipmap_level).rgb; + exposure_col += texture2DLod(colortex1, vec2(0.75), mipmap_level).rgb; + exposure_col += texture2DLod(colortex1, vec2(0.25, 0.75), mipmap_level).rgb; + exposure_col += texture2DLod(colortex1, vec2(0.75, 0.25), mipmap_level).rgb; + + exposure = clamp(luma(exposure_col), 0.0005, 100.0); + + float prev_exposure = texture2D(gaux3, vec2(0.5)).r; + + exposure = (exp(-exposure) * 3.03) + 0.6; + exposure = mix(exposure, prev_exposure, exp(-frameTime * 1.25)); + #else + exposure = 1.0; + #endif + + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + float vol_attenuation; + if(isEyeInWater == 0) { + vol_attenuation = 1.0; + } else { + vol_attenuation = 0.1 + (eye_bright_smooth.y * 0.002); + } + + vol_light_color = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR) * 1.2 * vol_attenuation; + #endif + + #if VOL_LIGHT == 1 && !defined NETHER + astro_pos = sunPosition * step(0.5, light_mix) * 2.0 + moonPosition; + vec4 tpos = vec4(astro_pos, 1.0) * gbufferProjection; + tpos = vec4(tpos.xyz / tpos.w, 1.0); + vec2 pos1 = tpos.xy / tpos.z; + lightpos = pos1 * 0.5 + 0.5; + #endif + + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + modeli_times_projectioni = gbufferModelViewInverse * gbufferProjectionInverse; + #endif } diff --git a/shaders/common/damage_fragment.glsl b/shaders/common/damage_fragment.glsl index f11f3f40..ebe8c606 100644 --- a/shaders/common/damage_fragment.glsl +++ b/shaders/common/damage_fragment.glsl @@ -1,14 +1,17 @@ -/* Exits */ #include "/lib/config.glsl" -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform sampler2D tex; +/* Ins / Outs */ + varying vec2 texcoord; +// MAIN FUNCTION ------------------ + void main() { - // Toma el color puro del bloque - vec4 block_color = texture2D(tex, texcoord); + vec4 block_color = texture2D(tex, texcoord); - #include "/src/writebuffers.glsl" + #include "/src/writebuffers.glsl" } diff --git a/shaders/common/damage_vertex.glsl b/shaders/common/damage_vertex.glsl index c236a6a6..d8ed7e75 100644 --- a/shaders/common/damage_vertex.glsl +++ b/shaders/common/damage_vertex.glsl @@ -1,20 +1,27 @@ #include "/lib/config.glsl" +/* Uniforms */ + uniform mat4 gbufferProjectionInverse; +/* Ins / Outs */ + varying vec2 texcoord; varying float var_fog_frag_coord; +/* Utility functions */ + #if AA_TYPE > 0 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif +// MAIN FUNCTION ------------------ + void main() { - texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - vec3 viewPos = gl_Position.xyz / gl_Position.w; - vec4 homopos = gbufferProjectionInverse * vec4(viewPos, 1.0); - viewPos = homopos.xyz / homopos.w; - gl_FogFragCoord = length(viewPos.xyz); + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + vec4 homopos = gbufferProjectionInverse * vec4(gl_Position.xyz / gl_Position.w, 1.0); + vec3 viewPos = homopos.xyz / homopos.w; + gl_FogFragCoord = length(viewPos.xyz); } \ No newline at end of file diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index 42d83ff7..74957eef 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -1,14 +1,17 @@ -/* Config, uniforms, ins, outs */ #include "/lib/config.glsl" +/* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif +/* Uniforms */ + uniform sampler2D colortex1; uniform ivec2 eyeBrightnessSmooth; uniform int isEyeInWater; @@ -20,32 +23,32 @@ uniform float rainStrength; uniform sampler2D gaux3; #if CLOUD_VOL_STYLE == 1 && V_CLOUDS != 0 - uniform sampler2D colortex2; + uniform sampler2D colortex2; #elif V_CLOUDS != 0 - uniform sampler2D gaux2; + uniform sampler2D gaux2; #endif #ifdef NETHER - uniform vec3 fogColor; + uniform vec3 fogColor; #endif #if AO == 1 - uniform float inv_aspect_ratio; - uniform float fov_y_inv; + uniform float inv_aspect_ratio; + uniform float fov_y_inv; #endif #if V_CLOUDS != 0 && !defined UNKNOWN_DIM - uniform sampler2D noisetex; - uniform vec3 cameraPosition; - uniform vec3 sunPosition; - - #if defined DISTANT_HORIZONS - uniform sampler2D dhDepthTex0; - uniform float dhNearPlane; - uniform float dhFarPlane; - uniform float viewWidth; - uniform float viewHeight; - #endif + uniform sampler2D noisetex; + uniform vec3 cameraPosition; + uniform vec3 sunPosition; + + #if defined DISTANT_HORIZONS + uniform sampler2D dhDepthTex0; + uniform float dhNearPlane; + uniform float dhFarPlane; + uniform float viewWidth; + uniform float viewHeight; + #endif #endif uniform mat4 gbufferModelViewInverse; @@ -54,164 +57,145 @@ uniform float pixel_size_x; uniform float pixel_size_y; #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) - uniform mat4 gbufferProjection; - uniform float frameTimeCounter; + uniform mat4 gbufferProjection; + uniform float frameTimeCounter; #endif +/* Ins / Outs */ + varying vec2 texcoord; varying vec3 up_vec; // Flat #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY - varying float umbral; - varying vec3 cloud_color; - varying vec3 dark_cloud_color; + varying float umbral; + varying vec3 cloud_color; + varying vec3 dark_cloud_color; #endif #if AO == 1 - varying float fog_density_coeff; + varying float fog_density_coeff; #endif +/* Utility functions */ + #include "/lib/depth.glsl" #include "/lib/luma.glsl" #ifdef DISTANT_HORIZONS - #include "/lib/depth_dh.glsl" + #include "/lib/depth_dh.glsl" #endif #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) - #include "/lib/dither.glsl" + #include "/lib/dither.glsl" #endif #if AO == 1 - #include "/lib/ao.glsl" + #include "/lib/ao.glsl" #endif #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) - #include "/lib/projection_utils.glsl" - - #ifdef THE_END - #include "/lib/volumetric_clouds_end.glsl" - #else - #include "/lib/volumetric_clouds.glsl" - #endif - + #include "/lib/projection_utils.glsl" + + #ifdef THE_END + #include "/lib/volumetric_clouds_end.glsl" + #else + #include "/lib/volumetric_clouds.glsl" + #endif #endif +// MAIN FUNCTION ------------------ + void main() { - vec4 block_color = texture2D(colortex1, texcoord); - float d = texture2D(depthtex0, texcoord).r; - float linear_d = ld(d); + vec4 block_color = texture2D(colortex1, texcoord); + float d = texture2D(depthtex0, texcoord).r; + float linear_d = ld(d); - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - vec3 view_vector = vec3(1.0); + vec3 view_vector = vec3(1.0); + + #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) + #if AA_TYPE > 0 + float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); + #else + float dither = semiblue(gl_FragCoord.xy); + #endif + #endif + + #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY + if(linear_d > 0.9999) { // Only sky + vec4 world_pos = gbufferModelViewInverse * gbufferProjectionInverse * (vec4(texcoord, 1.0, 1.0) * 2.0 - 1.0); + view_vector = normalize(world_pos.xyz); + + #ifdef THE_END + float bright = dot(view_vector, vec3(0.0, 0.89442719, 0.4472136)); + bright = clamp((bright * 2.0) - 1.0, 0.0, 1.0); + bright *= bright * bright * bright; + #else + float bright = dot(view_vector, normalize((gbufferModelViewInverse * vec4(sunPosition, 0.0)).xyz)); + bright = clamp(bright * bright * bright, 0.0, 1.0); + #endif + + #ifdef THE_END + #ifdef END_CLOUDS + block_color.rgb = get_end_cloud(view_vector, block_color.rgb, bright, dither, cameraPosition, CLOUD_STEPS_AVG); + #endif + #else + block_color.rgb = get_cloud(view_vector, block_color.rgb, bright, dither, cameraPosition, CLOUD_STEPS_AVG, umbral, cloud_color, dark_cloud_color); + #endif + } - #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) - #if AA_TYPE > 0 - float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); #else - float dither = semiblue(gl_FragCoord.xy); + #if defined NETHER + #if !defined DISTANT_HORIZONS + if(linear_d > 0.9999) { // Only sky + block_color = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); + } + #endif + #elif !defined NETHER && !defined THE_END + if(linear_d > 0.9999 && isEyeInWater == 1) { // Only sky and water + vec4 screen_pos = vec4(gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), gl_FragCoord.z, 1.0); + vec4 fragposition = gbufferProjectionInverse * (screen_pos * 2.0 - 1.0); + + vec4 world_pos = gbufferModelViewInverse * vec4(fragposition.xyz, 0.0); + view_vector = normalize(world_pos.xyz); + } + #endif #endif - #endif - - #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY - if (linear_d > 0.9999) { // Only sky - vec4 world_pos = - gbufferModelViewInverse * gbufferProjectionInverse * (vec4(texcoord, 1.0, 1.0) * 2.0 - 1.0); - view_vector = normalize(world_pos.xyz); - - #ifdef THE_END - float bright = - dot(view_vector, vec3(0.0, 0.89442719, 0.4472136)); - bright = clamp((bright * 2.0) - 1.0, 0.0, 1.0); - bright *= bright * bright * bright; - #else - float bright = - dot( - view_vector, - normalize((gbufferModelViewInverse * vec4(sunPosition, 0.0)).xyz) - ); - bright = clamp(bright * bright * bright, 0.0, 1.0); - #endif - - #ifdef THE_END - #ifdef END_CLOUDS - // block_color = vec4(ZENITH_DAY_COLOR, 1.0); - block_color.rgb = - get_end_cloud(view_vector, block_color.rgb, bright, dither, cameraPosition, CLOUD_STEPS_AVG); + + #if AO == 1 + // AO distance attenuation + #if defined NETHER + if(NETHER_FOG_DISTANCE == 0) { + linear_d = sqrt(linear_d); + } else { + float screen_distance = 2.0 * near * far / (far + near - (2.0 * d - 1.0) * (far - near)); + linear_d = screen_distance / NETHER_SIGHT; + } #endif - #else - block_color.rgb = - get_cloud(view_vector, block_color.rgb, bright, dither, cameraPosition, CLOUD_STEPS_AVG, umbral, cloud_color, dark_cloud_color); - #endif - } + float ao_att = + pow(clamp(linear_d * 1.6, 0.0, 1.0), mix(fog_density_coeff, 1.0, rainStrength)); - #else - #if defined THE_END - if (linear_d > 0.9999) { // Only sky - // block_color = vec4(ZENITH_DAY_COLOR, 1.0); - } - #elif defined NETHER - #if !defined DISTANT_HORIZONS - if (linear_d > 0.9999) { // Only sky - block_color = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); - } - #endif - #elif !defined NETHER - if (linear_d > 0.9999 && isEyeInWater == 1) { // Only sky and water - vec4 screen_pos = - vec4( - gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), - gl_FragCoord.z, - 1.0 - ); - vec4 fragposition = gbufferProjectionInverse * (screen_pos * 2.0 - 1.0); - - vec4 world_pos = gbufferModelViewInverse * vec4(fragposition.xyz, 0.0); - view_vector = normalize(world_pos.xyz); - } - #endif - #endif - - #if AO == 1 - // AO distance attenuation - #if defined NETHER - if (NETHER_FOG_DISTANCE == 0) { - linear_d = sqrt(linear_d); - } else { - float screen_distance = 2.0 * near * far / (far + near - (2.0 * d - 1.0) * (far - near)); - linear_d = screen_distance / NETHER_SIGHT; - } + float final_ao = mix(dbao(dither), 1.0, ao_att); + block_color.rgb *= final_ao; + // block_color = vec4(vec3(final_ao), 1.0); + // block_color = vec4(vec3(linear_d), 1.0); #endif - float ao_att = pow( - clamp(linear_d * 1.6, 0.0, 1.0), - mix(fog_density_coeff, 1.0, rainStrength) - ); - - float final_ao = mix(dbao(dither), 1.0, ao_att); - block_color.rgb *= final_ao; - // block_color = vec4(vec3(final_ao), 1.0); - // block_color = vec4(vec3(linear_d), 1.0); - #endif - - #if defined THE_END || defined NETHER - #define NIGHT_CORRECTION 1.0 - #else - #define NIGHT_CORRECTION day_blend_float(1.0, 1.0, 0.1) - #endif - - // Cielo bajo el agua - if (isEyeInWater == 1) { - if (linear_d > 0.9999) { - block_color.rgb = mix( - NIGHT_CORRECTION * WATER_COLOR * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), - block_color.rgb, - max(clamp(view_vector.y - 0.1, 0.0, 1.0), rainStrength) - ); + + #if defined THE_END || defined NETHER + #define NIGHT_CORRECTION 1.0 + #else + #define NIGHT_CORRECTION day_blend_float(1.0, 1.0, 0.1) + #endif + + // Underwater sky + if(isEyeInWater == 1) { + if(linear_d > 0.9999) { + block_color.rgb = mix(NIGHT_CORRECTION * WATER_COLOR * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), block_color.rgb, max(clamp(view_vector.y - 0.1, 0.0, 1.0), rainStrength)); + } } - } - /* DRAWBUFFERS:14 */ - gl_FragData[0] = vec4(block_color.rgb, d); - gl_FragData[1] = block_color; + /* DRAWBUFFERS:14 */ + gl_FragData[0] = vec4(block_color.rgb, d); + gl_FragData[1] = block_color; } \ No newline at end of file diff --git a/shaders/common/deferred_vertex.glsl b/shaders/common/deferred_vertex.glsl index dc92661c..59515d37 100644 --- a/shaders/common/deferred_vertex.glsl +++ b/shaders/common/deferred_vertex.glsl @@ -1,55 +1,59 @@ -/* Config, uniforms, ins, outs */ #include "/lib/config.glsl" +/* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif +/* Uniforms */ uniform mat4 gbufferModelView; #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY - uniform float rainStrength; + uniform float rainStrength; #endif +/* Ins / Outs */ + varying vec2 texcoord; varying vec3 up_vec; #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY - varying float umbral; - varying vec3 cloud_color; - varying vec3 dark_cloud_color; + varying float umbral; + varying vec3 cloud_color; + varying vec3 dark_cloud_color; #endif #if AO == 1 - varying float fog_density_coeff; + varying float fog_density_coeff; #endif +/* Utility functions */ + #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY - #include "/lib/luma.glsl" + #include "/lib/luma.glsl" #endif + // MAIN FUNCTION ------------------ + void main() { - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - texcoord = gl_MultiTexCoord0.xy; - up_vec = normalize(gbufferModelView[1].xyz); - - #if AO == 1 - #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - fog_density_coeff = FOG_DENSITY * FOG_ADJUST; - #else - fog_density_coeff = day_blend_float( - FOG_SUNSET, - FOG_DAY, - FOG_NIGHT - ) * FOG_ADJUST; + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + texcoord = gl_MultiTexCoord0.xy; + up_vec = normalize(gbufferModelView[1].xyz); + + #if AO == 1 + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + fog_density_coeff = FOG_DENSITY * FOG_ADJUST; + #else + fog_density_coeff = day_blend_float(FOG_SUNSET, FOG_DAY, FOG_NIGHT) * FOG_ADJUST; + #endif #endif - #endif - #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY - #include "/lib/volumetric_clouds_vertex.glsl" - #endif + #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY + #include "/lib/volumetric_clouds_vertex.glsl" + #endif } \ No newline at end of file diff --git a/shaders/common/final_fragment.glsl b/shaders/common/final_fragment.glsl index 20dac26c..d51c4641 100644 --- a/shaders/common/final_fragment.glsl +++ b/shaders/common/final_fragment.glsl @@ -1,4 +1,3 @@ -/* Config, uniforms, ins, outs */ #include "/lib/config.glsl" // Do not remove comments. It works! @@ -57,12 +56,12 @@ const bool gaux2Clear = false; const bool gaux3Clear = false; const bool gaux4Clear = false; -// 'Global' constants from system +/* Uniforms */ #ifdef DEBUG_MODE - uniform sampler2D shadowtex1; - uniform sampler2D shadowcolor0; - uniform sampler2D colortex3; + uniform sampler2D shadowtex1; + uniform sampler2D shadowcolor0; + uniform sampler2D colortex3; #endif uniform sampler2D gaux3; @@ -70,77 +69,82 @@ uniform sampler2D colortex1; uniform float viewWidth; #if AA_TYPE == 3 - uniform float pixel_size_x; - uniform float pixel_size_y; + uniform float pixel_size_x; + uniform float pixel_size_y; #endif -// Varyings (per thread shared variables) +/* Ins / Outs */ + varying vec2 texcoord; varying float exposure; +/* Utility functions */ + #if AA_TYPE == 3 - #include "/lib/post.glsl" + #include "/lib/post.glsl" #endif #include "/lib/basic_utils.glsl" #include "/lib/tone_maps.glsl" #ifdef COLOR_BLINDNESS - #include "/lib/color_blindness.glsl" + #include "/lib/color_blindness.glsl" #endif #if CHROMA_ABER == 1 - #include "/lib/aberration.glsl" + #include "/lib/aberration.glsl" #endif +// MAIN FUNCTION ------------------ + void main() { - #if CHROMA_ABER == 1 - vec3 block_color = color_aberration(); - #else - vec3 block_color = texture2D(colortex1, texcoord).rgb; - #if AA_TYPE == 3 - block_color = sharpen(colortex1, block_color, texcoord); + #if CHROMA_ABER == 1 + vec3 block_color = color_aberration(); + #else + vec3 block_color = texture2D(colortex1, texcoord).rgb; + #if AA_TYPE == 3 + block_color = sharpen(colortex1, block_color, texcoord); + #endif + #endif + + block_color *= vec3(exposure); + + #if defined UNKNOWN_DIM + block_color = custom_sigmoid_alt(block_color); + #else + block_color = custom_sigmoid(block_color); + #endif + + // Color-grading ----- + // DEVELOPER: If your post processing effect only involves the current pixel, + // it can be placed here. For example: + + // Saturation: + // float actual_luma = luma(block_color); + // block_color = mix(vec3(actual_luma), block_color, 1.5); + + // Color-blindness correction + #ifdef COLOR_BLINDNESS + block_color = color_blindness(block_color); + #endif + + #ifdef DEBUG_MODE + // vec3 block_color; + if(texcoord.x < 0.5 && texcoord.y < 0.5) { + block_color = texture2D(shadowtex1, texcoord * 2.0).rrr; + } else if(texcoord.x >= 0.5 && texcoord.y >= 0.5) { + block_color = vec3(texture2D(gaux3, vec2(0.5)).r * 0.25); + } else if(texcoord.x < 0.5 && texcoord.y >= 0.5) { + block_color = texture2D(colortex1, ((texcoord - vec2(0.0, 0.5)) * 2.0)).rgb; + } else if(texcoord.x >= 0.5 && texcoord.y < 0.5) { + block_color = texture2D(shadowcolor0, ((texcoord - vec2(0.5, 0.0)) * 2.0)).rgb; + } else { + block_color = vec3(0.5); + } + + gl_FragColor = vec4(block_color, 1.0); + + #else + gl_FragColor = vec4(block_color, 1.0); #endif - #endif - - block_color *= vec3(exposure); - - #if defined UNKNOWN_DIM - block_color = custom_sigmoid_alt(block_color); - #else - block_color = custom_sigmoid(block_color); - #endif - - // Color-grading --- - // DEVELOPER: If your post processing effect only involves the current pixel, - // it can be placed here. For example, Saturation: - - // Saturation - // float actual_luma = luma(block_color); - // block_color = mix(vec3(actual_luma), block_color, 1.5); - - // Color-blindness correction - #ifdef COLOR_BLINDNESS - block_color = color_blindness(block_color); - #endif - - #ifdef DEBUG_MODE - // vec3 block_color; - if (texcoord.x < 0.5 && texcoord.y < 0.5) { - block_color = texture2D(shadowtex1, texcoord * 2.0).rrr; - } else if (texcoord.x >= 0.5 && texcoord.y >= 0.5) { - block_color = vec3(texture2D(gaux3, vec2(0.5)).r * 0.25); - } else if (texcoord.x < 0.5 && texcoord.y >= 0.5) { - block_color = texture2D(colortex1, ((texcoord - vec2(0.0, 0.5)) * 2.0)).rgb; - } else if (texcoord.x >= 0.5 && texcoord.y < 0.5) { - block_color = texture2D(shadowcolor0, ((texcoord - vec2(0.5, 0.0)) * 2.0)).rgb; - } else { - block_color = vec3(0.5); - } - - gl_FragColor = vec4(block_color, 1.0); - - #else - gl_FragColor = vec4(block_color, 1.0); - #endif } \ No newline at end of file diff --git a/shaders/common/final_vertex.glsl b/shaders/common/final_vertex.glsl index 618724ac..fb3e3422 100644 --- a/shaders/common/final_vertex.glsl +++ b/shaders/common/final_vertex.glsl @@ -1,7 +1,7 @@ -/* Config, uniforms, ins, outs */ #include "/lib/config.glsl" -/* Config, uniforms, ins, outs */ +/* Color utils */ + #ifdef THE_END #include "/lib/color_utils_end.glsl" #elif defined NETHER @@ -10,9 +10,11 @@ #include "/lib/color_utils.glsl" #endif -uniform ivec2 eyeBrightnessSmooth; +/* Uniforms */ + uniform sampler2D gaux3; -uniform float viewWidth; + +/* Ins / Outs */ varying vec2 texcoord; varying float exposure; @@ -23,8 +25,6 @@ void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; texcoord = gl_MultiTexCoord0.xy; - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - // Tonemaping --- // x: Block, y: Sky --- #if !defined UNKNOWN_DIM diff --git a/shaders/common/glint_blocks_fragment.glsl b/shaders/common/glint_blocks_fragment.glsl index 26cafce3..3876edd0 100644 --- a/shaders/common/glint_blocks_fragment.glsl +++ b/shaders/common/glint_blocks_fragment.glsl @@ -1,14 +1,19 @@ #include "/lib/config.glsl" -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform sampler2D tex; +/* Ins / Outs */ + varying vec2 texcoord; varying vec4 tint_color; +// MAIN FUNCTION ------------------ + void main() { - // Toma el color puro del bloque - vec4 block_color = texture2D(tex, texcoord) * tint_color * 0.5; + // Toma el color puro del bloque + vec4 block_color = texture2D(tex, texcoord) * tint_color * 0.5; - #include "/src/writebuffers.glsl" + #include "/src/writebuffers.glsl" } \ No newline at end of file diff --git a/shaders/common/glint_blocks_vertex.glsl b/shaders/common/glint_blocks_vertex.glsl index 9feaf4f0..d826b44a 100644 --- a/shaders/common/glint_blocks_vertex.glsl +++ b/shaders/common/glint_blocks_vertex.glsl @@ -1,19 +1,24 @@ #include "/lib/config.glsl" -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform mat4 gbufferModelViewInverse; uniform mat4 gbufferProjectionInverse; +/* Ins / Outs */ + varying vec2 texcoord; varying vec4 tint_color; #if AA_TYPE > 0 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif +// MAIN FUNCTION ------------------ + void main() { - #include "/src/basiccoords_vertex.glsl" - #include "/src/position_vertex.glsl" + #include "/src/basiccoords_vertex.glsl" + #include "/src/position_vertex.glsl" - tint_color = gl_Color; + tint_color = gl_Color; } diff --git a/shaders/common/line_blocks_fragment.glsl b/shaders/common/line_blocks_fragment.glsl index f6db7822..2238c24c 100644 --- a/shaders/common/line_blocks_fragment.glsl +++ b/shaders/common/line_blocks_fragment.glsl @@ -1,12 +1,13 @@ -/* Config, uniforms, ins, outs */ -#define NO_SHADOWS +/* Utility functions */ #include "/lib/config.glsl" +/* Ins / Outs */ + varying vec4 tint_color; void main() { - vec4 block_color = tint_color; + vec4 block_color = tint_color; - #include "/src/writebuffers.glsl" + #include "/src/writebuffers.glsl" } diff --git a/shaders/common/line_blocks_vertex.glsl b/shaders/common/line_blocks_vertex.glsl index 54a619c6..edaf0547 100644 --- a/shaders/common/line_blocks_vertex.glsl +++ b/shaders/common/line_blocks_vertex.glsl @@ -1,38 +1,29 @@ #include "/lib/config.glsl" +/* Uniforms */ + uniform float viewHeight; uniform float viewWidth; +/* Ins / Outs */ + varying vec4 tint_color; +/* Utility functions */ + #if AA_TYPE > 1 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif -vec4 mu_ftransform() -{ - float lineWidth = 1.75; - vec2 screenSize = vec2(viewWidth, viewHeight); - mat4 VIEW_SCALE = mat4(mat3(1.0 - 0.00390625)); - mat4 tempmat = gl_ProjectionMatrix * VIEW_SCALE * gl_ModelViewMatrix; - vec4 linePosStart = tempmat * gl_Vertex; - vec4 linePosEnd = tempmat * vec4(gl_Vertex.xyz + gl_Normal, 1.0); - vec3 ndc1 = linePosStart.xyz / linePosStart.w; - vec3 ndc2 = linePosEnd.xyz / linePosEnd.w; - vec2 lineScreenDirection = normalize((ndc2.xy - ndc1.xy) * screenSize); - vec2 lineOffset = vec2(-lineScreenDirection.y, lineScreenDirection.x) * lineWidth / screenSize; - if (lineOffset.x < 0.0) - lineOffset *= -1.0; - if (gl_VertexID % 2 == 0) - return vec4((ndc1 + vec3(lineOffset, 0.0)) * linePosStart.w, linePosStart.w); - else - return vec4((ndc1 - vec3(lineOffset, 0.0)) * linePosStart.w, linePosStart.w); -} +#include "/lib/mu_ftransform.glsl" + +// MAIN FUNCTION ------------------ void main() { - tint_color = gl_Color; - gl_Position = mu_ftransform(); - #if AA_TYPE > 1 - gl_Position.xy += taa_offset * gl_Position.w; - #endif + tint_color = gl_Color; + gl_Position = mu_ftransform(); + + #if AA_TYPE > 1 + gl_Position.xy += taa_offset * gl_Position.w; + #endif } diff --git a/shaders/common/prepare_fragment.glsl b/shaders/common/prepare_fragment.glsl index 13aeb13d..b90a83aa 100644 --- a/shaders/common/prepare_fragment.glsl +++ b/shaders/common/prepare_fragment.glsl @@ -1,20 +1,24 @@ #include "/lib/config.glsl" /* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif -/* Uniforms, ins, outs */ +/* Uniforms */ + uniform mat4 gbufferProjectionInverse; uniform float pixel_size_x; uniform float pixel_size_y; uniform float rainStrength; +/* Ins / Outs */ + varying vec3 up_vec; varying vec3 hi_sky_color; varying vec3 low_sky_color; @@ -26,37 +30,28 @@ varying vec3 low_sky_color; // MAIN FUNCTION ------------------ void main() { - #if defined THE_END || defined NETHER - vec3 block_color = ZENITH_DAY_COLOR; - #else - - #if AA_TYPE > 0 - float dither = shifted_dither13(gl_FragCoord.xy); + #if defined THE_END || defined NETHER + vec3 block_color = ZENITH_DAY_COLOR; #else - float dither = dither13(gl_FragCoord.xy); - #endif - dither = (dither - .5) * 0.0625; - - vec4 fragpos = gbufferProjectionInverse * - ( - vec4( - gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), - gl_FragCoord.z, - 1.0 - ) * 2.0 - 1.0 - ); - vec3 nfragpos = normalize(fragpos.xyz); - float n_u = clamp(dot(nfragpos, up_vec) + dither, 0.0, 1.0); - vec3 block_color = mix( - low_sky_color, - hi_sky_color, - smoothstep(0.0, 1.0, pow(n_u, 0.333)) - ); - - block_color = xyz_to_rgb(block_color); - - #endif - - #include "/src/writebuffers.glsl" + #if AA_TYPE > 0 + float dither = shifted_dither13(gl_FragCoord.xy); + #else + float dither = dither13(gl_FragCoord.xy); + #endif + + dither = (dither - .5) * 0.0625; + + vec4 fragpos = + gbufferProjectionInverse * + (vec4(gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), gl_FragCoord.z, 1.0) * 2.0 - 1.0); + vec3 nfragpos = normalize(fragpos.xyz); + float n_u = clamp(dot(nfragpos, up_vec) + dither, 0.0, 1.0); + vec3 block_color = + mix(low_sky_color, hi_sky_color, smoothstep(0.0, 1.0, pow(n_u, 0.333))); + + block_color = xyz_to_rgb(block_color); + #endif + + #include "/src/writebuffers.glsl" } \ No newline at end of file diff --git a/shaders/common/prepare_vertex.glsl b/shaders/common/prepare_vertex.glsl index 7cf1ec66..6e70fb61 100644 --- a/shaders/common/prepare_vertex.glsl +++ b/shaders/common/prepare_vertex.glsl @@ -1,18 +1,22 @@ #include "/lib/config.glsl" /* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif -/* Uniforms, ins, outs */ +/* Uniforms */ + uniform mat4 gbufferModelView; uniform float rainStrength; +/* Ins / Outs */ + varying vec3 up_vec; varying vec3 hi_sky_color; varying vec3 low_sky_color; @@ -24,9 +28,9 @@ varying vec3 low_sky_color; // MAIN FUNCTION ------------------ void main() { - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + + #include "/src/sky_color_vertex.glsl" - #include "/src/sky_color_vertex.glsl" - - up_vec = normalize(gbufferModelView[1].xyz); + up_vec = normalize(gbufferModelView[1].xyz); } diff --git a/shaders/common/shadow_fragment.glsl b/shaders/common/shadow_fragment.glsl index ee692e55..f02adc11 100644 --- a/shaders/common/shadow_fragment.glsl +++ b/shaders/common/shadow_fragment.glsl @@ -1,20 +1,27 @@ #include "/lib/config.glsl" +/* Uniforms */ + uniform sampler2D tex; +/* Ins / Outs */ + varying vec2 texcoord; #ifdef COLORED_SHADOW - varying float is_water; + varying float is_water; #endif +// MAIN FUNCTION ------------------ + void main() { - #ifdef COLORED_SHADOW - if (is_water > 0.98) discard; // Is water - #endif + #ifdef COLORED_SHADOW + if(is_water > 0.98) + discard; // Is water + #endif - vec4 block_color = texture2D(tex, texcoord); + vec4 block_color = texture2D(tex, texcoord); - /* DRAWBUFFERS:0 */ - gl_FragData[0] = block_color; + /* DRAWBUFFERS:0 */ + gl_FragData[0] = block_color; } diff --git a/shaders/common/shadow_vertex.glsl b/shaders/common/shadow_vertex.glsl index 3ef69cc0..d446ffcb 100644 --- a/shaders/common/shadow_vertex.glsl +++ b/shaders/common/shadow_vertex.glsl @@ -1,35 +1,41 @@ #include "/lib/config.glsl" +/* Uniforms */ + uniform mat4 shadowProjection; uniform mat4 shadowProjectionInverse; uniform mat4 shadowModelView; uniform mat4 shadowModelViewInverse; +/* Ins / Outs */ + varying vec2 texcoord; #ifdef COLORED_SHADOW - varying float is_water; + varying float is_water; #endif attribute vec4 mc_Entity; +// MAIN FUNCTION ------------------ + void main() { - texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + + vec4 position = shadowModelViewInverse * shadowProjectionInverse * gl_ModelViewProjectionMatrix * gl_Vertex; + gl_Position = shadowProjection * shadowModelView * position; - vec4 position = shadowModelViewInverse * shadowProjectionInverse * gl_ModelViewProjectionMatrix * gl_Vertex; - gl_Position = shadowProjection * shadowModelView * position; + float dist = length(gl_Position.xy); + float distortFactor = dist * SHADOW_DIST + (1.0 - SHADOW_DIST); - float dist = length(gl_Position.xy); - float distortFactor = dist * SHADOW_DIST + (1.0 - SHADOW_DIST); - - gl_Position.xy *= 1.0 / distortFactor; - gl_Position.z = gl_Position.z * 0.2; + gl_Position.xy *= 1.0 / distortFactor; + gl_Position.z = gl_Position.z * 0.2; - #ifdef COLORED_SHADOW - is_water = 0.0; + #ifdef COLORED_SHADOW + is_water = 0.0; - if (mc_Entity.x == ENTITY_WATER) { - is_water = 1.0; - } - #endif + if(mc_Entity.x == ENTITY_WATER) { + is_water = 1.0; + } + #endif } diff --git a/shaders/common/skybasic_fragment.glsl b/shaders/common/skybasic_fragment.glsl index 01d1a68d..815da653 100644 --- a/shaders/common/skybasic_fragment.glsl +++ b/shaders/common/skybasic_fragment.glsl @@ -1,93 +1,91 @@ #include "/lib/config.glsl" +/* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform sampler2D gaux4; uniform float pixel_size_x; uniform float pixel_size_y; #ifdef NETHER - uniform vec3 fogColor; + uniform vec3 fogColor; #endif #if MC_VERSION < 11604 - uniform mat4 gbufferProjectionInverse; - uniform float viewWidth; - uniform float viewHeight; - uniform float rainStrength; -#endif + uniform mat4 gbufferProjectionInverse; + uniform float viewWidth; + uniform float viewHeight; + uniform float rainStrength; +#endif + +/* Ins / Outs */ #if MC_VERSION < 11604 - varying vec3 up_vec; - varying vec3 hi_sky_color; - varying vec3 low_sky_color; + varying vec3 up_vec; + varying vec3 hi_sky_color; + varying vec3 low_sky_color; #endif varying vec4 star_data; +/* Utility functions */ + #if MC_VERSION < 11604 - #include "/lib/dither.glsl" + #include "/lib/dither.glsl" #endif +// MAIN FUNCTION ------------------ + void main() { - #if defined THE_END - #if MC_VERSION < 11604 - vec4 background_color = vec4(ZENITH_DAY_COLOR, 1.0); - #endif - vec4 block_color = vec4(0.0, 0.0, 0.0, 1.0); - #elif defined NETHER // Unused - #if MC_VERSION < 11604 - vec4 background_color = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); - #endif - vec4 block_color = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); - #else - #if MC_VERSION < 11604 - #if AA_TYPE > 0 - float dither = shifted_dither13(gl_FragCoord.xy); - #else - float dither = dither13(gl_FragCoord.xy); - #endif - - dither = (dither - .5) * 0.0625; - - vec4 fragpos = gbufferProjectionInverse * - ( - vec4( - gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), - gl_FragCoord.z, - 1.0 - ) * 2.0 - 1.0 - ); - vec3 nfragpos = normalize(fragpos.xyz); - float n_u = clamp(dot(nfragpos, up_vec) + dither, 0.0, 1.0); - vec4 background_color = vec4( - mix( - low_sky_color, - hi_sky_color, - sqrt(n_u) - ), - 1.0); + #if defined THE_END + #if MC_VERSION < 11604 + vec4 background_color = vec4(ZENITH_DAY_COLOR, 1.0); + #endif + vec4 block_color = vec4(0.0, 0.0, 0.0, 1.0); + #elif defined NETHER // Unused + #if MC_VERSION < 11604 + vec4 background_color = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); + #endif + vec4 block_color = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); #else + #if MC_VERSION < 11604 + #if AA_TYPE > 0 + float dither = shifted_dither13(gl_FragCoord.xy); + #else + float dither = dither13(gl_FragCoord.xy); + #endif - // Toma el color puro del bloque - vec4 background_color = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)); - #endif + dither = (dither - .5) * 0.0625; + + vec4 fragpos = + gbufferProjectionInverse * + (vec4(gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), gl_FragCoord.z, 1.0) * 2.0 - 1.0); + vec3 nfragpos = normalize(fragpos.xyz); + float n_u = clamp(dot(nfragpos, up_vec) + dither, 0.0, 1.0); + vec4 background_color = vec4(mix(low_sky_color, hi_sky_color, sqrt(n_u)), 1.0); + #else + + // Toma el color puro del bloque + vec4 background_color = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)); + #endif - vec4 block_color = star_data; + vec4 block_color = star_data; - block_color = mix(background_color, block_color, block_color); + block_color = mix(background_color, block_color, block_color); - #if MC_VERSION >= 11604 - block_color.a = star_data.a; + #if MC_VERSION >= 11604 + block_color.a = star_data.a; + #endif #endif - #endif - #include "/src/writebuffers.glsl" + #include "/src/writebuffers.glsl" } diff --git a/shaders/common/skybasic_vertex.glsl b/shaders/common/skybasic_vertex.glsl index a41bb9ff..1cc7263b 100644 --- a/shaders/common/skybasic_vertex.glsl +++ b/shaders/common/skybasic_vertex.glsl @@ -1,57 +1,63 @@ #include "/lib/config.glsl" +/* Color utils */ + #if MC_VERSION < 11604 - #ifdef THE_END - #include "/lib/color_utils_end.glsl" - #elif defined NETHER - #include "/lib/color_utils_nether.glsl" - #else - #include "/lib/color_utils.glsl" - #endif + #ifdef THE_END + #include "/lib/color_utils_end.glsl" + #elif defined NETHER + #include "/lib/color_utils_nether.glsl" + #else + #include "/lib/color_utils.glsl" + #endif #endif -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform mat4 gbufferModelView; #if MC_VERSION < 11604 - uniform float rainStrength; + uniform float rainStrength; #endif +/* Ins / Outs */ + #if MC_VERSION < 11604 - varying vec3 up_vec; - varying vec3 hi_sky_color; - varying vec3 low_sky_color; + varying vec3 up_vec; + varying vec3 hi_sky_color; + varying vec3 low_sky_color; #endif varying vec4 star_data; +/* Utility functions */ + #if AA_TYPE > 0 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif #if MC_VERSION < 11604 - #include "/lib/luma.glsl" + #include "/lib/luma.glsl" #endif +// MAIN FUNCTION ------------------ + void main() { - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - #if AA_TYPE > 0 - gl_Position.xy += taa_offset * gl_Position.w; - #endif + #if AA_TYPE > 0 + gl_Position.xy += taa_offset * gl_Position.w; + #endif - star_data = - vec4( - float( - gl_Color.r == gl_Color.g && + star_data = vec4( + float(gl_Color.r == gl_Color.g && gl_Color.g == gl_Color.b && - gl_Color.r > 0.0 - ) * gl_Color.r + gl_Color.r > 0.0) * gl_Color.r ); - #if MC_VERSION < 11604 - up_vec = normalize(gbufferModelView[1].xyz); + #if MC_VERSION < 11604 + up_vec = normalize(gbufferModelView[1].xyz); - #include "/src/sky_color_vertex.glsl" - #endif + #include "/src/sky_color_vertex.glsl" + #endif } diff --git a/shaders/common/skytextured_fragment.glsl b/shaders/common/skytextured_fragment.glsl index 5e5b2288..766f73c1 100644 --- a/shaders/common/skytextured_fragment.glsl +++ b/shaders/common/skytextured_fragment.glsl @@ -1,39 +1,45 @@ #include "/lib/config.glsl" +/* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif -// 'Global' constants from system +/* Uniforms */ + uniform sampler2D tex; #ifdef NETHER - uniform vec3 fogColor; + uniform vec3 fogColor; #endif -// Varyings (per thread shared variables) +/* Ins / Outs */ + varying vec2 texcoord; varying vec4 tint_color; varying float sky_luma_correction; // Flat +// MAIN FUNCTION ------------------ + void main() { - #if defined THE_END - vec4 block_color = vec4(ZENITH_DAY_COLOR, 1.0); - vec3 background_color = ZENITH_DAY_COLOR; - #elif defined NETHER // Unused - vec4 background_color_full = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); - vec3 background_color = background_color_full.rgb; - vec4 block_color = vec4(background_color, 1.0); - #else - // Toma el color puro del bloque - vec4 block_color = texture2D(tex, texcoord) * tint_color; - - block_color.rgb *= sky_luma_correction; - #endif - - #include "/src/writebuffers.glsl" + #if defined THE_END + vec4 block_color = vec4(ZENITH_DAY_COLOR, 1.0); + vec3 background_color = ZENITH_DAY_COLOR; + #elif defined NETHER // Unused + vec4 background_color_full = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); + vec3 background_color = background_color_full.rgb; + vec4 block_color = vec4(background_color, 1.0); + #else + // Toma el color puro del bloque + vec4 block_color = texture2D(tex, texcoord) * tint_color; + + block_color.rgb *= sky_luma_correction; + #endif + + #include "/src/writebuffers.glsl" } diff --git a/shaders/common/skytextured_vertex.glsl b/shaders/common/skytextured_vertex.glsl index 4292d303..10006b1e 100644 --- a/shaders/common/skytextured_vertex.glsl +++ b/shaders/common/skytextured_vertex.glsl @@ -1,42 +1,46 @@ #include "/lib/config.glsl" +/* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif +/* Ins / Outs */ + varying vec2 texcoord; varying vec4 tint_color; varying float sky_luma_correction; #if AA_TYPE > 0 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif +/* Utility functions */ + #include "/lib/luma.glsl" +// MAIN FUNCTION ------------------ + void main() { - texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; - tint_color = gl_Color; - - sky_luma_correction = luma(day_blend( - LIGHT_SUNSET_COLOR, - LIGHT_DAY_COLOR, - LIGHT_NIGHT_COLOR - )); - - #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - sky_luma_correction = 3.5 / ((sky_luma_correction * -2.5) + 3.5); - #else - sky_luma_correction = 1.5 / ((sky_luma_correction * -2.5) + 3.5); - #endif - - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - - #if AA_TYPE > 0 - gl_Position.xy += taa_offset * gl_Position.w; - #endif + texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + tint_color = gl_Color; + + sky_luma_correction = luma(day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR)); + + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + sky_luma_correction = 3.5 / ((sky_luma_correction * -2.5) + 3.5); + #else + sky_luma_correction = 1.5 / ((sky_luma_correction * -2.5) + 3.5); + #endif + + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + + #if AA_TYPE > 0 + gl_Position.xy += taa_offset * gl_Position.w; + #endif } diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 32090c31..78b05b17 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -1,16 +1,18 @@ #include "/lib/config.glsl" -uniform float viewWidth; -uniform float viewHeight; -uniform int frameCounter; +// MAIN FUNCTION ------------------ #if defined THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #endif -/* Config, uniforms, ins, outs */ +/* Uniforms */ + +uniform float viewWidth; +uniform float viewHeight; +uniform int frameCounter; uniform sampler2D tex; uniform int isEyeInWater; uniform float nightVision; @@ -20,49 +22,50 @@ uniform float pixel_size_x; uniform float pixel_size_y; uniform sampler2D gaux4; - #if defined DISTANT_HORIZONS - uniform float dhNearPlane; - uniform float far; + uniform float dhNearPlane; + uniform float far; #endif #if defined GBUFFER_ENTITIES - uniform int entityId; - uniform vec4 entityColor; + uniform int entityId; + uniform vec4 entityColor; #endif #ifdef NETHER - uniform vec3 fogColor; + uniform vec3 fogColor; #endif #if defined SHADOW_CASTING - uniform sampler2DShadow shadowtex1; - #if defined COLORED_SHADOW - uniform sampler2DShadow shadowtex0; - uniform sampler2D shadowcolor0; - #endif + uniform sampler2DShadow shadowtex1; + #if defined COLORED_SHADOW + uniform sampler2DShadow shadowtex0; + uniform sampler2D shadowcolor0; + #endif #endif uniform float blindness; #if MC_VERSION >= 11900 - uniform float darknessFactor; - uniform float darknessLightFactor; + uniform float darknessFactor; + uniform float darknessLightFactor; #endif #ifdef MATERIAL_GLOSS - // Optifine menu bug workaround. Don't remove + // Don't remove #endif #if defined MATERIAL_GLOSS && !defined NETHER - uniform int worldTime; - uniform vec3 moonPosition; - uniform vec3 sunPosition; - #if defined THE_END - uniform mat4 gbufferModelView; - #endif + uniform int worldTime; + uniform vec3 moonPosition; + uniform vec3 sunPosition; + #if defined THE_END + uniform mat4 gbufferModelView; + #endif #endif +/* Ins / Outs */ + varying vec2 texcoord; varying vec4 tint_color; varying float frog_adjust; @@ -72,163 +75,158 @@ varying float direct_light_strength; varying vec3 omni_light; #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND - varying float emmisive_type; + varying float emmisive_type; #endif #ifdef FOLIAGE_V - varying float is_foliage; + varying float is_foliage; #endif #if defined SHADOW_CASTING && !defined NETHER - varying vec3 shadow_pos; - varying float shadow_diffuse; + varying vec3 shadow_pos; + varying float shadow_diffuse; #endif #if defined MATERIAL_GLOSS && !defined NETHER - varying vec3 flat_normal; - varying vec3 sub_position3; - varying vec2 lmcoord_alt; - varying float gloss_factor; - varying float gloss_power; - varying float luma_factor; - varying float luma_power; + varying vec3 flat_normal; + varying vec3 sub_position3; + varying vec2 lmcoord_alt; + varying float gloss_factor; + varying float gloss_power; + varying float luma_factor; + varying float luma_power; #endif +/* Utility functions */ + #if (defined SHADOW_CASTING && !defined NETHER) || defined DISTANT_HORIZONS - #include "/lib/dither.glsl" + #include "/lib/dither.glsl" #endif #if defined SHADOW_CASTING && !defined NETHER - #include "/lib/shadow_frag.glsl" + #include "/lib/shadow_frag.glsl" #endif #include "/lib/luma.glsl" #if defined MATERIAL_GLOSS && !defined NETHER - #include "/lib/material_gloss_fragment.glsl" + #include "/lib/material_gloss_fragment.glsl" #endif void main() { - #if (defined SHADOW_CASTING && !defined NETHER) || defined DISTANT_HORIZONS - #if AA_TYPE > 0 - float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); - #else - float dither = r_dither(gl_FragCoord.xy); + #if (defined SHADOW_CASTING && !defined NETHER) || defined DISTANT_HORIZONS + #if AA_TYPE > 0 + float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); + #else + float dither = r_dither(gl_FragCoord.xy); + #endif #endif - #endif - // Avoid render in DH transition - #ifdef DISTANT_HORIZONS - float t = far - dhNearPlane; - float sup = t * TRANSITION_SUP; - float inf = t * TRANSITION_INF; - float umbral = (gl_FogFragCoord - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); - if (umbral > dither) { - discard; - return; - } - #endif - - // Toma el color puro del bloque - #if defined GBUFFER_ENTITIES - #if BLACK_ENTITY_FIX == 1 - vec4 block_color = texture2D(tex, texcoord); - if (block_color.a < 0.1 && entityId != 10101) { // Black entities bug workaround - discard; - } - block_color *= tint_color; - #else - vec4 block_color = texture2D(tex, texcoord) * tint_color; + // Avoid render in DH transition + #ifdef DISTANT_HORIZONS + float t = far - dhNearPlane; + float sup = t * TRANSITION_SUP; + float inf = t * TRANSITION_INF; + float umbral = (gl_FogFragCoord - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); + if(umbral > dither) { + discard; + return; + } #endif - #else - vec4 block_color = texture2D(tex, texcoord) * tint_color; - #endif - - float block_luma = luma(block_color.rgb); - - vec3 final_candle_color = candle_color; - #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND - if (emmisive_type > 0.5) { - final_candle_color *= block_luma * 1.5; - } - #endif - - #ifdef GBUFFER_WEATHER - block_color.a *= .5; - #endif - - #if defined GBUFFER_ENTITIES - // Thunderbolt render - if (entityId == 10101){ - block_color.a = 1.0; - } - #endif - - #if defined SHADOW_CASTING && !defined NETHER - #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_pos, dither); - shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); + + // Toma el color puro del bloque + #if defined GBUFFER_ENTITIES + #if BLACK_ENTITY_FIX == 1 + vec4 block_color = texture2D(tex, texcoord); + if(block_color.a < 0.1 && entityId != 10101) { // Black entities bug workaround + discard; + } + block_color *= tint_color; + #else + vec4 block_color = texture2D(tex, texcoord) * tint_color; + #endif #else - float shadow_c = get_shadow(shadow_pos, dither); - shadow_c = mix(shadow_c, 1.0, shadow_diffuse); + vec4 block_color = texture2D(tex, texcoord) * tint_color; + #endif + + float block_luma = luma(block_color.rgb); + + vec3 final_candle_color = candle_color; + #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND + if(emmisive_type > 0.5) { + final_candle_color *= block_luma * 1.5; + } + #endif + + #ifdef GBUFFER_WEATHER + block_color.a *= .5; #endif - #else - float shadow_c = abs((light_mix * 2.0) - 1.0); - #endif - - #if defined GBUFFER_BEACONBEAM - block_color.rgb *= 1.5; - #elif defined GBUFFER_ENTITY_GLOW - block_color.rgb = clamp(vec3(luma(block_color.rgb)) * vec3(0.75, 0.75, 1.5), vec3(0.3), vec3(1.0)); - #else - #if defined MATERIAL_GLOSS && !defined NETHER - float final_gloss_power = gloss_power; - block_luma *= luma_factor; - - if (luma_power < 0.0) { // Metallic - final_gloss_power -= (block_luma * 73.334); - } else { - block_luma = pow(block_luma, luma_power); - } - - float material_gloss_factor = - material_gloss( - reflect(normalize(sub_position3), flat_normal), - lmcoord_alt, - final_gloss_power, - flat_normal - ) * gloss_factor; - - float material = material_gloss_factor * block_luma; - vec3 real_light = - omni_light + - (shadow_c * ((direct_light_color * direct_light_strength) + (direct_light_color * material))) * (1.0 - (rainStrength * 0.75)) + - final_candle_color; + + #if defined GBUFFER_ENTITIES + // Thunderbolt render + if(entityId == 10101) { + block_color.a = 1.0; + } + #endif + + #if defined SHADOW_CASTING && !defined NETHER + #if defined COLORED_SHADOW + vec3 shadow_c = get_colored_shadow(shadow_pos, dither); + shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); + #else + float shadow_c = get_shadow(shadow_pos, dither); + shadow_c = mix(shadow_c, 1.0, shadow_diffuse); + #endif #else - vec3 real_light = - omni_light + - (shadow_c * direct_light_color * direct_light_strength) * (1.0 - (rainStrength * 0.75)) + - final_candle_color; + float shadow_c = abs((light_mix * 2.0) - 1.0); #endif - block_color.rgb *= mix(real_light, vec3(1.0), nightVision * 0.125); - block_color.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); - #endif + #if defined GBUFFER_BEACONBEAM + block_color.rgb *= 1.5; + #elif defined GBUFFER_ENTITY_GLOW + block_color.rgb = + clamp(vec3(luma(block_color.rgb)) * vec3(0.75, 0.75, 1.5), vec3(0.3), vec3(1.0)); + #else + #if defined MATERIAL_GLOSS && !defined NETHER + float final_gloss_power = gloss_power; + block_luma *= luma_factor; + + if(luma_power < 0.0) { // Metallic + final_gloss_power -= (block_luma * 73.334); + } else { + block_luma = pow(block_luma, luma_power); + } + + float material_gloss_factor = material_gloss(reflect(normalize(sub_position3), flat_normal), lmcoord_alt, final_gloss_power, flat_normal) * gloss_factor; + + float material = material_gloss_factor * block_luma; + vec3 real_light = omni_light + + (shadow_c * ((direct_light_color * direct_light_strength) + (direct_light_color * material))) * (1.0 - (rainStrength * 0.75)) + + final_candle_color; + #else + vec3 real_light = omni_light + + (shadow_c * direct_light_color * direct_light_strength) * (1.0 - (rainStrength * 0.75)) + + final_candle_color; + #endif + + block_color.rgb *= mix(real_light, vec3(1.0), nightVision * 0.125); + block_color.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); + #endif - #if defined GBUFFER_ENTITIES - if (entityId == 10101) { - // Thunderbolt render - block_color = vec4(1.0, 1.0, 1.0, 0.5); - } else { - block_color.rgb = mix(block_color.rgb, entityColor.rgb, entityColor.a * .75); - } - #endif + #if defined GBUFFER_ENTITIES + if(entityId == 10101) { + // Thunderbolt render + block_color = vec4(1.0, 1.0, 1.0, 0.5); + } else { + block_color.rgb = mix(block_color.rgb, entityColor.rgb, entityColor.a * .75); + } + #endif - #if MC_VERSION < 11300 && defined GBUFFER_TEXTURED - block_color.rgb *= 1.5; - #endif + #if MC_VERSION < 11300 && defined GBUFFER_TEXTURED + block_color.rgb *= 1.5; + #endif - block_color.rgba = clamp(block_color, vec4(0.0), vec4(100.0)); + block_color.rgba = clamp(block_color, vec4(0.0), vec4(100.0)); - #include "/src/finalcolor.glsl" - #include "/src/writebuffers.glsl" + #include "/src/finalcolor.glsl" + #include "/src/writebuffers.glsl" } diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index 7d1a7eb4..8fab0b57 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -1,17 +1,19 @@ #include "/lib/config.glsl" -uniform float viewWidth; -uniform float viewHeight; +/* Color utils */ #if defined THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif -/* Config, uniforms, ins, outs */ +/* Uniforms */ + +uniform float viewWidth; +uniform float viewHeight; uniform vec3 sunPosition; uniform int isEyeInWater; uniform float light_mix; @@ -21,42 +23,44 @@ uniform ivec2 eyeBrightnessSmooth; uniform mat4 gbufferProjectionInverse; #ifdef DISTANT_HORIZONS - uniform int dhRenderDistance; + uniform int dhRenderDistance; #endif #ifdef DYN_HAND_LIGHT - uniform int heldItemId; - uniform int heldItemId2; + uniform int heldItemId; + uniform int heldItemId2; #endif #ifdef UNKNOWN_DIM - uniform sampler2D lightmap; + uniform sampler2D lightmap; #endif #if defined FOLIAGE_V || defined THE_END || defined NETHER - uniform mat4 gbufferModelView; + uniform mat4 gbufferModelView; #endif #if defined FOLIAGE_V || defined SHADOW_CASTING || (defined MATERIAL_GLOSS && !defined NETHER) - uniform mat4 gbufferModelViewInverse; + uniform mat4 gbufferModelViewInverse; #endif #if defined MATERIAL_GLOSS && !defined NETHER - uniform int worldTime; - uniform vec3 moonPosition; + uniform int worldTime; + uniform vec3 moonPosition; #endif #if defined SHADOW_CASTING && !defined NETHER - uniform mat4 shadowModelView; - uniform mat4 shadowProjection; - uniform vec3 shadowLightPosition; + uniform mat4 shadowModelView; + uniform mat4 shadowProjection; + uniform vec3 shadowLightPosition; #endif #if WAVING == 1 - uniform vec3 cameraPosition; - uniform float frameTimeCounter; + uniform vec3 cameraPosition; + uniform float frameTimeCounter; #endif +/* Ins / Outs */ + varying vec2 texcoord; varying vec4 tint_color; varying float frog_adjust; @@ -66,106 +70,110 @@ varying float direct_light_strength; varying vec3 omni_light; #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND - varying float emmisive_type; + varying float emmisive_type; #endif #ifdef FOLIAGE_V - varying float is_foliage; + varying float is_foliage; #endif #if defined SHADOW_CASTING && !defined NETHER - varying vec3 shadow_pos; - varying float shadow_diffuse; + varying vec3 shadow_pos; + varying float shadow_diffuse; #endif #if defined MATERIAL_GLOSS && !defined NETHER - varying vec3 flat_normal; - varying vec3 sub_position3; - varying vec2 lmcoord_alt; - varying float gloss_factor; - varying float gloss_power; - varying float luma_factor; - varying float luma_power; + varying vec3 flat_normal; + varying vec3 sub_position3; + varying vec2 lmcoord_alt; + varying float gloss_factor; + varying float gloss_power; + varying float luma_factor; + varying float luma_power; #endif #if defined FOLIAGE_V || defined GBUFFER_TERRAIN || defined GBUFFER_HAND || (defined MATERIAL_GLOSS && !defined NETHER) - attribute vec4 mc_Entity; + attribute vec4 mc_Entity; #endif #if WAVING == 1 - attribute vec2 mc_midTexCoord; + attribute vec2 mc_midTexCoord; #endif +/* Utility functions */ + #if AA_TYPE > 0 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif #include "/lib/basic_utils.glsl" #if defined SHADOW_CASTING && !defined NETHER - #include "/lib/shadow_vertex.glsl" + #include "/lib/shadow_vertex.glsl" #endif #if WAVING == 1 - #include "/lib/vector_utils.glsl" + #include "/lib/vector_utils.glsl" #endif #include "/lib/luma.glsl" +// MAIN FUNCTION ------------------ + void main() { - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - vec3 hi_sky_color; - float visible_sky; - - #include "/src/basiccoords_vertex.glsl" - #include "/src/position_vertex.glsl" - #include "/src/hi_sky.glsl" - #include "/src/light_vertex.glsl" - #include "/src/fog_vertex.glsl" - - #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND - emmisive_type = 0.0; - if (mc_Entity.x == ENTITY_EMMISIVE || mc_Entity.x == ENTITY_S_EMMISIVE) { - emmisive_type = 1.0; - } - #endif - - #if defined SHADOW_CASTING && !defined NETHER - #include "/src/shadow_src_vertex.glsl" - #endif - - #if defined FOLIAGE_V && !defined NETHER - #ifdef SHADOW_CASTING - if (is_foliage > .2) { - direct_light_strength = mix(direct_light_strength, original_direct_light_strength, clamp((gl_Position.z / SHADOW_LIMIT) * 2.0 - 0.5, 0.0, 1.0)); - } + vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + vec3 hi_sky_color; + float visible_sky; + + #include "/src/basiccoords_vertex.glsl" + #include "/src/position_vertex.glsl" + #include "/src/hi_sky.glsl" + #include "/src/light_vertex.glsl" + #include "/src/fog_vertex.glsl" + + #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND + emmisive_type = 0.0; + if(mc_Entity.x == ENTITY_EMMISIVE || mc_Entity.x == ENTITY_S_EMMISIVE) { + emmisive_type = 1.0; + } + #endif + + #if defined SHADOW_CASTING && !defined NETHER + #include "/src/shadow_src_vertex.glsl" + #endif + + #if defined FOLIAGE_V && !defined NETHER + #ifdef SHADOW_CASTING + if(is_foliage > .2) { + direct_light_strength = mix(direct_light_strength, original_direct_light_strength, clamp((gl_Position.z / SHADOW_LIMIT) * 2.0 - 0.5, 0.0, 1.0)); + } + #endif + #endif + + #if defined MATERIAL_GLOSS && !defined NETHER + luma_factor = 1.0; + luma_power = 2.0; + gloss_power = 6.0; + gloss_factor = 1.05; + + if(mc_Entity.x == ENTITY_SAND) { // Sand-like block + luma_power = 4.0; + } else if(mc_Entity.x == ENTITY_METAL) { // Metal-like block + luma_factor = 1.35; + luma_power = -1.0; // Metallic + gloss_power = 100.0; + } else if(mc_Entity.x == ENTITY_FABRIC) { // Fabric-like blocks + gloss_power = 3.0; + gloss_factor = 0.1; + } + + flat_normal = normal; + sub_position3 = sub_position.xyz; + + lmcoord_alt = lmcoord; + #endif + + #if defined GBUFFER_ENTITY_GLOW + gl_Position.z *= 0.01; #endif - #endif - - #if defined MATERIAL_GLOSS && !defined NETHER - luma_factor = 1.0; - luma_power = 2.0; - gloss_power = 6.0; - gloss_factor = 1.05; - - if (mc_Entity.x == ENTITY_SAND) { // Sand-like block - luma_power = 4.0; - } else if (mc_Entity.x == ENTITY_METAL) { // Metal-like block - luma_factor = 1.35; - luma_power = -1.0; // Metallic - gloss_power = 100.0; - } else if (mc_Entity.x == ENTITY_FABRIC) { // Fabric-like blocks - gloss_power = 3.0; - gloss_factor = 0.1; - } - - flat_normal = normal; - sub_position3 = sub_position.xyz; - - lmcoord_alt = lmcoord; - #endif - - #if defined GBUFFER_ENTITY_GLOW - gl_Position.z *= 0.01; - #endif } diff --git a/shaders/common/solid_dh_blocks_fragment.glsl b/shaders/common/solid_dh_blocks_fragment.glsl index 1bdfa64e..b2637778 100644 --- a/shaders/common/solid_dh_blocks_fragment.glsl +++ b/shaders/common/solid_dh_blocks_fragment.glsl @@ -1,5 +1,7 @@ #include "/lib/config.glsl" +/* Uniforms */ + uniform float light_mix; uniform float nightVision; uniform float rainStrength; @@ -13,9 +15,11 @@ uniform vec3 cameraPosition; uniform int dhRenderDistance; #ifdef NETHER - uniform vec3 fogColor; + uniform vec3 fogColor; #endif +/* Ins / Outs */ + varying vec2 texcoord; varying vec4 tint_color; varying vec3 direct_light_color; @@ -25,52 +29,56 @@ varying vec3 omni_light; varying vec4 position; varying float frog_adjust; +/* Utility functions */ + #include "/lib/luma.glsl" #include "/lib/dither.glsl" +// MAIN FUNCTION ------------------ + void main() { - #if AA_TYPE > 0 - float dither = shifted_r_dither(gl_FragCoord.xy); - #else - float dither = r_dither(gl_FragCoord.xy); - #endif - - // Avoid render in DH transition - float t = far - dhNearPlane; - float sup = t * TRANSITION_DH_SUP; - float inf = t * TRANSITION_DH_INF; - float view_dist = length(position.xyz); - float umbral = (view_dist - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); - if (umbral < dither || view_dist > dhRenderDistance) { - discard; - return; - } - - vec4 block_color = tint_color; - - // Synthetic pseudo-texture - vec3 synth_pos = (position.xyz + cameraPosition) * 6.0; - synth_pos = floor(synth_pos + 0.01); - float synth_noise = (hash13(synth_pos) - 0.5) * 0.1; - block_color.rgb += vec3(synth_noise); - block_color.rgb = clamp(block_color.rgb, vec3(0.0), vec3(1.0)); - - float block_luma = luma(tint_color.rgb); - - vec3 final_candle_color = candle_color; - - float shadow_c = abs((light_mix * 2.0) - 1.0); - - vec3 real_light = - omni_light + - (shadow_c * direct_light_color * direct_light_strength) * (1.0 - (rainStrength * 0.75)) + - final_candle_color; - - block_color.rgb *= mix(real_light, vec3(1.0), nightVision * 0.125); - block_color.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); - - block_color.rgba = clamp(block_color, vec4(0.0), vec4(100.0)); - - #include "/src/finalcolor_dh.glsl" - #include "/src/writebuffers.glsl" + #if AA_TYPE > 0 + float dither = shifted_r_dither(gl_FragCoord.xy); + #else + float dither = r_dither(gl_FragCoord.xy); + #endif + + // Avoid render in DH transition + float t = far - dhNearPlane; + float sup = t * TRANSITION_DH_SUP; + float inf = t * TRANSITION_DH_INF; + float view_dist = length(position.xyz); + float umbral = (view_dist - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); + if (umbral < dither || view_dist > dhRenderDistance) { + discard; + return; + } + + vec4 block_color = tint_color; + + // Synthetic pseudo-texture + vec3 synth_pos = (position.xyz + cameraPosition) * 6.0; + synth_pos = floor(synth_pos + 0.01); + float synth_noise = (hash13(synth_pos) - 0.5) * 0.1; + block_color.rgb += vec3(synth_noise); + block_color.rgb = clamp(block_color.rgb, vec3(0.0), vec3(1.0)); + + float block_luma = luma(tint_color.rgb); + + vec3 final_candle_color = candle_color; + + float shadow_c = abs((light_mix * 2.0) - 1.0); + + vec3 real_light = + omni_light + + (shadow_c * direct_light_color * direct_light_strength) * (1.0 - (rainStrength * 0.75)) + + final_candle_color; + + block_color.rgb *= mix(real_light, vec3(1.0), nightVision * 0.125); + block_color.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); + + block_color.rgba = clamp(block_color, vec4(0.0), vec4(100.0)); + + #include "/src/finalcolor_dh.glsl" + #include "/src/writebuffers.glsl" } diff --git a/shaders/common/solid_dh_blocks_vertex.glsl b/shaders/common/solid_dh_blocks_vertex.glsl index 35946cbe..ce317823 100644 --- a/shaders/common/solid_dh_blocks_vertex.glsl +++ b/shaders/common/solid_dh_blocks_vertex.glsl @@ -1,14 +1,17 @@ #include "/lib/config.glsl" +/* Color utils */ + #if defined THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform ivec2 eyeBrightnessSmooth; uniform mat4 dhProjection; uniform mat4 gbufferModelView; @@ -21,13 +24,15 @@ uniform float rainStrength; uniform mat4 gbufferProjectionInverse; #ifdef DISTANT_HORIZONS - uniform int dhRenderDistance; + uniform int dhRenderDistance; #endif #ifdef UNKNOWN_DIM - uniform sampler2D lightmap; + uniform sampler2D lightmap; #endif +/* Ins / Outs */ + varying vec2 texcoord; varying vec4 tint_color; varying vec3 direct_light_color; @@ -37,20 +42,24 @@ varying vec3 omni_light; varying vec4 position; varying float frog_adjust; +/* Utility functions */ + #if AA_TYPE > 0 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif #include "/lib/basic_utils.glsl" #include "/lib/luma.glsl" +// MAIN FUNCTION ------------------ + void main() { - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - float visible_sky; - vec3 hi_sky_color; - - #include "/src/basiccoords_vertex_dh.glsl" - #include "/src/position_vertex_dh.glsl" - #include "/src/hi_sky.glsl" - #include "/src/light_vertex_dh.glsl" + vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + float visible_sky; + vec3 hi_sky_color; + + #include "/src/basiccoords_vertex_dh.glsl" + #include "/src/position_vertex_dh.glsl" + #include "/src/hi_sky.glsl" + #include "/src/light_vertex_dh.glsl" } diff --git a/shaders/common/solid_dh_water_fragment.glsl b/shaders/common/solid_dh_water_fragment.glsl index 74528655..92b03412 100644 --- a/shaders/common/solid_dh_water_fragment.glsl +++ b/shaders/common/solid_dh_water_fragment.glsl @@ -1,14 +1,17 @@ #include "/lib/config.glsl" +/* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform sampler2D tex; uniform float pixel_size_x; uniform float pixel_size_y; @@ -38,30 +41,32 @@ uniform vec3 cameraPosition; uniform int dhRenderDistance; #if CLOUD_VOL_STYLE == 1 && V_CLOUDS != 0 - uniform sampler2D colortex2; + uniform sampler2D colortex2; #elif V_CLOUDS != 0 - uniform sampler2D gaux2; + uniform sampler2D gaux2; #endif #ifdef NETHER - uniform vec3 fogColor; + uniform vec3 fogColor; #endif #if defined SHADOW_CASTING && !defined NETHER - uniform sampler2DShadow shadowtex1; - #if defined COLORED_SHADOW - uniform sampler2DShadow shadowtex0; - uniform sampler2D shadowcolor0; - #endif + uniform sampler2DShadow shadowtex1; + #if defined COLORED_SHADOW + uniform sampler2DShadow shadowtex0; + uniform sampler2D shadowcolor0; + #endif #endif uniform float blindness; #if MC_VERSION >= 11900 - uniform float darknessFactor; - uniform float darknessLightFactor; + uniform float darknessFactor; + uniform float darknessLightFactor; #endif +/* Ins / Outs */ + varying vec2 texcoord; varying vec4 tint_color; varying vec3 direct_light_color; @@ -81,6 +86,8 @@ varying vec2 lmcoord; varying float block_type; varying float frog_adjust; +/* Utility functions */ + #include "/lib/projection_utils.glsl" #include "/lib/basic_utils.glsl" #include "/lib/dither.glsl" @@ -89,172 +96,135 @@ varying float frog_adjust; #include "/lib/luma.glsl" void main() { - #if AA_TYPE > 0 - float dither = shifted_r_dither(gl_FragCoord.xy); - #else - float dither = r_dither(gl_FragCoord.xy); - #endif - // Avoid render in DH transition - float t = far - dhNearPlane; - float sup = t * TRANSITION_DH_SUP; - float inf = t * TRANSITION_DH_INF; - float view_dist = length(position.xyz); - float umbral = (view_dist - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); - - float d = texture2D(depthtex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight)).r; - float linear_d = ld(d); - - if (umbral < dither || linear_d < 0.9999 || view_dist > dhRenderDistance) { - discard; - return; - } - - #if defined VANILLA_WATER || WATER_TEXTURE == 1 - vec4 block_color = vec4(0.1); - // Synthetic water texture - vec3 synth_pos = (position.xyz + cameraPosition) * 2.0; - synth_pos = floor(synth_pos + 0.01); - float synth_noise = (hash13(synth_pos) * 0.2) + 0.4; - block_color.rgb += vec3(synth_noise); - #else - vec4 block_color; - #endif - - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - - vec3 real_light; - - #ifdef VANILLA_WATER - vec3 water_normal_base = vec3(0.0, 0.0, 1.0); - #else - vec3 world_pos = position.xyz + cameraPosition; - vec3 water_normal_base = normal_waves_dh(world_pos.xzy); - #endif - - vec3 surface_normal; - if (block_type < DH_BLOCK_WATER + 0.5 && block_type > DH_BLOCK_WATER - 0.5) { // Water - surface_normal = get_normals(water_normal_base, fragposition); - } else { - surface_normal = get_normals(vec3(0.0, 0.0, 1.0), fragposition); - } - - float normal_dot_eye = dot(surface_normal, normalize(fragposition)); - float fresnel = square_pow(1.0 + normal_dot_eye); - - vec3 reflect_water_vec = reflect(fragposition, surface_normal); - vec3 norm_reflect_water_vec = normalize(reflect_water_vec); - - vec3 sky_color_reflect; - if (isEyeInWater == 0 || isEyeInWater == 2) { - sky_color_reflect = mix( - low_sky_color, - hi_sky_color, - sqrt(clamp(dot(norm_reflect_water_vec, up_vec), 0.0001, 1.0)) - ); - } else { - sky_color_reflect = - hi_sky_color * .5 * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667); - } - - sky_color_reflect = xyz_to_rgb(sky_color_reflect); - - if (block_type < DH_BLOCK_WATER + 0.5 && block_type > DH_BLOCK_WATER - 0.5) { // Water + #if AA_TYPE > 0 + float dither = shifted_r_dither(gl_FragCoord.xy); + #else + float dither = r_dither(gl_FragCoord.xy); + #endif + // Avoid render in DH transition + float t = far - dhNearPlane; + float sup = t * TRANSITION_DH_SUP; + float inf = t * TRANSITION_DH_INF; + float view_dist = length(position.xyz); + float umbral = (view_dist - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); + + float d = texture2D(depthtex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight)).r; + float linear_d = ld(d); + + if(umbral < dither || linear_d < 0.9999 || view_dist > dhRenderDistance) { + discard; + return; + } + + #if defined VANILLA_WATER || WATER_TEXTURE == 1 + vec4 block_color = vec4(0.1); + // Synthetic water texture + vec3 synth_pos = (position.xyz + cameraPosition) * 2.0; + synth_pos = floor(synth_pos + 0.01); + float synth_noise = (hash13(synth_pos) * 0.2) + 0.4; + block_color.rgb += vec3(synth_noise); + #else + vec4 block_color; + #endif + + vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + + vec3 real_light; + #ifdef VANILLA_WATER - float shadow_c = abs((light_mix * 2.0) - 1.0); + vec3 water_normal_base = vec3(0.0, 0.0, 1.0); + #else + vec3 world_pos = position.xyz + cameraPosition; + vec3 water_normal_base = normal_waves_dh(world_pos.xzy); + #endif + + vec3 surface_normal; + if(block_type < DH_BLOCK_WATER + 0.5 && block_type > DH_BLOCK_WATER - 0.5) { // Water + surface_normal = get_normals(water_normal_base, fragposition); + } else { + surface_normal = get_normals(vec3(0.0, 0.0, 1.0), fragposition); + } + + float normal_dot_eye = dot(surface_normal, normalize(fragposition)); + float fresnel = square_pow(1.0 + normal_dot_eye); + + vec3 reflect_water_vec = reflect(fragposition, surface_normal); + vec3 norm_reflect_water_vec = normalize(reflect_water_vec); + + vec3 sky_color_reflect; + if(isEyeInWater == 0 || isEyeInWater == 2) { + sky_color_reflect = mix(low_sky_color, hi_sky_color, sqrt(clamp(dot(norm_reflect_water_vec, up_vec), 0.0001, 1.0))); + } else { + sky_color_reflect = hi_sky_color * .5 * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667); + } - float fresnel_tex = luma(block_color.rgb); + sky_color_reflect = xyz_to_rgb(sky_color_reflect); - real_light = - omni_light + - (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + - candle_color; + if(block_type < DH_BLOCK_WATER + 0.5 && block_type > DH_BLOCK_WATER - 0.5) { // Water + #ifdef VANILLA_WATER + float shadow_c = abs((light_mix * 2.0) - 1.0); + + float fresnel_tex = luma(block_color.rgb); - real_light *= (fresnel_tex * 2.0) - 0.25; + real_light = omni_light + + (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + + candle_color; - block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tint_color.rgb; + real_light *= (fresnel_tex * 2.0) - 0.25; - block_color.rgb = water_shader_dh( - fragposition, - surface_normal, - block_color.rgb, - sky_color_reflect, - norm_reflect_water_vec, - fresnel, - visible_sky, - dither, - direct_light_color - ); + block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tint_color.rgb; - block_color.a = sqrt(block_color.a); + block_color.rgb = water_shader_dh(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); + block_color.a = sqrt(block_color.a); #else + #if WATER_TEXTURE == 1 + float water_texture = luma(block_color.rgb); + #else + float water_texture = 1.0; + #endif - #if WATER_TEXTURE == 1 - float water_texture = luma(block_color.rgb); - #else - float water_texture = 1.0; - #endif - - real_light = - omni_light + - (direct_light_strength * direct_light_color) * (1.0 - rainStrength * 0.75) + - candle_color; - - #if defined NETHER || defined THE_END - #if WATER_COLOR_SOURCE == 0 - block_color.rgb = water_texture * real_light * WATER_COLOR; - #elif WATER_COLOR_SOURCE == 1 - block_color.rgb = 0.3 * water_texture * real_light * tint_color.rgb; + real_light = omni_light + + (direct_light_strength * direct_light_color) * (1.0 - rainStrength * 0.75) + + candle_color; + + #if defined NETHER || defined THE_END + #if WATER_COLOR_SOURCE == 0 + block_color.rgb = water_texture * real_light * WATER_COLOR; + #elif WATER_COLOR_SOURCE == 1 + block_color.rgb = 0.3 * water_texture * real_light * tint_color.rgb; + #endif + #else + #if WATER_COLOR_SOURCE == 0 + block_color.rgb = water_texture * real_light * visible_sky * WATER_COLOR; + #elif WATER_COLOR_SOURCE == 1 + block_color.rgb = 0.3 * water_texture * real_light * visible_sky * tint_color.rgb; + #endif #endif - #else - #if WATER_COLOR_SOURCE == 0 - block_color.rgb = water_texture * real_light * visible_sky * WATER_COLOR; - #elif WATER_COLOR_SOURCE == 1 - block_color.rgb = 0.3 * water_texture * real_light * visible_sky * tint_color.rgb; + + block_color = vec4(refraction(fragposition, block_color.rgb, water_normal_base), 1.0); + + #if WATER_TEXTURE == 1 + fresnel = clamp(fresnel * (water_texture * water_texture + 0.5), 0.0, 1.0); #endif - #endif - - block_color = vec4( - refraction( - fragposition, - block_color.rgb, - water_normal_base - ), - 1.0 - ); - - #if WATER_TEXTURE == 1 - fresnel = clamp(fresnel * (water_texture * water_texture + 0.5), 0.0, 1.0); - #endif - - block_color.rgb = water_shader_dh( - fragposition, - surface_normal, - block_color.rgb, - sky_color_reflect, - norm_reflect_water_vec, - fresnel, - visible_sky, - dither, - direct_light_color - ); + + block_color.rgb = water_shader_dh(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); #endif - } else { // Otros translúcidos + } else { // Otros translúcidos - block_color = tint_color; + block_color = tint_color; - float shadow_c = abs((light_mix * 2.0) - 1.0); + float shadow_c = abs((light_mix * 2.0) - 1.0); - real_light = - omni_light + - (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + - candle_color; + real_light = omni_light + + (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + + candle_color; - block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125); - } + block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125); + } - #include "/src/finalcolor_dh.glsl" - #include "/src/writebuffers.glsl" + #include "/src/finalcolor_dh.glsl" + #include "/src/writebuffers.glsl" } diff --git a/shaders/common/solid_dh_water_vertex.glsl b/shaders/common/solid_dh_water_vertex.glsl index 71e83188..f59b4fe3 100644 --- a/shaders/common/solid_dh_water_vertex.glsl +++ b/shaders/common/solid_dh_water_vertex.glsl @@ -1,14 +1,17 @@ #include "/lib/config.glsl" +/* Color utils */ + #if defined THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform ivec2 eyeBrightnessSmooth; uniform mat4 dhProjection; uniform mat4 gbufferModelView; @@ -21,13 +24,15 @@ uniform float rainStrength; uniform mat4 gbufferProjectionInverse; #ifdef DISTANT_HORIZONS - uniform int dhRenderDistance; + uniform int dhRenderDistance; #endif #ifdef UNKNOWN_DIM - uniform sampler2D lightmap; + uniform sampler2D lightmap; #endif +/* Ins / Outs */ + varying vec2 texcoord; varying vec4 tint_color; varying vec3 direct_light_color; @@ -47,31 +52,36 @@ varying vec2 lmcoord; varying float block_type; varying float frog_adjust; +/* Utility functions */ + #if AA_TYPE > 0 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif #include "/lib/basic_utils.glsl" #include "/lib/luma.glsl" +// MAIN FUNCTION ------------------ + void main() { - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - #include "/src/basiccoords_vertex_dh.glsl" - #include "/src/position_vertex_dh.glsl" - #include "/src/hi_sky.glsl" - #include "/src/low_sky.glsl" - #include "/src/light_vertex_dh.glsl" - - vec4 position2 = gl_ModelViewMatrix * gl_Vertex; - fragposition = position2.xyz; - - binormal = normalize(gbufferModelView[2].xyz); - tangent = normalize(gbufferModelView[0].xyz); - water_normal = normal; - - up_vec = normalize(gbufferModelView[1].xyz); - - if (dhMaterialId == DH_BLOCK_WATER) { // Water - block_type = float(DH_BLOCK_WATER); - } + vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + + #include "/src/basiccoords_vertex_dh.glsl" + #include "/src/position_vertex_dh.glsl" + #include "/src/hi_sky.glsl" + #include "/src/low_sky.glsl" + #include "/src/light_vertex_dh.glsl" + + vec4 position2 = gl_ModelViewMatrix * gl_Vertex; + fragposition = position2.xyz; + + binormal = normalize(gbufferModelView[2].xyz); + tangent = normalize(gbufferModelView[0].xyz); + water_normal = normal; + + up_vec = normalize(gbufferModelView[1].xyz); + + if(dhMaterialId == DH_BLOCK_WATER) { // Water + block_type = float(DH_BLOCK_WATER); + } } diff --git a/shaders/common/spidereyes_blocks_fragment.glsl b/shaders/common/spidereyes_blocks_fragment.glsl index d6182155..129bb089 100644 --- a/shaders/common/spidereyes_blocks_fragment.glsl +++ b/shaders/common/spidereyes_blocks_fragment.glsl @@ -1,13 +1,18 @@ #include "/lib/config.glsl" -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform sampler2D tex; +/* Ins / Outs */ + varying vec2 texcoord; +// MAIN FUNCTION ------------------ + void main() { - // Toma el color puro del bloque - vec4 block_color = texture2D(tex, texcoord); + // Toma el color puro del bloque + vec4 block_color = texture2D(tex, texcoord); - #include "/src/writebuffers.glsl" + #include "/src/writebuffers.glsl" } diff --git a/shaders/common/spidereyes_blocks_vertex.glsl b/shaders/common/spidereyes_blocks_vertex.glsl index f9d064b9..e7961447 100644 --- a/shaders/common/spidereyes_blocks_vertex.glsl +++ b/shaders/common/spidereyes_blocks_vertex.glsl @@ -1,20 +1,27 @@ #include "/lib/config.glsl" -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform mat4 gbufferProjectionInverse; #if defined SHADOW_CASTING && !defined NETHER - uniform mat4 gbufferModelViewInverse; + uniform mat4 gbufferModelViewInverse; #endif +/* Ins / Outs */ + varying vec2 texcoord; +/* Utility functions */ + #if AA_TYPE > 0 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif +// MAIN FUNCTION ------------------ + void main() { - texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; - #include "/src/position_vertex.glsl" + #include "/src/position_vertex.glsl" } \ No newline at end of file diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index 731fe66a..e74e77c7 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -1,14 +1,17 @@ #include "/lib/config.glsl" +/* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform sampler2D tex; uniform float pixel_size_x; uniform float pixel_size_y; @@ -32,45 +35,47 @@ uniform ivec2 eyeBrightnessSmooth; uniform sampler2D gaux4; #if defined DISTANT_HORIZONS - uniform float dhNearPlane; - uniform float dhFarPlane; - uniform sampler2D dhDepthTex1; + uniform float dhNearPlane; + uniform float dhFarPlane; + uniform sampler2D dhDepthTex1; #endif #if CLOUD_VOL_STYLE == 1 && V_CLOUDS != 0 - uniform sampler2D colortex2; + uniform sampler2D colortex2; #elif V_CLOUDS != 0 - uniform sampler2D gaux2; + uniform sampler2D gaux2; #endif #ifdef NETHER - uniform vec3 fogColor; + uniform vec3 fogColor; #endif #if defined SHADOW_CASTING && !defined NETHER - uniform sampler2DShadow shadowtex1; - #if defined COLORED_SHADOW - uniform sampler2DShadow shadowtex0; - uniform sampler2D shadowcolor0; - #endif + uniform sampler2DShadow shadowtex1; + #if defined COLORED_SHADOW + uniform sampler2DShadow shadowtex0; + uniform sampler2D shadowcolor0; + #endif #endif #ifdef CLOUD_REFLECTION - // Don't remove (Optifine bug?) + // Don't remove #endif #if defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER - uniform vec3 cameraPosition; - uniform mat4 gbufferModelViewInverse; + uniform vec3 cameraPosition; + uniform mat4 gbufferModelViewInverse; #endif uniform float blindness; #if MC_VERSION >= 11900 - uniform float darknessFactor; - uniform float darknessLightFactor; + uniform float darknessFactor; + uniform float darknessLightFactor; #endif +/* Ins / Outs */ + varying vec2 texcoord; varying vec2 lmcoord; varying vec4 tint_color; @@ -91,237 +96,182 @@ varying vec3 hi_sky_color; varying vec3 low_sky_color; #if defined SHADOW_CASTING && !defined NETHER - varying vec3 shadow_pos; - varying float shadow_diffuse; + varying vec3 shadow_pos; + varying float shadow_diffuse; #endif #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY - varying float umbral; - varying vec3 cloud_color; - varying vec3 dark_cloud_color; + varying float umbral; + varying vec3 cloud_color; + varying vec3 dark_cloud_color; #endif +/* Utility functions */ + #include "/lib/projection_utils.glsl" #include "/lib/basic_utils.glsl" #include "/lib/dither.glsl" #include "/lib/water.glsl" #if defined SHADOW_CASTING && !defined NETHER - #include "/lib/shadow_frag.glsl" + #include "/lib/shadow_frag.glsl" #endif #include "/lib/luma.glsl" #if defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER - #include "/lib/volumetric_clouds.glsl" + #include "/lib/volumetric_clouds.glsl" #endif +// MAIN FUNCTION ------------------ + void main() { - #if SHADOW_TYPE == 1 || defined DISTANT_HORIZONS || (defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER) || SSR_TYPE > 0 - #if AA_TYPE > 0 - float dither = shifted_r_dither(gl_FragCoord.xy); + #if SHADOW_TYPE == 1 || defined DISTANT_HORIZONS || (defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER) || SSR_TYPE > 0 + #if AA_TYPE > 0 + float dither = shifted_r_dither(gl_FragCoord.xy); + #else + float dither = r_dither(gl_FragCoord.xy); + #endif #else - float dither = r_dither(gl_FragCoord.xy); + float dither = 1.0; #endif - #else - float dither = 1.0; - #endif - - vec4 block_color = texture2D(tex, texcoord); - - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - - vec3 real_light; - - #ifdef VANILLA_WATER - vec3 water_normal_base = vec3(0.0, 0.0, 1.0); - #else - vec3 water_normal_base = normal_waves(worldposition.xzy); - #endif - - vec3 surface_normal; - if (block_type > 2.5) { // Water - surface_normal = get_normals(water_normal_base, fragposition); - } else { - surface_normal = get_normals(vec3(0.0, 0.0, 1.0), fragposition); - } - - float normal_dot_eye = dot(surface_normal, normalize(fragposition)); - float fresnel = square_pow(1.0 + normal_dot_eye); - - vec3 reflect_water_vec = reflect(fragposition, surface_normal); - vec3 norm_reflect_water_vec = normalize(reflect_water_vec); - - vec3 sky_color_reflect; - if (isEyeInWater == 0 || isEyeInWater == 2) { - sky_color_reflect = mix( - low_sky_color, - hi_sky_color, - sqrt(clamp(dot(norm_reflect_water_vec, up_vec), 0.0001, 1.0)) - ); - } else { - sky_color_reflect = - hi_sky_color * .5 * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667); - } - - sky_color_reflect = xyz_to_rgb(sky_color_reflect); - - #if defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER - sky_color_reflect = get_cloud( - normalize((gbufferModelViewInverse * vec4(reflect_water_vec * far, 1.0)).xyz), - sky_color_reflect, - 0.0, - dither, - worldposition.xyz, - int(CLOUD_STEPS_AVG * 0.5), - umbral, - cloud_color, - dark_cloud_color - ); - #endif - - if (block_type > 2.5) { // Water + + vec4 block_color = texture2D(tex, texcoord); + vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + vec3 real_light; + #ifdef VANILLA_WATER - #if defined SHADOW_CASTING && !defined NETHER - #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_pos, dither); - shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); + vec3 water_normal_base = vec3(0.0, 0.0, 1.0); + #else + vec3 water_normal_base = normal_waves(worldposition.xzy); + #endif + vec3 surface_normal; + if(block_type > 2.5) { // Water + surface_normal = get_normals(water_normal_base, fragposition); + } else { + surface_normal = get_normals(vec3(0.0, 0.0, 1.0), fragposition); + } + + float normal_dot_eye = dot(surface_normal, normalize(fragposition)); + float fresnel = square_pow(1.0 + normal_dot_eye); + + vec3 reflect_water_vec = reflect(fragposition, surface_normal); + vec3 norm_reflect_water_vec = normalize(reflect_water_vec); + + vec3 sky_color_reflect; + if(isEyeInWater == 0 || isEyeInWater == 2) { + sky_color_reflect = mix(low_sky_color, hi_sky_color, sqrt(clamp(dot(norm_reflect_water_vec, up_vec), 0.0001, 1.0))); + } else { + sky_color_reflect = hi_sky_color * .5 * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667); + } + + sky_color_reflect = xyz_to_rgb(sky_color_reflect); + + #if defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER + sky_color_reflect = get_cloud(normalize((gbufferModelViewInverse * vec4(reflect_water_vec * far, 1.0)).xyz), sky_color_reflect, 0.0, dither, worldposition.xyz, int(CLOUD_STEPS_AVG * 0.5), umbral, cloud_color, dark_cloud_color); + #endif + if(block_type > 2.5) { // Water + #ifdef VANILLA_WATER + #if defined SHADOW_CASTING && !defined NETHER + #if defined COLORED_SHADOW + vec3 shadow_c = get_colored_shadow(shadow_pos, dither); + shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); + #else + float shadow_c = get_shadow(shadow_pos, dither); + shadow_c = mix(shadow_c, 1.0, shadow_diffuse); + #endif + #else + float shadow_c = abs((light_mix * 2.0) - 1.0); + #endif + + float fresnel_tex = luma(block_color.rgb); + + real_light = omni_light + + (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + + candle_color; + + real_light *= (fresnel_tex * 2.0) - 0.25; + + block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tint_color.rgb; + + block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); + + block_color.a = sqrt(block_color.a); + #else - float shadow_c = get_shadow(shadow_pos, dither); - shadow_c = mix(shadow_c, 1.0, shadow_diffuse); + + #if WATER_TEXTURE == 1 + float water_texture = luma(block_color.rgb); + #else + float water_texture = 1.0; #endif - #else - float shadow_c = abs((light_mix * 2.0) - 1.0); - #endif - float fresnel_tex = luma(block_color.rgb); + real_light = omni_light + + (direct_light_strength * direct_light_color) * (1.0 - rainStrength * 0.75) + + candle_color; - real_light = - omni_light + - (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + - candle_color; + #if defined NETHER || defined THE_END + #if WATER_COLOR_SOURCE == 0 + block_color.rgb = water_texture * real_light * WATER_COLOR; + #elif WATER_COLOR_SOURCE == 1 + block_color.rgb = 0.3 * water_texture * real_light * tint_color.rgb; + #endif + #else + #if WATER_COLOR_SOURCE == 0 + block_color.rgb = water_texture * real_light * visible_sky * WATER_COLOR; + #elif WATER_COLOR_SOURCE == 1 + block_color.rgb = 0.3 * water_texture * real_light * visible_sky * tint_color.rgb; + #endif + #endif - real_light *= (fresnel_tex * 2.0) - 0.25; + block_color = vec4(refraction(fragposition, block_color.rgb, water_normal_base), 1.0); - block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tint_color.rgb; + #if WATER_TEXTURE == 1 + fresnel = clamp(fresnel * (water_texture * water_texture + 0.5), 0.0, 1.0); + #endif - block_color.rgb = water_shader( - fragposition, - surface_normal, - block_color.rgb, - sky_color_reflect, - norm_reflect_water_vec, - fresnel, - visible_sky, - dither, - direct_light_color - ); + block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); + #endif - block_color.a = sqrt(block_color.a); + } else { // Otros translúcidos - #else + block_color *= tint_color; - #if WATER_TEXTURE == 1 - float water_texture = luma(block_color.rgb); - #else - float water_texture = 1.0; - #endif - - real_light = - omni_light + - (direct_light_strength * direct_light_color) * (1.0 - rainStrength * 0.75) + - candle_color; - - #if defined NETHER || defined THE_END - #if WATER_COLOR_SOURCE == 0 - block_color.rgb = water_texture * real_light * WATER_COLOR; - #elif WATER_COLOR_SOURCE == 1 - block_color.rgb = 0.3 * water_texture * real_light * tint_color.rgb; + #if defined SHADOW_CASTING && !defined NETHER + #if defined COLORED_SHADOW + vec3 shadow_c = get_colored_shadow(shadow_pos, dither); + shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); + #else + float shadow_c = get_shadow(shadow_pos, dither); + shadow_c = mix(shadow_c, 1.0, shadow_diffuse); #endif - #else - #if WATER_COLOR_SOURCE == 0 - block_color.rgb = water_texture * real_light * visible_sky * WATER_COLOR; - #elif WATER_COLOR_SOURCE == 1 - block_color.rgb = 0.3 * water_texture * real_light * visible_sky * tint_color.rgb; + #else + float shadow_c = abs((light_mix * 2.0) - 1.0); #endif - #endif - - block_color = vec4( - refraction( - fragposition, - block_color.rgb, - water_normal_base - ), - 1.0 - ); - - #if WATER_TEXTURE == 1 - fresnel = clamp(fresnel * (water_texture * water_texture + 0.5), 0.0, 1.0); - #endif - - block_color.rgb = water_shader( - fragposition, - surface_normal, - block_color.rgb, - sky_color_reflect, - norm_reflect_water_vec, - fresnel, - visible_sky, - dither, - direct_light_color - ); - #endif + real_light = omni_light + + (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + + candle_color; - } else { // Otros translúcidos + block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125); - block_color *= tint_color; + if(block_type > 1.5) { // Glass + block_color = cristal_shader(fragposition, water_normal, block_color, sky_color_reflect, fresnel * fresnel, visible_sky, dither, direct_light_color); + } + } - #if defined SHADOW_CASTING && !defined NETHER - #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_pos, dither); - shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); - #else - float shadow_c = get_shadow(shadow_pos, dither); - shadow_c = mix(shadow_c, 1.0, shadow_diffuse); - #endif - #else - float shadow_c = abs((light_mix * 2.0) - 1.0); + // Avoid render in DH transition + #ifdef DISTANT_HORIZONS + float t = far - dhNearPlane; + float sup = t * TRANSITION_WATER_SUP; + float inf = t * TRANSITION_WATER_INF; + float draw_umbral = (gl_FogFragCoord - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); + if(draw_umbral > dither) { + discard; + return; + } #endif - real_light = - omni_light + - (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + - candle_color; - - block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125); - - if (block_type > 1.5) { // Glass - block_color = cristal_shader( - fragposition, - water_normal, - block_color, - sky_color_reflect, - fresnel * fresnel, - visible_sky, - dither, - direct_light_color - ); - } - } - - // Avoid render in DH transition - #ifdef DISTANT_HORIZONS - float t = far - dhNearPlane; - float sup = t * TRANSITION_WATER_SUP; - float inf = t * TRANSITION_WATER_INF; - float draw_umbral = (gl_FogFragCoord - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); - if (draw_umbral > dither) { - discard; - return; - } - #endif - - #include "/src/finalcolor.glsl" - #include "/src/writebuffers.glsl" + #include "/src/finalcolor.glsl" + #include "/src/writebuffers.glsl" } diff --git a/shaders/common/water_blocks_vertex.glsl b/shaders/common/water_blocks_vertex.glsl index b57f4403..f874b04e 100644 --- a/shaders/common/water_blocks_vertex.glsl +++ b/shaders/common/water_blocks_vertex.glsl @@ -1,14 +1,17 @@ #include "/lib/config.glsl" +/* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform vec3 sunPosition; uniform int isEyeInWater; uniform float light_mix; @@ -22,24 +25,26 @@ uniform float rainStrength; uniform mat4 gbufferProjectionInverse; #ifdef DISTANT_HORIZONS - uniform int dhRenderDistance; + uniform int dhRenderDistance; #endif #ifdef DYN_HAND_LIGHT - uniform int heldItemId; - uniform int heldItemId2; + uniform int heldItemId; + uniform int heldItemId2; #endif #ifdef UNKNOWN_DIM - uniform sampler2D lightmap; + uniform sampler2D lightmap; #endif #if defined SHADOW_CASTING && !defined NETHER - uniform mat4 shadowModelView; - uniform mat4 shadowProjection; - uniform vec3 shadowLightPosition; + uniform mat4 shadowModelView; + uniform mat4 shadowProjection; + uniform vec3 shadowLightPosition; #endif +/* Ins / Outs */ + varying vec2 texcoord; varying vec2 lmcoord; varying vec4 tint_color; @@ -60,65 +65,71 @@ varying vec3 hi_sky_color; varying vec3 low_sky_color; #if defined SHADOW_CASTING && !defined NETHER - varying vec3 shadow_pos; - varying float shadow_diffuse; + varying vec3 shadow_pos; + varying float shadow_diffuse; #endif #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY - varying float umbral; - varying vec3 cloud_color; - varying vec3 dark_cloud_color; + varying float umbral; + varying vec3 cloud_color; + varying vec3 dark_cloud_color; #endif attribute vec4 mc_Entity; attribute vec4 at_tangent; +/* Utility functions */ + #if AA_TYPE > 1 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif #include "/lib/basic_utils.glsl" #if defined SHADOW_CASTING && !defined NETHER - #include "/lib/shadow_vertex.glsl" + #include "/lib/shadow_vertex.glsl" #endif +/* Utility functions */ + #include "/lib/luma.glsl" +// MAIN FUNCTION ------------------ + void main() { - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - - #include "/src/basiccoords_vertex.glsl" - #include "/src/position_vertex_water.glsl" + vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + + #include "/src/basiccoords_vertex.glsl" + #include "/src/position_vertex_water.glsl" + + // Sky color calculation + #include "/src/hi_sky.glsl" + #include "/src/low_sky.glsl" - // Sky color calculation - #include "/src/hi_sky.glsl" - #include "/src/low_sky.glsl" + #include "/src/light_vertex.glsl" - #include "/src/light_vertex.glsl" - - water_normal = normal; + water_normal = normal; - tangent = normalize(gl_NormalMatrix * at_tangent.xyz); - binormal = normalize(gl_NormalMatrix * -cross(gl_Normal, at_tangent.xyz)); + tangent = normalize(gl_NormalMatrix * at_tangent.xyz); + binormal = normalize(gl_NormalMatrix * -cross(gl_Normal, at_tangent.xyz)); - // Special entities - block_type = 0.0; // 3 - Water, 2 - Glass, ? - Other - if (mc_Entity.x == ENTITY_WATER) { // Water - block_type = 3.0; - } else if (mc_Entity.x == ENTITY_STAINED) { // Glass - block_type = 2.0; - } + // Special entities + block_type = 0.0; // 3 - Water, 2 - Glass, ? - Other + if(mc_Entity.x == ENTITY_WATER) { // Water + block_type = 3.0; + } else if(mc_Entity.x == ENTITY_STAINED) { // Glass + block_type = 2.0; + } - up_vec = normalize(gbufferModelView[1].xyz); + up_vec = normalize(gbufferModelView[1].xyz); - #include "/src/fog_vertex.glsl" + #include "/src/fog_vertex.glsl" - #if defined SHADOW_CASTING && !defined NETHER - #include "/src/shadow_src_vertex.glsl" - #endif + #if defined SHADOW_CASTING && !defined NETHER + #include "/src/shadow_src_vertex.glsl" + #endif - #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY - #include "/lib/volumetric_clouds_vertex.glsl" - #endif + #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY + #include "/lib/volumetric_clouds_vertex.glsl" + #endif } diff --git a/shaders/gbuffers_line.fsh b/shaders/gbuffers_line.fsh index 81a3e982..e91e2f18 100644 --- a/shaders/gbuffers_line.fsh +++ b/shaders/gbuffers_line.fsh @@ -11,5 +11,6 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define UNKNOWN_DIM #endif #define GBUFFER_LINE +#define NO_SHADOWS #include "/common/line_blocks_fragment.glsl" diff --git a/shaders/lib/mu_ftransform.glsl b/shaders/lib/mu_ftransform.glsl new file mode 100644 index 00000000..08ab18f0 --- /dev/null +++ b/shaders/lib/mu_ftransform.glsl @@ -0,0 +1,18 @@ +vec4 mu_ftransform() { + float lineWidth = 1.75; + vec2 screenSize = vec2(viewWidth, viewHeight); + mat4 VIEW_SCALE = mat4(mat3(1.0 - 0.00390625)); + mat4 tempmat = gl_ProjectionMatrix * VIEW_SCALE * gl_ModelViewMatrix; + vec4 linePosStart = tempmat * gl_Vertex; + vec4 linePosEnd = tempmat * vec4(gl_Vertex.xyz + gl_Normal, 1.0); + vec3 ndc1 = linePosStart.xyz / linePosStart.w; + vec3 ndc2 = linePosEnd.xyz / linePosEnd.w; + vec2 lineScreenDirection = normalize((ndc2.xy - ndc1.xy) * screenSize); + vec2 lineOffset = vec2(-lineScreenDirection.y, lineScreenDirection.x) * lineWidth / screenSize; + if(lineOffset.x < 0.0) + lineOffset *= -1.0; + if(gl_VertexID % 2 == 0) + return vec4((ndc1 + vec3(lineOffset, 0.0)) * linePosStart.w, linePosStart.w); + else + return vec4((ndc1 - vec3(lineOffset, 0.0)) * linePosStart.w, linePosStart.w); +} \ No newline at end of file diff --git a/shaders/src/taa_offset.glsl b/shaders/src/taa_offset.glsl index 0def9390..35d138e1 100644 --- a/shaders/src/taa_offset.glsl +++ b/shaders/src/taa_offset.glsl @@ -1,22 +1,22 @@ #if MC_VERSION >= 11300 - uniform vec2 taa_offset; + uniform vec2 taa_offset; #else - uniform int frame_mod; - uniform float pixel_size_x; - uniform float pixel_size_y; + uniform int frame_mod; + uniform float pixel_size_x; + uniform float pixel_size_y; - vec2[10] offset_array = vec2[10] ( - vec2(0.7071067811865476, 0.0), - vec2(-0.5720614028176843, 0.4156269377774535), - vec2(0.2185080122244104, -0.6724985119639574), - vec2(0.21850801222441057, 0.6724985119639574), - vec2(-0.5720614028176845, -0.4156269377774534), - vec2(0.7071067811865476, 0.0), - vec2(-0.5720614028176843, 0.4156269377774535), - vec2(0.2185080122244104, -0.6724985119639574), - vec2(0.21850801222441057, 0.6724985119639574), - vec2(-0.5720614028176845, -0.4156269377774534) - ); + vec2[10] offset_array = vec2[10] ( + vec2(0.7071067811865476, 0.0), + vec2(-0.5720614028176843, 0.4156269377774535), + vec2(0.2185080122244104, -0.6724985119639574), + vec2(0.21850801222441057, 0.6724985119639574), + vec2(-0.5720614028176845, -0.4156269377774534), + vec2(0.7071067811865476, 0.0), + vec2(-0.5720614028176843, 0.4156269377774535), + vec2(0.2185080122244104, -0.6724985119639574), + vec2(0.21850801222441057, 0.6724985119639574), + vec2(-0.5720614028176845, -0.4156269377774534) + ); - vec2 taa_offset = offset_array[frame_mod] * vec2(pixel_size_x, pixel_size_y); + vec2 taa_offset = offset_array[frame_mod] * vec2(pixel_size_x, pixel_size_y); #endif From 4fb11cde604eb73c0dd512ec7fe4a34338d549a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sun, 13 Oct 2024 19:36:06 -0600 Subject: [PATCH 016/147] Refactor II --- shaders/common/prepare_vertex.glsl | 3 +- shaders/common/skybasic_vertex.glsl | 3 +- shaders/src/basiccoords_vertex.glsl | 10 +- shaders/src/basiccoords_vertex_dh.glsl | 4 +- shaders/src/cloudfinalcolor.glsl | 10 +- shaders/src/finalcolor.glsl | 86 ++++++-------- shaders/src/finalcolor_dh.glsl | 38 ++----- shaders/src/fog_vertex.glsl | 76 ++++++------- shaders/src/light_vertex.glsl | 151 ++++++++++++------------- shaders/src/light_vertex_dh.glsl | 80 ++++++------- shaders/src/position_vertex.glsl | 146 ++++++++++++------------ shaders/src/position_vertex_dh.glsl | 26 ++--- shaders/src/shadow_src_vertex.glsl | 86 +++++++------- 13 files changed, 339 insertions(+), 380 deletions(-) diff --git a/shaders/common/prepare_vertex.glsl b/shaders/common/prepare_vertex.glsl index 6e70fb61..c51bb3fc 100644 --- a/shaders/common/prepare_vertex.glsl +++ b/shaders/common/prepare_vertex.glsl @@ -30,7 +30,8 @@ varying vec3 low_sky_color; void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - #include "/src/sky_color_vertex.glsl" + #include "/src/hi_sky.glsl" + #include "/src/low_sky.glsl" up_vec = normalize(gbufferModelView[1].xyz); } diff --git a/shaders/common/skybasic_vertex.glsl b/shaders/common/skybasic_vertex.glsl index 1cc7263b..12396b75 100644 --- a/shaders/common/skybasic_vertex.glsl +++ b/shaders/common/skybasic_vertex.glsl @@ -58,6 +58,7 @@ void main() { #if MC_VERSION < 11604 up_vec = normalize(gbufferModelView[1].xyz); - #include "/src/sky_color_vertex.glsl" + #include "/src/hi_sky.glsl" + #include "/src/low_sky.glsl" #endif } diff --git a/shaders/src/basiccoords_vertex.glsl b/shaders/src/basiccoords_vertex.glsl index eaf73b9d..6d438720 100644 --- a/shaders/src/basiccoords_vertex.glsl +++ b/shaders/src/basiccoords_vertex.glsl @@ -1,9 +1,9 @@ texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; #ifndef SHADER_BASIC - #ifdef WATER_F - lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy * 1.0323886639676114; - #else - vec2 lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy * 1.0323886639676114; - #endif + #ifdef WATER_F + lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy * 1.0323886639676114; + #else + vec2 lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy * 1.0323886639676114; + #endif #endif diff --git a/shaders/src/basiccoords_vertex_dh.glsl b/shaders/src/basiccoords_vertex_dh.glsl index 1158678c..3a4479fb 100644 --- a/shaders/src/basiccoords_vertex_dh.glsl +++ b/shaders/src/basiccoords_vertex_dh.glsl @@ -1,7 +1,7 @@ texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; #ifdef DH_WATER - lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy * 1.0323886639676114; + lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy * 1.0323886639676114; #else - vec2 lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy * 1.0323886639676114; + vec2 lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy * 1.0323886639676114; #endif diff --git a/shaders/src/cloudfinalcolor.glsl b/shaders/src/cloudfinalcolor.glsl index 9aff4506..ae993d1d 100644 --- a/shaders/src/cloudfinalcolor.glsl +++ b/shaders/src/cloudfinalcolor.glsl @@ -1,6 +1,6 @@ block_color.rgb = - mix( - block_color.rgb, - texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb, - clamp(pow(gl_FogFragCoord / (far * 1.66), 1.5), 0.0, 1.0) - ); + mix( + block_color.rgb, + texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb, + clamp(pow(gl_FogFragCoord / (far * 1.66), 1.5), 0.0, 1.0) + ); diff --git a/shaders/src/finalcolor.glsl b/shaders/src/finalcolor.glsl index 0be66fae..f888a591 100644 --- a/shaders/src/finalcolor.glsl +++ b/shaders/src/finalcolor.glsl @@ -1,63 +1,41 @@ #if defined THE_END - if (isEyeInWater == 0 && FOG_ADJUST < 15.0) { // In the air - block_color.rgb = - mix( - block_color.rgb, - ZENITH_DAY_COLOR, - frog_adjust - ); - } + if(isEyeInWater == 0 && FOG_ADJUST < 15.0) { // In the air + block_color.rgb = mix(block_color.rgb, ZENITH_DAY_COLOR, frog_adjust); + } #elif defined NETHER - if (isEyeInWater == 0 && FOG_ADJUST < 15.0) { // In the air - block_color.rgb = - mix( - block_color.rgb, - mix(fogColor * 0.1, vec3(1.0), 0.04), - frog_adjust - ); - } + if(isEyeInWater == 0 && FOG_ADJUST < 15.0) { // In the air + block_color.rgb = mix(block_color.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frog_adjust); + } #else - #ifdef FOG_ACTIVE // Fog active - #if MC_VERSION >= 11900 - vec3 fog_texture; - if (darknessFactor > .01) { - fog_texture = vec3(0.0); - } else { - fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; - } - #else - vec3 fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; + #ifdef FOG_ACTIVE // Fog active + #if MC_VERSION >= 11900 + vec3 fog_texture; + if(darknessFactor > .01) { + fog_texture = vec3(0.0); + } else { + fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; + } + #else + vec3 fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; + #endif + #if defined GBUFFER_ENTITIES + if(isEyeInWater == 0 && entityId != 10101 && FOG_ADJUST < 15.0) { // In the air + block_color.rgb = mix(block_color.rgb, fog_texture, frog_adjust); + } + #else + if(isEyeInWater == 0) { // In the air + block_color.rgb = mix(block_color.rgb, fog_texture, frog_adjust); + } + #endif #endif - #if defined GBUFFER_ENTITIES - if (isEyeInWater == 0 && entityId != 10101 && FOG_ADJUST < 15.0) { // In the air - block_color.rgb = - mix( - block_color.rgb, - fog_texture, - frog_adjust - ); - } - #else - if (isEyeInWater == 0) { // In the air - block_color.rgb = - mix( - block_color.rgb, - fog_texture, - frog_adjust - ); - } - #endif - #endif #endif #if MC_VERSION >= 11900 - if (blindness > .01 || darknessFactor > .01) { - block_color.rgb = - mix(block_color.rgb, vec3(0.0), max(blindness, darknessLightFactor) * gl_FogFragCoord * 0.24); - } + if(blindness > .01 || darknessFactor > .01) { + block_color.rgb = mix(block_color.rgb, vec3(0.0), max(blindness, darknessLightFactor) * gl_FogFragCoord * 0.24); + } #else - if (blindness > .01) { - block_color.rgb = - mix(block_color.rgb, vec3(0.0), blindness * gl_FogFragCoord * 0.24); - } + if(blindness > .01) { + block_color.rgb = mix(block_color.rgb, vec3(0.0), blindness * gl_FogFragCoord * 0.24); + } #endif \ No newline at end of file diff --git a/shaders/src/finalcolor_dh.glsl b/shaders/src/finalcolor_dh.glsl index 0c19858f..c3c08117 100644 --- a/shaders/src/finalcolor_dh.glsl +++ b/shaders/src/finalcolor_dh.glsl @@ -1,31 +1,15 @@ #if defined DH_WATER - if (isEyeInWater == 0) { - vec3 fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; - block_color.rgb = - mix( - block_color.rgb, - fog_texture, - frog_adjust - ); - } + if(isEyeInWater == 0) { + vec3 fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; + block_color.rgb = mix(block_color.rgb, fog_texture, frog_adjust); + } #elif defined NETHER - #if NETHER_FOG_DISTANCE == 1 - block_color.rgb = mix(fogColor * 0.1, vec3(1.0), 0.04); - #else - block_color.rgb = - mix( - block_color.rgb, - mix(fogColor * 0.1, vec3(1.0), 0.04), - frog_adjust - ); - #endif + #if NETHER_FOG_DISTANCE == 1 + block_color.rgb = mix(fogColor * 0.1, vec3(1.0), 0.04); + #else + block_color.rgb = mix(block_color.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frog_adjust); + #endif #else - vec3 fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; - - block_color.rgb = - mix( - block_color.rgb, - fog_texture, - frog_adjust - ); +vec3 fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; +block_color.rgb = mix(block_color.rgb, fog_texture, frog_adjust); #endif \ No newline at end of file diff --git a/shaders/src/fog_vertex.glsl b/shaders/src/fog_vertex.glsl index 567bdca8..fe454a3d 100644 --- a/shaders/src/fog_vertex.glsl +++ b/shaders/src/fog_vertex.glsl @@ -1,47 +1,47 @@ #if !defined THE_END && !defined NETHER - // Fog intensity calculation - #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - float fog_density_coeff = FOG_DENSITY * FOG_ADJUST; - #else - float fog_density_coeff = day_blend_float( - FOG_SUNSET, - FOG_DAY, - FOG_NIGHT - ) * FOG_ADJUST; - #endif - - float fog_intensity_coeff = eye_bright_smooth.y * 0.004166666666666667; + // Fog intensity calculation + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + float fog_density_coeff = FOG_DENSITY * FOG_ADJUST; + #else + float fog_density_coeff = day_blend_float( + FOG_SUNSET, + FOG_DAY, + FOG_NIGHT + ) * FOG_ADJUST; + #endif - #ifdef DISTANT_HORIZONS - frog_adjust = pow( - clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fog_intensity_coeff, - mix(fog_density_coeff * 0.2, 0.5, rainStrength) - ); - #else - frog_adjust = pow( - clamp(gl_FogFragCoord / far, 0.0, 1.0) * fog_intensity_coeff, - mix(fog_density_coeff, 1.0, rainStrength) - ); - #endif + float fog_intensity_coeff = eye_bright_smooth.y * 0.004166666666666667; -#else - #if defined NETHER - #if NETHER_FOG_DISTANCE == 1 - float sight = NETHER_SIGHT; + #ifdef DISTANT_HORIZONS + frog_adjust = pow( + clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fog_intensity_coeff, + mix(fog_density_coeff * 0.2, 0.5, rainStrength) + ); #else - #if defined DISTANT_HORIZONS - float sight = dhRenderDistance; - #else - float sight = NETHER_SIGHT; - #endif + frog_adjust = pow( + clamp(gl_FogFragCoord / far, 0.0, 1.0) * fog_intensity_coeff, + mix(fog_density_coeff, 1.0, rainStrength) + ); #endif - #else - #if defined DISTANT_HORIZONS - float sight = dhRenderDistance; + +#else + #if defined NETHER + #if NETHER_FOG_DISTANCE == 1 + float sight = NETHER_SIGHT; + #else + #if defined DISTANT_HORIZONS + float sight = dhRenderDistance; + #else + float sight = NETHER_SIGHT; + #endif + #endif #else - float sight = far; + #if defined DISTANT_HORIZONS + float sight = dhRenderDistance; + #else + float sight = far; + #endif #endif - #endif - frog_adjust = sqrt(clamp(gl_FogFragCoord / sight, 0.0, 1.0)); + frog_adjust = sqrt(clamp(gl_FogFragCoord / sight, 0.0, 1.0)); #endif diff --git a/shaders/src/light_vertex.glsl b/shaders/src/light_vertex.glsl index 2fb5a539..314f1b8b 100644 --- a/shaders/src/light_vertex.glsl +++ b/shaders/src/light_vertex.glsl @@ -9,60 +9,60 @@ visible_sky = clamp(illumination.y, 0.0, 1.0); // Underwater light adjust if (isEyeInWater == 1) { - visible_sky = (visible_sky * .95) + .05; + visible_sky = (visible_sky * .95) + .05; } #if defined UNKNOWN_DIM - visible_sky = (visible_sky * 0.6) + 0.4; + visible_sky = (visible_sky * 0.6) + 0.4; #endif // Candels color and intensity #if defined UNKNOWN_DIM - candle_color = - CANDLE_BASELIGHT * ((illumination.x * illumination.x) + sixth_pow(illumination.x * 1.205)) * 2.75; + candle_color = + CANDLE_BASELIGHT * ((illumination.x * illumination.x) + sixth_pow(illumination.x * 1.205)) * 2.75; #else - candle_color = - CANDLE_BASELIGHT * (pow(illumination.x, 1.5) + sixth_pow(illumination.x * 1.17)); + candle_color = + CANDLE_BASELIGHT * (pow(illumination.x, 1.5) + sixth_pow(illumination.x * 1.17)); #endif #ifdef DYN_HAND_LIGHT - float dist_factor; - float hand_dist; - vec3 hand_light; - - if (heldItemId == 11001 || heldItemId2 == 11001 || heldItemId == 11002 || heldItemId2 == 11002) { - float dist_offset = (heldItemId == 11001 || heldItemId2 == 11001) ? 0.0 : 0.5; - hand_dist = (1.0 - clamp((gl_FogFragCoord * 0.06666666666666667) + dist_offset, 0.0, 1.0)); - hand_light = CANDLE_BASELIGHT * (pow(hand_dist, 1.5) + sixth_pow(hand_dist * 1.17)); - candle_color = max(candle_color, hand_light); - } + float dist_factor; + float hand_dist; + vec3 hand_light; + + if (heldItemId == 11001 || heldItemId2 == 11001 || heldItemId == 11002 || heldItemId2 == 11002) { + float dist_offset = (heldItemId == 11001 || heldItemId2 == 11001) ? 0.0 : 0.5; + hand_dist = (1.0 - clamp((gl_FogFragCoord * 0.06666666666666667) + dist_offset, 0.0, 1.0)); + hand_light = CANDLE_BASELIGHT * (pow(hand_dist, 1.5) + sixth_pow(hand_dist * 1.17)); + candle_color = max(candle_color, hand_light); + } #endif candle_color = clamp(candle_color, vec3(0.0), vec3(4.0)); // Atenuation by light angle =================================== #if defined THE_END || defined NETHER - vec3 sun_vec = - normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; + vec3 sun_vec = + normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; #else - vec3 sun_vec = normalize(sunPosition); + vec3 sun_vec = normalize(sunPosition); #endif vec3 normal = gl_NormalMatrix * gl_Normal; float sun_light_strength; if (length(normal) != 0.0) { // Workaround for undefined normals - normal = normalize(normal); - sun_light_strength = dot(normal, sun_vec); + normal = normalize(normal); + sun_light_strength = dot(normal, sun_vec); } else { - normal = vec3(0.0, 1.0, 0.0); - sun_light_strength = 1.0; + normal = vec3(0.0, 1.0, 0.0); + sun_light_strength = 1.0; } #if defined THE_END || defined NETHER - direct_light_strength = sun_light_strength; + direct_light_strength = sun_light_strength; #else - direct_light_strength = - mix(-sun_light_strength, sun_light_strength, light_mix); + direct_light_strength = + mix(-sun_light_strength, sun_light_strength, light_mix); #endif // Omni light intensity changes by angle @@ -70,77 +70,76 @@ float omni_strength = (direct_light_strength * .125) + 1.0; // Direct light color #ifdef UNKNOWN_DIM - direct_light_color = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; + direct_light_color = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; #else - direct_light_color = day_blend( - LIGHT_SUNSET_COLOR, - LIGHT_DAY_COLOR, - LIGHT_NIGHT_COLOR + direct_light_color = day_blend( + LIGHT_SUNSET_COLOR, + LIGHT_DAY_COLOR, + LIGHT_NIGHT_COLOR ); #endif // Direct light strenght -- #ifdef FOLIAGE_V // This shader has foliage - float original_direct_light_strength = clamp(direct_light_strength, 0.0, 1.0) * 0.9 + 0.1; - if (is_foliage > .2) { // It's foliage, light is atenuated by angle - #ifdef SHADOW_CASTING - direct_light_strength = sqrt(abs(direct_light_strength)); - #else - direct_light_strength = (clamp(direct_light_strength, 0.0, 1.0) * 0.5 + 0.5) * 0.75; - #endif - - omni_strength = 1.0; - } else { - direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); - } + float original_direct_light_strength = clamp(direct_light_strength, 0.0, 1.0) * 0.9 + 0.1; + if (is_foliage > .2) { // It's foliage, light is atenuated by angle + #ifdef SHADOW_CASTING + direct_light_strength = sqrt(abs(direct_light_strength)); + #else + direct_light_strength = (clamp(direct_light_strength, 0.0, 1.0) * 0.5 + 0.5) * 0.75; + #endif + + omni_strength = 1.0; + } else { + direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); + } #else - direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); + direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); #endif // Omni light color #if defined THE_END || defined NETHER - omni_light = LIGHT_DAY_COLOR; + omni_light = LIGHT_DAY_COLOR; #else - direct_light_color = mix( - direct_light_color, - ZENITH_SKY_RAIN_COLOR * luma(direct_light_color) * 0.4, - rainStrength - ); - - // Minimal light - vec3 omni_color = mix(hi_sky_color_rgb, direct_light_color * 0.75, OMNI_TINT); - float omni_color_luma = color_average(omni_color); - float luma_ratio = AVOID_DARK_LEVEL / omni_color_luma; - vec3 omni_color_min = omni_color * luma_ratio; - omni_color = max(omni_color, omni_color_min); - - omni_light = mix(omni_color_min, omni_color, visible_sky); + direct_light_color = mix( + direct_light_color, + ZENITH_SKY_RAIN_COLOR * luma(direct_light_color) * 0.4, + rainStrength + ); + // Minimal light + vec3 omni_color = mix(hi_sky_color_rgb, direct_light_color * 0.75, OMNI_TINT); + float omni_color_luma = color_average(omni_color); + float luma_ratio = AVOID_DARK_LEVEL / omni_color_luma; + vec3 omni_color_min = omni_color * luma_ratio; + omni_color = max(omni_color, omni_color_min); + + omni_light = mix(omni_color_min, omni_color, visible_sky); #endif // Avoid flat illumination in caves for entities #ifdef CAVEENTITY_V - float candle_cave_strength = (direct_light_strength * .5) + .5; - candle_cave_strength = - mix(candle_cave_strength, 1.0, visible_sky); - candle_color *= candle_cave_strength; + float candle_cave_strength = (direct_light_strength * .5) + .5; + candle_cave_strength = + mix(candle_cave_strength, 1.0, visible_sky); + candle_color *= candle_cave_strength; #endif #if !defined THE_END && !defined NETHER - #ifndef SHADOW_CASTING - // Fake shadows - if (isEyeInWater == 0) { - direct_light_strength = mix(0.0, direct_light_strength, pow(visible_sky, 10.0)); - } else { - direct_light_strength = mix(0.0, direct_light_strength, visible_sky); - } - #else - direct_light_strength = mix(0.0, direct_light_strength, visible_sky); - #endif + #ifndef SHADOW_CASTING + // Fake shadows + if (isEyeInWater == 0) { + direct_light_strength = mix(0.0, direct_light_strength, pow(visible_sky, 10.0)); + } else { + direct_light_strength = mix(0.0, direct_light_strength, visible_sky); + } + #else + direct_light_strength = mix(0.0, direct_light_strength, visible_sky); + #endif #endif #ifdef EMMISIVE_V - if (is_fake_emmisor > 0.5) { - direct_light_strength = 10.0; - } + if (is_fake_emmisor > 0.5) { + direct_light_strength = 10.0; + } #endif \ No newline at end of file diff --git a/shaders/src/light_vertex_dh.glsl b/shaders/src/light_vertex_dh.glsl index 9ae6cc5c..3c98e3b7 100644 --- a/shaders/src/light_vertex_dh.glsl +++ b/shaders/src/light_vertex_dh.glsl @@ -2,51 +2,51 @@ tint_color = gl_Color; // Luz nativa (lmcoord.x: candela, lmcoord.y: cielo) ---- #if defined THE_END || defined NETHER - vec2 illumination = vec2(lmcoord.x, 1.0); + vec2 illumination = vec2(lmcoord.x, 1.0); #else - vec2 illumination = lmcoord; + vec2 illumination = lmcoord; #endif illumination.y = (max(illumination.y, 0.065) - 0.065) * 1.06951871657754; visible_sky = clamp(illumination.y, 0.0, 1.0); #if defined UNKNOWN_DIM - visible_sky = (visible_sky * 0.6) + 0.4; + visible_sky = (visible_sky * 0.6) + 0.4; #endif // Intensidad y color de luz de candelas #if defined UNKNOWN_DIM - candle_color = - CANDLE_BASELIGHT * ((illumination.x * illumination.x) + sixth_pow(illumination.x * 1.205)) * 2.75; + candle_color = + CANDLE_BASELIGHT * ((illumination.x * illumination.x) + sixth_pow(illumination.x * 1.205)) * 2.75; #else - candle_color = - CANDLE_BASELIGHT * (pow(illumination.x, 1.5) + sixth_pow(illumination.x * 1.17)); + candle_color = + CANDLE_BASELIGHT * (pow(illumination.x, 1.5) + sixth_pow(illumination.x * 1.17)); #endif candle_color = clamp(candle_color, vec3(0.0), vec3(4.0)); // Atenuación por dirección de luz directa =================================== #if defined THE_END || defined NETHER - vec3 sun_vec = - normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; + vec3 sun_vec = + normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; #else - vec3 sun_vec = normalize(sunPosition); + vec3 sun_vec = normalize(sunPosition); #endif vec3 normal = gl_NormalMatrix * gl_Normal; float sun_light_strength; if (length(normal) != 0.0) { // Workaround for undefined normals - normal = normalize(normal); - sun_light_strength = dot(normal, sun_vec); + normal = normalize(normal); + sun_light_strength = dot(normal, sun_vec); } else { - normal = vec3(0.0, 1.0, 0.0); - sun_light_strength = 1.0; + normal = vec3(0.0, 1.0, 0.0); + sun_light_strength = 1.0; } #if defined THE_END || defined NETHER - direct_light_strength = sun_light_strength; + direct_light_strength = sun_light_strength; #else - direct_light_strength = - mix(-sun_light_strength, sun_light_strength, light_mix); + direct_light_strength = + mix(-sun_light_strength, sun_light_strength, light_mix); #endif // Intensidad por dirección @@ -54,45 +54,45 @@ float omni_strength = (direct_light_strength * .125) + 1.0; // Calculamos color de luz directa #ifdef UNKNOWN_DIM - direct_light_color = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; + direct_light_color = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; #else - direct_light_color = day_blend( - LIGHT_SUNSET_COLOR, - LIGHT_DAY_COLOR, - LIGHT_NIGHT_COLOR + direct_light_color = day_blend( + LIGHT_SUNSET_COLOR, + LIGHT_DAY_COLOR, + LIGHT_NIGHT_COLOR ); #endif direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); #if defined THE_END || defined NETHER - omni_light = LIGHT_DAY_COLOR; + omni_light = LIGHT_DAY_COLOR; #else - direct_light_color = mix( - direct_light_color, - ZENITH_SKY_RAIN_COLOR * luma(direct_light_color) * 0.4, - rainStrength - ); + direct_light_color = mix( + direct_light_color, + ZENITH_SKY_RAIN_COLOR * luma(direct_light_color) * 0.4, + rainStrength + ); - // Minimal light - vec3 omni_color = mix(hi_sky_color_rgb, direct_light_color * 0.75, OMNI_TINT); - float omni_color_luma = color_average(omni_color); - float luma_ratio = AVOID_DARK_LEVEL / omni_color_luma; - vec3 omni_color_min = omni_color * luma_ratio; - omni_color = max(omni_color, omni_color_min); - - omni_light = mix(omni_color_min, omni_color, visible_sky); + // Minimal light + vec3 omni_color = mix(hi_sky_color_rgb, direct_light_color * 0.75, OMNI_TINT); + float omni_color_luma = color_average(omni_color); + float luma_ratio = AVOID_DARK_LEVEL / omni_color_luma; + vec3 omni_color_min = omni_color * luma_ratio; + omni_color = max(omni_color, omni_color_min); + + omni_light = mix(omni_color_min, omni_color, visible_sky); #endif if (isEyeInWater == 0) { - direct_light_strength = mix(0.0, direct_light_strength, pow(visible_sky, 10.0)); + direct_light_strength = mix(0.0, direct_light_strength, pow(visible_sky, 10.0)); } else { - direct_light_strength = mix(0.0, direct_light_strength, visible_sky); + direct_light_strength = mix(0.0, direct_light_strength, visible_sky); } if (dhMaterialId == DH_BLOCK_ILLUMINATED) { - direct_light_strength = 10.0; + direct_light_strength = 10.0; } else if (dhMaterialId == DH_BLOCK_LAVA) { - direct_light_strength = 1.0; + direct_light_strength = 1.0; } diff --git a/shaders/src/position_vertex.glsl b/shaders/src/position_vertex.glsl index bc7aae07..5ea890ea 100644 --- a/shaders/src/position_vertex.glsl +++ b/shaders/src/position_vertex.glsl @@ -1,91 +1,87 @@ #ifdef FOLIAGE_V // General block shader (it has foliage) - #if WAVING == 1 - vec4 sub_position = gl_ModelViewMatrix * gl_Vertex; - vec4 position = - gbufferModelViewInverse * sub_position; - - is_foliage = 0.0; - - if ( - mc_Entity.x == ENTITY_LOWERGRASS || - mc_Entity.x == ENTITY_UPPERGRASS || - mc_Entity.x == ENTITY_SMALLGRASS || - mc_Entity.x == ENTITY_SMALLENTS || - mc_Entity.x == ENTITY_LEAVES) - { - vec3 worldpos = position.xyz + cameraPosition; - - is_foliage = 0.4; - - float weight = float(gl_MultiTexCoord0.t < mc_midTexCoord.t); - - if (mc_Entity.x == ENTITY_UPPERGRASS) { - weight += 1.0; - } else if (mc_Entity.x == ENTITY_LEAVES) { - weight = .3; - } else if (mc_Entity.x == ENTITY_SMALLENTS && (weight > 0.9 || fract(worldpos.y + 0.0675) > 0.01)) { - weight = 1.0; - } - - weight *= lmcoord.y * lmcoord.y; // Evitamos movimiento en cuevas - position.xyz += wave_move(worldpos.xzy) * weight * (0.03 + (rainStrength * .05)); - } else if (mc_Entity.x == ENTITY_SMALLENTS_NW) { - is_foliage = 0.4; - } - - gl_Position = gl_ProjectionMatrix * gbufferModelView * position; - - #else // Normal position - is_foliage = 0.0; - if (mc_Entity.x == ENTITY_LOWERGRASS || - mc_Entity.x == ENTITY_UPPERGRASS || - mc_Entity.x == ENTITY_SMALLGRASS || - mc_Entity.x == ENTITY_SMALLENTS || - mc_Entity.x == ENTITY_LEAVES || - mc_Entity.x == ENTITY_SMALLENTS_NW) - { - is_foliage = 0.4; - } - - vec4 sub_position = gl_ModelViewMatrix * gl_Vertex; - vec4 position = - gbufferModelViewInverse * sub_position; - - gl_Position = gl_ProjectionMatrix * gbufferModelView * position; + #if WAVING == 1 + vec4 sub_position = gl_ModelViewMatrix * gl_Vertex; + vec4 position = + gbufferModelViewInverse * sub_position; - #endif + is_foliage = 0.0; + + if ( + mc_Entity.x == ENTITY_LOWERGRASS || + mc_Entity.x == ENTITY_UPPERGRASS || + mc_Entity.x == ENTITY_SMALLGRASS || + mc_Entity.x == ENTITY_SMALLENTS || + mc_Entity.x == ENTITY_LEAVES + ) { + vec3 worldpos = position.xyz + cameraPosition; + + is_foliage = 0.4; + + float weight = float(gl_MultiTexCoord0.t < mc_midTexCoord.t); + + if (mc_Entity.x == ENTITY_UPPERGRASS) { + weight += 1.0; + } else if (mc_Entity.x == ENTITY_LEAVES) { + weight = .3; + } else if (mc_Entity.x == ENTITY_SMALLENTS && (weight > 0.9 || fract(worldpos.y + 0.0675) > 0.01)) { + weight = 1.0; + } + + weight *= lmcoord.y * lmcoord.y; // Evitamos movimiento en cuevas + position.xyz += wave_move(worldpos.xzy) * weight * (0.03 + (rainStrength * .05)); + } else if (mc_Entity.x == ENTITY_SMALLENTS_NW) { + is_foliage = 0.4; + } + + gl_Position = gl_ProjectionMatrix * gbufferModelView * position; + + #else // Normal position + is_foliage = 0.0; + if ( + mc_Entity.x == ENTITY_LOWERGRASS || + mc_Entity.x == ENTITY_UPPERGRASS || + mc_Entity.x == ENTITY_SMALLGRASS || + mc_Entity.x == ENTITY_SMALLENTS || + mc_Entity.x == ENTITY_LEAVES || + mc_Entity.x == ENTITY_SMALLENTS_NW + ) { + is_foliage = 0.4; + } + + vec4 sub_position = gl_ModelViewMatrix * gl_Vertex; + vec4 position = gbufferModelViewInverse * sub_position; + + gl_Position = gl_ProjectionMatrix * gbufferModelView * position; + #endif #else - vec4 sub_position = gl_ModelViewMatrix * gl_Vertex; - #ifndef NO_SHADOWS - #ifdef SHADOW_CASTING - vec4 position = - gbufferModelViewInverse * sub_position; + vec4 sub_position = gl_ModelViewMatrix * gl_Vertex; + #ifndef NO_SHADOWS + #ifdef SHADOW_CASTING + vec4 position = gbufferModelViewInverse * sub_position; + #endif #endif - #endif - - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; #endif #ifdef EMMISIVE_V - float is_fake_emmisor = 0.0; - if (mc_Entity.x == ENTITY_F_EMMISIVE) - { - is_fake_emmisor = 1.0; - } + float is_fake_emmisor = 0.0; + if (mc_Entity.x == ENTITY_F_EMMISIVE) { + is_fake_emmisor = 1.0; + } #endif #if AA_TYPE > 1 - gl_Position.xy += taa_offset * gl_Position.w; + gl_Position.xy += taa_offset * gl_Position.w; #endif #ifndef SHADER_BASIC - vec4 homopos = gbufferProjectionInverse * vec4(gl_Position.xyz / gl_Position.w, 1.0); - vec3 viewPos = homopos.xyz / homopos.w; - #if defined GBUFFER_CLOUDS - gl_FogFragCoord = length(viewPos.xz); - #else - gl_FogFragCoord = length(viewPos.xyz); - #endif + vec4 homopos = gbufferProjectionInverse * vec4(gl_Position.xyz / gl_Position.w, 1.0); + vec3 viewPos = homopos.xyz / homopos.w; + #if defined GBUFFER_CLOUDS + gl_FogFragCoord = length(viewPos.xz); + #else + gl_FogFragCoord = length(viewPos.xyz); + #endif #endif diff --git a/shaders/src/position_vertex_dh.glsl b/shaders/src/position_vertex_dh.glsl index 3083c2d1..e6b6ae24 100644 --- a/shaders/src/position_vertex_dh.glsl +++ b/shaders/src/position_vertex_dh.glsl @@ -2,28 +2,28 @@ position = gbufferModelViewInverse * gl_ModelViewMatrix * gl_Vertex; gl_Position = dhProjection * gbufferModelView * position; #if AA_TYPE > 1 - gl_Position.xy += taa_offset * gl_Position.w; + gl_Position.xy += taa_offset * gl_Position.w; #endif // Fog intensity calculation #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - float fog_density_coeff = FOG_DENSITY * FOG_ADJUST; + float fog_density_coeff = FOG_DENSITY * FOG_ADJUST; #else - float fog_density_coeff = day_blend_float( - FOG_SUNSET, - FOG_DAY, - FOG_NIGHT - ) * FOG_ADJUST; + float fog_density_coeff = day_blend_float( + FOG_SUNSET, + FOG_DAY, + FOG_NIGHT + ) * FOG_ADJUST; #endif gl_FogFragCoord = length(position.xyz); #if !defined THE_END && !defined NETHER -float fog_intensity_coeff = eye_bright_smooth.y * 0.004166666666666667; -frog_adjust = pow( - clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fog_intensity_coeff, - mix(fog_density_coeff * 0.2, 0.5, rainStrength) -); + float fog_intensity_coeff = eye_bright_smooth.y * 0.004166666666666667; + frog_adjust = pow( + clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fog_intensity_coeff, + mix(fog_density_coeff * 0.2, 0.5, rainStrength) + ); #else - frog_adjust = sqrt(clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0)); + frog_adjust = sqrt(clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0)); #endif diff --git a/shaders/src/shadow_src_vertex.glsl b/shaders/src/shadow_src_vertex.glsl index e26a737c..881a082f 100644 --- a/shaders/src/shadow_src_vertex.glsl +++ b/shaders/src/shadow_src_vertex.glsl @@ -2,61 +2,61 @@ float NdotL; if (is_foliage > .2) { #ifdef THE_END - vec3 custom_light_pos = normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; - NdotL = clamp( - abs(dot(normal, custom_light_pos)), - 0.0, - 1.0 + vec3 custom_light_pos = normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; + NdotL = clamp( + abs(dot(normal, custom_light_pos)), + 0.0, + 1.0 ); #else - vec3 normal_light_pos = normalize(shadowLightPosition); - NdotL = clamp( - abs(dot(normal, normal_light_pos)), - 0.0, - 1.0 + vec3 normal_light_pos = normalize(shadowLightPosition); + NdotL = clamp( + abs(dot(normal, normal_light_pos)), + 0.0, + 1.0 ); #endif } else { #ifdef THE_END - NdotL = clamp( - dot( - normal, - normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz - ), - 0.0, - 1.0 + NdotL = clamp( + dot( + normal, + normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz + ), + 0.0, + 1.0 ); #else - NdotL = clamp( - dot( - normal, - normalize(shadowLightPosition) - ), - 0.0, - 1.0 + NdotL = clamp( + dot( + normal, + normalize(shadowLightPosition) + ), + 0.0, + 1.0 ); #endif } #else - #ifdef THE_END - float NdotL = clamp( - dot( - normal, - normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz - ), - 0.0, - 1.0 - ); - #else - float NdotL = clamp( - dot( - normal, - normalize(shadowLightPosition) - ), - 0.0, - 1.0 - ); - #endif + #ifdef THE_END + float NdotL = clamp( + dot( + normal, + normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz + ), + 0.0, + 1.0 + ); + #else + float NdotL = clamp( + dot( + normal, + normalize(shadowLightPosition) + ), + 0.0, + 1.0 + ); + #endif #endif vec3 shadow_world_normal = normalize(mat3(gbufferModelViewInverse) * (normal * 1024.0) + gbufferModelViewInverse[3].xyz); From cec54541492072bf1aa659141220d4352f1df456 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 14 Oct 2024 21:29:06 -0600 Subject: [PATCH 017/147] Refactor III --- shaders/common/composite1_fragment.glsl | 4 +- shaders/common/composite2_fragment.glsl | 1 - shaders/composite.fsh | 2 +- shaders/composite.vsh | 2 +- shaders/composite1.fsh | 2 +- shaders/composite1.vsh | 2 +- shaders/composite2.fsh | 2 +- shaders/composite2.vsh | 2 +- shaders/deferred.fsh | 2 +- shaders/deferred.vsh | 2 +- shaders/final.fsh | 2 +- shaders/final.vsh | 2 +- shaders/gbuffers_armor_glint.fsh | 2 +- shaders/gbuffers_armor_glint.vsh | 2 +- shaders/gbuffers_basic.fsh | 2 +- shaders/gbuffers_basic.vsh | 2 +- shaders/gbuffers_beaconbeam.fsh | 2 +- shaders/gbuffers_beaconbeam.vsh | 2 +- shaders/gbuffers_block.fsh | 2 +- shaders/gbuffers_block.vsh | 2 +- shaders/gbuffers_clouds.fsh | 2 +- shaders/gbuffers_clouds.vsh | 2 +- shaders/gbuffers_damagedblock.fsh | 2 +- shaders/gbuffers_damagedblock.vsh | 2 +- shaders/gbuffers_entities.fsh | 2 +- shaders/gbuffers_entities.vsh | 2 +- shaders/gbuffers_entities_glowing.fsh | 2 +- shaders/gbuffers_entities_glowing.vsh | 2 +- shaders/gbuffers_hand.fsh | 2 +- shaders/gbuffers_hand.vsh | 2 +- shaders/gbuffers_hand_water.fsh | 2 +- shaders/gbuffers_hand_water.vsh | 2 +- shaders/gbuffers_line.fsh | 2 +- shaders/gbuffers_line.vsh | 2 +- shaders/gbuffers_skybasic.fsh | 2 +- shaders/gbuffers_skybasic.vsh | 2 +- shaders/gbuffers_skytextured.fsh | 2 +- shaders/gbuffers_skytextured.vsh | 2 +- shaders/gbuffers_spidereyes.fsh | 2 +- shaders/gbuffers_spidereyes.vsh | 2 +- shaders/gbuffers_terrain.fsh | 2 +- shaders/gbuffers_terrain.vsh | 2 +- shaders/gbuffers_textured.fsh | 2 +- shaders/gbuffers_textured.vsh | 2 +- shaders/gbuffers_water.fsh | 2 +- shaders/gbuffers_water.vsh | 2 +- shaders/gbuffers_weather.fsh | 2 +- shaders/gbuffers_weather.vsh | 2 +- shaders/lib/aberration.glsl | 14 +- shaders/lib/ao.glsl | 79 ++-- shaders/lib/basic_utils.glsl | 46 +- shaders/lib/bloom.glsl | 33 +- shaders/lib/blur.glsl | 42 +- shaders/lib/color_blindness.glsl | 56 +-- shaders/lib/color_conversion.glsl | 2 +- shaders/lib/color_utils.glsl | 197 ++++---- shaders/lib/color_utils_end.glsl | 16 +- shaders/lib/color_utils_nether.glsl | 10 +- shaders/lib/config.glsl | 292 ++++++------ shaders/lib/day_blend.glsl | 20 +- shaders/lib/depth.glsl | 2 +- shaders/lib/depth_dh.glsl | 2 +- shaders/lib/dither.glsl | 348 +++++++------- shaders/lib/fast_taa.glsl | 166 ++++--- shaders/lib/luma.glsl | 4 +- shaders/lib/material_gloss_fragment.glsl | 50 +- shaders/lib/motion_blur.glsl | 56 +-- shaders/lib/past_projection_utils.glsl | 9 - shaders/lib/post.glsl | 24 +- shaders/lib/projection_utils.glsl | 25 +- shaders/lib/shadow_frag.glsl | 185 ++++---- shaders/lib/shadow_vertex.glsl | 16 +- shaders/lib/vector_utils.glsl | 16 +- shaders/lib/volumetric_clouds.glsl | 278 ++++++----- shaders/lib/volumetric_clouds_end.glsl | 280 ++++++----- shaders/lib/volumetric_clouds_vertex.glsl | 58 +-- shaders/lib/volumetric_light.glsl | 182 ++++---- shaders/lib/water.glsl | 536 +++++++++++----------- shaders/lib/water_dh.glsl | 205 ++++----- shaders/prepare.fsh | 2 +- shaders/prepare.vsh | 2 +- shaders/shaders.properties | 4 +- shaders/shadow.fsh | 2 +- shaders/shadow.vsh | 2 +- shaders/src/finalcolor.glsl | 4 +- shaders/src/finalcolor_dh.glsl | 4 +- shaders/src/fog_vertex.glsl | 4 +- shaders/src/sky_color_vertex.glsl | 34 -- shaders/src/writebuffers.glsl | 30 +- shaders/world0/final.vsh | 1 - 90 files changed, 1676 insertions(+), 1759 deletions(-) delete mode 100644 shaders/lib/past_projection_utils.glsl delete mode 100644 shaders/src/sky_color_vertex.glsl diff --git a/shaders/common/composite1_fragment.glsl b/shaders/common/composite1_fragment.glsl index e51ad025..a2c82702 100644 --- a/shaders/common/composite1_fragment.glsl +++ b/shaders/common/composite1_fragment.glsl @@ -32,11 +32,11 @@ varying vec2 texcoord; /* Utility functions */ #if defined BLOOM || defined DOF - #include "/lib/dither.glsl" + #include "/lib/dither.glsl" #endif #ifdef DOF - #include "/lib/blur.glsl" + #include "/lib/blur.glsl" #endif // MAIN FUNCTION ------------------ diff --git a/shaders/common/composite2_fragment.glsl b/shaders/common/composite2_fragment.glsl index af702c47..1e21a0cd 100644 --- a/shaders/common/composite2_fragment.glsl +++ b/shaders/common/composite2_fragment.glsl @@ -38,7 +38,6 @@ varying vec2 texcoord; #if AA_TYPE > 0 || defined MOTION_BLUR #include "/lib/projection_utils.glsl" - #include "/lib/past_projection_utils.glsl" #endif #ifdef MOTION_BLUR diff --git a/shaders/composite.fsh b/shaders/composite.fsh index fbe86901..532802c8 100644 --- a/shaders/composite.fsh +++ b/shaders/composite.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define COMPOSITE_SHADER diff --git a/shaders/composite.vsh b/shaders/composite.vsh index 40f546fb..d4827e4f 100644 --- a/shaders/composite.vsh +++ b/shaders/composite.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define COMPOSITE_SHADER diff --git a/shaders/composite1.fsh b/shaders/composite1.fsh index f7b151dc..bbe70881 100644 --- a/shaders/composite1.fsh +++ b/shaders/composite1.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define COMPOSITE1_SHADER diff --git a/shaders/composite1.vsh b/shaders/composite1.vsh index bc89242b..fd4c9019 100644 --- a/shaders/composite1.vsh +++ b/shaders/composite1.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define COMPOSITE1_SHADER diff --git a/shaders/composite2.fsh b/shaders/composite2.fsh index 3f4b5b00..547b766a 100644 --- a/shaders/composite2.fsh +++ b/shaders/composite2.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define COMPOSITE2_SHADER #define NO_SHADOWS diff --git a/shaders/composite2.vsh b/shaders/composite2.vsh index 96fbef44..2143e4a0 100644 --- a/shaders/composite2.vsh +++ b/shaders/composite2.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define COMPOSITE2_SHADER diff --git a/shaders/deferred.fsh b/shaders/deferred.fsh index 3c7beee5..55e52743 100644 --- a/shaders/deferred.fsh +++ b/shaders/deferred.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define DEFERRED_SHADER #define NO_SHADOWS diff --git a/shaders/deferred.vsh b/shaders/deferred.vsh index 9c131830..80e340ec 100644 --- a/shaders/deferred.vsh +++ b/shaders/deferred.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define DEFERRED_SHADER diff --git a/shaders/final.fsh b/shaders/final.fsh index 4b245af4..a824b8f5 100644 --- a/shaders/final.fsh +++ b/shaders/final.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define FINAL_SHADER #define NO_SHADOWS diff --git a/shaders/final.vsh b/shaders/final.vsh index fc7974e7..7b2ef90e 100644 --- a/shaders/final.vsh +++ b/shaders/final.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define FINAL_SHADER diff --git a/shaders/gbuffers_armor_glint.fsh b/shaders/gbuffers_armor_glint.fsh index 245c4540..14f201ce 100644 --- a/shaders/gbuffers_armor_glint.fsh +++ b/shaders/gbuffers_armor_glint.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_ARMOR_GLINT #define SHADER_BASIC diff --git a/shaders/gbuffers_armor_glint.vsh b/shaders/gbuffers_armor_glint.vsh index 86410e3b..ac9fc903 100644 --- a/shaders/gbuffers_armor_glint.vsh +++ b/shaders/gbuffers_armor_glint.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_ARMOR_GLINT #define ENTITY_GLINT diff --git a/shaders/gbuffers_basic.fsh b/shaders/gbuffers_basic.fsh index 10a7840b..c667a17d 100644 --- a/shaders/gbuffers_basic.fsh +++ b/shaders/gbuffers_basic.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_BASIC #define NO_SHADOWS diff --git a/shaders/gbuffers_basic.vsh b/shaders/gbuffers_basic.vsh index 582d7761..ae248f47 100644 --- a/shaders/gbuffers_basic.vsh +++ b/shaders/gbuffers_basic.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_BASIC #define NO_SHADOWS diff --git a/shaders/gbuffers_beaconbeam.fsh b/shaders/gbuffers_beaconbeam.fsh index c7fd75db..258594a6 100644 --- a/shaders/gbuffers_beaconbeam.fsh +++ b/shaders/gbuffers_beaconbeam.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_BEACONBEAM diff --git a/shaders/gbuffers_beaconbeam.vsh b/shaders/gbuffers_beaconbeam.vsh index 6947c5af..5858935f 100644 --- a/shaders/gbuffers_beaconbeam.vsh +++ b/shaders/gbuffers_beaconbeam.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_BEACONBEAM diff --git a/shaders/gbuffers_block.fsh b/shaders/gbuffers_block.fsh index 9e533e47..ba0ebcdf 100644 --- a/shaders/gbuffers_block.fsh +++ b/shaders/gbuffers_block.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_BLOCK diff --git a/shaders/gbuffers_block.vsh b/shaders/gbuffers_block.vsh index de8299eb..a5e84ebd 100644 --- a/shaders/gbuffers_block.vsh +++ b/shaders/gbuffers_block.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_BLOCK diff --git a/shaders/gbuffers_clouds.fsh b/shaders/gbuffers_clouds.fsh index a874673d..b6b38134 100644 --- a/shaders/gbuffers_clouds.fsh +++ b/shaders/gbuffers_clouds.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_CLOUDS #define NO_SHADOWS diff --git a/shaders/gbuffers_clouds.vsh b/shaders/gbuffers_clouds.vsh index 2f762d55..95a771e8 100644 --- a/shaders/gbuffers_clouds.vsh +++ b/shaders/gbuffers_clouds.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_CLOUDS #define NO_SHADOWS diff --git a/shaders/gbuffers_damagedblock.fsh b/shaders/gbuffers_damagedblock.fsh index 9c5cf170..93d9c83c 100644 --- a/shaders/gbuffers_damagedblock.fsh +++ b/shaders/gbuffers_damagedblock.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define NO_SHADOWS #define GBUFFER_DAMAGE diff --git a/shaders/gbuffers_damagedblock.vsh b/shaders/gbuffers_damagedblock.vsh index dbad621c..67c448e2 100644 --- a/shaders/gbuffers_damagedblock.vsh +++ b/shaders/gbuffers_damagedblock.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define NO_SHADOWS #define GBUFFER_DAMAGE diff --git a/shaders/gbuffers_entities.fsh b/shaders/gbuffers_entities.fsh index 9af03dc1..61123f0b 100644 --- a/shaders/gbuffers_entities.fsh +++ b/shaders/gbuffers_entities.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_ENTITIES diff --git a/shaders/gbuffers_entities.vsh b/shaders/gbuffers_entities.vsh index 79155c49..90a3c6eb 100644 --- a/shaders/gbuffers_entities.vsh +++ b/shaders/gbuffers_entities.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_ENTITIES #define CAVEENTITY_V diff --git a/shaders/gbuffers_entities_glowing.fsh b/shaders/gbuffers_entities_glowing.fsh index 91f336e2..e19f7d8b 100644 --- a/shaders/gbuffers_entities_glowing.fsh +++ b/shaders/gbuffers_entities_glowing.fsh @@ -6,7 +6,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_ENTITIES #define GBUFFER_ENTITY_GLOW diff --git a/shaders/gbuffers_entities_glowing.vsh b/shaders/gbuffers_entities_glowing.vsh index 8e8d1bfe..23fc1dfc 100644 --- a/shaders/gbuffers_entities_glowing.vsh +++ b/shaders/gbuffers_entities_glowing.vsh @@ -6,7 +6,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_ENTITIES #define GBUFFER_ENTITY_GLOW diff --git a/shaders/gbuffers_hand.fsh b/shaders/gbuffers_hand.fsh index 9ec041b9..e8664a9b 100644 --- a/shaders/gbuffers_hand.fsh +++ b/shaders/gbuffers_hand.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_HAND diff --git a/shaders/gbuffers_hand.vsh b/shaders/gbuffers_hand.vsh index e900b443..128007d6 100644 --- a/shaders/gbuffers_hand.vsh +++ b/shaders/gbuffers_hand.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_HAND diff --git a/shaders/gbuffers_hand_water.fsh b/shaders/gbuffers_hand_water.fsh index 5caec050..d88297eb 100644 --- a/shaders/gbuffers_hand_water.fsh +++ b/shaders/gbuffers_hand_water.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_HAND_WATER #define SPECIAL_TRANS diff --git a/shaders/gbuffers_hand_water.vsh b/shaders/gbuffers_hand_water.vsh index 573a3f9d..9cf9d022 100644 --- a/shaders/gbuffers_hand_water.vsh +++ b/shaders/gbuffers_hand_water.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_HAND_WATER diff --git a/shaders/gbuffers_line.fsh b/shaders/gbuffers_line.fsh index e91e2f18..43ef5a58 100644 --- a/shaders/gbuffers_line.fsh +++ b/shaders/gbuffers_line.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_LINE #define NO_SHADOWS diff --git a/shaders/gbuffers_line.vsh b/shaders/gbuffers_line.vsh index b0c18b86..2c7e2d72 100644 --- a/shaders/gbuffers_line.vsh +++ b/shaders/gbuffers_line.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_LINE #define NO_SHADOWS diff --git a/shaders/gbuffers_skybasic.fsh b/shaders/gbuffers_skybasic.fsh index 1abe909d..fe7df7dc 100644 --- a/shaders/gbuffers_skybasic.fsh +++ b/shaders/gbuffers_skybasic.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_SKYBASIC #define NO_SHADOWS diff --git a/shaders/gbuffers_skybasic.vsh b/shaders/gbuffers_skybasic.vsh index ca4e0e32..a2de150a 100644 --- a/shaders/gbuffers_skybasic.vsh +++ b/shaders/gbuffers_skybasic.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_SKYBASIC #define NO_SHADOWS diff --git a/shaders/gbuffers_skytextured.fsh b/shaders/gbuffers_skytextured.fsh index 155f17ce..70961f1e 100644 --- a/shaders/gbuffers_skytextured.fsh +++ b/shaders/gbuffers_skytextured.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_SKYTEXTURED #define NO_SHADOWS diff --git a/shaders/gbuffers_skytextured.vsh b/shaders/gbuffers_skytextured.vsh index 65757049..d40750ae 100644 --- a/shaders/gbuffers_skytextured.vsh +++ b/shaders/gbuffers_skytextured.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_SKYTEXTURED #define NO_SHADOWS diff --git a/shaders/gbuffers_spidereyes.fsh b/shaders/gbuffers_spidereyes.fsh index 603bd28f..4f713fba 100644 --- a/shaders/gbuffers_spidereyes.fsh +++ b/shaders/gbuffers_spidereyes.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_SPIDEREYES #define NO_SHADOWS diff --git a/shaders/gbuffers_spidereyes.vsh b/shaders/gbuffers_spidereyes.vsh index c4d068af..131fe0bb 100644 --- a/shaders/gbuffers_spidereyes.vsh +++ b/shaders/gbuffers_spidereyes.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_SPIDEREYES #define NO_SHADOWS diff --git a/shaders/gbuffers_terrain.fsh b/shaders/gbuffers_terrain.fsh index 6996931b..3b81b491 100644 --- a/shaders/gbuffers_terrain.fsh +++ b/shaders/gbuffers_terrain.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_TERRAIN #define FOLIAGE_V diff --git a/shaders/gbuffers_terrain.vsh b/shaders/gbuffers_terrain.vsh index f1a889ac..dbc08039 100644 --- a/shaders/gbuffers_terrain.vsh +++ b/shaders/gbuffers_terrain.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_TERRAIN #define FOLIAGE_V diff --git a/shaders/gbuffers_textured.fsh b/shaders/gbuffers_textured.fsh index 7cf5759f..1d0ea672 100644 --- a/shaders/gbuffers_textured.fsh +++ b/shaders/gbuffers_textured.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_TEXTURED diff --git a/shaders/gbuffers_textured.vsh b/shaders/gbuffers_textured.vsh index 29891ce9..19d7231f 100644 --- a/shaders/gbuffers_textured.vsh +++ b/shaders/gbuffers_textured.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_TEXTURED diff --git a/shaders/gbuffers_water.fsh b/shaders/gbuffers_water.fsh index 4573db19..9e78bd37 100644 --- a/shaders/gbuffers_water.fsh +++ b/shaders/gbuffers_water.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_WATER #define WATER_F diff --git a/shaders/gbuffers_water.vsh b/shaders/gbuffers_water.vsh index c5a6b0c7..3ed8906d 100644 --- a/shaders/gbuffers_water.vsh +++ b/shaders/gbuffers_water.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define WATER_F diff --git a/shaders/gbuffers_weather.fsh b/shaders/gbuffers_weather.fsh index 50424838..9a444da0 100644 --- a/shaders/gbuffers_weather.fsh +++ b/shaders/gbuffers_weather.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_WEATHER #define SPECIAL_TRANS diff --git a/shaders/gbuffers_weather.vsh b/shaders/gbuffers_weather.vsh index e0ed9221..e8f7830f 100644 --- a/shaders/gbuffers_weather.vsh +++ b/shaders/gbuffers_weather.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_WEATHER diff --git a/shaders/lib/aberration.glsl b/shaders/lib/aberration.glsl index 21c081bb..c1c0e66d 100644 --- a/shaders/lib/aberration.glsl +++ b/shaders/lib/aberration.glsl @@ -3,15 +3,15 @@ Color aberration effect. */ vec3 color_aberration() { - vec2 offset = texcoord - 0.5; + vec2 offset = texcoord - 0.5; - offset *= vec2(0.125) * CHROMA_ABER_STRENGTH; + offset *= vec2(0.125) * CHROMA_ABER_STRENGTH; - vec3 aberrated_color = vec3(0.0); + vec3 aberrated_color = vec3(0.0); - aberrated_color.r = texture2D(colortex1, texcoord - offset).r; - aberrated_color.g = texture2D(colortex1, texcoord - (offset * 0.5)).g; - aberrated_color.b = texture2D(colortex1, texcoord).b; + aberrated_color.r = texture2D(colortex1, texcoord - offset).r; + aberrated_color.g = texture2D(colortex1, texcoord - (offset * 0.5)).g; + aberrated_color.b = texture2D(colortex1, texcoord).b; - return aberrated_color; + return aberrated_color; } diff --git a/shaders/lib/ao.glsl b/shaders/lib/ao.glsl index 8295cbd5..3b80e21a 100644 --- a/shaders/lib/ao.glsl +++ b/shaders/lib/ao.glsl @@ -1,45 +1,46 @@ /* MakeUp - ao.glsl -Based on Capt Tatsu's ambient occlusion functions. +Based on old Capt Tatsu's ambient occlusion functions. */ float dbao(float dither) { - float ao = 0.0; - - float inv_steps = 1.0 / AOSTEPS; - vec2 offset; - float n; - float dither_x; - - float d = texture2D(depthtex0, texcoord.xy).r; - float hand_check = d < 0.56 ? 1024.0 : 1.0; - d = ld(d); - - float sd = 0.0; - float angle = 0.0; - float dist = 0.0; - float far_double = 2.0 * far; - vec2 scale = vec2(inv_aspect_ratio, 1.0) * (fov_y_inv / (d * far)); - float sample_d; - - for (int i = 0; i < AOSTEPS; i++) { - dither_x = (i + dither); - n = fract(dither_x * 1.6180339887) * 3.141592653589793; - offset = vec2(cos(n), sin(n)) * dither_x * scale * inv_steps; - - sd = ld(texture2D(depthtex0, texcoord.xy + offset).r); - sample_d = (d - sd) * far_double * hand_check; - angle = clamp(0.5 - sample_d, 0.0, 1.0); - dist = clamp(0.25 * sample_d - 1.0, 0.0, 1.0); - - sd = ld(texture2D(depthtex0, texcoord.xy - offset).r); - sample_d = (d - sd) * far_double * hand_check; - angle += clamp(0.5 - sample_d, 0.0, 1.0); - dist += clamp(0.25 * sample_d - 1.0, 0.0, 1.0); - - ao += clamp(angle + dist, 0.0, 1.0); - } - ao /= AOSTEPS; - - return sqrt((ao * AO_STRENGTH) + (1.0 - AO_STRENGTH)); + float ao = 0.0; + + float inv_steps = 1.0 / AOSTEPS; + vec2 offset; + float n; + float dither_x; + + float d = texture2D(depthtex0, texcoord.xy).r; + float hand_check = d < 0.56 ? 1024.0 : 1.0; + d = ld(d); + + float sd = 0.0; + float angle = 0.0; + float dist = 0.0; + float far_and_check = hand_check * 2.0 * far; + vec2 scale = vec2(inv_aspect_ratio, 1.0) * (fov_y_inv / (d * far)); + vec2 scale_factor = scale * inv_steps; + float sample_d; + + for (int i = 0; i < AOSTEPS; i++) { + dither_x = (i + dither); + n = fract(dither_x * 1.6180339887) * 3.141592653589793; + offset = vec2(cos(n), sin(n)) * dither_x * scale_factor; + + sd = ld(texture2D(depthtex0, texcoord.xy + offset).r); + sample_d = (d - sd) * far_and_check; + angle = clamp(0.5 - sample_d, 0.0, 1.0); + dist = clamp(0.25 * sample_d - 1.0, 0.0, 1.0); + + sd = ld(texture2D(depthtex0, texcoord.xy - offset).r); + sample_d = (d - sd) * far_and_check; + angle += clamp(0.5 - sample_d, 0.0, 1.0); + dist += clamp(0.25 * sample_d - 1.0, 0.0, 1.0); + + ao += clamp(angle + dist, 0.0, 1.0); + } + ao /= AOSTEPS; + + return sqrt((ao * AO_STRENGTH) + (1.0 - AO_STRENGTH)); } diff --git a/shaders/lib/basic_utils.glsl b/shaders/lib/basic_utils.glsl index 678ba9ad..9a990bfc 100644 --- a/shaders/lib/basic_utils.glsl +++ b/shaders/lib/basic_utils.glsl @@ -5,69 +5,69 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ float square_pow(float x) { - return x * x; + return x * x; } float cube_pow(float x) { - return x * x * x; + return x * x * x; } float fourth_pow(float x) { - float temp_2 = x * x; - return temp_2 * temp_2; + float temp_2 = x * x; + return temp_2 * temp_2; } float fifth_pow(float x) { - float temp_2 = x * x; - return temp_2 * temp_2 * x; + float temp_2 = x * x; + return temp_2 * temp_2 * x; } float sixth_pow(float x) { - float temp_2 = x * x; - return temp_2 * temp_2 * temp_2; + float temp_2 = x * x; + return temp_2 * temp_2 * temp_2; } vec3 vec3_square_pow(vec3 x) { - return x * x; + return x * x; } vec3 vec3_cube_pow(vec3 x) { - return x * x * x; + return x * x * x; } vec3 vec3_fourth_pow(vec3 x) { - vec3 temp_2 = x * x; - return temp_2 * temp_2; + vec3 temp_2 = x * x; + return temp_2 * temp_2; } vec3 vec3_fifth_pow(vec3 x) { - vec3 temp_2 = x * x; - return temp_2 * temp_2 * x; + vec3 temp_2 = x * x; + return temp_2 * temp_2 * x; } vec3 vec3_sixth_pow(vec3 x) { - vec3 temp_2 = x * x; - return temp_2 * temp_2 * temp_2; + vec3 temp_2 = x * x; + return temp_2 * temp_2 * temp_2; } vec4 vec4_square_pow(vec4 x) { - return x * x; + return x * x; } vec4 vec4_cube_pow(vec4 x) { - return x * x * x; + return x * x * x; } vec4 vec4_fourth_pow(vec4 x) { - return x * x * x * x; + return x * x * x * x; } vec4 vec3_fifth_pow(vec4 x) { - vec4 temp_2 = x * x; - return temp_2 * temp_2 * x; + vec4 temp_2 = x * x; + return temp_2 * temp_2 * x; } vec4 vec3_sixth_pow(vec4 x) { - vec4 temp_2 = x * x; - return temp_2 * temp_2 * temp_2; + vec4 temp_2 = x * x; + return temp_2 * temp_2 * temp_2; } diff --git a/shaders/lib/bloom.glsl b/shaders/lib/bloom.glsl index 52f887dd..77fec404 100644 --- a/shaders/lib/bloom.glsl +++ b/shaders/lib/bloom.glsl @@ -5,26 +5,27 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ vec3 mipmap_bloom(sampler2D image, vec2 coords, float dither) { - vec3 blur_sample = vec3(0.0); - vec2 blur_radius_vec = vec2(0.1 * inv_aspect_ratio, 0.1); + vec3 blur_sample = vec3(0.0); + vec2 blur_radius_vec = vec2(0.1 * inv_aspect_ratio, 0.1); - int sample_c = int(BLOOM_SAMPLES); + int sample_c = int(BLOOM_SAMPLES); - float inv_steps = 1.0 / BLOOM_SAMPLES; - float n; - vec2 offset; - float dither_x; + // float inv_steps = 1.0 / BLOOM_SAMPLES; + vec2 blur_radios_factor = blur_radius_vec * (1.0 / BLOOM_SAMPLES); + float n; + vec2 offset; + float dither_x; - for(int i = 0; i < sample_c; i++) { - dither_x = (i + dither); - n = fract(dither_x * 1.6180339887) * 3.141592653589793; - offset = vec2(cos(n), sin(n)) * dither_x * blur_radius_vec * inv_steps; + for(int i = 0; i < sample_c; i++) { + dither_x = (i + dither); + n = fract(dither_x * 1.6180339887) * 3.141592653589793; + offset = vec2(cos(n), sin(n)) * dither_x * blur_radios_factor; - blur_sample += texture2D(image, coords + offset, -1.0).rgb; - blur_sample += texture2D(image, coords - offset, -1.0).rgb; - } + blur_sample += texture2D(image, coords + offset, -1.0).rgb; + blur_sample += texture2D(image, coords - offset, -1.0).rgb; + } - blur_sample /= (BLOOM_SAMPLES * 2.0); + blur_sample /= (BLOOM_SAMPLES * 2.0); - return blur_sample; + return blur_sample; } diff --git a/shaders/lib/blur.glsl b/shaders/lib/blur.glsl index 0c8b9a25..d606d960 100644 --- a/shaders/lib/blur.glsl +++ b/shaders/lib/blur.glsl @@ -5,32 +5,32 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ vec3 noised_blur(vec4 color_depth, sampler2D image, vec2 coords, float force, float dither) { - vec3 block_color = color_depth.rgb; - float the_depth = color_depth.a; - float blur_radius = 0.0; + vec3 block_color = color_depth.rgb; + float the_depth = color_depth.a; + float blur_radius = 0.0; - if (the_depth > 0.56) { // Manos no - blur_radius = - max(abs(the_depth - centerDepthSmooth) - 0.000075, 0.0) * fov_y_inv; - blur_radius = blur_radius * inversesqrt(0.1 + blur_radius * blur_radius) * force; - blur_radius = min(blur_radius, 0.1); - } + if (the_depth > 0.56) { // Manos no + blur_radius = + max(abs(the_depth - centerDepthSmooth) - 0.000075, 0.0) * fov_y_inv; + blur_radius = blur_radius * inversesqrt(0.1 + blur_radius * blur_radius) * force; + blur_radius = min(blur_radius, 0.1); + } - if (blur_radius > min(pixel_size_x, pixel_size_y)) { - vec3 blur_sample = vec3(0.0); - vec2 blur_radius_vec = vec2(blur_radius * inv_aspect_ratio, blur_radius); + if (blur_radius > min(pixel_size_x, pixel_size_y)) { + vec3 blur_sample = vec3(0.0); + vec2 blur_radius_vec = vec2(blur_radius * inv_aspect_ratio, blur_radius); - float dither_base = dither; - dither *= 6.283185307179586; + float dither_base = dither; + dither *= 6.283185307179586; - float current_radius = (0.25 + dither_base); - vec2 offset = vec2(cos(dither), sin(dither)) * blur_radius_vec * current_radius; + float current_radius = (0.25 + dither_base); + vec2 offset = vec2(cos(dither), sin(dither)) * blur_radius_vec * current_radius; - blur_sample += texture2D(image, coords + offset, -2.0).rgb; - blur_sample += texture2D(image, coords - offset, -2.0).rgb; + blur_sample += texture2D(image, coords + offset, -2.0).rgb; + blur_sample += texture2D(image, coords - offset, -2.0).rgb; - block_color = blur_sample * 0.5; - } + block_color = blur_sample * 0.5; + } - return block_color; + return block_color; } diff --git a/shaders/lib/color_blindness.glsl b/shaders/lib/color_blindness.glsl index 9a433e06..c1693f18 100644 --- a/shaders/lib/color_blindness.glsl +++ b/shaders/lib/color_blindness.glsl @@ -5,36 +5,36 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ vec3 color_blindness(vec3 color) { - float L = (17.8824 * color.r) + (43.5161 * color.g) + (4.11935 * color.b); - float M = (3.45565 * color.r) + (27.1554 * color.g) + (3.86714 * color.b); - float S = (0.0299566 * color.r) + (0.184309 * color.g) + (1.46709 * color.b); + float L = (17.8824 * color.r) + (43.5161 * color.g) + (4.11935 * color.b); + float M = (3.45565 * color.r) + (27.1554 * color.g) + (3.86714 * color.b); + float S = (0.0299566 * color.r) + (0.184309 * color.g) + (1.46709 * color.b); - float l, m, s; - #if COLOR_BLIND_MODE == 0 // Protanopia - l = 0.0 * L + 2.02344 * M + -2.52581 * S; - m = 0.0 * L + 1.0 * M + 0.0 * S; - s = 0.0 * L + 0.0 * M + 1.0 * S; - #elif COLOR_BLIND_MODE == 1 // Deutranopia - l = 1.0 * L + 0.0 * M + 0.0 * S; - m = 0.494207 * L + 0.0 * M + 1.24827 * S; - s = 0.0 * L + 0.0 * M + 1.0 * S; - #elif COLOR_BLIND_MODE == 2 // Tritanopia - l = 1.0 * L + 0.0 * M + 0.0 * S; - m = 0.0 * L + 1.0 * M + 0.0 * S; - s = -0.395913 * L + 0.801109 * M + 0.0 * S; - #endif + float l, m, s; + #if COLOR_BLIND_MODE == 0 // Protanopia + l = 0.0 * L + 2.02344 * M + -2.52581 * S; + m = 0.0 * L + 1.0 * M + 0.0 * S; + s = 0.0 * L + 0.0 * M + 1.0 * S; + #elif COLOR_BLIND_MODE == 1 // Deutranopia + l = 1.0 * L + 0.0 * M + 0.0 * S; + m = 0.494207 * L + 0.0 * M + 1.24827 * S; + s = 0.0 * L + 0.0 * M + 1.0 * S; + #elif COLOR_BLIND_MODE == 2 // Tritanopia + l = 1.0 * L + 0.0 * M + 0.0 * S; + m = 0.0 * L + 1.0 * M + 0.0 * S; + s = -0.395913 * L + 0.801109 * M + 0.0 * S; + #endif - vec3 error; - error.r = (0.0809444479 * l) + (-0.130504409 * m) + (0.116721066 * s); - error.g = (-0.0102485335 * l) + (0.0540193266 * m) + (-0.113614708 * s); - error.b = (-0.000365296938 * l) + (-0.00412161469 * m) + (0.693511405 * s); + vec3 error; + error.r = (0.0809444479 * l) + (-0.130504409 * m) + (0.116721066 * s); + error.g = (-0.0102485335 * l) + (0.0540193266 * m) + (-0.113614708 * s); + error.b = (-0.000365296938 * l) + (-0.00412161469 * m) + (0.693511405 * s); - vec3 diff = color - error; - vec3 correction; - correction.r = 0.0; - correction.g = (diff.r * 0.7) + (diff.g * 1.0); - correction.b = (diff.r * 0.7) + (diff.b * 1.0); - correction = color + correction; + vec3 diff = color - error; + vec3 correction; + correction.r = 0.0; + correction.g = (diff.r * 0.7) + (diff.g * 1.0); + correction.b = (diff.r * 0.7) + (diff.b * 1.0); + correction = color + correction; - return correction; + return correction; } \ No newline at end of file diff --git a/shaders/lib/color_conversion.glsl b/shaders/lib/color_conversion.glsl index ddf9cfb1..3354680b 100644 --- a/shaders/lib/color_conversion.glsl +++ b/shaders/lib/color_conversion.glsl @@ -45,7 +45,7 @@ vec3 lab_to_xyz(vec3 lab) { vec3 xyz_to_rgb(vec3 xyz) { const mat3 xyz_to_rgb_matrix = mat3( 3.2404542, -1.5371385, -0.4985314, - -0.9692660, 1.8760108, 0.0415560, + -0.9692660, 1.8760108, 0.0415560, 0.0556434, -0.2040259, 1.0572252 ); diff --git a/shaders/lib/color_utils.glsl b/shaders/lib/color_utils.glsl index b365b174..4f208438 100644 --- a/shaders/lib/color_utils.glsl +++ b/shaders/lib/color_utils.glsl @@ -10,147 +10,146 @@ uniform float night_mixer; uniform int moonPhase; #ifdef UNKNOWN_DIM - uniform vec3 fogColor; - uniform vec3 skyColor; + uniform vec3 fogColor; + uniform vec3 skyColor; #endif #define NIGHT_BRIGHT_PHASE (NIGHT_BRIGHT + (NIGHT_BRIGHT * (abs(4.0 - moonPhase) * 0.25))) #if COLOR_SCHEME == 0 // Ethereal - #define OMNI_TINT 0.4 - #define LIGHT_SUNSET_COLOR vec3(0.887528, 0.443394, 0.301044) - #define LIGHT_DAY_COLOR vec3(0.90, 0.84, 0.79) - #define LIGHT_NIGHT_COLOR vec3(0.0317353, 0.0467353, 0.0637353) * NIGHT_BRIGHT_PHASE + #define OMNI_TINT 0.4 + #define LIGHT_SUNSET_COLOR vec3(0.887528, 0.443394, 0.301044) + #define LIGHT_DAY_COLOR vec3(0.90, 0.84, 0.79) + #define LIGHT_NIGHT_COLOR vec3(0.0317353, 0.0467353, 0.0637353) * NIGHT_BRIGHT_PHASE - #define ZENITH_SUNSET_COLOR vec3(0.2617647, 0.33529412, 0.52352941) - #define ZENITH_DAY_COLOR vec3(0.0785098, 0.24352941, 0.54901961) - #define ZENITH_NIGHT_COLOR vec3(0.0168, 0.0228, 0.03) * NIGHT_BRIGHT_PHASE + #define ZENITH_SUNSET_COLOR vec3(0.2617647, 0.33529412, 0.52352941) + #define ZENITH_DAY_COLOR vec3(0.0785098, 0.24352941, 0.54901961) + #define ZENITH_NIGHT_COLOR vec3(0.0168, 0.0228, 0.03) * NIGHT_BRIGHT_PHASE - #define HORIZON_SUNSET_COLOR vec3(1.0, 0.6, 0.394) - #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) - #define HORIZON_NIGHT_COLOR vec3(0.02556, 0.03772, 0.05244) * NIGHT_BRIGHT_PHASE + #define HORIZON_SUNSET_COLOR vec3(1.0, 0.6, 0.394) + #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) + #define HORIZON_NIGHT_COLOR vec3(0.02556, 0.03772, 0.05244) * NIGHT_BRIGHT_PHASE - #define WATER_COLOR vec3(0.05, 0.1, 0.11) + #define WATER_COLOR vec3(0.05, 0.1, 0.11) #elif COLOR_SCHEME == 1 // New shoka - #define OMNI_TINT 0.25 - #define LIGHT_SUNSET_COLOR vec3(1.0, 0.588, 0.3555) - #define LIGHT_DAY_COLOR vec3(0.90, 0.84, 0.79) - #define LIGHT_NIGHT_COLOR vec3(0.04786874, 0.05175001, 0.06112969) * NIGHT_BRIGHT_PHASE + #define OMNI_TINT 0.25 + #define LIGHT_SUNSET_COLOR vec3(1.0, 0.588, 0.3555) + #define LIGHT_DAY_COLOR vec3(0.90, 0.84, 0.79) + #define LIGHT_NIGHT_COLOR vec3(0.04786874, 0.05175001, 0.06112969) * NIGHT_BRIGHT_PHASE - #define ZENITH_SUNSET_COLOR vec3(0.143, 0.24394118, 0.36450981) - #define ZENITH_DAY_COLOR vec3(0.143, 0.24394118, 0.36450981) - #define ZENITH_NIGHT_COLOR vec3(0.014, 0.019, 0.025) * NIGHT_BRIGHT_PHASE + #define ZENITH_SUNSET_COLOR vec3(0.143, 0.24394118, 0.36450981) + #define ZENITH_DAY_COLOR vec3(0.143, 0.24394118, 0.36450981) + #define ZENITH_NIGHT_COLOR vec3(0.014, 0.019, 0.025) * NIGHT_BRIGHT_PHASE - #define HORIZON_SUNSET_COLOR vec3(1.0, 0.648, 0.37824) - #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) - #define HORIZON_NIGHT_COLOR vec3(0.0213, 0.0306, 0.0387) * NIGHT_BRIGHT_PHASE + #define HORIZON_SUNSET_COLOR vec3(1.0, 0.648, 0.37824) + #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) + #define HORIZON_NIGHT_COLOR vec3(0.0213, 0.0306, 0.0387) * NIGHT_BRIGHT_PHASE - #define WATER_COLOR vec3(0.05, 0.1, 0.11) + #define WATER_COLOR vec3(0.05, 0.1, 0.11) #elif COLOR_SCHEME == 2 // Shoka - #define OMNI_TINT 0.5 - #define LIGHT_SUNSET_COLOR vec3(0.70656, 0.44436, 0.2898) - #define LIGHT_DAY_COLOR vec3(0.91640625, 0.91640625, 0.635375) - #define LIGHT_NIGHT_COLOR vec3(0.04786874, 0.05175001, 0.06112969) * NIGHT_BRIGHT_PHASE + #define OMNI_TINT 0.5 + #define LIGHT_SUNSET_COLOR vec3(0.70656, 0.44436, 0.2898) + #define LIGHT_DAY_COLOR vec3(0.91640625, 0.91640625, 0.635375) + #define LIGHT_NIGHT_COLOR vec3(0.04786874, 0.05175001, 0.06112969) * NIGHT_BRIGHT_PHASE - #define ZENITH_SUNSET_COLOR vec3(0.104, 0.17741177, 0.26509804) - #define ZENITH_DAY_COLOR vec3(0.13, 0.22176471, 0.33137255) - #define ZENITH_NIGHT_COLOR vec3(0.014, 0.019, 0.025) * NIGHT_BRIGHT_PHASE + #define ZENITH_SUNSET_COLOR vec3(0.104, 0.17741177, 0.26509804) + #define ZENITH_DAY_COLOR vec3(0.13, 0.22176471, 0.33137255) + #define ZENITH_NIGHT_COLOR vec3(0.014, 0.019, 0.025) * NIGHT_BRIGHT_PHASE - #define HORIZON_SUNSET_COLOR vec3(0.715 , 0.5499, 0.416) - #define HORIZON_DAY_COLOR vec3(0.364 , 0.6825, 0.91) - #define HORIZON_NIGHT_COLOR vec3(0.0213, 0.0306, 0.0387) * NIGHT_BRIGHT_PHASE + #define HORIZON_SUNSET_COLOR vec3(0.715 , 0.5499, 0.416) + #define HORIZON_DAY_COLOR vec3(0.364 , 0.6825, 0.91) + #define HORIZON_NIGHT_COLOR vec3(0.0213, 0.0306, 0.0387) * NIGHT_BRIGHT_PHASE - #define WATER_COLOR vec3(0.01647059, 0.13882353, 0.16470588) + #define WATER_COLOR vec3(0.01647059, 0.13882353, 0.16470588) #elif COLOR_SCHEME == 3 // Legacy - #define OMNI_TINT 0.5 - #define LIGHT_SUNSET_COLOR vec3(0.96876, 0.4356254, 0.26002448) - #define LIGHT_DAY_COLOR vec3(0.88504, 0.88504, 0.8372) - #define LIGHT_NIGHT_COLOR vec3(0.04693014, 0.0507353 , 0.05993107) * NIGHT_BRIGHT_PHASE + #define OMNI_TINT 0.5 + #define LIGHT_SUNSET_COLOR vec3(0.96876, 0.4356254, 0.26002448) + #define LIGHT_DAY_COLOR vec3(0.88504, 0.88504, 0.8372) + #define LIGHT_NIGHT_COLOR vec3(0.04693014, 0.0507353 , 0.05993107) * NIGHT_BRIGHT_PHASE - #define ZENITH_SUNSET_COLOR vec3(0.09410295, 0.20145588, 0.34905882) - #define ZENITH_DAY_COLOR vec3(0.182, 0.351, 0.754) - #define ZENITH_NIGHT_COLOR vec3(0.00841175, 0.01651763, 0.025) * NIGHT_BRIGHT_PHASE + #define ZENITH_SUNSET_COLOR vec3(0.09410295, 0.20145588, 0.34905882) + #define ZENITH_DAY_COLOR vec3(0.182, 0.351, 0.754) + #define ZENITH_NIGHT_COLOR vec3(0.00841175, 0.01651763, 0.025) * NIGHT_BRIGHT_PHASE - #define HORIZON_SUNSET_COLOR vec3(0.81, 0.44165647, 0.25293529) - #define HORIZON_DAY_COLOR vec3(0.572, 1.014, 1.248) - #define HORIZON_NIGHT_COLOR vec3(0.01078431, 0.02317647, 0.035) * NIGHT_BRIGHT_PHASE - - #define WATER_COLOR vec3(0.01647059, 0.13882353, 0.16470588) + #define HORIZON_SUNSET_COLOR vec3(0.81, 0.44165647, 0.25293529) + #define HORIZON_DAY_COLOR vec3(0.572, 1.014, 1.248) + #define HORIZON_NIGHT_COLOR vec3(0.01078431, 0.02317647, 0.035) * NIGHT_BRIGHT_PHASE + #define WATER_COLOR vec3(0.01647059, 0.13882353, 0.16470588) #elif COLOR_SCHEME == 4 // Captain - #define OMNI_TINT 0.5 - #define LIGHT_SUNSET_COLOR vec3(0.84456, 0.52992, 0.26496001) - #define LIGHT_DAY_COLOR vec3(0.83064961, 0.93448079, 1.1032065) - #define LIGHT_NIGHT_COLOR vec3(0.02597646, 0.05195295, 0.069) * NIGHT_BRIGHT_PHASE + #define OMNI_TINT 0.5 + #define LIGHT_SUNSET_COLOR vec3(0.84456, 0.52992, 0.26496001) + #define LIGHT_DAY_COLOR vec3(0.83064961, 0.93448079, 1.1032065) + #define LIGHT_NIGHT_COLOR vec3(0.02597646, 0.05195295, 0.069) * NIGHT_BRIGHT_PHASE - #define ZENITH_SUNSET_COLOR vec3(0.18135 , 0.230256, 0.332592) - #define ZENITH_DAY_COLOR vec3(0.104, 0.26, 0.507) - #define ZENITH_NIGHT_COLOR vec3(0.004 ,0.01, 0.0195) * NIGHT_BRIGHT_PHASE + #define ZENITH_SUNSET_COLOR vec3(0.18135 , 0.230256, 0.332592) + #define ZENITH_DAY_COLOR vec3(0.104, 0.26, 0.507) + #define ZENITH_NIGHT_COLOR vec3(0.004 ,0.01, 0.0195) * NIGHT_BRIGHT_PHASE - #define HORIZON_SUNSET_COLOR vec3(1.3, 0.8632, 0.3952) - #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) - #define HORIZON_NIGHT_COLOR vec3(0.025, 0.035, 0.05) * NIGHT_BRIGHT_PHASE + #define HORIZON_SUNSET_COLOR vec3(1.3, 0.8632, 0.3952) + #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) + #define HORIZON_NIGHT_COLOR vec3(0.025, 0.035, 0.05) * NIGHT_BRIGHT_PHASE - #define WATER_COLOR vec3(0.05, 0.1, 0.11) + #define WATER_COLOR vec3(0.05, 0.1, 0.11) #elif COLOR_SCHEME == 5 // Psychedelic - #define OMNI_TINT 0.45 - #define LIGHT_SUNSET_COLOR vec3(0.85 , 0.47058824, 0.17921569) - #define LIGHT_DAY_COLOR vec3(0.91021875, 0.95771875, 0.6) - #define LIGHT_NIGHT_COLOR vec3(0.04223712, 0.04566177, 0.05393796) * NIGHT_BRIGHT_PHASE + #define OMNI_TINT 0.45 + #define LIGHT_SUNSET_COLOR vec3(0.85 , 0.47058824, 0.17921569) + #define LIGHT_DAY_COLOR vec3(0.91021875, 0.95771875, 0.6) + #define LIGHT_NIGHT_COLOR vec3(0.04223712, 0.04566177, 0.05393796) * NIGHT_BRIGHT_PHASE - #define ZENITH_SUNSET_COLOR vec3(0.18135 , 0.230256, 0.332592) - #define ZENITH_DAY_COLOR vec3(0.104, 0.26, 0.507) - #define ZENITH_NIGHT_COLOR vec3(0.004 ,0.01, 0.0195) * NIGHT_BRIGHT_PHASE + #define ZENITH_SUNSET_COLOR vec3(0.18135 , 0.230256, 0.332592) + #define ZENITH_DAY_COLOR vec3(0.104, 0.26, 0.507) + #define ZENITH_NIGHT_COLOR vec3(0.004 ,0.01, 0.0195) * NIGHT_BRIGHT_PHASE - #define HORIZON_SUNSET_COLOR vec3(1.3, 0.8632, 0.3952) - #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) - #define HORIZON_NIGHT_COLOR vec3(0.025, 0.035, 0.05) * NIGHT_BRIGHT_PHASE + #define HORIZON_SUNSET_COLOR vec3(1.3, 0.8632, 0.3952) + #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) + #define HORIZON_NIGHT_COLOR vec3(0.025, 0.035, 0.05) * NIGHT_BRIGHT_PHASE - #define WATER_COLOR vec3(0.018, 0.12 , 0.18) + #define WATER_COLOR vec3(0.018, 0.12 , 0.18) #elif COLOR_SCHEME == 6 // Cocoa - #define OMNI_TINT 0.4 - #define LIGHT_SUNSET_COLOR vec3(0.918528, 0.5941728, 0.2712528) - #define LIGHT_DAY_COLOR vec3(0.897, 0.897, 0.5718375) - #define LIGHT_NIGHT_COLOR vec3(0.04693014, 0.0507353, 0.05993107) * NIGHT_BRIGHT_PHASE + #define OMNI_TINT 0.4 + #define LIGHT_SUNSET_COLOR vec3(0.918528, 0.5941728, 0.2712528) + #define LIGHT_DAY_COLOR vec3(0.897, 0.897, 0.5718375) + #define LIGHT_NIGHT_COLOR vec3(0.04693014, 0.0507353, 0.05993107) * NIGHT_BRIGHT_PHASE - #define ZENITH_SUNSET_COLOR vec3(0.117, 0.26, 0.494) - #define ZENITH_DAY_COLOR vec3(0.234, 0.403, 0.676) - #define ZENITH_NIGHT_COLOR vec3(0.014, 0.019, 0.031) * NIGHT_BRIGHT_PHASE + #define ZENITH_SUNSET_COLOR vec3(0.117, 0.26, 0.494) + #define ZENITH_DAY_COLOR vec3(0.234, 0.403, 0.676) + #define ZENITH_NIGHT_COLOR vec3(0.014, 0.019, 0.031) * NIGHT_BRIGHT_PHASE - #define HORIZON_SUNSET_COLOR vec3(1.183, 0.858, 0.611) - #define HORIZON_DAY_COLOR vec3(0.52, 0.975, 1.3) - #define HORIZON_NIGHT_COLOR vec3(0.022, 0.029, 0.049) * NIGHT_BRIGHT_PHASE + #define HORIZON_SUNSET_COLOR vec3(1.183, 0.858, 0.611) + #define HORIZON_DAY_COLOR vec3(0.52, 0.975, 1.3) + #define HORIZON_NIGHT_COLOR vec3(0.022, 0.029, 0.049) * NIGHT_BRIGHT_PHASE - #define WATER_COLOR vec3(0.018, 0.12 , 0.18) + #define WATER_COLOR vec3(0.018, 0.12 , 0.18) #elif COLOR_SCHEME == 99 // Custom - #define OMNI_TINT OMNI_TINT_CUSTOM - #define LIGHT_SUNSET_COLOR vec3(LIGHT_SUNSET_COLOR_R, LIGHT_SUNSET_COLOR_G, LIGHT_SUNSET_COLOR_B) - #define LIGHT_DAY_COLOR vec3(LIGHT_DAY_COLOR_R, LIGHT_DAY_COLOR_G, LIGHT_DAY_COLOR_B) - #define LIGHT_NIGHT_COLOR vec3(LIGHT_NIGHT_COLOR_R, LIGHT_NIGHT_COLOR_G, LIGHT_NIGHT_COLOR_B) * NIGHT_BRIGHT_PHASE + #define OMNI_TINT OMNI_TINT_CUSTOM + #define LIGHT_SUNSET_COLOR vec3(LIGHT_SUNSET_COLOR_R, LIGHT_SUNSET_COLOR_G, LIGHT_SUNSET_COLOR_B) + #define LIGHT_DAY_COLOR vec3(LIGHT_DAY_COLOR_R, LIGHT_DAY_COLOR_G, LIGHT_DAY_COLOR_B) + #define LIGHT_NIGHT_COLOR vec3(LIGHT_NIGHT_COLOR_R, LIGHT_NIGHT_COLOR_G, LIGHT_NIGHT_COLOR_B) * NIGHT_BRIGHT_PHASE - #define ZENITH_SUNSET_COLOR vec3(ZENITH_SUNSET_COLOR_R, ZENITH_SUNSET_COLOR_G, ZENITH_SUNSET_COLOR_B) - #define ZENITH_DAY_COLOR vec3(ZENITH_DAY_COLOR_R, ZENITH_DAY_COLOR_G, ZENITH_DAY_COLOR_B) - #define ZENITH_NIGHT_COLOR vec3(ZENITH_NIGHT_COLOR_R, ZENITH_NIGHT_COLOR_G, ZENITH_NIGHT_COLOR_B) * NIGHT_BRIGHT_PHASE + #define ZENITH_SUNSET_COLOR vec3(ZENITH_SUNSET_COLOR_R, ZENITH_SUNSET_COLOR_G, ZENITH_SUNSET_COLOR_B) + #define ZENITH_DAY_COLOR vec3(ZENITH_DAY_COLOR_R, ZENITH_DAY_COLOR_G, ZENITH_DAY_COLOR_B) + #define ZENITH_NIGHT_COLOR vec3(ZENITH_NIGHT_COLOR_R, ZENITH_NIGHT_COLOR_G, ZENITH_NIGHT_COLOR_B) * NIGHT_BRIGHT_PHASE - #define HORIZON_SUNSET_COLOR vec3(HORIZON_SUNSET_COLOR_R, HORIZON_SUNSET_COLOR_G, HORIZON_SUNSET_COLOR_B) - #define HORIZON_DAY_COLOR vec3(HORIZON_DAY_COLOR_R, HORIZON_DAY_COLOR_G, HORIZON_DAY_COLOR_B) - #define HORIZON_NIGHT_COLOR vec3(HORIZON_NIGHT_COLOR_R, HORIZON_NIGHT_COLOR_G, HORIZON_NIGHT_COLOR_B) * NIGHT_BRIGHT_PHASE + #define HORIZON_SUNSET_COLOR vec3(HORIZON_SUNSET_COLOR_R, HORIZON_SUNSET_COLOR_G, HORIZON_SUNSET_COLOR_B) + #define HORIZON_DAY_COLOR vec3(HORIZON_DAY_COLOR_R, HORIZON_DAY_COLOR_G, HORIZON_DAY_COLOR_B) + #define HORIZON_NIGHT_COLOR vec3(HORIZON_NIGHT_COLOR_R, HORIZON_NIGHT_COLOR_G, HORIZON_NIGHT_COLOR_B) * NIGHT_BRIGHT_PHASE - #define WATER_COLOR vec3(WATER_COLOR_R, WATER_COLOR_G, WATER_COLOR_B) + #define WATER_COLOR vec3(WATER_COLOR_R, WATER_COLOR_G, WATER_COLOR_B) #endif #define NV_COLOR vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B) #if BLOCKLIGHT_TEMP == 0 - #define CANDLE_BASELIGHT vec3(0.29975, 0.15392353, 0.0799) + #define CANDLE_BASELIGHT vec3(0.29975, 0.15392353, 0.0799) #elif BLOCKLIGHT_TEMP == 1 - #define CANDLE_BASELIGHT vec3(0.27475, 0.17392353, 0.0899) + #define CANDLE_BASELIGHT vec3(0.27475, 0.17392353, 0.0899) #elif BLOCKLIGHT_TEMP == 2 - #define CANDLE_BASELIGHT vec3(0.24975, 0.19392353, 0.0999) + #define CANDLE_BASELIGHT vec3(0.24975, 0.19392353, 0.0999) #elif BLOCKLIGHT_TEMP == 3 - #define CANDLE_BASELIGHT vec3(0.22, 0.19, 0.14) + #define CANDLE_BASELIGHT vec3(0.22, 0.19, 0.14) #else - #define CANDLE_BASELIGHT vec3(0.19, 0.19, 0.19) + #define CANDLE_BASELIGHT vec3(0.19, 0.19, 0.19) #endif #include "/lib/day_blend.glsl" @@ -159,9 +158,9 @@ uniform int moonPhase; #if VOL_LIGHT == 1 || (VOL_LIGHT == 2 && defined SHADOW_CASTING) || defined UNKNOWN_DIM #define FOG_DENSITY 3.0 #else - #define FOG_DAY 3.0 - #define FOG_SUNSET 2.0 - #define FOG_NIGHT 3.0 + #define FOG_DAY 3.0 + #define FOG_SUNSET 2.0 + #define FOG_NIGHT 3.0 #endif #include "/lib/color_conversion.glsl" diff --git a/shaders/lib/color_utils_end.glsl b/shaders/lib/color_utils_end.glsl index 2be4ff16..3f389b88 100644 --- a/shaders/lib/color_utils_end.glsl +++ b/shaders/lib/color_utils_end.glsl @@ -24,15 +24,15 @@ uniform float night_mixer; #define WATER_COLOR vec3(0.01647059, 0.13882353, 0.16470588) #if BLOCKLIGHT_TEMP == 0 - #define CANDLE_BASELIGHT vec3(0.29975, 0.15392353, 0.0799) + #define CANDLE_BASELIGHT vec3(0.29975, 0.15392353, 0.0799) #elif BLOCKLIGHT_TEMP == 1 - #define CANDLE_BASELIGHT vec3(0.27475, 0.17392353, 0.0899) + #define CANDLE_BASELIGHT vec3(0.27475, 0.17392353, 0.0899) #elif BLOCKLIGHT_TEMP == 2 - #define CANDLE_BASELIGHT vec3(0.24975, 0.19392353, 0.0999) + #define CANDLE_BASELIGHT vec3(0.24975, 0.19392353, 0.0999) #elif BLOCKLIGHT_TEMP == 3 - #define CANDLE_BASELIGHT vec3(0.22, 0.19, 0.14) + #define CANDLE_BASELIGHT vec3(0.22, 0.19, 0.14) #else - #define CANDLE_BASELIGHT vec3(0.19, 0.19, 0.19) + #define CANDLE_BASELIGHT vec3(0.19, 0.19, 0.19) #endif #include "/lib/day_blend.glsl" @@ -41,9 +41,9 @@ uniform float night_mixer; #if VOL_LIGHT == 1 || (VOL_LIGHT == 2 && defined SHADOW_CASTING) #define FOG_DENSITY 1.0 #else - #define FOG_DAY 1.0 - #define FOG_SUNSET 1.0 - #define FOG_NIGHT 1.0 + #define FOG_DAY 1.0 + #define FOG_SUNSET 1.0 + #define FOG_NIGHT 1.0 #endif #include "/lib/color_conversion.glsl" \ No newline at end of file diff --git a/shaders/lib/color_utils_nether.glsl b/shaders/lib/color_utils_nether.glsl index 59356fb7..eff5e451 100644 --- a/shaders/lib/color_utils_nether.glsl +++ b/shaders/lib/color_utils_nether.glsl @@ -24,15 +24,15 @@ uniform float night_mixer; #define WATER_COLOR vec3(0.01647059, 0.13882353, 0.16470588) #if BLOCKLIGHT_TEMP == 0 - #define CANDLE_BASELIGHT vec3(0.29975, 0.15392353, 0.0799) + #define CANDLE_BASELIGHT vec3(0.29975, 0.15392353, 0.0799) #elif BLOCKLIGHT_TEMP == 1 - #define CANDLE_BASELIGHT vec3(0.27475, 0.17392353, 0.0899) + #define CANDLE_BASELIGHT vec3(0.27475, 0.17392353, 0.0899) #elif BLOCKLIGHT_TEMP == 2 - #define CANDLE_BASELIGHT vec3(0.24975, 0.19392353, 0.0999) + #define CANDLE_BASELIGHT vec3(0.24975, 0.19392353, 0.0999) #elif BLOCKLIGHT_TEMP == 3 - #define CANDLE_BASELIGHT vec3(0.22, 0.19, 0.14) + #define CANDLE_BASELIGHT vec3(0.22, 0.19, 0.14) #else - #define CANDLE_BASELIGHT vec3(0.19, 0.19, 0.19) + #define CANDLE_BASELIGHT vec3(0.19, 0.19, 0.19) #endif #include "/lib/day_blend.glsl" diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index 8ea8547c..9a6b2367 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -30,17 +30,17 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define REFLECTION_SLIDER 2 // [0 1 2] Reflection quality. - Flipped image: Inaccurate but quick reflection. - Raymarching: Raytraced Screen Space Reflection. #if REFLECTION_SLIDER == 0 - #define REFLECTION 0 - #define SSR_TYPE 0 - #define REFLEX_INDEX 0.45 + #define REFLECTION 0 + #define SSR_TYPE 0 + #define REFLEX_INDEX 0.45 #elif REFLECTION_SLIDER == 1 - #define REFLECTION 1 - #define SSR_TYPE 0 - #define REFLEX_INDEX 0.7 + #define REFLECTION 1 + #define SSR_TYPE 0 + #define REFLEX_INDEX 0.7 #elif REFLECTION_SLIDER == 2 - #define REFLECTION 1 - #define SSR_TYPE 1 - #define REFLEX_INDEX 0.7 + #define REFLECTION 1 + #define SSR_TYPE 1 + #define REFLEX_INDEX 0.7 #endif #define FOG_ACTIVE // Toggle fog @@ -135,13 +135,13 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define OMNI_TINT_CUSTOM 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 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] #ifdef FOG_ACTIVE - // Don't remove + // Don't remove #endif #if NETHER_FOG_DISTANCE == 1 - #define NETHER_SIGHT min(far / 2, 96) + #define NETHER_SIGHT min(far / 2, 96) #else - #define NETHER_SIGHT far + #define NETHER_SIGHT far #endif // Reflection parameters @@ -149,40 +149,40 @@ Javier Garduño - GNU Lesser General Public License v3.0 // Cloud parameters #if CLOUD_VOL_STYLE == 1 - #define CLOUD_PLANE_SUP 380.0 - #define CLOUD_PLANE_CENTER 335.0 - #define CLOUD_PLANE 319.0 + #define CLOUD_PLANE_SUP 380.0 + #define CLOUD_PLANE_CENTER 335.0 + #define CLOUD_PLANE 319.0 #else - #define CLOUD_PLANE_SUP 590.0 - #define CLOUD_PLANE_CENTER 375.0 - #define CLOUD_PLANE 319.0 + #define CLOUD_PLANE_SUP 590.0 + #define CLOUD_PLANE_CENTER 375.0 + #define CLOUD_PLANE 319.0 #endif #define CLOUD_STEPS_AVG 7 // [7 8 9 10 11 12 13 14 15 16] Samples per pixel (high performance impact). #define CLOUD_SPEED 0 // [0 1 2] Change the speed of clouds for display purposes. #if CLOUD_VOL_STYLE == 1 - #if CLOUD_SPEED == 0 - #define CLOUD_HI_FACTOR 0.001388888888888889 - #define CLOUD_LOW_FACTOR 0.0002777777777777778 - #elif CLOUD_SPEED == 1 - #define CLOUD_HI_FACTOR 0.01388888888888889 - #define CLOUD_LOW_FACTOR 0.002777777777777778 - #elif CLOUD_SPEED == 2 - #define CLOUD_HI_FACTOR 0.1388888888888889 - #define CLOUD_LOW_FACTOR 0.02777777777777778 - #endif + #if CLOUD_SPEED == 0 + #define CLOUD_HI_FACTOR 0.001388888888888889 + #define CLOUD_LOW_FACTOR 0.0002777777777777778 + #elif CLOUD_SPEED == 1 + #define CLOUD_HI_FACTOR 0.01388888888888889 + #define CLOUD_LOW_FACTOR 0.002777777777777778 + #elif CLOUD_SPEED == 2 + #define CLOUD_HI_FACTOR 0.1388888888888889 + #define CLOUD_LOW_FACTOR 0.02777777777777778 + #endif #else - #if CLOUD_SPEED == 0 - #define CLOUD_HI_FACTOR 0.0016666666666666666 - #define CLOUD_LOW_FACTOR 0.0002777777777777778 - #elif CLOUD_SPEED == 1 - #define CLOUD_HI_FACTOR 0.016666666666666666 - #define CLOUD_LOW_FACTOR 0.002777777777777778 - #elif CLOUD_SPEED == 2 - #define CLOUD_HI_FACTOR 0.16666666666666666 - #define CLOUD_LOW_FACTOR 0.02777777777777778 - #endif + #if CLOUD_SPEED == 0 + #define CLOUD_HI_FACTOR 0.0016666666666666666 + #define CLOUD_LOW_FACTOR 0.0002777777777777778 + #elif CLOUD_SPEED == 1 + #define CLOUD_HI_FACTOR 0.016666666666666666 + #define CLOUD_LOW_FACTOR 0.002777777777777778 + #elif CLOUD_SPEED == 2 + #define CLOUD_HI_FACTOR 0.16666666666666666 + #define CLOUD_LOW_FACTOR 0.02777777777777778 + #endif #endif // Godrays @@ -202,124 +202,126 @@ const float sunPathRotation = -25.0; // [-40.0 -35.0 -30.0 -25.0 -20.0 -15.0 -10 #define SHADOW_CASTING // Enable or disable shadows. Configure quality in advanced options. #ifdef SHADOW_CASTING - // Shadow parameters - const float shadowIntervalSize = 3.0; - - const bool shadowtex0Mipmap = false; - const bool shadowtex1Mipmap = false; - const bool shadowColor0Mipmap = false; - const bool shadowColor1Mipmap = false; - - const bool shadowtex0Clear = false; - const bool shadowtex1Clear = false; - const bool shadowcolor0Clear = false; - const bool shadowcolor1Clear = false; - - #ifndef NO_SHADOWS - #if SHADOW_DISTANCE_SLIDER == 0 - #if SHADOW_QTY_SLIDER == 1 - #define SHADOW_LIMIT 75.0 - const int shadowMapResolution = 300; - const float shadowDistance = 75.0; - #define SHADOW_FIX_FACTOR 0.3 - #define SHADOW_DIST 0.75 - - #elif SHADOW_QTY_SLIDER == 2 - #define SHADOW_LIMIT 75.0 - const int shadowMapResolution = 600; - const float shadowDistance = 75.0; - #define SHADOW_FIX_FACTOR 0.15 - #define SHADOW_DIST 0.81 - - #elif SHADOW_QTY_SLIDER == 3 - #define SHADOW_LIMIT 75.0 - const int shadowMapResolution = 1200; - const float shadowDistance = 75.0; - #define SHADOW_FIX_FACTOR 0.05 - #define SHADOW_DIST 0.81 - - #endif - - #elif SHADOW_DISTANCE_SLIDER == 1 - #if SHADOW_QTY_SLIDER == 1 - #define SHADOW_LIMIT 105.0 - const int shadowMapResolution = 420; - const float shadowDistance = 105.0; - #define SHADOW_FIX_FACTOR 0.28 - #define SHADOW_DIST 0.75 - - #elif SHADOW_QTY_SLIDER == 2 - #define SHADOW_LIMIT 105.0 - const int shadowMapResolution = 840; - const float shadowDistance = 105.0; - #define SHADOW_FIX_FACTOR 0.07 - #define SHADOW_DIST 0.83 - - #elif SHADOW_QTY_SLIDER == 3 - #define SHADOW_LIMIT 105.0 - const int shadowMapResolution = 1680; - const float shadowDistance = 105.0; - #define SHADOW_FIX_FACTOR 0.03 - #define SHADOW_DIST 0.83 - - #endif - - #elif SHADOW_DISTANCE_SLIDER == 2 - #if SHADOW_QTY_SLIDER == 1 - #define SHADOW_LIMIT 255.0 - const int shadowMapResolution = 1020; - const float shadowDistance = 255.0; - #define SHADOW_FIX_FACTOR 0.12 - #define SHADOW_DIST 0.8 - - #elif SHADOW_QTY_SLIDER == 2 - #define SHADOW_LIMIT 255.0 - const int shadowMapResolution = 2040; - const float shadowDistance = 255.0; - #define SHADOW_FIX_FACTOR 0.03 - #define SHADOW_DIST 0.85 - - #elif SHADOW_QTY_SLIDER == 3 - #define SHADOW_LIMIT 255.0 - const int shadowMapResolution = 4080; - const float shadowDistance = 255.0; - #define SHADOW_FIX_FACTOR 0.015 - #define SHADOW_DIST 0.87 - - #endif - #endif - - #if VOL_LIGHT == 2 - const float shadowDistanceRenderMul = -1.0; - #else - const float shadowDistanceRenderMul = 1.0; - #endif + // Shadow parameters + const float shadowIntervalSize = 3.0; + + const bool shadowtex0Mipmap = false; + const bool shadowtex1Mipmap = false; + const bool shadowColor0Mipmap = false; + const bool shadowColor1Mipmap = false; + + const bool shadowtex0Clear = false; + const bool shadowtex1Clear = false; + const bool shadowcolor0Clear = false; + const bool shadowcolor1Clear = false; - const bool shadowHardwareFiltering = true; - const bool shadowtex1Nearest = false; - #endif + #ifndef NO_SHADOWS + #if SHADOW_DISTANCE_SLIDER == 0 + #if SHADOW_QTY_SLIDER == 1 + #define SHADOW_LIMIT 75.0 + const int shadowMapResolution = 300; + const float shadowDistance = 75.0; + #define SHADOW_FIX_FACTOR 0.3 + #define SHADOW_DIST 0.75 + + #elif SHADOW_QTY_SLIDER == 2 + #define SHADOW_LIMIT 75.0 + const int shadowMapResolution = 600; + const float shadowDistance = 75.0; + #define SHADOW_FIX_FACTOR 0.15 + #define SHADOW_DIST 0.81 + + #elif SHADOW_QTY_SLIDER == 3 + #define SHADOW_LIMIT 75.0 + const int shadowMapResolution = 1200; + const float shadowDistance = 75.0; + #define SHADOW_FIX_FACTOR 0.05 + #define SHADOW_DIST 0.81 + + #endif + + #elif SHADOW_DISTANCE_SLIDER == 1 + #if SHADOW_QTY_SLIDER == 1 + #define SHADOW_LIMIT 105.0 + const int shadowMapResolution = 420; + const float shadowDistance = 105.0; + #define SHADOW_FIX_FACTOR 0.28 + #define SHADOW_DIST 0.75 + + #elif SHADOW_QTY_SLIDER == 2 + #define SHADOW_LIMIT 105.0 + const int shadowMapResolution = 840; + const float shadowDistance = 105.0; + #define SHADOW_FIX_FACTOR 0.07 + #define SHADOW_DIST 0.83 + + #elif SHADOW_QTY_SLIDER == 3 + #define SHADOW_LIMIT 105.0 + const int shadowMapResolution = 1680; + const float shadowDistance = 105.0; + #define SHADOW_FIX_FACTOR 0.03 + #define SHADOW_DIST 0.83 + + #endif + + #elif SHADOW_DISTANCE_SLIDER == 2 + #if SHADOW_QTY_SLIDER == 1 + #define SHADOW_LIMIT 255.0 + const int shadowMapResolution = 1020; + const float shadowDistance = 255.0; + #define SHADOW_FIX_FACTOR 0.12 + #define SHADOW_DIST 0.8 + + #elif SHADOW_QTY_SLIDER == 2 + #define SHADOW_LIMIT 255.0 + const int shadowMapResolution = 2040; + const float shadowDistance = 255.0; + #define SHADOW_FIX_FACTOR 0.03 + #define SHADOW_DIST 0.85 + + #elif SHADOW_QTY_SLIDER == 3 + #define SHADOW_LIMIT 255.0 + const int shadowMapResolution = 4080; + const float shadowDistance = 255.0; + #define SHADOW_FIX_FACTOR 0.015 + #define SHADOW_DIST 0.87 + + #endif + #endif + + #if VOL_LIGHT == 2 + const float shadowDistanceRenderMul = -1.0; + #else + const float shadowDistanceRenderMul = 1.0; + #endif + + const bool shadowHardwareFiltering = true; + const bool shadowtex1Nearest = false; + #endif #else - #define SHADOW_DIST 0.0 - #define SHADOW_RES 0 - const int shadowMapResolution = 100; - const float shadowDistance = 60.0; + #define SHADOW_DIST 0.0 + #define SHADOW_RES 0 + const int shadowMapResolution = 100; + const float shadowDistance = 60.0; #endif // Redefined constants #if AO == 0 - const float ambientOcclusionLevel = 0.7; + const float ambientOcclusionLevel = 0.7; #else - const float ambientOcclusionLevel = 0.0; + const float ambientOcclusionLevel = 0.0; #endif const float eyeBrightnessHalflife = 6.0; const float centerDepthHalflife = 0.66; // DH exclusive -#define TRANSITION_SUP 0.00 -#define TRANSITION_INF 0.95 -#define TRANSITION_WATER_SUP 0.00 -#define TRANSITION_WATER_INF 0.65 -#define TRANSITION_DH_SUP 0.35 -#define TRANSITION_DH_INF 0.50 \ No newline at end of file +#if defined DISTANT_HORIZONS + #define TRANSITION_SUP 0.00 + #define TRANSITION_INF 0.95 + #define TRANSITION_WATER_SUP 0.00 + #define TRANSITION_WATER_INF 0.65 + #define TRANSITION_DH_SUP 0.35 + #define TRANSITION_DH_INF 0.50 +#endif \ No newline at end of file diff --git a/shaders/lib/day_blend.glsl b/shaders/lib/day_blend.glsl index 3603034f..d41e4d20 100644 --- a/shaders/lib/day_blend.glsl +++ b/shaders/lib/day_blend.glsl @@ -1,19 +1,19 @@ vec3 day_blend(vec3 sunset, vec3 day, vec3 night) { - // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) - // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) + // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) + // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) - vec3 day_color = mix(sunset, day, day_mixer); - vec3 night_color = mix(sunset, night, night_mixer); + vec3 day_color = mix(sunset, day, day_mixer); + vec3 night_color = mix(sunset, night, night_mixer); - return mix(day_color, night_color, step(0.5, day_moment)); + return mix(day_color, night_color, step(0.5, day_moment)); } float day_blend_float(float sunset, float day, float night) { - // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) - // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) + // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) + // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) - float day_value = mix(sunset, day, day_mixer); - float night_value = mix(sunset, night, night_mixer); + float day_value = mix(sunset, day, day_mixer); + float night_value = mix(sunset, night, night_mixer); - return mix(day_value, night_value, step(0.5, day_moment)); + return mix(day_value, night_value, step(0.5, day_moment)); } \ No newline at end of file diff --git a/shaders/lib/depth.glsl b/shaders/lib/depth.glsl index 1dec042a..3041add6 100644 --- a/shaders/lib/depth.glsl +++ b/shaders/lib/depth.glsl @@ -5,5 +5,5 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ float ld(float depth) { - return (2.0 * near) / (far + near - depth * (far - near)); + return (2.0 * near) / (far + near - depth * (far - near)); } diff --git a/shaders/lib/depth_dh.glsl b/shaders/lib/depth_dh.glsl index 29f1b015..6f646103 100644 --- a/shaders/lib/depth_dh.glsl +++ b/shaders/lib/depth_dh.glsl @@ -5,5 +5,5 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ float ld_dh(float depth) { - return (2.0 * dhNearPlane) / (dhFarPlane + dhNearPlane - depth * (dhFarPlane - dhNearPlane)); + return (2.0 * dhNearPlane) / (dhFarPlane + dhNearPlane - depth * (dhFarPlane - dhNearPlane)); } diff --git a/shaders/lib/dither.glsl b/shaders/lib/dither.glsl index ca0e5def..04c15f3a 100644 --- a/shaders/lib/dither.glsl +++ b/shaders/lib/dither.glsl @@ -29,161 +29,83 @@ but there is no such texture currently. */ #if MC_VERSION >= 11300 - uniform float dither_shift; + uniform float dither_shift; #else - uniform int frame_mod; + uniform int frame_mod; #endif float hash12(vec2 v) { - v = 0.0002314814814814815 * v + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - return fract(state * state * 7142.0); + v = 0.0002314814814814815 * v + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + return fract(state * state * 7142.0); } float hash13(vec3 v) { - v = fract(v * .1031); - v += dot(v, v.zyx + 31.32); - return fract((v.x + v.y) * v.z); + v = fract(v * .1031); + v += dot(v, v.zyx + 31.32); + return fract((v.x + v.y) * v.z); } vec2 hash22(vec2 p) { vec3 p3 = fract(vec3(p.xyx) * vec3(.1031, .1030, .0973)); - p3 += dot(p3, p3.yzx+33.33); - return fract((p3.xx+p3.yz)*p3.zy); + p3 += dot(p3, p3.yzx+33.33); + return fract((p3.xx+p3.yz)*p3.zy); } float r_dither(vec2 frag) { - return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998))); + return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998))); } float eclectic_r_dither(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.075; + vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.075; - return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998)) + p4); + return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998)) + p4); } float dither13(vec2 frag) { - return fract(dot(frag, vec2(0.3076923076923077, 0.5384615384615384))); + return fract(dot(frag, vec2(0.3076923076923077, 0.5384615384615384))); } float eclectic_dither13(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.075; + vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.075; - return fract(dot(frag, vec2(0.3076923076923077, 0.5384615384615384)) + p4); + return fract(dot(frag, vec2(0.3076923076923077, 0.5384615384615384)) + p4); } float dither_grad_noise(vec2 frag) { - return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag))); + return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag))); } float eclectic_dither_grad_noise(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.075; + vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.075; - return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)) + p4); + return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)) + p4); } float texture_noise_64(vec2 p, sampler2D noise) { - return texture2D(noise, p * 0.015625).r; + return texture2D(noise, p * 0.015625).r; } float semiblue(vec2 xy) { - vec2 tile = floor(xy * 0.25); - float flip = mod(tile.x + tile.y, 2.0); - xy = mix(xy, xy.yx, flip); - - return fract(dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); -} - -float dither_makeup(vec2 xy) { - vec2 tile = floor(xy * 0.25); - float flip = mod(tile.x + tile.y, 2.0); - xy = mix(xy, xy.yx, flip); - - float r_dither = fract(dot(xy, vec2(0.75487766624669276, 0.569840290998))); - float plastic = 2.0 * abs(fract(dot(tile, vec2(0.8085512046226566, 0.5562305898749054))) - 0.5); - - return fract(r_dither + plastic); -} - -#if MC_VERSION >= 11300 - - float shifted_hash12(vec2 v) - { - v = 0.0002314814814814815 * v + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - return fract(dither_shift + (state * state * 7142.0)); - } - - float shifted_hash13(vec3 v) - { - v = fract(v * .1031); - v += dot(v, v.zyx + 31.32); - return fract(dither_shift + ((v.x + v.y) * v.z)); - } - - float shifted_r_dither(vec2 frag) { - return fract(dither_shift + dot(frag, vec2(0.75487766624669276, 0.569840290998))); - } - - float shifted_eclectic_r_dither(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.075; - - return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998)) + dither_shift + p4); - } - - float shifted_dither13(vec2 frag) - { - return fract(dither_shift + dot(frag, vec2(0.3076923076923077, 0.5384615384615384))); - } - - float shifted_eclectic_dither13(vec2 frag) - { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.075; - - return fract(dot(frag, vec2(0.3076923076923077, 0.5384615384615384)) + dither_shift + p4); - } - - float shifted_dither_grad_noise(vec2 frag) { - return fract(dither_shift + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))); - } - - float shifted_eclectic_dither_grad_noise(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.075; - - return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)) + dither_shift + p4); - } - - float shifted_texture_noise_64(vec2 p, sampler2D noise) { - float dither = texture2D(noise, p * 0.015625).r; - return fract(dither_shift + dither); - } - - float shifted_semiblue(vec2 xy) { vec2 tile = floor(xy * 0.25); float flip = mod(tile.x + tile.y, 2.0); xy = mix(xy, xy.yx, flip); - return fract(dither_shift + dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); - } + return fract(dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); +} - float shifted_dither_makeup(vec2 xy) { +float dither_makeup(vec2 xy) { vec2 tile = floor(xy * 0.25); float flip = mod(tile.x + tile.y, 2.0); xy = mix(xy, xy.yx, flip); @@ -191,76 +113,154 @@ float dither_makeup(vec2 xy) { float r_dither = fract(dot(xy, vec2(0.75487766624669276, 0.569840290998))); float plastic = 2.0 * abs(fract(dot(tile, vec2(0.8085512046226566, 0.5562305898749054))) - 0.5); - return fract(dither_shift + r_dither + plastic); - } - -#else - - float shifted_hash12(vec2 v) - { - v = 0.0002314814814814815 * v + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - return fract((frame_mod * 0.4) + (state * state * 7142.0)); - } - - float shifted_hash13(vec3 v) - { - v = fract(v * .1031); - v += dot(v, v.zyx + 31.32); - return fract((frame_mod * 0.4) + ((v.x + v.y) * v.z)); - } - - float shifted_r_dither(vec2 frag) { - return fract((frame_mod * 0.4) + dot(frag, vec2(0.75487766624669276, 0.569840290998))); - } - - float shifted_eclectic_r_dither(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.075; - - return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998)) + (frame_mod * 0.4) + p4); - } - - float shifted_dither13(vec2 frag) - { - return fract((frame_mod * 0.4) + dot(frag, vec2(0.3076923076923077, 0.5384615384615384))); - } - - float shifted_dither_grad_noise(vec2 frag) { - return fract((frame_mod * 0.4) + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))); - } - - float shifted_eclectic_dither_grad_noise(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.075; - - return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)) + (frame_mod * 0.4) + p4); - } - - float shifted_texture_noise_64(vec2 p, sampler2D noise) { - float dither = texture2D(noise, p * 0.015625).r; - return fract((frame_mod * 0.4) + dither); - } - - float shifted_semiblue(vec2 xy) { - vec2 tile = floor(xy * 0.25); - float flip = mod(tile.x + tile.y, 2.0); - xy = mix(xy, xy.yx, flip); + return fract(r_dither + plastic); +} - return fract((frame_mod * 0.4) + dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); - } +#if MC_VERSION >= 11300 - float shifted_dither_makeup(vec2 xy) { - vec2 tile = floor(xy * 0.25); - float flip = mod(tile.x + tile.y, 2.0); - xy = mix(xy, xy.yx, flip); + float shifted_hash12(vec2 v) + { + v = 0.0002314814814814815 * v + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + return fract(dither_shift + (state * state * 7142.0)); + } + + float shifted_hash13(vec3 v) + { + v = fract(v * .1031); + v += dot(v, v.zyx + 31.32); + return fract(dither_shift + ((v.x + v.y) * v.z)); + } + + float shifted_r_dither(vec2 frag) { + return fract(dither_shift + dot(frag, vec2(0.75487766624669276, 0.569840290998))); + } + + float shifted_eclectic_r_dither(vec2 frag) { + vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.075; + + return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998)) + dither_shift + p4); + } + + float shifted_dither13(vec2 frag) + { + return fract(dither_shift + dot(frag, vec2(0.3076923076923077, 0.5384615384615384))); + } + + float shifted_eclectic_dither13(vec2 frag) + { + vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.075; + + return fract(dot(frag, vec2(0.3076923076923077, 0.5384615384615384)) + dither_shift + p4); + } + + float shifted_dither_grad_noise(vec2 frag) { + return fract(dither_shift + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))); + } + + float shifted_eclectic_dither_grad_noise(vec2 frag) { + vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.075; + + return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)) + dither_shift + p4); + } + + float shifted_texture_noise_64(vec2 p, sampler2D noise) { + float dither = texture2D(noise, p * 0.015625).r; + return fract(dither_shift + dither); + } + + float shifted_semiblue(vec2 xy) { + vec2 tile = floor(xy * 0.25); + float flip = mod(tile.x + tile.y, 2.0); + xy = mix(xy, xy.yx, flip); + + return fract(dither_shift + dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); + } + + float shifted_dither_makeup(vec2 xy) { + vec2 tile = floor(xy * 0.25); + float flip = mod(tile.x + tile.y, 2.0); + xy = mix(xy, xy.yx, flip); + + float r_dither = fract(dot(xy, vec2(0.75487766624669276, 0.569840290998))); + float plastic = 2.0 * abs(fract(dot(tile, vec2(0.8085512046226566, 0.5562305898749054))) - 0.5); + + return fract(dither_shift + r_dither + plastic); + } - float r_dither = fract(dot(xy, vec2(0.75487766624669276, 0.569840290998))); - float plastic = 2.0 * abs(fract(dot(tile, vec2(0.8085512046226566, 0.5562305898749054))) - 0.5); +#else - return fract((frame_mod * 0.4) + r_dither + plastic); - } + float shifted_hash12(vec2 v) + { + v = 0.0002314814814814815 * v + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + return fract((frame_mod * 0.4) + (state * state * 7142.0)); + } + + float shifted_hash13(vec3 v) + { + v = fract(v * .1031); + v += dot(v, v.zyx + 31.32); + return fract((frame_mod * 0.4) + ((v.x + v.y) * v.z)); + } + + float shifted_r_dither(vec2 frag) { + return fract((frame_mod * 0.4) + dot(frag, vec2(0.75487766624669276, 0.569840290998))); + } + + float shifted_eclectic_r_dither(vec2 frag) { + vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.075; + + return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998)) + (frame_mod * 0.4) + p4); + } + + float shifted_dither13(vec2 frag) + { + return fract((frame_mod * 0.4) + dot(frag, vec2(0.3076923076923077, 0.5384615384615384))); + } + + float shifted_dither_grad_noise(vec2 frag) { + return fract((frame_mod * 0.4) + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))); + } + + float shifted_eclectic_dither_grad_noise(vec2 frag) { + vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.075; + + return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)) + (frame_mod * 0.4) + p4); + } + + float shifted_texture_noise_64(vec2 p, sampler2D noise) { + float dither = texture2D(noise, p * 0.015625).r; + return fract((frame_mod * 0.4) + dither); + } + + float shifted_semiblue(vec2 xy) { + vec2 tile = floor(xy * 0.25); + float flip = mod(tile.x + tile.y, 2.0); + xy = mix(xy, xy.yx, flip); + + return fract((frame_mod * 0.4) + dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); + } + + float shifted_dither_makeup(vec2 xy) { + vec2 tile = floor(xy * 0.25); + float flip = mod(tile.x + tile.y, 2.0); + xy = mix(xy, xy.yx, flip); + + float r_dither = fract(dot(xy, vec2(0.75487766624669276, 0.569840290998))); + float plastic = 2.0 * abs(fract(dot(tile, vec2(0.8085512046226566, 0.5562305898749054))) - 0.5); + + return fract((frame_mod * 0.4) + r_dither + plastic); + } #endif diff --git a/shaders/lib/fast_taa.glsl b/shaders/lib/fast_taa.glsl index d6a3dd53..310a6e6f 100644 --- a/shaders/lib/fast_taa.glsl +++ b/shaders/lib/fast_taa.glsl @@ -5,94 +5,90 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { - // Verificamos si proyección queda fuera de la pantalla actual - if (clamp(texcoord_past, 0.0, 1.0) != texcoord_past) { - return current_color; - } else { - // Previous color - vec3 previous = texture2D(colortex3, texcoord_past).rgb; - - // Apply clamping on the history color. - vec3 near_color0 = texture2D(colortex1, texcoord + vec2(-pixel_size_x, 0.0)).rgb; - vec3 near_color1 = texture2D(colortex1, texcoord + vec2(pixel_size_x, 0.0)).rgb; - vec3 near_color2 = texture2D(colortex1, texcoord + vec2(0.0, -pixel_size_y)).rgb; - vec3 near_color3 = texture2D(colortex1, texcoord + vec2(0.0, pixel_size_y)).rgb; - - vec3 nmin = min(current_color, min(near_color0, min(near_color1, min(near_color2, near_color3)))); - vec3 nmax = max(current_color, max(near_color0, max(near_color1, max(near_color2, near_color3)))); - - // Edge detection - vec3 edge_color = -near_color0; - edge_color -= near_color1; - edge_color += current_color * 4.0; - edge_color -= near_color2; - edge_color -= near_color3; - - float edge = clamp(length(edge_color) * 0.5773502691896258, 0.0, 1.0); // 1/sqrt(3) - - // nmax = current_color + (edge * 0.7 + 0.3) * (nmax - current_color); - // nmin = current_color + (edge * 0.7 + 0.3) * (nmin - current_color); - - // Clip - // previous = clamp(previous, nmin, nmax); - - vec3 center = (nmin + nmax) * 0.5; - float radio = length(nmax - center); - - vec3 color_vector = previous - center; - float color_dist = length(color_vector); - - float factor = 1.0; - if (color_dist > radio) { - factor = radio / color_dist; + // Verificamos si proyección queda fuera de la pantalla actual + if (clamp(texcoord_past, 0.0, 1.0) != texcoord_past) { + return current_color; + } else { + // Previous color + vec3 previous = texture2D(colortex3, texcoord_past).rgb; + + // Apply clamping on the history color. + vec3 near_color0 = texture2D(colortex1, texcoord + vec2(-pixel_size_x, 0.0)).rgb; + vec3 near_color1 = texture2D(colortex1, texcoord + vec2(pixel_size_x, 0.0)).rgb; + vec3 near_color2 = texture2D(colortex1, texcoord + vec2(0.0, -pixel_size_y)).rgb; + vec3 near_color3 = texture2D(colortex1, texcoord + vec2(0.0, pixel_size_y)).rgb; + + vec3 nmin = min(current_color, min(near_color0, min(near_color1, min(near_color2, near_color3)))); + vec3 nmax = max(current_color, max(near_color0, max(near_color1, max(near_color2, near_color3)))); + + // Edge detection + vec3 edge_color = -near_color0; + edge_color -= near_color1; + edge_color += current_color * 4.0; + edge_color -= near_color2; + edge_color -= near_color3; + + float edge = clamp(length(edge_color) * 0.5773502691896258, 0.0, 1.0); // 1/sqrt(3) + + // nmax = current_color + (edge * 0.7 + 0.3) * (nmax - current_color); + // nmin = current_color + (edge * 0.7 + 0.3) * (nmin - current_color); + + // Clip + // previous = clamp(previous, nmin, nmax); + + vec3 center = (nmin + nmax) * 0.5; + float radio = length(nmax - center); + + vec3 color_vector = previous - center; + float color_dist = length(color_vector); + + float factor = 1.0; + if (color_dist > radio) { + factor = radio / color_dist; + } + previous = center + (color_vector * factor); + + return mix(current_color, previous, 0.8 + (edge * 0.19)); } - - previous = center + (color_vector * factor); - - - return mix(current_color, previous, 0.8 + (edge * 0.19)); - } } vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { - // Verificamos si proyección queda fuera de la pantalla actual - if (clamp(texcoord_past, 0.0, 1.0) != texcoord_past) { - return current_color; - } else { - // Muestra del pasado - vec4 previous = texture2D(colortex3, texcoord_past); - - vec4 near_color0 = texture2D(colortex1, texcoord + vec2(-pixel_size_x, 0.0)); - vec4 near_color1 = texture2D(colortex1, texcoord + vec2(pixel_size_x, 0.0)); - vec4 near_color2 = texture2D(colortex1, texcoord + vec2(0.0, -pixel_size_y)); - vec4 near_color3 = texture2D(colortex1, texcoord + vec2(0.0, pixel_size_y)); - - vec4 nmin = min(current_color, min(near_color0, min(near_color1, min(near_color2, near_color3)))); - vec4 nmax = max(current_color, max(near_color0, max(near_color1, max(near_color2, near_color3)))); - - // Clip - vec3 center = (nmin.rgb + nmax.rgb) * 0.5; - float radio = length(nmax.rgb - center); - - vec3 color_vector = previous.rgb - center; - float color_dist = length(color_vector); - - float factor = 1.0; - if (color_dist > radio) { - factor = radio / color_dist; + // Verificamos si proyección queda fuera de la pantalla actual + if (clamp(texcoord_past, 0.0, 1.0) != texcoord_past) { + return current_color; + } else { + // Muestra del pasado + vec4 previous = texture2D(colortex3, texcoord_past); + + vec4 near_color0 = texture2D(colortex1, texcoord + vec2(-pixel_size_x, 0.0)); + vec4 near_color1 = texture2D(colortex1, texcoord + vec2(pixel_size_x, 0.0)); + vec4 near_color2 = texture2D(colortex1, texcoord + vec2(0.0, -pixel_size_y)); + vec4 near_color3 = texture2D(colortex1, texcoord + vec2(0.0, pixel_size_y)); + + vec4 nmin = min(current_color, min(near_color0, min(near_color1, min(near_color2, near_color3)))); + vec4 nmax = max(current_color, max(near_color0, max(near_color1, max(near_color2, near_color3)))); + + // Clip + vec3 center = (nmin.rgb + nmax.rgb) * 0.5; + float radio = length(nmax.rgb - center); + + vec3 color_vector = previous.rgb - center; + float color_dist = length(color_vector); + + float factor = 1.0; + if (color_dist > radio) { + factor = radio / color_dist; + } + previous = vec4(center + (color_vector * factor), previous.a); + + // Edge detection + vec3 edge_color = -near_color0.rgb; + edge_color -= near_color1.rgb; + edge_color += current_color.rgb * 4.0; + edge_color -= near_color2.rgb; + edge_color -= near_color3.rgb; + float edge = clamp(length(edge_color) * 0.5773502691896258, 0.0, 1.0); // 1/sqrt(3) + + return mix(current_color, previous, 0.8 + (edge * 0.19)); } - - previous = vec4(center + (color_vector * factor), previous.a); - - // Edge detection - vec3 edge_color = -near_color0.rgb; - edge_color -= near_color1.rgb; - edge_color += current_color.rgb * 4.0; - edge_color -= near_color2.rgb; - edge_color -= near_color3.rgb; - - float edge = clamp(length(edge_color) * 0.5773502691896258, 0.0, 1.0); // 1/sqrt(3) - - return mix(current_color, previous, 0.8 + (edge * 0.19)); - } } diff --git a/shaders/lib/luma.glsl b/shaders/lib/luma.glsl index dcd91772..f436a6e3 100644 --- a/shaders/lib/luma.glsl +++ b/shaders/lib/luma.glsl @@ -5,9 +5,9 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ float luma(vec3 color) { - return dot(color, vec3(0.299, 0.587, 0.114)); + return dot(color, vec3(0.299, 0.587, 0.114)); } float color_average(vec3 color) { - return (color.r + color.g + color.b) * 0.3333333333; + return (color.r + color.g + color.b) * 0.3333333333; } diff --git a/shaders/lib/material_gloss_fragment.glsl b/shaders/lib/material_gloss_fragment.glsl index 79b8a719..87cb4a8b 100644 --- a/shaders/lib/material_gloss_fragment.glsl +++ b/shaders/lib/material_gloss_fragment.glsl @@ -1,32 +1,28 @@ #if defined THE_END - float material_gloss(vec3 reflected_vector, vec2 lmcoord_alt, float gloss_power, vec3 flat_normal) { - vec3 astro_pos = (gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; - float astro_vector = - max(dot(normalize(reflected_vector), normalize(astro_pos)), 0.0) * - step(0.0001, dot(astro_pos, flat_normal)); - - return clamp( - mix(0.0, 1.0, pow(clamp(astro_vector * 2.0 - 1.0, 0.0, 1.0), gloss_power)), - 0.0, - 1.0 - ); - } + float material_gloss(vec3 reflected_vector, vec2 lmcoord_alt, float gloss_power, vec3 flat_normal) { + vec3 astro_pos = (gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; + float astro_vector = + max(dot(normalize(reflected_vector), normalize(astro_pos)), 0.0) * step(0.0001, dot(astro_pos, flat_normal)); + return clamp( + mix(0.0, 1.0, pow(clamp(astro_vector * 2.0 - 1.0, 0.0, 1.0), gloss_power)), + 0.0, + 1.0 + ); + } #else + float material_gloss(vec3 reflected_vector, vec2 lmcoord_alt, float gloss_power, vec3 flat_normal) { + vec3 astro_pos = mix(-sunPosition, sunPosition, light_mix); + float astro_vector = + max(dot(normalize(reflected_vector), normalize(astro_pos)), 0.0) * + step(0.0001, dot(astro_pos, flat_normal)); - float material_gloss(vec3 reflected_vector, vec2 lmcoord_alt, float gloss_power, vec3 flat_normal) { - vec3 astro_pos = mix(-sunPosition, sunPosition, light_mix); - float astro_vector = - max(dot(normalize(reflected_vector), normalize(astro_pos)), 0.0) * - step(0.0001, dot(astro_pos, flat_normal)); - - return clamp( - mix(0.0, 1.0, pow(clamp(astro_vector * 2.0 - 1.0, 0.0, 1.0), gloss_power)) * - clamp(lmcoord_alt.y, 0.0, 1.0) * - (1.0 - rainStrength), - 0.0, - 1.0 - ) * abs(mix(1.0, -1.0, light_mix)); - } - + return clamp( + mix(0.0, 1.0, pow(clamp(astro_vector * 2.0 - 1.0, 0.0, 1.0), gloss_power)) * + clamp(lmcoord_alt.y, 0.0, 1.0) * + (1.0 - rainStrength), + 0.0, + 1.0 + ) * abs(mix(1.0, -1.0, light_mix)); + } #endif \ No newline at end of file diff --git a/shaders/lib/motion_blur.glsl b/shaders/lib/motion_blur.glsl index 7e6bcfb3..9be2070b 100644 --- a/shaders/lib/motion_blur.glsl +++ b/shaders/lib/motion_blur.glsl @@ -5,36 +5,36 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ vec3 motion_blur(vec3 color, float the_depth, vec2 blur_velocity, sampler2D image) { - if (the_depth > 0.7) { // Mano no - vec2 double_pixels = 2.0 * vec2(pixel_size_x, pixel_size_y); - vec3 m_blur = vec3(0.0); + if (the_depth > 0.7) { // No hand + vec2 double_pixels = 2.0 * vec2(pixel_size_x, pixel_size_y); + vec3 m_blur = vec3(0.0); - blur_velocity = - (MOTION_BLUR_STRENGTH * blur_velocity) / ((1.0 + length(blur_velocity)) * (frameTime * 500.0)) ; + blur_velocity = + (MOTION_BLUR_STRENGTH * blur_velocity) / ((1.0 + length(blur_velocity)) * (frameTime * 500.0)) ; - #if AA_TYPE > 0 - vec2 coord = - texcoord - blur_velocity * (1.5 + shifted_r_dither(gl_FragCoord.xy)); - #else - vec2 coord = - texcoord - blur_velocity * (1.5 + eclectic_r_dither(gl_FragCoord.xy)); - #endif + #if AA_TYPE > 0 + vec2 coord = + texcoord - blur_velocity * (1.5 + shifted_r_dither(gl_FragCoord.xy)); + #else + vec2 coord = + texcoord - blur_velocity * (1.5 + eclectic_r_dither(gl_FragCoord.xy)); + #endif - float weight = 0.0; - float mask; - vec2 sample_coord; - vec3 b_sample; - for(int i = 0; i < MOTION_BLUR_SAMPLES; i++, coord += blur_velocity) { - sample_coord = clamp(coord, double_pixels, 1.0 - double_pixels); - // b_sample = texture2D(image, sample_coord, -3.0).rgb; - b_sample = texture2DLod(image, sample_coord, 0.0).rgb; - m_blur += b_sample; - weight++; - } - m_blur /= max(weight, 1.0); + float weight = 0.0; + float mask; + vec2 sample_coord; + vec3 b_sample; + for(int i = 0; i < MOTION_BLUR_SAMPLES; i++, coord += blur_velocity) { + sample_coord = clamp(coord, double_pixels, 1.0 - double_pixels); + // b_sample = texture2D(image, sample_coord, -3.0).rgb; + b_sample = texture2DLod(image, sample_coord, 0.0).rgb; + m_blur += b_sample; + weight++; + } + m_blur /= max(weight, 1.0); - return m_blur; - } else { - return color.rgb; - } + return m_blur; + } else { + return color.rgb; + } } diff --git a/shaders/lib/past_projection_utils.glsl b/shaders/lib/past_projection_utils.glsl deleted file mode 100644 index a6ac3ce2..00000000 --- a/shaders/lib/past_projection_utils.glsl +++ /dev/null @@ -1,9 +0,0 @@ -/* MakeUp - past_projection_utils.glsl -Projection functions from past frame. - -Javier Garduño - GNU Lesser General Public License v3.0 -*/ - -vec3 to_clip_space(vec3 view_space_pos) { - return projMAD(gbufferPreviousProjection, view_space_pos) / -view_space_pos.z * 0.5 + 0.5; -} diff --git a/shaders/lib/post.glsl b/shaders/lib/post.glsl index 04160d61..22efcafd 100644 --- a/shaders/lib/post.glsl +++ b/shaders/lib/post.glsl @@ -1,19 +1,19 @@ vec3 sharpen(sampler2D image, vec3 color, vec2 coords) { - vec3 sum = -texture2D(image, coords + vec2(-pixel_size_x, 0.0)).rgb; - sum -= texture2D(image, coords + vec2(0.0, -pixel_size_y)).rgb; - sum += 11.0 * color; - sum -= texture2D(image, coords + vec2(0.0, pixel_size_y)).rgb; - sum -= texture2D(image, coords + vec2(pixel_size_x, 0.0)).rgb; + vec3 sum = -texture2D(image, coords + vec2(-pixel_size_x, 0.0)).rgb; + sum -= texture2D(image, coords + vec2(0.0, -pixel_size_y)).rgb; + sum += 11.0 * color; + sum -= texture2D(image, coords + vec2(0.0, pixel_size_y)).rgb; + sum -= texture2D(image, coords + vec2(pixel_size_x, 0.0)).rgb; - return sum * 0.14285714285714285; + return sum * 0.14285714285714285; } vec3 edge_detect(sampler2D image, vec3 color, vec2 coords) { - vec3 sum = -texture2D(image, coords + vec2(-pixel_size_x, -pixel_size_y)).rgb; - sum -= texture2D(image, coords + vec2(pixel_size_x, -pixel_size_y)).rgb; - sum += 4.0 * color; - sum -= texture2D(image, coords + vec2(-pixel_size_x, pixel_size_y)).rgb; - sum -= texture2D(image, coords + vec2(pixel_size_x, pixel_size_y)).rgb; + vec3 sum = -texture2D(image, coords + vec2(-pixel_size_x, -pixel_size_y)).rgb; + sum -= texture2D(image, coords + vec2(pixel_size_x, -pixel_size_y)).rgb; + sum += 4.0 * color; + sum -= texture2D(image, coords + vec2(-pixel_size_x, pixel_size_y)).rgb; + sum -= texture2D(image, coords + vec2(pixel_size_x, pixel_size_y)).rgb; - return vec3(length(sum)) * 0.5773502691896258; + return vec3(length(sum)) * 0.5773502691896258; } diff --git a/shaders/lib/projection_utils.glsl b/shaders/lib/projection_utils.glsl index 312c20e9..a3c41e38 100644 --- a/shaders/lib/projection_utils.glsl +++ b/shaders/lib/projection_utils.glsl @@ -7,28 +7,9 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define diagonal3(m) vec3((m)[0].x, (m)[1].y, m[2].z) #define projMAD(m, v) (diagonal3(m) * (v) + (m)[3].xyz) -vec3 to_screen_space(vec3 p) { - vec4 i_proj_diag = - vec4( - gbufferProjectionInverse[0].x, - gbufferProjectionInverse[1].y, - gbufferProjectionInverse[2].zw - ); - vec3 p3 = p * 2.0 - 1.0; - vec4 fragposition = i_proj_diag * p3.xyzz + gbufferProjectionInverse[3]; - return fragposition.xyz / fragposition.w; -} - -vec3 camera_to_world(vec3 fragpos) { - vec4 pos = gbufferProjectionInverse * vec4(fragpos, 1.0); - pos /= pos.w; - - return pos.xyz; -} - vec3 camera_to_screen(vec3 fragpos) { - vec4 pos = gbufferProjection * vec4(fragpos, 1.0); - pos /= pos.w; + vec4 pos = gbufferProjection * vec4(fragpos, 1.0); + pos /= pos.w; - return pos.xyz * 0.5 + 0.5; + return pos.xyz * 0.5 + 0.5; } diff --git a/shaders/lib/shadow_frag.glsl b/shaders/lib/shadow_frag.glsl index a55c1966..31d9a892 100644 --- a/shaders/lib/shadow_frag.glsl +++ b/shaders/lib/shadow_frag.glsl @@ -5,110 +5,107 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ float get_shadow(vec3 the_shadow_pos, float dither) { - float shadow_sample = 1.0; + float shadow_sample = 1.0; - #if SHADOW_TYPE == 0 // Pixelated - shadow_sample = shadow2D(shadowtex1, the_shadow_pos).r; - #elif SHADOW_TYPE == 1 // Soft - float current_radius = dither; - dither *= 6.283185307179586; + #if SHADOW_TYPE == 0 // Pixelated + shadow_sample = shadow2D(shadowtex1, the_shadow_pos).r; + #elif SHADOW_TYPE == 1 // Soft + float current_radius = dither; + dither *= 6.283185307179586; - shadow_sample = 0.0; + shadow_sample = 0.0; - vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; + vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; - float z_bias = dither * 0.00002; + float z_bias = dither * 0.00002; - shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; - shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; + shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; + shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; - shadow_sample *= 0.5; - - #endif + shadow_sample *= 0.5; + #endif - return shadow_sample; + return shadow_sample; } #if defined COLORED_SHADOW - vec3 get_colored_shadow(vec3 the_shadow_pos, float dither) { - - #if SHADOW_TYPE == 0 // Pixelated - float shadow_detector = 1.0; - float shadow_black = 1.0; - vec4 shadow_color = vec4(1.0); - - float alpha_complement; - - shadow_detector = shadow2D(shadowtex0, vec3(the_shadow_pos.xy, the_shadow_pos.z)).r; - if (shadow_detector < 1.0) { - shadow_black = shadow2D(shadowtex1, vec3(the_shadow_pos.xy, the_shadow_pos.z)).r; - if (shadow_black != shadow_detector) { - shadow_color = texture2D(shadowcolor0, the_shadow_pos.xy); - alpha_complement = 1.0 - shadow_color.a; - shadow_color.rgb = mix(shadow_color.rgb, vec3(1.0), alpha_complement); - shadow_color.rgb *= alpha_complement; - } - } - - shadow_color *= shadow_black; - shadow_color.rgb = clamp(shadow_color.rgb * (1.0 - shadow_detector) + shadow_detector, vec3(0.0), vec3(1.0)); - - return shadow_color.rgb; - - #elif SHADOW_TYPE == 1 // Soft - float shadow_detector_a = 1.0; - float shadow_black_a = 1.0; - vec4 shadow_color_a = vec4(1.0); - - float shadow_detector_b = 1.0; - float shadow_black_b = 1.0; - vec4 shadow_color_b = vec4(1.0); - - float alpha_complement; - - float current_radius = dither; - dither *= 6.283185307179586; - - vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; - float z_bias = dither * 0.00002; - - shadow_detector_a = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; - shadow_detector_b = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; - - if (shadow_detector_a < 1.0) { - shadow_black_a = shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; - if (shadow_black_a != shadow_detector_a) { - shadow_color_a = texture2D(shadowcolor0, the_shadow_pos.xy + offset); - alpha_complement = 1.0 - shadow_color_a.a; - shadow_color_a.rgb = mix(shadow_color_a.rgb, vec3(1.0), alpha_complement); - shadow_color_a.rgb *= alpha_complement; - } - } - - shadow_color_a *= shadow_black_a; - - if (shadow_detector_b < 1.0) { - shadow_black_b = shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; - if (shadow_black_b != shadow_detector_b) { - shadow_color_b = texture2D(shadowcolor0, the_shadow_pos.xy - offset); - alpha_complement = 1.0 - shadow_color_b.a; - shadow_color_b.rgb = mix(shadow_color_b.rgb, vec3(1.0), alpha_complement); - shadow_color_b.rgb *= alpha_complement; - } - } - - shadow_color_b *= shadow_black_b; - - shadow_detector_a = (shadow_detector_a + shadow_detector_b); - shadow_detector_a *= 0.5; - - shadow_color_a.rgb = (shadow_color_a.rgb + shadow_color_b.rgb) * 0.5; - shadow_color_a.rgb = mix(shadow_color_a.rgb, vec3(1.0), shadow_detector_a); - - return shadow_color_a.rgb; - #endif - - } + vec3 get_colored_shadow(vec3 the_shadow_pos, float dither) { + #if SHADOW_TYPE == 0 // Pixelated + float shadow_detector = 1.0; + float shadow_black = 1.0; + vec4 shadow_color = vec4(1.0); + + float alpha_complement; + + shadow_detector = shadow2D(shadowtex0, vec3(the_shadow_pos.xy, the_shadow_pos.z)).r; + if (shadow_detector < 1.0) { + shadow_black = shadow2D(shadowtex1, vec3(the_shadow_pos.xy, the_shadow_pos.z)).r; + if (shadow_black != shadow_detector) { + shadow_color = texture2D(shadowcolor0, the_shadow_pos.xy); + alpha_complement = 1.0 - shadow_color.a; + shadow_color.rgb = mix(shadow_color.rgb, vec3(1.0), alpha_complement); + shadow_color.rgb *= alpha_complement; + } + } + + shadow_color *= shadow_black; + shadow_color.rgb = clamp(shadow_color.rgb * (1.0 - shadow_detector) + shadow_detector, vec3(0.0), vec3(1.0)); + + return shadow_color.rgb; + + #elif SHADOW_TYPE == 1 // Soft + float shadow_detector_a = 1.0; + float shadow_black_a = 1.0; + vec4 shadow_color_a = vec4(1.0); + + float shadow_detector_b = 1.0; + float shadow_black_b = 1.0; + vec4 shadow_color_b = vec4(1.0); + + float alpha_complement; + + float current_radius = dither; + dither *= 6.283185307179586; + + vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; + float z_bias = dither * 0.00002; + + shadow_detector_a = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; + shadow_detector_b = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; + + if (shadow_detector_a < 1.0) { + shadow_black_a = shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; + if (shadow_black_a != shadow_detector_a) { + shadow_color_a = texture2D(shadowcolor0, the_shadow_pos.xy + offset); + alpha_complement = 1.0 - shadow_color_a.a; + shadow_color_a.rgb = mix(shadow_color_a.rgb, vec3(1.0), alpha_complement); + shadow_color_a.rgb *= alpha_complement; + } + } + + shadow_color_a *= shadow_black_a; + + if (shadow_detector_b < 1.0) { + shadow_black_b = shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; + if (shadow_black_b != shadow_detector_b) { + shadow_color_b = texture2D(shadowcolor0, the_shadow_pos.xy - offset); + alpha_complement = 1.0 - shadow_color_b.a; + shadow_color_b.rgb = mix(shadow_color_b.rgb, vec3(1.0), alpha_complement); + shadow_color_b.rgb *= alpha_complement; + } + } + + shadow_color_b *= shadow_black_b; + + shadow_detector_a = (shadow_detector_a + shadow_detector_b); + shadow_detector_a *= 0.5; + + shadow_color_a.rgb = (shadow_color_a.rgb + shadow_color_b.rgb) * 0.5; + shadow_color_a.rgb = mix(shadow_color_a.rgb, vec3(1.0), shadow_detector_a); + + return shadow_color_a.rgb; + #endif + } #endif diff --git a/shaders/lib/shadow_vertex.glsl b/shaders/lib/shadow_vertex.glsl index ea4b320f..99a74c99 100644 --- a/shaders/lib/shadow_vertex.glsl +++ b/shaders/lib/shadow_vertex.glsl @@ -7,14 +7,14 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define diagonal3(m) vec3((m)[0].x, (m)[1].y, m[2].z) vec3 get_shadow_pos(vec3 shadow_pos) { - shadow_pos = mat3(shadowModelView) * shadow_pos + shadowModelView[3].xyz; - shadow_pos = diagonal3(shadowProjection) * shadow_pos + shadowProjection[3].xyz; + shadow_pos = mat3(shadowModelView) * shadow_pos + shadowModelView[3].xyz; + shadow_pos = diagonal3(shadowProjection) * shadow_pos + shadowProjection[3].xyz; - float distb = length(shadow_pos.xy); - float distortion = distb * SHADOW_DIST + (1.0 - SHADOW_DIST); + float distb = length(shadow_pos.xy); + float distortion = distb * SHADOW_DIST + (1.0 - SHADOW_DIST); - shadow_pos.xy /= distortion; - shadow_pos.z *= 0.2; - - return shadow_pos * 0.5 + 0.5; + shadow_pos.xy /= distortion; + shadow_pos.z *= 0.2; + + return shadow_pos * 0.5 + 0.5; } diff --git a/shaders/lib/vector_utils.glsl b/shaders/lib/vector_utils.glsl index a86aea25..da78a702 100644 --- a/shaders/lib/vector_utils.glsl +++ b/shaders/lib/vector_utils.glsl @@ -5,13 +5,13 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ vec3 wave_move(vec3 pos) { - float timer = (frameTimeCounter) * 3.141592653589793; - pos = mod(pos, 157.07963267948966); // PI * 25 - vec2 wave_x = vec2(timer * 0.5, timer) + pos.xy; - vec2 wave_z = vec2(timer, timer * 1.5) + pos.xy; - vec2 wave_y = vec2(timer * 0.5, timer * 0.25) - pos.zx; + float timer = (frameTimeCounter) * 3.141592653589793; + pos = mod(pos, 157.07963267948966); // PI * 25 + vec2 wave_x = vec2(timer * 0.5, timer) + pos.xy; + vec2 wave_z = vec2(timer, timer * 1.5) + pos.xy; + vec2 wave_y = vec2(timer * 0.5, timer * 0.25) - pos.zx; - wave_x = sin(wave_x + wave_y); - wave_z = cos(wave_z + wave_y); - return vec3(wave_x.x + wave_x.y, 0.0, wave_z.x + wave_z.y); + wave_x = sin(wave_x + wave_y); + wave_z = cos(wave_z + wave_y); + return vec3(wave_x.x + wave_x.y, 0.0, wave_z.x + wave_z.y); } diff --git a/shaders/lib/volumetric_clouds.glsl b/shaders/lib/volumetric_clouds.glsl index 1bf55afa..8637d968 100644 --- a/shaders/lib/volumetric_clouds.glsl +++ b/shaders/lib/volumetric_clouds.glsl @@ -3,154 +3,152 @@ Fast volumetric clouds - MakeUp implementation */ vec3 get_cloud(vec3 view_vector, vec3 block_color, float bright, float dither, vec3 base_pos, int samples, float umbral, vec3 cloud_color, vec3 dark_cloud_color) { - float plane_distance; - float cloud_value; - float density; - vec3 intersection_pos; - vec3 intersection_pos_sup; - float dif_inf; - float dif_sup; - float dist_aux_coeff; - float current_value; - float surface_inf; - float surface_sup; - bool first_contact = true; - float opacity_dist; - vec3 increment; - float increment_dist; - int real_steps; - float view_y_inv = 1.0 / view_vector.y; - float distance_aux; - float cloud_value_aux; - float dist_aux_coeff_blur; - - #if VOL_LIGHT == 0 - block_color.rgb *= - clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; - #endif - - #if defined DISTANT_HORIZONS && defined DEFERRED_SHADER - float d_dh = texture2D(dhDepthTex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight)).r; - float linear_d_dh = ld_dh(d_dh); - if (linear_d_dh < 0.9999) { - return block_color; - } - #endif - - if (view_vector.y > 0.0) { // Vista sobre el horizonte - - plane_distance = (CLOUD_PLANE - base_pos.y) * view_y_inv; - intersection_pos = (view_vector * plane_distance) + base_pos; - - plane_distance = (CLOUD_PLANE_SUP - base_pos.y) * view_y_inv; - intersection_pos_sup = (view_vector * plane_distance) + base_pos; - - dif_sup = CLOUD_PLANE_SUP - CLOUD_PLANE_CENTER; - dif_inf = CLOUD_PLANE_CENTER - CLOUD_PLANE; - dist_aux_coeff = (CLOUD_PLANE_SUP - CLOUD_PLANE) * 0.075; - dist_aux_coeff_blur = dist_aux_coeff * 0.3; - - opacity_dist = dist_aux_coeff * 2.0 * view_y_inv; - - increment = (intersection_pos_sup - intersection_pos) / samples; - increment_dist = length(increment); - - cloud_value = 0.0; - - intersection_pos += (increment * dither); - - for (int i = 0; i < samples; i++) { - #if CLOUD_VOL_STYLE == 0 - current_value = - texture2D( - gaux2, - (intersection_pos.xz * 0.0002777777777777778) + (frameTimeCounter * CLOUD_HI_FACTOR) - ).r; - - #else - current_value = - texture2D( - colortex2, - (intersection_pos.xz * 0.0002777777777777778) + (frameTimeCounter * CLOUD_HI_FACTOR) - ).g; - #endif - - #if V_CLOUDS == 2 && CLOUD_VOL_STYLE == 0 - current_value += - texture2D( - gaux2, - (intersection_pos.zx * 0.0002777777777777778) + (frameTimeCounter * CLOUD_LOW_FACTOR) - ).r; - - current_value *= 0.5; - current_value = smoothstep(0.05, 0.95, current_value); - - #endif - - // Ajuste por umbral - current_value = (current_value - umbral) / (1.0 - umbral); - - // Superficies inferior y superior de nubes - surface_inf = CLOUD_PLANE_CENTER - (current_value * dif_inf); - surface_sup = CLOUD_PLANE_CENTER + (current_value * dif_sup); - - if ( // Dentro de la nube - intersection_pos.y > surface_inf && - intersection_pos.y < surface_sup - ) { - cloud_value += min(increment_dist, surface_sup - surface_inf); - - if (first_contact) { - first_contact = false; - density = - (surface_sup - intersection_pos.y) / - (CLOUD_PLANE_SUP - CLOUD_PLANE); - } - } - else if (surface_inf < surface_sup && i > 0) { // Fuera de la nube - distance_aux = min( - abs(intersection_pos.y - surface_inf), - abs(intersection_pos.y - surface_sup) - ); - - if (distance_aux < dist_aux_coeff_blur) { - cloud_value += min( - (clamp(dist_aux_coeff_blur - distance_aux, 0.0, dist_aux_coeff_blur) / dist_aux_coeff_blur) * increment_dist, - surface_sup - surface_inf + float plane_distance; + float cloud_value; + float density; + vec3 intersection_pos; + vec3 intersection_pos_sup; + float dif_inf; + float dif_sup; + float dist_aux_coeff; + float current_value; + float surface_inf; + float surface_sup; + bool first_contact = true; + float opacity_dist; + vec3 increment; + float increment_dist; + float view_y_inv = 1.0 / view_vector.y; + float distance_aux; + float dist_aux_coeff_blur; + + #if VOL_LIGHT == 0 + block_color.rgb *= + clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; + #endif + + #if defined DISTANT_HORIZONS && defined DEFERRED_SHADER + float d_dh = texture2D(dhDepthTex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight)).r; + float linear_d_dh = ld_dh(d_dh); + if (linear_d_dh < 0.9999) { + return block_color; + } + #endif + + if (view_vector.y > 0.0) { // Over horizon + plane_distance = (CLOUD_PLANE - base_pos.y) * view_y_inv; + intersection_pos = (view_vector * plane_distance) + base_pos; + + plane_distance = (CLOUD_PLANE_SUP - base_pos.y) * view_y_inv; + intersection_pos_sup = (view_vector * plane_distance) + base_pos; + + dif_sup = CLOUD_PLANE_SUP - CLOUD_PLANE_CENTER; + dif_inf = CLOUD_PLANE_CENTER - CLOUD_PLANE; + dist_aux_coeff = (CLOUD_PLANE_SUP - CLOUD_PLANE) * 0.075; + dist_aux_coeff_blur = dist_aux_coeff * 0.3; + + opacity_dist = dist_aux_coeff * 2.0 * view_y_inv; + + increment = (intersection_pos_sup - intersection_pos) / samples; + increment_dist = length(increment); + + cloud_value = 0.0; + + intersection_pos += (increment * dither); + + for (int i = 0; i < samples; i++) { + #if CLOUD_VOL_STYLE == 0 + current_value = + texture2D( + gaux2, + (intersection_pos.xz * 0.0002777777777777778) + (frameTimeCounter * CLOUD_HI_FACTOR) + ).r; + + #else + current_value = + texture2D( + colortex2, + (intersection_pos.xz * 0.0002777777777777778) + (frameTimeCounter * CLOUD_HI_FACTOR) + ).g; + #endif + + #if V_CLOUDS == 2 && CLOUD_VOL_STYLE == 0 + current_value += + texture2D( + gaux2, + (intersection_pos.zx * 0.0002777777777777778) + (frameTimeCounter * CLOUD_LOW_FACTOR) + ).r; + + current_value *= 0.5; + current_value = smoothstep(0.05, 0.95, current_value); + + #endif + + // Ajuste por umbral + current_value = (current_value - umbral) / (1.0 - umbral); + + // Superficies inferior y superior de nubes + surface_inf = CLOUD_PLANE_CENTER - (current_value * dif_inf); + surface_sup = CLOUD_PLANE_CENTER + (current_value * dif_sup); + + if ( // Dentro de la nube + intersection_pos.y > surface_inf && + intersection_pos.y < surface_sup + ) { + cloud_value += min(increment_dist, surface_sup - surface_inf); + + if (first_contact) { + first_contact = false; + density = + (surface_sup - intersection_pos.y) / + (CLOUD_PLANE_SUP - CLOUD_PLANE); + } + } + else if (surface_inf < surface_sup && i > 0) { // Fuera de la nube + distance_aux = min( + abs(intersection_pos.y - surface_inf), + abs(intersection_pos.y - surface_sup) ); - if (first_contact) { - first_contact = false; - density = - (surface_sup - intersection_pos.y) / - (CLOUD_PLANE_SUP - CLOUD_PLANE); - } + if (distance_aux < dist_aux_coeff_blur) { + cloud_value += min( + (clamp(dist_aux_coeff_blur - distance_aux, 0.0, dist_aux_coeff_blur) / dist_aux_coeff_blur) * increment_dist, + surface_sup - surface_inf + ); + + if (first_contact) { + first_contact = false; + density = + (surface_sup - intersection_pos.y) / + (CLOUD_PLANE_SUP - CLOUD_PLANE); + } + } } - } - intersection_pos += increment; - } + intersection_pos += increment; + } - cloud_value = clamp(cloud_value / opacity_dist, 0.0, 1.0); - density = clamp(density, 0.0001, 1.0); + cloud_value = clamp(cloud_value / opacity_dist, 0.0, 1.0); + density = clamp(density, 0.0001, 1.0); - float att_factor = mix(1.0, 0.75, bright * (1.0 - rainStrength)); + float att_factor = mix(1.0, 0.75, bright * (1.0 - rainStrength)); - #if CLOUD_VOL_STYLE == 1 - cloud_color = mix(cloud_color * att_factor, dark_cloud_color * att_factor, pow(density, 0.3) * 0.85); - #else - cloud_color = mix(cloud_color * att_factor, dark_cloud_color * att_factor, pow(density, 0.4)); - #endif + #if CLOUD_VOL_STYLE == 1 + cloud_color = mix(cloud_color * att_factor, dark_cloud_color * att_factor, pow(density, 0.3) * 0.85); + #else + cloud_color = mix(cloud_color * att_factor, dark_cloud_color * att_factor, pow(density, 0.4)); + #endif - // Halo brillante de contra al sol - cloud_color = mix(cloud_color, cloud_color * 13.0, (1.0 - pow(cloud_value, 0.2)) * bright * bright * (1.0 - rainStrength)); + // Halo brillante de contra al sol + cloud_color = + mix(cloud_color, cloud_color * 13.0, (1.0 - pow(cloud_value, 0.2)) * bright * bright * (1.0 - rainStrength)); - block_color = mix( - block_color, - cloud_color, - cloud_value * clamp((view_vector.y - 0.06) * 5.0, 0.0, 1.0) - ); - } + block_color = mix( + block_color, + cloud_color, + cloud_value * clamp((view_vector.y - 0.06) * 5.0, 0.0, 1.0) + ); + } - return block_color; + return block_color; } diff --git a/shaders/lib/volumetric_clouds_end.glsl b/shaders/lib/volumetric_clouds_end.glsl index ddbe578e..50874da2 100644 --- a/shaders/lib/volumetric_clouds_end.glsl +++ b/shaders/lib/volumetric_clouds_end.glsl @@ -3,152 +3,148 @@ Fast volumetric clouds (for The End) - MakeUp implementation */ vec3 get_end_cloud(vec3 view_vector, vec3 block_color, float bright, float dither, vec3 base_pos, int samples) { - float plane_distance; - float cloud_value; - float umbral; - float density; - vec3 intersection_pos; - vec3 intersection_pos_sup; - float dif_inf; - float dif_sup; - float dist_aux_coeff; - float current_value; - float surface_inf; - float surface_sup; - bool first_contact = true; - float opacity_dist; - vec3 increment; - float increment_dist; - int real_steps; - float view_y_inv = 1.0 / view_vector.y; - float distance_aux; - vec3 cloud_color_aux; - float cloud_value_aux; - float dist_aux_coeff_blur; - - block_color.rgb *= - clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; - - #if defined DISTANT_HORIZONS && defined DEFERRED_SHADER - float d_dh = texture2D(dhDepthTex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight)).r; - float linear_d_dh = ld_dh(d_dh); - if (linear_d_dh < 0.9999) { - return block_color; - } - #endif - - if (view_vector.y > 0.0) { // Vista sobre el horizonte - umbral = 0.25; - - vec3 cloud_color = block_color * 1.75; - vec3 dark_cloud_color = block_color * 0.9; - - plane_distance = (CLOUD_PLANE - base_pos.y) * view_y_inv; - intersection_pos = (view_vector * plane_distance) + base_pos; - - plane_distance = (CLOUD_PLANE_SUP - base_pos.y) * view_y_inv; - intersection_pos_sup = (view_vector * plane_distance) + base_pos; - - dif_sup = CLOUD_PLANE_SUP - CLOUD_PLANE_CENTER; - dif_inf = CLOUD_PLANE_CENTER - CLOUD_PLANE; - dist_aux_coeff = (CLOUD_PLANE_SUP - CLOUD_PLANE) * 0.075; - dist_aux_coeff_blur = dist_aux_coeff * 0.4; - - opacity_dist = dist_aux_coeff * 2.5 * view_y_inv; - - increment = (intersection_pos_sup - intersection_pos) / samples; - increment_dist = length(increment); - - cloud_value = 0.0; - - intersection_pos += (increment * dither); - - for (int i = 0; i < samples; i++) { - #if CLOUD_VOL_STYLE == 0 - current_value = - texture2D( - gaux2, - (intersection_pos.xz * .0008) + (frameTimeCounter * CLOUD_HI_FACTOR * 3.0) - ).r; - #else - current_value = - texture2D( - colortex2, - (intersection_pos.xz * .0008) + (frameTimeCounter * CLOUD_HI_FACTOR * 3.0) - ).r; - #endif - - #if V_CLOUDS == 2 && CLOUD_VOL_STYLE == 0 - current_value += - texture2D( - gaux2, - (intersection_pos.zx * .0008) + (frameTimeCounter * CLOUD_LOW_FACTOR * 3.0) - ).r; - current_value *= 0.5; - current_value = smoothstep(0.05, 0.95, current_value); - #endif - - // Ajuste por umbral - current_value = (current_value - umbral) / (1.0 - umbral); - - // Superficies inferior y superior de nubes - surface_inf = CLOUD_PLANE_CENTER - (current_value * dif_inf); - surface_sup = CLOUD_PLANE_CENTER + (current_value * dif_sup); - - if ( // Dentro de la nube - intersection_pos.y > surface_inf && - intersection_pos.y < surface_sup - ) { - cloud_value += min(increment_dist, surface_sup - surface_inf); - - if (first_contact) { - first_contact = false; - density = - (surface_sup - intersection_pos.y) / - (CLOUD_PLANE_SUP - CLOUD_PLANE); - } - } - else if (surface_inf < surface_sup && i > 0) { // Fuera de la nube - distance_aux = min( - abs(intersection_pos.y - surface_inf), - abs(intersection_pos.y - surface_sup) - ); - - if (distance_aux < dist_aux_coeff_blur) { - cloud_value += min( - (clamp(dist_aux_coeff_blur - distance_aux, 0.0, dist_aux_coeff_blur) / dist_aux_coeff_blur) * increment_dist, - surface_sup - surface_inf - ); - - if (first_contact) { - first_contact = false; - density = - (surface_sup - intersection_pos.y) / - (CLOUD_PLANE_SUP - CLOUD_PLANE); - } + float plane_distance; + float cloud_value; + float umbral; + float density; + vec3 intersection_pos; + vec3 intersection_pos_sup; + float dif_inf; + float dif_sup; + float dist_aux_coeff; + float current_value; + float surface_inf; + float surface_sup; + bool first_contact = true; + float opacity_dist; + vec3 increment; + float increment_dist; + float view_y_inv = 1.0 / view_vector.y; + float distance_aux; + float dist_aux_coeff_blur; + + block_color.rgb *= + clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; + + #if defined DISTANT_HORIZONS && defined DEFERRED_SHADER + float d_dh = texture2D(dhDepthTex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight)).r; + float linear_d_dh = ld_dh(d_dh); + if (linear_d_dh < 0.9999) { + return block_color; + } + #endif + + if (view_vector.y > 0.0) { // Vista sobre el horizonte + umbral = 0.25; + + vec3 cloud_color = block_color * 1.75; + vec3 dark_cloud_color = block_color * 0.9; + + plane_distance = (CLOUD_PLANE - base_pos.y) * view_y_inv; + intersection_pos = (view_vector * plane_distance) + base_pos; + + plane_distance = (CLOUD_PLANE_SUP - base_pos.y) * view_y_inv; + intersection_pos_sup = (view_vector * plane_distance) + base_pos; + + dif_sup = CLOUD_PLANE_SUP - CLOUD_PLANE_CENTER; + dif_inf = CLOUD_PLANE_CENTER - CLOUD_PLANE; + dist_aux_coeff = (CLOUD_PLANE_SUP - CLOUD_PLANE) * 0.075; + dist_aux_coeff_blur = dist_aux_coeff * 0.4; + + opacity_dist = dist_aux_coeff * 2.5 * view_y_inv; + + increment = (intersection_pos_sup - intersection_pos) / samples; + increment_dist = length(increment); + + cloud_value = 0.0; + + intersection_pos += (increment * dither); + + for (int i = 0; i < samples; i++) { + #if CLOUD_VOL_STYLE == 0 + current_value = + texture2D( + gaux2, + (intersection_pos.xz * .0008) + (frameTimeCounter * CLOUD_HI_FACTOR * 3.0) + ).r; + #else + current_value = + texture2D( + colortex2, + (intersection_pos.xz * .0008) + (frameTimeCounter * CLOUD_HI_FACTOR * 3.0) + ).r; + #endif + + #if V_CLOUDS == 2 && CLOUD_VOL_STYLE == 0 + current_value += + texture2D( + gaux2, + (intersection_pos.zx * .0008) + (frameTimeCounter * CLOUD_LOW_FACTOR * 3.0) + ).r; + current_value *= 0.5; + current_value = smoothstep(0.05, 0.95, current_value); + #endif + + // Ajuste por umbral + current_value = (current_value - umbral) / (1.0 - umbral); + + // Superficies inferior y superior de nubes + surface_inf = CLOUD_PLANE_CENTER - (current_value * dif_inf); + surface_sup = CLOUD_PLANE_CENTER + (current_value * dif_sup); + + if ( // Dentro de la nube + intersection_pos.y > surface_inf && + intersection_pos.y < surface_sup + ) { + cloud_value += min(increment_dist, surface_sup - surface_inf); + + if (first_contact) { + first_contact = false; + density = + (surface_sup - intersection_pos.y) / (CLOUD_PLANE_SUP - CLOUD_PLANE); + } + } + else if (surface_inf < surface_sup && i > 0) { // Fuera de la nube + distance_aux = min( + abs(intersection_pos.y - surface_inf), + abs(intersection_pos.y - surface_sup) + ); + + if (distance_aux < dist_aux_coeff_blur) { + cloud_value += min( + (clamp(dist_aux_coeff_blur - distance_aux, 0.0, dist_aux_coeff_blur) / dist_aux_coeff_blur) * increment_dist, + surface_sup - surface_inf + ); + + if (first_contact) { + first_contact = false; + density = + (surface_sup - intersection_pos.y) / + (CLOUD_PLANE_SUP - CLOUD_PLANE); + } + } + } + + intersection_pos += increment; } - } - - intersection_pos += increment; - } - cloud_value = clamp(cloud_value / opacity_dist, 0.0, 1.0); - density = clamp(density, 0.0001, 1.0); + cloud_value = clamp(cloud_value / opacity_dist, 0.0, 1.0); + density = clamp(density, 0.0001, 1.0); - cloud_color = mix(cloud_color, dark_cloud_color, sqrt(density)); + cloud_color = mix(cloud_color, dark_cloud_color, sqrt(density)); - // Halo brillante de contra al sol - cloud_color = mix(cloud_color, cloud_color * 2.0, (1.0 - cloud_value) * bright); + // Halo brillante de contra al sol + cloud_color = mix(cloud_color, cloud_color * 2.0, (1.0 - cloud_value) * bright); - block_color = mix( - block_color, - cloud_color, - cloud_value * clamp((view_vector.y - 0.06) * 5.0, 0.0, 1.0) - ); - - block_color = - mix(block_color, vec3(1.0), clamp(bright * .04, 0.0, 1.0)); - } + block_color = mix( + block_color, + cloud_color, + cloud_value * clamp((view_vector.y - 0.06) * 5.0, 0.0, 1.0) + ); + + block_color = + mix(block_color, vec3(1.0), clamp(bright * .04, 0.0, 1.0)); + } - return block_color; + return block_color; } \ No newline at end of file diff --git a/shaders/lib/volumetric_clouds_vertex.glsl b/shaders/lib/volumetric_clouds_vertex.glsl index cc0edb19..45e6e12d 100644 --- a/shaders/lib/volumetric_clouds_vertex.glsl +++ b/shaders/lib/volumetric_clouds_vertex.glsl @@ -1,39 +1,39 @@ #if MC_VERSION >= 11300 - umbral = (smoothstep(1.0, 0.0, rainStrength) * .3) + .25; + umbral = (smoothstep(1.0, 0.0, rainStrength) * .3) + .25; #else - umbral = (smoothstep(1.0, 0.0, rainStrength) * .3) + .55; + umbral = (smoothstep(1.0, 0.0, rainStrength) * .3) + .55; #endif dark_cloud_color = day_blend( - ZENITH_SUNSET_COLOR, - ZENITH_DAY_COLOR, - ZENITH_NIGHT_COLOR + ZENITH_SUNSET_COLOR, + ZENITH_DAY_COLOR, + ZENITH_NIGHT_COLOR ); dark_cloud_color = mix( - dark_cloud_color, - ZENITH_SKY_RAIN_COLOR * color_average(dark_cloud_color), - rainStrength + dark_cloud_color, + ZENITH_SKY_RAIN_COLOR * color_average(dark_cloud_color), + rainStrength ); vec3 cloud_color_aux = mix( -day_blend( - LIGHT_SUNSET_COLOR, - LIGHT_DAY_COLOR, - LIGHT_NIGHT_COLOR * vec3(0.5, 0.6, 0.75) -), -ZENITH_SKY_RAIN_COLOR * color_average(dark_cloud_color), -rainStrength + day_blend( + LIGHT_SUNSET_COLOR, + LIGHT_DAY_COLOR, + LIGHT_NIGHT_COLOR * vec3(0.5, 0.6, 0.75) + ), + ZENITH_SKY_RAIN_COLOR * color_average(dark_cloud_color), + rainStrength ); cloud_color = mix( - clamp(mix(vec3(luma(cloud_color_aux)), cloud_color_aux, 0.5) * vec3(1.5), 0.0, 1.4), - day_blend( - HORIZON_SUNSET_COLOR, - HORIZON_DAY_COLOR, - HORIZON_NIGHT_COLOR - ), - 0.3 + clamp(mix(vec3(luma(cloud_color_aux)), cloud_color_aux, 0.5) * vec3(1.5), 0.0, 1.4), + day_blend( + HORIZON_SUNSET_COLOR, + HORIZON_DAY_COLOR, + HORIZON_NIGHT_COLOR + ), + 0.3 ); cloud_color = mix(cloud_color, HORIZON_SKY_RAIN_COLOR * luma(cloud_color_aux) * 5.0, rainStrength); @@ -41,11 +41,11 @@ cloud_color = mix(cloud_color, HORIZON_SKY_RAIN_COLOR * luma(cloud_color_aux) * dark_cloud_color = mix(dark_cloud_color, cloud_color, 0.22); dark_cloud_color = mix( -dark_cloud_color, -day_blend( - cloud_color_aux, - dark_cloud_color, - dark_cloud_color -), -0.4 + dark_cloud_color, + day_blend( + cloud_color_aux, + dark_cloud_color, + dark_cloud_color + ), + 0.4 ); \ No newline at end of file diff --git a/shaders/lib/volumetric_light.glsl b/shaders/lib/volumetric_light.glsl index 5feda6fc..6c94d75b 100644 --- a/shaders/lib/volumetric_light.glsl +++ b/shaders/lib/volumetric_light.glsl @@ -4,129 +4,127 @@ Volumetric light - MakeUp implementation #if VOL_LIGHT == 2 - #define diagonal3(m) vec3((m)[0].x, (m)[1].y, m[2].z) - - vec3 get_volumetric_pos(vec3 shadow_pos) { - shadow_pos = mat3(shadowModelView) * shadow_pos + shadowModelView[3].xyz; - shadow_pos = diagonal3(shadowProjection) * shadow_pos + shadowProjection[3].xyz; - float distb = length(shadow_pos.xy); - float distortion = distb * SHADOW_DIST + (1.0 - SHADOW_DIST); - - shadow_pos.xy /= distortion; - shadow_pos.z *= 0.2; - - return shadow_pos * 0.5 + 0.5; - } + #define diagonal3(m) vec3((m)[0].x, (m)[1].y, m[2].z) - float get_volumetric_light(float dither, float view_distance, mat4 modeli_times_projectioni) { - float light = 0.0; + vec3 get_volumetric_pos(vec3 shadow_pos) { + shadow_pos = mat3(shadowModelView) * shadow_pos + shadowModelView[3].xyz; + shadow_pos = diagonal3(shadowProjection) * shadow_pos + shadowProjection[3].xyz; + float distb = length(shadow_pos.xy); + float distortion = distb * SHADOW_DIST + (1.0 - SHADOW_DIST); - float current_depth; - vec3 view_pos; - vec4 pos; - vec3 shadow_pos; + shadow_pos.xy /= distortion; + shadow_pos.z *= 0.2; + + return shadow_pos * 0.5 + 0.5; + } - for (int i = 0; i < GODRAY_STEPS; i++) { - // Exponentialy spaced shadow samples - current_depth = exp2(i + dither) - 0.6; - if (current_depth > view_distance) { - break; - } + float get_volumetric_light(float dither, float view_distance, mat4 modeli_times_projectioni) { + float light = 0.0; - // Distance to depth - current_depth = (far * (current_depth - near)) / (current_depth * (far - near)); + float current_depth; + vec3 view_pos; + vec4 pos; + vec3 shadow_pos; - view_pos = vec3(texcoord, current_depth); + for (int i = 0; i < GODRAY_STEPS; i++) { + // Exponentialy spaced shadow samples + current_depth = exp2(i + dither) - 0.6; + if (current_depth > view_distance) { + break; + } - // Clip to world - pos = modeli_times_projectioni * (vec4(view_pos, 1.0) * 2.0 - 1.0); - view_pos = (pos.xyz /= pos.w).xyz; + // Distance to depth + current_depth = (far * (current_depth - near)) / (current_depth * (far - near)); - shadow_pos = get_volumetric_pos(view_pos); + view_pos = vec3(texcoord, current_depth); - light += shadow2D(shadowtex1, shadow_pos).r; + // Clip to world + pos = modeli_times_projectioni * (vec4(view_pos, 1.0) * 2.0 - 1.0); + view_pos = (pos.xyz /= pos.w).xyz; + shadow_pos = get_volumetric_pos(view_pos); + light += shadow2D(shadowtex1, shadow_pos).r; + } + + light /= GODRAY_STEPS; + + return light * light; } - light /= GODRAY_STEPS; + #if defined COLORED_SHADOW - return light * light; - } + vec3 get_volumetric_color_light(float dither, float view_distance, mat4 modeli_times_projectioni) { + float light = 0.0; - #if defined COLORED_SHADOW + float current_depth; + vec3 view_pos; + vec4 pos; + vec3 shadow_pos; - vec3 get_volumetric_color_light(float dither, float view_distance, mat4 modeli_times_projectioni) { - float light = 0.0; + float shadow_detector = 1.0; + float shadow_black = 1.0; + vec4 shadow_color = vec4(1.0); + vec3 light_color = vec3(0.0); - float current_depth; - vec3 view_pos; - vec4 pos; - vec3 shadow_pos; + float alpha_complement; - float shadow_detector = 1.0; - float shadow_black = 1.0; - vec4 shadow_color = vec4(1.0); - vec3 light_color = vec3(0.0); + for (int i = 0; i < GODRAY_STEPS; i++) { + // Exponentialy spaced shadow samples + current_depth = exp2(i + dither) - 0.96; // 0.96 avoids points behind near plane + if (current_depth > view_distance) { + break; + } - float alpha_complement; + // Distance to depth + current_depth = (far * (current_depth - near)) / (current_depth * (far - near)); - for (int i = 0; i < GODRAY_STEPS; i++) { - // Exponentialy spaced shadow samples - current_depth = exp2(i + dither) - 0.96; // 0.96 avoids points behind near plane - if (current_depth > view_distance) { - break; - } + view_pos = vec3(texcoord, current_depth); - // Distance to depth - current_depth = (far * (current_depth - near)) / (current_depth * (far - near)); + // Clip to world + pos = modeli_times_projectioni * (vec4(view_pos, 1.0) * 2.0 - 1.0); + view_pos = (pos.xyz /= pos.w).xyz; - view_pos = vec3(texcoord, current_depth); + shadow_pos = get_volumetric_pos(view_pos); - // Clip to world - pos = modeli_times_projectioni * (vec4(view_pos, 1.0) * 2.0 - 1.0); - view_pos = (pos.xyz /= pos.w).xyz; + shadow_detector = shadow2D(shadowtex0, vec3(shadow_pos.xy, shadow_pos.z - 0.001)).r; + if (shadow_detector < 1.0) { + shadow_black = shadow2D(shadowtex1, vec3(shadow_pos.xy, shadow_pos.z - 0.001)).r; + if (shadow_black != shadow_detector) { + shadow_color = texture2D(shadowcolor0, shadow_pos.xy); + alpha_complement = 1.0 - shadow_color.a; + shadow_color.rgb *= alpha_complement; + shadow_color.rgb = mix(shadow_color.rgb, vec3(1.0), alpha_complement); + } + } + + shadow_color *= shadow_black; + light_color += clamp(shadow_color.rgb * (1.0 - shadow_detector) + shadow_detector, vec3(0.0), vec3(1.0)); + } - shadow_pos = get_volumetric_pos(view_pos); + light_color /= GODRAY_STEPS; - shadow_detector = shadow2D(shadowtex0, vec3(shadow_pos.xy, shadow_pos.z - 0.001)).r; - if (shadow_detector < 1.0) { - shadow_black = shadow2D(shadowtex1, vec3(shadow_pos.xy, shadow_pos.z - 0.001)).r; - if (shadow_black != shadow_detector) { - shadow_color = texture2D(shadowcolor0, shadow_pos.xy); - alpha_complement = 1.0 - shadow_color.a; - shadow_color.rgb *= alpha_complement; - shadow_color.rgb = mix(shadow_color.rgb, vec3(1.0), alpha_complement); - } + return light_color; } - shadow_color *= shadow_black; - light_color += clamp(shadow_color.rgb * (1.0 - shadow_detector) + shadow_detector, vec3(0.0), vec3(1.0)); - } - - light_color /= GODRAY_STEPS; - - return light_color; - } - - #endif + #endif #elif VOL_LIGHT == 1 - float ss_godrays(float dither) { - float light = 0.0; - float comp = 1.0 - (near / (far * far)); + float ss_godrays(float dither) { + float light = 0.0; + float comp = 1.0 - (near / (far * far)); - vec2 ray_step = vec2(lightpos - texcoord) * 0.2; - vec2 dither2d = texcoord + (ray_step * dither); + vec2 ray_step = vec2(lightpos - texcoord) * 0.2; + vec2 dither2d = texcoord + (ray_step * dither); - float depth; + float depth; - for (int i = 0; i < CHEAP_GODRAY_SAMPLES; i++) { - depth = texture2D(depthtex1, dither2d).x; - dither2d += ray_step; - light += step(comp, depth); - } + for (int i = 0; i < CHEAP_GODRAY_SAMPLES; i++) { + depth = texture2D(depthtex1, dither2d).x; + dither2d += ray_step; + light += step(comp, depth); + } - return light / CHEAP_GODRAY_SAMPLES; + return light / CHEAP_GODRAY_SAMPLES; } #endif diff --git a/shaders/lib/water.glsl b/shaders/lib/water.glsl index fcb80019..7e9d49d8 100644 --- a/shaders/lib/water.glsl +++ b/shaders/lib/water.glsl @@ -3,323 +3,321 @@ Water reflection and refraction related functions. */ vec3 fast_raymarch(vec3 direction, vec3 hit_coord, inout float infinite, float dither) { - vec3 dir_increment; - vec3 current_march = hit_coord; - vec3 old_current_march; - float screen_depth; - float depth_diff = 1.0; - vec3 march_pos = camera_to_screen(hit_coord); - float prev_screen_depth = march_pos.z; - bool search_flag = false; - bool hidden_flag = false; - bool first_hidden = true; - bool out_flag = false; - bool to_far = false; - vec3 last_march_pos; - - int no_hidden_steps = 0; - bool hiddens = false; - - // Ray marching - for (int i = 0; i < RAYMARCH_STEPS; i++) { - if (search_flag) { - dir_increment *= 0.5; - current_march += dir_increment * sign(depth_diff); - } else { - old_current_march = current_march; - current_march = hit_coord + ((direction * exp2(i + dither)) - direction); - dir_increment = current_march - old_current_march; - } - - last_march_pos = march_pos; - march_pos = camera_to_screen(current_march); - - if ( // Is outside screen space - march_pos.x < 0.0 || - march_pos.x > 1.0 || - march_pos.y < 0.0 || - march_pos.y > 1.0 || - march_pos.z < 0.0 - ) { - out_flag = true; - } - - if (march_pos.z > 0.9999) { - to_far = true; - } - - screen_depth = texture2D(depthtex1, march_pos.xy).x; - depth_diff = screen_depth - march_pos.z; - - if (depth_diff < 0.0 && abs(screen_depth - prev_screen_depth) > abs(march_pos.z - last_march_pos.z)) { - hidden_flag = true; - hiddens = true; - if (first_hidden) { - first_hidden = false; - } - } else if (depth_diff > 0.0) { - hidden_flag = false; - if (!hiddens) { - no_hidden_steps++; - } + vec3 dir_increment; + vec3 current_march = hit_coord; + vec3 old_current_march; + float screen_depth; + float depth_diff = 1.0; + vec3 march_pos = camera_to_screen(hit_coord); + float prev_screen_depth = march_pos.z; + bool search_flag = false; + bool hidden_flag = false; + bool first_hidden = true; + bool out_flag = false; + bool to_far = false; + vec3 last_march_pos; + + int no_hidden_steps = 0; + bool hiddens = false; + + // Ray marching + for (int i = 0; i < RAYMARCH_STEPS; i++) { + if (search_flag) { + dir_increment *= 0.5; + current_march += dir_increment * sign(depth_diff); + } else { + old_current_march = current_march; + current_march = hit_coord + ((direction * exp2(i + dither)) - direction); + dir_increment = current_march - old_current_march; + } + + last_march_pos = march_pos; + march_pos = camera_to_screen(current_march); + + if ( // Is outside screen space + march_pos.x < 0.0 || + march_pos.x > 1.0 || + march_pos.y < 0.0 || + march_pos.y > 1.0 || + march_pos.z < 0.0 + ) { + out_flag = true; + } + + if (march_pos.z > 0.9999) { + to_far = true; + } + + screen_depth = texture2D(depthtex1, march_pos.xy).x; + depth_diff = screen_depth - march_pos.z; + + if (depth_diff < 0.0 && abs(screen_depth - prev_screen_depth) > abs(march_pos.z - last_march_pos.z)) { + hidden_flag = true; + hiddens = true; + if (first_hidden) { + first_hidden = false; + } + } else if (depth_diff > 0.0) { + hidden_flag = false; + if (!hiddens) { + no_hidden_steps++; + } + } + + if (search_flag == false && depth_diff < 0.0 && hidden_flag == false) { + search_flag = true; + } + + prev_screen_depth = screen_depth; } - if (search_flag == false && depth_diff < 0.0 && hidden_flag == false) { - search_flag = true; - } - - prev_screen_depth = screen_depth; - } - - infinite = float(screen_depth > 0.9999); - - if (out_flag) { - infinite = 1.0; - return march_pos; - } else if (to_far) { - if (screen_depth > 0.9999) { - infinite = 1.0; - return march_pos; - } else if (no_hidden_steps < 3) { - return march_pos; + infinite = float(screen_depth > 0.9999); + + if (out_flag) { + infinite = 1.0; + return march_pos; + } else if (to_far) { + if (screen_depth > 0.9999) { + infinite = 1.0; + return march_pos; + } else if (no_hidden_steps < 3) { + return march_pos; + } else { + infinite = 1.0; + return vec3(1.0); + } } else { - infinite = 1.0; - return vec3(1.0); + return march_pos; } - } else { - return march_pos; - } } #if SUN_REFLECTION == 1 - #if !defined NETHER && !defined THE_END - float sun_reflection(vec3 fragpos) { - vec3 astro_pos = worldTime > 12900 ? moonPosition : sunPosition; - float astro_vector = - max(dot(normalize(fragpos), normalize(astro_pos)), 0.0); - - return smoothstep(0.995, 1.0, astro_vector) * - clamp(lmcoord.y, 0.0, 1.0) * - (1.0 - rainStrength) * 3.0; - } - - #endif + #if !defined NETHER && !defined THE_END + float sun_reflection(vec3 fragpos) { + vec3 astro_pos = worldTime > 12900 ? moonPosition : sunPosition; + float astro_vector = + max(dot(normalize(fragpos), normalize(astro_pos)), 0.0); + + return smoothstep(0.995, 1.0, astro_vector) * + clamp(lmcoord.y, 0.0, 1.0) * + (1.0 - rainStrength) * 3.0; + } + #endif #endif vec3 normal_waves(vec3 pos) { - float speed = frameTimeCounter * .025; - vec2 wave_1 = - texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.05) + vec2(speed, speed)).rg; - wave_1 = wave_1 - .5; - vec2 wave_2 = - texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.03125) - speed).rg; - wave_2 = wave_2 - .5; - vec2 wave_3 = - texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.125) + vec2(speed, -speed)).rg; - wave_3 = wave_3 - .5; - wave_3 *= 0.66; - - vec2 partial_wave = wave_1 + wave_2 + wave_3; - - vec3 final_wave = vec3(partial_wave, WATER_TURBULENCE - (rainStrength * 0.6 * WATER_TURBULENCE * visible_sky)); - - return normalize(final_wave); + float speed = frameTimeCounter * .025; + vec2 wave_1 = + texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.05) + vec2(speed, speed)).rg; + wave_1 = wave_1 - .5; + vec2 wave_2 = + texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.03125) - speed).rg; + wave_2 = wave_2 - .5; + vec2 wave_3 = + texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.125) + vec2(speed, -speed)).rg; + wave_3 = wave_3 - .5; + wave_3 *= 0.66; + + vec2 partial_wave = wave_1 + wave_2 + wave_3; + vec3 final_wave = vec3(partial_wave, WATER_TURBULENCE - (rainStrength * 0.6 * WATER_TURBULENCE * visible_sky)); + + return normalize(final_wave); } vec3 refraction(vec3 fragpos, vec3 color, vec3 refraction) { - vec2 pos = gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y); - - #if REFRACTION == 1 - // 0.06 is the pseudorefraction strength - pos = pos + refraction.xy * (0.075 / (1.0 + length(fragpos) * 0.4)); - #endif - - float water_absortion; - if (isEyeInWater == 0) { - float water_distance = - 2.0 * near * far / (far + near - (2.0 * gl_FragCoord.z - 1.0) * (far - near)); - - float earth_distance = texture2D(depthtex1, pos.xy).r; - earth_distance = - 2.0 * near * far / (far + near - (2.0 * earth_distance - 1.0) * (far - near)); - - #if defined DISTANT_HORIZONS - float earth_distance_dh = texture2D(dhDepthTex1, pos.xy).r; - earth_distance_dh = - 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * earth_distance_dh - 1.0) * (dhFarPlane - dhNearPlane)); - earth_distance = min(earth_distance, earth_distance_dh); + vec2 pos = gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y); + + #if REFRACTION == 1 + pos = pos + refraction.xy * (0.075 / (1.0 + length(fragpos) * 0.4)); #endif - water_absortion = earth_distance - water_distance; - water_absortion *= water_absortion; - water_absortion = (1.0 / -((water_absortion * WATER_ABSORPTION) + 1.125)) + 1.0; - } else { - water_absortion = 0.0; - } + float water_absortion; + if (isEyeInWater == 0) { + float water_distance = + 2.0 * near * far / (far + near - (2.0 * gl_FragCoord.z - 1.0) * (far - near)); + + float earth_distance = texture2D(depthtex1, pos.xy).r; + earth_distance = + 2.0 * near * far / (far + near - (2.0 * earth_distance - 1.0) * (far - near)); + + #if defined DISTANT_HORIZONS + float earth_distance_dh = texture2D(dhDepthTex1, pos.xy).r; + earth_distance_dh = + 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * earth_distance_dh - 1.0) * (dhFarPlane - dhNearPlane)); + earth_distance = min(earth_distance, earth_distance_dh); + #endif + + water_absortion = earth_distance - water_distance; + water_absortion *= water_absortion; + water_absortion = (1.0 / -((water_absortion * WATER_ABSORPTION) + 1.125)) + 1.0; + } else { + water_absortion = 0.0; + } - return mix(texture2D(gaux1, pos.xy).rgb, color, water_absortion); + return mix(texture2D(gaux1, pos.xy).rgb, color, water_absortion); } vec3 get_normals(vec3 bump, vec3 fragpos) { - float NdotE = abs(dot(water_normal, normalize(fragpos))); + float NdotE = abs(dot(water_normal, normalize(fragpos))); - bump *= vec3(NdotE) + vec3(0.0, 0.0, 1.0 - NdotE); + bump *= vec3(NdotE) + vec3(0.0, 0.0, 1.0 - NdotE); - mat3 tbn_matrix = mat3( - tangent.x, binormal.x, water_normal.x, - tangent.y, binormal.y, water_normal.y, - tangent.z, binormal.z, water_normal.z + mat3 tbn_matrix = mat3( + tangent.x, binormal.x, water_normal.x, + tangent.y, binormal.y, water_normal.y, + tangent.z, binormal.z, water_normal.z ); - return normalize(bump * tbn_matrix); + return normalize(bump * tbn_matrix); } vec4 reflection_calc(vec3 fragpos, vec3 normal, vec3 reflected, inout float infinite, float dither) { - #if SSR_TYPE == 0 // Flipped image - #if defined DISTANT_HORIZONS - vec3 pos = camera_to_screen(fragpos + reflected * 768.0); - #else - vec3 pos = camera_to_screen(fragpos + reflected * 76.0); + #if SSR_TYPE == 0 // Flipped image + #if defined DISTANT_HORIZONS + vec3 pos = camera_to_screen(fragpos + reflected * 768.0); + #else + vec3 pos = camera_to_screen(fragpos + reflected * 76.0); + #endif + #else // Raymarch + vec3 pos = fast_raymarch(reflected, fragpos, infinite, dither); #endif - #else // Raymarch - vec3 pos = fast_raymarch(reflected, fragpos, infinite, dither); - #endif - float border = - clamp((1.0 - (max(0.0, abs(pos.y - 0.5)) * 2.0)) * 50.0, 0.0, 1.0); + float border = + clamp((1.0 - (max(0.0, abs(pos.y - 0.5)) * 2.0)) * 50.0, 0.0, 1.0); - border = clamp(border - pow(pos.y, 10.0), 0.0, 1.0); + border = clamp(border - pow(pos.y, 10.0), 0.0, 1.0); - pos.x = abs(pos.x); - if (pos.x > 1.0) { - pos.x = 1.0 - (pos.x - 1.0); - } + pos.x = abs(pos.x); + if (pos.x > 1.0) { + pos.x = 1.0 - (pos.x - 1.0); + } - return vec4(texture2D(gaux1, pos.xy).rgb, border); + return vec4(texture2D(gaux1, pos.xy).rgb, border); } vec3 water_shader( - vec3 fragpos, - vec3 normal, - vec3 color, - vec3 sky_reflect, - vec3 reflected, - float fresnel, - float visible_sky, - float dither, - vec3 light_color) { - vec4 reflection = vec4(0.0); - float infinite = 1.0; - - #if REFLECTION == 1 - reflection = reflection_calc(fragpos, normal, reflected, infinite, dither); - #endif - - reflection.rgb = mix( - sky_reflect * visible_sky, - reflection.rgb, - reflection.a - ); - - #ifdef VANILLA_WATER - fresnel *= 0.8; - #endif - - #if SUN_REFLECTION == 1 - #ifndef NETHER - #ifndef THE_END - return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + - vec3(sun_reflection(reflect(normalize(fragpos), normal))) * light_color * infinite * visible_sky; - #else - return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); - #endif + vec3 fragpos, + vec3 normal, + vec3 color, + vec3 sky_reflect, + vec3 reflected, + float fresnel, + float visible_sky, + float dither, + vec3 light_color +) { + vec4 reflection = vec4(0.0); + float infinite = 1.0; + + #if REFLECTION == 1 + reflection = + reflection_calc(fragpos, normal, reflected, infinite, dither); + #endif + + reflection.rgb = mix( + sky_reflect * visible_sky, + reflection.rgb, + reflection.a + ); + + #ifdef VANILLA_WATER + fresnel *= 0.8; + #endif + + #if SUN_REFLECTION == 1 + #ifndef NETHER + #ifndef THE_END + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + + vec3(sun_reflection(reflect(normalize(fragpos), normal))) * light_color * infinite * visible_sky; + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif #else - return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); #endif - #else - return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); - #endif } // GLASS vec4 cristal_reflection_calc(vec3 fragpos, vec3 normal, inout float infinite, float dither) { - #if SSR_TYPE == 0 - #if defined DISTANT_HORIZONS - vec3 reflected_vector = reflect(normalize(fragpos), normal) * 768.0; + #if SSR_TYPE == 0 + #if defined DISTANT_HORIZONS + vec3 reflected_vector = reflect(normalize(fragpos), normal) * 768.0; + #else + vec3 reflected_vector = reflect(normalize(fragpos), normal) * 76.0; + #endif + vec3 pos = camera_to_screen(fragpos + reflected_vector); #else - vec3 reflected_vector = reflect(normalize(fragpos), normal) * 76.0; - #endif - vec3 pos = camera_to_screen(fragpos + reflected_vector); - #else - vec3 reflected_vector = reflect(normalize(fragpos), normal); - vec3 pos = fast_raymarch(reflected_vector, fragpos, infinite, dither); - - if (pos.x > 99.0) { // Fallback - #if defined DISTANT_HORIZONS - pos = camera_to_screen(fragpos + reflected_vector * 768.0); - #else - pos = camera_to_screen(fragpos + reflected_vector * 76.0); + vec3 reflected_vector = reflect(normalize(fragpos), normal); + vec3 pos = fast_raymarch(reflected_vector, fragpos, infinite, dither); + + if (pos.x > 99.0) { // Fallback + #if defined DISTANT_HORIZONS + pos = camera_to_screen(fragpos + reflected_vector * 768.0); + #else + pos = camera_to_screen(fragpos + reflected_vector * 76.0); + #endif + } #endif - } - #endif - float border_x = max(-fourth_pow(abs(2.0 * pos.x - 1.0)) + 1.0, 0.0); - float border_y = max(-fourth_pow(abs(2.0 * pos.y - 1.0)) + 1.0, 0.0); - float border = min(border_x, border_y); + float border_x = max(-fourth_pow(abs(2.0 * pos.x - 1.0)) + 1.0, 0.0); + float border_y = max(-fourth_pow(abs(2.0 * pos.y - 1.0)) + 1.0, 0.0); + float border = min(border_x, border_y); - return vec4(texture2D(gaux1, pos.xy, 0.0).rgb, border); + return vec4(texture2D(gaux1, pos.xy, 0.0).rgb, border); } vec4 cristal_shader( - vec3 fragpos, - vec3 normal, - vec4 color, - vec3 sky_reflection, - float fresnel, - float visible_sky, - float dither, - vec3 light_color) -{ - vec4 reflection = vec4(0.0); - float infinite = 0.0; - - #if REFLECTION == 1 - reflection = cristal_reflection_calc(fragpos, normal, infinite, dither); - #endif - - sky_reflection = mix(color.rgb, sky_reflection, visible_sky * visible_sky); - - reflection.rgb = mix( - sky_reflection, - reflection.rgb, - reflection.a - ); - - color.rgb = mix(color.rgb, sky_reflection, fresnel); - color.rgb = mix(color.rgb, reflection.rgb, fresnel); - - color.a = mix(color.a, 1.0, fresnel * .9); - - #if SUN_REFLECTION == 1 - #ifndef NETHER - #ifndef THE_END - return color + - vec4( - mix( - vec3(sun_reflection(reflect(normalize(fragpos), normal)) * light_color * infinite * visible_sky), - vec3(0.0), - reflection.a - ), - 0.0 - ); - #else - return color; - #endif + vec3 fragpos, + vec3 normal, + vec4 color, + vec3 sky_reflection, + float fresnel, + float visible_sky, + float dither, + vec3 light_color +) { + vec4 reflection = vec4(0.0); + float infinite = 0.0; + + #if REFLECTION == 1 + reflection = cristal_reflection_calc(fragpos, normal, infinite, dither); + #endif + + sky_reflection = mix(color.rgb, sky_reflection, visible_sky * visible_sky); + + reflection.rgb = mix( + sky_reflection, + reflection.rgb, + reflection.a + ); + + color.rgb = mix(color.rgb, sky_reflection, fresnel); + color.rgb = mix(color.rgb, reflection.rgb, fresnel); + + color.a = mix(color.a, 1.0, fresnel * .9); + + #if SUN_REFLECTION == 1 + #ifndef NETHER + #ifndef THE_END + return color + vec4( + mix( + vec3(sun_reflection(reflect(normalize(fragpos), normal)) * light_color * infinite * visible_sky), + vec3(0.0), + reflection.a + ), + 0.0 + ); + #else + return color; + #endif + #else + return color; + #endif #else - return color; + return color; #endif - #else - return color; - #endif } diff --git a/shaders/lib/water_dh.glsl b/shaders/lib/water_dh.glsl index f26dbdb4..70081b61 100644 --- a/shaders/lib/water_dh.glsl +++ b/shaders/lib/water_dh.glsl @@ -3,134 +3,133 @@ Water reflection and refraction related functions. */ #if SUN_REFLECTION == 1 - #if !defined NETHER && !defined THE_END - float sun_reflection(vec3 fragpos) { - vec3 astro_pos = worldTime > 12900 ? moonPosition : sunPosition; - float astro_vector = - max(dot(normalize(fragpos), normalize(astro_pos)), 0.0); - - return smoothstep(0.995, 1.0, astro_vector) * - clamp(lmcoord.y, 0.0, 1.0) * - (1.0 - rainStrength) * 3.0; - } + #if !defined NETHER && !defined THE_END + float sun_reflection(vec3 fragpos) { + vec3 astro_pos = worldTime > 12900 ? moonPosition : sunPosition; + float astro_vector = + max(dot(normalize(fragpos), normalize(astro_pos)), 0.0); + + return smoothstep(0.995, 1.0, astro_vector) * + clamp(lmcoord.y, 0.0, 1.0) * + (1.0 - rainStrength) * 3.0; + } - #endif + #endif #endif vec3 normal_waves_dh(vec3 pos) { - vec2 wave_2 = - texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.03125) - (frameTimeCounter * .025)).rg; - wave_2 = wave_2 - .5; + vec2 wave_2 = + texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.03125) - (frameTimeCounter * .025)).rg; + wave_2 = wave_2 - .5; + vec2 partial_wave = wave_2; + vec3 final_wave = vec3(partial_wave, WATER_TURBULENCE); - vec2 partial_wave = wave_2; - - vec3 final_wave = vec3(partial_wave, WATER_TURBULENCE); - - return normalize(final_wave); + return normalize(final_wave); } vec3 refraction(vec3 fragpos, vec3 color, vec3 refraction) { - vec2 pos = gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y); - - #if REFRACTION == 1 - // 0.06 is the pseudorefraction strength - pos = pos + refraction.xy * (0.075 / (1.0 + length(fragpos) * 0.4)); - #endif - - float water_absortion; - if (isEyeInWater == 0) { - float water_distance = - 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * gl_FragCoord.z - 1.0) * (dhFarPlane - dhNearPlane)); - - float earth_distance = texture2D(dhDepthTex1, pos.xy).r; - earth_distance = - 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * earth_distance - 1.0) * (dhFarPlane - dhNearPlane)); - - water_absortion = (earth_distance - water_distance) * 0.5; - water_absortion *= water_absortion; - water_absortion = (1.0 / -((water_absortion * WATER_ABSORPTION) + 1.125)) + 1.0; - } else { - water_absortion = 0.0; - } - - return mix(texture2D(gaux1, pos.xy).rgb, color, water_absortion); + vec2 pos = gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y); + + #if REFRACTION == 1 + pos = pos + refraction.xy * (0.075 / (1.0 + length(fragpos) * 0.4)); + #endif + + float water_absortion; + if (isEyeInWater == 0) { + float water_distance = + 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * gl_FragCoord.z - 1.0) * (dhFarPlane - dhNearPlane)); + + float earth_distance = texture2D(dhDepthTex1, pos.xy).r; + earth_distance = + 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * earth_distance - 1.0) * (dhFarPlane - dhNearPlane)); + + water_absortion = (earth_distance - water_distance) * 0.5; + water_absortion *= water_absortion; + water_absortion = (1.0 / -((water_absortion * WATER_ABSORPTION) + 1.125)) + 1.0; + } else { + water_absortion = 0.0; + } + + return mix(texture2D(gaux1, pos.xy).rgb, color, water_absortion); } vec3 get_normals(vec3 bump, vec3 fragpos) { - float NdotE = abs(dot(water_normal, normalize(fragpos))); + float NdotE = abs(dot(water_normal, normalize(fragpos))); - bump *= vec3(NdotE) + vec3(0.0, 0.0, 1.0 - NdotE); + bump *= vec3(NdotE) + vec3(0.0, 0.0, 1.0 - NdotE); - mat3 tbn_matrix = mat3( - tangent.x, binormal.x, water_normal.x, - tangent.y, binormal.y, water_normal.y, - tangent.z, binormal.z, water_normal.z + mat3 tbn_matrix = mat3( + tangent.x, binormal.x, water_normal.x, + tangent.y, binormal.y, water_normal.y, + tangent.z, binormal.z, water_normal.z ); - return normalize(bump * tbn_matrix); + return normalize(bump * tbn_matrix); } vec4 reflection_calc_dh(vec3 fragpos, vec3 normal, vec3 reflected, vec3 infinite_color, float dither) { - vec3 pos = camera_to_screen(fragpos + reflected * 768.0); + vec3 pos = camera_to_screen(fragpos + reflected * 768.0); - float border = - clamp((1.0 - (max(0.0, abs(pos.y - 0.5)) * 2.0)) * 50.0, 0.0, 1.0); + float border = + clamp((1.0 - (max(0.0, abs(pos.y - 0.5)) * 2.0)) * 50.0, 0.0, 1.0); - border = clamp(border - pow(pos.y, 10.0), 0.0, 1.0); + border = clamp(border - pow(pos.y, 10.0), 0.0, 1.0); - pos.x = abs(pos.x); - if (pos.x > 1.0) { - pos.x = 1.0 - (pos.x - 1.0); - } + pos.x = abs(pos.x); + if (pos.x > 1.0) { + pos.x = 1.0 - (pos.x - 1.0); + } - vec4 final_reflex; - if (texture2D(depthtex0, pos.xy).r < 0.999) { - final_reflex = vec4(infinite_color, border); - } else { - final_reflex = vec4(texture2D(gaux1, pos.xy).rgb, border); - } - return final_reflex; + vec4 final_reflex; + if (texture2D(depthtex0, pos.xy).r < 0.999) { + final_reflex = vec4(infinite_color, border); + } else { + final_reflex = vec4(texture2D(gaux1, pos.xy).rgb, border); + } + return final_reflex; } vec3 water_shader_dh( - vec3 fragpos, - vec3 normal, - vec3 color, - vec3 sky_reflect, - vec3 reflected, - float fresnel, - float visible_sky, - float dither, - vec3 light_color) { - vec4 reflection = vec4(0.0); - float infinite = 1.0; - - #if REFLECTION == 1 - reflection = reflection_calc_dh(fragpos, normal, reflected, sky_reflect, dither); - #endif - - reflection.rgb = mix( - sky_reflect * visible_sky, - reflection.rgb, - reflection.a - ); - - #ifdef VANILLA_WATER - fresnel *= 0.8; - #endif - - #if SUN_REFLECTION == 1 - #ifndef NETHER - #ifndef THE_END - return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + - vec3(sun_reflection(reflect(normalize(fragpos), normal))) * light_color * infinite * visible_sky; - #else - return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); - #endif + vec3 fragpos, + vec3 normal, + vec3 color, + vec3 sky_reflect, + vec3 reflected, + float fresnel, + float visible_sky, + float dither, + vec3 light_color +) { + vec4 reflection = vec4(0.0); + float infinite = 1.0; + + #if REFLECTION == 1 + reflection = + reflection_calc_dh(fragpos, normal, reflected, sky_reflect, dither); + #endif + + reflection.rgb = mix( + sky_reflect * visible_sky, + reflection.rgb, + reflection.a + ); + + #ifdef VANILLA_WATER + fresnel *= 0.8; + #endif + + #if SUN_REFLECTION == 1 + #ifndef NETHER + #ifndef THE_END + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + + vec3(sun_reflection(reflect(normalize(fragpos), normal))) * light_color * infinite * visible_sky; + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif #else - return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); #endif - #else - return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); - #endif } diff --git a/shaders/prepare.fsh b/shaders/prepare.fsh index e9a23593..c980cf12 100644 --- a/shaders/prepare.fsh +++ b/shaders/prepare.fsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define PREPARE_SHADER diff --git a/shaders/prepare.vsh b/shaders/prepare.vsh index 89d77827..5f6bdf2a 100644 --- a/shaders/prepare.vsh +++ b/shaders/prepare.vsh @@ -8,7 +8,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define PREPARE_SHADER diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 4e8fc9a6..30c429da 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -25,9 +25,9 @@ shadow.culling = true particles.before.deferred = true #if V_CLOUDS > 0 - clouds = off + clouds = off #else - clouds = fancy + clouds = fancy #endif texture.gbuffers.noisetex = textures/water_256_RG_8bit.png diff --git a/shaders/shadow.fsh b/shaders/shadow.fsh index bf49c99d..82481046 100644 --- a/shaders/shadow.fsh +++ b/shaders/shadow.fsh @@ -6,7 +6,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define SHADOW_SHADER diff --git a/shaders/shadow.vsh b/shaders/shadow.vsh index 762cbbf9..454c2ce6 100644 --- a/shaders/shadow.vsh +++ b/shaders/shadow.vsh @@ -6,7 +6,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define SHADOW_SHADER diff --git a/shaders/src/finalcolor.glsl b/shaders/src/finalcolor.glsl index f888a591..7b0eb5ca 100644 --- a/shaders/src/finalcolor.glsl +++ b/shaders/src/finalcolor.glsl @@ -1,10 +1,10 @@ #if defined THE_END if(isEyeInWater == 0 && FOG_ADJUST < 15.0) { // In the air - block_color.rgb = mix(block_color.rgb, ZENITH_DAY_COLOR, frog_adjust); + block_color.rgb = mix(block_color.rgb, ZENITH_DAY_COLOR, frog_adjust); } #elif defined NETHER if(isEyeInWater == 0 && FOG_ADJUST < 15.0) { // In the air - block_color.rgb = mix(block_color.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frog_adjust); + block_color.rgb = mix(block_color.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frog_adjust); } #else #ifdef FOG_ACTIVE // Fog active diff --git a/shaders/src/finalcolor_dh.glsl b/shaders/src/finalcolor_dh.glsl index c3c08117..da35d848 100644 --- a/shaders/src/finalcolor_dh.glsl +++ b/shaders/src/finalcolor_dh.glsl @@ -10,6 +10,6 @@ block_color.rgb = mix(block_color.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frog_adjust); #endif #else -vec3 fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; -block_color.rgb = mix(block_color.rgb, fog_texture, frog_adjust); + vec3 fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; + block_color.rgb = mix(block_color.rgb, fog_texture, frog_adjust); #endif \ No newline at end of file diff --git a/shaders/src/fog_vertex.glsl b/shaders/src/fog_vertex.glsl index fe454a3d..e75f3a66 100644 --- a/shaders/src/fog_vertex.glsl +++ b/shaders/src/fog_vertex.glsl @@ -15,8 +15,8 @@ #ifdef DISTANT_HORIZONS frog_adjust = pow( - clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fog_intensity_coeff, - mix(fog_density_coeff * 0.2, 0.5, rainStrength) + clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fog_intensity_coeff, + mix(fog_density_coeff * 0.2, 0.5, rainStrength) ); #else frog_adjust = pow( diff --git a/shaders/src/sky_color_vertex.glsl b/shaders/src/sky_color_vertex.glsl deleted file mode 100644 index d39126b2..00000000 --- a/shaders/src/sky_color_vertex.glsl +++ /dev/null @@ -1,34 +0,0 @@ -#ifdef UNKNOWN_DIM - hi_sky_color = skyColor; - low_sky_color = fogColor; -#else - hi_sky_color = day_blend( - ZENITH_SUNSET_COLOR, - ZENITH_DAY_COLOR, - ZENITH_NIGHT_COLOR - ); - - hi_sky_color = mix( - hi_sky_color, - ZENITH_SKY_RAIN_COLOR * luma(hi_sky_color), - rainStrength - ); - - low_sky_color = day_blend( - HORIZON_SUNSET_COLOR, - HORIZON_DAY_COLOR, - HORIZON_NIGHT_COLOR - ); - - low_sky_color = mix( - low_sky_color, - HORIZON_SKY_RAIN_COLOR * luma(low_sky_color), - rainStrength - ); - - vec3 hi_sky_color_rgb = hi_sky_color; - #if !defined DH_BLOCK && !defined DH_WATER - hi_sky_color = rgb_to_xyz(hi_sky_color); - low_sky_color = rgb_to_xyz(low_sky_color); - #endif -#endif \ No newline at end of file diff --git a/shaders/src/writebuffers.glsl b/shaders/src/writebuffers.glsl index 143f2e11..8937166e 100644 --- a/shaders/src/writebuffers.glsl +++ b/shaders/src/writebuffers.glsl @@ -1,20 +1,20 @@ #ifdef WATER_F - /* DRAWBUFFERS:1 */ - gl_FragData[0] = block_color; -#elif (defined SPECIAL_TRANS && MC_VERSION >= 11300) || defined GBUFFER_HAND_WATER - /* DRAWBUFFERS:1 */ - gl_FragData[0] = block_color; -#else - #if defined SET_FOG_COLOR - /* DRAWBUFFERS:17 */ - gl_FragData[0] = vec4(block_color, 1.0); - gl_FragData[1] = vec4(block_color, 1.0); - #elif MC_VERSION < 11604 && defined GBUFFER_SKYBASIC - /* DRAWBUFFERS:17 */ + /* DRAWBUFFERS:1 */ gl_FragData[0] = block_color; - gl_FragData[1] = block_color; - #else +#elif (defined SPECIAL_TRANS && MC_VERSION >= 11300) || defined GBUFFER_HAND_WATER /* DRAWBUFFERS:1 */ gl_FragData[0] = block_color; - #endif +#else + #if defined SET_FOG_COLOR + /* DRAWBUFFERS:17 */ + gl_FragData[0] = vec4(block_color, 1.0); + gl_FragData[1] = vec4(block_color, 1.0); + #elif MC_VERSION < 11604 && defined GBUFFER_SKYBASIC + /* DRAWBUFFERS:17 */ + gl_FragData[0] = block_color; + gl_FragData[1] = block_color; + #else + /* DRAWBUFFERS:1 */ + gl_FragData[0] = block_color; + #endif #endif diff --git a/shaders/world0/final.vsh b/shaders/world0/final.vsh index a350d8a6..01602b94 100644 --- a/shaders/world0/final.vsh +++ b/shaders/world0/final.vsh @@ -7,5 +7,4 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define FINAL_SHADER -/* Config, uniforms, ins, outs */ #include "/common/final_vertex.glsl" From 5f93469ad89637220ebcdb4a21db93df6ac5e08a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Tue, 15 Oct 2024 02:22:20 -0600 Subject: [PATCH 018/147] Foliage --- shaders/common/solid_blocks_vertex.glsl | 11 ++++++++--- shaders/src/light_vertex.glsl | 5 ++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index 8fab0b57..c56d8cc8 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -144,9 +144,14 @@ void main() { #if defined FOLIAGE_V && !defined NETHER #ifdef SHADOW_CASTING - if(is_foliage > .2) { - direct_light_strength = mix(direct_light_strength, original_direct_light_strength, clamp((gl_Position.z / SHADOW_LIMIT) * 2.0 - 0.5, 0.0, 1.0)); - } + if(is_foliage > .2) { + direct_light_strength = + mix( + direct_light_strength, + far_direct_light_strength, + clamp((gl_Position.z / SHADOW_LIMIT) * 2.0 - 0.5, 0.0, 1.0) + ); + } #endif #endif diff --git a/shaders/src/light_vertex.glsl b/shaders/src/light_vertex.glsl index 314f1b8b..aa301c53 100644 --- a/shaders/src/light_vertex.glsl +++ b/shaders/src/light_vertex.glsl @@ -81,7 +81,10 @@ float omni_strength = (direct_light_strength * .125) + 1.0; // Direct light strenght -- #ifdef FOLIAGE_V // This shader has foliage - float original_direct_light_strength = clamp(direct_light_strength, 0.0, 1.0) * 0.9 + 0.1; + float far_direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); + if (mc_Entity.x != ENTITY_LEAVES) { + far_direct_light_strength = far_direct_light_strength * 0.75 + 0.25; + } if (is_foliage > .2) { // It's foliage, light is atenuated by angle #ifdef SHADOW_CASTING direct_light_strength = sqrt(abs(direct_light_strength)); From e7b108aaba3300518e011987c74655d50d47e094 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Wed, 16 Oct 2024 20:20:43 -0600 Subject: [PATCH 019/147] Vanilla water partial --- README.md | 5 +- shaders/common/basic_blocks_vertex.glsl | 1 - shaders/common/solid_dh_water_fragment.glsl | 90 ++++++++++++++++----- shaders/common/water_blocks_fragment.glsl | 85 +++++++++---------- shaders/lang/en_US.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- shaders/lib/bloom.glsl | 3 +- shaders/lib/depth_dh.glsl | 2 +- shaders/lib/fast_taa.glsl | 12 ++- shaders/lib/motion_blur.glsl | 1 - shaders/lib/water_dh.glsl | 4 +- shaders/src/fog_vertex.glsl | 2 +- shaders/src/position_vertex_dh.glsl | 2 +- 16 files changed, 134 insertions(+), 83 deletions(-) diff --git a/README.md b/README.md index 6d637308..4330eede 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp - Code High performance Minecraft shader (Java). -## Version: 9.0c +## Version: 9.1 ### This version works in Optifine and Iris 1.5.1 or higher. @@ -29,7 +29,6 @@ High performance Minecraft shader (Java). * You can use the shader without restrictions. * You can fork the shader from: [https://github.com/javiergcim/MakeUpUltraFast](https://github.com/javiergcim/MakeUpUltraFast) * You can modify this shader for any purpose. -* If you modify or use the shader please add a credit, and the official URLs if possible: [https://www.planetminecraft.com/mod/makeup-ultra-fast-shader/](https://www.planetminecraft.com/mod/makeup-ultra-fast-shader/), [https://www.curseforge.com/minecraft/customization/makeup-ultra-fast-shader](https://www.curseforge.com/minecraft/customization/makeup-ultra-fast-shader) and/or [https://github.com/javiergcim/MakeUpUltraFast](https://github.com/javiergcim/MakeUpUltraFast) +* If you modify or use the shader please add a credit, and the official URLs if possible: [https://modrinth.com/shader/makeup-ultra-fast-shaders](https://modrinth.com/shader/makeup-ultra-fast-shaders), [https://www.planetminecraft.com/mod/makeup-ultra-fast-shader/](https://www.planetminecraft.com/mod/makeup-ultra-fast-shader/), [https://www.curseforge.com/minecraft/customization/makeup-ultra-fast-shader](https://www.curseforge.com/minecraft/customization/makeup-ultra-fast-shader) and/or [https://github.com/javiergcim/MakeUpUltraFast](https://github.com/javiergcim/MakeUpUltraFast) Notification is not required, but would be appreciated. - diff --git a/shaders/common/basic_blocks_vertex.glsl b/shaders/common/basic_blocks_vertex.glsl index 389df5e9..3fac7671 100644 --- a/shaders/common/basic_blocks_vertex.glsl +++ b/shaders/common/basic_blocks_vertex.glsl @@ -42,7 +42,6 @@ void main() { tint_color = gl_Color; basic_light = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); - basic_light = mix(basic_light, ZENITH_SKY_RAIN_COLOR * luma(basic_light), rainStrength); vec2 illumination = clamp(abs(lmcoord), 0.0, 1.0); // Fix lines without correct illumination data diff --git a/shaders/common/solid_dh_water_fragment.glsl b/shaders/common/solid_dh_water_fragment.glsl index 92b03412..cc490a6b 100644 --- a/shaders/common/solid_dh_water_fragment.glsl +++ b/shaders/common/solid_dh_water_fragment.glsl @@ -96,6 +96,9 @@ varying float frog_adjust; #include "/lib/luma.glsl" void main() { + vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + vec3 real_light; + #if AA_TYPE > 0 float dither = shifted_r_dither(gl_FragCoord.xy); #else @@ -116,21 +119,6 @@ void main() { return; } - #if defined VANILLA_WATER || WATER_TEXTURE == 1 - vec4 block_color = vec4(0.1); - // Synthetic water texture - vec3 synth_pos = (position.xyz + cameraPosition) * 2.0; - synth_pos = floor(synth_pos + 0.01); - float synth_noise = (hash13(synth_pos) * 0.2) + 0.4; - block_color.rgb += vec3(synth_noise); - #else - vec4 block_color; - #endif - - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - - vec3 real_light; - #ifdef VANILLA_WATER vec3 water_normal_base = vec3(0.0, 0.0, 1.0); #else @@ -160,6 +148,68 @@ void main() { sky_color_reflect = xyz_to_rgb(sky_color_reflect); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #if !defined VANILLA_WATER && WATER_TEXTURE == 1 + vec4 block_color = vec4(0.1); + // Synthetic water texture + vec3 synth_pos = (position.xyz + cameraPosition) * 2.0; + synth_pos = floor(synth_pos + 0.01); + float synth_noise = (hash13(synth_pos) * 0.1) + 0.0; + block_color.rgb += vec3(synth_noise); + #elif defined VANILLA_WATER + // Synthetic water texture + vec3 synth_pos = (position.xyz + cameraPosition) * 8.0; + synth_pos = floor(synth_pos + 0.01); + float noise = hash13(synth_pos); + float synth_noise = (noise * noise * noise * noise * 0.227) + 0.773; + vec4 block_color = vec4(vec3(synth_noise), tint_color.a); + #else + vec4 block_color; + #endif + + + + + + + + + + + + + if(block_type < DH_BLOCK_WATER + 0.5 && block_type > DH_BLOCK_WATER - 0.5) { // Water #ifdef VANILLA_WATER float shadow_c = abs((light_mix * 2.0) - 1.0); @@ -190,15 +240,15 @@ void main() { #if defined NETHER || defined THE_END #if WATER_COLOR_SOURCE == 0 - block_color.rgb = water_texture * real_light * WATER_COLOR; + block_color.rgb = water_texture * real_light * WATER_COLOR; #elif WATER_COLOR_SOURCE == 1 - block_color.rgb = 0.3 * water_texture * real_light * tint_color.rgb; + block_color.rgb = 0.3 * water_texture * real_light * tint_color.rgb; #endif #else #if WATER_COLOR_SOURCE == 0 - block_color.rgb = water_texture * real_light * visible_sky * WATER_COLOR; + block_color.rgb = water_texture * real_light * visible_sky * WATER_COLOR; #elif WATER_COLOR_SOURCE == 1 - block_color.rgb = 0.3 * water_texture * real_light * visible_sky * tint_color.rgb; + block_color.rgb = 0.3 * water_texture * real_light * visible_sky * tint_color.rgb; #endif #endif @@ -208,7 +258,7 @@ void main() { fresnel = clamp(fresnel * (water_texture * water_texture + 0.5), 0.0, 1.0); #endif - block_color.rgb = water_shader_dh(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); + block_color.rgb = water_shader_dh(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); #endif diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index e74e77c7..162dc028 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -126,6 +126,8 @@ varying vec3 low_sky_color; // MAIN FUNCTION ------------------ void main() { + vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + #if SHADOW_TYPE == 1 || defined DISTANT_HORIZONS || (defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER) || SSR_TYPE > 0 #if AA_TYPE > 0 float dither = shifted_r_dither(gl_FragCoord.xy); @@ -136,36 +138,36 @@ void main() { float dither = 1.0; #endif - vec4 block_color = texture2D(tex, texcoord); - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - vec3 real_light; + vec4 block_color = texture2D(tex, texcoord); + vec3 real_light; #ifdef VANILLA_WATER vec3 water_normal_base = vec3(0.0, 0.0, 1.0); #else vec3 water_normal_base = normal_waves(worldposition.xzy); #endif - vec3 surface_normal; - if(block_type > 2.5) { // Water - surface_normal = get_normals(water_normal_base, fragposition); - } else { - surface_normal = get_normals(vec3(0.0, 0.0, 1.0), fragposition); - } + + vec3 surface_normal; + if(block_type > 2.5) { // Water + surface_normal = get_normals(water_normal_base, fragposition); + } else { + surface_normal = get_normals(vec3(0.0, 0.0, 1.0), fragposition); + } - float normal_dot_eye = dot(surface_normal, normalize(fragposition)); - float fresnel = square_pow(1.0 + normal_dot_eye); + float normal_dot_eye = dot(surface_normal, normalize(fragposition)); + float fresnel = square_pow(1.0 + normal_dot_eye); - vec3 reflect_water_vec = reflect(fragposition, surface_normal); - vec3 norm_reflect_water_vec = normalize(reflect_water_vec); + vec3 reflect_water_vec = reflect(fragposition, surface_normal); + vec3 norm_reflect_water_vec = normalize(reflect_water_vec); - vec3 sky_color_reflect; - if(isEyeInWater == 0 || isEyeInWater == 2) { - sky_color_reflect = mix(low_sky_color, hi_sky_color, sqrt(clamp(dot(norm_reflect_water_vec, up_vec), 0.0001, 1.0))); - } else { - sky_color_reflect = hi_sky_color * .5 * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667); - } + vec3 sky_color_reflect; + if(isEyeInWater == 0 || isEyeInWater == 2) { + sky_color_reflect = mix(low_sky_color, hi_sky_color, sqrt(clamp(dot(norm_reflect_water_vec, up_vec), 0.0001, 1.0))); + } else { + sky_color_reflect = hi_sky_color * .5 * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667); + } - sky_color_reflect = xyz_to_rgb(sky_color_reflect); + sky_color_reflect = xyz_to_rgb(sky_color_reflect); #if defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER sky_color_reflect = get_cloud(normalize((gbufferModelViewInverse * vec4(reflect_water_vec * far, 1.0)).xyz), sky_color_reflect, 0.0, dither, worldposition.xyz, int(CLOUD_STEPS_AVG * 0.5), umbral, cloud_color, dark_cloud_color); @@ -197,40 +199,39 @@ void main() { block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); block_color.a = sqrt(block_color.a); - #else - - #if WATER_TEXTURE == 1 - float water_texture = luma(block_color.rgb); - #else - float water_texture = 1.0; - #endif + #if WATER_TEXTURE == 1 + float water_texture = luma(block_color.rgb); + #else + float water_texture = 1.0; + #endif real_light = omni_light + (direct_light_strength * direct_light_color) * (1.0 - rainStrength * 0.75) + candle_color; - #if defined NETHER || defined THE_END - #if WATER_COLOR_SOURCE == 0 - block_color.rgb = water_texture * real_light * WATER_COLOR; - #elif WATER_COLOR_SOURCE == 1 - block_color.rgb = 0.3 * water_texture * real_light * tint_color.rgb; - #endif - #else - #if WATER_COLOR_SOURCE == 0 - block_color.rgb = water_texture * real_light * visible_sky * WATER_COLOR; - #elif WATER_COLOR_SOURCE == 1 - block_color.rgb = 0.3 * water_texture * real_light * visible_sky * tint_color.rgb; + #if defined NETHER || defined THE_END + #if WATER_COLOR_SOURCE == 0 + block_color.rgb = water_texture * real_light * WATER_COLOR; + #elif WATER_COLOR_SOURCE == 1 + block_color.rgb = 0.3 * water_texture * real_light * tint_color.rgb; + #endif + #else + #if WATER_COLOR_SOURCE == 0 + block_color.rgb = water_texture * real_light * visible_sky * WATER_COLOR; + #elif WATER_COLOR_SOURCE == 1 + block_color.rgb = 0.3 * water_texture * real_light * visible_sky * tint_color.rgb; + #endif #endif - #endif block_color = vec4(refraction(fragposition, block_color.rgb, water_normal_base), 1.0); - #if WATER_TEXTURE == 1 - fresnel = clamp(fresnel * (water_texture * water_texture + 0.5), 0.0, 1.0); - #endif + #if WATER_TEXTURE == 1 + fresnel = clamp(fresnel * (water_texture * water_texture + 0.5), 0.0, 1.0); + #endif block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); + #endif } else { // Otros translúcidos diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 0ab5f06f..09653dbf 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -16,7 +16,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.0c +value.ACERCADE.0=v.9.1 #Options ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index f65075ec..b672884c 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -16,7 +16,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.0c +value.ACERCADE.0=v.9.1 #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 3ac9b893..ce9c8cf8 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -16,7 +16,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.0c +value.ACERCADE.0=v.9.1 #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 5010e43e..c1c90baa 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -16,7 +16,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.0c +value.ACERCADE.0=v.9.1 #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 2ae1a248..5806d55e 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -16,7 +16,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.0c +value.ACERCADE.0=v.9.1 #Options ############################# diff --git a/shaders/lib/bloom.glsl b/shaders/lib/bloom.glsl index 77fec404..d77a9aed 100644 --- a/shaders/lib/bloom.glsl +++ b/shaders/lib/bloom.glsl @@ -10,14 +10,13 @@ vec3 mipmap_bloom(sampler2D image, vec2 coords, float dither) { int sample_c = int(BLOOM_SAMPLES); - // float inv_steps = 1.0 / BLOOM_SAMPLES; vec2 blur_radios_factor = blur_radius_vec * (1.0 / BLOOM_SAMPLES); float n; vec2 offset; float dither_x; for(int i = 0; i < sample_c; i++) { - dither_x = (i + dither); + dither_x = i + dither; n = fract(dither_x * 1.6180339887) * 3.141592653589793; offset = vec2(cos(n), sin(n)) * dither_x * blur_radios_factor; diff --git a/shaders/lib/depth_dh.glsl b/shaders/lib/depth_dh.glsl index 6f646103..0caa490b 100644 --- a/shaders/lib/depth_dh.glsl +++ b/shaders/lib/depth_dh.glsl @@ -1,5 +1,5 @@ /* MakeUp - depth_hd.glsl -Depth utilities. +Depth utilities (dh). Javier Garduño - GNU Lesser General Public License v3.0 */ diff --git a/shaders/lib/fast_taa.glsl b/shaders/lib/fast_taa.glsl index 310a6e6f..19c1e13f 100644 --- a/shaders/lib/fast_taa.glsl +++ b/shaders/lib/fast_taa.glsl @@ -18,8 +18,10 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { vec3 near_color2 = texture2D(colortex1, texcoord + vec2(0.0, -pixel_size_y)).rgb; vec3 near_color3 = texture2D(colortex1, texcoord + vec2(0.0, pixel_size_y)).rgb; - vec3 nmin = min(current_color, min(near_color0, min(near_color1, min(near_color2, near_color3)))); - vec3 nmax = max(current_color, max(near_color0, max(near_color1, max(near_color2, near_color3)))); + vec3 nmin = + min(current_color, min(near_color0, min(near_color1, min(near_color2, near_color3)))); + vec3 nmax = + max(current_color, max(near_color0, max(near_color1, max(near_color2, near_color3)))); // Edge detection vec3 edge_color = -near_color0; @@ -65,8 +67,10 @@ vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { vec4 near_color2 = texture2D(colortex1, texcoord + vec2(0.0, -pixel_size_y)); vec4 near_color3 = texture2D(colortex1, texcoord + vec2(0.0, pixel_size_y)); - vec4 nmin = min(current_color, min(near_color0, min(near_color1, min(near_color2, near_color3)))); - vec4 nmax = max(current_color, max(near_color0, max(near_color1, max(near_color2, near_color3)))); + vec4 nmin = + min(current_color, min(near_color0, min(near_color1, min(near_color2, near_color3)))); + vec4 nmax = + max(current_color, max(near_color0, max(near_color1, max(near_color2, near_color3)))); // Clip vec3 center = (nmin.rgb + nmax.rgb) * 0.5; diff --git a/shaders/lib/motion_blur.glsl b/shaders/lib/motion_blur.glsl index 9be2070b..5a480a35 100644 --- a/shaders/lib/motion_blur.glsl +++ b/shaders/lib/motion_blur.glsl @@ -26,7 +26,6 @@ vec3 motion_blur(vec3 color, float the_depth, vec2 blur_velocity, sampler2D imag vec3 b_sample; for(int i = 0; i < MOTION_BLUR_SAMPLES; i++, coord += blur_velocity) { sample_coord = clamp(coord, double_pixels, 1.0 - double_pixels); - // b_sample = texture2D(image, sample_coord, -3.0).rgb; b_sample = texture2DLod(image, sample_coord, 0.0).rgb; m_blur += b_sample; weight++; diff --git a/shaders/lib/water_dh.glsl b/shaders/lib/water_dh.glsl index 70081b61..902b6a53 100644 --- a/shaders/lib/water_dh.glsl +++ b/shaders/lib/water_dh.glsl @@ -1,5 +1,5 @@ -/* MakeUp - water.glsl -Water reflection and refraction related functions. +/* MakeUp - water_dh.glsl +Water reflection and refraction related functions (dh). */ #if SUN_REFLECTION == 1 diff --git a/shaders/src/fog_vertex.glsl b/shaders/src/fog_vertex.glsl index e75f3a66..90677ef9 100644 --- a/shaders/src/fog_vertex.glsl +++ b/shaders/src/fog_vertex.glsl @@ -16,7 +16,7 @@ #ifdef DISTANT_HORIZONS frog_adjust = pow( clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fog_intensity_coeff, - mix(fog_density_coeff * 0.2, 0.5, rainStrength) + mix(fog_density_coeff * 0.15, 0.25, rainStrength) ); #else frog_adjust = pow( diff --git a/shaders/src/position_vertex_dh.glsl b/shaders/src/position_vertex_dh.glsl index e6b6ae24..5ab4a8dc 100644 --- a/shaders/src/position_vertex_dh.glsl +++ b/shaders/src/position_vertex_dh.glsl @@ -22,7 +22,7 @@ gl_FogFragCoord = length(position.xyz); float fog_intensity_coeff = eye_bright_smooth.y * 0.004166666666666667; frog_adjust = pow( clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fog_intensity_coeff, - mix(fog_density_coeff * 0.2, 0.5, rainStrength) + mix(fog_density_coeff * 0.15, 0.25, rainStrength) ); #else frog_adjust = sqrt(clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0)); From 6179fdbe565da14346822eae5fda37adedc33e6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Wed, 16 Oct 2024 23:51:28 -0600 Subject: [PATCH 020/147] RC --- shaders/common/solid_blocks_fragment.glsl | 4 +- shaders/common/solid_dh_water_fragment.glsl | 48 ++------------------- shaders/common/water_blocks_fragment.glsl | 5 ++- shaders/lib/config.glsl | 8 +--- shaders/src/position_vertex.glsl | 8 ++-- shaders/src/position_vertex_dh.glsl | 6 +++ 6 files changed, 21 insertions(+), 58 deletions(-) diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 78b05b17..413f8ae7 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -124,8 +124,8 @@ void main() { // Avoid render in DH transition #ifdef DISTANT_HORIZONS float t = far - dhNearPlane; - float sup = t * TRANSITION_SUP; - float inf = t * TRANSITION_INF; + float sup = t * TRANSITION_DH_SUP; + float inf = t * TRANSITION_DH_INF; float umbral = (gl_FogFragCoord - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); if(umbral > dither) { discard; diff --git a/shaders/common/solid_dh_water_fragment.glsl b/shaders/common/solid_dh_water_fragment.glsl index cc490a6b..c1feb269 100644 --- a/shaders/common/solid_dh_water_fragment.glsl +++ b/shaders/common/solid_dh_water_fragment.glsl @@ -103,11 +103,13 @@ void main() { float dither = shifted_r_dither(gl_FragCoord.xy); #else float dither = r_dither(gl_FragCoord.xy); + // dither = 1.0; #endif // Avoid render in DH transition float t = far - dhNearPlane; float sup = t * TRANSITION_DH_SUP; float inf = t * TRANSITION_DH_INF; + // float view_dist = length(position.xyz); float view_dist = length(position.xyz); float umbral = (view_dist - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); @@ -148,44 +150,12 @@ void main() { sky_color_reflect = xyz_to_rgb(sky_color_reflect); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #if !defined VANILLA_WATER && WATER_TEXTURE == 1 vec4 block_color = vec4(0.1); // Synthetic water texture vec3 synth_pos = (position.xyz + cameraPosition) * 2.0; synth_pos = floor(synth_pos + 0.01); - float synth_noise = (hash13(synth_pos) * 0.1) + 0.0; + float synth_noise = (noise * noise * noise * noise * 0.227) + 0.773; block_color.rgb += vec3(synth_noise); #elif defined VANILLA_WATER // Synthetic water texture @@ -198,18 +168,6 @@ void main() { vec4 block_color; #endif - - - - - - - - - - - - if(block_type < DH_BLOCK_WATER + 0.5 && block_type > DH_BLOCK_WATER - 0.5) { // Water #ifdef VANILLA_WATER float shadow_c = abs((light_mix * 2.0) - 1.0); diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index 162dc028..2941a31c 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -133,6 +133,7 @@ void main() { float dither = shifted_r_dither(gl_FragCoord.xy); #else float dither = r_dither(gl_FragCoord.xy); + // dither = 0.0; #endif #else float dither = 1.0; @@ -264,8 +265,8 @@ void main() { // Avoid render in DH transition #ifdef DISTANT_HORIZONS float t = far - dhNearPlane; - float sup = t * TRANSITION_WATER_SUP; - float inf = t * TRANSITION_WATER_INF; + float sup = t * TRANSITION_DH_SUP; + float inf = t * TRANSITION_DH_INF; float draw_umbral = (gl_FogFragCoord - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); if(draw_umbral > dither) { discard; diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index 9a6b2367..6c0654a5 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -318,10 +318,6 @@ const float centerDepthHalflife = 0.66; // DH exclusive #if defined DISTANT_HORIZONS - #define TRANSITION_SUP 0.00 - #define TRANSITION_INF 0.95 - #define TRANSITION_WATER_SUP 0.00 - #define TRANSITION_WATER_INF 0.65 - #define TRANSITION_DH_SUP 0.35 - #define TRANSITION_DH_INF 0.50 + #define TRANSITION_DH_SUP 0.05 + #define TRANSITION_DH_INF 0.90 #endif \ No newline at end of file diff --git a/shaders/src/position_vertex.glsl b/shaders/src/position_vertex.glsl index 5ea890ea..9a85bac0 100644 --- a/shaders/src/position_vertex.glsl +++ b/shaders/src/position_vertex.glsl @@ -1,8 +1,7 @@ #ifdef FOLIAGE_V // General block shader (it has foliage) #if WAVING == 1 vec4 sub_position = gl_ModelViewMatrix * gl_Vertex; - vec4 position = - gbufferModelViewInverse * sub_position; + vec4 position = gbufferModelViewInverse * sub_position; is_foliage = 0.0; @@ -79,9 +78,12 @@ #ifndef SHADER_BASIC vec4 homopos = gbufferProjectionInverse * vec4(gl_Position.xyz / gl_Position.w, 1.0); vec3 viewPos = homopos.xyz / homopos.w; + #if defined GBUFFER_CLOUDS gl_FogFragCoord = length(viewPos.xz); + // gl_FogFragCoord = length(gl_Position.xy); #else - gl_FogFragCoord = length(viewPos.xyz); + // gl_FogFragCoord = length(viewPos.xyz); + gl_FogFragCoord = length((gbufferModelViewInverse * sub_position).xyz); #endif #endif diff --git a/shaders/src/position_vertex_dh.glsl b/shaders/src/position_vertex_dh.glsl index 5ab4a8dc..8fdf1e2e 100644 --- a/shaders/src/position_vertex_dh.glsl +++ b/shaders/src/position_vertex_dh.glsl @@ -1,4 +1,10 @@ position = gbufferModelViewInverse * gl_ModelViewMatrix * gl_Vertex; + +if(dhMaterialId == DH_BLOCK_WATER) { // Water + position.y -= 0.125; +} + + gl_Position = dhProjection * gbufferModelView * position; #if AA_TYPE > 1 From 97b91de820e047a5a0e2cb9bc4ee423a8dc1444f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 2 Nov 2024 19:56:06 -0600 Subject: [PATCH 021/147] Vanilla water --- shaders/common/solid_blocks_fragment.glsl | 5 +- shaders/common/solid_dh_water_fragment.glsl | 13 +- shaders/lib/shadow_frag.glsl | 10 +- shaders/lib/tone_maps.glsl | 16 ++- shaders/lib/volumetric_clouds.glsl | 128 ++++++++++---------- 5 files changed, 100 insertions(+), 72 deletions(-) diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 413f8ae7..aa612155 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -116,9 +116,10 @@ varying vec3 omni_light; void main() { #if (defined SHADOW_CASTING && !defined NETHER) || defined DISTANT_HORIZONS #if AA_TYPE > 0 - float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); + float dither = shifted_dither13(gl_FragCoord.xy); + // float dither = shifted_eclectic_dither13(gl_FragCoord.xy); #else - float dither = r_dither(gl_FragCoord.xy); + float dither = dither13(gl_FragCoord.xy); #endif #endif // Avoid render in DH transition diff --git a/shaders/common/solid_dh_water_fragment.glsl b/shaders/common/solid_dh_water_fragment.glsl index c1feb269..d5e535f9 100644 --- a/shaders/common/solid_dh_water_fragment.glsl +++ b/shaders/common/solid_dh_water_fragment.glsl @@ -109,7 +109,6 @@ void main() { float t = far - dhNearPlane; float sup = t * TRANSITION_DH_SUP; float inf = t * TRANSITION_DH_INF; - // float view_dist = length(position.xyz); float view_dist = length(position.xyz); float umbral = (view_dist - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); @@ -153,16 +152,22 @@ void main() { #if !defined VANILLA_WATER && WATER_TEXTURE == 1 vec4 block_color = vec4(0.1); // Synthetic water texture - vec3 synth_pos = (position.xyz + cameraPosition) * 2.0; + vec3 synth_pos = (position.xyz + cameraPosition) * 8.0; synth_pos = floor(synth_pos + 0.01); - float synth_noise = (noise * noise * noise * noise * 0.227) + 0.773; + float noise = hash13(synth_pos); + noise *= noise; + noise *= noise; + noise *= noise; + float synth_noise = (noise * 0.3) + 0.5; block_color.rgb += vec3(synth_noise); #elif defined VANILLA_WATER // Synthetic water texture vec3 synth_pos = (position.xyz + cameraPosition) * 8.0; synth_pos = floor(synth_pos + 0.01); float noise = hash13(synth_pos); - float synth_noise = (noise * noise * noise * noise * 0.227) + 0.773; + noise *= noise; + noise *= noise; + float synth_noise = (noise * 0.227) + 0.773; vec4 block_color = vec4(vec3(synth_noise), tint_color.a); #else vec4 block_color; diff --git a/shaders/lib/shadow_frag.glsl b/shaders/lib/shadow_frag.glsl index 31d9a892..9218c148 100644 --- a/shaders/lib/shadow_frag.glsl +++ b/shaders/lib/shadow_frag.glsl @@ -11,18 +11,26 @@ float get_shadow(vec3 the_shadow_pos, float dither) { shadow_sample = shadow2D(shadowtex1, the_shadow_pos).r; #elif SHADOW_TYPE == 1 // Soft float current_radius = dither; + // float current_radius = 0.5; dither *= 6.283185307179586; + float dither_2 = dither + 1.5707963267948966; shadow_sample = 0.0; vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; + vec2 offset_2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; + float z_bias = dither * 0.00002; shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; - shadow_sample *= 0.5; + shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset_2, the_shadow_pos.z - z_bias)).r; + shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset_2, the_shadow_pos.z - z_bias)).r; + + // shadow_sample *= 0.5; + shadow_sample *= 0.25; #endif return shadow_sample; diff --git a/shaders/lib/tone_maps.glsl b/shaders/lib/tone_maps.glsl index 4ab41993..1eceb833 100644 --- a/shaders/lib/tone_maps.glsl +++ b/shaders/lib/tone_maps.glsl @@ -4,13 +4,27 @@ Tonemap functions. Javier Garduño - GNU Lesser General Public License v3.0 */ +// vec3 custom_sigmoid(vec3 color) { +// color = 1.4 * color; +// color = color / pow(pow(color, vec3(3.0)) + 1.0, vec3(0.3333333333333)); + +// return pow(color, vec3(1.15)); +// } + vec3 custom_sigmoid(vec3 color) { color = 1.4 * color; - color = color / pow(pow(color, vec3(3.0)) + 1.0, vec3(0.3333333333333)); + color = color / pow(pow(color, vec3(2.5)) + 1.0, vec3(0.4)); return pow(color, vec3(1.15)); } +// vec3 custom_sigmoid(vec3 color) { +// color = 1.3 * color; +// color = color / pow(pow(color, vec3(3.0)) + 1.0, vec3(0.33333333333333333)); + +// return pow(color, vec3(1.15)); +// } + // vec3 custom_sigmoid(vec3 color) { // // ((1.4 ∙ x) / ((1.4 ∙ x)^2.5 + 1)^0.4)^1.1 // color = 1.4 * color; diff --git a/shaders/lib/volumetric_clouds.glsl b/shaders/lib/volumetric_clouds.glsl index 8637d968..4c9e4442 100644 --- a/shaders/lib/volumetric_clouds.glsl +++ b/shaders/lib/volumetric_clouds.glsl @@ -57,75 +57,75 @@ vec3 get_cloud(vec3 view_vector, vec3 block_color, float bright, float dither, v intersection_pos += (increment * dither); for (int i = 0; i < samples; i++) { - #if CLOUD_VOL_STYLE == 0 - current_value = - texture2D( - gaux2, - (intersection_pos.xz * 0.0002777777777777778) + (frameTimeCounter * CLOUD_HI_FACTOR) - ).r; - - #else - current_value = - texture2D( - colortex2, - (intersection_pos.xz * 0.0002777777777777778) + (frameTimeCounter * CLOUD_HI_FACTOR) - ).g; - #endif - - #if V_CLOUDS == 2 && CLOUD_VOL_STYLE == 0 - current_value += - texture2D( - gaux2, - (intersection_pos.zx * 0.0002777777777777778) + (frameTimeCounter * CLOUD_LOW_FACTOR) - ).r; - - current_value *= 0.5; - current_value = smoothstep(0.05, 0.95, current_value); - - #endif - - // Ajuste por umbral - current_value = (current_value - umbral) / (1.0 - umbral); - - // Superficies inferior y superior de nubes - surface_inf = CLOUD_PLANE_CENTER - (current_value * dif_inf); - surface_sup = CLOUD_PLANE_CENTER + (current_value * dif_sup); - - if ( // Dentro de la nube - intersection_pos.y > surface_inf && - intersection_pos.y < surface_sup - ) { - cloud_value += min(increment_dist, surface_sup - surface_inf); - - if (first_contact) { - first_contact = false; - density = - (surface_sup - intersection_pos.y) / - (CLOUD_PLANE_SUP - CLOUD_PLANE); - } - } - else if (surface_inf < surface_sup && i > 0) { // Fuera de la nube - distance_aux = min( - abs(intersection_pos.y - surface_inf), - abs(intersection_pos.y - surface_sup) - ); - - if (distance_aux < dist_aux_coeff_blur) { - cloud_value += min( - (clamp(dist_aux_coeff_blur - distance_aux, 0.0, dist_aux_coeff_blur) / dist_aux_coeff_blur) * increment_dist, - surface_sup - surface_inf + #if CLOUD_VOL_STYLE == 0 + current_value = + texture2D( + gaux2, + (intersection_pos.xz * 0.0002777777777777778) + (frameTimeCounter * CLOUD_HI_FACTOR) + ).r; + + #else + current_value = + texture2D( + colortex2, + (intersection_pos.xz * 0.0002777777777777778) + (frameTimeCounter * CLOUD_HI_FACTOR) + ).r; + #endif + + #if V_CLOUDS == 2 && CLOUD_VOL_STYLE == 0 + current_value += + texture2D( + gaux2, + (intersection_pos.zx * 0.0002777777777777778) + (frameTimeCounter * CLOUD_LOW_FACTOR) + ).r; + + current_value *= 0.5; + current_value = smoothstep(0.05, 0.95, current_value); + + #endif + + // Ajuste por umbral + current_value = (current_value - umbral) / (1.0 - umbral); + + // Superficies inferior y superior de nubes + surface_inf = CLOUD_PLANE_CENTER - (current_value * dif_inf); + surface_sup = CLOUD_PLANE_CENTER + (current_value * dif_sup); + + if ( // Dentro de la nube + intersection_pos.y > surface_inf && + intersection_pos.y < surface_sup + ) { + cloud_value += min(increment_dist, surface_sup - surface_inf); + + if (first_contact) { + first_contact = false; + density = + (surface_sup - intersection_pos.y) / + (CLOUD_PLANE_SUP - CLOUD_PLANE); + } + } + else if (surface_inf < surface_sup && i > 0) { // Fuera de la nube + distance_aux = min( + abs(intersection_pos.y - surface_inf), + abs(intersection_pos.y - surface_sup) ); - if (first_contact) { - first_contact = false; - density = - (surface_sup - intersection_pos.y) / - (CLOUD_PLANE_SUP - CLOUD_PLANE); + if (distance_aux < dist_aux_coeff_blur) { + cloud_value += min( + (clamp(dist_aux_coeff_blur - distance_aux, 0.0, dist_aux_coeff_blur) / dist_aux_coeff_blur) * increment_dist, + surface_sup - surface_inf + ); + + if (first_contact) { + first_contact = false; + density = + (surface_sup - intersection_pos.y) / + (CLOUD_PLANE_SUP - CLOUD_PLANE); + } } } - } - intersection_pos += increment; + intersection_pos += increment; } cloud_value = clamp(cloud_value / opacity_dist, 0.0, 1.0); From 3138947faf8fbe79e78711e01e5534af2e28129f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 2 Nov 2024 20:07:45 -0600 Subject: [PATCH 022/147] Fix blocky clouds reflection --- ForDevelopers.EN.md | 4 ++-- ParaDesarrolladores.ES.md | 4 ++-- shaders/common/deferred_fragment.glsl | 4 +--- shaders/common/solid_dh_water_fragment.glsl | 4 +--- shaders/common/water_blocks_fragment.glsl | 4 +--- shaders/lib/volumetric_clouds.glsl | 18 +++++------------- shaders/lib/volumetric_clouds_end.glsl | 18 +++++------------- shaders/shaders.properties | 13 +++++++++---- 8 files changed, 26 insertions(+), 43 deletions(-) diff --git a/ForDevelopers.EN.md b/ForDevelopers.EN.md index afe395e5..a0a24d3a 100644 --- a/ForDevelopers.EN.md +++ b/ForDevelopers.EN.md @@ -62,10 +62,10 @@ Buffers are used and assigned in the following way: - noisetex: Stores the water normals in two channels, with the third component being calculated at runtime. (RG8) - colortex0: Bluenoise (not loaded). (R8) - colortex1: Main buffer. When DOF is active, it is four channels, with the fourth channel storing the scene depth for antialiasing and to avoid sudden focus changes due to camera shake. (Without DOF: R11F_G11F_B10F, with DOF: RGBA16) - - colortex2: Stores the "blocky" cloud map. (R8) + - colortex2: Unused. (R8) - colortex3: Stores the history used for temporal sampling. When DOF is active, it is four channels, with the fourth channel storing the scene depth for antialiasing and to avoid sudden focus changes due to camera shake. (Without DOF: R11F_G11F_B10F, with DOF: RGBA16) - gaux1: Stores a version of the scene that will be used for screen-space reflections and refractions. After it is used for that, it is used as an auxiliary to store the scene's bloom. (R11F_G11F_B10F) - - gaux2: Stores the cloud map in "natural" format. (R8) + - gaux2: Stores the cloud map. (R8) - gaux3: Stores the historical value of the scene's auto-exposure. The auto-exposure value is obtained by doing a weighted average with the value of this channel and the calculated one in the current scene to create a gradual transition of auto-exposure over time. Yes, it is excessive to use an entire buffer to store a single floating-point value, but it is what it is. It is only used if the default auto-exposure method is used. (R16F) - gaux4: Stores the color of the sky (without clouds or other objects) to give the color that should be used in the fog (yes, the fog is always the color of the "sky"). This way, objects are blurred and blended with the sky in the distance. diff --git a/ParaDesarrolladores.ES.md b/ParaDesarrolladores.ES.md index 7776f45b..9320da43 100644 --- a/ParaDesarrolladores.ES.md +++ b/ParaDesarrolladores.ES.md @@ -63,10 +63,10 @@ Los buffers son utilizados y asignados de la siguiente manera: - noisetex: Almacena las normales del agua en dos canales, el tercer componente es calculado al momento. (RG8) - colortex0: Ruido azul (no cargado). (R8) - colortex1: Buffer principal. Cuando está actvo el DOF, es de cuatro canales, donde el cuarto canal almacena la profundidad de la escena para ser también suavizada por el antialias, y así evitar problemas en cambios de enfoque súbitos por la sacudida de la cámara. (Sin DOF: R11F_G11F_B10F, con DOF: RGBA16) -- colortex2: Almacena el mapa para las nubes en formato "blocky". (R8) +- colortex2: Sin usar. (R8) - colortex3: Aquí se almacena el historial empleado por el muestreo temporal. Cuando está actvo el DOF, es de cuatro canales, donde el cuarto canal almacena la profundidad de la escena para ser también suavizada por el antialias, y así evitar problemas en cambios de enfoque súbitos por la sacudida de la cámara. (Sin DOF: R11F_G11F_B10F, con DOF: RGBA16) - gaux1: Aquí se almacena una versión de la escena que será empleada en los reflejos y refracciones de espacio de pantalla. Después de ser empleado para ello, se utiliza como auxiliar para almacenar el bloom de la escena. (R11F_G11F_B10F) -- gaux2: Almacena el mapa para las nubes en formato "natural". (R8) +- gaux2: Almacena el mapa para las nubes. (R8) - gaux3: Almacena el valor histórico de autoexposición de la escena. El valor de autoexposición se obtiene haciendo un promedio ponderado con el valor de este canal y el calculado en la escena actual, a fin de hacer una transición de autoexposición gradual en el tiempo. Sí, es un exceso usar un buffer entero para guardar un único valor flotante, pero es lo que hay. Sólo es usado si se usa el método de autoexposición predeterminado. (R16F) - gaux4: Almacena el color del cielo (sin nubes ni otros objetos), para otorgar el color que deberá emplearse en la niebla (sí, la niebla siempre es del color del "cielo"). De esta forma, los objetos se difuminan y confunden con el cielo a la distancia. diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index 74957eef..e229ab6e 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -22,9 +22,7 @@ uniform float blindness; uniform float rainStrength; uniform sampler2D gaux3; -#if CLOUD_VOL_STYLE == 1 && V_CLOUDS != 0 - uniform sampler2D colortex2; -#elif V_CLOUDS != 0 +#if V_CLOUDS != 0 uniform sampler2D gaux2; #endif diff --git a/shaders/common/solid_dh_water_fragment.glsl b/shaders/common/solid_dh_water_fragment.glsl index d5e535f9..77c6f097 100644 --- a/shaders/common/solid_dh_water_fragment.glsl +++ b/shaders/common/solid_dh_water_fragment.glsl @@ -40,9 +40,7 @@ uniform float dhFarPlane; uniform vec3 cameraPosition; uniform int dhRenderDistance; -#if CLOUD_VOL_STYLE == 1 && V_CLOUDS != 0 - uniform sampler2D colortex2; -#elif V_CLOUDS != 0 +#if V_CLOUDS != 0 uniform sampler2D gaux2; #endif diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index 2941a31c..7f2fd5ac 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -40,9 +40,7 @@ uniform sampler2D gaux4; uniform sampler2D dhDepthTex1; #endif -#if CLOUD_VOL_STYLE == 1 && V_CLOUDS != 0 - uniform sampler2D colortex2; -#elif V_CLOUDS != 0 +#if V_CLOUDS != 0 uniform sampler2D gaux2; #endif diff --git a/shaders/lib/volumetric_clouds.glsl b/shaders/lib/volumetric_clouds.glsl index 4c9e4442..1b5f64b3 100644 --- a/shaders/lib/volumetric_clouds.glsl +++ b/shaders/lib/volumetric_clouds.glsl @@ -57,20 +57,12 @@ vec3 get_cloud(vec3 view_vector, vec3 block_color, float bright, float dither, v intersection_pos += (increment * dither); for (int i = 0; i < samples; i++) { - #if CLOUD_VOL_STYLE == 0 - current_value = - texture2D( - gaux2, - (intersection_pos.xz * 0.0002777777777777778) + (frameTimeCounter * CLOUD_HI_FACTOR) - ).r; + current_value = + texture2D( + gaux2, + (intersection_pos.xz * 0.0002777777777777778) + (frameTimeCounter * CLOUD_HI_FACTOR) + ).r; - #else - current_value = - texture2D( - colortex2, - (intersection_pos.xz * 0.0002777777777777778) + (frameTimeCounter * CLOUD_HI_FACTOR) - ).r; - #endif #if V_CLOUDS == 2 && CLOUD_VOL_STYLE == 0 current_value += diff --git a/shaders/lib/volumetric_clouds_end.glsl b/shaders/lib/volumetric_clouds_end.glsl index 50874da2..472755e5 100644 --- a/shaders/lib/volumetric_clouds_end.glsl +++ b/shaders/lib/volumetric_clouds_end.glsl @@ -61,19 +61,11 @@ vec3 get_end_cloud(vec3 view_vector, vec3 block_color, float bright, float dithe intersection_pos += (increment * dither); for (int i = 0; i < samples; i++) { - #if CLOUD_VOL_STYLE == 0 - current_value = - texture2D( - gaux2, - (intersection_pos.xz * .0008) + (frameTimeCounter * CLOUD_HI_FACTOR * 3.0) - ).r; - #else - current_value = - texture2D( - colortex2, - (intersection_pos.xz * .0008) + (frameTimeCounter * CLOUD_HI_FACTOR * 3.0) - ).r; - #endif + current_value = + texture2D( + gaux2, + (intersection_pos.xz * .0008) + (frameTimeCounter * CLOUD_HI_FACTOR * 3.0) + ).r; #if V_CLOUDS == 2 && CLOUD_VOL_STYLE == 0 current_value += diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 30c429da..0372a327 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -31,11 +31,16 @@ particles.before.deferred = true #endif texture.gbuffers.noisetex = textures/water_256_RG_8bit.png -texture.gbuffers.colortex2 = textures/clouds_blocky_512_R_8bit.png -texture.gbuffers.gaux2 = textures/clouds_natural_512_R_8bit.png + +#if CLOUD_VOL_STYLE == 0 + texture.gbuffers.gaux2 = textures/clouds_natural_512_R_8bit.png + texture.deferred.gaux2 = textures/clouds_natural_512_R_8bit.png +#else + texture.gbuffers.gaux2 = textures/clouds_blocky_512_R_8bit.png + texture.deferred.gaux2 = textures/clouds_blocky_512_R_8bit.png +#endif + # texture.deferred.colortex0 = textures/bluenoise_64.png -texture.deferred.colortex2 = textures/clouds_blocky_512_R_8bit.png -texture.deferred.gaux2 = textures/clouds_natural_512_R_8bit.png program.shadow.enabled=SHADOW_CASTING program.world0/shadow.enabled=SHADOW_CASTING From 18d90ceb4d3a6f5cbefe6a141da07f71fe9200ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sun, 3 Nov 2024 13:25:39 -0600 Subject: [PATCH 023/147] Test --- shaders/common/solid_blocks_fragment.glsl | 2 +- shaders/lib/color_utils.glsl | 5 ++++- shaders/lib/config.glsl | 4 ++-- shaders/lib/tone_maps.glsl | 15 --------------- shaders/shaders.properties | 18 +++++++++--------- 5 files changed, 16 insertions(+), 28 deletions(-) diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index aa612155..73326683 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -119,7 +119,7 @@ void main() { float dither = shifted_dither13(gl_FragCoord.xy); // float dither = shifted_eclectic_dither13(gl_FragCoord.xy); #else - float dither = dither13(gl_FragCoord.xy); + float dither = r_dither(gl_FragCoord.xy); #endif #endif // Avoid render in DH transition diff --git a/shaders/lib/color_utils.glsl b/shaders/lib/color_utils.glsl index 4f208438..e514f931 100644 --- a/shaders/lib/color_utils.glsl +++ b/shaders/lib/color_utils.glsl @@ -39,10 +39,13 @@ uniform int moonPhase; #define ZENITH_SUNSET_COLOR vec3(0.143, 0.24394118, 0.36450981) #define ZENITH_DAY_COLOR vec3(0.143, 0.24394118, 0.36450981) + // #define ZENITH_DAY_COLOR vec3(0.104, 0.26, 0.507) // Captain #define ZENITH_NIGHT_COLOR vec3(0.014, 0.019, 0.025) * NIGHT_BRIGHT_PHASE #define HORIZON_SUNSET_COLOR vec3(1.0, 0.648, 0.37824) - #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) + // #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) // Original + // #define HORIZON_DAY_COLOR vec3(0.5005, 0.85379413, 1.27578433) + #define HORIZON_DAY_COLOR vec3(0.585, 0.819, 1.17) // Captain #define HORIZON_NIGHT_COLOR vec3(0.0213, 0.0306, 0.0387) * NIGHT_BRIGHT_PHASE #define WATER_COLOR vec3(0.05, 0.1, 0.11) diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index 6c0654a5..e59445ad 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -158,8 +158,8 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define CLOUD_PLANE 319.0 #endif -#define CLOUD_STEPS_AVG 7 // [7 8 9 10 11 12 13 14 15 16] Samples per pixel (high performance impact). -#define CLOUD_SPEED 0 // [0 1 2] Change the speed of clouds for display purposes. +#define CLOUD_STEPS_AVG 10 // [7 8 9 10 11 12 13 14 15 16] Samples per pixel (high performance impact). +#define CLOUD_SPEED 0 // [0 1 2] Change the speed of clouds for demo purposes. #if CLOUD_VOL_STYLE == 1 #if CLOUD_SPEED == 0 diff --git a/shaders/lib/tone_maps.glsl b/shaders/lib/tone_maps.glsl index 1eceb833..f77761e4 100644 --- a/shaders/lib/tone_maps.glsl +++ b/shaders/lib/tone_maps.glsl @@ -18,21 +18,6 @@ vec3 custom_sigmoid(vec3 color) { return pow(color, vec3(1.15)); } -// vec3 custom_sigmoid(vec3 color) { -// color = 1.3 * color; -// color = color / pow(pow(color, vec3(3.0)) + 1.0, vec3(0.33333333333333333)); - -// return pow(color, vec3(1.15)); -// } - -// vec3 custom_sigmoid(vec3 color) { -// // ((1.4 ∙ x) / ((1.4 ∙ x)^2.5 + 1)^0.4)^1.1 -// color = 1.4 * color; -// color = color / pow(pow(color, vec3(2.5)) + 1.0, vec3(0.4)); - -// return pow(color, vec3(1.1)); -// } - vec3 custom_sigmoid_alt(vec3 color) { color = 1.4 * color; color = color / pow(pow(color, vec3(3.05)) + 1.0, vec3(0.3278688524590164)); diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 0372a327..fb78ef2f 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -1,15 +1,15 @@ # MakeUp - shader.properties #Profiles -profile.no_effects= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=0 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=0 SUN_REFLECTION=0 WAVING=0 V_CLOUDS=0 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS -profile.shadowless_low= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS -profile.shadowless_medium= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.shadowless_high= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.extreme= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.no_effects= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=0 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=0 SUN_REFLECTION=0 WAVING=0 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS +profile.shadowless_low= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS +profile.shadowless_medium= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.shadowless_high= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.extreme= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS # Default forced options vignette = false From ffa368510a1a50c162ef46bd8532bac2697d0035 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sun, 3 Nov 2024 15:28:37 -0600 Subject: [PATCH 024/147] Colored shadow adjust --- shaders/lib/shadow_frag.glsl | 45 ++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/shaders/lib/shadow_frag.glsl b/shaders/lib/shadow_frag.glsl index 9218c148..dc5de38f 100644 --- a/shaders/lib/shadow_frag.glsl +++ b/shaders/lib/shadow_frag.glsl @@ -11,7 +11,6 @@ float get_shadow(vec3 the_shadow_pos, float dither) { shadow_sample = shadow2D(shadowtex1, the_shadow_pos).r; #elif SHADOW_TYPE == 1 // Soft float current_radius = dither; - // float current_radius = 0.5; dither *= 6.283185307179586; float dither_2 = dither + 1.5707963267948966; @@ -71,17 +70,31 @@ float get_shadow(vec3 the_shadow_pos, float dither) { float shadow_black_b = 1.0; vec4 shadow_color_b = vec4(1.0); + float shadow_detector_c = 1.0; + float shadow_black_c = 1.0; + vec4 shadow_color_c = vec4(1.0); + + float shadow_detector_d = 1.0; + float shadow_black_d = 1.0; + vec4 shadow_color_d = vec4(1.0); + float alpha_complement; float current_radius = dither; dither *= 6.283185307179586; + float dither_2 = dither + 1.5707963267948966; vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; + vec2 offset_2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; + float z_bias = dither * 0.00002; shadow_detector_a = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; shadow_detector_b = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; + shadow_detector_c = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset_2, the_shadow_pos.z - z_bias)).r; + shadow_detector_d = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset_2, the_shadow_pos.z - z_bias)).r; + if (shadow_detector_a < 1.0) { shadow_black_a = shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; if (shadow_black_a != shadow_detector_a) { @@ -106,10 +119,34 @@ float get_shadow(vec3 the_shadow_pos, float dither) { shadow_color_b *= shadow_black_b; - shadow_detector_a = (shadow_detector_a + shadow_detector_b); - shadow_detector_a *= 0.5; + if (shadow_detector_c < 1.0) { + shadow_black_c = shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset_2, the_shadow_pos.z - z_bias)).r; + if (shadow_black_c != shadow_detector_c) { + shadow_color_c = texture2D(shadowcolor0, the_shadow_pos.xy + offset_2); + alpha_complement = 1.0 - shadow_color_c.a; + shadow_color_c.rgb = mix(shadow_color_c.rgb, vec3(1.0), alpha_complement); + shadow_color_c.rgb *= alpha_complement; + } + } + + shadow_color_c *= shadow_black_c; + + if (shadow_detector_d < 1.0) { + shadow_black_d = shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset_2, the_shadow_pos.z - z_bias)).r; + if (shadow_black_d != shadow_detector_d) { + shadow_color_d = texture2D(shadowcolor0, the_shadow_pos.xy - offset_2); + alpha_complement = 1.0 - shadow_color_d.a; + shadow_color_d.rgb = mix(shadow_color_d.rgb, vec3(1.0), alpha_complement); + shadow_color_d.rgb *= alpha_complement; + } + } + + shadow_color_d *= shadow_black_d; + + shadow_detector_a = (shadow_detector_a + shadow_detector_b + shadow_detector_c + shadow_detector_d); + shadow_detector_a *= 0.25; - shadow_color_a.rgb = (shadow_color_a.rgb + shadow_color_b.rgb) * 0.5; + shadow_color_a.rgb = (shadow_color_a.rgb + shadow_color_b.rgb + shadow_color_c.rgb + shadow_color_d.rgb) * 0.25; shadow_color_a.rgb = mix(shadow_color_a.rgb, vec3(1.0), shadow_detector_a); return shadow_color_a.rgb; From a1cf2acf07b132ea2fa7ab9bce30990420729268 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 9 Nov 2024 20:36:19 -0600 Subject: [PATCH 025/147] Water --- shaders/common/solid_dh_water_fragment.glsl | 16 ++------ shaders/common/water_blocks_fragment.glsl | 29 +++++++------ shaders/lib/color_utils.glsl | 45 +++++++++++++++------ shaders/lib/config.glsl | 2 +- shaders/src/light_vertex.glsl | 2 +- shaders/src/light_vertex_dh.glsl | 2 +- 6 files changed, 53 insertions(+), 43 deletions(-) diff --git a/shaders/common/solid_dh_water_fragment.glsl b/shaders/common/solid_dh_water_fragment.glsl index 77c6f097..90629ad9 100644 --- a/shaders/common/solid_dh_water_fragment.glsl +++ b/shaders/common/solid_dh_water_fragment.glsl @@ -196,21 +196,13 @@ void main() { #endif real_light = omni_light + - (direct_light_strength * direct_light_color) * (1.0 - rainStrength * 0.75) + + (direct_light_strength * visible_sky * direct_light_color) * (1.0 - rainStrength * 0.75) + candle_color; - #if defined NETHER || defined THE_END - #if WATER_COLOR_SOURCE == 0 + #if WATER_COLOR_SOURCE == 0 block_color.rgb = water_texture * real_light * WATER_COLOR; - #elif WATER_COLOR_SOURCE == 1 - block_color.rgb = 0.3 * water_texture * real_light * tint_color.rgb; - #endif - #else - #if WATER_COLOR_SOURCE == 0 - block_color.rgb = water_texture * real_light * visible_sky * WATER_COLOR; - #elif WATER_COLOR_SOURCE == 1 - block_color.rgb = 0.3 * water_texture * real_light * visible_sky * tint_color.rgb; - #endif + #elif WATER_COLOR_SOURCE == 1 + block_color.rgb = 0.3 * water_texture * real_light * tint_color.rgb; #endif block_color = vec4(refraction(fragposition, block_color.rgb, water_normal_base), 1.0); diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index 7f2fd5ac..413d07e3 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -137,7 +137,8 @@ void main() { float dither = 1.0; #endif - vec4 block_color = texture2D(tex, texcoord); + // vec4 block_color = texture2D(tex, texcoord); + vec4 block_color; vec3 real_light; #ifdef VANILLA_WATER @@ -173,6 +174,7 @@ void main() { #endif if(block_type > 2.5) { // Water #ifdef VANILLA_WATER + block_color = texture2D(tex, texcoord); #if defined SHADOW_CASTING && !defined NETHER #if defined COLORED_SHADOW vec3 shadow_c = get_colored_shadow(shadow_pos, dither); @@ -200,33 +202,29 @@ void main() { block_color.a = sqrt(block_color.a); #else #if WATER_TEXTURE == 1 + block_color = texture2D(tex, texcoord); float water_texture = luma(block_color.rgb); #else float water_texture = 1.0; #endif real_light = omni_light + - (direct_light_strength * direct_light_color) * (1.0 - rainStrength * 0.75) + + (direct_light_strength * visible_sky * direct_light_color) * (1.0 - rainStrength * 0.75) + candle_color; - #if defined NETHER || defined THE_END - #if WATER_COLOR_SOURCE == 0 - block_color.rgb = water_texture * real_light * WATER_COLOR; - #elif WATER_COLOR_SOURCE == 1 - block_color.rgb = 0.3 * water_texture * real_light * tint_color.rgb; - #endif - #else - #if WATER_COLOR_SOURCE == 0 - block_color.rgb = water_texture * real_light * visible_sky * WATER_COLOR; - #elif WATER_COLOR_SOURCE == 1 - block_color.rgb = 0.3 * water_texture * real_light * visible_sky * tint_color.rgb; - #endif + #if WATER_COLOR_SOURCE == 0 + block_color.rgb = water_texture * real_light * WATER_COLOR; + #elif WATER_COLOR_SOURCE == 1 + block_color.rgb = 0.3 * water_texture * real_light * tint_color.rgb; #endif block_color = vec4(refraction(fragposition, block_color.rgb, water_normal_base), 1.0); #if WATER_TEXTURE == 1 - fresnel = clamp(fresnel * (water_texture * water_texture + 0.5), 0.0, 1.0); + water_texture += 0.25; + water_texture *= water_texture; + water_texture *= water_texture; + fresnel = clamp(fresnel * (water_texture), 0.0, 1.0); #endif block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); @@ -234,6 +232,7 @@ void main() { #endif } else { // Otros translúcidos + block_color = texture2D(tex, texcoord); block_color *= tint_color; diff --git a/shaders/lib/color_utils.glsl b/shaders/lib/color_utils.glsl index e514f931..a415e174 100644 --- a/shaders/lib/color_utils.glsl +++ b/shaders/lib/color_utils.glsl @@ -32,23 +32,42 @@ uniform int moonPhase; #define WATER_COLOR vec3(0.05, 0.1, 0.11) #elif COLOR_SCHEME == 1 // New shoka - #define OMNI_TINT 0.25 - #define LIGHT_SUNSET_COLOR vec3(1.0, 0.588, 0.3555) - #define LIGHT_DAY_COLOR vec3(0.90, 0.84, 0.79) + #define OMNI_TINT 0.65 + // #define LIGHT_SUNSET_COLOR vec3(1.0, 0.588, 0.3555) + #define LIGHT_SUNSET_COLOR vec3(0.70656, 0.44436, 0.2898) + #define LIGHT_DAY_COLOR vec3(0.88504, 0.88504, 0.8372) #define LIGHT_NIGHT_COLOR vec3(0.04786874, 0.05175001, 0.06112969) * NIGHT_BRIGHT_PHASE - #define ZENITH_SUNSET_COLOR vec3(0.143, 0.24394118, 0.36450981) - #define ZENITH_DAY_COLOR vec3(0.143, 0.24394118, 0.36450981) - // #define ZENITH_DAY_COLOR vec3(0.104, 0.26, 0.507) // Captain - #define ZENITH_NIGHT_COLOR vec3(0.014, 0.019, 0.025) * NIGHT_BRIGHT_PHASE + #define ZENITH_SUNSET_COLOR vec3(0.104, 0.17741177, 0.26509804) + #define ZENITH_DAY_COLOR vec3(0.05098, 0.25990, 0.44313) + // #define ZENITH_NIGHT_COLOR vec3(0.014, 0.019, 0.025) * NIGHT_BRIGHT_PHASE + #define ZENITH_NIGHT_COLOR vec3(0.004 ,0.01, 0.0195) * NIGHT_BRIGHT_PHASE - #define HORIZON_SUNSET_COLOR vec3(1.0, 0.648, 0.37824) - // #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) // Original - // #define HORIZON_DAY_COLOR vec3(0.5005, 0.85379413, 1.27578433) - #define HORIZON_DAY_COLOR vec3(0.585, 0.819, 1.17) // Captain - #define HORIZON_NIGHT_COLOR vec3(0.0213, 0.0306, 0.0387) * NIGHT_BRIGHT_PHASE + #define HORIZON_SUNSET_COLOR vec3(0.715 , 0.5499, 0.416) + #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) + #define HORIZON_NIGHT_COLOR vec3(0.025, 0.035, 0.05) * NIGHT_BRIGHT_PHASE - #define WATER_COLOR vec3(0.05, 0.1, 0.11) + // #define WATER_COLOR vec3(0.05, 0.1, 0.11) + // #define WATER_COLOR vec3(0.0, 0.4039, 0.5921) + #define WATER_COLOR vec3(0. , 0.2 , 0.44313725) + + + + + // #define OMNI_TINT 0.25 + // #define LIGHT_SUNSET_COLOR vec3(1.0, 0.588, 0.3555) + // #define LIGHT_DAY_COLOR vec3(0.90, 0.84, 0.79) + // #define LIGHT_NIGHT_COLOR vec3(0.04786874, 0.05175001, 0.06112969) * NIGHT_BRIGHT_PHASE + + // #define ZENITH_SUNSET_COLOR vec3(0.143, 0.24394118, 0.36450981) + // #define ZENITH_DAY_COLOR vec3(0.143, 0.24394118, 0.36450981) + // #define ZENITH_NIGHT_COLOR vec3(0.014, 0.019, 0.025) * NIGHT_BRIGHT_PHASE + + // #define HORIZON_SUNSET_COLOR vec3(1.0, 0.648, 0.37824) + // #define HORIZON_DAY_COLOR vec3(0.585, 0.819, 1.17) + // #define HORIZON_NIGHT_COLOR vec3(0.0213, 0.0306, 0.0387) * NIGHT_BRIGHT_PHASE + + // #define WATER_COLOR vec3(0.05, 0.1, 0.11) #elif COLOR_SCHEME == 2 // Shoka #define OMNI_TINT 0.5 #define LIGHT_SUNSET_COLOR vec3(0.70656, 0.44436, 0.2898) diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index e59445ad..988bfbb2 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -63,7 +63,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define SHADOW_TYPE 1 // [0 1] Sets the shadow type #define SHADOW_BLUR 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] Shadow blur intensity // #define COLORED_SHADOW // Attempts to tint the shadow of translucent objects, as well as the associated volumetric light (if active). -#define WATER_ABSORPTION 0.10 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.20 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.30 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38] Sets how much light the water absorbs. Low levels make the water more transparent. High levels make it more opaque. +#define WATER_ABSORPTION 0.10 // [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] Sets how much light the water absorbs. Low levels make the water more transparent. High levels make it more opaque. #define COLOR_SCHEME 1 // [0 1 2 3 4 5 6 99] Ethereal: Old default theme. New shoka: Reinterpretation of a classic. Shoka: The classic. Legacy: Very old default. Captain: A cold preset of stylish colors. Psycodelic: Remaster of old vivid scheme. Cocoa: Warm theme. Custom: Choose your colors in advanced options. #define WATER_TEXTURE 0 // [0 1] Enable or disable resource pack water texture. It does not work properly in 1.12. In that case the default value is recommended. #define AVOID_DARK_LEVEL 0.030 // [0.000 0.005 0.010 0.015 0.020 0.025 0.030 0.035 0.040 0.045 0.050 0.055 0.060] Minimal omni light intensity in caves. diff --git a/shaders/src/light_vertex.glsl b/shaders/src/light_vertex.glsl index aa301c53..6cbd14be 100644 --- a/shaders/src/light_vertex.glsl +++ b/shaders/src/light_vertex.glsl @@ -111,7 +111,7 @@ float omni_strength = (direct_light_strength * .125) + 1.0; ); // Minimal light - vec3 omni_color = mix(hi_sky_color_rgb, direct_light_color * 0.75, OMNI_TINT); + vec3 omni_color = mix(hi_sky_color_rgb, direct_light_color * 0.45, OMNI_TINT); float omni_color_luma = color_average(omni_color); float luma_ratio = AVOID_DARK_LEVEL / omni_color_luma; vec3 omni_color_min = omni_color * luma_ratio; diff --git a/shaders/src/light_vertex_dh.glsl b/shaders/src/light_vertex_dh.glsl index 3c98e3b7..0035aa06 100644 --- a/shaders/src/light_vertex_dh.glsl +++ b/shaders/src/light_vertex_dh.glsl @@ -75,7 +75,7 @@ direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); ); // Minimal light - vec3 omni_color = mix(hi_sky_color_rgb, direct_light_color * 0.75, OMNI_TINT); + vec3 omni_color = mix(hi_sky_color_rgb, direct_light_color * 0.45, OMNI_TINT); float omni_color_luma = color_average(omni_color); float luma_ratio = AVOID_DARK_LEVEL / omni_color_luma; vec3 omni_color_min = omni_color * luma_ratio; From fb174c6de1a8925a58ceb75d61658b5ff2eafc85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 9 Nov 2024 22:09:52 -0600 Subject: [PATCH 026/147] Reflection --- shaders/lib/water.glsl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/shaders/lib/water.glsl b/shaders/lib/water.glsl index 7e9d49d8..fdf91a50 100644 --- a/shaders/lib/water.glsl +++ b/shaders/lib/water.glsl @@ -10,6 +10,7 @@ vec3 fast_raymarch(vec3 direction, vec3 hit_coord, inout float infinite, float d float depth_diff = 1.0; vec3 march_pos = camera_to_screen(hit_coord); float prev_screen_depth = march_pos.z; + float hit_z = texture2D(depthtex1, march_pos.xy).x; bool search_flag = false; bool hidden_flag = false; bool first_hidden = true; @@ -80,7 +81,7 @@ vec3 fast_raymarch(vec3 direction, vec3 hit_coord, inout float infinite, float d if (screen_depth > 0.9999) { infinite = 1.0; return march_pos; - } else if (no_hidden_steps < 3) { + } else if (no_hidden_steps < 3 || screen_depth > hit_z) { return march_pos; } else { infinite = 1.0; From 66c0d3eba2469f954bd350489babba53f29c3ddb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sun, 10 Nov 2024 00:08:22 -0600 Subject: [PATCH 027/147] Water II --- shaders/lib/water.glsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shaders/lib/water.glsl b/shaders/lib/water.glsl index fdf91a50..290060fa 100644 --- a/shaders/lib/water.glsl +++ b/shaders/lib/water.glsl @@ -10,7 +10,7 @@ vec3 fast_raymarch(vec3 direction, vec3 hit_coord, inout float infinite, float d float depth_diff = 1.0; vec3 march_pos = camera_to_screen(hit_coord); float prev_screen_depth = march_pos.z; - float hit_z = texture2D(depthtex1, march_pos.xy).x; + float hit_z = march_pos.z; bool search_flag = false; bool hidden_flag = false; bool first_hidden = true; From 88e2132b2332cc1cca504275872b53c15e4823db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 11 Nov 2024 11:34:41 -0600 Subject: [PATCH 028/147] Water depth --- shaders/common/composite_fragment.glsl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index 2c9ad2d3..b069e8eb 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -103,12 +103,12 @@ void main() { vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); // Depth to distance - float screen_distance = 2.0 * near * far / (far + near - (2.0 * d - 1.0) * (far - near)); + float screen_distance = linear_d * far; // Underwater fog if(isEyeInWater == 1) { - float water_absorption = (1.0 / -((screen_distance * WATER_ABSORPTION) + 1.0)) + 1.0; - + float water_absorption = -pow((-linear_d + 1.0), (2.0 + (WATER_ABSORPTION * 4.0))) + 1.0; + block_color.rgb = mix(block_color.rgb, WATER_COLOR * direct_light_color * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), water_absorption); From 4073a83029176085a5aadba6bea937fae3501aaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 16 Nov 2024 13:03:34 -0600 Subject: [PATCH 029/147] Version 9.1 --- shaders/lang/en_US.lang | 1 + shaders/lang/sv_SE.lang | 1 + shaders/lang/zh_CN.lang | 1 + shaders/lib/color_utils.glsl | 55 ++++++++++++++------------------ shaders/lib/config.glsl | 2 +- shaders/src/position_vertex.glsl | 4 +-- 6 files changed, 29 insertions(+), 35 deletions(-) diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 09653dbf..6db61aab 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -129,6 +129,7 @@ value.COLOR_SCHEME.3=Legacy value.COLOR_SCHEME.4=Captain value.COLOR_SCHEME.5=Psychedelic value.COLOR_SCHEME.6=Cocoa +value.COLOR_SCHEME.7=Testigo value.COLOR_SCHEME.99=Custom option.LIGHT_SUNSET_COLOR_R=Sunset light R diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index ce9c8cf8..26e5ba3c 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -129,6 +129,7 @@ value.COLOR_SCHEME.3=Legacy value.COLOR_SCHEME.4=Captain value.COLOR_SCHEME.5=Psychedelic value.COLOR_SCHEME.6=Cocoa +value.COLOR_SCHEME.7=Testigo value.COLOR_SCHEME.99=Beställnings option.LIGHT_SUNSET_COLOR_R=Solnedgångsljus R diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 5806d55e..2ace907a 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -129,6 +129,7 @@ value.COLOR_SCHEME.3=Legacy (遗产) value.COLOR_SCHEME.4=Captain value.COLOR_SCHEME.5=Psychedelic (迷幻) value.COLOR_SCHEME.6=Cocoa (可可) +value.COLOR_SCHEME.7=Testigo value.COLOR_SCHEME.99=自定义 option.LIGHT_SUNSET_COLOR_R=光照 - 日落 - 红 diff --git a/shaders/lib/color_utils.glsl b/shaders/lib/color_utils.glsl index a415e174..d64ddc9c 100644 --- a/shaders/lib/color_utils.glsl +++ b/shaders/lib/color_utils.glsl @@ -32,42 +32,20 @@ uniform int moonPhase; #define WATER_COLOR vec3(0.05, 0.1, 0.11) #elif COLOR_SCHEME == 1 // New shoka - #define OMNI_TINT 0.65 - // #define LIGHT_SUNSET_COLOR vec3(1.0, 0.588, 0.3555) - #define LIGHT_SUNSET_COLOR vec3(0.70656, 0.44436, 0.2898) - #define LIGHT_DAY_COLOR vec3(0.88504, 0.88504, 0.8372) + #define OMNI_TINT 0.25 + #define LIGHT_SUNSET_COLOR vec3(1.0, 0.588, 0.3555) + #define LIGHT_DAY_COLOR vec3(0.90, 0.84, 0.79) #define LIGHT_NIGHT_COLOR vec3(0.04786874, 0.05175001, 0.06112969) * NIGHT_BRIGHT_PHASE - #define ZENITH_SUNSET_COLOR vec3(0.104, 0.17741177, 0.26509804) - #define ZENITH_DAY_COLOR vec3(0.05098, 0.25990, 0.44313) - // #define ZENITH_NIGHT_COLOR vec3(0.014, 0.019, 0.025) * NIGHT_BRIGHT_PHASE - #define ZENITH_NIGHT_COLOR vec3(0.004 ,0.01, 0.0195) * NIGHT_BRIGHT_PHASE + #define ZENITH_SUNSET_COLOR vec3(0.143, 0.24394118, 0.36450981) + #define ZENITH_DAY_COLOR vec3(0.143, 0.24394118, 0.36450981) + #define ZENITH_NIGHT_COLOR vec3(0.014, 0.019, 0.025) * NIGHT_BRIGHT_PHASE - #define HORIZON_SUNSET_COLOR vec3(0.715 , 0.5499, 0.416) + #define HORIZON_SUNSET_COLOR vec3(1.0, 0.648, 0.37824) #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) - #define HORIZON_NIGHT_COLOR vec3(0.025, 0.035, 0.05) * NIGHT_BRIGHT_PHASE - - // #define WATER_COLOR vec3(0.05, 0.1, 0.11) - // #define WATER_COLOR vec3(0.0, 0.4039, 0.5921) - #define WATER_COLOR vec3(0. , 0.2 , 0.44313725) - - - - - // #define OMNI_TINT 0.25 - // #define LIGHT_SUNSET_COLOR vec3(1.0, 0.588, 0.3555) - // #define LIGHT_DAY_COLOR vec3(0.90, 0.84, 0.79) - // #define LIGHT_NIGHT_COLOR vec3(0.04786874, 0.05175001, 0.06112969) * NIGHT_BRIGHT_PHASE - - // #define ZENITH_SUNSET_COLOR vec3(0.143, 0.24394118, 0.36450981) - // #define ZENITH_DAY_COLOR vec3(0.143, 0.24394118, 0.36450981) - // #define ZENITH_NIGHT_COLOR vec3(0.014, 0.019, 0.025) * NIGHT_BRIGHT_PHASE - - // #define HORIZON_SUNSET_COLOR vec3(1.0, 0.648, 0.37824) - // #define HORIZON_DAY_COLOR vec3(0.585, 0.819, 1.17) - // #define HORIZON_NIGHT_COLOR vec3(0.0213, 0.0306, 0.0387) * NIGHT_BRIGHT_PHASE + #define HORIZON_NIGHT_COLOR vec3(0.0213, 0.0306, 0.0387) * NIGHT_BRIGHT_PHASE - // #define WATER_COLOR vec3(0.05, 0.1, 0.11) + #define WATER_COLOR vec3(0.05, 0.1, 0.11) #elif COLOR_SCHEME == 2 // Shoka #define OMNI_TINT 0.5 #define LIGHT_SUNSET_COLOR vec3(0.70656, 0.44436, 0.2898) @@ -143,6 +121,21 @@ uniform int moonPhase; #define HORIZON_NIGHT_COLOR vec3(0.022, 0.029, 0.049) * NIGHT_BRIGHT_PHASE #define WATER_COLOR vec3(0.018, 0.12 , 0.18) +#elif COLOR_SCHEME == 7 // Testigo + #define OMNI_TINT 0.65 + #define LIGHT_SUNSET_COLOR vec3(0.70656, 0.44436, 0.2898) + #define LIGHT_DAY_COLOR vec3(0.88504, 0.88504, 0.8372) + #define LIGHT_NIGHT_COLOR vec3(0.04786874, 0.05175001, 0.06112969) * NIGHT_BRIGHT_PHASE + + #define ZENITH_SUNSET_COLOR vec3(0.104, 0.17741177, 0.26509804) + #define ZENITH_DAY_COLOR vec3(0.05098, 0.25990, 0.44313) + #define ZENITH_NIGHT_COLOR vec3(0.004 ,0.01, 0.0195) * NIGHT_BRIGHT_PHASE + + #define HORIZON_SUNSET_COLOR vec3(0.715 , 0.5499, 0.416) + #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) + #define HORIZON_NIGHT_COLOR vec3(0.025, 0.035, 0.05) * NIGHT_BRIGHT_PHASE + + #define WATER_COLOR vec3(0.0 , 0.2, 0.44313725) #elif COLOR_SCHEME == 99 // Custom #define OMNI_TINT OMNI_TINT_CUSTOM #define LIGHT_SUNSET_COLOR vec3(LIGHT_SUNSET_COLOR_R, LIGHT_SUNSET_COLOR_G, LIGHT_SUNSET_COLOR_B) diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index 988bfbb2..965fb321 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -64,7 +64,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define SHADOW_BLUR 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] Shadow blur intensity // #define COLORED_SHADOW // Attempts to tint the shadow of translucent objects, as well as the associated volumetric light (if active). #define WATER_ABSORPTION 0.10 // [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] Sets how much light the water absorbs. Low levels make the water more transparent. High levels make it more opaque. -#define COLOR_SCHEME 1 // [0 1 2 3 4 5 6 99] Ethereal: Old default theme. New shoka: Reinterpretation of a classic. Shoka: The classic. Legacy: Very old default. Captain: A cold preset of stylish colors. Psycodelic: Remaster of old vivid scheme. Cocoa: Warm theme. Custom: Choose your colors in advanced options. +#define COLOR_SCHEME 1 // [0 1 2 3 4 5 6 7 99] Ethereal: Old default theme. New shoka: Reinterpretation of a classic. Shoka: The classic. Legacy: Very old default. Captain: A cold preset of stylish colors. Psycodelic: Remaster of old vivid scheme. Cocoa: Warm theme. Testigo: Fantasy and cute scheme. Custom: Choose your colors in advanced options. #define WATER_TEXTURE 0 // [0 1] Enable or disable resource pack water texture. It does not work properly in 1.12. In that case the default value is recommended. #define AVOID_DARK_LEVEL 0.030 // [0.000 0.005 0.010 0.015 0.020 0.025 0.030 0.035 0.040 0.045 0.050 0.055 0.060] Minimal omni light intensity in caves. #define NIGHT_BRIGHT 0.60 // [0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70] Adjusts the brightness of the night light in exteriors. diff --git a/shaders/src/position_vertex.glsl b/shaders/src/position_vertex.glsl index 9a85bac0..993d1ffe 100644 --- a/shaders/src/position_vertex.glsl +++ b/shaders/src/position_vertex.glsl @@ -81,9 +81,7 @@ #if defined GBUFFER_CLOUDS gl_FogFragCoord = length(viewPos.xz); - // gl_FogFragCoord = length(gl_Position.xy); #else - // gl_FogFragCoord = length(viewPos.xyz); - gl_FogFragCoord = length((gbufferModelViewInverse * sub_position).xyz); + gl_FogFragCoord = length(viewPos.xyz); #endif #endif From 2b8cb886e4cea09d4dbdb447ac139a90f8791dea Mon Sep 17 00:00:00 2001 From: DadamaldaDad Date: Thu, 12 Dec 2024 16:41:33 +0100 Subject: [PATCH 030/147] Add block properties for many mods --- generate_materials.js | 111 ++++++++++++++++++++++++++++++++ shaders/block.manual.properties | 80 +++++++++++++++++++++++ shaders/block.properties | 26 ++++---- 3 files changed, 205 insertions(+), 12 deletions(-) create mode 100644 generate_materials.js create mode 100644 shaders/block.manual.properties diff --git a/generate_materials.js b/generate_materials.js new file mode 100644 index 00000000..8d940227 --- /dev/null +++ b/generate_materials.js @@ -0,0 +1,111 @@ +var locometal_types = "slashed_locometal riveted_locometal locometal_pillar locometal_smokebox plated_locometal flat_slashed_locometal flat_riveted_locometal brass_wrapped_locometal copper_wrapped_locometal iron_wrapped_locometal locometal_boiler brass_wrapped_locometal_boiler copper_wrapped_locometal_boiler iron_wrapped_locometal_boiler".split(" ") + +var locometal_colors = " white_ light_gray_ gray_ black_ brown_ red_ orange_ yellow_ lime_ green_ cyan_ light_blue_ blue_ purple_ magenta_ pink_".split(" ") + +var copper_types = "s _stairs _slab".split(" ") + +var copper_oxidations = " exposed_ weathered_ oxidized_".split(" ") + +var copper_sets = "shingle tile".split(" ") +var copper_states = " waxed_".split(" ") + +var dd_metal_shapes = "block stairs slab".split(" ") + +var dd_metal_types = "polished tiled".split(" ") + +var dd_metal_materials = "steel zinc bronze".split(" ") + +var cbc_materials = "cast_iron bronze steel nethersteel".split(" ") + +var cbc_shapes = ",sliding_breech unbored_,sliding_breech incomplete_,sliding_breech ,quickfiring_breech ,screw_breech unbored_,screw_breech incomplete_,screw_breech ,cannon_end ,autocannon_breech unbored_,autocannon_breech incomplete_,autocannon_breech ,autocannon_recoil_spring unbored_,autocannon_recoil_spring incomplete_,autocannon_recoil_spring ,autocannon_barrel unbored_,autocannon_barrel very_small_,cannon_layer small_,cannon_layer medium_,cannon_layer large_,cannon_layer very_large_,cannon_layer unbored_very_small_,cannon_layer unbored_small_,cannon_layer unbored_medium_,cannon_layer unbored_large_,cannon_layer unbored_very_large_,cannon_layer ,cannon_barrel built_up_,cannon_barrel ,cannon_chamber built_up_,cannon_chamber thick_,cannon_chamber".split(" ").map(x => x.split(",")) + +var createcasing_block_shapes = "mixer press depot".split(" ") + +var createcasing_casing_shapes = "gearbox encased_chain_drive adjustable_chain_gearshift".split(" ").concat(createcasing_block_shapes) + +var createcasing_block_materials = "brass copper".split(" ") + +var createcasing_casing_materials = "railway creative industrial_iron".split(" ") + +var createdeco_shapes = ",coinstack ,bars ,bars_overlay ,mesh_fence ,hull ,catwalk ,catwalk_stairs ,catwalk_railing ,support_wedge ,support ,sheet_metal ,door locked_,door ,trapdoor red_,lamp green_,lamp blue_,lamp yellow_,lamp".split(" ").map(x => x.split(",")) + +var createdeco_materials = "brass iron copper industrial_iron zinc".split(" ") + +var handcrafted_woods = "acacia birch bamboo cherry crimson dark_oak jungle mangrove oak spruce warped".split(" ") + +var handcrafted_fabrics = "couch fancy_bed".split(" ") + +var colors = "white light_gray gray black brown red orange yellow lime green cyan light_blue blue purple magenta pink".split(" ") + +var createframed_shapes = ",framed_glass_door ,framed_glass_trapdoor ,tiled_glass ,tiled_glass_pane ,framed_glass ,framed_glass_pane horizontal_,framed_glass horizontal_,framed_glass_pane vertical_,framed_glass vertical_,framed_glass_pane".split(" ").map(x => x.split(",")) + +var metals = [] +var fabrics = [] +var glass = [] + +locometal_colors.forEach(color => { + locometal_types.forEach(type => { + metals.push(`railways:${color}${type}`) + }) +}) + +copper_sets.forEach(set => { + copper_oxidations.forEach(oxidation => { + copper_states.forEach(state => { + copper_types.forEach(type => { + metals.push(`create:${state}${oxidation}copper_${set}${type}`) + }) + }) + }) +}) + +dd_metal_materials.forEach(material => { + dd_metal_types.forEach(type => { + dd_metal_shapes.forEach(shape => { + metals.push(`create_dd:${material}_${type}_${shape}`) + }) + }) +}) + +cbc_materials.forEach(material => { + cbc_shapes.forEach(shape => { + metals.push(`createbigcannons:${shape[0]}${material}_${shape[1]}`) + }) +}) + +createcasing_block_materials.forEach(material => { + createcasing_block_shapes.forEach(shape => { + metals.push(`createcasing:${material}_${shape}`) + }) +}) +createcasing_casing_materials.forEach(material => { + createcasing_casing_shapes.forEach(shape => { + metals.push(`createcasing:${material}_${shape}`) + }) +}) + +createdeco_materials.forEach(material => { + createdeco_shapes.forEach(shape => { + metals.push(`createdeco:${shape[0]}${material}_${shape[1]}`) + }) +}) + +handcrafted_fabrics.forEach(shape => { + handcrafted_woods.forEach(wood => { + fabrics.push(`handcrafted:${wood}_${shape}`) + }) +}) + +colors.forEach(color => { + fabrics.push(`create:${color}_seat`) + fabrics.push(`interiors:${color}_chair`) + fabrics.push(`interiors:${color}_floor_chair`) +}) + +colors.forEach(color => { + createframed_shapes.forEach(shape => { + glass.push(`createframed:${shape[0]}${color}_stained_${shape[1]}`) + }) +}) + +console.log(`\x1b[36mmetal = \x1b[0m${metals.join(" ")}\n\n\x1b[36mfabric = \x1b[0m${fabrics.join(" ")}\n\n\x1b[36mglass = \x1b[0m${glass.join(" ")}`) \ No newline at end of file diff --git a/shaders/block.manual.properties b/shaders/block.manual.properties new file mode 100644 index 00000000..ad06dfed --- /dev/null +++ b/shaders/block.manual.properties @@ -0,0 +1,80 @@ +# MakeUp - block.properties + +#if MC_VERSION >= 11300 + + # GRASS LIKE ENTITIES + block.10031 = minecraft:cherry_sapling minecraft:torchflower minecraft:short_grass minecraft:grass minecraft:fern minecraft:seagrass biomesoplenty:dune_grass biomesoplenty:dead_grass biomesoplenty:desert_grass biomesoplenty:sprout biomesoplenty:bush environmental:mycelium_sprouts upgrade_aquatic:blue_pickerelweed upgrade_aquatic:purple_pickerelweed byg:beach_grass byg:clover_patch byg:flower_patch byg:horseweed byg:leaf_pile byg:prairie_grass byg:reeds byg:short_beach_grass byg:short_grass byg:tall_prairie_grass byg:weed_grass byg:wilted_grass byg:winter_grass ecotones:clover ecotones:reeds ecotones:sandy_grass ecotones:short_grass terrestria:cattail terrestria:dead_grass terrestria:sakura_leaf_pile terrestria:tall_cattail wildworld:acacia_leaf_pile wildworld:birch_leaf_pile wildworld:dark_oak_leaf_pile wildworld:jungle_leaf_pile wildworld:oak_leaf_pile wildworld:spruce_leaf_pile biomesoplenty:bush minecraft:nether_sprouts minecraft:warped_roots minecraft:crimson_roots projectvibrantjourneys:beach_grass projectvibrantjourneys:short_grass minecraft:oak_sapling minecraft:spruce_sapling minecraft:birch_sapling minecraft:jungle_sapling minecraft:acacia_sapling minecraft:dark_oak_sapling minecraft:dead_bush minecraft:dandelion minecraft:poppy minecraft:blue_orchid minecraft:allium minecraft:azure_bluet minecraft:red_tulip minecraft:orange_tulip minecraft:white_tulip minecraft:pink_tulip minecraft:oxeye_daisy minecraft:cornflower minecraft:lily_of_the_valley minecraft:wither_rose minecraft:sweet_berry_bush biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom atmospheric:rosewood_sapling atmospheric:morado_sapling atmospheric:yucca_sapling atmospheric:kousa_sapling atmospheric:aspen_sapling atmospheric:grimwood_sapling atmospheric:warm_monkey_brush atmospheric:hot_monkey_brush atmospheric:scalding_monkey_brush atmospheric:yucca_flower atmospheric:gilia autumnity:red_maple_sapling autumnity:orange_maple_sapling autumnity:yellow_maple_sapling autumnity:maple_sapling autumnity:autumn_crocus earthmobsmod:buttercup environmental:willow_sapling environmental:cherry_sapling environmental:pink_wisteria_sapling environmental:blue_wisteria_sapling environmental:purple_wisteria_sapling environmental:white_wisteria_sapling farmersdelight:wild_cabbages farmersdelight:wild_onions farmersdelight:wild_tomatoes farmersdelight:wild_carrots farmersdelight:wild_potatoes farmersdelight:wild_beetroots neapolitan:small_banana_frond neapolitan:banana_frond neapolitan:large_banana_frond upgrade_aquatic:river_sapling upgrade_aquatic:beachgrass upgrade_aquatic:white_searocket upgrade_aquatic:pink_searocket environmental:cattail environmental:cartwheel environmental:bluebell environmental:violet environmental:dianthus environmental:red_lotus_flower environmental:white_lotus_flower environmental:yellow_hibiscus environmental:orange_hibiscus environmental:red_hibiscus environmental:pink_hibiscus environmental:magenta_hibiscus environmental:purple_hibiscus buzzier_bees:buttercup buzzier_bees:white_clover buzzier_bees:pink_clover neapolitan:strawberry_pips biomesoplenty:origin_sapling biomesoplenty:flowering_oak_sapling biomesoplenty:rainbow_birch_sapling biomesoplenty:yellow_autumn_sapling biomesoplenty:orange_autumn_sapling biomesoplenty:maple_sapling biomesoplenty:fir_sapling biomesoplenty:redwood_sapling biomesoplenty:white_cherry_sapling biomesoplenty:pink_cherry_sapling biomesoplenty:mahogany_sapling biomesoplenty:jacaranda_sapling biomesoplenty:palm_sapling biomesoplenty:willow_sapling biomesoplenty:dead_sapling biomesoplenty:magic_sapling biomesoplenty:umbran_sapling biomesoplenty:hellbark_sapling astralsorcery:glow_flower botania:white_mystical_flower botania:gray_mystical_flower botania:orange_mystical_flower botania:magenta_mystical_flower botania:light_blue_mystical_flower botania:light_gray_mystical_flower botania:yellow_mystical_flower botania:lime_mystical_flower botania:pink_mystical_flower botania:cyan_mystical_flower botania:purple_mystical_flower botania:blue_mystical_flower botania:brown_mystical_flower botania:green_mystical_flower botania:red_mystical_flower botania:black_mystical_flower botania:white_mushroom botania:orange_mushroom botania:magenta_mushroom botania:light_blue_mushroom botania:yellow_mushroom botania:lime_mushroom botania:pink_mushroom botania:gray_mushroom botania:light_gray_mushroom botania:cyan_mushroom botania:purple_mushroom botania:blue_mushroom botania:brown_mushroom botania:green_mushroom botania:red_mushroom botania:black_mushroom botania:hydroangeas botania:manastar botania:pure_daisy botania:endoflame botania:thermalily botania:rosa_arcana botania:munchdew botania:entropinnyum botania:kekimurus botania:gourmaryllis botania:narslimmus botania:spectrolus botania:dandelifeon botania:rafflowsia botania:shulk_me_not botania:bellethorn botania:bellethorn_chibi botania:bergamute botania:dreadthorn botania:heisei_dream botania:tigerseye botania:jaded_amaranthus botania:orechid botania:fallen_kanade botania:exoflame botania:agricarnation botania:agricarnation_chibi botania:hopperhock botania:hopperhock_chibi botania:tangleberrie botania:jiyuulia botania:rannuncarpus botania:rannuncarpus_chibi botania:hyacidus botania:pollidisiac botania:clayconia botania:clayconia_chibi botania:loonium botania:daffomill botania:vinculotus botania:spectranthemum botania:medumone botania:marimorphosis botania:marimorphosis_chibi botania:bubbell botania:bubbell_chibi botania:solegnolia botania:solegnolia_chibi botania:orechid_ignem terrestria:tiny_cactus pamhc2trees:apple_sapling pamhc2trees:avocado_sapling pamhc2trees:candlenut_sapling pamhc2trees:cherry_sapling pamhc2trees:chestnut_sapling pamhc2trees:gooseberry_sapling pamhc2trees:lemon_sapling pamhc2trees:nutmeg_sapling pamhc2trees:orange_sapling pamhc2trees:peach_sapling pamhc2trees:pear_sapling pamhc2trees:plum_sapling pamhc2trees:walnut_sapling pamhc2trees:spiderweb_sapling pamhc2trees:hazelnut_sapling pamhc2trees:pawpaw_sapling pamhc2trees:soursop_sapling pamhc2trees:almond_sapling pamhc2trees:apricot_sapling pamhc2trees:banana_sapling pamhc2trees:cashew_sapling pamhc2trees:cinnamon_sapling pamhc2trees:coconut_sapling pamhc2trees:date_sapling pamhc2trees:dragonfruit_sapling pamhc2trees:durian_sapling pamhc2trees:fig_sapling pamhc2trees:grapefruit_sapling pamhc2trees:lime_sapling pamhc2trees:mango_sapling pamhc2trees:olive_sapling pamhc2trees:papaya_sapling pamhc2trees:paperbark_sapling pamhc2trees:pecan_sapling pamhc2trees:peppercorn_sapling pamhc2trees:persimmon_sapling pamhc2trees:pistachio_sapling pamhc2trees:pomegranate_sapling pamhc2trees:starfruit_sapling pamhc2trees:vanillabean_sapling pamhc2trees:breadfruit_sapling pamhc2trees:guava_sapling pamhc2trees:jackfruit_sapling pamhc2trees:lychee_sapling pamhc2trees:passionfruit_sapling pamhc2trees:rambutan_sapling pamhc2trees:tamarind_sapling pamhc2trees:maple_sapling pamhc2trees:pinenut_sapling byg:purple_bulbis_anomaly byg:blue_bulbis_anomaly byg:embur_wart byg:cryptic_bramble biomesoplenty:glowshroom biomesoplenty:toadstool biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom biomesoplenty:mangrove_root biomesoplenty:reed biomesoplenty:sprout biomesoplenty:bush pamhc2crops:aridgarden pamhc2crops:frostgarden pamhc2crops:shadedgarden pamhc2crops:soggygarden pamhc2crops:tropicalgarden pamhc2crops:windygarden pamhc2crops:pamamaranthcrop pamhc2crops:pambarleycrop pamhc2crops:pambeancrop pamhc2crops:pamchickpeacrop pamhc2crops:pamcorncrop pamhc2crops:pamlentilcrop pamhc2crops:pammilletcrop pamhc2crops:pamoatcrop pamhc2crops:pamquinoacrop pamhc2crops:pamricecrop pamhc2crops:pamryecrop pamhc2crops:pamsoybeancrops pamhc2crops:pamcottoncrop pamhc2crops:pamflaxcrop pamhc2crops:pamkenafcrop pamhc2crops:pamjutecrop pamhc2crops:pamsisalcrop pamhc2crops:pamartichokecrop pamhc2crops:pamasparaguscrop pamhc2crops:pambellpeppercrop pamhc2crops:pambroccolicrop pamhc2crops:pambrusselsproutcrop pamhc2crops:pamcabbagecrop pamhc2crops:pamcauliflowercrop pamhc2crops:pamcelerycrop pamhc2crops:pamchilipeppercrop pamhc2crops:pamcucumbercrop pamhc2crops:pameggplantcrop pamhc2crops:pamkalecrops pamhc2crops:pamlettucecrop pamhc2crops:pamokracrop pamhc2crops:pampeascrop pamhc2crops:pamspinachcrop pamhc2crops:pamtomatillocrop pamhc2crops:pamtomatocrop pamhc2crops:pamwintersquashcrop pamhc2crops:pamzucchinicrop pamhc2crops:pamarrowrootcrop pamhc2crops:pamcassavacrop pamhc2crops:pamgarliccrop pamhc2crops:pamjicamacrop pamhc2crops:pamleekcrop pamhc2crops:pamkohlrabicrop pamhc2crops:pamonioncrop pamhc2crops:pamparsnipcrop pamhc2crops:pampeanutcrop pamhc2crops:pamradishcrop pamhc2crops:pamrhubarbcrop pamhc2crops:pamrutabagacrop pamhc2crops:pamscallioncrop pamhc2crops:pamsweetpotatocrop pamhc2crops:pamtarocrop pamhc2crops:pamturnipcrop pamhc2crops:pamwaterchestnutcrop pamhc2crops:pamblackberrycrop pamhc2crops:pamblueberrycrop pamhc2crops:pamcactusfruitcrop pamhc2crops:pamcandleberrycrop pamhc2crops:pamcantaloupecrop pamhc2crops:pamcranberrycrop pamhc2crops:pamelderberrycrop pamhc2crops:pamgrapecrop pamhc2crops:pamgreengrapecrop pamhc2crops:pamhuckleberrycrop pamhc2crops:pamjuniperberrycrop pamhc2crops:pamkiwicrop pamhc2crops:pammullberrycrop pamhc2crops:pampineapplecrop pamhc2crops:pamraspberrycrop pamhc2crops:pamstrawberrycrop pamhc2crops:pamcoffeebeancrop pamhc2crops:pamtealeafcrop pamhc2crops:pamagavecrop pamhc2crops:pamwhitemushroomcrop pamhc2crops:pamgingercrop pamhc2crops:pamsesamecrop pamhc2crops:pamspiceleafcrop pamhc2crops:pammustardcrop byg:lament_sprouts byg:synthian_fungus byg:blue_glowcane byg:pink_glowcane byg:purple_glowcane byg:red_glowcane byg:warped_bush byg:blue_glowshroom byg:purple_glowshroom byg:scorched_bush byg:soul_shroom byg:soul_shroom_spore_end byg:death_cap byg:weeping_roots byg:nether_bristle byg:synthian_sprout byg:synthian_roots byg:hanging_synthian_roots byg:embur_sprouts byg:embur_roots byg:ivis_roots byg:ivis_sprout byg:bulbis_sprouts byg:ether_bush byg:thereal_bellflower byg:nightshade_sprouts byg:nightshade_roots byg:oddity_bush byg:shulkren_fungus byg:vermillion_sculk_tendrils byg:vermillion_sculk_growth byg:green_mushroom byg:weeping_milkcap byg:wood_blewit byg:black_puff byg:crimson_berry_bush byg:blueberry_bush byg:nightshade_berry_bush byg:winter_succulent byg:allium_flower_bush byg:alpine_bellflower byg:amaranth byg:angelica byg:begonia byg:bistort byg:black_rose byg:blue_sage byg:california_poppy byg:crocus byg:cyan_amaranth byg:cyan_rose byg:cyan_tulip byg:daffodil byg:fairy_slipper byg:firecracker_flower_bush byg:green_tulip byg:guzmania byg:incan_lily byg:iris byg:kovan_flower byg:lazarus_bellflower byg:lolipop_flower byg:magenta_amaranth byg:magenta_tulip byg:orange_amaranth byg:orange_daisy byg:osiria_rose byg:peach_leather_flower byg:pink_allium byg:pink_allium_flower_bush byg:pink_anemone byg:pink_daffodil byg:pink_orchid byg:protea_flower byg:purple_amaranth byg:purple_orchid byg:purple_sage byg:purple_tulip byg:red_cornflower byg:red_orchid byg:richea byg:rose byg:snowdrops byg:silver_vase_flower byg:torch_ginger byg:violet_leather_flower byg:white_anemone byg:white_sage byg:white_cyclamen byg:winter_rose byg:winter_scilla byg:yellow_daffodil byg:yellow_tulip byg:horseweed byg:winter_cyclamen cutecore:cherry_leaf_litter cutecore:cherry_wood_sapling cutecore:wisteria_sapling cutecore:wisteria_leaf_litter cutecore:lemon_leaf_litter cutecore:lemon_sapling cutecore:hyacinth cutecore:lotus_flower cutecore:violets cutecore:pink_rose cutecore:white_rose cutecore:rose cutecore:forget_me_nots cutecore:pink_carnation cutecore:red_carnation cutecore:white_carnation forbidden_arcanus:yellow_orchid forbidden_arcanus:golden_orchid immersiveengineering:hemp:growth=bottom0 immersiveengineering:hemp:growth=bottom1 immersiveengineering:hemp:growth=bottom2 immersiveengineering:hemp:growth=bottom3 simplefarming:apple_sapling simplefarming:apricot_sapling simplefarming:banana_sapling simplefarming:cherry_sapling simplefarming:mango_sapling simplefarming:olive_sapling simplefarming:orange_sapling simplefarming:pear_sapling simplefarming:plum_sapling simplefarming:barley_crop simplefarming:cassava_crop simplefarming:corn_crop simplefarming:cotton_crop simplefarming:cross_crop simplefarming:cucumber_crop simplefarming:cumin_plant simplefarming:eggplant_crop simplefarming:ginger_crop simplefarming:honeydew_crop simplefarming:kenaf_crop simplefarming:lettuce_crop simplefarming:oat_crop simplefarming:onion_crop simplefarming:pea_crop simplefarming:peanut_crop simplefarming:pepper_crop simplefarming:quinoa_plant simplefarming:radish_crop simplefarming:rice_crop simplefarming:rye_crop simplefarming:scrop simplefarming:hcrop simplefarming:marshmallow_crop simplefarming:sunflower_plant simplefarming:sorghum_crop simplefarming:soybean_crop simplefarming:spinach_crop simplefarming:sweet_potato_crop simplefarming:tomato_crop simplefarming:turnip_crop simplefarming:wild_crop simplefarming:yam_crop simplefarming:zucchini_crop byg:aspen_sapling byg:baobab_sapling byg:blue_enchanted_sapling byg:green_enchanted_sapling byg:pink_cherry_sapling byg:white_cherry_sapling byg:cika_sapling byg:cypress_sapling byg:ebony_sapling byg:ether_sapling byg:fir_sapling byg:aspen_sapling byg:holly_berry_sapling byg:holly_sapling byg:jacaranda_sapling byg:flowering_jacaranda_sapling byg:indigo_jacaranda_sapling byg:indigo_flowering_jacaranda_sapling byg:lament_sapling byg:mahogany_sapling byg:mangrove_sapling byg:maple_sapling byg:red_maple_sapling byg:silver_maple_sapling byg:nightshade_sapling byg:flowering_nightshade_sapling byg:palm_sapling byg:palo_verde_sapling byg:flowering_palo_verde_sapling byg:pine_sapling byg:rainbow_eucalyptus_sapling byg:redwood_sapling byg:pine_sapling byg:skyris_sapling byg:green_apple_skyris_sapling byg:willow_sapling byg:witch_hazel_sapling byg:blooming_witch_hazel_sapling byg:zelkova_sapling byg:withering_oak_sapling byg:araucaria_sapling byg:blue_spruce_sapling byg:brown_birch_sapling byg:brown_oak_sapling byg:zelkova_sapling byg:brown_zelkova_sapling byg:joshua_sapling byg:ripe_joshua_sapling byg:orange_birch_sapling byg:orange_oak_sapling byg:orange_spruce_sapling byg:orchard_sapling byg:flowering_orchard_sapling byg:ripe_orchard_sapling byg:red_birch_sapling byg:red_oak_sapling byg:red_spruce_sapling byg:yellow_birch_sapling byg:yellow_spruce_sapling byg:green_mushroom occultism:otherworld_sapling_natural occultism:otherworld_sapling integrateddynamics:menril_sapling projectvibrantjourneys:glowcap projectvibrantjourneys:crimson_nettle projectvibrantjourneys:warped_nettle twilightforest:mayapple deeperdarker:echo_sapling create_dd:rubber_sapling vegandelight:wild_soybean + + # CROPS LIKE ENTITIES + block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots farmersdelight:cabbages farmersdelight:budding_tomatoes farmersdelight:onions vegandelight:soybean_crop + + # LOWER-HALF ENTITIES + block.10175 = minecraft:pitcher_plant:half=lower minecraft:sunflower:half=lower minecraft:lilac:half=lower minecraft:tall_grass:half=lower minecraft:large_fern:half=lower minecraft:rose_bush:half=lower minecraft:peony:half=lower minecraft:tall_seagrass:half=lower atmospheric:water_hyacinth:half=lower atmospheric:tall_yucca_flower:half=lower environmental:tall_cattail:half=lower environmental:pink_delphinium:half=lower environmental:blue_delphinium:half=lower environmental:purple_delphinium:half=lower environmental:white_delphinium:half=lower environmental:bird_of_paradise:half=lower environmental:giant_tall_grass:half=lower farmersdelight:wild_rice:half=lower upgrade_aquatic:flowering_rush:half=lower upgrade_aquatic:tall_beachgrass:half=lower upgrade_aquatic:tall_blue_pickerelweed:half=lower upgrade_aquatic:tall_purple_pickerelweed:half=lower biomesoplenty:barley:half=lower biomesoplenty:goldenrod:half=lower biomesoplenty:blue_hydrangea:half=lower biomesoplenty:watergrass:half=lower botania:white_double_flower:half=lower botania:orange_double_flower:half=lower botania:magenta_double_flower:half=lower botania:light_blue_double_flower:half=lower botania:yellow_double_flower:half=lower botania:lime_double_flower:half=lower botania:pink_double_flower:half=lower botania:gray_double_flower:half=lower botania:light_gray_double_flower:half=lower botania:cyan_double_flower:half=lower botania:purple_double_flower:half=lower botania:blue_double_flower:half=lower botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=lower biomesoplenty:reed:half=lower biomesoplenty:cattail:half=lower byg:tall_crimson_roots:half=lower byg:tall_ether_grass:half=lower byg:reeds:half=lower byg:tall_prairie_grass:half=lower byg:tall_allium:half=lower byg:azalea:half=lower byg:tall_pink_allium:half=lower moreflowerbushes:purple_hibiscus:half=lower moreflowerbushes:mountain_laurel:half=lower moreflowerbushes:larkspur:half=lower moreflowerbushes:golden_shower:half=lower moreflowerbushes:fuchsia:half=lower moreflowerbushes:butterfly_weed:half=lower moreflowerbushes:blue_sage:half=lower moreflowerbushes:blue_hortensia:half=lower byg:japanese_orchid:half=lower byg:delphinium:half=lower byg:foxglove:half=lower cutecore:pink_rosebush:half=lower cutecore:white_rosebush:half=lower cutecore:pink_hydrangeas:half=lower cutecore:blue_hydrangeas:half=lower cutecore:purple_hydrangeas:half=lower farmersdelight:rice create_bic_bit:sunflowerstem:half=lower + + # UPPER-HALF ENTITIES + block.10176 = minecraft:pitcher_plant:half=upper minecraft:sunflower:half=upper minecraft:lilac:half=upper minecraft:tall_grass:half=upper minecraft:large_fern:half=upper minecraft:rose_bush:half=upper minecraft:peony:half=upper minecraft:tall_seagrass:half=upper atmospheric:water_hyacinth:half=upper atmospheric:tall_yucca_flower:half=upper environmental:tall_cattail:half=upper environmental:pink_delphinium:half=upper environmental:blue_delphinium:half=upper environmental:purple_delphinium:half=upper environmental:white_delphinium:half=upper environmental:bird_of_paradise:half=upper environmental:giant_tall_grass:half=upper farmersdelight:wild_rice:half=upper upgrade_aquatic:flowering_rush:half=upper upgrade_aquatic:tall_beachgrass:half=upper upgrade_aquatic:tall_blue_pickerelweed:half=upper upgrade_aquatic:tall_purple_pickerelweed:half=upper biomesoplenty:barley:half=upper biomesoplenty:goldenrod:half=upper biomesoplenty:blue_hydrangea:half=upper biomesoplenty:watergrass:half=upper botania:white_double_flower:half=upper botania:orange_double_flower:half=upper botania:magenta_double_flower:half=upper botania:light_blue_double_flower:half=upper botania:yellow_double_flower:half=upper botania:lime_double_flower:half=upper botania:pink_double_flower:half=upper botania:gray_double_flower:half=upper botania:light_gray_double_flower:half=upper botania:cyan_double_flower:half=upper botania:purple_double_flower:half=upper botania:blue_double_flower:half=upper botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=upper biomesoplenty:reed:half=upper biomesoplenty:cattail:half=upper byg:tall_crimson_roots:half=upper byg:tall_ether_grass:half=upper byg:reeds:half=upper byg:tall_prairie_grass:half=upper byg:tall_allium:half=upper byg:azalea:half=upper byg:tall_pink_allium:half=upper moreflowerbushes:purple_hibiscus:half=upper moreflowerbushes:mountain_laurel:half=upper moreflowerbushes:larkspur:half=upper moreflowerbushes:golden_shower:half=upper moreflowerbushes:fuchsia:half=upper moreflowerbushes:butterfly_weed:half=upper moreflowerbushes:blue_sage:half=upper moreflowerbushes:blue_hortensia:half=upper byg:japanese_orchid:half=upper byg:delphinium:half=upper byg:foxglove:half=upper cutecore:pink_rosebush:half=upper cutecore:white_rosebush:half=upper cutecore:pink_hydrangeas:half=upper cutecore:blue_hydrangeas:half=upper cutecore:purple_hydrangeas:half=upper farmersdelight:rice_panicles create_bic_bit:sunflowerstem:half=upper + + # LEAVES + block.10018 = minecraft:cherry_leaves minecraft:oak_leaves minecraft:spruce_leaves minecraft:birch_leaves minecraft:jungle_leaves minecraft:acacia_leaves minecraft:dark_oak_leaves minecraft:pale_oak_leaves minecraft:azalea_leaves minecraft:azalea_leaves_flowers minecraft:flowering_azalea_leaves minecraft:mangrove_leaves biomesoplenty:origin_leaves biomesoplenty:flowering_oak_leaves biomesoplenty:rainbow_birch_leaves biomesoplenty:yellow_autumn_leaves biomesoplenty:orange_autumn_leaves biomesoplenty:maple_leaves biomesoplenty:fir_leaves biomesoplenty:redwood_leaves biomesoplenty:mahogany_leaves biomesoplenty:palm_leaves biomesoplenty:willow_leaves biomesoplenty:dead_leaves biomesoplenty:magic_leaves biomesoplenty:umbran_leaves biomesoplenty:hellbark_leaves biomesoplenty:pink_cherry_leaves biomesoplenty:white_cherry_leaves biomesoplenty:jacaranda_leaves quark:blue_blossom_leaves quark:lavender_blossom_leaves quark:orange_blossom_leaves quark:pink_blossom_leaves quark:yellow_blossom_leaves atmospheric:rosewood_leaves atmospheric:morado_leaves atmospheric:flowering_morado_leaves atmospheric:yucca_leaves atmospheric:kousa_leaves atmospheric:aspen_leaves atmospheric:grimwood_leaves autumnity:red_maple_leaves autumnity:orange_maple_leaves autumnity:yellow_maple_leaves autumnity:maple_leaves environmental:willow_leaves environmental:cherry_leaves environmental:pink_wisteria_leaves environmental:blue_wisteria_leaves environmental:purple_wisteria_leaves environmental:white_wisteria_leaves environmental:pink_hanging_wisteria_leaves environmental:blue_hanging_wisteria_leaves environmental:purple_hanging_wisteria_leaves environmental:white_hanging_wisteria_leaves environmental:hanging_willow_leaves upgrade_aquatic:river_leaves byg:aspen_leaves byg:araucaria_leaves byg:baobab_leaves byg:blooming_witch_hazel_leaves byg:blue_enchanted_leaves byg:blue_spruce_leaves byg:brown_birch_leaves byg:brown_oak_leaves byg:brown_zelkova_leaves byg:cika_leaves byg:cypress_leaves byg:ebony_leaves byg:fir_leaves byg:flowering_orchard_leaves byg:flowering_nightshade_leaves byg:flowering_palo_verde_leaves byg:green_apple_skyris_leaves byg:green_enchanted_leaves byg:holly_berry_leaves byg:holly_leaves byg:indigo_jacaranda_leaves byg:jacaranda_leaves byg:joshua_leaves byg:mahogany_leaves byg:mangrove_leaves byg:maple_leaves byg:orange_birch_leaves byg:orange_oak_leaves byg:orange_spruce_leaves byg:orchard_leaves byg:palo_verde_leaves byg:pine_leaves byg:pink_cherry_leaves byg:rainbow_eucalyptus_leaves byg:red_birch_leaves byg:red_maple_leaves byg:red_oak_leaves byg:red_spruce_leaves byg:redwood_leaves byg:ripe_joshua_leaves byg:ripe_orchard_leaves byg:silver_maple_leaves byg:skyris_leaves byg:white_cherry_leaves byg:willow_leaves byg:witch_hazel_leaves byg:yellow_birch_leaves byg:yellow_spruce_leaves byg:zelkova_leaves ecotones:hazel_leaves sakurarosea:alt_sakura_leaves sakurarosea:sakura_leaves sakurarosea:white_sakura_leaves terrestria:cypress_leaves terrestria:dark_japanese_maple_leaves terrestria:hemlock_leaves terrestria:japanese_maple_leaves terrestria:japanese_maple_shrub_leaves terrestria:jungle_palm_leaves terrestria:rainbow_eucalyptus_leaves terrestria:redwood_leaves terrestria:rubber_leaves terrestria:sakura_leaves terrestria:willow_leaves terrestria:yucca_palm_leaves traverse:brown_autumnal_leaves traverse:fir_leaves traverse:orange_autumnal_leaves traverse:red_autumnal_leaves traverse:yellow_autumnal_leaves vanillaenhanced:redwood_leaves wild_explorer:autumn_oak_leaves wild_explorer:autumn_birch_leaves wild_explorer:pink_cherry_oak_leaves wild_explorer:white_cherry_oak_leaves wild_explorer:palm_leaves cutecore:cherry_wood_leaves cutecore:cherry_wood_leaves_fruit cutecore:wisteria_leaves cutecore:lemon_leaves cutecore:lemon_leaves_fruiting dynamictrees:jungle_leaves dynamictrees:oak_leaves dynamictrees:spruce_leaves dynamictrees:dark_oak_leaves dynamictrees:acacia_leaves dynamictrees:birch_leaves simplefarming:apple_leaves simplefarming:apricot_leaves simplefarming:banana_leaves simplefarming:cherry_leaves simplefarming:mango_leaves simplefarming:olive_leaves simplefarming:orange_leaves simplefarming:pear_leaves simplefarming:plum_leaves mythicbotany:dreamwood_leaves undergarden:smogstem_leaves undergarden:wigglewood_leaves occultism:otherworld_leaves occultism:otherworld_leaves_natural integrateddynamics:menril_leaves extlights:xmas_leaves extlights:xmas_leaves_bulb extlights:xmas_leaves_bulb_red extlights:xmas_leaves_bulb_green extlights:xmas_leaves_bulb_blue extlights:xmas_leaves_bulb_blinking_redgreen extlights:xmas_leaves_bulb_blinking_redblue extlights:xmas_leaves_bulb_blinking_greenblue extlights:xmas_leaves_bulb_blinking_rgb extlights:xmas_leaves_bulb_smooth_redgreen extlights:xmas_leaves_bulb_smooth_redblue extlights:xmas_leaves_bulb_smooth_greenblue extlights:xmas_leaves_bulb_smooth_rgb techreborn:rubber_leaves blockus:legacy_leaves blockus:white_oak_leaves architects_palette:twisted_leaves twilightforest:twilight_oak_leaves twilightforest:canopy_leaves twilightforest:mangrove_leaves twilightforest:dark_leaves twilightforest:time_leaves twilightforest:transformation_leaves twilightforest:mining_leaves twilightforest:sorting_leaves twilightforest:giant_leaves twilightforest:thorn_leaves tfc:wood/leaves/acacia tfc:wood/leaves/ash tfc:wood/leaves/aspen tfc:wood/leaves/birch tfc:wood/leaves/blackwood tfc:wood/leaves/chestnut tfc:wood/leaves/douglas_fir tfc:wood/leaves/hickory tfc:wood/leaves/kapok tfc:wood/leaves/mangrove tfc:wood/leaves/maple tfc:wood/leaves/oak tfc:wood/leaves/palm tfc:wood/leaves/pine tfc:wood/leaves/rosewood tfc:wood/leaves/sequoia tfc:wood/leaves/spruce tfc:wood/leaves/sycamore tfc:wood/leaves/white_cedar tfc:wood/leaves/willow tfc:plant/cherry_leaves tfc:plant/green_apple_leaves tfc:plant/lemon_leaves tfc:plant/olive_leaves tfc:plant/orange_leaves tfc:plant/peach_leaves tfc:plant/plum_leaves tfc:plant/red_apple_leaves deeperdarker:echo_leaves create_dd:rubber_leaves + + # NO-WAVEABLE SMALL ELEMENTS + block.10032 = sugar_cane tube_coral brain_coral fire_coral bubble_coral horn_coral dead_tube_coral dead_brain_coral dead_fire_coral dead_bubble_coral dead_horn_coral tube_coral_fan brain_coral_fan fire_coral_fan bubble_coral_fan horn_coral_fan dead_tube_coral_fan dead_brain_coral_fan dead_fire_coral_fan dead_bubble_coral_fan dead_horn_coral_fan nether_wart tfc:plant/athyrium_fern tfc:plant/canna tfc:plant/goldenrod tfc:plant/pampas_grass tfc:plant/perovskia tfc:plant/rose tfc:plant/beachgrass tfc:plant/bluegrass tfc:plant/bromegrass tfc:plant/fountain_grass tfc:plant/manatee_grass tfc:plant/orchard_grass tfc:plant/ryegrass tfc:plant/scutch_grass tfc:plant/star_grass tfc:plant/timothy_grass tfc:plant/raddia_grass tfc:plant/allium tfc:plant/anthurium tfc:plant/arrowhead tfc:plant/badderlocks tfc:plant/barrel_cactus tfc:plant/blood_lily tfc:plant/blue_ginger tfc:plant/blue_orchid tfc:plant/bur_reed tfc:plant/butterfly_milkweed tfc:plant/black_orchid tfc:plant/calendula tfc:plant/cattail tfc:plant/cobblestone_lichen tfc:plant/coontail tfc:plant/cordgrass tfc:plant/dandelion tfc:plant/dead_bush tfc:plant/desert_flame tfc:plant/duckweed tfc:plant/eel_grass tfc:plant/field_horsetail tfc:plant/foxglove tfc:plant/grape_hyacinth tfc:plant/green_algae tfc:plant/gutweed tfc:plant/guzmania tfc:plant/heliconia tfc:plant/heather tfc:plant/hibiscus tfc:plant/houstonia tfc:plant/kangaroo_paw tfc:plant/king_fern tfc:plant/labrador_tea tfc:plant/lady_fern tfc:plant/laminaria tfc:plant/licorice_fern tfc:plant/artists_conk tfc:plant/lily_of_the_valley tfc:plant/lilac tfc:plant/lotus tfc:plant/maiden_pink tfc:plant/marigold tfc:plant/meads_milkweed tfc:plant/milfoil tfc:plant/morning_glory tfc:plant/philodendron tfc:plant/moss tfc:plant/nasturtium tfc:plant/ostrich_fern tfc:plant/oxeye_daisy tfc:plant/phragmite tfc:plant/pickerelweed tfc:plant/pistia tfc:plant/poppy tfc:plant/primrose tfc:plant/pulsatilla tfc:plant/red_algae tfc:plant/reindeer_lichen tfc:plant/red_sealing_wax_palm tfc:plant/sacred_datura tfc:plant/sagebrush tfc:plant/sago tfc:plant/saguaro_fruit tfc:plant/sapphire_tower tfc:plant/sargassum tfc:plant/sea_lavender tfc:plant/sea_palm tfc:plant/silver_spurflower tfc:plant/snapdragon_pink tfc:plant/snapdragon_red tfc:plant/snapdragon_white tfc:plant/snapdragon_yellow tfc:plant/strelitzia tfc:plant/switchgrass tfc:plant/sword_fern tfc:plant/tall_fescue_grass tfc:plant/toquilla_palm tfc:plant/trillium tfc:plant/tropical_milkweed tfc:plant/tulip_orange tfc:plant/tulip_pink tfc:plant/tulip_red tfc:plant/tulip_white tfc:plant/turtle_grass tfc:plant/vriesea tfc:plant/water_canna tfc:plant/white_water_lily tfc:plant/purple_water_lily tfc:plant/yellow_water_lily tfc:plant/water_taro tfc:plant/yucca tfc:plant/hanging_vines_plant tfc:plant/hanging_vines tfc:plant/spanish_moss_plant tfc:plant/spanish_moss tfc:plant/liana_plant tfc:plant/liana tfc:plant/tree_fern_plant tfc:plant/tree_fern tfc:plant/arundo_plant tfc:plant/arundo tfc:plant/dry_phragmite_plant tfc:plant/dry_phragmite tfc:plant/winged_kelp_plant tfc:plant/winged_kelp tfc:plant/leafy_kelp_plant tfc:plant/leafy_kelp tfc:plant/giant_kelp_plant tfc:plant/giant_kelp_flower tfc:plant/ivy tfc:plant/jungle_vines tfc:plant/saguaro_plant tfc:plant/saguaro tfc:plant/golden_bamboo tfc:plant/golden_bamboo_sapling tfc:wild_crop/barley tfc:wild_crop/oat tfc:wild_crop/rye tfc:wild_crop/maize tfc:wild_crop/wheat tfc:wild_crop/rice tfc:wild_crop/beet tfc:wild_crop/cabbage tfc:wild_crop/carrot tfc:wild_crop/garlic tfc:wild_crop/green_bean tfc:wild_crop/potato tfc:wild_crop/onion tfc:wild_crop/soybean tfc:wild_crop/squash tfc:wild_crop/sugarcane tfc:wild_crop/tomato tfc:wild_crop/jute tfc:wild_crop/papyrus tfc:wild_crop/pumpkin tfc:wild_crop/melon tfc:wild_crop/red_bell_pepper tfc:wild_crop/yellow_bell_pepper tfc:plant/snowberry_bush tfc:plant/bunchberry_bush tfc:plant/gooseberry_bush tfc:plant/cloudberry_bush tfc:plant/strawberry_bush tfc:plant/wintergreen_berry_bush tfc:plant/cranberry_bush + + # REFLECTIVE + block.10008 = minecraft:water minecraft:flowing_water subwild:water_puddle tfc:fluid/finite_fresh_water tfc:fluid/fresh_water tfc:fluid/finite_salt_water tfc:fluid/salt_water tfc:fluid/finite_river_water tfc:fluid/river_water tfc:fluid/spring_water tfc:fluid/finite_spring_water + block.10079 = ice slime_block white_stained_glass orange_stained_glass magenta_stained_glass light_blue_stained_glass yellow_stained_glass lime_stained_glass pink_stained_glass gray_stained_glass light_gray_stained_glass cyan_stained_glass purple_stained_glass blue_stained_glass brown_stained_glass green_stained_glass red_stained_glass black_stained_glass white_stained_glass_pane orange_stained_glass_pane magenta_stained_glass_pane light_blue_stained_glass_pane yellow_stained_glass_pane lime_stained_glass_pane pink_stained_glass_pane gray_stained_glass_pane light_gray_stained_glass_pane cyan_stained_glass_pane purple_stained_glass_pane blue_stained_glass_pane brown_stained_glass_pane green_stained_glass_pane red_stained_glass_pane black_stained_glass_pane tinted_glass deeperdarker:soundproof_glass create:framed_glass create:framed_glass_pane create:framed_glass_trapdoor create:framed_glass_door create:tiled_glass create:tiled_glass_pane create:horizontal_framed_glass create:horizontal_framed_glass_pane create:vertical_framed_glass create:vertical_framed_glass_pane naturalist:crimson_froglass naturalist:verdant_froglass naturalist:azure_froglass naturalist:crimson_froglass_pane naturalist:verdant_froglass_pane naturalist:azure_froglass_pane glass glass_pane create_dd:vertical_framed_split_glass create_dd:horizontal_framed_split_glass create_dd:framed_split_glass create_dd:vertical_framed_split_glass_pane create_dd:horizontal_framed_split_glass_pane create_dd:framed_split_glass_pane + + layer.translucent = create:framed_glass create:framed_glass_pane create:framed_glass_trapdoor create:framed_glass_door create:tiled_glass create:tiled_glass_pane create:horizontal_framed_glass create:horizontal_framed_glass_pane create:vertical_framed_glass create:vertical_framed_glass_pane glass glass_pane create_dd:vertical_framed_split_glass create_dd:horizontal_framed_split_glass create_dd:framed_split_glass create_dd:vertical_framed_split_glass_pane create_dd:horizontal_framed_split_glass_pane create_dd:framed_split_glass_pane + + # EMMISIVE (LIKE GLOWSTONE) + block.10089 = ochre_froglight verdant_froglight pearlescent_froglight glowstone shroomlight torch wall_torch redstone_torch redstone_wall_torch jack_o_lantern redstone_lamp lantern sea_lantern soul_lantern soul_torch soul_wall_torch cataclysm:void_lantern_block deeperdarker:sculk_gleam + + # NEW EMMISIVE + block.10090 = magma_block end_root campfire:lit=true soul_campfire:lit=true beacon betterendforge:mossy_glowshroom_hymenophore betterendforge:mossy_glowshroom_fur betterendforge:blue_vine_lantern betterendforge:blue_vine_fur betterendforge::lumecorn:shape=light_top_middle betterendforge::lumecorn:shape=light_middle betterendforge::lumecorn:shape=light_bottom betterendforge::purple_polypore betterendforge::bulb_vine:shape=bottom + + # FAKE EMMISORS + block.10213 = soul_fire + + # METAL-LIKE + block.10400 = iron_block iron_trapdoor gold_block emerald_block lapis_block diamond_block copper_block exposed_copper weathered_copper oxidized_copper cut_copper exposed_cut_copper weathered_cut_copper oxidized_cut_copper cut_copper_stairs exposed_cut_copper_stairs weathered_cut_copper_stairs oxidized_cut_copper_stairs cut_copper_slab exposed_cut_copper_slab weathered_cut_copper_slab oxidized_cut_copper_slab waxed_cut_copper_slab waxed_weathered_cut_copper_slab waxed_weathered_copper waxed_exposed_copper waxed_copper_block waxed_oxidized_cut_copper_slab waxed_weathered_cut_copper_slab waxed_exposed_cut_copper_slab waxed_cuyt_copper_slab waxed_oxidized_copper waxed_cut_copper waxed_exposed_cut_copper waxed_weathered_cut_copper waxed_oxidized_cut_copper waxed_cut_copper_stairs waxed_exposed_cut_copper_stairs waxed_weathered_cut_copper_stairs waxed_oxidized_cut_copper_stairs heavy_weighted_pressure_plate light_weighted_pressure_plate iron_bars tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top tfc:metal/anvil/bismuth_bronze tfc:metal/block/bismuth_bronze tfc:metal/bars/bismuth_bronze tfc:metal/trapdoor/bismuth_bronze tfc:metal/block/bismuth_bronze_stairs tfc:block/metal/block/bismuth_bronze_slab tfc:block/metal/block/bismuth_bronze_slab_top tfc:metal/anvil/black_bronze tfc:metal/block/black_bronze tfc:metal/bars/black_bronze tfc:metal/trapdoor/black_bronze tfc:metal/block/black_bronze_stairs tfc:block/metal/block/black_bronze_slab tfc:block/metal/block/black_bronze_slab_top tfc:metal/anvil/bronze tfc:metal/block/bronze tfc:metal/bars/bronze tfc:metal/trapdoor/bronze tfc:metal/block/bronze_stairs tfc:block/metal/block/bronze_slab tfc:block/metal/block/bronze_slab_top tfc:metal/anvil/brass tfc:metal/block/brass tfc:metal/bars/brass tfc:metal/trapdoor/brass tfc:metal/block/brass_stairs tfc:block/metal/block/brass_slab tfc:block/metal/block/brass_slab_top tfc:metal/anvil/copper tfc:metal/block/copper tfc:metal/bars/copper tfc:metal/trapdoor/copper tfc:metal/block/copper_stairs tfc:block/metal/block/copper_slab tfc:block/metal/block/copper_slab_top tfc:metal/anvil/gold tfc:metal/block/gold tfc:metal/bars/gold tfc:metal/trapdoor/gold tfc:metal/block/gold_stairs tfc:block/metal/block/gold_slab tfc:block/metal/block/gold_slab_top tfc:metal/anvil/nickel tfc:metal/block/nickel tfc:metal/bars/nickel tfc:metal/trapdoor/nickel tfc:metal/block/nickel_stairs tfc:block/metal/block/nickel_slab tfc:block/metal/block/nickel_slab_top tfc:metal/anvil/rose_gold tfc:metal/block/rose_gold tfc:metal/bars/rose_gold tfc:metal/trapdoor/rose_gold tfc:metal/block/rose_gold_stairs tfc:block/metal/block/rose_gold_slab tfc:block/metal/block/rose_gold_slab_top tfc:metal/anvil/silver tfc:metal/block/silver tfc:metal/bars/silver tfc:metal/trapdoor/silver tfc:metal/block/silver_stairs tfc:block/metal/block/silver_slab tfc:block/metal/block/silver_slab_top tfc:metal/anvil/tin tfc:metal/block/tin tfc:metal/bars/tin tfc:metal/trapdoor/tin tfc:metal/block/tin_stairs tfc:block/metal/block/tin_slab tfc:block/metal/block/tin_slab_top tfc:metal/anvil/zinc tfc:metal/block/zinc tfc:metal/bars/zinc tfc:metal/trapdoor/zinc tfc:metal/block/zinc_stairs tfc:block/metal/block/zinc_slab tfc:block/metal/block/zinc_slab_top tfc:metal/anvil/sterling_silver tfc:metal/block/sterling_silver tfc:metal/bars/sterling_silver tfc:metal/trapdoor/sterling_silver tfc:metal/block/sterling_silver_stairs tfc:block/metal/block/sterling_silver_slab tfc:block/metal/block/sterling_silver_slab_top tfc:metal/anvil/wrought_iron tfc:metal/block/wrought_iron tfc:metal/bars/wrought_iron tfc:metal/trapdoor/wrought_iron tfc:metal/block/wrought_iron_stairs tfc:block/metal/block/wrought_iron_slab tfc:block/metal/block/wrought_iron_slab_top tfc:metal/anvil/cast_iron tfc:metal/block/cast_iron tfc:metal/bars/cast_iron tfc:metal/trapdoor/cast_iron tfc:metal/block/cast_iron_stairs tfc:block/metal/block/cast_iron_slab tfc:block/metal/block/cast_iron_slab_top tfc:metal/anvil/pig_iron tfc:metal/block/pig_iron tfc:metal/bars/pig_iron tfc:metal/trapdoor/pig_iron tfc:metal/block/pig_iron_stairs tfc:block/metal/block/pig_iron_slab tfc:block/metal/block/pig_iron_slab_top tfc:metal/anvil/steel tfc:metal/block/steel tfc:metal/bars/steel tfc:metal/trapdoor/steel tfc:metal/block/steel_stairs tfc:block/metal/block/steel_slab tfc:block/metal/block/steel_slab_top tfc:metal/anvil/black_steel tfc:metal/block/black_steel tfc:metal/bars/black_steel tfc:metal/trapdoor/black_steel tfc:metal/block/black_steel_stairs tfc:block/metal/block/black_steel_slab tfc:block/metal/block/black_steel_slab_top tfc:metal/anvil/blue_steel tfc:metal/block/blue_steel tfc:metal/bars/blue_steel tfc:metal/trapdoor/blue_steel tfc:metal/block/blue_steel_stairs tfc:block/metal/block/blue_steel_slab tfc:block/metal/block/blue_steel_slab_top tfc:metal/anvil/red_steel tfc:metal/block/red_steel tfc:metal/bars/red_steel tfc:metal/trapdoor/red_steel tfc:metal/block/red_steel_stairs tfc:block/metal/block/red_steel_slab tfc:block/metal/block/red_steel_slab_top tfc:metal/anvil/weak_steel tfc:metal/block/weak_steel tfc:metal/bars/weak_steel tfc:metal/trapdoor/weak_steel tfc:metal/block/weak_steel_stairs tfc:block/metal/block/weak_steel_slab tfc:block/metal/block/weak_steel_slab_top tfc:metal/anvil/weak_blue_steel tfc:metal/block/weak_blue_steel tfc:metal/bars/weak_blue_steel tfc:metal/trapdoor/weak_blue_steel tfc:metal/block/weak_blue_steel_stairs tfc:block/metal/block/weak_blue_steel_slab tfc:block/metal/block/weak_blue_steel_slab_top tfc:metal/anvil/weak_red_steel tfc:metal/block/weak_red_steel tfc:metal/bars/weak_red_steel tfc:metal/trapdoor/weak_red_steel tfc:metal/block/weak_red_steel_stairs tfc:block/metal/block/weak_red_steel_slab tfc:block/metal/block/weak_red_steel_slab_top tfc:metal/anvil/high_carbon_steel tfc:metal/block/high_carbon_steel tfc:metal/bars/high_carbon_steel tfc:metal/trapdoor/high_carbon_steel tfc:metal/block/high_carbon_steel_stairs tfc:block/metal/block/high_carbon_steel_slab tfc:block/metal/block/high_carbon_steel_slab_top tfc:metal/anvil/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel tfc:metal/bars/high_carbon_black_steel tfc:metal/trapdoor/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel_stairs tfc:block/metal/block/high_carbon_black_steel_slab tfc:block/metal/block/high_carbon_black_steel_slab_top tfc:metal/anvil/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel tfc:metal/bars/high_carbon_blue_steel tfc:metal/trapdoor/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel_stairs tfc:block/metal/block/high_carbon_blue_steel_slab tfc:block/metal/block/high_carbon_blue_steel_slab_top tfc:metal/anvil/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel tfc:metal/bars/high_carbon_red_steel tfc:metal/trapdoor/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel_stairs tfc:block/metal/block/high_carbon_red_steel_slab tfc:block/metal/block/high_carbon_red_steel_slab_top tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top create:copper_ladder create:brass_ladder create:copper_scaffolding create:brass_scaffolding create:brass_block create:copper_bars create:brass_bars create:smart_chute create:fluid_tank create:steam_whistle create:steam_engine create:spout create:hose_pulley create:item_drain create:train_casing create:smart_fluid_pipe create:fluid_pipe create:mechanical_pump create:copper_valve_handle create:fluid_valve create:mechanical_crafter create:sequenced_gearshift create:flywheel create:rotation_speed_controller create:mechanical_arm create:railway_casing create:controls create:brass_funnel create:brass_tunnel create:content_observer create:stockpile_switch create:redstone_link create:pulse_repeater create:pulse_extender create:peculiar_bell create_jetpack:jetpack create_enchantment_industry:printer create_enchantment_industry:disenchanter cataclysm:ancient_metal_block cataclysm:cursium_block cataclysm:enderite_block cataclysm:witherite_block cataclysm:ignitium_block cataclysm:mechanical_fusion_anvil cataclysm:emp cataclysm:black_steel_block create_dd:furnace_engine create_dd:bore_block create_dd:industrial_fan create_dd:hydraulic_press create_dd:item_stockpile create_dd:fluid_reservoir create_dd:dark_metal_block create_dd:dark_metal_plating create_dd:dark_metal_block_slab create_dd:dark_metal_block_stairs create_dd:dark_metal_bricks create_dd:dark_metal_brick_slab create_dd:dark_metal_brick_stairs create:zinc_block create:industrial_iron_block create:train_door create:chute create:item_vault create:haunted_bell minecraft:netherite_block create_jetpack:netherite_jetpack createutilities:void_steel_block createutilities:void_steel_scaffolding createutilities:void_casing createutilities:void_steel_bars createutilities:void_steel_ladder createutilities:void_motor createutilities:void_chest createutilities:void_tank createutilities:void_battery railways:smokestack_caboosestyle railways:smokestack_long railways:smokestack_coalburner railways:smokestack_oilburner railways:smokestack_streamlined railways:smokestack_woodburner railways:fuel_tank railways:portable_fuel_interface create_power_loader:empty_brass_chunk_loader create_power_loader:brass_chunk_loader create_connected:empty_fan_catalyst create_connected:fan_blasting_catalyst create_connected:fan_smoking_catalyst create_connected:fan_splashing_catalyst create_connected:fan_haunting_catalyst create_connected:sequenced_pulse_generator create_connected:item_silo create_things_and_misc:card_reader create_things_and_misc:card_press create_things_and_misc:sprinkler create_things_and_misc:brass_tiles create_things_and_misc:brass_tiles_slab create_things_and_misc:brass_tiles_stair create_things_and_misc:brass_bricks create_things_and_misc:brass_brick_slab create_things_and_misc:brass_brick_stairs vintageimprovements:vanadium_block createcasing:brass_shaft createcasing:creative_casing create_dd:stargaze_singularity_scaffolding create_dd:stargaze_singularity_block create_dd:stargaze_singularity_casing create_dd:mithril_scaffolding create_dd:mithril_block create_dd:mithril_casing create_dd:bronze_scaffolding create_dd:bronze_block create_dd:bronze_casing create_dd:steel_scaffolding create_dd:steel_block create_dd:steel_casing create_dd:industrial_iron_block create_dd:industrial_casing create_dd:tin_scaffolding create_dd:tin_block create_dd:chromatic_block create_dd:refined_radiance_scaffolding create_dd:refined_radiance_block create_dd:refined_radiance_casing create_dd:shadow_steel_scaffolding create_dd:shadow_steel_block create_dd:shadow_steel_casing create_dd:blaze_gold_scaffolding create_dd:blaze_gold_block create_dd:blaze_gold_casing create_dd:hydraulic_scaffolding create_dd:hydraulic_casing create_dd:overburden_scaffolding create_dd:overburden_casing create_dd:train_scaffolding create_dd:zinc_scaffolding create_dd:industrial_scaffolding create_dd:netherite_scaffolding create_dd:bronze_saw create_dd:bronze_drill createbigcannons:big_cartridge createbigcannons:cast_iron_block createbigcannons:nethersteel_block createbigcannons:basin_foundry_lid createbigcannons:wrought_iron_drop_mortar_end createbigcannons:wrought_iron_cannon_end createbigcannons:wrought_iron_cannon_chamber create_dd:flywheel + + # SAND-LIKE + block.10410 = sand red_sand dirt_path gravel suspicious_gravel suspicious_sand white_concrete_powder light_gray_concrete_powder gray_concrete_powder black_concrete_powder brown_concrete_powder red_concrete_powder orange_concrete_powder yellow_concrete_powder lime_concrete_powder green_concrete_powder cyan_concrete_powder light_blue_concrete_powder blue_concrete_powder purple_concrete_powder magenta_concrete_powder pink_concrete_powder coarse_dirt + + # FABRIC-LIKE + block.10440 = white_carpet orange_carpet magenta_carpet light_blue_carpet yellow_carpet lime_carpet pink_carpet gray_carpet light_gray_carpet cyan_carpet purple_carpet blue_carpet brown_carpet green_carpet red_carpet black_carpet white_wool orange_wool magenta_wool light_blue_wool yellow_wool lime_wool pink_wool gray_wool light_gray_wool cyan_wool purple_wool blue_wool brown_wool green_wool red_wool black_wool estrogen:moth_wool estrogen:quilted_moth_wool estrogen:moth_wool_carpet estrogen:quilted_moth_wool_carpet farmersdelight:canvas_rug farmersdelight:full_tatami_mat farmersdelight:half_tatami_mat farmersdelight:tatami sophisticated_backpacks:backpack create_dd:blueprint_block create_dd:blueprint_carpet create_dd:mysterious_blueprint_carpet +#else + + # WAVING ENTITIES + block.10031 = minecraft:tallgrass biomesoplenty:plant_0 biomesoplenty:plant_1 atum:oasis_grass atum:dead_grass atum:shrub atum:weed thebetweenlands:blue_eyed_grass thebetweenlands:bottle_brush_grass thebetweenlands:cave_grass thebetweenlands:swamp_tallgrass thebetweenlands:pale_grass xlfoodmod:grass midnight:fingered_grass midnight:tall_midnight_grass tconstruct:slime_grass_tall pvj:short_grass pvj:chickenweed pvj:clovers pvj:crabgrass pvj:beach_grass biomesoplenty:coral coralreef:coral biomesoplenty:seaweed + block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots pvj:wild_wheat pvj:wild_potato pvj:wild_beetroot pvj:wild_carrot + block.10175 = minecraft:double_plant:half=lower thebetweenlands:swamp_double_tallgrass:half=lower thebetweenlands:tall_cattail:half=lower midnight:double_midnight_grass:half=lower zawa:eucalyptus_bottom botania:doubleflower1:half=lower botania:doubleflower2:half=lower zawa:karvy_bottom + block.10176 = minecraft:double_plant:half=upper thebetweenlands:swamp_double_tallgrass:half=upper thebetweenlands:tall_cattail:half=upper midnight:double_midnight_grass:half=upper zawa:eucalyptus_top botania:doubleflower1:half=upper botania:doubleflower2:half=upper zawa:karvy_top + + block.10018 = minecraft:leaves minecraft:leaves2 biomesoplenty:leaves_0 biomesoplenty:leaves_1 biomesoplenty:leaves_2 biomesoplenty:leaves_3 biomesoplenty:leaves_4 biomesoplenty:leaves_5 atum:palm_leaves atum:deadwood_leaves quark:variant_leaves twilightforest:twilight_leaves twilightforest:magic_leaves twilightforest:twilight_leaves_3 twilightforest:dark_leaves twilightforest:giant_leaves midnight:shadowroot_leaves midnight:dark_willow_leaves aether_legacy:aether_leaves aether_legacy:crystal_leaves dynamictrees:leaves0 dynamictrees:leaves1 betterwithmods:blood_leaves rustic:leaves thebetweenlands:leaves_weedwood_tree thebetweenlands:leaves_sap_tree thebetweenlands:leaves_rubber_tree thebetweenlands:leaves_hearthgrove_tree thebetweenlands:leaves_nibbletwig_tree thebetweenlands:leaves_spirit_tree_top thebetweenlands:leaves_spirit_tree_middle thebetweenlands:leaves_spirit_tree_bottom ic2:leaves tconstruct:slime_leaves forestry:leaves pvj:leaves_willow pvj:leaves_mangrove pvj:leaves_palm pvj:leaves_redwood pvj:leaves_fir pvj:leaves_pine pvj:leaves_aspen pvj:leaves_red_maple pvj:leaves_orange_maple pvj:leaves_baobab pvj:leaves_cottonwood pvj:leaves_juniper pvj:leaves_juniper_berried pvj:leaves_white_cherry_blossom pvj:leaves_pink_cherry_blossom pvj:leaves_jacaranda extrabiomesxl:leaf_autumn_brown extrabiomesxl:leaf_autumn_orange extrabiomesxl:leaf_autumn_red extrabiomesxl:leaf_autumn_yellow extrabiomesxl:leaf_cypress_bald extrabiomesxl:leaf_cypress_regular extrabiomesxl:leaf_fir extrabiomesxl:leaf_japanese_maple_regular extrabiomesxl:leaf_japanese_maple_shrub extrabiomesxl:leaf_rainbow_eucalyptus extrabiomesxl:leaf_redwood extrabiomesxl:leaf_sakura extrautils2:ironwood_leaves musiccraft:mleaves thaumcraft:leaves_greatwood thaumcraft:leaves_silverwood + + # REFLECTIVE + block.10008 = minecraft:water minecraft:flowing_water 113_water_mechanics:downwards_bubble_column 113_water_mechanics:upwards_bubble_column bubble_elevator:bubble_column magma_bubble_column:magma_bubble_column + block.10079 = ice slime stained_glass stained_glass_pane + + # EMMISIVE (LIKE GLOWSTONE) + block.10089 = glowstone torch redstone_torch lit_pumpkin lit_redstone_lamp beacon + + # NO-WAVEABLE + block.10032 = reeds sugar_cane tube_coral brain_coral fire_coral bubble_coral horn_coral dead_tube_coral dead_brain_coral dead_fire_coral dead_bubble_coral dead_horn_coral tube_coral_fan brain_coral_fan fire_coral_fan bubble_coral_fan horn_coral_fan dead_tube_coral_fan dead_brain_coral_fan dead_fire_coral_fan dead_bubble_coral_fan dead_horn_coral_fan sapling nether_wart + + # NEW EMMISIVE + block.10090 = magma fire flowing_lava lava end_root beacon betterendforge:mossy_glowshroom_hymenophore betterendforge:mossy_glowshroom_fur betterendforge:blue_vine_lantern betterendforge:blue_vine_fur betterendforge::lumecorn:shape=light_top_middle betterendforge::lumecorn:shape=light_middle betterendforge::lumecorn:shape=light_bottom betterendforge::purple_polypore betterendforge::bulb_vine:shape=bottom + + # FAKE EMMISORS + block.10213 = soul_fire + + # METAL-LIKE + block.10400 = iron_block gold_block emerald_block lapis_block diamond_block + + # SAND-LIKE + block.10410 = sand red_sand dirt_path + + # FABRIC-LIKE + block.10440 = white_carpet orange_carpet magenta_carpet light_blue_carpet yellow_carpet lime_carpet pink_carpet gray_carpet light_gray_carpet cyan_carpet purple_carpet blue_carpet brown_carpet green_carpet red_carpet black_carpet white_wool orange_wool magenta_wool light_blue_wool yellow_wool lime_wool pink_wool gray_wool light_gray_wool cyan_wool purple_wool blue_wool brown_wool green_wool red_wool black_wool + #endif diff --git a/shaders/block.properties b/shaders/block.properties index 84621503..993fe984 100644 --- a/shaders/block.properties +++ b/shaders/block.properties @@ -3,29 +3,31 @@ #if MC_VERSION >= 11300 # GRASS LIKE ENTITIES - block.10031 = minecraft:cherry_sapling minecraft:torchflower minecraft:short_grass minecraft:grass minecraft:fern minecraft:seagrass biomesoplenty:dune_grass biomesoplenty:dead_grass biomesoplenty:desert_grass biomesoplenty:sprout biomesoplenty:bush environmental:mycelium_sprouts upgrade_aquatic:blue_pickerelweed upgrade_aquatic:purple_pickerelweed byg:beach_grass byg:clover_patch byg:flower_patch byg:horseweed byg:leaf_pile byg:prairie_grass byg:reeds byg:short_beach_grass byg:short_grass byg:tall_prairie_grass byg:weed_grass byg:wilted_grass byg:winter_grass ecotones:clover ecotones:reeds ecotones:sandy_grass ecotones:short_grass terrestria:cattail terrestria:dead_grass terrestria:sakura_leaf_pile terrestria:tall_cattail wildworld:acacia_leaf_pile wildworld:birch_leaf_pile wildworld:dark_oak_leaf_pile wildworld:jungle_leaf_pile wildworld:oak_leaf_pile wildworld:spruce_leaf_pile biomesoplenty:bush minecraft:nether_sprouts minecraft:warped_roots minecraft:crimson_roots projectvibrantjourneys:beach_grass projectvibrantjourneys:short_grass minecraft:oak_sapling minecraft:spruce_sapling minecraft:birch_sapling minecraft:jungle_sapling minecraft:acacia_sapling minecraft:dark_oak_sapling minecraft:dead_bush minecraft:dandelion minecraft:poppy minecraft:blue_orchid minecraft:allium minecraft:azure_bluet minecraft:red_tulip minecraft:orange_tulip minecraft:white_tulip minecraft:pink_tulip minecraft:oxeye_daisy minecraft:cornflower minecraft:lily_of_the_valley minecraft:wither_rose minecraft:sweet_berry_bush biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom atmospheric:rosewood_sapling atmospheric:morado_sapling atmospheric:yucca_sapling atmospheric:kousa_sapling atmospheric:aspen_sapling atmospheric:grimwood_sapling atmospheric:warm_monkey_brush atmospheric:hot_monkey_brush atmospheric:scalding_monkey_brush atmospheric:yucca_flower atmospheric:gilia autumnity:red_maple_sapling autumnity:orange_maple_sapling autumnity:yellow_maple_sapling autumnity:maple_sapling autumnity:autumn_crocus earthmobsmod:buttercup environmental:willow_sapling environmental:cherry_sapling environmental:pink_wisteria_sapling environmental:blue_wisteria_sapling environmental:purple_wisteria_sapling environmental:white_wisteria_sapling farmersdelight:wild_cabbages farmersdelight:wild_onions farmersdelight:wild_tomatoes farmersdelight:wild_carrots farmersdelight:wild_potatoes farmersdelight:wild_beetroots neapolitan:small_banana_frond neapolitan:banana_frond neapolitan:large_banana_frond upgrade_aquatic:river_sapling upgrade_aquatic:beachgrass upgrade_aquatic:white_searocket upgrade_aquatic:pink_searocket environmental:cattail environmental:cartwheel environmental:bluebell environmental:violet environmental:dianthus environmental:red_lotus_flower environmental:white_lotus_flower environmental:yellow_hibiscus environmental:orange_hibiscus environmental:red_hibiscus environmental:pink_hibiscus environmental:magenta_hibiscus environmental:purple_hibiscus buzzier_bees:buttercup buzzier_bees:white_clover buzzier_bees:pink_clover neapolitan:strawberry_pips biomesoplenty:origin_sapling biomesoplenty:flowering_oak_sapling biomesoplenty:rainbow_birch_sapling biomesoplenty:yellow_autumn_sapling biomesoplenty:orange_autumn_sapling biomesoplenty:maple_sapling biomesoplenty:fir_sapling biomesoplenty:redwood_sapling biomesoplenty:white_cherry_sapling biomesoplenty:pink_cherry_sapling biomesoplenty:mahogany_sapling biomesoplenty:jacaranda_sapling biomesoplenty:palm_sapling biomesoplenty:willow_sapling biomesoplenty:dead_sapling biomesoplenty:magic_sapling biomesoplenty:umbran_sapling biomesoplenty:hellbark_sapling astralsorcery:glow_flower botania:white_mystical_flower botania:gray_mystical_flower botania:orange_mystical_flower botania:magenta_mystical_flower botania:light_blue_mystical_flower botania:light_gray_mystical_flower botania:yellow_mystical_flower botania:lime_mystical_flower botania:pink_mystical_flower botania:cyan_mystical_flower botania:purple_mystical_flower botania:blue_mystical_flower botania:brown_mystical_flower botania:green_mystical_flower botania:red_mystical_flower botania:black_mystical_flower botania:white_mushroom botania:orange_mushroom botania:magenta_mushroom botania:light_blue_mushroom botania:yellow_mushroom botania:lime_mushroom botania:pink_mushroom botania:gray_mushroom botania:light_gray_mushroom botania:cyan_mushroom botania:purple_mushroom botania:blue_mushroom botania:brown_mushroom botania:green_mushroom botania:red_mushroom botania:black_mushroom botania:hydroangeas botania:manastar botania:pure_daisy botania:endoflame botania:thermalily botania:rosa_arcana botania:munchdew botania:entropinnyum botania:kekimurus botania:gourmaryllis botania:narslimmus botania:spectrolus botania:dandelifeon botania:rafflowsia botania:shulk_me_not botania:bellethorn botania:bellethorn_chibi botania:bergamute botania:dreadthorn botania:heisei_dream botania:tigerseye botania:jaded_amaranthus botania:orechid botania:fallen_kanade botania:exoflame botania:agricarnation botania:agricarnation_chibi botania:hopperhock botania:hopperhock_chibi botania:tangleberrie botania:jiyuulia botania:rannuncarpus botania:rannuncarpus_chibi botania:hyacidus botania:pollidisiac botania:clayconia botania:clayconia_chibi botania:loonium botania:daffomill botania:vinculotus botania:spectranthemum botania:medumone botania:marimorphosis botania:marimorphosis_chibi botania:bubbell botania:bubbell_chibi botania:solegnolia botania:solegnolia_chibi botania:orechid_ignem terrestria:tiny_cactus pamhc2trees:apple_sapling pamhc2trees:avocado_sapling pamhc2trees:candlenut_sapling pamhc2trees:cherry_sapling pamhc2trees:chestnut_sapling pamhc2trees:gooseberry_sapling pamhc2trees:lemon_sapling pamhc2trees:nutmeg_sapling pamhc2trees:orange_sapling pamhc2trees:peach_sapling pamhc2trees:pear_sapling pamhc2trees:plum_sapling pamhc2trees:walnut_sapling pamhc2trees:spiderweb_sapling pamhc2trees:hazelnut_sapling pamhc2trees:pawpaw_sapling pamhc2trees:soursop_sapling pamhc2trees:almond_sapling pamhc2trees:apricot_sapling pamhc2trees:banana_sapling pamhc2trees:cashew_sapling pamhc2trees:cinnamon_sapling pamhc2trees:coconut_sapling pamhc2trees:date_sapling pamhc2trees:dragonfruit_sapling pamhc2trees:durian_sapling pamhc2trees:fig_sapling pamhc2trees:grapefruit_sapling pamhc2trees:lime_sapling pamhc2trees:mango_sapling pamhc2trees:olive_sapling pamhc2trees:papaya_sapling pamhc2trees:paperbark_sapling pamhc2trees:pecan_sapling pamhc2trees:peppercorn_sapling pamhc2trees:persimmon_sapling pamhc2trees:pistachio_sapling pamhc2trees:pomegranate_sapling pamhc2trees:starfruit_sapling pamhc2trees:vanillabean_sapling pamhc2trees:breadfruit_sapling pamhc2trees:guava_sapling pamhc2trees:jackfruit_sapling pamhc2trees:lychee_sapling pamhc2trees:passionfruit_sapling pamhc2trees:rambutan_sapling pamhc2trees:tamarind_sapling pamhc2trees:maple_sapling pamhc2trees:pinenut_sapling byg:purple_bulbis_anomaly byg:blue_bulbis_anomaly byg:embur_wart byg:cryptic_bramble biomesoplenty:glowshroom biomesoplenty:toadstool biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom biomesoplenty:mangrove_root biomesoplenty:reed biomesoplenty:sprout biomesoplenty:bush pamhc2crops:aridgarden pamhc2crops:frostgarden pamhc2crops:shadedgarden pamhc2crops:soggygarden pamhc2crops:tropicalgarden pamhc2crops:windygarden pamhc2crops:pamamaranthcrop pamhc2crops:pambarleycrop pamhc2crops:pambeancrop pamhc2crops:pamchickpeacrop pamhc2crops:pamcorncrop pamhc2crops:pamlentilcrop pamhc2crops:pammilletcrop pamhc2crops:pamoatcrop pamhc2crops:pamquinoacrop pamhc2crops:pamricecrop pamhc2crops:pamryecrop pamhc2crops:pamsoybeancrops pamhc2crops:pamcottoncrop pamhc2crops:pamflaxcrop pamhc2crops:pamkenafcrop pamhc2crops:pamjutecrop pamhc2crops:pamsisalcrop pamhc2crops:pamartichokecrop pamhc2crops:pamasparaguscrop pamhc2crops:pambellpeppercrop pamhc2crops:pambroccolicrop pamhc2crops:pambrusselsproutcrop pamhc2crops:pamcabbagecrop pamhc2crops:pamcauliflowercrop pamhc2crops:pamcelerycrop pamhc2crops:pamchilipeppercrop pamhc2crops:pamcucumbercrop pamhc2crops:pameggplantcrop pamhc2crops:pamkalecrops pamhc2crops:pamlettucecrop pamhc2crops:pamokracrop pamhc2crops:pampeascrop pamhc2crops:pamspinachcrop pamhc2crops:pamtomatillocrop pamhc2crops:pamtomatocrop pamhc2crops:pamwintersquashcrop pamhc2crops:pamzucchinicrop pamhc2crops:pamarrowrootcrop pamhc2crops:pamcassavacrop pamhc2crops:pamgarliccrop pamhc2crops:pamjicamacrop pamhc2crops:pamleekcrop pamhc2crops:pamkohlrabicrop pamhc2crops:pamonioncrop pamhc2crops:pamparsnipcrop pamhc2crops:pampeanutcrop pamhc2crops:pamradishcrop pamhc2crops:pamrhubarbcrop pamhc2crops:pamrutabagacrop pamhc2crops:pamscallioncrop pamhc2crops:pamsweetpotatocrop pamhc2crops:pamtarocrop pamhc2crops:pamturnipcrop pamhc2crops:pamwaterchestnutcrop pamhc2crops:pamblackberrycrop pamhc2crops:pamblueberrycrop pamhc2crops:pamcactusfruitcrop pamhc2crops:pamcandleberrycrop pamhc2crops:pamcantaloupecrop pamhc2crops:pamcranberrycrop pamhc2crops:pamelderberrycrop pamhc2crops:pamgrapecrop pamhc2crops:pamgreengrapecrop pamhc2crops:pamhuckleberrycrop pamhc2crops:pamjuniperberrycrop pamhc2crops:pamkiwicrop pamhc2crops:pammullberrycrop pamhc2crops:pampineapplecrop pamhc2crops:pamraspberrycrop pamhc2crops:pamstrawberrycrop pamhc2crops:pamcoffeebeancrop pamhc2crops:pamtealeafcrop pamhc2crops:pamagavecrop pamhc2crops:pamwhitemushroomcrop pamhc2crops:pamgingercrop pamhc2crops:pamsesamecrop pamhc2crops:pamspiceleafcrop pamhc2crops:pammustardcrop byg:lament_sprouts byg:synthian_fungus byg:blue_glowcane byg:pink_glowcane byg:purple_glowcane byg:red_glowcane byg:warped_bush byg:blue_glowshroom byg:purple_glowshroom byg:scorched_bush byg:soul_shroom byg:soul_shroom_spore_end byg:death_cap byg:weeping_roots byg:nether_bristle byg:synthian_sprout byg:synthian_roots byg:hanging_synthian_roots byg:embur_sprouts byg:embur_roots byg:ivis_roots byg:ivis_sprout byg:bulbis_sprouts byg:ether_bush byg:thereal_bellflower byg:nightshade_sprouts byg:nightshade_roots byg:oddity_bush byg:shulkren_fungus byg:vermillion_sculk_tendrils byg:vermillion_sculk_growth byg:green_mushroom byg:weeping_milkcap byg:wood_blewit byg:black_puff byg:crimson_berry_bush byg:blueberry_bush byg:nightshade_berry_bush byg:winter_succulent byg:allium_flower_bush byg:alpine_bellflower byg:amaranth byg:angelica byg:begonia byg:bistort byg:black_rose byg:blue_sage byg:california_poppy byg:crocus byg:cyan_amaranth byg:cyan_rose byg:cyan_tulip byg:daffodil byg:fairy_slipper byg:firecracker_flower_bush byg:green_tulip byg:guzmania byg:incan_lily byg:iris byg:kovan_flower byg:lazarus_bellflower byg:lolipop_flower byg:magenta_amaranth byg:magenta_tulip byg:orange_amaranth byg:orange_daisy byg:osiria_rose byg:peach_leather_flower byg:pink_allium byg:pink_allium_flower_bush byg:pink_anemone byg:pink_daffodil byg:pink_orchid byg:protea_flower byg:purple_amaranth byg:purple_orchid byg:purple_sage byg:purple_tulip byg:red_cornflower byg:red_orchid byg:richea byg:rose byg:snowdrops byg:silver_vase_flower byg:torch_ginger byg:violet_leather_flower byg:white_anemone byg:white_sage byg:white_cyclamen byg:winter_rose byg:winter_scilla byg:yellow_daffodil byg:yellow_tulip byg:horseweed byg:winter_cyclamen cutecore:cherry_leaf_litter cutecore:cherry_wood_sapling cutecore:wisteria_sapling cutecore:wisteria_leaf_litter cutecore:lemon_leaf_litter cutecore:lemon_sapling cutecore:hyacinth cutecore:lotus_flower cutecore:violets cutecore:pink_rose cutecore:white_rose cutecore:rose cutecore:forget_me_nots cutecore:pink_carnation cutecore:red_carnation cutecore:white_carnation forbidden_arcanus:yellow_orchid forbidden_arcanus:golden_orchid immersiveengineering:hemp:growth=bottom0 immersiveengineering:hemp:growth=bottom1 immersiveengineering:hemp:growth=bottom2 immersiveengineering:hemp:growth=bottom3 simplefarming:apple_sapling simplefarming:apricot_sapling simplefarming:banana_sapling simplefarming:cherry_sapling simplefarming:mango_sapling simplefarming:olive_sapling simplefarming:orange_sapling simplefarming:pear_sapling simplefarming:plum_sapling simplefarming:barley_crop simplefarming:cassava_crop simplefarming:corn_crop simplefarming:cotton_crop simplefarming:cross_crop simplefarming:cucumber_crop simplefarming:cumin_plant simplefarming:eggplant_crop simplefarming:ginger_crop simplefarming:honeydew_crop simplefarming:kenaf_crop simplefarming:lettuce_crop simplefarming:oat_crop simplefarming:onion_crop simplefarming:pea_crop simplefarming:peanut_crop simplefarming:pepper_crop simplefarming:quinoa_plant simplefarming:radish_crop simplefarming:rice_crop simplefarming:rye_crop simplefarming:scrop simplefarming:hcrop simplefarming:marshmallow_crop simplefarming:sunflower_plant simplefarming:sorghum_crop simplefarming:soybean_crop simplefarming:spinach_crop simplefarming:sweet_potato_crop simplefarming:tomato_crop simplefarming:turnip_crop simplefarming:wild_crop simplefarming:yam_crop simplefarming:zucchini_crop byg:aspen_sapling byg:baobab_sapling byg:blue_enchanted_sapling byg:green_enchanted_sapling byg:pink_cherry_sapling byg:white_cherry_sapling byg:cika_sapling byg:cypress_sapling byg:ebony_sapling byg:ether_sapling byg:fir_sapling byg:aspen_sapling byg:holly_berry_sapling byg:holly_sapling byg:jacaranda_sapling byg:flowering_jacaranda_sapling byg:indigo_jacaranda_sapling byg:indigo_flowering_jacaranda_sapling byg:lament_sapling byg:mahogany_sapling byg:mangrove_sapling byg:maple_sapling byg:red_maple_sapling byg:silver_maple_sapling byg:nightshade_sapling byg:flowering_nightshade_sapling byg:palm_sapling byg:palo_verde_sapling byg:flowering_palo_verde_sapling byg:pine_sapling byg:rainbow_eucalyptus_sapling byg:redwood_sapling byg:pine_sapling byg:skyris_sapling byg:green_apple_skyris_sapling byg:willow_sapling byg:witch_hazel_sapling byg:blooming_witch_hazel_sapling byg:zelkova_sapling byg:withering_oak_sapling byg:araucaria_sapling byg:blue_spruce_sapling byg:brown_birch_sapling byg:brown_oak_sapling byg:zelkova_sapling byg:brown_zelkova_sapling byg:joshua_sapling byg:ripe_joshua_sapling byg:orange_birch_sapling byg:orange_oak_sapling byg:orange_spruce_sapling byg:orchard_sapling byg:flowering_orchard_sapling byg:ripe_orchard_sapling byg:red_birch_sapling byg:red_oak_sapling byg:red_spruce_sapling byg:yellow_birch_sapling byg:yellow_spruce_sapling byg:green_mushroom occultism:otherworld_sapling_natural occultism:otherworld_sapling integrateddynamics:menril_sapling projectvibrantjourneys:glowcap projectvibrantjourneys:crimson_nettle projectvibrantjourneys:warped_nettle twilightforest:mayapple + block.10031 = minecraft:cherry_sapling minecraft:torchflower minecraft:short_grass minecraft:grass minecraft:fern minecraft:seagrass biomesoplenty:dune_grass biomesoplenty:dead_grass biomesoplenty:desert_grass biomesoplenty:sprout biomesoplenty:bush environmental:mycelium_sprouts upgrade_aquatic:blue_pickerelweed upgrade_aquatic:purple_pickerelweed byg:beach_grass byg:clover_patch byg:flower_patch byg:horseweed byg:leaf_pile byg:prairie_grass byg:reeds byg:short_beach_grass byg:short_grass byg:tall_prairie_grass byg:weed_grass byg:wilted_grass byg:winter_grass ecotones:clover ecotones:reeds ecotones:sandy_grass ecotones:short_grass terrestria:cattail terrestria:dead_grass terrestria:sakura_leaf_pile terrestria:tall_cattail wildworld:acacia_leaf_pile wildworld:birch_leaf_pile wildworld:dark_oak_leaf_pile wildworld:jungle_leaf_pile wildworld:oak_leaf_pile wildworld:spruce_leaf_pile biomesoplenty:bush minecraft:nether_sprouts minecraft:warped_roots minecraft:crimson_roots projectvibrantjourneys:beach_grass projectvibrantjourneys:short_grass minecraft:oak_sapling minecraft:spruce_sapling minecraft:birch_sapling minecraft:jungle_sapling minecraft:acacia_sapling minecraft:dark_oak_sapling minecraft:dead_bush minecraft:dandelion minecraft:poppy minecraft:blue_orchid minecraft:allium minecraft:azure_bluet minecraft:red_tulip minecraft:orange_tulip minecraft:white_tulip minecraft:pink_tulip minecraft:oxeye_daisy minecraft:cornflower minecraft:lily_of_the_valley minecraft:wither_rose minecraft:sweet_berry_bush biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom atmospheric:rosewood_sapling atmospheric:morado_sapling atmospheric:yucca_sapling atmospheric:kousa_sapling atmospheric:aspen_sapling atmospheric:grimwood_sapling atmospheric:warm_monkey_brush atmospheric:hot_monkey_brush atmospheric:scalding_monkey_brush atmospheric:yucca_flower atmospheric:gilia autumnity:red_maple_sapling autumnity:orange_maple_sapling autumnity:yellow_maple_sapling autumnity:maple_sapling autumnity:autumn_crocus earthmobsmod:buttercup environmental:willow_sapling environmental:cherry_sapling environmental:pink_wisteria_sapling environmental:blue_wisteria_sapling environmental:purple_wisteria_sapling environmental:white_wisteria_sapling farmersdelight:wild_cabbages farmersdelight:wild_onions farmersdelight:wild_tomatoes farmersdelight:wild_carrots farmersdelight:wild_potatoes farmersdelight:wild_beetroots neapolitan:small_banana_frond neapolitan:banana_frond neapolitan:large_banana_frond upgrade_aquatic:river_sapling upgrade_aquatic:beachgrass upgrade_aquatic:white_searocket upgrade_aquatic:pink_searocket environmental:cattail environmental:cartwheel environmental:bluebell environmental:violet environmental:dianthus environmental:red_lotus_flower environmental:white_lotus_flower environmental:yellow_hibiscus environmental:orange_hibiscus environmental:red_hibiscus environmental:pink_hibiscus environmental:magenta_hibiscus environmental:purple_hibiscus buzzier_bees:buttercup buzzier_bees:white_clover buzzier_bees:pink_clover neapolitan:strawberry_pips biomesoplenty:origin_sapling biomesoplenty:flowering_oak_sapling biomesoplenty:rainbow_birch_sapling biomesoplenty:yellow_autumn_sapling biomesoplenty:orange_autumn_sapling biomesoplenty:maple_sapling biomesoplenty:fir_sapling biomesoplenty:redwood_sapling biomesoplenty:white_cherry_sapling biomesoplenty:pink_cherry_sapling biomesoplenty:mahogany_sapling biomesoplenty:jacaranda_sapling biomesoplenty:palm_sapling biomesoplenty:willow_sapling biomesoplenty:dead_sapling biomesoplenty:magic_sapling biomesoplenty:umbran_sapling biomesoplenty:hellbark_sapling astralsorcery:glow_flower botania:white_mystical_flower botania:gray_mystical_flower botania:orange_mystical_flower botania:magenta_mystical_flower botania:light_blue_mystical_flower botania:light_gray_mystical_flower botania:yellow_mystical_flower botania:lime_mystical_flower botania:pink_mystical_flower botania:cyan_mystical_flower botania:purple_mystical_flower botania:blue_mystical_flower botania:brown_mystical_flower botania:green_mystical_flower botania:red_mystical_flower botania:black_mystical_flower botania:white_mushroom botania:orange_mushroom botania:magenta_mushroom botania:light_blue_mushroom botania:yellow_mushroom botania:lime_mushroom botania:pink_mushroom botania:gray_mushroom botania:light_gray_mushroom botania:cyan_mushroom botania:purple_mushroom botania:blue_mushroom botania:brown_mushroom botania:green_mushroom botania:red_mushroom botania:black_mushroom botania:hydroangeas botania:manastar botania:pure_daisy botania:endoflame botania:thermalily botania:rosa_arcana botania:munchdew botania:entropinnyum botania:kekimurus botania:gourmaryllis botania:narslimmus botania:spectrolus botania:dandelifeon botania:rafflowsia botania:shulk_me_not botania:bellethorn botania:bellethorn_chibi botania:bergamute botania:dreadthorn botania:heisei_dream botania:tigerseye botania:jaded_amaranthus botania:orechid botania:fallen_kanade botania:exoflame botania:agricarnation botania:agricarnation_chibi botania:hopperhock botania:hopperhock_chibi botania:tangleberrie botania:jiyuulia botania:rannuncarpus botania:rannuncarpus_chibi botania:hyacidus botania:pollidisiac botania:clayconia botania:clayconia_chibi botania:loonium botania:daffomill botania:vinculotus botania:spectranthemum botania:medumone botania:marimorphosis botania:marimorphosis_chibi botania:bubbell botania:bubbell_chibi botania:solegnolia botania:solegnolia_chibi botania:orechid_ignem terrestria:tiny_cactus pamhc2trees:apple_sapling pamhc2trees:avocado_sapling pamhc2trees:candlenut_sapling pamhc2trees:cherry_sapling pamhc2trees:chestnut_sapling pamhc2trees:gooseberry_sapling pamhc2trees:lemon_sapling pamhc2trees:nutmeg_sapling pamhc2trees:orange_sapling pamhc2trees:peach_sapling pamhc2trees:pear_sapling pamhc2trees:plum_sapling pamhc2trees:walnut_sapling pamhc2trees:spiderweb_sapling pamhc2trees:hazelnut_sapling pamhc2trees:pawpaw_sapling pamhc2trees:soursop_sapling pamhc2trees:almond_sapling pamhc2trees:apricot_sapling pamhc2trees:banana_sapling pamhc2trees:cashew_sapling pamhc2trees:cinnamon_sapling pamhc2trees:coconut_sapling pamhc2trees:date_sapling pamhc2trees:dragonfruit_sapling pamhc2trees:durian_sapling pamhc2trees:fig_sapling pamhc2trees:grapefruit_sapling pamhc2trees:lime_sapling pamhc2trees:mango_sapling pamhc2trees:olive_sapling pamhc2trees:papaya_sapling pamhc2trees:paperbark_sapling pamhc2trees:pecan_sapling pamhc2trees:peppercorn_sapling pamhc2trees:persimmon_sapling pamhc2trees:pistachio_sapling pamhc2trees:pomegranate_sapling pamhc2trees:starfruit_sapling pamhc2trees:vanillabean_sapling pamhc2trees:breadfruit_sapling pamhc2trees:guava_sapling pamhc2trees:jackfruit_sapling pamhc2trees:lychee_sapling pamhc2trees:passionfruit_sapling pamhc2trees:rambutan_sapling pamhc2trees:tamarind_sapling pamhc2trees:maple_sapling pamhc2trees:pinenut_sapling byg:purple_bulbis_anomaly byg:blue_bulbis_anomaly byg:embur_wart byg:cryptic_bramble biomesoplenty:glowshroom biomesoplenty:toadstool biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom biomesoplenty:mangrove_root biomesoplenty:reed biomesoplenty:sprout biomesoplenty:bush pamhc2crops:aridgarden pamhc2crops:frostgarden pamhc2crops:shadedgarden pamhc2crops:soggygarden pamhc2crops:tropicalgarden pamhc2crops:windygarden pamhc2crops:pamamaranthcrop pamhc2crops:pambarleycrop pamhc2crops:pambeancrop pamhc2crops:pamchickpeacrop pamhc2crops:pamcorncrop pamhc2crops:pamlentilcrop pamhc2crops:pammilletcrop pamhc2crops:pamoatcrop pamhc2crops:pamquinoacrop pamhc2crops:pamricecrop pamhc2crops:pamryecrop pamhc2crops:pamsoybeancrops pamhc2crops:pamcottoncrop pamhc2crops:pamflaxcrop pamhc2crops:pamkenafcrop pamhc2crops:pamjutecrop pamhc2crops:pamsisalcrop pamhc2crops:pamartichokecrop pamhc2crops:pamasparaguscrop pamhc2crops:pambellpeppercrop pamhc2crops:pambroccolicrop pamhc2crops:pambrusselsproutcrop pamhc2crops:pamcabbagecrop pamhc2crops:pamcauliflowercrop pamhc2crops:pamcelerycrop pamhc2crops:pamchilipeppercrop pamhc2crops:pamcucumbercrop pamhc2crops:pameggplantcrop pamhc2crops:pamkalecrops pamhc2crops:pamlettucecrop pamhc2crops:pamokracrop pamhc2crops:pampeascrop pamhc2crops:pamspinachcrop pamhc2crops:pamtomatillocrop pamhc2crops:pamtomatocrop pamhc2crops:pamwintersquashcrop pamhc2crops:pamzucchinicrop pamhc2crops:pamarrowrootcrop pamhc2crops:pamcassavacrop pamhc2crops:pamgarliccrop pamhc2crops:pamjicamacrop pamhc2crops:pamleekcrop pamhc2crops:pamkohlrabicrop pamhc2crops:pamonioncrop pamhc2crops:pamparsnipcrop pamhc2crops:pampeanutcrop pamhc2crops:pamradishcrop pamhc2crops:pamrhubarbcrop pamhc2crops:pamrutabagacrop pamhc2crops:pamscallioncrop pamhc2crops:pamsweetpotatocrop pamhc2crops:pamtarocrop pamhc2crops:pamturnipcrop pamhc2crops:pamwaterchestnutcrop pamhc2crops:pamblackberrycrop pamhc2crops:pamblueberrycrop pamhc2crops:pamcactusfruitcrop pamhc2crops:pamcandleberrycrop pamhc2crops:pamcantaloupecrop pamhc2crops:pamcranberrycrop pamhc2crops:pamelderberrycrop pamhc2crops:pamgrapecrop pamhc2crops:pamgreengrapecrop pamhc2crops:pamhuckleberrycrop pamhc2crops:pamjuniperberrycrop pamhc2crops:pamkiwicrop pamhc2crops:pammullberrycrop pamhc2crops:pampineapplecrop pamhc2crops:pamraspberrycrop pamhc2crops:pamstrawberrycrop pamhc2crops:pamcoffeebeancrop pamhc2crops:pamtealeafcrop pamhc2crops:pamagavecrop pamhc2crops:pamwhitemushroomcrop pamhc2crops:pamgingercrop pamhc2crops:pamsesamecrop pamhc2crops:pamspiceleafcrop pamhc2crops:pammustardcrop byg:lament_sprouts byg:synthian_fungus byg:blue_glowcane byg:pink_glowcane byg:purple_glowcane byg:red_glowcane byg:warped_bush byg:blue_glowshroom byg:purple_glowshroom byg:scorched_bush byg:soul_shroom byg:soul_shroom_spore_end byg:death_cap byg:weeping_roots byg:nether_bristle byg:synthian_sprout byg:synthian_roots byg:hanging_synthian_roots byg:embur_sprouts byg:embur_roots byg:ivis_roots byg:ivis_sprout byg:bulbis_sprouts byg:ether_bush byg:thereal_bellflower byg:nightshade_sprouts byg:nightshade_roots byg:oddity_bush byg:shulkren_fungus byg:vermillion_sculk_tendrils byg:vermillion_sculk_growth byg:green_mushroom byg:weeping_milkcap byg:wood_blewit byg:black_puff byg:crimson_berry_bush byg:blueberry_bush byg:nightshade_berry_bush byg:winter_succulent byg:allium_flower_bush byg:alpine_bellflower byg:amaranth byg:angelica byg:begonia byg:bistort byg:black_rose byg:blue_sage byg:california_poppy byg:crocus byg:cyan_amaranth byg:cyan_rose byg:cyan_tulip byg:daffodil byg:fairy_slipper byg:firecracker_flower_bush byg:green_tulip byg:guzmania byg:incan_lily byg:iris byg:kovan_flower byg:lazarus_bellflower byg:lolipop_flower byg:magenta_amaranth byg:magenta_tulip byg:orange_amaranth byg:orange_daisy byg:osiria_rose byg:peach_leather_flower byg:pink_allium byg:pink_allium_flower_bush byg:pink_anemone byg:pink_daffodil byg:pink_orchid byg:protea_flower byg:purple_amaranth byg:purple_orchid byg:purple_sage byg:purple_tulip byg:red_cornflower byg:red_orchid byg:richea byg:rose byg:snowdrops byg:silver_vase_flower byg:torch_ginger byg:violet_leather_flower byg:white_anemone byg:white_sage byg:white_cyclamen byg:winter_rose byg:winter_scilla byg:yellow_daffodil byg:yellow_tulip byg:horseweed byg:winter_cyclamen cutecore:cherry_leaf_litter cutecore:cherry_wood_sapling cutecore:wisteria_sapling cutecore:wisteria_leaf_litter cutecore:lemon_leaf_litter cutecore:lemon_sapling cutecore:hyacinth cutecore:lotus_flower cutecore:violets cutecore:pink_rose cutecore:white_rose cutecore:rose cutecore:forget_me_nots cutecore:pink_carnation cutecore:red_carnation cutecore:white_carnation forbidden_arcanus:yellow_orchid forbidden_arcanus:golden_orchid immersiveengineering:hemp:growth=bottom0 immersiveengineering:hemp:growth=bottom1 immersiveengineering:hemp:growth=bottom2 immersiveengineering:hemp:growth=bottom3 simplefarming:apple_sapling simplefarming:apricot_sapling simplefarming:banana_sapling simplefarming:cherry_sapling simplefarming:mango_sapling simplefarming:olive_sapling simplefarming:orange_sapling simplefarming:pear_sapling simplefarming:plum_sapling simplefarming:barley_crop simplefarming:cassava_crop simplefarming:corn_crop simplefarming:cotton_crop simplefarming:cross_crop simplefarming:cucumber_crop simplefarming:cumin_plant simplefarming:eggplant_crop simplefarming:ginger_crop simplefarming:honeydew_crop simplefarming:kenaf_crop simplefarming:lettuce_crop simplefarming:oat_crop simplefarming:onion_crop simplefarming:pea_crop simplefarming:peanut_crop simplefarming:pepper_crop simplefarming:quinoa_plant simplefarming:radish_crop simplefarming:rice_crop simplefarming:rye_crop simplefarming:scrop simplefarming:hcrop simplefarming:marshmallow_crop simplefarming:sunflower_plant simplefarming:sorghum_crop simplefarming:soybean_crop simplefarming:spinach_crop simplefarming:sweet_potato_crop simplefarming:tomato_crop simplefarming:turnip_crop simplefarming:wild_crop simplefarming:yam_crop simplefarming:zucchini_crop byg:aspen_sapling byg:baobab_sapling byg:blue_enchanted_sapling byg:green_enchanted_sapling byg:pink_cherry_sapling byg:white_cherry_sapling byg:cika_sapling byg:cypress_sapling byg:ebony_sapling byg:ether_sapling byg:fir_sapling byg:aspen_sapling byg:holly_berry_sapling byg:holly_sapling byg:jacaranda_sapling byg:flowering_jacaranda_sapling byg:indigo_jacaranda_sapling byg:indigo_flowering_jacaranda_sapling byg:lament_sapling byg:mahogany_sapling byg:mangrove_sapling byg:maple_sapling byg:red_maple_sapling byg:silver_maple_sapling byg:nightshade_sapling byg:flowering_nightshade_sapling byg:palm_sapling byg:palo_verde_sapling byg:flowering_palo_verde_sapling byg:pine_sapling byg:rainbow_eucalyptus_sapling byg:redwood_sapling byg:pine_sapling byg:skyris_sapling byg:green_apple_skyris_sapling byg:willow_sapling byg:witch_hazel_sapling byg:blooming_witch_hazel_sapling byg:zelkova_sapling byg:withering_oak_sapling byg:araucaria_sapling byg:blue_spruce_sapling byg:brown_birch_sapling byg:brown_oak_sapling byg:zelkova_sapling byg:brown_zelkova_sapling byg:joshua_sapling byg:ripe_joshua_sapling byg:orange_birch_sapling byg:orange_oak_sapling byg:orange_spruce_sapling byg:orchard_sapling byg:flowering_orchard_sapling byg:ripe_orchard_sapling byg:red_birch_sapling byg:red_oak_sapling byg:red_spruce_sapling byg:yellow_birch_sapling byg:yellow_spruce_sapling byg:green_mushroom occultism:otherworld_sapling_natural occultism:otherworld_sapling integrateddynamics:menril_sapling projectvibrantjourneys:glowcap projectvibrantjourneys:crimson_nettle projectvibrantjourneys:warped_nettle twilightforest:mayapple deeperdarker:echo_sapling create_dd:rubber_sapling vegandelight:wild_soybean # CROPS LIKE ENTITIES - block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots + block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots farmersdelight:cabbages farmersdelight:budding_tomatoes farmersdelight:onions vegandelight:soybean_crop # LOWER-HALF ENTITIES - block.10175 = minecraft:pitcher_plant:half=lower minecraft:sunflower:half=lower minecraft:lilac:half=lower minecraft:tall_grass:half=lower minecraft:large_fern:half=lower minecraft:rose_bush:half=lower minecraft:peony:half=lower minecraft:tall_seagrass:half=lower atmospheric:water_hyacinth:half=lower atmospheric:tall_yucca_flower:half=lower environmental:tall_cattail:half=lower environmental:pink_delphinium:half=lower environmental:blue_delphinium:half=lower environmental:purple_delphinium:half=lower environmental:white_delphinium:half=lower environmental:bird_of_paradise:half=lower environmental:giant_tall_grass:half=lower farmersdelight:wild_rice:half=lower upgrade_aquatic:flowering_rush:half=lower upgrade_aquatic:tall_beachgrass:half=lower upgrade_aquatic:tall_blue_pickerelweed:half=lower upgrade_aquatic:tall_purple_pickerelweed:half=lower biomesoplenty:barley:half=lower biomesoplenty:goldenrod:half=lower biomesoplenty:blue_hydrangea:half=lower biomesoplenty:watergrass:half=lower botania:white_double_flower:half=lower botania:orange_double_flower:half=lower botania:magenta_double_flower:half=lower botania:light_blue_double_flower:half=lower botania:yellow_double_flower:half=lower botania:lime_double_flower:half=lower botania:pink_double_flower:half=lower botania:gray_double_flower:half=lower botania:light_gray_double_flower:half=lower botania:cyan_double_flower:half=lower botania:purple_double_flower:half=lower botania:blue_double_flower:half=lower botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=lower biomesoplenty:reed:half=lower biomesoplenty:cattail:half=lower byg:tall_crimson_roots:half=lower byg:tall_ether_grass:half=lower byg:reeds:half=lower byg:tall_prairie_grass:half=lower byg:tall_allium:half=lower byg:azalea:half=lower byg:tall_pink_allium:half=lower moreflowerbushes:purple_hibiscus:half=lower moreflowerbushes:mountain_laurel:half=lower moreflowerbushes:larkspur:half=lower moreflowerbushes:golden_shower:half=lower moreflowerbushes:fuchsia:half=lower moreflowerbushes:butterfly_weed:half=lower moreflowerbushes:blue_sage:half=lower moreflowerbushes:blue_hortensia:half=lower byg:japanese_orchid:half=lower byg:delphinium:half=lower byg:foxglove:half=lower cutecore:pink_rosebush:half=lower cutecore:white_rosebush:half=lower cutecore:pink_hydrangeas:half=lower cutecore:blue_hydrangeas:half=lower cutecore:purple_hydrangeas:half=lower + block.10175 = minecraft:pitcher_plant:half=lower minecraft:sunflower:half=lower minecraft:lilac:half=lower minecraft:tall_grass:half=lower minecraft:large_fern:half=lower minecraft:rose_bush:half=lower minecraft:peony:half=lower minecraft:tall_seagrass:half=lower atmospheric:water_hyacinth:half=lower atmospheric:tall_yucca_flower:half=lower environmental:tall_cattail:half=lower environmental:pink_delphinium:half=lower environmental:blue_delphinium:half=lower environmental:purple_delphinium:half=lower environmental:white_delphinium:half=lower environmental:bird_of_paradise:half=lower environmental:giant_tall_grass:half=lower farmersdelight:wild_rice:half=lower upgrade_aquatic:flowering_rush:half=lower upgrade_aquatic:tall_beachgrass:half=lower upgrade_aquatic:tall_blue_pickerelweed:half=lower upgrade_aquatic:tall_purple_pickerelweed:half=lower biomesoplenty:barley:half=lower biomesoplenty:goldenrod:half=lower biomesoplenty:blue_hydrangea:half=lower biomesoplenty:watergrass:half=lower botania:white_double_flower:half=lower botania:orange_double_flower:half=lower botania:magenta_double_flower:half=lower botania:light_blue_double_flower:half=lower botania:yellow_double_flower:half=lower botania:lime_double_flower:half=lower botania:pink_double_flower:half=lower botania:gray_double_flower:half=lower botania:light_gray_double_flower:half=lower botania:cyan_double_flower:half=lower botania:purple_double_flower:half=lower botania:blue_double_flower:half=lower botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=lower biomesoplenty:reed:half=lower biomesoplenty:cattail:half=lower byg:tall_crimson_roots:half=lower byg:tall_ether_grass:half=lower byg:reeds:half=lower byg:tall_prairie_grass:half=lower byg:tall_allium:half=lower byg:azalea:half=lower byg:tall_pink_allium:half=lower moreflowerbushes:purple_hibiscus:half=lower moreflowerbushes:mountain_laurel:half=lower moreflowerbushes:larkspur:half=lower moreflowerbushes:golden_shower:half=lower moreflowerbushes:fuchsia:half=lower moreflowerbushes:butterfly_weed:half=lower moreflowerbushes:blue_sage:half=lower moreflowerbushes:blue_hortensia:half=lower byg:japanese_orchid:half=lower byg:delphinium:half=lower byg:foxglove:half=lower cutecore:pink_rosebush:half=lower cutecore:white_rosebush:half=lower cutecore:pink_hydrangeas:half=lower cutecore:blue_hydrangeas:half=lower cutecore:purple_hydrangeas:half=lower farmersdelight:rice create_bic_bit:sunflowerstem:half=lower # UPPER-HALF ENTITIES - block.10176 = minecraft:pitcher_plant:half=upper minecraft:sunflower:half=upper minecraft:lilac:half=upper minecraft:tall_grass:half=upper minecraft:large_fern:half=upper minecraft:rose_bush:half=upper minecraft:peony:half=upper minecraft:tall_seagrass:half=upper atmospheric:water_hyacinth:half=upper atmospheric:tall_yucca_flower:half=upper environmental:tall_cattail:half=upper environmental:pink_delphinium:half=upper environmental:blue_delphinium:half=upper environmental:purple_delphinium:half=upper environmental:white_delphinium:half=upper environmental:bird_of_paradise:half=upper environmental:giant_tall_grass:half=upper farmersdelight:wild_rice:half=upper upgrade_aquatic:flowering_rush:half=upper upgrade_aquatic:tall_beachgrass:half=upper upgrade_aquatic:tall_blue_pickerelweed:half=upper upgrade_aquatic:tall_purple_pickerelweed:half=upper biomesoplenty:barley:half=upper biomesoplenty:goldenrod:half=upper biomesoplenty:blue_hydrangea:half=upper biomesoplenty:watergrass:half=upper botania:white_double_flower:half=upper botania:orange_double_flower:half=upper botania:magenta_double_flower:half=upper botania:light_blue_double_flower:half=upper botania:yellow_double_flower:half=upper botania:lime_double_flower:half=upper botania:pink_double_flower:half=upper botania:gray_double_flower:half=upper botania:light_gray_double_flower:half=upper botania:cyan_double_flower:half=upper botania:purple_double_flower:half=upper botania:blue_double_flower:half=upper botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=upper biomesoplenty:reed:half=upper biomesoplenty:cattail:half=upper byg:tall_crimson_roots:half=upper byg:tall_ether_grass:half=upper byg:reeds:half=upper byg:tall_prairie_grass:half=upper byg:tall_allium:half=upper byg:azalea:half=upper byg:tall_pink_allium:half=upper moreflowerbushes:purple_hibiscus:half=upper moreflowerbushes:mountain_laurel:half=upper moreflowerbushes:larkspur:half=upper moreflowerbushes:golden_shower:half=upper moreflowerbushes:fuchsia:half=upper moreflowerbushes:butterfly_weed:half=upper moreflowerbushes:blue_sage:half=upper moreflowerbushes:blue_hortensia:half=upper byg:japanese_orchid:half=upper byg:delphinium:half=upper byg:foxglove:half=upper cutecore:pink_rosebush:half=upper cutecore:white_rosebush:half=upper cutecore:pink_hydrangeas:half=upper cutecore:blue_hydrangeas:half=upper cutecore:purple_hydrangeas:half=upper + block.10176 = minecraft:pitcher_plant:half=upper minecraft:sunflower:half=upper minecraft:lilac:half=upper minecraft:tall_grass:half=upper minecraft:large_fern:half=upper minecraft:rose_bush:half=upper minecraft:peony:half=upper minecraft:tall_seagrass:half=upper atmospheric:water_hyacinth:half=upper atmospheric:tall_yucca_flower:half=upper environmental:tall_cattail:half=upper environmental:pink_delphinium:half=upper environmental:blue_delphinium:half=upper environmental:purple_delphinium:half=upper environmental:white_delphinium:half=upper environmental:bird_of_paradise:half=upper environmental:giant_tall_grass:half=upper farmersdelight:wild_rice:half=upper upgrade_aquatic:flowering_rush:half=upper upgrade_aquatic:tall_beachgrass:half=upper upgrade_aquatic:tall_blue_pickerelweed:half=upper upgrade_aquatic:tall_purple_pickerelweed:half=upper biomesoplenty:barley:half=upper biomesoplenty:goldenrod:half=upper biomesoplenty:blue_hydrangea:half=upper biomesoplenty:watergrass:half=upper botania:white_double_flower:half=upper botania:orange_double_flower:half=upper botania:magenta_double_flower:half=upper botania:light_blue_double_flower:half=upper botania:yellow_double_flower:half=upper botania:lime_double_flower:half=upper botania:pink_double_flower:half=upper botania:gray_double_flower:half=upper botania:light_gray_double_flower:half=upper botania:cyan_double_flower:half=upper botania:purple_double_flower:half=upper botania:blue_double_flower:half=upper botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=upper biomesoplenty:reed:half=upper biomesoplenty:cattail:half=upper byg:tall_crimson_roots:half=upper byg:tall_ether_grass:half=upper byg:reeds:half=upper byg:tall_prairie_grass:half=upper byg:tall_allium:half=upper byg:azalea:half=upper byg:tall_pink_allium:half=upper moreflowerbushes:purple_hibiscus:half=upper moreflowerbushes:mountain_laurel:half=upper moreflowerbushes:larkspur:half=upper moreflowerbushes:golden_shower:half=upper moreflowerbushes:fuchsia:half=upper moreflowerbushes:butterfly_weed:half=upper moreflowerbushes:blue_sage:half=upper moreflowerbushes:blue_hortensia:half=upper byg:japanese_orchid:half=upper byg:delphinium:half=upper byg:foxglove:half=upper cutecore:pink_rosebush:half=upper cutecore:white_rosebush:half=upper cutecore:pink_hydrangeas:half=upper cutecore:blue_hydrangeas:half=upper cutecore:purple_hydrangeas:half=upper farmersdelight:rice_panicles create_bic_bit:sunflowerstem:half=upper # LEAVES - block.10018 = minecraft:cherry_leaves minecraft:oak_leaves minecraft:spruce_leaves minecraft:birch_leaves minecraft:jungle_leaves minecraft:acacia_leaves minecraft:dark_oak_leaves minecraft:pale_oak_leaves minecraft:azalea_leaves minecraft:azalea_leaves_flowers minecraft:flowering_azalea_leaves minecraft:mangrove_leaves biomesoplenty:origin_leaves biomesoplenty:flowering_oak_leaves biomesoplenty:rainbow_birch_leaves biomesoplenty:yellow_autumn_leaves biomesoplenty:orange_autumn_leaves biomesoplenty:maple_leaves biomesoplenty:fir_leaves biomesoplenty:redwood_leaves biomesoplenty:mahogany_leaves biomesoplenty:palm_leaves biomesoplenty:willow_leaves biomesoplenty:dead_leaves biomesoplenty:magic_leaves biomesoplenty:umbran_leaves biomesoplenty:hellbark_leaves biomesoplenty:pink_cherry_leaves biomesoplenty:white_cherry_leaves biomesoplenty:jacaranda_leaves quark:blue_blossom_leaves quark:lavender_blossom_leaves quark:orange_blossom_leaves quark:pink_blossom_leaves quark:yellow_blossom_leaves atmospheric:rosewood_leaves atmospheric:morado_leaves atmospheric:flowering_morado_leaves atmospheric:yucca_leaves atmospheric:kousa_leaves atmospheric:aspen_leaves atmospheric:grimwood_leaves autumnity:red_maple_leaves autumnity:orange_maple_leaves autumnity:yellow_maple_leaves autumnity:maple_leaves environmental:willow_leaves environmental:cherry_leaves environmental:pink_wisteria_leaves environmental:blue_wisteria_leaves environmental:purple_wisteria_leaves environmental:white_wisteria_leaves environmental:pink_hanging_wisteria_leaves environmental:blue_hanging_wisteria_leaves environmental:purple_hanging_wisteria_leaves environmental:white_hanging_wisteria_leaves environmental:hanging_willow_leaves upgrade_aquatic:river_leaves byg:aspen_leaves byg:araucaria_leaves byg:baobab_leaves byg:blooming_witch_hazel_leaves byg:blue_enchanted_leaves byg:blue_spruce_leaves byg:brown_birch_leaves byg:brown_oak_leaves byg:brown_zelkova_leaves byg:cika_leaves byg:cypress_leaves byg:ebony_leaves byg:fir_leaves byg:flowering_orchard_leaves byg:flowering_nightshade_leaves byg:flowering_palo_verde_leaves byg:green_apple_skyris_leaves byg:green_enchanted_leaves byg:holly_berry_leaves byg:holly_leaves byg:indigo_jacaranda_leaves byg:jacaranda_leaves byg:joshua_leaves byg:mahogany_leaves byg:mangrove_leaves byg:maple_leaves byg:orange_birch_leaves byg:orange_oak_leaves byg:orange_spruce_leaves byg:orchard_leaves byg:palo_verde_leaves byg:pine_leaves byg:pink_cherry_leaves byg:rainbow_eucalyptus_leaves byg:red_birch_leaves byg:red_maple_leaves byg:red_oak_leaves byg:red_spruce_leaves byg:redwood_leaves byg:ripe_joshua_leaves byg:ripe_orchard_leaves byg:silver_maple_leaves byg:skyris_leaves byg:white_cherry_leaves byg:willow_leaves byg:witch_hazel_leaves byg:yellow_birch_leaves byg:yellow_spruce_leaves byg:zelkova_leaves ecotones:hazel_leaves sakurarosea:alt_sakura_leaves sakurarosea:sakura_leaves sakurarosea:white_sakura_leaves terrestria:cypress_leaves terrestria:dark_japanese_maple_leaves terrestria:hemlock_leaves terrestria:japanese_maple_leaves terrestria:japanese_maple_shrub_leaves terrestria:jungle_palm_leaves terrestria:rainbow_eucalyptus_leaves terrestria:redwood_leaves terrestria:rubber_leaves terrestria:sakura_leaves terrestria:willow_leaves terrestria:yucca_palm_leaves traverse:brown_autumnal_leaves traverse:fir_leaves traverse:orange_autumnal_leaves traverse:red_autumnal_leaves traverse:yellow_autumnal_leaves vanillaenhanced:redwood_leaves wild_explorer:autumn_oak_leaves wild_explorer:autumn_birch_leaves wild_explorer:pink_cherry_oak_leaves wild_explorer:white_cherry_oak_leaves wild_explorer:palm_leaves cutecore:cherry_wood_leaves cutecore:cherry_wood_leaves_fruit cutecore:wisteria_leaves cutecore:lemon_leaves cutecore:lemon_leaves_fruiting dynamictrees:jungle_leaves dynamictrees:oak_leaves dynamictrees:spruce_leaves dynamictrees:dark_oak_leaves dynamictrees:acacia_leaves dynamictrees:birch_leaves simplefarming:apple_leaves simplefarming:apricot_leaves simplefarming:banana_leaves simplefarming:cherry_leaves simplefarming:mango_leaves simplefarming:olive_leaves simplefarming:orange_leaves simplefarming:pear_leaves simplefarming:plum_leaves mythicbotany:dreamwood_leaves undergarden:smogstem_leaves undergarden:wigglewood_leaves occultism:otherworld_leaves occultism:otherworld_leaves_natural integrateddynamics:menril_leaves extlights:xmas_leaves extlights:xmas_leaves_bulb extlights:xmas_leaves_bulb_red extlights:xmas_leaves_bulb_green extlights:xmas_leaves_bulb_blue extlights:xmas_leaves_bulb_blinking_redgreen extlights:xmas_leaves_bulb_blinking_redblue extlights:xmas_leaves_bulb_blinking_greenblue extlights:xmas_leaves_bulb_blinking_rgb extlights:xmas_leaves_bulb_smooth_redgreen extlights:xmas_leaves_bulb_smooth_redblue extlights:xmas_leaves_bulb_smooth_greenblue extlights:xmas_leaves_bulb_smooth_rgb techreborn:rubber_leaves blockus:legacy_leaves blockus:white_oak_leaves architects_palette:twisted_leaves twilightforest:twilight_oak_leaves twilightforest:canopy_leaves twilightforest:mangrove_leaves twilightforest:dark_leaves twilightforest:time_leaves twilightforest:transformation_leaves twilightforest:mining_leaves twilightforest:sorting_leaves twilightforest:giant_leaves twilightforest:thorn_leaves tfc:wood/leaves/acacia tfc:wood/leaves/ash tfc:wood/leaves/aspen tfc:wood/leaves/birch tfc:wood/leaves/blackwood tfc:wood/leaves/chestnut tfc:wood/leaves/douglas_fir tfc:wood/leaves/hickory tfc:wood/leaves/kapok tfc:wood/leaves/mangrove tfc:wood/leaves/maple tfc:wood/leaves/oak tfc:wood/leaves/palm tfc:wood/leaves/pine tfc:wood/leaves/rosewood tfc:wood/leaves/sequoia tfc:wood/leaves/spruce tfc:wood/leaves/sycamore tfc:wood/leaves/white_cedar tfc:wood/leaves/willow tfc:plant/cherry_leaves tfc:plant/green_apple_leaves tfc:plant/lemon_leaves tfc:plant/olive_leaves tfc:plant/orange_leaves tfc:plant/peach_leaves tfc:plant/plum_leaves tfc:plant/red_apple_leaves + block.10018 = minecraft:cherry_leaves minecraft:oak_leaves minecraft:spruce_leaves minecraft:birch_leaves minecraft:jungle_leaves minecraft:acacia_leaves minecraft:dark_oak_leaves minecraft:pale_oak_leaves minecraft:azalea_leaves minecraft:azalea_leaves_flowers minecraft:flowering_azalea_leaves minecraft:mangrove_leaves biomesoplenty:origin_leaves biomesoplenty:flowering_oak_leaves biomesoplenty:rainbow_birch_leaves biomesoplenty:yellow_autumn_leaves biomesoplenty:orange_autumn_leaves biomesoplenty:maple_leaves biomesoplenty:fir_leaves biomesoplenty:redwood_leaves biomesoplenty:mahogany_leaves biomesoplenty:palm_leaves biomesoplenty:willow_leaves biomesoplenty:dead_leaves biomesoplenty:magic_leaves biomesoplenty:umbran_leaves biomesoplenty:hellbark_leaves biomesoplenty:pink_cherry_leaves biomesoplenty:white_cherry_leaves biomesoplenty:jacaranda_leaves quark:blue_blossom_leaves quark:lavender_blossom_leaves quark:orange_blossom_leaves quark:pink_blossom_leaves quark:yellow_blossom_leaves atmospheric:rosewood_leaves atmospheric:morado_leaves atmospheric:flowering_morado_leaves atmospheric:yucca_leaves atmospheric:kousa_leaves atmospheric:aspen_leaves atmospheric:grimwood_leaves autumnity:red_maple_leaves autumnity:orange_maple_leaves autumnity:yellow_maple_leaves autumnity:maple_leaves environmental:willow_leaves environmental:cherry_leaves environmental:pink_wisteria_leaves environmental:blue_wisteria_leaves environmental:purple_wisteria_leaves environmental:white_wisteria_leaves environmental:pink_hanging_wisteria_leaves environmental:blue_hanging_wisteria_leaves environmental:purple_hanging_wisteria_leaves environmental:white_hanging_wisteria_leaves environmental:hanging_willow_leaves upgrade_aquatic:river_leaves byg:aspen_leaves byg:araucaria_leaves byg:baobab_leaves byg:blooming_witch_hazel_leaves byg:blue_enchanted_leaves byg:blue_spruce_leaves byg:brown_birch_leaves byg:brown_oak_leaves byg:brown_zelkova_leaves byg:cika_leaves byg:cypress_leaves byg:ebony_leaves byg:fir_leaves byg:flowering_orchard_leaves byg:flowering_nightshade_leaves byg:flowering_palo_verde_leaves byg:green_apple_skyris_leaves byg:green_enchanted_leaves byg:holly_berry_leaves byg:holly_leaves byg:indigo_jacaranda_leaves byg:jacaranda_leaves byg:joshua_leaves byg:mahogany_leaves byg:mangrove_leaves byg:maple_leaves byg:orange_birch_leaves byg:orange_oak_leaves byg:orange_spruce_leaves byg:orchard_leaves byg:palo_verde_leaves byg:pine_leaves byg:pink_cherry_leaves byg:rainbow_eucalyptus_leaves byg:red_birch_leaves byg:red_maple_leaves byg:red_oak_leaves byg:red_spruce_leaves byg:redwood_leaves byg:ripe_joshua_leaves byg:ripe_orchard_leaves byg:silver_maple_leaves byg:skyris_leaves byg:white_cherry_leaves byg:willow_leaves byg:witch_hazel_leaves byg:yellow_birch_leaves byg:yellow_spruce_leaves byg:zelkova_leaves ecotones:hazel_leaves sakurarosea:alt_sakura_leaves sakurarosea:sakura_leaves sakurarosea:white_sakura_leaves terrestria:cypress_leaves terrestria:dark_japanese_maple_leaves terrestria:hemlock_leaves terrestria:japanese_maple_leaves terrestria:japanese_maple_shrub_leaves terrestria:jungle_palm_leaves terrestria:rainbow_eucalyptus_leaves terrestria:redwood_leaves terrestria:rubber_leaves terrestria:sakura_leaves terrestria:willow_leaves terrestria:yucca_palm_leaves traverse:brown_autumnal_leaves traverse:fir_leaves traverse:orange_autumnal_leaves traverse:red_autumnal_leaves traverse:yellow_autumnal_leaves vanillaenhanced:redwood_leaves wild_explorer:autumn_oak_leaves wild_explorer:autumn_birch_leaves wild_explorer:pink_cherry_oak_leaves wild_explorer:white_cherry_oak_leaves wild_explorer:palm_leaves cutecore:cherry_wood_leaves cutecore:cherry_wood_leaves_fruit cutecore:wisteria_leaves cutecore:lemon_leaves cutecore:lemon_leaves_fruiting dynamictrees:jungle_leaves dynamictrees:oak_leaves dynamictrees:spruce_leaves dynamictrees:dark_oak_leaves dynamictrees:acacia_leaves dynamictrees:birch_leaves simplefarming:apple_leaves simplefarming:apricot_leaves simplefarming:banana_leaves simplefarming:cherry_leaves simplefarming:mango_leaves simplefarming:olive_leaves simplefarming:orange_leaves simplefarming:pear_leaves simplefarming:plum_leaves mythicbotany:dreamwood_leaves undergarden:smogstem_leaves undergarden:wigglewood_leaves occultism:otherworld_leaves occultism:otherworld_leaves_natural integrateddynamics:menril_leaves extlights:xmas_leaves extlights:xmas_leaves_bulb extlights:xmas_leaves_bulb_red extlights:xmas_leaves_bulb_green extlights:xmas_leaves_bulb_blue extlights:xmas_leaves_bulb_blinking_redgreen extlights:xmas_leaves_bulb_blinking_redblue extlights:xmas_leaves_bulb_blinking_greenblue extlights:xmas_leaves_bulb_blinking_rgb extlights:xmas_leaves_bulb_smooth_redgreen extlights:xmas_leaves_bulb_smooth_redblue extlights:xmas_leaves_bulb_smooth_greenblue extlights:xmas_leaves_bulb_smooth_rgb techreborn:rubber_leaves blockus:legacy_leaves blockus:white_oak_leaves architects_palette:twisted_leaves twilightforest:twilight_oak_leaves twilightforest:canopy_leaves twilightforest:mangrove_leaves twilightforest:dark_leaves twilightforest:time_leaves twilightforest:transformation_leaves twilightforest:mining_leaves twilightforest:sorting_leaves twilightforest:giant_leaves twilightforest:thorn_leaves tfc:wood/leaves/acacia tfc:wood/leaves/ash tfc:wood/leaves/aspen tfc:wood/leaves/birch tfc:wood/leaves/blackwood tfc:wood/leaves/chestnut tfc:wood/leaves/douglas_fir tfc:wood/leaves/hickory tfc:wood/leaves/kapok tfc:wood/leaves/mangrove tfc:wood/leaves/maple tfc:wood/leaves/oak tfc:wood/leaves/palm tfc:wood/leaves/pine tfc:wood/leaves/rosewood tfc:wood/leaves/sequoia tfc:wood/leaves/spruce tfc:wood/leaves/sycamore tfc:wood/leaves/white_cedar tfc:wood/leaves/willow tfc:plant/cherry_leaves tfc:plant/green_apple_leaves tfc:plant/lemon_leaves tfc:plant/olive_leaves tfc:plant/orange_leaves tfc:plant/peach_leaves tfc:plant/plum_leaves tfc:plant/red_apple_leaves deeperdarker:echo_leaves create_dd:rubber_leaves # NO-WAVEABLE SMALL ELEMENTS block.10032 = sugar_cane tube_coral brain_coral fire_coral bubble_coral horn_coral dead_tube_coral dead_brain_coral dead_fire_coral dead_bubble_coral dead_horn_coral tube_coral_fan brain_coral_fan fire_coral_fan bubble_coral_fan horn_coral_fan dead_tube_coral_fan dead_brain_coral_fan dead_fire_coral_fan dead_bubble_coral_fan dead_horn_coral_fan nether_wart tfc:plant/athyrium_fern tfc:plant/canna tfc:plant/goldenrod tfc:plant/pampas_grass tfc:plant/perovskia tfc:plant/rose tfc:plant/beachgrass tfc:plant/bluegrass tfc:plant/bromegrass tfc:plant/fountain_grass tfc:plant/manatee_grass tfc:plant/orchard_grass tfc:plant/ryegrass tfc:plant/scutch_grass tfc:plant/star_grass tfc:plant/timothy_grass tfc:plant/raddia_grass tfc:plant/allium tfc:plant/anthurium tfc:plant/arrowhead tfc:plant/badderlocks tfc:plant/barrel_cactus tfc:plant/blood_lily tfc:plant/blue_ginger tfc:plant/blue_orchid tfc:plant/bur_reed tfc:plant/butterfly_milkweed tfc:plant/black_orchid tfc:plant/calendula tfc:plant/cattail tfc:plant/cobblestone_lichen tfc:plant/coontail tfc:plant/cordgrass tfc:plant/dandelion tfc:plant/dead_bush tfc:plant/desert_flame tfc:plant/duckweed tfc:plant/eel_grass tfc:plant/field_horsetail tfc:plant/foxglove tfc:plant/grape_hyacinth tfc:plant/green_algae tfc:plant/gutweed tfc:plant/guzmania tfc:plant/heliconia tfc:plant/heather tfc:plant/hibiscus tfc:plant/houstonia tfc:plant/kangaroo_paw tfc:plant/king_fern tfc:plant/labrador_tea tfc:plant/lady_fern tfc:plant/laminaria tfc:plant/licorice_fern tfc:plant/artists_conk tfc:plant/lily_of_the_valley tfc:plant/lilac tfc:plant/lotus tfc:plant/maiden_pink tfc:plant/marigold tfc:plant/meads_milkweed tfc:plant/milfoil tfc:plant/morning_glory tfc:plant/philodendron tfc:plant/moss tfc:plant/nasturtium tfc:plant/ostrich_fern tfc:plant/oxeye_daisy tfc:plant/phragmite tfc:plant/pickerelweed tfc:plant/pistia tfc:plant/poppy tfc:plant/primrose tfc:plant/pulsatilla tfc:plant/red_algae tfc:plant/reindeer_lichen tfc:plant/red_sealing_wax_palm tfc:plant/sacred_datura tfc:plant/sagebrush tfc:plant/sago tfc:plant/saguaro_fruit tfc:plant/sapphire_tower tfc:plant/sargassum tfc:plant/sea_lavender tfc:plant/sea_palm tfc:plant/silver_spurflower tfc:plant/snapdragon_pink tfc:plant/snapdragon_red tfc:plant/snapdragon_white tfc:plant/snapdragon_yellow tfc:plant/strelitzia tfc:plant/switchgrass tfc:plant/sword_fern tfc:plant/tall_fescue_grass tfc:plant/toquilla_palm tfc:plant/trillium tfc:plant/tropical_milkweed tfc:plant/tulip_orange tfc:plant/tulip_pink tfc:plant/tulip_red tfc:plant/tulip_white tfc:plant/turtle_grass tfc:plant/vriesea tfc:plant/water_canna tfc:plant/white_water_lily tfc:plant/purple_water_lily tfc:plant/yellow_water_lily tfc:plant/water_taro tfc:plant/yucca tfc:plant/hanging_vines_plant tfc:plant/hanging_vines tfc:plant/spanish_moss_plant tfc:plant/spanish_moss tfc:plant/liana_plant tfc:plant/liana tfc:plant/tree_fern_plant tfc:plant/tree_fern tfc:plant/arundo_plant tfc:plant/arundo tfc:plant/dry_phragmite_plant tfc:plant/dry_phragmite tfc:plant/winged_kelp_plant tfc:plant/winged_kelp tfc:plant/leafy_kelp_plant tfc:plant/leafy_kelp tfc:plant/giant_kelp_plant tfc:plant/giant_kelp_flower tfc:plant/ivy tfc:plant/jungle_vines tfc:plant/saguaro_plant tfc:plant/saguaro tfc:plant/golden_bamboo tfc:plant/golden_bamboo_sapling tfc:wild_crop/barley tfc:wild_crop/oat tfc:wild_crop/rye tfc:wild_crop/maize tfc:wild_crop/wheat tfc:wild_crop/rice tfc:wild_crop/beet tfc:wild_crop/cabbage tfc:wild_crop/carrot tfc:wild_crop/garlic tfc:wild_crop/green_bean tfc:wild_crop/potato tfc:wild_crop/onion tfc:wild_crop/soybean tfc:wild_crop/squash tfc:wild_crop/sugarcane tfc:wild_crop/tomato tfc:wild_crop/jute tfc:wild_crop/papyrus tfc:wild_crop/pumpkin tfc:wild_crop/melon tfc:wild_crop/red_bell_pepper tfc:wild_crop/yellow_bell_pepper tfc:plant/snowberry_bush tfc:plant/bunchberry_bush tfc:plant/gooseberry_bush tfc:plant/cloudberry_bush tfc:plant/strawberry_bush tfc:plant/wintergreen_berry_bush tfc:plant/cranberry_bush # REFLECTIVE block.10008 = minecraft:water minecraft:flowing_water subwild:water_puddle tfc:fluid/finite_fresh_water tfc:fluid/fresh_water tfc:fluid/finite_salt_water tfc:fluid/salt_water tfc:fluid/finite_river_water tfc:fluid/river_water tfc:fluid/spring_water tfc:fluid/finite_spring_water - block.10079 = ice slime_block white_stained_glass orange_stained_glass magenta_stained_glass light_blue_stained_glass yellow_stained_glass lime_stained_glass pink_stained_glass gray_stained_glass light_gray_stained_glass cyan_stained_glass purple_stained_glass blue_stained_glass brown_stained_glass green_stained_glass red_stained_glass black_stained_glass white_stained_glass_pane orange_stained_glass_pane magenta_stained_glass_pane light_blue_stained_glass_pane yellow_stained_glass_pane lime_stained_glass_pane pink_stained_glass_pane gray_stained_glass_pane light_gray_stained_glass_pane cyan_stained_glass_pane purple_stained_glass_pane blue_stained_glass_pane brown_stained_glass_pane green_stained_glass_pane red_stained_glass_pane black_stained_glass_pane tinted_glass + block.10079 = ice slime_block white_stained_glass orange_stained_glass magenta_stained_glass light_blue_stained_glass yellow_stained_glass lime_stained_glass pink_stained_glass gray_stained_glass light_gray_stained_glass cyan_stained_glass purple_stained_glass blue_stained_glass brown_stained_glass green_stained_glass red_stained_glass black_stained_glass white_stained_glass_pane orange_stained_glass_pane magenta_stained_glass_pane light_blue_stained_glass_pane yellow_stained_glass_pane lime_stained_glass_pane pink_stained_glass_pane gray_stained_glass_pane light_gray_stained_glass_pane cyan_stained_glass_pane purple_stained_glass_pane blue_stained_glass_pane brown_stained_glass_pane green_stained_glass_pane red_stained_glass_pane black_stained_glass_pane tinted_glass deeperdarker:soundproof_glass create:framed_glass create:framed_glass_pane create:framed_glass_trapdoor create:framed_glass_door create:tiled_glass create:tiled_glass_pane create:horizontal_framed_glass create:horizontal_framed_glass_pane create:vertical_framed_glass create:vertical_framed_glass_pane naturalist:crimson_froglass naturalist:verdant_froglass naturalist:azure_froglass naturalist:crimson_froglass_pane naturalist:verdant_froglass_pane naturalist:azure_froglass_pane glass glass_pane create_dd:vertical_framed_split_glass create_dd:horizontal_framed_split_glass create_dd:framed_split_glass create_dd:vertical_framed_split_glass_pane create_dd:horizontal_framed_split_glass_pane create_dd:framed_split_glass_pane createframed:white_stained_framed_glass_door createframed:white_stained_framed_glass_trapdoor createframed:white_stained_tiled_glass createframed:white_stained_tiled_glass_pane createframed:white_stained_framed_glass createframed:white_stained_framed_glass_pane createframed:horizontal_white_stained_framed_glass createframed:horizontal_white_stained_framed_glass_pane createframed:vertical_white_stained_framed_glass createframed:vertical_white_stained_framed_glass_pane createframed:light_gray_stained_framed_glass_door createframed:light_gray_stained_framed_glass_trapdoor createframed:light_gray_stained_tiled_glass createframed:light_gray_stained_tiled_glass_pane createframed:light_gray_stained_framed_glass createframed:light_gray_stained_framed_glass_pane createframed:horizontal_light_gray_stained_framed_glass createframed:horizontal_light_gray_stained_framed_glass_pane createframed:vertical_light_gray_stained_framed_glass createframed:vertical_light_gray_stained_framed_glass_pane createframed:gray_stained_framed_glass_door createframed:gray_stained_framed_glass_trapdoor createframed:gray_stained_tiled_glass createframed:gray_stained_tiled_glass_pane createframed:gray_stained_framed_glass createframed:gray_stained_framed_glass_pane createframed:horizontal_gray_stained_framed_glass createframed:horizontal_gray_stained_framed_glass_pane createframed:vertical_gray_stained_framed_glass createframed:vertical_gray_stained_framed_glass_pane createframed:black_stained_framed_glass_door createframed:black_stained_framed_glass_trapdoor createframed:black_stained_tiled_glass createframed:black_stained_tiled_glass_pane createframed:black_stained_framed_glass createframed:black_stained_framed_glass_pane createframed:horizontal_black_stained_framed_glass createframed:horizontal_black_stained_framed_glass_pane createframed:vertical_black_stained_framed_glass createframed:vertical_black_stained_framed_glass_pane createframed:brown_stained_framed_glass_door createframed:brown_stained_framed_glass_trapdoor createframed:brown_stained_tiled_glass createframed:brown_stained_tiled_glass_pane createframed:brown_stained_framed_glass createframed:brown_stained_framed_glass_pane createframed:horizontal_brown_stained_framed_glass createframed:horizontal_brown_stained_framed_glass_pane createframed:vertical_brown_stained_framed_glass createframed:vertical_brown_stained_framed_glass_pane createframed:red_stained_framed_glass_door createframed:red_stained_framed_glass_trapdoor createframed:red_stained_tiled_glass createframed:red_stained_tiled_glass_pane createframed:red_stained_framed_glass createframed:red_stained_framed_glass_pane createframed:horizontal_red_stained_framed_glass createframed:horizontal_red_stained_framed_glass_pane createframed:vertical_red_stained_framed_glass createframed:vertical_red_stained_framed_glass_pane createframed:orange_stained_framed_glass_door createframed:orange_stained_framed_glass_trapdoor createframed:orange_stained_tiled_glass createframed:orange_stained_tiled_glass_pane createframed:orange_stained_framed_glass createframed:orange_stained_framed_glass_pane createframed:horizontal_orange_stained_framed_glass createframed:horizontal_orange_stained_framed_glass_pane createframed:vertical_orange_stained_framed_glass createframed:vertical_orange_stained_framed_glass_pane createframed:yellow_stained_framed_glass_door createframed:yellow_stained_framed_glass_trapdoor createframed:yellow_stained_tiled_glass createframed:yellow_stained_tiled_glass_pane createframed:yellow_stained_framed_glass createframed:yellow_stained_framed_glass_pane createframed:horizontal_yellow_stained_framed_glass createframed:horizontal_yellow_stained_framed_glass_pane createframed:vertical_yellow_stained_framed_glass createframed:vertical_yellow_stained_framed_glass_pane createframed:lime_stained_framed_glass_door createframed:lime_stained_framed_glass_trapdoor createframed:lime_stained_tiled_glass createframed:lime_stained_tiled_glass_pane createframed:lime_stained_framed_glass createframed:lime_stained_framed_glass_pane createframed:horizontal_lime_stained_framed_glass createframed:horizontal_lime_stained_framed_glass_pane createframed:vertical_lime_stained_framed_glass createframed:vertical_lime_stained_framed_glass_pane createframed:green_stained_framed_glass_door createframed:green_stained_framed_glass_trapdoor createframed:green_stained_tiled_glass createframed:green_stained_tiled_glass_pane createframed:green_stained_framed_glass createframed:green_stained_framed_glass_pane createframed:horizontal_green_stained_framed_glass createframed:horizontal_green_stained_framed_glass_pane createframed:vertical_green_stained_framed_glass createframed:vertical_green_stained_framed_glass_pane createframed:cyan_stained_framed_glass_door createframed:cyan_stained_framed_glass_trapdoor createframed:cyan_stained_tiled_glass createframed:cyan_stained_tiled_glass_pane createframed:cyan_stained_framed_glass createframed:cyan_stained_framed_glass_pane createframed:horizontal_cyan_stained_framed_glass createframed:horizontal_cyan_stained_framed_glass_pane createframed:vertical_cyan_stained_framed_glass createframed:vertical_cyan_stained_framed_glass_pane createframed:light_blue_stained_framed_glass_door createframed:light_blue_stained_framed_glass_trapdoor createframed:light_blue_stained_tiled_glass createframed:light_blue_stained_tiled_glass_pane createframed:light_blue_stained_framed_glass createframed:light_blue_stained_framed_glass_pane createframed:horizontal_light_blue_stained_framed_glass createframed:horizontal_light_blue_stained_framed_glass_pane createframed:vertical_light_blue_stained_framed_glass createframed:vertical_light_blue_stained_framed_glass_pane createframed:blue_stained_framed_glass_door createframed:blue_stained_framed_glass_trapdoor createframed:blue_stained_tiled_glass createframed:blue_stained_tiled_glass_pane createframed:blue_stained_framed_glass createframed:blue_stained_framed_glass_pane createframed:horizontal_blue_stained_framed_glass createframed:horizontal_blue_stained_framed_glass_pane createframed:vertical_blue_stained_framed_glass createframed:vertical_blue_stained_framed_glass_pane createframed:purple_stained_framed_glass_door createframed:purple_stained_framed_glass_trapdoor createframed:purple_stained_tiled_glass createframed:purple_stained_tiled_glass_pane createframed:purple_stained_framed_glass createframed:purple_stained_framed_glass_pane createframed:horizontal_purple_stained_framed_glass createframed:horizontal_purple_stained_framed_glass_pane createframed:vertical_purple_stained_framed_glass createframed:vertical_purple_stained_framed_glass_pane createframed:magenta_stained_framed_glass_door createframed:magenta_stained_framed_glass_trapdoor createframed:magenta_stained_tiled_glass createframed:magenta_stained_tiled_glass_pane createframed:magenta_stained_framed_glass createframed:magenta_stained_framed_glass_pane createframed:horizontal_magenta_stained_framed_glass createframed:horizontal_magenta_stained_framed_glass_pane createframed:vertical_magenta_stained_framed_glass createframed:vertical_magenta_stained_framed_glass_pane createframed:pink_stained_framed_glass_door createframed:pink_stained_framed_glass_trapdoor createframed:pink_stained_tiled_glass createframed:pink_stained_tiled_glass_pane createframed:pink_stained_framed_glass createframed:pink_stained_framed_glass_pane createframed:horizontal_pink_stained_framed_glass createframed:horizontal_pink_stained_framed_glass_pane createframed:vertical_pink_stained_framed_glass createframed:vertical_pink_stained_framed_glass_pane + + layer.translucent = create:framed_glass create:framed_glass_pane create:framed_glass_trapdoor create:framed_glass_door create:tiled_glass create:tiled_glass_pane create:horizontal_framed_glass create:horizontal_framed_glass_pane create:vertical_framed_glass create:vertical_framed_glass_pane glass glass_pane create_dd:vertical_framed_split_glass create_dd:horizontal_framed_split_glass create_dd:framed_split_glass create_dd:vertical_framed_split_glass_pane create_dd:horizontal_framed_split_glass_pane create_dd:framed_split_glass_pane # EMMISIVE (LIKE GLOWSTONE) - block.10089 = glowstone shroomlight torch wall_torch redstone_torch redstone_wall_torch jack_o_lantern redstone_lamp lantern sea_lantern soul_lantern soul_torch soul_wall_torch + block.10089 = ochre_froglight verdant_froglight pearlescent_froglight glowstone shroomlight torch wall_torch redstone_torch redstone_wall_torch jack_o_lantern redstone_lamp lantern sea_lantern soul_lantern soul_torch soul_wall_torch cataclysm:void_lantern_block deeperdarker:sculk_gleam # NEW EMMISIVE block.10090 = magma_block end_root campfire:lit=true soul_campfire:lit=true beacon betterendforge:mossy_glowshroom_hymenophore betterendforge:mossy_glowshroom_fur betterendforge:blue_vine_lantern betterendforge:blue_vine_fur betterendforge::lumecorn:shape=light_top_middle betterendforge::lumecorn:shape=light_middle betterendforge::lumecorn:shape=light_bottom betterendforge::purple_polypore betterendforge::bulb_vine:shape=bottom @@ -34,13 +36,13 @@ block.10213 = soul_fire # METAL-LIKE - block.10400 = iron_block iron_trapdoor gold_block emerald_block lapis_block diamond_block copper_block exposed_copper weathered_copper oxidized_copper cut_copper exposed_cut_copper weathered_cut_copper oxidized_cut_copper cut_copper_stairs exposed_cut_copper_stairs weathered_cut_copper_stairs oxidized_cut_copper_stairs cut_copper_slab exposed_cut_copper_slab weathered_cut_copper_slab oxidized_cut_copper_slab waxed_cut_copper_slab waxed_weathered_cut_copper_slab waxed_weathered_copper waxed_exposed_copper waxed_copper_block waxed_oxidized_cut_copper_slab waxed_weathered_cut_copper_slab waxed_exposed_cut_copper_slab waxed_cuyt_copper_slab waxed_oxidized_copper waxed_cut_copper waxed_exposed_cut_copper waxed_weathered_cut_copper waxed_oxidized_cut_copper waxed_cut_copper_stairs waxed_exposed_cut_copper_stairs waxed_weathered_cut_copper_stairs waxed_oxidized_cut_copper_stairs heavy_weighted_pressure_plate light_weighted_pressure_plate iron_bars tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top tfc:metal/anvil/bismuth_bronze tfc:metal/block/bismuth_bronze tfc:metal/bars/bismuth_bronze tfc:metal/trapdoor/bismuth_bronze tfc:metal/block/bismuth_bronze_stairs tfc:block/metal/block/bismuth_bronze_slab tfc:block/metal/block/bismuth_bronze_slab_top tfc:metal/anvil/black_bronze tfc:metal/block/black_bronze tfc:metal/bars/black_bronze tfc:metal/trapdoor/black_bronze tfc:metal/block/black_bronze_stairs tfc:block/metal/block/black_bronze_slab tfc:block/metal/block/black_bronze_slab_top tfc:metal/anvil/bronze tfc:metal/block/bronze tfc:metal/bars/bronze tfc:metal/trapdoor/bronze tfc:metal/block/bronze_stairs tfc:block/metal/block/bronze_slab tfc:block/metal/block/bronze_slab_top tfc:metal/anvil/brass tfc:metal/block/brass tfc:metal/bars/brass tfc:metal/trapdoor/brass tfc:metal/block/brass_stairs tfc:block/metal/block/brass_slab tfc:block/metal/block/brass_slab_top tfc:metal/anvil/copper tfc:metal/block/copper tfc:metal/bars/copper tfc:metal/trapdoor/copper tfc:metal/block/copper_stairs tfc:block/metal/block/copper_slab tfc:block/metal/block/copper_slab_top tfc:metal/anvil/gold tfc:metal/block/gold tfc:metal/bars/gold tfc:metal/trapdoor/gold tfc:metal/block/gold_stairs tfc:block/metal/block/gold_slab tfc:block/metal/block/gold_slab_top tfc:metal/anvil/nickel tfc:metal/block/nickel tfc:metal/bars/nickel tfc:metal/trapdoor/nickel tfc:metal/block/nickel_stairs tfc:block/metal/block/nickel_slab tfc:block/metal/block/nickel_slab_top tfc:metal/anvil/rose_gold tfc:metal/block/rose_gold tfc:metal/bars/rose_gold tfc:metal/trapdoor/rose_gold tfc:metal/block/rose_gold_stairs tfc:block/metal/block/rose_gold_slab tfc:block/metal/block/rose_gold_slab_top tfc:metal/anvil/silver tfc:metal/block/silver tfc:metal/bars/silver tfc:metal/trapdoor/silver tfc:metal/block/silver_stairs tfc:block/metal/block/silver_slab tfc:block/metal/block/silver_slab_top tfc:metal/anvil/tin tfc:metal/block/tin tfc:metal/bars/tin tfc:metal/trapdoor/tin tfc:metal/block/tin_stairs tfc:block/metal/block/tin_slab tfc:block/metal/block/tin_slab_top tfc:metal/anvil/zinc tfc:metal/block/zinc tfc:metal/bars/zinc tfc:metal/trapdoor/zinc tfc:metal/block/zinc_stairs tfc:block/metal/block/zinc_slab tfc:block/metal/block/zinc_slab_top tfc:metal/anvil/sterling_silver tfc:metal/block/sterling_silver tfc:metal/bars/sterling_silver tfc:metal/trapdoor/sterling_silver tfc:metal/block/sterling_silver_stairs tfc:block/metal/block/sterling_silver_slab tfc:block/metal/block/sterling_silver_slab_top tfc:metal/anvil/wrought_iron tfc:metal/block/wrought_iron tfc:metal/bars/wrought_iron tfc:metal/trapdoor/wrought_iron tfc:metal/block/wrought_iron_stairs tfc:block/metal/block/wrought_iron_slab tfc:block/metal/block/wrought_iron_slab_top tfc:metal/anvil/cast_iron tfc:metal/block/cast_iron tfc:metal/bars/cast_iron tfc:metal/trapdoor/cast_iron tfc:metal/block/cast_iron_stairs tfc:block/metal/block/cast_iron_slab tfc:block/metal/block/cast_iron_slab_top tfc:metal/anvil/pig_iron tfc:metal/block/pig_iron tfc:metal/bars/pig_iron tfc:metal/trapdoor/pig_iron tfc:metal/block/pig_iron_stairs tfc:block/metal/block/pig_iron_slab tfc:block/metal/block/pig_iron_slab_top tfc:metal/anvil/steel tfc:metal/block/steel tfc:metal/bars/steel tfc:metal/trapdoor/steel tfc:metal/block/steel_stairs tfc:block/metal/block/steel_slab tfc:block/metal/block/steel_slab_top tfc:metal/anvil/black_steel tfc:metal/block/black_steel tfc:metal/bars/black_steel tfc:metal/trapdoor/black_steel tfc:metal/block/black_steel_stairs tfc:block/metal/block/black_steel_slab tfc:block/metal/block/black_steel_slab_top tfc:metal/anvil/blue_steel tfc:metal/block/blue_steel tfc:metal/bars/blue_steel tfc:metal/trapdoor/blue_steel tfc:metal/block/blue_steel_stairs tfc:block/metal/block/blue_steel_slab tfc:block/metal/block/blue_steel_slab_top tfc:metal/anvil/red_steel tfc:metal/block/red_steel tfc:metal/bars/red_steel tfc:metal/trapdoor/red_steel tfc:metal/block/red_steel_stairs tfc:block/metal/block/red_steel_slab tfc:block/metal/block/red_steel_slab_top tfc:metal/anvil/weak_steel tfc:metal/block/weak_steel tfc:metal/bars/weak_steel tfc:metal/trapdoor/weak_steel tfc:metal/block/weak_steel_stairs tfc:block/metal/block/weak_steel_slab tfc:block/metal/block/weak_steel_slab_top tfc:metal/anvil/weak_blue_steel tfc:metal/block/weak_blue_steel tfc:metal/bars/weak_blue_steel tfc:metal/trapdoor/weak_blue_steel tfc:metal/block/weak_blue_steel_stairs tfc:block/metal/block/weak_blue_steel_slab tfc:block/metal/block/weak_blue_steel_slab_top tfc:metal/anvil/weak_red_steel tfc:metal/block/weak_red_steel tfc:metal/bars/weak_red_steel tfc:metal/trapdoor/weak_red_steel tfc:metal/block/weak_red_steel_stairs tfc:block/metal/block/weak_red_steel_slab tfc:block/metal/block/weak_red_steel_slab_top tfc:metal/anvil/high_carbon_steel tfc:metal/block/high_carbon_steel tfc:metal/bars/high_carbon_steel tfc:metal/trapdoor/high_carbon_steel tfc:metal/block/high_carbon_steel_stairs tfc:block/metal/block/high_carbon_steel_slab tfc:block/metal/block/high_carbon_steel_slab_top tfc:metal/anvil/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel tfc:metal/bars/high_carbon_black_steel tfc:metal/trapdoor/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel_stairs tfc:block/metal/block/high_carbon_black_steel_slab tfc:block/metal/block/high_carbon_black_steel_slab_top tfc:metal/anvil/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel tfc:metal/bars/high_carbon_blue_steel tfc:metal/trapdoor/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel_stairs tfc:block/metal/block/high_carbon_blue_steel_slab tfc:block/metal/block/high_carbon_blue_steel_slab_top tfc:metal/anvil/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel tfc:metal/bars/high_carbon_red_steel tfc:metal/trapdoor/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel_stairs tfc:block/metal/block/high_carbon_red_steel_slab tfc:block/metal/block/high_carbon_red_steel_slab_top tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top + block.10400 = iron_block iron_trapdoor gold_block emerald_block lapis_block diamond_block copper_block exposed_copper weathered_copper oxidized_copper cut_copper exposed_cut_copper weathered_cut_copper oxidized_cut_copper cut_copper_stairs exposed_cut_copper_stairs weathered_cut_copper_stairs oxidized_cut_copper_stairs cut_copper_slab exposed_cut_copper_slab weathered_cut_copper_slab oxidized_cut_copper_slab waxed_cut_copper_slab waxed_weathered_cut_copper_slab waxed_weathered_copper waxed_exposed_copper waxed_copper_block waxed_oxidized_cut_copper_slab waxed_weathered_cut_copper_slab waxed_exposed_cut_copper_slab waxed_cuyt_copper_slab waxed_oxidized_copper waxed_cut_copper waxed_exposed_cut_copper waxed_weathered_cut_copper waxed_oxidized_cut_copper waxed_cut_copper_stairs waxed_exposed_cut_copper_stairs waxed_weathered_cut_copper_stairs waxed_oxidized_cut_copper_stairs heavy_weighted_pressure_plate light_weighted_pressure_plate iron_bars tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top tfc:metal/anvil/bismuth_bronze tfc:metal/block/bismuth_bronze tfc:metal/bars/bismuth_bronze tfc:metal/trapdoor/bismuth_bronze tfc:metal/block/bismuth_bronze_stairs tfc:block/metal/block/bismuth_bronze_slab tfc:block/metal/block/bismuth_bronze_slab_top tfc:metal/anvil/black_bronze tfc:metal/block/black_bronze tfc:metal/bars/black_bronze tfc:metal/trapdoor/black_bronze tfc:metal/block/black_bronze_stairs tfc:block/metal/block/black_bronze_slab tfc:block/metal/block/black_bronze_slab_top tfc:metal/anvil/bronze tfc:metal/block/bronze tfc:metal/bars/bronze tfc:metal/trapdoor/bronze tfc:metal/block/bronze_stairs tfc:block/metal/block/bronze_slab tfc:block/metal/block/bronze_slab_top tfc:metal/anvil/brass tfc:metal/block/brass tfc:metal/bars/brass tfc:metal/trapdoor/brass tfc:metal/block/brass_stairs tfc:block/metal/block/brass_slab tfc:block/metal/block/brass_slab_top tfc:metal/anvil/copper tfc:metal/block/copper tfc:metal/bars/copper tfc:metal/trapdoor/copper tfc:metal/block/copper_stairs tfc:block/metal/block/copper_slab tfc:block/metal/block/copper_slab_top tfc:metal/anvil/gold tfc:metal/block/gold tfc:metal/bars/gold tfc:metal/trapdoor/gold tfc:metal/block/gold_stairs tfc:block/metal/block/gold_slab tfc:block/metal/block/gold_slab_top tfc:metal/anvil/nickel tfc:metal/block/nickel tfc:metal/bars/nickel tfc:metal/trapdoor/nickel tfc:metal/block/nickel_stairs tfc:block/metal/block/nickel_slab tfc:block/metal/block/nickel_slab_top tfc:metal/anvil/rose_gold tfc:metal/block/rose_gold tfc:metal/bars/rose_gold tfc:metal/trapdoor/rose_gold tfc:metal/block/rose_gold_stairs tfc:block/metal/block/rose_gold_slab tfc:block/metal/block/rose_gold_slab_top tfc:metal/anvil/silver tfc:metal/block/silver tfc:metal/bars/silver tfc:metal/trapdoor/silver tfc:metal/block/silver_stairs tfc:block/metal/block/silver_slab tfc:block/metal/block/silver_slab_top tfc:metal/anvil/tin tfc:metal/block/tin tfc:metal/bars/tin tfc:metal/trapdoor/tin tfc:metal/block/tin_stairs tfc:block/metal/block/tin_slab tfc:block/metal/block/tin_slab_top tfc:metal/anvil/zinc tfc:metal/block/zinc tfc:metal/bars/zinc tfc:metal/trapdoor/zinc tfc:metal/block/zinc_stairs tfc:block/metal/block/zinc_slab tfc:block/metal/block/zinc_slab_top tfc:metal/anvil/sterling_silver tfc:metal/block/sterling_silver tfc:metal/bars/sterling_silver tfc:metal/trapdoor/sterling_silver tfc:metal/block/sterling_silver_stairs tfc:block/metal/block/sterling_silver_slab tfc:block/metal/block/sterling_silver_slab_top tfc:metal/anvil/wrought_iron tfc:metal/block/wrought_iron tfc:metal/bars/wrought_iron tfc:metal/trapdoor/wrought_iron tfc:metal/block/wrought_iron_stairs tfc:block/metal/block/wrought_iron_slab tfc:block/metal/block/wrought_iron_slab_top tfc:metal/anvil/cast_iron tfc:metal/block/cast_iron tfc:metal/bars/cast_iron tfc:metal/trapdoor/cast_iron tfc:metal/block/cast_iron_stairs tfc:block/metal/block/cast_iron_slab tfc:block/metal/block/cast_iron_slab_top tfc:metal/anvil/pig_iron tfc:metal/block/pig_iron tfc:metal/bars/pig_iron tfc:metal/trapdoor/pig_iron tfc:metal/block/pig_iron_stairs tfc:block/metal/block/pig_iron_slab tfc:block/metal/block/pig_iron_slab_top tfc:metal/anvil/steel tfc:metal/block/steel tfc:metal/bars/steel tfc:metal/trapdoor/steel tfc:metal/block/steel_stairs tfc:block/metal/block/steel_slab tfc:block/metal/block/steel_slab_top tfc:metal/anvil/black_steel tfc:metal/block/black_steel tfc:metal/bars/black_steel tfc:metal/trapdoor/black_steel tfc:metal/block/black_steel_stairs tfc:block/metal/block/black_steel_slab tfc:block/metal/block/black_steel_slab_top tfc:metal/anvil/blue_steel tfc:metal/block/blue_steel tfc:metal/bars/blue_steel tfc:metal/trapdoor/blue_steel tfc:metal/block/blue_steel_stairs tfc:block/metal/block/blue_steel_slab tfc:block/metal/block/blue_steel_slab_top tfc:metal/anvil/red_steel tfc:metal/block/red_steel tfc:metal/bars/red_steel tfc:metal/trapdoor/red_steel tfc:metal/block/red_steel_stairs tfc:block/metal/block/red_steel_slab tfc:block/metal/block/red_steel_slab_top tfc:metal/anvil/weak_steel tfc:metal/block/weak_steel tfc:metal/bars/weak_steel tfc:metal/trapdoor/weak_steel tfc:metal/block/weak_steel_stairs tfc:block/metal/block/weak_steel_slab tfc:block/metal/block/weak_steel_slab_top tfc:metal/anvil/weak_blue_steel tfc:metal/block/weak_blue_steel tfc:metal/bars/weak_blue_steel tfc:metal/trapdoor/weak_blue_steel tfc:metal/block/weak_blue_steel_stairs tfc:block/metal/block/weak_blue_steel_slab tfc:block/metal/block/weak_blue_steel_slab_top tfc:metal/anvil/weak_red_steel tfc:metal/block/weak_red_steel tfc:metal/bars/weak_red_steel tfc:metal/trapdoor/weak_red_steel tfc:metal/block/weak_red_steel_stairs tfc:block/metal/block/weak_red_steel_slab tfc:block/metal/block/weak_red_steel_slab_top tfc:metal/anvil/high_carbon_steel tfc:metal/block/high_carbon_steel tfc:metal/bars/high_carbon_steel tfc:metal/trapdoor/high_carbon_steel tfc:metal/block/high_carbon_steel_stairs tfc:block/metal/block/high_carbon_steel_slab tfc:block/metal/block/high_carbon_steel_slab_top tfc:metal/anvil/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel tfc:metal/bars/high_carbon_black_steel tfc:metal/trapdoor/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel_stairs tfc:block/metal/block/high_carbon_black_steel_slab tfc:block/metal/block/high_carbon_black_steel_slab_top tfc:metal/anvil/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel tfc:metal/bars/high_carbon_blue_steel tfc:metal/trapdoor/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel_stairs tfc:block/metal/block/high_carbon_blue_steel_slab tfc:block/metal/block/high_carbon_blue_steel_slab_top tfc:metal/anvil/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel tfc:metal/bars/high_carbon_red_steel tfc:metal/trapdoor/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel_stairs tfc:block/metal/block/high_carbon_red_steel_slab tfc:block/metal/block/high_carbon_red_steel_slab_top tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top create:copper_ladder create:brass_ladder create:copper_scaffolding create:brass_scaffolding create:brass_block create:copper_bars create:brass_bars create:smart_chute create:fluid_tank create:steam_whistle create:steam_engine create:spout create:hose_pulley create:item_drain create:train_casing create:smart_fluid_pipe create:fluid_pipe create:mechanical_pump create:copper_valve_handle create:fluid_valve create:mechanical_crafter create:sequenced_gearshift create:flywheel create:rotation_speed_controller create:mechanical_arm create:railway_casing create:controls create:brass_funnel create:brass_tunnel create:content_observer create:stockpile_switch create:redstone_link create:pulse_repeater create:pulse_extender create:peculiar_bell create_jetpack:jetpack create_enchantment_industry:printer create_enchantment_industry:disenchanter cataclysm:ancient_metal_block cataclysm:cursium_block cataclysm:enderite_block cataclysm:witherite_block cataclysm:ignitium_block cataclysm:mechanical_fusion_anvil cataclysm:emp cataclysm:black_steel_block create_dd:furnace_engine create_dd:bore_block create_dd:industrial_fan create_dd:hydraulic_press create_dd:item_stockpile create_dd:fluid_reservoir create_dd:dark_metal_block create_dd:dark_metal_plating create_dd:dark_metal_block_slab create_dd:dark_metal_block_stairs create_dd:dark_metal_bricks create_dd:dark_metal_brick_slab create_dd:dark_metal_brick_stairs create:zinc_block create:industrial_iron_block create:train_door create:chute create:item_vault create:haunted_bell minecraft:netherite_block create_jetpack:netherite_jetpack createutilities:void_steel_block createutilities:void_steel_scaffolding createutilities:void_casing createutilities:void_steel_bars createutilities:void_steel_ladder createutilities:void_motor createutilities:void_chest createutilities:void_tank createutilities:void_battery railways:smokestack_caboosestyle railways:smokestack_long railways:smokestack_coalburner railways:smokestack_oilburner railways:smokestack_streamlined railways:smokestack_woodburner railways:fuel_tank railways:portable_fuel_interface create_power_loader:empty_brass_chunk_loader create_power_loader:brass_chunk_loader create_connected:empty_fan_catalyst create_connected:fan_blasting_catalyst create_connected:fan_smoking_catalyst create_connected:fan_splashing_catalyst create_connected:fan_haunting_catalyst create_connected:sequenced_pulse_generator create_connected:item_silo create_things_and_misc:card_reader create_things_and_misc:card_press create_things_and_misc:sprinkler create_things_and_misc:brass_tiles create_things_and_misc:brass_tiles_slab create_things_and_misc:brass_tiles_stair create_things_and_misc:brass_bricks create_things_and_misc:brass_brick_slab create_things_and_misc:brass_brick_stairs vintageimprovements:vanadium_block createcasing:brass_shaft createcasing:creative_casing create_dd:stargaze_singularity_scaffolding create_dd:stargaze_singularity_block create_dd:stargaze_singularity_casing create_dd:mithril_scaffolding create_dd:mithril_block create_dd:mithril_casing create_dd:bronze_scaffolding create_dd:bronze_block create_dd:bronze_casing create_dd:steel_scaffolding create_dd:steel_block create_dd:steel_casing create_dd:industrial_iron_block create_dd:industrial_casing create_dd:tin_scaffolding create_dd:tin_block create_dd:chromatic_block create_dd:refined_radiance_scaffolding create_dd:refined_radiance_block create_dd:refined_radiance_casing create_dd:shadow_steel_scaffolding create_dd:shadow_steel_block create_dd:shadow_steel_casing create_dd:blaze_gold_scaffolding create_dd:blaze_gold_block create_dd:blaze_gold_casing create_dd:hydraulic_scaffolding create_dd:hydraulic_casing create_dd:overburden_scaffolding create_dd:overburden_casing create_dd:train_scaffolding create_dd:zinc_scaffolding create_dd:industrial_scaffolding create_dd:netherite_scaffolding create_dd:bronze_saw create_dd:bronze_drill createbigcannons:big_cartridge createbigcannons:cast_iron_block createbigcannons:nethersteel_block createbigcannons:basin_foundry_lid createbigcannons:wrought_iron_drop_mortar_end createbigcannons:wrought_iron_cannon_end createbigcannons:wrought_iron_cannon_chamber create_dd:flywheel railways:slashed_locometal railways:riveted_locometal railways:locometal_pillar railways:locometal_smokebox railways:plated_locometal railways:flat_slashed_locometal railways:flat_riveted_locometal railways:brass_wrapped_locometal railways:copper_wrapped_locometal railways:iron_wrapped_locometal railways:locometal_boiler railways:brass_wrapped_locometal_boiler railways:copper_wrapped_locometal_boiler railways:iron_wrapped_locometal_boiler railways:white_slashed_locometal railways:white_riveted_locometal railways:white_locometal_pillar railways:white_locometal_smokebox railways:white_plated_locometal railways:white_flat_slashed_locometal railways:white_flat_riveted_locometal railways:white_brass_wrapped_locometal railways:white_copper_wrapped_locometal railways:white_iron_wrapped_locometal railways:white_locometal_boiler railways:white_brass_wrapped_locometal_boiler railways:white_copper_wrapped_locometal_boiler railways:white_iron_wrapped_locometal_boiler railways:light_gray_slashed_locometal railways:light_gray_riveted_locometal railways:light_gray_locometal_pillar railways:light_gray_locometal_smokebox railways:light_gray_plated_locometal railways:light_gray_flat_slashed_locometal railways:light_gray_flat_riveted_locometal railways:light_gray_brass_wrapped_locometal railways:light_gray_copper_wrapped_locometal railways:light_gray_iron_wrapped_locometal railways:light_gray_locometal_boiler railways:light_gray_brass_wrapped_locometal_boiler railways:light_gray_copper_wrapped_locometal_boiler railways:light_gray_iron_wrapped_locometal_boiler railways:gray_slashed_locometal railways:gray_riveted_locometal railways:gray_locometal_pillar railways:gray_locometal_smokebox railways:gray_plated_locometal railways:gray_flat_slashed_locometal railways:gray_flat_riveted_locometal railways:gray_brass_wrapped_locometal railways:gray_copper_wrapped_locometal railways:gray_iron_wrapped_locometal railways:gray_locometal_boiler railways:gray_brass_wrapped_locometal_boiler railways:gray_copper_wrapped_locometal_boiler railways:gray_iron_wrapped_locometal_boiler railways:black_slashed_locometal railways:black_riveted_locometal railways:black_locometal_pillar railways:black_locometal_smokebox railways:black_plated_locometal railways:black_flat_slashed_locometal railways:black_flat_riveted_locometal railways:black_brass_wrapped_locometal railways:black_copper_wrapped_locometal railways:black_iron_wrapped_locometal railways:black_locometal_boiler railways:black_brass_wrapped_locometal_boiler railways:black_copper_wrapped_locometal_boiler railways:black_iron_wrapped_locometal_boiler railways:brown_slashed_locometal railways:brown_riveted_locometal railways:brown_locometal_pillar railways:brown_locometal_smokebox railways:brown_plated_locometal railways:brown_flat_slashed_locometal railways:brown_flat_riveted_locometal railways:brown_brass_wrapped_locometal railways:brown_copper_wrapped_locometal railways:brown_iron_wrapped_locometal railways:brown_locometal_boiler railways:brown_brass_wrapped_locometal_boiler railways:brown_copper_wrapped_locometal_boiler railways:brown_iron_wrapped_locometal_boiler railways:red_slashed_locometal railways:red_riveted_locometal railways:red_locometal_pillar railways:red_locometal_smokebox railways:red_plated_locometal railways:red_flat_slashed_locometal railways:red_flat_riveted_locometal railways:red_brass_wrapped_locometal railways:red_copper_wrapped_locometal railways:red_iron_wrapped_locometal railways:red_locometal_boiler railways:red_brass_wrapped_locometal_boiler railways:red_copper_wrapped_locometal_boiler railways:red_iron_wrapped_locometal_boiler railways:orange_slashed_locometal railways:orange_riveted_locometal railways:orange_locometal_pillar railways:orange_locometal_smokebox railways:orange_plated_locometal railways:orange_flat_slashed_locometal railways:orange_flat_riveted_locometal railways:orange_brass_wrapped_locometal railways:orange_copper_wrapped_locometal railways:orange_iron_wrapped_locometal railways:orange_locometal_boiler railways:orange_brass_wrapped_locometal_boiler railways:orange_copper_wrapped_locometal_boiler railways:orange_iron_wrapped_locometal_boiler railways:yellow_slashed_locometal railways:yellow_riveted_locometal railways:yellow_locometal_pillar railways:yellow_locometal_smokebox railways:yellow_plated_locometal railways:yellow_flat_slashed_locometal railways:yellow_flat_riveted_locometal railways:yellow_brass_wrapped_locometal railways:yellow_copper_wrapped_locometal railways:yellow_iron_wrapped_locometal railways:yellow_locometal_boiler railways:yellow_brass_wrapped_locometal_boiler railways:yellow_copper_wrapped_locometal_boiler railways:yellow_iron_wrapped_locometal_boiler railways:lime_slashed_locometal railways:lime_riveted_locometal railways:lime_locometal_pillar railways:lime_locometal_smokebox railways:lime_plated_locometal railways:lime_flat_slashed_locometal railways:lime_flat_riveted_locometal railways:lime_brass_wrapped_locometal railways:lime_copper_wrapped_locometal railways:lime_iron_wrapped_locometal railways:lime_locometal_boiler railways:lime_brass_wrapped_locometal_boiler railways:lime_copper_wrapped_locometal_boiler railways:lime_iron_wrapped_locometal_boiler railways:green_slashed_locometal railways:green_riveted_locometal railways:green_locometal_pillar railways:green_locometal_smokebox railways:green_plated_locometal railways:green_flat_slashed_locometal railways:green_flat_riveted_locometal railways:green_brass_wrapped_locometal railways:green_copper_wrapped_locometal railways:green_iron_wrapped_locometal railways:green_locometal_boiler railways:green_brass_wrapped_locometal_boiler railways:green_copper_wrapped_locometal_boiler railways:green_iron_wrapped_locometal_boiler railways:cyan_slashed_locometal railways:cyan_riveted_locometal railways:cyan_locometal_pillar railways:cyan_locometal_smokebox railways:cyan_plated_locometal railways:cyan_flat_slashed_locometal railways:cyan_flat_riveted_locometal railways:cyan_brass_wrapped_locometal railways:cyan_copper_wrapped_locometal railways:cyan_iron_wrapped_locometal railways:cyan_locometal_boiler railways:cyan_brass_wrapped_locometal_boiler railways:cyan_copper_wrapped_locometal_boiler railways:cyan_iron_wrapped_locometal_boiler railways:light_blue_slashed_locometal railways:light_blue_riveted_locometal railways:light_blue_locometal_pillar railways:light_blue_locometal_smokebox railways:light_blue_plated_locometal railways:light_blue_flat_slashed_locometal railways:light_blue_flat_riveted_locometal railways:light_blue_brass_wrapped_locometal railways:light_blue_copper_wrapped_locometal railways:light_blue_iron_wrapped_locometal railways:light_blue_locometal_boiler railways:light_blue_brass_wrapped_locometal_boiler railways:light_blue_copper_wrapped_locometal_boiler railways:light_blue_iron_wrapped_locometal_boiler railways:blue_slashed_locometal railways:blue_riveted_locometal railways:blue_locometal_pillar railways:blue_locometal_smokebox railways:blue_plated_locometal railways:blue_flat_slashed_locometal railways:blue_flat_riveted_locometal railways:blue_brass_wrapped_locometal railways:blue_copper_wrapped_locometal railways:blue_iron_wrapped_locometal railways:blue_locometal_boiler railways:blue_brass_wrapped_locometal_boiler railways:blue_copper_wrapped_locometal_boiler railways:blue_iron_wrapped_locometal_boiler railways:purple_slashed_locometal railways:purple_riveted_locometal railways:purple_locometal_pillar railways:purple_locometal_smokebox railways:purple_plated_locometal railways:purple_flat_slashed_locometal railways:purple_flat_riveted_locometal railways:purple_brass_wrapped_locometal railways:purple_copper_wrapped_locometal railways:purple_iron_wrapped_locometal railways:purple_locometal_boiler railways:purple_brass_wrapped_locometal_boiler railways:purple_copper_wrapped_locometal_boiler railways:purple_iron_wrapped_locometal_boiler railways:magenta_slashed_locometal railways:magenta_riveted_locometal railways:magenta_locometal_pillar railways:magenta_locometal_smokebox railways:magenta_plated_locometal railways:magenta_flat_slashed_locometal railways:magenta_flat_riveted_locometal railways:magenta_brass_wrapped_locometal railways:magenta_copper_wrapped_locometal railways:magenta_iron_wrapped_locometal railways:magenta_locometal_boiler railways:magenta_brass_wrapped_locometal_boiler railways:magenta_copper_wrapped_locometal_boiler railways:magenta_iron_wrapped_locometal_boiler railways:pink_slashed_locometal railways:pink_riveted_locometal railways:pink_locometal_pillar railways:pink_locometal_smokebox railways:pink_plated_locometal railways:pink_flat_slashed_locometal railways:pink_flat_riveted_locometal railways:pink_brass_wrapped_locometal railways:pink_copper_wrapped_locometal railways:pink_iron_wrapped_locometal railways:pink_locometal_boiler railways:pink_brass_wrapped_locometal_boiler railways:pink_copper_wrapped_locometal_boiler railways:pink_iron_wrapped_locometal_boiler create:copper_shingles create:copper_shingle_stairs create:copper_shingle_slab create:waxed_copper_shingles create:waxed_copper_shingle_stairs create:waxed_copper_shingle_slab create:exposed_copper_shingles create:exposed_copper_shingle_stairs create:exposed_copper_shingle_slab create:waxed_exposed_copper_shingles create:waxed_exposed_copper_shingle_stairs create:waxed_exposed_copper_shingle_slab create:weathered_copper_shingles create:weathered_copper_shingle_stairs create:weathered_copper_shingle_slab create:waxed_weathered_copper_shingles create:waxed_weathered_copper_shingle_stairs create:waxed_weathered_copper_shingle_slab create:oxidized_copper_shingles create:oxidized_copper_shingle_stairs create:oxidized_copper_shingle_slab create:waxed_oxidized_copper_shingles create:waxed_oxidized_copper_shingle_stairs create:waxed_oxidized_copper_shingle_slab create:copper_tiles create:copper_tile_stairs create:copper_tile_slab create:waxed_copper_tiles create:waxed_copper_tile_stairs create:waxed_copper_tile_slab create:exposed_copper_tiles create:exposed_copper_tile_stairs create:exposed_copper_tile_slab create:waxed_exposed_copper_tiles create:waxed_exposed_copper_tile_stairs create:waxed_exposed_copper_tile_slab create:weathered_copper_tiles create:weathered_copper_tile_stairs create:weathered_copper_tile_slab create:waxed_weathered_copper_tiles create:waxed_weathered_copper_tile_stairs create:waxed_weathered_copper_tile_slab create:oxidized_copper_tiles create:oxidized_copper_tile_stairs create:oxidized_copper_tile_slab create:waxed_oxidized_copper_tiles create:waxed_oxidized_copper_tile_stairs create:waxed_oxidized_copper_tile_slab create_dd:steel_polished_block create_dd:steel_polished_stairs create_dd:steel_polished_slab create_dd:steel_tiled_block create_dd:steel_tiled_stairs create_dd:steel_tiled_slab create_dd:zinc_polished_block create_dd:zinc_polished_stairs create_dd:zinc_polished_slab create_dd:zinc_tiled_block create_dd:zinc_tiled_stairs create_dd:zinc_tiled_slab create_dd:bronze_polished_block create_dd:bronze_polished_stairs create_dd:bronze_polished_slab create_dd:bronze_tiled_block create_dd:bronze_tiled_stairs create_dd:bronze_tiled_slab createbigcannons:cast_iron_sliding_breech createbigcannons:unbored_cast_iron_sliding_breech createbigcannons:incomplete_cast_iron_sliding_breech createbigcannons:cast_iron_quickfiring_breech createbigcannons:cast_iron_screw_breech createbigcannons:unbored_cast_iron_screw_breech createbigcannons:incomplete_cast_iron_screw_breech createbigcannons:cast_iron_cannon_end createbigcannons:cast_iron_autocannon_breech createbigcannons:unbored_cast_iron_autocannon_breech createbigcannons:incomplete_cast_iron_autocannon_breech createbigcannons:cast_iron_autocannon_recoil_spring createbigcannons:unbored_cast_iron_autocannon_recoil_spring createbigcannons:incomplete_cast_iron_autocannon_recoil_spring createbigcannons:cast_iron_autocannon_barrel createbigcannons:unbored_cast_iron_autocannon_barrel createbigcannons:very_small_cast_iron_cannon_layer createbigcannons:small_cast_iron_cannon_layer createbigcannons:medium_cast_iron_cannon_layer createbigcannons:large_cast_iron_cannon_layer createbigcannons:very_large_cast_iron_cannon_layer createbigcannons:unbored_very_small_cast_iron_cannon_layer createbigcannons:unbored_small_cast_iron_cannon_layer createbigcannons:unbored_medium_cast_iron_cannon_layer createbigcannons:unbored_large_cast_iron_cannon_layer createbigcannons:unbored_very_large_cast_iron_cannon_layer createbigcannons:cast_iron_cannon_barrel createbigcannons:built_up_cast_iron_cannon_barrel createbigcannons:cast_iron_cannon_chamber createbigcannons:built_up_cast_iron_cannon_chamber createbigcannons:thick_cast_iron_cannon_chamber createbigcannons:bronze_sliding_breech createbigcannons:unbored_bronze_sliding_breech createbigcannons:incomplete_bronze_sliding_breech createbigcannons:bronze_quickfiring_breech createbigcannons:bronze_screw_breech createbigcannons:unbored_bronze_screw_breech createbigcannons:incomplete_bronze_screw_breech createbigcannons:bronze_cannon_end createbigcannons:bronze_autocannon_breech createbigcannons:unbored_bronze_autocannon_breech createbigcannons:incomplete_bronze_autocannon_breech createbigcannons:bronze_autocannon_recoil_spring createbigcannons:unbored_bronze_autocannon_recoil_spring createbigcannons:incomplete_bronze_autocannon_recoil_spring createbigcannons:bronze_autocannon_barrel createbigcannons:unbored_bronze_autocannon_barrel createbigcannons:very_small_bronze_cannon_layer createbigcannons:small_bronze_cannon_layer createbigcannons:medium_bronze_cannon_layer createbigcannons:large_bronze_cannon_layer createbigcannons:very_large_bronze_cannon_layer createbigcannons:unbored_very_small_bronze_cannon_layer createbigcannons:unbored_small_bronze_cannon_layer createbigcannons:unbored_medium_bronze_cannon_layer createbigcannons:unbored_large_bronze_cannon_layer createbigcannons:unbored_very_large_bronze_cannon_layer createbigcannons:bronze_cannon_barrel createbigcannons:built_up_bronze_cannon_barrel createbigcannons:bronze_cannon_chamber createbigcannons:built_up_bronze_cannon_chamber createbigcannons:thick_bronze_cannon_chamber createbigcannons:steel_sliding_breech createbigcannons:unbored_steel_sliding_breech createbigcannons:incomplete_steel_sliding_breech createbigcannons:steel_quickfiring_breech createbigcannons:steel_screw_breech createbigcannons:unbored_steel_screw_breech createbigcannons:incomplete_steel_screw_breech createbigcannons:steel_cannon_end createbigcannons:steel_autocannon_breech createbigcannons:unbored_steel_autocannon_breech createbigcannons:incomplete_steel_autocannon_breech createbigcannons:steel_autocannon_recoil_spring createbigcannons:unbored_steel_autocannon_recoil_spring createbigcannons:incomplete_steel_autocannon_recoil_spring createbigcannons:steel_autocannon_barrel createbigcannons:unbored_steel_autocannon_barrel createbigcannons:very_small_steel_cannon_layer createbigcannons:small_steel_cannon_layer createbigcannons:medium_steel_cannon_layer createbigcannons:large_steel_cannon_layer createbigcannons:very_large_steel_cannon_layer createbigcannons:unbored_very_small_steel_cannon_layer createbigcannons:unbored_small_steel_cannon_layer createbigcannons:unbored_medium_steel_cannon_layer createbigcannons:unbored_large_steel_cannon_layer createbigcannons:unbored_very_large_steel_cannon_layer createbigcannons:steel_cannon_barrel createbigcannons:built_up_steel_cannon_barrel createbigcannons:steel_cannon_chamber createbigcannons:built_up_steel_cannon_chamber createbigcannons:thick_steel_cannon_chamber createbigcannons:nethersteel_sliding_breech createbigcannons:unbored_nethersteel_sliding_breech createbigcannons:incomplete_nethersteel_sliding_breech createbigcannons:nethersteel_quickfiring_breech createbigcannons:nethersteel_screw_breech createbigcannons:unbored_nethersteel_screw_breech createbigcannons:incomplete_nethersteel_screw_breech createbigcannons:nethersteel_cannon_end createbigcannons:nethersteel_autocannon_breech createbigcannons:unbored_nethersteel_autocannon_breech createbigcannons:incomplete_nethersteel_autocannon_breech createbigcannons:nethersteel_autocannon_recoil_spring createbigcannons:unbored_nethersteel_autocannon_recoil_spring createbigcannons:incomplete_nethersteel_autocannon_recoil_spring createbigcannons:nethersteel_autocannon_barrel createbigcannons:unbored_nethersteel_autocannon_barrel createbigcannons:very_small_nethersteel_cannon_layer createbigcannons:small_nethersteel_cannon_layer createbigcannons:medium_nethersteel_cannon_layer createbigcannons:large_nethersteel_cannon_layer createbigcannons:very_large_nethersteel_cannon_layer createbigcannons:unbored_very_small_nethersteel_cannon_layer createbigcannons:unbored_small_nethersteel_cannon_layer createbigcannons:unbored_medium_nethersteel_cannon_layer createbigcannons:unbored_large_nethersteel_cannon_layer createbigcannons:unbored_very_large_nethersteel_cannon_layer createbigcannons:nethersteel_cannon_barrel createbigcannons:built_up_nethersteel_cannon_barrel createbigcannons:nethersteel_cannon_chamber createbigcannons:built_up_nethersteel_cannon_chamber createbigcannons:thick_nethersteel_cannon_chamber createcasing:brass_mixer createcasing:brass_press createcasing:brass_depot createcasing:copper_mixer createcasing:copper_press createcasing:copper_depot createcasing:railway_gearbox createcasing:railway_encased_chain_drive createcasing:railway_adjustable_chain_gearshift createcasing:railway_mixer createcasing:railway_press createcasing:railway_depot createcasing:creative_gearbox createcasing:creative_encased_chain_drive createcasing:creative_adjustable_chain_gearshift createcasing:creative_mixer createcasing:creative_press createcasing:creative_depot createcasing:industrial_iron_gearbox createcasing:industrial_iron_encased_chain_drive createcasing:industrial_iron_adjustable_chain_gearshift createcasing:industrial_iron_mixer createcasing:industrial_iron_press createcasing:industrial_iron_depot createdeco:brass_coinstack createdeco:brass_bars createdeco:brass_bars_overlay createdeco:brass_mesh_fence createdeco:brass_hull createdeco:brass_catwalk createdeco:brass_catwalk_stairs createdeco:brass_catwalk_railing createdeco:brass_support_wedge createdeco:brass_support createdeco:brass_sheet_metal createdeco:brass_door createdeco:locked_brass_door createdeco:brass_trapdoor createdeco:red_brass_lamp createdeco:green_brass_lamp createdeco:blue_brass_lamp createdeco:yellow_brass_lamp createdeco:iron_coinstack createdeco:iron_bars createdeco:iron_bars_overlay createdeco:iron_mesh_fence createdeco:iron_hull createdeco:iron_catwalk createdeco:iron_catwalk_stairs createdeco:iron_catwalk_railing createdeco:iron_support_wedge createdeco:iron_support createdeco:iron_sheet_metal createdeco:iron_door createdeco:locked_iron_door createdeco:iron_trapdoor createdeco:red_iron_lamp createdeco:green_iron_lamp createdeco:blue_iron_lamp createdeco:yellow_iron_lamp createdeco:copper_coinstack createdeco:copper_bars createdeco:copper_bars_overlay createdeco:copper_mesh_fence createdeco:copper_hull createdeco:copper_catwalk createdeco:copper_catwalk_stairs createdeco:copper_catwalk_railing createdeco:copper_support_wedge createdeco:copper_support createdeco:copper_sheet_metal createdeco:copper_door createdeco:locked_copper_door createdeco:copper_trapdoor createdeco:red_copper_lamp createdeco:green_copper_lamp createdeco:blue_copper_lamp createdeco:yellow_copper_lamp createdeco:industrial_iron_coinstack createdeco:industrial_iron_bars createdeco:industrial_iron_bars_overlay createdeco:industrial_iron_mesh_fence createdeco:industrial_iron_hull createdeco:industrial_iron_catwalk createdeco:industrial_iron_catwalk_stairs createdeco:industrial_iron_catwalk_railing createdeco:industrial_iron_support_wedge createdeco:industrial_iron_support createdeco:industrial_iron_sheet_metal createdeco:industrial_iron_door createdeco:locked_industrial_iron_door createdeco:industrial_iron_trapdoor createdeco:red_industrial_iron_lamp createdeco:green_industrial_iron_lamp createdeco:blue_industrial_iron_lamp createdeco:yellow_industrial_iron_lamp createdeco:zinc_coinstack createdeco:zinc_bars createdeco:zinc_bars_overlay createdeco:zinc_mesh_fence createdeco:zinc_hull createdeco:zinc_catwalk createdeco:zinc_catwalk_stairs createdeco:zinc_catwalk_railing createdeco:zinc_support_wedge createdeco:zinc_support createdeco:zinc_sheet_metal createdeco:zinc_door createdeco:locked_zinc_door createdeco:zinc_trapdoor createdeco:red_zinc_lamp createdeco:green_zinc_lamp createdeco:blue_zinc_lamp createdeco:yellow_zinc_lamp # SAND-LIKE - block.10410 = sand red_sand dirt_path + block.10410 = sand red_sand dirt_path gravel suspicious_gravel suspicious_sand white_concrete_powder light_gray_concrete_powder gray_concrete_powder black_concrete_powder brown_concrete_powder red_concrete_powder orange_concrete_powder yellow_concrete_powder lime_concrete_powder green_concrete_powder cyan_concrete_powder light_blue_concrete_powder blue_concrete_powder purple_concrete_powder magenta_concrete_powder pink_concrete_powder coarse_dirt # FABRIC-LIKE - block.10440 = white_carpet orange_carpet magenta_carpet light_blue_carpet yellow_carpet lime_carpet pink_carpet gray_carpet light_gray_carpet cyan_carpet purple_carpet blue_carpet brown_carpet green_carpet red_carpet black_carpet white_wool orange_wool magenta_wool light_blue_wool yellow_wool lime_wool pink_wool gray_wool light_gray_wool cyan_wool purple_wool blue_wool brown_wool green_wool red_wool black_wool + block.10440 = white_carpet orange_carpet magenta_carpet light_blue_carpet yellow_carpet lime_carpet pink_carpet gray_carpet light_gray_carpet cyan_carpet purple_carpet blue_carpet brown_carpet green_carpet red_carpet black_carpet white_wool orange_wool magenta_wool light_blue_wool yellow_wool lime_wool pink_wool gray_wool light_gray_wool cyan_wool purple_wool blue_wool brown_wool green_wool red_wool black_wool estrogen:moth_wool estrogen:quilted_moth_wool estrogen:moth_wool_carpet estrogen:quilted_moth_wool_carpet farmersdelight:canvas_rug farmersdelight:full_tatami_mat farmersdelight:half_tatami_mat farmersdelight:tatami sophisticated_backpacks:backpack create_dd:blueprint_block create_dd:blueprint_carpet create_dd:mysterious_blueprint_carpet handcrafted:acacia_couch handcrafted:birch_couch handcrafted:bamboo_couch handcrafted:cherry_couch handcrafted:crimson_couch handcrafted:dark_oak_couch handcrafted:jungle_couch handcrafted:mangrove_couch handcrafted:oak_couch handcrafted:spruce_couch handcrafted:warped_couch handcrafted:acacia_fancy_bed handcrafted:birch_fancy_bed handcrafted:bamboo_fancy_bed handcrafted:cherry_fancy_bed handcrafted:crimson_fancy_bed handcrafted:dark_oak_fancy_bed handcrafted:jungle_fancy_bed handcrafted:mangrove_fancy_bed handcrafted:oak_fancy_bed handcrafted:spruce_fancy_bed handcrafted:warped_fancy_bed create:white_seat interiors:white_chair interiors:white_floor_chair create:light_gray_seat interiors:light_gray_chair interiors:light_gray_floor_chair create:gray_seat interiors:gray_chair interiors:gray_floor_chair create:black_seat interiors:black_chair interiors:black_floor_chair create:brown_seat interiors:brown_chair interiors:brown_floor_chair create:red_seat interiors:red_chair interiors:red_floor_chair create:orange_seat interiors:orange_chair interiors:orange_floor_chair create:yellow_seat interiors:yellow_chair interiors:yellow_floor_chair create:lime_seat interiors:lime_chair interiors:lime_floor_chair create:green_seat interiors:green_chair interiors:green_floor_chair create:cyan_seat interiors:cyan_chair interiors:cyan_floor_chair create:light_blue_seat interiors:light_blue_chair interiors:light_blue_floor_chair create:blue_seat interiors:blue_chair interiors:blue_floor_chair create:purple_seat interiors:purple_chair interiors:purple_floor_chair create:magenta_seat interiors:magenta_chair interiors:magenta_floor_chair create:pink_seat interiors:pink_chair interiors:pink_floor_chair #else # WAVING ENTITIES @@ -62,13 +64,13 @@ block.10032 = reeds sugar_cane tube_coral brain_coral fire_coral bubble_coral horn_coral dead_tube_coral dead_brain_coral dead_fire_coral dead_bubble_coral dead_horn_coral tube_coral_fan brain_coral_fan fire_coral_fan bubble_coral_fan horn_coral_fan dead_tube_coral_fan dead_brain_coral_fan dead_fire_coral_fan dead_bubble_coral_fan dead_horn_coral_fan sapling nether_wart # NEW EMMISIVE - block.10090 = magma soul_fire fire flowing_lava lava end_root campfire:lit=true soul_campfire:lit=true beacon betterendforge:mossy_glowshroom_hymenophore betterendforge:mossy_glowshroom_fur betterendforge:blue_vine_lantern betterendforge:blue_vine_fur betterendforge::lumecorn:shape=light_top_middle betterendforge::lumecorn:shape=light_middle betterendforge::lumecorn:shape=light_bottom betterendforge::purple_polypore betterendforge::bulb_vine:shape=bottom + block.10090 = magma fire flowing_lava lava end_root beacon betterendforge:mossy_glowshroom_hymenophore betterendforge:mossy_glowshroom_fur betterendforge:blue_vine_lantern betterendforge:blue_vine_fur betterendforge::lumecorn:shape=light_top_middle betterendforge::lumecorn:shape=light_middle betterendforge::lumecorn:shape=light_bottom betterendforge::purple_polypore betterendforge::bulb_vine:shape=bottom # FAKE EMMISORS block.10213 = soul_fire # METAL-LIKE - block.10400 = iron_block gold_block emerald_block lapis_block diamond_block copper_block exposed_copper weathered_copper oxidized_copper cut_copper exposed_cut_copper weathered_cut_copper oxidized_cut_copper cut_copper_stairs exposed_cut_copper_stairs weathered_cut_copper_stairs oxidized_cut_copper_stairs cut_copper_slab exposed_cut_copper_slab weathered_cut_copper_slab oxidized_cut_copper_slab waxed_cut_copper_slab waxed_weathered_cut_copper_slab waxed_weathered_copper waxed_exposed_copper waxed_copper_block waxed_oxidized_cut_copper_slab waxed_weathered_cut_copper_slab waxed_exposed_cut_copper_slab waxed_cuyt_copper_slab waxed_oxidized_copper waxed_cut_copper waxed_exposed_cut_copper waxed_weathered_cut_copper waxed_oxidized_cut_copper waxed_cut_copper_stairs waxed_exposed_cut_copper_stairs waxed_weathered_cut_copper_stairs waxed_oxidized_cut_copper_stairs + block.10400 = iron_block gold_block emerald_block lapis_block diamond_block # SAND-LIKE block.10410 = sand red_sand dirt_path From 043b82ef1adf9d1c075085559288ba8226d4c657 Mon Sep 17 00:00:00 2001 From: DadamaldaDad Date: Thu, 12 Dec 2024 19:16:11 +0100 Subject: [PATCH 031/147] Removed some old glass blocks from Dreams & Desires to fix a crash --- shaders/block.manual.properties | 4 ++-- shaders/block.properties | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/shaders/block.manual.properties b/shaders/block.manual.properties index ad06dfed..806f0abd 100644 --- a/shaders/block.manual.properties +++ b/shaders/block.manual.properties @@ -22,9 +22,9 @@ # REFLECTIVE block.10008 = minecraft:water minecraft:flowing_water subwild:water_puddle tfc:fluid/finite_fresh_water tfc:fluid/fresh_water tfc:fluid/finite_salt_water tfc:fluid/salt_water tfc:fluid/finite_river_water tfc:fluid/river_water tfc:fluid/spring_water tfc:fluid/finite_spring_water - block.10079 = ice slime_block white_stained_glass orange_stained_glass magenta_stained_glass light_blue_stained_glass yellow_stained_glass lime_stained_glass pink_stained_glass gray_stained_glass light_gray_stained_glass cyan_stained_glass purple_stained_glass blue_stained_glass brown_stained_glass green_stained_glass red_stained_glass black_stained_glass white_stained_glass_pane orange_stained_glass_pane magenta_stained_glass_pane light_blue_stained_glass_pane yellow_stained_glass_pane lime_stained_glass_pane pink_stained_glass_pane gray_stained_glass_pane light_gray_stained_glass_pane cyan_stained_glass_pane purple_stained_glass_pane blue_stained_glass_pane brown_stained_glass_pane green_stained_glass_pane red_stained_glass_pane black_stained_glass_pane tinted_glass deeperdarker:soundproof_glass create:framed_glass create:framed_glass_pane create:framed_glass_trapdoor create:framed_glass_door create:tiled_glass create:tiled_glass_pane create:horizontal_framed_glass create:horizontal_framed_glass_pane create:vertical_framed_glass create:vertical_framed_glass_pane naturalist:crimson_froglass naturalist:verdant_froglass naturalist:azure_froglass naturalist:crimson_froglass_pane naturalist:verdant_froglass_pane naturalist:azure_froglass_pane glass glass_pane create_dd:vertical_framed_split_glass create_dd:horizontal_framed_split_glass create_dd:framed_split_glass create_dd:vertical_framed_split_glass_pane create_dd:horizontal_framed_split_glass_pane create_dd:framed_split_glass_pane + block.10079 = ice slime_block white_stained_glass orange_stained_glass magenta_stained_glass light_blue_stained_glass yellow_stained_glass lime_stained_glass pink_stained_glass gray_stained_glass light_gray_stained_glass cyan_stained_glass purple_stained_glass blue_stained_glass brown_stained_glass green_stained_glass red_stained_glass black_stained_glass white_stained_glass_pane orange_stained_glass_pane magenta_stained_glass_pane light_blue_stained_glass_pane yellow_stained_glass_pane lime_stained_glass_pane pink_stained_glass_pane gray_stained_glass_pane light_gray_stained_glass_pane cyan_stained_glass_pane purple_stained_glass_pane blue_stained_glass_pane brown_stained_glass_pane green_stained_glass_pane red_stained_glass_pane black_stained_glass_pane tinted_glass deeperdarker:soundproof_glass create:framed_glass create:framed_glass_pane create:framed_glass_trapdoor create:framed_glass_door create:tiled_glass create:tiled_glass_pane create:horizontal_framed_glass create:horizontal_framed_glass_pane create:vertical_framed_glass create:vertical_framed_glass_pane naturalist:crimson_froglass naturalist:verdant_froglass naturalist:azure_froglass naturalist:crimson_froglass_pane naturalist:verdant_froglass_pane naturalist:azure_froglass_pane glass glass_pane - layer.translucent = create:framed_glass create:framed_glass_pane create:framed_glass_trapdoor create:framed_glass_door create:tiled_glass create:tiled_glass_pane create:horizontal_framed_glass create:horizontal_framed_glass_pane create:vertical_framed_glass create:vertical_framed_glass_pane glass glass_pane create_dd:vertical_framed_split_glass create_dd:horizontal_framed_split_glass create_dd:framed_split_glass create_dd:vertical_framed_split_glass_pane create_dd:horizontal_framed_split_glass_pane create_dd:framed_split_glass_pane + layer.translucent = create:framed_glass create:framed_glass_pane create:framed_glass_trapdoor create:framed_glass_door create:tiled_glass create:tiled_glass_pane create:horizontal_framed_glass create:horizontal_framed_glass_pane create:vertical_framed_glass create:vertical_framed_glass_pane glass glass_pane # EMMISIVE (LIKE GLOWSTONE) block.10089 = ochre_froglight verdant_froglight pearlescent_froglight glowstone shroomlight torch wall_torch redstone_torch redstone_wall_torch jack_o_lantern redstone_lamp lantern sea_lantern soul_lantern soul_torch soul_wall_torch cataclysm:void_lantern_block deeperdarker:sculk_gleam diff --git a/shaders/block.properties b/shaders/block.properties index 993fe984..8f6b82d1 100644 --- a/shaders/block.properties +++ b/shaders/block.properties @@ -22,9 +22,9 @@ # REFLECTIVE block.10008 = minecraft:water minecraft:flowing_water subwild:water_puddle tfc:fluid/finite_fresh_water tfc:fluid/fresh_water tfc:fluid/finite_salt_water tfc:fluid/salt_water tfc:fluid/finite_river_water tfc:fluid/river_water tfc:fluid/spring_water tfc:fluid/finite_spring_water - block.10079 = ice slime_block white_stained_glass orange_stained_glass magenta_stained_glass light_blue_stained_glass yellow_stained_glass lime_stained_glass pink_stained_glass gray_stained_glass light_gray_stained_glass cyan_stained_glass purple_stained_glass blue_stained_glass brown_stained_glass green_stained_glass red_stained_glass black_stained_glass white_stained_glass_pane orange_stained_glass_pane magenta_stained_glass_pane light_blue_stained_glass_pane yellow_stained_glass_pane lime_stained_glass_pane pink_stained_glass_pane gray_stained_glass_pane light_gray_stained_glass_pane cyan_stained_glass_pane purple_stained_glass_pane blue_stained_glass_pane brown_stained_glass_pane green_stained_glass_pane red_stained_glass_pane black_stained_glass_pane tinted_glass deeperdarker:soundproof_glass create:framed_glass create:framed_glass_pane create:framed_glass_trapdoor create:framed_glass_door create:tiled_glass create:tiled_glass_pane create:horizontal_framed_glass create:horizontal_framed_glass_pane create:vertical_framed_glass create:vertical_framed_glass_pane naturalist:crimson_froglass naturalist:verdant_froglass naturalist:azure_froglass naturalist:crimson_froglass_pane naturalist:verdant_froglass_pane naturalist:azure_froglass_pane glass glass_pane create_dd:vertical_framed_split_glass create_dd:horizontal_framed_split_glass create_dd:framed_split_glass create_dd:vertical_framed_split_glass_pane create_dd:horizontal_framed_split_glass_pane create_dd:framed_split_glass_pane createframed:white_stained_framed_glass_door createframed:white_stained_framed_glass_trapdoor createframed:white_stained_tiled_glass createframed:white_stained_tiled_glass_pane createframed:white_stained_framed_glass createframed:white_stained_framed_glass_pane createframed:horizontal_white_stained_framed_glass createframed:horizontal_white_stained_framed_glass_pane createframed:vertical_white_stained_framed_glass createframed:vertical_white_stained_framed_glass_pane createframed:light_gray_stained_framed_glass_door createframed:light_gray_stained_framed_glass_trapdoor createframed:light_gray_stained_tiled_glass createframed:light_gray_stained_tiled_glass_pane createframed:light_gray_stained_framed_glass createframed:light_gray_stained_framed_glass_pane createframed:horizontal_light_gray_stained_framed_glass createframed:horizontal_light_gray_stained_framed_glass_pane createframed:vertical_light_gray_stained_framed_glass createframed:vertical_light_gray_stained_framed_glass_pane createframed:gray_stained_framed_glass_door createframed:gray_stained_framed_glass_trapdoor createframed:gray_stained_tiled_glass createframed:gray_stained_tiled_glass_pane createframed:gray_stained_framed_glass createframed:gray_stained_framed_glass_pane createframed:horizontal_gray_stained_framed_glass createframed:horizontal_gray_stained_framed_glass_pane createframed:vertical_gray_stained_framed_glass createframed:vertical_gray_stained_framed_glass_pane createframed:black_stained_framed_glass_door createframed:black_stained_framed_glass_trapdoor createframed:black_stained_tiled_glass createframed:black_stained_tiled_glass_pane createframed:black_stained_framed_glass createframed:black_stained_framed_glass_pane createframed:horizontal_black_stained_framed_glass createframed:horizontal_black_stained_framed_glass_pane createframed:vertical_black_stained_framed_glass createframed:vertical_black_stained_framed_glass_pane createframed:brown_stained_framed_glass_door createframed:brown_stained_framed_glass_trapdoor createframed:brown_stained_tiled_glass createframed:brown_stained_tiled_glass_pane createframed:brown_stained_framed_glass createframed:brown_stained_framed_glass_pane createframed:horizontal_brown_stained_framed_glass createframed:horizontal_brown_stained_framed_glass_pane createframed:vertical_brown_stained_framed_glass createframed:vertical_brown_stained_framed_glass_pane createframed:red_stained_framed_glass_door createframed:red_stained_framed_glass_trapdoor createframed:red_stained_tiled_glass createframed:red_stained_tiled_glass_pane createframed:red_stained_framed_glass createframed:red_stained_framed_glass_pane createframed:horizontal_red_stained_framed_glass createframed:horizontal_red_stained_framed_glass_pane createframed:vertical_red_stained_framed_glass createframed:vertical_red_stained_framed_glass_pane createframed:orange_stained_framed_glass_door createframed:orange_stained_framed_glass_trapdoor createframed:orange_stained_tiled_glass createframed:orange_stained_tiled_glass_pane createframed:orange_stained_framed_glass createframed:orange_stained_framed_glass_pane createframed:horizontal_orange_stained_framed_glass createframed:horizontal_orange_stained_framed_glass_pane createframed:vertical_orange_stained_framed_glass createframed:vertical_orange_stained_framed_glass_pane createframed:yellow_stained_framed_glass_door createframed:yellow_stained_framed_glass_trapdoor createframed:yellow_stained_tiled_glass createframed:yellow_stained_tiled_glass_pane createframed:yellow_stained_framed_glass createframed:yellow_stained_framed_glass_pane createframed:horizontal_yellow_stained_framed_glass createframed:horizontal_yellow_stained_framed_glass_pane createframed:vertical_yellow_stained_framed_glass createframed:vertical_yellow_stained_framed_glass_pane createframed:lime_stained_framed_glass_door createframed:lime_stained_framed_glass_trapdoor createframed:lime_stained_tiled_glass createframed:lime_stained_tiled_glass_pane createframed:lime_stained_framed_glass createframed:lime_stained_framed_glass_pane createframed:horizontal_lime_stained_framed_glass createframed:horizontal_lime_stained_framed_glass_pane createframed:vertical_lime_stained_framed_glass createframed:vertical_lime_stained_framed_glass_pane createframed:green_stained_framed_glass_door createframed:green_stained_framed_glass_trapdoor createframed:green_stained_tiled_glass createframed:green_stained_tiled_glass_pane createframed:green_stained_framed_glass createframed:green_stained_framed_glass_pane createframed:horizontal_green_stained_framed_glass createframed:horizontal_green_stained_framed_glass_pane createframed:vertical_green_stained_framed_glass createframed:vertical_green_stained_framed_glass_pane createframed:cyan_stained_framed_glass_door createframed:cyan_stained_framed_glass_trapdoor createframed:cyan_stained_tiled_glass createframed:cyan_stained_tiled_glass_pane createframed:cyan_stained_framed_glass createframed:cyan_stained_framed_glass_pane createframed:horizontal_cyan_stained_framed_glass createframed:horizontal_cyan_stained_framed_glass_pane createframed:vertical_cyan_stained_framed_glass createframed:vertical_cyan_stained_framed_glass_pane createframed:light_blue_stained_framed_glass_door createframed:light_blue_stained_framed_glass_trapdoor createframed:light_blue_stained_tiled_glass createframed:light_blue_stained_tiled_glass_pane createframed:light_blue_stained_framed_glass createframed:light_blue_stained_framed_glass_pane createframed:horizontal_light_blue_stained_framed_glass createframed:horizontal_light_blue_stained_framed_glass_pane createframed:vertical_light_blue_stained_framed_glass createframed:vertical_light_blue_stained_framed_glass_pane createframed:blue_stained_framed_glass_door createframed:blue_stained_framed_glass_trapdoor createframed:blue_stained_tiled_glass createframed:blue_stained_tiled_glass_pane createframed:blue_stained_framed_glass createframed:blue_stained_framed_glass_pane createframed:horizontal_blue_stained_framed_glass createframed:horizontal_blue_stained_framed_glass_pane createframed:vertical_blue_stained_framed_glass createframed:vertical_blue_stained_framed_glass_pane createframed:purple_stained_framed_glass_door createframed:purple_stained_framed_glass_trapdoor createframed:purple_stained_tiled_glass createframed:purple_stained_tiled_glass_pane createframed:purple_stained_framed_glass createframed:purple_stained_framed_glass_pane createframed:horizontal_purple_stained_framed_glass createframed:horizontal_purple_stained_framed_glass_pane createframed:vertical_purple_stained_framed_glass createframed:vertical_purple_stained_framed_glass_pane createframed:magenta_stained_framed_glass_door createframed:magenta_stained_framed_glass_trapdoor createframed:magenta_stained_tiled_glass createframed:magenta_stained_tiled_glass_pane createframed:magenta_stained_framed_glass createframed:magenta_stained_framed_glass_pane createframed:horizontal_magenta_stained_framed_glass createframed:horizontal_magenta_stained_framed_glass_pane createframed:vertical_magenta_stained_framed_glass createframed:vertical_magenta_stained_framed_glass_pane createframed:pink_stained_framed_glass_door createframed:pink_stained_framed_glass_trapdoor createframed:pink_stained_tiled_glass createframed:pink_stained_tiled_glass_pane createframed:pink_stained_framed_glass createframed:pink_stained_framed_glass_pane createframed:horizontal_pink_stained_framed_glass createframed:horizontal_pink_stained_framed_glass_pane createframed:vertical_pink_stained_framed_glass createframed:vertical_pink_stained_framed_glass_pane + block.10079 = ice slime_block white_stained_glass orange_stained_glass magenta_stained_glass light_blue_stained_glass yellow_stained_glass lime_stained_glass pink_stained_glass gray_stained_glass light_gray_stained_glass cyan_stained_glass purple_stained_glass blue_stained_glass brown_stained_glass green_stained_glass red_stained_glass black_stained_glass white_stained_glass_pane orange_stained_glass_pane magenta_stained_glass_pane light_blue_stained_glass_pane yellow_stained_glass_pane lime_stained_glass_pane pink_stained_glass_pane gray_stained_glass_pane light_gray_stained_glass_pane cyan_stained_glass_pane purple_stained_glass_pane blue_stained_glass_pane brown_stained_glass_pane green_stained_glass_pane red_stained_glass_pane black_stained_glass_pane tinted_glass deeperdarker:soundproof_glass create:framed_glass create:framed_glass_pane create:framed_glass_trapdoor create:framed_glass_door create:tiled_glass create:tiled_glass_pane create:horizontal_framed_glass create:horizontal_framed_glass_pane create:vertical_framed_glass create:vertical_framed_glass_pane naturalist:crimson_froglass naturalist:verdant_froglass naturalist:azure_froglass naturalist:crimson_froglass_pane naturalist:verdant_froglass_pane naturalist:azure_froglass_pane glass glass_pane createframed:white_stained_framed_glass_door createframed:white_stained_framed_glass_trapdoor createframed:white_stained_tiled_glass createframed:white_stained_tiled_glass_pane createframed:white_stained_framed_glass createframed:white_stained_framed_glass_pane createframed:horizontal_white_stained_framed_glass createframed:horizontal_white_stained_framed_glass_pane createframed:vertical_white_stained_framed_glass createframed:vertical_white_stained_framed_glass_pane createframed:light_gray_stained_framed_glass_door createframed:light_gray_stained_framed_glass_trapdoor createframed:light_gray_stained_tiled_glass createframed:light_gray_stained_tiled_glass_pane createframed:light_gray_stained_framed_glass createframed:light_gray_stained_framed_glass_pane createframed:horizontal_light_gray_stained_framed_glass createframed:horizontal_light_gray_stained_framed_glass_pane createframed:vertical_light_gray_stained_framed_glass createframed:vertical_light_gray_stained_framed_glass_pane createframed:gray_stained_framed_glass_door createframed:gray_stained_framed_glass_trapdoor createframed:gray_stained_tiled_glass createframed:gray_stained_tiled_glass_pane createframed:gray_stained_framed_glass createframed:gray_stained_framed_glass_pane createframed:horizontal_gray_stained_framed_glass createframed:horizontal_gray_stained_framed_glass_pane createframed:vertical_gray_stained_framed_glass createframed:vertical_gray_stained_framed_glass_pane createframed:black_stained_framed_glass_door createframed:black_stained_framed_glass_trapdoor createframed:black_stained_tiled_glass createframed:black_stained_tiled_glass_pane createframed:black_stained_framed_glass createframed:black_stained_framed_glass_pane createframed:horizontal_black_stained_framed_glass createframed:horizontal_black_stained_framed_glass_pane createframed:vertical_black_stained_framed_glass createframed:vertical_black_stained_framed_glass_pane createframed:brown_stained_framed_glass_door createframed:brown_stained_framed_glass_trapdoor createframed:brown_stained_tiled_glass createframed:brown_stained_tiled_glass_pane createframed:brown_stained_framed_glass createframed:brown_stained_framed_glass_pane createframed:horizontal_brown_stained_framed_glass createframed:horizontal_brown_stained_framed_glass_pane createframed:vertical_brown_stained_framed_glass createframed:vertical_brown_stained_framed_glass_pane createframed:red_stained_framed_glass_door createframed:red_stained_framed_glass_trapdoor createframed:red_stained_tiled_glass createframed:red_stained_tiled_glass_pane createframed:red_stained_framed_glass createframed:red_stained_framed_glass_pane createframed:horizontal_red_stained_framed_glass createframed:horizontal_red_stained_framed_glass_pane createframed:vertical_red_stained_framed_glass createframed:vertical_red_stained_framed_glass_pane createframed:orange_stained_framed_glass_door createframed:orange_stained_framed_glass_trapdoor createframed:orange_stained_tiled_glass createframed:orange_stained_tiled_glass_pane createframed:orange_stained_framed_glass createframed:orange_stained_framed_glass_pane createframed:horizontal_orange_stained_framed_glass createframed:horizontal_orange_stained_framed_glass_pane createframed:vertical_orange_stained_framed_glass createframed:vertical_orange_stained_framed_glass_pane createframed:yellow_stained_framed_glass_door createframed:yellow_stained_framed_glass_trapdoor createframed:yellow_stained_tiled_glass createframed:yellow_stained_tiled_glass_pane createframed:yellow_stained_framed_glass createframed:yellow_stained_framed_glass_pane createframed:horizontal_yellow_stained_framed_glass createframed:horizontal_yellow_stained_framed_glass_pane createframed:vertical_yellow_stained_framed_glass createframed:vertical_yellow_stained_framed_glass_pane createframed:lime_stained_framed_glass_door createframed:lime_stained_framed_glass_trapdoor createframed:lime_stained_tiled_glass createframed:lime_stained_tiled_glass_pane createframed:lime_stained_framed_glass createframed:lime_stained_framed_glass_pane createframed:horizontal_lime_stained_framed_glass createframed:horizontal_lime_stained_framed_glass_pane createframed:vertical_lime_stained_framed_glass createframed:vertical_lime_stained_framed_glass_pane createframed:green_stained_framed_glass_door createframed:green_stained_framed_glass_trapdoor createframed:green_stained_tiled_glass createframed:green_stained_tiled_glass_pane createframed:green_stained_framed_glass createframed:green_stained_framed_glass_pane createframed:horizontal_green_stained_framed_glass createframed:horizontal_green_stained_framed_glass_pane createframed:vertical_green_stained_framed_glass createframed:vertical_green_stained_framed_glass_pane createframed:cyan_stained_framed_glass_door createframed:cyan_stained_framed_glass_trapdoor createframed:cyan_stained_tiled_glass createframed:cyan_stained_tiled_glass_pane createframed:cyan_stained_framed_glass createframed:cyan_stained_framed_glass_pane createframed:horizontal_cyan_stained_framed_glass createframed:horizontal_cyan_stained_framed_glass_pane createframed:vertical_cyan_stained_framed_glass createframed:vertical_cyan_stained_framed_glass_pane createframed:light_blue_stained_framed_glass_door createframed:light_blue_stained_framed_glass_trapdoor createframed:light_blue_stained_tiled_glass createframed:light_blue_stained_tiled_glass_pane createframed:light_blue_stained_framed_glass createframed:light_blue_stained_framed_glass_pane createframed:horizontal_light_blue_stained_framed_glass createframed:horizontal_light_blue_stained_framed_glass_pane createframed:vertical_light_blue_stained_framed_glass createframed:vertical_light_blue_stained_framed_glass_pane createframed:blue_stained_framed_glass_door createframed:blue_stained_framed_glass_trapdoor createframed:blue_stained_tiled_glass createframed:blue_stained_tiled_glass_pane createframed:blue_stained_framed_glass createframed:blue_stained_framed_glass_pane createframed:horizontal_blue_stained_framed_glass createframed:horizontal_blue_stained_framed_glass_pane createframed:vertical_blue_stained_framed_glass createframed:vertical_blue_stained_framed_glass_pane createframed:purple_stained_framed_glass_door createframed:purple_stained_framed_glass_trapdoor createframed:purple_stained_tiled_glass createframed:purple_stained_tiled_glass_pane createframed:purple_stained_framed_glass createframed:purple_stained_framed_glass_pane createframed:horizontal_purple_stained_framed_glass createframed:horizontal_purple_stained_framed_glass_pane createframed:vertical_purple_stained_framed_glass createframed:vertical_purple_stained_framed_glass_pane createframed:magenta_stained_framed_glass_door createframed:magenta_stained_framed_glass_trapdoor createframed:magenta_stained_tiled_glass createframed:magenta_stained_tiled_glass_pane createframed:magenta_stained_framed_glass createframed:magenta_stained_framed_glass_pane createframed:horizontal_magenta_stained_framed_glass createframed:horizontal_magenta_stained_framed_glass_pane createframed:vertical_magenta_stained_framed_glass createframed:vertical_magenta_stained_framed_glass_pane createframed:pink_stained_framed_glass_door createframed:pink_stained_framed_glass_trapdoor createframed:pink_stained_tiled_glass createframed:pink_stained_tiled_glass_pane createframed:pink_stained_framed_glass createframed:pink_stained_framed_glass_pane createframed:horizontal_pink_stained_framed_glass createframed:horizontal_pink_stained_framed_glass_pane createframed:vertical_pink_stained_framed_glass createframed:vertical_pink_stained_framed_glass_pane - layer.translucent = create:framed_glass create:framed_glass_pane create:framed_glass_trapdoor create:framed_glass_door create:tiled_glass create:tiled_glass_pane create:horizontal_framed_glass create:horizontal_framed_glass_pane create:vertical_framed_glass create:vertical_framed_glass_pane glass glass_pane create_dd:vertical_framed_split_glass create_dd:horizontal_framed_split_glass create_dd:framed_split_glass create_dd:vertical_framed_split_glass_pane create_dd:horizontal_framed_split_glass_pane create_dd:framed_split_glass_pane + layer.translucent = create:framed_glass create:framed_glass_pane create:framed_glass_trapdoor create:framed_glass_door create:tiled_glass create:tiled_glass_pane create:horizontal_framed_glass create:horizontal_framed_glass_pane create:vertical_framed_glass create:vertical_framed_glass_pane glass glass_pane # EMMISIVE (LIKE GLOWSTONE) block.10089 = ochre_froglight verdant_froglight pearlescent_froglight glowstone shroomlight torch wall_torch redstone_torch redstone_wall_torch jack_o_lantern redstone_lamp lantern sea_lantern soul_lantern soul_torch soul_wall_torch cataclysm:void_lantern_block deeperdarker:sculk_gleam From fa1880a363c6d76b59c75adaaa1153f060b272e8 Mon Sep 17 00:00:00 2001 From: DadamaldaDad Date: Sat, 14 Dec 2024 08:28:00 +0100 Subject: [PATCH 032/147] Remove glass translucency and script --- generate_materials.js | 111 -------------------------------- shaders/block.manual.properties | 80 ----------------------- shaders/block.properties | 4 +- 3 files changed, 1 insertion(+), 194 deletions(-) delete mode 100644 generate_materials.js delete mode 100644 shaders/block.manual.properties diff --git a/generate_materials.js b/generate_materials.js deleted file mode 100644 index 8d940227..00000000 --- a/generate_materials.js +++ /dev/null @@ -1,111 +0,0 @@ -var locometal_types = "slashed_locometal riveted_locometal locometal_pillar locometal_smokebox plated_locometal flat_slashed_locometal flat_riveted_locometal brass_wrapped_locometal copper_wrapped_locometal iron_wrapped_locometal locometal_boiler brass_wrapped_locometal_boiler copper_wrapped_locometal_boiler iron_wrapped_locometal_boiler".split(" ") - -var locometal_colors = " white_ light_gray_ gray_ black_ brown_ red_ orange_ yellow_ lime_ green_ cyan_ light_blue_ blue_ purple_ magenta_ pink_".split(" ") - -var copper_types = "s _stairs _slab".split(" ") - -var copper_oxidations = " exposed_ weathered_ oxidized_".split(" ") - -var copper_sets = "shingle tile".split(" ") -var copper_states = " waxed_".split(" ") - -var dd_metal_shapes = "block stairs slab".split(" ") - -var dd_metal_types = "polished tiled".split(" ") - -var dd_metal_materials = "steel zinc bronze".split(" ") - -var cbc_materials = "cast_iron bronze steel nethersteel".split(" ") - -var cbc_shapes = ",sliding_breech unbored_,sliding_breech incomplete_,sliding_breech ,quickfiring_breech ,screw_breech unbored_,screw_breech incomplete_,screw_breech ,cannon_end ,autocannon_breech unbored_,autocannon_breech incomplete_,autocannon_breech ,autocannon_recoil_spring unbored_,autocannon_recoil_spring incomplete_,autocannon_recoil_spring ,autocannon_barrel unbored_,autocannon_barrel very_small_,cannon_layer small_,cannon_layer medium_,cannon_layer large_,cannon_layer very_large_,cannon_layer unbored_very_small_,cannon_layer unbored_small_,cannon_layer unbored_medium_,cannon_layer unbored_large_,cannon_layer unbored_very_large_,cannon_layer ,cannon_barrel built_up_,cannon_barrel ,cannon_chamber built_up_,cannon_chamber thick_,cannon_chamber".split(" ").map(x => x.split(",")) - -var createcasing_block_shapes = "mixer press depot".split(" ") - -var createcasing_casing_shapes = "gearbox encased_chain_drive adjustable_chain_gearshift".split(" ").concat(createcasing_block_shapes) - -var createcasing_block_materials = "brass copper".split(" ") - -var createcasing_casing_materials = "railway creative industrial_iron".split(" ") - -var createdeco_shapes = ",coinstack ,bars ,bars_overlay ,mesh_fence ,hull ,catwalk ,catwalk_stairs ,catwalk_railing ,support_wedge ,support ,sheet_metal ,door locked_,door ,trapdoor red_,lamp green_,lamp blue_,lamp yellow_,lamp".split(" ").map(x => x.split(",")) - -var createdeco_materials = "brass iron copper industrial_iron zinc".split(" ") - -var handcrafted_woods = "acacia birch bamboo cherry crimson dark_oak jungle mangrove oak spruce warped".split(" ") - -var handcrafted_fabrics = "couch fancy_bed".split(" ") - -var colors = "white light_gray gray black brown red orange yellow lime green cyan light_blue blue purple magenta pink".split(" ") - -var createframed_shapes = ",framed_glass_door ,framed_glass_trapdoor ,tiled_glass ,tiled_glass_pane ,framed_glass ,framed_glass_pane horizontal_,framed_glass horizontal_,framed_glass_pane vertical_,framed_glass vertical_,framed_glass_pane".split(" ").map(x => x.split(",")) - -var metals = [] -var fabrics = [] -var glass = [] - -locometal_colors.forEach(color => { - locometal_types.forEach(type => { - metals.push(`railways:${color}${type}`) - }) -}) - -copper_sets.forEach(set => { - copper_oxidations.forEach(oxidation => { - copper_states.forEach(state => { - copper_types.forEach(type => { - metals.push(`create:${state}${oxidation}copper_${set}${type}`) - }) - }) - }) -}) - -dd_metal_materials.forEach(material => { - dd_metal_types.forEach(type => { - dd_metal_shapes.forEach(shape => { - metals.push(`create_dd:${material}_${type}_${shape}`) - }) - }) -}) - -cbc_materials.forEach(material => { - cbc_shapes.forEach(shape => { - metals.push(`createbigcannons:${shape[0]}${material}_${shape[1]}`) - }) -}) - -createcasing_block_materials.forEach(material => { - createcasing_block_shapes.forEach(shape => { - metals.push(`createcasing:${material}_${shape}`) - }) -}) -createcasing_casing_materials.forEach(material => { - createcasing_casing_shapes.forEach(shape => { - metals.push(`createcasing:${material}_${shape}`) - }) -}) - -createdeco_materials.forEach(material => { - createdeco_shapes.forEach(shape => { - metals.push(`createdeco:${shape[0]}${material}_${shape[1]}`) - }) -}) - -handcrafted_fabrics.forEach(shape => { - handcrafted_woods.forEach(wood => { - fabrics.push(`handcrafted:${wood}_${shape}`) - }) -}) - -colors.forEach(color => { - fabrics.push(`create:${color}_seat`) - fabrics.push(`interiors:${color}_chair`) - fabrics.push(`interiors:${color}_floor_chair`) -}) - -colors.forEach(color => { - createframed_shapes.forEach(shape => { - glass.push(`createframed:${shape[0]}${color}_stained_${shape[1]}`) - }) -}) - -console.log(`\x1b[36mmetal = \x1b[0m${metals.join(" ")}\n\n\x1b[36mfabric = \x1b[0m${fabrics.join(" ")}\n\n\x1b[36mglass = \x1b[0m${glass.join(" ")}`) \ No newline at end of file diff --git a/shaders/block.manual.properties b/shaders/block.manual.properties deleted file mode 100644 index 806f0abd..00000000 --- a/shaders/block.manual.properties +++ /dev/null @@ -1,80 +0,0 @@ -# MakeUp - block.properties - -#if MC_VERSION >= 11300 - - # GRASS LIKE ENTITIES - block.10031 = minecraft:cherry_sapling minecraft:torchflower minecraft:short_grass minecraft:grass minecraft:fern minecraft:seagrass biomesoplenty:dune_grass biomesoplenty:dead_grass biomesoplenty:desert_grass biomesoplenty:sprout biomesoplenty:bush environmental:mycelium_sprouts upgrade_aquatic:blue_pickerelweed upgrade_aquatic:purple_pickerelweed byg:beach_grass byg:clover_patch byg:flower_patch byg:horseweed byg:leaf_pile byg:prairie_grass byg:reeds byg:short_beach_grass byg:short_grass byg:tall_prairie_grass byg:weed_grass byg:wilted_grass byg:winter_grass ecotones:clover ecotones:reeds ecotones:sandy_grass ecotones:short_grass terrestria:cattail terrestria:dead_grass terrestria:sakura_leaf_pile terrestria:tall_cattail wildworld:acacia_leaf_pile wildworld:birch_leaf_pile wildworld:dark_oak_leaf_pile wildworld:jungle_leaf_pile wildworld:oak_leaf_pile wildworld:spruce_leaf_pile biomesoplenty:bush minecraft:nether_sprouts minecraft:warped_roots minecraft:crimson_roots projectvibrantjourneys:beach_grass projectvibrantjourneys:short_grass minecraft:oak_sapling minecraft:spruce_sapling minecraft:birch_sapling minecraft:jungle_sapling minecraft:acacia_sapling minecraft:dark_oak_sapling minecraft:dead_bush minecraft:dandelion minecraft:poppy minecraft:blue_orchid minecraft:allium minecraft:azure_bluet minecraft:red_tulip minecraft:orange_tulip minecraft:white_tulip minecraft:pink_tulip minecraft:oxeye_daisy minecraft:cornflower minecraft:lily_of_the_valley minecraft:wither_rose minecraft:sweet_berry_bush biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom atmospheric:rosewood_sapling atmospheric:morado_sapling atmospheric:yucca_sapling atmospheric:kousa_sapling atmospheric:aspen_sapling atmospheric:grimwood_sapling atmospheric:warm_monkey_brush atmospheric:hot_monkey_brush atmospheric:scalding_monkey_brush atmospheric:yucca_flower atmospheric:gilia autumnity:red_maple_sapling autumnity:orange_maple_sapling autumnity:yellow_maple_sapling autumnity:maple_sapling autumnity:autumn_crocus earthmobsmod:buttercup environmental:willow_sapling environmental:cherry_sapling environmental:pink_wisteria_sapling environmental:blue_wisteria_sapling environmental:purple_wisteria_sapling environmental:white_wisteria_sapling farmersdelight:wild_cabbages farmersdelight:wild_onions farmersdelight:wild_tomatoes farmersdelight:wild_carrots farmersdelight:wild_potatoes farmersdelight:wild_beetroots neapolitan:small_banana_frond neapolitan:banana_frond neapolitan:large_banana_frond upgrade_aquatic:river_sapling upgrade_aquatic:beachgrass upgrade_aquatic:white_searocket upgrade_aquatic:pink_searocket environmental:cattail environmental:cartwheel environmental:bluebell environmental:violet environmental:dianthus environmental:red_lotus_flower environmental:white_lotus_flower environmental:yellow_hibiscus environmental:orange_hibiscus environmental:red_hibiscus environmental:pink_hibiscus environmental:magenta_hibiscus environmental:purple_hibiscus buzzier_bees:buttercup buzzier_bees:white_clover buzzier_bees:pink_clover neapolitan:strawberry_pips biomesoplenty:origin_sapling biomesoplenty:flowering_oak_sapling biomesoplenty:rainbow_birch_sapling biomesoplenty:yellow_autumn_sapling biomesoplenty:orange_autumn_sapling biomesoplenty:maple_sapling biomesoplenty:fir_sapling biomesoplenty:redwood_sapling biomesoplenty:white_cherry_sapling biomesoplenty:pink_cherry_sapling biomesoplenty:mahogany_sapling biomesoplenty:jacaranda_sapling biomesoplenty:palm_sapling biomesoplenty:willow_sapling biomesoplenty:dead_sapling biomesoplenty:magic_sapling biomesoplenty:umbran_sapling biomesoplenty:hellbark_sapling astralsorcery:glow_flower botania:white_mystical_flower botania:gray_mystical_flower botania:orange_mystical_flower botania:magenta_mystical_flower botania:light_blue_mystical_flower botania:light_gray_mystical_flower botania:yellow_mystical_flower botania:lime_mystical_flower botania:pink_mystical_flower botania:cyan_mystical_flower botania:purple_mystical_flower botania:blue_mystical_flower botania:brown_mystical_flower botania:green_mystical_flower botania:red_mystical_flower botania:black_mystical_flower botania:white_mushroom botania:orange_mushroom botania:magenta_mushroom botania:light_blue_mushroom botania:yellow_mushroom botania:lime_mushroom botania:pink_mushroom botania:gray_mushroom botania:light_gray_mushroom botania:cyan_mushroom botania:purple_mushroom botania:blue_mushroom botania:brown_mushroom botania:green_mushroom botania:red_mushroom botania:black_mushroom botania:hydroangeas botania:manastar botania:pure_daisy botania:endoflame botania:thermalily botania:rosa_arcana botania:munchdew botania:entropinnyum botania:kekimurus botania:gourmaryllis botania:narslimmus botania:spectrolus botania:dandelifeon botania:rafflowsia botania:shulk_me_not botania:bellethorn botania:bellethorn_chibi botania:bergamute botania:dreadthorn botania:heisei_dream botania:tigerseye botania:jaded_amaranthus botania:orechid botania:fallen_kanade botania:exoflame botania:agricarnation botania:agricarnation_chibi botania:hopperhock botania:hopperhock_chibi botania:tangleberrie botania:jiyuulia botania:rannuncarpus botania:rannuncarpus_chibi botania:hyacidus botania:pollidisiac botania:clayconia botania:clayconia_chibi botania:loonium botania:daffomill botania:vinculotus botania:spectranthemum botania:medumone botania:marimorphosis botania:marimorphosis_chibi botania:bubbell botania:bubbell_chibi botania:solegnolia botania:solegnolia_chibi botania:orechid_ignem terrestria:tiny_cactus pamhc2trees:apple_sapling pamhc2trees:avocado_sapling pamhc2trees:candlenut_sapling pamhc2trees:cherry_sapling pamhc2trees:chestnut_sapling pamhc2trees:gooseberry_sapling pamhc2trees:lemon_sapling pamhc2trees:nutmeg_sapling pamhc2trees:orange_sapling pamhc2trees:peach_sapling pamhc2trees:pear_sapling pamhc2trees:plum_sapling pamhc2trees:walnut_sapling pamhc2trees:spiderweb_sapling pamhc2trees:hazelnut_sapling pamhc2trees:pawpaw_sapling pamhc2trees:soursop_sapling pamhc2trees:almond_sapling pamhc2trees:apricot_sapling pamhc2trees:banana_sapling pamhc2trees:cashew_sapling pamhc2trees:cinnamon_sapling pamhc2trees:coconut_sapling pamhc2trees:date_sapling pamhc2trees:dragonfruit_sapling pamhc2trees:durian_sapling pamhc2trees:fig_sapling pamhc2trees:grapefruit_sapling pamhc2trees:lime_sapling pamhc2trees:mango_sapling pamhc2trees:olive_sapling pamhc2trees:papaya_sapling pamhc2trees:paperbark_sapling pamhc2trees:pecan_sapling pamhc2trees:peppercorn_sapling pamhc2trees:persimmon_sapling pamhc2trees:pistachio_sapling pamhc2trees:pomegranate_sapling pamhc2trees:starfruit_sapling pamhc2trees:vanillabean_sapling pamhc2trees:breadfruit_sapling pamhc2trees:guava_sapling pamhc2trees:jackfruit_sapling pamhc2trees:lychee_sapling pamhc2trees:passionfruit_sapling pamhc2trees:rambutan_sapling pamhc2trees:tamarind_sapling pamhc2trees:maple_sapling pamhc2trees:pinenut_sapling byg:purple_bulbis_anomaly byg:blue_bulbis_anomaly byg:embur_wart byg:cryptic_bramble biomesoplenty:glowshroom biomesoplenty:toadstool biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom biomesoplenty:mangrove_root biomesoplenty:reed biomesoplenty:sprout biomesoplenty:bush pamhc2crops:aridgarden pamhc2crops:frostgarden pamhc2crops:shadedgarden pamhc2crops:soggygarden pamhc2crops:tropicalgarden pamhc2crops:windygarden pamhc2crops:pamamaranthcrop pamhc2crops:pambarleycrop pamhc2crops:pambeancrop pamhc2crops:pamchickpeacrop pamhc2crops:pamcorncrop pamhc2crops:pamlentilcrop pamhc2crops:pammilletcrop pamhc2crops:pamoatcrop pamhc2crops:pamquinoacrop pamhc2crops:pamricecrop pamhc2crops:pamryecrop pamhc2crops:pamsoybeancrops pamhc2crops:pamcottoncrop pamhc2crops:pamflaxcrop pamhc2crops:pamkenafcrop pamhc2crops:pamjutecrop pamhc2crops:pamsisalcrop pamhc2crops:pamartichokecrop pamhc2crops:pamasparaguscrop pamhc2crops:pambellpeppercrop pamhc2crops:pambroccolicrop pamhc2crops:pambrusselsproutcrop pamhc2crops:pamcabbagecrop pamhc2crops:pamcauliflowercrop pamhc2crops:pamcelerycrop pamhc2crops:pamchilipeppercrop pamhc2crops:pamcucumbercrop pamhc2crops:pameggplantcrop pamhc2crops:pamkalecrops pamhc2crops:pamlettucecrop pamhc2crops:pamokracrop pamhc2crops:pampeascrop pamhc2crops:pamspinachcrop pamhc2crops:pamtomatillocrop pamhc2crops:pamtomatocrop pamhc2crops:pamwintersquashcrop pamhc2crops:pamzucchinicrop pamhc2crops:pamarrowrootcrop pamhc2crops:pamcassavacrop pamhc2crops:pamgarliccrop pamhc2crops:pamjicamacrop pamhc2crops:pamleekcrop pamhc2crops:pamkohlrabicrop pamhc2crops:pamonioncrop pamhc2crops:pamparsnipcrop pamhc2crops:pampeanutcrop pamhc2crops:pamradishcrop pamhc2crops:pamrhubarbcrop pamhc2crops:pamrutabagacrop pamhc2crops:pamscallioncrop pamhc2crops:pamsweetpotatocrop pamhc2crops:pamtarocrop pamhc2crops:pamturnipcrop pamhc2crops:pamwaterchestnutcrop pamhc2crops:pamblackberrycrop pamhc2crops:pamblueberrycrop pamhc2crops:pamcactusfruitcrop pamhc2crops:pamcandleberrycrop pamhc2crops:pamcantaloupecrop pamhc2crops:pamcranberrycrop pamhc2crops:pamelderberrycrop pamhc2crops:pamgrapecrop pamhc2crops:pamgreengrapecrop pamhc2crops:pamhuckleberrycrop pamhc2crops:pamjuniperberrycrop pamhc2crops:pamkiwicrop pamhc2crops:pammullberrycrop pamhc2crops:pampineapplecrop pamhc2crops:pamraspberrycrop pamhc2crops:pamstrawberrycrop pamhc2crops:pamcoffeebeancrop pamhc2crops:pamtealeafcrop pamhc2crops:pamagavecrop pamhc2crops:pamwhitemushroomcrop pamhc2crops:pamgingercrop pamhc2crops:pamsesamecrop pamhc2crops:pamspiceleafcrop pamhc2crops:pammustardcrop byg:lament_sprouts byg:synthian_fungus byg:blue_glowcane byg:pink_glowcane byg:purple_glowcane byg:red_glowcane byg:warped_bush byg:blue_glowshroom byg:purple_glowshroom byg:scorched_bush byg:soul_shroom byg:soul_shroom_spore_end byg:death_cap byg:weeping_roots byg:nether_bristle byg:synthian_sprout byg:synthian_roots byg:hanging_synthian_roots byg:embur_sprouts byg:embur_roots byg:ivis_roots byg:ivis_sprout byg:bulbis_sprouts byg:ether_bush byg:thereal_bellflower byg:nightshade_sprouts byg:nightshade_roots byg:oddity_bush byg:shulkren_fungus byg:vermillion_sculk_tendrils byg:vermillion_sculk_growth byg:green_mushroom byg:weeping_milkcap byg:wood_blewit byg:black_puff byg:crimson_berry_bush byg:blueberry_bush byg:nightshade_berry_bush byg:winter_succulent byg:allium_flower_bush byg:alpine_bellflower byg:amaranth byg:angelica byg:begonia byg:bistort byg:black_rose byg:blue_sage byg:california_poppy byg:crocus byg:cyan_amaranth byg:cyan_rose byg:cyan_tulip byg:daffodil byg:fairy_slipper byg:firecracker_flower_bush byg:green_tulip byg:guzmania byg:incan_lily byg:iris byg:kovan_flower byg:lazarus_bellflower byg:lolipop_flower byg:magenta_amaranth byg:magenta_tulip byg:orange_amaranth byg:orange_daisy byg:osiria_rose byg:peach_leather_flower byg:pink_allium byg:pink_allium_flower_bush byg:pink_anemone byg:pink_daffodil byg:pink_orchid byg:protea_flower byg:purple_amaranth byg:purple_orchid byg:purple_sage byg:purple_tulip byg:red_cornflower byg:red_orchid byg:richea byg:rose byg:snowdrops byg:silver_vase_flower byg:torch_ginger byg:violet_leather_flower byg:white_anemone byg:white_sage byg:white_cyclamen byg:winter_rose byg:winter_scilla byg:yellow_daffodil byg:yellow_tulip byg:horseweed byg:winter_cyclamen cutecore:cherry_leaf_litter cutecore:cherry_wood_sapling cutecore:wisteria_sapling cutecore:wisteria_leaf_litter cutecore:lemon_leaf_litter cutecore:lemon_sapling cutecore:hyacinth cutecore:lotus_flower cutecore:violets cutecore:pink_rose cutecore:white_rose cutecore:rose cutecore:forget_me_nots cutecore:pink_carnation cutecore:red_carnation cutecore:white_carnation forbidden_arcanus:yellow_orchid forbidden_arcanus:golden_orchid immersiveengineering:hemp:growth=bottom0 immersiveengineering:hemp:growth=bottom1 immersiveengineering:hemp:growth=bottom2 immersiveengineering:hemp:growth=bottom3 simplefarming:apple_sapling simplefarming:apricot_sapling simplefarming:banana_sapling simplefarming:cherry_sapling simplefarming:mango_sapling simplefarming:olive_sapling simplefarming:orange_sapling simplefarming:pear_sapling simplefarming:plum_sapling simplefarming:barley_crop simplefarming:cassava_crop simplefarming:corn_crop simplefarming:cotton_crop simplefarming:cross_crop simplefarming:cucumber_crop simplefarming:cumin_plant simplefarming:eggplant_crop simplefarming:ginger_crop simplefarming:honeydew_crop simplefarming:kenaf_crop simplefarming:lettuce_crop simplefarming:oat_crop simplefarming:onion_crop simplefarming:pea_crop simplefarming:peanut_crop simplefarming:pepper_crop simplefarming:quinoa_plant simplefarming:radish_crop simplefarming:rice_crop simplefarming:rye_crop simplefarming:scrop simplefarming:hcrop simplefarming:marshmallow_crop simplefarming:sunflower_plant simplefarming:sorghum_crop simplefarming:soybean_crop simplefarming:spinach_crop simplefarming:sweet_potato_crop simplefarming:tomato_crop simplefarming:turnip_crop simplefarming:wild_crop simplefarming:yam_crop simplefarming:zucchini_crop byg:aspen_sapling byg:baobab_sapling byg:blue_enchanted_sapling byg:green_enchanted_sapling byg:pink_cherry_sapling byg:white_cherry_sapling byg:cika_sapling byg:cypress_sapling byg:ebony_sapling byg:ether_sapling byg:fir_sapling byg:aspen_sapling byg:holly_berry_sapling byg:holly_sapling byg:jacaranda_sapling byg:flowering_jacaranda_sapling byg:indigo_jacaranda_sapling byg:indigo_flowering_jacaranda_sapling byg:lament_sapling byg:mahogany_sapling byg:mangrove_sapling byg:maple_sapling byg:red_maple_sapling byg:silver_maple_sapling byg:nightshade_sapling byg:flowering_nightshade_sapling byg:palm_sapling byg:palo_verde_sapling byg:flowering_palo_verde_sapling byg:pine_sapling byg:rainbow_eucalyptus_sapling byg:redwood_sapling byg:pine_sapling byg:skyris_sapling byg:green_apple_skyris_sapling byg:willow_sapling byg:witch_hazel_sapling byg:blooming_witch_hazel_sapling byg:zelkova_sapling byg:withering_oak_sapling byg:araucaria_sapling byg:blue_spruce_sapling byg:brown_birch_sapling byg:brown_oak_sapling byg:zelkova_sapling byg:brown_zelkova_sapling byg:joshua_sapling byg:ripe_joshua_sapling byg:orange_birch_sapling byg:orange_oak_sapling byg:orange_spruce_sapling byg:orchard_sapling byg:flowering_orchard_sapling byg:ripe_orchard_sapling byg:red_birch_sapling byg:red_oak_sapling byg:red_spruce_sapling byg:yellow_birch_sapling byg:yellow_spruce_sapling byg:green_mushroom occultism:otherworld_sapling_natural occultism:otherworld_sapling integrateddynamics:menril_sapling projectvibrantjourneys:glowcap projectvibrantjourneys:crimson_nettle projectvibrantjourneys:warped_nettle twilightforest:mayapple deeperdarker:echo_sapling create_dd:rubber_sapling vegandelight:wild_soybean - - # CROPS LIKE ENTITIES - block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots farmersdelight:cabbages farmersdelight:budding_tomatoes farmersdelight:onions vegandelight:soybean_crop - - # LOWER-HALF ENTITIES - block.10175 = minecraft:pitcher_plant:half=lower minecraft:sunflower:half=lower minecraft:lilac:half=lower minecraft:tall_grass:half=lower minecraft:large_fern:half=lower minecraft:rose_bush:half=lower minecraft:peony:half=lower minecraft:tall_seagrass:half=lower atmospheric:water_hyacinth:half=lower atmospheric:tall_yucca_flower:half=lower environmental:tall_cattail:half=lower environmental:pink_delphinium:half=lower environmental:blue_delphinium:half=lower environmental:purple_delphinium:half=lower environmental:white_delphinium:half=lower environmental:bird_of_paradise:half=lower environmental:giant_tall_grass:half=lower farmersdelight:wild_rice:half=lower upgrade_aquatic:flowering_rush:half=lower upgrade_aquatic:tall_beachgrass:half=lower upgrade_aquatic:tall_blue_pickerelweed:half=lower upgrade_aquatic:tall_purple_pickerelweed:half=lower biomesoplenty:barley:half=lower biomesoplenty:goldenrod:half=lower biomesoplenty:blue_hydrangea:half=lower biomesoplenty:watergrass:half=lower botania:white_double_flower:half=lower botania:orange_double_flower:half=lower botania:magenta_double_flower:half=lower botania:light_blue_double_flower:half=lower botania:yellow_double_flower:half=lower botania:lime_double_flower:half=lower botania:pink_double_flower:half=lower botania:gray_double_flower:half=lower botania:light_gray_double_flower:half=lower botania:cyan_double_flower:half=lower botania:purple_double_flower:half=lower botania:blue_double_flower:half=lower botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=lower biomesoplenty:reed:half=lower biomesoplenty:cattail:half=lower byg:tall_crimson_roots:half=lower byg:tall_ether_grass:half=lower byg:reeds:half=lower byg:tall_prairie_grass:half=lower byg:tall_allium:half=lower byg:azalea:half=lower byg:tall_pink_allium:half=lower moreflowerbushes:purple_hibiscus:half=lower moreflowerbushes:mountain_laurel:half=lower moreflowerbushes:larkspur:half=lower moreflowerbushes:golden_shower:half=lower moreflowerbushes:fuchsia:half=lower moreflowerbushes:butterfly_weed:half=lower moreflowerbushes:blue_sage:half=lower moreflowerbushes:blue_hortensia:half=lower byg:japanese_orchid:half=lower byg:delphinium:half=lower byg:foxglove:half=lower cutecore:pink_rosebush:half=lower cutecore:white_rosebush:half=lower cutecore:pink_hydrangeas:half=lower cutecore:blue_hydrangeas:half=lower cutecore:purple_hydrangeas:half=lower farmersdelight:rice create_bic_bit:sunflowerstem:half=lower - - # UPPER-HALF ENTITIES - block.10176 = minecraft:pitcher_plant:half=upper minecraft:sunflower:half=upper minecraft:lilac:half=upper minecraft:tall_grass:half=upper minecraft:large_fern:half=upper minecraft:rose_bush:half=upper minecraft:peony:half=upper minecraft:tall_seagrass:half=upper atmospheric:water_hyacinth:half=upper atmospheric:tall_yucca_flower:half=upper environmental:tall_cattail:half=upper environmental:pink_delphinium:half=upper environmental:blue_delphinium:half=upper environmental:purple_delphinium:half=upper environmental:white_delphinium:half=upper environmental:bird_of_paradise:half=upper environmental:giant_tall_grass:half=upper farmersdelight:wild_rice:half=upper upgrade_aquatic:flowering_rush:half=upper upgrade_aquatic:tall_beachgrass:half=upper upgrade_aquatic:tall_blue_pickerelweed:half=upper upgrade_aquatic:tall_purple_pickerelweed:half=upper biomesoplenty:barley:half=upper biomesoplenty:goldenrod:half=upper biomesoplenty:blue_hydrangea:half=upper biomesoplenty:watergrass:half=upper botania:white_double_flower:half=upper botania:orange_double_flower:half=upper botania:magenta_double_flower:half=upper botania:light_blue_double_flower:half=upper botania:yellow_double_flower:half=upper botania:lime_double_flower:half=upper botania:pink_double_flower:half=upper botania:gray_double_flower:half=upper botania:light_gray_double_flower:half=upper botania:cyan_double_flower:half=upper botania:purple_double_flower:half=upper botania:blue_double_flower:half=upper botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=upper biomesoplenty:reed:half=upper biomesoplenty:cattail:half=upper byg:tall_crimson_roots:half=upper byg:tall_ether_grass:half=upper byg:reeds:half=upper byg:tall_prairie_grass:half=upper byg:tall_allium:half=upper byg:azalea:half=upper byg:tall_pink_allium:half=upper moreflowerbushes:purple_hibiscus:half=upper moreflowerbushes:mountain_laurel:half=upper moreflowerbushes:larkspur:half=upper moreflowerbushes:golden_shower:half=upper moreflowerbushes:fuchsia:half=upper moreflowerbushes:butterfly_weed:half=upper moreflowerbushes:blue_sage:half=upper moreflowerbushes:blue_hortensia:half=upper byg:japanese_orchid:half=upper byg:delphinium:half=upper byg:foxglove:half=upper cutecore:pink_rosebush:half=upper cutecore:white_rosebush:half=upper cutecore:pink_hydrangeas:half=upper cutecore:blue_hydrangeas:half=upper cutecore:purple_hydrangeas:half=upper farmersdelight:rice_panicles create_bic_bit:sunflowerstem:half=upper - - # LEAVES - block.10018 = minecraft:cherry_leaves minecraft:oak_leaves minecraft:spruce_leaves minecraft:birch_leaves minecraft:jungle_leaves minecraft:acacia_leaves minecraft:dark_oak_leaves minecraft:pale_oak_leaves minecraft:azalea_leaves minecraft:azalea_leaves_flowers minecraft:flowering_azalea_leaves minecraft:mangrove_leaves biomesoplenty:origin_leaves biomesoplenty:flowering_oak_leaves biomesoplenty:rainbow_birch_leaves biomesoplenty:yellow_autumn_leaves biomesoplenty:orange_autumn_leaves biomesoplenty:maple_leaves biomesoplenty:fir_leaves biomesoplenty:redwood_leaves biomesoplenty:mahogany_leaves biomesoplenty:palm_leaves biomesoplenty:willow_leaves biomesoplenty:dead_leaves biomesoplenty:magic_leaves biomesoplenty:umbran_leaves biomesoplenty:hellbark_leaves biomesoplenty:pink_cherry_leaves biomesoplenty:white_cherry_leaves biomesoplenty:jacaranda_leaves quark:blue_blossom_leaves quark:lavender_blossom_leaves quark:orange_blossom_leaves quark:pink_blossom_leaves quark:yellow_blossom_leaves atmospheric:rosewood_leaves atmospheric:morado_leaves atmospheric:flowering_morado_leaves atmospheric:yucca_leaves atmospheric:kousa_leaves atmospheric:aspen_leaves atmospheric:grimwood_leaves autumnity:red_maple_leaves autumnity:orange_maple_leaves autumnity:yellow_maple_leaves autumnity:maple_leaves environmental:willow_leaves environmental:cherry_leaves environmental:pink_wisteria_leaves environmental:blue_wisteria_leaves environmental:purple_wisteria_leaves environmental:white_wisteria_leaves environmental:pink_hanging_wisteria_leaves environmental:blue_hanging_wisteria_leaves environmental:purple_hanging_wisteria_leaves environmental:white_hanging_wisteria_leaves environmental:hanging_willow_leaves upgrade_aquatic:river_leaves byg:aspen_leaves byg:araucaria_leaves byg:baobab_leaves byg:blooming_witch_hazel_leaves byg:blue_enchanted_leaves byg:blue_spruce_leaves byg:brown_birch_leaves byg:brown_oak_leaves byg:brown_zelkova_leaves byg:cika_leaves byg:cypress_leaves byg:ebony_leaves byg:fir_leaves byg:flowering_orchard_leaves byg:flowering_nightshade_leaves byg:flowering_palo_verde_leaves byg:green_apple_skyris_leaves byg:green_enchanted_leaves byg:holly_berry_leaves byg:holly_leaves byg:indigo_jacaranda_leaves byg:jacaranda_leaves byg:joshua_leaves byg:mahogany_leaves byg:mangrove_leaves byg:maple_leaves byg:orange_birch_leaves byg:orange_oak_leaves byg:orange_spruce_leaves byg:orchard_leaves byg:palo_verde_leaves byg:pine_leaves byg:pink_cherry_leaves byg:rainbow_eucalyptus_leaves byg:red_birch_leaves byg:red_maple_leaves byg:red_oak_leaves byg:red_spruce_leaves byg:redwood_leaves byg:ripe_joshua_leaves byg:ripe_orchard_leaves byg:silver_maple_leaves byg:skyris_leaves byg:white_cherry_leaves byg:willow_leaves byg:witch_hazel_leaves byg:yellow_birch_leaves byg:yellow_spruce_leaves byg:zelkova_leaves ecotones:hazel_leaves sakurarosea:alt_sakura_leaves sakurarosea:sakura_leaves sakurarosea:white_sakura_leaves terrestria:cypress_leaves terrestria:dark_japanese_maple_leaves terrestria:hemlock_leaves terrestria:japanese_maple_leaves terrestria:japanese_maple_shrub_leaves terrestria:jungle_palm_leaves terrestria:rainbow_eucalyptus_leaves terrestria:redwood_leaves terrestria:rubber_leaves terrestria:sakura_leaves terrestria:willow_leaves terrestria:yucca_palm_leaves traverse:brown_autumnal_leaves traverse:fir_leaves traverse:orange_autumnal_leaves traverse:red_autumnal_leaves traverse:yellow_autumnal_leaves vanillaenhanced:redwood_leaves wild_explorer:autumn_oak_leaves wild_explorer:autumn_birch_leaves wild_explorer:pink_cherry_oak_leaves wild_explorer:white_cherry_oak_leaves wild_explorer:palm_leaves cutecore:cherry_wood_leaves cutecore:cherry_wood_leaves_fruit cutecore:wisteria_leaves cutecore:lemon_leaves cutecore:lemon_leaves_fruiting dynamictrees:jungle_leaves dynamictrees:oak_leaves dynamictrees:spruce_leaves dynamictrees:dark_oak_leaves dynamictrees:acacia_leaves dynamictrees:birch_leaves simplefarming:apple_leaves simplefarming:apricot_leaves simplefarming:banana_leaves simplefarming:cherry_leaves simplefarming:mango_leaves simplefarming:olive_leaves simplefarming:orange_leaves simplefarming:pear_leaves simplefarming:plum_leaves mythicbotany:dreamwood_leaves undergarden:smogstem_leaves undergarden:wigglewood_leaves occultism:otherworld_leaves occultism:otherworld_leaves_natural integrateddynamics:menril_leaves extlights:xmas_leaves extlights:xmas_leaves_bulb extlights:xmas_leaves_bulb_red extlights:xmas_leaves_bulb_green extlights:xmas_leaves_bulb_blue extlights:xmas_leaves_bulb_blinking_redgreen extlights:xmas_leaves_bulb_blinking_redblue extlights:xmas_leaves_bulb_blinking_greenblue extlights:xmas_leaves_bulb_blinking_rgb extlights:xmas_leaves_bulb_smooth_redgreen extlights:xmas_leaves_bulb_smooth_redblue extlights:xmas_leaves_bulb_smooth_greenblue extlights:xmas_leaves_bulb_smooth_rgb techreborn:rubber_leaves blockus:legacy_leaves blockus:white_oak_leaves architects_palette:twisted_leaves twilightforest:twilight_oak_leaves twilightforest:canopy_leaves twilightforest:mangrove_leaves twilightforest:dark_leaves twilightforest:time_leaves twilightforest:transformation_leaves twilightforest:mining_leaves twilightforest:sorting_leaves twilightforest:giant_leaves twilightforest:thorn_leaves tfc:wood/leaves/acacia tfc:wood/leaves/ash tfc:wood/leaves/aspen tfc:wood/leaves/birch tfc:wood/leaves/blackwood tfc:wood/leaves/chestnut tfc:wood/leaves/douglas_fir tfc:wood/leaves/hickory tfc:wood/leaves/kapok tfc:wood/leaves/mangrove tfc:wood/leaves/maple tfc:wood/leaves/oak tfc:wood/leaves/palm tfc:wood/leaves/pine tfc:wood/leaves/rosewood tfc:wood/leaves/sequoia tfc:wood/leaves/spruce tfc:wood/leaves/sycamore tfc:wood/leaves/white_cedar tfc:wood/leaves/willow tfc:plant/cherry_leaves tfc:plant/green_apple_leaves tfc:plant/lemon_leaves tfc:plant/olive_leaves tfc:plant/orange_leaves tfc:plant/peach_leaves tfc:plant/plum_leaves tfc:plant/red_apple_leaves deeperdarker:echo_leaves create_dd:rubber_leaves - - # NO-WAVEABLE SMALL ELEMENTS - block.10032 = sugar_cane tube_coral brain_coral fire_coral bubble_coral horn_coral dead_tube_coral dead_brain_coral dead_fire_coral dead_bubble_coral dead_horn_coral tube_coral_fan brain_coral_fan fire_coral_fan bubble_coral_fan horn_coral_fan dead_tube_coral_fan dead_brain_coral_fan dead_fire_coral_fan dead_bubble_coral_fan dead_horn_coral_fan nether_wart tfc:plant/athyrium_fern tfc:plant/canna tfc:plant/goldenrod tfc:plant/pampas_grass tfc:plant/perovskia tfc:plant/rose tfc:plant/beachgrass tfc:plant/bluegrass tfc:plant/bromegrass tfc:plant/fountain_grass tfc:plant/manatee_grass tfc:plant/orchard_grass tfc:plant/ryegrass tfc:plant/scutch_grass tfc:plant/star_grass tfc:plant/timothy_grass tfc:plant/raddia_grass tfc:plant/allium tfc:plant/anthurium tfc:plant/arrowhead tfc:plant/badderlocks tfc:plant/barrel_cactus tfc:plant/blood_lily tfc:plant/blue_ginger tfc:plant/blue_orchid tfc:plant/bur_reed tfc:plant/butterfly_milkweed tfc:plant/black_orchid tfc:plant/calendula tfc:plant/cattail tfc:plant/cobblestone_lichen tfc:plant/coontail tfc:plant/cordgrass tfc:plant/dandelion tfc:plant/dead_bush tfc:plant/desert_flame tfc:plant/duckweed tfc:plant/eel_grass tfc:plant/field_horsetail tfc:plant/foxglove tfc:plant/grape_hyacinth tfc:plant/green_algae tfc:plant/gutweed tfc:plant/guzmania tfc:plant/heliconia tfc:plant/heather tfc:plant/hibiscus tfc:plant/houstonia tfc:plant/kangaroo_paw tfc:plant/king_fern tfc:plant/labrador_tea tfc:plant/lady_fern tfc:plant/laminaria tfc:plant/licorice_fern tfc:plant/artists_conk tfc:plant/lily_of_the_valley tfc:plant/lilac tfc:plant/lotus tfc:plant/maiden_pink tfc:plant/marigold tfc:plant/meads_milkweed tfc:plant/milfoil tfc:plant/morning_glory tfc:plant/philodendron tfc:plant/moss tfc:plant/nasturtium tfc:plant/ostrich_fern tfc:plant/oxeye_daisy tfc:plant/phragmite tfc:plant/pickerelweed tfc:plant/pistia tfc:plant/poppy tfc:plant/primrose tfc:plant/pulsatilla tfc:plant/red_algae tfc:plant/reindeer_lichen tfc:plant/red_sealing_wax_palm tfc:plant/sacred_datura tfc:plant/sagebrush tfc:plant/sago tfc:plant/saguaro_fruit tfc:plant/sapphire_tower tfc:plant/sargassum tfc:plant/sea_lavender tfc:plant/sea_palm tfc:plant/silver_spurflower tfc:plant/snapdragon_pink tfc:plant/snapdragon_red tfc:plant/snapdragon_white tfc:plant/snapdragon_yellow tfc:plant/strelitzia tfc:plant/switchgrass tfc:plant/sword_fern tfc:plant/tall_fescue_grass tfc:plant/toquilla_palm tfc:plant/trillium tfc:plant/tropical_milkweed tfc:plant/tulip_orange tfc:plant/tulip_pink tfc:plant/tulip_red tfc:plant/tulip_white tfc:plant/turtle_grass tfc:plant/vriesea tfc:plant/water_canna tfc:plant/white_water_lily tfc:plant/purple_water_lily tfc:plant/yellow_water_lily tfc:plant/water_taro tfc:plant/yucca tfc:plant/hanging_vines_plant tfc:plant/hanging_vines tfc:plant/spanish_moss_plant tfc:plant/spanish_moss tfc:plant/liana_plant tfc:plant/liana tfc:plant/tree_fern_plant tfc:plant/tree_fern tfc:plant/arundo_plant tfc:plant/arundo tfc:plant/dry_phragmite_plant tfc:plant/dry_phragmite tfc:plant/winged_kelp_plant tfc:plant/winged_kelp tfc:plant/leafy_kelp_plant tfc:plant/leafy_kelp tfc:plant/giant_kelp_plant tfc:plant/giant_kelp_flower tfc:plant/ivy tfc:plant/jungle_vines tfc:plant/saguaro_plant tfc:plant/saguaro tfc:plant/golden_bamboo tfc:plant/golden_bamboo_sapling tfc:wild_crop/barley tfc:wild_crop/oat tfc:wild_crop/rye tfc:wild_crop/maize tfc:wild_crop/wheat tfc:wild_crop/rice tfc:wild_crop/beet tfc:wild_crop/cabbage tfc:wild_crop/carrot tfc:wild_crop/garlic tfc:wild_crop/green_bean tfc:wild_crop/potato tfc:wild_crop/onion tfc:wild_crop/soybean tfc:wild_crop/squash tfc:wild_crop/sugarcane tfc:wild_crop/tomato tfc:wild_crop/jute tfc:wild_crop/papyrus tfc:wild_crop/pumpkin tfc:wild_crop/melon tfc:wild_crop/red_bell_pepper tfc:wild_crop/yellow_bell_pepper tfc:plant/snowberry_bush tfc:plant/bunchberry_bush tfc:plant/gooseberry_bush tfc:plant/cloudberry_bush tfc:plant/strawberry_bush tfc:plant/wintergreen_berry_bush tfc:plant/cranberry_bush - - # REFLECTIVE - block.10008 = minecraft:water minecraft:flowing_water subwild:water_puddle tfc:fluid/finite_fresh_water tfc:fluid/fresh_water tfc:fluid/finite_salt_water tfc:fluid/salt_water tfc:fluid/finite_river_water tfc:fluid/river_water tfc:fluid/spring_water tfc:fluid/finite_spring_water - block.10079 = ice slime_block white_stained_glass orange_stained_glass magenta_stained_glass light_blue_stained_glass yellow_stained_glass lime_stained_glass pink_stained_glass gray_stained_glass light_gray_stained_glass cyan_stained_glass purple_stained_glass blue_stained_glass brown_stained_glass green_stained_glass red_stained_glass black_stained_glass white_stained_glass_pane orange_stained_glass_pane magenta_stained_glass_pane light_blue_stained_glass_pane yellow_stained_glass_pane lime_stained_glass_pane pink_stained_glass_pane gray_stained_glass_pane light_gray_stained_glass_pane cyan_stained_glass_pane purple_stained_glass_pane blue_stained_glass_pane brown_stained_glass_pane green_stained_glass_pane red_stained_glass_pane black_stained_glass_pane tinted_glass deeperdarker:soundproof_glass create:framed_glass create:framed_glass_pane create:framed_glass_trapdoor create:framed_glass_door create:tiled_glass create:tiled_glass_pane create:horizontal_framed_glass create:horizontal_framed_glass_pane create:vertical_framed_glass create:vertical_framed_glass_pane naturalist:crimson_froglass naturalist:verdant_froglass naturalist:azure_froglass naturalist:crimson_froglass_pane naturalist:verdant_froglass_pane naturalist:azure_froglass_pane glass glass_pane - - layer.translucent = create:framed_glass create:framed_glass_pane create:framed_glass_trapdoor create:framed_glass_door create:tiled_glass create:tiled_glass_pane create:horizontal_framed_glass create:horizontal_framed_glass_pane create:vertical_framed_glass create:vertical_framed_glass_pane glass glass_pane - - # EMMISIVE (LIKE GLOWSTONE) - block.10089 = ochre_froglight verdant_froglight pearlescent_froglight glowstone shroomlight torch wall_torch redstone_torch redstone_wall_torch jack_o_lantern redstone_lamp lantern sea_lantern soul_lantern soul_torch soul_wall_torch cataclysm:void_lantern_block deeperdarker:sculk_gleam - - # NEW EMMISIVE - block.10090 = magma_block end_root campfire:lit=true soul_campfire:lit=true beacon betterendforge:mossy_glowshroom_hymenophore betterendforge:mossy_glowshroom_fur betterendforge:blue_vine_lantern betterendforge:blue_vine_fur betterendforge::lumecorn:shape=light_top_middle betterendforge::lumecorn:shape=light_middle betterendforge::lumecorn:shape=light_bottom betterendforge::purple_polypore betterendforge::bulb_vine:shape=bottom - - # FAKE EMMISORS - block.10213 = soul_fire - - # METAL-LIKE - block.10400 = iron_block iron_trapdoor gold_block emerald_block lapis_block diamond_block copper_block exposed_copper weathered_copper oxidized_copper cut_copper exposed_cut_copper weathered_cut_copper oxidized_cut_copper cut_copper_stairs exposed_cut_copper_stairs weathered_cut_copper_stairs oxidized_cut_copper_stairs cut_copper_slab exposed_cut_copper_slab weathered_cut_copper_slab oxidized_cut_copper_slab waxed_cut_copper_slab waxed_weathered_cut_copper_slab waxed_weathered_copper waxed_exposed_copper waxed_copper_block waxed_oxidized_cut_copper_slab waxed_weathered_cut_copper_slab waxed_exposed_cut_copper_slab waxed_cuyt_copper_slab waxed_oxidized_copper waxed_cut_copper waxed_exposed_cut_copper waxed_weathered_cut_copper waxed_oxidized_cut_copper waxed_cut_copper_stairs waxed_exposed_cut_copper_stairs waxed_weathered_cut_copper_stairs waxed_oxidized_cut_copper_stairs heavy_weighted_pressure_plate light_weighted_pressure_plate iron_bars tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top tfc:metal/anvil/bismuth_bronze tfc:metal/block/bismuth_bronze tfc:metal/bars/bismuth_bronze tfc:metal/trapdoor/bismuth_bronze tfc:metal/block/bismuth_bronze_stairs tfc:block/metal/block/bismuth_bronze_slab tfc:block/metal/block/bismuth_bronze_slab_top tfc:metal/anvil/black_bronze tfc:metal/block/black_bronze tfc:metal/bars/black_bronze tfc:metal/trapdoor/black_bronze tfc:metal/block/black_bronze_stairs tfc:block/metal/block/black_bronze_slab tfc:block/metal/block/black_bronze_slab_top tfc:metal/anvil/bronze tfc:metal/block/bronze tfc:metal/bars/bronze tfc:metal/trapdoor/bronze tfc:metal/block/bronze_stairs tfc:block/metal/block/bronze_slab tfc:block/metal/block/bronze_slab_top tfc:metal/anvil/brass tfc:metal/block/brass tfc:metal/bars/brass tfc:metal/trapdoor/brass tfc:metal/block/brass_stairs tfc:block/metal/block/brass_slab tfc:block/metal/block/brass_slab_top tfc:metal/anvil/copper tfc:metal/block/copper tfc:metal/bars/copper tfc:metal/trapdoor/copper tfc:metal/block/copper_stairs tfc:block/metal/block/copper_slab tfc:block/metal/block/copper_slab_top tfc:metal/anvil/gold tfc:metal/block/gold tfc:metal/bars/gold tfc:metal/trapdoor/gold tfc:metal/block/gold_stairs tfc:block/metal/block/gold_slab tfc:block/metal/block/gold_slab_top tfc:metal/anvil/nickel tfc:metal/block/nickel tfc:metal/bars/nickel tfc:metal/trapdoor/nickel tfc:metal/block/nickel_stairs tfc:block/metal/block/nickel_slab tfc:block/metal/block/nickel_slab_top tfc:metal/anvil/rose_gold tfc:metal/block/rose_gold tfc:metal/bars/rose_gold tfc:metal/trapdoor/rose_gold tfc:metal/block/rose_gold_stairs tfc:block/metal/block/rose_gold_slab tfc:block/metal/block/rose_gold_slab_top tfc:metal/anvil/silver tfc:metal/block/silver tfc:metal/bars/silver tfc:metal/trapdoor/silver tfc:metal/block/silver_stairs tfc:block/metal/block/silver_slab tfc:block/metal/block/silver_slab_top tfc:metal/anvil/tin tfc:metal/block/tin tfc:metal/bars/tin tfc:metal/trapdoor/tin tfc:metal/block/tin_stairs tfc:block/metal/block/tin_slab tfc:block/metal/block/tin_slab_top tfc:metal/anvil/zinc tfc:metal/block/zinc tfc:metal/bars/zinc tfc:metal/trapdoor/zinc tfc:metal/block/zinc_stairs tfc:block/metal/block/zinc_slab tfc:block/metal/block/zinc_slab_top tfc:metal/anvil/sterling_silver tfc:metal/block/sterling_silver tfc:metal/bars/sterling_silver tfc:metal/trapdoor/sterling_silver tfc:metal/block/sterling_silver_stairs tfc:block/metal/block/sterling_silver_slab tfc:block/metal/block/sterling_silver_slab_top tfc:metal/anvil/wrought_iron tfc:metal/block/wrought_iron tfc:metal/bars/wrought_iron tfc:metal/trapdoor/wrought_iron tfc:metal/block/wrought_iron_stairs tfc:block/metal/block/wrought_iron_slab tfc:block/metal/block/wrought_iron_slab_top tfc:metal/anvil/cast_iron tfc:metal/block/cast_iron tfc:metal/bars/cast_iron tfc:metal/trapdoor/cast_iron tfc:metal/block/cast_iron_stairs tfc:block/metal/block/cast_iron_slab tfc:block/metal/block/cast_iron_slab_top tfc:metal/anvil/pig_iron tfc:metal/block/pig_iron tfc:metal/bars/pig_iron tfc:metal/trapdoor/pig_iron tfc:metal/block/pig_iron_stairs tfc:block/metal/block/pig_iron_slab tfc:block/metal/block/pig_iron_slab_top tfc:metal/anvil/steel tfc:metal/block/steel tfc:metal/bars/steel tfc:metal/trapdoor/steel tfc:metal/block/steel_stairs tfc:block/metal/block/steel_slab tfc:block/metal/block/steel_slab_top tfc:metal/anvil/black_steel tfc:metal/block/black_steel tfc:metal/bars/black_steel tfc:metal/trapdoor/black_steel tfc:metal/block/black_steel_stairs tfc:block/metal/block/black_steel_slab tfc:block/metal/block/black_steel_slab_top tfc:metal/anvil/blue_steel tfc:metal/block/blue_steel tfc:metal/bars/blue_steel tfc:metal/trapdoor/blue_steel tfc:metal/block/blue_steel_stairs tfc:block/metal/block/blue_steel_slab tfc:block/metal/block/blue_steel_slab_top tfc:metal/anvil/red_steel tfc:metal/block/red_steel tfc:metal/bars/red_steel tfc:metal/trapdoor/red_steel tfc:metal/block/red_steel_stairs tfc:block/metal/block/red_steel_slab tfc:block/metal/block/red_steel_slab_top tfc:metal/anvil/weak_steel tfc:metal/block/weak_steel tfc:metal/bars/weak_steel tfc:metal/trapdoor/weak_steel tfc:metal/block/weak_steel_stairs tfc:block/metal/block/weak_steel_slab tfc:block/metal/block/weak_steel_slab_top tfc:metal/anvil/weak_blue_steel tfc:metal/block/weak_blue_steel tfc:metal/bars/weak_blue_steel tfc:metal/trapdoor/weak_blue_steel tfc:metal/block/weak_blue_steel_stairs tfc:block/metal/block/weak_blue_steel_slab tfc:block/metal/block/weak_blue_steel_slab_top tfc:metal/anvil/weak_red_steel tfc:metal/block/weak_red_steel tfc:metal/bars/weak_red_steel tfc:metal/trapdoor/weak_red_steel tfc:metal/block/weak_red_steel_stairs tfc:block/metal/block/weak_red_steel_slab tfc:block/metal/block/weak_red_steel_slab_top tfc:metal/anvil/high_carbon_steel tfc:metal/block/high_carbon_steel tfc:metal/bars/high_carbon_steel tfc:metal/trapdoor/high_carbon_steel tfc:metal/block/high_carbon_steel_stairs tfc:block/metal/block/high_carbon_steel_slab tfc:block/metal/block/high_carbon_steel_slab_top tfc:metal/anvil/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel tfc:metal/bars/high_carbon_black_steel tfc:metal/trapdoor/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel_stairs tfc:block/metal/block/high_carbon_black_steel_slab tfc:block/metal/block/high_carbon_black_steel_slab_top tfc:metal/anvil/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel tfc:metal/bars/high_carbon_blue_steel tfc:metal/trapdoor/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel_stairs tfc:block/metal/block/high_carbon_blue_steel_slab tfc:block/metal/block/high_carbon_blue_steel_slab_top tfc:metal/anvil/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel tfc:metal/bars/high_carbon_red_steel tfc:metal/trapdoor/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel_stairs tfc:block/metal/block/high_carbon_red_steel_slab tfc:block/metal/block/high_carbon_red_steel_slab_top tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top create:copper_ladder create:brass_ladder create:copper_scaffolding create:brass_scaffolding create:brass_block create:copper_bars create:brass_bars create:smart_chute create:fluid_tank create:steam_whistle create:steam_engine create:spout create:hose_pulley create:item_drain create:train_casing create:smart_fluid_pipe create:fluid_pipe create:mechanical_pump create:copper_valve_handle create:fluid_valve create:mechanical_crafter create:sequenced_gearshift create:flywheel create:rotation_speed_controller create:mechanical_arm create:railway_casing create:controls create:brass_funnel create:brass_tunnel create:content_observer create:stockpile_switch create:redstone_link create:pulse_repeater create:pulse_extender create:peculiar_bell create_jetpack:jetpack create_enchantment_industry:printer create_enchantment_industry:disenchanter cataclysm:ancient_metal_block cataclysm:cursium_block cataclysm:enderite_block cataclysm:witherite_block cataclysm:ignitium_block cataclysm:mechanical_fusion_anvil cataclysm:emp cataclysm:black_steel_block create_dd:furnace_engine create_dd:bore_block create_dd:industrial_fan create_dd:hydraulic_press create_dd:item_stockpile create_dd:fluid_reservoir create_dd:dark_metal_block create_dd:dark_metal_plating create_dd:dark_metal_block_slab create_dd:dark_metal_block_stairs create_dd:dark_metal_bricks create_dd:dark_metal_brick_slab create_dd:dark_metal_brick_stairs create:zinc_block create:industrial_iron_block create:train_door create:chute create:item_vault create:haunted_bell minecraft:netherite_block create_jetpack:netherite_jetpack createutilities:void_steel_block createutilities:void_steel_scaffolding createutilities:void_casing createutilities:void_steel_bars createutilities:void_steel_ladder createutilities:void_motor createutilities:void_chest createutilities:void_tank createutilities:void_battery railways:smokestack_caboosestyle railways:smokestack_long railways:smokestack_coalburner railways:smokestack_oilburner railways:smokestack_streamlined railways:smokestack_woodburner railways:fuel_tank railways:portable_fuel_interface create_power_loader:empty_brass_chunk_loader create_power_loader:brass_chunk_loader create_connected:empty_fan_catalyst create_connected:fan_blasting_catalyst create_connected:fan_smoking_catalyst create_connected:fan_splashing_catalyst create_connected:fan_haunting_catalyst create_connected:sequenced_pulse_generator create_connected:item_silo create_things_and_misc:card_reader create_things_and_misc:card_press create_things_and_misc:sprinkler create_things_and_misc:brass_tiles create_things_and_misc:brass_tiles_slab create_things_and_misc:brass_tiles_stair create_things_and_misc:brass_bricks create_things_and_misc:brass_brick_slab create_things_and_misc:brass_brick_stairs vintageimprovements:vanadium_block createcasing:brass_shaft createcasing:creative_casing create_dd:stargaze_singularity_scaffolding create_dd:stargaze_singularity_block create_dd:stargaze_singularity_casing create_dd:mithril_scaffolding create_dd:mithril_block create_dd:mithril_casing create_dd:bronze_scaffolding create_dd:bronze_block create_dd:bronze_casing create_dd:steel_scaffolding create_dd:steel_block create_dd:steel_casing create_dd:industrial_iron_block create_dd:industrial_casing create_dd:tin_scaffolding create_dd:tin_block create_dd:chromatic_block create_dd:refined_radiance_scaffolding create_dd:refined_radiance_block create_dd:refined_radiance_casing create_dd:shadow_steel_scaffolding create_dd:shadow_steel_block create_dd:shadow_steel_casing create_dd:blaze_gold_scaffolding create_dd:blaze_gold_block create_dd:blaze_gold_casing create_dd:hydraulic_scaffolding create_dd:hydraulic_casing create_dd:overburden_scaffolding create_dd:overburden_casing create_dd:train_scaffolding create_dd:zinc_scaffolding create_dd:industrial_scaffolding create_dd:netherite_scaffolding create_dd:bronze_saw create_dd:bronze_drill createbigcannons:big_cartridge createbigcannons:cast_iron_block createbigcannons:nethersteel_block createbigcannons:basin_foundry_lid createbigcannons:wrought_iron_drop_mortar_end createbigcannons:wrought_iron_cannon_end createbigcannons:wrought_iron_cannon_chamber create_dd:flywheel - - # SAND-LIKE - block.10410 = sand red_sand dirt_path gravel suspicious_gravel suspicious_sand white_concrete_powder light_gray_concrete_powder gray_concrete_powder black_concrete_powder brown_concrete_powder red_concrete_powder orange_concrete_powder yellow_concrete_powder lime_concrete_powder green_concrete_powder cyan_concrete_powder light_blue_concrete_powder blue_concrete_powder purple_concrete_powder magenta_concrete_powder pink_concrete_powder coarse_dirt - - # FABRIC-LIKE - block.10440 = white_carpet orange_carpet magenta_carpet light_blue_carpet yellow_carpet lime_carpet pink_carpet gray_carpet light_gray_carpet cyan_carpet purple_carpet blue_carpet brown_carpet green_carpet red_carpet black_carpet white_wool orange_wool magenta_wool light_blue_wool yellow_wool lime_wool pink_wool gray_wool light_gray_wool cyan_wool purple_wool blue_wool brown_wool green_wool red_wool black_wool estrogen:moth_wool estrogen:quilted_moth_wool estrogen:moth_wool_carpet estrogen:quilted_moth_wool_carpet farmersdelight:canvas_rug farmersdelight:full_tatami_mat farmersdelight:half_tatami_mat farmersdelight:tatami sophisticated_backpacks:backpack create_dd:blueprint_block create_dd:blueprint_carpet create_dd:mysterious_blueprint_carpet -#else - - # WAVING ENTITIES - block.10031 = minecraft:tallgrass biomesoplenty:plant_0 biomesoplenty:plant_1 atum:oasis_grass atum:dead_grass atum:shrub atum:weed thebetweenlands:blue_eyed_grass thebetweenlands:bottle_brush_grass thebetweenlands:cave_grass thebetweenlands:swamp_tallgrass thebetweenlands:pale_grass xlfoodmod:grass midnight:fingered_grass midnight:tall_midnight_grass tconstruct:slime_grass_tall pvj:short_grass pvj:chickenweed pvj:clovers pvj:crabgrass pvj:beach_grass biomesoplenty:coral coralreef:coral biomesoplenty:seaweed - block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots pvj:wild_wheat pvj:wild_potato pvj:wild_beetroot pvj:wild_carrot - block.10175 = minecraft:double_plant:half=lower thebetweenlands:swamp_double_tallgrass:half=lower thebetweenlands:tall_cattail:half=lower midnight:double_midnight_grass:half=lower zawa:eucalyptus_bottom botania:doubleflower1:half=lower botania:doubleflower2:half=lower zawa:karvy_bottom - block.10176 = minecraft:double_plant:half=upper thebetweenlands:swamp_double_tallgrass:half=upper thebetweenlands:tall_cattail:half=upper midnight:double_midnight_grass:half=upper zawa:eucalyptus_top botania:doubleflower1:half=upper botania:doubleflower2:half=upper zawa:karvy_top - - block.10018 = minecraft:leaves minecraft:leaves2 biomesoplenty:leaves_0 biomesoplenty:leaves_1 biomesoplenty:leaves_2 biomesoplenty:leaves_3 biomesoplenty:leaves_4 biomesoplenty:leaves_5 atum:palm_leaves atum:deadwood_leaves quark:variant_leaves twilightforest:twilight_leaves twilightforest:magic_leaves twilightforest:twilight_leaves_3 twilightforest:dark_leaves twilightforest:giant_leaves midnight:shadowroot_leaves midnight:dark_willow_leaves aether_legacy:aether_leaves aether_legacy:crystal_leaves dynamictrees:leaves0 dynamictrees:leaves1 betterwithmods:blood_leaves rustic:leaves thebetweenlands:leaves_weedwood_tree thebetweenlands:leaves_sap_tree thebetweenlands:leaves_rubber_tree thebetweenlands:leaves_hearthgrove_tree thebetweenlands:leaves_nibbletwig_tree thebetweenlands:leaves_spirit_tree_top thebetweenlands:leaves_spirit_tree_middle thebetweenlands:leaves_spirit_tree_bottom ic2:leaves tconstruct:slime_leaves forestry:leaves pvj:leaves_willow pvj:leaves_mangrove pvj:leaves_palm pvj:leaves_redwood pvj:leaves_fir pvj:leaves_pine pvj:leaves_aspen pvj:leaves_red_maple pvj:leaves_orange_maple pvj:leaves_baobab pvj:leaves_cottonwood pvj:leaves_juniper pvj:leaves_juniper_berried pvj:leaves_white_cherry_blossom pvj:leaves_pink_cherry_blossom pvj:leaves_jacaranda extrabiomesxl:leaf_autumn_brown extrabiomesxl:leaf_autumn_orange extrabiomesxl:leaf_autumn_red extrabiomesxl:leaf_autumn_yellow extrabiomesxl:leaf_cypress_bald extrabiomesxl:leaf_cypress_regular extrabiomesxl:leaf_fir extrabiomesxl:leaf_japanese_maple_regular extrabiomesxl:leaf_japanese_maple_shrub extrabiomesxl:leaf_rainbow_eucalyptus extrabiomesxl:leaf_redwood extrabiomesxl:leaf_sakura extrautils2:ironwood_leaves musiccraft:mleaves thaumcraft:leaves_greatwood thaumcraft:leaves_silverwood - - # REFLECTIVE - block.10008 = minecraft:water minecraft:flowing_water 113_water_mechanics:downwards_bubble_column 113_water_mechanics:upwards_bubble_column bubble_elevator:bubble_column magma_bubble_column:magma_bubble_column - block.10079 = ice slime stained_glass stained_glass_pane - - # EMMISIVE (LIKE GLOWSTONE) - block.10089 = glowstone torch redstone_torch lit_pumpkin lit_redstone_lamp beacon - - # NO-WAVEABLE - block.10032 = reeds sugar_cane tube_coral brain_coral fire_coral bubble_coral horn_coral dead_tube_coral dead_brain_coral dead_fire_coral dead_bubble_coral dead_horn_coral tube_coral_fan brain_coral_fan fire_coral_fan bubble_coral_fan horn_coral_fan dead_tube_coral_fan dead_brain_coral_fan dead_fire_coral_fan dead_bubble_coral_fan dead_horn_coral_fan sapling nether_wart - - # NEW EMMISIVE - block.10090 = magma fire flowing_lava lava end_root beacon betterendforge:mossy_glowshroom_hymenophore betterendforge:mossy_glowshroom_fur betterendforge:blue_vine_lantern betterendforge:blue_vine_fur betterendforge::lumecorn:shape=light_top_middle betterendforge::lumecorn:shape=light_middle betterendforge::lumecorn:shape=light_bottom betterendforge::purple_polypore betterendforge::bulb_vine:shape=bottom - - # FAKE EMMISORS - block.10213 = soul_fire - - # METAL-LIKE - block.10400 = iron_block gold_block emerald_block lapis_block diamond_block - - # SAND-LIKE - block.10410 = sand red_sand dirt_path - - # FABRIC-LIKE - block.10440 = white_carpet orange_carpet magenta_carpet light_blue_carpet yellow_carpet lime_carpet pink_carpet gray_carpet light_gray_carpet cyan_carpet purple_carpet blue_carpet brown_carpet green_carpet red_carpet black_carpet white_wool orange_wool magenta_wool light_blue_wool yellow_wool lime_wool pink_wool gray_wool light_gray_wool cyan_wool purple_wool blue_wool brown_wool green_wool red_wool black_wool - #endif diff --git a/shaders/block.properties b/shaders/block.properties index 8f6b82d1..26138f97 100644 --- a/shaders/block.properties +++ b/shaders/block.properties @@ -22,9 +22,7 @@ # REFLECTIVE block.10008 = minecraft:water minecraft:flowing_water subwild:water_puddle tfc:fluid/finite_fresh_water tfc:fluid/fresh_water tfc:fluid/finite_salt_water tfc:fluid/salt_water tfc:fluid/finite_river_water tfc:fluid/river_water tfc:fluid/spring_water tfc:fluid/finite_spring_water - block.10079 = ice slime_block white_stained_glass orange_stained_glass magenta_stained_glass light_blue_stained_glass yellow_stained_glass lime_stained_glass pink_stained_glass gray_stained_glass light_gray_stained_glass cyan_stained_glass purple_stained_glass blue_stained_glass brown_stained_glass green_stained_glass red_stained_glass black_stained_glass white_stained_glass_pane orange_stained_glass_pane magenta_stained_glass_pane light_blue_stained_glass_pane yellow_stained_glass_pane lime_stained_glass_pane pink_stained_glass_pane gray_stained_glass_pane light_gray_stained_glass_pane cyan_stained_glass_pane purple_stained_glass_pane blue_stained_glass_pane brown_stained_glass_pane green_stained_glass_pane red_stained_glass_pane black_stained_glass_pane tinted_glass deeperdarker:soundproof_glass create:framed_glass create:framed_glass_pane create:framed_glass_trapdoor create:framed_glass_door create:tiled_glass create:tiled_glass_pane create:horizontal_framed_glass create:horizontal_framed_glass_pane create:vertical_framed_glass create:vertical_framed_glass_pane naturalist:crimson_froglass naturalist:verdant_froglass naturalist:azure_froglass naturalist:crimson_froglass_pane naturalist:verdant_froglass_pane naturalist:azure_froglass_pane glass glass_pane createframed:white_stained_framed_glass_door createframed:white_stained_framed_glass_trapdoor createframed:white_stained_tiled_glass createframed:white_stained_tiled_glass_pane createframed:white_stained_framed_glass createframed:white_stained_framed_glass_pane createframed:horizontal_white_stained_framed_glass createframed:horizontal_white_stained_framed_glass_pane createframed:vertical_white_stained_framed_glass createframed:vertical_white_stained_framed_glass_pane createframed:light_gray_stained_framed_glass_door createframed:light_gray_stained_framed_glass_trapdoor createframed:light_gray_stained_tiled_glass createframed:light_gray_stained_tiled_glass_pane createframed:light_gray_stained_framed_glass createframed:light_gray_stained_framed_glass_pane createframed:horizontal_light_gray_stained_framed_glass createframed:horizontal_light_gray_stained_framed_glass_pane createframed:vertical_light_gray_stained_framed_glass createframed:vertical_light_gray_stained_framed_glass_pane createframed:gray_stained_framed_glass_door createframed:gray_stained_framed_glass_trapdoor createframed:gray_stained_tiled_glass createframed:gray_stained_tiled_glass_pane createframed:gray_stained_framed_glass createframed:gray_stained_framed_glass_pane createframed:horizontal_gray_stained_framed_glass createframed:horizontal_gray_stained_framed_glass_pane createframed:vertical_gray_stained_framed_glass createframed:vertical_gray_stained_framed_glass_pane createframed:black_stained_framed_glass_door createframed:black_stained_framed_glass_trapdoor createframed:black_stained_tiled_glass createframed:black_stained_tiled_glass_pane createframed:black_stained_framed_glass createframed:black_stained_framed_glass_pane createframed:horizontal_black_stained_framed_glass createframed:horizontal_black_stained_framed_glass_pane createframed:vertical_black_stained_framed_glass createframed:vertical_black_stained_framed_glass_pane createframed:brown_stained_framed_glass_door createframed:brown_stained_framed_glass_trapdoor createframed:brown_stained_tiled_glass createframed:brown_stained_tiled_glass_pane createframed:brown_stained_framed_glass createframed:brown_stained_framed_glass_pane createframed:horizontal_brown_stained_framed_glass createframed:horizontal_brown_stained_framed_glass_pane createframed:vertical_brown_stained_framed_glass createframed:vertical_brown_stained_framed_glass_pane createframed:red_stained_framed_glass_door createframed:red_stained_framed_glass_trapdoor createframed:red_stained_tiled_glass createframed:red_stained_tiled_glass_pane createframed:red_stained_framed_glass createframed:red_stained_framed_glass_pane createframed:horizontal_red_stained_framed_glass createframed:horizontal_red_stained_framed_glass_pane createframed:vertical_red_stained_framed_glass createframed:vertical_red_stained_framed_glass_pane createframed:orange_stained_framed_glass_door createframed:orange_stained_framed_glass_trapdoor createframed:orange_stained_tiled_glass createframed:orange_stained_tiled_glass_pane createframed:orange_stained_framed_glass createframed:orange_stained_framed_glass_pane createframed:horizontal_orange_stained_framed_glass createframed:horizontal_orange_stained_framed_glass_pane createframed:vertical_orange_stained_framed_glass createframed:vertical_orange_stained_framed_glass_pane createframed:yellow_stained_framed_glass_door createframed:yellow_stained_framed_glass_trapdoor createframed:yellow_stained_tiled_glass createframed:yellow_stained_tiled_glass_pane createframed:yellow_stained_framed_glass createframed:yellow_stained_framed_glass_pane createframed:horizontal_yellow_stained_framed_glass createframed:horizontal_yellow_stained_framed_glass_pane createframed:vertical_yellow_stained_framed_glass createframed:vertical_yellow_stained_framed_glass_pane createframed:lime_stained_framed_glass_door createframed:lime_stained_framed_glass_trapdoor createframed:lime_stained_tiled_glass createframed:lime_stained_tiled_glass_pane createframed:lime_stained_framed_glass createframed:lime_stained_framed_glass_pane createframed:horizontal_lime_stained_framed_glass createframed:horizontal_lime_stained_framed_glass_pane createframed:vertical_lime_stained_framed_glass createframed:vertical_lime_stained_framed_glass_pane createframed:green_stained_framed_glass_door createframed:green_stained_framed_glass_trapdoor createframed:green_stained_tiled_glass createframed:green_stained_tiled_glass_pane createframed:green_stained_framed_glass createframed:green_stained_framed_glass_pane createframed:horizontal_green_stained_framed_glass createframed:horizontal_green_stained_framed_glass_pane createframed:vertical_green_stained_framed_glass createframed:vertical_green_stained_framed_glass_pane createframed:cyan_stained_framed_glass_door createframed:cyan_stained_framed_glass_trapdoor createframed:cyan_stained_tiled_glass createframed:cyan_stained_tiled_glass_pane createframed:cyan_stained_framed_glass createframed:cyan_stained_framed_glass_pane createframed:horizontal_cyan_stained_framed_glass createframed:horizontal_cyan_stained_framed_glass_pane createframed:vertical_cyan_stained_framed_glass createframed:vertical_cyan_stained_framed_glass_pane createframed:light_blue_stained_framed_glass_door createframed:light_blue_stained_framed_glass_trapdoor createframed:light_blue_stained_tiled_glass createframed:light_blue_stained_tiled_glass_pane createframed:light_blue_stained_framed_glass createframed:light_blue_stained_framed_glass_pane createframed:horizontal_light_blue_stained_framed_glass createframed:horizontal_light_blue_stained_framed_glass_pane createframed:vertical_light_blue_stained_framed_glass createframed:vertical_light_blue_stained_framed_glass_pane createframed:blue_stained_framed_glass_door createframed:blue_stained_framed_glass_trapdoor createframed:blue_stained_tiled_glass createframed:blue_stained_tiled_glass_pane createframed:blue_stained_framed_glass createframed:blue_stained_framed_glass_pane createframed:horizontal_blue_stained_framed_glass createframed:horizontal_blue_stained_framed_glass_pane createframed:vertical_blue_stained_framed_glass createframed:vertical_blue_stained_framed_glass_pane createframed:purple_stained_framed_glass_door createframed:purple_stained_framed_glass_trapdoor createframed:purple_stained_tiled_glass createframed:purple_stained_tiled_glass_pane createframed:purple_stained_framed_glass createframed:purple_stained_framed_glass_pane createframed:horizontal_purple_stained_framed_glass createframed:horizontal_purple_stained_framed_glass_pane createframed:vertical_purple_stained_framed_glass createframed:vertical_purple_stained_framed_glass_pane createframed:magenta_stained_framed_glass_door createframed:magenta_stained_framed_glass_trapdoor createframed:magenta_stained_tiled_glass createframed:magenta_stained_tiled_glass_pane createframed:magenta_stained_framed_glass createframed:magenta_stained_framed_glass_pane createframed:horizontal_magenta_stained_framed_glass createframed:horizontal_magenta_stained_framed_glass_pane createframed:vertical_magenta_stained_framed_glass createframed:vertical_magenta_stained_framed_glass_pane createframed:pink_stained_framed_glass_door createframed:pink_stained_framed_glass_trapdoor createframed:pink_stained_tiled_glass createframed:pink_stained_tiled_glass_pane createframed:pink_stained_framed_glass createframed:pink_stained_framed_glass_pane createframed:horizontal_pink_stained_framed_glass createframed:horizontal_pink_stained_framed_glass_pane createframed:vertical_pink_stained_framed_glass createframed:vertical_pink_stained_framed_glass_pane - - layer.translucent = create:framed_glass create:framed_glass_pane create:framed_glass_trapdoor create:framed_glass_door create:tiled_glass create:tiled_glass_pane create:horizontal_framed_glass create:horizontal_framed_glass_pane create:vertical_framed_glass create:vertical_framed_glass_pane glass glass_pane + block.10079 = ice slime_block white_stained_glass orange_stained_glass magenta_stained_glass light_blue_stained_glass yellow_stained_glass lime_stained_glass pink_stained_glass gray_stained_glass light_gray_stained_glass cyan_stained_glass purple_stained_glass blue_stained_glass brown_stained_glass green_stained_glass red_stained_glass black_stained_glass white_stained_glass_pane orange_stained_glass_pane magenta_stained_glass_pane light_blue_stained_glass_pane yellow_stained_glass_pane lime_stained_glass_pane pink_stained_glass_pane gray_stained_glass_pane light_gray_stained_glass_pane cyan_stained_glass_pane purple_stained_glass_pane blue_stained_glass_pane brown_stained_glass_pane green_stained_glass_pane red_stained_glass_pane black_stained_glass_pane tinted_glass deeperdarker:soundproof_glass naturalist:crimson_froglass naturalist:verdant_froglass naturalist:azure_froglass naturalist:crimson_froglass_pane naturalist:verdant_froglass_pane naturalist:azure_froglass_pane createframed:white_stained_framed_glass_door createframed:white_stained_framed_glass_trapdoor createframed:white_stained_tiled_glass createframed:white_stained_tiled_glass_pane createframed:white_stained_framed_glass createframed:white_stained_framed_glass_pane createframed:horizontal_white_stained_framed_glass createframed:horizontal_white_stained_framed_glass_pane createframed:vertical_white_stained_framed_glass createframed:vertical_white_stained_framed_glass_pane createframed:light_gray_stained_framed_glass_door createframed:light_gray_stained_framed_glass_trapdoor createframed:light_gray_stained_tiled_glass createframed:light_gray_stained_tiled_glass_pane createframed:light_gray_stained_framed_glass createframed:light_gray_stained_framed_glass_pane createframed:horizontal_light_gray_stained_framed_glass createframed:horizontal_light_gray_stained_framed_glass_pane createframed:vertical_light_gray_stained_framed_glass createframed:vertical_light_gray_stained_framed_glass_pane createframed:gray_stained_framed_glass_door createframed:gray_stained_framed_glass_trapdoor createframed:gray_stained_tiled_glass createframed:gray_stained_tiled_glass_pane createframed:gray_stained_framed_glass createframed:gray_stained_framed_glass_pane createframed:horizontal_gray_stained_framed_glass createframed:horizontal_gray_stained_framed_glass_pane createframed:vertical_gray_stained_framed_glass createframed:vertical_gray_stained_framed_glass_pane createframed:black_stained_framed_glass_door createframed:black_stained_framed_glass_trapdoor createframed:black_stained_tiled_glass createframed:black_stained_tiled_glass_pane createframed:black_stained_framed_glass createframed:black_stained_framed_glass_pane createframed:horizontal_black_stained_framed_glass createframed:horizontal_black_stained_framed_glass_pane createframed:vertical_black_stained_framed_glass createframed:vertical_black_stained_framed_glass_pane createframed:brown_stained_framed_glass_door createframed:brown_stained_framed_glass_trapdoor createframed:brown_stained_tiled_glass createframed:brown_stained_tiled_glass_pane createframed:brown_stained_framed_glass createframed:brown_stained_framed_glass_pane createframed:horizontal_brown_stained_framed_glass createframed:horizontal_brown_stained_framed_glass_pane createframed:vertical_brown_stained_framed_glass createframed:vertical_brown_stained_framed_glass_pane createframed:red_stained_framed_glass_door createframed:red_stained_framed_glass_trapdoor createframed:red_stained_tiled_glass createframed:red_stained_tiled_glass_pane createframed:red_stained_framed_glass createframed:red_stained_framed_glass_pane createframed:horizontal_red_stained_framed_glass createframed:horizontal_red_stained_framed_glass_pane createframed:vertical_red_stained_framed_glass createframed:vertical_red_stained_framed_glass_pane createframed:orange_stained_framed_glass_door createframed:orange_stained_framed_glass_trapdoor createframed:orange_stained_tiled_glass createframed:orange_stained_tiled_glass_pane createframed:orange_stained_framed_glass createframed:orange_stained_framed_glass_pane createframed:horizontal_orange_stained_framed_glass createframed:horizontal_orange_stained_framed_glass_pane createframed:vertical_orange_stained_framed_glass createframed:vertical_orange_stained_framed_glass_pane createframed:yellow_stained_framed_glass_door createframed:yellow_stained_framed_glass_trapdoor createframed:yellow_stained_tiled_glass createframed:yellow_stained_tiled_glass_pane createframed:yellow_stained_framed_glass createframed:yellow_stained_framed_glass_pane createframed:horizontal_yellow_stained_framed_glass createframed:horizontal_yellow_stained_framed_glass_pane createframed:vertical_yellow_stained_framed_glass createframed:vertical_yellow_stained_framed_glass_pane createframed:lime_stained_framed_glass_door createframed:lime_stained_framed_glass_trapdoor createframed:lime_stained_tiled_glass createframed:lime_stained_tiled_glass_pane createframed:lime_stained_framed_glass createframed:lime_stained_framed_glass_pane createframed:horizontal_lime_stained_framed_glass createframed:horizontal_lime_stained_framed_glass_pane createframed:vertical_lime_stained_framed_glass createframed:vertical_lime_stained_framed_glass_pane createframed:green_stained_framed_glass_door createframed:green_stained_framed_glass_trapdoor createframed:green_stained_tiled_glass createframed:green_stained_tiled_glass_pane createframed:green_stained_framed_glass createframed:green_stained_framed_glass_pane createframed:horizontal_green_stained_framed_glass createframed:horizontal_green_stained_framed_glass_pane createframed:vertical_green_stained_framed_glass createframed:vertical_green_stained_framed_glass_pane createframed:cyan_stained_framed_glass_door createframed:cyan_stained_framed_glass_trapdoor createframed:cyan_stained_tiled_glass createframed:cyan_stained_tiled_glass_pane createframed:cyan_stained_framed_glass createframed:cyan_stained_framed_glass_pane createframed:horizontal_cyan_stained_framed_glass createframed:horizontal_cyan_stained_framed_glass_pane createframed:vertical_cyan_stained_framed_glass createframed:vertical_cyan_stained_framed_glass_pane createframed:light_blue_stained_framed_glass_door createframed:light_blue_stained_framed_glass_trapdoor createframed:light_blue_stained_tiled_glass createframed:light_blue_stained_tiled_glass_pane createframed:light_blue_stained_framed_glass createframed:light_blue_stained_framed_glass_pane createframed:horizontal_light_blue_stained_framed_glass createframed:horizontal_light_blue_stained_framed_glass_pane createframed:vertical_light_blue_stained_framed_glass createframed:vertical_light_blue_stained_framed_glass_pane createframed:blue_stained_framed_glass_door createframed:blue_stained_framed_glass_trapdoor createframed:blue_stained_tiled_glass createframed:blue_stained_tiled_glass_pane createframed:blue_stained_framed_glass createframed:blue_stained_framed_glass_pane createframed:horizontal_blue_stained_framed_glass createframed:horizontal_blue_stained_framed_glass_pane createframed:vertical_blue_stained_framed_glass createframed:vertical_blue_stained_framed_glass_pane createframed:purple_stained_framed_glass_door createframed:purple_stained_framed_glass_trapdoor createframed:purple_stained_tiled_glass createframed:purple_stained_tiled_glass_pane createframed:purple_stained_framed_glass createframed:purple_stained_framed_glass_pane createframed:horizontal_purple_stained_framed_glass createframed:horizontal_purple_stained_framed_glass_pane createframed:vertical_purple_stained_framed_glass createframed:vertical_purple_stained_framed_glass_pane createframed:magenta_stained_framed_glass_door createframed:magenta_stained_framed_glass_trapdoor createframed:magenta_stained_tiled_glass createframed:magenta_stained_tiled_glass_pane createframed:magenta_stained_framed_glass createframed:magenta_stained_framed_glass_pane createframed:horizontal_magenta_stained_framed_glass createframed:horizontal_magenta_stained_framed_glass_pane createframed:vertical_magenta_stained_framed_glass createframed:vertical_magenta_stained_framed_glass_pane createframed:pink_stained_framed_glass_door createframed:pink_stained_framed_glass_trapdoor createframed:pink_stained_tiled_glass createframed:pink_stained_tiled_glass_pane createframed:pink_stained_framed_glass createframed:pink_stained_framed_glass_pane createframed:horizontal_pink_stained_framed_glass createframed:horizontal_pink_stained_framed_glass_pane createframed:vertical_pink_stained_framed_glass createframed:vertical_pink_stained_framed_glass_pane # EMMISIVE (LIKE GLOWSTONE) block.10089 = ochre_froglight verdant_froglight pearlescent_froglight glowstone shroomlight torch wall_torch redstone_torch redstone_wall_torch jack_o_lantern redstone_lamp lantern sea_lantern soul_lantern soul_torch soul_wall_torch cataclysm:void_lantern_block deeperdarker:sculk_gleam From 0a0eeda7fb7440159b2ee1b8cbf0faba4723ecad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 14 Dec 2024 13:02:30 -0600 Subject: [PATCH 033/147] Version 9.1a --- README.md | 2 +- shaders/common/final_fragment.glsl | 4 ++-- shaders/common/skybasic_fragment.glsl | 3 ++- shaders/lang/en_US.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- 8 files changed, 10 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 4330eede..728dcc9f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp - Code High performance Minecraft shader (Java). -## Version: 9.1 +## Version: 9.1a ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/common/final_fragment.glsl b/shaders/common/final_fragment.glsl index d51c4641..6b35fb9a 100644 --- a/shaders/common/final_fragment.glsl +++ b/shaders/common/final_fragment.glsl @@ -142,9 +142,9 @@ void main() { block_color = vec3(0.5); } - gl_FragColor = vec4(block_color, 1.0); + gl_FragData[0] = vec4(block_color, 1.0); #else - gl_FragColor = vec4(block_color, 1.0); + gl_FragData[0] = vec4(block_color, 1.0); #endif } \ No newline at end of file diff --git a/shaders/common/skybasic_fragment.glsl b/shaders/common/skybasic_fragment.glsl index 815da653..f70dd866 100644 --- a/shaders/common/skybasic_fragment.glsl +++ b/shaders/common/skybasic_fragment.glsl @@ -71,7 +71,8 @@ void main() { (vec4(gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), gl_FragCoord.z, 1.0) * 2.0 - 1.0); vec3 nfragpos = normalize(fragpos.xyz); float n_u = clamp(dot(nfragpos, up_vec) + dither, 0.0, 1.0); - vec4 background_color = vec4(mix(low_sky_color, hi_sky_color, sqrt(n_u)), 1.0); + vec4 background_color = vec4(mix(low_sky_color, hi_sky_color, smoothstep(0.0, 1.0, pow(n_u, 0.333))), 1.0); + background_color.rgb = xyz_to_rgb(background_color.rgb); #else // Toma el color puro del bloque diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 6db61aab..e5128406 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -16,7 +16,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.1 +value.ACERCADE.0=v.9.1a #Options ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index b672884c..2829a230 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -16,7 +16,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.1 +value.ACERCADE.0=v.9.1a #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 26e5ba3c..f86b5a55 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -16,7 +16,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.1 +value.ACERCADE.0=v.9.1a #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index c1c90baa..9fecf13c 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -16,7 +16,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.1 +value.ACERCADE.0=v.9.1a #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 2ace907a..48444c93 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -16,7 +16,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.1 +value.ACERCADE.0=v.9.1a #Options ############################# From 6ab88ed3b5d6532aebc314aa74cc774d0e627190 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sun, 15 Dec 2024 18:00:58 -0600 Subject: [PATCH 034/147] Black blob fix test --- shaders/common/composite2_fragment.glsl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/shaders/common/composite2_fragment.glsl b/shaders/common/composite2_fragment.glsl index 1e21a0cd..ab7e2e40 100644 --- a/shaders/common/composite2_fragment.glsl +++ b/shaders/common/composite2_fragment.glsl @@ -97,6 +97,9 @@ void main() { block_color.rgb = fast_taa(block_color.rgb, texcoord_past); #endif + // Black splat fix test + block_color = clamp(block_color, vec4(0.0), vec4(100.0)); + /* DRAWBUFFERS:13 */ gl_FragData[0] = block_color; // colortex1 gl_FragData[1] = block_color; // To TAA averages From f60dc864793b816b9e751ecc664fde8d86924065 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 16 Dec 2024 22:35:15 -0600 Subject: [PATCH 035/147] Version 9.1b --- README.md | 2 +- shaders/lang/en_US.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 728dcc9f..c817b720 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp - Code High performance Minecraft shader (Java). -## Version: 9.1a +## Version: 9.1b ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index e5128406..41daf170 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -16,7 +16,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.1a +value.ACERCADE.0=v.9.1b #Options ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 2829a230..daf4e47f 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -16,7 +16,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.1a +value.ACERCADE.0=v.9.1b #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index f86b5a55..20ecc6f3 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -16,7 +16,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.1a +value.ACERCADE.0=v.9.1b #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 9fecf13c..35b695ed 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -16,7 +16,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.1a +value.ACERCADE.0=v.9.1b #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 48444c93..009e88c5 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -16,7 +16,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.1a +value.ACERCADE.0=v.9.1b #Options ############################# From bbd5a1276e9c9802ad201002a3a4dc36f169b0a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 18 Jan 2025 03:05:40 -0600 Subject: [PATCH 036/147] Version 9.1c --- README.md | 2 +- shaders/common/composite_fragment.glsl | 2 +- shaders/lang/en_US.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index c817b720..681d5698 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp - Code High performance Minecraft shader (Java). -## Version: 9.1b +## Version: 9.1c ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index b069e8eb..39aa72ba 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -107,7 +107,7 @@ void main() { // Underwater fog if(isEyeInWater == 1) { - float water_absorption = -pow((-linear_d + 1.0), (2.0 + (WATER_ABSORPTION * 4.0))) + 1.0; + float water_absorption = clamp(-pow((-linear_d + 1.0), (2.0 + (WATER_ABSORPTION * 4.0))) + 1.0, 0.0, 1.0); block_color.rgb = mix(block_color.rgb, WATER_COLOR * direct_light_color * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), water_absorption); diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 41daf170..f9c8bfb6 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -16,7 +16,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.1b +value.ACERCADE.0=v.9.1c #Options ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index daf4e47f..919d59f2 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -16,7 +16,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.1b +value.ACERCADE.0=v.9.1c #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 20ecc6f3..e18f71a7 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -16,7 +16,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.1b +value.ACERCADE.0=v.9.1c #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 35b695ed..19594397 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -16,7 +16,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.1b +value.ACERCADE.0=v.9.1c #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 009e88c5..e9883d08 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -16,7 +16,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.1b +value.ACERCADE.0=v.9.1c #Options ############################# From 3c82258566d4c77a1094b2027a8c06696d98926a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 18 Jan 2025 13:36:16 -0600 Subject: [PATCH 037/147] Version 9.1c --- shaders/lib/config.alternate.glsl | 323 ++++++++++++++++++++++++++++++ 1 file changed, 323 insertions(+) create mode 100644 shaders/lib/config.alternate.glsl diff --git a/shaders/lib/config.alternate.glsl b/shaders/lib/config.alternate.glsl new file mode 100644 index 00000000..9510abfb --- /dev/null +++ b/shaders/lib/config.alternate.glsl @@ -0,0 +1,323 @@ +/* MakeUp - config.glsl +Config variables + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +// Useful entities +#define ENTITY_SMALLGRASS 10031.0 // Normal grass like entities +#define ENTITY_LOWERGRASS 10175.0 // Lower half only +#define ENTITY_UPPERGRASS 10176.0 // Upper half only +#define ENTITY_SMALLENTS 10059.0 // Crops like entities +#define ENTITY_SMALLENTS_NW 10032.0 // No waveable small ents +#define ENTITY_LEAVES 10018.0 // Leaves +#define ENTITY_VINES 10106.0 // Vines +#define ENTITY_EMMISIVE 10089.0 // Emissors +#define ENTITY_S_EMMISIVE 10090.0 // Emissors +#define ENTITY_F_EMMISIVE 10213.0 // Fake emissors +#define ENTITY_WATER 10008.0 // Water +#define ENTITY_PORTAL 10090.0 // Portal +#define ENTITY_STAINED 10079.0 // Glass +#define ENTITY_METAL 10400.0 // Metal-like glossy blocks +#define ENTITY_SAND 10410.0 // Sand-like glossy blocks +#define ENTITY_FABRIC 10440.0 // Fabric-like glossy blocks + +// Other constants +#define ZENITH_SKY_RAIN_COLOR vec3(.7, .85, 1.0) +#define HORIZON_SKY_RAIN_COLOR vec3(0.35 , 0.425, 0.5) + +// Options +#define REFLECTION_SLIDER 2 // [0 1 2] Reflection quality. - Flipped image: Inaccurate but quick reflection. - Raymarching: Raytraced Screen Space Reflection. + +#if REFLECTION_SLIDER == 0 + #define REFLECTION 0 + #define SSR_TYPE 0 + #define REFLEX_INDEX 0.45 +#elif REFLECTION_SLIDER == 1 + #define REFLECTION 1 + #define SSR_TYPE 0 + #define REFLEX_INDEX 0.7 +#elif REFLECTION_SLIDER == 2 + #define REFLECTION 1 + #define SSR_TYPE 1 + #define REFLEX_INDEX 0.7 +#endif + +#define FOG_ACTIVE // Toggle fog +#define NETHER_FOG_DISTANCE 0 // [0 1] // Sets Nether fog distance to half of the render distance (maximum of 96 blocks) +#define ACERCADE 0 // [0] +#define WAVING 1 // [0 1] Makes objects like leaves or grass move in the wind +#define TINTED_WATER 1 // [0 1] Use the resource pack color for water. +#define REFRACTION 1 // [0 1] Activate refractions. +// #define DOF // Enables depth of field (high performance cost). +#define DOF_STRENGTH 0.09 // [0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13] Depth of field strength. +#define AO 1 // [0 1] Turn on for enhanced ambient occlusion (medium performance cost). +#define AOSTEPS 4 // [4 5 6 7 8 9 10 11] How many samples are taken for AO (high performance cost). +#define AO_STRENGTH 0.70 // [0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.66 0.70 0.75 0.80 0.85] Ambient occlusion strength (strength NOT affect performance). +#define AA_TYPE 2 // [0 1 2 3] No: Disable antialiasing (not recommended). Denoise only: Supersampling is only used to eliminate noise. TAA: Enable antialiasing (Recommended). Sharp TAA: A subtle sharpening effect is used on the TAA. +//#define MOTION_BLUR // Turn on motion blur +#define MOTION_BLUR_STRENGTH 1.0 // [0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0] Set Motion blur strength. Lower framerate -> Lower strength and vice versa is recommended. +#define MOTION_BLUR_SAMPLES 4 // [3 4 5 6 7 8] Motion blur samples +#define SUN_REFLECTION 1 // [0 1] Enable sun (or moon) reflection on water and glass + +#define SHADOW_TYPE 1 // [0 1] Sets the shadow type +#define SHADOW_BLUR 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] Shadow blur intensity +// #define COLORED_SHADOW // Attempts to tint the shadow of translucent objects, as well as the associated volumetric light (if active). +#define WATER_ABSORPTION 0.10 // [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] Sets how much light the water absorbs. Low levels make the water more transparent. High levels make it more opaque. +#define COLOR_SCHEME 7 // [0 1 2 3 4 5 6 7 99] Ethereal: Old default theme. New shoka: Reinterpretation of a classic. Shoka: The classic. Legacy: Very old default. Captain: A cold preset of stylish colors. Psycodelic: Remaster of old vivid scheme. Cocoa: Warm theme. Testigo: Fantasy and cute scheme. Custom: Choose your colors in advanced options. +#define WATER_TEXTURE 1 // [0 1] Enable or disable resource pack water texture. It does not work properly in 1.12. In that case the default value is recommended. +#define AVOID_DARK_LEVEL 0.030 // [0.000 0.005 0.010 0.015 0.020 0.025 0.030 0.035 0.040 0.045 0.050 0.055 0.060] Minimal omni light intensity in caves. +#define NIGHT_BRIGHT 0.60 // [0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70] Adjusts the brightness of the night light in exteriors. +#define V_CLOUDS 1 // [0 1 2] Volumetric static: The clouds move, but they keep their shape. Volumetric dynamic: Clouds change shape over time, a different cloud landscape every time (medium performance hit). Vanilla: Original vanilla clouds. +#define CLOUD_VOL_STYLE 1 // [0 1] Set the volumetric cloud style. +#define CLOUD_REFLECTION // Set off-screen volumetric clouds reflection (volumetric clouds must be active). +#define END_CLOUDS // Activates drawing of clouds in the end (only works if volumetric clouds are active) +#define BLACK_ENTITY_FIX 0 // [0 1] Removes black entity bug in old video drivers (activate ONLY if you have problems with black entities) +#define BLOOM // Enable or disable bloom effect +#define BLOOM_SAMPLES 4.0 // [4.0 5.0 6.0 7.0 8.0 9.0 10.0] Bloom sample pairs. +#define CHROMA_ABER 0 // [0 1] Enable chroma aberration. +#define CHROMA_ABER_STRENGTH 0.04 // [0.04 0.05 0.06] Chroma aberration strength. +#define VOL_LIGHT 1 // [0 1 2] Depth based: Turn on depth based godrays, they are a bit slow, but can work better than volumetric light for very short shadow distances. Volumetric: It activates the volumetric light, more accurate and faster, but it needs the shadows enabled to work. +// #define VANILLA_WATER // Establishes the appearance of water as vanilla. +#define WATER_COLOR_SOURCE 0 // [0 1] Select the water color source. It does not work properly in 1.12. In that case the default value is recommended. +#define WATER_TURBULENCE 7.0 // [7.0 1.75 0.9 0.5] Set the water waves strength. +#define FOG_ADJUST 2.0 // [10.0 8.0 4.0 2.0 1.0] Sets the fog strength +// #define DEBUG_MODE // Set debug mode. +#define BLOCKLIGHT_TEMP 4 // [0 1 2 3 4] Set blocklight temperature +#define MATERIAL_GLOSS // A very subtle effect that adds some ability to reflect direct light on some blocks. It is most noticeable on metals and luminous objects. +#define DYN_HAND_LIGHT // Toggle the fake dynamic light + +// Custom colors +#define LIGHT_SUNSET_COLOR_R 0.71 // [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.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] +#define LIGHT_SUNSET_COLOR_G 0.44 // [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.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] +#define LIGHT_SUNSET_COLOR_B 0.29 // [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.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] + +#define LIGHT_DAY_COLOR_R 0.89 // [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.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] +#define LIGHT_DAY_COLOR_G 0.89 // [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.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] +#define LIGHT_DAY_COLOR_B 0.84 // [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.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] + +#define LIGHT_NIGHT_COLOR_R 0.048 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define LIGHT_NIGHT_COLOR_G 0.052 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define LIGHT_NIGHT_COLOR_B 0.061 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] + +#define ZENITH_SUNSET_COLOR_R 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 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] +#define ZENITH_SUNSET_COLOR_G 0.18 // [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.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] +#define ZENITH_SUNSET_COLOR_B 0.27 // [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.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] + +#define ZENITH_DAY_COLOR_R 0.06 // [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.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] +#define ZENITH_DAY_COLOR_G 0.26 // [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.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] +#define ZENITH_DAY_COLOR_B 0.44 // [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.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] + +#define ZENITH_NIGHT_COLOR_R 0.004 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define ZENITH_NIGHT_COLOR_G 0.01 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define ZENITH_NIGHT_COLOR_B 0.019 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] + +#define HORIZON_SUNSET_COLOR_R 0.71 // [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.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] +#define HORIZON_SUNSET_COLOR_G 0.55 // [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.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] +#define HORIZON_SUNSET_COLOR_B 0.42 // [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.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] + +#define HORIZON_DAY_COLOR_R 0.65 // [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.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] +#define HORIZON_DAY_COLOR_G 0.91 // [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.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] +#define HORIZON_DAY_COLOR_B 1.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 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] + +#define HORIZON_NIGHT_COLOR_R 0.025 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define HORIZON_NIGHT_COLOR_G 0.035 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define HORIZON_NIGHT_COLOR_B 0.05 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] + +#define WATER_COLOR_R 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.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] +#define WATER_COLOR_G 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.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] +#define WATER_COLOR_B 0.44 // [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.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] + +#define NV_COLOR_R 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] +#define NV_COLOR_G 0.8 // [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 NV_COLOR_B 1.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 OMNI_TINT_CUSTOM 0.65 // [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.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] + +#ifdef FOG_ACTIVE + // Don't remove +#endif + +#if NETHER_FOG_DISTANCE == 1 + #define NETHER_SIGHT min(far / 2, 96) +#else + #define NETHER_SIGHT far +#endif + +// Reflection parameters +#define RAYMARCH_STEPS 10 + +// Cloud parameters +#if CLOUD_VOL_STYLE == 1 + #define CLOUD_PLANE_SUP 380.0 + #define CLOUD_PLANE_CENTER 335.0 + #define CLOUD_PLANE 319.0 +#else + #define CLOUD_PLANE_SUP 590.0 + #define CLOUD_PLANE_CENTER 375.0 + #define CLOUD_PLANE 319.0 +#endif + +#define CLOUD_STEPS_AVG 10 // [7 8 9 10 11 12 13 14 15 16] Samples per pixel (high performance impact). +#define CLOUD_SPEED 0 // [0 1 2] Change the speed of clouds for demo purposes. + +#if CLOUD_VOL_STYLE == 1 + #if CLOUD_SPEED == 0 + #define CLOUD_HI_FACTOR 0.001388888888888889 + #define CLOUD_LOW_FACTOR 0.0002777777777777778 + #elif CLOUD_SPEED == 1 + #define CLOUD_HI_FACTOR 0.01388888888888889 + #define CLOUD_LOW_FACTOR 0.002777777777777778 + #elif CLOUD_SPEED == 2 + #define CLOUD_HI_FACTOR 0.1388888888888889 + #define CLOUD_LOW_FACTOR 0.02777777777777778 + #endif +#else + #if CLOUD_SPEED == 0 + #define CLOUD_HI_FACTOR 0.0016666666666666666 + #define CLOUD_LOW_FACTOR 0.0002777777777777778 + #elif CLOUD_SPEED == 1 + #define CLOUD_HI_FACTOR 0.016666666666666666 + #define CLOUD_LOW_FACTOR 0.002777777777777778 + #elif CLOUD_SPEED == 2 + #define CLOUD_HI_FACTOR 0.16666666666666666 + #define CLOUD_LOW_FACTOR 0.02777777777777778 + #endif +#endif + +// Godrays +#define GODRAY_STEPS 6 +#define CHEAP_GODRAY_SAMPLES 4 + +// Color blindness +// #define COLOR_BLINDNESS // Enable color blindness correction +#define COLOR_BLIND_MODE 0 // [0 1 2] Set color blindness type + +// Sun rotation angle +const float sunPathRotation = -25.0; // [-40.0 -35.0 -30.0 -25.0 -20.0 -15.0 -10.0 -5.0 0.0 5.0 10.0 15.0 20.0 25.0 30.0 35.0 40.0] + +#define SHADOW_DISTANCE_SLIDER 1 // [0 1 2] +#define SHADOW_QTY_SLIDER 2 // [1 2 3] + +#define SHADOW_CASTING // Enable or disable shadows. Configure quality in advanced options. + +#ifdef SHADOW_CASTING + // Shadow parameters + const float shadowIntervalSize = 3.0; + + const bool shadowtex0Mipmap = false; + const bool shadowtex1Mipmap = false; + const bool shadowColor0Mipmap = false; + const bool shadowColor1Mipmap = false; + + const bool shadowtex0Clear = false; + const bool shadowtex1Clear = false; + const bool shadowcolor0Clear = false; + const bool shadowcolor1Clear = false; + + #ifndef NO_SHADOWS + #if SHADOW_DISTANCE_SLIDER == 0 + #if SHADOW_QTY_SLIDER == 1 + #define SHADOW_LIMIT 75.0 + const int shadowMapResolution = 300; + const float shadowDistance = 75.0; + #define SHADOW_FIX_FACTOR 0.3 + #define SHADOW_DIST 0.75 + + #elif SHADOW_QTY_SLIDER == 2 + #define SHADOW_LIMIT 75.0 + const int shadowMapResolution = 600; + const float shadowDistance = 75.0; + #define SHADOW_FIX_FACTOR 0.15 + #define SHADOW_DIST 0.81 + + #elif SHADOW_QTY_SLIDER == 3 + #define SHADOW_LIMIT 75.0 + const int shadowMapResolution = 1200; + const float shadowDistance = 75.0; + #define SHADOW_FIX_FACTOR 0.05 + #define SHADOW_DIST 0.81 + + #endif + + #elif SHADOW_DISTANCE_SLIDER == 1 + #if SHADOW_QTY_SLIDER == 1 + #define SHADOW_LIMIT 105.0 + const int shadowMapResolution = 420; + const float shadowDistance = 105.0; + #define SHADOW_FIX_FACTOR 0.28 + #define SHADOW_DIST 0.75 + + #elif SHADOW_QTY_SLIDER == 2 + #define SHADOW_LIMIT 105.0 + const int shadowMapResolution = 840; + const float shadowDistance = 105.0; + #define SHADOW_FIX_FACTOR 0.07 + #define SHADOW_DIST 0.83 + + #elif SHADOW_QTY_SLIDER == 3 + #define SHADOW_LIMIT 105.0 + const int shadowMapResolution = 1680; + const float shadowDistance = 105.0; + #define SHADOW_FIX_FACTOR 0.03 + #define SHADOW_DIST 0.83 + + #endif + + #elif SHADOW_DISTANCE_SLIDER == 2 + #if SHADOW_QTY_SLIDER == 1 + #define SHADOW_LIMIT 255.0 + const int shadowMapResolution = 1020; + const float shadowDistance = 255.0; + #define SHADOW_FIX_FACTOR 0.12 + #define SHADOW_DIST 0.8 + + #elif SHADOW_QTY_SLIDER == 2 + #define SHADOW_LIMIT 255.0 + const int shadowMapResolution = 2040; + const float shadowDistance = 255.0; + #define SHADOW_FIX_FACTOR 0.03 + #define SHADOW_DIST 0.85 + + #elif SHADOW_QTY_SLIDER == 3 + #define SHADOW_LIMIT 255.0 + const int shadowMapResolution = 4080; + const float shadowDistance = 255.0; + #define SHADOW_FIX_FACTOR 0.015 + #define SHADOW_DIST 0.87 + + #endif + #endif + + #if VOL_LIGHT == 2 + const float shadowDistanceRenderMul = -1.0; + #else + const float shadowDistanceRenderMul = 1.0; + #endif + + const bool shadowHardwareFiltering = true; + const bool shadowtex1Nearest = false; + #endif + +#else + #define SHADOW_DIST 0.0 + #define SHADOW_RES 0 + const int shadowMapResolution = 100; + const float shadowDistance = 60.0; +#endif + +// Redefined constants +#if AO == 0 + const float ambientOcclusionLevel = 0.7; +#else + const float ambientOcclusionLevel = 0.0; +#endif + +const float eyeBrightnessHalflife = 6.0; +const float centerDepthHalflife = 0.66; + +// DH exclusive +#if defined DISTANT_HORIZONS + #define TRANSITION_DH_SUP 0.05 + #define TRANSITION_DH_INF 0.90 +#endif \ No newline at end of file From f8e3c181f7db60dc87bf21a612d0bce58f90c9a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sun, 19 Jan 2025 14:02:06 -0600 Subject: [PATCH 038/147] Version 9.1c --- shaders/lib/config.alternate.glsl | 2 +- shaders/shaders.alternate.properties | 210 +++++++++++++++++++++++++++ 2 files changed, 211 insertions(+), 1 deletion(-) create mode 100644 shaders/shaders.alternate.properties diff --git a/shaders/lib/config.alternate.glsl b/shaders/lib/config.alternate.glsl index 9510abfb..87ed4e65 100644 --- a/shaders/lib/config.alternate.glsl +++ b/shaders/lib/config.alternate.glsl @@ -63,7 +63,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define SHADOW_TYPE 1 // [0 1] Sets the shadow type #define SHADOW_BLUR 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] Shadow blur intensity // #define COLORED_SHADOW // Attempts to tint the shadow of translucent objects, as well as the associated volumetric light (if active). -#define WATER_ABSORPTION 0.10 // [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] Sets how much light the water absorbs. Low levels make the water more transparent. High levels make it more opaque. +#define WATER_ABSORPTION 0.50 // [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] Sets how much light the water absorbs. Low levels make the water more transparent. High levels make it more opaque. #define COLOR_SCHEME 7 // [0 1 2 3 4 5 6 7 99] Ethereal: Old default theme. New shoka: Reinterpretation of a classic. Shoka: The classic. Legacy: Very old default. Captain: A cold preset of stylish colors. Psycodelic: Remaster of old vivid scheme. Cocoa: Warm theme. Testigo: Fantasy and cute scheme. Custom: Choose your colors in advanced options. #define WATER_TEXTURE 1 // [0 1] Enable or disable resource pack water texture. It does not work properly in 1.12. In that case the default value is recommended. #define AVOID_DARK_LEVEL 0.030 // [0.000 0.005 0.010 0.015 0.020 0.025 0.030 0.035 0.040 0.045 0.050 0.055 0.060] Minimal omni light intensity in caves. diff --git a/shaders/shaders.alternate.properties b/shaders/shaders.alternate.properties new file mode 100644 index 00000000..ae9fd73a --- /dev/null +++ b/shaders/shaders.alternate.properties @@ -0,0 +1,210 @@ +# MakeUp - shader.properties + +#Profiles +profile.no_effects= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=0 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=0 SUN_REFLECTION=0 WAVING=0 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=1 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=7 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS +profile.shadowless_low= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=1 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=7 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS +profile.shadowless_medium= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=1 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=7 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.shadowless_high= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=1 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=7 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=1 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=7 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=1 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=7 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=1 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=7 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.extreme= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=1 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=7 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=1 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=7 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS + +# Default forced options +vignette = false +separateAo = false +oldLighting = false +dynamicHandLight = true +oldHandLight = false +underwaterOverlay = false +sun = true +moon = true +frustum.culling = true +shadow.culling = true +particles.before.deferred = true + +#if V_CLOUDS > 0 + clouds = off +#else + clouds = fancy +#endif + +texture.gbuffers.noisetex = textures/water_256_RG_8bit.png + +#if CLOUD_VOL_STYLE == 0 + texture.gbuffers.gaux2 = textures/clouds_natural_512_R_8bit.png + texture.deferred.gaux2 = textures/clouds_natural_512_R_8bit.png +#else + texture.gbuffers.gaux2 = textures/clouds_blocky_512_R_8bit.png + texture.deferred.gaux2 = textures/clouds_blocky_512_R_8bit.png +#endif + +# texture.deferred.colortex0 = textures/bluenoise_64.png + +program.shadow.enabled=SHADOW_CASTING +program.world0/shadow.enabled=SHADOW_CASTING +program.world1/shadow.enabled=SHADOW_CASTING +program.world-1/shadow.enabled=SHADOW_CASTING + +# Config main screen +screen.columns = 3 +screen = ACERCADE WAVING COLOR_SCHEME BLOOM REFLECTION_SLIDER AO SUN_REFLECTION SHADOW_CASTING V_CLOUDS CLOUD_REFLECTION COLORED_SHADOW AA_TYPE REFRACTION VOL_LIGHT DOF MATERIAL_GLOSS CHROMA_ABER MOTION_BLUR [ADVANCED_SCREEN] + +# Sub-screens: +screen.ADVANCED_SCREEN.columns=3 +screen.ADVANCED_SCREEN = [COMPATIBILITY_SCREEN] [ACCESIBILITY_SCREEN] [CUSTOM_COLORS_SCREEN] [SHADOWS_SCREEN] [DOF_SCREEN] [AO_SCREEN] [WATER_SCREEN] [POST_SCREEN] [CLOUDS_SCREEN] [LIGHT_SCREEN] [FOG_SCREEN] [MOTION_BLUR_SCREEN] + +screen.COMPATIBILITY_SCREEN = USE_BASIC_SH BLACK_ENTITY_FIX DEBUG_MODE +screen.SHADOWS_SCREEN = SHADOW_TYPE SHADOW_BLUR SHADOW_DISTANCE_SLIDER SHADOW_QTY_SLIDER +screen.DOF_SCREEN = DOF_STRENGTH +screen.AO_SCREEN = AOSTEPS AO_STRENGTH +screen.WATER_SCREEN = WATER_ABSORPTION WATER_TEXTURE VANILLA_WATER WATER_COLOR_SOURCE WATER_TURBULENCE +screen.POST_SCREEN = BLOOM_SAMPLES CHROMA_ABER_STRENGTH +screen.CLOUDS_SCREEN = CLOUD_SPEED CLOUD_STEPS_AVG CLOUD_VOL_STYLE END_CLOUDS sunPathRotation +screen.LIGHT_SCREEN = AVOID_DARK_LEVEL NIGHT_BRIGHT BLOCKLIGHT_TEMP DYN_HAND_LIGHT +screen.FOG_SCREEN = FOG_ACTIVE FOG_ADJUST NETHER_FOG_DISTANCE +screen.MOTION_BLUR_SCREEN = MOTION_BLUR_STRENGTH MOTION_BLUR_SAMPLES +screen.ACCESIBILITY_SCREEN = COLOR_BLINDNESS COLOR_BLIND_MODE + +screen.CUSTOM_COLORS_DAY.columns=3 +screen.CUSTOM_COLORS_DAY = LIGHT_DAY_COLOR_R LIGHT_DAY_COLOR_G LIGHT_DAY_COLOR_B ZENITH_DAY_COLOR_R ZENITH_DAY_COLOR_G ZENITH_DAY_COLOR_B HORIZON_DAY_COLOR_R HORIZON_DAY_COLOR_G HORIZON_DAY_COLOR_B + +screen.CUSTOM_COLORS_SUNSET.columns=3 +screen.CUSTOM_COLORS_SUNSET = LIGHT_SUNSET_COLOR_R LIGHT_SUNSET_COLOR_G LIGHT_SUNSET_COLOR_B ZENITH_SUNSET_COLOR_R ZENITH_SUNSET_COLOR_G ZENITH_SUNSET_COLOR_B HORIZON_SUNSET_COLOR_R HORIZON_SUNSET_COLOR_G HORIZON_SUNSET_COLOR_B + +screen.CUSTOM_COLORS_NIGHT.columns=3 +screen.CUSTOM_COLORS_NIGHT = LIGHT_NIGHT_COLOR_R LIGHT_NIGHT_COLOR_G LIGHT_NIGHT_COLOR_B ZENITH_NIGHT_COLOR_R ZENITH_NIGHT_COLOR_G ZENITH_NIGHT_COLOR_B HORIZON_NIGHT_COLOR_R HORIZON_NIGHT_COLOR_G HORIZON_NIGHT_COLOR_B + +screen.CUSTOM_COLORS_WATER.columns=3 +screen.CUSTOM_COLORS_WATER = WATER_COLOR_R WATER_COLOR_G WATER_COLOR_B + +screen.CUSTOM_COLORS_NV.columns=3 +screen.CUSTOM_COLORS_NV = NV_COLOR_R NV_COLOR_G NV_COLOR_B + +screen.CUSTOM_COLORS_SCREEN.columns=1 +screen.CUSTOM_COLORS_SCREEN = [CUSTOM_COLORS_DAY] [CUSTOM_COLORS_SUNSET] [CUSTOM_COLORS_NIGHT] [CUSTOM_COLORS_WATER] [CUSTOM_COLORS_NV] OMNI_TINT_CUSTOM + +sliders = SHADOW_DISTANCE_SLIDER SHADOW_QTY_SLIDER REFLECTION_SLIDER SHADOW_BLUR DOF_STRENGTH AOSTEPS AO_STRENGTH MOTION_BLUR_STRENGTH WATER_ABSORPTION CHROMA_ABER_STRENGTH BLOOM_SAMPLES CLOUD_STEPS_AVG sunPathRotation NIGHT_BRIGHT AVOID_DARK_LEVEL WATER_TURBULENCE FOG_ADJUST MOTION_BLUR_SAMPLES BLOCKLIGHT_TEMP LIGHT_DAY_COLOR_R LIGHT_DAY_COLOR_G LIGHT_DAY_COLOR_B ZENITH_DAY_COLOR_R ZENITH_DAY_COLOR_G ZENITH_DAY_COLOR_B HORIZON_DAY_COLOR_R HORIZON_DAY_COLOR_G HORIZON_DAY_COLOR_B LIGHT_SUNSET_COLOR_R LIGHT_SUNSET_COLOR_G LIGHT_SUNSET_COLOR_B ZENITH_SUNSET_COLOR_R ZENITH_SUNSET_COLOR_G ZENITH_SUNSET_COLOR_B HORIZON_SUNSET_COLOR_R HORIZON_SUNSET_COLOR_G HORIZON_SUNSET_COLOR_B LIGHT_NIGHT_COLOR_R LIGHT_NIGHT_COLOR_G LIGHT_NIGHT_COLOR_B ZENITH_NIGHT_COLOR_R ZENITH_NIGHT_COLOR_G ZENITH_NIGHT_COLOR_B HORIZON_NIGHT_COLOR_R HORIZON_NIGHT_COLOR_G HORIZON_NIGHT_COLOR_B WATER_COLOR_R WATER_COLOR_G WATER_COLOR_B NV_COLOR_R NV_COLOR_G NV_COLOR_B OMNI_TINT_CUSTOM + +# Custom uniforms ----- + +# Many values are precalculated to avoid their later or repetitive calculation. + +# Pixel size +uniform.float.pixel_size_x = 1.0 / viewWidth +uniform.float.pixel_size_y = 1.0 / viewHeight +uniform.float.inv_aspect_ratio = 1.0 / aspectRatio + +# Time constants +variable.float.hour_world = worldTime * 0.001 +uniform.float.day_moment = hour_world * 0.04166666666666667 + +# Day color mixer (for shadows) - This formula allows graphing the function that is calculated later. +# It allows setting values depending on the time of day. Particularly interesting are the transitions +# from day to night and vice versa, which are often used to indicate the intensity of the shadow +# (when it is produced by the moon instead of the sun), and other similar things. +# f(x) = min(−((x−.25)^2)∙20 + 1.25, 1) +# g(x) = min(−((x−.75)^2)∙50 + 3.125, 1) + +variable.float.moment_aux = day_moment - 0.25 +variable.float.moment_aux_2 = moment_aux * moment_aux +uniform.float.day_mixer = clamp(-moment_aux_2 * 20.0 + 1.25, 0.0, 1.0) + +variable.float.moment_aux_3 = day_moment - 0.75 +variable.float.moment_aux_4 = moment_aux_3 * moment_aux_3 +uniform.float.night_mixer = clamp(-moment_aux_4 * 50.0 + 3.125, 0.0, 1.0) + +# Day color mixer (for volumetric light) - "Similar to the previous case, but applied to values +# dependent on the time of day for volumetric lighting. + +variable.float.moment_aux_5 = (day_moment * 4.0) - 1.0 +variable.float.moment_aux_6 = moment_aux_5 * moment_aux_5 * moment_aux_5 * moment_aux_5 +variable.float.day_vol_mixer = clamp(((-moment_aux_6 + 1.0) * 7.0) + 1.0, 1.0, 8.0) + +variable.float.moment_aux_7 = (day_moment * 4.0) - 3.0 +variable.float.moment_aux_8 = moment_aux_7 * moment_aux_7 * moment_aux_7 * moment_aux_7 +variable.float.night_vol_mixer = clamp(((-moment_aux_8 + 1.0) * 7.0) + 1.0, 1.0, 8.0) + +uniform.float.vol_mixer = max(day_vol_mixer, night_vol_mixer) + +# Light mix - Similar to the previous cases, a value that depends on the time of day +# to adjust various different parameters. +variable.float.light_mix_a = if((worldTime >= 0 && worldTime < 12485) || worldTime >= 23515, 1.0, 0.0) +variable.float.light_mix_b = if(worldTime >= 12485 && worldTime < 13085, 1.0 - ((worldTime - 12485) * 0.0016666666666666668), 0.0) +variable.float.light_mix_c = 0.0 +variable.float.light_mix_d = if(worldTime >= 22915 && worldTime < 23515, (worldTime - 22915) * 0.0016666666666666668, 0.0) +variable.float.light_mix_e = max(light_mix_a, light_mix_b) +variable.float.light_mix_f = max(light_mix_c, light_mix_d) +uniform.float.light_mix = max(light_mix_e, light_mix_f) + +# Frame modulus +uniform.int.frame_mod = fmod(frameCounter, 10) + +# TAA OFFSET - The offset for TAA is precalculated here. +# It is based on a pentagon (repeated twice as it is a multiple of the 10-frame module.) +# The traversal goes from one vertex of the pentagon to another at the opposite end, +# so that the traversal between different points is maximized and the images vary +# as much as possible from one to the next. It helps to make the flickering of the image +# so fast that it is "absorbed" and better masked by the TAA history. + +#if AA_TYPE > -1 + # Pentagon + uniform.vec2.taa_offset = vec2((if( \ + frame_mod == 0, 0.7071067811865476, \ + frame_mod == 1, -0.5720614028176843, \ + frame_mod == 2, 0.2185080122244104, \ + frame_mod == 3, 0.21850801222441057, \ + frame_mod == 4, -0.5720614028176845, \ + frame_mod == 5, 0.7071067811865476, \ + frame_mod == 6, -0.5720614028176843, \ + frame_mod == 7, 0.2185080122244104, \ + frame_mod == 8, 0.21850801222441057, \ + frame_mod == 9, -0.5720614028176845, \ + 0.0)) * pixel_size_x, \ + (if( \ + frame_mod == 0, 0.0, \ + frame_mod == 1, 0.4156269377774535, \ + frame_mod == 2, -0.6724985119639574, \ + frame_mod == 3, 0.6724985119639574, \ + frame_mod == 4, -0.4156269377774534, \ + frame_mod == 5, 0.0, \ + frame_mod == 6, 0.4156269377774535, \ + frame_mod == 7, -0.6724985119639574, \ + frame_mod == 8, 0.6724985119639574, \ + frame_mod == 9, -0.4156269377774534, \ + 0.0)) * pixel_size_y) + + # Dither shift - When Temporal sampling is active, dithering patterns change over time, + # but not randomly. The dithering pattern remains fixed, but the assigned + # value to each point changes by adding a value defined here, so that they + # "rotate" in a controlled manner within the range of 0 to 1. + # When the sum exceeds 1.0, only the mantissa is taken. The changes are not completely random. + # They are incremental, but not by a fixed amount, but rather a fixed amount + # that was slightly altered by randomness. This only works in recent versions + # of Minecraft/Optifine. For older versions, a mechanism that depends on the + # uniform "frame_mod" is used to calculate the increment. + uniform.float.dither_shift = if( \ + frame_mod == 0, 0.0, \ + frame_mod == 1, 0.9, \ + frame_mod == 2, 0.5, \ + frame_mod == 3, 0.8, \ + frame_mod == 4, 0.3, \ + frame_mod == 5, 0.7, \ + frame_mod == 6, 0.1, \ + frame_mod == 7, 0.6, \ + frame_mod == 8, 0.4, \ + frame_mod == 9, 0.2, \ + 0.0) +#endif + +# FOV - A precalculated value related to FOV +uniform.float.fov_y_inv = 1.0 / atan(1.0 / gbufferProjection.1.1) * 0.5 + +# float horizontalFOV = atan(1.0 / gbufferProjection[0].x); +# float verticalFOV = atan(1.0 / gbufferProjection[1].y); <-- fov_y_inv + +#ifdef DISTANT_HORIZONS +dhShadow.enabled = false +blend.dh_water=SRC_ALPHA ONE_MINUS_SRC_ALPHA ONE ONE_MINUS_SRC_ALPHA +#endif \ No newline at end of file From d3bb3314169ac3128a05078b4772298c06b5c2b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 19 Apr 2025 13:53:37 -0600 Subject: [PATCH 039/147] Version 9.1d --- README.md | 2 +- shaders/block.properties | 12 +- shaders/common/shadow_fragment.glsl | 9 +- shaders/common/shadow_vertex.glsl | 6 + shaders/common/solid_blocks_fragment.glsl | 6 +- shaders/common/solid_blocks_vertex.glsl | 2 +- shaders/lang/en_US.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- shaders/lib/config.alternate.glsl | 33 +-- shaders/lib/config.glsl | 33 +-- shaders/lib/config.original.glsl | 323 ++++++++++++++++++++++ shaders/shaders.original.properties | 210 ++++++++++++++ shaders/src/light_vertex.glsl | 2 +- 16 files changed, 600 insertions(+), 48 deletions(-) create mode 100644 shaders/lib/config.original.glsl create mode 100644 shaders/shaders.original.properties diff --git a/README.md b/README.md index 681d5698..7a4cef2e 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp - Code High performance Minecraft shader (Java). -## Version: 9.1c +## Version: 9.1d ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/block.properties b/shaders/block.properties index 26138f97..32e00251 100644 --- a/shaders/block.properties +++ b/shaders/block.properties @@ -31,7 +31,10 @@ block.10090 = magma_block end_root campfire:lit=true soul_campfire:lit=true beacon betterendforge:mossy_glowshroom_hymenophore betterendforge:mossy_glowshroom_fur betterendforge:blue_vine_lantern betterendforge:blue_vine_fur betterendforge::lumecorn:shape=light_top_middle betterendforge::lumecorn:shape=light_middle betterendforge::lumecorn:shape=light_bottom betterendforge::purple_polypore betterendforge::bulb_vine:shape=bottom # FAKE EMMISORS - block.10213 = soul_fire + block.10213 = minecraft:soul_fire + + # No SHADOW FIRE + block.10214 = minecraft:fire # METAL-LIKE block.10400 = iron_block iron_trapdoor gold_block emerald_block lapis_block diamond_block copper_block exposed_copper weathered_copper oxidized_copper cut_copper exposed_cut_copper weathered_cut_copper oxidized_cut_copper cut_copper_stairs exposed_cut_copper_stairs weathered_cut_copper_stairs oxidized_cut_copper_stairs cut_copper_slab exposed_cut_copper_slab weathered_cut_copper_slab oxidized_cut_copper_slab waxed_cut_copper_slab waxed_weathered_cut_copper_slab waxed_weathered_copper waxed_exposed_copper waxed_copper_block waxed_oxidized_cut_copper_slab waxed_weathered_cut_copper_slab waxed_exposed_cut_copper_slab waxed_cuyt_copper_slab waxed_oxidized_copper waxed_cut_copper waxed_exposed_cut_copper waxed_weathered_cut_copper waxed_oxidized_cut_copper waxed_cut_copper_stairs waxed_exposed_cut_copper_stairs waxed_weathered_cut_copper_stairs waxed_oxidized_cut_copper_stairs heavy_weighted_pressure_plate light_weighted_pressure_plate iron_bars tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top tfc:metal/anvil/bismuth_bronze tfc:metal/block/bismuth_bronze tfc:metal/bars/bismuth_bronze tfc:metal/trapdoor/bismuth_bronze tfc:metal/block/bismuth_bronze_stairs tfc:block/metal/block/bismuth_bronze_slab tfc:block/metal/block/bismuth_bronze_slab_top tfc:metal/anvil/black_bronze tfc:metal/block/black_bronze tfc:metal/bars/black_bronze tfc:metal/trapdoor/black_bronze tfc:metal/block/black_bronze_stairs tfc:block/metal/block/black_bronze_slab tfc:block/metal/block/black_bronze_slab_top tfc:metal/anvil/bronze tfc:metal/block/bronze tfc:metal/bars/bronze tfc:metal/trapdoor/bronze tfc:metal/block/bronze_stairs tfc:block/metal/block/bronze_slab tfc:block/metal/block/bronze_slab_top tfc:metal/anvil/brass tfc:metal/block/brass tfc:metal/bars/brass tfc:metal/trapdoor/brass tfc:metal/block/brass_stairs tfc:block/metal/block/brass_slab tfc:block/metal/block/brass_slab_top tfc:metal/anvil/copper tfc:metal/block/copper tfc:metal/bars/copper tfc:metal/trapdoor/copper tfc:metal/block/copper_stairs tfc:block/metal/block/copper_slab tfc:block/metal/block/copper_slab_top tfc:metal/anvil/gold tfc:metal/block/gold tfc:metal/bars/gold tfc:metal/trapdoor/gold tfc:metal/block/gold_stairs tfc:block/metal/block/gold_slab tfc:block/metal/block/gold_slab_top tfc:metal/anvil/nickel tfc:metal/block/nickel tfc:metal/bars/nickel tfc:metal/trapdoor/nickel tfc:metal/block/nickel_stairs tfc:block/metal/block/nickel_slab tfc:block/metal/block/nickel_slab_top tfc:metal/anvil/rose_gold tfc:metal/block/rose_gold tfc:metal/bars/rose_gold tfc:metal/trapdoor/rose_gold tfc:metal/block/rose_gold_stairs tfc:block/metal/block/rose_gold_slab tfc:block/metal/block/rose_gold_slab_top tfc:metal/anvil/silver tfc:metal/block/silver tfc:metal/bars/silver tfc:metal/trapdoor/silver tfc:metal/block/silver_stairs tfc:block/metal/block/silver_slab tfc:block/metal/block/silver_slab_top tfc:metal/anvil/tin tfc:metal/block/tin tfc:metal/bars/tin tfc:metal/trapdoor/tin tfc:metal/block/tin_stairs tfc:block/metal/block/tin_slab tfc:block/metal/block/tin_slab_top tfc:metal/anvil/zinc tfc:metal/block/zinc tfc:metal/bars/zinc tfc:metal/trapdoor/zinc tfc:metal/block/zinc_stairs tfc:block/metal/block/zinc_slab tfc:block/metal/block/zinc_slab_top tfc:metal/anvil/sterling_silver tfc:metal/block/sterling_silver tfc:metal/bars/sterling_silver tfc:metal/trapdoor/sterling_silver tfc:metal/block/sterling_silver_stairs tfc:block/metal/block/sterling_silver_slab tfc:block/metal/block/sterling_silver_slab_top tfc:metal/anvil/wrought_iron tfc:metal/block/wrought_iron tfc:metal/bars/wrought_iron tfc:metal/trapdoor/wrought_iron tfc:metal/block/wrought_iron_stairs tfc:block/metal/block/wrought_iron_slab tfc:block/metal/block/wrought_iron_slab_top tfc:metal/anvil/cast_iron tfc:metal/block/cast_iron tfc:metal/bars/cast_iron tfc:metal/trapdoor/cast_iron tfc:metal/block/cast_iron_stairs tfc:block/metal/block/cast_iron_slab tfc:block/metal/block/cast_iron_slab_top tfc:metal/anvil/pig_iron tfc:metal/block/pig_iron tfc:metal/bars/pig_iron tfc:metal/trapdoor/pig_iron tfc:metal/block/pig_iron_stairs tfc:block/metal/block/pig_iron_slab tfc:block/metal/block/pig_iron_slab_top tfc:metal/anvil/steel tfc:metal/block/steel tfc:metal/bars/steel tfc:metal/trapdoor/steel tfc:metal/block/steel_stairs tfc:block/metal/block/steel_slab tfc:block/metal/block/steel_slab_top tfc:metal/anvil/black_steel tfc:metal/block/black_steel tfc:metal/bars/black_steel tfc:metal/trapdoor/black_steel tfc:metal/block/black_steel_stairs tfc:block/metal/block/black_steel_slab tfc:block/metal/block/black_steel_slab_top tfc:metal/anvil/blue_steel tfc:metal/block/blue_steel tfc:metal/bars/blue_steel tfc:metal/trapdoor/blue_steel tfc:metal/block/blue_steel_stairs tfc:block/metal/block/blue_steel_slab tfc:block/metal/block/blue_steel_slab_top tfc:metal/anvil/red_steel tfc:metal/block/red_steel tfc:metal/bars/red_steel tfc:metal/trapdoor/red_steel tfc:metal/block/red_steel_stairs tfc:block/metal/block/red_steel_slab tfc:block/metal/block/red_steel_slab_top tfc:metal/anvil/weak_steel tfc:metal/block/weak_steel tfc:metal/bars/weak_steel tfc:metal/trapdoor/weak_steel tfc:metal/block/weak_steel_stairs tfc:block/metal/block/weak_steel_slab tfc:block/metal/block/weak_steel_slab_top tfc:metal/anvil/weak_blue_steel tfc:metal/block/weak_blue_steel tfc:metal/bars/weak_blue_steel tfc:metal/trapdoor/weak_blue_steel tfc:metal/block/weak_blue_steel_stairs tfc:block/metal/block/weak_blue_steel_slab tfc:block/metal/block/weak_blue_steel_slab_top tfc:metal/anvil/weak_red_steel tfc:metal/block/weak_red_steel tfc:metal/bars/weak_red_steel tfc:metal/trapdoor/weak_red_steel tfc:metal/block/weak_red_steel_stairs tfc:block/metal/block/weak_red_steel_slab tfc:block/metal/block/weak_red_steel_slab_top tfc:metal/anvil/high_carbon_steel tfc:metal/block/high_carbon_steel tfc:metal/bars/high_carbon_steel tfc:metal/trapdoor/high_carbon_steel tfc:metal/block/high_carbon_steel_stairs tfc:block/metal/block/high_carbon_steel_slab tfc:block/metal/block/high_carbon_steel_slab_top tfc:metal/anvil/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel tfc:metal/bars/high_carbon_black_steel tfc:metal/trapdoor/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel_stairs tfc:block/metal/block/high_carbon_black_steel_slab tfc:block/metal/block/high_carbon_black_steel_slab_top tfc:metal/anvil/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel tfc:metal/bars/high_carbon_blue_steel tfc:metal/trapdoor/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel_stairs tfc:block/metal/block/high_carbon_blue_steel_slab tfc:block/metal/block/high_carbon_blue_steel_slab_top tfc:metal/anvil/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel tfc:metal/bars/high_carbon_red_steel tfc:metal/trapdoor/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel_stairs tfc:block/metal/block/high_carbon_red_steel_slab tfc:block/metal/block/high_carbon_red_steel_slab_top tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top create:copper_ladder create:brass_ladder create:copper_scaffolding create:brass_scaffolding create:brass_block create:copper_bars create:brass_bars create:smart_chute create:fluid_tank create:steam_whistle create:steam_engine create:spout create:hose_pulley create:item_drain create:train_casing create:smart_fluid_pipe create:fluid_pipe create:mechanical_pump create:copper_valve_handle create:fluid_valve create:mechanical_crafter create:sequenced_gearshift create:flywheel create:rotation_speed_controller create:mechanical_arm create:railway_casing create:controls create:brass_funnel create:brass_tunnel create:content_observer create:stockpile_switch create:redstone_link create:pulse_repeater create:pulse_extender create:peculiar_bell create_jetpack:jetpack create_enchantment_industry:printer create_enchantment_industry:disenchanter cataclysm:ancient_metal_block cataclysm:cursium_block cataclysm:enderite_block cataclysm:witherite_block cataclysm:ignitium_block cataclysm:mechanical_fusion_anvil cataclysm:emp cataclysm:black_steel_block create_dd:furnace_engine create_dd:bore_block create_dd:industrial_fan create_dd:hydraulic_press create_dd:item_stockpile create_dd:fluid_reservoir create_dd:dark_metal_block create_dd:dark_metal_plating create_dd:dark_metal_block_slab create_dd:dark_metal_block_stairs create_dd:dark_metal_bricks create_dd:dark_metal_brick_slab create_dd:dark_metal_brick_stairs create:zinc_block create:industrial_iron_block create:train_door create:chute create:item_vault create:haunted_bell minecraft:netherite_block create_jetpack:netherite_jetpack createutilities:void_steel_block createutilities:void_steel_scaffolding createutilities:void_casing createutilities:void_steel_bars createutilities:void_steel_ladder createutilities:void_motor createutilities:void_chest createutilities:void_tank createutilities:void_battery railways:smokestack_caboosestyle railways:smokestack_long railways:smokestack_coalburner railways:smokestack_oilburner railways:smokestack_streamlined railways:smokestack_woodburner railways:fuel_tank railways:portable_fuel_interface create_power_loader:empty_brass_chunk_loader create_power_loader:brass_chunk_loader create_connected:empty_fan_catalyst create_connected:fan_blasting_catalyst create_connected:fan_smoking_catalyst create_connected:fan_splashing_catalyst create_connected:fan_haunting_catalyst create_connected:sequenced_pulse_generator create_connected:item_silo create_things_and_misc:card_reader create_things_and_misc:card_press create_things_and_misc:sprinkler create_things_and_misc:brass_tiles create_things_and_misc:brass_tiles_slab create_things_and_misc:brass_tiles_stair create_things_and_misc:brass_bricks create_things_and_misc:brass_brick_slab create_things_and_misc:brass_brick_stairs vintageimprovements:vanadium_block createcasing:brass_shaft createcasing:creative_casing create_dd:stargaze_singularity_scaffolding create_dd:stargaze_singularity_block create_dd:stargaze_singularity_casing create_dd:mithril_scaffolding create_dd:mithril_block create_dd:mithril_casing create_dd:bronze_scaffolding create_dd:bronze_block create_dd:bronze_casing create_dd:steel_scaffolding create_dd:steel_block create_dd:steel_casing create_dd:industrial_iron_block create_dd:industrial_casing create_dd:tin_scaffolding create_dd:tin_block create_dd:chromatic_block create_dd:refined_radiance_scaffolding create_dd:refined_radiance_block create_dd:refined_radiance_casing create_dd:shadow_steel_scaffolding create_dd:shadow_steel_block create_dd:shadow_steel_casing create_dd:blaze_gold_scaffolding create_dd:blaze_gold_block create_dd:blaze_gold_casing create_dd:hydraulic_scaffolding create_dd:hydraulic_casing create_dd:overburden_scaffolding create_dd:overburden_casing create_dd:train_scaffolding create_dd:zinc_scaffolding create_dd:industrial_scaffolding create_dd:netherite_scaffolding create_dd:bronze_saw create_dd:bronze_drill createbigcannons:big_cartridge createbigcannons:cast_iron_block createbigcannons:nethersteel_block createbigcannons:basin_foundry_lid createbigcannons:wrought_iron_drop_mortar_end createbigcannons:wrought_iron_cannon_end createbigcannons:wrought_iron_cannon_chamber create_dd:flywheel railways:slashed_locometal railways:riveted_locometal railways:locometal_pillar railways:locometal_smokebox railways:plated_locometal railways:flat_slashed_locometal railways:flat_riveted_locometal railways:brass_wrapped_locometal railways:copper_wrapped_locometal railways:iron_wrapped_locometal railways:locometal_boiler railways:brass_wrapped_locometal_boiler railways:copper_wrapped_locometal_boiler railways:iron_wrapped_locometal_boiler railways:white_slashed_locometal railways:white_riveted_locometal railways:white_locometal_pillar railways:white_locometal_smokebox railways:white_plated_locometal railways:white_flat_slashed_locometal railways:white_flat_riveted_locometal railways:white_brass_wrapped_locometal railways:white_copper_wrapped_locometal railways:white_iron_wrapped_locometal railways:white_locometal_boiler railways:white_brass_wrapped_locometal_boiler railways:white_copper_wrapped_locometal_boiler railways:white_iron_wrapped_locometal_boiler railways:light_gray_slashed_locometal railways:light_gray_riveted_locometal railways:light_gray_locometal_pillar railways:light_gray_locometal_smokebox railways:light_gray_plated_locometal railways:light_gray_flat_slashed_locometal railways:light_gray_flat_riveted_locometal railways:light_gray_brass_wrapped_locometal railways:light_gray_copper_wrapped_locometal railways:light_gray_iron_wrapped_locometal railways:light_gray_locometal_boiler railways:light_gray_brass_wrapped_locometal_boiler railways:light_gray_copper_wrapped_locometal_boiler railways:light_gray_iron_wrapped_locometal_boiler railways:gray_slashed_locometal railways:gray_riveted_locometal railways:gray_locometal_pillar railways:gray_locometal_smokebox railways:gray_plated_locometal railways:gray_flat_slashed_locometal railways:gray_flat_riveted_locometal railways:gray_brass_wrapped_locometal railways:gray_copper_wrapped_locometal railways:gray_iron_wrapped_locometal railways:gray_locometal_boiler railways:gray_brass_wrapped_locometal_boiler railways:gray_copper_wrapped_locometal_boiler railways:gray_iron_wrapped_locometal_boiler railways:black_slashed_locometal railways:black_riveted_locometal railways:black_locometal_pillar railways:black_locometal_smokebox railways:black_plated_locometal railways:black_flat_slashed_locometal railways:black_flat_riveted_locometal railways:black_brass_wrapped_locometal railways:black_copper_wrapped_locometal railways:black_iron_wrapped_locometal railways:black_locometal_boiler railways:black_brass_wrapped_locometal_boiler railways:black_copper_wrapped_locometal_boiler railways:black_iron_wrapped_locometal_boiler railways:brown_slashed_locometal railways:brown_riveted_locometal railways:brown_locometal_pillar railways:brown_locometal_smokebox railways:brown_plated_locometal railways:brown_flat_slashed_locometal railways:brown_flat_riveted_locometal railways:brown_brass_wrapped_locometal railways:brown_copper_wrapped_locometal railways:brown_iron_wrapped_locometal railways:brown_locometal_boiler railways:brown_brass_wrapped_locometal_boiler railways:brown_copper_wrapped_locometal_boiler railways:brown_iron_wrapped_locometal_boiler railways:red_slashed_locometal railways:red_riveted_locometal railways:red_locometal_pillar railways:red_locometal_smokebox railways:red_plated_locometal railways:red_flat_slashed_locometal railways:red_flat_riveted_locometal railways:red_brass_wrapped_locometal railways:red_copper_wrapped_locometal railways:red_iron_wrapped_locometal railways:red_locometal_boiler railways:red_brass_wrapped_locometal_boiler railways:red_copper_wrapped_locometal_boiler railways:red_iron_wrapped_locometal_boiler railways:orange_slashed_locometal railways:orange_riveted_locometal railways:orange_locometal_pillar railways:orange_locometal_smokebox railways:orange_plated_locometal railways:orange_flat_slashed_locometal railways:orange_flat_riveted_locometal railways:orange_brass_wrapped_locometal railways:orange_copper_wrapped_locometal railways:orange_iron_wrapped_locometal railways:orange_locometal_boiler railways:orange_brass_wrapped_locometal_boiler railways:orange_copper_wrapped_locometal_boiler railways:orange_iron_wrapped_locometal_boiler railways:yellow_slashed_locometal railways:yellow_riveted_locometal railways:yellow_locometal_pillar railways:yellow_locometal_smokebox railways:yellow_plated_locometal railways:yellow_flat_slashed_locometal railways:yellow_flat_riveted_locometal railways:yellow_brass_wrapped_locometal railways:yellow_copper_wrapped_locometal railways:yellow_iron_wrapped_locometal railways:yellow_locometal_boiler railways:yellow_brass_wrapped_locometal_boiler railways:yellow_copper_wrapped_locometal_boiler railways:yellow_iron_wrapped_locometal_boiler railways:lime_slashed_locometal railways:lime_riveted_locometal railways:lime_locometal_pillar railways:lime_locometal_smokebox railways:lime_plated_locometal railways:lime_flat_slashed_locometal railways:lime_flat_riveted_locometal railways:lime_brass_wrapped_locometal railways:lime_copper_wrapped_locometal railways:lime_iron_wrapped_locometal railways:lime_locometal_boiler railways:lime_brass_wrapped_locometal_boiler railways:lime_copper_wrapped_locometal_boiler railways:lime_iron_wrapped_locometal_boiler railways:green_slashed_locometal railways:green_riveted_locometal railways:green_locometal_pillar railways:green_locometal_smokebox railways:green_plated_locometal railways:green_flat_slashed_locometal railways:green_flat_riveted_locometal railways:green_brass_wrapped_locometal railways:green_copper_wrapped_locometal railways:green_iron_wrapped_locometal railways:green_locometal_boiler railways:green_brass_wrapped_locometal_boiler railways:green_copper_wrapped_locometal_boiler railways:green_iron_wrapped_locometal_boiler railways:cyan_slashed_locometal railways:cyan_riveted_locometal railways:cyan_locometal_pillar railways:cyan_locometal_smokebox railways:cyan_plated_locometal railways:cyan_flat_slashed_locometal railways:cyan_flat_riveted_locometal railways:cyan_brass_wrapped_locometal railways:cyan_copper_wrapped_locometal railways:cyan_iron_wrapped_locometal railways:cyan_locometal_boiler railways:cyan_brass_wrapped_locometal_boiler railways:cyan_copper_wrapped_locometal_boiler railways:cyan_iron_wrapped_locometal_boiler railways:light_blue_slashed_locometal railways:light_blue_riveted_locometal railways:light_blue_locometal_pillar railways:light_blue_locometal_smokebox railways:light_blue_plated_locometal railways:light_blue_flat_slashed_locometal railways:light_blue_flat_riveted_locometal railways:light_blue_brass_wrapped_locometal railways:light_blue_copper_wrapped_locometal railways:light_blue_iron_wrapped_locometal railways:light_blue_locometal_boiler railways:light_blue_brass_wrapped_locometal_boiler railways:light_blue_copper_wrapped_locometal_boiler railways:light_blue_iron_wrapped_locometal_boiler railways:blue_slashed_locometal railways:blue_riveted_locometal railways:blue_locometal_pillar railways:blue_locometal_smokebox railways:blue_plated_locometal railways:blue_flat_slashed_locometal railways:blue_flat_riveted_locometal railways:blue_brass_wrapped_locometal railways:blue_copper_wrapped_locometal railways:blue_iron_wrapped_locometal railways:blue_locometal_boiler railways:blue_brass_wrapped_locometal_boiler railways:blue_copper_wrapped_locometal_boiler railways:blue_iron_wrapped_locometal_boiler railways:purple_slashed_locometal railways:purple_riveted_locometal railways:purple_locometal_pillar railways:purple_locometal_smokebox railways:purple_plated_locometal railways:purple_flat_slashed_locometal railways:purple_flat_riveted_locometal railways:purple_brass_wrapped_locometal railways:purple_copper_wrapped_locometal railways:purple_iron_wrapped_locometal railways:purple_locometal_boiler railways:purple_brass_wrapped_locometal_boiler railways:purple_copper_wrapped_locometal_boiler railways:purple_iron_wrapped_locometal_boiler railways:magenta_slashed_locometal railways:magenta_riveted_locometal railways:magenta_locometal_pillar railways:magenta_locometal_smokebox railways:magenta_plated_locometal railways:magenta_flat_slashed_locometal railways:magenta_flat_riveted_locometal railways:magenta_brass_wrapped_locometal railways:magenta_copper_wrapped_locometal railways:magenta_iron_wrapped_locometal railways:magenta_locometal_boiler railways:magenta_brass_wrapped_locometal_boiler railways:magenta_copper_wrapped_locometal_boiler railways:magenta_iron_wrapped_locometal_boiler railways:pink_slashed_locometal railways:pink_riveted_locometal railways:pink_locometal_pillar railways:pink_locometal_smokebox railways:pink_plated_locometal railways:pink_flat_slashed_locometal railways:pink_flat_riveted_locometal railways:pink_brass_wrapped_locometal railways:pink_copper_wrapped_locometal railways:pink_iron_wrapped_locometal railways:pink_locometal_boiler railways:pink_brass_wrapped_locometal_boiler railways:pink_copper_wrapped_locometal_boiler railways:pink_iron_wrapped_locometal_boiler create:copper_shingles create:copper_shingle_stairs create:copper_shingle_slab create:waxed_copper_shingles create:waxed_copper_shingle_stairs create:waxed_copper_shingle_slab create:exposed_copper_shingles create:exposed_copper_shingle_stairs create:exposed_copper_shingle_slab create:waxed_exposed_copper_shingles create:waxed_exposed_copper_shingle_stairs create:waxed_exposed_copper_shingle_slab create:weathered_copper_shingles create:weathered_copper_shingle_stairs create:weathered_copper_shingle_slab create:waxed_weathered_copper_shingles create:waxed_weathered_copper_shingle_stairs create:waxed_weathered_copper_shingle_slab create:oxidized_copper_shingles create:oxidized_copper_shingle_stairs create:oxidized_copper_shingle_slab create:waxed_oxidized_copper_shingles create:waxed_oxidized_copper_shingle_stairs create:waxed_oxidized_copper_shingle_slab create:copper_tiles create:copper_tile_stairs create:copper_tile_slab create:waxed_copper_tiles create:waxed_copper_tile_stairs create:waxed_copper_tile_slab create:exposed_copper_tiles create:exposed_copper_tile_stairs create:exposed_copper_tile_slab create:waxed_exposed_copper_tiles create:waxed_exposed_copper_tile_stairs create:waxed_exposed_copper_tile_slab create:weathered_copper_tiles create:weathered_copper_tile_stairs create:weathered_copper_tile_slab create:waxed_weathered_copper_tiles create:waxed_weathered_copper_tile_stairs create:waxed_weathered_copper_tile_slab create:oxidized_copper_tiles create:oxidized_copper_tile_stairs create:oxidized_copper_tile_slab create:waxed_oxidized_copper_tiles create:waxed_oxidized_copper_tile_stairs create:waxed_oxidized_copper_tile_slab create_dd:steel_polished_block create_dd:steel_polished_stairs create_dd:steel_polished_slab create_dd:steel_tiled_block create_dd:steel_tiled_stairs create_dd:steel_tiled_slab create_dd:zinc_polished_block create_dd:zinc_polished_stairs create_dd:zinc_polished_slab create_dd:zinc_tiled_block create_dd:zinc_tiled_stairs create_dd:zinc_tiled_slab create_dd:bronze_polished_block create_dd:bronze_polished_stairs create_dd:bronze_polished_slab create_dd:bronze_tiled_block create_dd:bronze_tiled_stairs create_dd:bronze_tiled_slab createbigcannons:cast_iron_sliding_breech createbigcannons:unbored_cast_iron_sliding_breech createbigcannons:incomplete_cast_iron_sliding_breech createbigcannons:cast_iron_quickfiring_breech createbigcannons:cast_iron_screw_breech createbigcannons:unbored_cast_iron_screw_breech createbigcannons:incomplete_cast_iron_screw_breech createbigcannons:cast_iron_cannon_end createbigcannons:cast_iron_autocannon_breech createbigcannons:unbored_cast_iron_autocannon_breech createbigcannons:incomplete_cast_iron_autocannon_breech createbigcannons:cast_iron_autocannon_recoil_spring createbigcannons:unbored_cast_iron_autocannon_recoil_spring createbigcannons:incomplete_cast_iron_autocannon_recoil_spring createbigcannons:cast_iron_autocannon_barrel createbigcannons:unbored_cast_iron_autocannon_barrel createbigcannons:very_small_cast_iron_cannon_layer createbigcannons:small_cast_iron_cannon_layer createbigcannons:medium_cast_iron_cannon_layer createbigcannons:large_cast_iron_cannon_layer createbigcannons:very_large_cast_iron_cannon_layer createbigcannons:unbored_very_small_cast_iron_cannon_layer createbigcannons:unbored_small_cast_iron_cannon_layer createbigcannons:unbored_medium_cast_iron_cannon_layer createbigcannons:unbored_large_cast_iron_cannon_layer createbigcannons:unbored_very_large_cast_iron_cannon_layer createbigcannons:cast_iron_cannon_barrel createbigcannons:built_up_cast_iron_cannon_barrel createbigcannons:cast_iron_cannon_chamber createbigcannons:built_up_cast_iron_cannon_chamber createbigcannons:thick_cast_iron_cannon_chamber createbigcannons:bronze_sliding_breech createbigcannons:unbored_bronze_sliding_breech createbigcannons:incomplete_bronze_sliding_breech createbigcannons:bronze_quickfiring_breech createbigcannons:bronze_screw_breech createbigcannons:unbored_bronze_screw_breech createbigcannons:incomplete_bronze_screw_breech createbigcannons:bronze_cannon_end createbigcannons:bronze_autocannon_breech createbigcannons:unbored_bronze_autocannon_breech createbigcannons:incomplete_bronze_autocannon_breech createbigcannons:bronze_autocannon_recoil_spring createbigcannons:unbored_bronze_autocannon_recoil_spring createbigcannons:incomplete_bronze_autocannon_recoil_spring createbigcannons:bronze_autocannon_barrel createbigcannons:unbored_bronze_autocannon_barrel createbigcannons:very_small_bronze_cannon_layer createbigcannons:small_bronze_cannon_layer createbigcannons:medium_bronze_cannon_layer createbigcannons:large_bronze_cannon_layer createbigcannons:very_large_bronze_cannon_layer createbigcannons:unbored_very_small_bronze_cannon_layer createbigcannons:unbored_small_bronze_cannon_layer createbigcannons:unbored_medium_bronze_cannon_layer createbigcannons:unbored_large_bronze_cannon_layer createbigcannons:unbored_very_large_bronze_cannon_layer createbigcannons:bronze_cannon_barrel createbigcannons:built_up_bronze_cannon_barrel createbigcannons:bronze_cannon_chamber createbigcannons:built_up_bronze_cannon_chamber createbigcannons:thick_bronze_cannon_chamber createbigcannons:steel_sliding_breech createbigcannons:unbored_steel_sliding_breech createbigcannons:incomplete_steel_sliding_breech createbigcannons:steel_quickfiring_breech createbigcannons:steel_screw_breech createbigcannons:unbored_steel_screw_breech createbigcannons:incomplete_steel_screw_breech createbigcannons:steel_cannon_end createbigcannons:steel_autocannon_breech createbigcannons:unbored_steel_autocannon_breech createbigcannons:incomplete_steel_autocannon_breech createbigcannons:steel_autocannon_recoil_spring createbigcannons:unbored_steel_autocannon_recoil_spring createbigcannons:incomplete_steel_autocannon_recoil_spring createbigcannons:steel_autocannon_barrel createbigcannons:unbored_steel_autocannon_barrel createbigcannons:very_small_steel_cannon_layer createbigcannons:small_steel_cannon_layer createbigcannons:medium_steel_cannon_layer createbigcannons:large_steel_cannon_layer createbigcannons:very_large_steel_cannon_layer createbigcannons:unbored_very_small_steel_cannon_layer createbigcannons:unbored_small_steel_cannon_layer createbigcannons:unbored_medium_steel_cannon_layer createbigcannons:unbored_large_steel_cannon_layer createbigcannons:unbored_very_large_steel_cannon_layer createbigcannons:steel_cannon_barrel createbigcannons:built_up_steel_cannon_barrel createbigcannons:steel_cannon_chamber createbigcannons:built_up_steel_cannon_chamber createbigcannons:thick_steel_cannon_chamber createbigcannons:nethersteel_sliding_breech createbigcannons:unbored_nethersteel_sliding_breech createbigcannons:incomplete_nethersteel_sliding_breech createbigcannons:nethersteel_quickfiring_breech createbigcannons:nethersteel_screw_breech createbigcannons:unbored_nethersteel_screw_breech createbigcannons:incomplete_nethersteel_screw_breech createbigcannons:nethersteel_cannon_end createbigcannons:nethersteel_autocannon_breech createbigcannons:unbored_nethersteel_autocannon_breech createbigcannons:incomplete_nethersteel_autocannon_breech createbigcannons:nethersteel_autocannon_recoil_spring createbigcannons:unbored_nethersteel_autocannon_recoil_spring createbigcannons:incomplete_nethersteel_autocannon_recoil_spring createbigcannons:nethersteel_autocannon_barrel createbigcannons:unbored_nethersteel_autocannon_barrel createbigcannons:very_small_nethersteel_cannon_layer createbigcannons:small_nethersteel_cannon_layer createbigcannons:medium_nethersteel_cannon_layer createbigcannons:large_nethersteel_cannon_layer createbigcannons:very_large_nethersteel_cannon_layer createbigcannons:unbored_very_small_nethersteel_cannon_layer createbigcannons:unbored_small_nethersteel_cannon_layer createbigcannons:unbored_medium_nethersteel_cannon_layer createbigcannons:unbored_large_nethersteel_cannon_layer createbigcannons:unbored_very_large_nethersteel_cannon_layer createbigcannons:nethersteel_cannon_barrel createbigcannons:built_up_nethersteel_cannon_barrel createbigcannons:nethersteel_cannon_chamber createbigcannons:built_up_nethersteel_cannon_chamber createbigcannons:thick_nethersteel_cannon_chamber createcasing:brass_mixer createcasing:brass_press createcasing:brass_depot createcasing:copper_mixer createcasing:copper_press createcasing:copper_depot createcasing:railway_gearbox createcasing:railway_encased_chain_drive createcasing:railway_adjustable_chain_gearshift createcasing:railway_mixer createcasing:railway_press createcasing:railway_depot createcasing:creative_gearbox createcasing:creative_encased_chain_drive createcasing:creative_adjustable_chain_gearshift createcasing:creative_mixer createcasing:creative_press createcasing:creative_depot createcasing:industrial_iron_gearbox createcasing:industrial_iron_encased_chain_drive createcasing:industrial_iron_adjustable_chain_gearshift createcasing:industrial_iron_mixer createcasing:industrial_iron_press createcasing:industrial_iron_depot createdeco:brass_coinstack createdeco:brass_bars createdeco:brass_bars_overlay createdeco:brass_mesh_fence createdeco:brass_hull createdeco:brass_catwalk createdeco:brass_catwalk_stairs createdeco:brass_catwalk_railing createdeco:brass_support_wedge createdeco:brass_support createdeco:brass_sheet_metal createdeco:brass_door createdeco:locked_brass_door createdeco:brass_trapdoor createdeco:red_brass_lamp createdeco:green_brass_lamp createdeco:blue_brass_lamp createdeco:yellow_brass_lamp createdeco:iron_coinstack createdeco:iron_bars createdeco:iron_bars_overlay createdeco:iron_mesh_fence createdeco:iron_hull createdeco:iron_catwalk createdeco:iron_catwalk_stairs createdeco:iron_catwalk_railing createdeco:iron_support_wedge createdeco:iron_support createdeco:iron_sheet_metal createdeco:iron_door createdeco:locked_iron_door createdeco:iron_trapdoor createdeco:red_iron_lamp createdeco:green_iron_lamp createdeco:blue_iron_lamp createdeco:yellow_iron_lamp createdeco:copper_coinstack createdeco:copper_bars createdeco:copper_bars_overlay createdeco:copper_mesh_fence createdeco:copper_hull createdeco:copper_catwalk createdeco:copper_catwalk_stairs createdeco:copper_catwalk_railing createdeco:copper_support_wedge createdeco:copper_support createdeco:copper_sheet_metal createdeco:copper_door createdeco:locked_copper_door createdeco:copper_trapdoor createdeco:red_copper_lamp createdeco:green_copper_lamp createdeco:blue_copper_lamp createdeco:yellow_copper_lamp createdeco:industrial_iron_coinstack createdeco:industrial_iron_bars createdeco:industrial_iron_bars_overlay createdeco:industrial_iron_mesh_fence createdeco:industrial_iron_hull createdeco:industrial_iron_catwalk createdeco:industrial_iron_catwalk_stairs createdeco:industrial_iron_catwalk_railing createdeco:industrial_iron_support_wedge createdeco:industrial_iron_support createdeco:industrial_iron_sheet_metal createdeco:industrial_iron_door createdeco:locked_industrial_iron_door createdeco:industrial_iron_trapdoor createdeco:red_industrial_iron_lamp createdeco:green_industrial_iron_lamp createdeco:blue_industrial_iron_lamp createdeco:yellow_industrial_iron_lamp createdeco:zinc_coinstack createdeco:zinc_bars createdeco:zinc_bars_overlay createdeco:zinc_mesh_fence createdeco:zinc_hull createdeco:zinc_catwalk createdeco:zinc_catwalk_stairs createdeco:zinc_catwalk_railing createdeco:zinc_support_wedge createdeco:zinc_support createdeco:zinc_sheet_metal createdeco:zinc_door createdeco:locked_zinc_door createdeco:zinc_trapdoor createdeco:red_zinc_lamp createdeco:green_zinc_lamp createdeco:blue_zinc_lamp createdeco:yellow_zinc_lamp @@ -62,10 +65,13 @@ block.10032 = reeds sugar_cane tube_coral brain_coral fire_coral bubble_coral horn_coral dead_tube_coral dead_brain_coral dead_fire_coral dead_bubble_coral dead_horn_coral tube_coral_fan brain_coral_fan fire_coral_fan bubble_coral_fan horn_coral_fan dead_tube_coral_fan dead_brain_coral_fan dead_fire_coral_fan dead_bubble_coral_fan dead_horn_coral_fan sapling nether_wart # NEW EMMISIVE - block.10090 = magma fire flowing_lava lava end_root beacon betterendforge:mossy_glowshroom_hymenophore betterendforge:mossy_glowshroom_fur betterendforge:blue_vine_lantern betterendforge:blue_vine_fur betterendforge::lumecorn:shape=light_top_middle betterendforge::lumecorn:shape=light_middle betterendforge::lumecorn:shape=light_bottom betterendforge::purple_polypore betterendforge::bulb_vine:shape=bottom + block.10090 = magma flowing_lava lava end_root beacon betterendforge:mossy_glowshroom_hymenophore betterendforge:mossy_glowshroom_fur betterendforge:blue_vine_lantern betterendforge:blue_vine_fur betterendforge::lumecorn:shape=light_top_middle betterendforge::lumecorn:shape=light_middle betterendforge::lumecorn:shape=light_bottom betterendforge::purple_polypore betterendforge::bulb_vine:shape=bottom # FAKE EMMISORS - block.10213 = soul_fire + block.10213 = minecraft:soul_fire + + # No SHADOW FIRE + block.10214 = fire # METAL-LIKE block.10400 = iron_block gold_block emerald_block lapis_block diamond_block diff --git a/shaders/common/shadow_fragment.glsl b/shaders/common/shadow_fragment.glsl index f02adc11..7574db52 100644 --- a/shaders/common/shadow_fragment.glsl +++ b/shaders/common/shadow_fragment.glsl @@ -7,6 +7,7 @@ uniform sampler2D tex; /* Ins / Outs */ varying vec2 texcoord; +varying float is_noshadow; #ifdef COLORED_SHADOW varying float is_water; @@ -16,10 +17,14 @@ varying vec2 texcoord; void main() { #ifdef COLORED_SHADOW - if(is_water > 0.98) - discard; // Is water + if(is_water > 0.98) // Water do not project shadows + discard; #endif + if (is_noshadow > 0.98) { // Objects without shadow projection + discard; + } + vec4 block_color = texture2D(tex, texcoord); /* DRAWBUFFERS:0 */ diff --git a/shaders/common/shadow_vertex.glsl b/shaders/common/shadow_vertex.glsl index d446ffcb..793e449e 100644 --- a/shaders/common/shadow_vertex.glsl +++ b/shaders/common/shadow_vertex.glsl @@ -10,6 +10,7 @@ uniform mat4 shadowModelViewInverse; /* Ins / Outs */ varying vec2 texcoord; +varying float is_noshadow; #ifdef COLORED_SHADOW varying float is_water; @@ -31,6 +32,11 @@ void main() { gl_Position.xy *= 1.0 / distortFactor; gl_Position.z = gl_Position.z * 0.2; + is_noshadow = 0.0; + if (mc_Entity.x == ENTITY_NO_SHADOW_FIRE || mc_Entity.x == ENTITY_F_EMMISIVE) { + is_noshadow = 1.0; + } + #ifdef COLORED_SHADOW is_water = 0.0; diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 73326683..2be922b0 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -117,7 +117,6 @@ void main() { #if (defined SHADOW_CASTING && !defined NETHER) || defined DISTANT_HORIZONS #if AA_TYPE > 0 float dither = shifted_dither13(gl_FragCoord.xy); - // float dither = shifted_eclectic_dither13(gl_FragCoord.xy); #else float dither = r_dither(gl_FragCoord.xy); #endif @@ -215,10 +214,11 @@ void main() { #if defined GBUFFER_ENTITIES if(entityId == 10101) { - // Thunderbolt render + // Thunderbolt render block_color = vec4(1.0, 1.0, 1.0, 0.5); } else { - block_color.rgb = mix(block_color.rgb, entityColor.rgb, entityColor.a * .75); + float entity_poderation = luma(real_light); // Red damage bright ponderation + block_color.rgb = mix(block_color.rgb, entityColor.rgb, entityColor.a * entity_poderation * 3.0); } #endif diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index c56d8cc8..2fe00fde 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -133,7 +133,7 @@ void main() { #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND emmisive_type = 0.0; - if(mc_Entity.x == ENTITY_EMMISIVE || mc_Entity.x == ENTITY_S_EMMISIVE) { + if(mc_Entity.x == ENTITY_NO_SHADOW_FIRE || mc_Entity.x == ENTITY_EMMISIVE || mc_Entity.x == ENTITY_S_EMMISIVE) { emmisive_type = 1.0; } #endif diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index f9c8bfb6..45b6752a 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -16,7 +16,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.1c +value.ACERCADE.0=v.9.1d #Options ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 919d59f2..58881d6f 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -16,7 +16,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.1c +value.ACERCADE.0=v.9.1d #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index e18f71a7..29e57e94 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -16,7 +16,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.1c +value.ACERCADE.0=v.9.1d #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 19594397..4939f96d 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -16,7 +16,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.1c +value.ACERCADE.0=v.9.1d #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index e9883d08..3d49f438 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -16,7 +16,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.1c +value.ACERCADE.0=v.9.1d #Options ############################# diff --git a/shaders/lib/config.alternate.glsl b/shaders/lib/config.alternate.glsl index 87ed4e65..8ee01c0b 100644 --- a/shaders/lib/config.alternate.glsl +++ b/shaders/lib/config.alternate.glsl @@ -5,22 +5,23 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ // Useful entities -#define ENTITY_SMALLGRASS 10031.0 // Normal grass like entities -#define ENTITY_LOWERGRASS 10175.0 // Lower half only -#define ENTITY_UPPERGRASS 10176.0 // Upper half only -#define ENTITY_SMALLENTS 10059.0 // Crops like entities -#define ENTITY_SMALLENTS_NW 10032.0 // No waveable small ents -#define ENTITY_LEAVES 10018.0 // Leaves -#define ENTITY_VINES 10106.0 // Vines -#define ENTITY_EMMISIVE 10089.0 // Emissors -#define ENTITY_S_EMMISIVE 10090.0 // Emissors -#define ENTITY_F_EMMISIVE 10213.0 // Fake emissors -#define ENTITY_WATER 10008.0 // Water -#define ENTITY_PORTAL 10090.0 // Portal -#define ENTITY_STAINED 10079.0 // Glass -#define ENTITY_METAL 10400.0 // Metal-like glossy blocks -#define ENTITY_SAND 10410.0 // Sand-like glossy blocks -#define ENTITY_FABRIC 10440.0 // Fabric-like glossy blocks +#define ENTITY_SMALLGRASS 10031.0 // Normal grass like entities +#define ENTITY_LOWERGRASS 10175.0 // Lower half only +#define ENTITY_UPPERGRASS 10176.0 // Upper half only +#define ENTITY_SMALLENTS 10059.0 // Crops like entities +#define ENTITY_SMALLENTS_NW 10032.0 // No waveable small ents +#define ENTITY_LEAVES 10018.0 // Leaves +#define ENTITY_VINES 10106.0 // Vines +#define ENTITY_EMMISIVE 10089.0 // Emissors +#define ENTITY_S_EMMISIVE 10090.0 // Emissors +#define ENTITY_F_EMMISIVE 10213.0 // Fake emissors +#define ENTITY_NO_SHADOW_FIRE 10214.0 // Fire (no shadow) +#define ENTITY_WATER 10008.0 // Water +#define ENTITY_PORTAL 10090.0 // Portal +#define ENTITY_STAINED 10079.0 // Glass +#define ENTITY_METAL 10400.0 // Metal-like glossy blocks +#define ENTITY_SAND 10410.0 // Sand-like glossy blocks +#define ENTITY_FABRIC 10440.0 // Fabric-like glossy blocks // Other constants #define ZENITH_SKY_RAIN_COLOR vec3(.7, .85, 1.0) diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index 965fb321..bb0fd745 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -5,22 +5,23 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ // Useful entities -#define ENTITY_SMALLGRASS 10031.0 // Normal grass like entities -#define ENTITY_LOWERGRASS 10175.0 // Lower half only -#define ENTITY_UPPERGRASS 10176.0 // Upper half only -#define ENTITY_SMALLENTS 10059.0 // Crops like entities -#define ENTITY_SMALLENTS_NW 10032.0 // No waveable small ents -#define ENTITY_LEAVES 10018.0 // Leaves -#define ENTITY_VINES 10106.0 // Vines -#define ENTITY_EMMISIVE 10089.0 // Emissors -#define ENTITY_S_EMMISIVE 10090.0 // Emissors -#define ENTITY_F_EMMISIVE 10213.0 // Fake emissors -#define ENTITY_WATER 10008.0 // Water -#define ENTITY_PORTAL 10090.0 // Portal -#define ENTITY_STAINED 10079.0 // Glass -#define ENTITY_METAL 10400.0 // Metal-like glossy blocks -#define ENTITY_SAND 10410.0 // Sand-like glossy blocks -#define ENTITY_FABRIC 10440.0 // Fabric-like glossy blocks +#define ENTITY_SMALLGRASS 10031.0 // Normal grass like entities +#define ENTITY_LOWERGRASS 10175.0 // Lower half only +#define ENTITY_UPPERGRASS 10176.0 // Upper half only +#define ENTITY_SMALLENTS 10059.0 // Crops like entities +#define ENTITY_SMALLENTS_NW 10032.0 // No waveable small ents +#define ENTITY_LEAVES 10018.0 // Leaves +#define ENTITY_VINES 10106.0 // Vines +#define ENTITY_EMMISIVE 10089.0 // Emissors +#define ENTITY_S_EMMISIVE 10090.0 // Emissors +#define ENTITY_F_EMMISIVE 10213.0 // Fake emissors +#define ENTITY_NO_SHADOW_FIRE 10214.0 // Fire (no shadow) +#define ENTITY_WATER 10008.0 // Water +#define ENTITY_PORTAL 10090.0 // Portal +#define ENTITY_STAINED 10079.0 // Glass +#define ENTITY_METAL 10400.0 // Metal-like glossy blocks +#define ENTITY_SAND 10410.0 // Sand-like glossy blocks +#define ENTITY_FABRIC 10440.0 // Fabric-like glossy blocks // Other constants #define ZENITH_SKY_RAIN_COLOR vec3(.7, .85, 1.0) diff --git a/shaders/lib/config.original.glsl b/shaders/lib/config.original.glsl new file mode 100644 index 00000000..965fb321 --- /dev/null +++ b/shaders/lib/config.original.glsl @@ -0,0 +1,323 @@ +/* MakeUp - config.glsl +Config variables + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +// Useful entities +#define ENTITY_SMALLGRASS 10031.0 // Normal grass like entities +#define ENTITY_LOWERGRASS 10175.0 // Lower half only +#define ENTITY_UPPERGRASS 10176.0 // Upper half only +#define ENTITY_SMALLENTS 10059.0 // Crops like entities +#define ENTITY_SMALLENTS_NW 10032.0 // No waveable small ents +#define ENTITY_LEAVES 10018.0 // Leaves +#define ENTITY_VINES 10106.0 // Vines +#define ENTITY_EMMISIVE 10089.0 // Emissors +#define ENTITY_S_EMMISIVE 10090.0 // Emissors +#define ENTITY_F_EMMISIVE 10213.0 // Fake emissors +#define ENTITY_WATER 10008.0 // Water +#define ENTITY_PORTAL 10090.0 // Portal +#define ENTITY_STAINED 10079.0 // Glass +#define ENTITY_METAL 10400.0 // Metal-like glossy blocks +#define ENTITY_SAND 10410.0 // Sand-like glossy blocks +#define ENTITY_FABRIC 10440.0 // Fabric-like glossy blocks + +// Other constants +#define ZENITH_SKY_RAIN_COLOR vec3(.7, .85, 1.0) +#define HORIZON_SKY_RAIN_COLOR vec3(0.35 , 0.425, 0.5) + +// Options +#define REFLECTION_SLIDER 2 // [0 1 2] Reflection quality. - Flipped image: Inaccurate but quick reflection. - Raymarching: Raytraced Screen Space Reflection. + +#if REFLECTION_SLIDER == 0 + #define REFLECTION 0 + #define SSR_TYPE 0 + #define REFLEX_INDEX 0.45 +#elif REFLECTION_SLIDER == 1 + #define REFLECTION 1 + #define SSR_TYPE 0 + #define REFLEX_INDEX 0.7 +#elif REFLECTION_SLIDER == 2 + #define REFLECTION 1 + #define SSR_TYPE 1 + #define REFLEX_INDEX 0.7 +#endif + +#define FOG_ACTIVE // Toggle fog +#define NETHER_FOG_DISTANCE 0 // [0 1] // Sets Nether fog distance to half of the render distance (maximum of 96 blocks) +#define ACERCADE 0 // [0] +#define WAVING 1 // [0 1] Makes objects like leaves or grass move in the wind +#define TINTED_WATER 1 // [0 1] Use the resource pack color for water. +#define REFRACTION 1 // [0 1] Activate refractions. +// #define DOF // Enables depth of field (high performance cost). +#define DOF_STRENGTH 0.09 // [0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13] Depth of field strength. +#define AO 1 // [0 1] Turn on for enhanced ambient occlusion (medium performance cost). +#define AOSTEPS 4 // [4 5 6 7 8 9 10 11] How many samples are taken for AO (high performance cost). +#define AO_STRENGTH 0.70 // [0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.66 0.70 0.75 0.80 0.85] Ambient occlusion strength (strength NOT affect performance). +#define AA_TYPE 2 // [0 1 2 3] No: Disable antialiasing (not recommended). Denoise only: Supersampling is only used to eliminate noise. TAA: Enable antialiasing (Recommended). Sharp TAA: A subtle sharpening effect is used on the TAA. +//#define MOTION_BLUR // Turn on motion blur +#define MOTION_BLUR_STRENGTH 1.0 // [0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0] Set Motion blur strength. Lower framerate -> Lower strength and vice versa is recommended. +#define MOTION_BLUR_SAMPLES 4 // [3 4 5 6 7 8] Motion blur samples +#define SUN_REFLECTION 1 // [0 1] Enable sun (or moon) reflection on water and glass + +#define SHADOW_TYPE 1 // [0 1] Sets the shadow type +#define SHADOW_BLUR 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] Shadow blur intensity +// #define COLORED_SHADOW // Attempts to tint the shadow of translucent objects, as well as the associated volumetric light (if active). +#define WATER_ABSORPTION 0.10 // [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] Sets how much light the water absorbs. Low levels make the water more transparent. High levels make it more opaque. +#define COLOR_SCHEME 1 // [0 1 2 3 4 5 6 7 99] Ethereal: Old default theme. New shoka: Reinterpretation of a classic. Shoka: The classic. Legacy: Very old default. Captain: A cold preset of stylish colors. Psycodelic: Remaster of old vivid scheme. Cocoa: Warm theme. Testigo: Fantasy and cute scheme. Custom: Choose your colors in advanced options. +#define WATER_TEXTURE 0 // [0 1] Enable or disable resource pack water texture. It does not work properly in 1.12. In that case the default value is recommended. +#define AVOID_DARK_LEVEL 0.030 // [0.000 0.005 0.010 0.015 0.020 0.025 0.030 0.035 0.040 0.045 0.050 0.055 0.060] Minimal omni light intensity in caves. +#define NIGHT_BRIGHT 0.60 // [0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70] Adjusts the brightness of the night light in exteriors. +#define V_CLOUDS 1 // [0 1 2] Volumetric static: The clouds move, but they keep their shape. Volumetric dynamic: Clouds change shape over time, a different cloud landscape every time (medium performance hit). Vanilla: Original vanilla clouds. +#define CLOUD_VOL_STYLE 0 // [0 1] Set the volumetric cloud style. +#define CLOUD_REFLECTION // Set off-screen volumetric clouds reflection (volumetric clouds must be active). +#define END_CLOUDS // Activates drawing of clouds in the end (only works if volumetric clouds are active) +#define BLACK_ENTITY_FIX 0 // [0 1] Removes black entity bug in old video drivers (activate ONLY if you have problems with black entities) +#define BLOOM // Enable or disable bloom effect +#define BLOOM_SAMPLES 4.0 // [4.0 5.0 6.0 7.0 8.0 9.0 10.0] Bloom sample pairs. +#define CHROMA_ABER 0 // [0 1] Enable chroma aberration. +#define CHROMA_ABER_STRENGTH 0.04 // [0.04 0.05 0.06] Chroma aberration strength. +#define VOL_LIGHT 1 // [0 1 2] Depth based: Turn on depth based godrays, they are a bit slow, but can work better than volumetric light for very short shadow distances. Volumetric: It activates the volumetric light, more accurate and faster, but it needs the shadows enabled to work. +// #define VANILLA_WATER // Establishes the appearance of water as vanilla. +#define WATER_COLOR_SOURCE 0 // [0 1] Select the water color source. It does not work properly in 1.12. In that case the default value is recommended. +#define WATER_TURBULENCE 0.9 // [7.0 1.75 0.9 0.5] Set the water waves strength. +#define FOG_ADJUST 2.0 // [10.0 8.0 4.0 2.0 1.0] Sets the fog strength +// #define DEBUG_MODE // Set debug mode. +#define BLOCKLIGHT_TEMP 1 // [0 1 2 3 4] Set blocklight temperature +#define MATERIAL_GLOSS // A very subtle effect that adds some ability to reflect direct light on some blocks. It is most noticeable on metals and luminous objects. +#define DYN_HAND_LIGHT // Toggle the fake dynamic light + +// Custom colors +#define LIGHT_SUNSET_COLOR_R 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 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] +#define LIGHT_SUNSET_COLOR_G 0.59 // [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.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] +#define LIGHT_SUNSET_COLOR_B 0.35 // [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.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] + +#define LIGHT_DAY_COLOR_R 0.90 // [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.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] +#define LIGHT_DAY_COLOR_G 0.84 // [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.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] +#define LIGHT_DAY_COLOR_B 0.79 // [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.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] + +#define LIGHT_NIGHT_COLOR_R 0.05 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define LIGHT_NIGHT_COLOR_G 0.05 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define LIGHT_NIGHT_COLOR_B 0.06 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] + +#define ZENITH_SUNSET_COLOR_R 0.14 // [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.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] +#define ZENITH_SUNSET_COLOR_G 0.24 // [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.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] +#define ZENITH_SUNSET_COLOR_B 0.36 // [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.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] + +#define ZENITH_DAY_COLOR_R 0.14 // [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.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] +#define ZENITH_DAY_COLOR_G 0.24 // [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.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] +#define ZENITH_DAY_COLOR_B 0.36 // [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.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] + +#define ZENITH_NIGHT_COLOR_R 0.014 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define ZENITH_NIGHT_COLOR_G 0.019 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define ZENITH_NIGHT_COLOR_B 0.025 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] + +#define HORIZON_SUNSET_COLOR_R 1.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.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] +#define HORIZON_SUNSET_COLOR_G 0.65 // [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.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] +#define HORIZON_SUNSET_COLOR_B 0.38 // [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.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] + +#define HORIZON_DAY_COLOR_R 0.65 // [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.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] +#define HORIZON_DAY_COLOR_G 0.91 // [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.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] +#define HORIZON_DAY_COLOR_B 1.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 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] + +#define HORIZON_NIGHT_COLOR_R 0.021 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define HORIZON_NIGHT_COLOR_G 0.031 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] +#define HORIZON_NIGHT_COLOR_B 0.039 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] + +#define WATER_COLOR_R 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 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] +#define WATER_COLOR_G 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 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] +#define WATER_COLOR_B 0.11 // [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.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] + +#define NV_COLOR_R 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] +#define NV_COLOR_G 0.8 // [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 NV_COLOR_B 1.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 OMNI_TINT_CUSTOM 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 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] + +#ifdef FOG_ACTIVE + // Don't remove +#endif + +#if NETHER_FOG_DISTANCE == 1 + #define NETHER_SIGHT min(far / 2, 96) +#else + #define NETHER_SIGHT far +#endif + +// Reflection parameters +#define RAYMARCH_STEPS 10 + +// Cloud parameters +#if CLOUD_VOL_STYLE == 1 + #define CLOUD_PLANE_SUP 380.0 + #define CLOUD_PLANE_CENTER 335.0 + #define CLOUD_PLANE 319.0 +#else + #define CLOUD_PLANE_SUP 590.0 + #define CLOUD_PLANE_CENTER 375.0 + #define CLOUD_PLANE 319.0 +#endif + +#define CLOUD_STEPS_AVG 10 // [7 8 9 10 11 12 13 14 15 16] Samples per pixel (high performance impact). +#define CLOUD_SPEED 0 // [0 1 2] Change the speed of clouds for demo purposes. + +#if CLOUD_VOL_STYLE == 1 + #if CLOUD_SPEED == 0 + #define CLOUD_HI_FACTOR 0.001388888888888889 + #define CLOUD_LOW_FACTOR 0.0002777777777777778 + #elif CLOUD_SPEED == 1 + #define CLOUD_HI_FACTOR 0.01388888888888889 + #define CLOUD_LOW_FACTOR 0.002777777777777778 + #elif CLOUD_SPEED == 2 + #define CLOUD_HI_FACTOR 0.1388888888888889 + #define CLOUD_LOW_FACTOR 0.02777777777777778 + #endif +#else + #if CLOUD_SPEED == 0 + #define CLOUD_HI_FACTOR 0.0016666666666666666 + #define CLOUD_LOW_FACTOR 0.0002777777777777778 + #elif CLOUD_SPEED == 1 + #define CLOUD_HI_FACTOR 0.016666666666666666 + #define CLOUD_LOW_FACTOR 0.002777777777777778 + #elif CLOUD_SPEED == 2 + #define CLOUD_HI_FACTOR 0.16666666666666666 + #define CLOUD_LOW_FACTOR 0.02777777777777778 + #endif +#endif + +// Godrays +#define GODRAY_STEPS 6 +#define CHEAP_GODRAY_SAMPLES 4 + +// Color blindness +// #define COLOR_BLINDNESS // Enable color blindness correction +#define COLOR_BLIND_MODE 0 // [0 1 2] Set color blindness type + +// Sun rotation angle +const float sunPathRotation = -25.0; // [-40.0 -35.0 -30.0 -25.0 -20.0 -15.0 -10.0 -5.0 0.0 5.0 10.0 15.0 20.0 25.0 30.0 35.0 40.0] + +#define SHADOW_DISTANCE_SLIDER 1 // [0 1 2] +#define SHADOW_QTY_SLIDER 2 // [1 2 3] + +#define SHADOW_CASTING // Enable or disable shadows. Configure quality in advanced options. + +#ifdef SHADOW_CASTING + // Shadow parameters + const float shadowIntervalSize = 3.0; + + const bool shadowtex0Mipmap = false; + const bool shadowtex1Mipmap = false; + const bool shadowColor0Mipmap = false; + const bool shadowColor1Mipmap = false; + + const bool shadowtex0Clear = false; + const bool shadowtex1Clear = false; + const bool shadowcolor0Clear = false; + const bool shadowcolor1Clear = false; + + #ifndef NO_SHADOWS + #if SHADOW_DISTANCE_SLIDER == 0 + #if SHADOW_QTY_SLIDER == 1 + #define SHADOW_LIMIT 75.0 + const int shadowMapResolution = 300; + const float shadowDistance = 75.0; + #define SHADOW_FIX_FACTOR 0.3 + #define SHADOW_DIST 0.75 + + #elif SHADOW_QTY_SLIDER == 2 + #define SHADOW_LIMIT 75.0 + const int shadowMapResolution = 600; + const float shadowDistance = 75.0; + #define SHADOW_FIX_FACTOR 0.15 + #define SHADOW_DIST 0.81 + + #elif SHADOW_QTY_SLIDER == 3 + #define SHADOW_LIMIT 75.0 + const int shadowMapResolution = 1200; + const float shadowDistance = 75.0; + #define SHADOW_FIX_FACTOR 0.05 + #define SHADOW_DIST 0.81 + + #endif + + #elif SHADOW_DISTANCE_SLIDER == 1 + #if SHADOW_QTY_SLIDER == 1 + #define SHADOW_LIMIT 105.0 + const int shadowMapResolution = 420; + const float shadowDistance = 105.0; + #define SHADOW_FIX_FACTOR 0.28 + #define SHADOW_DIST 0.75 + + #elif SHADOW_QTY_SLIDER == 2 + #define SHADOW_LIMIT 105.0 + const int shadowMapResolution = 840; + const float shadowDistance = 105.0; + #define SHADOW_FIX_FACTOR 0.07 + #define SHADOW_DIST 0.83 + + #elif SHADOW_QTY_SLIDER == 3 + #define SHADOW_LIMIT 105.0 + const int shadowMapResolution = 1680; + const float shadowDistance = 105.0; + #define SHADOW_FIX_FACTOR 0.03 + #define SHADOW_DIST 0.83 + + #endif + + #elif SHADOW_DISTANCE_SLIDER == 2 + #if SHADOW_QTY_SLIDER == 1 + #define SHADOW_LIMIT 255.0 + const int shadowMapResolution = 1020; + const float shadowDistance = 255.0; + #define SHADOW_FIX_FACTOR 0.12 + #define SHADOW_DIST 0.8 + + #elif SHADOW_QTY_SLIDER == 2 + #define SHADOW_LIMIT 255.0 + const int shadowMapResolution = 2040; + const float shadowDistance = 255.0; + #define SHADOW_FIX_FACTOR 0.03 + #define SHADOW_DIST 0.85 + + #elif SHADOW_QTY_SLIDER == 3 + #define SHADOW_LIMIT 255.0 + const int shadowMapResolution = 4080; + const float shadowDistance = 255.0; + #define SHADOW_FIX_FACTOR 0.015 + #define SHADOW_DIST 0.87 + + #endif + #endif + + #if VOL_LIGHT == 2 + const float shadowDistanceRenderMul = -1.0; + #else + const float shadowDistanceRenderMul = 1.0; + #endif + + const bool shadowHardwareFiltering = true; + const bool shadowtex1Nearest = false; + #endif + +#else + #define SHADOW_DIST 0.0 + #define SHADOW_RES 0 + const int shadowMapResolution = 100; + const float shadowDistance = 60.0; +#endif + +// Redefined constants +#if AO == 0 + const float ambientOcclusionLevel = 0.7; +#else + const float ambientOcclusionLevel = 0.0; +#endif + +const float eyeBrightnessHalflife = 6.0; +const float centerDepthHalflife = 0.66; + +// DH exclusive +#if defined DISTANT_HORIZONS + #define TRANSITION_DH_SUP 0.05 + #define TRANSITION_DH_INF 0.90 +#endif \ No newline at end of file diff --git a/shaders/shaders.original.properties b/shaders/shaders.original.properties new file mode 100644 index 00000000..558715c4 --- /dev/null +++ b/shaders/shaders.original.properties @@ -0,0 +1,210 @@ +# MakeUp - shader.properties + +#Profiles +profile.no_effects= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=0 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=0 SUN_REFLECTION=0 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS +profile.shadowless_low= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS +profile.shadowless_medium= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.shadowless_high= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.extreme= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS + +# Default forced options +vignette = false +separateAo = false +oldLighting = false +dynamicHandLight = true +oldHandLight = false +underwaterOverlay = false +sun = true +moon = true +frustum.culling = true +shadow.culling = true +particles.before.deferred = true + +#if V_CLOUDS > 0 + clouds = off +#else + clouds = fancy +#endif + +texture.gbuffers.noisetex = textures/water_256_RG_8bit.png + +#if CLOUD_VOL_STYLE == 0 + texture.gbuffers.gaux2 = textures/clouds_natural_512_R_8bit.png + texture.deferred.gaux2 = textures/clouds_natural_512_R_8bit.png +#else + texture.gbuffers.gaux2 = textures/clouds_blocky_512_R_8bit.png + texture.deferred.gaux2 = textures/clouds_blocky_512_R_8bit.png +#endif + +# texture.deferred.colortex0 = textures/bluenoise_64.png + +program.shadow.enabled=SHADOW_CASTING +program.world0/shadow.enabled=SHADOW_CASTING +program.world1/shadow.enabled=SHADOW_CASTING +program.world-1/shadow.enabled=SHADOW_CASTING + +# Config main screen +screen.columns = 3 +screen = ACERCADE WAVING COLOR_SCHEME BLOOM REFLECTION_SLIDER AO SUN_REFLECTION SHADOW_CASTING V_CLOUDS CLOUD_REFLECTION COLORED_SHADOW AA_TYPE REFRACTION VOL_LIGHT DOF MATERIAL_GLOSS CHROMA_ABER MOTION_BLUR [ADVANCED_SCREEN] + +# Sub-screens: +screen.ADVANCED_SCREEN.columns=3 +screen.ADVANCED_SCREEN = [COMPATIBILITY_SCREEN] [ACCESIBILITY_SCREEN] [CUSTOM_COLORS_SCREEN] [SHADOWS_SCREEN] [DOF_SCREEN] [AO_SCREEN] [WATER_SCREEN] [POST_SCREEN] [CLOUDS_SCREEN] [LIGHT_SCREEN] [FOG_SCREEN] [MOTION_BLUR_SCREEN] + +screen.COMPATIBILITY_SCREEN = USE_BASIC_SH BLACK_ENTITY_FIX DEBUG_MODE +screen.SHADOWS_SCREEN = SHADOW_TYPE SHADOW_BLUR SHADOW_DISTANCE_SLIDER SHADOW_QTY_SLIDER +screen.DOF_SCREEN = DOF_STRENGTH +screen.AO_SCREEN = AOSTEPS AO_STRENGTH +screen.WATER_SCREEN = WATER_ABSORPTION WATER_TEXTURE VANILLA_WATER WATER_COLOR_SOURCE WATER_TURBULENCE +screen.POST_SCREEN = BLOOM_SAMPLES CHROMA_ABER_STRENGTH +screen.CLOUDS_SCREEN = CLOUD_SPEED CLOUD_STEPS_AVG CLOUD_VOL_STYLE END_CLOUDS sunPathRotation +screen.LIGHT_SCREEN = AVOID_DARK_LEVEL NIGHT_BRIGHT BLOCKLIGHT_TEMP DYN_HAND_LIGHT +screen.FOG_SCREEN = FOG_ACTIVE FOG_ADJUST NETHER_FOG_DISTANCE +screen.MOTION_BLUR_SCREEN = MOTION_BLUR_STRENGTH MOTION_BLUR_SAMPLES +screen.ACCESIBILITY_SCREEN = COLOR_BLINDNESS COLOR_BLIND_MODE + +screen.CUSTOM_COLORS_DAY.columns=3 +screen.CUSTOM_COLORS_DAY = LIGHT_DAY_COLOR_R LIGHT_DAY_COLOR_G LIGHT_DAY_COLOR_B ZENITH_DAY_COLOR_R ZENITH_DAY_COLOR_G ZENITH_DAY_COLOR_B HORIZON_DAY_COLOR_R HORIZON_DAY_COLOR_G HORIZON_DAY_COLOR_B + +screen.CUSTOM_COLORS_SUNSET.columns=3 +screen.CUSTOM_COLORS_SUNSET = LIGHT_SUNSET_COLOR_R LIGHT_SUNSET_COLOR_G LIGHT_SUNSET_COLOR_B ZENITH_SUNSET_COLOR_R ZENITH_SUNSET_COLOR_G ZENITH_SUNSET_COLOR_B HORIZON_SUNSET_COLOR_R HORIZON_SUNSET_COLOR_G HORIZON_SUNSET_COLOR_B + +screen.CUSTOM_COLORS_NIGHT.columns=3 +screen.CUSTOM_COLORS_NIGHT = LIGHT_NIGHT_COLOR_R LIGHT_NIGHT_COLOR_G LIGHT_NIGHT_COLOR_B ZENITH_NIGHT_COLOR_R ZENITH_NIGHT_COLOR_G ZENITH_NIGHT_COLOR_B HORIZON_NIGHT_COLOR_R HORIZON_NIGHT_COLOR_G HORIZON_NIGHT_COLOR_B + +screen.CUSTOM_COLORS_WATER.columns=3 +screen.CUSTOM_COLORS_WATER = WATER_COLOR_R WATER_COLOR_G WATER_COLOR_B + +screen.CUSTOM_COLORS_NV.columns=3 +screen.CUSTOM_COLORS_NV = NV_COLOR_R NV_COLOR_G NV_COLOR_B + +screen.CUSTOM_COLORS_SCREEN.columns=1 +screen.CUSTOM_COLORS_SCREEN = [CUSTOM_COLORS_DAY] [CUSTOM_COLORS_SUNSET] [CUSTOM_COLORS_NIGHT] [CUSTOM_COLORS_WATER] [CUSTOM_COLORS_NV] OMNI_TINT_CUSTOM + +sliders = SHADOW_DISTANCE_SLIDER SHADOW_QTY_SLIDER REFLECTION_SLIDER SHADOW_BLUR DOF_STRENGTH AOSTEPS AO_STRENGTH MOTION_BLUR_STRENGTH WATER_ABSORPTION CHROMA_ABER_STRENGTH BLOOM_SAMPLES CLOUD_STEPS_AVG sunPathRotation NIGHT_BRIGHT AVOID_DARK_LEVEL WATER_TURBULENCE FOG_ADJUST MOTION_BLUR_SAMPLES BLOCKLIGHT_TEMP LIGHT_DAY_COLOR_R LIGHT_DAY_COLOR_G LIGHT_DAY_COLOR_B ZENITH_DAY_COLOR_R ZENITH_DAY_COLOR_G ZENITH_DAY_COLOR_B HORIZON_DAY_COLOR_R HORIZON_DAY_COLOR_G HORIZON_DAY_COLOR_B LIGHT_SUNSET_COLOR_R LIGHT_SUNSET_COLOR_G LIGHT_SUNSET_COLOR_B ZENITH_SUNSET_COLOR_R ZENITH_SUNSET_COLOR_G ZENITH_SUNSET_COLOR_B HORIZON_SUNSET_COLOR_R HORIZON_SUNSET_COLOR_G HORIZON_SUNSET_COLOR_B LIGHT_NIGHT_COLOR_R LIGHT_NIGHT_COLOR_G LIGHT_NIGHT_COLOR_B ZENITH_NIGHT_COLOR_R ZENITH_NIGHT_COLOR_G ZENITH_NIGHT_COLOR_B HORIZON_NIGHT_COLOR_R HORIZON_NIGHT_COLOR_G HORIZON_NIGHT_COLOR_B WATER_COLOR_R WATER_COLOR_G WATER_COLOR_B NV_COLOR_R NV_COLOR_G NV_COLOR_B OMNI_TINT_CUSTOM + +# Custom uniforms ----- + +# Many values are precalculated to avoid their later or repetitive calculation. + +# Pixel size +uniform.float.pixel_size_x = 1.0 / viewWidth +uniform.float.pixel_size_y = 1.0 / viewHeight +uniform.float.inv_aspect_ratio = 1.0 / aspectRatio + +# Time constants +variable.float.hour_world = worldTime * 0.001 +uniform.float.day_moment = hour_world * 0.04166666666666667 + +# Day color mixer (for shadows) - This formula allows graphing the function that is calculated later. +# It allows setting values depending on the time of day. Particularly interesting are the transitions +# from day to night and vice versa, which are often used to indicate the intensity of the shadow +# (when it is produced by the moon instead of the sun), and other similar things. +# f(x) = min(−((x−.25)^2)∙20 + 1.25, 1) +# g(x) = min(−((x−.75)^2)∙50 + 3.125, 1) + +variable.float.moment_aux = day_moment - 0.25 +variable.float.moment_aux_2 = moment_aux * moment_aux +uniform.float.day_mixer = clamp(-moment_aux_2 * 20.0 + 1.25, 0.0, 1.0) + +variable.float.moment_aux_3 = day_moment - 0.75 +variable.float.moment_aux_4 = moment_aux_3 * moment_aux_3 +uniform.float.night_mixer = clamp(-moment_aux_4 * 50.0 + 3.125, 0.0, 1.0) + +# Day color mixer (for volumetric light) - "Similar to the previous case, but applied to values +# dependent on the time of day for volumetric lighting. + +variable.float.moment_aux_5 = (day_moment * 4.0) - 1.0 +variable.float.moment_aux_6 = moment_aux_5 * moment_aux_5 * moment_aux_5 * moment_aux_5 +variable.float.day_vol_mixer = clamp(((-moment_aux_6 + 1.0) * 7.0) + 1.0, 1.0, 8.0) + +variable.float.moment_aux_7 = (day_moment * 4.0) - 3.0 +variable.float.moment_aux_8 = moment_aux_7 * moment_aux_7 * moment_aux_7 * moment_aux_7 +variable.float.night_vol_mixer = clamp(((-moment_aux_8 + 1.0) * 7.0) + 1.0, 1.0, 8.0) + +uniform.float.vol_mixer = max(day_vol_mixer, night_vol_mixer) + +# Light mix - Similar to the previous cases, a value that depends on the time of day +# to adjust various different parameters. +variable.float.light_mix_a = if((worldTime >= 0 && worldTime < 12485) || worldTime >= 23515, 1.0, 0.0) +variable.float.light_mix_b = if(worldTime >= 12485 && worldTime < 13085, 1.0 - ((worldTime - 12485) * 0.0016666666666666668), 0.0) +variable.float.light_mix_c = 0.0 +variable.float.light_mix_d = if(worldTime >= 22915 && worldTime < 23515, (worldTime - 22915) * 0.0016666666666666668, 0.0) +variable.float.light_mix_e = max(light_mix_a, light_mix_b) +variable.float.light_mix_f = max(light_mix_c, light_mix_d) +uniform.float.light_mix = max(light_mix_e, light_mix_f) + +# Frame modulus +uniform.int.frame_mod = fmod(frameCounter, 10) + +# TAA OFFSET - The offset for TAA is precalculated here. +# It is based on a pentagon (repeated twice as it is a multiple of the 10-frame module.) +# The traversal goes from one vertex of the pentagon to another at the opposite end, +# so that the traversal between different points is maximized and the images vary +# as much as possible from one to the next. It helps to make the flickering of the image +# so fast that it is "absorbed" and better masked by the TAA history. + +#if AA_TYPE > -1 + # Pentagon + uniform.vec2.taa_offset = vec2((if( \ + frame_mod == 0, 0.7071067811865476, \ + frame_mod == 1, -0.5720614028176843, \ + frame_mod == 2, 0.2185080122244104, \ + frame_mod == 3, 0.21850801222441057, \ + frame_mod == 4, -0.5720614028176845, \ + frame_mod == 5, 0.7071067811865476, \ + frame_mod == 6, -0.5720614028176843, \ + frame_mod == 7, 0.2185080122244104, \ + frame_mod == 8, 0.21850801222441057, \ + frame_mod == 9, -0.5720614028176845, \ + 0.0)) * pixel_size_x, \ + (if( \ + frame_mod == 0, 0.0, \ + frame_mod == 1, 0.4156269377774535, \ + frame_mod == 2, -0.6724985119639574, \ + frame_mod == 3, 0.6724985119639574, \ + frame_mod == 4, -0.4156269377774534, \ + frame_mod == 5, 0.0, \ + frame_mod == 6, 0.4156269377774535, \ + frame_mod == 7, -0.6724985119639574, \ + frame_mod == 8, 0.6724985119639574, \ + frame_mod == 9, -0.4156269377774534, \ + 0.0)) * pixel_size_y) + + # Dither shift - When Temporal sampling is active, dithering patterns change over time, + # but not randomly. The dithering pattern remains fixed, but the assigned + # value to each point changes by adding a value defined here, so that they + # "rotate" in a controlled manner within the range of 0 to 1. + # When the sum exceeds 1.0, only the mantissa is taken. The changes are not completely random. + # They are incremental, but not by a fixed amount, but rather a fixed amount + # that was slightly altered by randomness. This only works in recent versions + # of Minecraft/Optifine. For older versions, a mechanism that depends on the + # uniform "frame_mod" is used to calculate the increment. + uniform.float.dither_shift = if( \ + frame_mod == 0, 0.0, \ + frame_mod == 1, 0.9, \ + frame_mod == 2, 0.5, \ + frame_mod == 3, 0.8, \ + frame_mod == 4, 0.3, \ + frame_mod == 5, 0.7, \ + frame_mod == 6, 0.1, \ + frame_mod == 7, 0.6, \ + frame_mod == 8, 0.4, \ + frame_mod == 9, 0.2, \ + 0.0) +#endif + +# FOV - A precalculated value related to FOV +uniform.float.fov_y_inv = 1.0 / atan(1.0 / gbufferProjection.1.1) * 0.5 + +# float horizontalFOV = atan(1.0 / gbufferProjection[0].x); +# float verticalFOV = atan(1.0 / gbufferProjection[1].y); <-- fov_y_inv + +#ifdef DISTANT_HORIZONS +dhShadow.enabled = false +blend.dh_water=SRC_ALPHA ONE_MINUS_SRC_ALPHA ONE ONE_MINUS_SRC_ALPHA +#endif \ No newline at end of file diff --git a/shaders/src/light_vertex.glsl b/shaders/src/light_vertex.glsl index 6cbd14be..022985aa 100644 --- a/shaders/src/light_vertex.glsl +++ b/shaders/src/light_vertex.glsl @@ -143,6 +143,6 @@ float omni_strength = (direct_light_strength * .125) + 1.0; #ifdef EMMISIVE_V if (is_fake_emmisor > 0.5) { - direct_light_strength = 10.0; + omni_light = vec3(0.45); } #endif \ No newline at end of file From 224459bb29bcc50b03a909e17adc23f9a64eb0d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Thu, 24 Apr 2025 01:49:52 -0600 Subject: [PATCH 040/147] 1.21.5 blocks --- shaders/block.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shaders/block.properties b/shaders/block.properties index 32e00251..abba260f 100644 --- a/shaders/block.properties +++ b/shaders/block.properties @@ -3,7 +3,7 @@ #if MC_VERSION >= 11300 # GRASS LIKE ENTITIES - block.10031 = minecraft:cherry_sapling minecraft:torchflower minecraft:short_grass minecraft:grass minecraft:fern minecraft:seagrass biomesoplenty:dune_grass biomesoplenty:dead_grass biomesoplenty:desert_grass biomesoplenty:sprout biomesoplenty:bush environmental:mycelium_sprouts upgrade_aquatic:blue_pickerelweed upgrade_aquatic:purple_pickerelweed byg:beach_grass byg:clover_patch byg:flower_patch byg:horseweed byg:leaf_pile byg:prairie_grass byg:reeds byg:short_beach_grass byg:short_grass byg:tall_prairie_grass byg:weed_grass byg:wilted_grass byg:winter_grass ecotones:clover ecotones:reeds ecotones:sandy_grass ecotones:short_grass terrestria:cattail terrestria:dead_grass terrestria:sakura_leaf_pile terrestria:tall_cattail wildworld:acacia_leaf_pile wildworld:birch_leaf_pile wildworld:dark_oak_leaf_pile wildworld:jungle_leaf_pile wildworld:oak_leaf_pile wildworld:spruce_leaf_pile biomesoplenty:bush minecraft:nether_sprouts minecraft:warped_roots minecraft:crimson_roots projectvibrantjourneys:beach_grass projectvibrantjourneys:short_grass minecraft:oak_sapling minecraft:spruce_sapling minecraft:birch_sapling minecraft:jungle_sapling minecraft:acacia_sapling minecraft:dark_oak_sapling minecraft:dead_bush minecraft:dandelion minecraft:poppy minecraft:blue_orchid minecraft:allium minecraft:azure_bluet minecraft:red_tulip minecraft:orange_tulip minecraft:white_tulip minecraft:pink_tulip minecraft:oxeye_daisy minecraft:cornflower minecraft:lily_of_the_valley minecraft:wither_rose minecraft:sweet_berry_bush biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom atmospheric:rosewood_sapling atmospheric:morado_sapling atmospheric:yucca_sapling atmospheric:kousa_sapling atmospheric:aspen_sapling atmospheric:grimwood_sapling atmospheric:warm_monkey_brush atmospheric:hot_monkey_brush atmospheric:scalding_monkey_brush atmospheric:yucca_flower atmospheric:gilia autumnity:red_maple_sapling autumnity:orange_maple_sapling autumnity:yellow_maple_sapling autumnity:maple_sapling autumnity:autumn_crocus earthmobsmod:buttercup environmental:willow_sapling environmental:cherry_sapling environmental:pink_wisteria_sapling environmental:blue_wisteria_sapling environmental:purple_wisteria_sapling environmental:white_wisteria_sapling farmersdelight:wild_cabbages farmersdelight:wild_onions farmersdelight:wild_tomatoes farmersdelight:wild_carrots farmersdelight:wild_potatoes farmersdelight:wild_beetroots neapolitan:small_banana_frond neapolitan:banana_frond neapolitan:large_banana_frond upgrade_aquatic:river_sapling upgrade_aquatic:beachgrass upgrade_aquatic:white_searocket upgrade_aquatic:pink_searocket environmental:cattail environmental:cartwheel environmental:bluebell environmental:violet environmental:dianthus environmental:red_lotus_flower environmental:white_lotus_flower environmental:yellow_hibiscus environmental:orange_hibiscus environmental:red_hibiscus environmental:pink_hibiscus environmental:magenta_hibiscus environmental:purple_hibiscus buzzier_bees:buttercup buzzier_bees:white_clover buzzier_bees:pink_clover neapolitan:strawberry_pips biomesoplenty:origin_sapling biomesoplenty:flowering_oak_sapling biomesoplenty:rainbow_birch_sapling biomesoplenty:yellow_autumn_sapling biomesoplenty:orange_autumn_sapling biomesoplenty:maple_sapling biomesoplenty:fir_sapling biomesoplenty:redwood_sapling biomesoplenty:white_cherry_sapling biomesoplenty:pink_cherry_sapling biomesoplenty:mahogany_sapling biomesoplenty:jacaranda_sapling biomesoplenty:palm_sapling biomesoplenty:willow_sapling biomesoplenty:dead_sapling biomesoplenty:magic_sapling biomesoplenty:umbran_sapling biomesoplenty:hellbark_sapling astralsorcery:glow_flower botania:white_mystical_flower botania:gray_mystical_flower botania:orange_mystical_flower botania:magenta_mystical_flower botania:light_blue_mystical_flower botania:light_gray_mystical_flower botania:yellow_mystical_flower botania:lime_mystical_flower botania:pink_mystical_flower botania:cyan_mystical_flower botania:purple_mystical_flower botania:blue_mystical_flower botania:brown_mystical_flower botania:green_mystical_flower botania:red_mystical_flower botania:black_mystical_flower botania:white_mushroom botania:orange_mushroom botania:magenta_mushroom botania:light_blue_mushroom botania:yellow_mushroom botania:lime_mushroom botania:pink_mushroom botania:gray_mushroom botania:light_gray_mushroom botania:cyan_mushroom botania:purple_mushroom botania:blue_mushroom botania:brown_mushroom botania:green_mushroom botania:red_mushroom botania:black_mushroom botania:hydroangeas botania:manastar botania:pure_daisy botania:endoflame botania:thermalily botania:rosa_arcana botania:munchdew botania:entropinnyum botania:kekimurus botania:gourmaryllis botania:narslimmus botania:spectrolus botania:dandelifeon botania:rafflowsia botania:shulk_me_not botania:bellethorn botania:bellethorn_chibi botania:bergamute botania:dreadthorn botania:heisei_dream botania:tigerseye botania:jaded_amaranthus botania:orechid botania:fallen_kanade botania:exoflame botania:agricarnation botania:agricarnation_chibi botania:hopperhock botania:hopperhock_chibi botania:tangleberrie botania:jiyuulia botania:rannuncarpus botania:rannuncarpus_chibi botania:hyacidus botania:pollidisiac botania:clayconia botania:clayconia_chibi botania:loonium botania:daffomill botania:vinculotus botania:spectranthemum botania:medumone botania:marimorphosis botania:marimorphosis_chibi botania:bubbell botania:bubbell_chibi botania:solegnolia botania:solegnolia_chibi botania:orechid_ignem terrestria:tiny_cactus pamhc2trees:apple_sapling pamhc2trees:avocado_sapling pamhc2trees:candlenut_sapling pamhc2trees:cherry_sapling pamhc2trees:chestnut_sapling pamhc2trees:gooseberry_sapling pamhc2trees:lemon_sapling pamhc2trees:nutmeg_sapling pamhc2trees:orange_sapling pamhc2trees:peach_sapling pamhc2trees:pear_sapling pamhc2trees:plum_sapling pamhc2trees:walnut_sapling pamhc2trees:spiderweb_sapling pamhc2trees:hazelnut_sapling pamhc2trees:pawpaw_sapling pamhc2trees:soursop_sapling pamhc2trees:almond_sapling pamhc2trees:apricot_sapling pamhc2trees:banana_sapling pamhc2trees:cashew_sapling pamhc2trees:cinnamon_sapling pamhc2trees:coconut_sapling pamhc2trees:date_sapling pamhc2trees:dragonfruit_sapling pamhc2trees:durian_sapling pamhc2trees:fig_sapling pamhc2trees:grapefruit_sapling pamhc2trees:lime_sapling pamhc2trees:mango_sapling pamhc2trees:olive_sapling pamhc2trees:papaya_sapling pamhc2trees:paperbark_sapling pamhc2trees:pecan_sapling pamhc2trees:peppercorn_sapling pamhc2trees:persimmon_sapling pamhc2trees:pistachio_sapling pamhc2trees:pomegranate_sapling pamhc2trees:starfruit_sapling pamhc2trees:vanillabean_sapling pamhc2trees:breadfruit_sapling pamhc2trees:guava_sapling pamhc2trees:jackfruit_sapling pamhc2trees:lychee_sapling pamhc2trees:passionfruit_sapling pamhc2trees:rambutan_sapling pamhc2trees:tamarind_sapling pamhc2trees:maple_sapling pamhc2trees:pinenut_sapling byg:purple_bulbis_anomaly byg:blue_bulbis_anomaly byg:embur_wart byg:cryptic_bramble biomesoplenty:glowshroom biomesoplenty:toadstool biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom biomesoplenty:mangrove_root biomesoplenty:reed biomesoplenty:sprout biomesoplenty:bush pamhc2crops:aridgarden pamhc2crops:frostgarden pamhc2crops:shadedgarden pamhc2crops:soggygarden pamhc2crops:tropicalgarden pamhc2crops:windygarden pamhc2crops:pamamaranthcrop pamhc2crops:pambarleycrop pamhc2crops:pambeancrop pamhc2crops:pamchickpeacrop pamhc2crops:pamcorncrop pamhc2crops:pamlentilcrop pamhc2crops:pammilletcrop pamhc2crops:pamoatcrop pamhc2crops:pamquinoacrop pamhc2crops:pamricecrop pamhc2crops:pamryecrop pamhc2crops:pamsoybeancrops pamhc2crops:pamcottoncrop pamhc2crops:pamflaxcrop pamhc2crops:pamkenafcrop pamhc2crops:pamjutecrop pamhc2crops:pamsisalcrop pamhc2crops:pamartichokecrop pamhc2crops:pamasparaguscrop pamhc2crops:pambellpeppercrop pamhc2crops:pambroccolicrop pamhc2crops:pambrusselsproutcrop pamhc2crops:pamcabbagecrop pamhc2crops:pamcauliflowercrop pamhc2crops:pamcelerycrop pamhc2crops:pamchilipeppercrop pamhc2crops:pamcucumbercrop pamhc2crops:pameggplantcrop pamhc2crops:pamkalecrops pamhc2crops:pamlettucecrop pamhc2crops:pamokracrop pamhc2crops:pampeascrop pamhc2crops:pamspinachcrop pamhc2crops:pamtomatillocrop pamhc2crops:pamtomatocrop pamhc2crops:pamwintersquashcrop pamhc2crops:pamzucchinicrop pamhc2crops:pamarrowrootcrop pamhc2crops:pamcassavacrop pamhc2crops:pamgarliccrop pamhc2crops:pamjicamacrop pamhc2crops:pamleekcrop pamhc2crops:pamkohlrabicrop pamhc2crops:pamonioncrop pamhc2crops:pamparsnipcrop pamhc2crops:pampeanutcrop pamhc2crops:pamradishcrop pamhc2crops:pamrhubarbcrop pamhc2crops:pamrutabagacrop pamhc2crops:pamscallioncrop pamhc2crops:pamsweetpotatocrop pamhc2crops:pamtarocrop pamhc2crops:pamturnipcrop pamhc2crops:pamwaterchestnutcrop pamhc2crops:pamblackberrycrop pamhc2crops:pamblueberrycrop pamhc2crops:pamcactusfruitcrop pamhc2crops:pamcandleberrycrop pamhc2crops:pamcantaloupecrop pamhc2crops:pamcranberrycrop pamhc2crops:pamelderberrycrop pamhc2crops:pamgrapecrop pamhc2crops:pamgreengrapecrop pamhc2crops:pamhuckleberrycrop pamhc2crops:pamjuniperberrycrop pamhc2crops:pamkiwicrop pamhc2crops:pammullberrycrop pamhc2crops:pampineapplecrop pamhc2crops:pamraspberrycrop pamhc2crops:pamstrawberrycrop pamhc2crops:pamcoffeebeancrop pamhc2crops:pamtealeafcrop pamhc2crops:pamagavecrop pamhc2crops:pamwhitemushroomcrop pamhc2crops:pamgingercrop pamhc2crops:pamsesamecrop pamhc2crops:pamspiceleafcrop pamhc2crops:pammustardcrop byg:lament_sprouts byg:synthian_fungus byg:blue_glowcane byg:pink_glowcane byg:purple_glowcane byg:red_glowcane byg:warped_bush byg:blue_glowshroom byg:purple_glowshroom byg:scorched_bush byg:soul_shroom byg:soul_shroom_spore_end byg:death_cap byg:weeping_roots byg:nether_bristle byg:synthian_sprout byg:synthian_roots byg:hanging_synthian_roots byg:embur_sprouts byg:embur_roots byg:ivis_roots byg:ivis_sprout byg:bulbis_sprouts byg:ether_bush byg:thereal_bellflower byg:nightshade_sprouts byg:nightshade_roots byg:oddity_bush byg:shulkren_fungus byg:vermillion_sculk_tendrils byg:vermillion_sculk_growth byg:green_mushroom byg:weeping_milkcap byg:wood_blewit byg:black_puff byg:crimson_berry_bush byg:blueberry_bush byg:nightshade_berry_bush byg:winter_succulent byg:allium_flower_bush byg:alpine_bellflower byg:amaranth byg:angelica byg:begonia byg:bistort byg:black_rose byg:blue_sage byg:california_poppy byg:crocus byg:cyan_amaranth byg:cyan_rose byg:cyan_tulip byg:daffodil byg:fairy_slipper byg:firecracker_flower_bush byg:green_tulip byg:guzmania byg:incan_lily byg:iris byg:kovan_flower byg:lazarus_bellflower byg:lolipop_flower byg:magenta_amaranth byg:magenta_tulip byg:orange_amaranth byg:orange_daisy byg:osiria_rose byg:peach_leather_flower byg:pink_allium byg:pink_allium_flower_bush byg:pink_anemone byg:pink_daffodil byg:pink_orchid byg:protea_flower byg:purple_amaranth byg:purple_orchid byg:purple_sage byg:purple_tulip byg:red_cornflower byg:red_orchid byg:richea byg:rose byg:snowdrops byg:silver_vase_flower byg:torch_ginger byg:violet_leather_flower byg:white_anemone byg:white_sage byg:white_cyclamen byg:winter_rose byg:winter_scilla byg:yellow_daffodil byg:yellow_tulip byg:horseweed byg:winter_cyclamen cutecore:cherry_leaf_litter cutecore:cherry_wood_sapling cutecore:wisteria_sapling cutecore:wisteria_leaf_litter cutecore:lemon_leaf_litter cutecore:lemon_sapling cutecore:hyacinth cutecore:lotus_flower cutecore:violets cutecore:pink_rose cutecore:white_rose cutecore:rose cutecore:forget_me_nots cutecore:pink_carnation cutecore:red_carnation cutecore:white_carnation forbidden_arcanus:yellow_orchid forbidden_arcanus:golden_orchid immersiveengineering:hemp:growth=bottom0 immersiveengineering:hemp:growth=bottom1 immersiveengineering:hemp:growth=bottom2 immersiveengineering:hemp:growth=bottom3 simplefarming:apple_sapling simplefarming:apricot_sapling simplefarming:banana_sapling simplefarming:cherry_sapling simplefarming:mango_sapling simplefarming:olive_sapling simplefarming:orange_sapling simplefarming:pear_sapling simplefarming:plum_sapling simplefarming:barley_crop simplefarming:cassava_crop simplefarming:corn_crop simplefarming:cotton_crop simplefarming:cross_crop simplefarming:cucumber_crop simplefarming:cumin_plant simplefarming:eggplant_crop simplefarming:ginger_crop simplefarming:honeydew_crop simplefarming:kenaf_crop simplefarming:lettuce_crop simplefarming:oat_crop simplefarming:onion_crop simplefarming:pea_crop simplefarming:peanut_crop simplefarming:pepper_crop simplefarming:quinoa_plant simplefarming:radish_crop simplefarming:rice_crop simplefarming:rye_crop simplefarming:scrop simplefarming:hcrop simplefarming:marshmallow_crop simplefarming:sunflower_plant simplefarming:sorghum_crop simplefarming:soybean_crop simplefarming:spinach_crop simplefarming:sweet_potato_crop simplefarming:tomato_crop simplefarming:turnip_crop simplefarming:wild_crop simplefarming:yam_crop simplefarming:zucchini_crop byg:aspen_sapling byg:baobab_sapling byg:blue_enchanted_sapling byg:green_enchanted_sapling byg:pink_cherry_sapling byg:white_cherry_sapling byg:cika_sapling byg:cypress_sapling byg:ebony_sapling byg:ether_sapling byg:fir_sapling byg:aspen_sapling byg:holly_berry_sapling byg:holly_sapling byg:jacaranda_sapling byg:flowering_jacaranda_sapling byg:indigo_jacaranda_sapling byg:indigo_flowering_jacaranda_sapling byg:lament_sapling byg:mahogany_sapling byg:mangrove_sapling byg:maple_sapling byg:red_maple_sapling byg:silver_maple_sapling byg:nightshade_sapling byg:flowering_nightshade_sapling byg:palm_sapling byg:palo_verde_sapling byg:flowering_palo_verde_sapling byg:pine_sapling byg:rainbow_eucalyptus_sapling byg:redwood_sapling byg:pine_sapling byg:skyris_sapling byg:green_apple_skyris_sapling byg:willow_sapling byg:witch_hazel_sapling byg:blooming_witch_hazel_sapling byg:zelkova_sapling byg:withering_oak_sapling byg:araucaria_sapling byg:blue_spruce_sapling byg:brown_birch_sapling byg:brown_oak_sapling byg:zelkova_sapling byg:brown_zelkova_sapling byg:joshua_sapling byg:ripe_joshua_sapling byg:orange_birch_sapling byg:orange_oak_sapling byg:orange_spruce_sapling byg:orchard_sapling byg:flowering_orchard_sapling byg:ripe_orchard_sapling byg:red_birch_sapling byg:red_oak_sapling byg:red_spruce_sapling byg:yellow_birch_sapling byg:yellow_spruce_sapling byg:green_mushroom occultism:otherworld_sapling_natural occultism:otherworld_sapling integrateddynamics:menril_sapling projectvibrantjourneys:glowcap projectvibrantjourneys:crimson_nettle projectvibrantjourneys:warped_nettle twilightforest:mayapple deeperdarker:echo_sapling create_dd:rubber_sapling vegandelight:wild_soybean + block.10031 = minecraft:cherry_sapling minecraft:torchflower minecraft:short_grass minecraft:grass minecraft:fern minecraft:seagrass biomesoplenty:dune_grass biomesoplenty:dead_grass biomesoplenty:desert_grass biomesoplenty:sprout biomesoplenty:bush environmental:mycelium_sprouts upgrade_aquatic:blue_pickerelweed upgrade_aquatic:purple_pickerelweed byg:beach_grass byg:clover_patch byg:flower_patch byg:horseweed byg:leaf_pile byg:prairie_grass byg:reeds byg:short_beach_grass byg:short_grass byg:tall_prairie_grass byg:weed_grass byg:wilted_grass byg:winter_grass ecotones:clover ecotones:reeds ecotones:sandy_grass ecotones:short_grass terrestria:cattail terrestria:dead_grass terrestria:sakura_leaf_pile terrestria:tall_cattail wildworld:acacia_leaf_pile wildworld:birch_leaf_pile wildworld:dark_oak_leaf_pile wildworld:jungle_leaf_pile wildworld:oak_leaf_pile wildworld:spruce_leaf_pile biomesoplenty:bush minecraft:nether_sprouts minecraft:warped_roots minecraft:crimson_roots projectvibrantjourneys:beach_grass projectvibrantjourneys:short_grass minecraft:oak_sapling minecraft:spruce_sapling minecraft:birch_sapling minecraft:jungle_sapling minecraft:acacia_sapling minecraft:dark_oak_sapling minecraft:dead_bush minecraft:dandelion minecraft:poppy minecraft:blue_orchid minecraft:allium minecraft:azure_bluet minecraft:red_tulip minecraft:orange_tulip minecraft:white_tulip minecraft:pink_tulip minecraft:oxeye_daisy minecraft:cornflower minecraft:lily_of_the_valley minecraft:wither_rose minecraft:sweet_berry_bush biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom atmospheric:rosewood_sapling atmospheric:morado_sapling atmospheric:yucca_sapling atmospheric:kousa_sapling atmospheric:aspen_sapling atmospheric:grimwood_sapling atmospheric:warm_monkey_brush atmospheric:hot_monkey_brush atmospheric:scalding_monkey_brush atmospheric:yucca_flower atmospheric:gilia autumnity:red_maple_sapling autumnity:orange_maple_sapling autumnity:yellow_maple_sapling autumnity:maple_sapling autumnity:autumn_crocus earthmobsmod:buttercup environmental:willow_sapling environmental:cherry_sapling environmental:pink_wisteria_sapling environmental:blue_wisteria_sapling environmental:purple_wisteria_sapling environmental:white_wisteria_sapling farmersdelight:wild_cabbages farmersdelight:wild_onions farmersdelight:wild_tomatoes farmersdelight:wild_carrots farmersdelight:wild_potatoes farmersdelight:wild_beetroots neapolitan:small_banana_frond neapolitan:banana_frond neapolitan:large_banana_frond upgrade_aquatic:river_sapling upgrade_aquatic:beachgrass upgrade_aquatic:white_searocket upgrade_aquatic:pink_searocket environmental:cattail environmental:cartwheel environmental:bluebell environmental:violet environmental:dianthus environmental:red_lotus_flower environmental:white_lotus_flower environmental:yellow_hibiscus environmental:orange_hibiscus environmental:red_hibiscus environmental:pink_hibiscus environmental:magenta_hibiscus environmental:purple_hibiscus buzzier_bees:buttercup buzzier_bees:white_clover buzzier_bees:pink_clover neapolitan:strawberry_pips biomesoplenty:origin_sapling biomesoplenty:flowering_oak_sapling biomesoplenty:rainbow_birch_sapling biomesoplenty:yellow_autumn_sapling biomesoplenty:orange_autumn_sapling biomesoplenty:maple_sapling biomesoplenty:fir_sapling biomesoplenty:redwood_sapling biomesoplenty:white_cherry_sapling biomesoplenty:pink_cherry_sapling biomesoplenty:mahogany_sapling biomesoplenty:jacaranda_sapling biomesoplenty:palm_sapling biomesoplenty:willow_sapling biomesoplenty:dead_sapling biomesoplenty:magic_sapling biomesoplenty:umbran_sapling biomesoplenty:hellbark_sapling astralsorcery:glow_flower botania:white_mystical_flower botania:gray_mystical_flower botania:orange_mystical_flower botania:magenta_mystical_flower botania:light_blue_mystical_flower botania:light_gray_mystical_flower botania:yellow_mystical_flower botania:lime_mystical_flower botania:pink_mystical_flower botania:cyan_mystical_flower botania:purple_mystical_flower botania:blue_mystical_flower botania:brown_mystical_flower botania:green_mystical_flower botania:red_mystical_flower botania:black_mystical_flower botania:white_mushroom botania:orange_mushroom botania:magenta_mushroom botania:light_blue_mushroom botania:yellow_mushroom botania:lime_mushroom botania:pink_mushroom botania:gray_mushroom botania:light_gray_mushroom botania:cyan_mushroom botania:purple_mushroom botania:blue_mushroom botania:brown_mushroom botania:green_mushroom botania:red_mushroom botania:black_mushroom botania:hydroangeas botania:manastar botania:pure_daisy botania:endoflame botania:thermalily botania:rosa_arcana botania:munchdew botania:entropinnyum botania:kekimurus botania:gourmaryllis botania:narslimmus botania:spectrolus botania:dandelifeon botania:rafflowsia botania:shulk_me_not botania:bellethorn botania:bellethorn_chibi botania:bergamute botania:dreadthorn botania:heisei_dream botania:tigerseye botania:jaded_amaranthus botania:orechid botania:fallen_kanade botania:exoflame botania:agricarnation botania:agricarnation_chibi botania:hopperhock botania:hopperhock_chibi botania:tangleberrie botania:jiyuulia botania:rannuncarpus botania:rannuncarpus_chibi botania:hyacidus botania:pollidisiac botania:clayconia botania:clayconia_chibi botania:loonium botania:daffomill botania:vinculotus botania:spectranthemum botania:medumone botania:marimorphosis botania:marimorphosis_chibi botania:bubbell botania:bubbell_chibi botania:solegnolia botania:solegnolia_chibi botania:orechid_ignem terrestria:tiny_cactus pamhc2trees:apple_sapling pamhc2trees:avocado_sapling pamhc2trees:candlenut_sapling pamhc2trees:cherry_sapling pamhc2trees:chestnut_sapling pamhc2trees:gooseberry_sapling pamhc2trees:lemon_sapling pamhc2trees:nutmeg_sapling pamhc2trees:orange_sapling pamhc2trees:peach_sapling pamhc2trees:pear_sapling pamhc2trees:plum_sapling pamhc2trees:walnut_sapling pamhc2trees:spiderweb_sapling pamhc2trees:hazelnut_sapling pamhc2trees:pawpaw_sapling pamhc2trees:soursop_sapling pamhc2trees:almond_sapling pamhc2trees:apricot_sapling pamhc2trees:banana_sapling pamhc2trees:cashew_sapling pamhc2trees:cinnamon_sapling pamhc2trees:coconut_sapling pamhc2trees:date_sapling pamhc2trees:dragonfruit_sapling pamhc2trees:durian_sapling pamhc2trees:fig_sapling pamhc2trees:grapefruit_sapling pamhc2trees:lime_sapling pamhc2trees:mango_sapling pamhc2trees:olive_sapling pamhc2trees:papaya_sapling pamhc2trees:paperbark_sapling pamhc2trees:pecan_sapling pamhc2trees:peppercorn_sapling pamhc2trees:persimmon_sapling pamhc2trees:pistachio_sapling pamhc2trees:pomegranate_sapling pamhc2trees:starfruit_sapling pamhc2trees:vanillabean_sapling pamhc2trees:breadfruit_sapling pamhc2trees:guava_sapling pamhc2trees:jackfruit_sapling pamhc2trees:lychee_sapling pamhc2trees:passionfruit_sapling pamhc2trees:rambutan_sapling pamhc2trees:tamarind_sapling pamhc2trees:maple_sapling pamhc2trees:pinenut_sapling byg:purple_bulbis_anomaly byg:blue_bulbis_anomaly byg:embur_wart byg:cryptic_bramble biomesoplenty:glowshroom biomesoplenty:toadstool biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom biomesoplenty:mangrove_root biomesoplenty:reed biomesoplenty:sprout biomesoplenty:bush pamhc2crops:aridgarden pamhc2crops:frostgarden pamhc2crops:shadedgarden pamhc2crops:soggygarden pamhc2crops:tropicalgarden pamhc2crops:windygarden pamhc2crops:pamamaranthcrop pamhc2crops:pambarleycrop pamhc2crops:pambeancrop pamhc2crops:pamchickpeacrop pamhc2crops:pamcorncrop pamhc2crops:pamlentilcrop pamhc2crops:pammilletcrop pamhc2crops:pamoatcrop pamhc2crops:pamquinoacrop pamhc2crops:pamricecrop pamhc2crops:pamryecrop pamhc2crops:pamsoybeancrops pamhc2crops:pamcottoncrop pamhc2crops:pamflaxcrop pamhc2crops:pamkenafcrop pamhc2crops:pamjutecrop pamhc2crops:pamsisalcrop pamhc2crops:pamartichokecrop pamhc2crops:pamasparaguscrop pamhc2crops:pambellpeppercrop pamhc2crops:pambroccolicrop pamhc2crops:pambrusselsproutcrop pamhc2crops:pamcabbagecrop pamhc2crops:pamcauliflowercrop pamhc2crops:pamcelerycrop pamhc2crops:pamchilipeppercrop pamhc2crops:pamcucumbercrop pamhc2crops:pameggplantcrop pamhc2crops:pamkalecrops pamhc2crops:pamlettucecrop pamhc2crops:pamokracrop pamhc2crops:pampeascrop pamhc2crops:pamspinachcrop pamhc2crops:pamtomatillocrop pamhc2crops:pamtomatocrop pamhc2crops:pamwintersquashcrop pamhc2crops:pamzucchinicrop pamhc2crops:pamarrowrootcrop pamhc2crops:pamcassavacrop pamhc2crops:pamgarliccrop pamhc2crops:pamjicamacrop pamhc2crops:pamleekcrop pamhc2crops:pamkohlrabicrop pamhc2crops:pamonioncrop pamhc2crops:pamparsnipcrop pamhc2crops:pampeanutcrop pamhc2crops:pamradishcrop pamhc2crops:pamrhubarbcrop pamhc2crops:pamrutabagacrop pamhc2crops:pamscallioncrop pamhc2crops:pamsweetpotatocrop pamhc2crops:pamtarocrop pamhc2crops:pamturnipcrop pamhc2crops:pamwaterchestnutcrop pamhc2crops:pamblackberrycrop pamhc2crops:pamblueberrycrop pamhc2crops:pamcactusfruitcrop pamhc2crops:pamcandleberrycrop pamhc2crops:pamcantaloupecrop pamhc2crops:pamcranberrycrop pamhc2crops:pamelderberrycrop pamhc2crops:pamgrapecrop pamhc2crops:pamgreengrapecrop pamhc2crops:pamhuckleberrycrop pamhc2crops:pamjuniperberrycrop pamhc2crops:pamkiwicrop pamhc2crops:pammullberrycrop pamhc2crops:pampineapplecrop pamhc2crops:pamraspberrycrop pamhc2crops:pamstrawberrycrop pamhc2crops:pamcoffeebeancrop pamhc2crops:pamtealeafcrop pamhc2crops:pamagavecrop pamhc2crops:pamwhitemushroomcrop pamhc2crops:pamgingercrop pamhc2crops:pamsesamecrop pamhc2crops:pamspiceleafcrop pamhc2crops:pammustardcrop byg:lament_sprouts byg:synthian_fungus byg:blue_glowcane byg:pink_glowcane byg:purple_glowcane byg:red_glowcane byg:warped_bush byg:blue_glowshroom byg:purple_glowshroom byg:scorched_bush byg:soul_shroom byg:soul_shroom_spore_end byg:death_cap byg:weeping_roots byg:nether_bristle byg:synthian_sprout byg:synthian_roots byg:hanging_synthian_roots byg:embur_sprouts byg:embur_roots byg:ivis_roots byg:ivis_sprout byg:bulbis_sprouts byg:ether_bush byg:thereal_bellflower byg:nightshade_sprouts byg:nightshade_roots byg:oddity_bush byg:shulkren_fungus byg:vermillion_sculk_tendrils byg:vermillion_sculk_growth byg:green_mushroom byg:weeping_milkcap byg:wood_blewit byg:black_puff byg:crimson_berry_bush byg:blueberry_bush byg:nightshade_berry_bush byg:winter_succulent byg:allium_flower_bush byg:alpine_bellflower byg:amaranth byg:angelica byg:begonia byg:bistort byg:black_rose byg:blue_sage byg:california_poppy byg:crocus byg:cyan_amaranth byg:cyan_rose byg:cyan_tulip byg:daffodil byg:fairy_slipper byg:firecracker_flower_bush byg:green_tulip byg:guzmania byg:incan_lily byg:iris byg:kovan_flower byg:lazarus_bellflower byg:lolipop_flower byg:magenta_amaranth byg:magenta_tulip byg:orange_amaranth byg:orange_daisy byg:osiria_rose byg:peach_leather_flower byg:pink_allium byg:pink_allium_flower_bush byg:pink_anemone byg:pink_daffodil byg:pink_orchid byg:protea_flower byg:purple_amaranth byg:purple_orchid byg:purple_sage byg:purple_tulip byg:red_cornflower byg:red_orchid byg:richea byg:rose byg:snowdrops byg:silver_vase_flower byg:torch_ginger byg:violet_leather_flower byg:white_anemone byg:white_sage byg:white_cyclamen byg:winter_rose byg:winter_scilla byg:yellow_daffodil byg:yellow_tulip byg:horseweed byg:winter_cyclamen cutecore:cherry_leaf_litter cutecore:cherry_wood_sapling cutecore:wisteria_sapling cutecore:wisteria_leaf_litter cutecore:lemon_leaf_litter cutecore:lemon_sapling cutecore:hyacinth cutecore:lotus_flower cutecore:violets cutecore:pink_rose cutecore:white_rose cutecore:rose cutecore:forget_me_nots cutecore:pink_carnation cutecore:red_carnation cutecore:white_carnation forbidden_arcanus:yellow_orchid forbidden_arcanus:golden_orchid immersiveengineering:hemp:growth=bottom0 immersiveengineering:hemp:growth=bottom1 immersiveengineering:hemp:growth=bottom2 immersiveengineering:hemp:growth=bottom3 simplefarming:apple_sapling simplefarming:apricot_sapling simplefarming:banana_sapling simplefarming:cherry_sapling simplefarming:mango_sapling simplefarming:olive_sapling simplefarming:orange_sapling simplefarming:pear_sapling simplefarming:plum_sapling simplefarming:barley_crop simplefarming:cassava_crop simplefarming:corn_crop simplefarming:cotton_crop simplefarming:cross_crop simplefarming:cucumber_crop simplefarming:cumin_plant simplefarming:eggplant_crop simplefarming:ginger_crop simplefarming:honeydew_crop simplefarming:kenaf_crop simplefarming:lettuce_crop simplefarming:oat_crop simplefarming:onion_crop simplefarming:pea_crop simplefarming:peanut_crop simplefarming:pepper_crop simplefarming:quinoa_plant simplefarming:radish_crop simplefarming:rice_crop simplefarming:rye_crop simplefarming:scrop simplefarming:hcrop simplefarming:marshmallow_crop simplefarming:sunflower_plant simplefarming:sorghum_crop simplefarming:soybean_crop simplefarming:spinach_crop simplefarming:sweet_potato_crop simplefarming:tomato_crop simplefarming:turnip_crop simplefarming:wild_crop simplefarming:yam_crop simplefarming:zucchini_crop byg:aspen_sapling byg:baobab_sapling byg:blue_enchanted_sapling byg:green_enchanted_sapling byg:pink_cherry_sapling byg:white_cherry_sapling byg:cika_sapling byg:cypress_sapling byg:ebony_sapling byg:ether_sapling byg:fir_sapling byg:aspen_sapling byg:holly_berry_sapling byg:holly_sapling byg:jacaranda_sapling byg:flowering_jacaranda_sapling byg:indigo_jacaranda_sapling byg:indigo_flowering_jacaranda_sapling byg:lament_sapling byg:mahogany_sapling byg:mangrove_sapling byg:maple_sapling byg:red_maple_sapling byg:silver_maple_sapling byg:nightshade_sapling byg:flowering_nightshade_sapling byg:palm_sapling byg:palo_verde_sapling byg:flowering_palo_verde_sapling byg:pine_sapling byg:rainbow_eucalyptus_sapling byg:redwood_sapling byg:pine_sapling byg:skyris_sapling byg:green_apple_skyris_sapling byg:willow_sapling byg:witch_hazel_sapling byg:blooming_witch_hazel_sapling byg:zelkova_sapling byg:withering_oak_sapling byg:araucaria_sapling byg:blue_spruce_sapling byg:brown_birch_sapling byg:brown_oak_sapling byg:zelkova_sapling byg:brown_zelkova_sapling byg:joshua_sapling byg:ripe_joshua_sapling byg:orange_birch_sapling byg:orange_oak_sapling byg:orange_spruce_sapling byg:orchard_sapling byg:flowering_orchard_sapling byg:ripe_orchard_sapling byg:red_birch_sapling byg:red_oak_sapling byg:red_spruce_sapling byg:yellow_birch_sapling byg:yellow_spruce_sapling byg:green_mushroom occultism:otherworld_sapling_natural occultism:otherworld_sapling integrateddynamics:menril_sapling projectvibrantjourneys:glowcap projectvibrantjourneys:crimson_nettle projectvibrantjourneys:warped_nettle twilightforest:mayapple deeperdarker:echo_sapling create_dd:rubber_sapling vegandelight:wild_soybean minecraft:firefly_bush minecraft:bush minecraft:short_dry_grass minecraft:tall_dry_grass minecraft:cactus_flower # CROPS LIKE ENTITIES block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots farmersdelight:cabbages farmersdelight:budding_tomatoes farmersdelight:onions vegandelight:soybean_crop From cc3782124f5f6d1115a22f8e1c2f4a9d99cda809 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 26 Apr 2025 13:08:40 -0600 Subject: [PATCH 041/147] Blocks additions --- shaders/block.properties | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/shaders/block.properties b/shaders/block.properties index abba260f..e6a9ff75 100644 --- a/shaders/block.properties +++ b/shaders/block.properties @@ -3,10 +3,10 @@ #if MC_VERSION >= 11300 # GRASS LIKE ENTITIES - block.10031 = minecraft:cherry_sapling minecraft:torchflower minecraft:short_grass minecraft:grass minecraft:fern minecraft:seagrass biomesoplenty:dune_grass biomesoplenty:dead_grass biomesoplenty:desert_grass biomesoplenty:sprout biomesoplenty:bush environmental:mycelium_sprouts upgrade_aquatic:blue_pickerelweed upgrade_aquatic:purple_pickerelweed byg:beach_grass byg:clover_patch byg:flower_patch byg:horseweed byg:leaf_pile byg:prairie_grass byg:reeds byg:short_beach_grass byg:short_grass byg:tall_prairie_grass byg:weed_grass byg:wilted_grass byg:winter_grass ecotones:clover ecotones:reeds ecotones:sandy_grass ecotones:short_grass terrestria:cattail terrestria:dead_grass terrestria:sakura_leaf_pile terrestria:tall_cattail wildworld:acacia_leaf_pile wildworld:birch_leaf_pile wildworld:dark_oak_leaf_pile wildworld:jungle_leaf_pile wildworld:oak_leaf_pile wildworld:spruce_leaf_pile biomesoplenty:bush minecraft:nether_sprouts minecraft:warped_roots minecraft:crimson_roots projectvibrantjourneys:beach_grass projectvibrantjourneys:short_grass minecraft:oak_sapling minecraft:spruce_sapling minecraft:birch_sapling minecraft:jungle_sapling minecraft:acacia_sapling minecraft:dark_oak_sapling minecraft:dead_bush minecraft:dandelion minecraft:poppy minecraft:blue_orchid minecraft:allium minecraft:azure_bluet minecraft:red_tulip minecraft:orange_tulip minecraft:white_tulip minecraft:pink_tulip minecraft:oxeye_daisy minecraft:cornflower minecraft:lily_of_the_valley minecraft:wither_rose minecraft:sweet_berry_bush biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom atmospheric:rosewood_sapling atmospheric:morado_sapling atmospheric:yucca_sapling atmospheric:kousa_sapling atmospheric:aspen_sapling atmospheric:grimwood_sapling atmospheric:warm_monkey_brush atmospheric:hot_monkey_brush atmospheric:scalding_monkey_brush atmospheric:yucca_flower atmospheric:gilia autumnity:red_maple_sapling autumnity:orange_maple_sapling autumnity:yellow_maple_sapling autumnity:maple_sapling autumnity:autumn_crocus earthmobsmod:buttercup environmental:willow_sapling environmental:cherry_sapling environmental:pink_wisteria_sapling environmental:blue_wisteria_sapling environmental:purple_wisteria_sapling environmental:white_wisteria_sapling farmersdelight:wild_cabbages farmersdelight:wild_onions farmersdelight:wild_tomatoes farmersdelight:wild_carrots farmersdelight:wild_potatoes farmersdelight:wild_beetroots neapolitan:small_banana_frond neapolitan:banana_frond neapolitan:large_banana_frond upgrade_aquatic:river_sapling upgrade_aquatic:beachgrass upgrade_aquatic:white_searocket upgrade_aquatic:pink_searocket environmental:cattail environmental:cartwheel environmental:bluebell environmental:violet environmental:dianthus environmental:red_lotus_flower environmental:white_lotus_flower environmental:yellow_hibiscus environmental:orange_hibiscus environmental:red_hibiscus environmental:pink_hibiscus environmental:magenta_hibiscus environmental:purple_hibiscus buzzier_bees:buttercup buzzier_bees:white_clover buzzier_bees:pink_clover neapolitan:strawberry_pips biomesoplenty:origin_sapling biomesoplenty:flowering_oak_sapling biomesoplenty:rainbow_birch_sapling biomesoplenty:yellow_autumn_sapling biomesoplenty:orange_autumn_sapling biomesoplenty:maple_sapling biomesoplenty:fir_sapling biomesoplenty:redwood_sapling biomesoplenty:white_cherry_sapling biomesoplenty:pink_cherry_sapling biomesoplenty:mahogany_sapling biomesoplenty:jacaranda_sapling biomesoplenty:palm_sapling biomesoplenty:willow_sapling biomesoplenty:dead_sapling biomesoplenty:magic_sapling biomesoplenty:umbran_sapling biomesoplenty:hellbark_sapling astralsorcery:glow_flower botania:white_mystical_flower botania:gray_mystical_flower botania:orange_mystical_flower botania:magenta_mystical_flower botania:light_blue_mystical_flower botania:light_gray_mystical_flower botania:yellow_mystical_flower botania:lime_mystical_flower botania:pink_mystical_flower botania:cyan_mystical_flower botania:purple_mystical_flower botania:blue_mystical_flower botania:brown_mystical_flower botania:green_mystical_flower botania:red_mystical_flower botania:black_mystical_flower botania:white_mushroom botania:orange_mushroom botania:magenta_mushroom botania:light_blue_mushroom botania:yellow_mushroom botania:lime_mushroom botania:pink_mushroom botania:gray_mushroom botania:light_gray_mushroom botania:cyan_mushroom botania:purple_mushroom botania:blue_mushroom botania:brown_mushroom botania:green_mushroom botania:red_mushroom botania:black_mushroom botania:hydroangeas botania:manastar botania:pure_daisy botania:endoflame botania:thermalily botania:rosa_arcana botania:munchdew botania:entropinnyum botania:kekimurus botania:gourmaryllis botania:narslimmus botania:spectrolus botania:dandelifeon botania:rafflowsia botania:shulk_me_not botania:bellethorn botania:bellethorn_chibi botania:bergamute botania:dreadthorn botania:heisei_dream botania:tigerseye botania:jaded_amaranthus botania:orechid botania:fallen_kanade botania:exoflame botania:agricarnation botania:agricarnation_chibi botania:hopperhock botania:hopperhock_chibi botania:tangleberrie botania:jiyuulia botania:rannuncarpus botania:rannuncarpus_chibi botania:hyacidus botania:pollidisiac botania:clayconia botania:clayconia_chibi botania:loonium botania:daffomill botania:vinculotus botania:spectranthemum botania:medumone botania:marimorphosis botania:marimorphosis_chibi botania:bubbell botania:bubbell_chibi botania:solegnolia botania:solegnolia_chibi botania:orechid_ignem terrestria:tiny_cactus pamhc2trees:apple_sapling pamhc2trees:avocado_sapling pamhc2trees:candlenut_sapling pamhc2trees:cherry_sapling pamhc2trees:chestnut_sapling pamhc2trees:gooseberry_sapling pamhc2trees:lemon_sapling pamhc2trees:nutmeg_sapling pamhc2trees:orange_sapling pamhc2trees:peach_sapling pamhc2trees:pear_sapling pamhc2trees:plum_sapling pamhc2trees:walnut_sapling pamhc2trees:spiderweb_sapling pamhc2trees:hazelnut_sapling pamhc2trees:pawpaw_sapling pamhc2trees:soursop_sapling pamhc2trees:almond_sapling pamhc2trees:apricot_sapling pamhc2trees:banana_sapling pamhc2trees:cashew_sapling pamhc2trees:cinnamon_sapling pamhc2trees:coconut_sapling pamhc2trees:date_sapling pamhc2trees:dragonfruit_sapling pamhc2trees:durian_sapling pamhc2trees:fig_sapling pamhc2trees:grapefruit_sapling pamhc2trees:lime_sapling pamhc2trees:mango_sapling pamhc2trees:olive_sapling pamhc2trees:papaya_sapling pamhc2trees:paperbark_sapling pamhc2trees:pecan_sapling pamhc2trees:peppercorn_sapling pamhc2trees:persimmon_sapling pamhc2trees:pistachio_sapling pamhc2trees:pomegranate_sapling pamhc2trees:starfruit_sapling pamhc2trees:vanillabean_sapling pamhc2trees:breadfruit_sapling pamhc2trees:guava_sapling pamhc2trees:jackfruit_sapling pamhc2trees:lychee_sapling pamhc2trees:passionfruit_sapling pamhc2trees:rambutan_sapling pamhc2trees:tamarind_sapling pamhc2trees:maple_sapling pamhc2trees:pinenut_sapling byg:purple_bulbis_anomaly byg:blue_bulbis_anomaly byg:embur_wart byg:cryptic_bramble biomesoplenty:glowshroom biomesoplenty:toadstool biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom biomesoplenty:mangrove_root biomesoplenty:reed biomesoplenty:sprout biomesoplenty:bush pamhc2crops:aridgarden pamhc2crops:frostgarden pamhc2crops:shadedgarden pamhc2crops:soggygarden pamhc2crops:tropicalgarden pamhc2crops:windygarden pamhc2crops:pamamaranthcrop pamhc2crops:pambarleycrop pamhc2crops:pambeancrop pamhc2crops:pamchickpeacrop pamhc2crops:pamcorncrop pamhc2crops:pamlentilcrop pamhc2crops:pammilletcrop pamhc2crops:pamoatcrop pamhc2crops:pamquinoacrop pamhc2crops:pamricecrop pamhc2crops:pamryecrop pamhc2crops:pamsoybeancrops pamhc2crops:pamcottoncrop pamhc2crops:pamflaxcrop pamhc2crops:pamkenafcrop pamhc2crops:pamjutecrop pamhc2crops:pamsisalcrop pamhc2crops:pamartichokecrop pamhc2crops:pamasparaguscrop pamhc2crops:pambellpeppercrop pamhc2crops:pambroccolicrop pamhc2crops:pambrusselsproutcrop pamhc2crops:pamcabbagecrop pamhc2crops:pamcauliflowercrop pamhc2crops:pamcelerycrop pamhc2crops:pamchilipeppercrop pamhc2crops:pamcucumbercrop pamhc2crops:pameggplantcrop pamhc2crops:pamkalecrops pamhc2crops:pamlettucecrop pamhc2crops:pamokracrop pamhc2crops:pampeascrop pamhc2crops:pamspinachcrop pamhc2crops:pamtomatillocrop pamhc2crops:pamtomatocrop pamhc2crops:pamwintersquashcrop pamhc2crops:pamzucchinicrop pamhc2crops:pamarrowrootcrop pamhc2crops:pamcassavacrop pamhc2crops:pamgarliccrop pamhc2crops:pamjicamacrop pamhc2crops:pamleekcrop pamhc2crops:pamkohlrabicrop pamhc2crops:pamonioncrop pamhc2crops:pamparsnipcrop pamhc2crops:pampeanutcrop pamhc2crops:pamradishcrop pamhc2crops:pamrhubarbcrop pamhc2crops:pamrutabagacrop pamhc2crops:pamscallioncrop pamhc2crops:pamsweetpotatocrop pamhc2crops:pamtarocrop pamhc2crops:pamturnipcrop pamhc2crops:pamwaterchestnutcrop pamhc2crops:pamblackberrycrop pamhc2crops:pamblueberrycrop pamhc2crops:pamcactusfruitcrop pamhc2crops:pamcandleberrycrop pamhc2crops:pamcantaloupecrop pamhc2crops:pamcranberrycrop pamhc2crops:pamelderberrycrop pamhc2crops:pamgrapecrop pamhc2crops:pamgreengrapecrop pamhc2crops:pamhuckleberrycrop pamhc2crops:pamjuniperberrycrop pamhc2crops:pamkiwicrop pamhc2crops:pammullberrycrop pamhc2crops:pampineapplecrop pamhc2crops:pamraspberrycrop pamhc2crops:pamstrawberrycrop pamhc2crops:pamcoffeebeancrop pamhc2crops:pamtealeafcrop pamhc2crops:pamagavecrop pamhc2crops:pamwhitemushroomcrop pamhc2crops:pamgingercrop pamhc2crops:pamsesamecrop pamhc2crops:pamspiceleafcrop pamhc2crops:pammustardcrop byg:lament_sprouts byg:synthian_fungus byg:blue_glowcane byg:pink_glowcane byg:purple_glowcane byg:red_glowcane byg:warped_bush byg:blue_glowshroom byg:purple_glowshroom byg:scorched_bush byg:soul_shroom byg:soul_shroom_spore_end byg:death_cap byg:weeping_roots byg:nether_bristle byg:synthian_sprout byg:synthian_roots byg:hanging_synthian_roots byg:embur_sprouts byg:embur_roots byg:ivis_roots byg:ivis_sprout byg:bulbis_sprouts byg:ether_bush byg:thereal_bellflower byg:nightshade_sprouts byg:nightshade_roots byg:oddity_bush byg:shulkren_fungus byg:vermillion_sculk_tendrils byg:vermillion_sculk_growth byg:green_mushroom byg:weeping_milkcap byg:wood_blewit byg:black_puff byg:crimson_berry_bush byg:blueberry_bush byg:nightshade_berry_bush byg:winter_succulent byg:allium_flower_bush byg:alpine_bellflower byg:amaranth byg:angelica byg:begonia byg:bistort byg:black_rose byg:blue_sage byg:california_poppy byg:crocus byg:cyan_amaranth byg:cyan_rose byg:cyan_tulip byg:daffodil byg:fairy_slipper byg:firecracker_flower_bush byg:green_tulip byg:guzmania byg:incan_lily byg:iris byg:kovan_flower byg:lazarus_bellflower byg:lolipop_flower byg:magenta_amaranth byg:magenta_tulip byg:orange_amaranth byg:orange_daisy byg:osiria_rose byg:peach_leather_flower byg:pink_allium byg:pink_allium_flower_bush byg:pink_anemone byg:pink_daffodil byg:pink_orchid byg:protea_flower byg:purple_amaranth byg:purple_orchid byg:purple_sage byg:purple_tulip byg:red_cornflower byg:red_orchid byg:richea byg:rose byg:snowdrops byg:silver_vase_flower byg:torch_ginger byg:violet_leather_flower byg:white_anemone byg:white_sage byg:white_cyclamen byg:winter_rose byg:winter_scilla byg:yellow_daffodil byg:yellow_tulip byg:horseweed byg:winter_cyclamen cutecore:cherry_leaf_litter cutecore:cherry_wood_sapling cutecore:wisteria_sapling cutecore:wisteria_leaf_litter cutecore:lemon_leaf_litter cutecore:lemon_sapling cutecore:hyacinth cutecore:lotus_flower cutecore:violets cutecore:pink_rose cutecore:white_rose cutecore:rose cutecore:forget_me_nots cutecore:pink_carnation cutecore:red_carnation cutecore:white_carnation forbidden_arcanus:yellow_orchid forbidden_arcanus:golden_orchid immersiveengineering:hemp:growth=bottom0 immersiveengineering:hemp:growth=bottom1 immersiveengineering:hemp:growth=bottom2 immersiveengineering:hemp:growth=bottom3 simplefarming:apple_sapling simplefarming:apricot_sapling simplefarming:banana_sapling simplefarming:cherry_sapling simplefarming:mango_sapling simplefarming:olive_sapling simplefarming:orange_sapling simplefarming:pear_sapling simplefarming:plum_sapling simplefarming:barley_crop simplefarming:cassava_crop simplefarming:corn_crop simplefarming:cotton_crop simplefarming:cross_crop simplefarming:cucumber_crop simplefarming:cumin_plant simplefarming:eggplant_crop simplefarming:ginger_crop simplefarming:honeydew_crop simplefarming:kenaf_crop simplefarming:lettuce_crop simplefarming:oat_crop simplefarming:onion_crop simplefarming:pea_crop simplefarming:peanut_crop simplefarming:pepper_crop simplefarming:quinoa_plant simplefarming:radish_crop simplefarming:rice_crop simplefarming:rye_crop simplefarming:scrop simplefarming:hcrop simplefarming:marshmallow_crop simplefarming:sunflower_plant simplefarming:sorghum_crop simplefarming:soybean_crop simplefarming:spinach_crop simplefarming:sweet_potato_crop simplefarming:tomato_crop simplefarming:turnip_crop simplefarming:wild_crop simplefarming:yam_crop simplefarming:zucchini_crop byg:aspen_sapling byg:baobab_sapling byg:blue_enchanted_sapling byg:green_enchanted_sapling byg:pink_cherry_sapling byg:white_cherry_sapling byg:cika_sapling byg:cypress_sapling byg:ebony_sapling byg:ether_sapling byg:fir_sapling byg:aspen_sapling byg:holly_berry_sapling byg:holly_sapling byg:jacaranda_sapling byg:flowering_jacaranda_sapling byg:indigo_jacaranda_sapling byg:indigo_flowering_jacaranda_sapling byg:lament_sapling byg:mahogany_sapling byg:mangrove_sapling byg:maple_sapling byg:red_maple_sapling byg:silver_maple_sapling byg:nightshade_sapling byg:flowering_nightshade_sapling byg:palm_sapling byg:palo_verde_sapling byg:flowering_palo_verde_sapling byg:pine_sapling byg:rainbow_eucalyptus_sapling byg:redwood_sapling byg:pine_sapling byg:skyris_sapling byg:green_apple_skyris_sapling byg:willow_sapling byg:witch_hazel_sapling byg:blooming_witch_hazel_sapling byg:zelkova_sapling byg:withering_oak_sapling byg:araucaria_sapling byg:blue_spruce_sapling byg:brown_birch_sapling byg:brown_oak_sapling byg:zelkova_sapling byg:brown_zelkova_sapling byg:joshua_sapling byg:ripe_joshua_sapling byg:orange_birch_sapling byg:orange_oak_sapling byg:orange_spruce_sapling byg:orchard_sapling byg:flowering_orchard_sapling byg:ripe_orchard_sapling byg:red_birch_sapling byg:red_oak_sapling byg:red_spruce_sapling byg:yellow_birch_sapling byg:yellow_spruce_sapling byg:green_mushroom occultism:otherworld_sapling_natural occultism:otherworld_sapling integrateddynamics:menril_sapling projectvibrantjourneys:glowcap projectvibrantjourneys:crimson_nettle projectvibrantjourneys:warped_nettle twilightforest:mayapple deeperdarker:echo_sapling create_dd:rubber_sapling vegandelight:wild_soybean minecraft:firefly_bush minecraft:bush minecraft:short_dry_grass minecraft:tall_dry_grass minecraft:cactus_flower + block.10031 = minecraft:cherry_sapling minecraft:torchflower minecraft:short_grass minecraft:grass minecraft:fern minecraft:seagrass biomesoplenty:dune_grass biomesoplenty:dead_grass biomesoplenty:desert_grass biomesoplenty:sprout biomesoplenty:bush environmental:mycelium_sprouts upgrade_aquatic:blue_pickerelweed upgrade_aquatic:purple_pickerelweed byg:beach_grass byg:clover_patch byg:flower_patch byg:horseweed byg:leaf_pile byg:prairie_grass byg:reeds byg:short_beach_grass byg:short_grass byg:tall_prairie_grass byg:weed_grass byg:wilted_grass byg:winter_grass ecotones:clover ecotones:reeds ecotones:sandy_grass ecotones:short_grass terrestria:cattail terrestria:dead_grass terrestria:sakura_leaf_pile terrestria:tall_cattail wildworld:acacia_leaf_pile wildworld:birch_leaf_pile wildworld:dark_oak_leaf_pile wildworld:jungle_leaf_pile wildworld:oak_leaf_pile wildworld:spruce_leaf_pile biomesoplenty:bush minecraft:nether_sprouts minecraft:warped_roots minecraft:crimson_roots projectvibrantjourneys:beach_grass projectvibrantjourneys:short_grass minecraft:oak_sapling minecraft:spruce_sapling minecraft:birch_sapling minecraft:jungle_sapling minecraft:acacia_sapling minecraft:dark_oak_sapling minecraft:dead_bush minecraft:dandelion minecraft:poppy minecraft:blue_orchid minecraft:allium minecraft:azure_bluet minecraft:red_tulip minecraft:orange_tulip minecraft:white_tulip minecraft:pink_tulip minecraft:oxeye_daisy minecraft:cornflower minecraft:lily_of_the_valley minecraft:wither_rose minecraft:sweet_berry_bush biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom atmospheric:rosewood_sapling atmospheric:morado_sapling atmospheric:yucca_sapling atmospheric:kousa_sapling atmospheric:aspen_sapling atmospheric:grimwood_sapling atmospheric:warm_monkey_brush atmospheric:hot_monkey_brush atmospheric:scalding_monkey_brush atmospheric:yucca_flower atmospheric:gilia autumnity:red_maple_sapling autumnity:orange_maple_sapling autumnity:yellow_maple_sapling autumnity:maple_sapling autumnity:autumn_crocus earthmobsmod:buttercup environmental:willow_sapling environmental:cherry_sapling environmental:pink_wisteria_sapling environmental:blue_wisteria_sapling environmental:purple_wisteria_sapling environmental:white_wisteria_sapling farmersdelight:wild_cabbages farmersdelight:wild_onions farmersdelight:wild_tomatoes farmersdelight:wild_carrots farmersdelight:wild_potatoes farmersdelight:wild_beetroots neapolitan:small_banana_frond neapolitan:banana_frond neapolitan:large_banana_frond upgrade_aquatic:river_sapling upgrade_aquatic:beachgrass upgrade_aquatic:white_searocket upgrade_aquatic:pink_searocket environmental:cattail environmental:cartwheel environmental:bluebell environmental:violet environmental:dianthus environmental:red_lotus_flower environmental:white_lotus_flower environmental:yellow_hibiscus environmental:orange_hibiscus environmental:red_hibiscus environmental:pink_hibiscus environmental:magenta_hibiscus environmental:purple_hibiscus buzzier_bees:buttercup buzzier_bees:white_clover buzzier_bees:pink_clover neapolitan:strawberry_pips biomesoplenty:origin_sapling biomesoplenty:flowering_oak_sapling biomesoplenty:rainbow_birch_sapling biomesoplenty:yellow_autumn_sapling biomesoplenty:orange_autumn_sapling biomesoplenty:maple_sapling biomesoplenty:fir_sapling biomesoplenty:redwood_sapling biomesoplenty:white_cherry_sapling biomesoplenty:pink_cherry_sapling biomesoplenty:mahogany_sapling biomesoplenty:jacaranda_sapling biomesoplenty:palm_sapling biomesoplenty:willow_sapling biomesoplenty:dead_sapling biomesoplenty:magic_sapling biomesoplenty:umbran_sapling biomesoplenty:hellbark_sapling astralsorcery:glow_flower botania:white_mystical_flower botania:gray_mystical_flower botania:orange_mystical_flower botania:magenta_mystical_flower botania:light_blue_mystical_flower botania:light_gray_mystical_flower botania:yellow_mystical_flower botania:lime_mystical_flower botania:pink_mystical_flower botania:cyan_mystical_flower botania:purple_mystical_flower botania:blue_mystical_flower botania:brown_mystical_flower botania:green_mystical_flower botania:red_mystical_flower botania:black_mystical_flower botania:white_mushroom botania:orange_mushroom botania:magenta_mushroom botania:light_blue_mushroom botania:yellow_mushroom botania:lime_mushroom botania:pink_mushroom botania:gray_mushroom botania:light_gray_mushroom botania:cyan_mushroom botania:purple_mushroom botania:blue_mushroom botania:brown_mushroom botania:green_mushroom botania:red_mushroom botania:black_mushroom botania:hydroangeas botania:manastar botania:pure_daisy botania:endoflame botania:thermalily botania:rosa_arcana botania:munchdew botania:entropinnyum botania:kekimurus botania:gourmaryllis botania:narslimmus botania:spectrolus botania:dandelifeon botania:rafflowsia botania:shulk_me_not botania:bellethorn botania:bellethorn_chibi botania:bergamute botania:dreadthorn botania:heisei_dream botania:tigerseye botania:jaded_amaranthus botania:orechid botania:fallen_kanade botania:exoflame botania:agricarnation botania:agricarnation_chibi botania:hopperhock botania:hopperhock_chibi botania:tangleberrie botania:jiyuulia botania:rannuncarpus botania:rannuncarpus_chibi botania:hyacidus botania:pollidisiac botania:clayconia botania:clayconia_chibi botania:loonium botania:daffomill botania:vinculotus botania:spectranthemum botania:medumone botania:marimorphosis botania:marimorphosis_chibi botania:bubbell botania:bubbell_chibi botania:solegnolia botania:solegnolia_chibi botania:orechid_ignem terrestria:tiny_cactus pamhc2trees:apple_sapling pamhc2trees:avocado_sapling pamhc2trees:candlenut_sapling pamhc2trees:cherry_sapling pamhc2trees:chestnut_sapling pamhc2trees:gooseberry_sapling pamhc2trees:lemon_sapling pamhc2trees:nutmeg_sapling pamhc2trees:orange_sapling pamhc2trees:peach_sapling pamhc2trees:pear_sapling pamhc2trees:plum_sapling pamhc2trees:walnut_sapling pamhc2trees:spiderweb_sapling pamhc2trees:hazelnut_sapling pamhc2trees:pawpaw_sapling pamhc2trees:soursop_sapling pamhc2trees:almond_sapling pamhc2trees:apricot_sapling pamhc2trees:banana_sapling pamhc2trees:cashew_sapling pamhc2trees:cinnamon_sapling pamhc2trees:coconut_sapling pamhc2trees:date_sapling pamhc2trees:dragonfruit_sapling pamhc2trees:durian_sapling pamhc2trees:fig_sapling pamhc2trees:grapefruit_sapling pamhc2trees:lime_sapling pamhc2trees:mango_sapling pamhc2trees:olive_sapling pamhc2trees:papaya_sapling pamhc2trees:paperbark_sapling pamhc2trees:pecan_sapling pamhc2trees:peppercorn_sapling pamhc2trees:persimmon_sapling pamhc2trees:pistachio_sapling pamhc2trees:pomegranate_sapling pamhc2trees:starfruit_sapling pamhc2trees:vanillabean_sapling pamhc2trees:breadfruit_sapling pamhc2trees:guava_sapling pamhc2trees:jackfruit_sapling pamhc2trees:lychee_sapling pamhc2trees:passionfruit_sapling pamhc2trees:rambutan_sapling pamhc2trees:tamarind_sapling pamhc2trees:maple_sapling pamhc2trees:pinenut_sapling byg:purple_bulbis_anomaly byg:blue_bulbis_anomaly byg:embur_wart byg:cryptic_bramble biomesoplenty:glowshroom biomesoplenty:toadstool biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom biomesoplenty:mangrove_root biomesoplenty:reed biomesoplenty:sprout biomesoplenty:bush pamhc2crops:aridgarden pamhc2crops:frostgarden pamhc2crops:shadedgarden pamhc2crops:soggygarden pamhc2crops:tropicalgarden pamhc2crops:windygarden pamhc2crops:pamamaranthcrop pamhc2crops:pambarleycrop pamhc2crops:pambeancrop pamhc2crops:pamchickpeacrop pamhc2crops:pamcorncrop pamhc2crops:pamlentilcrop pamhc2crops:pammilletcrop pamhc2crops:pamoatcrop pamhc2crops:pamquinoacrop pamhc2crops:pamricecrop pamhc2crops:pamryecrop pamhc2crops:pamsoybeancrops pamhc2crops:pamcottoncrop pamhc2crops:pamflaxcrop pamhc2crops:pamkenafcrop pamhc2crops:pamjutecrop pamhc2crops:pamsisalcrop pamhc2crops:pamartichokecrop pamhc2crops:pamasparaguscrop pamhc2crops:pambellpeppercrop pamhc2crops:pambroccolicrop pamhc2crops:pambrusselsproutcrop pamhc2crops:pamcabbagecrop pamhc2crops:pamcauliflowercrop pamhc2crops:pamcelerycrop pamhc2crops:pamchilipeppercrop pamhc2crops:pamcucumbercrop pamhc2crops:pameggplantcrop pamhc2crops:pamkalecrops pamhc2crops:pamlettucecrop pamhc2crops:pamokracrop pamhc2crops:pampeascrop pamhc2crops:pamspinachcrop pamhc2crops:pamtomatillocrop pamhc2crops:pamtomatocrop pamhc2crops:pamwintersquashcrop pamhc2crops:pamzucchinicrop pamhc2crops:pamarrowrootcrop pamhc2crops:pamcassavacrop pamhc2crops:pamgarliccrop pamhc2crops:pamjicamacrop pamhc2crops:pamleekcrop pamhc2crops:pamkohlrabicrop pamhc2crops:pamonioncrop pamhc2crops:pamparsnipcrop pamhc2crops:pampeanutcrop pamhc2crops:pamradishcrop pamhc2crops:pamrhubarbcrop pamhc2crops:pamrutabagacrop pamhc2crops:pamscallioncrop pamhc2crops:pamsweetpotatocrop pamhc2crops:pamtarocrop pamhc2crops:pamturnipcrop pamhc2crops:pamwaterchestnutcrop pamhc2crops:pamblackberrycrop pamhc2crops:pamblueberrycrop pamhc2crops:pamcactusfruitcrop pamhc2crops:pamcandleberrycrop pamhc2crops:pamcantaloupecrop pamhc2crops:pamcranberrycrop pamhc2crops:pamelderberrycrop pamhc2crops:pamgrapecrop pamhc2crops:pamgreengrapecrop pamhc2crops:pamhuckleberrycrop pamhc2crops:pamjuniperberrycrop pamhc2crops:pamkiwicrop pamhc2crops:pammullberrycrop pamhc2crops:pampineapplecrop pamhc2crops:pamraspberrycrop pamhc2crops:pamstrawberrycrop pamhc2crops:pamcoffeebeancrop pamhc2crops:pamtealeafcrop pamhc2crops:pamagavecrop pamhc2crops:pamwhitemushroomcrop pamhc2crops:pamgingercrop pamhc2crops:pamsesamecrop pamhc2crops:pamspiceleafcrop pamhc2crops:pammustardcrop byg:lament_sprouts byg:synthian_fungus byg:blue_glowcane byg:pink_glowcane byg:purple_glowcane byg:red_glowcane byg:warped_bush byg:blue_glowshroom byg:purple_glowshroom byg:scorched_bush byg:soul_shroom byg:soul_shroom_spore_end byg:death_cap byg:weeping_roots byg:nether_bristle byg:synthian_sprout byg:synthian_roots byg:hanging_synthian_roots byg:embur_sprouts byg:embur_roots byg:ivis_roots byg:ivis_sprout byg:bulbis_sprouts byg:ether_bush byg:thereal_bellflower byg:nightshade_sprouts byg:nightshade_roots byg:oddity_bush byg:shulkren_fungus byg:vermillion_sculk_tendrils byg:vermillion_sculk_growth byg:green_mushroom byg:weeping_milkcap byg:wood_blewit byg:black_puff byg:crimson_berry_bush byg:blueberry_bush byg:nightshade_berry_bush byg:winter_succulent byg:allium_flower_bush byg:alpine_bellflower byg:amaranth byg:angelica byg:begonia byg:bistort byg:black_rose byg:blue_sage byg:california_poppy byg:crocus byg:cyan_amaranth byg:cyan_rose byg:cyan_tulip byg:daffodil byg:fairy_slipper byg:firecracker_flower_bush byg:green_tulip byg:guzmania byg:incan_lily byg:iris byg:kovan_flower byg:lazarus_bellflower byg:lolipop_flower byg:magenta_amaranth byg:magenta_tulip byg:orange_amaranth byg:orange_daisy byg:osiria_rose byg:peach_leather_flower byg:pink_allium byg:pink_allium_flower_bush byg:pink_anemone byg:pink_daffodil byg:pink_orchid byg:protea_flower byg:purple_amaranth byg:purple_orchid byg:purple_sage byg:purple_tulip byg:red_cornflower byg:red_orchid byg:richea byg:rose byg:snowdrops byg:silver_vase_flower byg:torch_ginger byg:violet_leather_flower byg:white_anemone byg:white_sage byg:white_cyclamen byg:winter_rose byg:winter_scilla byg:yellow_daffodil byg:yellow_tulip byg:horseweed byg:winter_cyclamen cutecore:cherry_leaf_litter cutecore:cherry_wood_sapling cutecore:wisteria_sapling cutecore:wisteria_leaf_litter cutecore:lemon_leaf_litter cutecore:lemon_sapling cutecore:hyacinth cutecore:lotus_flower cutecore:violets cutecore:pink_rose cutecore:white_rose cutecore:rose cutecore:forget_me_nots cutecore:pink_carnation cutecore:red_carnation cutecore:white_carnation forbidden_arcanus:yellow_orchid forbidden_arcanus:golden_orchid immersiveengineering:hemp:growth=bottom0 immersiveengineering:hemp:growth=bottom1 immersiveengineering:hemp:growth=bottom2 immersiveengineering:hemp:growth=bottom3 simplefarming:apple_sapling simplefarming:apricot_sapling simplefarming:banana_sapling simplefarming:cherry_sapling simplefarming:mango_sapling simplefarming:olive_sapling simplefarming:orange_sapling simplefarming:pear_sapling simplefarming:plum_sapling simplefarming:barley_crop simplefarming:cassava_crop simplefarming:corn_crop simplefarming:cotton_crop simplefarming:cross_crop simplefarming:cucumber_crop simplefarming:cumin_plant simplefarming:eggplant_crop simplefarming:ginger_crop simplefarming:honeydew_crop simplefarming:kenaf_crop simplefarming:lettuce_crop simplefarming:oat_crop simplefarming:onion_crop simplefarming:pea_crop simplefarming:peanut_crop simplefarming:pepper_crop simplefarming:quinoa_plant simplefarming:radish_crop simplefarming:rice_crop simplefarming:rye_crop simplefarming:scrop simplefarming:hcrop simplefarming:marshmallow_crop simplefarming:sunflower_plant simplefarming:sorghum_crop simplefarming:soybean_crop simplefarming:spinach_crop simplefarming:sweet_potato_crop simplefarming:tomato_crop simplefarming:turnip_crop simplefarming:wild_crop simplefarming:yam_crop simplefarming:zucchini_crop byg:aspen_sapling byg:baobab_sapling byg:blue_enchanted_sapling byg:green_enchanted_sapling byg:pink_cherry_sapling byg:white_cherry_sapling byg:cika_sapling byg:cypress_sapling byg:ebony_sapling byg:ether_sapling byg:fir_sapling byg:aspen_sapling byg:holly_berry_sapling byg:holly_sapling byg:jacaranda_sapling byg:flowering_jacaranda_sapling byg:indigo_jacaranda_sapling byg:indigo_flowering_jacaranda_sapling byg:lament_sapling byg:mahogany_sapling byg:mangrove_sapling byg:maple_sapling byg:red_maple_sapling byg:silver_maple_sapling byg:nightshade_sapling byg:flowering_nightshade_sapling byg:palm_sapling byg:palo_verde_sapling byg:flowering_palo_verde_sapling byg:pine_sapling byg:rainbow_eucalyptus_sapling byg:redwood_sapling byg:pine_sapling byg:skyris_sapling byg:green_apple_skyris_sapling byg:willow_sapling byg:witch_hazel_sapling byg:blooming_witch_hazel_sapling byg:zelkova_sapling byg:withering_oak_sapling byg:araucaria_sapling byg:blue_spruce_sapling byg:brown_birch_sapling byg:brown_oak_sapling byg:zelkova_sapling byg:brown_zelkova_sapling byg:joshua_sapling byg:ripe_joshua_sapling byg:orange_birch_sapling byg:orange_oak_sapling byg:orange_spruce_sapling byg:orchard_sapling byg:flowering_orchard_sapling byg:ripe_orchard_sapling byg:red_birch_sapling byg:red_oak_sapling byg:red_spruce_sapling byg:yellow_birch_sapling byg:yellow_spruce_sapling byg:green_mushroom occultism:otherworld_sapling_natural occultism:otherworld_sapling integrateddynamics:menril_sapling projectvibrantjourneys:glowcap projectvibrantjourneys:crimson_nettle projectvibrantjourneys:warped_nettle twilightforest:mayapple deeperdarker:echo_sapling create_dd:rubber_sapling vegandelight:wild_soybean minecraft:firefly_bush minecraft:bush minecraft:short_dry_grass minecraft:tall_dry_grass minecraft:cactus_flower tfc:plant/allium tfc:plant/anthurium tfc:plant/arrowhead tfc:plant/artist_conk # CROPS LIKE ENTITIES - block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots farmersdelight:cabbages farmersdelight:budding_tomatoes farmersdelight:onions vegandelight:soybean_crop + block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots farmersdelight:cabbages farmersdelight:budding_tomatoes farmersdelight:onions vegandelight:soybean_crop tfc:crop/carrot tfc:crop/tomato # LOWER-HALF ENTITIES block.10175 = minecraft:pitcher_plant:half=lower minecraft:sunflower:half=lower minecraft:lilac:half=lower minecraft:tall_grass:half=lower minecraft:large_fern:half=lower minecraft:rose_bush:half=lower minecraft:peony:half=lower minecraft:tall_seagrass:half=lower atmospheric:water_hyacinth:half=lower atmospheric:tall_yucca_flower:half=lower environmental:tall_cattail:half=lower environmental:pink_delphinium:half=lower environmental:blue_delphinium:half=lower environmental:purple_delphinium:half=lower environmental:white_delphinium:half=lower environmental:bird_of_paradise:half=lower environmental:giant_tall_grass:half=lower farmersdelight:wild_rice:half=lower upgrade_aquatic:flowering_rush:half=lower upgrade_aquatic:tall_beachgrass:half=lower upgrade_aquatic:tall_blue_pickerelweed:half=lower upgrade_aquatic:tall_purple_pickerelweed:half=lower biomesoplenty:barley:half=lower biomesoplenty:goldenrod:half=lower biomesoplenty:blue_hydrangea:half=lower biomesoplenty:watergrass:half=lower botania:white_double_flower:half=lower botania:orange_double_flower:half=lower botania:magenta_double_flower:half=lower botania:light_blue_double_flower:half=lower botania:yellow_double_flower:half=lower botania:lime_double_flower:half=lower botania:pink_double_flower:half=lower botania:gray_double_flower:half=lower botania:light_gray_double_flower:half=lower botania:cyan_double_flower:half=lower botania:purple_double_flower:half=lower botania:blue_double_flower:half=lower botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=lower biomesoplenty:reed:half=lower biomesoplenty:cattail:half=lower byg:tall_crimson_roots:half=lower byg:tall_ether_grass:half=lower byg:reeds:half=lower byg:tall_prairie_grass:half=lower byg:tall_allium:half=lower byg:azalea:half=lower byg:tall_pink_allium:half=lower moreflowerbushes:purple_hibiscus:half=lower moreflowerbushes:mountain_laurel:half=lower moreflowerbushes:larkspur:half=lower moreflowerbushes:golden_shower:half=lower moreflowerbushes:fuchsia:half=lower moreflowerbushes:butterfly_weed:half=lower moreflowerbushes:blue_sage:half=lower moreflowerbushes:blue_hortensia:half=lower byg:japanese_orchid:half=lower byg:delphinium:half=lower byg:foxglove:half=lower cutecore:pink_rosebush:half=lower cutecore:white_rosebush:half=lower cutecore:pink_hydrangeas:half=lower cutecore:blue_hydrangeas:half=lower cutecore:purple_hydrangeas:half=lower farmersdelight:rice create_bic_bit:sunflowerstem:half=lower @@ -20,8 +20,10 @@ # NO-WAVEABLE SMALL ELEMENTS block.10032 = sugar_cane tube_coral brain_coral fire_coral bubble_coral horn_coral dead_tube_coral dead_brain_coral dead_fire_coral dead_bubble_coral dead_horn_coral tube_coral_fan brain_coral_fan fire_coral_fan bubble_coral_fan horn_coral_fan dead_tube_coral_fan dead_brain_coral_fan dead_fire_coral_fan dead_bubble_coral_fan dead_horn_coral_fan nether_wart tfc:plant/athyrium_fern tfc:plant/canna tfc:plant/goldenrod tfc:plant/pampas_grass tfc:plant/perovskia tfc:plant/rose tfc:plant/beachgrass tfc:plant/bluegrass tfc:plant/bromegrass tfc:plant/fountain_grass tfc:plant/manatee_grass tfc:plant/orchard_grass tfc:plant/ryegrass tfc:plant/scutch_grass tfc:plant/star_grass tfc:plant/timothy_grass tfc:plant/raddia_grass tfc:plant/allium tfc:plant/anthurium tfc:plant/arrowhead tfc:plant/badderlocks tfc:plant/barrel_cactus tfc:plant/blood_lily tfc:plant/blue_ginger tfc:plant/blue_orchid tfc:plant/bur_reed tfc:plant/butterfly_milkweed tfc:plant/black_orchid tfc:plant/calendula tfc:plant/cattail tfc:plant/cobblestone_lichen tfc:plant/coontail tfc:plant/cordgrass tfc:plant/dandelion tfc:plant/dead_bush tfc:plant/desert_flame tfc:plant/duckweed tfc:plant/eel_grass tfc:plant/field_horsetail tfc:plant/foxglove tfc:plant/grape_hyacinth tfc:plant/green_algae tfc:plant/gutweed tfc:plant/guzmania tfc:plant/heliconia tfc:plant/heather tfc:plant/hibiscus tfc:plant/houstonia tfc:plant/kangaroo_paw tfc:plant/king_fern tfc:plant/labrador_tea tfc:plant/lady_fern tfc:plant/laminaria tfc:plant/licorice_fern tfc:plant/artists_conk tfc:plant/lily_of_the_valley tfc:plant/lilac tfc:plant/lotus tfc:plant/maiden_pink tfc:plant/marigold tfc:plant/meads_milkweed tfc:plant/milfoil tfc:plant/morning_glory tfc:plant/philodendron tfc:plant/moss tfc:plant/nasturtium tfc:plant/ostrich_fern tfc:plant/oxeye_daisy tfc:plant/phragmite tfc:plant/pickerelweed tfc:plant/pistia tfc:plant/poppy tfc:plant/primrose tfc:plant/pulsatilla tfc:plant/red_algae tfc:plant/reindeer_lichen tfc:plant/red_sealing_wax_palm tfc:plant/sacred_datura tfc:plant/sagebrush tfc:plant/sago tfc:plant/saguaro_fruit tfc:plant/sapphire_tower tfc:plant/sargassum tfc:plant/sea_lavender tfc:plant/sea_palm tfc:plant/silver_spurflower tfc:plant/snapdragon_pink tfc:plant/snapdragon_red tfc:plant/snapdragon_white tfc:plant/snapdragon_yellow tfc:plant/strelitzia tfc:plant/switchgrass tfc:plant/sword_fern tfc:plant/tall_fescue_grass tfc:plant/toquilla_palm tfc:plant/trillium tfc:plant/tropical_milkweed tfc:plant/tulip_orange tfc:plant/tulip_pink tfc:plant/tulip_red tfc:plant/tulip_white tfc:plant/turtle_grass tfc:plant/vriesea tfc:plant/water_canna tfc:plant/white_water_lily tfc:plant/purple_water_lily tfc:plant/yellow_water_lily tfc:plant/water_taro tfc:plant/yucca tfc:plant/hanging_vines_plant tfc:plant/hanging_vines tfc:plant/spanish_moss_plant tfc:plant/spanish_moss tfc:plant/liana_plant tfc:plant/liana tfc:plant/tree_fern_plant tfc:plant/tree_fern tfc:plant/arundo_plant tfc:plant/arundo tfc:plant/dry_phragmite_plant tfc:plant/dry_phragmite tfc:plant/winged_kelp_plant tfc:plant/winged_kelp tfc:plant/leafy_kelp_plant tfc:plant/leafy_kelp tfc:plant/giant_kelp_plant tfc:plant/giant_kelp_flower tfc:plant/ivy tfc:plant/jungle_vines tfc:plant/saguaro_plant tfc:plant/saguaro tfc:plant/golden_bamboo tfc:plant/golden_bamboo_sapling tfc:wild_crop/barley tfc:wild_crop/oat tfc:wild_crop/rye tfc:wild_crop/maize tfc:wild_crop/wheat tfc:wild_crop/rice tfc:wild_crop/beet tfc:wild_crop/cabbage tfc:wild_crop/carrot tfc:wild_crop/garlic tfc:wild_crop/green_bean tfc:wild_crop/potato tfc:wild_crop/onion tfc:wild_crop/soybean tfc:wild_crop/squash tfc:wild_crop/sugarcane tfc:wild_crop/tomato tfc:wild_crop/jute tfc:wild_crop/papyrus tfc:wild_crop/pumpkin tfc:wild_crop/melon tfc:wild_crop/red_bell_pepper tfc:wild_crop/yellow_bell_pepper tfc:plant/snowberry_bush tfc:plant/bunchberry_bush tfc:plant/gooseberry_bush tfc:plant/cloudberry_bush tfc:plant/strawberry_bush tfc:plant/wintergreen_berry_bush tfc:plant/cranberry_bush - # REFLECTIVE + # WATER LIKE block.10008 = minecraft:water minecraft:flowing_water subwild:water_puddle tfc:fluid/finite_fresh_water tfc:fluid/fresh_water tfc:fluid/finite_salt_water tfc:fluid/salt_water tfc:fluid/finite_river_water tfc:fluid/river_water tfc:fluid/spring_water tfc:fluid/finite_spring_water + + # REFLECTIVE block.10079 = ice slime_block white_stained_glass orange_stained_glass magenta_stained_glass light_blue_stained_glass yellow_stained_glass lime_stained_glass pink_stained_glass gray_stained_glass light_gray_stained_glass cyan_stained_glass purple_stained_glass blue_stained_glass brown_stained_glass green_stained_glass red_stained_glass black_stained_glass white_stained_glass_pane orange_stained_glass_pane magenta_stained_glass_pane light_blue_stained_glass_pane yellow_stained_glass_pane lime_stained_glass_pane pink_stained_glass_pane gray_stained_glass_pane light_gray_stained_glass_pane cyan_stained_glass_pane purple_stained_glass_pane blue_stained_glass_pane brown_stained_glass_pane green_stained_glass_pane red_stained_glass_pane black_stained_glass_pane tinted_glass deeperdarker:soundproof_glass naturalist:crimson_froglass naturalist:verdant_froglass naturalist:azure_froglass naturalist:crimson_froglass_pane naturalist:verdant_froglass_pane naturalist:azure_froglass_pane createframed:white_stained_framed_glass_door createframed:white_stained_framed_glass_trapdoor createframed:white_stained_tiled_glass createframed:white_stained_tiled_glass_pane createframed:white_stained_framed_glass createframed:white_stained_framed_glass_pane createframed:horizontal_white_stained_framed_glass createframed:horizontal_white_stained_framed_glass_pane createframed:vertical_white_stained_framed_glass createframed:vertical_white_stained_framed_glass_pane createframed:light_gray_stained_framed_glass_door createframed:light_gray_stained_framed_glass_trapdoor createframed:light_gray_stained_tiled_glass createframed:light_gray_stained_tiled_glass_pane createframed:light_gray_stained_framed_glass createframed:light_gray_stained_framed_glass_pane createframed:horizontal_light_gray_stained_framed_glass createframed:horizontal_light_gray_stained_framed_glass_pane createframed:vertical_light_gray_stained_framed_glass createframed:vertical_light_gray_stained_framed_glass_pane createframed:gray_stained_framed_glass_door createframed:gray_stained_framed_glass_trapdoor createframed:gray_stained_tiled_glass createframed:gray_stained_tiled_glass_pane createframed:gray_stained_framed_glass createframed:gray_stained_framed_glass_pane createframed:horizontal_gray_stained_framed_glass createframed:horizontal_gray_stained_framed_glass_pane createframed:vertical_gray_stained_framed_glass createframed:vertical_gray_stained_framed_glass_pane createframed:black_stained_framed_glass_door createframed:black_stained_framed_glass_trapdoor createframed:black_stained_tiled_glass createframed:black_stained_tiled_glass_pane createframed:black_stained_framed_glass createframed:black_stained_framed_glass_pane createframed:horizontal_black_stained_framed_glass createframed:horizontal_black_stained_framed_glass_pane createframed:vertical_black_stained_framed_glass createframed:vertical_black_stained_framed_glass_pane createframed:brown_stained_framed_glass_door createframed:brown_stained_framed_glass_trapdoor createframed:brown_stained_tiled_glass createframed:brown_stained_tiled_glass_pane createframed:brown_stained_framed_glass createframed:brown_stained_framed_glass_pane createframed:horizontal_brown_stained_framed_glass createframed:horizontal_brown_stained_framed_glass_pane createframed:vertical_brown_stained_framed_glass createframed:vertical_brown_stained_framed_glass_pane createframed:red_stained_framed_glass_door createframed:red_stained_framed_glass_trapdoor createframed:red_stained_tiled_glass createframed:red_stained_tiled_glass_pane createframed:red_stained_framed_glass createframed:red_stained_framed_glass_pane createframed:horizontal_red_stained_framed_glass createframed:horizontal_red_stained_framed_glass_pane createframed:vertical_red_stained_framed_glass createframed:vertical_red_stained_framed_glass_pane createframed:orange_stained_framed_glass_door createframed:orange_stained_framed_glass_trapdoor createframed:orange_stained_tiled_glass createframed:orange_stained_tiled_glass_pane createframed:orange_stained_framed_glass createframed:orange_stained_framed_glass_pane createframed:horizontal_orange_stained_framed_glass createframed:horizontal_orange_stained_framed_glass_pane createframed:vertical_orange_stained_framed_glass createframed:vertical_orange_stained_framed_glass_pane createframed:yellow_stained_framed_glass_door createframed:yellow_stained_framed_glass_trapdoor createframed:yellow_stained_tiled_glass createframed:yellow_stained_tiled_glass_pane createframed:yellow_stained_framed_glass createframed:yellow_stained_framed_glass_pane createframed:horizontal_yellow_stained_framed_glass createframed:horizontal_yellow_stained_framed_glass_pane createframed:vertical_yellow_stained_framed_glass createframed:vertical_yellow_stained_framed_glass_pane createframed:lime_stained_framed_glass_door createframed:lime_stained_framed_glass_trapdoor createframed:lime_stained_tiled_glass createframed:lime_stained_tiled_glass_pane createframed:lime_stained_framed_glass createframed:lime_stained_framed_glass_pane createframed:horizontal_lime_stained_framed_glass createframed:horizontal_lime_stained_framed_glass_pane createframed:vertical_lime_stained_framed_glass createframed:vertical_lime_stained_framed_glass_pane createframed:green_stained_framed_glass_door createframed:green_stained_framed_glass_trapdoor createframed:green_stained_tiled_glass createframed:green_stained_tiled_glass_pane createframed:green_stained_framed_glass createframed:green_stained_framed_glass_pane createframed:horizontal_green_stained_framed_glass createframed:horizontal_green_stained_framed_glass_pane createframed:vertical_green_stained_framed_glass createframed:vertical_green_stained_framed_glass_pane createframed:cyan_stained_framed_glass_door createframed:cyan_stained_framed_glass_trapdoor createframed:cyan_stained_tiled_glass createframed:cyan_stained_tiled_glass_pane createframed:cyan_stained_framed_glass createframed:cyan_stained_framed_glass_pane createframed:horizontal_cyan_stained_framed_glass createframed:horizontal_cyan_stained_framed_glass_pane createframed:vertical_cyan_stained_framed_glass createframed:vertical_cyan_stained_framed_glass_pane createframed:light_blue_stained_framed_glass_door createframed:light_blue_stained_framed_glass_trapdoor createframed:light_blue_stained_tiled_glass createframed:light_blue_stained_tiled_glass_pane createframed:light_blue_stained_framed_glass createframed:light_blue_stained_framed_glass_pane createframed:horizontal_light_blue_stained_framed_glass createframed:horizontal_light_blue_stained_framed_glass_pane createframed:vertical_light_blue_stained_framed_glass createframed:vertical_light_blue_stained_framed_glass_pane createframed:blue_stained_framed_glass_door createframed:blue_stained_framed_glass_trapdoor createframed:blue_stained_tiled_glass createframed:blue_stained_tiled_glass_pane createframed:blue_stained_framed_glass createframed:blue_stained_framed_glass_pane createframed:horizontal_blue_stained_framed_glass createframed:horizontal_blue_stained_framed_glass_pane createframed:vertical_blue_stained_framed_glass createframed:vertical_blue_stained_framed_glass_pane createframed:purple_stained_framed_glass_door createframed:purple_stained_framed_glass_trapdoor createframed:purple_stained_tiled_glass createframed:purple_stained_tiled_glass_pane createframed:purple_stained_framed_glass createframed:purple_stained_framed_glass_pane createframed:horizontal_purple_stained_framed_glass createframed:horizontal_purple_stained_framed_glass_pane createframed:vertical_purple_stained_framed_glass createframed:vertical_purple_stained_framed_glass_pane createframed:magenta_stained_framed_glass_door createframed:magenta_stained_framed_glass_trapdoor createframed:magenta_stained_tiled_glass createframed:magenta_stained_tiled_glass_pane createframed:magenta_stained_framed_glass createframed:magenta_stained_framed_glass_pane createframed:horizontal_magenta_stained_framed_glass createframed:horizontal_magenta_stained_framed_glass_pane createframed:vertical_magenta_stained_framed_glass createframed:vertical_magenta_stained_framed_glass_pane createframed:pink_stained_framed_glass_door createframed:pink_stained_framed_glass_trapdoor createframed:pink_stained_tiled_glass createframed:pink_stained_tiled_glass_pane createframed:pink_stained_framed_glass createframed:pink_stained_framed_glass_pane createframed:horizontal_pink_stained_framed_glass createframed:horizontal_pink_stained_framed_glass_pane createframed:vertical_pink_stained_framed_glass createframed:vertical_pink_stained_framed_glass_pane # EMMISIVE (LIKE GLOWSTONE) @@ -54,8 +56,10 @@ block.10018 = minecraft:leaves minecraft:leaves2 biomesoplenty:leaves_0 biomesoplenty:leaves_1 biomesoplenty:leaves_2 biomesoplenty:leaves_3 biomesoplenty:leaves_4 biomesoplenty:leaves_5 atum:palm_leaves atum:deadwood_leaves quark:variant_leaves twilightforest:twilight_leaves twilightforest:magic_leaves twilightforest:twilight_leaves_3 twilightforest:dark_leaves twilightforest:giant_leaves midnight:shadowroot_leaves midnight:dark_willow_leaves aether_legacy:aether_leaves aether_legacy:crystal_leaves dynamictrees:leaves0 dynamictrees:leaves1 betterwithmods:blood_leaves rustic:leaves thebetweenlands:leaves_weedwood_tree thebetweenlands:leaves_sap_tree thebetweenlands:leaves_rubber_tree thebetweenlands:leaves_hearthgrove_tree thebetweenlands:leaves_nibbletwig_tree thebetweenlands:leaves_spirit_tree_top thebetweenlands:leaves_spirit_tree_middle thebetweenlands:leaves_spirit_tree_bottom ic2:leaves tconstruct:slime_leaves forestry:leaves pvj:leaves_willow pvj:leaves_mangrove pvj:leaves_palm pvj:leaves_redwood pvj:leaves_fir pvj:leaves_pine pvj:leaves_aspen pvj:leaves_red_maple pvj:leaves_orange_maple pvj:leaves_baobab pvj:leaves_cottonwood pvj:leaves_juniper pvj:leaves_juniper_berried pvj:leaves_white_cherry_blossom pvj:leaves_pink_cherry_blossom pvj:leaves_jacaranda extrabiomesxl:leaf_autumn_brown extrabiomesxl:leaf_autumn_orange extrabiomesxl:leaf_autumn_red extrabiomesxl:leaf_autumn_yellow extrabiomesxl:leaf_cypress_bald extrabiomesxl:leaf_cypress_regular extrabiomesxl:leaf_fir extrabiomesxl:leaf_japanese_maple_regular extrabiomesxl:leaf_japanese_maple_shrub extrabiomesxl:leaf_rainbow_eucalyptus extrabiomesxl:leaf_redwood extrabiomesxl:leaf_sakura extrautils2:ironwood_leaves musiccraft:mleaves thaumcraft:leaves_greatwood thaumcraft:leaves_silverwood - # REFLECTIVE + # WATER LIKE block.10008 = minecraft:water minecraft:flowing_water 113_water_mechanics:downwards_bubble_column 113_water_mechanics:upwards_bubble_column bubble_elevator:bubble_column magma_bubble_column:magma_bubble_column + + # REFLECTIVE block.10079 = ice slime stained_glass stained_glass_pane # EMMISIVE (LIKE GLOWSTONE) From 6a19d4d13ab7e6d5eb2d6c288e1e81ffdd06847d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 26 Apr 2025 16:41:01 -0600 Subject: [PATCH 042/147] Version 9.1e --- README.md | 2 +- shaders/block.properties | 22 +++++++++++++------- shaders/common/composite2_fragment.glsl | 3 +-- shaders/common/solid_blocks_fragment.glsl | 2 +- shaders/common/solid_dh_blocks_fragment.glsl | 2 +- shaders/lang/en_US.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- 10 files changed, 23 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 7a4cef2e..5168dae7 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp - Code High performance Minecraft shader (Java). -## Version: 9.1d +## Version: 9.1e ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/block.properties b/shaders/block.properties index e6a9ff75..59bce1fa 100644 --- a/shaders/block.properties +++ b/shaders/block.properties @@ -9,10 +9,10 @@ block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots farmersdelight:cabbages farmersdelight:budding_tomatoes farmersdelight:onions vegandelight:soybean_crop tfc:crop/carrot tfc:crop/tomato # LOWER-HALF ENTITIES - block.10175 = minecraft:pitcher_plant:half=lower minecraft:sunflower:half=lower minecraft:lilac:half=lower minecraft:tall_grass:half=lower minecraft:large_fern:half=lower minecraft:rose_bush:half=lower minecraft:peony:half=lower minecraft:tall_seagrass:half=lower atmospheric:water_hyacinth:half=lower atmospheric:tall_yucca_flower:half=lower environmental:tall_cattail:half=lower environmental:pink_delphinium:half=lower environmental:blue_delphinium:half=lower environmental:purple_delphinium:half=lower environmental:white_delphinium:half=lower environmental:bird_of_paradise:half=lower environmental:giant_tall_grass:half=lower farmersdelight:wild_rice:half=lower upgrade_aquatic:flowering_rush:half=lower upgrade_aquatic:tall_beachgrass:half=lower upgrade_aquatic:tall_blue_pickerelweed:half=lower upgrade_aquatic:tall_purple_pickerelweed:half=lower biomesoplenty:barley:half=lower biomesoplenty:goldenrod:half=lower biomesoplenty:blue_hydrangea:half=lower biomesoplenty:watergrass:half=lower botania:white_double_flower:half=lower botania:orange_double_flower:half=lower botania:magenta_double_flower:half=lower botania:light_blue_double_flower:half=lower botania:yellow_double_flower:half=lower botania:lime_double_flower:half=lower botania:pink_double_flower:half=lower botania:gray_double_flower:half=lower botania:light_gray_double_flower:half=lower botania:cyan_double_flower:half=lower botania:purple_double_flower:half=lower botania:blue_double_flower:half=lower botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=lower biomesoplenty:reed:half=lower biomesoplenty:cattail:half=lower byg:tall_crimson_roots:half=lower byg:tall_ether_grass:half=lower byg:reeds:half=lower byg:tall_prairie_grass:half=lower byg:tall_allium:half=lower byg:azalea:half=lower byg:tall_pink_allium:half=lower moreflowerbushes:purple_hibiscus:half=lower moreflowerbushes:mountain_laurel:half=lower moreflowerbushes:larkspur:half=lower moreflowerbushes:golden_shower:half=lower moreflowerbushes:fuchsia:half=lower moreflowerbushes:butterfly_weed:half=lower moreflowerbushes:blue_sage:half=lower moreflowerbushes:blue_hortensia:half=lower byg:japanese_orchid:half=lower byg:delphinium:half=lower byg:foxglove:half=lower cutecore:pink_rosebush:half=lower cutecore:white_rosebush:half=lower cutecore:pink_hydrangeas:half=lower cutecore:blue_hydrangeas:half=lower cutecore:purple_hydrangeas:half=lower farmersdelight:rice create_bic_bit:sunflowerstem:half=lower + block.10175 = minecraft:pitcher_plant:half=lower minecraft:sunflower:half=lower minecraft:lilac:half=lower minecraft:tall_grass:half=lower minecraft:large_fern:half=lower minecraft:rose_bush:half=lower minecraft:peony:half=lower minecraft:tall_seagrass:half=lower atmospheric:water_hyacinth:half=lower atmospheric:tall_yucca_flower:half=lower environmental:tall_cattail:half=lower environmental:pink_delphinium:half=lower environmental:blue_delphinium:half=lower environmental:purple_delphinium:half=lower environmental:white_delphinium:half=lower environmental:bird_of_paradise:half=lower environmental:giant_tall_grass:half=lower farmersdelight:wild_rice:half=lower upgrade_aquatic:flowering_rush:half=lower upgrade_aquatic:tall_beachgrass:half=lower upgrade_aquatic:tall_blue_pickerelweed:half=lower upgrade_aquatic:tall_purple_pickerelweed:half=lower biomesoplenty:barley:half=lower biomesoplenty:goldenrod:half=lower biomesoplenty:blue_hydrangea:half=lower biomesoplenty:watergrass:half=lower botania:white_double_flower:half=lower botania:orange_double_flower:half=lower botania:magenta_double_flower:half=lower botania:light_blue_double_flower:half=lower botania:yellow_double_flower:half=lower botania:lime_double_flower:half=lower botania:pink_double_flower:half=lower botania:gray_double_flower:half=lower botania:light_gray_double_flower:half=lower botania:cyan_double_flower:half=lower botania:purple_double_flower:half=lower botania:blue_double_flower:half=lower botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=lower biomesoplenty:reed:half=lower biomesoplenty:cattail:half=lower byg:tall_crimson_roots:half=lower byg:tall_ether_grass:half=lower byg:reeds:half=lower byg:tall_prairie_grass:half=lower byg:tall_allium:half=lower byg:azalea:half=lower byg:tall_pink_allium:half=lower moreflowerbushes:purple_hibiscus:half=lower moreflowerbushes:mountain_laurel:half=lower moreflowerbushes:larkspur:half=lower moreflowerbushes:golden_shower:half=lower moreflowerbushes:fuchsia:half=lower moreflowerbushes:butterfly_weed:half=lower moreflowerbushes:blue_sage:half=lower moreflowerbushes:blue_hortensia:half=lower byg:japanese_orchid:half=lower byg:delphinium:half=lower byg:foxglove:half=lower cutecore:pink_rosebush:half=lower cutecore:white_rosebush:half=lower cutecore:pink_hydrangeas:half=lower cutecore:blue_hydrangeas:half=lower cutecore:purple_hydrangeas:half=lower farmersdelight:rice create_bic_bit:sunflowerstem:half=lower tfc:plant/badderlocks:half=lower # UPPER-HALF ENTITIES - block.10176 = minecraft:pitcher_plant:half=upper minecraft:sunflower:half=upper minecraft:lilac:half=upper minecraft:tall_grass:half=upper minecraft:large_fern:half=upper minecraft:rose_bush:half=upper minecraft:peony:half=upper minecraft:tall_seagrass:half=upper atmospheric:water_hyacinth:half=upper atmospheric:tall_yucca_flower:half=upper environmental:tall_cattail:half=upper environmental:pink_delphinium:half=upper environmental:blue_delphinium:half=upper environmental:purple_delphinium:half=upper environmental:white_delphinium:half=upper environmental:bird_of_paradise:half=upper environmental:giant_tall_grass:half=upper farmersdelight:wild_rice:half=upper upgrade_aquatic:flowering_rush:half=upper upgrade_aquatic:tall_beachgrass:half=upper upgrade_aquatic:tall_blue_pickerelweed:half=upper upgrade_aquatic:tall_purple_pickerelweed:half=upper biomesoplenty:barley:half=upper biomesoplenty:goldenrod:half=upper biomesoplenty:blue_hydrangea:half=upper biomesoplenty:watergrass:half=upper botania:white_double_flower:half=upper botania:orange_double_flower:half=upper botania:magenta_double_flower:half=upper botania:light_blue_double_flower:half=upper botania:yellow_double_flower:half=upper botania:lime_double_flower:half=upper botania:pink_double_flower:half=upper botania:gray_double_flower:half=upper botania:light_gray_double_flower:half=upper botania:cyan_double_flower:half=upper botania:purple_double_flower:half=upper botania:blue_double_flower:half=upper botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=upper biomesoplenty:reed:half=upper biomesoplenty:cattail:half=upper byg:tall_crimson_roots:half=upper byg:tall_ether_grass:half=upper byg:reeds:half=upper byg:tall_prairie_grass:half=upper byg:tall_allium:half=upper byg:azalea:half=upper byg:tall_pink_allium:half=upper moreflowerbushes:purple_hibiscus:half=upper moreflowerbushes:mountain_laurel:half=upper moreflowerbushes:larkspur:half=upper moreflowerbushes:golden_shower:half=upper moreflowerbushes:fuchsia:half=upper moreflowerbushes:butterfly_weed:half=upper moreflowerbushes:blue_sage:half=upper moreflowerbushes:blue_hortensia:half=upper byg:japanese_orchid:half=upper byg:delphinium:half=upper byg:foxglove:half=upper cutecore:pink_rosebush:half=upper cutecore:white_rosebush:half=upper cutecore:pink_hydrangeas:half=upper cutecore:blue_hydrangeas:half=upper cutecore:purple_hydrangeas:half=upper farmersdelight:rice_panicles create_bic_bit:sunflowerstem:half=upper + block.10176 = minecraft:pitcher_plant:half=upper minecraft:sunflower:half=upper minecraft:lilac:half=upper minecraft:tall_grass:half=upper minecraft:large_fern:half=upper minecraft:rose_bush:half=upper minecraft:peony:half=upper minecraft:tall_seagrass:half=upper atmospheric:water_hyacinth:half=upper atmospheric:tall_yucca_flower:half=upper environmental:tall_cattail:half=upper environmental:pink_delphinium:half=upper environmental:blue_delphinium:half=upper environmental:purple_delphinium:half=upper environmental:white_delphinium:half=upper environmental:bird_of_paradise:half=upper environmental:giant_tall_grass:half=upper farmersdelight:wild_rice:half=upper upgrade_aquatic:flowering_rush:half=upper upgrade_aquatic:tall_beachgrass:half=upper upgrade_aquatic:tall_blue_pickerelweed:half=upper upgrade_aquatic:tall_purple_pickerelweed:half=upper biomesoplenty:barley:half=upper biomesoplenty:goldenrod:half=upper biomesoplenty:blue_hydrangea:half=upper biomesoplenty:watergrass:half=upper botania:white_double_flower:half=upper botania:orange_double_flower:half=upper botania:magenta_double_flower:half=upper botania:light_blue_double_flower:half=upper botania:yellow_double_flower:half=upper botania:lime_double_flower:half=upper botania:pink_double_flower:half=upper botania:gray_double_flower:half=upper botania:light_gray_double_flower:half=upper botania:cyan_double_flower:half=upper botania:purple_double_flower:half=upper botania:blue_double_flower:half=upper botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=upper biomesoplenty:reed:half=upper biomesoplenty:cattail:half=upper byg:tall_crimson_roots:half=upper byg:tall_ether_grass:half=upper byg:reeds:half=upper byg:tall_prairie_grass:half=upper byg:tall_allium:half=upper byg:azalea:half=upper byg:tall_pink_allium:half=upper moreflowerbushes:purple_hibiscus:half=upper moreflowerbushes:mountain_laurel:half=upper moreflowerbushes:larkspur:half=upper moreflowerbushes:golden_shower:half=upper moreflowerbushes:fuchsia:half=upper moreflowerbushes:butterfly_weed:half=upper moreflowerbushes:blue_sage:half=upper moreflowerbushes:blue_hortensia:half=upper byg:japanese_orchid:half=upper byg:delphinium:half=upper byg:foxglove:half=upper cutecore:pink_rosebush:half=upper cutecore:white_rosebush:half=upper cutecore:pink_hydrangeas:half=upper cutecore:blue_hydrangeas:half=upper cutecore:purple_hydrangeas:half=upper farmersdelight:rice_panicles create_bic_bit:sunflowerstem:half=upper tfc:plant/badderlocks:half=upper # LEAVES block.10018 = minecraft:cherry_leaves minecraft:oak_leaves minecraft:spruce_leaves minecraft:birch_leaves minecraft:jungle_leaves minecraft:acacia_leaves minecraft:dark_oak_leaves minecraft:pale_oak_leaves minecraft:azalea_leaves minecraft:azalea_leaves_flowers minecraft:flowering_azalea_leaves minecraft:mangrove_leaves biomesoplenty:origin_leaves biomesoplenty:flowering_oak_leaves biomesoplenty:rainbow_birch_leaves biomesoplenty:yellow_autumn_leaves biomesoplenty:orange_autumn_leaves biomesoplenty:maple_leaves biomesoplenty:fir_leaves biomesoplenty:redwood_leaves biomesoplenty:mahogany_leaves biomesoplenty:palm_leaves biomesoplenty:willow_leaves biomesoplenty:dead_leaves biomesoplenty:magic_leaves biomesoplenty:umbran_leaves biomesoplenty:hellbark_leaves biomesoplenty:pink_cherry_leaves biomesoplenty:white_cherry_leaves biomesoplenty:jacaranda_leaves quark:blue_blossom_leaves quark:lavender_blossom_leaves quark:orange_blossom_leaves quark:pink_blossom_leaves quark:yellow_blossom_leaves atmospheric:rosewood_leaves atmospheric:morado_leaves atmospheric:flowering_morado_leaves atmospheric:yucca_leaves atmospheric:kousa_leaves atmospheric:aspen_leaves atmospheric:grimwood_leaves autumnity:red_maple_leaves autumnity:orange_maple_leaves autumnity:yellow_maple_leaves autumnity:maple_leaves environmental:willow_leaves environmental:cherry_leaves environmental:pink_wisteria_leaves environmental:blue_wisteria_leaves environmental:purple_wisteria_leaves environmental:white_wisteria_leaves environmental:pink_hanging_wisteria_leaves environmental:blue_hanging_wisteria_leaves environmental:purple_hanging_wisteria_leaves environmental:white_hanging_wisteria_leaves environmental:hanging_willow_leaves upgrade_aquatic:river_leaves byg:aspen_leaves byg:araucaria_leaves byg:baobab_leaves byg:blooming_witch_hazel_leaves byg:blue_enchanted_leaves byg:blue_spruce_leaves byg:brown_birch_leaves byg:brown_oak_leaves byg:brown_zelkova_leaves byg:cika_leaves byg:cypress_leaves byg:ebony_leaves byg:fir_leaves byg:flowering_orchard_leaves byg:flowering_nightshade_leaves byg:flowering_palo_verde_leaves byg:green_apple_skyris_leaves byg:green_enchanted_leaves byg:holly_berry_leaves byg:holly_leaves byg:indigo_jacaranda_leaves byg:jacaranda_leaves byg:joshua_leaves byg:mahogany_leaves byg:mangrove_leaves byg:maple_leaves byg:orange_birch_leaves byg:orange_oak_leaves byg:orange_spruce_leaves byg:orchard_leaves byg:palo_verde_leaves byg:pine_leaves byg:pink_cherry_leaves byg:rainbow_eucalyptus_leaves byg:red_birch_leaves byg:red_maple_leaves byg:red_oak_leaves byg:red_spruce_leaves byg:redwood_leaves byg:ripe_joshua_leaves byg:ripe_orchard_leaves byg:silver_maple_leaves byg:skyris_leaves byg:white_cherry_leaves byg:willow_leaves byg:witch_hazel_leaves byg:yellow_birch_leaves byg:yellow_spruce_leaves byg:zelkova_leaves ecotones:hazel_leaves sakurarosea:alt_sakura_leaves sakurarosea:sakura_leaves sakurarosea:white_sakura_leaves terrestria:cypress_leaves terrestria:dark_japanese_maple_leaves terrestria:hemlock_leaves terrestria:japanese_maple_leaves terrestria:japanese_maple_shrub_leaves terrestria:jungle_palm_leaves terrestria:rainbow_eucalyptus_leaves terrestria:redwood_leaves terrestria:rubber_leaves terrestria:sakura_leaves terrestria:willow_leaves terrestria:yucca_palm_leaves traverse:brown_autumnal_leaves traverse:fir_leaves traverse:orange_autumnal_leaves traverse:red_autumnal_leaves traverse:yellow_autumnal_leaves vanillaenhanced:redwood_leaves wild_explorer:autumn_oak_leaves wild_explorer:autumn_birch_leaves wild_explorer:pink_cherry_oak_leaves wild_explorer:white_cherry_oak_leaves wild_explorer:palm_leaves cutecore:cherry_wood_leaves cutecore:cherry_wood_leaves_fruit cutecore:wisteria_leaves cutecore:lemon_leaves cutecore:lemon_leaves_fruiting dynamictrees:jungle_leaves dynamictrees:oak_leaves dynamictrees:spruce_leaves dynamictrees:dark_oak_leaves dynamictrees:acacia_leaves dynamictrees:birch_leaves simplefarming:apple_leaves simplefarming:apricot_leaves simplefarming:banana_leaves simplefarming:cherry_leaves simplefarming:mango_leaves simplefarming:olive_leaves simplefarming:orange_leaves simplefarming:pear_leaves simplefarming:plum_leaves mythicbotany:dreamwood_leaves undergarden:smogstem_leaves undergarden:wigglewood_leaves occultism:otherworld_leaves occultism:otherworld_leaves_natural integrateddynamics:menril_leaves extlights:xmas_leaves extlights:xmas_leaves_bulb extlights:xmas_leaves_bulb_red extlights:xmas_leaves_bulb_green extlights:xmas_leaves_bulb_blue extlights:xmas_leaves_bulb_blinking_redgreen extlights:xmas_leaves_bulb_blinking_redblue extlights:xmas_leaves_bulb_blinking_greenblue extlights:xmas_leaves_bulb_blinking_rgb extlights:xmas_leaves_bulb_smooth_redgreen extlights:xmas_leaves_bulb_smooth_redblue extlights:xmas_leaves_bulb_smooth_greenblue extlights:xmas_leaves_bulb_smooth_rgb techreborn:rubber_leaves blockus:legacy_leaves blockus:white_oak_leaves architects_palette:twisted_leaves twilightforest:twilight_oak_leaves twilightforest:canopy_leaves twilightforest:mangrove_leaves twilightforest:dark_leaves twilightforest:time_leaves twilightforest:transformation_leaves twilightforest:mining_leaves twilightforest:sorting_leaves twilightforest:giant_leaves twilightforest:thorn_leaves tfc:wood/leaves/acacia tfc:wood/leaves/ash tfc:wood/leaves/aspen tfc:wood/leaves/birch tfc:wood/leaves/blackwood tfc:wood/leaves/chestnut tfc:wood/leaves/douglas_fir tfc:wood/leaves/hickory tfc:wood/leaves/kapok tfc:wood/leaves/mangrove tfc:wood/leaves/maple tfc:wood/leaves/oak tfc:wood/leaves/palm tfc:wood/leaves/pine tfc:wood/leaves/rosewood tfc:wood/leaves/sequoia tfc:wood/leaves/spruce tfc:wood/leaves/sycamore tfc:wood/leaves/white_cedar tfc:wood/leaves/willow tfc:plant/cherry_leaves tfc:plant/green_apple_leaves tfc:plant/lemon_leaves tfc:plant/olive_leaves tfc:plant/orange_leaves tfc:plant/peach_leaves tfc:plant/plum_leaves tfc:plant/red_apple_leaves deeperdarker:echo_leaves create_dd:rubber_leaves @@ -48,16 +48,22 @@ block.10440 = white_carpet orange_carpet magenta_carpet light_blue_carpet yellow_carpet lime_carpet pink_carpet gray_carpet light_gray_carpet cyan_carpet purple_carpet blue_carpet brown_carpet green_carpet red_carpet black_carpet white_wool orange_wool magenta_wool light_blue_wool yellow_wool lime_wool pink_wool gray_wool light_gray_wool cyan_wool purple_wool blue_wool brown_wool green_wool red_wool black_wool estrogen:moth_wool estrogen:quilted_moth_wool estrogen:moth_wool_carpet estrogen:quilted_moth_wool_carpet farmersdelight:canvas_rug farmersdelight:full_tatami_mat farmersdelight:half_tatami_mat farmersdelight:tatami sophisticated_backpacks:backpack create_dd:blueprint_block create_dd:blueprint_carpet create_dd:mysterious_blueprint_carpet handcrafted:acacia_couch handcrafted:birch_couch handcrafted:bamboo_couch handcrafted:cherry_couch handcrafted:crimson_couch handcrafted:dark_oak_couch handcrafted:jungle_couch handcrafted:mangrove_couch handcrafted:oak_couch handcrafted:spruce_couch handcrafted:warped_couch handcrafted:acacia_fancy_bed handcrafted:birch_fancy_bed handcrafted:bamboo_fancy_bed handcrafted:cherry_fancy_bed handcrafted:crimson_fancy_bed handcrafted:dark_oak_fancy_bed handcrafted:jungle_fancy_bed handcrafted:mangrove_fancy_bed handcrafted:oak_fancy_bed handcrafted:spruce_fancy_bed handcrafted:warped_fancy_bed create:white_seat interiors:white_chair interiors:white_floor_chair create:light_gray_seat interiors:light_gray_chair interiors:light_gray_floor_chair create:gray_seat interiors:gray_chair interiors:gray_floor_chair create:black_seat interiors:black_chair interiors:black_floor_chair create:brown_seat interiors:brown_chair interiors:brown_floor_chair create:red_seat interiors:red_chair interiors:red_floor_chair create:orange_seat interiors:orange_chair interiors:orange_floor_chair create:yellow_seat interiors:yellow_chair interiors:yellow_floor_chair create:lime_seat interiors:lime_chair interiors:lime_floor_chair create:green_seat interiors:green_chair interiors:green_floor_chair create:cyan_seat interiors:cyan_chair interiors:cyan_floor_chair create:light_blue_seat interiors:light_blue_chair interiors:light_blue_floor_chair create:blue_seat interiors:blue_chair interiors:blue_floor_chair create:purple_seat interiors:purple_chair interiors:purple_floor_chair create:magenta_seat interiors:magenta_chair interiors:magenta_floor_chair create:pink_seat interiors:pink_chair interiors:pink_floor_chair #else - # WAVING ENTITIES - block.10031 = minecraft:tallgrass biomesoplenty:plant_0 biomesoplenty:plant_1 atum:oasis_grass atum:dead_grass atum:shrub atum:weed thebetweenlands:blue_eyed_grass thebetweenlands:bottle_brush_grass thebetweenlands:cave_grass thebetweenlands:swamp_tallgrass thebetweenlands:pale_grass xlfoodmod:grass midnight:fingered_grass midnight:tall_midnight_grass tconstruct:slime_grass_tall pvj:short_grass pvj:chickenweed pvj:clovers pvj:crabgrass pvj:beach_grass biomesoplenty:coral coralreef:coral biomesoplenty:seaweed - block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots pvj:wild_wheat pvj:wild_potato pvj:wild_beetroot pvj:wild_carrot - block.10175 = minecraft:double_plant:half=lower thebetweenlands:swamp_double_tallgrass:half=lower thebetweenlands:tall_cattail:half=lower midnight:double_midnight_grass:half=lower zawa:eucalyptus_bottom botania:doubleflower1:half=lower botania:doubleflower2:half=lower zawa:karvy_bottom - block.10176 = minecraft:double_plant:half=upper thebetweenlands:swamp_double_tallgrass:half=upper thebetweenlands:tall_cattail:half=upper midnight:double_midnight_grass:half=upper zawa:eucalyptus_top botania:doubleflower1:half=upper botania:doubleflower2:half=upper zawa:karvy_top + # GRASS LIKE ENTITIES + block.10031 = minecraft:tallgrass biomesoplenty:plant_0 biomesoplenty:plant_1 atum:oasis_grass atum:dead_grass atum:shrub atum:weed thebetweenlands:blue_eyed_grass thebetweenlands:bottle_brush_grass thebetweenlands:cave_grass thebetweenlands:swamp_tallgrass thebetweenlands:pale_grass xlfoodmod:grass midnight:fingered_grass midnight:tall_midnight_grass tconstruct:slime_grass_tall pvj:short_grass pvj:chickenweed pvj:clovers pvj:crabgrass pvj:beach_grass biomesoplenty:coral coralreef:coral biomesoplenty:seaweed tfc:plant/allium tfc:plant/anthurium tfc:plant/arrowhead tfc:plant/artist_conk tfc:plant/tulip_white + + # CROPS LIKE + block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots pvj:wild_wheat pvj:wild_potato pvj:wild_beetroot pvj:wild_carrot tfc:crop/carrot tfc:crop/tomato + + # LOWER-HALF ENTITIES + block.10175 = minecraft:double_plant:half=lower thebetweenlands:swamp_double_tallgrass:half=lower thebetweenlands:tall_cattail:half=lower midnight:double_midnight_grass:half=lower zawa:eucalyptus_bottom botania:doubleflower1:half=lower botania:doubleflower2:half=lower zawa:karvy_bottom tfc:plant/badderlocks:half=LOWER + + # UPPER-HALF ENTITIES + block.10176 = minecraft:double_plant:half=upper thebetweenlands:swamp_double_tallgrass:half=upper thebetweenlands:tall_cattail:half=upper midnight:double_midnight_grass:half=upper zawa:eucalyptus_top botania:doubleflower1:half=upper botania:doubleflower2:half=upper zawa:karvy_top tfc:plant/badderlocks:half=upper block.10018 = minecraft:leaves minecraft:leaves2 biomesoplenty:leaves_0 biomesoplenty:leaves_1 biomesoplenty:leaves_2 biomesoplenty:leaves_3 biomesoplenty:leaves_4 biomesoplenty:leaves_5 atum:palm_leaves atum:deadwood_leaves quark:variant_leaves twilightforest:twilight_leaves twilightforest:magic_leaves twilightforest:twilight_leaves_3 twilightforest:dark_leaves twilightforest:giant_leaves midnight:shadowroot_leaves midnight:dark_willow_leaves aether_legacy:aether_leaves aether_legacy:crystal_leaves dynamictrees:leaves0 dynamictrees:leaves1 betterwithmods:blood_leaves rustic:leaves thebetweenlands:leaves_weedwood_tree thebetweenlands:leaves_sap_tree thebetweenlands:leaves_rubber_tree thebetweenlands:leaves_hearthgrove_tree thebetweenlands:leaves_nibbletwig_tree thebetweenlands:leaves_spirit_tree_top thebetweenlands:leaves_spirit_tree_middle thebetweenlands:leaves_spirit_tree_bottom ic2:leaves tconstruct:slime_leaves forestry:leaves pvj:leaves_willow pvj:leaves_mangrove pvj:leaves_palm pvj:leaves_redwood pvj:leaves_fir pvj:leaves_pine pvj:leaves_aspen pvj:leaves_red_maple pvj:leaves_orange_maple pvj:leaves_baobab pvj:leaves_cottonwood pvj:leaves_juniper pvj:leaves_juniper_berried pvj:leaves_white_cherry_blossom pvj:leaves_pink_cherry_blossom pvj:leaves_jacaranda extrabiomesxl:leaf_autumn_brown extrabiomesxl:leaf_autumn_orange extrabiomesxl:leaf_autumn_red extrabiomesxl:leaf_autumn_yellow extrabiomesxl:leaf_cypress_bald extrabiomesxl:leaf_cypress_regular extrabiomesxl:leaf_fir extrabiomesxl:leaf_japanese_maple_regular extrabiomesxl:leaf_japanese_maple_shrub extrabiomesxl:leaf_rainbow_eucalyptus extrabiomesxl:leaf_redwood extrabiomesxl:leaf_sakura extrautils2:ironwood_leaves musiccraft:mleaves thaumcraft:leaves_greatwood thaumcraft:leaves_silverwood # WATER LIKE - block.10008 = minecraft:water minecraft:flowing_water 113_water_mechanics:downwards_bubble_column 113_water_mechanics:upwards_bubble_column bubble_elevator:bubble_column magma_bubble_column:magma_bubble_column + block.10008 = minecraft:water minecraft:flowing_water 113_water_mechanics:downwards_bubble_column 113_water_mechanics:upwards_bubble_column bubble_elevator:bubble_column magma_bubble_column:magma_bubble_column subwild:water_puddle tfc:fluid/finite_fresh_water tfc:fluid/fresh_water tfc:fluid/finite_salt_water tfc:fluid/salt_water tfc:fluid/finite_river_water tfc:fluid/river_water tfc:fluid/spring_water tfc:fluid/finite_spring_water # REFLECTIVE block.10079 = ice slime stained_glass stained_glass_pane diff --git a/shaders/common/composite2_fragment.glsl b/shaders/common/composite2_fragment.glsl index ab7e2e40..660cd92d 100644 --- a/shaders/common/composite2_fragment.glsl +++ b/shaders/common/composite2_fragment.glsl @@ -97,8 +97,7 @@ void main() { block_color.rgb = fast_taa(block_color.rgb, texcoord_past); #endif - // Black splat fix test - block_color = clamp(block_color, vec4(0.0), vec4(100.0)); + block_color = clamp(block_color, vec4(0.0), vec4(50.0)); /* DRAWBUFFERS:13 */ gl_FragData[0] = block_color; // colortex1 diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 2be922b0..27222146 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -226,7 +226,7 @@ void main() { block_color.rgb *= 1.5; #endif - block_color.rgba = clamp(block_color, vec4(0.0), vec4(100.0)); + block_color.rgba = clamp(block_color, vec4(0.0), vec4(50.0)); #include "/src/finalcolor.glsl" #include "/src/writebuffers.glsl" diff --git a/shaders/common/solid_dh_blocks_fragment.glsl b/shaders/common/solid_dh_blocks_fragment.glsl index b2637778..e9c261cb 100644 --- a/shaders/common/solid_dh_blocks_fragment.glsl +++ b/shaders/common/solid_dh_blocks_fragment.glsl @@ -77,7 +77,7 @@ void main() { block_color.rgb *= mix(real_light, vec3(1.0), nightVision * 0.125); block_color.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); - block_color.rgba = clamp(block_color, vec4(0.0), vec4(100.0)); + block_color.rgba = clamp(block_color, vec4(0.0), vec4(50.0)); #include "/src/finalcolor_dh.glsl" #include "/src/writebuffers.glsl" diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 45b6752a..79b52a6d 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -16,7 +16,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.1d +value.ACERCADE.0=v.9.1e #Options ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 58881d6f..b5424e41 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -16,7 +16,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.1d +value.ACERCADE.0=v.9.1e #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 29e57e94..0dde78ef 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -16,7 +16,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.1d +value.ACERCADE.0=v.9.1e #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 4939f96d..4a54b648 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -16,7 +16,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.1d +value.ACERCADE.0=v.9.1e #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 3d49f438..095d7bd0 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -16,7 +16,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.1d +value.ACERCADE.0=v.9.1e #Options ############################# From af895815a58d0a795e4abe4e242eabaebf31563b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 26 Apr 2025 16:50:36 -0600 Subject: [PATCH 043/147] Version 9.1e --- shaders/lib/config.alternate.glsl | 324 --------------------------- shaders/lib/config.original.glsl | 323 -------------------------- shaders/shaders.alternate.properties | 210 ----------------- shaders/shaders.original.properties | 210 ----------------- shaders/shaders.properties | 4 +- 5 files changed, 2 insertions(+), 1069 deletions(-) delete mode 100644 shaders/lib/config.alternate.glsl delete mode 100644 shaders/lib/config.original.glsl delete mode 100644 shaders/shaders.alternate.properties delete mode 100644 shaders/shaders.original.properties diff --git a/shaders/lib/config.alternate.glsl b/shaders/lib/config.alternate.glsl deleted file mode 100644 index 8ee01c0b..00000000 --- a/shaders/lib/config.alternate.glsl +++ /dev/null @@ -1,324 +0,0 @@ -/* MakeUp - config.glsl -Config variables - -Javier Garduño - GNU Lesser General Public License v3.0 -*/ - -// Useful entities -#define ENTITY_SMALLGRASS 10031.0 // Normal grass like entities -#define ENTITY_LOWERGRASS 10175.0 // Lower half only -#define ENTITY_UPPERGRASS 10176.0 // Upper half only -#define ENTITY_SMALLENTS 10059.0 // Crops like entities -#define ENTITY_SMALLENTS_NW 10032.0 // No waveable small ents -#define ENTITY_LEAVES 10018.0 // Leaves -#define ENTITY_VINES 10106.0 // Vines -#define ENTITY_EMMISIVE 10089.0 // Emissors -#define ENTITY_S_EMMISIVE 10090.0 // Emissors -#define ENTITY_F_EMMISIVE 10213.0 // Fake emissors -#define ENTITY_NO_SHADOW_FIRE 10214.0 // Fire (no shadow) -#define ENTITY_WATER 10008.0 // Water -#define ENTITY_PORTAL 10090.0 // Portal -#define ENTITY_STAINED 10079.0 // Glass -#define ENTITY_METAL 10400.0 // Metal-like glossy blocks -#define ENTITY_SAND 10410.0 // Sand-like glossy blocks -#define ENTITY_FABRIC 10440.0 // Fabric-like glossy blocks - -// Other constants -#define ZENITH_SKY_RAIN_COLOR vec3(.7, .85, 1.0) -#define HORIZON_SKY_RAIN_COLOR vec3(0.35 , 0.425, 0.5) - -// Options -#define REFLECTION_SLIDER 2 // [0 1 2] Reflection quality. - Flipped image: Inaccurate but quick reflection. - Raymarching: Raytraced Screen Space Reflection. - -#if REFLECTION_SLIDER == 0 - #define REFLECTION 0 - #define SSR_TYPE 0 - #define REFLEX_INDEX 0.45 -#elif REFLECTION_SLIDER == 1 - #define REFLECTION 1 - #define SSR_TYPE 0 - #define REFLEX_INDEX 0.7 -#elif REFLECTION_SLIDER == 2 - #define REFLECTION 1 - #define SSR_TYPE 1 - #define REFLEX_INDEX 0.7 -#endif - -#define FOG_ACTIVE // Toggle fog -#define NETHER_FOG_DISTANCE 0 // [0 1] // Sets Nether fog distance to half of the render distance (maximum of 96 blocks) -#define ACERCADE 0 // [0] -#define WAVING 1 // [0 1] Makes objects like leaves or grass move in the wind -#define TINTED_WATER 1 // [0 1] Use the resource pack color for water. -#define REFRACTION 1 // [0 1] Activate refractions. -// #define DOF // Enables depth of field (high performance cost). -#define DOF_STRENGTH 0.09 // [0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13] Depth of field strength. -#define AO 1 // [0 1] Turn on for enhanced ambient occlusion (medium performance cost). -#define AOSTEPS 4 // [4 5 6 7 8 9 10 11] How many samples are taken for AO (high performance cost). -#define AO_STRENGTH 0.70 // [0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.66 0.70 0.75 0.80 0.85] Ambient occlusion strength (strength NOT affect performance). -#define AA_TYPE 2 // [0 1 2 3] No: Disable antialiasing (not recommended). Denoise only: Supersampling is only used to eliminate noise. TAA: Enable antialiasing (Recommended). Sharp TAA: A subtle sharpening effect is used on the TAA. -//#define MOTION_BLUR // Turn on motion blur -#define MOTION_BLUR_STRENGTH 1.0 // [0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0] Set Motion blur strength. Lower framerate -> Lower strength and vice versa is recommended. -#define MOTION_BLUR_SAMPLES 4 // [3 4 5 6 7 8] Motion blur samples -#define SUN_REFLECTION 1 // [0 1] Enable sun (or moon) reflection on water and glass - -#define SHADOW_TYPE 1 // [0 1] Sets the shadow type -#define SHADOW_BLUR 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] Shadow blur intensity -// #define COLORED_SHADOW // Attempts to tint the shadow of translucent objects, as well as the associated volumetric light (if active). -#define WATER_ABSORPTION 0.50 // [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] Sets how much light the water absorbs. Low levels make the water more transparent. High levels make it more opaque. -#define COLOR_SCHEME 7 // [0 1 2 3 4 5 6 7 99] Ethereal: Old default theme. New shoka: Reinterpretation of a classic. Shoka: The classic. Legacy: Very old default. Captain: A cold preset of stylish colors. Psycodelic: Remaster of old vivid scheme. Cocoa: Warm theme. Testigo: Fantasy and cute scheme. Custom: Choose your colors in advanced options. -#define WATER_TEXTURE 1 // [0 1] Enable or disable resource pack water texture. It does not work properly in 1.12. In that case the default value is recommended. -#define AVOID_DARK_LEVEL 0.030 // [0.000 0.005 0.010 0.015 0.020 0.025 0.030 0.035 0.040 0.045 0.050 0.055 0.060] Minimal omni light intensity in caves. -#define NIGHT_BRIGHT 0.60 // [0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70] Adjusts the brightness of the night light in exteriors. -#define V_CLOUDS 1 // [0 1 2] Volumetric static: The clouds move, but they keep their shape. Volumetric dynamic: Clouds change shape over time, a different cloud landscape every time (medium performance hit). Vanilla: Original vanilla clouds. -#define CLOUD_VOL_STYLE 1 // [0 1] Set the volumetric cloud style. -#define CLOUD_REFLECTION // Set off-screen volumetric clouds reflection (volumetric clouds must be active). -#define END_CLOUDS // Activates drawing of clouds in the end (only works if volumetric clouds are active) -#define BLACK_ENTITY_FIX 0 // [0 1] Removes black entity bug in old video drivers (activate ONLY if you have problems with black entities) -#define BLOOM // Enable or disable bloom effect -#define BLOOM_SAMPLES 4.0 // [4.0 5.0 6.0 7.0 8.0 9.0 10.0] Bloom sample pairs. -#define CHROMA_ABER 0 // [0 1] Enable chroma aberration. -#define CHROMA_ABER_STRENGTH 0.04 // [0.04 0.05 0.06] Chroma aberration strength. -#define VOL_LIGHT 1 // [0 1 2] Depth based: Turn on depth based godrays, they are a bit slow, but can work better than volumetric light for very short shadow distances. Volumetric: It activates the volumetric light, more accurate and faster, but it needs the shadows enabled to work. -// #define VANILLA_WATER // Establishes the appearance of water as vanilla. -#define WATER_COLOR_SOURCE 0 // [0 1] Select the water color source. It does not work properly in 1.12. In that case the default value is recommended. -#define WATER_TURBULENCE 7.0 // [7.0 1.75 0.9 0.5] Set the water waves strength. -#define FOG_ADJUST 2.0 // [10.0 8.0 4.0 2.0 1.0] Sets the fog strength -// #define DEBUG_MODE // Set debug mode. -#define BLOCKLIGHT_TEMP 4 // [0 1 2 3 4] Set blocklight temperature -#define MATERIAL_GLOSS // A very subtle effect that adds some ability to reflect direct light on some blocks. It is most noticeable on metals and luminous objects. -#define DYN_HAND_LIGHT // Toggle the fake dynamic light - -// Custom colors -#define LIGHT_SUNSET_COLOR_R 0.71 // [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.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] -#define LIGHT_SUNSET_COLOR_G 0.44 // [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.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] -#define LIGHT_SUNSET_COLOR_B 0.29 // [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.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] - -#define LIGHT_DAY_COLOR_R 0.89 // [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.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] -#define LIGHT_DAY_COLOR_G 0.89 // [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.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] -#define LIGHT_DAY_COLOR_B 0.84 // [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.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] - -#define LIGHT_NIGHT_COLOR_R 0.048 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] -#define LIGHT_NIGHT_COLOR_G 0.052 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] -#define LIGHT_NIGHT_COLOR_B 0.061 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] - -#define ZENITH_SUNSET_COLOR_R 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 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] -#define ZENITH_SUNSET_COLOR_G 0.18 // [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.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] -#define ZENITH_SUNSET_COLOR_B 0.27 // [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.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] - -#define ZENITH_DAY_COLOR_R 0.06 // [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.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] -#define ZENITH_DAY_COLOR_G 0.26 // [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.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] -#define ZENITH_DAY_COLOR_B 0.44 // [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.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] - -#define ZENITH_NIGHT_COLOR_R 0.004 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] -#define ZENITH_NIGHT_COLOR_G 0.01 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] -#define ZENITH_NIGHT_COLOR_B 0.019 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] - -#define HORIZON_SUNSET_COLOR_R 0.71 // [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.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] -#define HORIZON_SUNSET_COLOR_G 0.55 // [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.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] -#define HORIZON_SUNSET_COLOR_B 0.42 // [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.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] - -#define HORIZON_DAY_COLOR_R 0.65 // [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.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] -#define HORIZON_DAY_COLOR_G 0.91 // [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.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] -#define HORIZON_DAY_COLOR_B 1.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 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] - -#define HORIZON_NIGHT_COLOR_R 0.025 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] -#define HORIZON_NIGHT_COLOR_G 0.035 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] -#define HORIZON_NIGHT_COLOR_B 0.05 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] - -#define WATER_COLOR_R 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.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] -#define WATER_COLOR_G 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.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] -#define WATER_COLOR_B 0.44 // [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.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] - -#define NV_COLOR_R 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] -#define NV_COLOR_G 0.8 // [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 NV_COLOR_B 1.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 OMNI_TINT_CUSTOM 0.65 // [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.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] - -#ifdef FOG_ACTIVE - // Don't remove -#endif - -#if NETHER_FOG_DISTANCE == 1 - #define NETHER_SIGHT min(far / 2, 96) -#else - #define NETHER_SIGHT far -#endif - -// Reflection parameters -#define RAYMARCH_STEPS 10 - -// Cloud parameters -#if CLOUD_VOL_STYLE == 1 - #define CLOUD_PLANE_SUP 380.0 - #define CLOUD_PLANE_CENTER 335.0 - #define CLOUD_PLANE 319.0 -#else - #define CLOUD_PLANE_SUP 590.0 - #define CLOUD_PLANE_CENTER 375.0 - #define CLOUD_PLANE 319.0 -#endif - -#define CLOUD_STEPS_AVG 10 // [7 8 9 10 11 12 13 14 15 16] Samples per pixel (high performance impact). -#define CLOUD_SPEED 0 // [0 1 2] Change the speed of clouds for demo purposes. - -#if CLOUD_VOL_STYLE == 1 - #if CLOUD_SPEED == 0 - #define CLOUD_HI_FACTOR 0.001388888888888889 - #define CLOUD_LOW_FACTOR 0.0002777777777777778 - #elif CLOUD_SPEED == 1 - #define CLOUD_HI_FACTOR 0.01388888888888889 - #define CLOUD_LOW_FACTOR 0.002777777777777778 - #elif CLOUD_SPEED == 2 - #define CLOUD_HI_FACTOR 0.1388888888888889 - #define CLOUD_LOW_FACTOR 0.02777777777777778 - #endif -#else - #if CLOUD_SPEED == 0 - #define CLOUD_HI_FACTOR 0.0016666666666666666 - #define CLOUD_LOW_FACTOR 0.0002777777777777778 - #elif CLOUD_SPEED == 1 - #define CLOUD_HI_FACTOR 0.016666666666666666 - #define CLOUD_LOW_FACTOR 0.002777777777777778 - #elif CLOUD_SPEED == 2 - #define CLOUD_HI_FACTOR 0.16666666666666666 - #define CLOUD_LOW_FACTOR 0.02777777777777778 - #endif -#endif - -// Godrays -#define GODRAY_STEPS 6 -#define CHEAP_GODRAY_SAMPLES 4 - -// Color blindness -// #define COLOR_BLINDNESS // Enable color blindness correction -#define COLOR_BLIND_MODE 0 // [0 1 2] Set color blindness type - -// Sun rotation angle -const float sunPathRotation = -25.0; // [-40.0 -35.0 -30.0 -25.0 -20.0 -15.0 -10.0 -5.0 0.0 5.0 10.0 15.0 20.0 25.0 30.0 35.0 40.0] - -#define SHADOW_DISTANCE_SLIDER 1 // [0 1 2] -#define SHADOW_QTY_SLIDER 2 // [1 2 3] - -#define SHADOW_CASTING // Enable or disable shadows. Configure quality in advanced options. - -#ifdef SHADOW_CASTING - // Shadow parameters - const float shadowIntervalSize = 3.0; - - const bool shadowtex0Mipmap = false; - const bool shadowtex1Mipmap = false; - const bool shadowColor0Mipmap = false; - const bool shadowColor1Mipmap = false; - - const bool shadowtex0Clear = false; - const bool shadowtex1Clear = false; - const bool shadowcolor0Clear = false; - const bool shadowcolor1Clear = false; - - #ifndef NO_SHADOWS - #if SHADOW_DISTANCE_SLIDER == 0 - #if SHADOW_QTY_SLIDER == 1 - #define SHADOW_LIMIT 75.0 - const int shadowMapResolution = 300; - const float shadowDistance = 75.0; - #define SHADOW_FIX_FACTOR 0.3 - #define SHADOW_DIST 0.75 - - #elif SHADOW_QTY_SLIDER == 2 - #define SHADOW_LIMIT 75.0 - const int shadowMapResolution = 600; - const float shadowDistance = 75.0; - #define SHADOW_FIX_FACTOR 0.15 - #define SHADOW_DIST 0.81 - - #elif SHADOW_QTY_SLIDER == 3 - #define SHADOW_LIMIT 75.0 - const int shadowMapResolution = 1200; - const float shadowDistance = 75.0; - #define SHADOW_FIX_FACTOR 0.05 - #define SHADOW_DIST 0.81 - - #endif - - #elif SHADOW_DISTANCE_SLIDER == 1 - #if SHADOW_QTY_SLIDER == 1 - #define SHADOW_LIMIT 105.0 - const int shadowMapResolution = 420; - const float shadowDistance = 105.0; - #define SHADOW_FIX_FACTOR 0.28 - #define SHADOW_DIST 0.75 - - #elif SHADOW_QTY_SLIDER == 2 - #define SHADOW_LIMIT 105.0 - const int shadowMapResolution = 840; - const float shadowDistance = 105.0; - #define SHADOW_FIX_FACTOR 0.07 - #define SHADOW_DIST 0.83 - - #elif SHADOW_QTY_SLIDER == 3 - #define SHADOW_LIMIT 105.0 - const int shadowMapResolution = 1680; - const float shadowDistance = 105.0; - #define SHADOW_FIX_FACTOR 0.03 - #define SHADOW_DIST 0.83 - - #endif - - #elif SHADOW_DISTANCE_SLIDER == 2 - #if SHADOW_QTY_SLIDER == 1 - #define SHADOW_LIMIT 255.0 - const int shadowMapResolution = 1020; - const float shadowDistance = 255.0; - #define SHADOW_FIX_FACTOR 0.12 - #define SHADOW_DIST 0.8 - - #elif SHADOW_QTY_SLIDER == 2 - #define SHADOW_LIMIT 255.0 - const int shadowMapResolution = 2040; - const float shadowDistance = 255.0; - #define SHADOW_FIX_FACTOR 0.03 - #define SHADOW_DIST 0.85 - - #elif SHADOW_QTY_SLIDER == 3 - #define SHADOW_LIMIT 255.0 - const int shadowMapResolution = 4080; - const float shadowDistance = 255.0; - #define SHADOW_FIX_FACTOR 0.015 - #define SHADOW_DIST 0.87 - - #endif - #endif - - #if VOL_LIGHT == 2 - const float shadowDistanceRenderMul = -1.0; - #else - const float shadowDistanceRenderMul = 1.0; - #endif - - const bool shadowHardwareFiltering = true; - const bool shadowtex1Nearest = false; - #endif - -#else - #define SHADOW_DIST 0.0 - #define SHADOW_RES 0 - const int shadowMapResolution = 100; - const float shadowDistance = 60.0; -#endif - -// Redefined constants -#if AO == 0 - const float ambientOcclusionLevel = 0.7; -#else - const float ambientOcclusionLevel = 0.0; -#endif - -const float eyeBrightnessHalflife = 6.0; -const float centerDepthHalflife = 0.66; - -// DH exclusive -#if defined DISTANT_HORIZONS - #define TRANSITION_DH_SUP 0.05 - #define TRANSITION_DH_INF 0.90 -#endif \ No newline at end of file diff --git a/shaders/lib/config.original.glsl b/shaders/lib/config.original.glsl deleted file mode 100644 index 965fb321..00000000 --- a/shaders/lib/config.original.glsl +++ /dev/null @@ -1,323 +0,0 @@ -/* MakeUp - config.glsl -Config variables - -Javier Garduño - GNU Lesser General Public License v3.0 -*/ - -// Useful entities -#define ENTITY_SMALLGRASS 10031.0 // Normal grass like entities -#define ENTITY_LOWERGRASS 10175.0 // Lower half only -#define ENTITY_UPPERGRASS 10176.0 // Upper half only -#define ENTITY_SMALLENTS 10059.0 // Crops like entities -#define ENTITY_SMALLENTS_NW 10032.0 // No waveable small ents -#define ENTITY_LEAVES 10018.0 // Leaves -#define ENTITY_VINES 10106.0 // Vines -#define ENTITY_EMMISIVE 10089.0 // Emissors -#define ENTITY_S_EMMISIVE 10090.0 // Emissors -#define ENTITY_F_EMMISIVE 10213.0 // Fake emissors -#define ENTITY_WATER 10008.0 // Water -#define ENTITY_PORTAL 10090.0 // Portal -#define ENTITY_STAINED 10079.0 // Glass -#define ENTITY_METAL 10400.0 // Metal-like glossy blocks -#define ENTITY_SAND 10410.0 // Sand-like glossy blocks -#define ENTITY_FABRIC 10440.0 // Fabric-like glossy blocks - -// Other constants -#define ZENITH_SKY_RAIN_COLOR vec3(.7, .85, 1.0) -#define HORIZON_SKY_RAIN_COLOR vec3(0.35 , 0.425, 0.5) - -// Options -#define REFLECTION_SLIDER 2 // [0 1 2] Reflection quality. - Flipped image: Inaccurate but quick reflection. - Raymarching: Raytraced Screen Space Reflection. - -#if REFLECTION_SLIDER == 0 - #define REFLECTION 0 - #define SSR_TYPE 0 - #define REFLEX_INDEX 0.45 -#elif REFLECTION_SLIDER == 1 - #define REFLECTION 1 - #define SSR_TYPE 0 - #define REFLEX_INDEX 0.7 -#elif REFLECTION_SLIDER == 2 - #define REFLECTION 1 - #define SSR_TYPE 1 - #define REFLEX_INDEX 0.7 -#endif - -#define FOG_ACTIVE // Toggle fog -#define NETHER_FOG_DISTANCE 0 // [0 1] // Sets Nether fog distance to half of the render distance (maximum of 96 blocks) -#define ACERCADE 0 // [0] -#define WAVING 1 // [0 1] Makes objects like leaves or grass move in the wind -#define TINTED_WATER 1 // [0 1] Use the resource pack color for water. -#define REFRACTION 1 // [0 1] Activate refractions. -// #define DOF // Enables depth of field (high performance cost). -#define DOF_STRENGTH 0.09 // [0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13] Depth of field strength. -#define AO 1 // [0 1] Turn on for enhanced ambient occlusion (medium performance cost). -#define AOSTEPS 4 // [4 5 6 7 8 9 10 11] How many samples are taken for AO (high performance cost). -#define AO_STRENGTH 0.70 // [0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.66 0.70 0.75 0.80 0.85] Ambient occlusion strength (strength NOT affect performance). -#define AA_TYPE 2 // [0 1 2 3] No: Disable antialiasing (not recommended). Denoise only: Supersampling is only used to eliminate noise. TAA: Enable antialiasing (Recommended). Sharp TAA: A subtle sharpening effect is used on the TAA. -//#define MOTION_BLUR // Turn on motion blur -#define MOTION_BLUR_STRENGTH 1.0 // [0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0] Set Motion blur strength. Lower framerate -> Lower strength and vice versa is recommended. -#define MOTION_BLUR_SAMPLES 4 // [3 4 5 6 7 8] Motion blur samples -#define SUN_REFLECTION 1 // [0 1] Enable sun (or moon) reflection on water and glass - -#define SHADOW_TYPE 1 // [0 1] Sets the shadow type -#define SHADOW_BLUR 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] Shadow blur intensity -// #define COLORED_SHADOW // Attempts to tint the shadow of translucent objects, as well as the associated volumetric light (if active). -#define WATER_ABSORPTION 0.10 // [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] Sets how much light the water absorbs. Low levels make the water more transparent. High levels make it more opaque. -#define COLOR_SCHEME 1 // [0 1 2 3 4 5 6 7 99] Ethereal: Old default theme. New shoka: Reinterpretation of a classic. Shoka: The classic. Legacy: Very old default. Captain: A cold preset of stylish colors. Psycodelic: Remaster of old vivid scheme. Cocoa: Warm theme. Testigo: Fantasy and cute scheme. Custom: Choose your colors in advanced options. -#define WATER_TEXTURE 0 // [0 1] Enable or disable resource pack water texture. It does not work properly in 1.12. In that case the default value is recommended. -#define AVOID_DARK_LEVEL 0.030 // [0.000 0.005 0.010 0.015 0.020 0.025 0.030 0.035 0.040 0.045 0.050 0.055 0.060] Minimal omni light intensity in caves. -#define NIGHT_BRIGHT 0.60 // [0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70] Adjusts the brightness of the night light in exteriors. -#define V_CLOUDS 1 // [0 1 2] Volumetric static: The clouds move, but they keep their shape. Volumetric dynamic: Clouds change shape over time, a different cloud landscape every time (medium performance hit). Vanilla: Original vanilla clouds. -#define CLOUD_VOL_STYLE 0 // [0 1] Set the volumetric cloud style. -#define CLOUD_REFLECTION // Set off-screen volumetric clouds reflection (volumetric clouds must be active). -#define END_CLOUDS // Activates drawing of clouds in the end (only works if volumetric clouds are active) -#define BLACK_ENTITY_FIX 0 // [0 1] Removes black entity bug in old video drivers (activate ONLY if you have problems with black entities) -#define BLOOM // Enable or disable bloom effect -#define BLOOM_SAMPLES 4.0 // [4.0 5.0 6.0 7.0 8.0 9.0 10.0] Bloom sample pairs. -#define CHROMA_ABER 0 // [0 1] Enable chroma aberration. -#define CHROMA_ABER_STRENGTH 0.04 // [0.04 0.05 0.06] Chroma aberration strength. -#define VOL_LIGHT 1 // [0 1 2] Depth based: Turn on depth based godrays, they are a bit slow, but can work better than volumetric light for very short shadow distances. Volumetric: It activates the volumetric light, more accurate and faster, but it needs the shadows enabled to work. -// #define VANILLA_WATER // Establishes the appearance of water as vanilla. -#define WATER_COLOR_SOURCE 0 // [0 1] Select the water color source. It does not work properly in 1.12. In that case the default value is recommended. -#define WATER_TURBULENCE 0.9 // [7.0 1.75 0.9 0.5] Set the water waves strength. -#define FOG_ADJUST 2.0 // [10.0 8.0 4.0 2.0 1.0] Sets the fog strength -// #define DEBUG_MODE // Set debug mode. -#define BLOCKLIGHT_TEMP 1 // [0 1 2 3 4] Set blocklight temperature -#define MATERIAL_GLOSS // A very subtle effect that adds some ability to reflect direct light on some blocks. It is most noticeable on metals and luminous objects. -#define DYN_HAND_LIGHT // Toggle the fake dynamic light - -// Custom colors -#define LIGHT_SUNSET_COLOR_R 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 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] -#define LIGHT_SUNSET_COLOR_G 0.59 // [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.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] -#define LIGHT_SUNSET_COLOR_B 0.35 // [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.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] - -#define LIGHT_DAY_COLOR_R 0.90 // [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.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] -#define LIGHT_DAY_COLOR_G 0.84 // [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.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] -#define LIGHT_DAY_COLOR_B 0.79 // [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.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] - -#define LIGHT_NIGHT_COLOR_R 0.05 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] -#define LIGHT_NIGHT_COLOR_G 0.05 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] -#define LIGHT_NIGHT_COLOR_B 0.06 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] - -#define ZENITH_SUNSET_COLOR_R 0.14 // [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.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] -#define ZENITH_SUNSET_COLOR_G 0.24 // [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.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] -#define ZENITH_SUNSET_COLOR_B 0.36 // [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.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] - -#define ZENITH_DAY_COLOR_R 0.14 // [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.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] -#define ZENITH_DAY_COLOR_G 0.24 // [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.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] -#define ZENITH_DAY_COLOR_B 0.36 // [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.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] - -#define ZENITH_NIGHT_COLOR_R 0.014 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] -#define ZENITH_NIGHT_COLOR_G 0.019 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] -#define ZENITH_NIGHT_COLOR_B 0.025 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] - -#define HORIZON_SUNSET_COLOR_R 1.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.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] -#define HORIZON_SUNSET_COLOR_G 0.65 // [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.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] -#define HORIZON_SUNSET_COLOR_B 0.38 // [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.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] - -#define HORIZON_DAY_COLOR_R 0.65 // [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.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] -#define HORIZON_DAY_COLOR_G 0.91 // [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.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] -#define HORIZON_DAY_COLOR_B 1.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 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] - -#define HORIZON_NIGHT_COLOR_R 0.021 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] -#define HORIZON_NIGHT_COLOR_G 0.031 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] -#define HORIZON_NIGHT_COLOR_B 0.039 // [0.0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.01 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.02 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.03 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.04 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.05 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.06 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.07 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.08 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.09 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.1 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.11 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.12 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.13 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.14 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.15] - -#define WATER_COLOR_R 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 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] -#define WATER_COLOR_G 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 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] -#define WATER_COLOR_B 0.11 // [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.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] - -#define NV_COLOR_R 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] -#define NV_COLOR_G 0.8 // [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 NV_COLOR_B 1.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 OMNI_TINT_CUSTOM 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 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] - -#ifdef FOG_ACTIVE - // Don't remove -#endif - -#if NETHER_FOG_DISTANCE == 1 - #define NETHER_SIGHT min(far / 2, 96) -#else - #define NETHER_SIGHT far -#endif - -// Reflection parameters -#define RAYMARCH_STEPS 10 - -// Cloud parameters -#if CLOUD_VOL_STYLE == 1 - #define CLOUD_PLANE_SUP 380.0 - #define CLOUD_PLANE_CENTER 335.0 - #define CLOUD_PLANE 319.0 -#else - #define CLOUD_PLANE_SUP 590.0 - #define CLOUD_PLANE_CENTER 375.0 - #define CLOUD_PLANE 319.0 -#endif - -#define CLOUD_STEPS_AVG 10 // [7 8 9 10 11 12 13 14 15 16] Samples per pixel (high performance impact). -#define CLOUD_SPEED 0 // [0 1 2] Change the speed of clouds for demo purposes. - -#if CLOUD_VOL_STYLE == 1 - #if CLOUD_SPEED == 0 - #define CLOUD_HI_FACTOR 0.001388888888888889 - #define CLOUD_LOW_FACTOR 0.0002777777777777778 - #elif CLOUD_SPEED == 1 - #define CLOUD_HI_FACTOR 0.01388888888888889 - #define CLOUD_LOW_FACTOR 0.002777777777777778 - #elif CLOUD_SPEED == 2 - #define CLOUD_HI_FACTOR 0.1388888888888889 - #define CLOUD_LOW_FACTOR 0.02777777777777778 - #endif -#else - #if CLOUD_SPEED == 0 - #define CLOUD_HI_FACTOR 0.0016666666666666666 - #define CLOUD_LOW_FACTOR 0.0002777777777777778 - #elif CLOUD_SPEED == 1 - #define CLOUD_HI_FACTOR 0.016666666666666666 - #define CLOUD_LOW_FACTOR 0.002777777777777778 - #elif CLOUD_SPEED == 2 - #define CLOUD_HI_FACTOR 0.16666666666666666 - #define CLOUD_LOW_FACTOR 0.02777777777777778 - #endif -#endif - -// Godrays -#define GODRAY_STEPS 6 -#define CHEAP_GODRAY_SAMPLES 4 - -// Color blindness -// #define COLOR_BLINDNESS // Enable color blindness correction -#define COLOR_BLIND_MODE 0 // [0 1 2] Set color blindness type - -// Sun rotation angle -const float sunPathRotation = -25.0; // [-40.0 -35.0 -30.0 -25.0 -20.0 -15.0 -10.0 -5.0 0.0 5.0 10.0 15.0 20.0 25.0 30.0 35.0 40.0] - -#define SHADOW_DISTANCE_SLIDER 1 // [0 1 2] -#define SHADOW_QTY_SLIDER 2 // [1 2 3] - -#define SHADOW_CASTING // Enable or disable shadows. Configure quality in advanced options. - -#ifdef SHADOW_CASTING - // Shadow parameters - const float shadowIntervalSize = 3.0; - - const bool shadowtex0Mipmap = false; - const bool shadowtex1Mipmap = false; - const bool shadowColor0Mipmap = false; - const bool shadowColor1Mipmap = false; - - const bool shadowtex0Clear = false; - const bool shadowtex1Clear = false; - const bool shadowcolor0Clear = false; - const bool shadowcolor1Clear = false; - - #ifndef NO_SHADOWS - #if SHADOW_DISTANCE_SLIDER == 0 - #if SHADOW_QTY_SLIDER == 1 - #define SHADOW_LIMIT 75.0 - const int shadowMapResolution = 300; - const float shadowDistance = 75.0; - #define SHADOW_FIX_FACTOR 0.3 - #define SHADOW_DIST 0.75 - - #elif SHADOW_QTY_SLIDER == 2 - #define SHADOW_LIMIT 75.0 - const int shadowMapResolution = 600; - const float shadowDistance = 75.0; - #define SHADOW_FIX_FACTOR 0.15 - #define SHADOW_DIST 0.81 - - #elif SHADOW_QTY_SLIDER == 3 - #define SHADOW_LIMIT 75.0 - const int shadowMapResolution = 1200; - const float shadowDistance = 75.0; - #define SHADOW_FIX_FACTOR 0.05 - #define SHADOW_DIST 0.81 - - #endif - - #elif SHADOW_DISTANCE_SLIDER == 1 - #if SHADOW_QTY_SLIDER == 1 - #define SHADOW_LIMIT 105.0 - const int shadowMapResolution = 420; - const float shadowDistance = 105.0; - #define SHADOW_FIX_FACTOR 0.28 - #define SHADOW_DIST 0.75 - - #elif SHADOW_QTY_SLIDER == 2 - #define SHADOW_LIMIT 105.0 - const int shadowMapResolution = 840; - const float shadowDistance = 105.0; - #define SHADOW_FIX_FACTOR 0.07 - #define SHADOW_DIST 0.83 - - #elif SHADOW_QTY_SLIDER == 3 - #define SHADOW_LIMIT 105.0 - const int shadowMapResolution = 1680; - const float shadowDistance = 105.0; - #define SHADOW_FIX_FACTOR 0.03 - #define SHADOW_DIST 0.83 - - #endif - - #elif SHADOW_DISTANCE_SLIDER == 2 - #if SHADOW_QTY_SLIDER == 1 - #define SHADOW_LIMIT 255.0 - const int shadowMapResolution = 1020; - const float shadowDistance = 255.0; - #define SHADOW_FIX_FACTOR 0.12 - #define SHADOW_DIST 0.8 - - #elif SHADOW_QTY_SLIDER == 2 - #define SHADOW_LIMIT 255.0 - const int shadowMapResolution = 2040; - const float shadowDistance = 255.0; - #define SHADOW_FIX_FACTOR 0.03 - #define SHADOW_DIST 0.85 - - #elif SHADOW_QTY_SLIDER == 3 - #define SHADOW_LIMIT 255.0 - const int shadowMapResolution = 4080; - const float shadowDistance = 255.0; - #define SHADOW_FIX_FACTOR 0.015 - #define SHADOW_DIST 0.87 - - #endif - #endif - - #if VOL_LIGHT == 2 - const float shadowDistanceRenderMul = -1.0; - #else - const float shadowDistanceRenderMul = 1.0; - #endif - - const bool shadowHardwareFiltering = true; - const bool shadowtex1Nearest = false; - #endif - -#else - #define SHADOW_DIST 0.0 - #define SHADOW_RES 0 - const int shadowMapResolution = 100; - const float shadowDistance = 60.0; -#endif - -// Redefined constants -#if AO == 0 - const float ambientOcclusionLevel = 0.7; -#else - const float ambientOcclusionLevel = 0.0; -#endif - -const float eyeBrightnessHalflife = 6.0; -const float centerDepthHalflife = 0.66; - -// DH exclusive -#if defined DISTANT_HORIZONS - #define TRANSITION_DH_SUP 0.05 - #define TRANSITION_DH_INF 0.90 -#endif \ No newline at end of file diff --git a/shaders/shaders.alternate.properties b/shaders/shaders.alternate.properties deleted file mode 100644 index ae9fd73a..00000000 --- a/shaders/shaders.alternate.properties +++ /dev/null @@ -1,210 +0,0 @@ -# MakeUp - shader.properties - -#Profiles -profile.no_effects= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=0 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=0 SUN_REFLECTION=0 WAVING=0 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=1 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=7 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS -profile.shadowless_low= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=1 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=7 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS -profile.shadowless_medium= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=1 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=7 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.shadowless_high= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=1 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=7 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=1 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=7 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=1 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=7 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=1 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=7 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.extreme= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=1 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=7 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=1 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=7 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS - -# Default forced options -vignette = false -separateAo = false -oldLighting = false -dynamicHandLight = true -oldHandLight = false -underwaterOverlay = false -sun = true -moon = true -frustum.culling = true -shadow.culling = true -particles.before.deferred = true - -#if V_CLOUDS > 0 - clouds = off -#else - clouds = fancy -#endif - -texture.gbuffers.noisetex = textures/water_256_RG_8bit.png - -#if CLOUD_VOL_STYLE == 0 - texture.gbuffers.gaux2 = textures/clouds_natural_512_R_8bit.png - texture.deferred.gaux2 = textures/clouds_natural_512_R_8bit.png -#else - texture.gbuffers.gaux2 = textures/clouds_blocky_512_R_8bit.png - texture.deferred.gaux2 = textures/clouds_blocky_512_R_8bit.png -#endif - -# texture.deferred.colortex0 = textures/bluenoise_64.png - -program.shadow.enabled=SHADOW_CASTING -program.world0/shadow.enabled=SHADOW_CASTING -program.world1/shadow.enabled=SHADOW_CASTING -program.world-1/shadow.enabled=SHADOW_CASTING - -# Config main screen -screen.columns = 3 -screen = ACERCADE WAVING COLOR_SCHEME BLOOM REFLECTION_SLIDER AO SUN_REFLECTION SHADOW_CASTING V_CLOUDS CLOUD_REFLECTION COLORED_SHADOW AA_TYPE REFRACTION VOL_LIGHT DOF MATERIAL_GLOSS CHROMA_ABER MOTION_BLUR [ADVANCED_SCREEN] - -# Sub-screens: -screen.ADVANCED_SCREEN.columns=3 -screen.ADVANCED_SCREEN = [COMPATIBILITY_SCREEN] [ACCESIBILITY_SCREEN] [CUSTOM_COLORS_SCREEN] [SHADOWS_SCREEN] [DOF_SCREEN] [AO_SCREEN] [WATER_SCREEN] [POST_SCREEN] [CLOUDS_SCREEN] [LIGHT_SCREEN] [FOG_SCREEN] [MOTION_BLUR_SCREEN] - -screen.COMPATIBILITY_SCREEN = USE_BASIC_SH BLACK_ENTITY_FIX DEBUG_MODE -screen.SHADOWS_SCREEN = SHADOW_TYPE SHADOW_BLUR SHADOW_DISTANCE_SLIDER SHADOW_QTY_SLIDER -screen.DOF_SCREEN = DOF_STRENGTH -screen.AO_SCREEN = AOSTEPS AO_STRENGTH -screen.WATER_SCREEN = WATER_ABSORPTION WATER_TEXTURE VANILLA_WATER WATER_COLOR_SOURCE WATER_TURBULENCE -screen.POST_SCREEN = BLOOM_SAMPLES CHROMA_ABER_STRENGTH -screen.CLOUDS_SCREEN = CLOUD_SPEED CLOUD_STEPS_AVG CLOUD_VOL_STYLE END_CLOUDS sunPathRotation -screen.LIGHT_SCREEN = AVOID_DARK_LEVEL NIGHT_BRIGHT BLOCKLIGHT_TEMP DYN_HAND_LIGHT -screen.FOG_SCREEN = FOG_ACTIVE FOG_ADJUST NETHER_FOG_DISTANCE -screen.MOTION_BLUR_SCREEN = MOTION_BLUR_STRENGTH MOTION_BLUR_SAMPLES -screen.ACCESIBILITY_SCREEN = COLOR_BLINDNESS COLOR_BLIND_MODE - -screen.CUSTOM_COLORS_DAY.columns=3 -screen.CUSTOM_COLORS_DAY = LIGHT_DAY_COLOR_R LIGHT_DAY_COLOR_G LIGHT_DAY_COLOR_B ZENITH_DAY_COLOR_R ZENITH_DAY_COLOR_G ZENITH_DAY_COLOR_B HORIZON_DAY_COLOR_R HORIZON_DAY_COLOR_G HORIZON_DAY_COLOR_B - -screen.CUSTOM_COLORS_SUNSET.columns=3 -screen.CUSTOM_COLORS_SUNSET = LIGHT_SUNSET_COLOR_R LIGHT_SUNSET_COLOR_G LIGHT_SUNSET_COLOR_B ZENITH_SUNSET_COLOR_R ZENITH_SUNSET_COLOR_G ZENITH_SUNSET_COLOR_B HORIZON_SUNSET_COLOR_R HORIZON_SUNSET_COLOR_G HORIZON_SUNSET_COLOR_B - -screen.CUSTOM_COLORS_NIGHT.columns=3 -screen.CUSTOM_COLORS_NIGHT = LIGHT_NIGHT_COLOR_R LIGHT_NIGHT_COLOR_G LIGHT_NIGHT_COLOR_B ZENITH_NIGHT_COLOR_R ZENITH_NIGHT_COLOR_G ZENITH_NIGHT_COLOR_B HORIZON_NIGHT_COLOR_R HORIZON_NIGHT_COLOR_G HORIZON_NIGHT_COLOR_B - -screen.CUSTOM_COLORS_WATER.columns=3 -screen.CUSTOM_COLORS_WATER = WATER_COLOR_R WATER_COLOR_G WATER_COLOR_B - -screen.CUSTOM_COLORS_NV.columns=3 -screen.CUSTOM_COLORS_NV = NV_COLOR_R NV_COLOR_G NV_COLOR_B - -screen.CUSTOM_COLORS_SCREEN.columns=1 -screen.CUSTOM_COLORS_SCREEN = [CUSTOM_COLORS_DAY] [CUSTOM_COLORS_SUNSET] [CUSTOM_COLORS_NIGHT] [CUSTOM_COLORS_WATER] [CUSTOM_COLORS_NV] OMNI_TINT_CUSTOM - -sliders = SHADOW_DISTANCE_SLIDER SHADOW_QTY_SLIDER REFLECTION_SLIDER SHADOW_BLUR DOF_STRENGTH AOSTEPS AO_STRENGTH MOTION_BLUR_STRENGTH WATER_ABSORPTION CHROMA_ABER_STRENGTH BLOOM_SAMPLES CLOUD_STEPS_AVG sunPathRotation NIGHT_BRIGHT AVOID_DARK_LEVEL WATER_TURBULENCE FOG_ADJUST MOTION_BLUR_SAMPLES BLOCKLIGHT_TEMP LIGHT_DAY_COLOR_R LIGHT_DAY_COLOR_G LIGHT_DAY_COLOR_B ZENITH_DAY_COLOR_R ZENITH_DAY_COLOR_G ZENITH_DAY_COLOR_B HORIZON_DAY_COLOR_R HORIZON_DAY_COLOR_G HORIZON_DAY_COLOR_B LIGHT_SUNSET_COLOR_R LIGHT_SUNSET_COLOR_G LIGHT_SUNSET_COLOR_B ZENITH_SUNSET_COLOR_R ZENITH_SUNSET_COLOR_G ZENITH_SUNSET_COLOR_B HORIZON_SUNSET_COLOR_R HORIZON_SUNSET_COLOR_G HORIZON_SUNSET_COLOR_B LIGHT_NIGHT_COLOR_R LIGHT_NIGHT_COLOR_G LIGHT_NIGHT_COLOR_B ZENITH_NIGHT_COLOR_R ZENITH_NIGHT_COLOR_G ZENITH_NIGHT_COLOR_B HORIZON_NIGHT_COLOR_R HORIZON_NIGHT_COLOR_G HORIZON_NIGHT_COLOR_B WATER_COLOR_R WATER_COLOR_G WATER_COLOR_B NV_COLOR_R NV_COLOR_G NV_COLOR_B OMNI_TINT_CUSTOM - -# Custom uniforms ----- - -# Many values are precalculated to avoid their later or repetitive calculation. - -# Pixel size -uniform.float.pixel_size_x = 1.0 / viewWidth -uniform.float.pixel_size_y = 1.0 / viewHeight -uniform.float.inv_aspect_ratio = 1.0 / aspectRatio - -# Time constants -variable.float.hour_world = worldTime * 0.001 -uniform.float.day_moment = hour_world * 0.04166666666666667 - -# Day color mixer (for shadows) - This formula allows graphing the function that is calculated later. -# It allows setting values depending on the time of day. Particularly interesting are the transitions -# from day to night and vice versa, which are often used to indicate the intensity of the shadow -# (when it is produced by the moon instead of the sun), and other similar things. -# f(x) = min(−((x−.25)^2)∙20 + 1.25, 1) -# g(x) = min(−((x−.75)^2)∙50 + 3.125, 1) - -variable.float.moment_aux = day_moment - 0.25 -variable.float.moment_aux_2 = moment_aux * moment_aux -uniform.float.day_mixer = clamp(-moment_aux_2 * 20.0 + 1.25, 0.0, 1.0) - -variable.float.moment_aux_3 = day_moment - 0.75 -variable.float.moment_aux_4 = moment_aux_3 * moment_aux_3 -uniform.float.night_mixer = clamp(-moment_aux_4 * 50.0 + 3.125, 0.0, 1.0) - -# Day color mixer (for volumetric light) - "Similar to the previous case, but applied to values -# dependent on the time of day for volumetric lighting. - -variable.float.moment_aux_5 = (day_moment * 4.0) - 1.0 -variable.float.moment_aux_6 = moment_aux_5 * moment_aux_5 * moment_aux_5 * moment_aux_5 -variable.float.day_vol_mixer = clamp(((-moment_aux_6 + 1.0) * 7.0) + 1.0, 1.0, 8.0) - -variable.float.moment_aux_7 = (day_moment * 4.0) - 3.0 -variable.float.moment_aux_8 = moment_aux_7 * moment_aux_7 * moment_aux_7 * moment_aux_7 -variable.float.night_vol_mixer = clamp(((-moment_aux_8 + 1.0) * 7.0) + 1.0, 1.0, 8.0) - -uniform.float.vol_mixer = max(day_vol_mixer, night_vol_mixer) - -# Light mix - Similar to the previous cases, a value that depends on the time of day -# to adjust various different parameters. -variable.float.light_mix_a = if((worldTime >= 0 && worldTime < 12485) || worldTime >= 23515, 1.0, 0.0) -variable.float.light_mix_b = if(worldTime >= 12485 && worldTime < 13085, 1.0 - ((worldTime - 12485) * 0.0016666666666666668), 0.0) -variable.float.light_mix_c = 0.0 -variable.float.light_mix_d = if(worldTime >= 22915 && worldTime < 23515, (worldTime - 22915) * 0.0016666666666666668, 0.0) -variable.float.light_mix_e = max(light_mix_a, light_mix_b) -variable.float.light_mix_f = max(light_mix_c, light_mix_d) -uniform.float.light_mix = max(light_mix_e, light_mix_f) - -# Frame modulus -uniform.int.frame_mod = fmod(frameCounter, 10) - -# TAA OFFSET - The offset for TAA is precalculated here. -# It is based on a pentagon (repeated twice as it is a multiple of the 10-frame module.) -# The traversal goes from one vertex of the pentagon to another at the opposite end, -# so that the traversal between different points is maximized and the images vary -# as much as possible from one to the next. It helps to make the flickering of the image -# so fast that it is "absorbed" and better masked by the TAA history. - -#if AA_TYPE > -1 - # Pentagon - uniform.vec2.taa_offset = vec2((if( \ - frame_mod == 0, 0.7071067811865476, \ - frame_mod == 1, -0.5720614028176843, \ - frame_mod == 2, 0.2185080122244104, \ - frame_mod == 3, 0.21850801222441057, \ - frame_mod == 4, -0.5720614028176845, \ - frame_mod == 5, 0.7071067811865476, \ - frame_mod == 6, -0.5720614028176843, \ - frame_mod == 7, 0.2185080122244104, \ - frame_mod == 8, 0.21850801222441057, \ - frame_mod == 9, -0.5720614028176845, \ - 0.0)) * pixel_size_x, \ - (if( \ - frame_mod == 0, 0.0, \ - frame_mod == 1, 0.4156269377774535, \ - frame_mod == 2, -0.6724985119639574, \ - frame_mod == 3, 0.6724985119639574, \ - frame_mod == 4, -0.4156269377774534, \ - frame_mod == 5, 0.0, \ - frame_mod == 6, 0.4156269377774535, \ - frame_mod == 7, -0.6724985119639574, \ - frame_mod == 8, 0.6724985119639574, \ - frame_mod == 9, -0.4156269377774534, \ - 0.0)) * pixel_size_y) - - # Dither shift - When Temporal sampling is active, dithering patterns change over time, - # but not randomly. The dithering pattern remains fixed, but the assigned - # value to each point changes by adding a value defined here, so that they - # "rotate" in a controlled manner within the range of 0 to 1. - # When the sum exceeds 1.0, only the mantissa is taken. The changes are not completely random. - # They are incremental, but not by a fixed amount, but rather a fixed amount - # that was slightly altered by randomness. This only works in recent versions - # of Minecraft/Optifine. For older versions, a mechanism that depends on the - # uniform "frame_mod" is used to calculate the increment. - uniform.float.dither_shift = if( \ - frame_mod == 0, 0.0, \ - frame_mod == 1, 0.9, \ - frame_mod == 2, 0.5, \ - frame_mod == 3, 0.8, \ - frame_mod == 4, 0.3, \ - frame_mod == 5, 0.7, \ - frame_mod == 6, 0.1, \ - frame_mod == 7, 0.6, \ - frame_mod == 8, 0.4, \ - frame_mod == 9, 0.2, \ - 0.0) -#endif - -# FOV - A precalculated value related to FOV -uniform.float.fov_y_inv = 1.0 / atan(1.0 / gbufferProjection.1.1) * 0.5 - -# float horizontalFOV = atan(1.0 / gbufferProjection[0].x); -# float verticalFOV = atan(1.0 / gbufferProjection[1].y); <-- fov_y_inv - -#ifdef DISTANT_HORIZONS -dhShadow.enabled = false -blend.dh_water=SRC_ALPHA ONE_MINUS_SRC_ALPHA ONE ONE_MINUS_SRC_ALPHA -#endif \ No newline at end of file diff --git a/shaders/shaders.original.properties b/shaders/shaders.original.properties deleted file mode 100644 index 558715c4..00000000 --- a/shaders/shaders.original.properties +++ /dev/null @@ -1,210 +0,0 @@ -# MakeUp - shader.properties - -#Profiles -profile.no_effects= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=0 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=0 SUN_REFLECTION=0 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS -profile.shadowless_low= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS -profile.shadowless_medium= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.shadowless_high= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.extreme= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS - -# Default forced options -vignette = false -separateAo = false -oldLighting = false -dynamicHandLight = true -oldHandLight = false -underwaterOverlay = false -sun = true -moon = true -frustum.culling = true -shadow.culling = true -particles.before.deferred = true - -#if V_CLOUDS > 0 - clouds = off -#else - clouds = fancy -#endif - -texture.gbuffers.noisetex = textures/water_256_RG_8bit.png - -#if CLOUD_VOL_STYLE == 0 - texture.gbuffers.gaux2 = textures/clouds_natural_512_R_8bit.png - texture.deferred.gaux2 = textures/clouds_natural_512_R_8bit.png -#else - texture.gbuffers.gaux2 = textures/clouds_blocky_512_R_8bit.png - texture.deferred.gaux2 = textures/clouds_blocky_512_R_8bit.png -#endif - -# texture.deferred.colortex0 = textures/bluenoise_64.png - -program.shadow.enabled=SHADOW_CASTING -program.world0/shadow.enabled=SHADOW_CASTING -program.world1/shadow.enabled=SHADOW_CASTING -program.world-1/shadow.enabled=SHADOW_CASTING - -# Config main screen -screen.columns = 3 -screen = ACERCADE WAVING COLOR_SCHEME BLOOM REFLECTION_SLIDER AO SUN_REFLECTION SHADOW_CASTING V_CLOUDS CLOUD_REFLECTION COLORED_SHADOW AA_TYPE REFRACTION VOL_LIGHT DOF MATERIAL_GLOSS CHROMA_ABER MOTION_BLUR [ADVANCED_SCREEN] - -# Sub-screens: -screen.ADVANCED_SCREEN.columns=3 -screen.ADVANCED_SCREEN = [COMPATIBILITY_SCREEN] [ACCESIBILITY_SCREEN] [CUSTOM_COLORS_SCREEN] [SHADOWS_SCREEN] [DOF_SCREEN] [AO_SCREEN] [WATER_SCREEN] [POST_SCREEN] [CLOUDS_SCREEN] [LIGHT_SCREEN] [FOG_SCREEN] [MOTION_BLUR_SCREEN] - -screen.COMPATIBILITY_SCREEN = USE_BASIC_SH BLACK_ENTITY_FIX DEBUG_MODE -screen.SHADOWS_SCREEN = SHADOW_TYPE SHADOW_BLUR SHADOW_DISTANCE_SLIDER SHADOW_QTY_SLIDER -screen.DOF_SCREEN = DOF_STRENGTH -screen.AO_SCREEN = AOSTEPS AO_STRENGTH -screen.WATER_SCREEN = WATER_ABSORPTION WATER_TEXTURE VANILLA_WATER WATER_COLOR_SOURCE WATER_TURBULENCE -screen.POST_SCREEN = BLOOM_SAMPLES CHROMA_ABER_STRENGTH -screen.CLOUDS_SCREEN = CLOUD_SPEED CLOUD_STEPS_AVG CLOUD_VOL_STYLE END_CLOUDS sunPathRotation -screen.LIGHT_SCREEN = AVOID_DARK_LEVEL NIGHT_BRIGHT BLOCKLIGHT_TEMP DYN_HAND_LIGHT -screen.FOG_SCREEN = FOG_ACTIVE FOG_ADJUST NETHER_FOG_DISTANCE -screen.MOTION_BLUR_SCREEN = MOTION_BLUR_STRENGTH MOTION_BLUR_SAMPLES -screen.ACCESIBILITY_SCREEN = COLOR_BLINDNESS COLOR_BLIND_MODE - -screen.CUSTOM_COLORS_DAY.columns=3 -screen.CUSTOM_COLORS_DAY = LIGHT_DAY_COLOR_R LIGHT_DAY_COLOR_G LIGHT_DAY_COLOR_B ZENITH_DAY_COLOR_R ZENITH_DAY_COLOR_G ZENITH_DAY_COLOR_B HORIZON_DAY_COLOR_R HORIZON_DAY_COLOR_G HORIZON_DAY_COLOR_B - -screen.CUSTOM_COLORS_SUNSET.columns=3 -screen.CUSTOM_COLORS_SUNSET = LIGHT_SUNSET_COLOR_R LIGHT_SUNSET_COLOR_G LIGHT_SUNSET_COLOR_B ZENITH_SUNSET_COLOR_R ZENITH_SUNSET_COLOR_G ZENITH_SUNSET_COLOR_B HORIZON_SUNSET_COLOR_R HORIZON_SUNSET_COLOR_G HORIZON_SUNSET_COLOR_B - -screen.CUSTOM_COLORS_NIGHT.columns=3 -screen.CUSTOM_COLORS_NIGHT = LIGHT_NIGHT_COLOR_R LIGHT_NIGHT_COLOR_G LIGHT_NIGHT_COLOR_B ZENITH_NIGHT_COLOR_R ZENITH_NIGHT_COLOR_G ZENITH_NIGHT_COLOR_B HORIZON_NIGHT_COLOR_R HORIZON_NIGHT_COLOR_G HORIZON_NIGHT_COLOR_B - -screen.CUSTOM_COLORS_WATER.columns=3 -screen.CUSTOM_COLORS_WATER = WATER_COLOR_R WATER_COLOR_G WATER_COLOR_B - -screen.CUSTOM_COLORS_NV.columns=3 -screen.CUSTOM_COLORS_NV = NV_COLOR_R NV_COLOR_G NV_COLOR_B - -screen.CUSTOM_COLORS_SCREEN.columns=1 -screen.CUSTOM_COLORS_SCREEN = [CUSTOM_COLORS_DAY] [CUSTOM_COLORS_SUNSET] [CUSTOM_COLORS_NIGHT] [CUSTOM_COLORS_WATER] [CUSTOM_COLORS_NV] OMNI_TINT_CUSTOM - -sliders = SHADOW_DISTANCE_SLIDER SHADOW_QTY_SLIDER REFLECTION_SLIDER SHADOW_BLUR DOF_STRENGTH AOSTEPS AO_STRENGTH MOTION_BLUR_STRENGTH WATER_ABSORPTION CHROMA_ABER_STRENGTH BLOOM_SAMPLES CLOUD_STEPS_AVG sunPathRotation NIGHT_BRIGHT AVOID_DARK_LEVEL WATER_TURBULENCE FOG_ADJUST MOTION_BLUR_SAMPLES BLOCKLIGHT_TEMP LIGHT_DAY_COLOR_R LIGHT_DAY_COLOR_G LIGHT_DAY_COLOR_B ZENITH_DAY_COLOR_R ZENITH_DAY_COLOR_G ZENITH_DAY_COLOR_B HORIZON_DAY_COLOR_R HORIZON_DAY_COLOR_G HORIZON_DAY_COLOR_B LIGHT_SUNSET_COLOR_R LIGHT_SUNSET_COLOR_G LIGHT_SUNSET_COLOR_B ZENITH_SUNSET_COLOR_R ZENITH_SUNSET_COLOR_G ZENITH_SUNSET_COLOR_B HORIZON_SUNSET_COLOR_R HORIZON_SUNSET_COLOR_G HORIZON_SUNSET_COLOR_B LIGHT_NIGHT_COLOR_R LIGHT_NIGHT_COLOR_G LIGHT_NIGHT_COLOR_B ZENITH_NIGHT_COLOR_R ZENITH_NIGHT_COLOR_G ZENITH_NIGHT_COLOR_B HORIZON_NIGHT_COLOR_R HORIZON_NIGHT_COLOR_G HORIZON_NIGHT_COLOR_B WATER_COLOR_R WATER_COLOR_G WATER_COLOR_B NV_COLOR_R NV_COLOR_G NV_COLOR_B OMNI_TINT_CUSTOM - -# Custom uniforms ----- - -# Many values are precalculated to avoid their later or repetitive calculation. - -# Pixel size -uniform.float.pixel_size_x = 1.0 / viewWidth -uniform.float.pixel_size_y = 1.0 / viewHeight -uniform.float.inv_aspect_ratio = 1.0 / aspectRatio - -# Time constants -variable.float.hour_world = worldTime * 0.001 -uniform.float.day_moment = hour_world * 0.04166666666666667 - -# Day color mixer (for shadows) - This formula allows graphing the function that is calculated later. -# It allows setting values depending on the time of day. Particularly interesting are the transitions -# from day to night and vice versa, which are often used to indicate the intensity of the shadow -# (when it is produced by the moon instead of the sun), and other similar things. -# f(x) = min(−((x−.25)^2)∙20 + 1.25, 1) -# g(x) = min(−((x−.75)^2)∙50 + 3.125, 1) - -variable.float.moment_aux = day_moment - 0.25 -variable.float.moment_aux_2 = moment_aux * moment_aux -uniform.float.day_mixer = clamp(-moment_aux_2 * 20.0 + 1.25, 0.0, 1.0) - -variable.float.moment_aux_3 = day_moment - 0.75 -variable.float.moment_aux_4 = moment_aux_3 * moment_aux_3 -uniform.float.night_mixer = clamp(-moment_aux_4 * 50.0 + 3.125, 0.0, 1.0) - -# Day color mixer (for volumetric light) - "Similar to the previous case, but applied to values -# dependent on the time of day for volumetric lighting. - -variable.float.moment_aux_5 = (day_moment * 4.0) - 1.0 -variable.float.moment_aux_6 = moment_aux_5 * moment_aux_5 * moment_aux_5 * moment_aux_5 -variable.float.day_vol_mixer = clamp(((-moment_aux_6 + 1.0) * 7.0) + 1.0, 1.0, 8.0) - -variable.float.moment_aux_7 = (day_moment * 4.0) - 3.0 -variable.float.moment_aux_8 = moment_aux_7 * moment_aux_7 * moment_aux_7 * moment_aux_7 -variable.float.night_vol_mixer = clamp(((-moment_aux_8 + 1.0) * 7.0) + 1.0, 1.0, 8.0) - -uniform.float.vol_mixer = max(day_vol_mixer, night_vol_mixer) - -# Light mix - Similar to the previous cases, a value that depends on the time of day -# to adjust various different parameters. -variable.float.light_mix_a = if((worldTime >= 0 && worldTime < 12485) || worldTime >= 23515, 1.0, 0.0) -variable.float.light_mix_b = if(worldTime >= 12485 && worldTime < 13085, 1.0 - ((worldTime - 12485) * 0.0016666666666666668), 0.0) -variable.float.light_mix_c = 0.0 -variable.float.light_mix_d = if(worldTime >= 22915 && worldTime < 23515, (worldTime - 22915) * 0.0016666666666666668, 0.0) -variable.float.light_mix_e = max(light_mix_a, light_mix_b) -variable.float.light_mix_f = max(light_mix_c, light_mix_d) -uniform.float.light_mix = max(light_mix_e, light_mix_f) - -# Frame modulus -uniform.int.frame_mod = fmod(frameCounter, 10) - -# TAA OFFSET - The offset for TAA is precalculated here. -# It is based on a pentagon (repeated twice as it is a multiple of the 10-frame module.) -# The traversal goes from one vertex of the pentagon to another at the opposite end, -# so that the traversal between different points is maximized and the images vary -# as much as possible from one to the next. It helps to make the flickering of the image -# so fast that it is "absorbed" and better masked by the TAA history. - -#if AA_TYPE > -1 - # Pentagon - uniform.vec2.taa_offset = vec2((if( \ - frame_mod == 0, 0.7071067811865476, \ - frame_mod == 1, -0.5720614028176843, \ - frame_mod == 2, 0.2185080122244104, \ - frame_mod == 3, 0.21850801222441057, \ - frame_mod == 4, -0.5720614028176845, \ - frame_mod == 5, 0.7071067811865476, \ - frame_mod == 6, -0.5720614028176843, \ - frame_mod == 7, 0.2185080122244104, \ - frame_mod == 8, 0.21850801222441057, \ - frame_mod == 9, -0.5720614028176845, \ - 0.0)) * pixel_size_x, \ - (if( \ - frame_mod == 0, 0.0, \ - frame_mod == 1, 0.4156269377774535, \ - frame_mod == 2, -0.6724985119639574, \ - frame_mod == 3, 0.6724985119639574, \ - frame_mod == 4, -0.4156269377774534, \ - frame_mod == 5, 0.0, \ - frame_mod == 6, 0.4156269377774535, \ - frame_mod == 7, -0.6724985119639574, \ - frame_mod == 8, 0.6724985119639574, \ - frame_mod == 9, -0.4156269377774534, \ - 0.0)) * pixel_size_y) - - # Dither shift - When Temporal sampling is active, dithering patterns change over time, - # but not randomly. The dithering pattern remains fixed, but the assigned - # value to each point changes by adding a value defined here, so that they - # "rotate" in a controlled manner within the range of 0 to 1. - # When the sum exceeds 1.0, only the mantissa is taken. The changes are not completely random. - # They are incremental, but not by a fixed amount, but rather a fixed amount - # that was slightly altered by randomness. This only works in recent versions - # of Minecraft/Optifine. For older versions, a mechanism that depends on the - # uniform "frame_mod" is used to calculate the increment. - uniform.float.dither_shift = if( \ - frame_mod == 0, 0.0, \ - frame_mod == 1, 0.9, \ - frame_mod == 2, 0.5, \ - frame_mod == 3, 0.8, \ - frame_mod == 4, 0.3, \ - frame_mod == 5, 0.7, \ - frame_mod == 6, 0.1, \ - frame_mod == 7, 0.6, \ - frame_mod == 8, 0.4, \ - frame_mod == 9, 0.2, \ - 0.0) -#endif - -# FOV - A precalculated value related to FOV -uniform.float.fov_y_inv = 1.0 / atan(1.0 / gbufferProjection.1.1) * 0.5 - -# float horizontalFOV = atan(1.0 / gbufferProjection[0].x); -# float verticalFOV = atan(1.0 / gbufferProjection[1].y); <-- fov_y_inv - -#ifdef DISTANT_HORIZONS -dhShadow.enabled = false -blend.dh_water=SRC_ALPHA ONE_MINUS_SRC_ALPHA ONE ONE_MINUS_SRC_ALPHA -#endif \ No newline at end of file diff --git a/shaders/shaders.properties b/shaders/shaders.properties index fb78ef2f..1daea3e1 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -9,7 +9,7 @@ profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_S profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS profile.extreme= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS # Default forced options vignette = false @@ -182,7 +182,7 @@ uniform.int.frame_mod = fmod(frameCounter, 10) # When the sum exceeds 1.0, only the mantissa is taken. The changes are not completely random. # They are incremental, but not by a fixed amount, but rather a fixed amount # that was slightly altered by randomness. This only works in recent versions - # of Minecraft/Optifine. For older versions, a mechanism that depends on the + # of Minecraft/Optifine/Iris. For older versions, a mechanism that depends on the # uniform "frame_mod" is used to calculate the increment. uniform.float.dither_shift = if( \ frame_mod == 0, 0.0, \ From 8b486ab1bee819657dd9162bc687f511e816ffa8 Mon Sep 17 00:00:00 2001 From: Texaliuz <152565569+Texaliuz@users.noreply.github.com> Date: Tue, 29 Apr 2025 19:30:38 -0300 Subject: [PATCH 044/147] Translation into Argentine Spanish (es_ar) for MakeUpUltraFast Hello, I would appreciate if you could add the translation to my language (es_ar) for version 1.21.1 please and thank you. --- shaders/lang/es_AR.lang | 292 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 292 insertions(+) create mode 100644 shaders/lang/es_AR.lang diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang new file mode 100644 index 00000000..dab63f26 --- /dev/null +++ b/shaders/lang/es_AR.lang @@ -0,0 +1,292 @@ +# Perfiles +############################ +profile.no_effects=Sin efectos +profile.shadowless_low=Sin sombras - Bajo +profile.shadowless_medium=Sin sombras - Medio +profile.shadowless_high=Sin sombras - Alto +profile.low=Bajo +profile.medium=Medio +profile.high=Alto +profile.extreme=Extremo +profile.extremeplus=Extremo+ + +profile.comment=Los perfiles "sin sombras" están pensados para máquinas de bajo rendimiento, sin considerar las sombras. Los perfiles tradicionales van agregando sombras de mejor calidad y efectos más avanzados y pesados. Probá las opciones disponibles y encontrá la combinación que mejor te funcione. + +# Acerca de +############################# +option.ACERCADE=MakeUp +option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. +value.ACERCADE.0=v.9.1e + +# Opciones +############################# +option.SHADOW_CASTING=Sombras + +option.SHADOW_DISTANCE_SLIDER=Distancia de sombra +value.SHADOW_DISTANCE_SLIDER.0=Corta +value.SHADOW_DISTANCE_SLIDER.1=Media +value.SHADOW_DISTANCE_SLIDER.2=Larga + +option.SHADOW_QTY_SLIDER=Calidad de sombras +value.SHADOW_QTY_SLIDER.0=Ninguna +value.SHADOW_QTY_SLIDER.1=Baja +value.SHADOW_QTY_SLIDER.2=Media +value.SHADOW_QTY_SLIDER.3=Alta + +option.REFLECTION_SLIDER=Reflejo +value.REFLECTION_SLIDER.0=Desactivado +value.REFLECTION_SLIDER.1=Imagen invertida +value.REFLECTION_SLIDER.2=Raymarching + +option.SHADOW_TYPE=Tipo de sombra +value.SHADOW_TYPE.0=Simple +value.SHADOW_TYPE.1=Filtrada + +option.SHADOW_BLUR=Intensidad del desenfoque de sombra + +option.COLORED_SHADOW=Sombras coloreadas + +option.VOL_LIGHT=Rayos de luz +value.VOL_LIGHT.0=Desactivado +value.VOL_LIGHT.1=Basado en profundidad +value.VOL_LIGHT.2=Volumétrico + +option.DOF=Profundidad de campo + +option.DOF_STRENGTH=Intensidad de DoF + +option.DOF_SAMPLES_FACTOR=Factor de muestras de DoF + +option.AO=Oclusión ambiental +value.AO.0=Desactivado +value.AO.1=Activado + +option.AOSTEPS=Pares de muestras de AO + +option.AO_STRENGTH=Intensidad de AO + +option.AA_TYPE=Muestreo temporal +value.AA_TYPE.0=Desactivado +value.AA_TYPE.1=Desenfoque +value.AA_TYPE.2=TAA +value.AA_TYPE.3=TAA Afilado + +option.MOTION_BLUR=Desenfoque de movimiento +option.MOTION_BLUR_STRENGTH=Intensidad del desenfoque +option.MOTION_BLUR_SAMPLES=Muestras de desenfoque + +option.VANILLA_WATER=Agua estilo Vanilla + +option.WATER_TEXTURE=Textura de agua +value.WATER_TEXTURE.0=No +value.WATER_TEXTURE.1=Sí + +option.WATER_COLOR_SOURCE=Color del agua +value.WATER_COLOR_SOURCE.0=Esquema del shader +value.WATER_COLOR_SOURCE.1=Resource Pack + +option.REFLECTION=Reflejos +value.REFLECTION.0=Desactivado +value.REFLECTION.1=Activado + +option.REFRACTION=Refracción +value.REFRACTION.0=Desactivado +value.REFRACTION.1=Activado + +option.SSR_TYPE=Tipo de reflejo +value.SSR_TYPE.0=Imagen invertida +value.SSR_TYPE.1=Raymarching + +option.SUN_REFLECTION=Reflejo solar +value.SUN_REFLECTION.0=Desactivado +value.SUN_REFLECTION.1=Activado + +option.CLOUD_REFLECTION=Reflejo de nubes volumétricas + +option.WAVING=Movimiento de plantas +value.WAVING.0=No +value.WAVING.1=Sí + +option.CHROMA_ABER=Aberración cromática +value.CHROMA_ABER.0=No +value.CHROMA_ABER.1=Sí + +option.CHROMA_ABER_STRENGTH=Intensidad de aberración cromática + +option.WATER_ABSORPTION=Índice de absorción del agua + +option.WATER_TURBULENCE=Intensidad de las olas +value.WATER_TURBULENCE.7.0=Muy baja +value.WATER_TURBULENCE.1.75=Baja +value.WATER_TURBULENCE.0.9=Media +value.WATER_TURBULENCE.0.5=Alta + +option.COLOR_SCHEME=Esquema de color +value.COLOR_SCHEME.0=Etéreo +value.COLOR_SCHEME.1=New Shoka +value.COLOR_SCHEME.2=Shoka +value.COLOR_SCHEME.3=Clásico +value.COLOR_SCHEME.4=Captain +value.COLOR_SCHEME.5=Psicodélico +value.COLOR_SCHEME.6=Cacao +value.COLOR_SCHEME.7=Testigo +value.COLOR_SCHEME.99=Personalizado + +option.LIGHT_SUNSET_COLOR_R=Color de luz al atardecer R +option.LIGHT_SUNSET_COLOR_G=Color de luz al atardecer G +option.LIGHT_SUNSET_COLOR_B=Color de luz al atardecer B + +option.LIGHT_DAY_COLOR_R=Color de luz diurna R +option.LIGHT_DAY_COLOR_G=Color de luz diurna G +option.LIGHT_DAY_COLOR_B=Color de luz diurna B + +option.LIGHT_NIGHT_COLOR_R=Color de luz nocturna R +option.LIGHT_NIGHT_COLOR_G=Color de luz nocturna G +option.LIGHT_NIGHT_COLOR_B=Color de luz nocturna B + +option.ZENITH_SUNSET_COLOR_R=Color del cénit al atardecer R +option.ZENITH_SUNSET_COLOR_G=Color del cénit al atardecer G +option.ZENITH_SUNSET_COLOR_B=Color del cénit al atardecer B + +option.ZENITH_DAY_COLOR_R=Color del cénit diurno R +option.ZENITH_DAY_COLOR_G=Color del cénit diurno G +option.ZENITH_DAY_COLOR_B=Color del cénit diurno B + +option.ZENITH_NIGHT_COLOR_R=Color del cénit nocturno R +option.ZENITH_NIGHT_COLOR_G=Color del cénit nocturno G +option.ZENITH_NIGHT_COLOR_B=Color del cénit nocturno B + +option.HORIZON_SUNSET_COLOR_R=Color del horizonte al atardecer R +option.HORIZON_SUNSET_COLOR_G=Color del horizonte al atardecer G +option.HORIZON_SUNSET_COLOR_B=Color del horizonte al atardecer B + +option.HORIZON_DAY_COLOR_R=Color del horizonte diurno R +option.HORIZON_DAY_COLOR_G=Color del horizonte diurno G +option.HORIZON_DAY_COLOR_B=Color del horizonte diurno B + +option.HORIZON_NIGHT_COLOR_R=Color del horizonte nocturno R +option.HORIZON_NIGHT_COLOR_G=Color del horizonte nocturno G +option.HORIZON_NIGHT_COLOR_B=Color del horizonte nocturno B + +option.WATER_COLOR_R=Color del agua R +option.WATER_COLOR_G=Color del agua G +option.WATER_COLOR_B=Color del agua B + +option.NV_COLOR_R=Multiplicador de visión nocturna R +option.NV_COLOR_G=Multiplicador de visión nocturna G +option.NV_COLOR_B=Multiplicador de visión nocturna B + +option.OMNI_TINT_CUSTOM=Matiz personalizado Omni + +option.AVOID_DARK_LEVEL=Brillo en cuevas + +option.NIGHT_BRIGHT=Brillo nocturno + +option.V_CLOUDS=Nubes +value.V_CLOUDS.0=Vanilla +value.V_CLOUDS.1=Volumétricas estáticas +value.V_CLOUDS.2=Volumétricas dinámicas + +option.CLOUD_VOL_STYLE=Estilo de nube volumétrica +value.CLOUD_VOL_STYLE.0=Natural +value.CLOUD_VOL_STYLE.1=Cúbico + +option.CLOUD_SPEED=Velocidad de nubes +value.CLOUD_SPEED.0=Normal +value.CLOUD_SPEED.1=Time lapse 1 +value.CLOUD_SPEED.2=Time lapse 2 + +option.END_CLOUDS=Nubes en El End + +option.CLOUD_STEPS_AVG=Muestras de nubes + +option.BLOOM=Brillo (bloom) + +option.COLOR_BLINDNESS=Daltonismo + +option.COLOR_BLIND_MODE=Tipo de daltonismo +value.COLOR_BLIND_MODE.0=Protanopía +value.COLOR_BLIND_MODE.1=Deuteranopía +value.COLOR_BLIND_MODE.2=Tritanopía + +option.DEBUG_MODE=Modo de depuración + +option.BLOOM_SAMPLES=Pares de muestras para bloom + +option.BLACK_ENTITY_FIX=Arreglo de entidades negras +value.BLACK_ENTITY_FIX.0=Desactivado +value.BLACK_ENTITY_FIX.1=Activado + +option.FOG_ACTIVE=Niebla activada + +option.FOG_ADJUST=Intensidad de la niebla +value.FOG_ADJUST.20.0=Sin niebla +value.FOG_ADJUST.10.0=Ultrabaja +value.FOG_ADJUST.8.0=Muy baja +value.FOG_ADJUST.4.0=Baja +value.FOG_ADJUST.2.0=Media +value.FOG_ADJUST.1.0=Alta + +option.NETHER_FOG_DISTANCE=Distancia de niebla en el Nether +value.NETHER_FOG_DISTANCE.0=Distancia de renderizado +value.NETHER_FOG_DISTANCE.1=Vanilla + +option.BLOCKLIGHT_TEMP=Temperatura de la luz de bloque +value.BLOCKLIGHT_TEMP.0=Más cálida +value.BLOCKLIGHT_TEMP.1=Cálida +value.BLOCKLIGHT_TEMP.2=Amarilla +value.BLOCKLIGHT_TEMP.3=Amarillo pálido +value.BLOCKLIGHT_TEMP.4=Luz blanca + +option.sunPathRotation=Ángulo del sol + +option.USE_BASIC_SH=Shader básico para dimensiones personalizadas + +option.MATERIAL_GLOSS=Brillo del material + +option.DYN_HAND_LIGHT=Luz dinámica falsa + +# Pantallas +screen.ADVANCED_SCREEN=Opciones avanzadas +screen.ADVANCED_SCREEN.comment=Configurar opciones avanzadas + +screen.COMPATIBILITY_SCREEN=Compatibilidad +screen.COMPATIBILITY_SCREEN.comment=Configurar opciones de compatibilidad + +screen.SHADOWS_SCREEN=Sombras +screen.SHADOWS_SCREEN.comment=Configurar opciones de sombras + +screen.DOF_SCREEN=Profundidad de campo +screen.DOF_SCREEN.comment=Configurar opciones de profundidad de campo + +screen.AO_SCREEN=Oclusión ambiental +screen.AO_SCREEN.comment=Configurar oclusión ambiental + +screen.WATER_SCREEN=Agua +screen.WATER_SCREEN.comment=Configurar opciones del agua + +screen.POST_SCREEN=Efectos posteriores +screen.POST_SCREEN.comment=Configurar efectos posteriores + +screen.LIGHT_SCREEN=Luz +screen.LIGHT_SCREEN.comment=Configurar opciones de luz + +screen.CLOUDS_SCREEN=Sol y nubes +screen.CLOUDS_SCREEN.comment=Configurar sol y nubes + +screen.FOG_SCREEN=Niebla +screen.FOG_SCREEN.comment=Configurar opciones de niebla + +screen.MOTION_BLUR_SCREEN=Desenfoque de movimiento +screen.MOTION_BLUR_SCREEN.comment=Configurar desenfoque de movimiento + +screen.ACCESIBILITY_SCREEN=Accesibilidad +screen.ACCESIBILITY_SCREEN.comment=Configurar opciones de accesibilidad + +screen.CUSTOM_COLORS_SCREEN=Colores personalizados +screen.CUSTOM_COLORS_SCREEN.comment=Configurar colores personalizados +screen.CUSTOM_COLORS_DAY=Colores personalizados de día +screen.CUSTOM_COLORS_SUNSET=Colores personalizados de atardecer/amanecer +screen.CUSTOM_COLORS_NIGHT=Colores personalizados de noche +screen.CUSTOM_COLORS_WATER=Color personalizado del agua +screen.CUSTOM_COLORS_NV=Color personalizado para visión nocturna From 7920ba5fbafcac41b472ee11febd882380af4632 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 28 Jun 2025 13:21:47 -0600 Subject: [PATCH 045/147] Version 9.1f --- README.md | 2 +- shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 274 ++++++++++++++--------------- shaders/lang/es_ES.lang | 292 +++++++++++++++++++++++++++++++ shaders/lang/es_MX.lang | 292 +++++++++++++++++++++++++++++++ shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- shaders/shaders.properties | 2 - shaders/src/cloudfinalcolor.glsl | 22 ++- 11 files changed, 743 insertions(+), 151 deletions(-) create mode 100644 shaders/lang/es_ES.lang create mode 100644 shaders/lang/es_MX.lang diff --git a/README.md b/README.md index 5168dae7..9660cfcc 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp - Code High performance Minecraft shader (Java). -## Version: 9.1e +## Version: 9.1f ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 79b52a6d..b7b391d9 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -16,7 +16,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.1e +value.ACERCADE.0=v.9.1f #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index dab63f26..13af6436 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -16,7 +16,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.1e +value.ACERCADE.0=v.9.1f # Opciones ############################# @@ -98,195 +98,195 @@ value.SSR_TYPE.0=Imagen invertida value.SSR_TYPE.1=Raymarching option.SUN_REFLECTION=Reflejo solar -value.SUN_REFLECTION.0=Desactivado -value.SUN_REFLECTION.1=Activado +value.SUN_REFLECTION.0=Desactivado +value.SUN_REFLECTION.1=Activado -option.CLOUD_REFLECTION=Reflejo de nubes volumétricas +option.CLOUD_REFLECTION=Reflejo de nubes volumétricas -option.WAVING=Movimiento de plantas -value.WAVING.0=No -value.WAVING.1=Sí +option.WAVING=Movimiento de plantas +value.WAVING.0=No +value.WAVING.1=Sí -option.CHROMA_ABER=Aberración cromática -value.CHROMA_ABER.0=No -value.CHROMA_ABER.1=Sí +option.CHROMA_ABER=Aberración cromática +value.CHROMA_ABER.0=No +value.CHROMA_ABER.1=Sí -option.CHROMA_ABER_STRENGTH=Intensidad de aberración cromática +option.CHROMA_ABER_STRENGTH=Intensidad de aberración cromática -option.WATER_ABSORPTION=Índice de absorción del agua +option.WATER_ABSORPTION=Índice de absorción del agua -option.WATER_TURBULENCE=Intensidad de las olas -value.WATER_TURBULENCE.7.0=Muy baja -value.WATER_TURBULENCE.1.75=Baja -value.WATER_TURBULENCE.0.9=Media -value.WATER_TURBULENCE.0.5=Alta +option.WATER_TURBULENCE=Intensidad de las olas +value.WATER_TURBULENCE.7.0=Muy baja +value.WATER_TURBULENCE.1.75=Baja +value.WATER_TURBULENCE.0.9=Media +value.WATER_TURBULENCE.0.5=Alta -option.COLOR_SCHEME=Esquema de color -value.COLOR_SCHEME.0=Etéreo -value.COLOR_SCHEME.1=New Shoka -value.COLOR_SCHEME.2=Shoka -value.COLOR_SCHEME.3=Clásico -value.COLOR_SCHEME.4=Captain -value.COLOR_SCHEME.5=Psicodélico -value.COLOR_SCHEME.6=Cacao -value.COLOR_SCHEME.7=Testigo -value.COLOR_SCHEME.99=Personalizado +option.COLOR_SCHEME=Esquema de color +value.COLOR_SCHEME.0=Etéreo +value.COLOR_SCHEME.1=New Shoka +value.COLOR_SCHEME.2=Shoka +value.COLOR_SCHEME.3=Clásico +value.COLOR_SCHEME.4=Captain +value.COLOR_SCHEME.5=Psicodélico +value.COLOR_SCHEME.6=Cacao +value.COLOR_SCHEME.7=Testigo +value.COLOR_SCHEME.99=Personalizado -option.LIGHT_SUNSET_COLOR_R=Color de luz al atardecer R -option.LIGHT_SUNSET_COLOR_G=Color de luz al atardecer G -option.LIGHT_SUNSET_COLOR_B=Color de luz al atardecer B +option.LIGHT_SUNSET_COLOR_R=Color de luz al atardecer R +option.LIGHT_SUNSET_COLOR_G=Color de luz al atardecer G +option.LIGHT_SUNSET_COLOR_B=Color de luz al atardecer B -option.LIGHT_DAY_COLOR_R=Color de luz diurna R -option.LIGHT_DAY_COLOR_G=Color de luz diurna G -option.LIGHT_DAY_COLOR_B=Color de luz diurna B +option.LIGHT_DAY_COLOR_R=Color de luz diurna R +option.LIGHT_DAY_COLOR_G=Color de luz diurna G +option.LIGHT_DAY_COLOR_B=Color de luz diurna B -option.LIGHT_NIGHT_COLOR_R=Color de luz nocturna R -option.LIGHT_NIGHT_COLOR_G=Color de luz nocturna G -option.LIGHT_NIGHT_COLOR_B=Color de luz nocturna B +option.LIGHT_NIGHT_COLOR_R=Color de luz nocturna R +option.LIGHT_NIGHT_COLOR_G=Color de luz nocturna G +option.LIGHT_NIGHT_COLOR_B=Color de luz nocturna B -option.ZENITH_SUNSET_COLOR_R=Color del cénit al atardecer R -option.ZENITH_SUNSET_COLOR_G=Color del cénit al atardecer G -option.ZENITH_SUNSET_COLOR_B=Color del cénit al atardecer B +option.ZENITH_SUNSET_COLOR_R=Color del cénit al atardecer R +option.ZENITH_SUNSET_COLOR_G=Color del cénit al atardecer G +option.ZENITH_SUNSET_COLOR_B=Color del cénit al atardecer B -option.ZENITH_DAY_COLOR_R=Color del cénit diurno R -option.ZENITH_DAY_COLOR_G=Color del cénit diurno G -option.ZENITH_DAY_COLOR_B=Color del cénit diurno B +option.ZENITH_DAY_COLOR_R=Color del cénit diurno R +option.ZENITH_DAY_COLOR_G=Color del cénit diurno G +option.ZENITH_DAY_COLOR_B=Color del cénit diurno B -option.ZENITH_NIGHT_COLOR_R=Color del cénit nocturno R -option.ZENITH_NIGHT_COLOR_G=Color del cénit nocturno G -option.ZENITH_NIGHT_COLOR_B=Color del cénit nocturno B +option.ZENITH_NIGHT_COLOR_R=Color del cénit nocturno R +option.ZENITH_NIGHT_COLOR_G=Color del cénit nocturno G +option.ZENITH_NIGHT_COLOR_B=Color del cénit nocturno B -option.HORIZON_SUNSET_COLOR_R=Color del horizonte al atardecer R -option.HORIZON_SUNSET_COLOR_G=Color del horizonte al atardecer G -option.HORIZON_SUNSET_COLOR_B=Color del horizonte al atardecer B +option.HORIZON_SUNSET_COLOR_R=Color del horizonte al atardecer R +option.HORIZON_SUNSET_COLOR_G=Color del horizonte al atardecer G +option.HORIZON_SUNSET_COLOR_B=Color del horizonte al atardecer B -option.HORIZON_DAY_COLOR_R=Color del horizonte diurno R -option.HORIZON_DAY_COLOR_G=Color del horizonte diurno G -option.HORIZON_DAY_COLOR_B=Color del horizonte diurno B +option.HORIZON_DAY_COLOR_R=Color del horizonte diurno R +option.HORIZON_DAY_COLOR_G=Color del horizonte diurno G +option.HORIZON_DAY_COLOR_B=Color del horizonte diurno B -option.HORIZON_NIGHT_COLOR_R=Color del horizonte nocturno R -option.HORIZON_NIGHT_COLOR_G=Color del horizonte nocturno G -option.HORIZON_NIGHT_COLOR_B=Color del horizonte nocturno B +option.HORIZON_NIGHT_COLOR_R=Color del horizonte nocturno R +option.HORIZON_NIGHT_COLOR_G=Color del horizonte nocturno G +option.HORIZON_NIGHT_COLOR_B=Color del horizonte nocturno B -option.WATER_COLOR_R=Color del agua R -option.WATER_COLOR_G=Color del agua G -option.WATER_COLOR_B=Color del agua B +option.WATER_COLOR_R=Color del agua R +option.WATER_COLOR_G=Color del agua G +option.WATER_COLOR_B=Color del agua B -option.NV_COLOR_R=Multiplicador de visión nocturna R -option.NV_COLOR_G=Multiplicador de visión nocturna G -option.NV_COLOR_B=Multiplicador de visión nocturna B +option.NV_COLOR_R=Multiplicador de visión nocturna R +option.NV_COLOR_G=Multiplicador de visión nocturna G +option.NV_COLOR_B=Multiplicador de visión nocturna B -option.OMNI_TINT_CUSTOM=Matiz personalizado Omni +option.OMNI_TINT_CUSTOM=Matiz personalizado Omni -option.AVOID_DARK_LEVEL=Brillo en cuevas +option.AVOID_DARK_LEVEL=Brillo en cuevas -option.NIGHT_BRIGHT=Brillo nocturno +option.NIGHT_BRIGHT=Brillo nocturno -option.V_CLOUDS=Nubes -value.V_CLOUDS.0=Vanilla -value.V_CLOUDS.1=Volumétricas estáticas -value.V_CLOUDS.2=Volumétricas dinámicas +option.V_CLOUDS=Nubes +value.V_CLOUDS.0=Vanilla +value.V_CLOUDS.1=Volumétricas estáticas +value.V_CLOUDS.2=Volumétricas dinámicas -option.CLOUD_VOL_STYLE=Estilo de nube volumétrica -value.CLOUD_VOL_STYLE.0=Natural -value.CLOUD_VOL_STYLE.1=Cúbico +option.CLOUD_VOL_STYLE=Estilo de nube volumétrica +value.CLOUD_VOL_STYLE.0=Natural +value.CLOUD_VOL_STYLE.1=Cúbico -option.CLOUD_SPEED=Velocidad de nubes -value.CLOUD_SPEED.0=Normal -value.CLOUD_SPEED.1=Time lapse 1 -value.CLOUD_SPEED.2=Time lapse 2 +option.CLOUD_SPEED=Velocidad de nubes +value.CLOUD_SPEED.0=Normal +value.CLOUD_SPEED.1=Time lapse 1 +value.CLOUD_SPEED.2=Time lapse 2 option.END_CLOUDS=Nubes en El End -option.CLOUD_STEPS_AVG=Muestras de nubes +option.CLOUD_STEPS_AVG=Muestras de nubes -option.BLOOM=Brillo (bloom) +option.BLOOM=Brillo (bloom) -option.COLOR_BLINDNESS=Daltonismo +option.COLOR_BLINDNESS=Daltonismo -option.COLOR_BLIND_MODE=Tipo de daltonismo -value.COLOR_BLIND_MODE.0=Protanopía -value.COLOR_BLIND_MODE.1=Deuteranopía -value.COLOR_BLIND_MODE.2=Tritanopía +option.COLOR_BLIND_MODE=Tipo de daltonismo +value.COLOR_BLIND_MODE.0=Protanopía +value.COLOR_BLIND_MODE.1=Deuteranopía +value.COLOR_BLIND_MODE.2=Tritanopía -option.DEBUG_MODE=Modo de depuración +option.DEBUG_MODE=Modo de depuración -option.BLOOM_SAMPLES=Pares de muestras para bloom +option.BLOOM_SAMPLES=Pares de muestras para bloom -option.BLACK_ENTITY_FIX=Arreglo de entidades negras -value.BLACK_ENTITY_FIX.0=Desactivado -value.BLACK_ENTITY_FIX.1=Activado +option.BLACK_ENTITY_FIX=Arreglo de entidades negras +value.BLACK_ENTITY_FIX.0=Desactivado +value.BLACK_ENTITY_FIX.1=Activado -option.FOG_ACTIVE=Niebla activada +option.FOG_ACTIVE=Niebla activada -option.FOG_ADJUST=Intensidad de la niebla -value.FOG_ADJUST.20.0=Sin niebla -value.FOG_ADJUST.10.0=Ultrabaja -value.FOG_ADJUST.8.0=Muy baja -value.FOG_ADJUST.4.0=Baja -value.FOG_ADJUST.2.0=Media -value.FOG_ADJUST.1.0=Alta +option.FOG_ADJUST=Intensidad de la niebla +value.FOG_ADJUST.20.0=Sin niebla +value.FOG_ADJUST.10.0=Ultrabaja +value.FOG_ADJUST.8.0=Muy baja +value.FOG_ADJUST.4.0=Baja +value.FOG_ADJUST.2.0=Media +value.FOG_ADJUST.1.0=Alta -option.NETHER_FOG_DISTANCE=Distancia de niebla en el Nether -value.NETHER_FOG_DISTANCE.0=Distancia de renderizado -value.NETHER_FOG_DISTANCE.1=Vanilla +option.NETHER_FOG_DISTANCE=Distancia de niebla en el Nether +value.NETHER_FOG_DISTANCE.0=Distancia de renderizado +value.NETHER_FOG_DISTANCE.1=Vanilla -option.BLOCKLIGHT_TEMP=Temperatura de la luz de bloque -value.BLOCKLIGHT_TEMP.0=Más cálida -value.BLOCKLIGHT_TEMP.1=Cálida -value.BLOCKLIGHT_TEMP.2=Amarilla -value.BLOCKLIGHT_TEMP.3=Amarillo pálido -value.BLOCKLIGHT_TEMP.4=Luz blanca +option.BLOCKLIGHT_TEMP=Temperatura de la luz de bloque +value.BLOCKLIGHT_TEMP.0=Más cálida +value.BLOCKLIGHT_TEMP.1=Cálida +value.BLOCKLIGHT_TEMP.2=Amarilla +value.BLOCKLIGHT_TEMP.3=Amarillo pálido +value.BLOCKLIGHT_TEMP.4=Luz blanca -option.sunPathRotation=Ángulo del sol +option.sunPathRotation=Ángulo del sol -option.USE_BASIC_SH=Shader básico para dimensiones personalizadas +option.USE_BASIC_SH=Shader básico para dimensiones personalizadas -option.MATERIAL_GLOSS=Brillo del material +option.MATERIAL_GLOSS=Brillo del material -option.DYN_HAND_LIGHT=Luz dinámica falsa +option.DYN_HAND_LIGHT=Luz dinámica falsa # Pantallas -screen.ADVANCED_SCREEN=Opciones avanzadas -screen.ADVANCED_SCREEN.comment=Configurar opciones avanzadas +screen.ADVANCED_SCREEN=Opciones avanzadas +screen.ADVANCED_SCREEN.comment=Configurar opciones avanzadas -screen.COMPATIBILITY_SCREEN=Compatibilidad -screen.COMPATIBILITY_SCREEN.comment=Configurar opciones de compatibilidad +screen.COMPATIBILITY_SCREEN=Compatibilidad +screen.COMPATIBILITY_SCREEN.comment=Configurar opciones de compatibilidad -screen.SHADOWS_SCREEN=Sombras -screen.SHADOWS_SCREEN.comment=Configurar opciones de sombras +screen.SHADOWS_SCREEN=Sombras +screen.SHADOWS_SCREEN.comment=Configurar opciones de sombras -screen.DOF_SCREEN=Profundidad de campo -screen.DOF_SCREEN.comment=Configurar opciones de profundidad de campo +screen.DOF_SCREEN=Profundidad de campo +screen.DOF_SCREEN.comment=Configurar opciones de profundidad de campo -screen.AO_SCREEN=Oclusión ambiental -screen.AO_SCREEN.comment=Configurar oclusión ambiental +screen.AO_SCREEN=Oclusión ambiental +screen.AO_SCREEN.comment=Configurar oclusión ambiental -screen.WATER_SCREEN=Agua -screen.WATER_SCREEN.comment=Configurar opciones del agua +screen.WATER_SCREEN=Agua +screen.WATER_SCREEN.comment=Configurar opciones del agua -screen.POST_SCREEN=Efectos posteriores -screen.POST_SCREEN.comment=Configurar efectos posteriores +screen.POST_SCREEN=Efectos posteriores +screen.POST_SCREEN.comment=Configurar efectos posteriores -screen.LIGHT_SCREEN=Luz -screen.LIGHT_SCREEN.comment=Configurar opciones de luz +screen.LIGHT_SCREEN=Luz +screen.LIGHT_SCREEN.comment=Configurar opciones de luz -screen.CLOUDS_SCREEN=Sol y nubes -screen.CLOUDS_SCREEN.comment=Configurar sol y nubes +screen.CLOUDS_SCREEN=Sol y nubes +screen.CLOUDS_SCREEN.comment=Configurar sol y nubes -screen.FOG_SCREEN=Niebla -screen.FOG_SCREEN.comment=Configurar opciones de niebla +screen.FOG_SCREEN=Niebla +screen.FOG_SCREEN.comment=Configurar opciones de niebla -screen.MOTION_BLUR_SCREEN=Desenfoque de movimiento -screen.MOTION_BLUR_SCREEN.comment=Configurar desenfoque de movimiento +screen.MOTION_BLUR_SCREEN=Desenfoque de movimiento +screen.MOTION_BLUR_SCREEN.comment=Configurar desenfoque de movimiento -screen.ACCESIBILITY_SCREEN=Accesibilidad -screen.ACCESIBILITY_SCREEN.comment=Configurar opciones de accesibilidad +screen.ACCESIBILITY_SCREEN=Accesibilidad +screen.ACCESIBILITY_SCREEN.comment=Configurar opciones de accesibilidad -screen.CUSTOM_COLORS_SCREEN=Colores personalizados -screen.CUSTOM_COLORS_SCREEN.comment=Configurar colores personalizados -screen.CUSTOM_COLORS_DAY=Colores personalizados de día -screen.CUSTOM_COLORS_SUNSET=Colores personalizados de atardecer/amanecer -screen.CUSTOM_COLORS_NIGHT=Colores personalizados de noche -screen.CUSTOM_COLORS_WATER=Color personalizado del agua +screen.CUSTOM_COLORS_SCREEN=Colores personalizados +screen.CUSTOM_COLORS_SCREEN.comment=Configurar colores personalizados +screen.CUSTOM_COLORS_DAY=Colores personalizados de día +screen.CUSTOM_COLORS_SUNSET=Colores personalizados de atardecer/amanecer +screen.CUSTOM_COLORS_NIGHT=Colores personalizados de noche +screen.CUSTOM_COLORS_WATER=Color personalizado del agua screen.CUSTOM_COLORS_NV=Color personalizado para visión nocturna diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang new file mode 100644 index 00000000..13af6436 --- /dev/null +++ b/shaders/lang/es_ES.lang @@ -0,0 +1,292 @@ +# Perfiles +############################ +profile.no_effects=Sin efectos +profile.shadowless_low=Sin sombras - Bajo +profile.shadowless_medium=Sin sombras - Medio +profile.shadowless_high=Sin sombras - Alto +profile.low=Bajo +profile.medium=Medio +profile.high=Alto +profile.extreme=Extremo +profile.extremeplus=Extremo+ + +profile.comment=Los perfiles "sin sombras" están pensados para máquinas de bajo rendimiento, sin considerar las sombras. Los perfiles tradicionales van agregando sombras de mejor calidad y efectos más avanzados y pesados. Probá las opciones disponibles y encontrá la combinación que mejor te funcione. + +# Acerca de +############################# +option.ACERCADE=MakeUp +option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. +value.ACERCADE.0=v.9.1f + +# Opciones +############################# +option.SHADOW_CASTING=Sombras + +option.SHADOW_DISTANCE_SLIDER=Distancia de sombra +value.SHADOW_DISTANCE_SLIDER.0=Corta +value.SHADOW_DISTANCE_SLIDER.1=Media +value.SHADOW_DISTANCE_SLIDER.2=Larga + +option.SHADOW_QTY_SLIDER=Calidad de sombras +value.SHADOW_QTY_SLIDER.0=Ninguna +value.SHADOW_QTY_SLIDER.1=Baja +value.SHADOW_QTY_SLIDER.2=Media +value.SHADOW_QTY_SLIDER.3=Alta + +option.REFLECTION_SLIDER=Reflejo +value.REFLECTION_SLIDER.0=Desactivado +value.REFLECTION_SLIDER.1=Imagen invertida +value.REFLECTION_SLIDER.2=Raymarching + +option.SHADOW_TYPE=Tipo de sombra +value.SHADOW_TYPE.0=Simple +value.SHADOW_TYPE.1=Filtrada + +option.SHADOW_BLUR=Intensidad del desenfoque de sombra + +option.COLORED_SHADOW=Sombras coloreadas + +option.VOL_LIGHT=Rayos de luz +value.VOL_LIGHT.0=Desactivado +value.VOL_LIGHT.1=Basado en profundidad +value.VOL_LIGHT.2=Volumétrico + +option.DOF=Profundidad de campo + +option.DOF_STRENGTH=Intensidad de DoF + +option.DOF_SAMPLES_FACTOR=Factor de muestras de DoF + +option.AO=Oclusión ambiental +value.AO.0=Desactivado +value.AO.1=Activado + +option.AOSTEPS=Pares de muestras de AO + +option.AO_STRENGTH=Intensidad de AO + +option.AA_TYPE=Muestreo temporal +value.AA_TYPE.0=Desactivado +value.AA_TYPE.1=Desenfoque +value.AA_TYPE.2=TAA +value.AA_TYPE.3=TAA Afilado + +option.MOTION_BLUR=Desenfoque de movimiento +option.MOTION_BLUR_STRENGTH=Intensidad del desenfoque +option.MOTION_BLUR_SAMPLES=Muestras de desenfoque + +option.VANILLA_WATER=Agua estilo Vanilla + +option.WATER_TEXTURE=Textura de agua +value.WATER_TEXTURE.0=No +value.WATER_TEXTURE.1=Sí + +option.WATER_COLOR_SOURCE=Color del agua +value.WATER_COLOR_SOURCE.0=Esquema del shader +value.WATER_COLOR_SOURCE.1=Resource Pack + +option.REFLECTION=Reflejos +value.REFLECTION.0=Desactivado +value.REFLECTION.1=Activado + +option.REFRACTION=Refracción +value.REFRACTION.0=Desactivado +value.REFRACTION.1=Activado + +option.SSR_TYPE=Tipo de reflejo +value.SSR_TYPE.0=Imagen invertida +value.SSR_TYPE.1=Raymarching + +option.SUN_REFLECTION=Reflejo solar +value.SUN_REFLECTION.0=Desactivado +value.SUN_REFLECTION.1=Activado + +option.CLOUD_REFLECTION=Reflejo de nubes volumétricas + +option.WAVING=Movimiento de plantas +value.WAVING.0=No +value.WAVING.1=Sí + +option.CHROMA_ABER=Aberración cromática +value.CHROMA_ABER.0=No +value.CHROMA_ABER.1=Sí + +option.CHROMA_ABER_STRENGTH=Intensidad de aberración cromática + +option.WATER_ABSORPTION=Índice de absorción del agua + +option.WATER_TURBULENCE=Intensidad de las olas +value.WATER_TURBULENCE.7.0=Muy baja +value.WATER_TURBULENCE.1.75=Baja +value.WATER_TURBULENCE.0.9=Media +value.WATER_TURBULENCE.0.5=Alta + +option.COLOR_SCHEME=Esquema de color +value.COLOR_SCHEME.0=Etéreo +value.COLOR_SCHEME.1=New Shoka +value.COLOR_SCHEME.2=Shoka +value.COLOR_SCHEME.3=Clásico +value.COLOR_SCHEME.4=Captain +value.COLOR_SCHEME.5=Psicodélico +value.COLOR_SCHEME.6=Cacao +value.COLOR_SCHEME.7=Testigo +value.COLOR_SCHEME.99=Personalizado + +option.LIGHT_SUNSET_COLOR_R=Color de luz al atardecer R +option.LIGHT_SUNSET_COLOR_G=Color de luz al atardecer G +option.LIGHT_SUNSET_COLOR_B=Color de luz al atardecer B + +option.LIGHT_DAY_COLOR_R=Color de luz diurna R +option.LIGHT_DAY_COLOR_G=Color de luz diurna G +option.LIGHT_DAY_COLOR_B=Color de luz diurna B + +option.LIGHT_NIGHT_COLOR_R=Color de luz nocturna R +option.LIGHT_NIGHT_COLOR_G=Color de luz nocturna G +option.LIGHT_NIGHT_COLOR_B=Color de luz nocturna B + +option.ZENITH_SUNSET_COLOR_R=Color del cénit al atardecer R +option.ZENITH_SUNSET_COLOR_G=Color del cénit al atardecer G +option.ZENITH_SUNSET_COLOR_B=Color del cénit al atardecer B + +option.ZENITH_DAY_COLOR_R=Color del cénit diurno R +option.ZENITH_DAY_COLOR_G=Color del cénit diurno G +option.ZENITH_DAY_COLOR_B=Color del cénit diurno B + +option.ZENITH_NIGHT_COLOR_R=Color del cénit nocturno R +option.ZENITH_NIGHT_COLOR_G=Color del cénit nocturno G +option.ZENITH_NIGHT_COLOR_B=Color del cénit nocturno B + +option.HORIZON_SUNSET_COLOR_R=Color del horizonte al atardecer R +option.HORIZON_SUNSET_COLOR_G=Color del horizonte al atardecer G +option.HORIZON_SUNSET_COLOR_B=Color del horizonte al atardecer B + +option.HORIZON_DAY_COLOR_R=Color del horizonte diurno R +option.HORIZON_DAY_COLOR_G=Color del horizonte diurno G +option.HORIZON_DAY_COLOR_B=Color del horizonte diurno B + +option.HORIZON_NIGHT_COLOR_R=Color del horizonte nocturno R +option.HORIZON_NIGHT_COLOR_G=Color del horizonte nocturno G +option.HORIZON_NIGHT_COLOR_B=Color del horizonte nocturno B + +option.WATER_COLOR_R=Color del agua R +option.WATER_COLOR_G=Color del agua G +option.WATER_COLOR_B=Color del agua B + +option.NV_COLOR_R=Multiplicador de visión nocturna R +option.NV_COLOR_G=Multiplicador de visión nocturna G +option.NV_COLOR_B=Multiplicador de visión nocturna B + +option.OMNI_TINT_CUSTOM=Matiz personalizado Omni + +option.AVOID_DARK_LEVEL=Brillo en cuevas + +option.NIGHT_BRIGHT=Brillo nocturno + +option.V_CLOUDS=Nubes +value.V_CLOUDS.0=Vanilla +value.V_CLOUDS.1=Volumétricas estáticas +value.V_CLOUDS.2=Volumétricas dinámicas + +option.CLOUD_VOL_STYLE=Estilo de nube volumétrica +value.CLOUD_VOL_STYLE.0=Natural +value.CLOUD_VOL_STYLE.1=Cúbico + +option.CLOUD_SPEED=Velocidad de nubes +value.CLOUD_SPEED.0=Normal +value.CLOUD_SPEED.1=Time lapse 1 +value.CLOUD_SPEED.2=Time lapse 2 + +option.END_CLOUDS=Nubes en El End + +option.CLOUD_STEPS_AVG=Muestras de nubes + +option.BLOOM=Brillo (bloom) + +option.COLOR_BLINDNESS=Daltonismo + +option.COLOR_BLIND_MODE=Tipo de daltonismo +value.COLOR_BLIND_MODE.0=Protanopía +value.COLOR_BLIND_MODE.1=Deuteranopía +value.COLOR_BLIND_MODE.2=Tritanopía + +option.DEBUG_MODE=Modo de depuración + +option.BLOOM_SAMPLES=Pares de muestras para bloom + +option.BLACK_ENTITY_FIX=Arreglo de entidades negras +value.BLACK_ENTITY_FIX.0=Desactivado +value.BLACK_ENTITY_FIX.1=Activado + +option.FOG_ACTIVE=Niebla activada + +option.FOG_ADJUST=Intensidad de la niebla +value.FOG_ADJUST.20.0=Sin niebla +value.FOG_ADJUST.10.0=Ultrabaja +value.FOG_ADJUST.8.0=Muy baja +value.FOG_ADJUST.4.0=Baja +value.FOG_ADJUST.2.0=Media +value.FOG_ADJUST.1.0=Alta + +option.NETHER_FOG_DISTANCE=Distancia de niebla en el Nether +value.NETHER_FOG_DISTANCE.0=Distancia de renderizado +value.NETHER_FOG_DISTANCE.1=Vanilla + +option.BLOCKLIGHT_TEMP=Temperatura de la luz de bloque +value.BLOCKLIGHT_TEMP.0=Más cálida +value.BLOCKLIGHT_TEMP.1=Cálida +value.BLOCKLIGHT_TEMP.2=Amarilla +value.BLOCKLIGHT_TEMP.3=Amarillo pálido +value.BLOCKLIGHT_TEMP.4=Luz blanca + +option.sunPathRotation=Ángulo del sol + +option.USE_BASIC_SH=Shader básico para dimensiones personalizadas + +option.MATERIAL_GLOSS=Brillo del material + +option.DYN_HAND_LIGHT=Luz dinámica falsa + +# Pantallas +screen.ADVANCED_SCREEN=Opciones avanzadas +screen.ADVANCED_SCREEN.comment=Configurar opciones avanzadas + +screen.COMPATIBILITY_SCREEN=Compatibilidad +screen.COMPATIBILITY_SCREEN.comment=Configurar opciones de compatibilidad + +screen.SHADOWS_SCREEN=Sombras +screen.SHADOWS_SCREEN.comment=Configurar opciones de sombras + +screen.DOF_SCREEN=Profundidad de campo +screen.DOF_SCREEN.comment=Configurar opciones de profundidad de campo + +screen.AO_SCREEN=Oclusión ambiental +screen.AO_SCREEN.comment=Configurar oclusión ambiental + +screen.WATER_SCREEN=Agua +screen.WATER_SCREEN.comment=Configurar opciones del agua + +screen.POST_SCREEN=Efectos posteriores +screen.POST_SCREEN.comment=Configurar efectos posteriores + +screen.LIGHT_SCREEN=Luz +screen.LIGHT_SCREEN.comment=Configurar opciones de luz + +screen.CLOUDS_SCREEN=Sol y nubes +screen.CLOUDS_SCREEN.comment=Configurar sol y nubes + +screen.FOG_SCREEN=Niebla +screen.FOG_SCREEN.comment=Configurar opciones de niebla + +screen.MOTION_BLUR_SCREEN=Desenfoque de movimiento +screen.MOTION_BLUR_SCREEN.comment=Configurar desenfoque de movimiento + +screen.ACCESIBILITY_SCREEN=Accesibilidad +screen.ACCESIBILITY_SCREEN.comment=Configurar opciones de accesibilidad + +screen.CUSTOM_COLORS_SCREEN=Colores personalizados +screen.CUSTOM_COLORS_SCREEN.comment=Configurar colores personalizados +screen.CUSTOM_COLORS_DAY=Colores personalizados de día +screen.CUSTOM_COLORS_SUNSET=Colores personalizados de atardecer/amanecer +screen.CUSTOM_COLORS_NIGHT=Colores personalizados de noche +screen.CUSTOM_COLORS_WATER=Color personalizado del agua +screen.CUSTOM_COLORS_NV=Color personalizado para visión nocturna diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang new file mode 100644 index 00000000..13af6436 --- /dev/null +++ b/shaders/lang/es_MX.lang @@ -0,0 +1,292 @@ +# Perfiles +############################ +profile.no_effects=Sin efectos +profile.shadowless_low=Sin sombras - Bajo +profile.shadowless_medium=Sin sombras - Medio +profile.shadowless_high=Sin sombras - Alto +profile.low=Bajo +profile.medium=Medio +profile.high=Alto +profile.extreme=Extremo +profile.extremeplus=Extremo+ + +profile.comment=Los perfiles "sin sombras" están pensados para máquinas de bajo rendimiento, sin considerar las sombras. Los perfiles tradicionales van agregando sombras de mejor calidad y efectos más avanzados y pesados. Probá las opciones disponibles y encontrá la combinación que mejor te funcione. + +# Acerca de +############################# +option.ACERCADE=MakeUp +option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. +value.ACERCADE.0=v.9.1f + +# Opciones +############################# +option.SHADOW_CASTING=Sombras + +option.SHADOW_DISTANCE_SLIDER=Distancia de sombra +value.SHADOW_DISTANCE_SLIDER.0=Corta +value.SHADOW_DISTANCE_SLIDER.1=Media +value.SHADOW_DISTANCE_SLIDER.2=Larga + +option.SHADOW_QTY_SLIDER=Calidad de sombras +value.SHADOW_QTY_SLIDER.0=Ninguna +value.SHADOW_QTY_SLIDER.1=Baja +value.SHADOW_QTY_SLIDER.2=Media +value.SHADOW_QTY_SLIDER.3=Alta + +option.REFLECTION_SLIDER=Reflejo +value.REFLECTION_SLIDER.0=Desactivado +value.REFLECTION_SLIDER.1=Imagen invertida +value.REFLECTION_SLIDER.2=Raymarching + +option.SHADOW_TYPE=Tipo de sombra +value.SHADOW_TYPE.0=Simple +value.SHADOW_TYPE.1=Filtrada + +option.SHADOW_BLUR=Intensidad del desenfoque de sombra + +option.COLORED_SHADOW=Sombras coloreadas + +option.VOL_LIGHT=Rayos de luz +value.VOL_LIGHT.0=Desactivado +value.VOL_LIGHT.1=Basado en profundidad +value.VOL_LIGHT.2=Volumétrico + +option.DOF=Profundidad de campo + +option.DOF_STRENGTH=Intensidad de DoF + +option.DOF_SAMPLES_FACTOR=Factor de muestras de DoF + +option.AO=Oclusión ambiental +value.AO.0=Desactivado +value.AO.1=Activado + +option.AOSTEPS=Pares de muestras de AO + +option.AO_STRENGTH=Intensidad de AO + +option.AA_TYPE=Muestreo temporal +value.AA_TYPE.0=Desactivado +value.AA_TYPE.1=Desenfoque +value.AA_TYPE.2=TAA +value.AA_TYPE.3=TAA Afilado + +option.MOTION_BLUR=Desenfoque de movimiento +option.MOTION_BLUR_STRENGTH=Intensidad del desenfoque +option.MOTION_BLUR_SAMPLES=Muestras de desenfoque + +option.VANILLA_WATER=Agua estilo Vanilla + +option.WATER_TEXTURE=Textura de agua +value.WATER_TEXTURE.0=No +value.WATER_TEXTURE.1=Sí + +option.WATER_COLOR_SOURCE=Color del agua +value.WATER_COLOR_SOURCE.0=Esquema del shader +value.WATER_COLOR_SOURCE.1=Resource Pack + +option.REFLECTION=Reflejos +value.REFLECTION.0=Desactivado +value.REFLECTION.1=Activado + +option.REFRACTION=Refracción +value.REFRACTION.0=Desactivado +value.REFRACTION.1=Activado + +option.SSR_TYPE=Tipo de reflejo +value.SSR_TYPE.0=Imagen invertida +value.SSR_TYPE.1=Raymarching + +option.SUN_REFLECTION=Reflejo solar +value.SUN_REFLECTION.0=Desactivado +value.SUN_REFLECTION.1=Activado + +option.CLOUD_REFLECTION=Reflejo de nubes volumétricas + +option.WAVING=Movimiento de plantas +value.WAVING.0=No +value.WAVING.1=Sí + +option.CHROMA_ABER=Aberración cromática +value.CHROMA_ABER.0=No +value.CHROMA_ABER.1=Sí + +option.CHROMA_ABER_STRENGTH=Intensidad de aberración cromática + +option.WATER_ABSORPTION=Índice de absorción del agua + +option.WATER_TURBULENCE=Intensidad de las olas +value.WATER_TURBULENCE.7.0=Muy baja +value.WATER_TURBULENCE.1.75=Baja +value.WATER_TURBULENCE.0.9=Media +value.WATER_TURBULENCE.0.5=Alta + +option.COLOR_SCHEME=Esquema de color +value.COLOR_SCHEME.0=Etéreo +value.COLOR_SCHEME.1=New Shoka +value.COLOR_SCHEME.2=Shoka +value.COLOR_SCHEME.3=Clásico +value.COLOR_SCHEME.4=Captain +value.COLOR_SCHEME.5=Psicodélico +value.COLOR_SCHEME.6=Cacao +value.COLOR_SCHEME.7=Testigo +value.COLOR_SCHEME.99=Personalizado + +option.LIGHT_SUNSET_COLOR_R=Color de luz al atardecer R +option.LIGHT_SUNSET_COLOR_G=Color de luz al atardecer G +option.LIGHT_SUNSET_COLOR_B=Color de luz al atardecer B + +option.LIGHT_DAY_COLOR_R=Color de luz diurna R +option.LIGHT_DAY_COLOR_G=Color de luz diurna G +option.LIGHT_DAY_COLOR_B=Color de luz diurna B + +option.LIGHT_NIGHT_COLOR_R=Color de luz nocturna R +option.LIGHT_NIGHT_COLOR_G=Color de luz nocturna G +option.LIGHT_NIGHT_COLOR_B=Color de luz nocturna B + +option.ZENITH_SUNSET_COLOR_R=Color del cénit al atardecer R +option.ZENITH_SUNSET_COLOR_G=Color del cénit al atardecer G +option.ZENITH_SUNSET_COLOR_B=Color del cénit al atardecer B + +option.ZENITH_DAY_COLOR_R=Color del cénit diurno R +option.ZENITH_DAY_COLOR_G=Color del cénit diurno G +option.ZENITH_DAY_COLOR_B=Color del cénit diurno B + +option.ZENITH_NIGHT_COLOR_R=Color del cénit nocturno R +option.ZENITH_NIGHT_COLOR_G=Color del cénit nocturno G +option.ZENITH_NIGHT_COLOR_B=Color del cénit nocturno B + +option.HORIZON_SUNSET_COLOR_R=Color del horizonte al atardecer R +option.HORIZON_SUNSET_COLOR_G=Color del horizonte al atardecer G +option.HORIZON_SUNSET_COLOR_B=Color del horizonte al atardecer B + +option.HORIZON_DAY_COLOR_R=Color del horizonte diurno R +option.HORIZON_DAY_COLOR_G=Color del horizonte diurno G +option.HORIZON_DAY_COLOR_B=Color del horizonte diurno B + +option.HORIZON_NIGHT_COLOR_R=Color del horizonte nocturno R +option.HORIZON_NIGHT_COLOR_G=Color del horizonte nocturno G +option.HORIZON_NIGHT_COLOR_B=Color del horizonte nocturno B + +option.WATER_COLOR_R=Color del agua R +option.WATER_COLOR_G=Color del agua G +option.WATER_COLOR_B=Color del agua B + +option.NV_COLOR_R=Multiplicador de visión nocturna R +option.NV_COLOR_G=Multiplicador de visión nocturna G +option.NV_COLOR_B=Multiplicador de visión nocturna B + +option.OMNI_TINT_CUSTOM=Matiz personalizado Omni + +option.AVOID_DARK_LEVEL=Brillo en cuevas + +option.NIGHT_BRIGHT=Brillo nocturno + +option.V_CLOUDS=Nubes +value.V_CLOUDS.0=Vanilla +value.V_CLOUDS.1=Volumétricas estáticas +value.V_CLOUDS.2=Volumétricas dinámicas + +option.CLOUD_VOL_STYLE=Estilo de nube volumétrica +value.CLOUD_VOL_STYLE.0=Natural +value.CLOUD_VOL_STYLE.1=Cúbico + +option.CLOUD_SPEED=Velocidad de nubes +value.CLOUD_SPEED.0=Normal +value.CLOUD_SPEED.1=Time lapse 1 +value.CLOUD_SPEED.2=Time lapse 2 + +option.END_CLOUDS=Nubes en El End + +option.CLOUD_STEPS_AVG=Muestras de nubes + +option.BLOOM=Brillo (bloom) + +option.COLOR_BLINDNESS=Daltonismo + +option.COLOR_BLIND_MODE=Tipo de daltonismo +value.COLOR_BLIND_MODE.0=Protanopía +value.COLOR_BLIND_MODE.1=Deuteranopía +value.COLOR_BLIND_MODE.2=Tritanopía + +option.DEBUG_MODE=Modo de depuración + +option.BLOOM_SAMPLES=Pares de muestras para bloom + +option.BLACK_ENTITY_FIX=Arreglo de entidades negras +value.BLACK_ENTITY_FIX.0=Desactivado +value.BLACK_ENTITY_FIX.1=Activado + +option.FOG_ACTIVE=Niebla activada + +option.FOG_ADJUST=Intensidad de la niebla +value.FOG_ADJUST.20.0=Sin niebla +value.FOG_ADJUST.10.0=Ultrabaja +value.FOG_ADJUST.8.0=Muy baja +value.FOG_ADJUST.4.0=Baja +value.FOG_ADJUST.2.0=Media +value.FOG_ADJUST.1.0=Alta + +option.NETHER_FOG_DISTANCE=Distancia de niebla en el Nether +value.NETHER_FOG_DISTANCE.0=Distancia de renderizado +value.NETHER_FOG_DISTANCE.1=Vanilla + +option.BLOCKLIGHT_TEMP=Temperatura de la luz de bloque +value.BLOCKLIGHT_TEMP.0=Más cálida +value.BLOCKLIGHT_TEMP.1=Cálida +value.BLOCKLIGHT_TEMP.2=Amarilla +value.BLOCKLIGHT_TEMP.3=Amarillo pálido +value.BLOCKLIGHT_TEMP.4=Luz blanca + +option.sunPathRotation=Ángulo del sol + +option.USE_BASIC_SH=Shader básico para dimensiones personalizadas + +option.MATERIAL_GLOSS=Brillo del material + +option.DYN_HAND_LIGHT=Luz dinámica falsa + +# Pantallas +screen.ADVANCED_SCREEN=Opciones avanzadas +screen.ADVANCED_SCREEN.comment=Configurar opciones avanzadas + +screen.COMPATIBILITY_SCREEN=Compatibilidad +screen.COMPATIBILITY_SCREEN.comment=Configurar opciones de compatibilidad + +screen.SHADOWS_SCREEN=Sombras +screen.SHADOWS_SCREEN.comment=Configurar opciones de sombras + +screen.DOF_SCREEN=Profundidad de campo +screen.DOF_SCREEN.comment=Configurar opciones de profundidad de campo + +screen.AO_SCREEN=Oclusión ambiental +screen.AO_SCREEN.comment=Configurar oclusión ambiental + +screen.WATER_SCREEN=Agua +screen.WATER_SCREEN.comment=Configurar opciones del agua + +screen.POST_SCREEN=Efectos posteriores +screen.POST_SCREEN.comment=Configurar efectos posteriores + +screen.LIGHT_SCREEN=Luz +screen.LIGHT_SCREEN.comment=Configurar opciones de luz + +screen.CLOUDS_SCREEN=Sol y nubes +screen.CLOUDS_SCREEN.comment=Configurar sol y nubes + +screen.FOG_SCREEN=Niebla +screen.FOG_SCREEN.comment=Configurar opciones de niebla + +screen.MOTION_BLUR_SCREEN=Desenfoque de movimiento +screen.MOTION_BLUR_SCREEN.comment=Configurar desenfoque de movimiento + +screen.ACCESIBILITY_SCREEN=Accesibilidad +screen.ACCESIBILITY_SCREEN.comment=Configurar opciones de accesibilidad + +screen.CUSTOM_COLORS_SCREEN=Colores personalizados +screen.CUSTOM_COLORS_SCREEN.comment=Configurar colores personalizados +screen.CUSTOM_COLORS_DAY=Colores personalizados de día +screen.CUSTOM_COLORS_SUNSET=Colores personalizados de atardecer/amanecer +screen.CUSTOM_COLORS_NIGHT=Colores personalizados de noche +screen.CUSTOM_COLORS_WATER=Color personalizado del agua +screen.CUSTOM_COLORS_NV=Color personalizado para visión nocturna diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index b5424e41..95c92c9f 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -16,7 +16,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.1e +value.ACERCADE.0=v.9.1f #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 0dde78ef..ea42588a 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -16,7 +16,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.1e +value.ACERCADE.0=v.9.1f #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 4a54b648..b184d739 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -16,7 +16,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.1e +value.ACERCADE.0=v.9.1f #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 095d7bd0..0a018c7e 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -16,7 +16,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.1e +value.ACERCADE.0=v.9.1f #Options ############################# diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 1daea3e1..5e3f40cf 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -26,8 +26,6 @@ particles.before.deferred = true #if V_CLOUDS > 0 clouds = off -#else - clouds = fancy #endif texture.gbuffers.noisetex = textures/water_256_RG_8bit.png diff --git a/shaders/src/cloudfinalcolor.glsl b/shaders/src/cloudfinalcolor.glsl index ae993d1d..56933e49 100644 --- a/shaders/src/cloudfinalcolor.glsl +++ b/shaders/src/cloudfinalcolor.glsl @@ -1,6 +1,16 @@ -block_color.rgb = - mix( - block_color.rgb, - texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb, - clamp(pow(gl_FogFragCoord / (far * 1.66), 1.5), 0.0, 1.0) - ); + +#if MC_VERSION < 12106 + block_color.rgb = + mix( + block_color.rgb, + texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb, + clamp(pow(gl_FogFragCoord / (far * 1.66), 1.5), 0.0, 1.0) + ); +#else + block_color.rgb = + mix( + block_color.rgb, + texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb, + clamp(pow(gl_FogFragCoord / (2000.0), 1.5), 0.0, 1.0) + ); +#endif From 690c4826e822a8d89087641b6e4816449e28b226 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 12 Jul 2025 18:49:55 -0600 Subject: [PATCH 046/147] Water absorption adjust and water color --- README.md | 2 +- shaders/common/composite_fragment.glsl | 2 +- shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 2 +- shaders/lang/es_ES.lang | 2 +- shaders/lang/es_MX.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- shaders/lib/color_utils.glsl | 4 ++-- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 9660cfcc..281f2d2b 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp - Code High performance Minecraft shader (Java). -## Version: 9.1f +## Version: 9.1g ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index 39aa72ba..55e1b4ac 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -107,7 +107,7 @@ void main() { // Underwater fog if(isEyeInWater == 1) { - float water_absorption = clamp(-pow((-linear_d + 1.0), (2.0 + (WATER_ABSORPTION * 4.0))) + 1.0, 0.0, 1.0); + float water_absorption = clamp(-pow((-linear_d + 1.0), (4.0 + (WATER_ABSORPTION * 4.0))) + 1.0, 0.0, 1.0); block_color.rgb = mix(block_color.rgb, WATER_COLOR * direct_light_color * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), water_absorption); diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index b7b391d9..0c51f960 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -16,7 +16,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.1f +value.ACERCADE.0=v.9.1g #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index 13af6436..f976c33a 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -16,7 +16,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.1f +value.ACERCADE.0=v.9.1g # Opciones ############################# diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index 13af6436..f976c33a 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -16,7 +16,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.1f +value.ACERCADE.0=v.9.1g # Opciones ############################# diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index 13af6436..f976c33a 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -16,7 +16,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.1f +value.ACERCADE.0=v.9.1g # Opciones ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 95c92c9f..4b58e3e7 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -16,7 +16,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.1f +value.ACERCADE.0=v.9.1g #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index ea42588a..12b782f3 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -16,7 +16,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.1f +value.ACERCADE.0=v.9.1g #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index b184d739..4a5cf92e 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -16,7 +16,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.1f +value.ACERCADE.0=v.9.1g #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 0a018c7e..455bc05f 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -16,7 +16,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.1f +value.ACERCADE.0=v.9.1g #Options ############################# diff --git a/shaders/lib/color_utils.glsl b/shaders/lib/color_utils.glsl index d64ddc9c..4146033c 100644 --- a/shaders/lib/color_utils.glsl +++ b/shaders/lib/color_utils.glsl @@ -120,7 +120,7 @@ uniform int moonPhase; #define HORIZON_DAY_COLOR vec3(0.52, 0.975, 1.3) #define HORIZON_NIGHT_COLOR vec3(0.022, 0.029, 0.049) * NIGHT_BRIGHT_PHASE - #define WATER_COLOR vec3(0.018, 0.12 , 0.18) + #define WATER_COLOR vec3(0.0196, 0.1804, 0.3216) #elif COLOR_SCHEME == 7 // Testigo #define OMNI_TINT 0.65 #define LIGHT_SUNSET_COLOR vec3(0.70656, 0.44436, 0.2898) @@ -135,7 +135,7 @@ uniform int moonPhase; #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) #define HORIZON_NIGHT_COLOR vec3(0.025, 0.035, 0.05) * NIGHT_BRIGHT_PHASE - #define WATER_COLOR vec3(0.0 , 0.2, 0.44313725) + #define WATER_COLOR vec3(0.0196, 0.1804, 0.3216) #elif COLOR_SCHEME == 99 // Custom #define OMNI_TINT OMNI_TINT_CUSTOM #define LIGHT_SUNSET_COLOR vec3(LIGHT_SUNSET_COLOR_R, LIGHT_SUNSET_COLOR_G, LIGHT_SUNSET_COLOR_B) From 883ca1b981574b4da8483bdb7962488676530048 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Tue, 15 Jul 2025 18:21:07 -0600 Subject: [PATCH 047/147] Style corrections --- README.md | 2 +- shaders/common/composite2_fragment.glsl | 2 +- shaders/common/solid_blocks_fragment.glsl | 18 +++++++----------- shaders/common/solid_dh_blocks_fragment.glsl | 2 +- 4 files changed, 10 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 281f2d2b..302f92d3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# MakeUp - Code +# MakeUp Ultra Fast High performance Minecraft shader (Java). ## Version: 9.1g diff --git a/shaders/common/composite2_fragment.glsl b/shaders/common/composite2_fragment.glsl index 660cd92d..9f9c4709 100644 --- a/shaders/common/composite2_fragment.glsl +++ b/shaders/common/composite2_fragment.glsl @@ -97,7 +97,7 @@ void main() { block_color.rgb = fast_taa(block_color.rgb, texcoord_past); #endif - block_color = clamp(block_color, vec4(0.0), vec4(50.0)); + block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); /* DRAWBUFFERS:13 */ gl_FragData[0] = block_color; // colortex1 diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 27222146..7291f0e5 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -134,16 +134,12 @@ void main() { #endif // Toma el color puro del bloque - #if defined GBUFFER_ENTITIES - #if BLACK_ENTITY_FIX == 1 - vec4 block_color = texture2D(tex, texcoord); - if(block_color.a < 0.1 && entityId != 10101) { // Black entities bug workaround - discard; - } - block_color *= tint_color; - #else - vec4 block_color = texture2D(tex, texcoord) * tint_color; - #endif + #if defined GBUFFER_ENTITIES && BLACK_ENTITY_FIX == 1 + vec4 block_color = texture2D(tex, texcoord); + if(block_color.a < 0.1 && entityId != 10101) { // Black entities bug workaround + discard; + } + block_color *= tint_color; #else vec4 block_color = texture2D(tex, texcoord) * tint_color; #endif @@ -226,7 +222,7 @@ void main() { block_color.rgb *= 1.5; #endif - block_color.rgba = clamp(block_color, vec4(0.0), vec4(50.0)); + block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); #include "/src/finalcolor.glsl" #include "/src/writebuffers.glsl" diff --git a/shaders/common/solid_dh_blocks_fragment.glsl b/shaders/common/solid_dh_blocks_fragment.glsl index e9c261cb..7cc7b0b6 100644 --- a/shaders/common/solid_dh_blocks_fragment.glsl +++ b/shaders/common/solid_dh_blocks_fragment.glsl @@ -77,7 +77,7 @@ void main() { block_color.rgb *= mix(real_light, vec3(1.0), nightVision * 0.125); block_color.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); - block_color.rgba = clamp(block_color, vec4(0.0), vec4(50.0)); + block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); #include "/src/finalcolor_dh.glsl" #include "/src/writebuffers.glsl" From dbd383e599106efa2ab88a91d08b6f8b1a5a19d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Fri, 18 Jul 2025 19:56:56 -0600 Subject: [PATCH 048/147] Sky reflection precision --- shaders/common/solid_dh_water_fragment.glsl | 2 +- shaders/common/water_blocks_fragment.glsl | 2 +- shaders/lib/color_conversion.glsl | 86 ++++++++++++++++++++- 3 files changed, 87 insertions(+), 3 deletions(-) diff --git a/shaders/common/solid_dh_water_fragment.glsl b/shaders/common/solid_dh_water_fragment.glsl index 90629ad9..50275a32 100644 --- a/shaders/common/solid_dh_water_fragment.glsl +++ b/shaders/common/solid_dh_water_fragment.glsl @@ -140,7 +140,7 @@ void main() { vec3 sky_color_reflect; if(isEyeInWater == 0 || isEyeInWater == 2) { - sky_color_reflect = mix(low_sky_color, hi_sky_color, sqrt(clamp(dot(norm_reflect_water_vec, up_vec), 0.0001, 1.0))); + sky_color_reflect = mix(low_sky_color, hi_sky_color, smoothstep(0.0, 1.0, pow(clamp(dot(norm_reflect_water_vec, up_vec), 0.0001, 1.0), 0.333))); } else { sky_color_reflect = hi_sky_color * .5 * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667); } diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index 413d07e3..22deb770 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -162,7 +162,7 @@ void main() { vec3 sky_color_reflect; if(isEyeInWater == 0 || isEyeInWater == 2) { - sky_color_reflect = mix(low_sky_color, hi_sky_color, sqrt(clamp(dot(norm_reflect_water_vec, up_vec), 0.0001, 1.0))); + sky_color_reflect = mix(low_sky_color, hi_sky_color, smoothstep(0.0, 1.0, pow(clamp(dot(norm_reflect_water_vec, up_vec), 0.0001, 1.0), 0.333))); } else { sky_color_reflect = hi_sky_color * .5 * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667); } diff --git a/shaders/lib/color_conversion.glsl b/shaders/lib/color_conversion.glsl index 3354680b..6fa1b6ea 100644 --- a/shaders/lib/color_conversion.glsl +++ b/shaders/lib/color_conversion.glsl @@ -54,4 +54,88 @@ vec3 xyz_to_rgb(vec3 xyz) { rgb = mix(12.92 * rgb, 1.055 * pow(rgb, vec3(1.0 / 2.4)) - 0.055, mask); return clamp(rgb, 0.0, 1.0); -} \ No newline at end of file +} + +/* ----------- */ + +// Funciones auxiliares para la corrección gamma (sRGB <-> Lineal) +// Convierte un canal de sRGB a RGB lineal +float srgb_to_linear(float c) { + if (c <= 0.04045) { + return c / 12.92; + } else { + return pow((c + 0.055) / 1.055, 2.4); + } +} + +// Convierte un vector de sRGB a RGB lineal +vec3 srgb_to_linear(vec3 c) { + return vec3( + srgb_to_linear(c.r), + srgb_to_linear(c.g), + srgb_to_linear(c.b) + ); +} + +// Convierte un canal de RGB lineal a sRGB +float linear_to_srgb(float c) { + if (c <= 0.0031308) { + return c * 12.92; + } else { + return 1.055 * pow(c, 1.0 / 2.4) - 0.055; + } +} + +// Convierte un vector de RGB lineal a sRGB +vec3 linear_to_srgb(vec3 c) { + return vec3( + linear_to_srgb(c.r), + linear_to_srgb(c.g), + linear_to_srgb(c.b) + ); +} + +// Matrices de transformación para Oklab +const mat3 M1 = mat3( + 0.412453, 0.357576, 0.180438, + 0.212671, 0.715160, 0.072169, + 0.019334, 0.119192, 0.950304 +); + +const mat3 M2 = mat3( + 0.2104542553, 0.7936177850, -0.0040720468, + 1.9779984951, -2.4285922050, 0.4505937099, + 0.0259040371, 0.7827717662, -0.8086757660 +); + +const mat3 INV_M1 = mat3( + 3.2404542, -1.5371385, -0.4985314, + -0.9692660, 1.8760108, 0.0415560, + 0.0556434, -0.2040259, 1.0572252 +); + +const mat3 INV_M2 = mat3( + 1.0, 0.3963377774, 0.2158037573, + 1.0, -0.1055613458, -0.0638541728, + 1.0, -0.0894841775, -1.2914855480 +); + + +// ----- FUNCIÓN PRINCIPAL DE CONVERSIÓN RGB -> OKLAB ----- +vec3 rgb_to_oklab(vec3 c) { + // 1. Convertir de sRGB a RGB lineal + vec3 linear_rgb = srgb_to_linear(c); + vec3 lms = M1 * linear_rgb; + vec3 lms_cubed = pow(lms, vec3(1.0/3.0)); + return M2 * lms_cubed; +} + + +// ----- FUNCIÓN PRINCIPAL DE CONVERSIÓN OKLAB -> RGB ----- +vec3 oklab_to_rgb(vec3 c) { + vec3 lms_cubed = INV_M2 * c; + vec3 lms = pow(lms_cubed, vec3(3.0)); + vec3 linear_rgb = INV_M1 * lms; + + return linear_to_srgb(linear_rgb); +} From b9433f01980a8e4997c74220ed56f2133357aec0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Fri, 18 Jul 2025 21:05:28 -0600 Subject: [PATCH 049/147] New fog --- shaders/common/solid_dh_blocks_vertex.glsl | 1 + shaders/common/solid_dh_water_vertex.glsl | 1 + shaders/lib/config.glsl | 2 +- shaders/src/fog_vertex.glsl | 4 ++-- shaders/src/fog_vertex_dh.glsl | 9 +++++++++ shaders/src/position_vertex_dh.glsl | 10 ---------- 6 files changed, 14 insertions(+), 13 deletions(-) create mode 100644 shaders/src/fog_vertex_dh.glsl diff --git a/shaders/common/solid_dh_blocks_vertex.glsl b/shaders/common/solid_dh_blocks_vertex.glsl index ce317823..893be77f 100644 --- a/shaders/common/solid_dh_blocks_vertex.glsl +++ b/shaders/common/solid_dh_blocks_vertex.glsl @@ -62,4 +62,5 @@ void main() { #include "/src/position_vertex_dh.glsl" #include "/src/hi_sky.glsl" #include "/src/light_vertex_dh.glsl" + #include "/src/fog_vertex_dh.glsl" } diff --git a/shaders/common/solid_dh_water_vertex.glsl b/shaders/common/solid_dh_water_vertex.glsl index f59b4fe3..af6cfcfe 100644 --- a/shaders/common/solid_dh_water_vertex.glsl +++ b/shaders/common/solid_dh_water_vertex.glsl @@ -71,6 +71,7 @@ void main() { #include "/src/hi_sky.glsl" #include "/src/low_sky.glsl" #include "/src/light_vertex_dh.glsl" + #include "/src/fog_vertex_dh.glsl" vec4 position2 = gl_ModelViewMatrix * gl_Vertex; fragposition = position2.xyz; diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index bb0fd745..262de38f 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -314,7 +314,7 @@ const float sunPathRotation = -25.0; // [-40.0 -35.0 -30.0 -25.0 -20.0 -15.0 -10 const float ambientOcclusionLevel = 0.0; #endif -const float eyeBrightnessHalflife = 6.0; +const float eyeBrightnessHalflife = 3.0; const float centerDepthHalflife = 0.66; // DH exclusive diff --git a/shaders/src/fog_vertex.glsl b/shaders/src/fog_vertex.glsl index 90677ef9..4b011d46 100644 --- a/shaders/src/fog_vertex.glsl +++ b/shaders/src/fog_vertex.glsl @@ -11,12 +11,12 @@ ) * FOG_ADJUST; #endif - float fog_intensity_coeff = eye_bright_smooth.y * 0.004166666666666667; + float fog_intensity_coeff = max(eye_bright_smooth.y * 0.004166666666666667, visible_sky); #ifdef DISTANT_HORIZONS frog_adjust = pow( clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fog_intensity_coeff, - mix(fog_density_coeff * 0.15, 0.25, rainStrength) + mix(fog_density_coeff * 0.15, 0.4, rainStrength) ); #else frog_adjust = pow( diff --git a/shaders/src/fog_vertex_dh.glsl b/shaders/src/fog_vertex_dh.glsl new file mode 100644 index 00000000..9d9a253c --- /dev/null +++ b/shaders/src/fog_vertex_dh.glsl @@ -0,0 +1,9 @@ +#if !defined THE_END && !defined NETHER + float fog_intensity_coeff = max(eye_bright_smooth.y * 0.004166666666666667, visible_sky); + frog_adjust = pow( + clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fog_intensity_coeff, + mix(fog_density_coeff * 0.15, 0.4, rainStrength) + ); +#else + frog_adjust = sqrt(clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0)); +#endif \ No newline at end of file diff --git a/shaders/src/position_vertex_dh.glsl b/shaders/src/position_vertex_dh.glsl index 8fdf1e2e..c2d97fc6 100644 --- a/shaders/src/position_vertex_dh.glsl +++ b/shaders/src/position_vertex_dh.glsl @@ -23,13 +23,3 @@ gl_Position = dhProjection * gbufferModelView * position; #endif gl_FogFragCoord = length(position.xyz); - -#if !defined THE_END && !defined NETHER - float fog_intensity_coeff = eye_bright_smooth.y * 0.004166666666666667; - frog_adjust = pow( - clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fog_intensity_coeff, - mix(fog_density_coeff * 0.15, 0.25, rainStrength) - ); -#else - frog_adjust = sqrt(clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0)); -#endif From 56c53c591335dbc911830650331f69db1158c5eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Fri, 18 Jul 2025 21:24:41 -0600 Subject: [PATCH 050/147] Testigo water color --- shaders/lib/color_utils.glsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shaders/lib/color_utils.glsl b/shaders/lib/color_utils.glsl index 4146033c..827b1fc2 100644 --- a/shaders/lib/color_utils.glsl +++ b/shaders/lib/color_utils.glsl @@ -135,7 +135,7 @@ uniform int moonPhase; #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) #define HORIZON_NIGHT_COLOR vec3(0.025, 0.035, 0.05) * NIGHT_BRIGHT_PHASE - #define WATER_COLOR vec3(0.0196, 0.1804, 0.3216) + #define WATER_COLOR vec3(0.0118, 0.1098, 0.1922) #elif COLOR_SCHEME == 99 // Custom #define OMNI_TINT OMNI_TINT_CUSTOM #define LIGHT_SUNSET_COLOR vec3(LIGHT_SUNSET_COLOR_R, LIGHT_SUNSET_COLOR_G, LIGHT_SUNSET_COLOR_B) From e72a759fb6a6d074049f0e3c9f258bfc150d4e3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 19 Jul 2025 00:26:30 -0600 Subject: [PATCH 051/147] Version 9.2 --- README.md | 2 +- shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 4 ++-- shaders/lang/es_ES.lang | 4 ++-- shaders/lang/es_MX.lang | 4 ++-- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 302f92d3..8fe7ddec 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.1g +## Version: 9.2 ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 0c51f960..ebb5edca 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -16,7 +16,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.1g +value.ACERCADE.0=v.9.2 #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index f976c33a..457dda44 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -16,7 +16,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.1g +value.ACERCADE.0=v.9.2 # Opciones ############################# @@ -67,7 +67,7 @@ option.AO_STRENGTH=Intensidad de AO option.AA_TYPE=Muestreo temporal value.AA_TYPE.0=Desactivado -value.AA_TYPE.1=Desenfoque +value.AA_TYPE.1=Quitar ruido value.AA_TYPE.2=TAA value.AA_TYPE.3=TAA Afilado diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index f976c33a..457dda44 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -16,7 +16,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.1g +value.ACERCADE.0=v.9.2 # Opciones ############################# @@ -67,7 +67,7 @@ option.AO_STRENGTH=Intensidad de AO option.AA_TYPE=Muestreo temporal value.AA_TYPE.0=Desactivado -value.AA_TYPE.1=Desenfoque +value.AA_TYPE.1=Quitar ruido value.AA_TYPE.2=TAA value.AA_TYPE.3=TAA Afilado diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index f976c33a..457dda44 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -16,7 +16,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.1g +value.ACERCADE.0=v.9.2 # Opciones ############################# @@ -67,7 +67,7 @@ option.AO_STRENGTH=Intensidad de AO option.AA_TYPE=Muestreo temporal value.AA_TYPE.0=Desactivado -value.AA_TYPE.1=Desenfoque +value.AA_TYPE.1=Quitar ruido value.AA_TYPE.2=TAA value.AA_TYPE.3=TAA Afilado diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 4b58e3e7..32beba47 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -16,7 +16,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.1g +value.ACERCADE.0=v.9.2 #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 12b782f3..15825c23 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -16,7 +16,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.1g +value.ACERCADE.0=v.9.2 #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 4a5cf92e..bfee282d 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -16,7 +16,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.1g +value.ACERCADE.0=v.9.2 #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 455bc05f..7d20d605 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -16,7 +16,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.1g +value.ACERCADE.0=v.9.2 #Options ############################# From 0b47a4e00837d57752d730d562630247dcd40172 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 19 Jul 2025 01:10:04 -0600 Subject: [PATCH 052/147] Version 9.2 --- shaders/src/fog_vertex.glsl | 2 +- shaders/src/fog_vertex_dh.glsl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/shaders/src/fog_vertex.glsl b/shaders/src/fog_vertex.glsl index 4b011d46..70ad4f36 100644 --- a/shaders/src/fog_vertex.glsl +++ b/shaders/src/fog_vertex.glsl @@ -16,7 +16,7 @@ #ifdef DISTANT_HORIZONS frog_adjust = pow( clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fog_intensity_coeff, - mix(fog_density_coeff * 0.15, 0.4, rainStrength) + mix(fog_density_coeff * 0.15, 0.5, rainStrength) ); #else frog_adjust = pow( diff --git a/shaders/src/fog_vertex_dh.glsl b/shaders/src/fog_vertex_dh.glsl index 9d9a253c..24813f99 100644 --- a/shaders/src/fog_vertex_dh.glsl +++ b/shaders/src/fog_vertex_dh.glsl @@ -2,7 +2,7 @@ float fog_intensity_coeff = max(eye_bright_smooth.y * 0.004166666666666667, visible_sky); frog_adjust = pow( clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fog_intensity_coeff, - mix(fog_density_coeff * 0.15, 0.4, rainStrength) + mix(fog_density_coeff * 0.15, 0.5, rainStrength) ); #else frog_adjust = sqrt(clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0)); From f20807f6b72f6e0e617db2f8f751921ac81528c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sun, 20 Jul 2025 13:00:18 -0600 Subject: [PATCH 053/147] Version 9.2a --- README.md | 2 +- shaders/common/final_vertex.glsl | 2 -- shaders/common/glint_blocks_fragment.glsl | 3 ++- shaders/common/glint_blocks_vertex.glsl | 8 ++++++++ shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 2 +- shaders/lang/es_ES.lang | 2 +- shaders/lang/es_MX.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- 12 files changed, 19 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 8fe7ddec..86d0412a 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.2 +## Version: 9.2a ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/common/final_vertex.glsl b/shaders/common/final_vertex.glsl index fb3e3422..36c5986e 100644 --- a/shaders/common/final_vertex.glsl +++ b/shaders/common/final_vertex.glsl @@ -25,8 +25,6 @@ void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; texcoord = gl_MultiTexCoord0.xy; - // Tonemaping --- - // x: Block, y: Sky --- #if !defined UNKNOWN_DIM exposure = texture2D(gaux3, vec2(0.5)).r; #else diff --git a/shaders/common/glint_blocks_fragment.glsl b/shaders/common/glint_blocks_fragment.glsl index 3876edd0..74c32844 100644 --- a/shaders/common/glint_blocks_fragment.glsl +++ b/shaders/common/glint_blocks_fragment.glsl @@ -8,12 +8,13 @@ uniform sampler2D tex; varying vec2 texcoord; varying vec4 tint_color; +varying float exposure; // MAIN FUNCTION ------------------ void main() { // Toma el color puro del bloque - vec4 block_color = texture2D(tex, texcoord) * tint_color * 0.5; + vec4 block_color = texture2D(tex, texcoord) * tint_color / max(0.001, exposure); #include "/src/writebuffers.glsl" } \ No newline at end of file diff --git a/shaders/common/glint_blocks_vertex.glsl b/shaders/common/glint_blocks_vertex.glsl index d826b44a..ec9dc38a 100644 --- a/shaders/common/glint_blocks_vertex.glsl +++ b/shaders/common/glint_blocks_vertex.glsl @@ -2,6 +2,7 @@ /* Uniforms */ +uniform sampler2D gaux3; uniform mat4 gbufferModelViewInverse; uniform mat4 gbufferProjectionInverse; @@ -9,6 +10,7 @@ uniform mat4 gbufferProjectionInverse; varying vec2 texcoord; varying vec4 tint_color; +varying float exposure; #if AA_TYPE > 0 #include "/src/taa_offset.glsl" @@ -20,5 +22,11 @@ void main() { #include "/src/basiccoords_vertex.glsl" #include "/src/position_vertex.glsl" + #if !defined UNKNOWN_DIM + exposure = texture2D(gaux3, vec2(0.5)).r; + #else + exposure = 1.0; + #endif + tint_color = gl_Color; } diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index ebb5edca..4af822e2 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -16,7 +16,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.2 +value.ACERCADE.0=v.9.2a #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index 457dda44..b592f530 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -16,7 +16,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.2 +value.ACERCADE.0=v.9.2a # Opciones ############################# diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index 457dda44..b592f530 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -16,7 +16,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.2 +value.ACERCADE.0=v.9.2a # Opciones ############################# diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index 457dda44..b592f530 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -16,7 +16,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.2 +value.ACERCADE.0=v.9.2a # Opciones ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 32beba47..872af920 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -16,7 +16,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.2 +value.ACERCADE.0=v.9.2a #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 15825c23..a6a6fa33 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -16,7 +16,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.2 +value.ACERCADE.0=v.9.2a #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index bfee282d..34f8820f 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -16,7 +16,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.2 +value.ACERCADE.0=v.9.2a #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 7d20d605..cfed30e1 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -16,7 +16,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.2 +value.ACERCADE.0=v.9.2a #Options ############################# From 6f873caa310cbce004b13df7bb37231abc693f8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 21 Jul 2025 00:38:03 -0600 Subject: [PATCH 054/147] Iris custom dimensions --- shaders/common/basic_blocks_vertex.glsl | 9 ++------- shaders/common/composite_vertex.glsl | 24 ++++++++++------------- shaders/common/final_fragment.glsl | 1 - shaders/common/final_vertex.glsl | 6 +----- shaders/common/solid_blocks_fragment.glsl | 3 +++ shaders/dimension.properties | 3 +++ shaders/lib/tone_maps.glsl | 5 +++++ shaders/src/light_vertex.glsl | 11 +++-------- shaders/src/light_vertex_dh.glsl | 9 ++------- 9 files changed, 29 insertions(+), 42 deletions(-) create mode 100644 shaders/dimension.properties diff --git a/shaders/common/basic_blocks_vertex.glsl b/shaders/common/basic_blocks_vertex.glsl index 3fac7671..6a3fcbbe 100644 --- a/shaders/common/basic_blocks_vertex.glsl +++ b/shaders/common/basic_blocks_vertex.glsl @@ -47,13 +47,8 @@ void main() { vec2 illumination = clamp(abs(lmcoord), 0.0, 1.0); // Fix lines without correct illumination data illumination.y = (max(illumination.y, 0.065) - 0.065) * 1.06951871657754; - #if defined UNKNOWN_DIM - vec3 candle_color = - CANDLE_BASELIGHT * ((illumination.x * illumination.x) + pow(illumination.x * 1.205, 6.0)) * 2.75; - #else - vec3 candle_color = - CANDLE_BASELIGHT * ((illumination.x * illumination.x) + pow(illumination.x * 1.165, 6.0)); - #endif + vec3 candle_color = + CANDLE_BASELIGHT * ((illumination.x * illumination.x) + pow(illumination.x * 1.165, 6.0)); basic_light += candle_color; } diff --git a/shaders/common/composite_vertex.glsl b/shaders/common/composite_vertex.glsl index f624efb5..146e5ef2 100644 --- a/shaders/common/composite_vertex.glsl +++ b/shaders/common/composite_vertex.glsl @@ -71,24 +71,20 @@ void main() { direct_light_color = mix(direct_light_color, ZENITH_SKY_RAIN_COLOR * luma(direct_light_color), rainStrength); // Exposure - #if !defined UNKNOWN_DIM - float mipmap_level = log2(min(viewWidth, viewHeight)) - 1.0; + float mipmap_level = log2(min(viewWidth, viewHeight)) - 1.0; - vec3 exposure_col = texture2DLod(colortex1, vec2(0.5), mipmap_level).rgb; - exposure_col += texture2DLod(colortex1, vec2(0.25), mipmap_level).rgb; - exposure_col += texture2DLod(colortex1, vec2(0.75), mipmap_level).rgb; - exposure_col += texture2DLod(colortex1, vec2(0.25, 0.75), mipmap_level).rgb; - exposure_col += texture2DLod(colortex1, vec2(0.75, 0.25), mipmap_level).rgb; + vec3 exposure_col = texture2DLod(colortex1, vec2(0.5), mipmap_level).rgb; + exposure_col += texture2DLod(colortex1, vec2(0.25), mipmap_level).rgb; + exposure_col += texture2DLod(colortex1, vec2(0.75), mipmap_level).rgb; + exposure_col += texture2DLod(colortex1, vec2(0.25, 0.75), mipmap_level).rgb; + exposure_col += texture2DLod(colortex1, vec2(0.75, 0.25), mipmap_level).rgb; - exposure = clamp(luma(exposure_col), 0.0005, 100.0); + exposure = clamp(luma(exposure_col), 0.0005, 100.0); - float prev_exposure = texture2D(gaux3, vec2(0.5)).r; + float prev_exposure = texture2D(gaux3, vec2(0.5)).r; - exposure = (exp(-exposure) * 3.03) + 0.6; - exposure = mix(exposure, prev_exposure, exp(-frameTime * 1.25)); - #else - exposure = 1.0; - #endif + exposure = (exp(-exposure) * 3.03) + 0.6; + exposure = mix(exposure, prev_exposure, exp(-frameTime * 1.25)); #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) float vol_attenuation; diff --git a/shaders/common/final_fragment.glsl b/shaders/common/final_fragment.glsl index 6b35fb9a..f82f6c28 100644 --- a/shaders/common/final_fragment.glsl +++ b/shaders/common/final_fragment.glsl @@ -129,7 +129,6 @@ void main() { #endif #ifdef DEBUG_MODE - // vec3 block_color; if(texcoord.x < 0.5 && texcoord.y < 0.5) { block_color = texture2D(shadowtex1, texcoord * 2.0).rrr; } else if(texcoord.x >= 0.5 && texcoord.y >= 0.5) { diff --git a/shaders/common/final_vertex.glsl b/shaders/common/final_vertex.glsl index 36c5986e..7e215e50 100644 --- a/shaders/common/final_vertex.glsl +++ b/shaders/common/final_vertex.glsl @@ -25,9 +25,5 @@ void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; texcoord = gl_MultiTexCoord0.xy; - #if !defined UNKNOWN_DIM - exposure = texture2D(gaux3, vec2(0.5)).r; - #else - exposure = 1.0; - #endif + exposure = texture2D(gaux3, vec2(0.5)).r; } diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 7291f0e5..2be33330 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -181,6 +181,9 @@ void main() { #elif defined GBUFFER_ENTITY_GLOW block_color.rgb = clamp(vec3(luma(block_color.rgb)) * vec3(0.75, 0.75, 1.5), vec3(0.3), vec3(1.0)); + vec3 real_light = omni_light + + (shadow_c * direct_light_color * direct_light_strength) * (1.0 - (rainStrength * 0.75)) + + final_candle_color; #else #if defined MATERIAL_GLOSS && !defined NETHER float final_gloss_power = gloss_power; diff --git a/shaders/dimension.properties b/shaders/dimension.properties new file mode 100644 index 00000000..dc9ca2bb --- /dev/null +++ b/shaders/dimension.properties @@ -0,0 +1,3 @@ +dimension.world0 = minecraft:overworld +dimension.world-1 = minecraft:the_nether +dimension.world1 = minecraft:the_end \ No newline at end of file diff --git a/shaders/lib/tone_maps.glsl b/shaders/lib/tone_maps.glsl index f77761e4..542f745b 100644 --- a/shaders/lib/tone_maps.glsl +++ b/shaders/lib/tone_maps.glsl @@ -23,4 +23,9 @@ vec3 custom_sigmoid_alt(vec3 color) { color = color / pow(pow(color, vec3(3.05)) + 1.0, vec3(0.3278688524590164)); return pow(color, vec3(1.15)); + + // color = 1.4 * color; + // color = color / pow(pow(color, vec3(2.5)) + 1.0, vec3(0.4)); + + // return pow(color, vec3(1.15)); } \ No newline at end of file diff --git a/shaders/src/light_vertex.glsl b/shaders/src/light_vertex.glsl index 022985aa..1816b9a3 100644 --- a/shaders/src/light_vertex.glsl +++ b/shaders/src/light_vertex.glsl @@ -13,17 +13,12 @@ if (isEyeInWater == 1) { } #if defined UNKNOWN_DIM - visible_sky = (visible_sky * 0.6) + 0.4; + visible_sky = (visible_sky * 0.99) + 0.01; #endif // Candels color and intensity -#if defined UNKNOWN_DIM - candle_color = - CANDLE_BASELIGHT * ((illumination.x * illumination.x) + sixth_pow(illumination.x * 1.205)) * 2.75; -#else - candle_color = - CANDLE_BASELIGHT * (pow(illumination.x, 1.5) + sixth_pow(illumination.x * 1.17)); -#endif +candle_color = + CANDLE_BASELIGHT * (pow(illumination.x, 1.5) + sixth_pow(illumination.x * 1.17)); #ifdef DYN_HAND_LIGHT float dist_factor; diff --git a/shaders/src/light_vertex_dh.glsl b/shaders/src/light_vertex_dh.glsl index 0035aa06..20110f92 100644 --- a/shaders/src/light_vertex_dh.glsl +++ b/shaders/src/light_vertex_dh.glsl @@ -14,13 +14,8 @@ visible_sky = clamp(illumination.y, 0.0, 1.0); #endif // Intensidad y color de luz de candelas -#if defined UNKNOWN_DIM - candle_color = - CANDLE_BASELIGHT * ((illumination.x * illumination.x) + sixth_pow(illumination.x * 1.205)) * 2.75; -#else - candle_color = - CANDLE_BASELIGHT * (pow(illumination.x, 1.5) + sixth_pow(illumination.x * 1.17)); -#endif +candle_color = + CANDLE_BASELIGHT * (pow(illumination.x, 1.5) + sixth_pow(illumination.x * 1.17)); candle_color = clamp(candle_color, vec3(0.0), vec3(4.0)); From 91f6046d10a6f8c810e185f5afdfa38ff4072a18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 21 Jul 2025 12:05:51 -0600 Subject: [PATCH 055/147] Textured sky adjusted for unknown dimensions --- shaders/common/skybasic_fragment.glsl | 6 +++++- shaders/common/skytextured_vertex.glsl | 12 ++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/shaders/common/skybasic_fragment.glsl b/shaders/common/skybasic_fragment.glsl index f70dd866..d9001a1c 100644 --- a/shaders/common/skybasic_fragment.glsl +++ b/shaders/common/skybasic_fragment.glsl @@ -84,9 +84,13 @@ void main() { block_color = mix(background_color, block_color, block_color); #if MC_VERSION >= 11604 - block_color.a = star_data.a; + // block_color.a = star_data.a; #endif #endif + // DEBUG + // block_color.rgba = vec4(0.7, 0.0, 0.5, star_data.a); + block_color.rgba = vec4(texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb, clamp(star_data.a * 2.0, 0.0, 1.0)); + #include "/src/writebuffers.glsl" } diff --git a/shaders/common/skytextured_vertex.glsl b/shaders/common/skytextured_vertex.glsl index 10006b1e..27a9a533 100644 --- a/shaders/common/skytextured_vertex.glsl +++ b/shaders/common/skytextured_vertex.glsl @@ -32,13 +32,17 @@ void main() { sky_luma_correction = luma(day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR)); - #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - sky_luma_correction = 3.5 / ((sky_luma_correction * -2.5) + 3.5); + #if defined UNKNOWN_DIM + sky_luma_correction = 1.0; #else - sky_luma_correction = 1.5 / ((sky_luma_correction * -2.5) + 3.5); + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + sky_luma_correction = 3.5 / ((sky_luma_correction * -2.5) + 3.5); + #else + sky_luma_correction = 1.5 / ((sky_luma_correction * -2.5) + 3.5); + #endif #endif - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; #if AA_TYPE > 0 gl_Position.xy += taa_offset * gl_Position.w; From fad48b5f2e9c5b5ab90544e1bb1e1a1ff2959b0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 21 Jul 2025 12:07:37 -0600 Subject: [PATCH 056/147] Version 9.3 --- README.md | 2 +- shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 2 +- shaders/lang/es_ES.lang | 2 +- shaders/lang/es_MX.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 86d0412a..d8916dd3 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.2a +## Version: 9.3 ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 4af822e2..327c82ee 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -16,7 +16,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.2a +value.ACERCADE.0=v.9.3 #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index b592f530..b629cfbb 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -16,7 +16,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.2a +value.ACERCADE.0=v.9.3 # Opciones ############################# diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index b592f530..b629cfbb 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -16,7 +16,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.2a +value.ACERCADE.0=v.9.3 # Opciones ############################# diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index b592f530..b629cfbb 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -16,7 +16,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.2a +value.ACERCADE.0=v.9.3 # Opciones ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 872af920..1e908076 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -16,7 +16,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.2a +value.ACERCADE.0=v.9.3 #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index a6a6fa33..e425084d 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -16,7 +16,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.2a +value.ACERCADE.0=v.9.3 #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 34f8820f..3178e53c 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -16,7 +16,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.2a +value.ACERCADE.0=v.9.3 #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index cfed30e1..880486c4 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -16,7 +16,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.2a +value.ACERCADE.0=v.9.3 #Options ############################# From fa30d99876cfcf318d11312b28343e0da61f5b1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Wed, 23 Jul 2025 13:17:42 -0600 Subject: [PATCH 057/147] Revisiting TAA --- shaders/lib/fast_taa.glsl | 4 +++- shaders/shaders.properties | 40 +++++++++++++++++++------------------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/shaders/lib/fast_taa.glsl b/shaders/lib/fast_taa.glsl index 19c1e13f..4fcef4ff 100644 --- a/shaders/lib/fast_taa.glsl +++ b/shaders/lib/fast_taa.glsl @@ -50,7 +50,9 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { } previous = center + (color_vector * factor); - return mix(current_color, previous, 0.8 + (edge * 0.19)); + // return mix(current_color, previous, 0.7 + (edge * 0.1)); + + return mix(current_color, previous, 0.75); } } diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 5e3f40cf..4e8be7fe 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -149,28 +149,28 @@ uniform.int.frame_mod = fmod(frameCounter, 10) #if AA_TYPE > -1 # Pentagon uniform.vec2.taa_offset = vec2((if( \ - frame_mod == 0, 0.7071067811865476, \ - frame_mod == 1, -0.5720614028176843, \ - frame_mod == 2, 0.2185080122244104, \ - frame_mod == 3, 0.21850801222441057, \ - frame_mod == 4, -0.5720614028176845, \ - frame_mod == 5, 0.7071067811865476, \ - frame_mod == 6, -0.5720614028176843, \ - frame_mod == 7, 0.2185080122244104, \ - frame_mod == 8, 0.21850801222441057, \ - frame_mod == 9, -0.5720614028176845, \ + frame_mod == 0, 0.5, \ + frame_mod == 1, -0.5, \ + frame_mod == 2, -0.5, \ + frame_mod == 3, 0.5, \ + frame_mod == 4, 0.5, \ + frame_mod == 5, -0.5, \ + frame_mod == 6, -0.5, \ + frame_mod == 7, 0.5, \ + frame_mod == 8, 0.5, \ + frame_mod == 9, -0.5, \ 0.0)) * pixel_size_x, \ (if( \ - frame_mod == 0, 0.0, \ - frame_mod == 1, 0.4156269377774535, \ - frame_mod == 2, -0.6724985119639574, \ - frame_mod == 3, 0.6724985119639574, \ - frame_mod == 4, -0.4156269377774534, \ - frame_mod == 5, 0.0, \ - frame_mod == 6, 0.4156269377774535, \ - frame_mod == 7, -0.6724985119639574, \ - frame_mod == 8, 0.6724985119639574, \ - frame_mod == 9, -0.4156269377774534, \ + frame_mod == 0, 0.5, \ + frame_mod == 1, -0.5, \ + frame_mod == 2, 0.5, \ + frame_mod == 3, -0.5, \ + frame_mod == 4, 0.5, \ + frame_mod == 5, -0.5, \ + frame_mod == 6, 0.5, \ + frame_mod == 7, -0.5, \ + frame_mod == 8, 0.5, \ + frame_mod == 9, -0.5, \ 0.0)) * pixel_size_y) # Dither shift - When Temporal sampling is active, dithering patterns change over time, From 6856f2bccb53e50ee21e84497d1162572f96c6d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Thu, 24 Jul 2025 03:14:44 -0600 Subject: [PATCH 058/147] Revisiting TAA II --- README.md | 2 +- shaders/common/composite2_fragment.glsl | 8 +- shaders/common/final_fragment.glsl | 14 +- shaders/common/solid_dh_blocks_fragment.glsl | 6 +- shaders/common/solid_dh_water_fragment.glsl | 8 +- shaders/lang/en_US.lang | 4 +- shaders/lang/es_AR.lang | 4 +- shaders/lang/es_ES.lang | 4 +- shaders/lang/es_MX.lang | 4 +- shaders/lang/ko_KR.lang | 4 +- shaders/lang/sv_SE.lang | 4 +- shaders/lang/tr_TR.lang | 4 +- shaders/lang/zh_CN.lang | 6 +- shaders/lib/config.glsl | 2 +- shaders/lib/fast_taa.glsl | 10 +- shaders/lib/fxaa.glsl | 204 +++++++++++++++++++ shaders/shaders.properties | 45 ++-- 17 files changed, 265 insertions(+), 68 deletions(-) create mode 100644 shaders/lib/fxaa.glsl diff --git a/README.md b/README.md index d8916dd3..07a7db6c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.3 +## Version: 9.3a ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/common/composite2_fragment.glsl b/shaders/common/composite2_fragment.glsl index 9f9c4709..151c32d6 100644 --- a/shaders/common/composite2_fragment.glsl +++ b/shaders/common/composite2_fragment.glsl @@ -26,8 +26,11 @@ uniform sampler2D colortex1; uniform vec3 previousCameraPosition; uniform mat4 gbufferPreviousProjection; uniform mat4 gbufferPreviousModelView; - uniform sampler2D depthtex0; + uniform sampler2D depthtex1; uniform float frameTime; + + uniform float viewWidth; + uniform float viewHeight; #endif /* Ins / Outs */ @@ -47,6 +50,7 @@ varying vec2 texcoord; #if AA_TYPE > 0 #include "/lib/luma.glsl" + #include "/lib/color_conversion.glsl" #include "/lib/fast_taa.glsl" #endif @@ -58,7 +62,7 @@ void main() { // Precalc past position and velocity #if AA_TYPE > 0 || defined MOTION_BLUR // Retrojection of previous frame - float z_depth = texture2D(depthtex0, texcoord).r; + float z_depth = texture2D(depthtex1, texcoord).r; vec2 texcoord_past; vec3 curr_view_pos; vec3 curr_feet_player_pos; diff --git a/shaders/common/final_fragment.glsl b/shaders/common/final_fragment.glsl index f82f6c28..2683c361 100644 --- a/shaders/common/final_fragment.glsl +++ b/shaders/common/final_fragment.glsl @@ -81,7 +81,9 @@ varying float exposure; /* Utility functions */ #if AA_TYPE == 3 - #include "/lib/post.glsl" + // #include "/lib/post.glsl" + #include "/lib/luma.glsl" + #include "/lib/fxaa.glsl" #endif #include "/lib/basic_utils.glsl" @@ -95,6 +97,8 @@ varying float exposure; #include "/lib/aberration.glsl" #endif + + // MAIN FUNCTION ------------------ void main() { @@ -102,12 +106,12 @@ void main() { vec3 block_color = color_aberration(); #else vec3 block_color = texture2D(colortex1, texcoord).rgb; - #if AA_TYPE == 3 - block_color = sharpen(colortex1, block_color, texcoord); + #if AA_TYPE == 3 && !defined DOF + block_color = fxaa311(block_color, 6); #endif #endif - - block_color *= vec3(exposure); + + block_color *= vec3(exposure); #if defined UNKNOWN_DIM block_color = custom_sigmoid_alt(block_color); diff --git a/shaders/common/solid_dh_blocks_fragment.glsl b/shaders/common/solid_dh_blocks_fragment.glsl index 7cc7b0b6..42f7028c 100644 --- a/shaders/common/solid_dh_blocks_fragment.glsl +++ b/shaders/common/solid_dh_blocks_fragment.glsl @@ -43,13 +43,11 @@ void main() { float dither = r_dither(gl_FragCoord.xy); #endif - // Avoid render in DH transition + // Avoid render unnecessary DH float t = far - dhNearPlane; - float sup = t * TRANSITION_DH_SUP; float inf = t * TRANSITION_DH_INF; float view_dist = length(position.xyz); - float umbral = (view_dist - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); - if (umbral < dither || view_dist > dhRenderDistance) { + if(view_dist < dhNearPlane + inf) { discard; return; } diff --git a/shaders/common/solid_dh_water_fragment.glsl b/shaders/common/solid_dh_water_fragment.glsl index 50275a32..46eddd32 100644 --- a/shaders/common/solid_dh_water_fragment.glsl +++ b/shaders/common/solid_dh_water_fragment.glsl @@ -103,17 +103,15 @@ void main() { float dither = r_dither(gl_FragCoord.xy); // dither = 1.0; #endif - // Avoid render in DH transition + + // Avoid render unnecessary DH float t = far - dhNearPlane; - float sup = t * TRANSITION_DH_SUP; float inf = t * TRANSITION_DH_INF; float view_dist = length(position.xyz); - float umbral = (view_dist - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); - float d = texture2D(depthtex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight)).r; float linear_d = ld(d); - if(umbral < dither || linear_d < 0.9999 || view_dist > dhRenderDistance) { + if(linear_d < 0.9999 || view_dist < dhNearPlane + inf) { discard; return; } diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 327c82ee..1a38620b 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -16,7 +16,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.3 +value.ACERCADE.0=v.9.3a #Options ############################# @@ -69,7 +69,7 @@ option.AA_TYPE=Temporal sampling value.AA_TYPE.0=Off value.AA_TYPE.1=Denoise value.AA_TYPE.2=TAA -value.AA_TYPE.3=Sharp TAA +value.AA_TYPE.3=TAA+FXAA option.MOTION_BLUR=Motion blur option.MOTION_BLUR_STRENGTH=Motion blur strength diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index b629cfbb..cda2f3e0 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -16,7 +16,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3 +value.ACERCADE.0=v.9.3a # Opciones ############################# @@ -69,7 +69,7 @@ option.AA_TYPE=Muestreo temporal value.AA_TYPE.0=Desactivado value.AA_TYPE.1=Quitar ruido value.AA_TYPE.2=TAA -value.AA_TYPE.3=TAA Afilado +value.AA_TYPE.3=TAA+FXAA option.MOTION_BLUR=Desenfoque de movimiento option.MOTION_BLUR_STRENGTH=Intensidad del desenfoque diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index b629cfbb..cda2f3e0 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -16,7 +16,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3 +value.ACERCADE.0=v.9.3a # Opciones ############################# @@ -69,7 +69,7 @@ option.AA_TYPE=Muestreo temporal value.AA_TYPE.0=Desactivado value.AA_TYPE.1=Quitar ruido value.AA_TYPE.2=TAA -value.AA_TYPE.3=TAA Afilado +value.AA_TYPE.3=TAA+FXAA option.MOTION_BLUR=Desenfoque de movimiento option.MOTION_BLUR_STRENGTH=Intensidad del desenfoque diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index b629cfbb..cda2f3e0 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -16,7 +16,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3 +value.ACERCADE.0=v.9.3a # Opciones ############################# @@ -69,7 +69,7 @@ option.AA_TYPE=Muestreo temporal value.AA_TYPE.0=Desactivado value.AA_TYPE.1=Quitar ruido value.AA_TYPE.2=TAA -value.AA_TYPE.3=TAA Afilado +value.AA_TYPE.3=TAA+FXAA option.MOTION_BLUR=Desenfoque de movimiento option.MOTION_BLUR_STRENGTH=Intensidad del desenfoque diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 1e908076..9ff00a97 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -16,7 +16,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.3 +value.ACERCADE.0=v.9.3a #옵션 ############################# @@ -69,7 +69,7 @@ option.AA_TYPE=시간적 샘플링 value.AA_TYPE.0=끔 value.AA_TYPE.1=노이즈 제거 value.AA_TYPE.2=TAA -value.AA_TYPE.3=날카로운 TAA +value.AA_TYPE.3=TAA+FXAA option.MOTION_BLUR=모션 블러 option.MOTION_BLUR_STRENGTH=모션 블러 강도 diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index e425084d..bb951bd9 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -16,7 +16,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.3 +value.ACERCADE.0=v.9.3a #Options ############################# @@ -69,7 +69,7 @@ option.AA_TYPE=Tidsbestämd sampling value.AA_TYPE.0=AV value.AA_TYPE.1=Denoise value.AA_TYPE.2=TAA -value.AA_TYPE.3=Sharp TAA +value.AA_TYPE.3=TAA+FXAA option.MOTION_BLUR=Rörelseoskärpa option.MOTION_BLUR_STRENGTH=Styrka för rörelseoskärpa diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 3178e53c..bba773a7 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -16,7 +16,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.3 +value.ACERCADE.0=v.9.3a #Options ############################# @@ -69,7 +69,7 @@ option.AA_TYPE=Geçici örnekleme value.AA_TYPE.0=Kapalı value.AA_TYPE.1=Gürültü giderme value.AA_TYPE.2=TAA -value.AA_TYPE.3=Keskin TAA +value.AA_TYPE.3=TAA+FXAA option.MOTION_BLUR=Hareket bulanıklığı option.MOTION_BLUR_STRENGTH=Hareket bulanıklığı gücü diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 880486c4..5c05537b 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -16,7 +16,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.3 +value.ACERCADE.0=v.9.3a #Options ############################# @@ -68,8 +68,8 @@ option.AO_STRENGTH=环境光遮蔽强度 option.AA_TYPE=时间采样 value.AA_TYPE.0=关闭 value.AA_TYPE.1=降噪 -value.AA_TYPE.2=时间抗锯齿 (TAA) -value.AA_TYPE.3=时间抗锯齿-锐化 +value.AA_TYPE.2=TAA +value.AA_TYPE.3=TAA+FXAA option.MOTION_BLUR=动态模糊 option.MOTION_BLUR_STRENGTH=动态模糊强度 diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index 262de38f..d9159b32 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -55,7 +55,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define AO 1 // [0 1] Turn on for enhanced ambient occlusion (medium performance cost). #define AOSTEPS 4 // [4 5 6 7 8 9 10 11] How many samples are taken for AO (high performance cost). #define AO_STRENGTH 0.70 // [0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.66 0.70 0.75 0.80 0.85] Ambient occlusion strength (strength NOT affect performance). -#define AA_TYPE 2 // [0 1 2 3] No: Disable antialiasing (not recommended). Denoise only: Supersampling is only used to eliminate noise. TAA: Enable antialiasing (Recommended). Sharp TAA: A subtle sharpening effect is used on the TAA. +#define AA_TYPE 2 // [0 1 2 3] No: Disable antialiasing (not recommended). Denoise only: Supersampling is only used to eliminate noise. TAA: Enable antialiasing. TAA + FXAA: Use FXAA to improve the result of TAA. It does not apply if chromatic aberration or DoF is being used. //#define MOTION_BLUR // Turn on motion blur #define MOTION_BLUR_STRENGTH 1.0 // [0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0] Set Motion blur strength. Lower framerate -> Lower strength and vice versa is recommended. #define MOTION_BLUR_SAMPLES 4 // [3 4 5 6 7 8] Motion blur samples diff --git a/shaders/lib/fast_taa.glsl b/shaders/lib/fast_taa.glsl index 4fcef4ff..1f6d23ff 100644 --- a/shaders/lib/fast_taa.glsl +++ b/shaders/lib/fast_taa.glsl @@ -4,6 +4,8 @@ Temporal antialiasing functions. Javier Garduño - GNU Lesser General Public License v3.0 */ +/* ---------------*/ + vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { // Verificamos si proyección queda fuera de la pantalla actual if (clamp(texcoord_past, 0.0, 1.0) != texcoord_past) { @@ -17,7 +19,7 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { vec3 near_color1 = texture2D(colortex1, texcoord + vec2(pixel_size_x, 0.0)).rgb; vec3 near_color2 = texture2D(colortex1, texcoord + vec2(0.0, -pixel_size_y)).rgb; vec3 near_color3 = texture2D(colortex1, texcoord + vec2(0.0, pixel_size_y)).rgb; - + vec3 nmin = min(current_color, min(near_color0, min(near_color1, min(near_color2, near_color3)))); vec3 nmax = @@ -50,9 +52,7 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { } previous = center + (color_vector * factor); - // return mix(current_color, previous, 0.7 + (edge * 0.1)); - - return mix(current_color, previous, 0.75); + return mix(current_color, previous, 0.65 + (edge * 0.25)); } } @@ -95,6 +95,6 @@ vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { edge_color -= near_color3.rgb; float edge = clamp(length(edge_color) * 0.5773502691896258, 0.0, 1.0); // 1/sqrt(3) - return mix(current_color, previous, 0.8 + (edge * 0.19)); + return mix(current_color, previous, 0.65 + (edge * 0.25)); } } diff --git a/shaders/lib/fxaa.glsl b/shaders/lib/fxaa.glsl new file mode 100644 index 00000000..1b0e25d9 --- /dev/null +++ b/shaders/lib/fxaa.glsl @@ -0,0 +1,204 @@ +/* MakeUp Ultra Fast - fxaa_intel.glsl +FXAA 3.11 from Simon Rodriguez +http://blog.simonrodriguez.fr/articles/30-07-2016_implementing_fxaa.html + +*/ + +const float quality[12] = float[12] (1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.5f, 2.0f, 2.0f, 2.0f, 2.0f, 4.0f, 8.0f); + +vec3 fxaa311(vec3 color, int iterations){ + vec3 aa = color; + + float edgeThresholdMin = 0.03125f; + float edgeThresholdMax = 0.0625f; + float subpixelQuality = 0.75f; + + // Luma at the current fragment + float lumaCenter = luma(color); + // Luma at the four direct neighbours of the current fragment. + float lumaDown = luma(texture2D(colortex1, texcoord.xy + vec2(0.0f,-pixel_size_y), 0.0).rgb); + float lumaUp = luma(texture2D(colortex1, texcoord.xy + vec2(0.0f,pixel_size_y), 0).rgb); + float lumaLeft = luma(texture2D(colortex1, texcoord.xy + vec2(-pixel_size_x,0.0f), 0).rgb); + float lumaRight = luma(texture2D(colortex1, texcoord.xy + vec2(pixel_size_x, 0.0f), 0).rgb); + + // Find the maximum and minimum luma around the current fragment. + float lumaMin = min(lumaCenter, min(min(lumaDown, lumaUp), min(lumaLeft, lumaRight))); + float lumaMax = max(lumaCenter, max(max(lumaDown, lumaUp), max(lumaLeft, lumaRight))); + + // Compute the delta. + float lumaRange = lumaMax - lumaMin; + + // If the luma variation is lower that a threshold (or if we are in a really dark area), we are not on an edge, don't perform any FXAA. + if (lumaRange > max(edgeThresholdMin, lumaMax * edgeThresholdMax)) { + // Query the 4 remaining corners lumas. + float lumaDownLeft = luma(texture2D(colortex1, texcoord.xy + vec2(-pixel_size_x, -pixel_size_y), 0).rgb); + float lumaUpRight = luma(texture2D(colortex1, texcoord.xy + vec2(pixel_size_x, pixel_size_y), 0).rgb); + float lumaUpLeft = luma(texture2D(colortex1, texcoord.xy + vec2(-pixel_size_x, pixel_size_y), 0).rgb); + float lumaDownRight = luma(texture2D(colortex1, texcoord.xy + vec2(pixel_size_x, -pixel_size_y), 0).rgb); + + // Combine the four edges lumas (using intermediary variables for future computations with the same values). + float lumaDownUp = lumaDown + lumaUp; + float lumaLeftRight = lumaLeft + lumaRight; + + // Same for corners + float lumaLeftCorners = lumaDownLeft + lumaUpLeft; + float lumaDownCorners = lumaDownLeft + lumaDownRight; + float lumaRightCorners = lumaDownRight + lumaUpRight; + float lumaUpCorners = lumaUpRight + lumaUpLeft; + + // Compute an estimation of the gradient along the horizontal and vertical axis. + float edgeHorizontal = abs(-2.0f * lumaLeft + lumaLeftCorners) + abs(-2.0f * lumaCenter + lumaDownUp ) * 2.0f + abs(-2.0f * lumaRight + lumaRightCorners); + float edgeVertical = abs(-2.0f * lumaUp + lumaUpCorners) + abs(-2.0f * lumaCenter + lumaLeftRight) * 2.0f + abs(-2.0f * lumaDown + lumaDownCorners); + + // Is the local edge horizontal or vertical ? + bool isHorizontal = (edgeHorizontal >= edgeVertical); + + // Select the two neighboring texels lumas in the opposite direction to the local edge. + float luma1 = isHorizontal ? lumaDown : lumaLeft; + float luma2 = isHorizontal ? lumaUp : lumaRight; + // Compute gradients in this direction. + float gradient1 = luma1 - lumaCenter; + float gradient2 = luma2 - lumaCenter; + + // Which direction is the steepest ? + bool is1Steepest = abs(gradient1) >= abs(gradient2); + // Gradient in the corresponding direction, normalized. + float gradientScaled = 0.25f*max(abs(gradient1), abs(gradient2)); + + // Choose the step size (one pixel) according to the edge direction. + float stepLength = isHorizontal ? pixel_size_y : pixel_size_x; + + // Average luma in the correct direction. + float lumaLocalAverage = 0.0; + + if (is1Steepest){ + // Switch the direction + stepLength = - stepLength; + lumaLocalAverage = 0.5f*(luma1 + lumaCenter); + } else { + lumaLocalAverage = 0.5f*(luma2 + lumaCenter); + } + + // Shift UV in the correct direction by half a pixel. + vec2 currentUv = texcoord.xy; + if (isHorizontal){ + currentUv.y += stepLength * 0.5f; + } else { + currentUv.x += stepLength * 0.5f; + } + + // Compute offset (for each iteration step) in the right direction. + vec2 offset = isHorizontal ? vec2(pixel_size_x, 0.0) : vec2(0.0, pixel_size_y); + + // Compute UVs to explore on each side of the edge, orthogonally. The QUALITY allows us to step faster. + vec2 uv1 = currentUv - offset; + vec2 uv2 = currentUv + offset; + + // Read the lumas at both current extremities of the exploration segment, and compute the delta wrt to the local average luma. + float lumaEnd1 = luma(texture2D(colortex1, uv1, 0).rgb); + float lumaEnd2 = luma(texture2D(colortex1, uv2, 0).rgb); + lumaEnd1 -= lumaLocalAverage; + lumaEnd2 -= lumaLocalAverage; + + // If the luma deltas at the current extremities are larger than the local gradient, we have reached the side of the edge. + bool reached1 = abs(lumaEnd1) >= gradientScaled; + bool reached2 = abs(lumaEnd2) >= gradientScaled; + bool reachedBoth = reached1 && reached2; + + // If the side is not reached, we continue to explore in this direction. + if (!reached1){ + uv1 -= offset; + } + if (!reached2){ + uv2 += offset; + } + + // If both sides have not been reached, continue to explore. + if (!reachedBoth) { + for(int i = 2; i < iterations; i++) { + // If needed, read luma in 1st direction, compute delta. + if (!reached1) { + lumaEnd1 = luma(texture2D(colortex1, uv1, 0).rgb); + lumaEnd1 = lumaEnd1 - lumaLocalAverage; + } + // If needed, read luma in opposite direction, compute delta. + if (!reached2) { + lumaEnd2 = luma(texture2D(colortex1, uv2, 0).rgb); + lumaEnd2 = lumaEnd2 - lumaLocalAverage; + } + + // If the luma deltas at the current extremities is larger than the + // local gradient, we have reached the side of the edge. + reached1 = abs(lumaEnd1) >= gradientScaled; + reached2 = abs(lumaEnd2) >= gradientScaled; + reachedBoth = reached1 && reached2; + + // If the side is not reached, we continue to explore in this direction, + // with a variable quality. + if (!reached1) { + uv1 -= offset * quality[i]; + } + if (!reached2) { + uv2 += offset * quality[i]; + } + + // If both sides have been reached, stop the exploration. + if (reachedBoth) { + break; + } + } + } + + // Compute the distances to each extremity of the edge. + float distance1 = isHorizontal ? (texcoord.x - uv1.x) : (texcoord.y - uv1.y); + float distance2 = isHorizontal ? (uv2.x - texcoord.x) : (uv2.y - texcoord.y); + + // In which direction is the extremity of the edge closer ? + bool isDirection1 = distance1 < distance2; + float distanceFinal = min(distance1, distance2); + + // Length of the edge. + float edgeThickness = (distance1 + distance2); + + // UV offset: read in the direction of the closest side of the edge. + float pixelOffset = - distanceFinal / edgeThickness + 0.5f; + + + // Is the luma at center smaller than the local average ? + bool isLumaCenterSmaller = lumaCenter < lumaLocalAverage; + + // If the luma at center is smaller than at its neighbour, the delta luma at + // each end should be positive (same variation). + // (in the direction of the closer side of the edge.) + bool correctVariation = ((isDirection1 ? lumaEnd1 : lumaEnd2) < 0.0) != isLumaCenterSmaller; + + // If the luma variation is incorrect, do not offset. + float finalOffset = correctVariation ? pixelOffset : 0.0f; + + // Sub-pixel shifting + // Full weighted average of the luma over the 3x3 neighborhood. + float lumaAverage = (1.0f/12.0f) * (2.0f * (lumaDownUp + lumaLeftRight) + lumaLeftCorners + lumaRightCorners); + // Ratio of the delta between the global average and the center luma, over + // the luma range in the 3x3 neighborhood. + float subPixelOffset1 = clamp(abs(lumaAverage - lumaCenter)/lumaRange,0.0f,1.0f); + float subPixelOffset2 = (-2.0f * subPixelOffset1 + 3.0f) * subPixelOffset1 * subPixelOffset1; + // Compute a sub-pixel offset based on this delta. + float subPixelOffsetFinal = subPixelOffset2 * subPixelOffset2 * subpixelQuality; + + // Pick the biggest of the two offsets. + finalOffset = max(finalOffset, subPixelOffsetFinal); + + // Compute the final UV coordinates. + vec2 finalUv = texcoord.xy; + if (isHorizontal){ + finalUv.y += finalOffset * stepLength; + } else { + finalUv.x += finalOffset * stepLength; + } + + // Read the color at the new UV coordinates, and use it. + aa = texture2D(colortex1, finalUv, 0).rgb; + } + + return aa; +} \ No newline at end of file diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 4e8be7fe..d0060f87 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -5,11 +5,11 @@ profile.no_effects= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_S profile.shadowless_low= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS profile.shadowless_medium= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS profile.shadowless_high= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.extreme= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.extreme= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS # Default forced options vignette = false @@ -137,7 +137,7 @@ variable.float.light_mix_f = max(light_mix_c, light_mix_d) uniform.float.light_mix = max(light_mix_e, light_mix_f) # Frame modulus -uniform.int.frame_mod = fmod(frameCounter, 10) +uniform.int.frame_mod = fmod(frameCounter, 8) # TAA OFFSET - The offset for TAA is precalculated here. # It is based on a pentagon (repeated twice as it is a multiple of the 10-frame module.) @@ -157,8 +157,6 @@ uniform.int.frame_mod = fmod(frameCounter, 10) frame_mod == 5, -0.5, \ frame_mod == 6, -0.5, \ frame_mod == 7, 0.5, \ - frame_mod == 8, 0.5, \ - frame_mod == 9, -0.5, \ 0.0)) * pixel_size_x, \ (if( \ frame_mod == 0, 0.5, \ @@ -169,30 +167,21 @@ uniform.int.frame_mod = fmod(frameCounter, 10) frame_mod == 5, -0.5, \ frame_mod == 6, 0.5, \ frame_mod == 7, -0.5, \ - frame_mod == 8, 0.5, \ - frame_mod == 9, -0.5, \ 0.0)) * pixel_size_y) - # Dither shift - When Temporal sampling is active, dithering patterns change over time, - # but not randomly. The dithering pattern remains fixed, but the assigned - # value to each point changes by adding a value defined here, so that they - # "rotate" in a controlled manner within the range of 0 to 1. - # When the sum exceeds 1.0, only the mantissa is taken. The changes are not completely random. - # They are incremental, but not by a fixed amount, but rather a fixed amount - # that was slightly altered by randomness. This only works in recent versions - # of Minecraft/Optifine/Iris. For older versions, a mechanism that depends on the + # Dither shift - When Temporal sampling is active, dithering patterns change over time. + # This only works in recent versions of Minecraft/Optifine/Iris. + # For older versions, a mechanism that depends on the # uniform "frame_mod" is used to calculate the increment. uniform.float.dither_shift = if( \ - frame_mod == 0, 0.0, \ - frame_mod == 1, 0.9, \ - frame_mod == 2, 0.5, \ - frame_mod == 3, 0.8, \ - frame_mod == 4, 0.3, \ - frame_mod == 5, 0.7, \ - frame_mod == 6, 0.1, \ - frame_mod == 7, 0.6, \ - frame_mod == 8, 0.4, \ - frame_mod == 9, 0.2, \ + frame_mod == 0, 0.625, \ + frame_mod == 1, 0.75, \ + frame_mod == 2, 0.375, \ + frame_mod == 3, 0.125, \ + frame_mod == 4, 0.5, \ + frame_mod == 5, 0.25, \ + frame_mod == 6, 0.875, \ + frame_mod == 7, 0.0, \ 0.0) #endif From 6b9c0c53a6553e3322cddf9f8552040e15ea8354 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Thu, 24 Jul 2025 11:33:12 -0600 Subject: [PATCH 059/147] Revisiting TAA III --- shaders/lib/fast_taa.glsl | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/shaders/lib/fast_taa.glsl b/shaders/lib/fast_taa.glsl index 1f6d23ff..2bc3d05f 100644 --- a/shaders/lib/fast_taa.glsl +++ b/shaders/lib/fast_taa.glsl @@ -72,7 +72,15 @@ vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { vec4 nmin = min(current_color, min(near_color0, min(near_color1, min(near_color2, near_color3)))); vec4 nmax = - max(current_color, max(near_color0, max(near_color1, max(near_color2, near_color3)))); + max(current_color, max(near_color0, max(near_color1, max(near_color2, near_color3)))); + + // Edge detection + vec3 edge_color = -near_color0.rgb; + edge_color -= near_color1.rgb; + edge_color += current_color.rgb * 4.0; + edge_color -= near_color2.rgb; + edge_color -= near_color3.rgb; + float edge = clamp(length(edge_color) * 0.5773502691896258, 0.0, 1.0); // 1/sqrt(3) // Clip vec3 center = (nmin.rgb + nmax.rgb) * 0.5; @@ -87,14 +95,6 @@ vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { } previous = vec4(center + (color_vector * factor), previous.a); - // Edge detection - vec3 edge_color = -near_color0.rgb; - edge_color -= near_color1.rgb; - edge_color += current_color.rgb * 4.0; - edge_color -= near_color2.rgb; - edge_color -= near_color3.rgb; - float edge = clamp(length(edge_color) * 0.5773502691896258, 0.0, 1.0); // 1/sqrt(3) - return mix(current_color, previous, 0.65 + (edge * 0.25)); } } From 3da2995c210f5d93fc214c483eb385df075d60d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Fri, 25 Jul 2025 20:43:14 -0600 Subject: [PATCH 060/147] Version 9.3a --- shaders/common/composite_fragment.glsl | 6 +- shaders/common/final_fragment.glsl | 11 +- shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 2 +- shaders/lang/es_ES.lang | 2 +- shaders/lang/es_MX.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- shaders/lib/config.glsl | 138 ++++++++++++------------- shaders/lib/fast_taa.glsl | 7 ++ shaders/lib/tone_maps.glsl | 12 --- shaders/lib/volumetric_light.glsl | 38 ++++--- shaders/shaders.properties | 2 +- 15 files changed, 114 insertions(+), 116 deletions(-) diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index 55e1b4ac..27af194f 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -103,7 +103,7 @@ void main() { vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); // Depth to distance - float screen_distance = linear_d * far; + float screen_distance = linear_d * far * 0.5; // Underwater fog if(isEyeInWater == 1) { @@ -214,12 +214,12 @@ void main() { #ifdef BLOOM if(isEyeInWater == 3) { block_color.rgb = - mix(block_color.rgb, vec3(0.7, 0.8, 1.0) / exposure, clamp(screen_distance * .5, 0.0, 1.0)); + mix(block_color.rgb, vec3(0.7, 0.8, 1.0) / exposure, clamp(screen_distance, 0.0, 1.0)); } #else if(isEyeInWater == 3) { block_color.rgb = - mix(block_color.rgb, vec3(0.85, 0.9, 0.6), clamp(screen_distance * .5, 0.0, 1.0)); + mix(block_color.rgb, vec3(0.85, 0.9, 0.6), clamp(screen_distance, 0.0, 1.0)); } #endif diff --git a/shaders/common/final_fragment.glsl b/shaders/common/final_fragment.glsl index 2683c361..90a9140d 100644 --- a/shaders/common/final_fragment.glsl +++ b/shaders/common/final_fragment.glsl @@ -6,10 +6,10 @@ noisetex - Water normals colortex0 - Blue noise colortex1 - Antialiasing auxiliar -colortex2 - Clouds texture 2 +colortex2 - Unused colortex3 - TAA Averages history gaux1 - Screen-Space-Reflection / Bloom auxiliar -gaux2 - Clouds texture 1 +gaux2 - Clouds texture gaux3 - Exposure auxiliar gaux4 - Fog auxiliar @@ -112,12 +112,7 @@ void main() { #endif block_color *= vec3(exposure); - - #if defined UNKNOWN_DIM - block_color = custom_sigmoid_alt(block_color); - #else - block_color = custom_sigmoid(block_color); - #endif + block_color = custom_sigmoid(block_color); // Color-grading ----- // DEVELOPER: If your post processing effect only involves the current pixel, diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 1a38620b..d49eb3b9 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -69,7 +69,7 @@ option.AA_TYPE=Temporal sampling value.AA_TYPE.0=Off value.AA_TYPE.1=Denoise value.AA_TYPE.2=TAA -value.AA_TYPE.3=TAA+FXAA +value.AA_TYPE.3=TAA+ option.MOTION_BLUR=Motion blur option.MOTION_BLUR_STRENGTH=Motion blur strength diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index cda2f3e0..9de2a052 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -69,7 +69,7 @@ option.AA_TYPE=Muestreo temporal value.AA_TYPE.0=Desactivado value.AA_TYPE.1=Quitar ruido value.AA_TYPE.2=TAA -value.AA_TYPE.3=TAA+FXAA +value.AA_TYPE.3=TAA+ option.MOTION_BLUR=Desenfoque de movimiento option.MOTION_BLUR_STRENGTH=Intensidad del desenfoque diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index cda2f3e0..9de2a052 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -69,7 +69,7 @@ option.AA_TYPE=Muestreo temporal value.AA_TYPE.0=Desactivado value.AA_TYPE.1=Quitar ruido value.AA_TYPE.2=TAA -value.AA_TYPE.3=TAA+FXAA +value.AA_TYPE.3=TAA+ option.MOTION_BLUR=Desenfoque de movimiento option.MOTION_BLUR_STRENGTH=Intensidad del desenfoque diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index cda2f3e0..9de2a052 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -69,7 +69,7 @@ option.AA_TYPE=Muestreo temporal value.AA_TYPE.0=Desactivado value.AA_TYPE.1=Quitar ruido value.AA_TYPE.2=TAA -value.AA_TYPE.3=TAA+FXAA +value.AA_TYPE.3=TAA+ option.MOTION_BLUR=Desenfoque de movimiento option.MOTION_BLUR_STRENGTH=Intensidad del desenfoque diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 9ff00a97..e39a4691 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -69,7 +69,7 @@ option.AA_TYPE=시간적 샘플링 value.AA_TYPE.0=끔 value.AA_TYPE.1=노이즈 제거 value.AA_TYPE.2=TAA -value.AA_TYPE.3=TAA+FXAA +value.AA_TYPE.3=TAA+ option.MOTION_BLUR=모션 블러 option.MOTION_BLUR_STRENGTH=모션 블러 강도 diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index bb951bd9..4e302e2d 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -69,7 +69,7 @@ option.AA_TYPE=Tidsbestämd sampling value.AA_TYPE.0=AV value.AA_TYPE.1=Denoise value.AA_TYPE.2=TAA -value.AA_TYPE.3=TAA+FXAA +value.AA_TYPE.3=TAA+ option.MOTION_BLUR=Rörelseoskärpa option.MOTION_BLUR_STRENGTH=Styrka för rörelseoskärpa diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index bba773a7..f5443c7d 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -69,7 +69,7 @@ option.AA_TYPE=Geçici örnekleme value.AA_TYPE.0=Kapalı value.AA_TYPE.1=Gürültü giderme value.AA_TYPE.2=TAA -value.AA_TYPE.3=TAA+FXAA +value.AA_TYPE.3=TAA+ option.MOTION_BLUR=Hareket bulanıklığı option.MOTION_BLUR_STRENGTH=Hareket bulanıklığı gücü diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 5c05537b..69730568 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -69,7 +69,7 @@ option.AA_TYPE=时间采样 value.AA_TYPE.0=关闭 value.AA_TYPE.1=降噪 value.AA_TYPE.2=TAA -value.AA_TYPE.3=TAA+FXAA +value.AA_TYPE.3=TAA+ option.MOTION_BLUR=动态模糊 option.MOTION_BLUR_STRENGTH=动态模糊强度 diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index d9159b32..4a797af2 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -55,7 +55,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define AO 1 // [0 1] Turn on for enhanced ambient occlusion (medium performance cost). #define AOSTEPS 4 // [4 5 6 7 8 9 10 11] How many samples are taken for AO (high performance cost). #define AO_STRENGTH 0.70 // [0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.66 0.70 0.75 0.80 0.85] Ambient occlusion strength (strength NOT affect performance). -#define AA_TYPE 2 // [0 1 2 3] No: Disable antialiasing (not recommended). Denoise only: Supersampling is only used to eliminate noise. TAA: Enable antialiasing. TAA + FXAA: Use FXAA to improve the result of TAA. It does not apply if chromatic aberration or DoF is being used. +#define AA_TYPE 3 // [0 1 2 3] No: Disable antialiasing (not recommended). Denoise only: Supersampling is only used to eliminate noise. TAA: Enable antialiasing. TAA+: Use FXAA to improve the result of TAA. It does not apply if chromatic aberration or DoF is being used. //#define MOTION_BLUR // Turn on motion blur #define MOTION_BLUR_STRENGTH 1.0 // [0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0] Set Motion blur strength. Lower framerate -> Lower strength and vice versa is recommended. #define MOTION_BLUR_SAMPLES 4 // [3 4 5 6 7 8] Motion blur samples @@ -63,7 +63,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define SHADOW_TYPE 1 // [0 1] Sets the shadow type #define SHADOW_BLUR 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] Shadow blur intensity -// #define COLORED_SHADOW // Attempts to tint the shadow of translucent objects, as well as the associated volumetric light (if active). +#define COLORED_SHADOW // Attempts to tint the shadow of translucent objects, as well as the associated volumetric light (if active). #define WATER_ABSORPTION 0.10 // [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] Sets how much light the water absorbs. Low levels make the water more transparent. High levels make it more opaque. #define COLOR_SCHEME 1 // [0 1 2 3 4 5 6 7 99] Ethereal: Old default theme. New shoka: Reinterpretation of a classic. Shoka: The classic. Legacy: Very old default. Captain: A cold preset of stylish colors. Psycodelic: Remaster of old vivid scheme. Cocoa: Warm theme. Testigo: Fantasy and cute scheme. Custom: Choose your colors in advanced options. #define WATER_TEXTURE 0 // [0 1] Enable or disable resource pack water texture. It does not work properly in 1.12. In that case the default value is recommended. @@ -78,7 +78,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define BLOOM_SAMPLES 4.0 // [4.0 5.0 6.0 7.0 8.0 9.0 10.0] Bloom sample pairs. #define CHROMA_ABER 0 // [0 1] Enable chroma aberration. #define CHROMA_ABER_STRENGTH 0.04 // [0.04 0.05 0.06] Chroma aberration strength. -#define VOL_LIGHT 1 // [0 1 2] Depth based: Turn on depth based godrays, they are a bit slow, but can work better than volumetric light for very short shadow distances. Volumetric: It activates the volumetric light, more accurate and faster, but it needs the shadows enabled to work. +#define VOL_LIGHT 1 // [0 1 2] Depth based: Turn on depth based godrays, faster and can work better than volumetric light for very short shadow distances. Volumetric: It activates the volumetric light, more accurate and faster, but it needs the shadows enabled to work. // #define VANILLA_WATER // Establishes the appearance of water as vanilla. #define WATER_COLOR_SOURCE 0 // [0 1] Select the water color source. It does not work properly in 1.12. In that case the default value is recommended. #define WATER_TURBULENCE 0.9 // [7.0 1.75 0.9 0.5] Set the water waves strength. @@ -218,76 +218,76 @@ const float sunPathRotation = -25.0; // [-40.0 -35.0 -30.0 -25.0 -20.0 -15.0 -10 #ifndef NO_SHADOWS #if SHADOW_DISTANCE_SLIDER == 0 - #if SHADOW_QTY_SLIDER == 1 - #define SHADOW_LIMIT 75.0 - const int shadowMapResolution = 300; - const float shadowDistance = 75.0; - #define SHADOW_FIX_FACTOR 0.3 - #define SHADOW_DIST 0.75 - - #elif SHADOW_QTY_SLIDER == 2 - #define SHADOW_LIMIT 75.0 - const int shadowMapResolution = 600; - const float shadowDistance = 75.0; - #define SHADOW_FIX_FACTOR 0.15 - #define SHADOW_DIST 0.81 - - #elif SHADOW_QTY_SLIDER == 3 - #define SHADOW_LIMIT 75.0 - const int shadowMapResolution = 1200; - const float shadowDistance = 75.0; - #define SHADOW_FIX_FACTOR 0.05 - #define SHADOW_DIST 0.81 - - #endif + #if SHADOW_QTY_SLIDER == 1 + #define SHADOW_LIMIT 75.0 + const int shadowMapResolution = 300; + const float shadowDistance = 75.0; + #define SHADOW_FIX_FACTOR 0.3 + #define SHADOW_DIST 0.75 + + #elif SHADOW_QTY_SLIDER == 2 + #define SHADOW_LIMIT 75.0 + const int shadowMapResolution = 600; + const float shadowDistance = 75.0; + #define SHADOW_FIX_FACTOR 0.15 + #define SHADOW_DIST 0.81 + + #elif SHADOW_QTY_SLIDER == 3 + #define SHADOW_LIMIT 75.0 + const int shadowMapResolution = 1200; + const float shadowDistance = 75.0; + #define SHADOW_FIX_FACTOR 0.05 + #define SHADOW_DIST 0.81 + + #endif #elif SHADOW_DISTANCE_SLIDER == 1 - #if SHADOW_QTY_SLIDER == 1 - #define SHADOW_LIMIT 105.0 - const int shadowMapResolution = 420; - const float shadowDistance = 105.0; - #define SHADOW_FIX_FACTOR 0.28 - #define SHADOW_DIST 0.75 - - #elif SHADOW_QTY_SLIDER == 2 - #define SHADOW_LIMIT 105.0 - const int shadowMapResolution = 840; - const float shadowDistance = 105.0; - #define SHADOW_FIX_FACTOR 0.07 - #define SHADOW_DIST 0.83 - - #elif SHADOW_QTY_SLIDER == 3 - #define SHADOW_LIMIT 105.0 - const int shadowMapResolution = 1680; - const float shadowDistance = 105.0; - #define SHADOW_FIX_FACTOR 0.03 - #define SHADOW_DIST 0.83 - - #endif + #if SHADOW_QTY_SLIDER == 1 + #define SHADOW_LIMIT 105.0 + const int shadowMapResolution = 420; + const float shadowDistance = 105.0; + #define SHADOW_FIX_FACTOR 0.28 + #define SHADOW_DIST 0.75 + + #elif SHADOW_QTY_SLIDER == 2 + #define SHADOW_LIMIT 105.0 + const int shadowMapResolution = 840; + const float shadowDistance = 105.0; + #define SHADOW_FIX_FACTOR 0.07 + #define SHADOW_DIST 0.83 + + #elif SHADOW_QTY_SLIDER == 3 + #define SHADOW_LIMIT 105.0 + const int shadowMapResolution = 1680; + const float shadowDistance = 105.0; + #define SHADOW_FIX_FACTOR 0.03 + #define SHADOW_DIST 0.83 + + #endif #elif SHADOW_DISTANCE_SLIDER == 2 - #if SHADOW_QTY_SLIDER == 1 - #define SHADOW_LIMIT 255.0 - const int shadowMapResolution = 1020; - const float shadowDistance = 255.0; - #define SHADOW_FIX_FACTOR 0.12 - #define SHADOW_DIST 0.8 - - #elif SHADOW_QTY_SLIDER == 2 - #define SHADOW_LIMIT 255.0 - const int shadowMapResolution = 2040; - const float shadowDistance = 255.0; - #define SHADOW_FIX_FACTOR 0.03 - #define SHADOW_DIST 0.85 - - #elif SHADOW_QTY_SLIDER == 3 - #define SHADOW_LIMIT 255.0 - const int shadowMapResolution = 4080; - const float shadowDistance = 255.0; - #define SHADOW_FIX_FACTOR 0.015 - #define SHADOW_DIST 0.87 - - #endif + #if SHADOW_QTY_SLIDER == 1 + #define SHADOW_LIMIT 255.0 + const int shadowMapResolution = 1020; + const float shadowDistance = 255.0; + #define SHADOW_FIX_FACTOR 0.12 + #define SHADOW_DIST 0.8 + + #elif SHADOW_QTY_SLIDER == 2 + #define SHADOW_LIMIT 255.0 + const int shadowMapResolution = 2040; + const float shadowDistance = 255.0; + #define SHADOW_FIX_FACTOR 0.03 + #define SHADOW_DIST 0.85 + + #elif SHADOW_QTY_SLIDER == 3 + #define SHADOW_LIMIT 255.0 + const int shadowMapResolution = 4080; + const float shadowDistance = 255.0; + #define SHADOW_FIX_FACTOR 0.015 + #define SHADOW_DIST 0.87 + + #endif #endif #if VOL_LIGHT == 2 diff --git a/shaders/lib/fast_taa.glsl b/shaders/lib/fast_taa.glsl index 2bc3d05f..3e961a62 100644 --- a/shaders/lib/fast_taa.glsl +++ b/shaders/lib/fast_taa.glsl @@ -32,7 +32,9 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { edge_color -= near_color2; edge_color -= near_color3; + edge_color = edge_color / (current_color * 2.0); float edge = clamp(length(edge_color) * 0.5773502691896258, 0.0, 1.0); // 1/sqrt(3) + edge = smoothstep(0.25, 0.75, edge); // nmax = current_color + (edge * 0.7 + 0.3) * (nmax - current_color); // nmin = current_color + (edge * 0.7 + 0.3) * (nmin - current_color); @@ -53,6 +55,8 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { previous = center + (color_vector * factor); return mix(current_color, previous, 0.65 + (edge * 0.25)); + + // return vec3(edge); } } @@ -80,7 +84,10 @@ vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { edge_color += current_color.rgb * 4.0; edge_color -= near_color2.rgb; edge_color -= near_color3.rgb; + + edge_color = edge_color / (current_color * 2.0); float edge = clamp(length(edge_color) * 0.5773502691896258, 0.0, 1.0); // 1/sqrt(3) + edge = smoothstep(0.25, 0.75, edge); // Clip vec3 center = (nmin.rgb + nmax.rgb) * 0.5; diff --git a/shaders/lib/tone_maps.glsl b/shaders/lib/tone_maps.glsl index 542f745b..6eff90f0 100644 --- a/shaders/lib/tone_maps.glsl +++ b/shaders/lib/tone_maps.glsl @@ -16,16 +16,4 @@ vec3 custom_sigmoid(vec3 color) { color = color / pow(pow(color, vec3(2.5)) + 1.0, vec3(0.4)); return pow(color, vec3(1.15)); -} - -vec3 custom_sigmoid_alt(vec3 color) { - color = 1.4 * color; - color = color / pow(pow(color, vec3(3.05)) + 1.0, vec3(0.3278688524590164)); - - return pow(color, vec3(1.15)); - - // color = 1.4 * color; - // color = color / pow(pow(color, vec3(2.5)) + 1.0, vec3(0.4)); - - // return pow(color, vec3(1.15)); } \ No newline at end of file diff --git a/shaders/lib/volumetric_light.glsl b/shaders/lib/volumetric_light.glsl index 6c94d75b..782fea88 100644 --- a/shaders/lib/volumetric_light.glsl +++ b/shaders/lib/volumetric_light.glsl @@ -41,6 +41,7 @@ Volumetric light - MakeUp implementation // Clip to world pos = modeli_times_projectioni * (vec4(view_pos, 1.0) * 2.0 - 1.0); view_pos = (pos.xyz /= pos.w).xyz; + shadow_pos = get_volumetric_pos(view_pos); light += shadow2D(shadowtex1, shadow_pos).r; } @@ -69,7 +70,7 @@ Volumetric light - MakeUp implementation for (int i = 0; i < GODRAY_STEPS; i++) { // Exponentialy spaced shadow samples - current_depth = exp2(i + dither) - 0.96; // 0.96 avoids points behind near plane + current_depth = exp2(i + dither) - 0.6; if (current_depth > view_distance) { break; } @@ -85,24 +86,31 @@ Volumetric light - MakeUp implementation shadow_pos = get_volumetric_pos(view_pos); - shadow_detector = shadow2D(shadowtex0, vec3(shadow_pos.xy, shadow_pos.z - 0.001)).r; - if (shadow_detector < 1.0) { - shadow_black = shadow2D(shadowtex1, vec3(shadow_pos.xy, shadow_pos.z - 0.001)).r; - if (shadow_black != shadow_detector) { - shadow_color = texture2D(shadowcolor0, shadow_pos.xy); - alpha_complement = 1.0 - shadow_color.a; - shadow_color.rgb *= alpha_complement; - shadow_color.rgb = mix(shadow_color.rgb, vec3(1.0), alpha_complement); - } - } + // DEBUG + light += shadow2D(shadowtex0, shadow_pos).r; + + // // shadow_detector = shadow2D(shadowtex0, vec3(shadow_pos.xy, shadow_pos.z + 0.000)).r; + // shadow_detector = shadow2D(shadowtex0, shadow_pos).r; + // if (shadow_detector < 1.0) { + // // shadow_black = shadow2D(shadowtex1, vec3(shadow_pos.xy, shadow_pos.z + 0.000)).r; + // shadow_black = shadow2D(shadowtex1, shadow_pos).r; + // if (shadow_black != shadow_detector) { + // shadow_color = texture2D(shadowcolor0, shadow_pos.xy); + // alpha_complement = 1.0 - shadow_color.a; + // shadow_color.rgb *= alpha_complement; + // shadow_color.rgb = mix(shadow_color.rgb, vec3(1.0), alpha_complement); + // } + // } - shadow_color *= shadow_black; - light_color += clamp(shadow_color.rgb * (1.0 - shadow_detector) + shadow_detector, vec3(0.0), vec3(1.0)); + // shadow_color *= shadow_black; + // light_color += clamp(shadow_color.rgb * (1.0 - shadow_detector) + shadow_detector, vec3(0.0), vec3(1.0)); } - light_color /= GODRAY_STEPS; + // light_color /= GODRAY_STEPS; + light /= GODRAY_STEPS; - return light_color; + // return light_color; + return vec3(light); } #endif diff --git a/shaders/shaders.properties b/shaders/shaders.properties index d0060f87..66f6bfac 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -6,7 +6,7 @@ profile.shadowless_low= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_S profile.shadowless_medium= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS profile.shadowless_high= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS profile.extreme= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS From 2b88f1de4c79c33b7fe8bf7b3a1808dd92bedd9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sun, 3 Aug 2025 10:15:39 -0600 Subject: [PATCH 061/147] Version 9.3b --- README.md | 2 +- shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 2 +- shaders/lang/es_ES.lang | 2 +- shaders/lang/es_MX.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- shaders/lib/fast_taa.glsl | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 07a7db6c..d9b9cff2 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.3a +## Version: 9.3b ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index d49eb3b9..97e45732 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -16,7 +16,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.3a +value.ACERCADE.0=v.9.3b #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index 9de2a052..6e35b2ee 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -16,7 +16,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3a +value.ACERCADE.0=v.9.3b # Opciones ############################# diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index 9de2a052..6e35b2ee 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -16,7 +16,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3a +value.ACERCADE.0=v.9.3b # Opciones ############################# diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index 9de2a052..6e35b2ee 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -16,7 +16,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3a +value.ACERCADE.0=v.9.3b # Opciones ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index e39a4691..82306fc2 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -16,7 +16,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.3a +value.ACERCADE.0=v.9.3b #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 4e302e2d..df9fe259 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -16,7 +16,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.3a +value.ACERCADE.0=v.9.3b #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index f5443c7d..a7936118 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -16,7 +16,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.3a +value.ACERCADE.0=v.9.3b #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 69730568..2f25aaba 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -16,7 +16,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.3a +value.ACERCADE.0=v.9.3b #Options ############################# diff --git a/shaders/lib/fast_taa.glsl b/shaders/lib/fast_taa.glsl index 3e961a62..b1f039e6 100644 --- a/shaders/lib/fast_taa.glsl +++ b/shaders/lib/fast_taa.glsl @@ -85,7 +85,7 @@ vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { edge_color -= near_color2.rgb; edge_color -= near_color3.rgb; - edge_color = edge_color / (current_color * 2.0); + edge_color = edge_color / (current_color.rgb * 2.0); float edge = clamp(length(edge_color) * 0.5773502691896258, 0.0, 1.0); // 1/sqrt(3) edge = smoothstep(0.25, 0.75, edge); From 3dd91ff0b49ad8202eb14661b574b08fa00a1383 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Tue, 5 Aug 2025 03:47:56 -0600 Subject: [PATCH 062/147] Testing line detectors --- shaders/common/final_fragment.glsl | 5 +- shaders/lib/fast_taa.glsl | 167 +++++++++++++++++++++++++---- shaders/lib/luma.glsl | 2 +- 3 files changed, 149 insertions(+), 25 deletions(-) diff --git a/shaders/common/final_fragment.glsl b/shaders/common/final_fragment.glsl index 90a9140d..0e80b9ea 100644 --- a/shaders/common/final_fragment.glsl +++ b/shaders/common/final_fragment.glsl @@ -111,8 +111,9 @@ void main() { #endif #endif - block_color *= vec3(exposure); - block_color = custom_sigmoid(block_color); + // Exposure correction + // block_color *= vec3(exposure); + // block_color = custom_sigmoid(block_color); // Color-grading ----- // DEVELOPER: If your post processing effect only involves the current pixel, diff --git a/shaders/lib/fast_taa.glsl b/shaders/lib/fast_taa.glsl index b1f039e6..c1d62e65 100644 --- a/shaders/lib/fast_taa.glsl +++ b/shaders/lib/fast_taa.glsl @@ -6,6 +6,115 @@ Javier Garduño - GNU Lesser General Public License v3.0 /* ---------------*/ +float line_detector(vec3 c, vec3 up, vec3 down, vec3 left, vec3 right, vec3 ul, vec3 ur, vec3 dl, vec3 dr) { + float l_c = luma(c); + float l_up = luma(up); + float l_down = luma(down); + float l_left = luma(left); + float l_right = luma(right); + float l_ul = luma(ul); + float l_ur = luma(ur); + float l_dl = luma(dl); + float l_dr = luma(dr); + + // --- Cálculo de "Linealidad" para cada dirección --- + + // 1. Línea Horizontal + float ridgeH = abs(l_c - l_up) + abs(l_c - l_down); // Diferencia con vecinos perpendiculares + float consistencyH = abs(l_c - l_left) + abs(l_c - l_right); // Diferencia con vecinos paralelos + float linenessH = ridgeH - consistencyH; + + // 2. Línea Vertical + float ridgeV = abs(l_c - l_left) + abs(l_c - l_right); + float consistencyV = abs(l_c - l_up) + abs(l_c - l_down); + float linenessV = ridgeV - consistencyV; + + // 3. Línea Diagonal (Top-Left a Bottom-Right) + float ridgeD1 = abs(l_c - l_ur) + abs(l_c - l_dl); + float consistencyD1 = abs(l_c - l_ul) + abs(l_c - l_dr); + float linenessD1 = ridgeD1 - consistencyD1; + + // 4. Línea Diagonal (Top-Right a Bottom-Left) + float ridgeD2 = abs(l_c - l_ul) + abs(l_c - l_dr); + float consistencyD2 = abs(l_c - l_ur) + abs(l_c - l_dl); + float linenessD2 = ridgeD2 - consistencyD2; + + // --- Puntuación final y color de salida --- + + // Se toma la máxima puntuación de las 4 direcciones + float maxLineness = max(linenessH, max(linenessV, max(linenessD1, linenessD2))); + + // `smoothstep` crea una transición suave en lugar de un corte brusco. + // Los valores 0.1 y 0.3 son umbrales que puedes ajustar para cambiar la sensibilidad del filtro. + // - El primer valor es donde empieza el resaltado. + // - El segundo valor es donde el resaltado alcanza su máximo. + float lineFactor = smoothstep(0.05, 0.5, maxLineness); + // float lineFactor = clamp(sqrt(maxLineness), 0.0, 1.0); + + return lineFactor; +} + +float line_detector_nice(vec3 center, vec3 up, vec3 down, vec3 left, vec3 right, vec3 ul, vec3 ur, vec3 dl, vec3 dr) { + // Umbral mínimo para que una línea empiece a ser visible. + // Aumenta este valor para ignorar líneas muy tenues. + const float threshold = 0.0025; + + // Suavidad de la transición del resaltado. Un valor más alto + // crea un resultado más suave (anti-aliasing). + const float smoothness = 0.075; + + float c = luma(center); + float t = luma(up); + float b = luma(down); + float l = luma(left); + float r = luma(right); + float tl = luma(ul); + float tr = luma(ur); + float bl = luma(dl); + float br = luma(dr); + + // 1. Línea Horizontal (Cresta/Valle Vertical) + float ridgeStrengthH = 0.0; + if ((c > t && c > b) || (c < t && c < b)) { + ridgeStrengthH = min(abs(c - t), abs(c - b)); + } + + // 2. Línea Vertical (Cresta/Valle Horizontal) + float ridgeStrengthV = 0.0; + if ((c > l && c > r) || (c < l && c < r)) { + ridgeStrengthV = min(abs(c - l), abs(c - r)); + } + + // 3. Línea Diagonal (\) (Cresta/Valle en la anti-diagonal) + float ridgeStrengthD1 = 0.0; + if ((c > tr && c > bl) || (c < tr && c < bl)) { + ridgeStrengthD1 = min(abs(c - tr), abs(c - bl)); + } + + // 4. Línea Diagonal (/) (Cresta/Valle en la diagonal principal) + float ridgeStrengthD2 = 0.0; + if ((c > tl && c > br) || (c < tl && c < br)) { + ridgeStrengthD2 = min(abs(c - tl), abs(c - br)); + } + + // --- Penalización por inconsistencia a lo largo de la línea --- + // Restamos la diferencia de color a lo largo de la línea. + // Una línea perfecta tiene una penalización cercana a cero. + + float linenessH = ridgeStrengthH - (abs(c-l) + abs(c-r)); + float linenessV = ridgeStrengthV - (abs(c-t) + abs(c-b)); + float linenessD1 = ridgeStrengthD1 - (abs(c-tl) + abs(c-br)); + float linenessD2 = ridgeStrengthD2 - (abs(c-tr) + abs(c-bl)); + + // --- Puntuación final y color de salida --- + + // Tomamos la máxima puntuación y nos aseguramos de que no sea negativa. + float maxLineness = max(0.0, max(linenessH, max(linenessV, max(linenessD1, linenessD2)))); + + // `smoothstep` crea una transición suave basada en nuestros parámetros. + return smoothstep(threshold, threshold + smoothness, maxLineness); +} + vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { // Verificamos si proyección queda fuera de la pantalla actual if (clamp(texcoord_past, 0.0, 1.0) != texcoord_past) { @@ -15,33 +124,46 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { vec3 previous = texture2D(colortex3, texcoord_past).rgb; // Apply clamping on the history color. - vec3 near_color0 = texture2D(colortex1, texcoord + vec2(-pixel_size_x, 0.0)).rgb; - vec3 near_color1 = texture2D(colortex1, texcoord + vec2(pixel_size_x, 0.0)).rgb; - vec3 near_color2 = texture2D(colortex1, texcoord + vec2(0.0, -pixel_size_y)).rgb; - vec3 near_color3 = texture2D(colortex1, texcoord + vec2(0.0, pixel_size_y)).rgb; + // vec3 near_color0 = texture2D(colortex1, texcoord + vec2(-pixel_size_x, 0.0)).rgb; + // vec3 near_color1 = texture2D(colortex1, texcoord + vec2(pixel_size_x, 0.0)).rgb; + // vec3 near_color2 = texture2D(colortex1, texcoord + vec2(0.0, -pixel_size_y)).rgb; + // vec3 near_color3 = texture2D(colortex1, texcoord + vec2(0.0, pixel_size_y)).rgb; + // vec3 nmin = + // min(current_color, min(near_color0, min(near_color1, min(near_color2, near_color3)))); + // vec3 nmax = + // max(current_color, max(near_color0, max(near_color1, max(near_color2, near_color3)))); + + + + vec3 left = texture2D(colortex1, texcoord + vec2(-pixel_size_x, 0.0)).rgb; + vec3 right = texture2D(colortex1, texcoord + vec2(pixel_size_x, 0.0)).rgb; + vec3 down = texture2D(colortex1, texcoord + vec2(0.0, -pixel_size_y)).rgb; + vec3 up = texture2D(colortex1, texcoord + vec2(0.0, pixel_size_y)).rgb; + vec3 ul = texture2D(colortex1, texcoord + vec2(-pixel_size_x, pixel_size_y)).rgb; + vec3 ur = texture2D(colortex1, texcoord + vec2(pixel_size_x, pixel_size_y)).rgb; + vec3 dl = texture2D(colortex1, texcoord + vec2(-pixel_size_x, -pixel_size_y)).rgb; + vec3 dr = texture2D(colortex1, texcoord + vec2(pixel_size_x, -pixel_size_y)).rgb; + vec3 nmin = - min(current_color, min(near_color0, min(near_color1, min(near_color2, near_color3)))); + min(current_color, min(left, min(right, min(up, down)))); vec3 nmax = - max(current_color, max(near_color0, max(near_color1, max(near_color2, near_color3)))); + max(current_color, max(left, max(right, max(up, down)))); + + float edge = line_detector_nice(current_color, up, down, left, right, ul, ur, dl, dr); // Edge detection - vec3 edge_color = -near_color0; - edge_color -= near_color1; - edge_color += current_color * 4.0; - edge_color -= near_color2; - edge_color -= near_color3; + // vec3 edge_color = -near_color0; + // edge_color -= near_color1; + // edge_color += current_color * 4.0; + // edge_color -= near_color2; + // edge_color -= near_color3; - edge_color = edge_color / (current_color * 2.0); - float edge = clamp(length(edge_color) * 0.5773502691896258, 0.0, 1.0); // 1/sqrt(3) - edge = smoothstep(0.25, 0.75, edge); - - // nmax = current_color + (edge * 0.7 + 0.3) * (nmax - current_color); - // nmin = current_color + (edge * 0.7 + 0.3) * (nmin - current_color); + // edge_color = edge_color / (current_color * 2.0); + // float edge = clamp(length(edge_color) * 0.5773502691896258, 0.0, 1.0); // 1/sqrt(3) + // edge = smoothstep(0.25, 0.75, edge); // Clip - // previous = clamp(previous, nmin, nmax); - vec3 center = (nmin + nmax) * 0.5; float radio = length(nmax - center); @@ -54,9 +176,10 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { } previous = center + (color_vector * factor); - return mix(current_color, previous, 0.65 + (edge * 0.25)); + // return mix(current_color, previous, 0.75 + (edge * 0.24)); + // return mix(current_color, previous, 0.8 + (edge * 0.19)); - // return vec3(edge); + return vec3(edge); } } @@ -102,6 +225,6 @@ vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { } previous = vec4(center + (color_vector * factor), previous.a); - return mix(current_color, previous, 0.65 + (edge * 0.25)); + return mix(current_color, previous, 0.65 + (edge * 0.34)); } } diff --git a/shaders/lib/luma.glsl b/shaders/lib/luma.glsl index f436a6e3..9fbdc3de 100644 --- a/shaders/lib/luma.glsl +++ b/shaders/lib/luma.glsl @@ -5,7 +5,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ float luma(vec3 color) { - return dot(color, vec3(0.299, 0.587, 0.114)); + return dot(color, vec3(0.2126, 0.7152, 0.0722)); } float color_average(vec3 color) { From 51b57746cc7680fb5fcc5b0eec18205b97c47af4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Tue, 5 Aug 2025 16:34:22 -0600 Subject: [PATCH 063/147] Testing... --- shaders/common/composite1_fragment.glsl | 2 +- shaders/common/composite_fragment.glsl | 4 +- shaders/common/deferred_fragment.glsl | 6 +- shaders/common/final_fragment.glsl | 4 +- shaders/lib/dither.glsl | 25 +-- shaders/lib/fast_taa.glsl | 192 ++++++++++++------------ shaders/shaders.properties | 2 + 7 files changed, 124 insertions(+), 111 deletions(-) diff --git a/shaders/common/composite1_fragment.glsl b/shaders/common/composite1_fragment.glsl index a2c82702..3f5b6d51 100644 --- a/shaders/common/composite1_fragment.glsl +++ b/shaders/common/composite1_fragment.glsl @@ -46,7 +46,7 @@ void main() { #if defined BLOOM || defined DOF #if AA_TYPE > 0 - float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); + float dither = shifted_r_dither(gl_FragCoord.xy); #else float dither = semiblue(gl_FragCoord.xy); #endif diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index 27af194f..6947c3d5 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -128,9 +128,9 @@ void main() { #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) #if AA_TYPE > 0 - float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); + float dither = shifted_dither_makeup(gl_FragCoord.xy); #else - float dither = semiblue(gl_FragCoord.xy); + float dither = valve_red(gl_FragCoord.xy); #endif #endif diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index e229ab6e..2be81687 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -12,6 +12,7 @@ /* Uniforms */ +uniform sampler2D colortex0; uniform sampler2D colortex1; uniform ivec2 eyeBrightnessSmooth; uniform int isEyeInWater; @@ -114,9 +115,12 @@ void main() { #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) #if AA_TYPE > 0 + // float dither = shifted_texture_noise_64(gl_FragCoord.xy, colortex0); float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); + // float dither = shifted_dither_makeup(gl_FragCoord.xy); #else - float dither = semiblue(gl_FragCoord.xy); + // float dither = semiblue(gl_FragCoord.xy); + float dither = dither_makeup(gl_FragCoord.xy); #endif #endif diff --git a/shaders/common/final_fragment.glsl b/shaders/common/final_fragment.glsl index 0e80b9ea..92ce370b 100644 --- a/shaders/common/final_fragment.glsl +++ b/shaders/common/final_fragment.glsl @@ -112,8 +112,8 @@ void main() { #endif // Exposure correction - // block_color *= vec3(exposure); - // block_color = custom_sigmoid(block_color); + block_color *= vec3(exposure); + block_color = custom_sigmoid(block_color); // Color-grading ----- // DEVELOPER: If your post processing effect only involves the current pixel, diff --git a/shaders/lib/dither.glsl b/shaders/lib/dither.glsl index 04c15f3a..bd9ac5e8 100644 --- a/shaders/lib/dither.glsl +++ b/shaders/lib/dither.glsl @@ -110,10 +110,18 @@ float dither_makeup(vec2 xy) { float flip = mod(tile.x + tile.y, 2.0); xy = mix(xy, xy.yx, flip); - float r_dither = fract(dot(xy, vec2(0.75487766624669276, 0.569840290998))); - float plastic = 2.0 * abs(fract(dot(tile, vec2(0.8085512046226566, 0.5562305898749054))) - 0.5); + float vDither = dot(vec2( 171.0, 231.0 ), xy); + return fract(vDither / 103.0); // (103.0, 71. 97.0 ) - return fract(r_dither + plastic); + // return fract(dot(xy, vec2(0.75487766624669276, 0.569840290998))); + // return fract(dot(xy, vec2(0.3076923076923077, 0.5384615384615384))); +} + +float valve_red(vec2 xy) { + float vDither = dot(vec2( 171.0, 231.0 ), xy ); + vDither = fract(vDither / 103.0); // (103.0, 71. 97.0 ) + + return vDither; } #if MC_VERSION >= 11300 @@ -188,10 +196,10 @@ float dither_makeup(vec2 xy) { float flip = mod(tile.x + tile.y, 2.0); xy = mix(xy, xy.yx, flip); - float r_dither = fract(dot(xy, vec2(0.75487766624669276, 0.569840290998))); - float plastic = 2.0 * abs(fract(dot(tile, vec2(0.8085512046226566, 0.5562305898749054))) - 0.5); + // float vDither = dot(vec2( 171.0, 231.0 ), xy); + // return fract(dither_shift + (vDither / 103.0)); // (103.0, 71. 97.0 ) - return fract(dither_shift + r_dither + plastic); + return fract(dither_shift + dot(xy, vec2(0.75487766624669276, 0.569840290998))); } #else @@ -257,10 +265,7 @@ float dither_makeup(vec2 xy) { float flip = mod(tile.x + tile.y, 2.0); xy = mix(xy, xy.yx, flip); - float r_dither = fract(dot(xy, vec2(0.75487766624669276, 0.569840290998))); - float plastic = 2.0 * abs(fract(dot(tile, vec2(0.8085512046226566, 0.5562305898749054))) - 0.5); - - return fract((frame_mod * 0.4) + r_dither + plastic); + return fract(dot(xy, vec2(0.75487766624669276, 0.569840290998))); } #endif diff --git a/shaders/lib/fast_taa.glsl b/shaders/lib/fast_taa.glsl index c1d62e65..20d586e1 100644 --- a/shaders/lib/fast_taa.glsl +++ b/shaders/lib/fast_taa.glsl @@ -6,7 +6,22 @@ Javier Garduño - GNU Lesser General Public License v3.0 /* ---------------*/ -float line_detector(vec3 c, vec3 up, vec3 down, vec3 left, vec3 right, vec3 ul, vec3 ur, vec3 dl, vec3 dr) { +float edge_detector( + vec3 c, vec3 up, vec3 down, vec3 left, vec3 right, + vec3 ul, vec3 ur, vec3 dl, vec3 dr) +{ + // --- Parámetros de Control Relativos --- + const float epsilon = 0.0001; // Para evitar la división por cero + + // Umbral relativo: ¿Qué tan fuerte debe ser la diferencia relativa para ser detectada? + // Un valor de 0.4 significa que la diferencia perpendicular debe ser un 40% + // mayor que la diferencia paralela. + const float relative_threshold = 0.4; + + // Suavidad: Rango de la transición para el antialiasing del resultado. + const float smoothness = 0.5; + + // --- Conversión a Luminancia --- float l_c = luma(c); float l_up = luma(up); float l_down = luma(down); @@ -17,51 +32,48 @@ float line_detector(vec3 c, vec3 up, vec3 down, vec3 left, vec3 right, vec3 ul, float l_dl = luma(dl); float l_dr = luma(dr); - // --- Cálculo de "Linealidad" para cada dirección --- + // --- Cálculo de "Linealidad" Relativa --- // 1. Línea Horizontal - float ridgeH = abs(l_c - l_up) + abs(l_c - l_down); // Diferencia con vecinos perpendiculares - float consistencyH = abs(l_c - l_left) + abs(l_c - l_right); // Diferencia con vecinos paralelos + float ridgeH = abs(l_c - l_up) / (l_up + epsilon) + abs(l_c - l_down) / (l_down + epsilon); + float consistencyH = (abs(l_c - l_left) + abs(l_c - l_right)) / (l_c + epsilon); float linenessH = ridgeH - consistencyH; // 2. Línea Vertical - float ridgeV = abs(l_c - l_left) + abs(l_c - l_right); - float consistencyV = abs(l_c - l_up) + abs(l_c - l_down); + float ridgeV = abs(l_c - l_left) / (l_left + epsilon) + abs(l_c - l_right) / (l_right + epsilon); + float consistencyV = (abs(l_c - l_up) + abs(l_c - l_down)) / (l_c + epsilon); float linenessV = ridgeV - consistencyV; // 3. Línea Diagonal (Top-Left a Bottom-Right) - float ridgeD1 = abs(l_c - l_ur) + abs(l_c - l_dl); - float consistencyD1 = abs(l_c - l_ul) + abs(l_c - l_dr); + float ridgeD1 = abs(l_c - l_ur) / (l_ur + epsilon) + abs(l_c - l_dl) / (l_dl + epsilon); + float consistencyD1 = (abs(l_c - l_ul) + abs(l_c - l_dr)) / (l_c + epsilon); float linenessD1 = ridgeD1 - consistencyD1; // 4. Línea Diagonal (Top-Right a Bottom-Left) - float ridgeD2 = abs(l_c - l_ul) + abs(l_c - l_dr); - float consistencyD2 = abs(l_c - l_ur) + abs(l_c - l_dl); + float ridgeD2 = abs(l_c - l_ul) / (l_ul + epsilon) + abs(l_c - l_dr) / (l_dr + epsilon); + float consistencyD2 = (abs(l_c - l_ur) + abs(l_c - l_dl)) / (l_c + epsilon); float linenessD2 = ridgeD2 - consistencyD2; // --- Puntuación final y color de salida --- - // Se toma la máxima puntuación de las 4 direcciones - float maxLineness = max(linenessH, max(linenessV, max(linenessD1, linenessD2))); - - // `smoothstep` crea una transición suave en lugar de un corte brusco. - // Los valores 0.1 y 0.3 son umbrales que puedes ajustar para cambiar la sensibilidad del filtro. - // - El primer valor es donde empieza el resaltado. - // - El segundo valor es donde el resaltado alcanza su máximo. - float lineFactor = smoothstep(0.05, 0.5, maxLineness); - // float lineFactor = clamp(sqrt(maxLineness), 0.0, 1.0); + // Se toma la máxima puntuación de las 4 direcciones (asegurando que no sea negativa). + float maxLineness = max(0.0, max(linenessH, max(linenessV, max(linenessD1, linenessD2)))); - return lineFactor; + // `smoothstep` ahora usa los umbrales relativos. + return smoothstep(relative_threshold, relative_threshold + smoothness, maxLineness); } -float line_detector_nice(vec3 center, vec3 up, vec3 down, vec3 left, vec3 right, vec3 ul, vec3 ur, vec3 dl, vec3 dr) { - // Umbral mínimo para que una línea empiece a ser visible. - // Aumenta este valor para ignorar líneas muy tenues. - const float threshold = 0.0025; +float line_detector(vec3 center, vec3 up, vec3 down, vec3 left, vec3 right, vec3 ul, vec3 ur, vec3 dl, vec3 dr) { + const float epsilon = 0.0001; - // Suavidad de la transición del resaltado. Un valor más alto - // crea un resultado más suave (anti-aliasing). - const float smoothness = 0.075; + // Umbral de la fuerza relativa. Por ejemplo, 0.2 significa que una línea + // debe ser al menos un 20% más brillante u oscura que su entorno para ser considerada. + // Este valor es ahora mucho más intuitivo y funciona en distintas iluminaciones. + const float relative_threshold = 0.01; + + // Suavidad de la transición. Controla qué tan rápido el resaltado + // pasa de 0 a 1 una vez que se supera el umbral. + const float smoothness = 0.15; float c = luma(center); float t = luma(up); @@ -73,46 +85,45 @@ float line_detector_nice(vec3 center, vec3 up, vec3 down, vec3 left, vec3 right, float bl = luma(dl); float br = luma(dr); - // 1. Línea Horizontal (Cresta/Valle Vertical) - float ridgeStrengthH = 0.0; + // --- Cálculo de "linealidad" relativa para cada dirección --- + float linenessH = 0.0, linenessV = 0.0, linenessD1 = 0.0, linenessD2 = 0.0; + + // 1. Línea Horizontal if ((c > t && c > b) || (c < t && c < b)) { - ridgeStrengthH = min(abs(c - t), abs(c - b)); + float strength = min(abs(c - t) / (t + epsilon), abs(c - b) / (b + epsilon)); + float penalty = (abs(c - l) + abs(c - r)) / (c + epsilon); + linenessH = strength - penalty; } - // 2. Línea Vertical (Cresta/Valle Horizontal) - float ridgeStrengthV = 0.0; + // 2. Línea Vertical if ((c > l && c > r) || (c < l && c < r)) { - ridgeStrengthV = min(abs(c - l), abs(c - r)); + float strength = min(abs(c - l) / (l + epsilon), abs(c - r) / (r + epsilon)); + float penalty = (abs(c - t) + abs(c - b)) / (c + epsilon); + linenessV = strength - penalty; } - // 3. Línea Diagonal (\) (Cresta/Valle en la anti-diagonal) - float ridgeStrengthD1 = 0.0; + // 3. Línea Diagonal (\) if ((c > tr && c > bl) || (c < tr && c < bl)) { - ridgeStrengthD1 = min(abs(c - tr), abs(c - bl)); + float strength = min(abs(c - tr) / (tr + epsilon), abs(c - bl) / (bl + epsilon)); + float penalty = (abs(c - tl) + abs(c - br)) / (c + epsilon); + linenessD1 = strength - penalty; } - // 4. Línea Diagonal (/) (Cresta/Valle en la diagonal principal) - float ridgeStrengthD2 = 0.0; + // 4. Línea Diagonal (/) if ((c > tl && c > br) || (c < tl && c < br)) { - ridgeStrengthD2 = min(abs(c - tl), abs(c - br)); + float strength = min(abs(c - tl) / (tl + epsilon), abs(c - br) / (br + epsilon)); + float penalty = (abs(c - tr) + abs(c - bl)) / (c + epsilon); + linenessD2 = strength - penalty; } - // --- Penalización por inconsistencia a lo largo de la línea --- - // Restamos la diferencia de color a lo largo de la línea. - // Una línea perfecta tiene una penalización cercana a cero. - - float linenessH = ridgeStrengthH - (abs(c-l) + abs(c-r)); - float linenessV = ridgeStrengthV - (abs(c-t) + abs(c-b)); - float linenessD1 = ridgeStrengthD1 - (abs(c-tl) + abs(c-br)); - float linenessD2 = ridgeStrengthD2 - (abs(c-tr) + abs(c-bl)); - // --- Puntuación final y color de salida --- // Tomamos la máxima puntuación y nos aseguramos de que no sea negativa. float maxLineness = max(0.0, max(linenessH, max(linenessV, max(linenessD1, linenessD2)))); - // `smoothstep` crea una transición suave basada en nuestros parámetros. - return smoothstep(threshold, threshold + smoothness, maxLineness); + // `smoothstep` usa nuestro umbral relativo para crear una transición suave. + return smoothstep(relative_threshold, relative_threshold + smoothness, maxLineness); + // return maxLineness; } vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { @@ -123,19 +134,6 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { // Previous color vec3 previous = texture2D(colortex3, texcoord_past).rgb; - // Apply clamping on the history color. - // vec3 near_color0 = texture2D(colortex1, texcoord + vec2(-pixel_size_x, 0.0)).rgb; - // vec3 near_color1 = texture2D(colortex1, texcoord + vec2(pixel_size_x, 0.0)).rgb; - // vec3 near_color2 = texture2D(colortex1, texcoord + vec2(0.0, -pixel_size_y)).rgb; - // vec3 near_color3 = texture2D(colortex1, texcoord + vec2(0.0, pixel_size_y)).rgb; - - // vec3 nmin = - // min(current_color, min(near_color0, min(near_color1, min(near_color2, near_color3)))); - // vec3 nmax = - // max(current_color, max(near_color0, max(near_color1, max(near_color2, near_color3)))); - - - vec3 left = texture2D(colortex1, texcoord + vec2(-pixel_size_x, 0.0)).rgb; vec3 right = texture2D(colortex1, texcoord + vec2(pixel_size_x, 0.0)).rgb; vec3 down = texture2D(colortex1, texcoord + vec2(0.0, -pixel_size_y)).rgb; @@ -150,18 +148,17 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { vec3 nmax = max(current_color, max(left, max(right, max(up, down)))); - float edge = line_detector_nice(current_color, up, down, left, right, ul, ur, dl, dr); - - // Edge detection - // vec3 edge_color = -near_color0; - // edge_color -= near_color1; - // edge_color += current_color * 4.0; - // edge_color -= near_color2; - // edge_color -= near_color3; - - // edge_color = edge_color / (current_color * 2.0); - // float edge = clamp(length(edge_color) * 0.5773502691896258, 0.0, 1.0); // 1/sqrt(3) - // edge = smoothstep(0.25, 0.75, edge); + float edge = edge_detector( + current_color, + up, + down, + left, + right, + ul, + ur, + dl, + dr + ); // Clip vec3 center = (nmin + nmax) * 0.5; @@ -176,10 +173,10 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { } previous = center + (color_vector * factor); - // return mix(current_color, previous, 0.75 + (edge * 0.24)); - // return mix(current_color, previous, 0.8 + (edge * 0.19)); + return mix(current_color, previous, 0.65 + (edge * 0.30)); + // return mix(current_color, previous, 0.95); - return vec3(edge); + // return vec3(edge); } } @@ -191,26 +188,31 @@ vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { // Muestra del pasado vec4 previous = texture2D(colortex3, texcoord_past); - vec4 near_color0 = texture2D(colortex1, texcoord + vec2(-pixel_size_x, 0.0)); - vec4 near_color1 = texture2D(colortex1, texcoord + vec2(pixel_size_x, 0.0)); - vec4 near_color2 = texture2D(colortex1, texcoord + vec2(0.0, -pixel_size_y)); - vec4 near_color3 = texture2D(colortex1, texcoord + vec2(0.0, pixel_size_y)); + vec4 left = texture2D(colortex1, texcoord + vec2(-pixel_size_x, 0.0)); + vec4 right = texture2D(colortex1, texcoord + vec2(pixel_size_x, 0.0)); + vec4 down = texture2D(colortex1, texcoord + vec2(0.0, -pixel_size_y)); + vec4 up = texture2D(colortex1, texcoord + vec2(0.0, pixel_size_y)); + vec4 ul = texture2D(colortex1, texcoord + vec2(-pixel_size_x, pixel_size_y)); + vec4 ur = texture2D(colortex1, texcoord + vec2(pixel_size_x, pixel_size_y)); + vec4 dl = texture2D(colortex1, texcoord + vec2(-pixel_size_x, -pixel_size_y)); + vec4 dr = texture2D(colortex1, texcoord + vec2(pixel_size_x, -pixel_size_y)); vec4 nmin = - min(current_color, min(near_color0, min(near_color1, min(near_color2, near_color3)))); + min(current_color, min(left, min(right, min(up, down)))); vec4 nmax = - max(current_color, max(near_color0, max(near_color1, max(near_color2, near_color3)))); - - // Edge detection - vec3 edge_color = -near_color0.rgb; - edge_color -= near_color1.rgb; - edge_color += current_color.rgb * 4.0; - edge_color -= near_color2.rgb; - edge_color -= near_color3.rgb; + max(current_color, max(left, max(right, max(up, down)))); - edge_color = edge_color / (current_color.rgb * 2.0); - float edge = clamp(length(edge_color) * 0.5773502691896258, 0.0, 1.0); // 1/sqrt(3) - edge = smoothstep(0.25, 0.75, edge); + float edge = line_detector( + current_color.rgb, + up.rgb, + down.rgb, + left.rgb, + right.rgb, + ul.rgb, + ur.rgb, + dl.rgb, + dr.rgb + ); // Clip vec3 center = (nmin.rgb + nmax.rgb) * 0.5; @@ -225,6 +227,6 @@ vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { } previous = vec4(center + (color_vector * factor), previous.a); - return mix(current_color, previous, 0.65 + (edge * 0.34)); + return mix(current_color, previous, 0.75 + (edge * 0.14)); } } diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 66f6bfac..136ce96d 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -33,9 +33,11 @@ texture.gbuffers.noisetex = textures/water_256_RG_8bit.png #if CLOUD_VOL_STYLE == 0 texture.gbuffers.gaux2 = textures/clouds_natural_512_R_8bit.png texture.deferred.gaux2 = textures/clouds_natural_512_R_8bit.png + texture.deferred.colortex0 = textures/bluenoise_64.png #else texture.gbuffers.gaux2 = textures/clouds_blocky_512_R_8bit.png texture.deferred.gaux2 = textures/clouds_blocky_512_R_8bit.png + texture.deferred.colortex0 = textures/bluenoise_64.png #endif # texture.deferred.colortex0 = textures/bluenoise_64.png From 627f69557f928a0e469fca42b71b944fd2000d17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Tue, 5 Aug 2025 17:50:52 -0600 Subject: [PATCH 064/147] Testing... --- shaders/common/composite1_fragment.glsl | 2 +- shaders/common/composite_fragment.glsl | 2 +- shaders/common/deferred_fragment.glsl | 8 ++------ shaders/lib/dither.glsl | 11 ++++++++--- shaders/lib/fast_taa.glsl | 24 ++++++++++++++++++++++-- 5 files changed, 34 insertions(+), 13 deletions(-) diff --git a/shaders/common/composite1_fragment.glsl b/shaders/common/composite1_fragment.glsl index 3f5b6d51..a2c82702 100644 --- a/shaders/common/composite1_fragment.glsl +++ b/shaders/common/composite1_fragment.glsl @@ -46,7 +46,7 @@ void main() { #if defined BLOOM || defined DOF #if AA_TYPE > 0 - float dither = shifted_r_dither(gl_FragCoord.xy); + float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); #else float dither = semiblue(gl_FragCoord.xy); #endif diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index 6947c3d5..551ca3f3 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -130,7 +130,7 @@ void main() { #if AA_TYPE > 0 float dither = shifted_dither_makeup(gl_FragCoord.xy); #else - float dither = valve_red(gl_FragCoord.xy); + float dither = r_dither(gl_FragCoord.xy); #endif #endif diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index 2be81687..842b5572 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -12,7 +12,6 @@ /* Uniforms */ -uniform sampler2D colortex0; uniform sampler2D colortex1; uniform ivec2 eyeBrightnessSmooth; uniform int isEyeInWater; @@ -115,12 +114,9 @@ void main() { #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) #if AA_TYPE > 0 - // float dither = shifted_texture_noise_64(gl_FragCoord.xy, colortex0); - float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); - // float dither = shifted_dither_makeup(gl_FragCoord.xy); + float dither = shifted_eclectic_dither13(gl_FragCoord.xy); #else - // float dither = semiblue(gl_FragCoord.xy); - float dither = dither_makeup(gl_FragCoord.xy); + float dither = semiblue(gl_FragCoord.xy); #endif #endif diff --git a/shaders/lib/dither.glsl b/shaders/lib/dither.glsl index bd9ac5e8..62133732 100644 --- a/shaders/lib/dither.glsl +++ b/shaders/lib/dither.glsl @@ -119,9 +119,7 @@ float dither_makeup(vec2 xy) { float valve_red(vec2 xy) { float vDither = dot(vec2( 171.0, 231.0 ), xy ); - vDither = fract(vDither / 103.0); // (103.0, 71. 97.0 ) - - return vDither; + return fract(vDither / 103.0); // (103.0, 71. 97.0 ) } #if MC_VERSION >= 11300 @@ -202,6 +200,13 @@ float valve_red(vec2 xy) { return fract(dither_shift + dot(xy, vec2(0.75487766624669276, 0.569840290998))); } + float shifted_valve_red(vec2 xy) { + float vDither = dot(vec2( 171.0, 231.0 ), xy ); + vDither = fract(vDither / 103.0); // (103.0, 71. 97.0 ) + + return fract(dither_shift + vDither); +} + #else float shifted_hash12(vec2 v) diff --git a/shaders/lib/fast_taa.glsl b/shaders/lib/fast_taa.glsl index 20d586e1..d5c0fedb 100644 --- a/shaders/lib/fast_taa.glsl +++ b/shaders/lib/fast_taa.glsl @@ -63,6 +63,18 @@ float edge_detector( return smoothstep(relative_threshold, relative_threshold + smoothness, maxLineness); } +float fast_edge_detector(vec3 current_color, vec3 left, vec3 right, vec3 up, vec3 down) { + vec3 edge_color = -left; + edge_color -= right; + edge_color += current_color * 4.0; + edge_color -= down; + edge_color -= up; + edge_color = edge_color / (current_color * 2.0); + + float edge = clamp(length(edge_color) * 0.5773502691896258, 0.0, 1.0); // 1/sqrt(3) + return smoothstep(0.25, 0.75, edge); +} + float line_detector(vec3 center, vec3 up, vec3 down, vec3 left, vec3 right, vec3 ul, vec3 ur, vec3 dl, vec3 dr) { const float epsilon = 0.0001; @@ -148,7 +160,7 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { vec3 nmax = max(current_color, max(left, max(right, max(up, down)))); - float edge = edge_detector( + float edge = line_detector( current_color, up, down, @@ -160,6 +172,14 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { dr ); + // float edge = fast_edge_detector( + // current_color, + // left, + // right, + // up, + // down + // ); + // Clip vec3 center = (nmin + nmax) * 0.5; float radio = length(nmax - center); @@ -173,7 +193,7 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { } previous = center + (color_vector * factor); - return mix(current_color, previous, 0.65 + (edge * 0.30)); + return mix(current_color, previous, 0.70 + (edge * 0.25)); // return mix(current_color, previous, 0.95); // return vec3(edge); From f46915ccb5f3f83c3f3359910b57a0e5f28fce6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Tue, 5 Aug 2025 22:53:43 -0600 Subject: [PATCH 065/147] TAA Revision 2 --- shaders/common/composite1_fragment.glsl | 2 +- shaders/common/composite2_fragment.glsl | 4 +- shaders/common/composite_fragment.glsl | 4 +- shaders/common/deferred_fragment.glsl | 4 +- shaders/common/glint_blocks_vertex.glsl | 6 +-- shaders/common/skybasic_fragment.glsl | 2 +- shaders/common/solid_dh_water_fragment.glsl | 2 +- shaders/lib/aberration.glsl | 6 +-- shaders/lib/ao.glsl | 6 +-- shaders/lib/dither.glsl | 43 ++++++++++++++------ shaders/lib/fast_taa.glsl | 44 ++++++++++----------- shaders/lib/fxaa.glsl | 26 ++++++------ shaders/lib/post.glsl | 16 ++++---- shaders/lib/volumetric_clouds_end.glsl | 2 +- shaders/lib/volumetric_light.glsl | 20 +--------- shaders/src/cloudfinalcolor.glsl | 4 +- shaders/src/finalcolor_dh.glsl | 4 +- 17 files changed, 96 insertions(+), 99 deletions(-) diff --git a/shaders/common/composite1_fragment.glsl b/shaders/common/composite1_fragment.glsl index a2c82702..78536bc7 100644 --- a/shaders/common/composite1_fragment.glsl +++ b/shaders/common/composite1_fragment.glsl @@ -42,7 +42,7 @@ varying vec2 texcoord; // MAIN FUNCTION ------------------ void main() { - vec4 block_color = texture2D(colortex1, texcoord); + vec4 block_color = texture2DLod(colortex1, texcoord, 0); #if defined BLOOM || defined DOF #if AA_TYPE > 0 diff --git a/shaders/common/composite2_fragment.glsl b/shaders/common/composite2_fragment.glsl index 151c32d6..4f26780c 100644 --- a/shaders/common/composite2_fragment.glsl +++ b/shaders/common/composite2_fragment.glsl @@ -57,12 +57,12 @@ varying vec2 texcoord; // MAIN FUNCTION ------------------ void main() { - vec4 block_color = texture2D(colortex1, texcoord); + vec4 block_color = texture2DLod(colortex1, texcoord, 0); // Precalc past position and velocity #if AA_TYPE > 0 || defined MOTION_BLUR // Retrojection of previous frame - float z_depth = texture2D(depthtex1, texcoord).r; + float z_depth = texture2DLod(depthtex1, texcoord, 0).r; vec2 texcoord_past; vec3 curr_view_pos; vec3 curr_feet_player_pos; diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index 551ca3f3..8aba05ca 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -96,8 +96,8 @@ varying float exposure; // MAIN FUNCTION ------------------ void main() { - vec4 block_color = texture2D(colortex1, texcoord); - float d = texture2D(depthtex0, texcoord).r; + vec4 block_color = texture2DLod(colortex1, texcoord, 0); + float d = texture2DLod(depthtex0, texcoord, 0).r; float linear_d = ld(d); vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index 842b5572..421c7595 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -104,8 +104,8 @@ varying vec3 up_vec; // Flat // MAIN FUNCTION ------------------ void main() { - vec4 block_color = texture2D(colortex1, texcoord); - float d = texture2D(depthtex0, texcoord).r; + vec4 block_color = texture2DLod(colortex1, texcoord, 0); + float d = texture2DLod(depthtex0, texcoord, 0).r; float linear_d = ld(d); vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); diff --git a/shaders/common/glint_blocks_vertex.glsl b/shaders/common/glint_blocks_vertex.glsl index ec9dc38a..ab4014d6 100644 --- a/shaders/common/glint_blocks_vertex.glsl +++ b/shaders/common/glint_blocks_vertex.glsl @@ -22,11 +22,7 @@ void main() { #include "/src/basiccoords_vertex.glsl" #include "/src/position_vertex.glsl" - #if !defined UNKNOWN_DIM - exposure = texture2D(gaux3, vec2(0.5)).r; - #else - exposure = 1.0; - #endif + exposure = texture2D(gaux3, vec2(0.5)).r; tint_color = gl_Color; } diff --git a/shaders/common/skybasic_fragment.glsl b/shaders/common/skybasic_fragment.glsl index d9001a1c..084af753 100644 --- a/shaders/common/skybasic_fragment.glsl +++ b/shaders/common/skybasic_fragment.glsl @@ -76,7 +76,7 @@ void main() { #else // Toma el color puro del bloque - vec4 background_color = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)); + vec4 background_color = texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), 0); #endif vec4 block_color = star_data; diff --git a/shaders/common/solid_dh_water_fragment.glsl b/shaders/common/solid_dh_water_fragment.glsl index 46eddd32..8c23e193 100644 --- a/shaders/common/solid_dh_water_fragment.glsl +++ b/shaders/common/solid_dh_water_fragment.glsl @@ -108,7 +108,7 @@ void main() { float t = far - dhNearPlane; float inf = t * TRANSITION_DH_INF; float view_dist = length(position.xyz); - float d = texture2D(depthtex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight)).r; + float d = texture2DLod(depthtex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight), 0.0).r; float linear_d = ld(d); if(linear_d < 0.9999 || view_dist < dhNearPlane + inf) { diff --git a/shaders/lib/aberration.glsl b/shaders/lib/aberration.glsl index c1c0e66d..c4bfb961 100644 --- a/shaders/lib/aberration.glsl +++ b/shaders/lib/aberration.glsl @@ -9,9 +9,9 @@ vec3 color_aberration() { vec3 aberrated_color = vec3(0.0); - aberrated_color.r = texture2D(colortex1, texcoord - offset).r; - aberrated_color.g = texture2D(colortex1, texcoord - (offset * 0.5)).g; - aberrated_color.b = texture2D(colortex1, texcoord).b; + aberrated_color.r = texture2DLod(colortex1, texcoord - offset, 0.0).r; + aberrated_color.g = texture2DLod(colortex1, texcoord - (offset * 0.5), 0.0).g; + aberrated_color.b = texture2DLod(colortex1, texcoord, 0.0).b; return aberrated_color; } diff --git a/shaders/lib/ao.glsl b/shaders/lib/ao.glsl index 3b80e21a..6624703d 100644 --- a/shaders/lib/ao.glsl +++ b/shaders/lib/ao.glsl @@ -11,7 +11,7 @@ float dbao(float dither) { float n; float dither_x; - float d = texture2D(depthtex0, texcoord.xy).r; + float d = texture2DLod(depthtex0, texcoord.xy, 0.0).r; float hand_check = d < 0.56 ? 1024.0 : 1.0; d = ld(d); @@ -28,12 +28,12 @@ float dbao(float dither) { n = fract(dither_x * 1.6180339887) * 3.141592653589793; offset = vec2(cos(n), sin(n)) * dither_x * scale_factor; - sd = ld(texture2D(depthtex0, texcoord.xy + offset).r); + sd = ld(texture2DLod(depthtex0, texcoord.xy + offset, 0.0).r); sample_d = (d - sd) * far_and_check; angle = clamp(0.5 - sample_d, 0.0, 1.0); dist = clamp(0.25 * sample_d - 1.0, 0.0, 1.0); - sd = ld(texture2D(depthtex0, texcoord.xy - offset).r); + sd = ld(texture2DLod(depthtex0, texcoord.xy - offset, 0.0).r); sample_d = (d - sd) * far_and_check; angle += clamp(0.5 - sample_d, 0.0, 1.0); dist += clamp(0.25 * sample_d - 1.0, 0.0, 1.0); diff --git a/shaders/lib/dither.glsl b/shaders/lib/dither.glsl index 62133732..0fc9b0aa 100644 --- a/shaders/lib/dither.glsl +++ b/shaders/lib/dither.glsl @@ -81,6 +81,18 @@ float eclectic_dither13(vec2 frag) return fract(dot(frag, vec2(0.3076923076923077, 0.5384615384615384)) + p4); } +float dither17(vec2 pos) { + return fract(dot(pos, vec2(0.11764705882352941, 0.4117647058823529))); +} + +float eclectic_dither17(vec2 frag) { + vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.15; + + return fract(p4 + dot(frag, vec2(0.11764705882352941, 0.4117647058823529))); +} + float dither_grad_noise(vec2 frag) { return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag))); } @@ -94,7 +106,7 @@ float eclectic_dither_grad_noise(vec2 frag) { } float texture_noise_64(vec2 p, sampler2D noise) { - return texture2D(noise, p * 0.015625).r; + return texture2DLod(noise, p * 0.015625, 0).r; } float semiblue(vec2 xy) { @@ -112,9 +124,6 @@ float dither_makeup(vec2 xy) { float vDither = dot(vec2( 171.0, 231.0 ), xy); return fract(vDither / 103.0); // (103.0, 71. 97.0 ) - - // return fract(dot(xy, vec2(0.75487766624669276, 0.569840290998))); - // return fract(dot(xy, vec2(0.3076923076923077, 0.5384615384615384))); } float valve_red(vec2 xy) { @@ -164,6 +173,18 @@ float valve_red(vec2 xy) { return fract(dot(frag, vec2(0.3076923076923077, 0.5384615384615384)) + dither_shift + p4); } + float shifted_dither17(vec2 pos) { + return fract(dither_shift + dot(pos, vec2(0.11764705882352941, 0.4117647058823529))); + } + + float shifted_eclectic_dither17(vec2 frag) { + vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.15; + + return fract(dither_shift + p4 + dot(frag, vec2(0.11764705882352941, 0.4117647058823529))); + } + float shifted_dither_grad_noise(vec2 frag) { return fract(dither_shift + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))); } @@ -177,7 +198,7 @@ float valve_red(vec2 xy) { } float shifted_texture_noise_64(vec2 p, sampler2D noise) { - float dither = texture2D(noise, p * 0.015625).r; + float dither = texture2DLod(noise, p * 0.015625, 0).r; return fract(dither_shift + dither); } @@ -194,18 +215,16 @@ float valve_red(vec2 xy) { float flip = mod(tile.x + tile.y, 2.0); xy = mix(xy, xy.yx, flip); - // float vDither = dot(vec2( 171.0, 231.0 ), xy); - // return fract(dither_shift + (vDither / 103.0)); // (103.0, 71. 97.0 ) - - return fract(dither_shift + dot(xy, vec2(0.75487766624669276, 0.569840290998))); + float vDither = dot(vec2( 171.0, 231.0 ), xy); + return fract(dither_shift + (vDither / 103.0)); // (103.0, 71. 97.0 ) } float shifted_valve_red(vec2 xy) { float vDither = dot(vec2( 171.0, 231.0 ), xy ); vDither = fract(vDither / 103.0); // (103.0, 71. 97.0 ) - return fract(dither_shift + vDither); -} + return fract(dither_shift + vDither); + } #else @@ -253,7 +272,7 @@ float valve_red(vec2 xy) { } float shifted_texture_noise_64(vec2 p, sampler2D noise) { - float dither = texture2D(noise, p * 0.015625).r; + float dither = texture2DLod(noise, p * 0.015625, 0).r; return fract((frame_mod * 0.4) + dither); } diff --git a/shaders/lib/fast_taa.glsl b/shaders/lib/fast_taa.glsl index d5c0fedb..725aa7b0 100644 --- a/shaders/lib/fast_taa.glsl +++ b/shaders/lib/fast_taa.glsl @@ -144,23 +144,23 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { return current_color; } else { // Previous color - vec3 previous = texture2D(colortex3, texcoord_past).rgb; + vec3 previous = texture2DLod(colortex3, texcoord_past, 0.0).rgb; - vec3 left = texture2D(colortex1, texcoord + vec2(-pixel_size_x, 0.0)).rgb; - vec3 right = texture2D(colortex1, texcoord + vec2(pixel_size_x, 0.0)).rgb; - vec3 down = texture2D(colortex1, texcoord + vec2(0.0, -pixel_size_y)).rgb; - vec3 up = texture2D(colortex1, texcoord + vec2(0.0, pixel_size_y)).rgb; - vec3 ul = texture2D(colortex1, texcoord + vec2(-pixel_size_x, pixel_size_y)).rgb; - vec3 ur = texture2D(colortex1, texcoord + vec2(pixel_size_x, pixel_size_y)).rgb; - vec3 dl = texture2D(colortex1, texcoord + vec2(-pixel_size_x, -pixel_size_y)).rgb; - vec3 dr = texture2D(colortex1, texcoord + vec2(pixel_size_x, -pixel_size_y)).rgb; + vec3 left = texture2DLod(colortex1, texcoord + vec2(-pixel_size_x, 0.0), 0.0).rgb; + vec3 right = texture2DLod(colortex1, texcoord + vec2(pixel_size_x, 0.0), 0.0).rgb; + vec3 down = texture2DLod(colortex1, texcoord + vec2(0.0, -pixel_size_y), 0.0).rgb; + vec3 up = texture2DLod(colortex1, texcoord + vec2(0.0, pixel_size_y), 0.0).rgb; + vec3 ul = texture2DLod(colortex1, texcoord + vec2(-pixel_size_x, pixel_size_y), 0.0).rgb; + vec3 ur = texture2DLod(colortex1, texcoord + vec2(pixel_size_x, pixel_size_y), 0.0).rgb; + vec3 dl = texture2DLod(colortex1, texcoord + vec2(-pixel_size_x, -pixel_size_y), 0.0).rgb; + vec3 dr = texture2DLod(colortex1, texcoord + vec2(pixel_size_x, -pixel_size_y), 0.0).rgb; vec3 nmin = min(current_color, min(left, min(right, min(up, down)))); vec3 nmax = max(current_color, max(left, max(right, max(up, down)))); - float edge = line_detector( + float edge = edge_detector( current_color, up, down, @@ -180,7 +180,7 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { // down // ); - // Clip + // Clip 2 vec3 center = (nmin + nmax) * 0.5; float radio = length(nmax - center); @@ -193,7 +193,7 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { } previous = center + (color_vector * factor); - return mix(current_color, previous, 0.70 + (edge * 0.25)); + return mix(current_color, previous, 0.65 + (edge * 0.30)); // return mix(current_color, previous, 0.95); // return vec3(edge); @@ -206,23 +206,23 @@ vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { return current_color; } else { // Muestra del pasado - vec4 previous = texture2D(colortex3, texcoord_past); + vec4 previous = texture2DLod(colortex3, texcoord_past, 0.0); - vec4 left = texture2D(colortex1, texcoord + vec2(-pixel_size_x, 0.0)); - vec4 right = texture2D(colortex1, texcoord + vec2(pixel_size_x, 0.0)); - vec4 down = texture2D(colortex1, texcoord + vec2(0.0, -pixel_size_y)); - vec4 up = texture2D(colortex1, texcoord + vec2(0.0, pixel_size_y)); - vec4 ul = texture2D(colortex1, texcoord + vec2(-pixel_size_x, pixel_size_y)); - vec4 ur = texture2D(colortex1, texcoord + vec2(pixel_size_x, pixel_size_y)); - vec4 dl = texture2D(colortex1, texcoord + vec2(-pixel_size_x, -pixel_size_y)); - vec4 dr = texture2D(colortex1, texcoord + vec2(pixel_size_x, -pixel_size_y)); + vec4 left = texture2DLod(colortex1, texcoord + vec2(-pixel_size_x, 0.0), 0.0); + vec4 right = texture2DLod(colortex1, texcoord + vec2(pixel_size_x, 0.0), 0.0); + vec4 down = texture2DLod(colortex1, texcoord + vec2(0.0, -pixel_size_y), 0.0); + vec4 up = texture2DLod(colortex1, texcoord + vec2(0.0, pixel_size_y), 0.0); + vec4 ul = texture2DLod(colortex1, texcoord + vec2(-pixel_size_x, pixel_size_y), 0.0); + vec4 ur = texture2DLod(colortex1, texcoord + vec2(pixel_size_x, pixel_size_y), 0.0); + vec4 dl = texture2DLod(colortex1, texcoord + vec2(-pixel_size_x, -pixel_size_y), 0.0); + vec4 dr = texture2DLod(colortex1, texcoord + vec2(pixel_size_x, -pixel_size_y), 0.0); vec4 nmin = min(current_color, min(left, min(right, min(up, down)))); vec4 nmax = max(current_color, max(left, max(right, max(up, down)))); - float edge = line_detector( + float edge = edge_detector( current_color.rgb, up.rgb, down.rgb, diff --git a/shaders/lib/fxaa.glsl b/shaders/lib/fxaa.glsl index 1b0e25d9..8e6fc073 100644 --- a/shaders/lib/fxaa.glsl +++ b/shaders/lib/fxaa.glsl @@ -16,10 +16,10 @@ vec3 fxaa311(vec3 color, int iterations){ // Luma at the current fragment float lumaCenter = luma(color); // Luma at the four direct neighbours of the current fragment. - float lumaDown = luma(texture2D(colortex1, texcoord.xy + vec2(0.0f,-pixel_size_y), 0.0).rgb); - float lumaUp = luma(texture2D(colortex1, texcoord.xy + vec2(0.0f,pixel_size_y), 0).rgb); - float lumaLeft = luma(texture2D(colortex1, texcoord.xy + vec2(-pixel_size_x,0.0f), 0).rgb); - float lumaRight = luma(texture2D(colortex1, texcoord.xy + vec2(pixel_size_x, 0.0f), 0).rgb); + float lumaDown = luma(texture2DLod(colortex1, texcoord.xy + vec2(0.0,-pixel_size_y), 0.0).rgb); + float lumaUp = luma(texture2DLod(colortex1, texcoord.xy + vec2(0.0,pixel_size_y), 0.0).rgb); + float lumaLeft = luma(texture2DLod(colortex1, texcoord.xy + vec2(-pixel_size_x, 0.0), 0.0).rgb); + float lumaRight = luma(texture2DLod(colortex1, texcoord.xy + vec2(pixel_size_x, 0.0), 0.0).rgb); // Find the maximum and minimum luma around the current fragment. float lumaMin = min(lumaCenter, min(min(lumaDown, lumaUp), min(lumaLeft, lumaRight))); @@ -31,10 +31,10 @@ vec3 fxaa311(vec3 color, int iterations){ // If the luma variation is lower that a threshold (or if we are in a really dark area), we are not on an edge, don't perform any FXAA. if (lumaRange > max(edgeThresholdMin, lumaMax * edgeThresholdMax)) { // Query the 4 remaining corners lumas. - float lumaDownLeft = luma(texture2D(colortex1, texcoord.xy + vec2(-pixel_size_x, -pixel_size_y), 0).rgb); - float lumaUpRight = luma(texture2D(colortex1, texcoord.xy + vec2(pixel_size_x, pixel_size_y), 0).rgb); - float lumaUpLeft = luma(texture2D(colortex1, texcoord.xy + vec2(-pixel_size_x, pixel_size_y), 0).rgb); - float lumaDownRight = luma(texture2D(colortex1, texcoord.xy + vec2(pixel_size_x, -pixel_size_y), 0).rgb); + float lumaDownLeft = luma(texture2DLod(colortex1, texcoord.xy + vec2(-pixel_size_x, -pixel_size_y), 0.0).rgb); + float lumaUpRight = luma(texture2DLod(colortex1, texcoord.xy + vec2(pixel_size_x, pixel_size_y), 0.0).rgb); + float lumaUpLeft = luma(texture2DLod(colortex1, texcoord.xy + vec2(-pixel_size_x, pixel_size_y), 0.0).rgb); + float lumaDownRight = luma(texture2DLod(colortex1, texcoord.xy + vec2(pixel_size_x, -pixel_size_y), 0.0).rgb); // Combine the four edges lumas (using intermediary variables for future computations with the same values). float lumaDownUp = lumaDown + lumaUp; @@ -95,8 +95,8 @@ vec3 fxaa311(vec3 color, int iterations){ vec2 uv2 = currentUv + offset; // Read the lumas at both current extremities of the exploration segment, and compute the delta wrt to the local average luma. - float lumaEnd1 = luma(texture2D(colortex1, uv1, 0).rgb); - float lumaEnd2 = luma(texture2D(colortex1, uv2, 0).rgb); + float lumaEnd1 = luma(texture2DLod(colortex1, uv1, 0.0).rgb); + float lumaEnd2 = luma(texture2DLod(colortex1, uv2, 0.0).rgb); lumaEnd1 -= lumaLocalAverage; lumaEnd2 -= lumaLocalAverage; @@ -118,12 +118,12 @@ vec3 fxaa311(vec3 color, int iterations){ for(int i = 2; i < iterations; i++) { // If needed, read luma in 1st direction, compute delta. if (!reached1) { - lumaEnd1 = luma(texture2D(colortex1, uv1, 0).rgb); + lumaEnd1 = luma(texture2DLod(colortex1, uv1, 0.0).rgb); lumaEnd1 = lumaEnd1 - lumaLocalAverage; } // If needed, read luma in opposite direction, compute delta. if (!reached2) { - lumaEnd2 = luma(texture2D(colortex1, uv2, 0).rgb); + lumaEnd2 = luma(texture2DLod(colortex1, uv2, 0.0).rgb); lumaEnd2 = lumaEnd2 - lumaLocalAverage; } @@ -197,7 +197,7 @@ vec3 fxaa311(vec3 color, int iterations){ } // Read the color at the new UV coordinates, and use it. - aa = texture2D(colortex1, finalUv, 0).rgb; + aa = texture2DLod(colortex1, finalUv, 0.0).rgb; } return aa; diff --git a/shaders/lib/post.glsl b/shaders/lib/post.glsl index 22efcafd..2f7ac1d7 100644 --- a/shaders/lib/post.glsl +++ b/shaders/lib/post.glsl @@ -1,19 +1,19 @@ vec3 sharpen(sampler2D image, vec3 color, vec2 coords) { - vec3 sum = -texture2D(image, coords + vec2(-pixel_size_x, 0.0)).rgb; - sum -= texture2D(image, coords + vec2(0.0, -pixel_size_y)).rgb; + vec3 sum = -texture2DLod(image, coords + vec2(-pixel_size_x, 0.0), 0.0).rgb; + sum -= texture2DLod(image, coords + vec2(0.0, -pixel_size_y), 0.0).rgb; sum += 11.0 * color; - sum -= texture2D(image, coords + vec2(0.0, pixel_size_y)).rgb; - sum -= texture2D(image, coords + vec2(pixel_size_x, 0.0)).rgb; + sum -= texture2DLod(image, coords + vec2(0.0, pixel_size_y), 0.0).rgb; + sum -= texture2DLod(image, coords + vec2(pixel_size_x, 0.0), 0.0).rgb; return sum * 0.14285714285714285; } vec3 edge_detect(sampler2D image, vec3 color, vec2 coords) { - vec3 sum = -texture2D(image, coords + vec2(-pixel_size_x, -pixel_size_y)).rgb; - sum -= texture2D(image, coords + vec2(pixel_size_x, -pixel_size_y)).rgb; + vec3 sum = -texture2DLod(image, coords + vec2(-pixel_size_x, -pixel_size_y), 0.0).rgb; + sum -= texture2DLod(image, coords + vec2(pixel_size_x, -pixel_size_y), 0.0).rgb; sum += 4.0 * color; - sum -= texture2D(image, coords + vec2(-pixel_size_x, pixel_size_y)).rgb; - sum -= texture2D(image, coords + vec2(pixel_size_x, pixel_size_y)).rgb; + sum -= texture2DLod(image, coords + vec2(-pixel_size_x, pixel_size_y), 0.0).rgb; + sum -= texture2DLod(image, coords + vec2(pixel_size_x, pixel_size_y), 0.0).rgb; return vec3(length(sum)) * 0.5773502691896258; } diff --git a/shaders/lib/volumetric_clouds_end.glsl b/shaders/lib/volumetric_clouds_end.glsl index 472755e5..bfae4b4a 100644 --- a/shaders/lib/volumetric_clouds_end.glsl +++ b/shaders/lib/volumetric_clouds_end.glsl @@ -27,7 +27,7 @@ vec3 get_end_cloud(vec3 view_vector, vec3 block_color, float bright, float dithe clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; #if defined DISTANT_HORIZONS && defined DEFERRED_SHADER - float d_dh = texture2D(dhDepthTex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight)).r; + float d_dh = texture2DLod(dhDepthTex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight), 0.0).r; float linear_d_dh = ld_dh(d_dh); if (linear_d_dh < 0.9999) { return block_color; diff --git a/shaders/lib/volumetric_light.glsl b/shaders/lib/volumetric_light.glsl index 782fea88..431939f0 100644 --- a/shaders/lib/volumetric_light.glsl +++ b/shaders/lib/volumetric_light.glsl @@ -83,27 +83,9 @@ Volumetric light - MakeUp implementation // Clip to world pos = modeli_times_projectioni * (vec4(view_pos, 1.0) * 2.0 - 1.0); view_pos = (pos.xyz /= pos.w).xyz; - shadow_pos = get_volumetric_pos(view_pos); - - // DEBUG - light += shadow2D(shadowtex0, shadow_pos).r; - - // // shadow_detector = shadow2D(shadowtex0, vec3(shadow_pos.xy, shadow_pos.z + 0.000)).r; - // shadow_detector = shadow2D(shadowtex0, shadow_pos).r; - // if (shadow_detector < 1.0) { - // // shadow_black = shadow2D(shadowtex1, vec3(shadow_pos.xy, shadow_pos.z + 0.000)).r; - // shadow_black = shadow2D(shadowtex1, shadow_pos).r; - // if (shadow_black != shadow_detector) { - // shadow_color = texture2D(shadowcolor0, shadow_pos.xy); - // alpha_complement = 1.0 - shadow_color.a; - // shadow_color.rgb *= alpha_complement; - // shadow_color.rgb = mix(shadow_color.rgb, vec3(1.0), alpha_complement); - // } - // } - // shadow_color *= shadow_black; - // light_color += clamp(shadow_color.rgb * (1.0 - shadow_detector) + shadow_detector, vec3(0.0), vec3(1.0)); + light += shadow2D(shadowtex0, shadow_pos).r; } // light_color /= GODRAY_STEPS; diff --git a/shaders/src/cloudfinalcolor.glsl b/shaders/src/cloudfinalcolor.glsl index 56933e49..830bc41a 100644 --- a/shaders/src/cloudfinalcolor.glsl +++ b/shaders/src/cloudfinalcolor.glsl @@ -3,14 +3,14 @@ block_color.rgb = mix( block_color.rgb, - texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb, + texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), 0.0).rgb, clamp(pow(gl_FogFragCoord / (far * 1.66), 1.5), 0.0, 1.0) ); #else block_color.rgb = mix( block_color.rgb, - texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb, + texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), 0.0).rgb, clamp(pow(gl_FogFragCoord / (2000.0), 1.5), 0.0, 1.0) ); #endif diff --git a/shaders/src/finalcolor_dh.glsl b/shaders/src/finalcolor_dh.glsl index da35d848..e31ac4c0 100644 --- a/shaders/src/finalcolor_dh.glsl +++ b/shaders/src/finalcolor_dh.glsl @@ -1,6 +1,6 @@ #if defined DH_WATER if(isEyeInWater == 0) { - vec3 fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; + vec3 fog_texture = texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), 0.0).rgb; block_color.rgb = mix(block_color.rgb, fog_texture, frog_adjust); } #elif defined NETHER @@ -10,6 +10,6 @@ block_color.rgb = mix(block_color.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frog_adjust); #endif #else - vec3 fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; + vec3 fog_texture = texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), 0.0).rgb; block_color.rgb = mix(block_color.rgb, fog_texture, frog_adjust); #endif \ No newline at end of file From 24aa3fd4ad0667c933046c9489b43aae8fd6b47a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Wed, 6 Aug 2025 13:20:34 -0600 Subject: [PATCH 066/147] Version 9.3c --- README.md | 2 +- shaders/common/composite_fragment.glsl | 2 +- shaders/common/deferred_fragment.glsl | 2 +- shaders/common/final_fragment.glsl | 2 +- shaders/common/skybasic_fragment.glsl | 2 +- shaders/lang/en_US.lang | 5 +- shaders/lang/es_AR.lang | 5 +- shaders/lang/es_ES.lang | 5 +- shaders/lang/es_MX.lang | 5 +- shaders/lang/ko_KR.lang | 5 +- shaders/lang/sv_SE.lang | 5 +- shaders/lang/tr_TR.lang | 5 +- shaders/lang/zh_CN.lang | 5 +- shaders/lib/config.glsl | 2 +- shaders/lib/fast_taa.glsl | 293 +++++++++++++++++-------- shaders/lib/post.glsl | 10 - shaders/shaders.properties | 10 +- 17 files changed, 227 insertions(+), 138 deletions(-) diff --git a/README.md b/README.md index d9b9cff2..d5c3107a 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.3b +## Version: 9.3c ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index 8aba05ca..e691e56c 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -128,7 +128,7 @@ void main() { #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) #if AA_TYPE > 0 - float dither = shifted_dither_makeup(gl_FragCoord.xy); + float dither = shifted_r_dither(gl_FragCoord.xy); #else float dither = r_dither(gl_FragCoord.xy); #endif diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index 421c7595..f0fde891 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -114,7 +114,7 @@ void main() { #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) #if AA_TYPE > 0 - float dither = shifted_eclectic_dither13(gl_FragCoord.xy); + float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); #else float dither = semiblue(gl_FragCoord.xy); #endif diff --git a/shaders/common/final_fragment.glsl b/shaders/common/final_fragment.glsl index 92ce370b..1f9d45a2 100644 --- a/shaders/common/final_fragment.glsl +++ b/shaders/common/final_fragment.glsl @@ -107,7 +107,7 @@ void main() { #else vec3 block_color = texture2D(colortex1, texcoord).rgb; #if AA_TYPE == 3 && !defined DOF - block_color = fxaa311(block_color, 6); + block_color = fxaa311(block_color, 4); #endif #endif diff --git a/shaders/common/skybasic_fragment.glsl b/shaders/common/skybasic_fragment.glsl index 084af753..b4f8a2af 100644 --- a/shaders/common/skybasic_fragment.glsl +++ b/shaders/common/skybasic_fragment.glsl @@ -64,7 +64,7 @@ void main() { float dither = dither13(gl_FragCoord.xy); #endif - dither = (dither - .5) * 0.0625; + dither = (dither - .5) * 0.03125; vec4 fragpos = gbufferProjectionInverse * diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 97e45732..0229bd6a 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -7,8 +7,7 @@ profile.shadowless_high=Shadowless High profile.low=Low profile.medium=Medium profile.high=High -profile.extreme=Extreme -profile.extremeplus=Extreme+ +profile.extremeplus=High (DoF) profile.comment=The "shadowless" profiles are designed for low-performance machines, disregarding the shadows. Traditional profiles slowly add higher quality shadows and more advanced heavy effects. Please experiment with the available options and find the best combination for you. @@ -16,7 +15,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.3b +value.ACERCADE.0=v.9.3c #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index 6e35b2ee..56798d59 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -7,8 +7,7 @@ profile.shadowless_high=Sin sombras - Alto profile.low=Bajo profile.medium=Medio profile.high=Alto -profile.extreme=Extremo -profile.extremeplus=Extremo+ +profile.extremeplus=Alto (DoF) profile.comment=Los perfiles "sin sombras" están pensados para máquinas de bajo rendimiento, sin considerar las sombras. Los perfiles tradicionales van agregando sombras de mejor calidad y efectos más avanzados y pesados. Probá las opciones disponibles y encontrá la combinación que mejor te funcione. @@ -16,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3b +value.ACERCADE.0=v.9.3c # Opciones ############################# diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index 6e35b2ee..56798d59 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -7,8 +7,7 @@ profile.shadowless_high=Sin sombras - Alto profile.low=Bajo profile.medium=Medio profile.high=Alto -profile.extreme=Extremo -profile.extremeplus=Extremo+ +profile.extremeplus=Alto (DoF) profile.comment=Los perfiles "sin sombras" están pensados para máquinas de bajo rendimiento, sin considerar las sombras. Los perfiles tradicionales van agregando sombras de mejor calidad y efectos más avanzados y pesados. Probá las opciones disponibles y encontrá la combinación que mejor te funcione. @@ -16,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3b +value.ACERCADE.0=v.9.3c # Opciones ############################# diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index 6e35b2ee..56798d59 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -7,8 +7,7 @@ profile.shadowless_high=Sin sombras - Alto profile.low=Bajo profile.medium=Medio profile.high=Alto -profile.extreme=Extremo -profile.extremeplus=Extremo+ +profile.extremeplus=Alto (DoF) profile.comment=Los perfiles "sin sombras" están pensados para máquinas de bajo rendimiento, sin considerar las sombras. Los perfiles tradicionales van agregando sombras de mejor calidad y efectos más avanzados y pesados. Probá las opciones disponibles y encontrá la combinación que mejor te funcione. @@ -16,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3b +value.ACERCADE.0=v.9.3c # Opciones ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 82306fc2..4e50869f 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -7,8 +7,7 @@ profile.shadowless_high=그림자 없음 높음 profile.low=낮음 profile.medium=중간 profile.high=높음 -profile.extreme=극한 -profile.extremeplus=극한+ +profile.extremeplus=높음 (깊이 감지) profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설계되었으며, 그림자를 무시합니다. 전통적인 프로필은 천천히 더 높은 품질의 그림자와 더 고급스러운 무거운 효과를 추가합니다. 사용 가능한 옵션을 실험해보고 가장 적합한 조합을 찾으십시오. @@ -16,7 +15,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.3b +value.ACERCADE.0=v.9.3c #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index df9fe259..20a64359 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -7,8 +7,7 @@ profile.shadowless_high=Hög (skugglös) profile.low=Låg profile.medium=Medium profile.high=Hög -profile.extreme=Extrem -profile.extremeplus=Extrem+ +profile.extremeplus=Hög (Skärpedjup) profile.comment=De "skugglösa" profilerna är designade för datorer med låg prestanda, vilket inaktiverar skuggor. Traditionella profiler lägger långsamt till skuggor med högre kvalitet och mer avancerade tunga effekter. Var god experimentera med de tillgängliga alternativen och hitta den bästa kombinationen för dig. @@ -16,7 +15,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.3b +value.ACERCADE.0=v.9.3c #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index a7936118..f58da7a7 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -7,8 +7,7 @@ profile.shadowless_high=Gölgesiz Yüksek profile.low=Düşük profile.medium=Orta profile.high=Yüksek -profile.extreme=Olağanüstü -profile.extremeplus=Olağanüstü+ +profile.extremeplus=Yüksek (AD) profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük performanslı makineler için tasarlanmıştır. Geleneksel profiller yavaş yavaş daha kaliteli gölgeler ve daha gelişmiş ağır efektler ekler. Lütfen mevcut seçenekleri deneyin ve sizin için en iyi kombinasyonu bulun. @@ -16,7 +15,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.3b +value.ACERCADE.0=v.9.3c #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 2f25aaba..6463bb82 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -7,8 +7,7 @@ profile.shadowless_high=无阴影-高 profile.low=低 profile.medium=中 profile.high=高 -profile.extreme=极致 -profile.extremeplus=极致+ +profile.extremeplus=高 (景深) profile.comment=“无阴影”配置文件是为低性能电脑设计的,不渲染阴影。 常规的配置文件会逐渐添加更高质量的阴影、更多高级的重量级效果。 请体验现有的选项,找到最适合你的配置组合。 @@ -16,7 +15,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.3b +value.ACERCADE.0=v.9.3c #Options ############################# diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index 4a797af2..88b74285 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -55,7 +55,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define AO 1 // [0 1] Turn on for enhanced ambient occlusion (medium performance cost). #define AOSTEPS 4 // [4 5 6 7 8 9 10 11] How many samples are taken for AO (high performance cost). #define AO_STRENGTH 0.70 // [0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.66 0.70 0.75 0.80 0.85] Ambient occlusion strength (strength NOT affect performance). -#define AA_TYPE 3 // [0 1 2 3] No: Disable antialiasing (not recommended). Denoise only: Supersampling is only used to eliminate noise. TAA: Enable antialiasing. TAA+: Use FXAA to improve the result of TAA. It does not apply if chromatic aberration or DoF is being used. +#define AA_TYPE 2 // [0 1 2 3] No: Disable antialiasing (not recommended). Denoise only: Supersampling is only used to eliminate noise. TAA: Enable antialiasing. TAA+: Use FXAA to improve the result of TAA. It does not apply if chromatic aberration or DoF is being used. //#define MOTION_BLUR // Turn on motion blur #define MOTION_BLUR_STRENGTH 1.0 // [0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0] Set Motion blur strength. Lower framerate -> Lower strength and vice versa is recommended. #define MOTION_BLUR_SAMPLES 4 // [3 4 5 6 7 8] Motion blur samples diff --git a/shaders/lib/fast_taa.glsl b/shaders/lib/fast_taa.glsl index 725aa7b0..07081154 100644 --- a/shaders/lib/fast_taa.glsl +++ b/shaders/lib/fast_taa.glsl @@ -4,21 +4,41 @@ Temporal antialiasing functions. Javier Garduño - GNU Lesser General Public License v3.0 */ -/* ---------------*/ +vec3 convex_hull( + vec3 c, vec3 previous, vec3 up, vec3 down, vec3 left, vec3 right, + vec3 ul, vec3 ur, vec3 dl, vec3 dr) { + + // Cálculo de varianza + vec3 sum = c + up + down + left + right + ul + ur + dl + dr; + vec3 sum_sq = + c*c + + up*up + + down*down + + left*left + + right*right + + ul*ul + + ur*ur + + dl*dl + + dr*dr; + + vec3 mean = sum * 0.1111111111111111; // 1 / 9 + vec3 variance = abs(sum_sq * 0.1111111111111111 - mean * mean); // Varianza = E[x^2] - E[x]^2 + + // 2. Definir el rango de clamping + vec3 std_dev = sqrt(variance); + vec3 min_valid = mean - 0.8 * std_dev; + vec3 max_valid = mean + 0.8 * std_dev; + + // 3. Aplicar el clamping + return clamp(previous, min_valid, max_valid); +} float edge_detector( vec3 c, vec3 up, vec3 down, vec3 left, vec3 right, - vec3 ul, vec3 ur, vec3 dl, vec3 dr) -{ + vec3 ul, vec3 ur, vec3 dl, vec3 dr) { // --- Parámetros de Control Relativos --- - const float epsilon = 0.0001; // Para evitar la división por cero - - // Umbral relativo: ¿Qué tan fuerte debe ser la diferencia relativa para ser detectada? - // Un valor de 0.4 significa que la diferencia perpendicular debe ser un 40% - // mayor que la diferencia paralela. + const float epsilon = 0.0001; const float relative_threshold = 0.4; - - // Suavidad: Rango de la transición para el antialiasing del resultado. const float smoothness = 0.5; // --- Conversión a Luminancia --- @@ -32,35 +52,47 @@ float edge_detector( float l_dl = luma(dl); float l_dr = luma(dr); - // --- Cálculo de "Linealidad" Relativa --- + // --- Optimización: Calcular diferencias de luminancia una sola vez --- + float d_up = abs(l_c - l_up); + float d_down = abs(l_c - l_down); + float d_left = abs(l_c - l_left); + float d_right = abs(l_c - l_right); + float d_ul = abs(l_c - l_ul); + float d_ur = abs(l_c - l_ur); + float d_dl = abs(l_c - l_dl); + float d_dr = abs(l_c - l_dr); + + // --- Optimización: Pre-calcular el inverso para los cálculos de consistencia --- + // Esto reemplaza 4 divisiones por 1 división y 4 multiplicaciones. + float inv_l_c = 1.0 / (l_c + epsilon); + + // --- Cálculo de "Linealidad" Relativa de forma eficiente --- // 1. Línea Horizontal - float ridgeH = abs(l_c - l_up) / (l_up + epsilon) + abs(l_c - l_down) / (l_down + epsilon); - float consistencyH = (abs(l_c - l_left) + abs(l_c - l_right)) / (l_c + epsilon); - float linenessH = ridgeH - consistencyH; + // ridge_h utiliza las diferencias perpendiculares (arriba, abajo). + // La consistencia se mide con las diferencias paralelas (izquierda, derecha). + float ridge_h = d_up / (l_up + epsilon) + d_down / (l_down + epsilon); + float lineness_h = ridge_h - (d_left + d_right) * inv_l_c; // 2. Línea Vertical - float ridgeV = abs(l_c - l_left) / (l_left + epsilon) + abs(l_c - l_right) / (l_right + epsilon); - float consistencyV = (abs(l_c - l_up) + abs(l_c - l_down)) / (l_c + epsilon); - float linenessV = ridgeV - consistencyV; + float ridge_v = d_left / (l_left + epsilon) + d_right / (l_right + epsilon); + float lineness_v = ridge_v - (d_up + d_down) * inv_l_c; // 3. Línea Diagonal (Top-Left a Bottom-Right) - float ridgeD1 = abs(l_c - l_ur) / (l_ur + epsilon) + abs(l_c - l_dl) / (l_dl + epsilon); - float consistencyD1 = (abs(l_c - l_ul) + abs(l_c - l_dr)) / (l_c + epsilon); - float linenessD1 = ridgeD1 - consistencyD1; + float ridge_d1 = d_ur / (l_ur + epsilon) + d_dl / (l_dl + epsilon); + float lineness_d1 = ridge_d1 - (d_ul + d_dr) * inv_l_c; // 4. Línea Diagonal (Top-Right a Bottom-Left) - float ridgeD2 = abs(l_c - l_ul) / (l_ul + epsilon) + abs(l_c - l_dr) / (l_dr + epsilon); - float consistencyD2 = (abs(l_c - l_ur) + abs(l_c - l_dl)) / (l_c + epsilon); - float linenessD2 = ridgeD2 - consistencyD2; + float ridge_d2 = d_ul / (l_ul + epsilon) + d_dr / (l_dr + epsilon); + float lineness_d2 = ridge_d2 - (d_ur + d_dl) * inv_l_c; - // --- Puntuación final y color de salida --- + // --- Puntuación final y color de salida (sin cambios) --- // Se toma la máxima puntuación de las 4 direcciones (asegurando que no sea negativa). - float maxLineness = max(0.0, max(linenessH, max(linenessV, max(linenessD1, linenessD2)))); + float max_lineness = max(0.0, max(lineness_h, max(lineness_v, max(lineness_d1, lineness_d2)))); // `smoothstep` ahora usa los umbrales relativos. - return smoothstep(relative_threshold, relative_threshold + smoothness, maxLineness); + return smoothstep(relative_threshold, relative_threshold + smoothness, max_lineness); } float fast_edge_detector(vec3 current_color, vec3 left, vec3 right, vec3 up, vec3 down) { @@ -75,18 +107,74 @@ float fast_edge_detector(vec3 current_color, vec3 left, vec3 right, vec3 up, vec return smoothstep(0.25, 0.75, edge); } +// float line_detector(vec3 center, vec3 up, vec3 down, vec3 left, vec3 right, vec3 ul, vec3 ur, vec3 dl, vec3 dr) { +// const float epsilon = 0.0001; + +// // Umbral de la fuerza relativa. Por ejemplo, 0.2 significa que una línea +// // debe ser al menos un 20% más brillante u oscura que su entorno para ser considerada. +// // Este valor es ahora mucho más intuitivo y funciona en distintas iluminaciones. +// const float relative_threshold = 0.01; + +// // Suavidad de la transición. Controla qué tan rápido el resaltado +// // pasa de 0 a 1 una vez que se supera el umbral. +// const float smoothness = 0.15; + +// float c = luma(center); +// float t = luma(up); +// float b = luma(down); +// float l = luma(left); +// float r = luma(right); +// float tl = luma(ul); +// float tr = luma(ur); +// float bl = luma(dl); +// float br = luma(dr); + +// // --- Cálculo de "linealidad" relativa para cada dirección --- +// float lineness_h = 0.0, lineness_v = 0.0, lineness_d1 = 0.0, lineness_d2 = 0.0; + +// // 1. Línea Horizontal +// if ((c > t && c > b) || (c < t && c < b)) { +// float strength = min(abs(c - t) / (t + epsilon), abs(c - b) / (b + epsilon)); +// float penalty = (abs(c - l) + abs(c - r)) / (c + epsilon); +// lineness_h = strength - penalty; +// } + +// // 2. Línea Vertical +// if ((c > l && c > r) || (c < l && c < r)) { +// float strength = min(abs(c - l) / (l + epsilon), abs(c - r) / (r + epsilon)); +// float penalty = (abs(c - t) + abs(c - b)) / (c + epsilon); +// lineness_v = strength - penalty; +// } + +// // 3. Línea Diagonal (\) +// if ((c > tr && c > bl) || (c < tr && c < bl)) { +// float strength = min(abs(c - tr) / (tr + epsilon), abs(c - bl) / (bl + epsilon)); +// float penalty = (abs(c - tl) + abs(c - br)) / (c + epsilon); +// lineness_d1 = strength - penalty; +// } + +// // 4. Línea Diagonal (/) +// if ((c > tl && c > br) || (c < tl && c < br)) { +// float strength = min(abs(c - tl) / (tl + epsilon), abs(c - br) / (br + epsilon)); +// float penalty = (abs(c - tr) + abs(c - bl)) / (c + epsilon); +// lineness_d2 = strength - penalty; +// } + +// // --- Puntuación final y color de salida --- + +// // Tomamos la máxima puntuación y nos aseguramos de que no sea negativa. +// float max_lineness = max(0.0, max(lineness_h, max(lineness_v, max(lineness_d1, lineness_d2)))); + +// // `smoothstep` usa nuestro umbral relativo para crear una transición suave. +// return smoothstep(relative_threshold, relative_threshold + smoothness, max_lineness); +// } + float line_detector(vec3 center, vec3 up, vec3 down, vec3 left, vec3 right, vec3 ul, vec3 ur, vec3 dl, vec3 dr) { const float epsilon = 0.0001; - - // Umbral de la fuerza relativa. Por ejemplo, 0.2 significa que una línea - // debe ser al menos un 20% más brillante u oscura que su entorno para ser considerada. - // Este valor es ahora mucho más intuitivo y funciona en distintas iluminaciones. const float relative_threshold = 0.01; - - // Suavidad de la transición. Controla qué tan rápido el resaltado - // pasa de 0 a 1 una vez que se supera el umbral. const float smoothness = 0.15; + // --- Conversión a Luminancia --- float c = luma(center); float t = luma(up); float b = luma(down); @@ -97,45 +185,56 @@ float line_detector(vec3 center, vec3 up, vec3 down, vec3 left, vec3 right, vec3 float bl = luma(dl); float br = luma(dr); - // --- Cálculo de "linealidad" relativa para cada dirección --- - float linenessH = 0.0, linenessV = 0.0, linenessD1 = 0.0, linenessD2 = 0.0; + // --- Optimización: Calcular diferencias una sola vez --- + // Cada una de estas se usaba dos veces en el código original. + float d_t = abs(c - t); + float d_b = abs(c - b); + float d_l = abs(c - l); + float d_r = abs(c - r); + float d_tl = abs(c - tl); + float d_tr = abs(c - tr); + float d_bl = abs(c - bl); + float d_br = abs(c - br); + + // --- Optimización: Pre-calcular inverso para reemplazar divisiones --- + float inv_c = 1.0 / (c + epsilon); + + // --- Cálculo de "linealidad" relativa de forma eficiente --- + float lineness_h = 0.0, lineness_v = 0.0, lineness_d1 = 0.0, lineness_d2 = 0.0; // 1. Línea Horizontal - if ((c > t && c > b) || (c < t && c < b)) { - float strength = min(abs(c - t) / (t + epsilon), abs(c - b) / (b + epsilon)); - float penalty = (abs(c - l) + abs(c - r)) / (c + epsilon); - linenessH = strength - penalty; + // Condición optimizada: comprueba si (c-t) y (c-b) tienen el mismo signo. + if ((c - t) * (c - b) > 0.0) { + float strength = min(d_t / (t + epsilon), d_b / (b + epsilon)); + float penalty = (d_l + d_r) * inv_c; + lineness_h = strength - penalty; } // 2. Línea Vertical - if ((c > l && c > r) || (c < l && c < r)) { - float strength = min(abs(c - l) / (l + epsilon), abs(c - r) / (r + epsilon)); - float penalty = (abs(c - t) + abs(c - b)) / (c + epsilon); - linenessV = strength - penalty; + if ((c - l) * (c - r) > 0.0) { + float strength = min(d_l / (l + epsilon), d_r / (r + epsilon)); + float penalty = (d_t + d_b) * inv_c; + lineness_v = strength - penalty; } // 3. Línea Diagonal (\) - if ((c > tr && c > bl) || (c < tr && c < bl)) { - float strength = min(abs(c - tr) / (tr + epsilon), abs(c - bl) / (bl + epsilon)); - float penalty = (abs(c - tl) + abs(c - br)) / (c + epsilon); - linenessD1 = strength - penalty; + if ((c - tr) * (c - bl) > 0.0) { + float strength = min(d_tr / (tr + epsilon), d_bl / (bl + epsilon)); + float penalty = (d_tl + d_br) * inv_c; + lineness_d1 = strength - penalty; } // 4. Línea Diagonal (/) - if ((c > tl && c > br) || (c < tl && c < br)) { - float strength = min(abs(c - tl) / (tl + epsilon), abs(c - br) / (br + epsilon)); - float penalty = (abs(c - tr) + abs(c - bl)) / (c + epsilon); - linenessD2 = strength - penalty; + if ((c - tl) * (c - br) > 0.0) { + float strength = min(d_tl / (tl + epsilon), d_br / (br + epsilon)); + float penalty = (d_tr + d_bl) * inv_c; + lineness_d2 = strength - penalty; } - // --- Puntuación final y color de salida --- + // --- Puntuación final y color de salida (sin cambios) --- + float max_lineness = max(0.0, max(lineness_h, max(lineness_v, max(lineness_d1, lineness_d2)))); - // Tomamos la máxima puntuación y nos aseguramos de que no sea negativa. - float maxLineness = max(0.0, max(linenessH, max(linenessV, max(linenessD1, linenessD2)))); - - // `smoothstep` usa nuestro umbral relativo para crear una transición suave. - return smoothstep(relative_threshold, relative_threshold + smoothness, maxLineness); - // return maxLineness; + return smoothstep(relative_threshold, relative_threshold + smoothness, max_lineness); } vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { @@ -155,11 +254,6 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { vec3 dl = texture2DLod(colortex1, texcoord + vec2(-pixel_size_x, -pixel_size_y), 0.0).rgb; vec3 dr = texture2DLod(colortex1, texcoord + vec2(pixel_size_x, -pixel_size_y), 0.0).rgb; - vec3 nmin = - min(current_color, min(left, min(right, min(up, down)))); - vec3 nmax = - max(current_color, max(left, max(right, max(up, down)))); - float edge = edge_detector( current_color, up, @@ -180,22 +274,38 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { // down // ); + // Clip 1 + // previous = clamp(previous, nmin, nmax); + // Clip 2 - vec3 center = (nmin + nmax) * 0.5; - float radio = length(nmax - center); + // vec3 center = (nmin + nmax) * 0.5; + // float radio = length(nmax - center); - vec3 color_vector = previous - center; - float color_dist = length(color_vector); + // vec3 color_vector = previous - center; + // float color_dist = length(color_vector); - float factor = 1.0; - if (color_dist > radio) { - factor = radio / color_dist; - } - previous = center + (color_vector * factor); + // float factor = 1.0; + // if (color_dist > radio) { + // factor = (radio / color_dist); + // } + // previous = center + (color_vector * factor); - return mix(current_color, previous, 0.65 + (edge * 0.30)); - // return mix(current_color, previous, 0.95); + // Clip 3 + previous = convex_hull( + current_color, + previous, + up, + down, + left, + right, + ul, + ur, + dl, + dr + ); + return mix(current_color, previous, 0.70 + (edge * 0.25)); + // return mix(current_color, previous, 0.70); // return vec3(edge); } } @@ -217,10 +327,10 @@ vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { vec4 dl = texture2DLod(colortex1, texcoord + vec2(-pixel_size_x, -pixel_size_y), 0.0); vec4 dr = texture2DLod(colortex1, texcoord + vec2(pixel_size_x, -pixel_size_y), 0.0); - vec4 nmin = - min(current_color, min(left, min(right, min(up, down)))); - vec4 nmax = - max(current_color, max(left, max(right, max(up, down)))); + // vec4 nmin = + // min(current_color, min(left, min(right, min(up, down)))); + // vec4 nmax = + // max(current_color, max(left, max(right, max(up, down)))); float edge = edge_detector( current_color.rgb, @@ -234,19 +344,20 @@ vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { dr.rgb ); - // Clip - vec3 center = (nmin.rgb + nmax.rgb) * 0.5; - float radio = length(nmax.rgb - center); - - vec3 color_vector = previous.rgb - center; - float color_dist = length(color_vector); - - float factor = 1.0; - if (color_dist > radio) { - factor = radio / color_dist; - } - previous = vec4(center + (color_vector * factor), previous.a); + // Clip 3 + previous.rgb = convex_hull( + current_color.rgb, + previous.rgb, + up.rgb, + down.rgb, + left.rgb, + right.rgb, + ul.rgb, + ur.rgb, + dl.rgb, + dr.rgb + ); - return mix(current_color, previous, 0.75 + (edge * 0.14)); + return mix(current_color, previous, 0.75 + (edge * 0.20)); } } diff --git a/shaders/lib/post.glsl b/shaders/lib/post.glsl index 2f7ac1d7..5216f24f 100644 --- a/shaders/lib/post.glsl +++ b/shaders/lib/post.glsl @@ -7,13 +7,3 @@ vec3 sharpen(sampler2D image, vec3 color, vec2 coords) { return sum * 0.14285714285714285; } - -vec3 edge_detect(sampler2D image, vec3 color, vec2 coords) { - vec3 sum = -texture2DLod(image, coords + vec2(-pixel_size_x, -pixel_size_y), 0.0).rgb; - sum -= texture2DLod(image, coords + vec2(pixel_size_x, -pixel_size_y), 0.0).rgb; - sum += 4.0 * color; - sum -= texture2DLod(image, coords + vec2(-pixel_size_x, pixel_size_y), 0.0).rgb; - sum -= texture2DLod(image, coords + vec2(pixel_size_x, pixel_size_y), 0.0).rgb; - - return vec3(length(sum)) * 0.5773502691896258; -} diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 136ce96d..a3dd7685 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -5,10 +5,9 @@ profile.no_effects= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_S profile.shadowless_low= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS profile.shadowless_medium= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS profile.shadowless_high= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.extreme= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS # Default forced options @@ -33,11 +32,9 @@ texture.gbuffers.noisetex = textures/water_256_RG_8bit.png #if CLOUD_VOL_STYLE == 0 texture.gbuffers.gaux2 = textures/clouds_natural_512_R_8bit.png texture.deferred.gaux2 = textures/clouds_natural_512_R_8bit.png - texture.deferred.colortex0 = textures/bluenoise_64.png #else texture.gbuffers.gaux2 = textures/clouds_blocky_512_R_8bit.png texture.deferred.gaux2 = textures/clouds_blocky_512_R_8bit.png - texture.deferred.colortex0 = textures/bluenoise_64.png #endif # texture.deferred.colortex0 = textures/bluenoise_64.png @@ -149,7 +146,6 @@ uniform.int.frame_mod = fmod(frameCounter, 8) # so fast that it is "absorbed" and better masked by the TAA history. #if AA_TYPE > -1 - # Pentagon uniform.vec2.taa_offset = vec2((if( \ frame_mod == 0, 0.5, \ frame_mod == 1, -0.5, \ From 9dfa90d7647ffa7c772f4b977fdc1b34e9d91f58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Wed, 6 Aug 2025 13:41:22 -0600 Subject: [PATCH 067/147] Version 9.3c --- shaders/block.properties | 2 +- shaders/lib/config.glsl | 2 +- shaders/lib/fast_taa.glsl | 62 -------------------------------------- shaders/shaders.properties | 2 +- 4 files changed, 3 insertions(+), 65 deletions(-) diff --git a/shaders/block.properties b/shaders/block.properties index 59bce1fa..b71a544a 100644 --- a/shaders/block.properties +++ b/shaders/block.properties @@ -39,7 +39,7 @@ block.10214 = minecraft:fire # METAL-LIKE - block.10400 = iron_block iron_trapdoor gold_block emerald_block lapis_block diamond_block copper_block exposed_copper weathered_copper oxidized_copper cut_copper exposed_cut_copper weathered_cut_copper oxidized_cut_copper cut_copper_stairs exposed_cut_copper_stairs weathered_cut_copper_stairs oxidized_cut_copper_stairs cut_copper_slab exposed_cut_copper_slab weathered_cut_copper_slab oxidized_cut_copper_slab waxed_cut_copper_slab waxed_weathered_cut_copper_slab waxed_weathered_copper waxed_exposed_copper waxed_copper_block waxed_oxidized_cut_copper_slab waxed_weathered_cut_copper_slab waxed_exposed_cut_copper_slab waxed_cuyt_copper_slab waxed_oxidized_copper waxed_cut_copper waxed_exposed_cut_copper waxed_weathered_cut_copper waxed_oxidized_cut_copper waxed_cut_copper_stairs waxed_exposed_cut_copper_stairs waxed_weathered_cut_copper_stairs waxed_oxidized_cut_copper_stairs heavy_weighted_pressure_plate light_weighted_pressure_plate iron_bars tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top tfc:metal/anvil/bismuth_bronze tfc:metal/block/bismuth_bronze tfc:metal/bars/bismuth_bronze tfc:metal/trapdoor/bismuth_bronze tfc:metal/block/bismuth_bronze_stairs tfc:block/metal/block/bismuth_bronze_slab tfc:block/metal/block/bismuth_bronze_slab_top tfc:metal/anvil/black_bronze tfc:metal/block/black_bronze tfc:metal/bars/black_bronze tfc:metal/trapdoor/black_bronze tfc:metal/block/black_bronze_stairs tfc:block/metal/block/black_bronze_slab tfc:block/metal/block/black_bronze_slab_top tfc:metal/anvil/bronze tfc:metal/block/bronze tfc:metal/bars/bronze tfc:metal/trapdoor/bronze tfc:metal/block/bronze_stairs tfc:block/metal/block/bronze_slab tfc:block/metal/block/bronze_slab_top tfc:metal/anvil/brass tfc:metal/block/brass tfc:metal/bars/brass tfc:metal/trapdoor/brass tfc:metal/block/brass_stairs tfc:block/metal/block/brass_slab tfc:block/metal/block/brass_slab_top tfc:metal/anvil/copper tfc:metal/block/copper tfc:metal/bars/copper tfc:metal/trapdoor/copper tfc:metal/block/copper_stairs tfc:block/metal/block/copper_slab tfc:block/metal/block/copper_slab_top tfc:metal/anvil/gold tfc:metal/block/gold tfc:metal/bars/gold tfc:metal/trapdoor/gold tfc:metal/block/gold_stairs tfc:block/metal/block/gold_slab tfc:block/metal/block/gold_slab_top tfc:metal/anvil/nickel tfc:metal/block/nickel tfc:metal/bars/nickel tfc:metal/trapdoor/nickel tfc:metal/block/nickel_stairs tfc:block/metal/block/nickel_slab tfc:block/metal/block/nickel_slab_top tfc:metal/anvil/rose_gold tfc:metal/block/rose_gold tfc:metal/bars/rose_gold tfc:metal/trapdoor/rose_gold tfc:metal/block/rose_gold_stairs tfc:block/metal/block/rose_gold_slab tfc:block/metal/block/rose_gold_slab_top tfc:metal/anvil/silver tfc:metal/block/silver tfc:metal/bars/silver tfc:metal/trapdoor/silver tfc:metal/block/silver_stairs tfc:block/metal/block/silver_slab tfc:block/metal/block/silver_slab_top tfc:metal/anvil/tin tfc:metal/block/tin tfc:metal/bars/tin tfc:metal/trapdoor/tin tfc:metal/block/tin_stairs tfc:block/metal/block/tin_slab tfc:block/metal/block/tin_slab_top tfc:metal/anvil/zinc tfc:metal/block/zinc tfc:metal/bars/zinc tfc:metal/trapdoor/zinc tfc:metal/block/zinc_stairs tfc:block/metal/block/zinc_slab tfc:block/metal/block/zinc_slab_top tfc:metal/anvil/sterling_silver tfc:metal/block/sterling_silver tfc:metal/bars/sterling_silver tfc:metal/trapdoor/sterling_silver tfc:metal/block/sterling_silver_stairs tfc:block/metal/block/sterling_silver_slab tfc:block/metal/block/sterling_silver_slab_top tfc:metal/anvil/wrought_iron tfc:metal/block/wrought_iron tfc:metal/bars/wrought_iron tfc:metal/trapdoor/wrought_iron tfc:metal/block/wrought_iron_stairs tfc:block/metal/block/wrought_iron_slab tfc:block/metal/block/wrought_iron_slab_top tfc:metal/anvil/cast_iron tfc:metal/block/cast_iron tfc:metal/bars/cast_iron tfc:metal/trapdoor/cast_iron tfc:metal/block/cast_iron_stairs tfc:block/metal/block/cast_iron_slab tfc:block/metal/block/cast_iron_slab_top tfc:metal/anvil/pig_iron tfc:metal/block/pig_iron tfc:metal/bars/pig_iron tfc:metal/trapdoor/pig_iron tfc:metal/block/pig_iron_stairs tfc:block/metal/block/pig_iron_slab tfc:block/metal/block/pig_iron_slab_top tfc:metal/anvil/steel tfc:metal/block/steel tfc:metal/bars/steel tfc:metal/trapdoor/steel tfc:metal/block/steel_stairs tfc:block/metal/block/steel_slab tfc:block/metal/block/steel_slab_top tfc:metal/anvil/black_steel tfc:metal/block/black_steel tfc:metal/bars/black_steel tfc:metal/trapdoor/black_steel tfc:metal/block/black_steel_stairs tfc:block/metal/block/black_steel_slab tfc:block/metal/block/black_steel_slab_top tfc:metal/anvil/blue_steel tfc:metal/block/blue_steel tfc:metal/bars/blue_steel tfc:metal/trapdoor/blue_steel tfc:metal/block/blue_steel_stairs tfc:block/metal/block/blue_steel_slab tfc:block/metal/block/blue_steel_slab_top tfc:metal/anvil/red_steel tfc:metal/block/red_steel tfc:metal/bars/red_steel tfc:metal/trapdoor/red_steel tfc:metal/block/red_steel_stairs tfc:block/metal/block/red_steel_slab tfc:block/metal/block/red_steel_slab_top tfc:metal/anvil/weak_steel tfc:metal/block/weak_steel tfc:metal/bars/weak_steel tfc:metal/trapdoor/weak_steel tfc:metal/block/weak_steel_stairs tfc:block/metal/block/weak_steel_slab tfc:block/metal/block/weak_steel_slab_top tfc:metal/anvil/weak_blue_steel tfc:metal/block/weak_blue_steel tfc:metal/bars/weak_blue_steel tfc:metal/trapdoor/weak_blue_steel tfc:metal/block/weak_blue_steel_stairs tfc:block/metal/block/weak_blue_steel_slab tfc:block/metal/block/weak_blue_steel_slab_top tfc:metal/anvil/weak_red_steel tfc:metal/block/weak_red_steel tfc:metal/bars/weak_red_steel tfc:metal/trapdoor/weak_red_steel tfc:metal/block/weak_red_steel_stairs tfc:block/metal/block/weak_red_steel_slab tfc:block/metal/block/weak_red_steel_slab_top tfc:metal/anvil/high_carbon_steel tfc:metal/block/high_carbon_steel tfc:metal/bars/high_carbon_steel tfc:metal/trapdoor/high_carbon_steel tfc:metal/block/high_carbon_steel_stairs tfc:block/metal/block/high_carbon_steel_slab tfc:block/metal/block/high_carbon_steel_slab_top tfc:metal/anvil/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel tfc:metal/bars/high_carbon_black_steel tfc:metal/trapdoor/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel_stairs tfc:block/metal/block/high_carbon_black_steel_slab tfc:block/metal/block/high_carbon_black_steel_slab_top tfc:metal/anvil/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel tfc:metal/bars/high_carbon_blue_steel tfc:metal/trapdoor/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel_stairs tfc:block/metal/block/high_carbon_blue_steel_slab tfc:block/metal/block/high_carbon_blue_steel_slab_top tfc:metal/anvil/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel tfc:metal/bars/high_carbon_red_steel tfc:metal/trapdoor/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel_stairs tfc:block/metal/block/high_carbon_red_steel_slab tfc:block/metal/block/high_carbon_red_steel_slab_top tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top create:copper_ladder create:brass_ladder create:copper_scaffolding create:brass_scaffolding create:brass_block create:copper_bars create:brass_bars create:smart_chute create:fluid_tank create:steam_whistle create:steam_engine create:spout create:hose_pulley create:item_drain create:train_casing create:smart_fluid_pipe create:fluid_pipe create:mechanical_pump create:copper_valve_handle create:fluid_valve create:mechanical_crafter create:sequenced_gearshift create:flywheel create:rotation_speed_controller create:mechanical_arm create:railway_casing create:controls create:brass_funnel create:brass_tunnel create:content_observer create:stockpile_switch create:redstone_link create:pulse_repeater create:pulse_extender create:peculiar_bell create_jetpack:jetpack create_enchantment_industry:printer create_enchantment_industry:disenchanter cataclysm:ancient_metal_block cataclysm:cursium_block cataclysm:enderite_block cataclysm:witherite_block cataclysm:ignitium_block cataclysm:mechanical_fusion_anvil cataclysm:emp cataclysm:black_steel_block create_dd:furnace_engine create_dd:bore_block create_dd:industrial_fan create_dd:hydraulic_press create_dd:item_stockpile create_dd:fluid_reservoir create_dd:dark_metal_block create_dd:dark_metal_plating create_dd:dark_metal_block_slab create_dd:dark_metal_block_stairs create_dd:dark_metal_bricks create_dd:dark_metal_brick_slab create_dd:dark_metal_brick_stairs create:zinc_block create:industrial_iron_block create:train_door create:chute create:item_vault create:haunted_bell minecraft:netherite_block create_jetpack:netherite_jetpack createutilities:void_steel_block createutilities:void_steel_scaffolding createutilities:void_casing createutilities:void_steel_bars createutilities:void_steel_ladder createutilities:void_motor createutilities:void_chest createutilities:void_tank createutilities:void_battery railways:smokestack_caboosestyle railways:smokestack_long railways:smokestack_coalburner railways:smokestack_oilburner railways:smokestack_streamlined railways:smokestack_woodburner railways:fuel_tank railways:portable_fuel_interface create_power_loader:empty_brass_chunk_loader create_power_loader:brass_chunk_loader create_connected:empty_fan_catalyst create_connected:fan_blasting_catalyst create_connected:fan_smoking_catalyst create_connected:fan_splashing_catalyst create_connected:fan_haunting_catalyst create_connected:sequenced_pulse_generator create_connected:item_silo create_things_and_misc:card_reader create_things_and_misc:card_press create_things_and_misc:sprinkler create_things_and_misc:brass_tiles create_things_and_misc:brass_tiles_slab create_things_and_misc:brass_tiles_stair create_things_and_misc:brass_bricks create_things_and_misc:brass_brick_slab create_things_and_misc:brass_brick_stairs vintageimprovements:vanadium_block createcasing:brass_shaft createcasing:creative_casing create_dd:stargaze_singularity_scaffolding create_dd:stargaze_singularity_block create_dd:stargaze_singularity_casing create_dd:mithril_scaffolding create_dd:mithril_block create_dd:mithril_casing create_dd:bronze_scaffolding create_dd:bronze_block create_dd:bronze_casing create_dd:steel_scaffolding create_dd:steel_block create_dd:steel_casing create_dd:industrial_iron_block create_dd:industrial_casing create_dd:tin_scaffolding create_dd:tin_block create_dd:chromatic_block create_dd:refined_radiance_scaffolding create_dd:refined_radiance_block create_dd:refined_radiance_casing create_dd:shadow_steel_scaffolding create_dd:shadow_steel_block create_dd:shadow_steel_casing create_dd:blaze_gold_scaffolding create_dd:blaze_gold_block create_dd:blaze_gold_casing create_dd:hydraulic_scaffolding create_dd:hydraulic_casing create_dd:overburden_scaffolding create_dd:overburden_casing create_dd:train_scaffolding create_dd:zinc_scaffolding create_dd:industrial_scaffolding create_dd:netherite_scaffolding create_dd:bronze_saw create_dd:bronze_drill createbigcannons:big_cartridge createbigcannons:cast_iron_block createbigcannons:nethersteel_block createbigcannons:basin_foundry_lid createbigcannons:wrought_iron_drop_mortar_end createbigcannons:wrought_iron_cannon_end createbigcannons:wrought_iron_cannon_chamber create_dd:flywheel railways:slashed_locometal railways:riveted_locometal railways:locometal_pillar railways:locometal_smokebox railways:plated_locometal railways:flat_slashed_locometal railways:flat_riveted_locometal railways:brass_wrapped_locometal railways:copper_wrapped_locometal railways:iron_wrapped_locometal railways:locometal_boiler railways:brass_wrapped_locometal_boiler railways:copper_wrapped_locometal_boiler railways:iron_wrapped_locometal_boiler railways:white_slashed_locometal railways:white_riveted_locometal railways:white_locometal_pillar railways:white_locometal_smokebox railways:white_plated_locometal railways:white_flat_slashed_locometal railways:white_flat_riveted_locometal railways:white_brass_wrapped_locometal railways:white_copper_wrapped_locometal railways:white_iron_wrapped_locometal railways:white_locometal_boiler railways:white_brass_wrapped_locometal_boiler railways:white_copper_wrapped_locometal_boiler railways:white_iron_wrapped_locometal_boiler railways:light_gray_slashed_locometal railways:light_gray_riveted_locometal railways:light_gray_locometal_pillar railways:light_gray_locometal_smokebox railways:light_gray_plated_locometal railways:light_gray_flat_slashed_locometal railways:light_gray_flat_riveted_locometal railways:light_gray_brass_wrapped_locometal railways:light_gray_copper_wrapped_locometal railways:light_gray_iron_wrapped_locometal railways:light_gray_locometal_boiler railways:light_gray_brass_wrapped_locometal_boiler railways:light_gray_copper_wrapped_locometal_boiler railways:light_gray_iron_wrapped_locometal_boiler railways:gray_slashed_locometal railways:gray_riveted_locometal railways:gray_locometal_pillar railways:gray_locometal_smokebox railways:gray_plated_locometal railways:gray_flat_slashed_locometal railways:gray_flat_riveted_locometal railways:gray_brass_wrapped_locometal railways:gray_copper_wrapped_locometal railways:gray_iron_wrapped_locometal railways:gray_locometal_boiler railways:gray_brass_wrapped_locometal_boiler railways:gray_copper_wrapped_locometal_boiler railways:gray_iron_wrapped_locometal_boiler railways:black_slashed_locometal railways:black_riveted_locometal railways:black_locometal_pillar railways:black_locometal_smokebox railways:black_plated_locometal railways:black_flat_slashed_locometal railways:black_flat_riveted_locometal railways:black_brass_wrapped_locometal railways:black_copper_wrapped_locometal railways:black_iron_wrapped_locometal railways:black_locometal_boiler railways:black_brass_wrapped_locometal_boiler railways:black_copper_wrapped_locometal_boiler railways:black_iron_wrapped_locometal_boiler railways:brown_slashed_locometal railways:brown_riveted_locometal railways:brown_locometal_pillar railways:brown_locometal_smokebox railways:brown_plated_locometal railways:brown_flat_slashed_locometal railways:brown_flat_riveted_locometal railways:brown_brass_wrapped_locometal railways:brown_copper_wrapped_locometal railways:brown_iron_wrapped_locometal railways:brown_locometal_boiler railways:brown_brass_wrapped_locometal_boiler railways:brown_copper_wrapped_locometal_boiler railways:brown_iron_wrapped_locometal_boiler railways:red_slashed_locometal railways:red_riveted_locometal railways:red_locometal_pillar railways:red_locometal_smokebox railways:red_plated_locometal railways:red_flat_slashed_locometal railways:red_flat_riveted_locometal railways:red_brass_wrapped_locometal railways:red_copper_wrapped_locometal railways:red_iron_wrapped_locometal railways:red_locometal_boiler railways:red_brass_wrapped_locometal_boiler railways:red_copper_wrapped_locometal_boiler railways:red_iron_wrapped_locometal_boiler railways:orange_slashed_locometal railways:orange_riveted_locometal railways:orange_locometal_pillar railways:orange_locometal_smokebox railways:orange_plated_locometal railways:orange_flat_slashed_locometal railways:orange_flat_riveted_locometal railways:orange_brass_wrapped_locometal railways:orange_copper_wrapped_locometal railways:orange_iron_wrapped_locometal railways:orange_locometal_boiler railways:orange_brass_wrapped_locometal_boiler railways:orange_copper_wrapped_locometal_boiler railways:orange_iron_wrapped_locometal_boiler railways:yellow_slashed_locometal railways:yellow_riveted_locometal railways:yellow_locometal_pillar railways:yellow_locometal_smokebox railways:yellow_plated_locometal railways:yellow_flat_slashed_locometal railways:yellow_flat_riveted_locometal railways:yellow_brass_wrapped_locometal railways:yellow_copper_wrapped_locometal railways:yellow_iron_wrapped_locometal railways:yellow_locometal_boiler railways:yellow_brass_wrapped_locometal_boiler railways:yellow_copper_wrapped_locometal_boiler railways:yellow_iron_wrapped_locometal_boiler railways:lime_slashed_locometal railways:lime_riveted_locometal railways:lime_locometal_pillar railways:lime_locometal_smokebox railways:lime_plated_locometal railways:lime_flat_slashed_locometal railways:lime_flat_riveted_locometal railways:lime_brass_wrapped_locometal railways:lime_copper_wrapped_locometal railways:lime_iron_wrapped_locometal railways:lime_locometal_boiler railways:lime_brass_wrapped_locometal_boiler railways:lime_copper_wrapped_locometal_boiler railways:lime_iron_wrapped_locometal_boiler railways:green_slashed_locometal railways:green_riveted_locometal railways:green_locometal_pillar railways:green_locometal_smokebox railways:green_plated_locometal railways:green_flat_slashed_locometal railways:green_flat_riveted_locometal railways:green_brass_wrapped_locometal railways:green_copper_wrapped_locometal railways:green_iron_wrapped_locometal railways:green_locometal_boiler railways:green_brass_wrapped_locometal_boiler railways:green_copper_wrapped_locometal_boiler railways:green_iron_wrapped_locometal_boiler railways:cyan_slashed_locometal railways:cyan_riveted_locometal railways:cyan_locometal_pillar railways:cyan_locometal_smokebox railways:cyan_plated_locometal railways:cyan_flat_slashed_locometal railways:cyan_flat_riveted_locometal railways:cyan_brass_wrapped_locometal railways:cyan_copper_wrapped_locometal railways:cyan_iron_wrapped_locometal railways:cyan_locometal_boiler railways:cyan_brass_wrapped_locometal_boiler railways:cyan_copper_wrapped_locometal_boiler railways:cyan_iron_wrapped_locometal_boiler railways:light_blue_slashed_locometal railways:light_blue_riveted_locometal railways:light_blue_locometal_pillar railways:light_blue_locometal_smokebox railways:light_blue_plated_locometal railways:light_blue_flat_slashed_locometal railways:light_blue_flat_riveted_locometal railways:light_blue_brass_wrapped_locometal railways:light_blue_copper_wrapped_locometal railways:light_blue_iron_wrapped_locometal railways:light_blue_locometal_boiler railways:light_blue_brass_wrapped_locometal_boiler railways:light_blue_copper_wrapped_locometal_boiler railways:light_blue_iron_wrapped_locometal_boiler railways:blue_slashed_locometal railways:blue_riveted_locometal railways:blue_locometal_pillar railways:blue_locometal_smokebox railways:blue_plated_locometal railways:blue_flat_slashed_locometal railways:blue_flat_riveted_locometal railways:blue_brass_wrapped_locometal railways:blue_copper_wrapped_locometal railways:blue_iron_wrapped_locometal railways:blue_locometal_boiler railways:blue_brass_wrapped_locometal_boiler railways:blue_copper_wrapped_locometal_boiler railways:blue_iron_wrapped_locometal_boiler railways:purple_slashed_locometal railways:purple_riveted_locometal railways:purple_locometal_pillar railways:purple_locometal_smokebox railways:purple_plated_locometal railways:purple_flat_slashed_locometal railways:purple_flat_riveted_locometal railways:purple_brass_wrapped_locometal railways:purple_copper_wrapped_locometal railways:purple_iron_wrapped_locometal railways:purple_locometal_boiler railways:purple_brass_wrapped_locometal_boiler railways:purple_copper_wrapped_locometal_boiler railways:purple_iron_wrapped_locometal_boiler railways:magenta_slashed_locometal railways:magenta_riveted_locometal railways:magenta_locometal_pillar railways:magenta_locometal_smokebox railways:magenta_plated_locometal railways:magenta_flat_slashed_locometal railways:magenta_flat_riveted_locometal railways:magenta_brass_wrapped_locometal railways:magenta_copper_wrapped_locometal railways:magenta_iron_wrapped_locometal railways:magenta_locometal_boiler railways:magenta_brass_wrapped_locometal_boiler railways:magenta_copper_wrapped_locometal_boiler railways:magenta_iron_wrapped_locometal_boiler railways:pink_slashed_locometal railways:pink_riveted_locometal railways:pink_locometal_pillar railways:pink_locometal_smokebox railways:pink_plated_locometal railways:pink_flat_slashed_locometal railways:pink_flat_riveted_locometal railways:pink_brass_wrapped_locometal railways:pink_copper_wrapped_locometal railways:pink_iron_wrapped_locometal railways:pink_locometal_boiler railways:pink_brass_wrapped_locometal_boiler railways:pink_copper_wrapped_locometal_boiler railways:pink_iron_wrapped_locometal_boiler create:copper_shingles create:copper_shingle_stairs create:copper_shingle_slab create:waxed_copper_shingles create:waxed_copper_shingle_stairs create:waxed_copper_shingle_slab create:exposed_copper_shingles create:exposed_copper_shingle_stairs create:exposed_copper_shingle_slab create:waxed_exposed_copper_shingles create:waxed_exposed_copper_shingle_stairs create:waxed_exposed_copper_shingle_slab create:weathered_copper_shingles create:weathered_copper_shingle_stairs create:weathered_copper_shingle_slab create:waxed_weathered_copper_shingles create:waxed_weathered_copper_shingle_stairs create:waxed_weathered_copper_shingle_slab create:oxidized_copper_shingles create:oxidized_copper_shingle_stairs create:oxidized_copper_shingle_slab create:waxed_oxidized_copper_shingles create:waxed_oxidized_copper_shingle_stairs create:waxed_oxidized_copper_shingle_slab create:copper_tiles create:copper_tile_stairs create:copper_tile_slab create:waxed_copper_tiles create:waxed_copper_tile_stairs create:waxed_copper_tile_slab create:exposed_copper_tiles create:exposed_copper_tile_stairs create:exposed_copper_tile_slab create:waxed_exposed_copper_tiles create:waxed_exposed_copper_tile_stairs create:waxed_exposed_copper_tile_slab create:weathered_copper_tiles create:weathered_copper_tile_stairs create:weathered_copper_tile_slab create:waxed_weathered_copper_tiles create:waxed_weathered_copper_tile_stairs create:waxed_weathered_copper_tile_slab create:oxidized_copper_tiles create:oxidized_copper_tile_stairs create:oxidized_copper_tile_slab create:waxed_oxidized_copper_tiles create:waxed_oxidized_copper_tile_stairs create:waxed_oxidized_copper_tile_slab create_dd:steel_polished_block create_dd:steel_polished_stairs create_dd:steel_polished_slab create_dd:steel_tiled_block create_dd:steel_tiled_stairs create_dd:steel_tiled_slab create_dd:zinc_polished_block create_dd:zinc_polished_stairs create_dd:zinc_polished_slab create_dd:zinc_tiled_block create_dd:zinc_tiled_stairs create_dd:zinc_tiled_slab create_dd:bronze_polished_block create_dd:bronze_polished_stairs create_dd:bronze_polished_slab create_dd:bronze_tiled_block create_dd:bronze_tiled_stairs create_dd:bronze_tiled_slab createbigcannons:cast_iron_sliding_breech createbigcannons:unbored_cast_iron_sliding_breech createbigcannons:incomplete_cast_iron_sliding_breech createbigcannons:cast_iron_quickfiring_breech createbigcannons:cast_iron_screw_breech createbigcannons:unbored_cast_iron_screw_breech createbigcannons:incomplete_cast_iron_screw_breech createbigcannons:cast_iron_cannon_end createbigcannons:cast_iron_autocannon_breech createbigcannons:unbored_cast_iron_autocannon_breech createbigcannons:incomplete_cast_iron_autocannon_breech createbigcannons:cast_iron_autocannon_recoil_spring createbigcannons:unbored_cast_iron_autocannon_recoil_spring createbigcannons:incomplete_cast_iron_autocannon_recoil_spring createbigcannons:cast_iron_autocannon_barrel createbigcannons:unbored_cast_iron_autocannon_barrel createbigcannons:very_small_cast_iron_cannon_layer createbigcannons:small_cast_iron_cannon_layer createbigcannons:medium_cast_iron_cannon_layer createbigcannons:large_cast_iron_cannon_layer createbigcannons:very_large_cast_iron_cannon_layer createbigcannons:unbored_very_small_cast_iron_cannon_layer createbigcannons:unbored_small_cast_iron_cannon_layer createbigcannons:unbored_medium_cast_iron_cannon_layer createbigcannons:unbored_large_cast_iron_cannon_layer createbigcannons:unbored_very_large_cast_iron_cannon_layer createbigcannons:cast_iron_cannon_barrel createbigcannons:built_up_cast_iron_cannon_barrel createbigcannons:cast_iron_cannon_chamber createbigcannons:built_up_cast_iron_cannon_chamber createbigcannons:thick_cast_iron_cannon_chamber createbigcannons:bronze_sliding_breech createbigcannons:unbored_bronze_sliding_breech createbigcannons:incomplete_bronze_sliding_breech createbigcannons:bronze_quickfiring_breech createbigcannons:bronze_screw_breech createbigcannons:unbored_bronze_screw_breech createbigcannons:incomplete_bronze_screw_breech createbigcannons:bronze_cannon_end createbigcannons:bronze_autocannon_breech createbigcannons:unbored_bronze_autocannon_breech createbigcannons:incomplete_bronze_autocannon_breech createbigcannons:bronze_autocannon_recoil_spring createbigcannons:unbored_bronze_autocannon_recoil_spring createbigcannons:incomplete_bronze_autocannon_recoil_spring createbigcannons:bronze_autocannon_barrel createbigcannons:unbored_bronze_autocannon_barrel createbigcannons:very_small_bronze_cannon_layer createbigcannons:small_bronze_cannon_layer createbigcannons:medium_bronze_cannon_layer createbigcannons:large_bronze_cannon_layer createbigcannons:very_large_bronze_cannon_layer createbigcannons:unbored_very_small_bronze_cannon_layer createbigcannons:unbored_small_bronze_cannon_layer createbigcannons:unbored_medium_bronze_cannon_layer createbigcannons:unbored_large_bronze_cannon_layer createbigcannons:unbored_very_large_bronze_cannon_layer createbigcannons:bronze_cannon_barrel createbigcannons:built_up_bronze_cannon_barrel createbigcannons:bronze_cannon_chamber createbigcannons:built_up_bronze_cannon_chamber createbigcannons:thick_bronze_cannon_chamber createbigcannons:steel_sliding_breech createbigcannons:unbored_steel_sliding_breech createbigcannons:incomplete_steel_sliding_breech createbigcannons:steel_quickfiring_breech createbigcannons:steel_screw_breech createbigcannons:unbored_steel_screw_breech createbigcannons:incomplete_steel_screw_breech createbigcannons:steel_cannon_end createbigcannons:steel_autocannon_breech createbigcannons:unbored_steel_autocannon_breech createbigcannons:incomplete_steel_autocannon_breech createbigcannons:steel_autocannon_recoil_spring createbigcannons:unbored_steel_autocannon_recoil_spring createbigcannons:incomplete_steel_autocannon_recoil_spring createbigcannons:steel_autocannon_barrel createbigcannons:unbored_steel_autocannon_barrel createbigcannons:very_small_steel_cannon_layer createbigcannons:small_steel_cannon_layer createbigcannons:medium_steel_cannon_layer createbigcannons:large_steel_cannon_layer createbigcannons:very_large_steel_cannon_layer createbigcannons:unbored_very_small_steel_cannon_layer createbigcannons:unbored_small_steel_cannon_layer createbigcannons:unbored_medium_steel_cannon_layer createbigcannons:unbored_large_steel_cannon_layer createbigcannons:unbored_very_large_steel_cannon_layer createbigcannons:steel_cannon_barrel createbigcannons:built_up_steel_cannon_barrel createbigcannons:steel_cannon_chamber createbigcannons:built_up_steel_cannon_chamber createbigcannons:thick_steel_cannon_chamber createbigcannons:nethersteel_sliding_breech createbigcannons:unbored_nethersteel_sliding_breech createbigcannons:incomplete_nethersteel_sliding_breech createbigcannons:nethersteel_quickfiring_breech createbigcannons:nethersteel_screw_breech createbigcannons:unbored_nethersteel_screw_breech createbigcannons:incomplete_nethersteel_screw_breech createbigcannons:nethersteel_cannon_end createbigcannons:nethersteel_autocannon_breech createbigcannons:unbored_nethersteel_autocannon_breech createbigcannons:incomplete_nethersteel_autocannon_breech createbigcannons:nethersteel_autocannon_recoil_spring createbigcannons:unbored_nethersteel_autocannon_recoil_spring createbigcannons:incomplete_nethersteel_autocannon_recoil_spring createbigcannons:nethersteel_autocannon_barrel createbigcannons:unbored_nethersteel_autocannon_barrel createbigcannons:very_small_nethersteel_cannon_layer createbigcannons:small_nethersteel_cannon_layer createbigcannons:medium_nethersteel_cannon_layer createbigcannons:large_nethersteel_cannon_layer createbigcannons:very_large_nethersteel_cannon_layer createbigcannons:unbored_very_small_nethersteel_cannon_layer createbigcannons:unbored_small_nethersteel_cannon_layer createbigcannons:unbored_medium_nethersteel_cannon_layer createbigcannons:unbored_large_nethersteel_cannon_layer createbigcannons:unbored_very_large_nethersteel_cannon_layer createbigcannons:nethersteel_cannon_barrel createbigcannons:built_up_nethersteel_cannon_barrel createbigcannons:nethersteel_cannon_chamber createbigcannons:built_up_nethersteel_cannon_chamber createbigcannons:thick_nethersteel_cannon_chamber createcasing:brass_mixer createcasing:brass_press createcasing:brass_depot createcasing:copper_mixer createcasing:copper_press createcasing:copper_depot createcasing:railway_gearbox createcasing:railway_encased_chain_drive createcasing:railway_adjustable_chain_gearshift createcasing:railway_mixer createcasing:railway_press createcasing:railway_depot createcasing:creative_gearbox createcasing:creative_encased_chain_drive createcasing:creative_adjustable_chain_gearshift createcasing:creative_mixer createcasing:creative_press createcasing:creative_depot createcasing:industrial_iron_gearbox createcasing:industrial_iron_encased_chain_drive createcasing:industrial_iron_adjustable_chain_gearshift createcasing:industrial_iron_mixer createcasing:industrial_iron_press createcasing:industrial_iron_depot createdeco:brass_coinstack createdeco:brass_bars createdeco:brass_bars_overlay createdeco:brass_mesh_fence createdeco:brass_hull createdeco:brass_catwalk createdeco:brass_catwalk_stairs createdeco:brass_catwalk_railing createdeco:brass_support_wedge createdeco:brass_support createdeco:brass_sheet_metal createdeco:brass_door createdeco:locked_brass_door createdeco:brass_trapdoor createdeco:red_brass_lamp createdeco:green_brass_lamp createdeco:blue_brass_lamp createdeco:yellow_brass_lamp createdeco:iron_coinstack createdeco:iron_bars createdeco:iron_bars_overlay createdeco:iron_mesh_fence createdeco:iron_hull createdeco:iron_catwalk createdeco:iron_catwalk_stairs createdeco:iron_catwalk_railing createdeco:iron_support_wedge createdeco:iron_support createdeco:iron_sheet_metal createdeco:iron_door createdeco:locked_iron_door createdeco:iron_trapdoor createdeco:red_iron_lamp createdeco:green_iron_lamp createdeco:blue_iron_lamp createdeco:yellow_iron_lamp createdeco:copper_coinstack createdeco:copper_bars createdeco:copper_bars_overlay createdeco:copper_mesh_fence createdeco:copper_hull createdeco:copper_catwalk createdeco:copper_catwalk_stairs createdeco:copper_catwalk_railing createdeco:copper_support_wedge createdeco:copper_support createdeco:copper_sheet_metal createdeco:copper_door createdeco:locked_copper_door createdeco:copper_trapdoor createdeco:red_copper_lamp createdeco:green_copper_lamp createdeco:blue_copper_lamp createdeco:yellow_copper_lamp createdeco:industrial_iron_coinstack createdeco:industrial_iron_bars createdeco:industrial_iron_bars_overlay createdeco:industrial_iron_mesh_fence createdeco:industrial_iron_hull createdeco:industrial_iron_catwalk createdeco:industrial_iron_catwalk_stairs createdeco:industrial_iron_catwalk_railing createdeco:industrial_iron_support_wedge createdeco:industrial_iron_support createdeco:industrial_iron_sheet_metal createdeco:industrial_iron_door createdeco:locked_industrial_iron_door createdeco:industrial_iron_trapdoor createdeco:red_industrial_iron_lamp createdeco:green_industrial_iron_lamp createdeco:blue_industrial_iron_lamp createdeco:yellow_industrial_iron_lamp createdeco:zinc_coinstack createdeco:zinc_bars createdeco:zinc_bars_overlay createdeco:zinc_mesh_fence createdeco:zinc_hull createdeco:zinc_catwalk createdeco:zinc_catwalk_stairs createdeco:zinc_catwalk_railing createdeco:zinc_support_wedge createdeco:zinc_support createdeco:zinc_sheet_metal createdeco:zinc_door createdeco:locked_zinc_door createdeco:zinc_trapdoor createdeco:red_zinc_lamp createdeco:green_zinc_lamp createdeco:blue_zinc_lamp createdeco:yellow_zinc_lamp + block.10400 = iron_block iron_trapdoor gold_block emerald_block lapis_block diamond_block copper_block exposed_copper weathered_copper oxidized_copper cut_copper exposed_cut_copper weathered_cut_copper oxidized_cut_copper cut_copper_stairs exposed_cut_copper_stairs weathered_cut_copper_stairs oxidized_cut_copper_stairs cut_copper_slab exposed_cut_copper_slab weathered_cut_copper_slab oxidized_cut_copper_slab waxed_cut_copper_slab waxed_weathered_cut_copper_slab waxed_weathered_copper waxed_exposed_copper waxed_copper_block waxed_oxidized_cut_copper_slab waxed_weathered_cut_copper_slab waxed_exposed_cut_copper_slab waxed_cuyt_copper_slab waxed_oxidized_copper waxed_cut_copper waxed_exposed_cut_copper waxed_weathered_cut_copper waxed_oxidized_cut_copper waxed_cut_copper_stairs waxed_exposed_cut_copper_stairs waxed_weathered_cut_copper_stairs waxed_oxidized_cut_copper_stairs heavy_weighted_pressure_plate light_weighted_pressure_plate iron_bars copper_bars chain copper_chain tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top tfc:metal/anvil/bismuth_bronze tfc:metal/block/bismuth_bronze tfc:metal/bars/bismuth_bronze tfc:metal/trapdoor/bismuth_bronze tfc:metal/block/bismuth_bronze_stairs tfc:block/metal/block/bismuth_bronze_slab tfc:block/metal/block/bismuth_bronze_slab_top tfc:metal/anvil/black_bronze tfc:metal/block/black_bronze tfc:metal/bars/black_bronze tfc:metal/trapdoor/black_bronze tfc:metal/block/black_bronze_stairs tfc:block/metal/block/black_bronze_slab tfc:block/metal/block/black_bronze_slab_top tfc:metal/anvil/bronze tfc:metal/block/bronze tfc:metal/bars/bronze tfc:metal/trapdoor/bronze tfc:metal/block/bronze_stairs tfc:block/metal/block/bronze_slab tfc:block/metal/block/bronze_slab_top tfc:metal/anvil/brass tfc:metal/block/brass tfc:metal/bars/brass tfc:metal/trapdoor/brass tfc:metal/block/brass_stairs tfc:block/metal/block/brass_slab tfc:block/metal/block/brass_slab_top tfc:metal/anvil/copper tfc:metal/block/copper tfc:metal/bars/copper tfc:metal/trapdoor/copper tfc:metal/block/copper_stairs tfc:block/metal/block/copper_slab tfc:block/metal/block/copper_slab_top tfc:metal/anvil/gold tfc:metal/block/gold tfc:metal/bars/gold tfc:metal/trapdoor/gold tfc:metal/block/gold_stairs tfc:block/metal/block/gold_slab tfc:block/metal/block/gold_slab_top tfc:metal/anvil/nickel tfc:metal/block/nickel tfc:metal/bars/nickel tfc:metal/trapdoor/nickel tfc:metal/block/nickel_stairs tfc:block/metal/block/nickel_slab tfc:block/metal/block/nickel_slab_top tfc:metal/anvil/rose_gold tfc:metal/block/rose_gold tfc:metal/bars/rose_gold tfc:metal/trapdoor/rose_gold tfc:metal/block/rose_gold_stairs tfc:block/metal/block/rose_gold_slab tfc:block/metal/block/rose_gold_slab_top tfc:metal/anvil/silver tfc:metal/block/silver tfc:metal/bars/silver tfc:metal/trapdoor/silver tfc:metal/block/silver_stairs tfc:block/metal/block/silver_slab tfc:block/metal/block/silver_slab_top tfc:metal/anvil/tin tfc:metal/block/tin tfc:metal/bars/tin tfc:metal/trapdoor/tin tfc:metal/block/tin_stairs tfc:block/metal/block/tin_slab tfc:block/metal/block/tin_slab_top tfc:metal/anvil/zinc tfc:metal/block/zinc tfc:metal/bars/zinc tfc:metal/trapdoor/zinc tfc:metal/block/zinc_stairs tfc:block/metal/block/zinc_slab tfc:block/metal/block/zinc_slab_top tfc:metal/anvil/sterling_silver tfc:metal/block/sterling_silver tfc:metal/bars/sterling_silver tfc:metal/trapdoor/sterling_silver tfc:metal/block/sterling_silver_stairs tfc:block/metal/block/sterling_silver_slab tfc:block/metal/block/sterling_silver_slab_top tfc:metal/anvil/wrought_iron tfc:metal/block/wrought_iron tfc:metal/bars/wrought_iron tfc:metal/trapdoor/wrought_iron tfc:metal/block/wrought_iron_stairs tfc:block/metal/block/wrought_iron_slab tfc:block/metal/block/wrought_iron_slab_top tfc:metal/anvil/cast_iron tfc:metal/block/cast_iron tfc:metal/bars/cast_iron tfc:metal/trapdoor/cast_iron tfc:metal/block/cast_iron_stairs tfc:block/metal/block/cast_iron_slab tfc:block/metal/block/cast_iron_slab_top tfc:metal/anvil/pig_iron tfc:metal/block/pig_iron tfc:metal/bars/pig_iron tfc:metal/trapdoor/pig_iron tfc:metal/block/pig_iron_stairs tfc:block/metal/block/pig_iron_slab tfc:block/metal/block/pig_iron_slab_top tfc:metal/anvil/steel tfc:metal/block/steel tfc:metal/bars/steel tfc:metal/trapdoor/steel tfc:metal/block/steel_stairs tfc:block/metal/block/steel_slab tfc:block/metal/block/steel_slab_top tfc:metal/anvil/black_steel tfc:metal/block/black_steel tfc:metal/bars/black_steel tfc:metal/trapdoor/black_steel tfc:metal/block/black_steel_stairs tfc:block/metal/block/black_steel_slab tfc:block/metal/block/black_steel_slab_top tfc:metal/anvil/blue_steel tfc:metal/block/blue_steel tfc:metal/bars/blue_steel tfc:metal/trapdoor/blue_steel tfc:metal/block/blue_steel_stairs tfc:block/metal/block/blue_steel_slab tfc:block/metal/block/blue_steel_slab_top tfc:metal/anvil/red_steel tfc:metal/block/red_steel tfc:metal/bars/red_steel tfc:metal/trapdoor/red_steel tfc:metal/block/red_steel_stairs tfc:block/metal/block/red_steel_slab tfc:block/metal/block/red_steel_slab_top tfc:metal/anvil/weak_steel tfc:metal/block/weak_steel tfc:metal/bars/weak_steel tfc:metal/trapdoor/weak_steel tfc:metal/block/weak_steel_stairs tfc:block/metal/block/weak_steel_slab tfc:block/metal/block/weak_steel_slab_top tfc:metal/anvil/weak_blue_steel tfc:metal/block/weak_blue_steel tfc:metal/bars/weak_blue_steel tfc:metal/trapdoor/weak_blue_steel tfc:metal/block/weak_blue_steel_stairs tfc:block/metal/block/weak_blue_steel_slab tfc:block/metal/block/weak_blue_steel_slab_top tfc:metal/anvil/weak_red_steel tfc:metal/block/weak_red_steel tfc:metal/bars/weak_red_steel tfc:metal/trapdoor/weak_red_steel tfc:metal/block/weak_red_steel_stairs tfc:block/metal/block/weak_red_steel_slab tfc:block/metal/block/weak_red_steel_slab_top tfc:metal/anvil/high_carbon_steel tfc:metal/block/high_carbon_steel tfc:metal/bars/high_carbon_steel tfc:metal/trapdoor/high_carbon_steel tfc:metal/block/high_carbon_steel_stairs tfc:block/metal/block/high_carbon_steel_slab tfc:block/metal/block/high_carbon_steel_slab_top tfc:metal/anvil/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel tfc:metal/bars/high_carbon_black_steel tfc:metal/trapdoor/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel_stairs tfc:block/metal/block/high_carbon_black_steel_slab tfc:block/metal/block/high_carbon_black_steel_slab_top tfc:metal/anvil/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel tfc:metal/bars/high_carbon_blue_steel tfc:metal/trapdoor/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel_stairs tfc:block/metal/block/high_carbon_blue_steel_slab tfc:block/metal/block/high_carbon_blue_steel_slab_top tfc:metal/anvil/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel tfc:metal/bars/high_carbon_red_steel tfc:metal/trapdoor/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel_stairs tfc:block/metal/block/high_carbon_red_steel_slab tfc:block/metal/block/high_carbon_red_steel_slab_top tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top create:copper_ladder create:brass_ladder create:copper_scaffolding create:brass_scaffolding create:brass_block create:copper_bars create:brass_bars create:smart_chute create:fluid_tank create:steam_whistle create:steam_engine create:spout create:hose_pulley create:item_drain create:train_casing create:smart_fluid_pipe create:fluid_pipe create:mechanical_pump create:copper_valve_handle create:fluid_valve create:mechanical_crafter create:sequenced_gearshift create:flywheel create:rotation_speed_controller create:mechanical_arm create:railway_casing create:controls create:brass_funnel create:brass_tunnel create:content_observer create:stockpile_switch create:redstone_link create:pulse_repeater create:pulse_extender create:peculiar_bell create_jetpack:jetpack create_enchantment_industry:printer create_enchantment_industry:disenchanter cataclysm:ancient_metal_block cataclysm:cursium_block cataclysm:enderite_block cataclysm:witherite_block cataclysm:ignitium_block cataclysm:mechanical_fusion_anvil cataclysm:emp cataclysm:black_steel_block create_dd:furnace_engine create_dd:bore_block create_dd:industrial_fan create_dd:hydraulic_press create_dd:item_stockpile create_dd:fluid_reservoir create_dd:dark_metal_block create_dd:dark_metal_plating create_dd:dark_metal_block_slab create_dd:dark_metal_block_stairs create_dd:dark_metal_bricks create_dd:dark_metal_brick_slab create_dd:dark_metal_brick_stairs create:zinc_block create:industrial_iron_block create:train_door create:chute create:item_vault create:haunted_bell minecraft:netherite_block create_jetpack:netherite_jetpack createutilities:void_steel_block createutilities:void_steel_scaffolding createutilities:void_casing createutilities:void_steel_bars createutilities:void_steel_ladder createutilities:void_motor createutilities:void_chest createutilities:void_tank createutilities:void_battery railways:smokestack_caboosestyle railways:smokestack_long railways:smokestack_coalburner railways:smokestack_oilburner railways:smokestack_streamlined railways:smokestack_woodburner railways:fuel_tank railways:portable_fuel_interface create_power_loader:empty_brass_chunk_loader create_power_loader:brass_chunk_loader create_connected:empty_fan_catalyst create_connected:fan_blasting_catalyst create_connected:fan_smoking_catalyst create_connected:fan_splashing_catalyst create_connected:fan_haunting_catalyst create_connected:sequenced_pulse_generator create_connected:item_silo create_things_and_misc:card_reader create_things_and_misc:card_press create_things_and_misc:sprinkler create_things_and_misc:brass_tiles create_things_and_misc:brass_tiles_slab create_things_and_misc:brass_tiles_stair create_things_and_misc:brass_bricks create_things_and_misc:brass_brick_slab create_things_and_misc:brass_brick_stairs vintageimprovements:vanadium_block createcasing:brass_shaft createcasing:creative_casing create_dd:stargaze_singularity_scaffolding create_dd:stargaze_singularity_block create_dd:stargaze_singularity_casing create_dd:mithril_scaffolding create_dd:mithril_block create_dd:mithril_casing create_dd:bronze_scaffolding create_dd:bronze_block create_dd:bronze_casing create_dd:steel_scaffolding create_dd:steel_block create_dd:steel_casing create_dd:industrial_iron_block create_dd:industrial_casing create_dd:tin_scaffolding create_dd:tin_block create_dd:chromatic_block create_dd:refined_radiance_scaffolding create_dd:refined_radiance_block create_dd:refined_radiance_casing create_dd:shadow_steel_scaffolding create_dd:shadow_steel_block create_dd:shadow_steel_casing create_dd:blaze_gold_scaffolding create_dd:blaze_gold_block create_dd:blaze_gold_casing create_dd:hydraulic_scaffolding create_dd:hydraulic_casing create_dd:overburden_scaffolding create_dd:overburden_casing create_dd:train_scaffolding create_dd:zinc_scaffolding create_dd:industrial_scaffolding create_dd:netherite_scaffolding create_dd:bronze_saw create_dd:bronze_drill createbigcannons:big_cartridge createbigcannons:cast_iron_block createbigcannons:nethersteel_block createbigcannons:basin_foundry_lid createbigcannons:wrought_iron_drop_mortar_end createbigcannons:wrought_iron_cannon_end createbigcannons:wrought_iron_cannon_chamber create_dd:flywheel railways:slashed_locometal railways:riveted_locometal railways:locometal_pillar railways:locometal_smokebox railways:plated_locometal railways:flat_slashed_locometal railways:flat_riveted_locometal railways:brass_wrapped_locometal railways:copper_wrapped_locometal railways:iron_wrapped_locometal railways:locometal_boiler railways:brass_wrapped_locometal_boiler railways:copper_wrapped_locometal_boiler railways:iron_wrapped_locometal_boiler railways:white_slashed_locometal railways:white_riveted_locometal railways:white_locometal_pillar railways:white_locometal_smokebox railways:white_plated_locometal railways:white_flat_slashed_locometal railways:white_flat_riveted_locometal railways:white_brass_wrapped_locometal railways:white_copper_wrapped_locometal railways:white_iron_wrapped_locometal railways:white_locometal_boiler railways:white_brass_wrapped_locometal_boiler railways:white_copper_wrapped_locometal_boiler railways:white_iron_wrapped_locometal_boiler railways:light_gray_slashed_locometal railways:light_gray_riveted_locometal railways:light_gray_locometal_pillar railways:light_gray_locometal_smokebox railways:light_gray_plated_locometal railways:light_gray_flat_slashed_locometal railways:light_gray_flat_riveted_locometal railways:light_gray_brass_wrapped_locometal railways:light_gray_copper_wrapped_locometal railways:light_gray_iron_wrapped_locometal railways:light_gray_locometal_boiler railways:light_gray_brass_wrapped_locometal_boiler railways:light_gray_copper_wrapped_locometal_boiler railways:light_gray_iron_wrapped_locometal_boiler railways:gray_slashed_locometal railways:gray_riveted_locometal railways:gray_locometal_pillar railways:gray_locometal_smokebox railways:gray_plated_locometal railways:gray_flat_slashed_locometal railways:gray_flat_riveted_locometal railways:gray_brass_wrapped_locometal railways:gray_copper_wrapped_locometal railways:gray_iron_wrapped_locometal railways:gray_locometal_boiler railways:gray_brass_wrapped_locometal_boiler railways:gray_copper_wrapped_locometal_boiler railways:gray_iron_wrapped_locometal_boiler railways:black_slashed_locometal railways:black_riveted_locometal railways:black_locometal_pillar railways:black_locometal_smokebox railways:black_plated_locometal railways:black_flat_slashed_locometal railways:black_flat_riveted_locometal railways:black_brass_wrapped_locometal railways:black_copper_wrapped_locometal railways:black_iron_wrapped_locometal railways:black_locometal_boiler railways:black_brass_wrapped_locometal_boiler railways:black_copper_wrapped_locometal_boiler railways:black_iron_wrapped_locometal_boiler railways:brown_slashed_locometal railways:brown_riveted_locometal railways:brown_locometal_pillar railways:brown_locometal_smokebox railways:brown_plated_locometal railways:brown_flat_slashed_locometal railways:brown_flat_riveted_locometal railways:brown_brass_wrapped_locometal railways:brown_copper_wrapped_locometal railways:brown_iron_wrapped_locometal railways:brown_locometal_boiler railways:brown_brass_wrapped_locometal_boiler railways:brown_copper_wrapped_locometal_boiler railways:brown_iron_wrapped_locometal_boiler railways:red_slashed_locometal railways:red_riveted_locometal railways:red_locometal_pillar railways:red_locometal_smokebox railways:red_plated_locometal railways:red_flat_slashed_locometal railways:red_flat_riveted_locometal railways:red_brass_wrapped_locometal railways:red_copper_wrapped_locometal railways:red_iron_wrapped_locometal railways:red_locometal_boiler railways:red_brass_wrapped_locometal_boiler railways:red_copper_wrapped_locometal_boiler railways:red_iron_wrapped_locometal_boiler railways:orange_slashed_locometal railways:orange_riveted_locometal railways:orange_locometal_pillar railways:orange_locometal_smokebox railways:orange_plated_locometal railways:orange_flat_slashed_locometal railways:orange_flat_riveted_locometal railways:orange_brass_wrapped_locometal railways:orange_copper_wrapped_locometal railways:orange_iron_wrapped_locometal railways:orange_locometal_boiler railways:orange_brass_wrapped_locometal_boiler railways:orange_copper_wrapped_locometal_boiler railways:orange_iron_wrapped_locometal_boiler railways:yellow_slashed_locometal railways:yellow_riveted_locometal railways:yellow_locometal_pillar railways:yellow_locometal_smokebox railways:yellow_plated_locometal railways:yellow_flat_slashed_locometal railways:yellow_flat_riveted_locometal railways:yellow_brass_wrapped_locometal railways:yellow_copper_wrapped_locometal railways:yellow_iron_wrapped_locometal railways:yellow_locometal_boiler railways:yellow_brass_wrapped_locometal_boiler railways:yellow_copper_wrapped_locometal_boiler railways:yellow_iron_wrapped_locometal_boiler railways:lime_slashed_locometal railways:lime_riveted_locometal railways:lime_locometal_pillar railways:lime_locometal_smokebox railways:lime_plated_locometal railways:lime_flat_slashed_locometal railways:lime_flat_riveted_locometal railways:lime_brass_wrapped_locometal railways:lime_copper_wrapped_locometal railways:lime_iron_wrapped_locometal railways:lime_locometal_boiler railways:lime_brass_wrapped_locometal_boiler railways:lime_copper_wrapped_locometal_boiler railways:lime_iron_wrapped_locometal_boiler railways:green_slashed_locometal railways:green_riveted_locometal railways:green_locometal_pillar railways:green_locometal_smokebox railways:green_plated_locometal railways:green_flat_slashed_locometal railways:green_flat_riveted_locometal railways:green_brass_wrapped_locometal railways:green_copper_wrapped_locometal railways:green_iron_wrapped_locometal railways:green_locometal_boiler railways:green_brass_wrapped_locometal_boiler railways:green_copper_wrapped_locometal_boiler railways:green_iron_wrapped_locometal_boiler railways:cyan_slashed_locometal railways:cyan_riveted_locometal railways:cyan_locometal_pillar railways:cyan_locometal_smokebox railways:cyan_plated_locometal railways:cyan_flat_slashed_locometal railways:cyan_flat_riveted_locometal railways:cyan_brass_wrapped_locometal railways:cyan_copper_wrapped_locometal railways:cyan_iron_wrapped_locometal railways:cyan_locometal_boiler railways:cyan_brass_wrapped_locometal_boiler railways:cyan_copper_wrapped_locometal_boiler railways:cyan_iron_wrapped_locometal_boiler railways:light_blue_slashed_locometal railways:light_blue_riveted_locometal railways:light_blue_locometal_pillar railways:light_blue_locometal_smokebox railways:light_blue_plated_locometal railways:light_blue_flat_slashed_locometal railways:light_blue_flat_riveted_locometal railways:light_blue_brass_wrapped_locometal railways:light_blue_copper_wrapped_locometal railways:light_blue_iron_wrapped_locometal railways:light_blue_locometal_boiler railways:light_blue_brass_wrapped_locometal_boiler railways:light_blue_copper_wrapped_locometal_boiler railways:light_blue_iron_wrapped_locometal_boiler railways:blue_slashed_locometal railways:blue_riveted_locometal railways:blue_locometal_pillar railways:blue_locometal_smokebox railways:blue_plated_locometal railways:blue_flat_slashed_locometal railways:blue_flat_riveted_locometal railways:blue_brass_wrapped_locometal railways:blue_copper_wrapped_locometal railways:blue_iron_wrapped_locometal railways:blue_locometal_boiler railways:blue_brass_wrapped_locometal_boiler railways:blue_copper_wrapped_locometal_boiler railways:blue_iron_wrapped_locometal_boiler railways:purple_slashed_locometal railways:purple_riveted_locometal railways:purple_locometal_pillar railways:purple_locometal_smokebox railways:purple_plated_locometal railways:purple_flat_slashed_locometal railways:purple_flat_riveted_locometal railways:purple_brass_wrapped_locometal railways:purple_copper_wrapped_locometal railways:purple_iron_wrapped_locometal railways:purple_locometal_boiler railways:purple_brass_wrapped_locometal_boiler railways:purple_copper_wrapped_locometal_boiler railways:purple_iron_wrapped_locometal_boiler railways:magenta_slashed_locometal railways:magenta_riveted_locometal railways:magenta_locometal_pillar railways:magenta_locometal_smokebox railways:magenta_plated_locometal railways:magenta_flat_slashed_locometal railways:magenta_flat_riveted_locometal railways:magenta_brass_wrapped_locometal railways:magenta_copper_wrapped_locometal railways:magenta_iron_wrapped_locometal railways:magenta_locometal_boiler railways:magenta_brass_wrapped_locometal_boiler railways:magenta_copper_wrapped_locometal_boiler railways:magenta_iron_wrapped_locometal_boiler railways:pink_slashed_locometal railways:pink_riveted_locometal railways:pink_locometal_pillar railways:pink_locometal_smokebox railways:pink_plated_locometal railways:pink_flat_slashed_locometal railways:pink_flat_riveted_locometal railways:pink_brass_wrapped_locometal railways:pink_copper_wrapped_locometal railways:pink_iron_wrapped_locometal railways:pink_locometal_boiler railways:pink_brass_wrapped_locometal_boiler railways:pink_copper_wrapped_locometal_boiler railways:pink_iron_wrapped_locometal_boiler create:copper_shingles create:copper_shingle_stairs create:copper_shingle_slab create:waxed_copper_shingles create:waxed_copper_shingle_stairs create:waxed_copper_shingle_slab create:exposed_copper_shingles create:exposed_copper_shingle_stairs create:exposed_copper_shingle_slab create:waxed_exposed_copper_shingles create:waxed_exposed_copper_shingle_stairs create:waxed_exposed_copper_shingle_slab create:weathered_copper_shingles create:weathered_copper_shingle_stairs create:weathered_copper_shingle_slab create:waxed_weathered_copper_shingles create:waxed_weathered_copper_shingle_stairs create:waxed_weathered_copper_shingle_slab create:oxidized_copper_shingles create:oxidized_copper_shingle_stairs create:oxidized_copper_shingle_slab create:waxed_oxidized_copper_shingles create:waxed_oxidized_copper_shingle_stairs create:waxed_oxidized_copper_shingle_slab create:copper_tiles create:copper_tile_stairs create:copper_tile_slab create:waxed_copper_tiles create:waxed_copper_tile_stairs create:waxed_copper_tile_slab create:exposed_copper_tiles create:exposed_copper_tile_stairs create:exposed_copper_tile_slab create:waxed_exposed_copper_tiles create:waxed_exposed_copper_tile_stairs create:waxed_exposed_copper_tile_slab create:weathered_copper_tiles create:weathered_copper_tile_stairs create:weathered_copper_tile_slab create:waxed_weathered_copper_tiles create:waxed_weathered_copper_tile_stairs create:waxed_weathered_copper_tile_slab create:oxidized_copper_tiles create:oxidized_copper_tile_stairs create:oxidized_copper_tile_slab create:waxed_oxidized_copper_tiles create:waxed_oxidized_copper_tile_stairs create:waxed_oxidized_copper_tile_slab create_dd:steel_polished_block create_dd:steel_polished_stairs create_dd:steel_polished_slab create_dd:steel_tiled_block create_dd:steel_tiled_stairs create_dd:steel_tiled_slab create_dd:zinc_polished_block create_dd:zinc_polished_stairs create_dd:zinc_polished_slab create_dd:zinc_tiled_block create_dd:zinc_tiled_stairs create_dd:zinc_tiled_slab create_dd:bronze_polished_block create_dd:bronze_polished_stairs create_dd:bronze_polished_slab create_dd:bronze_tiled_block create_dd:bronze_tiled_stairs create_dd:bronze_tiled_slab createbigcannons:cast_iron_sliding_breech createbigcannons:unbored_cast_iron_sliding_breech createbigcannons:incomplete_cast_iron_sliding_breech createbigcannons:cast_iron_quickfiring_breech createbigcannons:cast_iron_screw_breech createbigcannons:unbored_cast_iron_screw_breech createbigcannons:incomplete_cast_iron_screw_breech createbigcannons:cast_iron_cannon_end createbigcannons:cast_iron_autocannon_breech createbigcannons:unbored_cast_iron_autocannon_breech createbigcannons:incomplete_cast_iron_autocannon_breech createbigcannons:cast_iron_autocannon_recoil_spring createbigcannons:unbored_cast_iron_autocannon_recoil_spring createbigcannons:incomplete_cast_iron_autocannon_recoil_spring createbigcannons:cast_iron_autocannon_barrel createbigcannons:unbored_cast_iron_autocannon_barrel createbigcannons:very_small_cast_iron_cannon_layer createbigcannons:small_cast_iron_cannon_layer createbigcannons:medium_cast_iron_cannon_layer createbigcannons:large_cast_iron_cannon_layer createbigcannons:very_large_cast_iron_cannon_layer createbigcannons:unbored_very_small_cast_iron_cannon_layer createbigcannons:unbored_small_cast_iron_cannon_layer createbigcannons:unbored_medium_cast_iron_cannon_layer createbigcannons:unbored_large_cast_iron_cannon_layer createbigcannons:unbored_very_large_cast_iron_cannon_layer createbigcannons:cast_iron_cannon_barrel createbigcannons:built_up_cast_iron_cannon_barrel createbigcannons:cast_iron_cannon_chamber createbigcannons:built_up_cast_iron_cannon_chamber createbigcannons:thick_cast_iron_cannon_chamber createbigcannons:bronze_sliding_breech createbigcannons:unbored_bronze_sliding_breech createbigcannons:incomplete_bronze_sliding_breech createbigcannons:bronze_quickfiring_breech createbigcannons:bronze_screw_breech createbigcannons:unbored_bronze_screw_breech createbigcannons:incomplete_bronze_screw_breech createbigcannons:bronze_cannon_end createbigcannons:bronze_autocannon_breech createbigcannons:unbored_bronze_autocannon_breech createbigcannons:incomplete_bronze_autocannon_breech createbigcannons:bronze_autocannon_recoil_spring createbigcannons:unbored_bronze_autocannon_recoil_spring createbigcannons:incomplete_bronze_autocannon_recoil_spring createbigcannons:bronze_autocannon_barrel createbigcannons:unbored_bronze_autocannon_barrel createbigcannons:very_small_bronze_cannon_layer createbigcannons:small_bronze_cannon_layer createbigcannons:medium_bronze_cannon_layer createbigcannons:large_bronze_cannon_layer createbigcannons:very_large_bronze_cannon_layer createbigcannons:unbored_very_small_bronze_cannon_layer createbigcannons:unbored_small_bronze_cannon_layer createbigcannons:unbored_medium_bronze_cannon_layer createbigcannons:unbored_large_bronze_cannon_layer createbigcannons:unbored_very_large_bronze_cannon_layer createbigcannons:bronze_cannon_barrel createbigcannons:built_up_bronze_cannon_barrel createbigcannons:bronze_cannon_chamber createbigcannons:built_up_bronze_cannon_chamber createbigcannons:thick_bronze_cannon_chamber createbigcannons:steel_sliding_breech createbigcannons:unbored_steel_sliding_breech createbigcannons:incomplete_steel_sliding_breech createbigcannons:steel_quickfiring_breech createbigcannons:steel_screw_breech createbigcannons:unbored_steel_screw_breech createbigcannons:incomplete_steel_screw_breech createbigcannons:steel_cannon_end createbigcannons:steel_autocannon_breech createbigcannons:unbored_steel_autocannon_breech createbigcannons:incomplete_steel_autocannon_breech createbigcannons:steel_autocannon_recoil_spring createbigcannons:unbored_steel_autocannon_recoil_spring createbigcannons:incomplete_steel_autocannon_recoil_spring createbigcannons:steel_autocannon_barrel createbigcannons:unbored_steel_autocannon_barrel createbigcannons:very_small_steel_cannon_layer createbigcannons:small_steel_cannon_layer createbigcannons:medium_steel_cannon_layer createbigcannons:large_steel_cannon_layer createbigcannons:very_large_steel_cannon_layer createbigcannons:unbored_very_small_steel_cannon_layer createbigcannons:unbored_small_steel_cannon_layer createbigcannons:unbored_medium_steel_cannon_layer createbigcannons:unbored_large_steel_cannon_layer createbigcannons:unbored_very_large_steel_cannon_layer createbigcannons:steel_cannon_barrel createbigcannons:built_up_steel_cannon_barrel createbigcannons:steel_cannon_chamber createbigcannons:built_up_steel_cannon_chamber createbigcannons:thick_steel_cannon_chamber createbigcannons:nethersteel_sliding_breech createbigcannons:unbored_nethersteel_sliding_breech createbigcannons:incomplete_nethersteel_sliding_breech createbigcannons:nethersteel_quickfiring_breech createbigcannons:nethersteel_screw_breech createbigcannons:unbored_nethersteel_screw_breech createbigcannons:incomplete_nethersteel_screw_breech createbigcannons:nethersteel_cannon_end createbigcannons:nethersteel_autocannon_breech createbigcannons:unbored_nethersteel_autocannon_breech createbigcannons:incomplete_nethersteel_autocannon_breech createbigcannons:nethersteel_autocannon_recoil_spring createbigcannons:unbored_nethersteel_autocannon_recoil_spring createbigcannons:incomplete_nethersteel_autocannon_recoil_spring createbigcannons:nethersteel_autocannon_barrel createbigcannons:unbored_nethersteel_autocannon_barrel createbigcannons:very_small_nethersteel_cannon_layer createbigcannons:small_nethersteel_cannon_layer createbigcannons:medium_nethersteel_cannon_layer createbigcannons:large_nethersteel_cannon_layer createbigcannons:very_large_nethersteel_cannon_layer createbigcannons:unbored_very_small_nethersteel_cannon_layer createbigcannons:unbored_small_nethersteel_cannon_layer createbigcannons:unbored_medium_nethersteel_cannon_layer createbigcannons:unbored_large_nethersteel_cannon_layer createbigcannons:unbored_very_large_nethersteel_cannon_layer createbigcannons:nethersteel_cannon_barrel createbigcannons:built_up_nethersteel_cannon_barrel createbigcannons:nethersteel_cannon_chamber createbigcannons:built_up_nethersteel_cannon_chamber createbigcannons:thick_nethersteel_cannon_chamber createcasing:brass_mixer createcasing:brass_press createcasing:brass_depot createcasing:copper_mixer createcasing:copper_press createcasing:copper_depot createcasing:railway_gearbox createcasing:railway_encased_chain_drive createcasing:railway_adjustable_chain_gearshift createcasing:railway_mixer createcasing:railway_press createcasing:railway_depot createcasing:creative_gearbox createcasing:creative_encased_chain_drive createcasing:creative_adjustable_chain_gearshift createcasing:creative_mixer createcasing:creative_press createcasing:creative_depot createcasing:industrial_iron_gearbox createcasing:industrial_iron_encased_chain_drive createcasing:industrial_iron_adjustable_chain_gearshift createcasing:industrial_iron_mixer createcasing:industrial_iron_press createcasing:industrial_iron_depot createdeco:brass_coinstack createdeco:brass_bars createdeco:brass_bars_overlay createdeco:brass_mesh_fence createdeco:brass_hull createdeco:brass_catwalk createdeco:brass_catwalk_stairs createdeco:brass_catwalk_railing createdeco:brass_support_wedge createdeco:brass_support createdeco:brass_sheet_metal createdeco:brass_door createdeco:locked_brass_door createdeco:brass_trapdoor createdeco:red_brass_lamp createdeco:green_brass_lamp createdeco:blue_brass_lamp createdeco:yellow_brass_lamp createdeco:iron_coinstack createdeco:iron_bars createdeco:iron_bars_overlay createdeco:iron_mesh_fence createdeco:iron_hull createdeco:iron_catwalk createdeco:iron_catwalk_stairs createdeco:iron_catwalk_railing createdeco:iron_support_wedge createdeco:iron_support createdeco:iron_sheet_metal createdeco:iron_door createdeco:locked_iron_door createdeco:iron_trapdoor createdeco:red_iron_lamp createdeco:green_iron_lamp createdeco:blue_iron_lamp createdeco:yellow_iron_lamp createdeco:copper_coinstack createdeco:copper_bars createdeco:copper_bars_overlay createdeco:copper_mesh_fence createdeco:copper_hull createdeco:copper_catwalk createdeco:copper_catwalk_stairs createdeco:copper_catwalk_railing createdeco:copper_support_wedge createdeco:copper_support createdeco:copper_sheet_metal createdeco:copper_door createdeco:locked_copper_door createdeco:copper_trapdoor createdeco:red_copper_lamp createdeco:green_copper_lamp createdeco:blue_copper_lamp createdeco:yellow_copper_lamp createdeco:industrial_iron_coinstack createdeco:industrial_iron_bars createdeco:industrial_iron_bars_overlay createdeco:industrial_iron_mesh_fence createdeco:industrial_iron_hull createdeco:industrial_iron_catwalk createdeco:industrial_iron_catwalk_stairs createdeco:industrial_iron_catwalk_railing createdeco:industrial_iron_support_wedge createdeco:industrial_iron_support createdeco:industrial_iron_sheet_metal createdeco:industrial_iron_door createdeco:locked_industrial_iron_door createdeco:industrial_iron_trapdoor createdeco:red_industrial_iron_lamp createdeco:green_industrial_iron_lamp createdeco:blue_industrial_iron_lamp createdeco:yellow_industrial_iron_lamp createdeco:zinc_coinstack createdeco:zinc_bars createdeco:zinc_bars_overlay createdeco:zinc_mesh_fence createdeco:zinc_hull createdeco:zinc_catwalk createdeco:zinc_catwalk_stairs createdeco:zinc_catwalk_railing createdeco:zinc_support_wedge createdeco:zinc_support createdeco:zinc_sheet_metal createdeco:zinc_door createdeco:locked_zinc_door createdeco:zinc_trapdoor createdeco:red_zinc_lamp createdeco:green_zinc_lamp createdeco:blue_zinc_lamp createdeco:yellow_zinc_lamp # SAND-LIKE block.10410 = sand red_sand dirt_path gravel suspicious_gravel suspicious_sand white_concrete_powder light_gray_concrete_powder gray_concrete_powder black_concrete_powder brown_concrete_powder red_concrete_powder orange_concrete_powder yellow_concrete_powder lime_concrete_powder green_concrete_powder cyan_concrete_powder light_blue_concrete_powder blue_concrete_powder purple_concrete_powder magenta_concrete_powder pink_concrete_powder coarse_dirt diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index 88b74285..4a797af2 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -55,7 +55,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define AO 1 // [0 1] Turn on for enhanced ambient occlusion (medium performance cost). #define AOSTEPS 4 // [4 5 6 7 8 9 10 11] How many samples are taken for AO (high performance cost). #define AO_STRENGTH 0.70 // [0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.66 0.70 0.75 0.80 0.85] Ambient occlusion strength (strength NOT affect performance). -#define AA_TYPE 2 // [0 1 2 3] No: Disable antialiasing (not recommended). Denoise only: Supersampling is only used to eliminate noise. TAA: Enable antialiasing. TAA+: Use FXAA to improve the result of TAA. It does not apply if chromatic aberration or DoF is being used. +#define AA_TYPE 3 // [0 1 2 3] No: Disable antialiasing (not recommended). Denoise only: Supersampling is only used to eliminate noise. TAA: Enable antialiasing. TAA+: Use FXAA to improve the result of TAA. It does not apply if chromatic aberration or DoF is being used. //#define MOTION_BLUR // Turn on motion blur #define MOTION_BLUR_STRENGTH 1.0 // [0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0] Set Motion blur strength. Lower framerate -> Lower strength and vice versa is recommended. #define MOTION_BLUR_SAMPLES 4 // [3 4 5 6 7 8] Motion blur samples diff --git a/shaders/lib/fast_taa.glsl b/shaders/lib/fast_taa.glsl index 07081154..7f74e130 100644 --- a/shaders/lib/fast_taa.glsl +++ b/shaders/lib/fast_taa.glsl @@ -107,68 +107,6 @@ float fast_edge_detector(vec3 current_color, vec3 left, vec3 right, vec3 up, vec return smoothstep(0.25, 0.75, edge); } -// float line_detector(vec3 center, vec3 up, vec3 down, vec3 left, vec3 right, vec3 ul, vec3 ur, vec3 dl, vec3 dr) { -// const float epsilon = 0.0001; - -// // Umbral de la fuerza relativa. Por ejemplo, 0.2 significa que una línea -// // debe ser al menos un 20% más brillante u oscura que su entorno para ser considerada. -// // Este valor es ahora mucho más intuitivo y funciona en distintas iluminaciones. -// const float relative_threshold = 0.01; - -// // Suavidad de la transición. Controla qué tan rápido el resaltado -// // pasa de 0 a 1 una vez que se supera el umbral. -// const float smoothness = 0.15; - -// float c = luma(center); -// float t = luma(up); -// float b = luma(down); -// float l = luma(left); -// float r = luma(right); -// float tl = luma(ul); -// float tr = luma(ur); -// float bl = luma(dl); -// float br = luma(dr); - -// // --- Cálculo de "linealidad" relativa para cada dirección --- -// float lineness_h = 0.0, lineness_v = 0.0, lineness_d1 = 0.0, lineness_d2 = 0.0; - -// // 1. Línea Horizontal -// if ((c > t && c > b) || (c < t && c < b)) { -// float strength = min(abs(c - t) / (t + epsilon), abs(c - b) / (b + epsilon)); -// float penalty = (abs(c - l) + abs(c - r)) / (c + epsilon); -// lineness_h = strength - penalty; -// } - -// // 2. Línea Vertical -// if ((c > l && c > r) || (c < l && c < r)) { -// float strength = min(abs(c - l) / (l + epsilon), abs(c - r) / (r + epsilon)); -// float penalty = (abs(c - t) + abs(c - b)) / (c + epsilon); -// lineness_v = strength - penalty; -// } - -// // 3. Línea Diagonal (\) -// if ((c > tr && c > bl) || (c < tr && c < bl)) { -// float strength = min(abs(c - tr) / (tr + epsilon), abs(c - bl) / (bl + epsilon)); -// float penalty = (abs(c - tl) + abs(c - br)) / (c + epsilon); -// lineness_d1 = strength - penalty; -// } - -// // 4. Línea Diagonal (/) -// if ((c > tl && c > br) || (c < tl && c < br)) { -// float strength = min(abs(c - tl) / (tl + epsilon), abs(c - br) / (br + epsilon)); -// float penalty = (abs(c - tr) + abs(c - bl)) / (c + epsilon); -// lineness_d2 = strength - penalty; -// } - -// // --- Puntuación final y color de salida --- - -// // Tomamos la máxima puntuación y nos aseguramos de que no sea negativa. -// float max_lineness = max(0.0, max(lineness_h, max(lineness_v, max(lineness_d1, lineness_d2)))); - -// // `smoothstep` usa nuestro umbral relativo para crear una transición suave. -// return smoothstep(relative_threshold, relative_threshold + smoothness, max_lineness); -// } - float line_detector(vec3 center, vec3 up, vec3 down, vec3 left, vec3 right, vec3 ul, vec3 ur, vec3 dl, vec3 dr) { const float epsilon = 0.0001; const float relative_threshold = 0.01; diff --git a/shaders/shaders.properties b/shaders/shaders.properties index a3dd7685..1e049c54 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -6,7 +6,7 @@ profile.shadowless_low= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_S profile.shadowless_medium= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS profile.shadowless_high= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS From 570e7c714e7ffd6379bacec1ca8f6a66694cd2d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Tue, 12 Aug 2025 01:57:54 -0600 Subject: [PATCH 068/147] Bluenoise RG --- shaders/common/final_fragment.glsl | 2 +- shaders/shaders.properties | 1 + shaders/textures/bluenoise_RG_64.png | Bin 0 -> 11372 bytes shaders/textures/bluenoise_RG_64.png.mcmeta | 7 +++++++ 4 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 shaders/textures/bluenoise_RG_64.png create mode 100644 shaders/textures/bluenoise_RG_64.png.mcmeta diff --git a/shaders/common/final_fragment.glsl b/shaders/common/final_fragment.glsl index 1f9d45a2..90113fd7 100644 --- a/shaders/common/final_fragment.glsl +++ b/shaders/common/final_fragment.glsl @@ -14,7 +14,7 @@ gaux3 - Exposure auxiliar gaux4 - Fog auxiliar const int noisetexFormat = RG8; -const int colortex0Format = R8; +const int colortex0Format = RG8; */ #ifdef DOF /* diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 1e049c54..fb89a2ff 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -37,6 +37,7 @@ texture.gbuffers.noisetex = textures/water_256_RG_8bit.png texture.deferred.gaux2 = textures/clouds_blocky_512_R_8bit.png #endif +texture.gbuffers.colortex0 = textures/bluenoise_RG_64.png # texture.deferred.colortex0 = textures/bluenoise_64.png program.shadow.enabled=SHADOW_CASTING diff --git a/shaders/textures/bluenoise_RG_64.png b/shaders/textures/bluenoise_RG_64.png new file mode 100644 index 0000000000000000000000000000000000000000..be7c8f756d7b6e8bbb0f2f30b4e33fbc36cc08ec GIT binary patch literal 11372 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 Ows%+L&PUr(CI1fv+UQ9D literal 0 HcmV?d00001 diff --git a/shaders/textures/bluenoise_RG_64.png.mcmeta b/shaders/textures/bluenoise_RG_64.png.mcmeta new file mode 100644 index 00000000..193e38ee --- /dev/null +++ b/shaders/textures/bluenoise_RG_64.png.mcmeta @@ -0,0 +1,7 @@ +{ + "texture": + { + "blur": false, + "clamp": false + } +} From f5bfbc36786e4fca9778364701c2b829433e1a4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 16 Aug 2025 16:10:32 -0600 Subject: [PATCH 069/147] Nether fog & clamps de salida --- shaders/common/composite1_fragment.glsl | 1 + shaders/common/composite2_fragment.glsl | 2 +- shaders/common/composite_fragment.glsl | 2 ++ shaders/common/deferred_fragment.glsl | 1 + shaders/common/solid_blocks_fragment.glsl | 2 +- shaders/lib/config.glsl | 2 +- shaders/src/writebuffers.glsl | 4 ++++ 7 files changed, 11 insertions(+), 3 deletions(-) diff --git a/shaders/common/composite1_fragment.glsl b/shaders/common/composite1_fragment.glsl index 78536bc7..6aa88ee9 100644 --- a/shaders/common/composite1_fragment.glsl +++ b/shaders/common/composite1_fragment.glsl @@ -61,6 +61,7 @@ void main() { block_color.rgb += bloom; #endif + block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); /* DRAWBUFFERS:1 */ gl_FragData[0] = block_color; } diff --git a/shaders/common/composite2_fragment.glsl b/shaders/common/composite2_fragment.glsl index 4f26780c..0edc2f0c 100644 --- a/shaders/common/composite2_fragment.glsl +++ b/shaders/common/composite2_fragment.glsl @@ -102,11 +102,11 @@ void main() { #endif block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); - /* DRAWBUFFERS:13 */ gl_FragData[0] = block_color; // colortex1 gl_FragData[1] = block_color; // To TAA averages #else + block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); /* DRAWBUFFERS:1 */ gl_FragData[0] = block_color; // colortex1 #endif diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index e691e56c..bbc96f2f 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -227,11 +227,13 @@ void main() { // Bloom source float bloom_luma = smoothstep(0.85, 1.0, luma(block_color.rgb * exposure)) * 0.5; + block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); /* DRAWBUFFERS:146 */ gl_FragData[0] = block_color; gl_FragData[1] = block_color * bloom_luma; gl_FragData[2] = vec4(exposure, 0.0, 0.0, 0.0); #else + block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); /* DRAWBUFFERS:16 */ gl_FragData[0] = block_color; gl_FragData[1] = vec4(exposure, 0.0, 0.0, 0.0); diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index f0fde891..439bc7b7 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -193,6 +193,7 @@ void main() { } } + block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); /* DRAWBUFFERS:14 */ gl_FragData[0] = vec4(block_color.rgb, d); gl_FragData[1] = block_color; diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 2be33330..668a4077 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -225,7 +225,7 @@ void main() { block_color.rgb *= 1.5; #endif - block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); + // block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); #include "/src/finalcolor.glsl" #include "/src/writebuffers.glsl" diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index 4a797af2..a9d03cb4 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -45,7 +45,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #endif #define FOG_ACTIVE // Toggle fog -#define NETHER_FOG_DISTANCE 0 // [0 1] // Sets Nether fog distance to half of the render distance (maximum of 96 blocks) +#define NETHER_FOG_DISTANCE 1 // [0 1] // Sets Nether fog distance to half of the render distance (maximum of 96 blocks) #define ACERCADE 0 // [0] #define WAVING 1 // [0 1] Makes objects like leaves or grass move in the wind #define TINTED_WATER 1 // [0 1] Use the resource pack color for water. diff --git a/shaders/src/writebuffers.glsl b/shaders/src/writebuffers.glsl index 8937166e..a930ab93 100644 --- a/shaders/src/writebuffers.glsl +++ b/shaders/src/writebuffers.glsl @@ -1,4 +1,5 @@ #ifdef WATER_F + block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); /* DRAWBUFFERS:1 */ gl_FragData[0] = block_color; #elif (defined SPECIAL_TRANS && MC_VERSION >= 11300) || defined GBUFFER_HAND_WATER @@ -7,14 +8,17 @@ #else #if defined SET_FOG_COLOR /* DRAWBUFFERS:17 */ + block_color = clamp(block_color, vec3(0.0), vec3(50.0)); gl_FragData[0] = vec4(block_color, 1.0); gl_FragData[1] = vec4(block_color, 1.0); #elif MC_VERSION < 11604 && defined GBUFFER_SKYBASIC /* DRAWBUFFERS:17 */ + block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); gl_FragData[0] = block_color; gl_FragData[1] = block_color; #else /* DRAWBUFFERS:1 */ + block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); gl_FragData[0] = block_color; #endif #endif From 1e9ee3cbb91a34ca66e95b160afe972e4294f152 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sun, 17 Aug 2025 03:09:39 -0600 Subject: [PATCH 070/147] Normalized subposition3 --- shaders/common/solid_blocks_fragment.glsl | 4 ++-- shaders/common/solid_blocks_vertex.glsl | 4 ++-- shaders/lib/dither.glsl | 9 +++++++++ shaders/lib/mu_ftransform.glsl | 2 +- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 668a4077..920f6aef 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -89,7 +89,7 @@ varying vec3 omni_light; #if defined MATERIAL_GLOSS && !defined NETHER varying vec3 flat_normal; - varying vec3 sub_position3; + varying vec3 sub_position3_normalized; varying vec2 lmcoord_alt; varying float gloss_factor; varying float gloss_power; @@ -195,7 +195,7 @@ void main() { block_luma = pow(block_luma, luma_power); } - float material_gloss_factor = material_gloss(reflect(normalize(sub_position3), flat_normal), lmcoord_alt, final_gloss_power, flat_normal) * gloss_factor; + float material_gloss_factor = material_gloss(reflect(sub_position3_normalized, flat_normal), lmcoord_alt, final_gloss_power, flat_normal) * gloss_factor; float material = material_gloss_factor * block_luma; vec3 real_light = omni_light + diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index 2fe00fde..6b716072 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -84,7 +84,7 @@ varying vec3 omni_light; #if defined MATERIAL_GLOSS && !defined NETHER varying vec3 flat_normal; - varying vec3 sub_position3; + varying vec3 sub_position3_normalized; varying vec2 lmcoord_alt; varying float gloss_factor; varying float gloss_power; @@ -173,7 +173,7 @@ void main() { } flat_normal = normal; - sub_position3 = sub_position.xyz; + sub_position3_normalized = normalize(sub_position.xyz); lmcoord_alt = lmcoord; #endif diff --git a/shaders/lib/dither.glsl b/shaders/lib/dither.glsl index 0fc9b0aa..82289b69 100644 --- a/shaders/lib/dither.glsl +++ b/shaders/lib/dither.glsl @@ -109,6 +109,10 @@ float texture_noise_64(vec2 p, sampler2D noise) { return texture2DLod(noise, p * 0.015625, 0).r; } +vec2 texture_noise2d_64(vec2 p, sampler2D noise) { + return texture2DLod(noise, p * 0.015625, 0).rg; +} + float semiblue(vec2 xy) { vec2 tile = floor(xy * 0.25); float flip = mod(tile.x + tile.y, 2.0); @@ -202,6 +206,11 @@ float valve_red(vec2 xy) { return fract(dither_shift + dither); } + vec2 shifted_texture_noise2d_64(vec2 p, sampler2D noise) { + vec2 dither = texture2DLod(noise, p * 0.015625, 0).rg; + return fract(dither_shift + dither); + } + float shifted_semiblue(vec2 xy) { vec2 tile = floor(xy * 0.25); float flip = mod(tile.x + tile.y, 2.0); diff --git a/shaders/lib/mu_ftransform.glsl b/shaders/lib/mu_ftransform.glsl index 08ab18f0..a903bccd 100644 --- a/shaders/lib/mu_ftransform.glsl +++ b/shaders/lib/mu_ftransform.glsl @@ -1,5 +1,5 @@ vec4 mu_ftransform() { - float lineWidth = 1.75; + float lineWidth = 2.0; vec2 screenSize = vec2(viewWidth, viewHeight); mat4 VIEW_SCALE = mat4(mat3(1.0 - 0.00390625)); mat4 tempmat = gl_ProjectionMatrix * VIEW_SCALE * gl_ModelViewMatrix; From fc4585d7567a7ec9be93d8f517075bfa70360e02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sun, 17 Aug 2025 13:48:42 -0600 Subject: [PATCH 071/147] Debug Broken noise --- shaders/common/final_fragment.glsl | 4 +- shaders/common/solid_blocks_fragment.glsl | 11 ++-- shaders/common/water_blocks_fragment.glsl | 25 ++++----- shaders/lib/dither.glsl | 9 +++- shaders/lib/shadow_frag.glsl | 66 ++++++++++++++--------- shaders/shaders.properties | 5 +- 6 files changed, 72 insertions(+), 48 deletions(-) diff --git a/shaders/common/final_fragment.glsl b/shaders/common/final_fragment.glsl index 90113fd7..9ec74eec 100644 --- a/shaders/common/final_fragment.glsl +++ b/shaders/common/final_fragment.glsl @@ -14,7 +14,7 @@ gaux3 - Exposure auxiliar gaux4 - Fog auxiliar const int noisetexFormat = RG8; -const int colortex0Format = RG8; +const int colortex0Format = R8; */ #ifdef DOF /* @@ -26,7 +26,7 @@ const int colortex1Format = R11F_G11F_B10F; */ #endif /* -const int colortex2Format = R8; +const int colortex2Format = RG8; */ #ifdef DOF /* diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 920f6aef..6f30852b 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -21,6 +21,7 @@ uniform float light_mix; uniform float pixel_size_x; uniform float pixel_size_y; uniform sampler2D gaux4; +uniform sampler2D colortex2; #if defined DISTANT_HORIZONS uniform float dhNearPlane; @@ -116,9 +117,9 @@ varying vec3 omni_light; void main() { #if (defined SHADOW_CASTING && !defined NETHER) || defined DISTANT_HORIZONS #if AA_TYPE > 0 - float dither = shifted_dither13(gl_FragCoord.xy); + vec2 dither2d = shifted_texture_noise2d_64(gl_FragCoord.xy, colortex2); #else - float dither = r_dither(gl_FragCoord.xy); + vec2 dither2d = texture_noise2d_64(gl_FragCoord.xy, colortex2); #endif #endif // Avoid render in DH transition @@ -127,7 +128,7 @@ void main() { float sup = t * TRANSITION_DH_SUP; float inf = t * TRANSITION_DH_INF; float umbral = (gl_FogFragCoord - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); - if(umbral > dither) { + if(umbral > dither2d.r) { discard; return; } @@ -166,10 +167,10 @@ void main() { #if defined SHADOW_CASTING && !defined NETHER #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_pos, dither); + vec3 shadow_c = get_colored_shadow(shadow_pos, dither2d); shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); #else - float shadow_c = get_shadow(shadow_pos, dither); + float shadow_c = get_shadow(shadow_pos, dither2d); shadow_c = mix(shadow_c, 1.0, shadow_diffuse); #endif #else diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index 22deb770..feabbe24 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -33,6 +33,7 @@ uniform float rainStrength; uniform float light_mix; uniform ivec2 eyeBrightnessSmooth; uniform sampler2D gaux4; +uniform sampler2D colortex2; #if defined DISTANT_HORIZONS uniform float dhNearPlane; @@ -128,13 +129,13 @@ void main() { #if SHADOW_TYPE == 1 || defined DISTANT_HORIZONS || (defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER) || SSR_TYPE > 0 #if AA_TYPE > 0 - float dither = shifted_r_dither(gl_FragCoord.xy); + vec2 dither2d = shifted_texture_noise2d_64(gl_FragCoord.xy, colortex2); #else - float dither = r_dither(gl_FragCoord.xy); + vec2 dither2d = texture_noise2d_64(gl_FragCoord.xy, colortex2); // dither = 0.0; #endif #else - float dither = 1.0; + vec2 dither2d = vec2(1.0); #endif // vec4 block_color = texture2D(tex, texcoord); @@ -170,17 +171,17 @@ void main() { sky_color_reflect = xyz_to_rgb(sky_color_reflect); #if defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER - sky_color_reflect = get_cloud(normalize((gbufferModelViewInverse * vec4(reflect_water_vec * far, 1.0)).xyz), sky_color_reflect, 0.0, dither, worldposition.xyz, int(CLOUD_STEPS_AVG * 0.5), umbral, cloud_color, dark_cloud_color); + sky_color_reflect = get_cloud(normalize((gbufferModelViewInverse * vec4(reflect_water_vec * far, 1.0)).xyz), sky_color_reflect, 0.0, dither2d.r, worldposition.xyz, int(CLOUD_STEPS_AVG * 0.5), umbral, cloud_color, dark_cloud_color); #endif if(block_type > 2.5) { // Water #ifdef VANILLA_WATER block_color = texture2D(tex, texcoord); #if defined SHADOW_CASTING && !defined NETHER #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_pos, dither); + vec3 shadow_c = get_colored_shadow(shadow_pos, dither2d); shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); #else - float shadow_c = get_shadow(shadow_pos, dither); + float shadow_c = get_shadow(shadow_pos, dither2d); shadow_c = mix(shadow_c, 1.0, shadow_diffuse); #endif #else @@ -197,7 +198,7 @@ void main() { block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tint_color.rgb; - block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); + block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither2d.r, direct_light_color); block_color.a = sqrt(block_color.a); #else @@ -227,7 +228,7 @@ void main() { fresnel = clamp(fresnel * (water_texture), 0.0, 1.0); #endif - block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); + block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither2d.r, direct_light_color); #endif @@ -238,10 +239,10 @@ void main() { #if defined SHADOW_CASTING && !defined NETHER #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_pos, dither); + vec3 shadow_c = get_colored_shadow(shadow_pos, dither2d); shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); #else - float shadow_c = get_shadow(shadow_pos, dither); + float shadow_c = get_shadow(shadow_pos, dither2d); shadow_c = mix(shadow_c, 1.0, shadow_diffuse); #endif #else @@ -255,7 +256,7 @@ void main() { block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125); if(block_type > 1.5) { // Glass - block_color = cristal_shader(fragposition, water_normal, block_color, sky_color_reflect, fresnel * fresnel, visible_sky, dither, direct_light_color); + block_color = cristal_shader(fragposition, water_normal, block_color, sky_color_reflect, fresnel * fresnel, visible_sky, dither2d.r, direct_light_color); } } @@ -265,7 +266,7 @@ void main() { float sup = t * TRANSITION_DH_SUP; float inf = t * TRANSITION_DH_INF; float draw_umbral = (gl_FogFragCoord - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); - if(draw_umbral > dither) { + if(draw_umbral > dither2d.r) { discard; return; } diff --git a/shaders/lib/dither.glsl b/shaders/lib/dither.glsl index 82289b69..9ffd183c 100644 --- a/shaders/lib/dither.glsl +++ b/shaders/lib/dither.glsl @@ -110,7 +110,7 @@ float texture_noise_64(vec2 p, sampler2D noise) { } vec2 texture_noise2d_64(vec2 p, sampler2D noise) { - return texture2DLod(noise, p * 0.015625, 0).rg; + return texture2D(noise, p * 0.015625).rg; } float semiblue(vec2 xy) { @@ -208,7 +208,7 @@ float valve_red(vec2 xy) { vec2 shifted_texture_noise2d_64(vec2 p, sampler2D noise) { vec2 dither = texture2DLod(noise, p * 0.015625, 0).rg; - return fract(dither_shift + dither); + return fract(vec2(dither_shift) + dither); } float shifted_semiblue(vec2 xy) { @@ -285,6 +285,11 @@ float valve_red(vec2 xy) { return fract((frame_mod * 0.4) + dither); } + vec2 shifted_texture_noise2d_64(vec2 p, sampler2D noise) { + vec2 dither = texture2DLod(noise, p * 0.015625, 0).rg; + return fract(vec2(frame_mod * 0.4) + dither); + } + float shifted_semiblue(vec2 xy) { vec2 tile = floor(xy * 0.25); float flip = mod(tile.x + tile.y, 2.0); diff --git a/shaders/lib/shadow_frag.glsl b/shaders/lib/shadow_frag.glsl index dc5de38f..6b1b6d6a 100644 --- a/shaders/lib/shadow_frag.glsl +++ b/shaders/lib/shadow_frag.glsl @@ -4,29 +4,37 @@ Fragment shadow function. Javier Garduño - GNU Lesser General Public License v3.0 */ -float get_shadow(vec3 the_shadow_pos, float dither) { +float get_shadow(vec3 the_shadow_pos, vec2 dither2d) { float shadow_sample = 1.0; #if SHADOW_TYPE == 0 // Pixelated shadow_sample = shadow2D(shadowtex1, the_shadow_pos).r; #elif SHADOW_TYPE == 1 // Soft - float current_radius = dither; - dither *= 6.283185307179586; - float dither_2 = dither + 1.5707963267948966; + // float current_radius = dither; + // dither *= 6.283185307179586; + // float dither_2 = dither + 1.5707963267948966; - shadow_sample = 0.0; + // shadow_sample = 0.0; - vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; + // vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; - vec2 offset_2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; + // vec2 offset_2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; - float z_bias = dither * 0.00002; + vec2 offset = (dither2d * SHADOW_BLUR) / shadowMapResolution; + + float z_bias = dither2d.r * 0.00002; + + // shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; + // shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; + + // shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset_2, the_shadow_pos.z - z_bias)).r; + // shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset_2, the_shadow_pos.z - z_bias)).r; shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; - shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset_2, the_shadow_pos.z - z_bias)).r; - shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset_2, the_shadow_pos.z - z_bias)).r; + shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset.gr, the_shadow_pos.z - z_bias)).r; + shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset.gr, the_shadow_pos.z - z_bias)).r; // shadow_sample *= 0.5; shadow_sample *= 0.25; @@ -37,7 +45,7 @@ float get_shadow(vec3 the_shadow_pos, float dither) { #if defined COLORED_SHADOW - vec3 get_colored_shadow(vec3 the_shadow_pos, float dither) { + vec3 get_colored_shadow(vec3 the_shadow_pos, vec2 dither2d) { #if SHADOW_TYPE == 0 // Pixelated float shadow_detector = 1.0; float shadow_black = 1.0; @@ -80,20 +88,28 @@ float get_shadow(vec3 the_shadow_pos, float dither) { float alpha_complement; - float current_radius = dither; - dither *= 6.283185307179586; - float dither_2 = dither + 1.5707963267948966; + // float current_radius = dither; + // dither *= 6.283185307179586; + // float dither_2 = dither + 1.5707963267948966; + + // vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; + // vec2 offset_2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; + + vec2 offset = (dither2d * SHADOW_BLUR) / shadowMapResolution; + + float z_bias = dither2d.r * 0.00002; - vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; - vec2 offset_2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; + // shadow_detector_a = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; + // shadow_detector_b = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; - float z_bias = dither * 0.00002; + // shadow_detector_c = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset_2, the_shadow_pos.z - z_bias)).r; + // shadow_detector_d = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset_2, the_shadow_pos.z - z_bias)).r; - shadow_detector_a = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; - shadow_detector_b = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; + shadow_detector_a += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; + shadow_detector_b += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; - shadow_detector_c = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset_2, the_shadow_pos.z - z_bias)).r; - shadow_detector_d = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset_2, the_shadow_pos.z - z_bias)).r; + shadow_detector_c += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset.gr, the_shadow_pos.z - z_bias)).r; + shadow_detector_d += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset.gr, the_shadow_pos.z - z_bias)).r; if (shadow_detector_a < 1.0) { shadow_black_a = shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; @@ -120,9 +136,9 @@ float get_shadow(vec3 the_shadow_pos, float dither) { shadow_color_b *= shadow_black_b; if (shadow_detector_c < 1.0) { - shadow_black_c = shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset_2, the_shadow_pos.z - z_bias)).r; + shadow_black_c = shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset.gr, the_shadow_pos.z - z_bias)).r; if (shadow_black_c != shadow_detector_c) { - shadow_color_c = texture2D(shadowcolor0, the_shadow_pos.xy + offset_2); + shadow_color_c = texture2D(shadowcolor0, the_shadow_pos.xy + offset.gr); alpha_complement = 1.0 - shadow_color_c.a; shadow_color_c.rgb = mix(shadow_color_c.rgb, vec3(1.0), alpha_complement); shadow_color_c.rgb *= alpha_complement; @@ -132,9 +148,9 @@ float get_shadow(vec3 the_shadow_pos, float dither) { shadow_color_c *= shadow_black_c; if (shadow_detector_d < 1.0) { - shadow_black_d = shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset_2, the_shadow_pos.z - z_bias)).r; + shadow_black_d = shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset.gr, the_shadow_pos.z - z_bias)).r; if (shadow_black_d != shadow_detector_d) { - shadow_color_d = texture2D(shadowcolor0, the_shadow_pos.xy - offset_2); + shadow_color_d = texture2D(shadowcolor0, the_shadow_pos.xy - offset.gr); alpha_complement = 1.0 - shadow_color_d.a; shadow_color_d.rgb = mix(shadow_color_d.rgb, vec3(1.0), alpha_complement); shadow_color_d.rgb *= alpha_complement; diff --git a/shaders/shaders.properties b/shaders/shaders.properties index fb89a2ff..3c62d41e 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -28,6 +28,9 @@ particles.before.deferred = true #endif texture.gbuffers.noisetex = textures/water_256_RG_8bit.png +texture.gbuffers.colortex2.2 = textures/bluenoise_RG_64.png +texture.deferred.colortex2.2 = textures/bluenoise_RG_64.png +texture.composite.colortex2.2 = textures/bluenoise_RG_64.png #if CLOUD_VOL_STYLE == 0 texture.gbuffers.gaux2 = textures/clouds_natural_512_R_8bit.png @@ -37,8 +40,6 @@ texture.gbuffers.noisetex = textures/water_256_RG_8bit.png texture.deferred.gaux2 = textures/clouds_blocky_512_R_8bit.png #endif -texture.gbuffers.colortex0 = textures/bluenoise_RG_64.png -# texture.deferred.colortex0 = textures/bluenoise_64.png program.shadow.enabled=SHADOW_CASTING program.world0/shadow.enabled=SHADOW_CASTING From a62dd6c2ee696b03958adedbbe64eeca48710153 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sun, 17 Aug 2025 16:54:33 -0600 Subject: [PATCH 072/147] Simplified samples --- shaders/common/final_fragment.glsl | 6 +- shaders/common/solid_blocks_fragment.glsl | 13 +++-- shaders/common/water_blocks_fragment.glsl | 26 ++++----- shaders/lib/dither.glsl | 18 ++++++ shaders/lib/shadow_frag.glsl | 54 ++++++++---------- shaders/shaders.properties | 6 +- .../textures/fullnoise_256-RGBA.png.mcmeta | 7 +++ shaders/textures/fullnoise_256_RGBA.png | Bin 0 -> 218253 bytes 8 files changed, 74 insertions(+), 56 deletions(-) create mode 100644 shaders/textures/fullnoise_256-RGBA.png.mcmeta create mode 100644 shaders/textures/fullnoise_256_RGBA.png diff --git a/shaders/common/final_fragment.glsl b/shaders/common/final_fragment.glsl index 9ec74eec..2dc700f6 100644 --- a/shaders/common/final_fragment.glsl +++ b/shaders/common/final_fragment.glsl @@ -4,9 +4,9 @@ /* noisetex - Water normals -colortex0 - Blue noise +colortex0 - Unused colortex1 - Antialiasing auxiliar -colortex2 - Unused +colortex2 - Bluenoise colortex3 - TAA Averages history gaux1 - Screen-Space-Reflection / Bloom auxiliar gaux2 - Clouds texture @@ -26,7 +26,7 @@ const int colortex1Format = R11F_G11F_B10F; */ #endif /* -const int colortex2Format = RG8; +const int colortex2Format = R8; */ #ifdef DOF /* diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 6f30852b..bc0a6e17 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -21,7 +21,6 @@ uniform float light_mix; uniform float pixel_size_x; uniform float pixel_size_y; uniform sampler2D gaux4; -uniform sampler2D colortex2; #if defined DISTANT_HORIZONS uniform float dhNearPlane; @@ -117,9 +116,11 @@ varying vec3 omni_light; void main() { #if (defined SHADOW_CASTING && !defined NETHER) || defined DISTANT_HORIZONS #if AA_TYPE > 0 - vec2 dither2d = shifted_texture_noise2d_64(gl_FragCoord.xy, colortex2); + // vec2 dither2d = shifted_texture_noise2d_64(gl_FragCoord.xy, colortex2); + float dither = shifted_r_dither(gl_FragCoord.xy); #else - vec2 dither2d = texture_noise2d_64(gl_FragCoord.xy, colortex2); + // vec2 dither2d = texture_noise2d_64(gl_FragCoord.xy, colortex2); + float dither = r_dither(gl_FragCoord.xy); #endif #endif // Avoid render in DH transition @@ -128,7 +129,7 @@ void main() { float sup = t * TRANSITION_DH_SUP; float inf = t * TRANSITION_DH_INF; float umbral = (gl_FogFragCoord - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); - if(umbral > dither2d.r) { + if(umbral > dither) { discard; return; } @@ -167,10 +168,10 @@ void main() { #if defined SHADOW_CASTING && !defined NETHER #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_pos, dither2d); + vec3 shadow_c = get_colored_shadow(shadow_pos, dither); shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); #else - float shadow_c = get_shadow(shadow_pos, dither2d); + float shadow_c = get_shadow(shadow_pos, dither); shadow_c = mix(shadow_c, 1.0, shadow_diffuse); #endif #else diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index feabbe24..53ca2012 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -33,7 +33,6 @@ uniform float rainStrength; uniform float light_mix; uniform ivec2 eyeBrightnessSmooth; uniform sampler2D gaux4; -uniform sampler2D colortex2; #if defined DISTANT_HORIZONS uniform float dhNearPlane; @@ -129,13 +128,12 @@ void main() { #if SHADOW_TYPE == 1 || defined DISTANT_HORIZONS || (defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER) || SSR_TYPE > 0 #if AA_TYPE > 0 - vec2 dither2d = shifted_texture_noise2d_64(gl_FragCoord.xy, colortex2); + float dither = shifted_r_dither(gl_FragCoord.xy); #else - vec2 dither2d = texture_noise2d_64(gl_FragCoord.xy, colortex2); - // dither = 0.0; + float dither = r_dither(gl_FragCoord.xy); #endif #else - vec2 dither2d = vec2(1.0); + float dither = 1.0; #endif // vec4 block_color = texture2D(tex, texcoord); @@ -171,17 +169,17 @@ void main() { sky_color_reflect = xyz_to_rgb(sky_color_reflect); #if defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER - sky_color_reflect = get_cloud(normalize((gbufferModelViewInverse * vec4(reflect_water_vec * far, 1.0)).xyz), sky_color_reflect, 0.0, dither2d.r, worldposition.xyz, int(CLOUD_STEPS_AVG * 0.5), umbral, cloud_color, dark_cloud_color); + sky_color_reflect = get_cloud(normalize((gbufferModelViewInverse * vec4(reflect_water_vec * far, 1.0)).xyz), sky_color_reflect, 0.0, dither, worldposition.xyz, int(CLOUD_STEPS_AVG * 0.5), umbral, cloud_color, dark_cloud_color); #endif if(block_type > 2.5) { // Water #ifdef VANILLA_WATER block_color = texture2D(tex, texcoord); #if defined SHADOW_CASTING && !defined NETHER #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_pos, dither2d); + vec3 shadow_c = get_colored_shadow(shadow_pos, dither); shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); #else - float shadow_c = get_shadow(shadow_pos, dither2d); + float shadow_c = get_shadow(shadow_pos, dither); shadow_c = mix(shadow_c, 1.0, shadow_diffuse); #endif #else @@ -198,7 +196,7 @@ void main() { block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tint_color.rgb; - block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither2d.r, direct_light_color); + block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); block_color.a = sqrt(block_color.a); #else @@ -228,7 +226,7 @@ void main() { fresnel = clamp(fresnel * (water_texture), 0.0, 1.0); #endif - block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither2d.r, direct_light_color); + block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); #endif @@ -239,10 +237,10 @@ void main() { #if defined SHADOW_CASTING && !defined NETHER #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_pos, dither2d); + vec3 shadow_c = get_colored_shadow(shadow_pos, dither); shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); #else - float shadow_c = get_shadow(shadow_pos, dither2d); + float shadow_c = get_shadow(shadow_pos, dither); shadow_c = mix(shadow_c, 1.0, shadow_diffuse); #endif #else @@ -256,7 +254,7 @@ void main() { block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125); if(block_type > 1.5) { // Glass - block_color = cristal_shader(fragposition, water_normal, block_color, sky_color_reflect, fresnel * fresnel, visible_sky, dither2d.r, direct_light_color); + block_color = cristal_shader(fragposition, water_normal, block_color, sky_color_reflect, fresnel * fresnel, visible_sky, dither, direct_light_color); } } @@ -266,7 +264,7 @@ void main() { float sup = t * TRANSITION_DH_SUP; float inf = t * TRANSITION_DH_INF; float draw_umbral = (gl_FogFragCoord - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); - if(draw_umbral > dither2d.r) { + if(draw_umbral > dither) { discard; return; } diff --git a/shaders/lib/dither.glsl b/shaders/lib/dither.glsl index 9ffd183c..c857bffe 100644 --- a/shaders/lib/dither.glsl +++ b/shaders/lib/dither.glsl @@ -59,6 +59,17 @@ float r_dither(vec2 frag) { return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998))); } +vec2 r_dither2d(vec2 frag) { + vec2 tile = floor(frag * 0.25); + float flip = mod(tile.x + tile.y, 2.0); + tile = mix(frag, frag.yx, flip); + + return vec2( + fract(dot(frag, vec2(0.75487766624669276, 0.569840290998))), + fract(dot(tile, vec2(0.75487766624669276, 0.569840290998))) + ); +} + float eclectic_r_dither(vec2 frag) { vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); float state = fract(dot(v * v, vec2(3571.0))); @@ -155,6 +166,13 @@ float valve_red(vec2 xy) { return fract(dither_shift + dot(frag, vec2(0.75487766624669276, 0.569840290998))); } + vec2 shifted_r_dither2d(vec2 frag) { + return vec2( + fract(dither_shift + dot(frag, vec2(0.75487766624669276, 0.569840290998))), + fract(dither_shift + dot(frag, vec2(0.569840290998, 0.75487766624669276))) + ); + } + float shifted_eclectic_r_dither(vec2 frag) { vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); float state = fract(dot(v * v, vec2(3571.0))); diff --git a/shaders/lib/shadow_frag.glsl b/shaders/lib/shadow_frag.glsl index 6b1b6d6a..90ea7539 100644 --- a/shaders/lib/shadow_frag.glsl +++ b/shaders/lib/shadow_frag.glsl @@ -4,25 +4,26 @@ Fragment shadow function. Javier Garduño - GNU Lesser General Public License v3.0 */ -float get_shadow(vec3 the_shadow_pos, vec2 dither2d) { +float get_shadow(vec3 the_shadow_pos, float dither) { float shadow_sample = 1.0; #if SHADOW_TYPE == 0 // Pixelated shadow_sample = shadow2D(shadowtex1, the_shadow_pos).r; #elif SHADOW_TYPE == 1 // Soft - // float current_radius = dither; - // dither *= 6.283185307179586; + float current_radius = dither; + dither *= 6.283185307179586; // float dither_2 = dither + 1.5707963267948966; - // shadow_sample = 0.0; + shadow_sample = 0.0; - // vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; + vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; + vec2 offset_2 = vec2(-offset.y, offset.x); // vec2 offset_2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; - vec2 offset = (dither2d * SHADOW_BLUR) / shadowMapResolution; + // vec2 offset = (dither2d * SHADOW_BLUR) / shadowMapResolution; - float z_bias = dither2d.r * 0.00002; + float z_bias = dither * 0.00002; // shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; // shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; @@ -33,8 +34,8 @@ float get_shadow(vec3 the_shadow_pos, vec2 dither2d) { shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; - shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset.gr, the_shadow_pos.z - z_bias)).r; - shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset.gr, the_shadow_pos.z - z_bias)).r; + shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset_2, the_shadow_pos.z - z_bias)).r; + shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset_2, the_shadow_pos.z - z_bias)).r; // shadow_sample *= 0.5; shadow_sample *= 0.25; @@ -45,7 +46,7 @@ float get_shadow(vec3 the_shadow_pos, vec2 dither2d) { #if defined COLORED_SHADOW - vec3 get_colored_shadow(vec3 the_shadow_pos, vec2 dither2d) { + vec3 get_colored_shadow(vec3 the_shadow_pos, float dither) { #if SHADOW_TYPE == 0 // Pixelated float shadow_detector = 1.0; float shadow_black = 1.0; @@ -88,28 +89,21 @@ float get_shadow(vec3 the_shadow_pos, vec2 dither2d) { float alpha_complement; - // float current_radius = dither; - // dither *= 6.283185307179586; + float current_radius = dither; + dither *= 6.283185307179586; // float dither_2 = dither + 1.5707963267948966; - // vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; + vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; + vec2 offset_2 = vec2(-offset.y, offset.x); // vec2 offset_2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; - vec2 offset = (dither2d * SHADOW_BLUR) / shadowMapResolution; + float z_bias = dither * 0.00002; - float z_bias = dither2d.r * 0.00002; + shadow_detector_a = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; + shadow_detector_b = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; - // shadow_detector_a = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; - // shadow_detector_b = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; - - // shadow_detector_c = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset_2, the_shadow_pos.z - z_bias)).r; - // shadow_detector_d = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset_2, the_shadow_pos.z - z_bias)).r; - - shadow_detector_a += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; - shadow_detector_b += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; - - shadow_detector_c += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset.gr, the_shadow_pos.z - z_bias)).r; - shadow_detector_d += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset.gr, the_shadow_pos.z - z_bias)).r; + shadow_detector_c = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset_2, the_shadow_pos.z - z_bias)).r; + shadow_detector_d = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset_2, the_shadow_pos.z - z_bias)).r; if (shadow_detector_a < 1.0) { shadow_black_a = shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; @@ -136,9 +130,9 @@ float get_shadow(vec3 the_shadow_pos, vec2 dither2d) { shadow_color_b *= shadow_black_b; if (shadow_detector_c < 1.0) { - shadow_black_c = shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset.gr, the_shadow_pos.z - z_bias)).r; + shadow_black_c = shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset_2, the_shadow_pos.z - z_bias)).r; if (shadow_black_c != shadow_detector_c) { - shadow_color_c = texture2D(shadowcolor0, the_shadow_pos.xy + offset.gr); + shadow_color_c = texture2D(shadowcolor0, the_shadow_pos.xy + offset_2); alpha_complement = 1.0 - shadow_color_c.a; shadow_color_c.rgb = mix(shadow_color_c.rgb, vec3(1.0), alpha_complement); shadow_color_c.rgb *= alpha_complement; @@ -148,9 +142,9 @@ float get_shadow(vec3 the_shadow_pos, vec2 dither2d) { shadow_color_c *= shadow_black_c; if (shadow_detector_d < 1.0) { - shadow_black_d = shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset.gr, the_shadow_pos.z - z_bias)).r; + shadow_black_d = shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset_2, the_shadow_pos.z - z_bias)).r; if (shadow_black_d != shadow_detector_d) { - shadow_color_d = texture2D(shadowcolor0, the_shadow_pos.xy - offset.gr); + shadow_color_d = texture2D(shadowcolor0, the_shadow_pos.xy - offset_2); alpha_complement = 1.0 - shadow_color_d.a; shadow_color_d.rgb = mix(shadow_color_d.rgb, vec3(1.0), alpha_complement); shadow_color_d.rgb *= alpha_complement; diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 3c62d41e..66304126 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -28,9 +28,9 @@ particles.before.deferred = true #endif texture.gbuffers.noisetex = textures/water_256_RG_8bit.png -texture.gbuffers.colortex2.2 = textures/bluenoise_RG_64.png -texture.deferred.colortex2.2 = textures/bluenoise_RG_64.png -texture.composite.colortex2.2 = textures/bluenoise_RG_64.png +texture.gbuffers.colortex2 = textures/bluenoise_64.png +texture.deferred.colortex2 = textures/bluenoise_64.png +texture.composite.colortex2 = textures/bluenoise_64.png #if CLOUD_VOL_STYLE == 0 texture.gbuffers.gaux2 = textures/clouds_natural_512_R_8bit.png diff --git a/shaders/textures/fullnoise_256-RGBA.png.mcmeta b/shaders/textures/fullnoise_256-RGBA.png.mcmeta new file mode 100644 index 00000000..193e38ee --- /dev/null +++ b/shaders/textures/fullnoise_256-RGBA.png.mcmeta @@ -0,0 +1,7 @@ +{ + "texture": + { + "blur": false, + "clamp": false + } +} diff --git a/shaders/textures/fullnoise_256_RGBA.png b/shaders/textures/fullnoise_256_RGBA.png new file mode 100644 index 0000000000000000000000000000000000000000..b68bdd22a9005a156ed4d611dab41eb0d8e0e034 GIT binary patch literal 218253 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

&yTy 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 gmX Date: Sun, 17 Aug 2025 17:42:36 -0600 Subject: [PATCH 073/147] No trigonometric --- shaders/common/solid_blocks_fragment.glsl | 14 ++++++------ shaders/common/water_blocks_fragment.glsl | 27 +++++++++++++---------- shaders/lib/dither.glsl | 20 ++++++++++++----- shaders/lib/shadow_frag.glsl | 22 +++++++++--------- 4 files changed, 48 insertions(+), 35 deletions(-) diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index bc0a6e17..4a6dae4c 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -116,11 +116,11 @@ varying vec3 omni_light; void main() { #if (defined SHADOW_CASTING && !defined NETHER) || defined DISTANT_HORIZONS #if AA_TYPE > 0 - // vec2 dither2d = shifted_texture_noise2d_64(gl_FragCoord.xy, colortex2); - float dither = shifted_r_dither(gl_FragCoord.xy); + vec2 dither2d = shifted_r_dither2d(gl_FragCoord.xy); + // float dither = shifted_r_dither(gl_FragCoord.xy); #else - // vec2 dither2d = texture_noise2d_64(gl_FragCoord.xy, colortex2); - float dither = r_dither(gl_FragCoord.xy); + vec2 dither2d = r_dither2d(gl_FragCoord.xy); + // float dither = r_dither(gl_FragCoord.xy); #endif #endif // Avoid render in DH transition @@ -129,7 +129,7 @@ void main() { float sup = t * TRANSITION_DH_SUP; float inf = t * TRANSITION_DH_INF; float umbral = (gl_FogFragCoord - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); - if(umbral > dither) { + if(umbral > dither2d.r) { discard; return; } @@ -168,10 +168,10 @@ void main() { #if defined SHADOW_CASTING && !defined NETHER #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_pos, dither); + vec3 shadow_c = get_colored_shadow(shadow_pos, dither2d); shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); #else - float shadow_c = get_shadow(shadow_pos, dither); + float shadow_c = get_shadow(shadow_pos, dither2d); shadow_c = mix(shadow_c, 1.0, shadow_diffuse); #endif #else diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index 53ca2012..5454a475 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -128,12 +128,15 @@ void main() { #if SHADOW_TYPE == 1 || defined DISTANT_HORIZONS || (defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER) || SSR_TYPE > 0 #if AA_TYPE > 0 - float dither = shifted_r_dither(gl_FragCoord.xy); + vec2 dither2d = shifted_r_dither2d(gl_FragCoord.xy); + // float dither = shifted_r_dither(gl_FragCoord.xy); #else - float dither = r_dither(gl_FragCoord.xy); + vec2 dither2d = r_dither2d(gl_FragCoord.xy); + // float dither = r_dither(gl_FragCoord.xy); #endif #else - float dither = 1.0; + vec2 dither2d = vec2(1.0); + // float dither = 1.0; #endif // vec4 block_color = texture2D(tex, texcoord); @@ -169,17 +172,17 @@ void main() { sky_color_reflect = xyz_to_rgb(sky_color_reflect); #if defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER - sky_color_reflect = get_cloud(normalize((gbufferModelViewInverse * vec4(reflect_water_vec * far, 1.0)).xyz), sky_color_reflect, 0.0, dither, worldposition.xyz, int(CLOUD_STEPS_AVG * 0.5), umbral, cloud_color, dark_cloud_color); + sky_color_reflect = get_cloud(normalize((gbufferModelViewInverse * vec4(reflect_water_vec * far, 1.0)).xyz), sky_color_reflect, 0.0, dither2d.r, worldposition.xyz, int(CLOUD_STEPS_AVG * 0.5), umbral, cloud_color, dark_cloud_color); #endif if(block_type > 2.5) { // Water #ifdef VANILLA_WATER block_color = texture2D(tex, texcoord); #if defined SHADOW_CASTING && !defined NETHER #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_pos, dither); + vec3 shadow_c = get_colored_shadow(shadow_pos, dither2d); shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); #else - float shadow_c = get_shadow(shadow_pos, dither); + float shadow_c = get_shadow(shadow_pos, dither2d); shadow_c = mix(shadow_c, 1.0, shadow_diffuse); #endif #else @@ -196,7 +199,7 @@ void main() { block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tint_color.rgb; - block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); + block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither2d.r, direct_light_color); block_color.a = sqrt(block_color.a); #else @@ -226,7 +229,7 @@ void main() { fresnel = clamp(fresnel * (water_texture), 0.0, 1.0); #endif - block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); + block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither2d.r, direct_light_color); #endif @@ -237,10 +240,10 @@ void main() { #if defined SHADOW_CASTING && !defined NETHER #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_pos, dither); + vec3 shadow_c = get_colored_shadow(shadow_pos, dither2d); shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); #else - float shadow_c = get_shadow(shadow_pos, dither); + float shadow_c = get_shadow(shadow_pos, dither2d); shadow_c = mix(shadow_c, 1.0, shadow_diffuse); #endif #else @@ -254,7 +257,7 @@ void main() { block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125); if(block_type > 1.5) { // Glass - block_color = cristal_shader(fragposition, water_normal, block_color, sky_color_reflect, fresnel * fresnel, visible_sky, dither, direct_light_color); + block_color = cristal_shader(fragposition, water_normal, block_color, sky_color_reflect, fresnel * fresnel, visible_sky, dither2d.r, direct_light_color); } } @@ -264,7 +267,7 @@ void main() { float sup = t * TRANSITION_DH_SUP; float inf = t * TRANSITION_DH_INF; float draw_umbral = (gl_FogFragCoord - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); - if(draw_umbral > dither) { + if(draw_umbral > dither2d.r) { discard; return; } diff --git a/shaders/lib/dither.glsl b/shaders/lib/dither.glsl index c857bffe..36097544 100644 --- a/shaders/lib/dither.glsl +++ b/shaders/lib/dither.glsl @@ -60,13 +60,9 @@ float r_dither(vec2 frag) { } vec2 r_dither2d(vec2 frag) { - vec2 tile = floor(frag * 0.25); - float flip = mod(tile.x + tile.y, 2.0); - tile = mix(frag, frag.yx, flip); - return vec2( fract(dot(frag, vec2(0.75487766624669276, 0.569840290998))), - fract(dot(tile, vec2(0.75487766624669276, 0.569840290998))) + fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag))) ); } @@ -169,7 +165,7 @@ float valve_red(vec2 xy) { vec2 shifted_r_dither2d(vec2 frag) { return vec2( fract(dither_shift + dot(frag, vec2(0.75487766624669276, 0.569840290998))), - fract(dither_shift + dot(frag, vec2(0.569840290998, 0.75487766624669276))) + fract(dither_shift + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))) ); } @@ -273,6 +269,18 @@ float valve_red(vec2 xy) { return fract((frame_mod * 0.4) + dot(frag, vec2(0.75487766624669276, 0.569840290998))); } + float shifted_r_dither(vec2 frag) { + return fract((frame_mod * 0.4) + dot(frag, vec2(0.75487766624669276, 0.569840290998))); + } + + vec2 shifted_r_dither2d(vec2 frag) { + return vec2( + // fract((frame_mod * 0.4) + dot(frag, vec2(0.75487766624669276, 0.569840290998))), + fract((frame_mod * 0.4) + dot(frag, vec2(0.3076923076923077, 0.5384615384615384))), + fract((frame_mod * 0.4) + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))) + ); + } + float shifted_eclectic_r_dither(vec2 frag) { vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); float state = fract(dot(v * v, vec2(3571.0))); diff --git a/shaders/lib/shadow_frag.glsl b/shaders/lib/shadow_frag.glsl index 90ea7539..ab45eec0 100644 --- a/shaders/lib/shadow_frag.glsl +++ b/shaders/lib/shadow_frag.glsl @@ -4,26 +4,27 @@ Fragment shadow function. Javier Garduño - GNU Lesser General Public License v3.0 */ -float get_shadow(vec3 the_shadow_pos, float dither) { +float get_shadow(vec3 the_shadow_pos, vec2 dither2d) { float shadow_sample = 1.0; #if SHADOW_TYPE == 0 // Pixelated shadow_sample = shadow2D(shadowtex1, the_shadow_pos).r; #elif SHADOW_TYPE == 1 // Soft - float current_radius = dither; - dither *= 6.283185307179586; + // float current_radius = dither; + // dither *= 6.283185307179586; // float dither_2 = dither + 1.5707963267948966; shadow_sample = 0.0; - vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; + vec2 offset = (dither2d * SHADOW_BLUR) / shadowMapResolution; + // vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; vec2 offset_2 = vec2(-offset.y, offset.x); // vec2 offset_2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; // vec2 offset = (dither2d * SHADOW_BLUR) / shadowMapResolution; - float z_bias = dither * 0.00002; + float z_bias = dither2d.r * 0.00002; // shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; // shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; @@ -46,7 +47,7 @@ float get_shadow(vec3 the_shadow_pos, float dither) { #if defined COLORED_SHADOW - vec3 get_colored_shadow(vec3 the_shadow_pos, float dither) { + vec3 get_colored_shadow(vec3 the_shadow_pos, vec2 dither2d) { #if SHADOW_TYPE == 0 // Pixelated float shadow_detector = 1.0; float shadow_black = 1.0; @@ -89,15 +90,16 @@ float get_shadow(vec3 the_shadow_pos, float dither) { float alpha_complement; - float current_radius = dither; - dither *= 6.283185307179586; + // float current_radius = dither; + // dither *= 6.283185307179586; // float dither_2 = dither + 1.5707963267948966; - vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; + vec2 offset = (dither2d * SHADOW_BLUR) / shadowMapResolution; + // vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; vec2 offset_2 = vec2(-offset.y, offset.x); // vec2 offset_2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; - float z_bias = dither * 0.00002; + float z_bias = dither2d.r * 0.00002; shadow_detector_a = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; shadow_detector_b = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; From 190fb3c4ce8668df2a06f765667038948ca7131b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 18 Aug 2025 01:08:26 -0600 Subject: [PATCH 074/147] Bloom revision --- shaders/common/solid_blocks_fragment.glsl | 12 +++---- shaders/common/water_blocks_fragment.glsl | 27 +++++++------- shaders/lib/bloom.glsl | 8 +++-- shaders/lib/config.glsl | 4 +-- shaders/lib/shadow_frag.glsl | 43 ++++++++--------------- shaders/shaders.properties | 16 ++++----- 6 files changed, 47 insertions(+), 63 deletions(-) diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 4a6dae4c..e9de48fa 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -116,11 +116,9 @@ varying vec3 omni_light; void main() { #if (defined SHADOW_CASTING && !defined NETHER) || defined DISTANT_HORIZONS #if AA_TYPE > 0 - vec2 dither2d = shifted_r_dither2d(gl_FragCoord.xy); - // float dither = shifted_r_dither(gl_FragCoord.xy); + float dither = shifted_dither17(gl_FragCoord.xy); #else - vec2 dither2d = r_dither2d(gl_FragCoord.xy); - // float dither = r_dither(gl_FragCoord.xy); + float dither = r_dither(gl_FragCoord.xy); #endif #endif // Avoid render in DH transition @@ -129,7 +127,7 @@ void main() { float sup = t * TRANSITION_DH_SUP; float inf = t * TRANSITION_DH_INF; float umbral = (gl_FogFragCoord - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); - if(umbral > dither2d.r) { + if(umbral > dither) { discard; return; } @@ -168,10 +166,10 @@ void main() { #if defined SHADOW_CASTING && !defined NETHER #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_pos, dither2d); + vec3 shadow_c = get_colored_shadow(shadow_pos, dither); shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); #else - float shadow_c = get_shadow(shadow_pos, dither2d); + float shadow_c = get_shadow(shadow_pos, dither); shadow_c = mix(shadow_c, 1.0, shadow_diffuse); #endif #else diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index 5454a475..53ca2012 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -128,15 +128,12 @@ void main() { #if SHADOW_TYPE == 1 || defined DISTANT_HORIZONS || (defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER) || SSR_TYPE > 0 #if AA_TYPE > 0 - vec2 dither2d = shifted_r_dither2d(gl_FragCoord.xy); - // float dither = shifted_r_dither(gl_FragCoord.xy); + float dither = shifted_r_dither(gl_FragCoord.xy); #else - vec2 dither2d = r_dither2d(gl_FragCoord.xy); - // float dither = r_dither(gl_FragCoord.xy); + float dither = r_dither(gl_FragCoord.xy); #endif #else - vec2 dither2d = vec2(1.0); - // float dither = 1.0; + float dither = 1.0; #endif // vec4 block_color = texture2D(tex, texcoord); @@ -172,17 +169,17 @@ void main() { sky_color_reflect = xyz_to_rgb(sky_color_reflect); #if defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER - sky_color_reflect = get_cloud(normalize((gbufferModelViewInverse * vec4(reflect_water_vec * far, 1.0)).xyz), sky_color_reflect, 0.0, dither2d.r, worldposition.xyz, int(CLOUD_STEPS_AVG * 0.5), umbral, cloud_color, dark_cloud_color); + sky_color_reflect = get_cloud(normalize((gbufferModelViewInverse * vec4(reflect_water_vec * far, 1.0)).xyz), sky_color_reflect, 0.0, dither, worldposition.xyz, int(CLOUD_STEPS_AVG * 0.5), umbral, cloud_color, dark_cloud_color); #endif if(block_type > 2.5) { // Water #ifdef VANILLA_WATER block_color = texture2D(tex, texcoord); #if defined SHADOW_CASTING && !defined NETHER #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_pos, dither2d); + vec3 shadow_c = get_colored_shadow(shadow_pos, dither); shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); #else - float shadow_c = get_shadow(shadow_pos, dither2d); + float shadow_c = get_shadow(shadow_pos, dither); shadow_c = mix(shadow_c, 1.0, shadow_diffuse); #endif #else @@ -199,7 +196,7 @@ void main() { block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tint_color.rgb; - block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither2d.r, direct_light_color); + block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); block_color.a = sqrt(block_color.a); #else @@ -229,7 +226,7 @@ void main() { fresnel = clamp(fresnel * (water_texture), 0.0, 1.0); #endif - block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither2d.r, direct_light_color); + block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); #endif @@ -240,10 +237,10 @@ void main() { #if defined SHADOW_CASTING && !defined NETHER #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_pos, dither2d); + vec3 shadow_c = get_colored_shadow(shadow_pos, dither); shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); #else - float shadow_c = get_shadow(shadow_pos, dither2d); + float shadow_c = get_shadow(shadow_pos, dither); shadow_c = mix(shadow_c, 1.0, shadow_diffuse); #endif #else @@ -257,7 +254,7 @@ void main() { block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125); if(block_type > 1.5) { // Glass - block_color = cristal_shader(fragposition, water_normal, block_color, sky_color_reflect, fresnel * fresnel, visible_sky, dither2d.r, direct_light_color); + block_color = cristal_shader(fragposition, water_normal, block_color, sky_color_reflect, fresnel * fresnel, visible_sky, dither, direct_light_color); } } @@ -267,7 +264,7 @@ void main() { float sup = t * TRANSITION_DH_SUP; float inf = t * TRANSITION_DH_INF; float draw_umbral = (gl_FogFragCoord - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); - if(draw_umbral > dither2d.r) { + if(draw_umbral > dither) { discard; return; } diff --git a/shaders/lib/bloom.glsl b/shaders/lib/bloom.glsl index d77a9aed..74d0afb2 100644 --- a/shaders/lib/bloom.glsl +++ b/shaders/lib/bloom.glsl @@ -13,18 +13,22 @@ vec3 mipmap_bloom(sampler2D image, vec2 coords, float dither) { vec2 blur_radios_factor = blur_radius_vec * (1.0 / BLOOM_SAMPLES); float n; vec2 offset; + vec2 offset_2; float dither_x; for(int i = 0; i < sample_c; i++) { dither_x = i + dither; - n = fract(dither_x * 1.6180339887) * 3.141592653589793; + n = fract(dither_x * 1.6180339887) * 6.283185307179586; offset = vec2(cos(n), sin(n)) * dither_x * blur_radios_factor; + offset_2 = vec2(-offset.y * 1.25, offset.x * 1.25); blur_sample += texture2D(image, coords + offset, -1.0).rgb; blur_sample += texture2D(image, coords - offset, -1.0).rgb; + blur_sample += texture2D(image, coords + offset_2, -1.0).rgb; + blur_sample += texture2D(image, coords - offset_2, -1.0).rgb; } - blur_sample /= (BLOOM_SAMPLES * 2.0); + blur_sample /= (BLOOM_SAMPLES * 4.0); return blur_sample; } diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index a9d03cb4..5aa00aa8 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -53,7 +53,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 // #define DOF // Enables depth of field (high performance cost). #define DOF_STRENGTH 0.09 // [0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13] Depth of field strength. #define AO 1 // [0 1] Turn on for enhanced ambient occlusion (medium performance cost). -#define AOSTEPS 4 // [4 5 6 7 8 9 10 11] How many samples are taken for AO (high performance cost). +#define AOSTEPS 4 // [2 3 4 5 6 7 8 9 10 11] How many samples are taken for AO (high performance cost). #define AO_STRENGTH 0.70 // [0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.66 0.70 0.75 0.80 0.85] Ambient occlusion strength (strength NOT affect performance). #define AA_TYPE 3 // [0 1 2 3] No: Disable antialiasing (not recommended). Denoise only: Supersampling is only used to eliminate noise. TAA: Enable antialiasing. TAA+: Use FXAA to improve the result of TAA. It does not apply if chromatic aberration or DoF is being used. //#define MOTION_BLUR // Turn on motion blur @@ -75,7 +75,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define END_CLOUDS // Activates drawing of clouds in the end (only works if volumetric clouds are active) #define BLACK_ENTITY_FIX 0 // [0 1] Removes black entity bug in old video drivers (activate ONLY if you have problems with black entities) #define BLOOM // Enable or disable bloom effect -#define BLOOM_SAMPLES 4.0 // [4.0 5.0 6.0 7.0 8.0 9.0 10.0] Bloom sample pairs. +#define BLOOM_SAMPLES 2.0 // [2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0] Bloom sample pairs. #define CHROMA_ABER 0 // [0 1] Enable chroma aberration. #define CHROMA_ABER_STRENGTH 0.04 // [0.04 0.05 0.06] Chroma aberration strength. #define VOL_LIGHT 1 // [0 1 2] Depth based: Turn on depth based godrays, faster and can work better than volumetric light for very short shadow distances. Volumetric: It activates the volumetric light, more accurate and faster, but it needs the shadows enabled to work. diff --git a/shaders/lib/shadow_frag.glsl b/shaders/lib/shadow_frag.glsl index ab45eec0..3f07083c 100644 --- a/shaders/lib/shadow_frag.glsl +++ b/shaders/lib/shadow_frag.glsl @@ -4,37 +4,25 @@ Fragment shadow function. Javier Garduño - GNU Lesser General Public License v3.0 */ -float get_shadow(vec3 the_shadow_pos, vec2 dither2d) { +float get_shadow(vec3 the_shadow_pos, float dither) { float shadow_sample = 1.0; #if SHADOW_TYPE == 0 // Pixelated shadow_sample = shadow2D(shadowtex1, the_shadow_pos).r; #elif SHADOW_TYPE == 1 // Soft - // float current_radius = dither; - // dither *= 6.283185307179586; - // float dither_2 = dither + 1.5707963267948966; + float current_radius = dither; + dither *= 6.283185307179586; + float dither_2 = dither + 1.5707963267948966; shadow_sample = 0.0; - vec2 offset = (dither2d * SHADOW_BLUR) / shadowMapResolution; - // vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; - vec2 offset_2 = vec2(-offset.y, offset.x); + vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; + vec2 offset_2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; - // vec2 offset_2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; - - // vec2 offset = (dither2d * SHADOW_BLUR) / shadowMapResolution; - - float z_bias = dither2d.r * 0.00002; - - // shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; - // shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; - - // shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset_2, the_shadow_pos.z - z_bias)).r; - // shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset_2, the_shadow_pos.z - z_bias)).r; + float z_bias = dither * 0.00002; shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; - shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset_2, the_shadow_pos.z - z_bias)).r; shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset_2, the_shadow_pos.z - z_bias)).r; @@ -47,7 +35,7 @@ float get_shadow(vec3 the_shadow_pos, vec2 dither2d) { #if defined COLORED_SHADOW - vec3 get_colored_shadow(vec3 the_shadow_pos, vec2 dither2d) { + vec3 get_colored_shadow(vec3 the_shadow_pos, float dither) { #if SHADOW_TYPE == 0 // Pixelated float shadow_detector = 1.0; float shadow_black = 1.0; @@ -90,20 +78,17 @@ float get_shadow(vec3 the_shadow_pos, vec2 dither2d) { float alpha_complement; - // float current_radius = dither; - // dither *= 6.283185307179586; - // float dither_2 = dither + 1.5707963267948966; + float current_radius = dither; + dither *= 6.283185307179586; + float dither_2 = dither + 1.5707963267948966; - vec2 offset = (dither2d * SHADOW_BLUR) / shadowMapResolution; - // vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; - vec2 offset_2 = vec2(-offset.y, offset.x); - // vec2 offset_2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; + vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; + vec2 offset_2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; - float z_bias = dither2d.r * 0.00002; + float z_bias = dither * 0.00002; shadow_detector_a = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; shadow_detector_b = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; - shadow_detector_c = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset_2, the_shadow_pos.z - z_bias)).r; shadow_detector_d = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset_2, the_shadow_pos.z - z_bias)).r; diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 66304126..7a7bbaf5 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -1,14 +1,14 @@ # MakeUp - shader.properties #Profiles -profile.no_effects= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=0 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=0 SUN_REFLECTION=0 WAVING=0 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS -profile.shadowless_low= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS -profile.shadowless_medium= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.shadowless_high= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.no_effects= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=0 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=0 SUN_REFLECTION=0 WAVING=0 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS +profile.shadowless_low= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS +profile.shadowless_medium= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.shadowless_high= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS # Default forced options vignette = false From e43d44a3968b6739d3b9f384d223ae71416f0cd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Tue, 19 Aug 2025 02:09:42 -0600 Subject: [PATCH 075/147] Micro-optimization --- shaders/lib/fast_taa.glsl | 45 +++++++- shaders/lib/shadow_frag.glsl | 2 + shaders/lib/volumetric_clouds.glsl | 105 ++++++++++++++++++- shaders/lib/volumetric_clouds_end.glsl | 136 +++++++++---------------- shaders/src/light_vertex.glsl | 55 +++++----- shaders/src/light_vertex_dh.glsl | 48 +++++---- shaders/src/position_vertex.glsl | 110 +++++++++----------- shaders/src/position_vertex_dh.glsl | 1 - shaders/src/position_vertex_water.glsl | 8 +- shaders/src/shadow_src_vertex.glsl | 89 +++++----------- 10 files changed, 327 insertions(+), 272 deletions(-) diff --git a/shaders/lib/fast_taa.glsl b/shaders/lib/fast_taa.glsl index 7f74e130..fabf9f76 100644 --- a/shaders/lib/fast_taa.glsl +++ b/shaders/lib/fast_taa.glsl @@ -175,7 +175,7 @@ float line_detector(vec3 center, vec3 up, vec3 down, vec3 left, vec3 right, vec3 return smoothstep(relative_threshold, relative_threshold + smoothness, max_lineness); } -vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { +vec3 fast_taa_old(vec3 current_color, vec2 texcoord_past) { // Verificamos si proyección queda fuera de la pantalla actual if (clamp(texcoord_past, 0.0, 1.0) != texcoord_past) { return current_color; @@ -248,6 +248,49 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { } } +vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { + // Verificamos si proyección queda fuera de la pantalla actual + if (clamp(texcoord_past, 0.0, 1.0) != texcoord_past) { + return current_color; + } else { + // Previous color + vec3 previous = texture2DLod(colortex3, texcoord_past, 0.0).rgb; + + vec3 left = texture2DLod(colortex1, texcoord + vec2(-pixel_size_x, 0.0), 0.0).rgb; + vec3 right = texture2DLod(colortex1, texcoord + vec2(pixel_size_x, 0.0), 0.0).rgb; + vec3 down = texture2DLod(colortex1, texcoord + vec2(0.0, -pixel_size_y), 0.0).rgb; + vec3 up = texture2DLod(colortex1, texcoord + vec2(0.0, pixel_size_y), 0.0).rgb; + vec3 ul = texture2DLod(colortex1, texcoord + vec2(-pixel_size_x, pixel_size_y), 0.0).rgb; + vec3 ur = texture2DLod(colortex1, texcoord + vec2(pixel_size_x, pixel_size_y), 0.0).rgb; + vec3 dl = texture2DLod(colortex1, texcoord + vec2(-pixel_size_x, -pixel_size_y), 0.0).rgb; + vec3 dr = texture2DLod(colortex1, texcoord + vec2(pixel_size_x, -pixel_size_y), 0.0).rgb; + + vec3 c_max = max(max(max(left, right), down),max(up, max(ul, max(ur, max(dl, max(dr, current_color)))))); + vec3 c_min = min(min(min(left, right), down),min(up, min(ul, min(ur, min(dl, min(dr, current_color)))))); + + // Clip 3 + vec3 cliped_previous = convex_hull( + current_color, + previous, + up, + down, + left, + right, + ul, + ur, + dl, + dr + ); + + float color_distance = clamp((distance(previous, cliped_previous) / luma(cliped_previous)) * 1.0, 0.0, 1.0); + color_distance = color_distance * 0.25; + + return mix(current_color, cliped_previous, 0.90 - color_distance); + // return mix(current_color, previous, 0.70); + // return vec3(edge); + } +} + vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { // Verificamos si proyección queda fuera de la pantalla actual if (clamp(texcoord_past, 0.0, 1.0) != texcoord_past) { diff --git a/shaders/lib/shadow_frag.glsl b/shaders/lib/shadow_frag.glsl index 3f07083c..88fe230c 100644 --- a/shaders/lib/shadow_frag.glsl +++ b/shaders/lib/shadow_frag.glsl @@ -18,6 +18,7 @@ float get_shadow(vec3 the_shadow_pos, float dither) { vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; vec2 offset_2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; + // vec2 offset_2 = vec2(-offset.y, offset.x); float z_bias = dither * 0.00002; @@ -84,6 +85,7 @@ float get_shadow(vec3 the_shadow_pos, float dither) { vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; vec2 offset_2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; + // vec2 offset_2 = vec2(-offset.y, offset.x); float z_bias = dither * 0.00002; diff --git a/shaders/lib/volumetric_clouds.glsl b/shaders/lib/volumetric_clouds.glsl index 1b5f64b3..4a9327a5 100644 --- a/shaders/lib/volumetric_clouds.glsl +++ b/shaders/lib/volumetric_clouds.glsl @@ -2,7 +2,7 @@ Fast volumetric clouds - MakeUp implementation */ -vec3 get_cloud(vec3 view_vector, vec3 block_color, float bright, float dither, vec3 base_pos, int samples, float umbral, vec3 cloud_color, vec3 dark_cloud_color) { +vec3 get_cloud_old(vec3 view_vector, vec3 block_color, float bright, float dither, vec3 base_pos, int samples, float umbral, vec3 cloud_color, vec3 dark_cloud_color) { float plane_distance; float cloud_value; float density; @@ -144,3 +144,106 @@ vec3 get_cloud(vec3 view_vector, vec3 block_color, float bright, float dither, v return block_color; } + +vec3 get_cloud(vec3 view_vector, vec3 block_color, float bright, float dither, vec3 base_pos, int samples, float umbral, vec3 cloud_color, vec3 dark_cloud_color) { + #if VOL_LIGHT == 0 + block_color.rgb *= clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; + #endif + + #if defined DISTANT_HORIZONS && defined DEFERRED_SHADER + float d_dh = texture2D(dhDepthTex0, gl_FragCoord.xy / vec2(viewWidth, viewHeight)).r; + float linear_d_dh = ld_dh(d_dh); + if (linear_d_dh < 0.9999) { + return block_color; + } + #endif + + if (view_vector.y > 0.0) { // Over horizon + float view_y_inv = 1.0 / view_vector.y; + + float plane_distance_inf = (CLOUD_PLANE - base_pos.y) * view_y_inv; + vec3 intersection_pos = (view_vector * plane_distance_inf) + base_pos; + + float plane_distance_sup = (CLOUD_PLANE_SUP - base_pos.y) * view_y_inv; + vec3 intersection_pos_sup = (view_vector * plane_distance_sup) + base_pos; + + float dif_sup = CLOUD_PLANE_SUP - CLOUD_PLANE_CENTER; + float dif_inf = CLOUD_PLANE_CENTER - CLOUD_PLANE; + + vec3 increment = (intersection_pos_sup - intersection_pos) / samples; + + float increment_dist = length(increment); + + float dist_aux_coeff = (CLOUD_PLANE_SUP - CLOUD_PLANE) * 0.075; + float dist_aux_coeff_blur = dist_aux_coeff * 0.3; + float opacity_dist = dist_aux_coeff * 2.0 * view_y_inv; + + float cloud_value = 0.0; + float density = 0.0; // Inicializar + bool first_contact = true; + + intersection_pos += (increment * dither); + + for (int i = 0; i < samples; i++) { + float current_value = texture2D(gaux2, (intersection_pos.xz * 0.0002777777777777778) + (frameTimeCounter * CLOUD_HI_FACTOR)).r; + + #if V_CLOUDS == 2 && CLOUD_VOL_STYLE == 0 + current_value += texture2D(gaux2, (intersection_pos.zx * 0.0002777777777777778) + (frameTimeCounter * CLOUD_LOW_FACTOR)).r; + current_value = smoothstep(0.05, 0.95, current_value * 0.5); + #endif + + current_value = (current_value - umbral) / (1.0 - umbral); + + float surface_inf = CLOUD_PLANE_CENTER - (current_value * dif_inf); + float surface_sup = CLOUD_PLANE_CENTER + (current_value * dif_sup); + + float current_opacity = 0.0; + float cloud_thickness = surface_sup - surface_inf; + + if (intersection_pos.y > surface_inf && intersection_pos.y < surface_sup) { + // Dentro de la nube + current_opacity = min(increment_dist, cloud_thickness); + } + else if (cloud_thickness > 0.0 && i > 0) { + // Cerca del borde de la nube (desenfoque) + float distance_aux = min(abs(intersection_pos.y - surface_inf), abs(intersection_pos.y - surface_sup)); + if (distance_aux < dist_aux_coeff_blur) { + float blur_factor = 1.0 - (distance_aux / dist_aux_coeff_blur); + current_opacity = min(blur_factor * increment_dist, cloud_thickness); + } + } + + if (current_opacity > 0.0) { + cloud_value += current_opacity; + if (first_contact) { + first_contact = false; + density = (surface_sup - intersection_pos.y) / (CLOUD_PLANE_SUP - CLOUD_PLANE); + } + } + + intersection_pos += increment; + } + + cloud_value = clamp(cloud_value / opacity_dist, 0.0, 1.0); + density = clamp(density, 0.0001, 1.0); + + float att_factor = mix(1.0, 0.75, bright * (1.0 - rainStrength)); + + // --- OPTIMIZACIÓN: Reemplazar pow() por aproximaciones con sqrt() --- + // pow(x, 0.25) es mucho más rápido y visualmente casi idéntico a pow(x, 0.3) o pow(x, 0.4) + float density_approx = sqrt(sqrt(density)); // x^0.25 + + #if CLOUD_VOL_STYLE == 1 + cloud_color = mix(cloud_color * att_factor, dark_cloud_color * att_factor, density_approx * 0.85); + #else + cloud_color = mix(cloud_color * att_factor, dark_cloud_color * att_factor, sqrt(density)); + #endif + + float cloud_value_approx = sqrt(sqrt(cloud_value)); + cloud_color = mix(cloud_color, cloud_color * 13.0, (1.0 - cloud_value_approx) * bright * bright * (1.0 - rainStrength)); + + block_color = mix(block_color, cloud_color, cloud_value * clamp((view_vector.y - 0.06) * 5.0, 0.0, 1.0)); + } + + return block_color; +} diff --git a/shaders/lib/volumetric_clouds_end.glsl b/shaders/lib/volumetric_clouds_end.glsl index bfae4b4a..a99f26a7 100644 --- a/shaders/lib/volumetric_clouds_end.glsl +++ b/shaders/lib/volumetric_clouds_end.glsl @@ -3,31 +3,10 @@ Fast volumetric clouds (for The End) - MakeUp implementation */ vec3 get_end_cloud(vec3 view_vector, vec3 block_color, float bright, float dither, vec3 base_pos, int samples) { - float plane_distance; - float cloud_value; - float umbral; - float density; - vec3 intersection_pos; - vec3 intersection_pos_sup; - float dif_inf; - float dif_sup; - float dist_aux_coeff; - float current_value; - float surface_inf; - float surface_sup; - bool first_contact = true; - float opacity_dist; - vec3 increment; - float increment_dist; - float view_y_inv = 1.0 / view_vector.y; - float distance_aux; - float dist_aux_coeff_blur; - - block_color.rgb *= - clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; + block_color.rgb *= clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; #if defined DISTANT_HORIZONS && defined DEFERRED_SHADER - float d_dh = texture2DLod(dhDepthTex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight), 0.0).r; + float d_dh = texture2DLod(dhDepthTex0, gl_FragCoord.xy / vec2(viewWidth, viewHeight), 0.0).r; float linear_d_dh = ld_dh(d_dh); if (linear_d_dh < 0.9999) { return block_color; @@ -35,85 +14,70 @@ vec3 get_end_cloud(vec3 view_vector, vec3 block_color, float bright, float dithe #endif if (view_vector.y > 0.0) { // Vista sobre el horizonte - umbral = 0.25; - + float umbral = 0.25; vec3 cloud_color = block_color * 1.75; vec3 dark_cloud_color = block_color * 0.9; - plane_distance = (CLOUD_PLANE - base_pos.y) * view_y_inv; - intersection_pos = (view_vector * plane_distance) + base_pos; + float view_y_inv = 1.0 / view_vector.y; - plane_distance = (CLOUD_PLANE_SUP - base_pos.y) * view_y_inv; - intersection_pos_sup = (view_vector * plane_distance) + base_pos; + float plane_distance_inf = (CLOUD_PLANE - base_pos.y) * view_y_inv; + vec3 intersection_pos = (view_vector * plane_distance_inf) + base_pos; - dif_sup = CLOUD_PLANE_SUP - CLOUD_PLANE_CENTER; - dif_inf = CLOUD_PLANE_CENTER - CLOUD_PLANE; - dist_aux_coeff = (CLOUD_PLANE_SUP - CLOUD_PLANE) * 0.075; - dist_aux_coeff_blur = dist_aux_coeff * 0.4; + float plane_distance_sup = (CLOUD_PLANE_SUP - base_pos.y) * view_y_inv; + vec3 intersection_pos_sup = (view_vector * plane_distance_sup) + base_pos; - opacity_dist = dist_aux_coeff * 2.5 * view_y_inv; + vec3 increment = (intersection_pos_sup - intersection_pos) / samples; + float increment_dist = length(increment); - increment = (intersection_pos_sup - intersection_pos) / samples; - increment_dist = length(increment); + float dif_sup = CLOUD_PLANE_SUP - CLOUD_PLANE_CENTER; + float dif_inf = CLOUD_PLANE_CENTER - CLOUD_PLANE; + float dist_aux_coeff = (CLOUD_PLANE_SUP - CLOUD_PLANE) * 0.075; + float dist_aux_coeff_blur = dist_aux_coeff * 0.4; + float opacity_dist = dist_aux_coeff * 2.5 * view_y_inv; - cloud_value = 0.0; + float cloud_value = 0.0; + float density = 0.0; // Inicializar + bool first_contact = true; intersection_pos += (increment * dither); for (int i = 0; i < samples; i++) { - current_value = - texture2D( - gaux2, - (intersection_pos.xz * .0008) + (frameTimeCounter * CLOUD_HI_FACTOR * 3.0) - ).r; + float current_value = texture2D(gaux2, (intersection_pos.xz * .0008) + (frameTimeCounter * CLOUD_HI_FACTOR * 3.0)).r; #if V_CLOUDS == 2 && CLOUD_VOL_STYLE == 0 - current_value += - texture2D( - gaux2, - (intersection_pos.zx * .0008) + (frameTimeCounter * CLOUD_LOW_FACTOR * 3.0) - ).r; - current_value *= 0.5; - current_value = smoothstep(0.05, 0.95, current_value); + current_value += texture2D(gaux2, (intersection_pos.zx * .0008) + (frameTimeCounter * CLOUD_LOW_FACTOR * 3.0)).r; + current_value = smoothstep(0.05, 0.95, current_value * 0.5); #endif - // Ajuste por umbral current_value = (current_value - umbral) / (1.0 - umbral); - // Superficies inferior y superior de nubes - surface_inf = CLOUD_PLANE_CENTER - (current_value * dif_inf); - surface_sup = CLOUD_PLANE_CENTER + (current_value * dif_sup); + float surface_inf = CLOUD_PLANE_CENTER - (current_value * dif_inf); + float surface_sup = CLOUD_PLANE_CENTER + (current_value * dif_sup); - if ( // Dentro de la nube - intersection_pos.y > surface_inf && - intersection_pos.y < surface_sup - ) { - cloud_value += min(increment_dist, surface_sup - surface_inf); + // --- OPTIMIZACIÓN: Reestructurar la lógica del bucle --- + float current_opacity = 0.0; + float cloud_thickness = surface_sup - surface_inf; - if (first_contact) { - first_contact = false; - density = - (surface_sup - intersection_pos.y) / (CLOUD_PLANE_SUP - CLOUD_PLANE); - } + if (intersection_pos.y > surface_inf && intersection_pos.y < surface_sup) { + // Dentro de la nube + current_opacity = min(increment_dist, cloud_thickness); } - else if (surface_inf < surface_sup && i > 0) { // Fuera de la nube - distance_aux = min( - abs(intersection_pos.y - surface_inf), - abs(intersection_pos.y - surface_sup) - ); - + else if (cloud_thickness > 0.0 && i > 0) { + // Cerca del borde de la nube (desenfoque) + float distance_aux = min(abs(intersection_pos.y - surface_inf), abs(intersection_pos.y - surface_sup)); if (distance_aux < dist_aux_coeff_blur) { - cloud_value += min( - (clamp(dist_aux_coeff_blur - distance_aux, 0.0, dist_aux_coeff_blur) / dist_aux_coeff_blur) * increment_dist, - surface_sup - surface_inf - ); - - if (first_contact) { - first_contact = false; - density = - (surface_sup - intersection_pos.y) / - (CLOUD_PLANE_SUP - CLOUD_PLANE); - } + // El cálculo original se simplifica a esto, que es más rápido. + float blur_factor = 1.0 - (distance_aux / dist_aux_coeff_blur); + current_opacity = min(blur_factor * increment_dist, cloud_thickness); + } + } + + // La lógica de acumulación y primer contacto se gestiona UNA SOLA VEZ. + if (current_opacity > 0.0) { + cloud_value += current_opacity; + if (first_contact) { + first_contact = false; + density = (surface_sup - intersection_pos.y) / (CLOUD_PLANE_SUP - CLOUD_PLANE); } } @@ -124,18 +88,10 @@ vec3 get_end_cloud(vec3 view_vector, vec3 block_color, float bright, float dithe density = clamp(density, 0.0001, 1.0); cloud_color = mix(cloud_color, dark_cloud_color, sqrt(density)); - - // Halo brillante de contra al sol cloud_color = mix(cloud_color, cloud_color * 2.0, (1.0 - cloud_value) * bright); - block_color = mix( - block_color, - cloud_color, - cloud_value * clamp((view_vector.y - 0.06) * 5.0, 0.0, 1.0) - ); - - block_color = - mix(block_color, vec3(1.0), clamp(bright * .04, 0.0, 1.0)); + block_color = mix(block_color, cloud_color, cloud_value * clamp((view_vector.y - 0.06) * 5.0, 0.0, 1.0)); + block_color = mix(block_color, vec3(1.0), clamp(bright * .04, 0.0, 1.0)); } return block_color; diff --git a/shaders/src/light_vertex.glsl b/shaders/src/light_vertex.glsl index 1816b9a3..369d17ea 100644 --- a/shaders/src/light_vertex.glsl +++ b/shaders/src/light_vertex.glsl @@ -2,9 +2,7 @@ tint_color = gl_Color; // Native light (lmcoord.x: candel, lmcoord.y: sky) ---- vec2 illumination = lmcoord; - -// Sky visibility -illumination.y = (max(illumination.y, 0.065) - 0.065) * 1.06951871657754; +illumination.y = max(illumination.y - 0.065, 0.0) * 1.06951871657754; visible_sky = clamp(illumination.y, 0.0, 1.0); // Underwater light adjust @@ -17,18 +15,15 @@ if (isEyeInWater == 1) { #endif // Candels color and intensity -candle_color = - CANDLE_BASELIGHT * (pow(illumination.x, 1.5) + sixth_pow(illumination.x * 1.17)); +// --- OPTIMIZACIÓN #1: Reemplazar pow(x, 1.5) por x * sqrt(x) --- +candle_color = CANDLE_BASELIGHT * (illumination.x * sqrt(illumination.x) + sixth_pow(illumination.x * 1.17)); #ifdef DYN_HAND_LIGHT - float dist_factor; - float hand_dist; - vec3 hand_light; - if (heldItemId == 11001 || heldItemId2 == 11001 || heldItemId == 11002 || heldItemId2 == 11002) { float dist_offset = (heldItemId == 11001 || heldItemId2 == 11001) ? 0.0 : 0.5; - hand_dist = (1.0 - clamp((gl_FogFragCoord * 0.06666666666666667) + dist_offset, 0.0, 1.0)); - hand_light = CANDLE_BASELIGHT * (pow(hand_dist, 1.5) + sixth_pow(hand_dist * 1.17)); + float hand_dist = (1.0 - clamp((gl_FogFragCoord * 0.06666666666666667) + dist_offset, 0.0, 1.0)); + // --- OPTIMIZACIÓN #1 (de nuevo): Reemplazar pow(x, 1.5) --- + vec3 hand_light = CANDLE_BASELIGHT * (hand_dist * sqrt(hand_dist) + sixth_pow(hand_dist * 1.17)); candle_color = max(candle_color, hand_light); } #endif @@ -37,15 +32,15 @@ candle_color = clamp(candle_color, vec3(0.0), vec3(4.0)); // Atenuation by light angle =================================== #if defined THE_END || defined NETHER - vec3 sun_vec = - normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; + vec3 sun_vec = normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; #else vec3 sun_vec = normalize(sunPosition); #endif vec3 normal = gl_NormalMatrix * gl_Normal; float sun_light_strength; -if (length(normal) != 0.0) { // Workaround for undefined normals +// --- OPTIMIZACIÓN #2: Evitar length() en el condicional --- +if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals normal = normalize(normal); sun_light_strength = dot(normal, sun_vec); } else { @@ -56,8 +51,7 @@ if (length(normal) != 0.0) { // Workaround for undefined normals #if defined THE_END || defined NETHER direct_light_strength = sun_light_strength; #else - direct_light_strength = - mix(-sun_light_strength, sun_light_strength, light_mix); + direct_light_strength = mix(-sun_light_strength, sun_light_strength, light_mix); #endif // Omni light intensity changes by angle @@ -67,26 +61,25 @@ float omni_strength = (direct_light_strength * .125) + 1.0; #ifdef UNKNOWN_DIM direct_light_color = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; #else - direct_light_color = day_blend( - LIGHT_SUNSET_COLOR, - LIGHT_DAY_COLOR, - LIGHT_NIGHT_COLOR - ); + direct_light_color = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); #endif // Direct light strenght -- #ifdef FOLIAGE_V // This shader has foliage + // --- CORRECCIÓN: La variable se declara y calcula aquí, fuera del if/else --- + // Esto asegura que 'far_direct_light_strength' esté siempre disponible después de este bloque. float far_direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); if (mc_Entity.x != ENTITY_LEAVES) { far_direct_light_strength = far_direct_light_strength * 0.75 + 0.25; } + + // Ahora, la lógica del if/else solo modifica 'direct_light_strength' y 'omni_strength'. if (is_foliage > .2) { // It's foliage, light is atenuated by angle #ifdef SHADOW_CASTING direct_light_strength = sqrt(abs(direct_light_strength)); #else direct_light_strength = (clamp(direct_light_strength, 0.0, 1.0) * 0.5 + 0.5) * 0.75; #endif - omni_strength = 1.0; } else { direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); @@ -99,16 +92,13 @@ float omni_strength = (direct_light_strength * .125) + 1.0; #if defined THE_END || defined NETHER omni_light = LIGHT_DAY_COLOR; #else - direct_light_color = mix( - direct_light_color, - ZENITH_SKY_RAIN_COLOR * luma(direct_light_color) * 0.4, - rainStrength - ); + direct_light_color = mix(direct_light_color, ZENITH_SKY_RAIN_COLOR * luma(direct_light_color) * 0.4, rainStrength); // Minimal light vec3 omni_color = mix(hi_sky_color_rgb, direct_light_color * 0.45, OMNI_TINT); float omni_color_luma = color_average(omni_color); - float luma_ratio = AVOID_DARK_LEVEL / omni_color_luma; + // --- OPTIMIZACIÓN #3: Prevenir división por cero --- + float luma_ratio = AVOID_DARK_LEVEL / max(omni_color_luma, 0.0001); vec3 omni_color_min = omni_color * luma_ratio; omni_color = max(omni_color, omni_color_min); @@ -118,8 +108,7 @@ float omni_strength = (direct_light_strength * .125) + 1.0; // Avoid flat illumination in caves for entities #ifdef CAVEENTITY_V float candle_cave_strength = (direct_light_strength * .5) + .5; - candle_cave_strength = - mix(candle_cave_strength, 1.0, visible_sky); + candle_cave_strength = mix(candle_cave_strength, 1.0, visible_sky); candle_color *= candle_cave_strength; #endif @@ -127,7 +116,11 @@ float omni_strength = (direct_light_strength * .125) + 1.0; #ifndef SHADOW_CASTING // Fake shadows if (isEyeInWater == 0) { - direct_light_strength = mix(0.0, direct_light_strength, pow(visible_sky, 10.0)); + // --- OPTIMIZACIÓN #4: Reemplazar pow(x, 10.0) con multiplicaciones --- + float vis_sky_2 = visible_sky * visible_sky; + float vis_sky_4 = vis_sky_2 * vis_sky_2; + float vis_sky_8 = vis_sky_4 * vis_sky_4; + direct_light_strength = mix(0.0, direct_light_strength, vis_sky_8 * vis_sky_2); } else { direct_light_strength = mix(0.0, direct_light_strength, visible_sky); } diff --git a/shaders/src/light_vertex_dh.glsl b/shaders/src/light_vertex_dh.glsl index 20110f92..35866e18 100644 --- a/shaders/src/light_vertex_dh.glsl +++ b/shaders/src/light_vertex_dh.glsl @@ -6,7 +6,9 @@ tint_color = gl_Color; #else vec2 illumination = lmcoord; #endif -illumination.y = (max(illumination.y, 0.065) - 0.065) * 1.06951871657754; + +// OPTIMIZACIÓN: Reemplazar (max(x, c) - c) con max(x - c, 0), que puede ser marginalmente más rápido. +illumination.y = max(illumination.y - 0.065, 0.0) * 1.06951871657754; visible_sky = clamp(illumination.y, 0.0, 1.0); #if defined UNKNOWN_DIM @@ -14,22 +16,25 @@ visible_sky = clamp(illumination.y, 0.0, 1.0); #endif // Intensidad y color de luz de candelas -candle_color = - CANDLE_BASELIGHT * (pow(illumination.x, 1.5) + sixth_pow(illumination.x * 1.17)); - +// --- OPTIMIZACIÓN #1: Reemplazar pow(x, 1.5) por x * sqrt(x) --- +// Es mucho más rápido y matemáticamente idéntico. +float candle_luma = illumination.x * sqrt(illumination.x); +candle_color = CANDLE_BASELIGHT * (candle_luma + sixth_pow(illumination.x * 1.17)); candle_color = clamp(candle_color, vec3(0.0), vec3(4.0)); // Atenuación por dirección de luz directa =================================== #if defined THE_END || defined NETHER - vec3 sun_vec = - normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; + vec3 sun_vec = normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; #else vec3 sun_vec = normalize(sunPosition); #endif vec3 normal = gl_NormalMatrix * gl_Normal; float sun_light_strength; -if (length(normal) != 0.0) { // Workaround for undefined normals + +// --- OPTIMIZACIÓN #2: Evitar length() en el condicional --- +// Comprobar la longitud al cuadrado (dot product) es mucho más rápido que la longitud (sqrt). +if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals normal = normalize(normal); sun_light_strength = dot(normal, sun_vec); } else { @@ -40,8 +45,7 @@ if (length(normal) != 0.0) { // Workaround for undefined normals #if defined THE_END || defined NETHER direct_light_strength = sun_light_strength; #else - direct_light_strength = - mix(-sun_light_strength, sun_light_strength, light_mix); + direct_light_strength = mix(-sun_light_strength, sun_light_strength, light_mix); #endif // Intensidad por dirección @@ -51,11 +55,7 @@ float omni_strength = (direct_light_strength * .125) + 1.0; #ifdef UNKNOWN_DIM direct_light_color = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; #else - direct_light_color = day_blend( - LIGHT_SUNSET_COLOR, - LIGHT_DAY_COLOR, - LIGHT_NIGHT_COLOR - ); + direct_light_color = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); #endif direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); @@ -63,25 +63,29 @@ direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); #if defined THE_END || defined NETHER omni_light = LIGHT_DAY_COLOR; #else - direct_light_color = mix( - direct_light_color, - ZENITH_SKY_RAIN_COLOR * luma(direct_light_color) * 0.4, - rainStrength - ); + direct_light_color = mix(direct_light_color, ZENITH_SKY_RAIN_COLOR * luma(direct_light_color) * 0.4, rainStrength); // Minimal light vec3 omni_color = mix(hi_sky_color_rgb, direct_light_color * 0.45, OMNI_TINT); float omni_color_luma = color_average(omni_color); - float luma_ratio = AVOID_DARK_LEVEL / omni_color_luma; + + // --- OPTIMIZACIÓN #3: Prevenir división por cero --- + float luma_ratio = AVOID_DARK_LEVEL / max(omni_color_luma, 0.0001); + vec3 omni_color_min = omni_color * luma_ratio; omni_color = max(omni_color, omni_color_min); omni_light = mix(omni_color_min, omni_color, visible_sky); - #endif if (isEyeInWater == 0) { - direct_light_strength = mix(0.0, direct_light_strength, pow(visible_sky, 10.0)); + // --- OPTIMIZACIÓN #1: Reemplazar pow(x, 10.0) con multiplicaciones --- + // Esto es órdenes de magnitud más rápido. x^10 = (x^2)^2 * x^2 + float vis_sky_2 = visible_sky * visible_sky; // x^2 + float vis_sky_4 = vis_sky_2 * vis_sky_2; // x^4 + float vis_sky_8 = vis_sky_4 * vis_sky_4; // x^8 + float vis_sky_10 = vis_sky_8 * vis_sky_2; // x^10 + direct_light_strength = mix(0.0, direct_light_strength, vis_sky_10); } else { direct_light_strength = mix(0.0, direct_light_strength, visible_sky); } diff --git a/shaders/src/position_vertex.glsl b/shaders/src/position_vertex.glsl index 993d1ffe..df2bbe44 100644 --- a/shaders/src/position_vertex.glsl +++ b/shaders/src/position_vertex.glsl @@ -1,74 +1,64 @@ -#ifdef FOLIAGE_V // General block shader (it has foliage) - #if WAVING == 1 - vec4 sub_position = gl_ModelViewMatrix * gl_Vertex; - vec4 position = gbufferModelViewInverse * sub_position; +gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + +#ifdef FOLIAGE_V // Lógica optimizada para follaje y bloques generales + + is_foliage = 0.0; + + // Comprobamos si la entidad actual es un tipo de follaje. + bool isFoliageEntity = ( + mc_Entity.x == ENTITY_LOWERGRASS || + mc_Entity.x == ENTITY_UPPERGRASS || + mc_Entity.x == ENTITY_SMALLGRASS || + mc_Entity.x == ENTITY_SMALLENTS || + mc_Entity.x == ENTITY_LEAVES || + mc_Entity.x == ENTITY_SMALLENTS_NW + ); - is_foliage = 0.0; - - if ( - mc_Entity.x == ENTITY_LOWERGRASS || - mc_Entity.x == ENTITY_UPPERGRASS || - mc_Entity.x == ENTITY_SMALLGRASS || - mc_Entity.x == ENTITY_SMALLENTS || - mc_Entity.x == ENTITY_LEAVES - ) { - vec3 worldpos = position.xyz + cameraPosition; - - is_foliage = 0.4; - - float weight = float(gl_MultiTexCoord0.t < mc_midTexCoord.t); - - if (mc_Entity.x == ENTITY_UPPERGRASS) { - weight += 1.0; - } else if (mc_Entity.x == ENTITY_LEAVES) { - weight = .3; - } else if (mc_Entity.x == ENTITY_SMALLENTS && (weight > 0.9 || fract(worldpos.y + 0.0675) > 0.01)) { - weight = 1.0; + vec4 sub_position = gl_ModelViewMatrix * gl_Vertex; + vec4 position = gbufferModelViewInverse * sub_position; + + if (isFoliageEntity) { + is_foliage = 0.4; + + #if WAVING == 1 + if (mc_Entity.x != ENTITY_SMALLENTS_NW) { + vec3 worldpos = position.xyz + cameraPosition; + + // Lógica original para calcular el peso del movimiento + float weight = float(gl_MultiTexCoord0.t < mc_midTexCoord.t); + + if (mc_Entity.x == ENTITY_UPPERGRASS) { + weight += 1.0; + } else if (mc_Entity.x == ENTITY_LEAVES) { + weight = .3; + } else if (mc_Entity.x == ENTITY_SMALLENTS && (weight > 0.9 || fract(worldpos.y + 0.0675) > 0.01)) { + weight = 1.0; + } + + weight *= lmcoord.y * lmcoord.y; + + // Calculamos el DESPLAZAMIENTO y lo añadimos a la posición base ya calculada. + vec3 wave_offset_world = wave_move(worldpos.xzy) * weight * (0.03 + (rainStrength * .05)); + vec4 wave_offset_clip = gl_ModelViewProjectionMatrix * vec4(wave_offset_world, 0.0); + + gl_Position += wave_offset_clip; } + #endif + } - weight *= lmcoord.y * lmcoord.y; // Evitamos movimiento en cuevas - position.xyz += wave_move(worldpos.xzy) * weight * (0.03 + (rainStrength * .05)); - } else if (mc_Entity.x == ENTITY_SMALLENTS_NW) { - is_foliage = 0.4; - } - - gl_Position = gl_ProjectionMatrix * gbufferModelView * position; - - #else // Normal position - is_foliage = 0.0; - if ( - mc_Entity.x == ENTITY_LOWERGRASS || - mc_Entity.x == ENTITY_UPPERGRASS || - mc_Entity.x == ENTITY_SMALLGRASS || - mc_Entity.x == ENTITY_SMALLENTS || - mc_Entity.x == ENTITY_LEAVES || - mc_Entity.x == ENTITY_SMALLENTS_NW - ) { - is_foliage = 0.4; - } - - vec4 sub_position = gl_ModelViewMatrix * gl_Vertex; - vec4 position = gbufferModelViewInverse * sub_position; - - gl_Position = gl_ProjectionMatrix * gbufferModelView * position; - #endif +#else // Lógica para cuando no es un shader con follaje (p. ej. entidades) -#else vec4 sub_position = gl_ModelViewMatrix * gl_Vertex; #ifndef NO_SHADOWS #ifdef SHADOW_CASTING - vec4 position = gbufferModelViewInverse * sub_position; + vec4 position = gbufferModelViewInverse * sub_position; #endif #endif - - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + #endif #ifdef EMMISIVE_V - float is_fake_emmisor = 0.0; - if (mc_Entity.x == ENTITY_F_EMMISIVE) { - is_fake_emmisor = 1.0; - } + float is_fake_emmisor = float(mc_Entity.x == ENTITY_F_EMMISIVE); #endif #if AA_TYPE > 1 @@ -84,4 +74,4 @@ #else gl_FogFragCoord = length(viewPos.xyz); #endif -#endif +#endif \ No newline at end of file diff --git a/shaders/src/position_vertex_dh.glsl b/shaders/src/position_vertex_dh.glsl index c2d97fc6..869e7a50 100644 --- a/shaders/src/position_vertex_dh.glsl +++ b/shaders/src/position_vertex_dh.glsl @@ -4,7 +4,6 @@ if(dhMaterialId == DH_BLOCK_WATER) { // Water position.y -= 0.125; } - gl_Position = dhProjection * gbufferModelView * position; #if AA_TYPE > 1 diff --git a/shaders/src/position_vertex_water.glsl b/shaders/src/position_vertex_water.glsl index 1d53694e..3d44db03 100644 --- a/shaders/src/position_vertex_water.glsl +++ b/shaders/src/position_vertex_water.glsl @@ -2,15 +2,13 @@ vec4 position2 = gl_ModelViewMatrix * gl_Vertex; fragposition = position2.xyz; vec4 position = gbufferModelViewInverse * position2; worldposition = position + vec4(cameraPosition.xyz, 0.0); -gl_Position = gl_ProjectionMatrix * gbufferModelView * position; +gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +gl_FogFragCoord = length(position2.xyz); + #if AA_TYPE > 1 gl_Position.xy += taa_offset * gl_Position.w; #endif -vec4 homopos = gbufferProjectionInverse * vec4(gl_Position.xyz / gl_Position.w, 1.0); -vec3 viewPos = homopos.xyz / homopos.w; -gl_FogFragCoord = length(viewPos); - diff --git a/shaders/src/shadow_src_vertex.glsl b/shaders/src/shadow_src_vertex.glsl index 881a082f..deed8c78 100644 --- a/shaders/src/shadow_src_vertex.glsl +++ b/shaders/src/shadow_src_vertex.glsl @@ -1,70 +1,37 @@ +vec3 light_direction; +#ifdef THE_END + light_direction = normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; +#else + light_direction = normalize(shadowLightPosition); +#endif + +float dot_product = dot(normal, light_direction); +float NdotL; + #ifdef FOLIAGE_V - float NdotL; - if (is_foliage > .2) { - #ifdef THE_END - vec3 custom_light_pos = normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; - NdotL = clamp( - abs(dot(normal, custom_light_pos)), - 0.0, - 1.0 - ); - #else - vec3 normal_light_pos = normalize(shadowLightPosition); - NdotL = clamp( - abs(dot(normal, normal_light_pos)), - 0.0, - 1.0 - ); - #endif - } else { - #ifdef THE_END - NdotL = clamp( - dot( - normal, - normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz - ), - 0.0, - 1.0 - ); - #else - NdotL = clamp( - dot( - normal, - normalize(shadowLightPosition) - ), - 0.0, - 1.0 - ); - #endif - } + float foliage_factor = step(0.2, is_foliage); + NdotL = mix(dot_product, abs(dot_product), foliage_factor); #else - #ifdef THE_END - float NdotL = clamp( - dot( - normal, - normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz - ), - 0.0, - 1.0 - ); - #else - float NdotL = clamp( - dot( - normal, - normalize(shadowLightPosition) - ), - 0.0, - 1.0 - ); - #endif + NdotL = dot_product; #endif -vec3 shadow_world_normal = normalize(mat3(gbufferModelViewInverse) * (normal * 1024.0) + gbufferModelViewInverse[3].xyz); +NdotL = clamp(NdotL, 0.0, 1.0); + +vec3 shadow_world_normal = normalize(mat3(gbufferModelViewInverse) * normal); + vec3 bias = shadow_world_normal * min(SHADOW_FIX_FACTOR + length(position.xyz) * 0.005, 0.5) * (2.0 - max(NdotL, 0.0)); vec3 shadow_world = position.xyz + bias; shadow_pos = get_shadow_pos(shadow_world); -vec2 shadow_diffuse_aux = (shadow_pos.xy - 0.5) * 2.0; -shadow_diffuse = sqrt(shadow_diffuse_aux.x * shadow_diffuse_aux.x + shadow_diffuse_aux.y * shadow_diffuse_aux.y); -shadow_diffuse = clamp(pow(shadow_diffuse, 10.0), 0.0, 1.0); +// --- OPTIMIZACIÓN: Reemplazar sqrt() y el costoso pow() --- +vec2 shadow_diffuse_aux = shadow_pos.xy * 2.0 - 1.0; +float diffuse = length(shadow_diffuse_aux); + +// Reemplazo ultra-rápido de pow(diffuse, 10.0) +float diffuse2 = diffuse * diffuse; +float diffuse4 = diffuse2 * diffuse2; +float diffuse8 = diffuse4 * diffuse4; +shadow_diffuse = diffuse8 * diffuse2; + +shadow_diffuse = clamp(shadow_diffuse, 0.0, 1.0); \ No newline at end of file From 79847dbbf0d286434e87f3d9935f69a19b61e124 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Wed, 20 Aug 2025 17:27:02 -0600 Subject: [PATCH 076/147] Version 9.3d --- README.md | 2 +- shaders/common/composite2_fragment.glsl | 3 - shaders/common/composite_fragment.glsl | 2 +- shaders/common/deferred_fragment.glsl | 6 +- shaders/common/final_fragment.glsl | 2 +- shaders/common/prepare_fragment.glsl | 2 +- shaders/common/skybasic_fragment.glsl | 2 +- shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 2 +- shaders/lang/es_ES.lang | 2 +- shaders/lang/es_MX.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- shaders/lib/color_conversion.glsl | 15 + shaders/lib/config.glsl | 2 +- shaders/lib/dither.glsl | 83 +---- shaders/lib/fast_taa.glsl | 349 +++++++----------- shaders/shaders.properties | 8 +- .../textures/fullnoise_256-RGBA.png.mcmeta | 7 - shaders/textures/fullnoise_256_RGBA.png | Bin 218253 -> 0 bytes 22 files changed, 184 insertions(+), 315 deletions(-) delete mode 100644 shaders/textures/fullnoise_256-RGBA.png.mcmeta delete mode 100644 shaders/textures/fullnoise_256_RGBA.png diff --git a/README.md b/README.md index d5c3107a..c943f2ce 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.3c +## Version: 9.3d ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/common/composite2_fragment.glsl b/shaders/common/composite2_fragment.glsl index 0edc2f0c..a5646f18 100644 --- a/shaders/common/composite2_fragment.glsl +++ b/shaders/common/composite2_fragment.glsl @@ -28,9 +28,6 @@ uniform sampler2D colortex1; uniform mat4 gbufferPreviousModelView; uniform sampler2D depthtex1; uniform float frameTime; - - uniform float viewWidth; - uniform float viewHeight; #endif /* Ins / Outs */ diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index bbc96f2f..fef94bf2 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -128,7 +128,7 @@ void main() { #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) #if AA_TYPE > 0 - float dither = shifted_r_dither(gl_FragCoord.xy); + float dither = shifted_dither17(gl_FragCoord.xy); #else float dither = r_dither(gl_FragCoord.xy); #endif diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index 439bc7b7..e4fd7806 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -21,6 +21,7 @@ uniform float near; uniform float blindness; uniform float rainStrength; uniform sampler2D gaux3; +uniform int frameCounter; #if V_CLOUDS != 0 uniform sampler2D gaux2; @@ -57,6 +58,7 @@ uniform float pixel_size_y; #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) uniform mat4 gbufferProjection; uniform float frameTimeCounter; + uniform sampler2D colortex2; #endif /* Ins / Outs */ @@ -114,7 +116,7 @@ void main() { #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) #if AA_TYPE > 0 - float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); + float dither = shifted_semiblue(gl_FragCoord.xy + (frameCounter%5000)); #else float dither = semiblue(gl_FragCoord.xy); #endif @@ -176,8 +178,6 @@ void main() { float final_ao = mix(dbao(dither), 1.0, ao_att); block_color.rgb *= final_ao; - // block_color = vec4(vec3(final_ao), 1.0); - // block_color = vec4(vec3(linear_d), 1.0); #endif #if defined THE_END || defined NETHER diff --git a/shaders/common/final_fragment.glsl b/shaders/common/final_fragment.glsl index 2dc700f6..1c0f924e 100644 --- a/shaders/common/final_fragment.glsl +++ b/shaders/common/final_fragment.glsl @@ -107,7 +107,7 @@ void main() { #else vec3 block_color = texture2D(colortex1, texcoord).rgb; #if AA_TYPE == 3 && !defined DOF - block_color = fxaa311(block_color, 4); + block_color = fxaa311(block_color, 5); #endif #endif diff --git a/shaders/common/prepare_fragment.glsl b/shaders/common/prepare_fragment.glsl index b90a83aa..7fdcb8a2 100644 --- a/shaders/common/prepare_fragment.glsl +++ b/shaders/common/prepare_fragment.glsl @@ -35,7 +35,7 @@ void main() { #else #if AA_TYPE > 0 - float dither = shifted_dither13(gl_FragCoord.xy); + float dither = shifted_r_dither(gl_FragCoord.xy); #else float dither = dither13(gl_FragCoord.xy); #endif diff --git a/shaders/common/skybasic_fragment.glsl b/shaders/common/skybasic_fragment.glsl index b4f8a2af..9c99705e 100644 --- a/shaders/common/skybasic_fragment.glsl +++ b/shaders/common/skybasic_fragment.glsl @@ -59,7 +59,7 @@ void main() { #else #if MC_VERSION < 11604 #if AA_TYPE > 0 - float dither = shifted_dither13(gl_FragCoord.xy); + float dither = shifted_r_dither(gl_FragCoord.xy); #else float dither = dither13(gl_FragCoord.xy); #endif diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 0229bd6a..c00eb0f6 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -15,7 +15,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.3c +value.ACERCADE.0=v.9.3d #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index 56798d59..aac857f6 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3c +value.ACERCADE.0=v.9.3d # Opciones ############################# diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index 56798d59..aac857f6 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3c +value.ACERCADE.0=v.9.3d # Opciones ############################# diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index 56798d59..aac857f6 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3c +value.ACERCADE.0=v.9.3d # Opciones ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 4e50869f..37925f78 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -15,7 +15,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.3c +value.ACERCADE.0=v.9.3d #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 20a64359..32a81ecf 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -15,7 +15,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.3c +value.ACERCADE.0=v.9.3d #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index f58da7a7..39009e40 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -15,7 +15,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.3c +value.ACERCADE.0=v.9.3d #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 6463bb82..cd527c52 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -15,7 +15,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.3c +value.ACERCADE.0=v.9.3d #Options ############################# diff --git a/shaders/lib/color_conversion.glsl b/shaders/lib/color_conversion.glsl index 6fa1b6ea..febd4d0c 100644 --- a/shaders/lib/color_conversion.glsl +++ b/shaders/lib/color_conversion.glsl @@ -56,6 +56,21 @@ vec3 xyz_to_rgb(vec3 xyz) { return clamp(rgb, 0.0, 1.0); } +vec3 rgb2hsv(vec3 c) { + vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); + vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); +} + +vec3 hsv2rgb(vec3 c) { + vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} + /* ----------- */ // Funciones auxiliares para la corrección gamma (sRGB <-> Lineal) diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index 5aa00aa8..a8e6447b 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -55,7 +55,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define AO 1 // [0 1] Turn on for enhanced ambient occlusion (medium performance cost). #define AOSTEPS 4 // [2 3 4 5 6 7 8 9 10 11] How many samples are taken for AO (high performance cost). #define AO_STRENGTH 0.70 // [0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.66 0.70 0.75 0.80 0.85] Ambient occlusion strength (strength NOT affect performance). -#define AA_TYPE 3 // [0 1 2 3] No: Disable antialiasing (not recommended). Denoise only: Supersampling is only used to eliminate noise. TAA: Enable antialiasing. TAA+: Use FXAA to improve the result of TAA. It does not apply if chromatic aberration or DoF is being used. +#define AA_TYPE 2 // [0 1 2 3] No: Disable antialiasing (not recommended). Denoise only: Supersampling is only used to eliminate noise. TAA: Enable antialiasing. TAA+: Use FXAA to improve the result of TAA. It does not apply if chromatic aberration or DoF is being used. //#define MOTION_BLUR // Turn on motion blur #define MOTION_BLUR_STRENGTH 1.0 // [0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0] Set Motion blur strength. Lower framerate -> Lower strength and vice versa is recommended. #define MOTION_BLUR_SAMPLES 4 // [3 4 5 6 7 8] Motion blur samples diff --git a/shaders/lib/dither.glsl b/shaders/lib/dither.glsl index 36097544..ec64de20 100644 --- a/shaders/lib/dither.glsl +++ b/shaders/lib/dither.glsl @@ -59,13 +59,6 @@ float r_dither(vec2 frag) { return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998))); } -vec2 r_dither2d(vec2 frag) { - return vec2( - fract(dot(frag, vec2(0.75487766624669276, 0.569840290998))), - fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag))) - ); -} - float eclectic_r_dither(vec2 frag) { vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); float state = fract(dot(v * v, vec2(3571.0))); @@ -116,10 +109,6 @@ float texture_noise_64(vec2 p, sampler2D noise) { return texture2DLod(noise, p * 0.015625, 0).r; } -vec2 texture_noise2d_64(vec2 p, sampler2D noise) { - return texture2D(noise, p * 0.015625).rg; -} - float semiblue(vec2 xy) { vec2 tile = floor(xy * 0.25); float flip = mod(tile.x + tile.y, 2.0); @@ -128,19 +117,10 @@ float semiblue(vec2 xy) { return fract(dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); } -float dither_makeup(vec2 xy) { - vec2 tile = floor(xy * 0.25); - float flip = mod(tile.x + tile.y, 2.0); - xy = mix(xy, xy.yx, flip); - - float vDither = dot(vec2( 171.0, 231.0 ), xy); - return fract(vDither / 103.0); // (103.0, 71. 97.0 ) -} - -float valve_red(vec2 xy) { - float vDither = dot(vec2( 171.0, 231.0 ), xy ); - return fract(vDither / 103.0); // (103.0, 71. 97.0 ) -} +// float valve_red(vec2 xy) { +// float vDither = dot(vec2( 171.0, 231.0 ), xy ); +// return fract(vDither / 103.0); // (103.0, 71. 97.0 ) +// } #if MC_VERSION >= 11300 @@ -162,13 +142,6 @@ float valve_red(vec2 xy) { return fract(dither_shift + dot(frag, vec2(0.75487766624669276, 0.569840290998))); } - vec2 shifted_r_dither2d(vec2 frag) { - return vec2( - fract(dither_shift + dot(frag, vec2(0.75487766624669276, 0.569840290998))), - fract(dither_shift + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))) - ); - } - float shifted_eclectic_r_dither(vec2 frag) { vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); float state = fract(dot(v * v, vec2(3571.0))); @@ -220,11 +193,6 @@ float valve_red(vec2 xy) { return fract(dither_shift + dither); } - vec2 shifted_texture_noise2d_64(vec2 p, sampler2D noise) { - vec2 dither = texture2DLod(noise, p * 0.015625, 0).rg; - return fract(vec2(dither_shift) + dither); - } - float shifted_semiblue(vec2 xy) { vec2 tile = floor(xy * 0.25); float flip = mod(tile.x + tile.y, 2.0); @@ -233,21 +201,12 @@ float valve_red(vec2 xy) { return fract(dither_shift + dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); } - float shifted_dither_makeup(vec2 xy) { - vec2 tile = floor(xy * 0.25); - float flip = mod(tile.x + tile.y, 2.0); - xy = mix(xy, xy.yx, flip); - - float vDither = dot(vec2( 171.0, 231.0 ), xy); - return fract(dither_shift + (vDither / 103.0)); // (103.0, 71. 97.0 ) - } - - float shifted_valve_red(vec2 xy) { - float vDither = dot(vec2( 171.0, 231.0 ), xy ); - vDither = fract(vDither / 103.0); // (103.0, 71. 97.0 ) + // float shifted_valve_red(vec2 xy) { + // float vDither = dot(vec2( 171.0, 231.0 ), xy ); + // vDither = fract(vDither / 103.0); // (103.0, 71. 97.0 ) - return fract(dither_shift + vDither); - } + // return fract(dither_shift + vDither); + // } #else @@ -273,14 +232,6 @@ float valve_red(vec2 xy) { return fract((frame_mod * 0.4) + dot(frag, vec2(0.75487766624669276, 0.569840290998))); } - vec2 shifted_r_dither2d(vec2 frag) { - return vec2( - // fract((frame_mod * 0.4) + dot(frag, vec2(0.75487766624669276, 0.569840290998))), - fract((frame_mod * 0.4) + dot(frag, vec2(0.3076923076923077, 0.5384615384615384))), - fract((frame_mod * 0.4) + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))) - ); - } - float shifted_eclectic_r_dither(vec2 frag) { vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); float state = fract(dot(v * v, vec2(3571.0))); @@ -311,11 +262,6 @@ float valve_red(vec2 xy) { return fract((frame_mod * 0.4) + dither); } - vec2 shifted_texture_noise2d_64(vec2 p, sampler2D noise) { - vec2 dither = texture2DLod(noise, p * 0.015625, 0).rg; - return fract(vec2(frame_mod * 0.4) + dither); - } - float shifted_semiblue(vec2 xy) { vec2 tile = floor(xy * 0.25); float flip = mod(tile.x + tile.y, 2.0); @@ -324,12 +270,11 @@ float valve_red(vec2 xy) { return fract((frame_mod * 0.4) + dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); } - float shifted_dither_makeup(vec2 xy) { - vec2 tile = floor(xy * 0.25); - float flip = mod(tile.x + tile.y, 2.0); - xy = mix(xy, xy.yx, flip); + // float shifted_valve_red(vec2 xy) { + // float vDither = dot(vec2( 171.0, 231.0 ), xy ); + // vDither = fract(vDither / 103.0); // (103.0, 71. 97.0 ) - return fract(dot(xy, vec2(0.75487766624669276, 0.569840290998))); - } + // return fract((frame_mod * 0.4) + vDither); + // } #endif diff --git a/shaders/lib/fast_taa.glsl b/shaders/lib/fast_taa.glsl index fabf9f76..926c9208 100644 --- a/shaders/lib/fast_taa.glsl +++ b/shaders/lib/fast_taa.glsl @@ -4,7 +4,42 @@ Temporal antialiasing functions. Javier Garduño - GNU Lesser General Public License v3.0 */ -vec3 convex_hull( +// vec3 selective_blur(vec3 neighborhood[9], float hueThreshold) { +// // El píxel central está en el índice 4 +// vec3 centerColor = neighborhood[4]; +// vec3 centerHSV = rgb2hsv(centerColor); + +// vec3 accumulatedColor = centerColor; +// float count = 1.0; + +// // Itera sobre todo el array de vecinos +// for (int i = 0; i < 9; i++) { +// // Salta el píxel central, ya que ya está incluido +// if (i == 4) { +// continue; +// } + +// vec3 neighborColor = neighborhood[i]; +// vec3 neighborHSV = rgb2hsv(neighborColor); + +// // Compara la diferencia de tono +// float hueDiff = abs(centerHSV.x - neighborHSV.x); + +// // Considera la naturaleza cíclica del tono +// if (hueDiff > 0.5) { +// hueDiff = 1.0 - hueDiff; +// } + +// if (hueDiff <= hueThreshold) { +// accumulatedColor += neighborColor; +// count++; +// } +// } + +// return accumulatedColor / count; +// } + +vec4 convex_hull( vec3 c, vec3 previous, vec3 up, vec3 down, vec3 left, vec3 right, vec3 ul, vec3 ur, vec3 dl, vec3 dr) { @@ -26,156 +61,102 @@ vec3 convex_hull( // 2. Definir el rango de clamping vec3 std_dev = sqrt(variance); - vec3 min_valid = mean - 0.8 * std_dev; - vec3 max_valid = mean + 0.8 * std_dev; + vec3 min_valid = mean - std_dev; + vec3 max_valid = mean + std_dev; // 3. Aplicar el clamping - return clamp(previous, min_valid, max_valid); -} - -float edge_detector( - vec3 c, vec3 up, vec3 down, vec3 left, vec3 right, - vec3 ul, vec3 ur, vec3 dl, vec3 dr) { - // --- Parámetros de Control Relativos --- - const float epsilon = 0.0001; - const float relative_threshold = 0.4; - const float smoothness = 0.5; - - // --- Conversión a Luminancia --- - float l_c = luma(c); - float l_up = luma(up); - float l_down = luma(down); - float l_left = luma(left); - float l_right = luma(right); - float l_ul = luma(ul); - float l_ur = luma(ur); - float l_dl = luma(dl); - float l_dr = luma(dr); - - // --- Optimización: Calcular diferencias de luminancia una sola vez --- - float d_up = abs(l_c - l_up); - float d_down = abs(l_c - l_down); - float d_left = abs(l_c - l_left); - float d_right = abs(l_c - l_right); - float d_ul = abs(l_c - l_ul); - float d_ur = abs(l_c - l_ur); - float d_dl = abs(l_c - l_dl); - float d_dr = abs(l_c - l_dr); - - // --- Optimización: Pre-calcular el inverso para los cálculos de consistencia --- - // Esto reemplaza 4 divisiones por 1 división y 4 multiplicaciones. - float inv_l_c = 1.0 / (l_c + epsilon); - - // --- Cálculo de "Linealidad" Relativa de forma eficiente --- + return vec4(clamp(previous, min_valid, max_valid), distance(min_valid, max_valid)); - // 1. Línea Horizontal - // ridge_h utiliza las diferencias perpendiculares (arriba, abajo). - // La consistencia se mide con las diferencias paralelas (izquierda, derecha). - float ridge_h = d_up / (l_up + epsilon) + d_down / (l_down + epsilon); - float lineness_h = ridge_h - (d_left + d_right) * inv_l_c; + // Clip 2 + // float radio = length(max_valid - mean); - // 2. Línea Vertical - float ridge_v = d_left / (l_left + epsilon) + d_right / (l_right + epsilon); - float lineness_v = ridge_v - (d_up + d_down) * inv_l_c; + // vec3 color_vector = previous - mean; + // float color_dist = length(color_vector); - // 3. Línea Diagonal (Top-Left a Bottom-Right) - float ridge_d1 = d_ur / (l_ur + epsilon) + d_dl / (l_dl + epsilon); - float lineness_d1 = ridge_d1 - (d_ul + d_dr) * inv_l_c; + // float factor = 1.0; + // if (color_dist > radio) { + // factor = (radio / color_dist); + // } + // previous = mean + (color_vector * factor); - // 4. Línea Diagonal (Top-Right a Bottom-Left) - float ridge_d2 = d_ul / (l_ul + epsilon) + d_dr / (l_dr + epsilon); - float lineness_d2 = ridge_d2 - (d_ur + d_dl) * inv_l_c; - - // --- Puntuación final y color de salida (sin cambios) --- - - // Se toma la máxima puntuación de las 4 direcciones (asegurando que no sea negativa). - float max_lineness = max(0.0, max(lineness_h, max(lineness_v, max(lineness_d1, lineness_d2)))); - - // `smoothstep` ahora usa los umbrales relativos. - return smoothstep(relative_threshold, relative_threshold + smoothness, max_lineness); + // return vec4(previous, distance(min_valid, max_valid)); } -float fast_edge_detector(vec3 current_color, vec3 left, vec3 right, vec3 up, vec3 down) { - vec3 edge_color = -left; - edge_color -= right; - edge_color += current_color * 4.0; - edge_color -= down; - edge_color -= up; - edge_color = edge_color / (current_color * 2.0); +// float edge_detector( +// vec3 c, vec3 up, vec3 down, vec3 left, vec3 right, +// vec3 ul, vec3 ur, vec3 dl, vec3 dr) { +// // --- Parámetros de Control Relativos --- +// const float epsilon = 0.0001; +// const float relative_threshold = 0.4; +// const float smoothness = 0.5; + +// // --- Conversión a Luminancia --- +// float l_c = luma(c); +// float l_up = luma(up); +// float l_down = luma(down); +// float l_left = luma(left); +// float l_right = luma(right); +// float l_ul = luma(ul); +// float l_ur = luma(ur); +// float l_dl = luma(dl); +// float l_dr = luma(dr); + +// // --- Optimización: Calcular diferencias de luminancia una sola vez --- +// float d_up = abs(l_c - l_up); +// float d_down = abs(l_c - l_down); +// float d_left = abs(l_c - l_left); +// float d_right = abs(l_c - l_right); +// float d_ul = abs(l_c - l_ul); +// float d_ur = abs(l_c - l_ur); +// float d_dl = abs(l_c - l_dl); +// float d_dr = abs(l_c - l_dr); - float edge = clamp(length(edge_color) * 0.5773502691896258, 0.0, 1.0); // 1/sqrt(3) - return smoothstep(0.25, 0.75, edge); -} +// // --- Optimización: Pre-calcular el inverso para los cálculos de consistencia --- +// // Esto reemplaza 4 divisiones por 1 división y 4 multiplicaciones. +// float inv_l_c = 1.0 / (l_c + epsilon); -float line_detector(vec3 center, vec3 up, vec3 down, vec3 left, vec3 right, vec3 ul, vec3 ur, vec3 dl, vec3 dr) { - const float epsilon = 0.0001; - const float relative_threshold = 0.01; - const float smoothness = 0.15; - - // --- Conversión a Luminancia --- - float c = luma(center); - float t = luma(up); - float b = luma(down); - float l = luma(left); - float r = luma(right); - float tl = luma(ul); - float tr = luma(ur); - float bl = luma(dl); - float br = luma(dr); - - // --- Optimización: Calcular diferencias una sola vez --- - // Cada una de estas se usaba dos veces en el código original. - float d_t = abs(c - t); - float d_b = abs(c - b); - float d_l = abs(c - l); - float d_r = abs(c - r); - float d_tl = abs(c - tl); - float d_tr = abs(c - tr); - float d_bl = abs(c - bl); - float d_br = abs(c - br); - - // --- Optimización: Pre-calcular inverso para reemplazar divisiones --- - float inv_c = 1.0 / (c + epsilon); - - // --- Cálculo de "linealidad" relativa de forma eficiente --- - float lineness_h = 0.0, lineness_v = 0.0, lineness_d1 = 0.0, lineness_d2 = 0.0; - - // 1. Línea Horizontal - // Condición optimizada: comprueba si (c-t) y (c-b) tienen el mismo signo. - if ((c - t) * (c - b) > 0.0) { - float strength = min(d_t / (t + epsilon), d_b / (b + epsilon)); - float penalty = (d_l + d_r) * inv_c; - lineness_h = strength - penalty; - } +// // --- Cálculo de "Linealidad" Relativa de forma eficiente --- - // 2. Línea Vertical - if ((c - l) * (c - r) > 0.0) { - float strength = min(d_l / (l + epsilon), d_r / (r + epsilon)); - float penalty = (d_t + d_b) * inv_c; - lineness_v = strength - penalty; - } +// // 1. Línea Horizontal +// // ridge_h utiliza las diferencias perpendiculares (arriba, abajo). +// // La consistencia se mide con las diferencias paralelas (izquierda, derecha). +// float ridge_h = d_up / (l_up + epsilon) + d_down / (l_down + epsilon); +// float lineness_h = ridge_h - (d_left + d_right) * inv_l_c; - // 3. Línea Diagonal (\) - if ((c - tr) * (c - bl) > 0.0) { - float strength = min(d_tr / (tr + epsilon), d_bl / (bl + epsilon)); - float penalty = (d_tl + d_br) * inv_c; - lineness_d1 = strength - penalty; - } +// // 2. Línea Vertical +// float ridge_v = d_left / (l_left + epsilon) + d_right / (l_right + epsilon); +// float lineness_v = ridge_v - (d_up + d_down) * inv_l_c; - // 4. Línea Diagonal (/) - if ((c - tl) * (c - br) > 0.0) { - float strength = min(d_tl / (tl + epsilon), d_br / (br + epsilon)); - float penalty = (d_tr + d_bl) * inv_c; - lineness_d2 = strength - penalty; - } +// // 3. Línea Diagonal (Top-Left a Bottom-Right) +// float ridge_d1 = d_ur / (l_ur + epsilon) + d_dl / (l_dl + epsilon); +// float lineness_d1 = ridge_d1 - (d_ul + d_dr) * inv_l_c; - // --- Puntuación final y color de salida (sin cambios) --- - float max_lineness = max(0.0, max(lineness_h, max(lineness_v, max(lineness_d1, lineness_d2)))); +// // 4. Línea Diagonal (Top-Right a Bottom-Left) +// float ridge_d2 = d_ul / (l_ul + epsilon) + d_dr / (l_dr + epsilon); +// float lineness_d2 = ridge_d2 - (d_ur + d_dl) * inv_l_c; - return smoothstep(relative_threshold, relative_threshold + smoothness, max_lineness); -} +// // --- Puntuación final y color de salida (sin cambios) --- + +// // Se toma la máxima puntuación de las 4 direcciones (asegurando que no sea negativa). +// float max_lineness = max(0.0, max(lineness_h, max(lineness_v, max(lineness_d1, lineness_d2)))); + +// // `smoothstep` ahora usa los umbrales relativos. +// return smoothstep(relative_threshold, relative_threshold + smoothness, max_lineness); +// } + +// float fast_edge_detector(vec3 current_color, vec3 left, vec3 right, vec3 up, vec3 down) { +// vec3 edge_color = -left; +// edge_color -= right; +// edge_color += current_color * 4.0; +// edge_color -= down; +// edge_color -= up; +// edge_color = edge_color / (current_color * 2.0); + +// float edge = clamp(length(edge_color) * 0.5773502691896258, 0.0, 1.0); // 1/sqrt(3) +// return smoothstep(0.25, 0.75, edge); +// } -vec3 fast_taa_old(vec3 current_color, vec2 texcoord_past) { +vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { // Verificamos si proyección queda fuera de la pantalla actual if (clamp(texcoord_past, 0.0, 1.0) != texcoord_past) { return current_color; @@ -192,31 +173,26 @@ vec3 fast_taa_old(vec3 current_color, vec2 texcoord_past) { vec3 dl = texture2DLod(colortex1, texcoord + vec2(-pixel_size_x, -pixel_size_y), 0.0).rgb; vec3 dr = texture2DLod(colortex1, texcoord + vec2(pixel_size_x, -pixel_size_y), 0.0).rgb; - float edge = edge_detector( - current_color, - up, - down, - left, - right, - ul, - ur, - dl, - dr - ); + vec3 c_max = max(max(max(left, right), down),max(up, max(ul, max(ur, max(dl, max(dr, current_color)))))); + vec3 c_min = min(min(min(left, right), down),min(up, min(ul, min(ur, min(dl, min(dr, current_color)))))); - // float edge = fast_edge_detector( + // float edge = edge_detector( // current_color, + // up, + // down, // left, // right, - // up, - // down + // ul, + // ur, + // dl, + // dr // ); // Clip 1 // previous = clamp(previous, nmin, nmax); // Clip 2 - // vec3 center = (nmin + nmax) * 0.5; + // vec3 center = (c_min + c_max) * 0.5; // float radio = length(nmax - center); // vec3 color_vector = previous - center; @@ -229,47 +205,7 @@ vec3 fast_taa_old(vec3 current_color, vec2 texcoord_past) { // previous = center + (color_vector * factor); // Clip 3 - previous = convex_hull( - current_color, - previous, - up, - down, - left, - right, - ul, - ur, - dl, - dr - ); - - return mix(current_color, previous, 0.70 + (edge * 0.25)); - // return mix(current_color, previous, 0.70); - // return vec3(edge); - } -} - -vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { - // Verificamos si proyección queda fuera de la pantalla actual - if (clamp(texcoord_past, 0.0, 1.0) != texcoord_past) { - return current_color; - } else { - // Previous color - vec3 previous = texture2DLod(colortex3, texcoord_past, 0.0).rgb; - - vec3 left = texture2DLod(colortex1, texcoord + vec2(-pixel_size_x, 0.0), 0.0).rgb; - vec3 right = texture2DLod(colortex1, texcoord + vec2(pixel_size_x, 0.0), 0.0).rgb; - vec3 down = texture2DLod(colortex1, texcoord + vec2(0.0, -pixel_size_y), 0.0).rgb; - vec3 up = texture2DLod(colortex1, texcoord + vec2(0.0, pixel_size_y), 0.0).rgb; - vec3 ul = texture2DLod(colortex1, texcoord + vec2(-pixel_size_x, pixel_size_y), 0.0).rgb; - vec3 ur = texture2DLod(colortex1, texcoord + vec2(pixel_size_x, pixel_size_y), 0.0).rgb; - vec3 dl = texture2DLod(colortex1, texcoord + vec2(-pixel_size_x, -pixel_size_y), 0.0).rgb; - vec3 dr = texture2DLod(colortex1, texcoord + vec2(pixel_size_x, -pixel_size_y), 0.0).rgb; - - vec3 c_max = max(max(max(left, right), down),max(up, max(ul, max(ur, max(dl, max(dr, current_color)))))); - vec3 c_min = min(min(min(left, right), down),min(up, min(ul, min(ur, min(dl, min(dr, current_color)))))); - - // Clip 3 - vec3 cliped_previous = convex_hull( + vec4 previous_cliped = convex_hull( current_color, previous, up, @@ -282,12 +218,8 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { dr ); - float color_distance = clamp((distance(previous, cliped_previous) / luma(cliped_previous)) * 1.0, 0.0, 1.0); - color_distance = color_distance * 0.25; - - return mix(current_color, cliped_previous, 0.90 - color_distance); - // return mix(current_color, previous, 0.70); - // return vec3(edge); + float ponderation = clamp((distance(c_max, c_min) - previous_cliped.a) / previous_cliped.a, 0.0, 1.0); + return mix(current_color, previous_cliped.rgb, 0.99 - (smoothstep(0.0, 1.0, ponderation) * 0.44)); } } @@ -308,25 +240,11 @@ vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { vec4 dl = texture2DLod(colortex1, texcoord + vec2(-pixel_size_x, -pixel_size_y), 0.0); vec4 dr = texture2DLod(colortex1, texcoord + vec2(pixel_size_x, -pixel_size_y), 0.0); - // vec4 nmin = - // min(current_color, min(left, min(right, min(up, down)))); - // vec4 nmax = - // max(current_color, max(left, max(right, max(up, down)))); - - float edge = edge_detector( - current_color.rgb, - up.rgb, - down.rgb, - left.rgb, - right.rgb, - ul.rgb, - ur.rgb, - dl.rgb, - dr.rgb - ); + vec3 c_max = max(max(max(left.rgb, right.rgb), down.rgb),max(up.rgb, max(ul.rgb, max(ur.rgb, max(dl.rgb, max(dr.rgb, current_color.rgb)))))); + vec3 c_min = min(min(min(left.rgb, right.rgb), down.rgb),min(up.rgb, min(ul.rgb, min(ur.rgb, min(dl.rgb, min(dr.rgb, current_color.rgb)))))); // Clip 3 - previous.rgb = convex_hull( + vec4 previous_cliped = convex_hull( current_color.rgb, previous.rgb, up.rgb, @@ -339,6 +257,7 @@ vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { dr.rgb ); - return mix(current_color, previous, 0.75 + (edge * 0.20)); + float ponderation = clamp((distance(c_max, c_min) - previous_cliped.a) / previous_cliped.a, 0.0, 1.0); + return mix(current_color, vec4(previous_cliped.rgb, previous.a), 0.99 - (smoothstep(0.0, 1.0, ponderation) * 0.39)); } } diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 7a7bbaf5..6a6b4422 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -6,9 +6,9 @@ profile.shadowless_low= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_S profile.shadowless_medium= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS profile.shadowless_high= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=3 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS # Default forced options vignette = false @@ -147,7 +147,7 @@ uniform.int.frame_mod = fmod(frameCounter, 8) # as much as possible from one to the next. It helps to make the flickering of the image # so fast that it is "absorbed" and better masked by the TAA history. -#if AA_TYPE > -1 +#if AA_TYPE > -5 uniform.vec2.taa_offset = vec2((if( \ frame_mod == 0, 0.5, \ frame_mod == 1, -0.5, \ diff --git a/shaders/textures/fullnoise_256-RGBA.png.mcmeta b/shaders/textures/fullnoise_256-RGBA.png.mcmeta deleted file mode 100644 index 193e38ee..00000000 --- a/shaders/textures/fullnoise_256-RGBA.png.mcmeta +++ /dev/null @@ -1,7 +0,0 @@ -{ - "texture": - { - "blur": false, - "clamp": false - } -} diff --git a/shaders/textures/fullnoise_256_RGBA.png b/shaders/textures/fullnoise_256_RGBA.png deleted file mode 100644 index b68bdd22a9005a156ed4d611dab41eb0d8e0e034..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 218253 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

&yTy zWmfGx2NIeZ(y1Hij>@1iGeNil9{5h2`5oczT&Mx{64bZ)5(P|(aRN72bDTC24%>S~ zz5fMPZ-*|Ju6lf>+Ks*0?(b3*>hr#T4QN~nGVqWnbG@}CO_q9Z`vnUb{DP3GIxNr)ZB}p~*q@s5li^dZauZ-xz zPActkLRwBUwW>Yy84c?VG#Cc@vw&buHcN#oTfJS_TCca*cK5BkU1(+61W2X|u&cAc z4qB(SVq@t14}{4F15Mu=LFUInK9bt3V<)K{Uqih4Cp_D6i}i{gRymN(S})1U;&CF0 z^Nb|^6{vruByF}Il5?MGxgS{mn+V%_q-w}a)z9xl{}`#fFul^9DWIGk2n$XD{cn?9 z+1BSD=obRreMb$(BlVW;Mae-HLI40_7f%&KXS_{npWC7Yvp(VC2aP{jZ8h ztu@xpEodcT5J~@Bq&^?(%&w3fH=s)js~lv~yCJMcUKpLc7~c1B;E#UD^>ALv}Fu;t@h*Dq$5 z!)x=Ib;?M}Rz*=@3Q2rbl5`Wuj-N~N=CZL5XR?I#V(F9@(xD*G zpqNFS?;iaSX3?dmP`VC8jk`J2G12I6>xrflczA%qjZi#$FH)hc%FE3v56+UD-N({p ziqT;gh)yq3db|xN@(`0(YDEA&` z&?qE@44uLha!Kj)D2wo{79E~hJl+|*RT!G?qT8?tJ}|5jXkf_XAL_wma%VN zD@svhyG_wK)(Z+)Zrvgig-Q=3bd6wIlfZOp7n{}Z$Za?oK5YTt(e~<2Y^J`wAILZE z7CG%cIA%i@;)ur3P4yvVLRGhyvRX16dUqk~cw?|9fY78N@K<)|vhE~5mJq+(AWI#M zPB?3LMLE}5*UohgJTzw1a5f$95{)~?ba?p{B*=->lc{ z2c?9Dg2Y3_xmqd4-UB@?L-^lz*W8`z@|tKz54B}~`DH+4DbWFqM2bHGrriSSm4gnP z%9Ont(V|?SYl%RngV3#efxLSKBfGKGDI>Bj8)MjUrkI*+9v?Q&jhE^q)P=JvhjM|! ziX82&w9NI@>5$I#UwQY#x0AC;c1bze}p_Yc%y%BCO!y@9gCu^#+H>?x9xvyC>+=2A}OSNlZ()iqr z>FvRn8>t?@#oX+bHPTtmxW{j6Z=tX0_ZWZYXttvk2>xsa8r2hc*irRN zanUO`Nb4t(ZuyNV-y+cMzl67R5oFmVXmUk)_Bg_=^sMU(l2>GtP(*s>{*{@3n`=z3 z1H>gWsgBL;ner{ZI=#|+$&Zf*_{R=o`|EDz+=?CIi;-?V416w9xI{g z#w+SAxAOWA@n*JH|B5GU$MjZ>siv6NL{MX_&`$>qub5zh>wZ7)P_1=D4NiiFtPy(A z#bWe79uohuq_c&?A9yAt8P35gaWluPuTV3tBAE_X;AA<^zH573ciJo0%>CEV=tYhU zIIgzR4eObn)|!`U+YeH^w4tKQDADkRg5ZHddF~qg7ZG5;o@F_6TWsC&kSIS(k*N+% ze`ie2e&oswxPLz)UvMDY+gsop+fd!qp*G-E*W>`-%w*r2?#4EM;wDdsF_K}WO1|=< zaY?FQvZ-!TMcP@A$=k_J8|cW$2uI%ZVab?VWM!gg$NyQ;5Y<&Fm zE|KS-#Ma+N-iE)~qw4JM{|CI57vT-jgx$AnKmPTrM|bli%pTa>iB}YP?13;f2PD zEz``iv*NA&W3Q(Rmq3?yar9efpY3MGMjW48x7wB{*n0C+N`|PUC@8wrCmJwO?XjQ8 z{~PO&kw zq=-o81-05O?xs+1){9D`w@jMyGE?*(&(uKt>uwMC-Jx4~9+ zmK7~N7brj9p|qn64^KgQX)DmKjZ(jwFgZiXbYH?I;9r=SP^B?9JxVvi@#I3__f!e6 zC*!SDKVs#lP3l%;g z+OC<%vtJ=4GpZfj8#-X3p{G9?EKq3Q7?Ew4#rACgnXsAlw~~hO$!Egzx!gXTOAo6! zx_B5-+H_1!CoxSNEi$^NYNzk2f#2YbXe6@Yi+Eqvv)BK!UcC|Um)p<&A-|Gv5OiEQ z#r6>4>UY!(_|vh@vJkZ=da+EI4TN4$oX-x_-U+I@5?pvBX#EgS=i5N_U4v%KKVzkH z7`(=tNbckz#5RYFi4u)_Y4uQh&ud$qyedOg@)S{>TNc!+7xBO0OpmuP}Hu0wCOm!C;=R_Md|F%|6yhD5{ za>}HkC&Q;d*($ne9&G#$kv|VudH#^4P-p0>m7o{-2wiqD-@XBJ{BIBMmn2K{&(Y&E zTt;$@5JKlWM2DI%9r%NI@+n~HUBROvtXBp>n>B;h%mYkZ57`oH%*f438MYg(+KB1J z4dqiMt?Ay(?_1O;IVdbk%1@^b`TkotgYDzIh6f#YxNJQ!38jgfKUMzg50y%%*+x7j zbZY72gj z7nEG@ppj>-9J>F8Ovg3MJLaqIKc$i> ziIa?ir9rPI5glCx{WR2*wo@(T8vEWi{XmMZZ>GA*1D_gnYtJTkc4LCCdQ|nEADc=f zYxT1}d%T*FUvgTlmQLu8GDJCNGcTx2`e-SkdXVa!7}moL6*Fct?fDz#LA27-6W08F z#|FOMr0({o^zG9j^ZnX*buTAiOwxWRVva{rI)Kld3mf{A+u zEA42dlJ7jEQBFdEDnN#T%nwGp+^??Dl^I#u9c3LJYD|YNM4cB1)p_OV^%l(apTK6x zq+0)x=-4VMJG+UjJEEHNg4N@}u;IIn%~RUJh1SHAUNd!i$hvBr@PzuNM(zJTvV0oJ z`ss>lru~X^8H7@(rA0%8`%YEUq$W(~FY26`tlZTI=@LccdeZ+okq+#}GN2Vp*JMb6 zzVI&zhW+u7ddXpsE<2c#S`(#Rt`z)6srhZ;?W>fljv{CNY&L1@vSvt6G_nv;E>-f)iq=frem+mCX<}*IorEWAu+v0`sIf0+ePGY0;FsLBmB6Yet-vlv>uoaM%R*uXN7rA;jMEE6+nwD=ZZrhsju$u}WU+#!kL zOx!AFO$^NXF+?5Cf>QoMh=1ks;&v&W{UJVzNXc4^RR_OPt@Bp&>KQA&BSlBe7ka-J zrpa-3!-hEl+j_8Dy#U-Z;nt1uD49UcdA3wAxRhe&3xmq#9kiaqcyL5yTM@;&heng$I6B~OgQ-!F9!r3{hZ!B_7_C!_ z?fjp~`WL`bGxhewsXiZLwUuW%vVrpJVnlsAF_yb32mcXGDrdE2xTlFfZ0r%{2(i{&TT#c>r~N=wL$^)@5HETzupr^%O(j?*dEj zsfG=)lC;>`0yV9DTh+6l@>p;6PvRveh&THe>&4!KH$2giwx1ns{C|Sr0x-+63j^>u z=Xu}n+eSB{pnw7rf(S@=cZ}}tHDkaABeuatY>bZ4-60(!Al<1*$q!=DNbG&i{a+Ug z`i~&~@dW6TU?z8`Ltfw87H3)*ja<%%{Ekuc1WV8UBEAH}XE%Zxj|cLGDf%`9UF&4& z)^?>Ddx5B1Y;P=OZ}>p5kK)<(e?Z#2K5Xt5V$b{`Tx$+~nEAKB zf8QtDC?>EO^k3dD~#-0$&JCI+n>p z=P*^AM$|M}DY%i!g~Ljf!>rz$^3il(>Uv4jNH51S3jHm*E7s`qU!aA42lu#=i4%E6 zbB7tbp{dwy1%+pK63KZ>C8Pjz?q8WVoFb`xo@HPGqP@34n>Uj_xg%WYInz%$SXWda z3e8Kj>=x1az042Ck@QJbuC^yrX0{@?=(jLaJ^?jO72aJ&sl#~UfniJs%M#ze>&V6L z4NfOY=HTI=H9MI5^k-?XpZMTlk)s2QSddqLmAnb{r*K z7|ImU%rlcdd7o`}8VCIRqxaeNL&HhR@Fjl9CjgE2<`!0&koEZctEZ zH2h{FOCY|EXw+P5lQ2(p=19co9Acp+Ww_xMsG5W|EKcuyh=oQ;_6dC z)fX%Bw}f`7z-Trdy5=Tn=d)^07l2l2VG*3e+L+U-|KukL9_3QiRH0#aiT;>Gw5kem zo~6VSQi%T8EGW53Y^TD4())~r{3<4ULxXKggv#y$o~>Yc{)}kneNdU5O1I+G#&1$R zGDEe<4z-td6Mi~E+++t)+IrywRoN73L*DL!>h#WQap*Twr%t|_tdkPN4zJF7ND0$R zgVq-WA8AbVV<(_MKBWzB0GrF|kP%j|`OEx`$^z|%g#6Wlx530AIk7~Xi);ktxt=rey*&Eq5%jSBme-<5g2Qp_oo2@&= zJvW$rEn0EFxDX2TYQVp)HOtdejLD0EC+C&!W+BS#$YxL;aUbks-_C*((4qtTmPC^~ ze>|I0lUM=|8nY|b=Tx5Ixa(_)FF6*zr&(-ZpF&=iIdg5$_yG9*!R%&DAhR=rc-cEP z9h1l%v0D5W3W$4bw&P3;G-lR8GHYVk{JR^{HxRseozn0%pxkqnhp^J*F2KoZz>7gd z&u%KZ1Nu*8LeG7ymwU6OO@LmU12j7*c4ZAmOIK$bwH$VKUD%TipiUK{)mNBrY#;>1 zGYxJ98j(RXrY2LGVSVy5+X?f?3;UD24ascdE3xtb#;!c9LkbHPTxB>PftoA9ErOM6 zE`xNuPNr21nTajgl*wgyW{F_x*MhNEgkG;x-LTN=k%4M^FM{O~WW#?Yo4ii#%qnCXWFfm~2BT~V zrrQ;Sy0jq-nh2cgtaSPh$otyt3`i0G>Jb$1@&AfBH%9{QZgJ2nZ~+%4e8`n zieF~~izg@s-d5Un!cu3)QoqL*>3xC7+Dy;y6PInp>~BbT9zz%vNA%M?HV?w;)(Kl6 z(x^L8!aAVEY^7&6LC?krlD0Trj;vyz93cDU|HPgs#fY9K`YefcdmP&m{mC}`4z^w& zYl}C7*F3AW!)LN){gd?hFw&TEYPW8-x-8yi9%$lauIi)q$2rWKvN--Fr`(`b!`WYQ zD4TC5k<2R&Q|ALYU+-k+;aTI-S1#`#VDPx7U`c?%xK%zawZzb}AmEboYhU(No4CYiy|IjRBI>r3 zFpx)4BEPV7dJNI51+HE2%EfQp zMAm+4%(x=PIrFt~I(*AcU8sq^Y32Gt$bJ_xu_`$wXOnMKVGbx%*$K+ELHr|kvH#H5 zWZq;^E;^LZ^f~BVcj4w^TqkOx&*?wKNKR$$6GAlXKhQU~EWM9~Y4w7A4O=6yd7KTJ zQU^h`53s+>7UQe)uko+{R07A3=YXoS$zM8zoRo0zj$kkqv-DvWD7da-PFbK_x@9*R zn0ib(J_lA`a6)Ka}FhYbUHZTY{Dq3w3Yuh}eB}RjmY-H*`mTAis zqMNx1n^PFQkCBdDLE2y@YhWj_Bik8!<{f*p_rrcY-LnxnRm09h-`0b@wuJ25gRo~G z5^{kld9c6?cj!=I=5G!VJ^oI4(|<6VO0ctGq;XFtv-9N{;yYI?2ai--dcis{-k*7L zqoZ?bvCa@et$Bo)-++nV1Ak<-)N{3^p@XdyyJI=@whERKh1C!$^Dk(58u6?VM7@HU zf0@U8cdhVJWIgpS7F&!)`msx;22c*C1%cw&3DJJ?;=|CE|`ciIL<_dE^E@?imoY zB;EwJNQ3{+XBuetAh7N|^5;rocj;&1udtfk;V;=)GLR{Gvaw{1hR^Wpp1PtlM?zcd z^fV&W+P51rwf_=N3k&V#FDZw9hXS;4q=lC@_Q!ucN1z5l58>Hxc9h}ygl)UNhCZ_zsS07F2$zfO%; zTdEzQVrxTq?>G(9**%h*{QLW=f6hJey`E*W&cx>eA0db;U7*0PdoPRf=1Oq?qwbZK} zOxiH<75~EowVNP8C*N?Eey7Mkb~3ryJ}7r@sWf$~a!>+H_u=9s{bGDY{&d}=BaCcb zD?IZwQSZS(i}8xBVW2wQ3Cj#q&cTd}A3=q-u%w?QU!67*&}NJA<=iT6`b=_ijs~wh zq+Dy0(w)tUh1)&7<&u7#Xw|nLdNNM6Q8M(qF2KO~M2$y~aY(c8udopUD2}862=75&`F|1kAle{>g>mwk-gYyPNX5??GYhh=#r+J`>IC zv}IY}njG8{|Dw%~-%};WNP1-V%S@#I$LG zW1^cl?sk{m>7!s0Is#uj=gdW&*-pAjdhI{Zqba0ot}=G4A}w>7w0~>D`bnfmc9Ztr zN148^^09b2XJ*+8Fa2A!RSem}>w!k!fTC9ro$Uc`7sdQ8mq_MnG4qCqd|Qzz?Gf>8 zA|4RVa_w*7+Zn>M{vTQ!ItEB3lsAf?%P*r;P2RiJ$EullPF3oZUrc)MHr@OcFSjsA5k` zZ=!*akLc}DjkVsgVaWV( zAaqqP)*T}RNflVyW@l&5PWYQ1)u5YwD9gs05;XaO6AuAGS8OoTrUo z^|u9zfA=Z(SPbT4Ov#h{ru90%+5D%&DL&$;AC$(QP->L|a064T+M*hStt=|3qZRNS`}5({*3;GQO=3*#9mR z{^1`aD0PTrnH`KQ&F8Xz=yr$s10$>_(XWRrjc*J}t_=!41wJ{BWNav8bra%$VvMZq z;d2huWPjX24fxo}^NlO4=4w2+LU-aV_ei{|pMcV%6^|zXWg~zw5rpYIScg_;n^`IbpY(rwa_}x)b6-Mdb=o- ze-tytgJZWUm29d!Jl&(5(-f)KjsDZp&!zu$eG^*yef?UQfTqvLe?Jty_oc~A{2A_N zTh#GyRkJtA%9Sw1+)9jr9hiLWmy2*fh@*;ebXB+?4>BjfXN8`BN*~yV?W!1Dy_QF-~9+J$+CdNzsj%>EC zNSpjk=>3rKwDN@b^TBoNe0Eheb*}1`DDsANW7})2cw^6!J=_lJBoIxy#1wp*xSXH3 zZ4q{&SFiu~NwrhLVs8UAk9oP3_lM@(UNBlQ~$v-_RCA!KN)mx3Y zNACEoY|^`lNuDKCp|atR^NsZXn`LH{m4*4OnSD#m{?Wwa-a&GXP!5_eyer0``S%^3 zv`f?^!uHIo_ElpKb0a*&$0?lk%16qnbPtAFU$qbk{fC|CMeL3%B))z%jC%ma ztmL0fI1{rPM)ujqQ`)FR2pizIq=VIxPDjrsM^3bblrari6 z?a;<*H)K=f{TFs}Kea{r0pSaTs}5u8Qi*9pJ5WlJ(!Y6?HhaqLI(qWbbNF?QEN1`8 z0N>E*KDS0EcIwW988=3`LMh@aZNRBxA=1l}zNwj_$1E>M1n&PTcGg;M86y%N=+u+d55&{PS)!~iMqce9`v|?rpgQ9gfED; zbhBK$N~Y;jAk&dQ2)m{kuSRX7<9}dU;}Exq5E|OPZk_-2CY?Y6LYDzP_d ztYo%oDY|eJQ(Rr**TS5CDN$OYnAiK+=L!0~ulx5LR-!ifc7kpdQAT-%{&V-hmM%1?{yEPJhSth^n=bZe7FZ;;} z5;W^O@@Jc&zLn9{TCNOL6B$SH{eI@Z14z0&Wh$C1II!1fi94hzFI9t%0{hP^S9`(c z$u)Aux1SPqyi3hir@nIN4co)VH0Lr&DTKDwuExCt120fV0Nxnsr1-N-$Kfh z_Ar-;_3O5ue74~j)(M}f7rH~e&sM9qstWA60;X=I3CjdEnvuQIpL9V_vcq4))0ygJ zy4fPpI z^!_o)xR&HbZYKYrOXLq8OzxvzA&QIz#$^zq&H#^EC~b4 zup3&dPEWM<)@Ve^GcaimA@LKUUSY)5g1}=&x%mAj7ZVpiV(KXu zZlQYXl49*%)oE>2|LmpscaYVCqhMbQVmu3E$~?|Uohq>ZbGS{o&~HNs`Rk~@3ne@K zC(1mYp?2Y)s*`*~b>dmJcNA)p-KEZB4DUKYPGSpn%e+>9_ZS2$uBZXc+fY!hUKF&r zkel<*K>>MtR|v>6ImpR&HJt9X`)>^e# z*ESMw$XxPnJc9RK9cYK~jPmb=@2nQd5>&Hg!W-+fZK|>*Q@pgI?9JN&T;8V0>w@w} zgHq~)Gp9iEPlC{J<-;Xa?iN&@u*vA@GQP~k;qr0*1$b|_t2g7G+RfRZ-ZWFceAW+S zS7wFRVFG(;^U2n#r}ot_=&U1z@}0ol#**n#joibHOyJv#PGFIOzJO;v#LS&66uV!j zNNtgc2Z@8v5?@L(yeHjod}%S0+KIpEcP5~0K@M2?BmBL#sXwBNy5m-odwK{tvrdp( zX(_qK{v$VGlsZ>l6Zd`UW`+(H`y?kJel@gNS)j2;G&_U2{YG(GRuH$uNH)DMGT&XV zXgN`}?od@{2ymf;aE}{CzD_st`)DygJOM{M2OX*gd>lqz;t}?;929R}D%({#Rll1B zjVMMmJca3CRU=J?iOl|)`92fhS8&*9rLCca9m}DC6QKtafu-*N8UyV16YUw!{C1Ma zwkod7ndDH)O+o*YY(tiiebZdM`E68Bt+800*W&t8%R_fr>GnXKp4CYDwqet|68QZ< zqFcwA;y*$wRfEPv0>>`_>-LgtYb|cuK)-K6bbyn6f=|}&G!jt<6g?eWW~Xw1AJlz4 zXz2~5K3S9&q*{95S(a4KWWNci_RgVOp@!OgCc0~)gD)eD?u#QkzO`!LR@KJwOa(eS z^g2~|Vl<=eYofMw8GWCyuFu8#dJJLwUxZ$hgoeH$icEww{1x(3ymg9?%ydx$JmRdY zC6_W%D+4+H0LIM*BIW=oQA)PIrEYV;p+Ss@&wQFX++b;WrnWmA>9O3HaxEP5c|-7) zQNYDhL}ivTU7Sq3D3B<%1)*g>($}NNPI*mQ^&ITD*{}yH0PCL#lA06dwj$)%NC>*> zV0nnE6@83qVIDV`YNhi~3wa2tmq$@3yVa(Lps|CLdemmDEp5;~gsFdSM`rxs$bUtd zPYi{b*VCHowXJlU3KZE#UbCsJaVvx$L<>#$m$?317tKz%`s^c9t-&nCIWOU-r8ugYetc7j%ST|CUk6tU|*`CCEb9?ElM3%di3zIBB7s?S!xb@ z)l)&=W+86%1kyYdrhPQHZExj5&tanbS~1DWv7;XBs?% zaX(%pbdPaX2+QJh68VoLq?7QgG@sZ>j{Diqjyrp!IJ68>CKj?>)x>sCX*UwG?E_1b zVPrm@B@8UMkbKU4>(tI&RhP#XLJh=6rkNnb`?55`;Ugb?8Z);EcmMZ4aU1B*o*77LmJD7tLlbZoPQhDv8&jCh6x3 zh|9GHJt}G>G|8Ctm4!!sWS$g9l=z48{p&L9h+i6TQ2}H03LH zrjcgGJAAgxs@i^}^5#?E&%RSxQ3cMt%Or*0 zg8I)Pio6J0;U8$pA5~kwA{yS-n2e#u+1S{)DPK6|t>Z(DR(=j!YG`*PXvTddeW{pP zg)lu^Z1l~kbsJWnVyXXiOVgWL-v7YzwrZBv&NYZA>rlsO!hcOM2#ykO$3@ubvx$D& zNYdejm^nWgvt}RjtlvS;BZ1AygpvbE*Ax*gwUo7dI8*-+ro&;3(i;gmQ$Wb76z*8w z(%qVZ5lquth%JB8*NgXZpLx}L=k0jT}vvgeL(`IoF&1=eX zp@HLsHDL3<-^5HiFQ(E1$ElsqHP=Ighb9riep5{ikVsNBn3lTu*P$^3+_m z+P$UKj$e}Z^A`4oZ55mCAGWhLvfcGJBkjDP{4%DeF$OCkdgL><^Iod19&FKSV5T&g zY$@e{^D)ar(UuLFuI^>IUlvkepqh>mDoH1mtK_kC%|H&0^u#~hQq%7_^Lmtgcytw+ zrW)H9GsK41HuWoR-$MMw2;v-;WZf#31tW~p@+;R@zl8BkFT_r@Br<_5Ns@z@TfY#j z?=F<`sc~17cK!H~-5E2 zG9SNjY`kGAy^VPEagklw#WbDCbm9V2&4xtnlL#g1Dv~!V!X2fUUz8eVv&hv?(V-h* z=qACVg(5@R8rf8ed0tk=jnSk{_pn!M1lwBys_zd+$L;Rhuy%okK#`-0dQn7Uo`Gkt zBB`a2iy11}K2feyN~!lurRH^ksJb(gD|M??XKg*l={U$Z|CML1lv}Vc(uey+{pfRB zFk%R>Z;WdDaA>hRsymL>Z8lqb z>T_!+J@WMI5l@%Rwut!(x^JC!#b{QI(B~j%Q&aHNEZ|OQ!~;$cJ;(&F{6PGun()1xjuhSF zn0yP3OxXd-dq-)^Yl|m-kERDJv^OxN5aV(d!nDDxZV$0DW|LOmMfUTD4I28+!7hna zbX>1ElVSDu&a5>D`gG3>LjfC@7v2-enn0*sS}3$B>EBC8dku#z=7*iOj`Uy%C?-NF z+OIO=wQ{j$pjHV&I|GgWUQje7Oi*pL>h|*R%KO=y_JM86dT6)ujp`hK1d>{cw1vby zYJoY4sCNqStWHETrYiq8Mme&m%1XaF&Qdr7H`c84O&3QlHWzvQoawU_K+Frll~5l> z&+_9$cfsX%K&y$0?bU&@uT}fBg??bGi#Dk}G|+1A{OTpdSzE_bUD3%w$cO;`*>R** zWpY|fBFBpoDH37KqQS!JEn)Uy!pMn)b1rc6M_}0}N_7`7_Kp#qUrDs$%GmK$L+aQ5 ztrBaY3Z%h*K+oq_EjCqcp}(wc`JG~R2i6@?V)y*VYEBU4D*)_S3bM6;+CHMW3B;ox z8fhCD;SghcZL%x+z^=Y!ZPuCAtJ2(B z&2H`B7ixP>wD$4{)yeBE?p{_6>}QeCm^EU)qwP*OnDL&p-3~#i{z8N(< zr_*rj&TU3!>M}U7V~nrsIDf!i^|^f)i-{S_CVK{(QPtSAZeP3goc-k9m}=!KAs+X& zt2GxG`(%}B$;nom&xPH)k!(s!(ls9GjX6xy4WYm&LYdx^N3 z_b|=*jOowo2z$3#tj)O?UZpOCNr$ZggEX#TUI5*Dt7sWU(j`0^78kdQZcxH6yI8`rg_VqpTL* zK%8%(>m=t7bngCQq{>U;1=&E+ote7t6HWYuZBjPUaoeG*(+S>4U}hCUSWV#T;y}iI zRx^w3lAHBv-;W?|SetFiVYVMmk+-mi>epYY-ug!M-7M7#*`TyiY}l`CZ%-ivP6I7k z0GZW+rNc6qggoRff9W`334z9Rb$HnuP_-kf*9)rdtPbSw>q2OHB=ml0 zQex*GRjXgwtvWM|uqIJ-N|@NaxeaP`5=vai| zYZ81lgeJuq^ROv9aV&0nMdPcQKyLgJb$4`O$~W5BAsZd7uv>UqN2ab(f*SMK`Z7ox zj#2w`p?Wi~d$vk~wX;}l#aF5g&Zs_3x7xqAV(~$xJU1=whY)#D5; z|3|Rv6l>uSvJGdlPFz6xO#>R7>S1GcTAR9Uq2<}N5JCkgk zCS<$aV*MnOHL`~wwml*F9{79`XzXR;b7LW)hYc+&<+J_ru*S3@^`9nfc^%#_Z`EE; zU>&uC_2iF?>kXJ<2NP}E33Pt16rI!RnbArie?aH|Ahu0m@#d{(yJ=U14W_UKu8pO zX~o!UFhVf!XW^9BE^Vpe<2@~yN@XX2ETWSXD|=g8bcO1*?$)k4rZ(lUYV*ngM7Y?%}DO;QiOGe_Upj9iWpn=i0*yPv}Q6|c$bHTpo0=73!sXzhWh zYBh@Fg?v4WobAQQ*Y`_y|6Rl~cbXvbuA$FsFi&Ys@@qwsK8Y~R>yVlDhry_K#?Hx0 znz2S{-F!`!4oId^7lzCyD_}@HtVKj5mT#jv+W^{ft);-NxC*_1K z^9EkPPZgh?rU9g-X}bUbAOJ~3K~$5oE5^1^#HU+2p00eb zJ2)z8Hrs?Gwli-N-V|VT>qEHvjH%{+rl{$Jso9|K3qmKpRLb36 z`S>>1{+);Hf?}XAqLerGgq;5Z=0JbA?{mRfzkvN4+Bg9w)E|(euj?OLo1L6NBwN37 z6r;BaN^NEye;%~G1CZJnw5B|v);-nqeM09iSlLlpq*to&)eMmp^Ia#g3%MgktGlF= zl|?U=(|!S}i#XE#1h4s6|hH&Gw!!wn$U~o^S{8GeuEjgnatM7pr&^}a!l=ycGx-J z$2tW`+m|MePGJh(X(Y#RH91=dRyAR&oWL}A3lO_lWW&G2|NcRAtsZb>hleSfL`z2+ zObciG*;qo~14K_Yg3m@eeE}pVwxt+?6;vfjBXPxyM4L zBNdqH%u(AjR;f-J(5R26#q*OMn_|!!xJ;<~t6lP-*^MZBE-ER|4 z3}RZaj`(apB4>VVra7D&(z^?&!($Jf3R^pKJJFmM zs^bnoj}8XrSB2h)APw10^z$X6Yrlw8+XIQ6$CAGWIX`zL*)Tx4`MpeE+nb`h@`x?- zt>Ezw#_Z}#GVwNK(NxIkCm&4nlFYXnIv?T-i+wg!G&)>N_vUPVDPZvIj!?)Rrn>dP zMQ2+l*COI`cPVqqUSkV|6aM&4_(D4?U6vC!EN3Ksj)Q#lMH_!l`g<26=W4QD_YHV{ zPEe;?9-k@xpResw_J(y2dSA7Scn8ZWMRp{NtqIiW3)+8?DCK{|#V<2YN@E_pmHAo` zmInERD;5_i-oqf_oYL^K${iCt9`>cjZR#5|o1xU@G;u^n(4nG6yB`uNIt;w}Dm3Jd z+VxkMe=cNr{Z^F|b3L9g?=NvC%oFC?p{My}e?huOtr7a>ZSgcF2NZX`{Yr<%H+F;;$vVZ)c zXi-LWdVAp72SK&whW_m&_$!q#q$s1*c;?uOEMMmmQ!3rK9h-}knhUok;tqX$TuHG(<6N9E91rVbO>Mhs@9P}1Aw0emhP+k^RDeW4?>gz_IG8vBf}Wwgb! zqgHn<_OLBU^x?{L!6*x%^jR_#dUt`&}|!e(C=I7dsX^Y*BN{Uqqx(%{?=fF@gv$q7W%v-q;BQtv>}#{R@{ONb+Luq=rqsj!b_>F>gox-tD4 zLe#JVbI&D?S-6$`#agh>EFx2MKTP~XI3F{~$@UrCEala|uRNRw@4>rm;QgzG5BSfw3zX^!0P_o1>t4OGW0tHRhh{a(ss2jm3ou zbP&vb%X;Hy(w;M6$2^9P9%6O-AjR1W#%q*dGIcv?`w-Z>)nW5Euw92i*A|2J->z8G zOp#g%_-ej_XDWKdf-Wus)lLSD+oe?KCQ3F8!9PDj;V@8SJ`3SevZkUEo)ja=)_&_jo z<+g?^WHHol5mTSe;0*V{q+2dll_>|k22@FLDcIUxaD3#zZpcE zV}z^KaIhjIP!1h)IX;?cyAS9!z-q1@Ry(%0+C1FqC%F{w2f*h3hOy!`Yb>!o8VuaM zqcp7oNwLi=>oy9-{LaW4z!-SkNatK4U-V?tWrlHjbwQj(&ecl47Xi&X1e!b&JZ272V+Ty!br58Dfz30Q6hr)GA3Ku&; zJZu-ZM+Ruuc;yBKl+Jxa$d<~OT8Z$!BGbVAOn;>b#n)nvJ|VPbJ5l0dMeSLhb~DfT~y+Y57S2j;##h!*8!`o!;0mNX{Ynb3HQA|+DMfT8gj(3PhM z-=+|a2KbyMUcF1%<{)ZXUn%qxrJ@#EbueK-s_=iy9a)vjk)v51$==wZ?rDPN9(3VT zwRyH#YrCi&)kJmBX_4qD#yQ{D4LCPl{B4el?{Ny5+7pN?78gF9+epk5;n;k}af`57 zJC97$4xaOOoagMht$e+WAia*E8lMp_TngE}4^Ge$nByPeTy98C{SY?6x!9a+OJ?L3 zkX02G;q$Eg*30sOmBgP;2c?b!SAAsUYNC;)RlrsHGnMMVw(v5e2Uoy8YN={VfL>dH zzlqU%Yk|$v6q2NoA`>?E^xa{Acm}HCZqg4M-!hJvVynhb>Kj%E3ulKuT zk8oWs*IpO*+I#Okvnit@qLj1{l0;U8l&$QQ*+n+jUYBcJ*WT-6_I^Fj`Tp>I{2`Cd zQOp+#3-4J6Jnxj29jg^SoR1WL8&pi7=-Ithv#wif8=AjL;OlXK6c3WiW03zY1vt5~ z!1($MtqP+_J&0!03kNLz><*DLv1WLK!^YnEADcE$L^=;6 zd+<||m=7RT(nLlw$gz2dL)szwYzJ(;5undAf>#k59zRi(7N~Ti@uc$~23j^zxWZB+ zd49Idf-KwgJ}mM}3*;B=h;MBWIeA3z{auEX8Ul^`3PhF>sCfh6;u65!CmF9a6dHSi zaNKYQo{S-mT!Gvz3HWtg;ZYvIlkT&`Pi0E;1dMr!@Jke6a2(0eR0Lm7g5Hx5%6&kw z28kpVF}yg^n5Cm^lakl)t^k3vjS1TLp}Om}p~Maqmr*f&|hKXF=?j1{rnM7H^Z+4xnt z!grua_#nKto5=QX&Us)N7A_%sb$Ymp?)6q&XMFy;bc)zN@{H4$3uM}S;}=`6Hwh|zx-cDNpk zW9lr@uNRT-`7==GiwK930nb(z9Q7UvtAoDi4Lb54Q0ZMjb({vMw~H*RMPPMOW<>+y zo5x7bcV>5NRieP0KyI--;5>OV~iLx4tQP`N|Eyd{-Gi{ z>lk9bvkVVqxv@j!!5ESG3qbnSW_VFoWNsxEk3a^GbHIHkX!G+#Wshlye9~Lw#Wdpl zm584;LryIw(s={OtiJ@}3nF!Gj;hQx(2@TmtL`#Oxwmwa_dd$J7zp;qvtnF*nV-e6 zOsyqw;yvN45e{o-QEl}bjk@4VQD2V$Zdk9Hb$EP)CFq90k6s{Nr;+b2B+=;zld3TM zmCE8XpTXy(5?3iV*x1`C1-B~0o5l1##b#MaW4z876WiW!_i2Xl2b-(@Vz41`TpUT{ zO5jfwfP=fCJSBuIjj}ZrB(@2{rqP7=4qJG^S5s0;rJ4=}sB%~cnK@L|}T*!;?=V>T=PYJI&D15D< zF)2-qslLsaj3**T{SZ(0Q)*?P!jt0^olivy2?o6LjH&)P#KCcZhxUU^4im1j2PAQ} zn1VUN{X#@4q>@=Q5IBCk*g(Q@fgpwMG3P!Io*l(qaAjjB-mbJLCR)cyG?s@>Q*IQ)47M5SW0(^BTD7eAG zS<49Oc0~DiJM!SU2#)R|VdHGT#9R!yVj!w8*^@n#{rM@F4vSFY4S>%Zktsi;^m_~P zY#_?7830Q*3(6_R?cWW?ZDG{O48^(&t(XjOa0*GeStP^CiezbK&j8^i_s|Y-Cs*DX zV9s{}PThpk;enEa4+tW*01V6l+M9?N{s*Z#QK(04M18D|I2N4&YpA>EcM(9f2ZHXl z7WIT!(EnLT-AgO^8cwE9Hprn6l%czXH)aES3`LWLCdL_F66cAX7MOjp2hW#f)i-X5R_qF;hfb{sJ?GBCk7-_NWAq_8MhU6i8@2 zf$tTV-=?t?XvwmPgj;zDubcUil|F+c=8Am%AHyy$ zKyHTW^hV3-6X~#$D=Sswx!|PcA{&c~R4A&Nwcpo;xp6E@OjF@UZpfMMNy1NnsC*)x zdjLQ*zdRnp5q<1|5Ih3hyfEYkL}Lwjrovi%&sWgl&xpm6C&7n?gi8Pnc~5= zg0P~1K}i7h7YMh?kEV+c$(hq6Lk0l$d8c6DeT_@TTG%)pC9ail-WkTszG3Ws)r~!G zzA;mJvB~O>QfRG$^BalEo&+dbNFXARWo0@` zw{hg(W>lSN%zMizd*xPTaykRdDGu;s0LYL)#zP(=Ny~%-c9EUO<0 z`&?k@`GxsMg2>=4!rne0Z(0a9%48$|6Yg`6ZLcNF3oi*rhblg`*#QB5L{V;NjhhS( z--V=$d!i~IhkEi>(tmFvJ;7GGKpoO+TZ7)<1y*VX>fT3CFT07>_hG14i~{{MM65nx zV4X-OM?iN=)f=I4bp?Wi z=ULEXHsI7xjLvX@@*W7y{E(*)P(1St$?4V#e$>%0bG{|%e*k}uFlI*-+g0b-=EF>5 zmcBP;*Z^Rk-$*(>(hzu#;6@fmdRdmklZ{Ml%G^h@jP+w~UkdmOT9{JUsncRC>w8a9 z<2#CeqI0d;y<86Gcft5`7SBCJFeHhw=^}s|iveJS4dsyT^BR6$!=3Z!Zi;C#cG>kk7Sy9y<#ILeJ~DC4KI%vm82(i)`465^RjmW=DKAjyp& zAdzKHB*?<{U>au<_`D`~GM6Br9YBfk0Bsio$E|1a_=P2Gqk(U~8R-6nAw3U3TBcBi zAFLwg0~|Z4Owt{P{bz0B4f{n3@;CFxfX?+GlW0|4ZXK&^9HxXB}tnQvM49YXly zI^*28paM4_o^6M+ct7Ha5SAs^neT3Oap1-u=JY6)JHMf}D@K5<-;VfjHPVnN0Lg_A zU$+Jr_*AI|OB`0jR855&8FRHRtJC$2tP2C_l8Age3%KhKw#EPfvk`rJ6HdHD>^VcJV&{N53}*4_&3xe!OUf|=yRI|j{Ip=k>z{(B zKdE7<YlHQj+A4Mt#g#RQq%eUW(soaK7c0d(3flGZ6>{u)=Fo*AXX+E?q+0r7iiXrfOr82Nwrnh_#w<{)iixgtjcLdr zz_R583VR{U@B~>i%;;f1i}HPFbYfr8)hc7|0Bs+j>>dD;vkPHkVZ?XU5NmfqT=b7X@dkkHvI)*L7alqvv2~7- zddb2W_0TNchwR^ru*6uRBK}}6ovn1UEL2xkB8_V;7*Uo~|7_tWd(mF#M;Lew)#LMk zHEa1TsDAl}DVw1k+3(z>#$zSHEQ_Ok<+} zDvlCKJt9)88^FVx2*WNAl--Kv-VTs1ceJ^GmGzV;R2{1kKyKDkS>BAT)Cid<*o0Cb)zp}!ogI(4oiAtA8+XM&vN z$kS^hdL95O=8e#+7s-~@#0!36>a{>1w6DwBe2FQz8_|r~k~^&==cbPo(`K=lgDZiz zWs5v}3DEl_!nN@ehpr58C&b8jft&+MI#vfh(UfR*7sB%$iRyL{y4wiwRX@R{tysch!5+CB zOvYN2^2rJs2eRzUFA`N#HEUVvhXIeZ0>!cb=JzA``IQB8+LOGD1`5b!i2sFgoKv94 zHRd~K#9o=Ca{v5KxuUbg6%uJ&0e;5y^-p83FK+A$Gl26&J7nlqH#M??qC7PL4mL6} zXsLl^%VVeS`n_4RjY}Qu+s&f2wKYc7Mu;hj957qVvua|(MlqjBx4Bj=o0~Od8B_=5 zudW(iWGe7o2i&rZaQTbORZ6iqVg=gO6WTnzacf6^()(habfk}kdv6kV^bq5oEO!1; zY>v&dC5c($DuK6KK|9YDCCAk;rDhEvz3MaS!TFJ5n*kmV5zv!`KW+mV(Fw4_J;1sb0c&_Nt=?et z#xbm>RR#6t8|ulcz!6OBHmL}EboSuu*J1~DMZ3W_B}M+z z&}RlgZzicw17*c*C4507wUIGh6!Xj%Y8L&b0;;!Duu@s(E$u=63;>vP80FX9D08X{+*-*L+}cGK-x+M! z8~BT#qSe{xh};3rroj3^W2DEaB!x3H7R|4)%Qk|x6$Bdo%Mv%7x#to#ONO%fFbnMJ zO@Q;v0kd*2Nc>x(g5ya&tp}7e7$`Ur=*|#Pdy-NAG6(6@YeLWM1PjNB)LsPqb03rr z9})KrM*Liscwaio>kA^l_YQcDSg5abt0@ihu#gj>9K2+x8UXpH`gugTqNf-ps@+{EQj!Y4U z4FxZ<)xC{2j*K^QY(1M+n}p|%6h2)PATAi`%2VY`TcF*ieRAgQv(@Qd`JJUa;t8ic z0q)gKq+ai{_NpI{JXpGkc(_y8`gxMWC(?5kDpp_Nt&IyT6i?Z&21o zFkB2_@xRHuELNn=Oq4I9lx$oMa(k{Z(+4rPtg4!~N+~I@C`a(tZNTWC5v*et53XcE z=ZlETa+v1TVBLJStt$rG^mBm0cDK=FlvQ@XEHJ&Bv7HocOx3-{_R19Ye}FLbXE$~C zgFDWiMNqaHbI2;;u89VI)N99t zy*zNQ<;=cY*-Vc$rs5LeF1wLWebMmWN+s4Akf=%wY4sUh<827(X3HNPb0O|B+FvSI zxz*Z}>^Q4cU}2{tG)(K)14-9hjr2(?8a*B9V^zc<0|k1HWL~8h2D_tl{}<(be}c>q zfaKExw;e1OhYHLaBUpACLCxWadAk5+%tks`1yt4!(bYGxUUr6QY+k1MH3d9lkkT6{ zJ#w{jK0B}7CT~WkBM0<_ErRJS0JdF3@ZAoQa1>0l2r+}}vsv>_O#B|Pd*q-!Yzw-4 zyOMEj*RW@&1<#@g#xz5C0B%5$ztGb!+SJRQ2rSJ03ZNKL_t)|UI%n(0g{dsSs%=%P#-o!2eJ9$ zBc@BBL zOpF!NECBdVtcRz7#>GTtsLbGETUH;eW3D>@># zk-P6g%cJfa?NQ-`<>s@>a*nsjS~3vS%^4tTkAci94^pfwz{lA_Q|^Ka?Px)zjt-0} zhxoSxF!34CnJ$7i76R6IfFjEkPxVyhLM<=}8->$nvH5F<%>{|gm?dc5?I8~NE~eyB z=5F6uI^R?++G;mc^*mYoWHZ&9CopZFh8?L6$=8c$tvfnB?}=mTQ+7X}VdtSjE|1B# zjQdhAvbyI($H9fh`Q6(%#+6`4A0M!!h0^_RI58u_DM5XSC-*e)HjAa85lQcDIP)w@ zmkDm@`pp5^-UyRe;O}Q5?bDfOEM+Nmjrn0UW_)M(t3R{fU6M8Tw0wvn>3bizTpy4v zs{tGdh|m!g1t0}@3C;fw@~$CryVlC?w+77_ALQn6ylELQW}#&MK$zDXd6yUP_*j;#+RWEn%%ksui7;sDf1Vef)wo%U zhpv5lF@nGf@YuYk61I_Z8V6r{XezrqQZee4OEN$CAeA(<+=P>iDcwnIw zmdcDHYxfSelFzb!G6z)G!idw81)i1=sOf3Id#u4ZEev#cZKQFUNa$h`|9u*Eud=XC zG{LZFV#y(iAYd0l?q>$Zy&q@7#~Zqakt#lH58+ zQ1URa&kd2`y_nOyj2u2MGIhO}l*efP=qNm932<0bG#vuL%(20=p9<`sM9?&qD9azn zzaW6zW%x9d@$LkMh-$#US0_`$)^_YPlD#ttMz1BRQ5cm>7wYTIYRDVgY8S}Xq5-zs z@Bq%!{WRq1%qq|4gW6-`UUGN+OU{xJ%IVovI~R5*>vB!8uKBZNc7pZiLeV+_RZc@u zon8yg-G+ER#9>;xDKjns<*ypR|Mmiis|-?fN?7=q=r%1@ebcTF6UhvJ&E}*Jo3!P| zJaPwK(hWHB3YkY!QL4s>{OAZUAY5D4?kv%XX$o5|G&uC7;s09OH1iUgUI~`I;!A33 zcTsJBHMFd~Qt$sUj!NUcyM^x49+PI__evkYF5_qTS8v-Ma?!XB_Mq=ciROE|HsTr| zfu>)IGE1itF83pKW2;i}1IQXR9jVez1m8Od6HlW&^nT2q&(`WT==qd@gIg7o~QK)b~P9nwG=2Qk-5VJHw|b99Sbb83&%B$otv z8H=#HIO5b`qUNWFehmVQ4iuQ4AzbzeNt22IV{0NDo-4Alm%zC8Mz*#4p@&Sd3(Opb zQ1Tv_nC0TyzfSD4CCP-|MSfPDsoV>(fB9g@Zw+G9b4B&CKy7L(YFJ;yXU!NlqyUDG zCGcqjIHnfBWgMsn(W0`d30JLsD%kySO;kCZlUYSDo874s+}OjOI>tfUwO#rB4D>PBl<=65I7# z@iH|Lm9{10Vwbuq3Sh+U%~)Wh7cC^0u^``)b$*JJ9h+j zZDF39ALMeNK+rLeK5G!t`y)Q^6=;1%WNdSQqODm@o&!iNPFVAT;Lt?Gaxa0}R1w&^ z4dKWL#Al@t3zarFZK;S?X$xYvS+ZeXgU`P*}0NieG7&9n}w4p`tIn>)Ki z4y+S-ab4(j2Fu7YWES5gKAED-&`ko1dIDBxBN)=0@m&+Z2Tus=Z3cCHhv?K|pa#A* z=pQCDG-0q0dX(>S4&WZ*!(t6KCw7h>~9U988=nG?sG%;B@2B%E3u~ZFVzlqv@GRt9S zo<^M86LfeFBRz`=-ajBzX1USTVpumFNi;OVre^*ue)UCSI{|*khv;37)Gy&mU1|!`>G05oZ4(VSK;nM~~ z1BbcPY@Mr%H*;x~B^a2`vQHmG!`p;g)D%$z1zkGRxr|(#Ys~NGj7j;0&Cuy$+6NKe=%b}@hywSg2qW_%etb_bBALi96=8OuK$>Pw z|HJ0AEHSemf}OF&%I&)lP3C#wklrjys$oY# zpIix6>Jrg8!J?N8C$+7;MMJ+>s@E}XMJ0khIgM3^?yTA#H#)~+=bQ8FJX&6y1tY}@ zIDx9qDp2n6XwBX#)}mR)d4HVkFnI*-{&4=-G(zPzIRPx$z_04E>34?t22MijkaPAz!Q{54L zN+NB~MhU43+_4t(kbcGlG&bh>0Os=D*{s>9?ImTj?Kll4$WKg%nk*lFAY7RZusV;( z_8rJoKay>BfW5h%F{gZtL@qEerM=RZ&wDtJEzjd9HXA6qn!zoehOBI++z^Ih_0V4Q z30-r8#Vo8Yc9*Ki69%I6`x{}l6XfLo{=c#+K3sTrH|7;bM0Sos`cwo|-xs7tUDo<; z0c8~(tW^Cws3Myq-E>ECt`+<{P^3gPmToJN{TDdUxx!7&xUID{TGYYbtTsLq^`)!m z%pkOuHASaaP1`N+N!xLt0ORf^WR{;N_WFi$KaXIa6r;xT4`)V_fle8YFVmyd_j$L# z_9?_><-cs6Z8PS!n=y73Heb4my~zi8N>?=bN2A?nHJY}W%4}L;@v>bcsZNx`$-sxE z0nd5_Tsldl%yxq-jtG<;A~?7(s@YB?HA66c8o<#)A~nKAwyiKSr4WPbJwTU3d2sTN z0xY|d$F|w5 zj#SfJ#$WU3L?s0grC5H!z2g|Y0vTJlG0v$VwDfmS>w-b~fGDp_R(YSJ74VbgD1F4~ zti4w|X85C?JCGH}uxh)>s1>En;0fP6@AVoWf$-4~9!L4E!`3iQxG_(r^ zg9+Os?6!kVpM6G_9A^&8Cp;m{K;AU~$#)&5Q6VL(qkxZW5}y3T=Fz7O54pi6?6|`< zb(1#9H<*tuU`c<#QrJgP=OS)YV}wKH_d#m&60rLa)viUaB`od#V-DyelDI--Nhb22 z|5_$Cz-g{6n;aV7p-qeJ$mZHvF%6Q$jJ$1|>a*C64^{S+43+!1EZU=%i5a%j@T*Xk zFV~pHN1}S(hO}=Qsp z%v<6#w+vHeb2SREYfV*Q*7Cr*On!pFU z3y02TzUL0$GY?gxF{D#gqAoT{>7;1V=bmbsv=%X>x*sRZO1f0yzGmZ(FE{)GUKzCx*6GaSyb+Tl3yJE`Sk z1&&S<*$H4LlbD(1#l(*TGa?!I?L;(h8UlY>#$2=%n-#X<$Ye3~j-d3}!mumdlDvOv zN$&~pOB051*(?nMj5JP>{#wlR%6 zsP;{}{VA+3iws_7xPC*B>}nv@ytSG2#A)}Y4lP2eGy4V^)2K4@h+N@YxrWOg5-Amc zoEvPJzW!*!I}67yGraB&n5YbpgF6)VKSA`DLN$H>sF;OFJwFR|Yz=t5Ho~YGS~8o1 zbQT-_=g)k)r)@&J8a|(7oAg{GyXM&(76E+wgj1Fd$wQ}JTGYKApllKObCU3W+ys?9pvSpE9TL78CART-_dNvbicF1t23M{=RBmZv` znF)Rfy+4u)^;TBeC#}k7I>4`?=AbdiexbsSYRnr9;J#K&Q#P`a=SB~X5jt20C7&V!5SRtfCjzjj3)R%Iq$`af_4-#-TLOuqh7he1#H_uDLvD$TTqqJy zhRw@%!mGbC&uPZS{#i?(>G`c0&)s#)G{BD;3_b%4(0Y-J9wG_*kP{5By@`3ZyW#Nz zY)M~Z)3CdY*;!}~EK;W2Y2<=;fxACpY7z0nZEBv+1@>PBEYZ~QzoQ@F`=cYqWc+H| zQ^SQn$Dwq~B%D+i@%#p*I_}Yq&h53^)g+}COhb$~4X~sUNY%c`8N~p;Wg_;E15Ez{ zB#%&yI{{Ry4bbXYqAqtd^lMwD0)3cTE5>3Kfu^Tg`f3Xg_idBi-8S7py|9C!YR16G zXomH*NcNv1nB_&7jDkZ83clSbban+$e3sBhC+nf7z;S$yIDKA=Th>Z&?y0Vvhc}R8 z`!&n4x2o2cj)R(HF{Sx1Wo`j=Z3^nsZ_!%q3)b#rvGSfZjwUr-&dqgLFS9jYzGsQ2 z0@yHG@M<2WS$&vl4ncZ13~*}zs?0*DR`x=wRT6PsipDWM7Eb?3Vb8e&eY^$Ng&CZE zpW#arLE5Qk#C=Om>qshLBGZ~6BN3aG-Kdx4N*yFzw1y4m>KXKHVq>i|)>FEnbGw(r z&F_N4Ep)rG#;h0hyrZG05(YbhfrDd(^LPW~i2*315NcIINOp*Lu3$dg%a-WnhL7I^ zGrl~TS~Ed%>M9uXhr`6$07LpRdIT^|`NPnV7(+LY19oz`aYQOYlhuIjcc8+VmilM2 zMTf={*ElOi?PiXCsL^$73E|;`M2(gb1)Wr8{zMzICL6iA*>Jt;io@Cf?p=#8=sDul zn}|EZk=AbpxU? z> z%$rVq?YW!VKeJIE*kB;4wc+}K#w;k$=6ofv_h)IduO0I92$b=o0sqTJoIQ%D-YKPG zRtc7_18}M`Kt@+lKK~kObjP;5niBhr2JZ75Wa$FLXa69bt%($|5V33q;`zHm719Zd z9YpAth48wB!3Vd#xLxf>^7bKp_DRxqnOTGr&S~jU*2vQw8`@Sy{BR#=`BTAak8G%X zL?q}eK*{F_e>Fz9-V>qsLV)(u5U%|S*t4=o!b60<@fyy|WoQu~aPEMMhS&O^Zn(pV z+oClzxP%zc0_etWrC%Kpb^aizvz4_D%+M-)B4FS3f=~JhReoTo&TCc+pP{PJfb2>A z$@ZKMT;-DR?*Bx_9T%y603>>;;LF8AYil5Xj3Pc=+r^iv89C{#A!I7xn|?yS)Bt=w zQK0M1AF57+Tr67AX>UEE@KQKY5GmYL9yw~bNVQau{wD~0MyU>s{>(Pw+m&HaCQH~u zG1hc8p{v5jf#EOQdBLB`&dv{9y$SP&uFNMA*aTkz9$i=D$VryRg9X~Q7Tg>I zxS}0m$~%%zBaln)CwZZeXXOW3n#%I$Q-%%&P>o8}j*UmPTW)o7W-S1{zB=HZF^Gj+ zB-`_m#Lofv@(rpf~Vd9u0A3O=a{R$10L!r{M$p3>FfHMSd_DVO-k|!JxA98J_oWu+-`n2guU5z8KRHSAlofFV3aIw;1bcQs8uc0A z+c1H`0f0Nd3B?ycU2O|Hie<2~;sSK|>~q)23^Zn60X92|vfv`cD%#@HtpQfv5nS5} zs7eA*ayn9E2Evb103MG-zH9?%9Sy#3p6Lv zvTMdUOzwKb&DR;n#4}Co$+W`7s?sdNrQMx)xi6~q?~y!)6ILa{x6cKpUld8ZBodro zqseGP(xw;EPel=at}EaZL3nhf;IzMuR63}+Qd5*UQ3x%X0RFZDp!9gcK7NR|4+43o zvs}Hv92O5;CJ5l^6oiAnkZgUfVDxd6kmZ0UCW)k65kB7;xc3z{i^hVPQHI&Gxp4F1 z0KJb2JYE1;r3m6^PsB@05g!Mk8u1&@zjt$0>6YIh`xUxYpG3QTI>Gy{MEwhqTGCW# z*94LYb7GUWH3}U!X)W=VDFEF(0o!l2A*32W))tb2uN7}NgP86~ls`*L=XF3H-j*I% zURy(hMR{#tF1`YIMzlzc6C&5=f&A`?cs*KCpeLv$>p?A>19U1!)SAmeITe}C&WuQG zv+M^ixNYY<(9ZfAm7>4ixSqw_;hQQ@UfI7UB>DoJi zKJQs(HbBXGhqz)s(x3yH@_#11s)+;B!_YnyDKcTYNQ+*8>lu%eJVa5mb$ErfsVMUv46aNI;u{U4w@k;y9hwxPHjff_YHS~U)x zG_usegvkX|fC9N8Rb!92l^%h>!Hueo+5f@@<5+D>O_{wqW1?*d0&F)xi{+3>5F zV--YBRAinu%jWKPe&C;ro%mk`B}ey=Y^$nFr~V@Un~6NO9;dc(^UmvJFBfyAnl>CR3+0VC(7tDaToA4-|PBAUI@`Ql1Tn z3ZDl!v=#B$9}3gwh+0~Qb(emibDps(-utV}t0>O3KRMqVda3R35hNo62>y?RyX>nn z?fL-xU+cW~2D`hvy92ue#V%BAuuv3R!S2RREbPL-?(VL!yLIjvNB4EE^}Kk#$MHKd z+#+tVm#D*DpQqtIOVtV*`BH_@X)2*}ZN-n`f)uNS=1)-#cwp*Q%raeMSxK>@GFYh* zCK%8gnzbL<5*s|WYH!DWs-?E|V3A29tPSrk(jvy%7mp#Q|G?%-$#z^E+mMokTnmXB zHGmoBF#p&@KCTA<03ZNKL_t(x5H!kY)w+;~IVxeXDudsPEn8pQ$A!gB62^ZTHFkVQ z>chAHlvw|7Dr>`38_!mqc2Vg`4&u#&h+CgxKG+A`#*)sPPqx%!NV|)`xgb!H77AEk z;<&2i`aD<6Vd&peK%S(;@lQZe*_BrhAPoJ)xZ*H|9|U@hVY6$B*U6RI>)9G^I77T( z?qI8Fqm_;xQ#`%GIyA(feJuy+pBP#;gSpZ&rs%QEhcq*@k_+B zHl_6&m%;U$-9S7$|1iqD>owMzsU7ClEGvW-9%dF(OEH+bz)t+o6kpg5m}l zK2)1cn=fSUtu>S>#9!}S_sEVIsCS*}wz{I#*9mSBXw7WU*7Ss?OB8orLJyo0nR-H{ zS!&f|F9j`ESatFUhqqR0ni@K60%X7(=)KIOb9S>N@60-X8A)&-=%Kp6c7HO(b2v`I z39s2X#-CG8V*Pib+Lc|zo~*C#sc~XQ6@r_5kJ#;2ZRtlUby~VQG`r}6I-+z&HGZz* zuS$gNjhUOTBT60wTDM#DSVz&qxkNk9@Yk=tpn6|YdNd}R;!YdUnGl^CA~;&sf+n~; zV5*P?FnA?n#&$x^k#~{~+s|>d! zd+(CANDu8jaN@YobpbUp3ge$%4vLO4a&3C~JKYDxcqz?3hKAD;;roX66=OVCElI9(zLhJ%~!@Vu}hNiW)?evA=bS`Tgtv z<-3~H>->M8nnrS>q+oe7MW1boi<_8Abnv4&Nttsr1htQ36et1M!ivMKM0Z74*%@f+ zlwWaQbkIvd@413kD?~TnQoa2*!H#omconw4Cz17y5ji+cq}d}YqbiFe?k;k)E7`b# ztjT&C{#?NE{9Teg13Hr5_le{wTOX$LZGx-uU+i~>LEMHpP3bo3zThxLl! zeyR;-svf$jTJJirI0%%zCGn|1@P$#zn~D+t8O1blJJHP?MCpy!DW1mT2^?We(0__^ zv7(2jD0*#%Sw09(+%NK+=tf3D92$7mgO>FSM*WY_WCbIBH((C}BU6eNnF&<9sM??b zbk=J{z6qB2pminwCOSh}a;M6yyrN+ED8&ZckPF`k;BHiFB=}wpL1&$o-QC6`fPH z?zysRJ6%v4<`GT3U-ai(!5{(6T?cKPk+5(QX^)1iv4M;^zeqZF0|qT6cvd;od^Xdx z{2poa%j?!pOm4BY>Xz#+Zq8?F2hD&TGE(h}UC zt?ilF0KN9-Yxy^-Pp#&>^cM`il;{Bna(h z>E%c<2q!aT263Z*fnje|?(HMl)BsxJo}&9;aGRcnH%vDi4Tm2F7z#N?oH@UuF%cyi z30-*|Qsbt`l2_suiB);CR&?-Ut78tk_-~;g#V{8I;}xUNd*pnKM`9z5F6*F@q8Oxu z7dme_ss9+(&i_`cac(knO*7VCVzk*oBhyo|G~K7x9iaBfG?6lKVk0WJ(!)zO-(Zg$ zca_~t@sOK~K$CYmbhy6Z<;g(7`Jwrmi_lBOgVfOU(?|=AVcqB&iC+Ur6Xn{kbJTwG zw|2;Gb%UZ*@@FO-+-qdxVAkhLnA)WSR!vY{_(SodAGBvT(!Wz1y_p4?=8b6o;V!M3 z^PhKrn1@r&VHws0S}QAb{8ZK0ii{WY{Pf5+#>EP%?-N10z9(DYrdVH?*pAb!jH=*> zdo#c4hH=o`O^H&aU^=o`=;~UfNrhbb9OBsK?~U9p1{|mgJl{$bkQZ37n`lT+c3Rx? zc)Pao^FRNYJx4C9DR;xt{B}aYA%dL?#B;1Qxj#y)FMa|2dGb~Dcw6Or^<6p@VX4k^ zqlH2f|F>`eyC<7MUR{Fr>JM#O1F~Qi-~GsL|<6fO%%<#*`nfIq1nsSyeTeD-FJ+STO3-K$uTR}ID9r< z5SK@E=XS%9d)0G%di0nVDaXucnMHZ-Rjbq2xPRVfcK+-f?%0|QS2VHjor20a zUJy6CPRQ_tcz9*-=(>XCxm3#Z5N(;or$6$r)3&P@Lno=kMv*L7Bf5JZbmjnPbP>YP zA(aucZfg|uEV$G5Hu%bNm@zIo30kQo&Dg(;>1 z%i7e8b^C#_8I@{8SjtofCOnhs$96v;e|yn1hAG(%$)wV+KtCSLpuU>Iw)$r2A&iHcFYH& z$^!*E5^byis@hVJ&r{^Y7f~Cd4QNtaqdu}<@e z*0VgRm^9OcZZ{*du&4UJ4AJEC%23h`3)$~VF*sdX5)Vubo-kZZ$@*k^#;_Bgh0Vcs zOcm!tvL>*m*+&#HMcKbSoURAew7n&!&pI_-7b)+X!RFTpHa$}j{qGhyp(tp`H)ieP zICpOvk8{j;(-k+)z$oTBdDUF(1M^P}awg6`maaAoQqOSeWfV>a18i;=ggYToW5b^RgL7x+u#hyMD%VyXvHins+t zdgK*%QWCXe-;3SSKyAenR{r!?cjE@YdusKtr>tQ;0V$0Rzv9+bDcNYmfwQfi8cI5Oox#?D z%!R+PDR!I8i0VvJCbEuc;^p+RcC>V6Bw=X|)r##bW|o58G|afOcKW%6 zcNm)xEcW1Q>plojcTSkvP0`k!Jy7g_15C{l*`Gk}O;;&@7m`S!8{R=T{{(8Q>bxhA zkTH%uK9S{M2Bk`Q$a8;+lj!(Ezr-WA8NZC-#_&PK^hlBASyYaO22_h_OZNR5$X`uJ zLt85*RR<@&Cq|ZuclI3kCqHbG#{BI~*=(>$(`T`!8@Sk}tNM>k-Drv=%ezODeA|j7 zUsF+%_J4B{@Bffwb_z|>`kN%W=MQhyb;c}ON#_15m;>|0X}D3%&6>iW8!1OrAoSa9 z5b_+wRh~|V9q0EuliBq-)XRQi;)(XhA2l&`UZRl*V z7q417zPVVQB{q30{X8nUUEx`m^~T@aw|jDO(% ziZr&~Ib)apVEx)jWoRAM2dzZDhe2PKB%NBFk*R~>iv5Y-zhwPiC}gB7cG3oMm&_(x zsa_(D9OH-T4^@}%6I&zDwYI0&R;$(eLe%~U5c?^Gx@EhHo4E>XIY-?UmtberhdtI* zZR;f}r7o$RmIdyt?M9C8H`uYx&=jpvr%eaur~{yxr&XIThUx>hs{$b9BcT-|flPNi zI%>O-lxK)${ZnCvgDvFTVpadrDzDL-&kZ61kaLsGrq%)QOmkS*8 zN4Qx9(T!miMIJzXI~_fq)?c@Mbfn`ol5rJ99}W?j{L#wL+0gbgA(i7)8b(0+gpob? z$Li?pR*v@|-E+Z<{)-)+P?S0FqiVr-Dt~u2T5$qvijORNCP9}+h|Hg-+OU?z*!`ku zI*EPMQtZ6huv>i|(%cRY|0bSM*{_!Uavm}E%LUY$59X|r{@GT^Ip4wE! zRi>1NeUM3QLLPSa&ob_hKIEp4Qa5iW_=0|lTmG6#_$AWQlM&mM`-6%;X-GunNn7H@pj_i`OK$g zGWR}56tW4ZIt-jCNHKGe(vAj-=%1vu@)7;pgfTyq;9I4-WUU~3kYGbaq1Km#2UH_O zJP_XGy3U$(kPHVB|E{%@ZK)<=&+QPK<1ckzxv=L)i(Q&lW!Y6n{f1XiEfN7K-yHg` zGGXvkMqEC{+}(nWHGT9o+)Lxecz8r*1V)?%M%_{DS}0n4nM$`jzqN84xrI}aZ&Nmsw3$hBzhj>Dg?Vv;QhWi6GtG&k zPJqg`1?8_uRPG2->uaFsaloMYO0mU(EZvo|+y%$fW@NblY&uSM_wkUa-; zn@q$D3KHGzNYuO)nc$MdM~WG^@tjdf_6NlTKKu>k*cR35|(Eox%gdh z{gRI_opH2DHPS5{Jh~kL&=;Cf^9xqP3|5-@l$!C8X8`esm4X)l)PcQ^`3cfX17PH5_nUX zcwT-&Y*WR7^9CO#3qNe3y0(n!zQ0MJCAHY@`~OeA#e z$dtS(>CKy}TeAUIE~_ni6?(Nb(D}6D+FEGeZsZrPri#_l%YJJ@PttsE$iCX-{25RPlJ*$U>XOWrLWPUHVBTGj zxLH$nX09RU`6A*;D?qDmLMB}yowb`O=RBcQF);C+iDr~kn!b?a+BCH{KB*mhS>?w# zmABWR&sH1Wl|Fp_vyi1jCanb;2dQ?c3feR3dw_ zmeT1)mWppyTeB|gwjE;YY*f2sFYxn}G3R!YwjQEbaziA=Hr0XYRjv*oTqzA42?Syf z{r}AKR}gW`d!k7t*sQ(?&ecY7;)B}!cSs7P0iA0CiOK+^K2MZ3CG(a;!ZY6z&fQn+ zPpNwKfoS@bRwtf-oZG5yL^Zg1n$4I~vDwhU;{(7qu7J<&Rg-lZX#8c1qsJg!w~*Za z#@gT;>G^D+p_gGkv<8Nh0DZ_NdS{fi9X7)EI2GB?huPLE%d|Vn%cm|Ht=7)i(1ymH zxD>i#D4F((>VzZ#>3z4-iL=Fsd zG{ws5N|oBFzBnv&WQb^*93neEs$^^e-IWy>+`)%6U;q4WyVmo2WjCYcM-eX`3u;$L zv3a~`+J#I@Usxf9xT4_A6WEoD>Ceuyup!w9jV`hd&c{?dkLbJlg2}hk z?wu>{>$2jj^hs=dENM(mkBJ_)sNc_1_`UiYP&Hi9^qJDo7r?4OAn!8Z;#0-VyNVqd z70ZSa9_?3+8K-jg2~(?4#-ysMJb#e!6q-z)<9!^@qQ}N$Zv#3Q2JKV``lN|cd~r~! zZHh8)1f5Sp_IFS%dXRmauE9nGC?54z4Q@!tQN`1&rT*v0eqpM=SB_WVi+jPR%-H_Nzq~SftsdGXxX9>yjw}ka?fFpfGU-u9RsmGG6Bx6`x;yq131C9e% zgMs6j2>FA+8v{YTE+`r-hgO{fjJ`tX*aztF5EK-ki0BDCI}a_;1v=>#p;mrH+-1Ux z%ZA&(5i@SE(WwJqJNFT8zRAkUszxGmk*@6EqHx52{!5o7m0i=pF*SsaJ_k20tn_oI za_wM;Xi^Ml#A@X`vp`ul15;mv&ddZ&`3RnWj?IIjaIU}ljk1@`@BKymel_m|-|-NV zjHOg#+CVGa1-@;DE*(xNxR-D%H{tJwppwnSX;qY+2lbS93=sNXa-veX6vygY_i+W| z`}vXO!h1sG!0}TzHL|{-SeQLKh*mr%6Iu}T;JVP?MO3G*w6wjfa@C3KW`E+i?Rt>i zxPx%%j7szk)w#z+o^Di0SkD?&%<$z!Y#u%!o-vC}tynRapTcBoAynq#@5BYxn*ZwE zGQaYshnsVo%E!E_o8Ku`WL2E(MtnWW@Yc-moEZ&g-7zwyx4`5sE@tuQ|B{uxX#eCb zl;~IC(_S}lxS@zFWa93?Ia-I!oY7+5W`cP#T)!VZ8}gI;m#sU?paQ(BhYhyYsyE>|S-pUsdgppD5;#!Q~F1g*jLrbR#6} zCWKxFHM$6`o=$XSWk$W+gvHgN)832rjZj@X(8`*4weyFOtSZUo_%T`nHN{?G`He0$6&UBpua*a5>b- z)BM23+KL|$qScFl=N?uHcn|7$1K8UNi0?^QScGV9C#AjdWD56XPo5X#eUMw78a0I0 z_4P@K>g>x9>-cH}vOBC8;lL-NdvAb*3b0k?!L~R+$Wt09FikaM4%JeBS&iAoHf?T3 z-JHZDTPwBiP1L+K(TdB=f#X#x)>1Q~FEDhM;%g;HxgDxc>wyNBBn)c|+~^8qZ>)H= zRAkRak8wyGEq>XIi%MASc>-~3an`PPIl1cTZAJs z8C!0v=Iy3fSra;~v#C|L-(1DIPr#aXK$UXDLwmuL_`pt%MC?6~hrMlH8E=Q&ioUUI(4J03G%>nOUCR;Fy{3(^VzRt+IwJnZBr-l zDD^I>;(EgigCd!v_7}yN63QLYzg`x1`?Xvi%! z{V$7CVmtfI{q7_xIh6e`mxJHL`|vF2q~_^0m`3xUyRVVV@duq8BN#qa%&r`2#{I4Q zu?^|?|Hx)~p>|^*K+q6TTDV+|DF&x|RdDjkWaecw&dw#q6IFrCii%{K$1xu&Xi%yQQI%lA zVxwsOi7;yncyb!hyERHn?g7`w1O0~y@7!RWi*IyO|* z@4A&6%dKvGW+nEONcMg}sZ*pGT-aYP)MmUb5F?OGoUZK<;JPK=BIAH^Wsh}XWd4xtu5SNCH#hHWELQ_1!#C};x?Oz zxhR=IvyG?aM0SG1U}oG<3TL2TSJp+j9n5OZ8q=IG`UdFNcQTRR9sicCyvag8JIN}w z=A=QFDamhxWWOSjVy3Gp>$sYHb4N|=SqbNR7mxhSrZ_Ss zCbH?)jGSt>$(a2_-NQ)Be`3A(%E*u6kZEavxm5)tXDf}2Q;G_L`ERCpW-J%ajLp{j zb&+}xZ8e^RG9K^xM8*k?CDW;a(uA!RML((>hHCF)(A}6C}g1^(AsXw*vA8MYI&WdmcyXX3Ln$2Fa ztR2=zbwC@E>~-Mw3{W{Yk96>5rM_#GJ8!p~d?_&Jp-R<_R=0Fjj$m?vYjWbewE%X`pi8GIa`^Bz~AtD9K--kgjH}sD{75~H0lSLa1XMrH&Cgc z(4^niq}u~+x!3dO5#h|^6^|;YtotnT=epH?-7O`wQM#R$ zXv89iI?XW{Fq-+pMdlqZnJZKzUNKvo<$J7IRLM2tYr38%<;0x!bKC~mJilA@Ro_ig z`=+u;Kx37*3q_Z(qENWf!DwP3GC|kLi9Kh$(Z)$stqdogGK>=4NhOJFb4}#89EtvI z&566#W&gQ(jVJ0nyfsI$H}Oc1U+=&D{I-;Kyxl{L^Eo-2G%Ls~iH7;u4Jfz-bbF@I zfMG7LY2xyzK*85rDx>F%Et*X1f8pYe>Tcb18LhiCw`)^ISQ~tnB_LN4>|N;LGUGs_ ziYWIvO{SMi=IdEv&umcOA*Gjlm7@MqT2P5_ZU9iMtx|Lq)tG*Y*L5uUuL9c7GC?e~K>As{e+FcI{{-i->L`(rt|muJ|0pHBHJxokYAb3?|(XN&d#d`=PIzrR$6Uns+Hfsf=2bMEeXsmQ{0C?3MrN`wht~>$7 z^fl=8km&m>qS;@F8s1Xs)=m&#L+!w&(B;P=3vvU!?n9R~7VVi$q<9z7VH1FSYXw;w zxpZj?o16<+1DY~TStF7+Jt)m$(cXu}R#|MN)hCe*k5o!cA??|X=vscut@{1p=6Bd^ zY2{Fslg3OaOrA<@$tnAg&D5=`rArHM{X#miga?^cftuz}%5%#|h3ldrIl!YkS#0n5 z%kNZXLDnALKXZy0xzdqz!y}Q4w*^Js3%xt1(x$HHfN?4xIum+MCsc0im@i{I-agL> zS4IiiR8cf4A~^Hf>b@$98@)x7y%k%sI@u@92(z;iWxonDY6VP@2i95r?T@*=hrHnr z)YcwG+U5>Z;!o_^cORz2MVN)dteIWxpG0#{J4yBqGykN^PX9KKr9YkavprW7T6+(4 z%yS^LH*oQz&$$=MW=lHZZ2cfXfk3gRY%^YklzB!nH^17;rGy^eC7Spa)T1frOlk1G z@nm;x1$rhZlFotlY^d0ti?Ka3n^(h>XXpDTN$+)}51Xa<(e!Gf-}4JFz9kShDMM5^ zj``Ip;-@Q&iAp2Rs~&L1R8)$ruPAUDsNNg2wJ)2$3Xs#H6!W;ejJQS6v*#6oPt>&f z?sBCiil4g`hx@5!+Xan?CpuM>_;6aHw4E6#D={|gBE8i`arqN#`MHAWy~y+|uO?)l z^#rZ)d3!ZhPoY z#3jCJqF1A>w@n;8bLNm|$6NJuT|*rB+#=Hv*c*q*7t+A^7OdC*B1Y1m`X?MaHV;wU z454pbNM8*XH$DP1uK>`!yCC$H%FA0m`4HfvSs@O6ujHY~;!3l6tJZs^Hg1mC@MWs! zw*o7Q8529hoawD#>OO#}n$_}%Cd4Ja3N4yTNS%q0rhw|g3aZJgKqG$qKOX!3 z1GqW~*ij2wvA$q`8jGRr8O?SZZF-IHyah|Sq=d0^!DY@7#vTWrZ3l(U0p_)HOiW`h zWw^OZwzI=;(2kb0>kB4^@Vr zH6?^#L}NPK52ar2pmVqP%MxCC>m zKk#FS=+(R;LqZL*H32?F3Kbk;y_XBAS%auu2UtxYYmYrm^)bt*xI;XhWs53^c zP9VM1OysXgjxF}uMboZCJIaAB_7fhx=9hoU6DIZJ3(5ZN+}8ZrItljZ1)~WAm8#ZP zTH9WA{yLQ+3)o3{&d>kk@Wja%edZ*E_qg6d2|g#jKX~0SGFt{(I{yROa;)mzco$Vh zvlBnnQpuw}MD>K+D&h6D&SC7Ho))umS@-xVqGywccJEST7_8WsNi_dh*WRcOcVm#% z7I{Qoc}cR3SE|)fxyJx2tpb5p1&!HP($7CWjpKbal__5<<>j@MnidlJ@`zBUCP}$* zptP%0dJa&m9jJQ0yz0Ja=;9$NUp@exp8)%|5>8iBR9NC_u8Ix{MJkeSAPH*%)czX? zI6;ytkSH`S(Y_bN-!3uTJL0AH1H4pYu|b}kg2ktS9S4Ev{)Dud4UO&ZICjbfL6HTP zS{)G@{YLfjCeci}eX_kZWavEOj#=+W=ofWr= z0e_Vu$})zjV+W$`BNg@As+_B=I=78#?Ml$X(A&?$3<9v!GT4P6+1;T2RPKa7VELKOcA3M z^E#`ZuS2wd2k6##HMfgN;%~uj;{EL@Wy226@9<6DU$x^MdwwXHEZ5Y@{z#lJ*{oBl zn~QB1)g7=Nziuuvz7}W5SNAz#d2i7EQp{Il$=M$SRM;arpfJ!csp^&nKtvXz-q+X( z-eAmwsqAUAjJ&l!iTBwApZD;yf07R=ps7aOPyRJL!SClZ`}Uf|=u);K2iz4E>= z(CNlXcdIC`+bA@;7xAbngo;;ykK-Y8qM;Y|h-TOZEs+B_+XfgG415Vtx>?9|(w-$M zbe%NANJA%|8mD1f^$guDsC-Q9{6XwXHQbT8O<1bUX6<#>NQ2Bi-qwwf2nCEl13$FKXAST zXm>N<`AyX%ZB!KO`R)2McZGAb{^#lCJJwrMYGKh(40cCa#~yDM&KvRiU{-D3AV;(Jc^ zETGemLC@@0sXHHTrb6(|+5@-BP?fFC)z%oOKF1F}6eM5D-f;6b6x)8Nx_5)b?y8}7 z+#g8(%_Q~88k_VPxou;~?SGW);tAyb+OKY-0V*+*M4ELJ>DO8G)xUyiRfT2*gU$-D zb~_K-n4=Sl9WTZN?_q)!@Q*0aVH}2(dwPoLn#(hxAe90I)6V9Mc@Z>aPj_&sI zz&H=RiX$pKS+O)$alW(ih#{bZ|J11W_Ymc(3zcIpDfd1F9yXt;dPmTWrQnESLa8PT zc@qhx+bT3E2$`68!A6uChFTMn0W-cy$9q}L(=;HuzKQ*)cnh% zZB7CHTNM4vDg|`6-1n}U^Z~|MSk5sCb;pcb8d$fk-&xD4ABjmwp*(*Q>8Q~pLz;-h zdPS;+h}ex*KIBvze2H}WCND}K_3(q0%p=OUoOX^nfvz<}8mOmkb@DIX-alE*{>hW4 zxbEklW;SSGE!8UNL<@(CtZF8*D9p;h9x4~sitU|W?V6qHZmmylj?wTPyD!$iwdjOo zUfX4(pL^%J+VBh_X)jrK%V?44{Seuzy61|zbw^kmxzDxnJ*^u(UEJ$G$v2=r%h;jd z8>M0TmvOu+|M7UX*7Y;r%6oMARMLbR7JCY-Bs*etRDQLme_0t>R5eY1(KETBtyTgz z3qjk|P^>=*+A%@2&;*sS40$v~rTA--8=s6utYEYo42&+PNKr|!;l9v_%t}4C5N0ei zR3f#P_clso{@IWetrr=Y8)9WcW6{aQR4$cbT{Yk6LhG=vZ+fEfC5XxnB-GhOXqyt0 zu`h5vN>Jn4AB+!lvE-`PR(e9nScawVV5P_1tXBR;nr47X@FrmLE~2%iiC#}sY&s>n zppCWDhq0Z%UuE@NXxW#*sr$sO-w1Wxr>I&}Y(jFQ-P=NY41#vap}18Rbg&@N=1WB9 z`Y_ji&(z^1@%|(8Cv`s6f6R_ZnA!IYtr=&Wij5qn_FKZ7&A^6A&}yYswmJ#&qU!<6aVzD zYW^8Fn%vyw91I@=ZS;k7{%Whu8iJ4X60W{SrPnG#)1stz>yl18PckTqD6k;ep}EPX zeFd7-pUCf->XMhDt=^G7nGgL?pQy|R;?C*7170h=YABd|*-F2T>Wdsk_T+Hr;nYM; z=MsY26BVAKw6Pwc-f)#0tA!S(1NQv%(TI3B4bJ(=v|?m$9b&CnfOYD1ma>f*JB{-whjEtgBJ;E{Q)myC zG(qe(%11II&hg!9BqqADm~)kV6g}e~@0zz>IeE>X%yzhQud%)h6fTidIZrg<`(vPJ zPheCwU`<{@p`}E@b$}-uL>_HWG%gD_zBW^a`pgT9v+0w?(6^~#isvC}wuAX#(Wz6D z&rlSYPl&jwTKSdBH`~D3UclJ8n;>OQK}vrj?4AK^I|mxNpXqrSV_xJXo_`pWDFf)r zBE^*kYGP(EO`B?*i8m7aCzSH?!M5aP97NQz3=pvywDu-x;6Tu@V8YA*rHrja<9e%J z%&ihThHRy&B%d-tD=oEXJN%DUS!A{A7Rbum(E0ZjT{A;JUs1gl0}O2mgpCC5tg!mv zsE6x_OXF zi*9T?4kvG7fA(&5WN%ReBP%D9`UXM6-vCDzL#d%?KT)YWq)Zn5twlO&}9r5l*8>@#B6V<=x6Q#rvJ)k19mwl*9CC4q^Ef;^Cc$dXF&VyJ%pG zkU9%hqdy5shd{gbSDpD@bGwRp8p!>-NGHs4vcEzdKBeF0DD1v9z?+yPn1 z*Z(7eCgoB8&X;iZb!HT9$q2kBl=)4!t?B~4V@B?1`o zi)$JM`CPBH;m`=s>!+}NTN(-O&)$qN@D|=wX?zWma;w@wKf>Nlp|bk0$iv4#+-=}+ zMxy2Gz+=yWhOHHD&{1f0Sutqol z)98!zKAijP((TgB|Mmo}C@nNBJJGaIqSXz9%*ql$v|Jq7*^6Z8OSN~Vi*0?%dS?fy zBt90ou*pjI&tgY37n@jC?372aC96WJJRw;X21%L*L|t&Oqq-mQ(+C@fSq%Q$L+Nf- zPxe;3Ige_oP_gvU+MD5?U7F34{V7G(Wpt!-AP9BRFm9A1%Cy_y$qu8MMAmD?mb$Q4 zpjYJ1^f=o*m+T1|+U2D*&lge?UmG?#~W-n3AbxM)rn&^b0qHVegt)42{JB!HR zK}KJ8acST`4zD^yCiJp$t%Jh#M~XRES9twXnD$K_j{43|%_CeCaQ!x<4cjjL#P%94 zlDh?@?oLOuR3J3U?I3V#Gti|e8QONptgmWN5?BSS*@B-$wSkNMi$fs z+LVS~*aGy=FZiXZ==kF-XMO>COa;OlK_{0G6q>>`wy~IJOF%o4lv37K3403Ne46dF zT^8|0Jo&3WdHtG*Oo)V(>&?9MfSO#lR1(`;I@%q0(2X!?8T0YK*f-}EnV6gGzN`bc z;5?W;dlf(L^l)ek%j?n5s8B04enpHs zmB@de?L?V6sx} z#*EEF3~lc2nI+p|`sU-|35Q1~n@LU8>2=xv_3CIRuyYdW`Z=U8W|D1r6;x;~Pjy%foy_k}I_B*Ff6$uqNOAra2VMFKXJ%s$+ZJ0r*fBY1 z(v5E^XEpVI{PV8+-<8}Zu=%};6!DrRrJJVwT0L zQZ}&Ql76j}i9X+-%AYS6b8Y)Kz>t$Fy@$a|{EoDBb70^C=d`o8+J=g;OGSsB5mX2vyz4h^ z&c51{BJ-UgJst)D0^wn$Rkst{#r}T!zCxf2{~=l&dyV@ zN#0o1ZFK}wnk)MDAUU4MdMuH#{v^qfnW`r`kgo3nJ@-X5Lo3jH@pMfGkuf{0oZBwa z>lta#DkCS4`t;2*AG_I@6QkJZe&VI6fYa%#H1_=tU0F}*c~hYp(ZWUZlSDsbDbkB= zTx-aES7lEME2BnR-M>!l%5SPrP^iZgAH$UGH1V)}?9S^-K?|xGUzbkCxwV1t?6BJY zS*?Av#(I=n?3ATKwP40|fGO5>F(?YEL06=m@24MN{Arh$%9({=3js&9fSyyl?zE5@H{8r(x$ z)cv&DIx%&uGbPmXbxdj9;Ui$`UvzZszpUq9kWLq+o5LXe|A4(WgS@N{U_bq+-j}gr zSG`tSGEsH)k19vzi4II9x?rBw=tfp9uO_LT!B2sQse}4P2c})2Am)uT(MNwMwOQsy$YT&hmj`qa40i&(AFahJKtuG;I*L z%~m*ZUCCXOOujWQ)wd^&b>=Qsnv>V(b%rAew+s$N0lRi6)h@x>wPF9*KRY+B^xb^Z zpj?3rVxODYal-He9 zI&nZzF@<@lBu^F_=V9_nJMYS%O;U9g$dBgoF>(+Gq)vA!0ksY+FCQ#%JknjnZ zpH-;-d@*Ns2F&t_Lg5=gH`*8kAM;V$-7bx*PP}6&=+I9>8}9?NS{WU(z|nI*17CAP zVsnbDxB+cCh_q3Z>eQDiX%fWdnxo#_JP6~ogY}DlZ|$n3r$P}a;;F^ zJ(~2w1ZestDupsw9n#O!r$ep&T0~KHFjMt3hFbpM=T3Wl2#I!h+(^Ql`HG2sR6FJq zoBD;??ET43ZUjX;(Zy|{zZYTe!Y=k!cZA*5TI`+KDvQgA-5;ttv#oV;001BWNkl(#&r&TO3B=15>dK+Ob3=gCa+iT%3AByJ!S(Rmh|!I`9K3?VdGfGxD&BGb31zonD>eze6(2K-9xW!e@(!_ykF8d3W;HCAMc(a7 z2lf*3wPZ;s1_^7Ra{8L!_$9SHmLU+liUPZfiQT*wax1G!{0j9dwpQEis><5FB6Y`D z$#+k%Dw;9yc{=yqfpjU?4sm>+va2~CuskqQsDD%8k1vGRyi@w+N25FMk^K3+%AK9+ z4P7Ai(m3mlAE4gMGUB;^sa@PdWWjuqNk^cKc9KqAWpG~|xZ8mJ#ck@s`;NkS70MAUc__$DTr-9W2v8rv`GM_5qaB?4?HtcO|mwv3?8^U)7 zAd^EN^=GKOKE#sq2utbSWHVGDE#+gabyy{9f_gKrSTBCKcEm<1;+4@`!%;_UCLPV8EB-ZW4r)p+5_CzOvjFlJ+->pooQcYhkk z&eA31Jg*`g?+Ud(AZXk}XvK2n&X+A`|KPcudk1`t;*__i_jx-CvW@+qJmz=fPdnb9 zD$=^agI*h_@jhT@476r2A>BM^yFY;;bwKTAgQr$fZn;35ieGK4pp=Er{QXo zqG0>3g-rY&$T3lMa&MMO$6ZYyM>PASVrD$hpd9e#AW(0##o`Pi=gwPn{LX4KfaVy- znR(qfc@H{Vu!0ZYzBtVJg zrFy@8g7;ftu^p2j>2d@8Vt|a(NLw9eTnROp+{8tuH>6G0kz7iKH!?}R-=fu9E?n&ReiFF5 zLcD2P#Y11~^;s$QuAD-FQp?EGo3O1t zv1K-?-B=Sg_NLmlPhop^6-@|My4!co+|~V>)gL-8*eyLD=-o+lXoS_$*+n*G68mhw z%I+g1C(^QByalZ~K_!h^Z}WHRCD#yp`jp6$HflS}6Dbj;Iu1%VvjdyU5{Ab*Soy`E z+aN>J*E5&yKs>Vx>x?C^t3p-gP8Kat+mp~(t69r<$kD=L;uA|liwV7OVUi~rC;o|X zcC{swW`n^?*I-N&LjAF-x1XsTN=33ck#*(^QvYhgrC5@_gCT!URj+jh>$Tq~UU*yU zjU<&!&7g7;^q~>V;kj^n4pr0nk@DUh#Kp(BG}7~N>P-%x_`sCE7W4j(guSyBl_!W! zJf%`KRyD;-i`Zk9#-m}=vf(`PMDSE z>xGRj!jc?cuOG?TUO^~*W6y@i63X5u$}^RDK@K>zW|OukPZIe6v~__}&ZPzy*C?GX zt#0000pIhUpM58qnE#4*c68N1vHi;fdn!O<)~co`1sR@=G$etz;atf>7uq)03j$o-t}JU+^f$6Y)MxVZHtky#KbCv7KON9U~dNMx|Q~ zrP?`En+%35`JTCb35T06Bomh2!=v0bP<6B`b!KyNx-LY8YB8};AapHA+;T4SruLx7dBo+eC?DW=HVqb#R$rt# zq&9G(l4$u|A{BFyMCF7o+5%jw$NFv^c+v?n(KU>-Iojb8HC?TD+-Te+c!f8rJRB~l z(vRs@KB6W+5aO?biuNaTk7mwW4ahc2>G)~UdmBBi(lVKbycYL%K}NBzWFMcmTz-tD zJ?%t$>~)fVZ;!yhv4n&-z~~x4m+OSHD`6&FH_o;*j{DEpnCOh2Y_UMej#K^&1lIZG{|+RozpZ=twlv*%-q^k0@>5 z8=$;9h?W&Kh<@epfj2};HmDrQqF6A^>eMNqBF_m8Myt+h2+f^K@k43F`ig1}_OQIZ zE!;EH4VR2^oZJ)0$uh>G=+1!cp2K({+1L(_5!>aq*zr$H^6DNYa5cZ$XFoxH>7aVN zpGtfcMZQH>Rj{j&B#v*a=9pA6oC4O4$oymtI%z z!hT4l7i@bzg8Vv^1M@E%Q@D(n`=hLxcbfTFH;ApNnK(c!HH2Xm=DxB;x20UfuJ@$VAVqLs;} zyF+?tHJo{Is_SwXEm&Fg)>NQsUZEcwD4&1yjq8jc_vOJ9UgN#2?Ov;FsjRwkz18ad ztfbv+Z27{BTk&N6*M|6~SJvGBgZR-Mq8xXbi=VZWVFUQk2G$~BgxXgHd+!UEX=Hgs zb4MPW1~NZX%~V?X<^aL&+)D9RRf~=gy?0T$$#jFC`WjrB&Uz_HDPN3dD#wYuh$7ij zm~iQP(9_a{jE9*{Zc=Wt5ga`O@}zPy{asOIMV4>cWsYK8xJ$WjGOorOXWf3{9mACS zEdoju0rpe@R;*Xt-7GqE4|G-*mFD5lr16AmA{2+}g$ zh_=;)`SYOo%S9ynLQXmMR!Ir0&aZ(-oi%y;5wcVE8{2K7N`Z;cs5t2A2h5G$8ritT zrGL-(q}EwSu5P42;vPkfY>Mm8h{kpS;--SCwjf-JChAZTv^$z;);!{~%|KPgfyTZE z9gnq?y$rdfU%<`Znh_KYTpVdJ{7=v3OtfFu=H@T8OK5Vos_>4Fg#KQbY3p)w?ye?Z z(Rpsr!o$H%%?ZGf2OfsCSG)PJN=!+}-26l}rV$OV&onR_=>9fA&FPHNtpobw2gQ?C zFoTzoc5GlI+k2v+KRV8%qH3~D7VbWuO++E$X8GAn{go+x0?~IB1#3#F=2#|rdknC! z7tyCiO6^L3de$U*`;vIj8<+zT%pJBM#X=8qNLYg@4{xEf_C90dNF?eEC%b^vS&J7jX zo*ndk1BNQLf^~re0;a`(MTsy(nf# zH#G$(CDYS3!cB6yI^a7(g=XL*VIE)Fro6YAyyr8SPe(ZJ!B^~`wF1t7Ojf?@ z0Y)8Q)Fqtq^dxN-$B+VR9TJ*-+Zr3enbVIcAac z<2SS|LVS6uA2aup-rWP_>LRo!-lJSmpb>kG{o^a?#uwniVMgDcvt0E7^PbBFC+>%>CUnvn{uVOL|e02%~xNf z>!#lfqDCFcCJ@uGv+><43CL7uVC}yFnE6fVB;A<^X^vKH?+RN zSxt(eCCLujqTayO@Q!tJyGFT62FeaQuqF6in`6 z& zo9+6GWczd`gj_eKcd*Kwt12)0sE&OJ-_St;vuu3iZ z+M~Zf+$pf5yNG=jFS2AT$;4ssKIbQi-2glLqXcqR6#Hn8$e1o-JH1hxyPRs4r;5L$ z$n?nPIyKv;_4%)+@K38nPKmE#PUKUQWrFgW5H;m}Vs0i`_D>e99S6JpD|twU#P4I> zG*xv@Kh{edpj%r)($rJi0@hxrD)K&_Wb#pxV>Q?g843L}k|<*fm@UuL94$)x^@Tyk zp}^p4z(29Vr@jeg{S|y^i8}pjGEbesl%X7H>y?l~qpf@jRr!40v3swOJtb^yB*csX zjY)={T4*t5r-eOgHFTXpY-*nt2xZ+>8G7sw)qA5IOh^fR*GcryN2?=tsP^0h^y$e| zbqhHCYr(xAtT>BB`@c~scHO0EmwZn9=Egjj2Lvrt?Kh0jvlG*+3rx4yJ2a!EqQFR{ z|I!KJS242-C{M2n1WyI_JQd8^DjHW)ba0ZO{Z*xJR}984c4_z~m#Z!}ymkQ5V+K{8 zBs`&$HJ1l?zVs)(6uXK^@bN70^>3r@Z^z)fJcD^u-XO~N*@rQ)jGB|hHr}M(x}NI! zMj^2Iq6RL_7Vl)T_2Pb2Z^o=iaTh05Emv)iwVOR?%4kBMq)Q8jxct*^24m718WU@< zYaiibLBYt`f)-_jN;Xqk)RxTYI5^$MiCcV~xTCt06I0Z0YK?QuitimtNOW;-pP|pS zKx5Jg1@>D$EtYAkP)KIwhxb6ahLGvBn7O@x>%LG=9(=B9L z^hqe)du5)b)cX!};4adHWh52LkkBmg`lf;$>qxq64C%o?7+-%=np#u2!OudOXA1`B zQqA>3b#PkJ0xylOy+wNdFm%jvwcj3+y?+Gu_`k3w19^Qb8E<(o>%Ib@hjn0b9CDn% z2*=I$mvI}$k|})(Tp)we+hEbL;TBilSQ!^4`uwv>NWAFLQX;>6775>^QZ^0j${f&E zyF?D0A{ugvDP_2tUw#pUz6U=31ElB)_zr+;ly}?~YaL(ZD(n`Y>q>(OB#pYOmg_89 zB3WqGQ&YR9okM2dDwuK2ls{DhHcteZbBukKG~^$ni-wLEy)&d%jqjVNwAv=Jm(;sC zSMBFwVsH6WPOnq1Ct&Z8cw=^}ob3zS=^*U#9xSgWs7{)q(jv%8(sq#(S%F5A;oO_g zzT%q9R#aNw8P7-GdMM&a@b?yhf36~BD%Gavm9C7klj-G|o=nN_GNF;3!l?e~Tt|Ey45H!z3(nHHg#+Ea(u&tqK)!3=<4(|Ga z>K5t`r|neY>%~Bu%Ygcf^-R4KL?f>OH5)5EJxf|EJtQJQrNC>Ey46(Hr(oOXp<^=y zSQF9`mgNSHjZ}SJ#;Ws!U|2nmT5W;eoa46{t{I*7k!02qXp0!5IpauT&x$l!DoENP zIQWog+B4Qp6;#Icw4#kg7uB|UeJRnMbv`Qh(NCMMl7>1WA>WhyvVpLrtwF!RL`|nK zP69H!3baTG#k4Mh!_;@LkGS9Y#FsIHqcQpX-mx_7CF~I|%?9iJ zn@a+%_aOPwFeGOkt$|UG)T?+$ZT|LE%I+E^-UKK%DPwMC$84MI@cr~I?@MBwo^SNz zIHQx&K>lhf5));0WxQg^L*lR?@Qij!Wl{>{xZv_!MT#e`zIx+og^MiNHn`HUvV%qm zK&x?+W*_e;Sg$I2Cl)SpD&mRLyP9td2orZ!;%WZoEKGoLXuvmay2RM7L`iUD^7 z@hL=44^UkhP#qV{vTuUHi8X}!Jylm9gH{VC(IJrNS}M*3k~NPVIk(1GP28EA;oM%tZbG~X{%3|S#pn(uXn1G!O?$5HmjssF zeW7D+DJ36MUJ+~RRA2i)VC4eA%1t8g-$N1(LONcBb-x;oY+-cnhPpK-{;0_IUQl7F z)ksI|$E)fMs;}P9-CR{8U>YUm`=`2&ek9aD_z1)b2JP;A^P7*osY?K)PUCqbKbaiv#(V}Fc>WUWA&D?liZ)0yKISY&NTQSr@Vcn?ceZhtx=fCi$Tgh5+HQ3eP9hH@o1wT}sEtu~+GP z^X;bz8rV?Z26mjVfm~ZPFk(KE4>d*LX+L;D58$nP3mxSE&&D!V9w8Gy#4%Ij9Dd@m zR0^%6txf`~SMQ|ftHsd=nY^H)Nr|54P= zt=j3iXxd8kD=!*lB}J5@e+6y+v-+%;X!3U|ZQChob}`hWgM$?vfQ*w>yZcphhe7AJ06yLTMXm>(Kj0$G z3`47qkd|CZ+G(jHKlX9$$yr7g#i(81Rc+%`qRkds8+y#z>$Al+daO3CxagYiJeiSG z?D=A1=WkTocn|Et%tiwr9W%4M>uM**xs(acno;Uj>!bcW5tPC?>85H|%}qIJ8V6l( ztj?BiFwYN*JF=&^Pa1-54+rLKgHAYPYSobQBtsKLD}Gdc-dt=@Pw^ra8N21Aqfcf! zm|dUnm&!ymqLF)T+zM9+pl?GM-+C>_Cf72(O>$+N_F0}Vs3v+mbK4E)idE1AwyNGT(UB2wAIB+RNFUo^zS*Y z*v@Q2x{~zmL{jLb%EariA-C20a-8JMK-hjyA?Z`AWSNyjvTh>e-`pgNdO*`%fYfL!(tV&`E>Y3qy00I*K7~$?U#^q|B^;5fCPPkl;{eHEChLGN$hJ# z{b8!5t66$DOS$+IW$h1X8i~NSbT*J?o|T-%Ja6F^1U9^<Miqu)}TBa6>d@BVpXDT z)0q=e!(>=Urpz&)!+8Qu4Z$ z&fzK}Yl`i(+q2ChM3N?nO`TaK`WU0?d)M?I>UZ)TbA6#b$^88vaofz`WuwSUSnW8u zD!cC9y6pV+QcRz{N+UNa|GNfwRZY$Ml-7N4)S4+Zl%r>xDvj>UfHs(+_HHF>*Uz>x z;wxnPbR!)n`LQ?Fp@tDejTR|(SMuc5ZmYe9Tja~8c*aBn?h&V{%kuRgGzQ=vk z?;pj!J(Y}abZW;P_t7{Lsym&_fQ-+W&{$b+S$ZkJZJMojXU(#8u`N!f!BHQa@*#5Ja z&S+PVAH?pdi4`MZeML1fTal~Sun>P&I;NLEKHjx!Q-g(dy3DjV;K z?KI2UDZg52*h5ry106>*j_);C`VNvZz_wmLvO~JU&JR`_JyLDA|B+W>9N8kJAz>{< zsvHH%`IJLPuoGFGd3kl_cSQ^hzQI6hMfXY2tbafjr6w{KRm?mOL*x9^@%Y--@?dWwFaDVZNO_60mJU76dp_3KaYWbpu?X=IQ%7+OtX=2 z;`%F3e4$9rs1h+nZHvFfj?OQ3`*P@l{fsTo45dgUW=|1W$^fMS<+Kv zSRK(X2UYEKlDR{S6r2RT{F3azA!^5WQrr3;v5_y--d?ME=n@pJ>V=tX%@vZK*+mNG z^`vj4$bh2iEw~78#1JD*92XLhfE&A27#U6+>o?~TJdcyA=eP-ruzpu{)zwg!( z;=wHd=P|T(I@a<%nPy}(_&U>|<7I>ITPW`Kv*`R)HSH2;+y11Lsw+kPZJo*QJX3b8 zsodn>FwZnttoSpnQ0?V{=Gzth?>YMHmmqkJ9ZY%-ozdTu-NjVWytKNdxzLa?WI}SW zd;J@m$zvVoQ!ttKUEz$$2h;f#98Y6Lc5Yv@Y{xu0001BWNkl#+Nlhzyh?>JHY zW+K1TwcdzHp8haXr0immJtIg@M6(vkat0Al2%7);hCYJnCcgzf&v}OJ2{}>eY=9uli47>oixncu{oWWX8qJOijXABVIt$ zjE0^r#x~-y%7@evDpQRIg1Aa_YkcGuizcWEhh4~~MiKk}SO@p{$4vuypI+{5GfxJYb*m1$i? zPwf?N#C*@r-7J!3sMX;`h_mf?{qM2{1veV!5B8;E(;`23P9LGYg-APhAdE<4t=QUV zWIsojw_q8&L}lbeD~BVkjE{m{w#L|=iy$QiLMQbV?i%8#E(jO%(|s=}VWOBDSv3%T zAIZaOIJ&kgyydINtJxWNm5UHP5`4Zno0a=v2K>bw77AoL1zJ*oP`)y2=QU&pmoccH zPN~DS@v(LHLKdtCDn|foYN&UmvEqlSpz%iu**1b|eE@A-r6^Snh*~9jdxf>>3d4K< zz3QU%s&i^9niK`PUs2ls3e>#~c<*+?$ZO0?x~X~nQcdeHOV`_5n{d&1GnzXZ^DF6~ z@0iZaWE{;*+W0CXa*$BtEO1VB`O1HUeWT1*{ol$zhFzG0?BY7W{i)DV5vs+{idJ0< z?OBTOW)gJ8K2TDAU`l47|6}I7$Jul$2HaVtc=^;y%v-hZeuY=HjY_#5go!(dA8d8_ z_wK6qmy&j0s|e3walE`zd|&45T}bc#rJOb$@m~Yk#I$#u`sLNxcY&OfYdmxQ7V+SV z$`vkv^9@x#IattOljZAu5O|+ksoYwkgZ~4T<%G_zOJ2*#YO73!44MYryb~BQk8tn~ z@sI0`sk1@M^s+FCKPa7T1b(zrWd2yyMQ0eLL)mQm4dz*>;z@1jwGE=(vX2__@`~E4 zn;HEh9AE#RB=}*71oge(IlF#U+V)&g@tpNmM>$?{C8Ki}fdBekc+NCIxdpJD8bki~ z_^b0zf2G3_{I%y3^+IPrvbQDut%1^+GK5}T4X;1wqpTNP+BBQ=>?E}}52$zJC~*6l z;@1hPIZlh-n4t1k1t2CHQ`8dXb?KS276J7=1Jv#GjZfA3*MGBe`oP0SWJ4OT6mQ6s zemwD-9iYdEvM_wO!5nM`K9pQ6y{b2?|vLx?Y8z?hRTM%3S;4D!jjv>d_0T3)7Ll$^i|TEV$4$AQ>7#2Tygh zLPtT4C!!rrt9=j;jm)kRI!@7l8MycnHnVcNZrR2Zlp%{RD9?P?*;|(B@?XG`x~iw@ zEA44$xlKcO#Ws+AlNMU5DARxe#6veQ<)1~g_&IU0A5_nt7JdFZqx({Dw!uUf>Y8e` zV(+P547KpJ6WqA$QIc!1>l(@WxxoSY;&|aRRkHa7vyOu91{>$crR3|i4!--5>Lx6Q zS=XDj-2&D&(|{Zwnfiwiw{SoWM-yi4U~Sh05*~nlj8cqjCK?i{_?k+=MTL5W5q!l- zZ&qi7ej^*ThP^%w;O%NYH-R$mng;fW|CssPW6u|pl(!znl=%{ zZ}x+qg)vPj&L}-rbyybBH75m&+XyZmhCcO}yvM{P{$QtdD|WxWAqsCSH1>PJun%H; zX0_6Dx!5)*RZiAYd!v`yoi)_%bJXt2tTrYM)VwzoUD4sveGLa60e-p$t-eO(6Nx09 zfy8zOPTeJHm!CNH9n+ex{UnrsvOU zMhx&wEw_y(YGNaM-w5ratkJw z73$H}FR%I;JL)%8?~Ll!ysFLwl~JcjrYFMtt^~YCv(-EMv)Z(aL~5^uoiGY==n`r9 z^CS(oLDpqe?HOh+H#t$|-uo<-hk4vM+)R`C09bxgrZ1TdD3- zDf}Ju?INPM$A)?qGUV?>s5g)Fd4y=#Y|#s|SkruQsANahR+FJoB~*^PBy%=6x;!s= zSDvWdTT7+mKWbCA6|cz^*x}1nvB}Dy->iHmR#UtNIt&MAOKsfIapcPp=J?w^aeOJZ zIy~Y&X@OE?2hV0H`vlrO_y3V_-;X(-Zy$iq^Sti+c@m?wO3hNcsJ-{zBlgxRpa&Joyzd|=3W6cX=`#yEOm~X_3 z9;=Ges%O;NtO4X@e#!RRU}LimWczp$X>-@qsGEFL^};#D$OM=-M8C3@9Nxn`v076Uz=0HxGn%Dr6G_BWsf=0HDPf!!Po zo3wzm#Rx+=BOLzaxWoTUB{cc~ojRB>z69u>;*f!B*(q_Eo#hqT`RHf&Nq2Vcmt#}* zJ8>o@if_zOXcPXsQ@*F z8SiQnQX_z>%a!B5sH_WznP!+<$CC_>hOb9H^-qaWU#11{4ek$L{9^bL9dXyR7w2tN z=C)_RnKmdFKk8v+D~lP8{ro99y_0UEV;*FKWRFp4aZkj$rp=IHO1g|U zKDz0rmLlKX_SRV|5DZfp*_7nyDmZDrr1~4hrTBjDMI3mSyaj9EO-Y5u%_KD3Xt?DB zGWVk3TQ?Pf)AAzVa1Qvlk3qnS)#Oh&D^ACPK3cq8u%wgfmdX~lJ}LG;R@#*VX51)t zYpy5%<@e-2H46b7M#DEbip_!ZjOaN+t*fx^7zA8M1O*HgMBnh)%2Pn`Bf!&!TgrDI z6wsA0>?82+2hs_vV0WB>{agTAKOO1&JdAH&5nkS5UGNj>f_|j)PXe*8m2>nqZ|7G1eX?3NU=ul|HBKMScDf{}Ww0lb09V((;yEm2wN z@(eY#cEC)y2{WU&xGkQGQ+F^+lNus*{$vzOW^eTz@#Yp3UAbJe>|cyYw}C!$E%Lv& zm{*JKFH^)jFxT-qwG*2q5A2a%YOlBTH2f#hkFShQ=csk7hJD&I3IwP(FMi0NY3|KDl%_cC7`1{z%_b4Bk z4-Nj=*c_!;yNxlZb_kklh_x4j2{ZGFee%rU@5zi7N3GttWYOezXxBH2r4>~6R#10F zVe9PL;d#TV!_?bKsZ|=m8-EG>d>h$WmxM09HN5nugTJ~^YPTE8T_&=$X+YfbHJO7g zV1DdCl0BKFdCw$J;iHO<->LSS z!uCxiM$PWb0|pb7&qQ4G3}{Ms#r8&wGTDf(zhfyfm$_aJlF{{5g32@YH)pz03OuB= z;=yLGhj`comVCz?vvQn~_Dz|dycQbP#5hNi z;UvCd|L`1cV4iF=d*o|;LHT<5yz{kbA?Rd7nreNAZTYLN>5PkROu*8E9Sp%n4nA>g}LADNPfl%d0^{BOzD%z_CKK| z#`GHo>OK`TrL3wO3q5+>>YU|@92Y^!y_hR!5PX`+=)M&wnbX2Qk32ucz63f9v)wFW#tmoA2s_q|&7Ev%3?H&0%ZfP8T%e+4 z;CGxZq6($SHy!>JXW4CeTigxJ*eU;zO|I?C;cbm{jbT}_f{b^9q<1covC9lE4R&PU z9*6fW5lrvN2yuYH*O;1*W{N0GNGc1RQxbOhVA%fW6oaoS&UPmH?h{k-Lxkp`OkY+I zkKahLsSBGHo5=}@WYcE5mc_iY%9CcE zcd3z0{k6M#x0b`ctx2A*9odiD$R>>g)^wfSb=kBE9YWN)3;U__U2oQP& z!dvzi?7T>5`mL%{Z>p{Tx3yzlu-zZ&*jX2a?yn|^UI6(yjhNoCBpJ3qhDU&>4rN;O z9(1=is7iV=yI!$7>XYNkwBAYcewd`4Ggi}gsP#3&t8JgZnX{C2)pzF8-~BlC@_T~U znP|**3EnJ`dO*3LSNWQ1L9|*(aftrXnVmWpPI1BwhA7 z9b;T+GhDdpD{vd~=;mk34a+Eg`c7%dAf}v6g@+Xq%JH6Xy_euaGt#gy*h48mFqA6bkR;6vz5!H>~_5)kxiP;QkRr zWj&x-7t&e1N&VGG&!<9nje@uPJlX#S7^FLGxX*IKDHj|%X^9SQx8z1zoXMsL3sb(m z#8B>9f`~JYmOCbTIa>K*TIB`xm2=Kv3J)}T`-a%1Nu(vZIQ%uSzmaPh)j8iwWNHyH z9d1F&S7BP#$4H$6UjquBOW~_6eP5R*vK?EN=#Mz2MUR;J%oJXqOJx2e$c{eBbNX8} zoyyqU0XnDzasP^-W`B^bzRP&mpE!Ip$-WX|RwpP94Hpb8OH?3}($h19HXVhU#1o&H zDU!7k@!3vl*W_iJrITplK%(2rna4y5HL5LAu9V22d%}krimCmKq(EI9{2#}^!!Juart@HRO2vZvZ4euC zhU~=UYS;Bv+ol~*HzU*i3rx3Wi}alc=~$0=+HI04!y(l!!2G*CY(;_Xl(O(&OQ-sH z{Np~)y)<3FhE(>a?%Zo^i(^E?{!kjY0+^Nyct1!{GMl9A$+|6j)Ttl$xc)YM!@vhX3}!e5M~N0{17VY-%`DRCxA`Me_8 za*LT2M&`sraZdMvoWCX1>n1SqZ`I{PRZj#f%Fj@$eoalSl91~Ih@K4~{dXYn%SO_o zhoS3!BUF1K{Hn4e*;bOqPi1Fa&G9qu{5)|~bA>&V6+9_7X#W<)3xzb7O#FvEnca_Tp69(2MDpiDO@n&%LxkS4c6W`v&bZxxo)Z7m4y)rbQ zr{Tj5pda!Gwad$#w*vEpv*5k+Q=P&;8LBwf@SoTGsd3*JTzJczYcbQVoYod9oYMK2lL*#Ecc5G?Wihp zdyh!&D~|c&`&5&qvN}i3r}DNFU!4O}{91W4D6SRB{Ai}+8;*?pQ>5r+$m3ivz4ntd zXw1C+AE7gES(;CV=~x%;p80TkkA{=~4V%M1GtKW$)UYd4nX1;d+DN+TZ=-)cXR6eZ zC1$$HgXW$uav3`}qu_1+8L9J|BBfD?>vh;`c*HfBA+?mJ474~j%dwT_5(@tTiZ~2v zFpPE7a^OKY;o=iej}wGzuYmNEiO#<;G%1PbadU@$u3`E5Q&6Ef;NZGU;RA$Tmm_TL zq&n<6;l)4T4F`d_qX`u{5=OpcJUB~KbP`M9o8XagppzvS9iBt8-Y3m*knFN2z>?X} zsW*tKUUf{dLk=>2wqENIimqXhKk_IVbcfBGL-qbY&~Yt@k|S77j$}E0ROGKnG9z1( z$<{|u<)Ug*0it(xf%Tnl?C1N|P3SMs`9e)(!oc8y#a#EbN-Z)`SUVCx?0MVb?ZdTOx#b z&Hsp2heE$OrM7Y|)w~T9Q{M<~o@J>yL3rtArWM5rSN2zVEl%pk9gNsRj+0tw5^&-N#fQCcn&-8s-qB#)amI@y zE_WD6T0iKk#+4MBRnn(>=EGL%M)Y_tQI=B7$q$5oo==qWf-p3{n6tx)!a|95)FO`k z1N>JobbTAe#KEo|@SLULP{_Q?%D)yQ{%tICor26;3y|r%nB>@BL`xqMRW1u!{D(@& zT$L$vM5eYEzA}-$tFc5qcQRFLCGtME$fPkW@2WVaSbnmz9$2T)|W433AqSV-tSQ7CMvF$doeA1FcmVuDiWYUt2Bz?5k~ zmfDKjw-o1V!v3<8dB+Plm^w)0Ys}qS%wJ|#N1XK19 z)trZg#(xA~y2EmyH&e$Cgjo{>Yg>YImjES{76 zk#TYH%59%3Xa3vLju)W5O;y)~K^L?ks(0L>sA&#e?L}JUHY8*?IH&Q%o7xh^)KmVMHdu>%A8HFF^Z!WE>zU8bnUDm@cH7Yl%LOd|{`Aatm)@U{j-)lZPNOoXl) zPFS;yc++*3bD_k`-+_Y?fRm*a-A7q3cXp&k1+%wnmfEGGS%>#!ZFZUH+dqWY-DOm( zV5sC2*6owY=J<_~wh{E(oR-$)AnNlM==6E3JA;6!#TC7NB08}|5})jhonw<#WuqLAaN$Jq*cVsqx0%k z4WGc&JYK}y5q5?Vn|R_^Jyd$df%5+is?wKrX*to^p~hB;A>AHok#iqV>68UJDea3f z+%G3f?MNRFj&OKyMWTqq%CExJG&lzHYLzu+0J!-f;JT_!(-GdTO5~kx0$cJR)9srC z>C7CNMEtt4kr9!u=^H2VzxCo&YGb%qexWTfELo?p)AIuRrVL@LikzrTnXRG(zT5|u^^ReaS_ zdCLcnUv3qR+UobNPGcNt4@AZj$z&t#Cy2-eqBdhKja&`dKMK^SCvwL!aYGs=!+x;{{NbCA%=Iz$mIK>v#e{yw8RZU*!Wi5L2S zu_b{~zYyc=xf=ELN2aZ{fqgNSa_{x%T7FAQ-Wud->8HgVT|WI?03wG9?!>{){TbHn zNH%k4*kV7ET|Yw+1Yl!E;u$eyc3ow2tvWmZYft7`I`E@&O8vK6deOn+*E_27>riUb zxoR_HgO(f&{%^ZVy9bb|>kPEHP{=9QebYZMFnz(mz`S`~Gx|rt$1J3;Izg|GR*br# zx;oX<)B8N#AD@DQty6XNTGdnSL`3yTFaQ7`07*naRR7o3PwzkY&HU*OKW<5yYn6Kc z`PCLkR9oko+VxS^4!cC&>?5o@J2T*i#4(xGRaq`2uzWo(&argjzGe2g7XBHH)wg>d zTz8Sd<*!G<60Yg>$zSI}OP(zYlh0XEQMqW!j@4@%Ite>8di9l?(2Tmh$F0fSWWjJY@(OoCRZk?mr`!?+3 z8JrrNWK!Q9WZlr2C@832l^yArD^FxI@;viT-GnPe6NNkm-RK1xGE50!N`rR*b7vWg zfyN8{jqUp#YFCX?lz`%gZp*`e$N^9Lg zv#e9mvofHNa=!w=%yEpb*;!}AF*jYow5bO3#m0u}tur|LNw8p&LDyuaLAwolk9Xwz z?vCrE5jV6HJA-$Tvnvmb2w2~M7Ip`|zXH9`P&IrA>3AU;otF4geaOKPZ03bJ=KXkM z+P4!~P?sceHc`Rupfbj{fTk% zPom_a(C(w4zx)I=DGmF$9owpH*yf+j_GDV4b;AjR{v{+&R(kkB;os(QuC$O>>l`z2 zj^7+A=$gV;9CkB_4NC{F(PQ;SZDDJE1_kY7q`m@mh#(Ga&vNk>Hm_YaAuUJ-6(If` zWl?vxg)N}ED!Zq7YkD@J73`8ZWOMsOCvIXoSCZsPCUyFMAZ{?pZ{}VP@V6Kn;5%2@ z@Sn}t&WL4iK9QX|2)0~p^_o=myx{|^J<-ea26gl7`oXC>yNRNFsDrJ42FjH^J|0_y zZTw5Jc~7dww^G}wzS{artsUW0FH7wvHRp~lop z$4WIY|ZCyJU9Pa>weRi&F5&>Sy4}XHS)usv$eWmU146YCf;?BDS031*jLa(T~()@ zR`gFLsyCR-oK@`j-iW`$aL3=Qlj}P(+AnEl8;&bX^mDQjueRLot;(X&)`>5p?ug;+ zi%fwpJcaz*D~Nweq;WQlbJ5~&qmz~pemtir^pn~`Q!HYt0={I%p)W4g8R_z~#mqzJ zDu-ROCVGlSA#wG!#j^hEhGBpf~&rUrf%iYrwvuU0uF8fX=x!V_Ykk_z|=8G zFrhSQry$s;1FVg@Ms`uCNuBwf@t!0xZk`m{+=^vdH=_Rx^MVlI_gt*)^N@bq5qdAT zVox>2!C6WnOG!&6J2otg(CaD?RZFp86=>{m;iNc6=1w)zxv@~0*MbL)2|qj|4P45c z(1a!5|A>c_gIp+YO>n$tf*V_>JUkOolEv3oc*H7^JS#~?%w(?DobmlY(E`nlt$M*| z)4v4m;(hY4PJpxRig9OcCv$5Z$)jyVFEWBmXXQ0LE&dv>w55|`R6n9pPg#D;NAf_~ z^le8H(2nGnQXz!j zADFLCc(VlZ z?QUsg`E)}aHj_p!BrkgmTOCJU(igJ(6RcOch_%10wKmfl&+eRQZP!0NY<~s(^Q}Wu zHwBVyXKdAeY&V6g-8Tx}{Y~n{pSJeyHrNFxRp)MGEZ8ENuvf5f4{OC|&?e!eCv%Bb zUgg8`4hC)?(nx|vhax%-gw8Rr@fukOSH$;IO&WMO;-MU_# zQ@?}%Z4d6#Or>>eHEF7=vvRC;&qu2-eJ($DPjvX@ad5^Tt<)N4xnpf`=&zs-=b6Xk zRjL=JbhRkU#B$=gpTrmb9s3?9iaWQUnCHJb^0m1`O;?MZ-H0`0GZ1_ll&OfCxG8Y{ z*M^*3)!_D7CGPb3>?<*Y{9`Ag%;QtL>SSC_5ZV{@v1Xn3l-x0B&%`%KmPhhDoFdV@KkpGs91=G+HJ zt>(my5`_o&iQBzVTJx{+vF3`Y!`S=1k3VJNW5}C$ zM??M31g}a9x%HSPL<96lQMZcHzyzhsEmWSAw!XPD$hWr)2i(pez6gSE&|o-y4l1`u zN66XRv8^{b2pa1%cLw==WB&B{`cD+oKN&24fh*ksMJIyq?^E9J+4AaLmM?~@bh$|! zc3EhBHRkb=M3XasE~h0**N1h!iq_mp-qrDBOB{neUjjC9s%QV4Y%%nJQurN19UBF3 zu?XRNgTT{2fNJbxYP(es){^M-Zb+Rdbw+Q7YZt@)E(beJ8<4+EVe&UyM82YBjOnVuKt&c4t*MuaQcV<5lSq&4bTBf;(7FhN zAwyU@^(4A;L}}49(7+DFAy%YUcO%ae9OOCT*kR=uJF-CYbW#kO&FC=S;h|GS&fH>t zJCHaj2sFJqBh47blhUM@_NX0{XtiNg>;3oI(*cV;Tez-jNDhnNx&skI1xJ4q+WA&A zx+Cd#e?$N2ML2aS5Iz46(9R{rwhV=Ly&u^FjoEwqj_t}xBvT(hP@LVor~?k73!@D)zt51s$I4p_F8A)%{QvE6G;ocH#%>c z(cdz&-OvKIN;uinzl>dw*|qy`8~b`U*-D4u?J5uNe+(V^kSX^8L*Hi>Jnc#NH5+NR zaI)DFiGJKi)Fn;5dUbj;%^D7lNG6$8ieyr5NI;Cr;+AT@U!kU2W8$b;j;;6S$vD(k3wlQjHU^nw`!MS?Yby zJb#(UeM?SQ2DljxlT&J`I$cspdQW9Jw^O7&vFYlmnKaOv*q+SctyqgK22y@g1m5niYWMyKJ$|HC<-cdTe7}WoiOxW?SgV~*0>MuN zD{4BNu9)EgnTgg62RcLn{t||^d4k^?5tVmA9ov8obOoKsr*x+-QS0txdM*_Ad28cd zs80c*76DQ5HlW6K&;L)Dx(NpjMeGRR&DjE-=vjfjo9`S`=_qkx9q{~6MK=#LVTbCY z(LnNiMUyg$X+HwRHxTXX#C)*}qxTP>nJu7c29d2ZkF`h(_Ff$&yM76I3lmAp#sj5~ zD23DlwH*y<`Cgnd`+WRU1mmd(w$-*x7}buJ>kadh%eWHnehvpwq?i-c}DKI zx8jcOOm5~u>f3aZoJzY$ZZKpG!<=lRTydgM&{CrN!GuaFguVpgLg4xRfP)__jT6h4 z^N=*!>`>Fk4vmOsSyxQBSS?U{mt@xml3itl15U8~97A}tP`vgjPU_3*>@8?X=zM^r zRZo`Ye>hU72lI;cL`msXE6gVQB#d-HVbT_Dp)3DY%`wy3>XWS!;{)u4Y+{%FNA}acun8-AH>$dFJbPe368rxCc%e5IdTT7>@#8axC1 z@r>biT?jExln(Av&UM*xSVp2XeTClqF5Ed>OvD^<(pxd>7QtMbOwO8T;>r>?V8ALT z;Kn8n*b@$4(BJGUn3mlQ5#-)!q|T8>a2~|L)X4^^R+7!))557i%&Wpcn-5w(Gg&!j z4^aOKpqN|Aap{3CTR|^>6ny>J)h^AA)~%zO`@QP=rfS{Kq*I;~HjZK%JpvTdOL=ly zH61sZQjLe4bI`^yn7WrapG%TCxAApc<@gs};D8MyDWF<83MhGm(!2=J^lSEd-=+!s zl(Fk&4M4Ym&t6mWwRv~)!h=cc_ECExKQyd0ypOHP9$y68B`55>uB_3;9ZVYL(#HX! zC4W|JGFf#k5vZu4A}bw^JRE{_!{986vl8M89P&xCTXHEyCnxA$<0?wvE#*OJrvGqPP3rtxKfQpP& zERC@!7YTHD4+JGCB8RBf3A0GbrMj;Y>4IZoU({hO8U-CW4fwAbuwl5-P?Td!rlFo19`95nv3a?n}Aqh*8+(-j{!DeW1-*q(`Pct_xCH)xx^tY0<} zF7!}J7^G7C5lnCcGGl5QXW?4M1+pWAq|^JI;^j?^Q%~k2G+V? ztPSm_dTE0qY8`MWg3zVDAa5at7ejcFi?nDw+1VFGTV3_rrar&TGD^Jpy-8d4YFITf zA8f)D_AbpQn-mJW{$Gp1t1a#}Q?&J4ozoronwK#S9EnO=^r;q_r8S9H{NLVGOiZ=-FUtnuwf%$-(G`_ z*(K=z#9-A>Lz$DA4qpVW#}ehOEIC%4%I-gBR9VUB%)WFN04G_y)vAL9B0nTE|I#Ek^D z1VeYuR)in5)cq-R)M{YjKu}T(#p3I%3-|fZ=DFZSXK4Cp=+sTjGZIN^HDZ(L1IfY& zaDiDQANE6j8DUB_480}DozBJRxk3+bIVOKE*DQE$oJViSta;CJFPhE9*KC4j5%;WR zrQ(uQH^=ACX~*wPO)sxpt{=(v#u(`CSA^dZ2(j0Q2Tve+x*60VFVX7x%pB!Vv4#fY z0?A(64m&EF)tga*e(zmuTkBAX?L_Osq2DzCUYutt8)DEV)Ucaczg7f;vYfIMwnV9S zKj2FpMpn4c2bj;bBCmrDqM(Ab$EcxN+NuKC=iFjsUa1 zSUoxbRIIdW#{O#S?^D~Wvf8f4)!yC=8=aHTsVD2&XvQ~1fPJCR0V7ny8-N;bYo3aEz~mHMNKUU%n6~91+ZV9R4rKl{znY;%JVXSO-H?I3_G5kC*3B-CUN-F8 zOPqB&=;uB}Tp#E=o^0{yq-koB?KoCZcp2$~Tciu$!u~H*u_(9d?eb(B1d?rfiM8AU zLc>>#Pi??8*DEI^fV&i7S-RM8vu(m5KQehwSQ7GzY|BpaGBcSj|AF5&0)73WShP76 z$LEVJ+9bd$cF#van}rv*VGfx}__zeN^ANQZh1C0f$osFn*dr5IQ){W6`CRqRdQX>T zwp#FkqRtz|`F~U^ghJnMgN}+2J=B^sCL5GWKl&8ud`IG_D2zi_pcM0*`COs0IFJ= zcxGwvrqSS;-w+QjPqI84BzZGSisI zGXwdS6HhtraHc#)-aKZxv5}lzd*Evr1$SIIxY^QLcl=A3vBe$z=c_FuMI!_hXkgwv&fp9d=!*$qw}p!6s~=~-Ur-)mvZ zWkTw_DQbI_R&AI9jV`X*=MCA{U0@gg3vF3V=x$zz=XNvXKSFZp4{|#!V&9}VcC#%c z=kRAZX=akN&7|CWv~u|vQ@TOvZ-`f4^I_mZg9YI(Z7k*E(?Kk?nuBH+BhFHn5H}i{ zb%xs45$f%}2-{CA&Ftg(R=(H3wh0Kl8BhKm7vYbZPrlRd$d@LX+;D~a-8^-g?_jxk zS|m6|IJpJrOBTiQ*`!bZW$M`2hjv*Eb^6M5BnDjP6=-%1rZgQLT76k~<|?LpYZWVp zDmug}+P4C_jTc&R#oVEm`5G`H#P~#XkAa z{ykB*-&N~;QcPZ{+Nz7{s@m4Z4O6>kliD%wR8#juJwI#rzZgZX5Jq2xHt!7FnFfS@ zCf*fjOph#%vEh!Br=~cGBO#rllw-asy$vK@<*^K#CbHlVoX_J@-FxLy9GOMh^}0W` zd(!}~#$H2PMiVWFB1(5!H6|l$yR6V(H<8VIgKTtV(rRyGBKCBzUaMMu(k6YOWqPX) zpA0=QT{J^6)|J6R>EANHiY6rN2A$bVG}{suuM`b_#VA$G(Coj2pNwMu?hmEVuF%H4 z2^p>_P3UgnC0hi%0*_o4h^%V@^yg%Q(UX8QG0;P0)Fz4A0m-T{DQp)!78|mOwR1i~ z$%Y;Rf8w1{@X*f)ZeiG^&mSgK{g6v-zMSVWTkzSyq%PpNKsMP%zg&C#jzm!ok+`*U#L%An2 z{63UQs*JEGOWD{_;l;gL- z>`ab?JFL2OE(C+0Pj~1*W|yxm5k4@NIP^Yo+kwOz5}3xs6Q#RCL_yFF4N2oC!lDQf*p^x4>2^%L^=w8C!&Wp;ztKUO;LC>L(w zakE^CbtR!QW+pX~vDqC+=ru z_s2)x#R>zzhjEe$&R4gI4j9jzB+OHjYgmIryM!v=*@15W;@BL zavyr72V~!J=HwuvktdlZMvJMLtFM1c{-#GY^<9``Qred%uk{x74&_o? zw5{5z(}0Orh)P!=(mKS+v%xthSq!`b?H4Crm&TMj^nsw>6vqAzibo}YJ6(WzQOq?O z8*O|>F*J#&Q3ayB=a@sfvUDyl68obd_&2sw3loRtfKJ~_h@ZrCZUj@(5HY(dv#eX^ z@zuPF=4TioO-b7i+ef#?+!3^T(aerH^RA-migFD#UKiOhIdyA+lr16tg zN0%2pT-Dg}M}!_fRk<;RIr_Hnp(DgEiZS);!Q5*W(fm9_CFe1nyvsasppoEqFb&U= z^G_c*hdYpI(jnFDw&aW1mzd^DrD~#GI(T$wq2knOaFbkyzHe%5TQYnN|RFS)+;j)kh%cBM%z8YJGpn_|{PkQ29`Op}_HZ{@SrK-aydeHFVdxF31Qorc5f4z-;40_AK?*y3g_BLJp2Vy@^mz5rVz3eQS(nu!Inm3OLu2XoUEMK(VE&t z9LiPCp@dM^H>H-y57UVbE)(>SI z`_jzyKLf*3eBS4cX*?b+cr_LXy-RqJ-P*7P>b>f#w(Lsi#~O^q1DG-nGq^uY_*?_x zc^OGYKPTFLL@8vI(xqvNc}+oerxS++iENnWn5~iGtVw3$)KhmiJa^C<>(fYMVuraq zZ>>;bZ}6K=DoLf8<0cvEbi<%b6j1jYiyJXY*T#d-pJ3^?Sh(VGq2F?n9zCdD%(w8q z4^pN1u+tLN4zCK_n#S;42ixRZd|BnU|9h(%F;VT%CRQguSFO~?+V+ms=OfkjYXSZ4 zC3N*f(&6<;Uo2(YDIM9HS;*FT!91d?Yc}0*eS4Z1_x=s$<}Vb{U0@4uhDOXId$|xa zNeJW88Q%KVp#xD<`=9-#N|O!QE!AqDVis=u;@k8jO=`2{X;Z>$k)(;RyMyfL%&RW2` zNib30Y8DTRcqr1!QqURDxZFa)1q^qeZ78m?kS-G%(uC2q5YTB5?EX1~BkNc{1`7{8 zEqw4_Hj65=bAGXLJ1lT~qe2|th=cT8Gqe!HtwbvUrQ3s63bqSIce93>j`UDUDhswXoPaxNv^5tc=YXScN98-)%%MY9ZbbWkOc`ENl7 z2PtenOj^JX;pQs?Lyi;t^AWJBze35Kf&+e1^y$G^?Htqo2cToU5qu3%)H1>y(MDS= z1bMLwWbY)!HWP&ES3&Eimj;4&q24W{;JNS<;dUGlcX&rNNeG?x`(>Fy!D$zl6?Ao62vqOpeZkNsN%WP2q5VfrmdS96chK=qLE` z6`QrOs24{YX_o?WJIPU~!trBVGmcvJ^^TUs zgAC0tiTH1f;;<8f@3#mpTqgLaI^(kGid)uL8r;rH24xz2a0ux0ze4{#6FS|NY0q%S ze5fF}aJ6b=R?(HSL7YwmOASG5U!r(JnDmC|_CdrmvsEv6REAGPJusW}NPdE*BM=vq z0(=30ji)NcolC0@~d(4|o&akQHK!L=! z3~?8fqwAtPssd81q-tDSfoU%k{_F-Y_`Cxv4}h-nGqoD@Oh+kP0yNhnkQSv4gqO)e z_XgQ;V}gQ}A#gG&Y+68b-^R{%!H}|mlUE`xOC%aMknlz*VN`d3hx-&VCxYhKsCXq# zY4#vC|EnR^+o4F;Iv8sE4}b{=olp;?<4Mp$Eme+00QwC>T)q>j(|p8UV^tr0P(IZM zb=hqLfs+jNa-%tIgSDop+NEQ_jPHw7qMsm56IgUwwAT&MwpYaARMm13fD4AHcFhN{ zcq%}MSYq~M<*6sVoV6Q7c5P+GWY&yWme*HBvQ=c^?IK$asGN-xzV8-(l9n(haeu>F z(Fq13ZMU6&wzv1HlD2zocQh?>u^vcsWbky6gAGMDTB@5Ws(u{-Qsx-Kf|{h!^?^M# zz*+s5aLI8ZEmY+7Kdgi6DL(zlg=7D6^NtYUz>y9t?8VTpD{JU+g?0Nyw(kOd6$iY_ z4|x;Q7MQLyMXrB%Cu&d+CS z`vIYbO$7@l8QIkbC9W4ktrHB(hq1Q1s8BsvOn5w4BY}K|54W=Z;%{XQYHz$;%g|a{ z87ZkL(&Gt8(Y{3HAev9HV0NxV)6cEOS;40LQnm&~GJSnUQtlt}I2%*~ase!82-Gk? zn&-)6p4~^&e=6X%BBXQAqDHv@9`y%IdWUw2j^xf2Xk6=Dmc4KS*<}lpYrz<@FZ42| z$u6WvClGpGQw{hAa`ivepyR3;@vQoQ!ChE%_iW;V!QP%zbzGi#$*4ztMT^I=_{FkR zZO&S^oTF#FS*wf}oj4wJ@7d>!fmTwMex*DxRSr0drIv-cj)?C=#?nblYi#(u-6dRa5xh38D7iF7Phug%k2x z>eWHudW@r&4uJ;GKpk8FbWa$_r*Q%!)++w~m*~&aM3#G0O4Ky9>vi9c{AW&dZmj_6 zIokzq=VYP1y$xJW6p&m_`T4>X|I2 z!Cz{+9aQXpQNh0y!GtM3PMa{F%+E9wBsPq77bBNIBAgq zs6YFGT)(co<|c^WbWw~GtuULhB&v=l8S|qtnA^evHm@*ou|8k=C0mk%8L$kGpTH*E7UUU-d?3c*S+mCE$O6I^f zq8-B#m&YQsybLtq8c>%Ius$yUSJ_)&8pnVY{2j58V`%9)gZaG?B8wu#_d^WbE0`}{ z$-67y;~9ztS321KgoF7zfFzwkt`j2sqrB+FYeFw4gEi=g@s1Tcd#N&Z_DAzf)*Xe> z>#i@j17?HkbRgKN?aWOQc`ZKWgXE`Uzd1Pu zbY-762Z^G*h(vNBge;cqr`_;?ZD9U?udv3&Rf5;@#xj{_Fu1q(cV5L?Dk0L=jetGwAw9@~xFwwMzl#RzJ{7BMCy)C?FzLric^9fFw0;dodvZUr+fGJnPIDz! zeSkZMM4t{(=`veo;4aWDyFrTX0N6JJbl4$dYmH?X!gn>E$9dc)?ns*#+s|ZA+uFX34y<-8hR5i5B}HdSo}~ z)RT@*`pU4R3G0;VA{ld--xm?~3L@C@%F7k-DVz85SZ`O>1BQ;&6)m6P@Yx9Fa}QY# zofS^nsN&yMWzt|(@13aAH2&J66l}0&YO`jv?-&;s$OBfv7pUldYWcLm*UKjcpdu2m% z^$P?0P;PLw8UXgNZ{)S;PjWZ71n!s*;QD1K*qOm#hIAx)R|-wf>qtR4m{O}L93KXl zl!>}B61DgVOZJTi?Hx-n{5Yt~qqtF2L!w0cr3t4u6{qt%hqp~(J^TZ?=LFOSsX!IN z$!ky@JF6LLvhLn)c}2HC*SkN^nz9ez@1e@}t-u9mgUs^-?wbPqeKqjD zKUKOX3D;>Td~B9z{^<%UXDJ-U!6o9xP2&wNH#dp5~ zBxWPMp5Mr;GbmsCJ9Mz2#~f{gGO{f=XU?g_L@)%L5gouFX@^kO=LTt65M8v4Wz|?v?*zmllaO8%0_cbYmk$x` z-B6v6$ARUe>vlWa3r; zH7=rN-z2b_`=UAdgiNV!N*}K)1l|)#`6jYCMPzX>NY2ivb9W$2^9CHS81QospsslV zmn=bCvBaYOeJvBw3r%vYQqozWxK)nncE+LWRY7W9HQdEQeS8V<;At^)4}mox-9XwH z%keFb&eNId?7gQ_zzd}Qcz_4{0B6nts(J$8a1hX#a}Aq5Edc19B($WWQuj+@T^S-) zVsWy%9tJBQpMlWH?(fTn0oyqgE{tY**iM9BInvLY`RAvsiGK?$%R?r2y374@dKP#8 z7$5tNV`HUXkyos7oWT)}q=q@X;fwHzN+K)XiA>q1^4$a4L{R*4F@aHzFQOBdRr-tcr!u-aQ_z!?9or9u@PcyqXR> z!Sq}PCif(y4M+ld7#V>^rVmG`{{R&I!>8^U;MZX74Tm4w z%${!SOza@sbfRjZPDCwoSXS_FF7N+-x4k>Ez zn&A0$DEaT9H2o7KDiCE-EXt(wpr35j?%zb?P6%9>j+ng#(WK=FOHu@T&Q!SHoaCjt z)ikmAR4b6}t5q)_V-2Ywocdhk@BYAEaVp1~343}mC$|uZYblz2kmbtzcRjVQ-xO=s zYlHww;>fN*mwX_v;#i>r`?uVQRHPoZ<9=#xCE_m%(@9Zopm zH=x?T02WVItXTzM<5qW%Ub>I)R!Gj4o`TjLXd?&rXXov06o zdwUwpF?i)8(D`9(Ex!80ERHA0JJ0^MbqVtChYhqWEjYb^;hUF0FMI%r9<3(XANBV? zgw{qVe()poyQ`FQA5nWhHM6TIb-L`xzApcmvi}%o_!{reor>U(KZhVT?}7MRI8viB zK#66E?ymsr%rwijsfOFt{fK21EDZW!8F3Lw3p!iLJIp@jf?Rs=Y4UZK)GmEz|> z2B!j_D5%`GsLI?OD&3E=+^_Dzgh<=|u)yHoH7rx2l4Uh+V5q$xLGx7QCaVDNd`7sE zTeQdhxH#Weni=n}dby71!*?p{cYyRwQ;pn*koyW?jaLdy3jhQkLMVR+vCSHy8(UGv zRZ_F?lHzZVzFDWPxV<0l_5R`iH)-CvhW^THtn_1eU#4UFxrLq&?~{(^S{K6DghI;p#bUuDO}`(KXb)NeFGXDrDU*aH5Us!^lxgfnPl>)o!HTPHyrw4j);64Ta11_x>XG8QZz|kXts##)HN@myUIIyz@g4taH z(6bORRuu0A08IP@64w&6&P>(*7g4JRB3!NnP#_#3W*$dQQ|BD4P*)hzQ>H~s*?3##k30rs9{6fW9$xf9`$H3%E0C@h&NTA&ug4?lq;Qydt! zSvB}2%9ydXlQP9PQ8R(72CGb&r?Mylbw*c%33bR!c#r1CC@@um)g1H}bMt30)5ZYa ze`TDrmw-2Q2mR(DSu(}edMyZ&LrAN5K>KV)SeONA-6^2796-b41^YY~;O-17N2!K& zbadt?6{w>cH3B(LZsT|juw+b6;u#Bo|A`W(UUTMOpRi=MWf_(TIH0s`jb7#UI+@pY z&xp0`4QNc8Xru+piJsU>^Zx=UQCf6bCsp_FAnR|d^WVSVEPJWWfN{cJf1@+D4|1a_ zz@vQ7i5LYOT1j}{VsY|KSAJF=oK?q_I}{b^v1v|p$mx0wJFYWk&#$r<+VY-FA;q?US)ka^Z4WHR6P$)>lAU$KNKF-M!9WQ?vQx z&Ur@dnZJnTdq>Q?Hvm3tIi2c}GpDLLjV`M5`b_M+B@>&~{58z2%c{9)Sw%zdcPqqr zi5}g`&?TGb;kuw>JE3ZCBfSz(GOq}){*Tqy!`k|yN|#B*PDzl7VG2e5Qn=7c;dL*S zExyJ{xI!{A9bs1vpmXa1-wy{WTN!bfOEs*!%H+4qds~a7x`7u)x}7)SmNWe_c)loj zlBWmWpaRXS|^T4%is5S$A7rL)3>90G-c z6%OvToV~Nr+51`e#|x2eIY73BDnI)HoOPJ$lq{l67pgY74lv<^fsi2tp_34ztE*&B zP`MMRGOZNog*GTdw-`AaKvEzaHF_<=%Ok3>mT28cEVr*YTEkYIH`tQ7rCicvyusbi zfIf{zN?#7v^&@K62vR%XvRWldiAis-(DkZnw>7E@M}r0o1#ns+E*y`TY>?U=Mf$f2 z;)!Jd``al{Uy*Icky{oMC_TYrhX)E~8&2G5C2C+C;^$3hW-KAAQ5nnnw~Vp(Cm5_X z6ktUd^0dpu1*@y$oBe(oHn%DQo2|ph52~=fY!)yZ;W-V2-kEC%E0u;K)H1KB!IDeG$O@ zdH`cis3r~+tg&0@^kSh|2smjR!Gykub(<4CjkaiH1p}Xb5St_r4Qhtwdp)4Q1Ax&9 z3a*y|$Jz_}&11|14*b#F(cqV?Hy;A0pFn9EWw>>MaY8B)Us?#fZ;VKMbC&+ztV0I@ z9VN2P4)Jye#JcQHu|$>sAY5e|ptpqM{{ooR7j$EOf!J=Wp@Aw@{Z+h@MY~TIy)_j% zIFsdj5b%^{hVR}14$ca^HV^RgN#cyJpgc7iICUWKxZ@yYdx839)b)+YX<0eRE!WHj+0IdV4Ddkjm#)`&YQpQyS!vtBQGMJ16U$k+wy#Zlo7>i^wP-DwtL9m} zm`=lmPJ}463TMRmj9E4@bYI5Mt2^;;!%2fSD)h@MICHFT-L95}byIzeE1#R5eL|$) zShJKCT@lUtYZcKM3fiGR>Q8k^E9Fp0%%U36hh=sE>jV(p*93UN9dhV8$c)P>o$Cqc zQPFyDQSxpwPNgQ6c8mrsbpxR4SJi}nl%4h}^Akie{g{t;W=?MpeB5n2iQ|p4x~Mu& zQ^E7H5OVJ(py4wSN3t;^lWkWyo8d^N#f=ov6Cd#ZhAFyqvL ziv7-`TuMTzm<+J*nP~o!B9+5Pi;r`#L7gwzy5(Wl!hT-g3Kl2lNR-R`GC-}7X<~)U zQ<$+uH6Q_Wz-vbvtu;_4p0G|{h5gr23rr%oJKJc5&cd%B2v!LId036`*m|O03!{`d zf;g}j;E4}pF0CbOafYa;Kj6T(2&4A^+{wc5bBu#GRtTm=8>`?!G-V*B2oT1+1A6A{7r01vG*0KwVk=GFhr67&mjr2aZLZ_?a z!(vw_#E+bZ-0lKm;Q^p4nka<-BYOWW!-{_#`Zb!($rR#3<&i6Ib1>&_3zD}R>3t7i zb8E!Ym(jf5PNv})vSpF#Sy{8gXi%0nBD{AC8fK|Z&6Iux64iwYly;zT?sh#CG zxcrtF*WF2E5A*<~_ZPhSR$xGr2kGq1Z){#>dpYYWU>k8mWKaMWhR+=)oLD>>$uG{vq{1qKckEniS1 z;uGrqk%V@-!3$js%(n;{cSrm@5#h=of|u$F)cucjud=q>$vSKmXxrO1H5lsUE}hrT zGIA;U`)u)w!#&s#FAXcfC;aLCubFmxK?(3GZP zo@GbySx4Hhi@_WJ8rtkJ77ajG$_;SWI-@S1`CuK&L%3mvk)$_wPWkQxzdlfw};hol$6?`zCgJINQlH#6*M% zHa?-SuYln0BVv5}vi+$J+uawa)oYw$?zgDv9+drSK?5v>2}1?uwL$pN6=6XYv`AY%!$||B=SpEkNmmbAjXft!@8R4I&g0>n7H29Ql zKh5j5d;xttCXyep8)aMl~`Vv5P^x@&<9*BBZsJSiS19Yo9+GU(3ZqZ(ELU1JLwL z(U#{$P6RQJX~!JDiskc8)#-m&RDXyu-F?Y?3PyXsZQSoJ828WRjorNznfNOf?M$)h zKsoXHb>RR2AOJ~3K~&OCb5T|wRdu%)o)T%A)k{30p2a)Z$vqEv$7kS)>yS4-5!pHx zdDb`LYY&KrXBXHxNc86cC`YR!XFLOq>IPc2hjPq%)Mx3a4|5V_Mv&S31MPADf(afA zcB5isr`;oK)fQs{o*AodSv23%l^&#v@hlQEr!||Z=h(XB64&zfF7vjv(Pp7Wo~Ib7 zxtcKM5n`u-Kp7(dKjj6CAE`9jRKVq&Sx$<(;BV0!-oM+aK3& zw5lvhd@M+x&Y)5KR1*NztGyR38ExA`1Bj-&NN?>mawQeG&K8H;c5%4Fevy$C)j5eG z_ga7?v{LOHDYCY-!0y2Ug}XBjvBV5HAZF+-W2TL@O+$a%UUkEA)ya!?i*;%>$yDq6 z1jY`nMW^o~#;uk-y=lvD_bq7uKLWpixse#j2Jya3Fd0>TUUCZnLrK4n6W16cpK;{93*rQQ)tWdkd65|j)>3}1`5uatqEnHHGIM)w4Q z>`N3GxJR5-ONHO8W#`m9k)_EjFM0t)CnFu{W=v*P+m5Mg5l%F^U>R!F3JQzI2#mU? zP;P+nG@FUe`5(;3){ESmA`qX3T7E9#^QWkDW*`*tRk&n{&Yd7IVzB7u90HZ%5jV~! ztT7hpZB{bBO-7Tn2q^bIOwA`dcH7NNRp;5BEggyfcU&Y-HkQ=mtYgpS2Sku zdY9eoz3ujYX?*TqBp=TZa<5{rc>z(0uSf->4dx$W^xs<~R#%k<7lFHX64|@kG_4ie zQJflYRjzeW`JXTF(0GCqmlg6%P&gJza_}Tc&C@CY3q%gRQZ3Q}xk(SyqvI8N-U94( z(wL(A$XX%BHS#98zb2q{=$l&mb11%?4{)Ls!O=eq1}6}d+=39hUEtI{(ZGSMt%e9R z+a}oh3Q&<%WG*I=sWcAZLw5`2-ZZA~dZZy^l;*`K3?{%V&sFEG7oAx^IL#j3-$ zb--29l^^V7?zO{_y4{5D+!XyORHS&Mz$`b>=U(1c>~yy^wyJTtmZ59iWN_8kN)`nf zQ+h69Y)Qr=Lmk?j1SWhtm`(G6>WxG*WCrM~+X5dKskW~yU^fw}FkQ^0T<9tnh3=U% z$hCG6+FyP$G*^%gmnRr^L^Sy!L;kIfw%p?Awq1_+JXD=`*M%*1Wi!*dd6TaXNw!R7 zuS}5^eTD1ab7XZU>$pJ`@+dn*r~Y?cu)(Fn4+r9Ca4xKqnP-Iz^wOx_s0P}eF#?20kBt3 zw~RHyjj4ZGgpMoCzp4D#qcZyoOP13twwtBt{|uH&cDpwFxV)$Q=gvYIuB=T;8ZQgT+8eL< zC`h2!JqJeL&xDF|9DSQ%`1x>~%e=MZ@f=G>RweKbL+!Ihq}f}MnFm=?r?a#P5qR?n zA$SvFx4J}kEikidiWND;v80B_<$CGyimngvXF=kxy%ZXUDFx0Y+FF8W$4G>wHAt?$ zBsG%>KmTVzyWfzbJjxS8)!7##j&~sQs8_8yL6t;|3__sJxe08KJ@6b#u117$?&}g@sr|%sM zSS+S@aW(%WgE`ik@WK;A9k&p4eue52qB8wI(SL&k@5XzmXL*H#7mTOtXyEo)SPtf9 zdAm(@c`VUyRb8&l3*D}D+iX|Q;Y921A}lJ7xU#jvyl~Kyf1%9!f||dfk;HJ4xg}Hr zHYwlrQ)dsEX4T8)Rq4K7)s#SZJS8q6{6` zVt(*$aS6RH3?_HCs^D5uN^A;1y8RL1K~2!;P*I;C*5Cac%@*d-a>)#*e*yS2(#!O% z?1TO0xMbEWaJHtZ?k!s?{efV`2o7H@bmov+?UKO05{|B3F<>vMM%IJ=7Ddem zSg>8;^`D|iF{;@=i=J5ye0Vf+p`ogC%Cp?)ClWiAB_SW;s&8KI#OL1L*`mCBB5T?1 z-f>91I;y_GOY!mIB6znmy&3< z1)?=9AJX>(z_376|L;a#{c3b;U6QSXfRF#8PDrXcZy$;?s*G^O!6Gk?qmIgjI69Uv z#}Pv>|FN*^FiRI!Cm0oi&^Q3pf1GNLkt#Eu31nPEG!ca9^}!^q1iSbwuy47@?(!SD zHV-A2|2eg@76X?ZAa>|nvG1N0SJAv`P3fxEfN20(|05Z_9%W_kxfn6cMfs@ITIY7C8JBFQ8(VPx&xi$@OxmsMYEtpL3t{%$aQ>eoNQG59cPCTS= zAszI>DAdVUjD*}o=i)Npb0>sbOctkqchjPF_Jd062+gPoXeJl(Z9LHdiV9FXut>4f z7{yT!5l8+2*fdBXb^_46eulCXGS;nmXf0Yn*4W0j?f1+w9rpmb-YRNdNAqT72`bFa zqJ6^c+mUBul8gU%NBo~r4vSY_d{lUQOXZR0g~x3MjXZ*yYn+iM`w3>IBaH29X|d;) zM1V?SGe>rh1@*fi5;O*-cR`leV$6YaRJ$w@zEc(*qu_Ww5x&-xxkfT*{&;{}|DkD< zM5fY3+v>I0$6ETE%N(4AwDC3I$!7|yuOMvN46vmJz@&SM9bXE5zXSNEn{dQbz^1#@ z)v`wwG3JFo!IOz7Aqgt^&pOg07xVjr=*hMjJTw1Nr(k>G!o3xG$0B|k zX=uS1G`9zX>9$7Td+9pqv}QJ%n&j2;py^1>f}$Sk;p?B3}85m+03;VRHkAHm#BTo67P}0@fb1 z!uPtfc((dvEz->G({F}ln$0A@@!&o+hn?m#tza*ID67YdriP2`}y8 zc4q(K=2?4e9{rZ2zEO4u2uJ)ZPRJ?888}@yEJJzMQxf+aqo-z*WL^iEl_6}`Rwu3@ zOIZ~u+)gn68MaS$MLV>DWqu!mCg2aCZL=At?pNJ5-SC<wzmMb}I>GVUYdlRbvI zjzX(;BHB}OqI>Qlbm#11T+6$HRkI7&vwDgdw1-WTjcmRR5rYr)^cs1LNsI- z(%u$8U;ZQ9dJWO1Cz@wH)oT1ht()V#T%4LS$bxXk%~J&o;DKARZX1Bfy(y=h>ZP3Wz~7n^CA*bP;^&ykPSnX zXXjQK-dgqSTBOV-Xxf}c+HjfZeHNFs;fJ?bzS%bC&H}DquHbH+?pkp4A1b>+e7dssMcKF8Z>i@bgy8Cws6owpgBs zitjqrp^q8z)OM(Q4b?~wa-CFk8m6lJG#AuwLhbsMPO4d$iSCwtA-g9MazqR?*(&yP z`Dizn*QONX6&DHadLPjHK_YtnnghMY_@Zn6O|Vz=P^)H)P*4h(0zZ_(yp>LegL(5S zn6^=1y?kVm*Y&M{eQyB_Tq}@%MRnqG(4{?5R~G>2<_mbZ96*jB#rJnahwL(#GMwOL zF@*935TaKhj?F-ApFondMKmN4@ZDvA5rY)=oELmp)WJKUq(4_zxpWwG^J;*Z`$6AC z1FQ@ISQ<@u%@=rGG@8Pj4A**ww0@Tr2Gx|R%4d%vF71grKNut+93Wx5>h(yK7Qcc_`ixMwGho~c zfc*CXx)uRAvk#%VyOeMOWu6v^cL>j^qH zw`5KLW(M8|*}oNW<}1Qy@5sE{Oqf0ssBu?-jKUix{I7G4Fs^GM8} zgPG1v7C07aaZ*F0y9*-r9Rir63*h*U0R7q^!VIT^CjJQ`{hVs%Vu#ZrL!nD7EzvRMwf5( z=zdAlj+tI#ydt8p>e06}rLv3HFAg#}kKwJ8;Jo&>dWC#xAnjX{ZLX5{8ah^8MICs; zxp|}MijEYQvcJ*T5u#(MoB+{Y8se>Ji}ovkn6k#C@8g-VJH?c*N9ncM$I)&Mf9G|w zrnWE3`a83{EKOv-5dQ7z;nWVw%;{KZ;Rfoj=Gs|el2r^l$ zvgB2w;&4jrGvg)vZOw%-FtbWhiqEI{?N^#!iB$%)1-f(s?#2-v%d14rCH@=<36Awd zS9(JAbo~f%<2?HN8_};^654M+^=VSNJ*$+XdeCfNYP>}u&wIDf^X^@-_S7sfQ7xU! zp0E7(qSKmxtF~{e+-RK6I73(di}B-q(b#pOjVoHM+FV$$BXs@;>nC1l+|+~MW}iA? ziSW!(Vf%6xX#$pMGh0mAPb{CNSQMbCw}@7ziZ^ze4a__w-npRhzAxr^X;&KYJ%jPx zsTD`lWvHb755v{(aYcQkcYdF&>U!O$TO14b`y}f4Ax`V3^R-5D)eeI^x3E%T-O)0j zD>qoJw~ZPTp!TYxoceBb?D>rq%ZEpTt)Gf4U2oC;0+4(IO_DhGwLS$4e z@M8*b(WAvZN-nO&O5u&;#G9Tzf)Nfk-uY(g3t`#lFxHxAZQeDoKdq&mm!E+=DqgZJEg>zqN;ex4@D zg{5KwYUW>L&G89aw<6^sREUFFbw>?2{GvZ$8YDVXzHn znqb>HHc_IoCh@6kCh^{~UZNzyP-yhbfLEh}mA9)5uJ)lBz0`Sq(!kc(B9f;FFtWYk z!zRZR{T26SSFFB%9(7%qO5d(3tH+Bu*ivLsyr5EF!TJ6Mf3&vM%YS{7n)k8t=0=|t zH>!?k;q>u5btw)~AN(tBMvUjqR)wxVOqXko;qx_Nh=av<8%5q{^=#(^&%8V?a(=L4 zZPNsfe5iQY&#|HS(mzfyv7OlRErP*5xxL^BAHmdbG`M}N3oaO`!H<_2cs2)KhrWWV zqYNt?6uRC9dwU1anjRMK88V?)mui)_v{gAb#hKATn%R>SziuNcA5~T#N@N^OdAymX zWP;eiQ2|q9q-Xj}7jrucWL5*n&`bfAToB^2e?{MHBA@Myh}ig-!5VALfsF>6qrq`K zeb?)VbB``LSNj89f&NxoM2a$JrAkLul2aoL3%3-_Hi%m099&?7y2YjGqPozzBv4yd zG=E#s4#$lCvkN*pPWhk;7OMe7lpP{O18$I7rx!2VQ}0>@x-Jf(D`HD@1+@uGo| zb3Ex%&#=%S!zqKo&wEtIZE~(xm}=fa>dvolZt@kU$>-8-?L)V48??_5b^Qi8Et}rg z$)lYX`!=9Gq7!R#KOnl>p#4IXCq02)1r(i@S13Q{B5`Ghz&|dy7hz0;C^6H15WBh> z?e#&h}!JS_7k)_^Cpqz**!C@ z1Ot`tBanTvgtktV#CMvS#A(7LEL}SUF#_JtzpIz9&l#_fFFBf1w#Ruay1+`Nen!%k z5tBYnFnJ}hyo+G_FP_`9!t+~~5`XJKx_70VE0*Bv{jt>0Zgrc{%$oF1#g=L< z__ds1TW;m4*WmO~#QCPg$#7+nR8FfrhE{6;zI!3k`;kieYCyjJ<1LUbBsNKTYI=Mu) zU!nWCyx_O}MAb3M-aU=(nnFFaUGTr>MAR^{+X&^+g49==m4|YvZhr6dWUl~!`_t1! zcMR^`vUnINwsW_Hz|qT)t(yZ0d!AZU{#CgBAazL#!KgzXY`4?eaVRJ56=tS#{xKs8y~4 zXXXgI{w31$vY6E$AQNgrrf(KGcF>sn@b*NsHa7c(yzOy{}2 zX*lCcp!DI8-)yEe-%K-so2eK)`YQvs-_RC~R>?kFd1O1;>l*dtZ;lrSJD2|%>^B2^ z^S_>+d)`slZ=Z2lTPpi*H>U7*nu))ELH#0D7jE|ahZi7AI|)YA6xs4zCD|&X@D<^@ zwZd;xgL!g^49-uSTQ8{4*qAZXY@p1~USM^$pxyJtc!MixxmZ|lzzA$;Ta6)aB{X=|jdl9uo%WGhACj<*cn^5015?V77UbKqW zDXZuG^GDDwjrVNZZ;k0t)u7I8(NGE1Q@-;L4)C?aD94BMopU3c8#G8Hu6@W3V;_ilmFq`M6(Y=Evi3g^~1KYp|NF{9K?6V+MWp~p%Zq8d24pdfuEk+!RV8SNC` z9aq+dW@jGMS)fS_uD}BuE-P?$3_K&p2th@s>UhHJ{2Vd@XcNkGf^y7Qc zDj^SB7hB2kQcRDIBFpB1MZ?9V7$Yvc9Q?4a;OCo8f7E5?cWmzbdqdTak8-Z*HFeoy z6d4*A)3~+g^*5e+QMK>{K~bW@PJWs*9%hns|-!*zABzos!H>Iv$c^&BTnX zrZSGs!C?kw(@E!LOL3%oC0fe8}YdMIF9Z-M5&DspC+ zmLzLZ1zS>$NrDxA~K9(@45we+u&+gFD`jtbdUlG)=WjBk0>{ zz{-x04Y@o!qdT}LQ<$9U=ef)o1?}3xH0=-RIUX{x%Kuw{;juvD(dr$K`eMc%wF!5d zB4Ouj>-UJUuGT5zQlA6jvl}^b&Y0Mm&fLBT`L2)3*h7@1y?}ic1Pvb>trRPKIT-Td zyrSzA(IK~h36})dnt{zHI5wIkx+Rx&**kmawi@>AY-dt0R}@c0ZqH1qR1W;Tn~~)O z)l4i&^ROp)s=r{zzG4R75p2i= z9-CuO;sEjULuVV+1|}2*)8D4th*wkZhVbP!pjA;t=W5{dw+1J6iOeZuOvi>Qo69QV znmXRuJwrkTi@F_5)0 zh$WSXsKL3Qj?GR0H!5}( zP~F>`EV#?l^J#!v^99RVi>r3s$l4{wym@9!{2AkYo7#lFJ_fJ)Vb3;QYiz5NYR*1~ z$-k1OS6yRrKBK(L0-X7YGVdkOa**=eeP?%__-yv{@YtyX*rmK^vHG6Nv`hT>{UXU1 zs!YxQMQ1niv{FZ-Z&Hi=(%(qNqaxp5f;??O%&I~bJV7>`r~0Olp#6_t;MUnh!LN6F zp@=?W-^D8qzJjaV$e~+T;D<8g`ML=@cmv(Vnn;*?a6 z!A=E5N~bmQ=z^FZA3(Yf6)Ze0Xz>v7Wz72lu+s^&^THVrx zjwK|sHT zB9TjgtIb6h*M>`TMf|mi#UGkhc=|6eOCrbCtrT+_5%;!{HTHo$Z-Ogd2;c5AI_!gJ z%dF6_Mc~%DK$$7RZAp!cn<;1)M%JDv?oB5zVNx3F{ITl#u2$D)rn-_Ly4sh?re6ag zPcX2RaA{V9G~WsSOD_MXe&k3JIT+-Xu|YG%{68)DNAspX|wdq9#t%YtA;PtWTUYfb-^^lJLPozYe~ zalZKW23@EAa0QAQEfNy#6HDE(Ks0%8qhtCTJ&+uXUJJD8OZMvt7822?jYQ+Wh?d!9 z+_U@CUxM)CQqeu0PnWqa-P2ao^|$CopHc19R5|)9Wyf|v>eJNOaZU%0B}U9LGB;b8 z+1DwlMAQvQwe!GlW1WnBLD~6_n%~mXOk4?j;i{3yRR(o$LEk0Ntvy2LpI1LViAxw3 za_-O{>aPFmw8c*9UxTc6?h@dna>9r4Mq>RKsD?1RurwJ9JA%9-9eW6(Rbf58SXi zCSk@3_%9!;i;DqQjJKL;f^p-MLHlh`{4`nFf0}B1pYidNdW4t0F+g?0YRb%po|kQC zlEi!cP@=&XjE(Fk*xr|1e1KYVi@FOd)NL>6G(3m0@+Q?eiKzd?Tfav|lQ3YN=$5&_ zlsjawp76{zaPd^pE?0mn=S8pnF0Snmap7CV?f1paOayJT5sWb8+c(s1Lu~mfTLjGB zM^L39bWADo^J3AT8jDWO4qe#}{+XB5S&`rZLtfcI4E(|B-ImtH#?tNX16QvMU56;R zNq;K7ucX+zjdEl^Oy)YqO#at1OZNsjd9KwHL#aQ1R*fGCmhhF!_felMQ#ZGv>TZwR z@(R412^^6WeD{g0(?Rg2KA5n|xCX!1jI;$`pE0Voe=DcBD?Ll6`UuEbf|3M85pf=7(nrYCM z4%}BC?6_5Q#uDRFmo}_h1c*5Vom^De^+%vVR?7J}m~q|3JNbxS_E}=HZV>xdFPOOt zA^8uA@mm>`OlJ7YdE)tZ#G>TD!}EespD6FI*$=jB?QD$*V8j&5^OwM>#hv+Y zi0>U<;Ov9)#L^Xlh3PDIt`amj0W>=&==;ec_Xs0-SDU7d&xZk%l6}f9G*;&+>tK_D!)Apgf9qrS;nVKVoxRt)y-n@exPvK z4$_}VUHjN+>{GhSndx3l0slNljmzb9$7oINgv>)$22iLC~7F$cw{)Su<>f3MHOGx0M$E z!WO!&Vep525O*tDoaTjV-4J}(TQpr}V9!R#xbZZLWw$Wchz$wA{VtHM7esCiH>Ue`krDB*;j=}81!)HCCyqvl z9$ahiVW)8Cc3|Eo;A%7A(r+R|TY~*MQ(pc_B)>yB9ZgI>4hQNra~x9tpgMPGsncHde6(Mwcv;DMr0;(teCX?_R2< z-z&R2;lZIEHx&wUQk=!<$13X@!VaBl1KU0%4NDnF8hD+?(@Cd{`#lnF&?CCsUDQqK zrT)4J>Z-L8omGJ@^bh^KE!AcIhpyvv-?bm)bkthaP5YszmkY*4LjJzzdk5w^+y65B zGVkTf%hBQwK49GDXyd=0APK#P(cd=G`8hJut!znF+XHF)*m_rYg~E1r33}Ob2W4w> zgSKB&Q>9Xk{U15$i{e^C)k3GBbxW&G+D{zHLHxK=F=P>Cqi3}BP|tPSX>?9);q@ZG z#B@NCb;P{GCt`TkAR4}*>Sf{fmUwYRftCUlYnGY@5 zRG4~*(VS%k+148qUmdo6OL&XQi)p-FQ1q3W7fXHf@b)J}WDD|i{s0F)5m~(1a7u3B z+jN3{-$DMjS7cjT*hf9ZZaQP^ z+4e9K+mbskLgz-(l_&_8_LaD)=_m~bla1~HLk|LPZu@4_f&_0%t)LtIK(M%nVf}H6 zo5cmG?iwxFPSIu;(YPVx{#@{ztRk%+8HV4s9F-nk?n1!8II`tn_`55JNmY!j*+S91 zC3Ryl^6(Ba<4w=y+%6J*LGbNL(YG%RHpdeUYN~vXN<`ouBK%v+MY1wJIr~9*cuFF7+TW6p>2N^eXnMjqMz>{5&sX4%iD~=buNp$o6}(9I?rp6pTX}ko6w5X0dt|1Noe}3@tZA! z85g8H=mc!qNwhqw%+v?`c`0$F7rC&V$bfNzW0Az3K?dC>Lkd5JtXxl2JS$Q+QoP|4 z8N6BcbD}Xjz9juAd*JVM#}a+``H}g&wrql)sA{#{Q@Yg84Pq~N_P2t@yuGIOY*qk^5#T_~W*R?BTe_oM`5h5kVLDrNd>a|o9DJ6_;2YLA$aO4S5vzTu#9Q+hG zKis&EnZv$Z+H0Ak8acTL?935rf4%~#vmMeSoQw(=lsyEwxE=CrD6#H;qPHfC|NO2< zr7kwSbksv~Y)!f&1EA%bK)IDoU=8MU(3o?AMO5YJG4Spx5ejC}f1n99!aH$HxCBF*S>R-BHUDSO$)%bZH7>66G?Q1Ju zv?039H1_gk<5gYi1y4E?7PDHywiRO7^_Lpdna&$sLhwY5i|+@Q_>Jg*eu5QafbHMG z?CxO9w>3RP4+HXqD6_s0|Mh|-EQWL_4(yu;*;qnk!S`08ryJC44Kwu!CC6McR35r@ z0kwI!X!)9=9eYA&Poitthl&BzED_+s0ahPctB(Sr|7->BJOoQr7M(8S=U6b)Dq#Be z#K#0O&0I?SeuDjon!*z{P0{{%R%sKe+U0UZu%EztG{c4^LtNr{*dPCrzov%MsI44 zaD&AiJ)|E6IagHCqp`}qNH9mVL5iM1^J2UwiMByv_BvDHT!IN*Giidy zKDnCZKl$G7JnA(&g){lnWr zv3VC5i7pm!*NRym&S=b5aIH_)YofYjiE7tr)b@+%+D1|%m%x2#+%g^6xTyYo*MnDQtgN&1foNoGwn!82_ocx^62JMSQH@;?)75p6=_ zrg~w)Og1!kiFm&rwPwH=gECEl%S%N+Em5773=CEW$1hjTdqZq%r>s|r>>1^FB`1hP z(C001DXXGg2BOEW*8F_cm|!DFvq?ndr)1$g zK=BTuhp!tqf48_l4_a36 zz+nNP(0+o)lxwx{2ZN4{m}#csvrkiu6w|6V_&nTq8%SqT(RrD=(=aXti*!)si2#alk;||u1}?|=|<{>_MU6C%W9h?qTL$6eYIb7*d8z{ zxo~n8GTAg}vg34xCkdyeA)aNUS^qQarU5YTY8rF%iZOFvTl=M#*yOpC!`c#W+5}l? za>%Y85C|21WJ4*7NTA;pn8|Cw0XL{$r&EoZLszLK`~`y~p?d=S7CGq`@YO$2)4BMN z`Yp4l>m5U_x?P;BZW%i6q0D)p;YLcw6Dt3Frin}AnUmiI%&F&AmhLCcE_FycKS6e# zQ~l<^0YE)yQX)(q2e;gK%B12D{+{mUTA*0#}oz$LLNt1t;n8&xo%uEh*Whu?~ z*=bVGq}9v7k2LR66(k!#GwX)`!$T5ZDP&l>|*N7ft~lgcn=CPFk&47OLsDG=9C7L%|bA` zo(&%O;Ms_d0jV&^Ga0+UJdCH=cN*F-Y0%%d+tUhPz_>BW6i-zbjB=Xk8Q9l>2li2) zucxlBNtZQ;YJ*{lT}d1}j|R4+F_Ln4Q2zetVNYM-@siMDeSp<(Xa@GsV0bD`^mK~} zt@)3keDxVtcRj*3B(tH{eT|oIi%6GYBIQ?zBv~i;=YwI)GH{F``!xmThJgb+6H(F1 z$YaU_DadZ)RO6R{4Rcf1#K2V?Ma>vT7RqK>Wln%iPZ-WyFZkmb_Zi4_k3B*8++r&}p!e{!n6#0Q#RC)zVuXvgTP;!D;Kwdj zu1<$J{!Gy6Yr0nN!G1%XOQ`Len;R1_Z-#hFBaNoa==pb&Q(Ii3soIS4q&RK!X)cgy zKLQt*G2zaNK*EDg#ve4pU~x&S1Ex5XyKR_ZySkpWjf~H)a<;gjS$3e~H^kVV!O5}E z=I_CFMHL0-E0<5QCgMa*6*G-e8?&16qOTAD3D`h^v+hsm|a~7YQck(&#BFv-a(2=o%r)`0kufWbVgc;fa zl}kWUWqB z7~R}SV6zG$P4bLb^k&zjUXfcUJs((!9!Gm~ru80vWn|4*vD3a*6M09?upNrD6O4R! z#z_1@v6bEu-+ZrZ)<(IlySUcTAzQhQ1Uf!UkXk=D*CH?6jhxEGm&qkt$%jR$M_W@1 zWfhlg9{issLziaE;nIRdM@7zUrtGf@^Ji1f z9{oY>ward$e{Xmo7iDTMU&0UjUa=;`t}cRBHx2HOa7exNi``Kn0r!`N+{_AK#ww7h z&B2>%iP`IkYsG-dLy4wE$rYu6S}%m78ybB3$VicFf)~pS4pp&wHcq5%Ns)KyjeIlE z^MC3hc0_sSjoGcH)L&n0(K_^66(>4n5_|c)b35CrZ+uC(86#TlrtoNPF)c)@s}MD4re=2-GsQF2>e;qI@%#k(oxay!XY(%BbDte#qD z_E4@fi^lWTBw%gnrXo4*NTaMEALsy zO*5$db6Rb%%wy3;!pTFS9ot0|i(LyX&{lYSC9w2{m|Uf;eLP!i`v|d(3&7ME2V-W5 z_iVcjq#I_vQdh(~a+Y48w+32VMPT8rVDQE6#K>J%`0+Q@Deaw~@0xR~j?$%nL^q%a zHFH(E-kabK4uEU8n$C=X`z{0B)EIShx2gO27&YMuH2FZol??(s(AdL&X@&b5Lxy*N zOuA`Ir+c2A{LYvrLtuXbWk+5oT2U?AF>Q6uZ(U9zEP9=@4xaNA8nEjrvJoU4M8TZo>}z zSM0C-X?|Tx{I8=aZ#s*EV-Q-6m}_>$Ov zyT<5>HHzlr9bL$wM>tS_8SyL}{Q5Pe)+ox@w3NQZ6>B~#leZ={TsYvfr!PC3gh^}R z9yJCR?-g|o;Z`Mq`=^0%Ei#DSX)Urg8}LU%!;bZVeh(c=za#I?GukD_aCDSmx^03v z87Obx19iJ7eypi%-Ap;DsdMK?s++ahxj`%F{D3-)p}V*V{`r7$gFajQv&R$8@?`26 zVaD2qpQnRGpOA%8tIjB|E@3rXtM%fNw1K~~DBazybagjCBTox$J{wW4P-^43F~-<= z#te?Mf#0gyKv+%_jJqkJT4fRVHwEpDPLSpKDOonr=02~c-84n%#bE4T#F!p}vFojQ zveQbH&ElQRjS!+3Iy{zv{~dv?G>xV}ElO-pwcjptGO8BYey+NT->DlLsjgcRb(?;o z+w?EkDH3RyAZB;0cykgEcvTOf>;-M2?n#45OKu2#6_^?br73Jp!K#)mI~!dv0~%fz zjvMLbCL%K~A?w!y-c1JP92dL{L3^}^4j)C`{+`&@i~RJFNIKZ}Miou);_C^Q9XBrN zY;kAiQjhH;+rLsBHC}jVxnYW}R-@~P9;i!Ke3rV1E$SwHP51rp;>N{Vekf|$?{9GS zEVAJy$5TyIF7|`T@s($@EVtg6)i7Tt(AMk-3>q&ozOvvPr;$4V03ZNKL_t))e8zsR z?0LN+B~b0E*aH*Ac3ltizp}86(il4{wXyqJT2np?Wbp>b+)OYZD~fIW(VBV_g1RuH z@%Qag|4cLIBvN(kI%S{3$_EkD8uwKZC%S*9>Wbua1NNxjwK4s(spwazOwCn`I(Hh} z(t1|^b^#<`>7jqD#itfP^`J<<=|(>0^vtD@G0o;dJ|$AysgK(HiF^}hd}$KlF!*x7 z@08k0Xw;9od7Wb@ztba|$RW3=N#D~QSWcJvn7VEY#XTtF>7+)Uyoxb4Pn6jDsl<$G zr{3MRYMT^w(y=>bWEx6?-3GHudh#C(#>^E{qz=uZdJKdX*wE&!UgD`qy~GiVZQ`;{ zLXF=b@WV{Co!+VWk{qVfNSOB@foe_0Mvw1NzRLAzWv6|P6~7`!$AA%cENb)*NaQt7 zo}KbAZ#nVJXUC3J9lx|!bZwrr7q)|KPG`!l6U@jyV^LRG73tTIW5JvB)e zzw-hsz9vhzPx#Wmw*P5-h2W=T$2IDONz^@6==Pja`S};f z^6`|(jRoy9P~!7anx0pac0T0IPcAer`$w~`m9v9;hyFQPO+LRV0l(TkYKuyOsVN~5 z`+>i=t1elqdiXK5YDVDdX2GTMA`h|}+1kXIBhzWNtrfHXCu9E{YdL2n0yVE2@6l`6 z<~t}CAAo&VsWv`i+`+9@uO0E^L|S+Yvx(gMNzk%B5Z4Z9I~?d8MXVnrZ1@6*Yb?0e zOi-eU==h<){_Bd0lRn9_3*@>ZaPQ}lgAM~*szLgVgXFjYPCW+p8KsO~N!>6KTBn_1 zi3s3XK5|PO^vE*c`eWdiX-4uL3ovGOKu%Ah*-(ydQ7vG9R>85l0n9ro9QBH}%YMqT zx0HInI238+qVcLI|C2V#4A<+R#lbZ_O4qZBtAI62-7 z+NHPEo+-s2&{#R~Pq5S==N3d8+c2|8=NZJdHNf&6f;*`p%kGQRX#uA0LR>8l`?iY- zW@u-94BSK3JLcn6hJWR!0wH};$s*<(Yg-RdRB7i>zaPx2 z`{a{XWbI4PxwD`V@xg}i{_ozFw6x!jG$c5A5TKxdCX|}kDm&Bf1CK}4( zY590^*I~%hc0|@}kQ`Hp_}2;MO;>uQ>jd2ItvvVpC1{U@z+V%IepkqQ*QibIQwwcW zX1xa7YYRDCjQqJXkS;g%`~4z=i(ACZ@sM$q<*YfA#tb;dvA8cekkM7bRmoRx0F!&jMalmO+SXN$OXRffQf1E%K>g2<#6O6PU2CLdgwd7fz!Go3z1?V5%rvINEibTZ zPB3`kkQW&FNrFc*X{g5mhPKBtG-!%=XUBSW>?&){m4mnMGrZ`tuu*ZaH%f^4WPpKp z1mU$s_U9GEZ3Ws4Acw4gK3QwD{&GX_CS?B;ASC8sjx2gQx2 zD!WG0lx!=;{^*&_=Zs_titf8=-0gtqn**vB`a8~jsNB^Rnxa{v19B`K(V{96$3$R8c_k26ves7?tF6sATg;@Tkp^w(PLw!J z@Ia`*v;!<%2C^>ORv_%9z>ar-{zFhT>`%sbZ)N-9t(;!uAIH)#Sa`r` zl8Qg=oVy;`#9i-!o8Rrwhy(08(p# z$W;VcF-+58)MomAFm-FNpV`MQk%igr<4dG&A{L({MoAC0SG@x+AMY z&!WwV(7x(7+P%`z3A&(D&0OW=w%>Fv+RC)mj8Mj&8=yc@ zq4Vd2*2e;QjTgKh&oE`E1-%0pIvr-H5l%EYK-qSbCKvC5=u$U7=Pfpy^PXs+^B(kr zJiW^pPLulE39=0u7AbIG3&WFS1V=8(5r2cPRwvF}4&3}I>))-lM$58B|8!`-zcd@I zk$v10IJJ+A+)}okn`4+zr2!hJ%oZ%I0W)V3PAG!Lkj-eiZbjR}-#`-pHH}8cu7Rkp ztrC4~m}dV8%mHVao9zL1?LwS7(vX##N%BkrncPdkd2c6-`C!8pLrG5iBQJ9moteej zh+uBgQginaB5QX8grtd-C@*69125gAW%f3KMSI_()Iyk&i|4|BJbEJI^7w|XKR7tivm zvB-qSERO;ihX;acQQokXpKRJEge%*eE}#yL0Px=Hm0nRGGLplYs2|FjU=%}iWaW7=HCxJRJIH$%1K0NM5d znF|UlTgohDn=;BU-@H=hx}Sy_w#@(@+*xGNC*jZ{B9TQ|ZjMK}wGL&%9)Ja75&w<_ z{2UEJrFq4yMxx(jw#+6jL@tV;Fhxl)z<&x;4wt+nTqpCoc07^q!7N7WG8@{DHB9`yZ!|^KwnU`{m=Ai3|CgQMtB z;*tkMR!<;$R~w*UJ>lk&BL9>HShWmc!Ck@3p&-+q0QB`kJUk6ma4ohEZ^ll2wxP6N zWTDR<3o51A{|kO;|Jib+k~M9Z!UqVY)e%U23^?y3(DRL;DqkTrBoVNCeZch73_-^T zC&wb}AAwk=l|b!ji0vi;X4MgVUDLv-I|`m(w&@u~Q6`T@iGGGqZUO41g%Gpc5Wm+Z z+3SXsyiee$FJs?-1mo|r%$f>Pw-0iNH)5}kdghE)?Og0 zIK{NJsbSi)hlA;POw*w5LiMkUia$m8zj_wd82sBRFw*#$(g%JG%>c{2FG75zKukg5 zGeuCA%^=*^Lm=h^;`}(kkQM;Do&yvvDUei%p>Q3B@H!EZxBq6icYt9?A=Y0jXuiG> zdD$C7*7zxmDJjN@`aq|r=NfAgwE3ih@!zi1>eur?$UQxZpzk!ILA6O`_=DO%id3Ho zMA3DTN-h8zy;JRv-8p4}oqKEy7`rctYxF2wF4S=kw zf^+wRy!Z<#`5MXDp(wlOgM{rwNw^NUHbqpAXiIe;A&#(4_@}X3SZHK-*5~?ZEY$2j zb7`8Bqths ztqc=802f*T(EDK2%$ikZ&0arKuzP!v^V^w=yhLns6xc6{tgD_P)BYk%@HOnq(rtOF zO;b*lqCs6)AW*M1^P#g~^{oN2unF?Wod{>f0~Bfma>WhA%woCIfz`5e+VoAcbVj&X zKBL2DCq&GdG3hnP{r5ui-5DR<1Xbb|Vu|jA-k(90e+cyT3Ci8=1m1;-&aN@2XcvOL zYgGHTb6vEqk;7K+O>C7igh$T+9rJ;-drM%ShsY_>z|I1?(L1nugJ{b|biZ`b6YDU0 z*Au?$*`&<`Pte!16fatDS|@iQgRk(KA)1RmV%hOW%iQgPmx9Px5w4uON7?c^7TfX_ z$Tjmv^fU7GZf$eD)5F;*xTis03qkywYQ1)or9bb|y6`GXA4=7Felynj^NLQLi;ki7 zNH_K&y|FN`OQP_faDnU?CZ}j^20F1l#Eb0@H;66dBp8YH0CpGxZWDlmnjsGjV-EUD zI4xK7#nr<5y-+5NRFvaq8g0)RHeP}DrGaGszEU~&3j~+>W&RW>yCpZ@tn-Q&bReCw z6=mahz}9(5Eiet!Gz`O>j8tJelroeeBi0^yt+!>qk5*;`n~P7*kDlrT9DVeSBgYmWd;C*3&)7woE zLqVJ$!r&4NYpOFI?jlmOfrcJ41baL}+mR!7*I{4nt~a8|wqXO%mREwSCkt2=03w*N z{a41d9u_&@wD8DE(zViOg!t}sYx6c;_+curW0$gahLYu(DSSs*FG{kk+euo_oNIB9 zSgl`*Gw{!ODI}sk$TeGq`qRqEzu;q+<dVgazd4-OwYJoM-4T3N0>mZ}Mol;Qn58V*Bs{k%OI#k7wl7(lj%3K_#ggwi z%bpJa&6gA2XiC^hnY22|L?2h;qqT+q`;C&nH{#`=?c7do1p|_Vs{3p39m}xpqQLA7 z#7ZLsdR_xeY+`e&5tuLkl%Gzn1N_K-G)auSYc=ij)---GliIGaR}jOCQ~~cREaR&( zY(8z#=O|XG5n|rTMPu`DG_NEp*f7DPWo!`X<5NL)R}wiCCs=te8FNdb;rd6JKBrLq zhz1&;3V8ot!j7&6yq;p9eImfTMCH+H_E)V}C2LE9z{=Q+j)Tdl{{>|4Ae2#^K#o=f znKcIVkv5{U#))>66F$&N`08cmci)7kC5a4Nfw1(vl18mfhWCoSnhHDq67=+7C@@gS zqYA09cGFhY#qM;so@wu~+h$LkVi;XJD5KC)lTK|_Qalm$=GEf|RT0h+v6{@YqgS9Stf*tJ+pw2TwIg%zT-EKZ|e<#pxCiA>^pl7}oK5~(zOR|V-g3#J1 zjoaU8{GG{sgoV%b1MYVNwAWOT;yV(*$6#jK-_&r3dV?Z*~#$YmB7g{1h<9~{w~Pg-)|bJ#uW-LDEdBZ^9=O$H|Ak7Xv;!WJ2GC=iaC|&Vfk1|FA4wHlYqu{> zv)habgkDoY>TVEjdqlKUA8ce-7f(iD(Q@Rz{Z(s76mCy0A!LztIXKmC&TQmf^e6a`K(yaQ@E+jD5aH zV@@FSxNbOR`JrCeiaGwKz|X6K1=?$L_Fz2uMJW9spp`_@<_tlPG=iol6i1gto!l3= ze>BR{BT6a{B$*J3^7|>vqb4jP+X&=y2HH9S%}4IwR3ne+5;5JybzMVe`+#MH9%M)Eh}uErOTCK%iTwK*iV5^{|VLWD(db-G1wutT9IHoycumR7Jy0`t<|h7 zWRD%>D0~BT$FCrT@*z%0QmViar3Ow$I${H8_qV|J9Fd3zB>w4!)O$d(HBNNDgN8UN zuGZq|r8!~}=sTW@$F?Ksdk3*zd!%#Y0Q-LwcoiqGs-MX5|B3jI5s7IDaJV^ArRGF+ z-T+M;jH=%(Rv8s7weKc5dW9f2Y=JVq6=8`%28>=$^g6#`9Ij@lq0LBjdP8`o2uh*+ zpzAdSopB$eTxI5yOKJcA|txbTi3=5^U3Ut6+t+%3HRgT)d5*mSiTh?Axu zR$DF5I{>kH4S{DJMD{#I*m?qB?_9xEdl^s1vfA=RoPzElw^>Ep`XNc@!Ulb>h4zjW z#n!rtDBrJPD|%EW30OmLW}rVk^)&R_?C0J>gK^`wjt$J?4_Sa}NJSSLV97~h4%s0-7^gIf%{3Ma*Ii-I5 zWc*(#qM*?h9jNhJb&M9*e@P_sGRj|N364|+ygpQDgUfACwvBu3^6gz$${CqT(z60dgO^GU zcGQ^Wui;Z|zy&=8F8@W``3&*MdxZIWA*Q|r)n+$Rb`4Tddyy8-5ZqG+=~R8BxE4f@ z@1WtZFeQ7?QL&z`W-B zI)W`MuN{dWwSMEvR=`iRI({~F`!K^Q(F?4TYs8WCw>aJ|6|4OivC_JM&fE%|(T8Mm zdBoWRzzFsuyXR|gZdx5(rgfn_UcF7%u*1qJbBq|LyEC?J2=cr<@#<;BD||pVcNQJ^ zjCJF~tg9>o9a~4ZL;>W;{}GSKB4}zb^-E>r&KGTtI0ZQRD{<%Dz`oJIgSsKlNkw_0 z5Jqf6m~J4>s43LBmZ)!4MHSp4bgL3z{+YmCR-o>ZS9I-2(C!a`t=0skyOPXK0eO%h zJky=|-dD|Xka3z3bG-~s1*Pl$M7@`gAwgtY1VX;mh6+1jP@6~v8@+`eH5A8} z`)u{NEqeD9V0#+E^lXp@Wk3c-3%5*TIT_0^Ii9iD95K?u(dJu}Y@G(PStQ&tptN9l z8(KF#!J0fq^K5@hJf~{uzDKb1cN-QBbHSTW6-Ew4^l64PW)vCG*{1DSZ^OQSmEqjx zgqgSF0b9NgVJgo=UvxR_sqHCUExRMdVc)pOvR&V+)!N@o*Sj$7-N|ahB5k|jYuS=& zgEVj^3ttmtN7=B%B!eDi5w58Xv_71vGP7~XRV&x4qLyWY${&HM%|lWvzMwIv7oc$r zFe?sWLt%i$zfkIDAaCCy){X?>Z-K}`aY{d1gF1CO@SchYoj)N}Zv<+M3z*5VVvC(% zxuo{BoYGza44j{8$jK+fUuFnT4$(TaG3z|0<}NF= zPH8QCv=_pMY{H2hh`u)iwYVP8t!;uu{uPk-BKgMwL>2<_O#<`eMYb=i;&9oy!cez% zIN2h-$!T_HH1d@N+VYX1_!WksK3W?4vu^1}Y;R!b^uN#wdI?tR=E}Ws{2VP^Z!k#r@GR_b1#8RN3bTA5Mg7VKMBj^qo3r3=vo<&B5(S#x1 zga?KJM*1@)j|I9~S8z%}qIE-TMrf?f_;JsqlyJgzDJac;fYoLg=z&4vKn0fnRJ58d zL&v0l#JX&=9NXrxb*j0xhIh5B&>`BYxl$~jP_3umKbGv^F;t9z8|)sv$i4 zoai~XMBg}$JY=haW9fu#!xa^1O=@y`Qez7NI`$)t9II%#H^B@Sk-txC9sOHdTZfCj z+ehh`&1g*z1AU|_>j^EzDp^pt?^odm-+1dQ!b#y%m=>sR(R-s=CJ9SmqZFDdx~uMtym?Y-f~A-i7S;p@dvp7YJ?&)3<~(I z$a{yv#RE_eeZW>q9?&P_MBX?9d)7qxm!ygwLmY|^m3&f;~;fQv(jmi>j4 zbJQ?jud&-Jwy-%(x7nO(S*Gp#38H^Cfb{IfR%J_D3(slmPD6_y+_9kD4y~@_VU-=n z#y`VE#S|8m`H9Vn*|{z)62&QfxCxi;*dTS7A+`Mw3uOtu%qOaNfT+-KY<@q&wpJs= zOu8iG_L^`}7l0|P1g3ouZsZJ{ngM)lI%=O7&|O*~98kbMtw@4r5;$wbdqIHb{E0R^ zAUYI|wEivNdjcFWP;k^ehuO1zuD$g=!LfZo&;#UWu9jArA~%~0q`VR-$p}=7a7n7d zd4WW|1|hZdMS8!AFeRBVJRef4_CU9~lJaY!sLgtUwb3ZY>mmQlRI;I~AtwV!MjjBp zT9oBVu!dtBwXDu!*!o+raRr3zP{Mf*otPB>03ZNKL_t(V5kgjj>|Fq|-%TVwow-4C z;f$_`$0L-o*HOmO4`AMcKW6g`HUmTQ=nbb7E_x^Qz+yZ*S}^UW#(PgS7CWcm-(SG9 zmy+dMm-N{L(TfTy_omqgg}l0fdOH=2Ly2Sr9|F@KLCvZND&Ge*{7;LDc0m=m4vgL_ zK~-pq#(0Is(Pd&lNmN6ZBKdU#U=M<0?ErKn!p8(rRwz)?B!&C4?O1)TN$x8ZY;22s z{G{kZnWEJjaU2^bmir*o3tb?0$pms7tsvIC5!zZ`iLLn+w4-u=t;0OD9+AVk)q1x6 zHx%_;%ha`ZnL5@NtuM7j_O=vmwVrjp&!AgAQ4qJ>q?wlt0AN6$zoYvfqFeK*{*fyThW1q$%^TOmOcp%zeuqDd&<0fD)R7&AdfeK z?5ai(aKoem%OV2k_7v z!8HKE(@n%-G3T$zkbe^J$sm!n-iFM2tEBH_d3N@wYJ+#940WNRVZ`6J+tTaV?W(kC8*)^suz`pRW{R9x#QMil zttSo8*4hlVs#noE$q-H-3F7k%)ZBw?9^SghYg_+@gH<@FxR*j1=d^82x;XtBZWvI< z#LmwN^VyK5WFReWAgW1UQR97C)t#*|y%9^`SKvO2(YkU=c+tNi9om3I^+qoB6nIh? zK|m>luS0>_ZX}AWPgwpv!HB+uF_WW1Qy~8(;5|XWDc6y+0$FC{v1r+}Tr*!I zhTsP*0lp$Dq8XgF2-cqg7&Z-wmXoUfM^W|{rP^*Fquex9?n6oKiX_~zny79V(E2Kf zzn%hgk0Wrq2^`uBd3cH;1-2W!&Lr-+UbtsLfl*OffBsL)rfZDLW*{6WjrjU6LcW05 z_ccnv6T-J$nG<)55BdygLr8VbHqYRVvqiTqwda*3MFigb-^Oz`Ux~> z!=M}tk9;*o@3wGKf5zk}C9j?n-^dY|e@MBvojw$ecLUIjJ_ojoCD4q2i{{eZGb2aG zx_9}J0nT}ZJkb_(Burc(hlV!DCZ+7%Ub1Vw*?x%h(^XGWrtX@QYlnbfAQV2s`^ z*eAbGwP^(Vf}HSZRg-q?1KgL!d}=c5b|*v!tzrG>Bv|$-;xNC7W4)JhoCyOf?>Wu! zOSM(|oYo<^Z1G~|&A+wPCLgmg8@YHRlgC^zxJL@=kTB71V}yT&3fwxR$Y+Yps6E6q zUoRutQw~vD177MVGS3crSYFcGo1?}Zpd*O2+kUMdWoaGw8g%c*XdP`w*7I6m4O}eN z_z=>Q%7`R5A@muG_;aU0DLw`kZ;IgW&$4b1%c=q9qjEOQZS zNjzDZ>B##7nNngcV`o*%c>9G_^l&j690Oxz8B_W1b%C8nP4f1zncJLgX6c$XWBWsc zuE!yM`%9$5H|C*vwQjIUTVG3SHq)3B8i^i01$b=`K)NC+(*MKdB==sGPgoJ){bNL$X9`S1mRWf8;SaIQ_nL{L z-%xgpeFauYFS6u2S&g=6eW0b5^+&XP9LzG$Wd7-+`Co@XN@vcZSt+Da{EUErLR zAU-F7OVtCZFjn!W;)K=hg^AMo~Mp;3P`j`e5k?;#jd2_W=6Lih}UuT7XP#VeWn#YvBv zZ}82nC{v#UdtMTL7zjG$8cWJ|ff1vT186f?pXZ6n&D{YwjUx}9iK z{dzj%KxH#JO|=<`O$=%`m~hz}5M0TeSzGIHAI8{=APl@TEr7AsJ03}e5c ztb!NJ4DD5^RhR2tYzylsYQbGF9swEYdB`>|n`}ewfidd@lKVoyN@WO#-6my^A#CP$K@uSGR7=-5YZD{6Mi)OhDR-wIxcJC3u-oVv*qIh30 zxcf`gcYmXmFi`ZQ>%bR(u>3n%*z?1Th|M8x?Y7rN$o&Q4@CUA53nZqZ$lF=~G7jPE zOhwP_B>x)@dPESjSDNPd)mqQ{+rg)fGQ3Q4wY+zj`qdbal#U{w?JVw-w0QQ{5W7i4 zog#YjkZ{^rR1+>J_x4k5q~=(l{+lCoY(EfB2i$SVptL&#$s<90k_E=B6qwZ-@a!mn z^}7VC?HBk#2>%X7jM0F}L4a75(CsBqpa7lqXZ7O<8+~?@adeq8RxhI{Y=g$g7z^`7 zYWh8mG481bo~NbmMB!Vz!P@VutohxLeXjwxp3EZSSdKMjs8(77trl8#O0aGeVfRKR z9zJAHo*C6MAz-4Iesnh#-AXUZ6HQG=*Po}gZ@);DaVAv>4g0|5Y3uNw5bkC)K`(? zKbYN!dCnP-nS+pfBmpNX;P8SG{a{5Ys}oq(*~+HjxCRQCcao(MSiJ7U!_h%d_u zW>x|0bkL@^+%+NANChsltjGqtqrDl6F!MTblD_mdI9zMhU)8CG&3(N z`Ic)VjiRm4|S2233iFzfKVliVOc6;*?o+y zjtMO}B&ysiF@9HV(<%KQu`QTr*>;Z5wxGOdjJ{1YG+e2#4y5cJ495QiDiue%`dlea zMI1X6KLb?V=zmR z7N8wIN-w*sEY}>=ADuy8xeIzpZ;{$FK_+x^Yx^t`(0vR@v7*3VmkI~w1Fm!xI6e}< znogK;pWr)#^g1juWQpj_rM1rcTC<+3Wz$}fEqCpbZ>!yE9uB%}6_HV|n3v38&Pmo1 z9gdLvMd8{^r4|(9d8iUOtML`hXHSD0wmrP?*Cn^ z6AJ*>-DJ7_Tjc6kfN6(7Y6J>|M1fTP8zF5P;@8256Uz`sO%x1n4AkSIMT1LNuI^QB zH0Yi2du(0OZ<9>Ew@_OHK8f_Xgz~sK)7WbQQ&TimSW4LWs6cvikVexGi-!YsYY3S5 zmq6=#BEz18j0qRn)5*b~<9@>4L6qC)oc+)93xton(OB3SjQsnxQFFIISf=pU1*~4b zK&(9u;7~R}w^2y-#u1*sjNZW0KL#`uDJWf=(K9XCEWxLxo2jfcT$yvP-wA+2)-w(ms*dJkAJYw7mzyZe) zXZA+?-wGhVZ$$rGWj*0KV)_-t;aw26O=8Tf29VhrW!!zh8LvggxQTRpA+V}5LPS}_ zrNsrd1PZh(s`*m|kY4ABN=ASLFCcV_B&dD}<)3~45AJI!7|GOUBVxS|hEAL*T%$VC z@xwxUMgzSm1+eaz@NQ4dw}&8iU(9-PHRhdrwQhJ;xZ87rqd|!K-w=*VB6=`OWJYyM z%2j0b>>9wLSpfg6LtK7E!Q6a6WgiPRPGCHn0+iKXsm#47N28Ve8!UXhHRH%30-qO( z6xzZPRMx@;eFS@lF}w;^+M_;N&+8jH^cl(77l5Zb8R}7KFb6I{@b3ch<%>qQdm!8A z0>1BuaNx93Gut2!egb%Xg205?!tHMYM1K-Ee-Y(ual}1a6qU$eDtI;r!f)rwvjwK! z{|#hQG|2pH#A}rZ-`+=~atks>Jp^iZRAkvsL!d_il$q}VhCL?eIZ9yTIL3@%!B!&} zuWuLdti@K9iK0iW79D?9_(KVS+NlJqJ|aD7ujtbdQH$S;JZMYcw@z@yafaRdkTTjJ z)|slgVwW7fZlyi9?sA0p`GEZIAs+7ubg3ku=UlB0pRw%oYl<3K-cU7mn170nAbsUL zQM-;rPvQ+orL792$cffNIo_VfkLI>m3rgazXU% z9;}P`vJRZf`fx>-$ybEWB{3iGs`$z+0GCaOi5C$|#VXp-MR@aSp)r$%&Ro$r{-mXr zKPL_@s-#G?=ma;G2TKusx@t(t68Llh`Fmf%*7v%RrBG3B$Gyy@wp?=#LEJ0 zM}nM4LZ0)H=xTdZCx#=odL=aY5m4B5fp!N0M<;6VDErg((+F+L*jnJzxRK7k-(FDG zf$NA>J|ae30q8l&f?cB(SKBQ#;RJw3Z@@@*)ZMBAeEtt9=_1kbyUZt|2r~ju-6*5M zrK+OHl|&(_NCWy3y(%pdz1)zL&LAtM2tQwp5_Su@#tgx@wk#dJ|HzTRKQOYesaH)U zz44<+tG*!ZpNtJ}7P@5Krzb?CvWRY+BiS<;`N)36v;&CUq5xVi5oyvM;loS7VVePb zqCnj53v>wpS=bfCeFmV{KS<3+115#ATniW3v>K(xzXBhM0Wbaw!TSng!Y<_Z9RM~L z7D+2&Nvqok4+bdRf4(8L_mJ%O7CCwiq+%zLZ*y5v7l@2q%iJlOrSw*<<63GfwIs;m z)(j&y8gjHg(cO|{xUCZ1`?knVKVa)9P;wHYXBN_vKBz}m7O6cMFslqprMke?s%zO% zU#w%35SE7lw%GtM@hM353WVk10`6H1D?YHqe9)BGkd$XNv<9~!j`Je%4JYh18sSP; zgn=zBdD@t9>sP>-jQ}^o5Kp%wikJjA+8^;}58>2!mO*0>#|=ctYyh(5lgPM32-9y9 zj-QTd`xuML&dPzK9YNo&MArTnC@a?>R=8!D&7TvNNHefbOTcoC1=dHYw(U=67_#a* z0k#A2n+w=`jlh?1fRuM4le0w*@3JK6EA#15tZgH}%6~?3%`~M)tuUcVHAM%TBW~PA zbfz)U#Wx7;7YekvDp2aZhK!{Skp9SXGMpT>b}0RK6_Bw348MA^?Du1-f1e@I%fh{{ zHTewyx{+(ZHw(GNW01Uw08hrUbnBv}W;{dv%>w>w$Pj;Hp^+k77vGCJLUv406N{=(bcKbTHxA za|)MzCK@~ua9IP9oI-@F=K<{PEztV}(4#p>-6Bzq8;&%nH&9F^q0`qa6<6nv(;n?` z>WfbB?uQ+Aj8NbxD>S6MK=OpCOQOnlXms=sazG5|f&GNl2$9(XM9O^@F^>Q*>?87f z4dLw8h~rivKC~$sSXg1&Sp&Sv5>zk%ryl@ZvYRlfEvYr`L{rlVOXXpy;4V7K1pPbS zbab`M+`FMD#+%M4WB+EC=GP%1*iTuJZ z!-T&sVjk2{OU+%(Kc@gM@1(egcU}%y?<~dRKw|bYblSu)FjnNxUf_Z^K`xX8hVrcU zrLZnIoq5L_OYTq85>S%ipf$gH*+*5z2z zd7!8=a|I)QAkN4ktWG92i&i*dn?PnKK+jGB-^vjtZ$@hSSV8VC#H6<%4=1BU=LOj} z1Z8?3kzNN$e_L(lM*a^RAM1*BZK$?ponvcNUA89IV{4wDi1#yraZ3S~K0ak?e(v)EcYlk|eZcG$Vt zZgf~kMwBxeSH7d#wO&!wW}yBDfIL$*{LAO#k#BkgGyS-D*dr#-h1INXD}Lju`nPE?$Wpa14_4c>Hs$hcbsUk1ui!|xqzQL1@z{gt(uedLqFi3Pn8tcZfqDv#N zS3886gAv1bA=LZ<(wYb#42y7t}$;Ij&i{Zp=x2_ z-M+$^8(1&M5Zz~x$ldphLw7ROSpn+TDNxae3A&-d%R+%)PX!%N518%=tX>aLPzl{V zs;PD@QH3Ugy8BhkiVNNZ06Ejfa!Q#cv!Uy%Z~BMxy#NIWHQ zaT0>}et?`c0ztVfYkG)2>|*2`6>?Pb7b`AK^nt6aed2^`R}|?oRHV&1fYH4GA5JD3 z>P^_%lhDVL!1E45jl96o<3$3Ciu5fAwD&2Q^L803=QJ59djZcj1GG01SlV8s2=HVV^5E}?dmbt^`;-`KCjEB#(9ni; zu9%L7%MjkRCmhfPa7mWH`>iPdtVjykh0|i6oVL{D-oMq!^TzK-SK&|XTjIz(iqNu- z4Q8(~&Er)Jr(IRVUhJj=k8L12m}39EZYk<%MF1N05UF=+*39G^T3Q|wsK0_KHePtl zcA&m7A{WOCHM)S1?FI698p`Y2L~T|emZ%KsM7Ge2k{Wh4R&X*)!=o)0M!(F3im|4Y zOC~*eG(y%?QfF=uB;GNMgB`%E)!noQR#o{-F4X##JzvmC1=dgBO@TBQ+#V-QZ2H6-LQWXsX}AQte8Dlu=Xu{R13xWA?OA))sMOwj#)=Vp#R_64W`c+U!lDB8|Kg^K!anzo0qB`8xZ~o0|w3_bbQ5p zFP6FIcg$~M1j)&aG6^IDGO^oWjgzrKYCzyO1sz}L1i!?TwRrp5;+L#etatt-%*;=GY%9=v8gu?8WU^d=RQ*}ah^5wP)(pPQSu!|@ErOki zJBExay17Z?ck^Jf#1WUBt#}`%^s=K;$LC6^_lW0jXPKG`XYp@reu^_#dXH$rI!MO- zmJbFf-ECtzrf5k0*2`FG-xV|X4xGLxJa^R$E7L^fhF|F9PM>ehstf_&9W-X~a6Oqn;v z-F(ssD3xde(x$Upx+R?TV;~Fj5RU-y;?6QOy1?*_7|W=Eh5w;1)2Mrm6HQt^DpYOt-0Z zYW*7~{O*&(>HXQ%{|^!{T;;c6D&41({Crh-+%}TGE0NPh**TW#x|Pp~yCIg{rap2D ze+e`3OO-WyAQcsoWh_(GbF2^6GKKV3&JzGJ>pc^*-)~<1%(m%WC#`vT*85jL9SRZk z4<-6z4N1@sOfhGLpCkx-7n$C4CJfz78nBCzIEtzFb>=;ek)OLbPV{bLvOXmVPXi5a zuh@PJG-#yNPoGpXKeu{%iE6{siVfd@)}|>&5uw>=!HXXa4eRYX-*yTL?%Fd$hVEN@ zzG_QYdbGBPO7ie3zlVM~JzCdS>B37>t@-p3!ZrUOb_WveDFm*YB7Cb9@%x!yl5)HC;8#0Udb}mM6CW(iykPn?w`s$atl;I-fm*o~Z4UvZ->V*L2aSyb?fjpS zOudEQrhu20Q_QYu&~mP5r3TR1_pD~AXyF}I-Cv)z-CT#xeHPBMjQH%|YF34M&XaiS zI~BxE9D?|1=O8-Pk+pu1+NoPqAM~@jsR`6k(ccqEXEj#pTvqWZ5?px|I67K+?+S3z zkCqp7BNdH+&%nR{GcR?Taw(_?+y-FH?ED98;fXE37?~TQ%Z8)oBlbF`pPG3KJb32&A-9J#<(x`#n&) z0jOs^S8wLaniiO1Y@ex$-`fGpQVAW#L1*Vw%G8IEagA_#1WU0TEJM$e)QwcITZT;)z{L6a`1{4XBztElYl2^u?qblw!URnM_DSOiL#1(}&!eQUo+&oFj6 zxufPe-jH7j_16+l8pT}c5K;YNB;7wVb0^_3^O#;6;_KgmUOZ>b(BEjM_=Ehqjgjt+m)lO>(M`BfnM*y8yGxC=e`Z3*Sz75Y1 zaQ{Yzz=bt^=F}a*hvI5Sf3|j5pl1&^_3W&X7S+ar4!I8L;#j5UKUzN23nuopLpjTc zPAta!wj$x^mqeM06YWT16uH9Gjk3P#sgCS8&XChuIx#)g(lN2DPt8|mn1*d9ZG-0{$X+kuzM7{z~ZY^Bp|BFn2& zsR88H2$GW()h(Pq-4y)ApOzAWw5n?akIRc>o5@^wEOVEAmj4>=*W}wq>t1Gk@C{4S zEvCy4h)O&ps(GF`?^fcqmkdWfB#Brp=F)aCgG-Pk9aK%+!uH{JgoJXSNmUq|_Y+4R zW6BoB(zm3@v%AK*Hw$w8g2fN7)L)^F@fZ5r*!X0lAyrBC4YqvaGINQS#7(0>_hy5N z^&+mmin;1pvDpt9x!g|7f;J>|W_XB*5bAtMP;d?F-b;#OH7qqAWaW6gF`Y&RYOisO z4asc(Da~|Z7}LlBBSL{FzP zZCT8eaG1Ht@5DnZ{YQU&m2Qjun!z?3?3k!u)XDq;oIO?K{8ce^OOSbSSLn}qgr2*g z1$Pj2y8|??DpKV;k^}FEmLw^%}V@ zI=!~Y&E}p&WLC4Z?1wLxcS{f4@JGm~he%!&@<*v|-!A9!$V_v(5B!IySMCn6k<%F$@M!A9h4}b&Df)My$kk*+> zcG6JQTJg|cd95uw0BUOj|1|?97h}p7&4_G7I{lQ|YIWgH9!XyF4`PeFC;x_-)@~?d zZOI=z`+2h1B86Ss^nzoxJE3|gF!B-bbue&#y2{HLkcWp|^*=QJvC~vHA0^H1fYRE7 z_Ww(?<|AX~Rzja>*l{OeUlmtP*-aGN8G7pp@r`MQdyg{W4-s>;GxLgDq_=;bI)2Ei z8nut@A~fpF^wl)Tb&n)rEy>bPBGH>1uKd~I`|E_$1Ayj^#nk)I75Bu8TxYxZ^+-I>VjbbD znMB*7h$h|yauihzt7^4fSJhfmNhf^Anz_Hyf}mh)t7P*3mzgkP0-?|Mz*EC$F^k!^ znrTsMM)~WEj$=uujb{!20=jq;wAl>R(z{jn%vbxVAavGfvID1+t@7UI#bkBRs0-7p z=Op(W=2v6D@dH7X89FM3kiN#%uzW6NHxTML8F(I{nAHR*GJ~kcL{Rm|pvI$=r&P60 zzuW3$4mN0b$)THDg!9a2>b0IF^^o$Kzx~eKc+c4#z*u)qv_QP!eT&)bpT~xV!YqAC za;*i+>ssWzY)-z|j_lqEHay~cLm54b}el`qdBrUY|{TUvfiw%YLE6NuZP2a-*UFe zgVbitXKm*LipoCLlukao?4=J+qggZb2X?I_WXVcc^p8-XCnSN}Np3|5E&i3MRWYKT z&%m5PsqT8<>ujX&*AX(T14bSO73>R?|Bopu2l1KdVv@fxQml>e$7qALors!`RQiyq zX5CKX7*T!LgoTS4wt}6j2jKMF4MU%Vug^2ID5L1AX{=p-f-c^yJT}2{t_IMoPmNuh z*?3Qvh%K*VA3tPz^%}IGH)G&9(&fdW<({gxo}%imR^3_8+SlW(Z8J^nqH*khSy%k8 z^26qusT6dFr0hsz20nCX&2gpy4r5XomcA)03!>P`w4zb%wAmuv6Uc*x~^FR{*j1#rAsO(tvHQ`8=6T@MJZc zo_QP@q&m6?X+SmB9EpTszcM{JWTa<*N6!Asm^BSHY@TPQ^|7|%QME4@sU`<1-i}bB zt>CmBOi3ZGJ_rf0r#`z{V>e@T9;TrKp;yp20b25ws{=eQuoQmvQ8KBHqHysV!Z-TVg~c3 z>_l!fxWm_~VZo}!MnW_GMw*b_)#O+o9?oQpzNzT&Ks9taG;A`X$4bKKfS_i8fjmpN#=Q!qV_DPa&$d79FSIHfA$ceeHPoNFH)>0Hv4O`nYOcm+At8>z_> zLZ(@)ILnV4-=6gp@MtZ3JCxm-fh5&_A+GVBX=g#E=lO_3d#iM6K(fBIn(%m-6Cb=*>U3UZjTY8DVp9VE#412ULEF+kEg|O}sW9&^Mp^IQ{|lv+*bKrcerZQx-zQ0a=LS4}`QvVad{Q+z#x@bxYSUp!*n9PRn)KKvZq@$2Bv zUmY|wX_@lcc0}hdt7e%Z=__X_-CF_le$05cnfY)Qksm&bw5Tgm>W)Z(O;(QW0UhdM z@mn9l;YAj2z82J4Al~L1K;^a8uBa;fY6|h?OT>e36P4{tvcH^gnfWAzw~Ksri@EM2 z;`~L3Cqyt^o+sL)qj6eU6kZmeTUQDOb|Ks2HdWSI1O_e)A*|J{Z>Tr`xI4v z2WsvDoxce_7Opb#SK$0JMb(n&dZL!vo^4sn_XhRp44lXh{Cbtp`&-b)1%xklLt}0b zz6k(IHwE_m0^Rd7>45`E4Q~kglwfIe&CtDhmVfMOrkU};JnM( zB&~(qUkrNMjIi{IM^QaU`t3EESPHn3kI?rvFgqF4`x#8`XCjrmiB#y$rdYU|3Pr74 z{1F;i1$NIgc!x@h=Bpt5%LC|>jpE$A?C{M(M$5lb%PvhO3hQG{@-J@dj}nVUBR-~3HXc&)&|!v{Hda}^DI+ESfo>s5B%@oU%_^>95pTTvFQ_IJ`fUPh;j`9?z|Bmvd-|8idHv10)IWw;&=jE@o=~ zH)wx2(Xh-GZLUK~Yyq{{1RDB+F>e_2=oTVtx)4=s4ti2l@pLfLwpPT?bAgYwRcTkA z==39@!gpLLu-}oFIsXfKFwmvTapGOR&$!l>sO@3J#L}wgufiUBLO6DeQ29K|#YmyX zw?&GU7t=IJO#5=oePW37K89?m1=_pN^4gWq0{g_@wIh4mCo>HBvZ!)0CLQFQen!S|Y`UiZ|!JaD@>p9bPJ*@8{7^MSXOs z7E@$@Mrg92?Jt7!nL*DsN6y_h+2h)0KLuP$5bab)ye9cXZ&x76*Pf7NDd^xIjLA2M zBYp)M*Rcp+1$v&BsqkUu!EsEzBOIJ8;@RVo%o9V%+rN#dSSnG?GoV#xMXp2%rd1cy z?xyGuzbh>$;nyN%jOJ>={stEa5tEtUG-PhkLZsD3m4|1EH?CyelWJ;xf1)4sNENZA z{XXjVGJtwkbNEyj#hPN)uI>x%@JhAmIUu~J<(dB}73gj0v%@$X9^_pr?bz{E6eSy| zRw}JFJRI8KmFm(~z>vwn>p{?FtJKy@v-VshPr{iI@q!m41Rqv1_lkj>iiR0I z!l#OafzsVXVAy5A!GXzec#Nn@gKz=`X8fL4AH^@L@z^#{+tSlm}pICH*oT1 z!KqVZdrc;rBh~7e`4)Y~seZn!x^02=d{?Xg#-m1S4|FiFEHLh0i%gp>U7BQZG*U658tdxvL{VQEndNiL z&C@w(1~IK6D^t^M0W86Yj=L~+qxYsI$i_6 znC_r|ZXX&fb_i{lx&<)`^iXQvv|i07`<2e6fqp&&mPX*YOTm@$fLiAP_AFM~a2NDr zh^qx7d^)a#u^ZZmZM>c|y%5ob+`yIHpokhu@AoS=`Vw3(8C*4zxb+TDyKbQIZf!ezSp=}rt@E3ICPU85Tb?ZjwVVXT1{Kptjk2Ro&t3m&JPVzWJ zB=v=nDRBa=K@`>qH0rj>x;UoY(JaHpuuM9xCO9k8nIys5{-oJk62faRm5w0|`wu$1 zA9-izkbRuYcFPHP35jGg6f>G6mZ(m z%b^Z6FYNI68$=5tn0BuRG6l0en^o-R{-jaelsFM|eKY7z3DDb?jA1QIjqjGFlYL*z z;MA!A3Q6*D%sGSbAs*U?sSb>`cn}P{%>p}l7|?B)MPx;b6oy`y?el(`>+`05A{#%+ zL;Pt#>%lJUt2SQ;(&S69>+3;tLQ!%CXyjhv9>dw`G?Sg5yNGH3%JA|6%)>(2w2UMt zu(jiCY3{m9+q)*Vq&WS@SjjtqIA*d^i^U4*uiAF3YIBcm`AKAF?}RR1K)kOG)0Elb z%z7(so5pPBw-U*mnfYUL#k_wk`c(CElOcZUlR@>{Fvm6+>eHiJMLV<+d{^Ay_W(xa zg`|TnGQR(kg!LxJLPvA~DwSd0%#QEig`mKp!-9P=ogFi^C!xR_ z;6N49RtCDez1n=e)V2zQy;s`R8&e!T{{>-VaiwuxJ+$8LQCcg|)GEyP){4oH$#Kmk z*NqwOx(oNSNm*jKL!@$@kD#8_l*R{x78SNMiIlQ-5seeE+L6%rxN4u~mgbjGo_v*L zM<>H|hP#yNxY%-E(D@kAlBeJqjg{sHf>(}H4*di)IRyHz91!&Z>J!l5|CBmr14W)T zocow-v-TG+p@s40*JQ0W4R#`vE5q=YAXev8M+$DN`2@pI1__r`HAV6{3 zfEMj$$OzY_j|;RB{Y4kFRNdH#aQR=M*>{K^%_knZk@!V_aGfrY`&HSAn9T0r9ptXw z%jW01B$HJD%nvY+7lKCwDTNj@A>Usytl6Kq z`tRrf>b4|+LLLzU0u&jpDE`iDb;(xPA&Y>PA!Liswc2#DwZ}Wd?ki&K{z?JHM_wWEx#D(Amw-|h?vJtLG>tK4e2|#LX(BuS z61Pcy$CquKc}RB5C%$okxqJ;mwP?kl?aHVB^z#qb{W5sAHOrTZ$^F#jH{}f8MGN&=Zs=?n z)2l*k8ca4Obr3t#KY}YYR&%d%am>R*(3;ex(zR&HI<=`dWfnO9?eQvo5ow z=cWRE>RTE$4BUT_r6-As_75zIty2yBY>}%o_(=nihzE{u{ldV2t0e<{MfSRUbB*ZO z;jlZ~kv^yc8_^8j!EM$%cuQ^maJEHL9i2GVhYJe{V-h_KI;%9GqH;7KDI>(pz3n>B zd%EtArCs+_4RP8oQ*Jd#X?hillmSY`--7>IuC#Ho@|S+44r`UZxn|UiXWaP<6uZK5 zb00~7y(btx@{8$Wo8;mgf42FRaMG3D*PpR82$Mt0^rR4$2ZLI_V1+6h<=pGr3C>$T#%> z1^knn+=9og*;Zd2>8a-aD$CObsciKr_1H=LB%CBVg{9O~=2=Ay6~8UisGq~F(pYA6 zfLX_oHf=5E4+9mO228qUwAiHpTcwLpo<*29l%!!B=BCSq>y9K-Y8RQXOl;c5uy5%! z_LXQ%?$SJD;zz(a>Ou}CfOoY5f^!lLa~RbQF=p%|T=<1BumCVIiKs_$(1}mX4Q??8 z{z|CbNV(x)#f+k=vm;?k?jSv%jl3HNj6ZV0kfqH+o0hJ3%lhYUuy$~?)r}p&G(((q zK5+|HF>c0v;>_FbIK!`q?7c4(+Si!6r`fD}!2t`0!HxX@w@oOV9;wPhvw@biREj2x z%e@`z*=Bdx0;|s^%wwkfe+Nf!^U1aMVl17~f#|9E@T+LkN0-^CYL@E7=W?ohL zv$o$Z&gAzVUSivGEg{!dqVI|*eR+fN<8W|TIp!5**(^LuX6RVQS$CP8?H6HY-0@^d zcjChrttR#o{d%9_pQ{?Pv?)u!azsP^u$;Y%B5yp|t`a|Lk2Z(ORfWq1_nuil_E(~tp+Ty^! zKuiv%`~z4nbYW?KoTbLk!ka^xhs-t7t-31@{}ifI8OXR&wQC{}v4gnRO5#Vgh+oep zs#u;8HVD!r*`r0{{7&pj!Mz7WJEsyYFHfkH2s+tUseM&HhxPH%?R^gYvspgHnk(FSr>FXK`9|Caov(?!}1dv_YoQs2Ys`bWKOD|+bv}NB~|e3Mu087+35Wr ziRx|rs=p=k)`2Yj9}>4YXXJ3AS^HJ{UQ~VF2lm(Tsts4E<|*#k z)?12U7lq79ZP4L=HQ)JpilMUfV}#4VG=rd0=`Zr?&1RU-;A9`N2w%D-PC-WX+R*h`C+mlb=*f|~pUN$qdGt4*ua3`iHWZxifa zSSr9vD>ra{!t^GU0_J*Nue{dwxeoiHqWVwtR)3ua>N$Sv?HB;>{TGf`siSL;WO2NL zL8NB~DpoB4{dAnTQG4N$DI$lrvCM46vY@}nh(5x7W)jC<0slM*d~+hvjfD2VhOqlftSlW#WFrlY?PS_`L zHu}W$o&|aGFQoGb%YRH$M!a(SH(+k2+-S1O@&n*}I}BQOGHCq;)7wX$3@<|T2#mmu zjA3^{16wHvcUD;ws-|iKn30#rUFnEZx3|xCys=|`DqtwAI%`Na(!SH#MvNnyJ6631 z>1rS+6}BY1=?L+`CL_{r*W1#ej)^BHd=5Rp+y;JrySspH;5k8 zBTgP5+A_-3m=%upN@CPp1uWUDTCS*4$aqEfAxbSXf!{b5mj_wOFbfzwiM%TiO$-x_ zT}1lz9HrLP34Nkmo!3No)f1uJmx#uUBRpS1Xu6bWu%{TiqfV7=n~0m&QXW=`WN;J9 z+eKxP3(0i@lE0BlWBLZ!S2G;+OJnZRM5*pPlCfn1uqMcdp<$p+6;(mjcCBvh#r3dJ zRbbNxF-@pPGIbU?V~3EtC|q4%4RU;o)ht>_eE*2>pS@h3&JNAFPH6Lmr7YV$%x>vX zg;Rc=G+T92nxTsMgQZTJKyy1)oGzb@^L0&j-Y+-4CK=dSosFGci%5dsfu?j+S~nAD zwFdfgO|qL;L5sm^QCO|M2sSmKrTICn+`!7@4ET$%Jm}{j8wM}Lndz)xP7ed56 zW+^8Wa>AvswL(;r^wV0hWolY4@}z3%tgzqghQ7?D`ffYyf<*PsmbBi@Y-BGMVVlu& ztV|BjRe=sx%_EGQ0qwh-Fm(p$nBjzLd0;sl2>O92VHwlKH^RAwF_y1{F8!Ho*KC2P zwj+RKl*pj!fX)YLDWx$V700J3=C4)``&Vg_1y1Ht`fHPw<#QN6Cb>HE3qu9_s`UNO zn(Kog(*}{u>Cbd-BDj88@K+D5j7lI=;Vn5|>=9FQu%Uc&4St$Im|&r=?}|r5$gXV( zWPPnRIYo8QdDyle$R17;RBs~)&+c%f4d78#43DY`9=BLI>`(B#Q$Urrtob5c{b`_! zGtrF2-GJ!Po;_Dfwd(JnOdW}0>VdADhh|)(I%1fyP{Z+BCb<55;i5r})GmyMzF)06I18|imGZSwg#W47F+{n>cuUnjC>{+F zPbWHd*;vNL;h;j(iHFs7CBCAOKYheQ^Ad#yLp%NtT44cch3^RO5{cIC06pIVDzzG@ z9<2C1Ua8V6rJ1L}{W=njpA+n#xXfo4x0ToXKT1UC~RKm4$ACQ-~owc(IsjjZA zNE}AE_5*Y0Ud#=eiX1FSVwRE2IR&{eLHSXF@|0!DqjnIyDy~gxVBbVmvbA+p(K)iQEsB*}XM`oY7m289s~6UmwVvzDd%r1xd+~#My>J zQeqwRIfIzu`^lUSfrQr(;}sS2TO^w`F3jBq>O4xd?t)C7*}vLK)!r&K>wz~NCSJ8r zU{VT!|7?|Rj#vN3_r;lX?Q;ZaZ$s&G-GTHeGB^EqitW)6oO6gj+*x!^Fy~)5}%Y^k%V0Z`518I_K0jyrABqKI;GWl%|hM zqV(jol$QHC`K!mn?!0WgZBLDV{Tk!XdXD`^zUTCnS0sHvG4@}`OSVLP*09;e&i~%A z*D@P_YBNq>aX{18?oxm39`>d`Vt?fooL27+r>86tf9O{7zj`jV>SabsBHL$M#6}f^ z_6#LmbX^hp`m;%?l5P%8AnwplaDEC=x4XpIzEwPo0{uIlu;VcB;0ROdGnS%%vqWbj z*-+Zjj0&nb2E$+U3DU>SQ*X*#^3D|^fBsUiziowgVOCsx`uA)H9T5MP#^T*PWBh#& zIXdlI!O7i>ypLI{H79R)XLyyj!~6H1*kxtKzjD5KT{gkLbS>G45`@IgtaExnYgQyL zvJq_ME#$?`CjafX*TjKDL47! zuCjks4)Th>U~h9v@vl5B{$F3RZF_~$DuHOuQI+5S^?cbw`~jiSYH~&h?MfDo+DGoe zB?wyCSp)Ch)4&^hynxC>t?$%CHGd=lgLjL!`WNvZS!nzR9vFW@8SyX5Zu}8y193{*fu1eqbA?|6Rj)Q#u;F z-ee^88aq7)h@8%CIL8-^`&C$*-Gt6xu2|W_(wVa!eZSn}3$v}xJxaPJhu}#&k%3h7^X4e<&J$mhJsL(8JZCWgDnHvKIDK zd1&hu&@!=1i9-!7?k994ma%snd$*FwyHwKp3(WGos2=Iw)KKf6A4gtlJ@HnoH{RM` zjE#HlYT3xn@q{^`)6xe8*H{BP9HU2FyC<1<&8@53V)c zAGEi#^=*A>s?@!++)`3)OKrRRd0uBKdL)8#~=YSRS6tCM#2sU5st?Y3WFyF7)x{R#Hu5ZLs^7D4T-j<{=e z^(yt^-ms?cGt{rG%Qb8u&79)eki3M9$*QA<1JhnG-Mzzju!mqP0?V?J9!h1M7eHEd zfweWpt9REgy8o|Wee&3cNjpUk-6BoM$lB0V`XQEZ{h7iUYia69RlkKEOjJtg!Sux_ z$kqgrGxuG+nujs`E9G4~RlQNr?paAsCXl}0MtGOZG~zK)yJMi)+kl+SL96GHP8&&f z-BPllmBo(BWwci?XvPJlOLLS8w67lG1`-YI%k-qFAa-3K&wdlcQ9T)p$m+$Vs?|qZ z`$u!tvFBOa9P(jAoslt91~jWhBRu$iB1CpmqNq7YbznbFKPRcK>!J2d zEw;QI_f^30AV{(F~G_(BOUsn2_cBybDpN_6c{6&4xlFpz*4yYoCb3}u$ zA18?$4IWxZO}Tg&TB^P;Qp6cH(BZ4YjQQ`PaW>X4X2}LIYl@RoYn8e~7ubOLT{Iy4 zxw_eZBx5qLj9o@Nza(*`!OH#Ksf4tJU#6WUviXm~H8@Zl`)Cb9GO06UZOimVw&65kH|V>qGRTwu{WrOM;ghE=dyIZo-p zFC=;Q7&HE@kssa~{yd7g^gkrs3`w;6CraP6`pdaK3K>!xy@hL3@|N0bBi`z0pAlli{~rj?k@>0vcJU0obp=U?&_8(=cJ zO`XhBD?6Ff+08U=x&*a)CjsxG*qyMLeS^DGz{f1)8~YXc-oJ*Eb(YG5OptyU&CCd00X(1KJOqJ`jgPT^^BfzY$x4NJ8L~`yPWEc`&MnYbI_&rSR0fe+|8;; ze(GUDR}XG=(CGWd*)+&?K5aB^zut!OymxGt#%zZt1Dz`|_Ksqne22K=1zXMfsRm3iLH!H94F-Ep!YT1aW=WN2ey`gCnkx_?;DKM@o1o#-_}PjCIKT> zTGjHN9nsrr_$bm52ZW~`_R%nES$pT>xwq;c8 z>h9U8CsgYW2bPo|EKW4M-S0TV%Zo2+Kbg`a4V$t|1zLbZ>L^WY2?`BxrAKTg=YM`9 zL+&WIcxq{E5$JeJXg`HeYYi~=C*Z%%%9GA0Upi~i@h?UHV~UQySzUY)n6eETUkCW# zJI3pR0a`ZH0DBZW7g)W&PPOx8*0hGA#lICD{(pkt12D(43j^?d&hx(Cmr#2aMNzf) z-X*nT?>!^-CPu6zf`kw|LhOn?VvpLJ+G^FPS$?#tM&9R~|GJtxvUQTt{S`@PjaA)M z5i+HQ>dOH_@h3o0(PUo6xPiaz@}-Tq%4xdxQ{Pm9IWfYRTP@gBOl7{)6tpt0YRWa0 zSI=OVhm-s|i*!&HwV}Dxi`*pMnc8rEKrdS4l1neAh&< zDGy|Olt{i_f|RSO6%T;!tON!Yfv%~o+HW|Jc#wErF5|0~-SveQWzKR^_1(d*H0-?N zO`ql3q%y|NK1gVnO>Jz1)x-tB$idPivdLO!Nu+X)F9?yy-T<&T4PMGT2 zpG7jQ1n*xA*;N%X@-h(Ahv-~ukxL1XJYj;A>%zfX#bg`m=*N+e9fu6PS}9J+@y5)Y ztmfrZ@LvVh>DY>$hoS7$JEF8F!FnBk)33p2)yA(-9Wx%fw3VSBjx#Md4^G}E(mjG@ zVJBeBQ$oYc!1^PKvd@96p}@+{ijF@5591Vn^;NyRN%dg7$o8FL_Y4tx@R_SS_ku5P za-0c4%qvC_PUI$jaXi(ZK9rqK2h=OO+uDJ#>OCwhw$C)k-N%Fl(JV8%ux9_0P1{4N zYahYXETqo4xrFahphc!xTl=YKWL=*|Pa`U|1N=Bz^?EPiysN}%a7CSKXBl;y0bQmr z6|G`;_HJ={6?dJG`*2QlX18DiHIoZ|OkZiTO}F#nH*Z^QcK*5Xj=g$sjU1^CUULid zyr@#!j)aPDNNdN#b}b4$69;Ymooc}!MT;H*B6|?Umtq>SiMZuyhpz`awCEq=$W_)K z+zd|bSL`k62b-k^X|F8?p?iGjyxZVTPC?$yR!5e$$g-YHw>v=DRb;39OcXqH1b(%uYw1uu&q?&V~YK0ilB0Uug zMuJ8j1iFNhgqCBBx~E#-+SJr)etZcl z=BCaX>FB_mBD;%`?g=Gi7!M50MznGy5OP;F_=;+#!Ky{~sIF=QH0Tawk0)yOSgFtr zpz>o=Ip~a^omQjC4U1>rtP<*9d%_F6^M?r>(vH*2_~H+&81DuQO(qvsoMi=sGpASH zG!g8}20EOdXzpCX^o1m?|6%J^fesH>Y>W0N(^`w+*Mxsw0xG_PICnWlR2*pB6X3vC zXu<)=^tLK-UDdlbM!m?2YX41w%&JGye>iEHE|5MQMdwTq89f+en;7@icsFpvW8+Wm zrDj(Sp`fEGh32c2pKD}z5u^K08j9~iT5X45hTm#HX4O64i>_LznAa5OAEIp1u+ucH z&lk}@(CPchq2ws06Yq)oek*jWv(o1&mX^mVTI~|r{HxH(WdKeAX*;VF&kX5Sp5@Ut z7o!In9yeZ1Vvyy4+Lp5HQLg3@@9DtK+HGoTDfq=N!Y$5&epmrMHdo!`X6hP-v!tNU ztjX_pWHGx7epR($ry z1vzUMvKf(%>HbQB7GXIZELtX6)IU^gqiQOh3yY0TP^r8^WXJcwLACfhR%z84;W=vs zvH4Xe-Z5TaoNH(1cJ$^3L%nA)NA7gEcN&LYY+&^ksLmcDczMrK$IRi8D{9oL*>r%) z;iD?KkEn)(EBe#{B|jnau9I=2`#3)TXye=R1kU8MV*KlXy|rDh;eU?3olG)yKlELc zs?1a5JIf}f3_1Iv$j!0mLK(#(e7NBA82`m0PccUOXuJwycR(D{1)*09sIyB}{c>StxYl@a1V&(Znv5_~$uIsFJfmIp!LACxTLdbcC zV|)2b#zKxs5#|QL;DvXE-=`Jy`dMlBMd3#AM6U}4(C~DD`g|Jfs*6^#r-z2TRUAAu zWZK5jjq8-ls&u}C;`%~CgUy1@twhrVSWFsbwPj|({9!^x4_QPuRDGb(nr(ejr?w-Z z8O63f>1mzLq5;jADx`6ptxMS%7S87HRG)9r1vhX&4<~I>2Tqe%R|8&FQ~&r7b{p4l zoc}HJanmn^Z>M_V_VF~ddMbXaPSUr4V?*bYojh4JB}U}S9MQUf)JmuJX7d#d{DHZ3Fb|A?W|q=$eu) zFYoP`Ou>eV-2p}YA~d6s(2CN^Uv7i?r3L&+iguk<7ByGtImdX}BFHQM3^r<$mEV?$ zzPe&@xfh{t9;UOah)W+(TG$s@(gKLctoY?u!Kx~XBGZ-1)CJBgg=S5FUTOoWpG|H0 zx@up=0^RmG&ft|k|B3#N+jIbNo^=+<2RvSU-6CzdsMyg%>ehTc%J76~MD+)%2G&!Z zGh7fnOgZgGxKj?1@8B8=>{uCr*_J#0g0&oXZf*xh;vFn*$jIFU7#pQ@;52A)A)(a& zDW}UI`tyFl-+n>Qn~=VKE17STM5rTwyzyb&W!9i`qOZDJ?bA*0RFpbyVfrJO=p}(8 z<_UejU8qz7xaVmiB$1g=O`LDHt6OG~>&{%~H&s?MxB3R=d>L}X5{+-77=Peqc2*eT z=+&V6O@T2p6uwr%JtM^#b4^U0{$LwUG%S&*<5pU|@t&$+Zfv9n63c>crKv&b@5n9xM&=5`3Dp&`-CY8a`2jX~tmEw*ML_-jif! zdX>RXL>5O`Y52Kj&0BY@e)S7RPk{6+t%9kbi^`lF=D2yvxlYlUj&sQxXAr@8S;o3k zCVzF}Yp^zQeP2$@V6Sdz$hZ|mpN=wjug9j|9yW`Dz*7yl$VqVU6hUMq)pd(Sk)-x= zaj{+7XzHS7WT&-;_UfkmWOk}==0{^XA9HP%6~;DZcyhi$mFPcJVlIoc6>IyQvNroU zvB|Sw=a+>6NU3E5AZ(0Jzu(}O zX-Sa(x~lZs4y~91^h#+|YhNGefs!gYkE?{{v07z{wGSUzNxdjCcB5#Cv?8CMh>i&o z-F)0?r)8=Y8oBm$v}3oVRZNT#N{Itq+Tc2gn_b_YpN$V4+`v_(1JdjZcKxqgl2dD{ z@K4PJZR#sl3L$B?i-Jdu2Jcqe^N{uSeQUMzSc@{9E&cCXww<>c+u?|cnWY%gR4{rK zbki7-fG=WKTvc1Hi+Zca*RJxVxk|6+(2^5De?^0q4KQryI1V;shxW-q5}r*lERw;APkyefT5PAqybKPOBoMZTF?yV0tjl82{IMc_y6CqfRh|}sj?PHBWXM;ovB2kT z-wip_f~ng$(2kYh{Wrk(p0GPC2l(0|p<#JpkM|(kHcaiqdWzU{svEmmy>VB)`*rX& z|6TgJCkLhW{hjRenS_BcK6CU(hgTM5#P=1uXILsi?h#l004_1e`ikWanUf3#r6RgrPOh%OvxHRcZ^?|uh% ze@C=-0chi0r5C+a?mmJZ*$SMh39L*Oy_^qnZ!ck2cS8dz80Y%8OwTtGMFoR`^AKI% z1+IG*^ygL56`et?sw?MSuaa0%HAgPS&OxlV@<1amf$KdJH)nH?e=X|TiTNE~ewduA z!Rl0BXHDhC9%s5DC|y7`bcClHerN4l5w_eGl@Sp@iyuT^AA^oK;mL$k(2KK4TVz)~ z7opnnPr;fNqUC;9EkB%aZ3x@(Aw~?=PVn z<$+s4s=Y4~-i#%hmY~RX7n*yNV$V&*;M>5l7+_@w!tey8?=o539{(v|<2A$oTkiYZ zuPT4)oCB#vLtwkKhbBw~B3}q@>=f<#0I1Z6dE7DPk|9iw8yL#;){*#!pxC-rYcwUT z)sCn}i1557syBP8w9BhftG{UOi)tI@1TKss)M~HDb5v3HK6LOVk!x91|M){>)T5&t z1pojb07*naRL_taS4i8R0m6#H++89txf%c=7cU~4@EruSD=$tARhtBrjL?l#^D_d>p!L1mV*`Gf;{}vzrfHXCj*8n6S*yjr_f4k8 z{hYKPdONN -?|$f5441x6{Z9a8ESpysEF%x6y+ZW+d=;sfQGozzL+h@Fs5?0%}u z?#*fBtl!0k&RFEGs(Le4urpk>`~;)pjnRhTj_fMVTK*oiyA>ID+v?iRR%Si7lKMZ9 z{l~;6KDDWn3#goH#kO=tpZ47CYUo7L9U)eJ@20w;1n8`f>2??5_790JbRbRYWcAi! zs~-l6mVd_f;}D}?z7PgKV|o+kaB=}=Tg;(MuFtG1=QySFlQ|d->ak3)J-@}S_o{W@ z2tJMxyQ-;r6Dx^a-6}Gt}oyY!Hj2Svh~TUqd**l};g7Kwx{{4eb4 z`9yzjW&U{%oBrFBo6ZMMFGG(1BDo97!2hn7`buXYp1qUg=vBy?XxM$HS%%yv>z@ic zsw3p+b)a`Y)uzjYA|iy-EQGVDisQfa%ne*V(D(+oB4h1b#^Iqk9kaTDAzwB|ryI~gU7)ukg$}oeezMjkEfTw+g-EMt*n`bo8*?H+4n>em zs0%r2Rs2@fmjQY(R&@RE@XS_`Q4g);x+}JRdCxZfAaehZSY9pm=pwN-CWwp;Q#p|q zy6LTp%!Pe8@|39C08rT^=KL-EJgq{2+w7Pz{ns!qohO?oKiQv0lU-9+^-6ouu|-uw zCbNv`Vf4!v(pO!8;hjKrFO!*+OHKH5IJx?Z!$yo9sWk14;`m;{KRti}D=fzU=+W{c z!YQ*oZGM;~@iyz~@k}S<*_rf+ozKmgqsy7vb^ku7G${=9cUPsqD}kT=r)FY2n}#D@ zei`6sss5xpyOKm5RQYR}wa?zE-MB<`z(qlLC2-qM;O(=NTeq@YKBI8dai$itT{mKl z|C?&F0y5;@?n}EUE%~Ozs?+R)IKR#D%)384r}}#9oWH94{S4t@Bb8T;5k7VpzVca2 zpwsB5roa5a>5eSdw7p8(fVX?B(}k3e93#Cl6nGr2*uPZK?-?QAS;m11OnnX-8r+49 zj#QI;g?MZN8x9~E-3T-=qw0qlA|+?3Jgla={0^bZG(#nqhE451s($U$b6BST2FW^I z?3~BqHLYdkdLC9TBFtdl?YE}`igLt0@h&N`qO3^VS`Px9X9fExA1UqPi*y_ba zw)C}fqJ!wf8qk4L3Z4ZAqoV>lD8v z12;#gzCEVeI;Y68x+?$HRorMtwCs#SQ_Hyc`?$f$*95l+&}|bCxmYD;oTmduTU%qf zmE_3ise2bztJdw9*sp6KDT5&w=CW35!^ql;bl_aV_{xqnSmnz3W2{{~F%w&PPSkwy z1uPMNLBIG5_tAj#!5YxN0o>}tnfmA7YlE-AD>2w7N74uAh(@e8_Cr?Z03DnSyjY~P;H%>5d`o41SKX9Fuy3Npv$=x* z##)WrV|90!DBTpTH&*27e${514bJ`Mqr@18oJNFM=LmJK85)`#=)M^4cYfRnZCXz4 zp&n8#tNMgG+TbHGjG? zhjiisrDiF_liz@CsM3Iq#1ldcCM;y>#$?9@z|PyHc3L};V`ZVsx+pSVAak~)I_tk*P4LlSJR~F_d`Hn#6OOkqc73f8qmADRH9~z-EdiCzR&8vl?4Hl zh1ZN#%J@>bT|vRkWsLM2eOzOLq4G~vA|{I6-qzZ+BSgygu-YYB$!>=pX{dT(81&&d zX#KvV?r@iC#yfg133_~->dHh?{*5$v0_o6Cs>^Gt##I5F!Ioy1RaA>1th(z^%Ilx& zq#XwgX$5=Xlco-tB&mrJ)=Q}@sq+hY-jnUt`j)E%%ut=$l<3_q*G%o=bD|47RDTAU zJ6XZad%|>lr`&v!(!PbHHEuzMz7Yv|A#!7oXL}nf7bDmXXz!Dhzg)Up%;#iUU`&-d z%&+Df9v*76@))vT1J$ldE7EV7O2Y)vy`Mxf?hzR_S#-%KPxsFi*||sUfa|cemLYZL zOty=9!&_Vrw!}%b2^G`^XR-E3v`D%`jEFi8R>%3=D+P`3#+*q}@x|)aPx8o_KU__T zH>&f?St+|t^kckg$?D9JFWJ4lT7A=oitpn$YHEd&7Q1V37DR4&HFLTvR~bqi{m?ao zwmZCd08_fQ&}}nR!^Z;yGlBm2Nhu^=Xu%SpQa-_o5rC9s{WRF1U0z4d-E!>TJ4qLM z(9SbelHZD49xYzqJf76^Ja6sEDpl_+QCUz%ZJj7c{1eipe;X|9W;AbJ#*kHn=WSWn zSMlkp>MR4hslFMkl-XywPkW_%>(sp6p-zhgam!D!PUgbGfy<3;xz~}F6C4fdWGF0! zQ0YIRkb#Q-s*5gpW)YUp%7yG=-{pp#(b6wneh8#vhN*LTqV+!$wJr?Wmq|HYg7WJW zF`0W<9@@#$qf(ap}hgpyms7nwT!8} z!;|5Ikw}x5 zBA2eI7uHTC*D;mIVAbF~RzKeo>@CDvKdWndy=SRfL+y{DR(>oXlIJ&(3Vl^h`PJ52 z1?jf|cEmR-ledxdU1W6UpAP#_e&dQBqB7cn*oe}_gUxm3{9pgM6>bg}n z`pgo?;T(mCsjKp!5a97PLBt}(`5KVI0b+~JQwdsW?d%vUMbdhbbreZs8;E(015EOI z*Zk`@Ji9hy%?#2yKC-bzVB^DJGlZ#)x}`EGL~QS6YTxWs?a@tS$nO^2s;1KYYNCH_ z7b*0btQSO5D3)|!ZAkViY7cA?86PLw?l?dZj(OorsipDnlftU5jy*>q!#9InE0 z3+^oU1dlzPlH2N(bt)C_rbXopY0dle;NJZeuNsrCy$V$J z0f+W09bY6`_Ojq>G0PcSTFO^KIP$I~yHR*Z7E3SJ33r|;rtK0qQ$D)x$yKhecxT6N zO0#e7O7AL0i`Y6*_X#0j%y;H!m4h|Ks=I7Bn4A1UsdHE_!Ih<517$-Qm&FIrr zt_&Jsbkj%H-_nUrj2GFI&&sT%$s;z6tX}s*1y8O_Q}1*c`Wm-}ypT#H7g_*`eH26P zgYV9RDfSa{&aXzpN3zD3QVH2EvS^8^Q)AXw;&>&z?hJJI3uZP``CNje(`=({<00i# zCHGv?!%Yawo-H(Y)3kqqhHHpEP9oZvQ8|2#Ql(jBDt2>d-8xs7{loHf49khz zYTNi!_NEi<(o$^057wUOATqv-dgGfwM%Gtp+ClZmM8U=oXu4*OSN1x4-Lt8k(p2UB zKGF8IEs7-xPL&lsAD}j7y{6WD1Uuv~X_q|?_3&KNZoV-y-+?2Rs0qG zb31{ZD-GGSsNzs$xI>|lj2?3!L(8c)jS&5qD7MdOwNv(sEp|_BmBDK5LXn&$EY|O_ zXtJ9z_DNc5ur$!*_|q}%CV^U}gN$4XNmHA|&VZNkKH12&YQw8RB7d~nIF{s6sL1$K zl^gX`D~DTZa=@cbEiEm1L)6}o^gYbFwv}r2UW#WBGEZQtjWhn6RsDfc+0z7eo9H;b z!-XczwKz0cG%k}!zZqf&U9?gzP_^3u#iTQYAFBCu-4RE(oF=@U0-T&6nEAa>!V>WA z{tlKuV=@atF9Mj?Bs1p?Bc9ZRol_uRTwU^~e+f761Kci6)!BJQOhRw#)^C#PNQ7qw zBtusYalBvF8#|#s*^!qiHA5h!9z3Jo+^Ld!sG;Xo4Df7@b=KDCEq2^g$jg(geO?io zg&7@K)*#;*gI@g@t39A#DMDl}g9hu3X4*n}ZGmdt%%X#iid5^Mvi)1NCuXW$dqOp7 zpmO<|w-7Kjk-8mTDLU6G}_(9Zqp)Zgm( zIgKx{{W~`xd!+Gii(t3VZ1Pu&BQs``!G|?K$9~G4S`rVh=kO0d`S5-_>(jI%eP&v1 zw!xxSxKfTf3iq;WM~6BReT}rpF_r%<5IL09+NH;9)GhPKlLogvN%-5!lm_C(cXPaX z860~t3nQo&=(9uIVFjr9TwvILEGOdN^(>^e`7X%8%8v2=K0*3NaWSRVs@zE?DqfMO z^gyEFQ;2dkR~k1}ux_7H?SsmRy;U<8BpuY9WWx{#6<3S>{xYy`sG`O#HI=3-))ypx zKiX=ACl-}vl2q%d^86XFuZPOsaMdSmNO$ESB)m{c2_ifl3tD@fsB8yNwSyM@%A}&& zDE8{75Kev1R4s{2txLq?H;Wk%YPrU@sZL6w;d14DpO3%t;r>aV)3uB1hW-YQ`2*%n zA?2qFh1T}*ba+GYaweOvH_!;j$ax&v8r0u@Rr zF69K`7J`0Q3+ft4eCG(!gYUstk1`I_a?yVsNwX4)S`7swmy>SEBQoSy$A<^mCuTwqD}pV`^KXZsChnRgSCG@iUt13bz2r(*Y6E4wzS9h?BE&=J~Vwy9S+ zVh+oEn2Q53e6~J+dwpBqM~;s z^x03qABHq`612`As@=y!=CxOCF-x`7XlRG|PP>BZd=B zyd)a7#&t^9bKMDX#x%HRczPAqyaiN0tP+jCAQ-VxX~rovp;OfPUpYAI2dP^>K%Kq0 z)%@I_!I_OD?_uj5SKDg4+Lzy}y*M8_>yo1vs~f#r&f)*PbKKG=9bfv{#+^AAbbf-> zVP`~Q+lXDY9#T9MTE7Lf`5eWxT}tu8ES+rp)p>O5t4q0zw)v5D^lPDd0hW49Rr^m_ zcrA)T7DuXX%%wWJm(o8TQICvFN#mIJ1~Aq2nA)B-SUi&SXccHcd(z|KtR;>b>p zouhbhMbSS|$*cpn-N61{r#YZqoC$aja{4_6$9Rg58H7fU1+UwzPUleThQAVL(XZl0 zmQ(-76akUx2ki<5QJq^8dZ>C@F}nUl=ismQyP76H!7ekZ&CH@@~4? z_$H=Yl^NIWK$gZRm3Tuq76xjuMr7O+L8l59ugZGJ8LoP-jAP?VGCyp@aQdhx> zCd%*b3ogG@^xFz7yTmy0OnG#3P@%)1lpmGe^k(YOm2k9}(xR(slaq`L?W@S#*lMc= z#5pD_mq>!s<~Px?lOgNl$s6@R^wrO*Aw$W_d!NuDj!lu4EH6he|Gtgs)qdiN&8!yr zD^==La*$Y#WyfoWM(^^W^%;YMr&SgW1NI*j%@)O4;6I?wGNu{dDnEK@%+QL$)0+#I ztZ!)h43B=zq`c>4DnEJSaL&u{#@$wLd2Y2qZAe0@g4zwR&ht);&J$cGZm)48wu9SL zQK?xN8nF)AaI|R59n~%cK=&RRE}0H!SlysaBO~1gunqo|&E}F{>2a@rd;_bvUq1w? zhEBIm^?P36y%*+7Y+3rcbQ4lbG+^ETtD&4l*_{3!ChJS^ysAnmoe2F7LYpR#PQ1i= zxHfckV|IpTB0AoKsLfr_!Ulv%Cz*S%F;0~=zI ze~CZIt#h8;H#5Z~KO_Ei0rT}g303ct_O7N9eC>lb=CS`x`2yd(>ooy-qmrdu`K`0- zPtkre+3Q6xM6`@r@=6An?n>A*W?!Gud@5BThRYY`!Twf1K9LqE(KT-cz z%!Nk5d{>Ihq!XYOF@oe}q!k;hjE_;>JMRmsg|H5fAzO43Q^7&Tl-+7Hy0XV*a(g<*P(K=S@|Mz~ zD3v$4487IiR~BX|}~ zX5wFp2FVWJ3nHwlL{#lLQTr*-e?tiqXA)Yh0M>0&{oiP%jQ^-c7PM43Ybpm15_fO` z!yW25+_V`x8}5Qn)FjSU7(8+&^NnXhJC6|!&#zcFOXb2MNY{Ok=QSZ^?f{jZGOe92 zDA7L^bMJEMFb9$UYN1Dp~yZzqbJuHmYWOp;G)V?4)%@ei}e1 z(SoVvAVX_blP*53n)Q*&^eL*_ri%X7AJ}w*Fzgi3!Lh)?(QHc(Avty#wEs7z+vV8n zSr)vn$0wRF{i8GInd@~dtCV%DnA5@H`|dE=QxDW898-yCO~|{4=wKDao##s3TavbW zu5w~I^w-6N==Q|#i;}bQcgK92jk#D}rG^v1SH}YXY&N{^E!DY} zKJEXa29Y!?|@tedps02;-28g|)XuL}?zZYnAdP7%6nEJIoepOTM7x)%;P`Bl2_;-v_ zpHyX^-w&tGU~p`6#nvkZ3;MET+~~k;cDuwJS+D6b+Jz(VFwQ-@8trLroEtz{!;0k%X$U-tL^*)yg#zA z#830lS=UG7CmFo{3+SE`%&QrO)z#&y#5_M0F2FybexBwLlpO`?sGtrmNx zRB4Tn*+KNM7<9&D$c-qK0aZnM)KELVwv|icWG`nOzzul-f_HC$$V!|oVga;$M{ zzBbO-LF6`B1K+d$>f3OEoTN-laVsG)w;>;sRGbaq#82#`8|?(NXz2^6-N~5YouTLn zTf7ZqTOpO*(ZJ!yinkw?R&P`eZ>OeTTF>pi;=gbHEvU}4!oJUKm}Fc(;osV+^X!%K zf)y~A#*mXC8~fZ|LwW(o6kZ?eaf|jB&VIUc&)9 znM(WsiVRfxm>%@gI7R5+ikuy-94rZGS;0w-N@7c8RL5Ucos`$g{w1oY4%_`bN&l`a zPo|PCk5tVY32LU`QyCQL3ki;NgyI@7w~8VFX+W00Y%9s%6IH@yt1O4;FH4}){sL}% zU|zJzaEFJE6Fb>7_-W%}_)0B=`{+k?wl0A)@e%oYyoWz5MBRki;;cLF@sIgnN6m6< z*8MJZJ?k^+N;xKDUeLZ2t7|3;>V&FPS*1Dxkkr{EjrOTs5}~$3m`&|=QN1Zkr%WHT zt7fHneXTb;7&he`%e~D;R~%KjzRP+GCR(rUS+!-BkfbZ%@`Yvr&Yp8FhxKC23j@M? zL3{2JomvT6v+jpDMo+@LEBpUoC~# zVI8x?!Ec=$4l6~}JBDcZ1<=6UO7B-Inw103x?pKyn59aYEdmC67}nL|Rc+$uYXVK5 z!GWgi24U(T?%;y+-ALwdO=wBNrf>n>RP>oX5=A)chkCw6x)wQ~lj*JmVb zy&!lW+o+u%DKh4c>epDSyJtZ1cl7ZOH3Qs>^BkvQCxc+#4HYx;}wLtCnoglkQK{p*&te7uYP*ac^th696$omgSxui;ML?>;D9v?Ei>QD9k zqEp%noeoo8F$`|a5^zIWIvOy>@$SAeG_5x~_qW1rR8yTnXVq+QV7AXEv$rLjSMlmx zZ$rML)8RY$irftQnRT+E$&;8Gmoc2bJ#pDMP|u%)uFnV`b-3|Q^%@7mdeN|x>JfG5 z%^XgS({qPw9@RBy^;D5=tVrEZmF6{J>-_~yOo3J;$e97E(oQuGR1PI5y*+DrY}|io zOZ!sOEIa4g>R$*0?kNWpR+AJAZqtsr@nIwdC57~RF5ahT9=q#DK-rTGPsInxrNFeP&ym#ai*7+a>bAroy+HS3WQcn z6m66w+P{_9Pr;C(hmC$5&zf+Hv|%a2y7@rP;i{2qRhJ$RZFCx#*Gjc!YgKoS%FvIH zmpeswCqh3o24zvh2X`3Lx3=T7k8|A*b4=sfr~d|L9IAv{YSu-P`C&ZFs&L{-*_2B? z^XSCfRH~TGV%-$i=E|N%*4FeRF>J_`Ek87@Q)R5kwgzGwT(P!q0_@gV~P%BEdjo& zUHtyVaqP5uL-cW@;Ex$99r~+G-osjd61314#-p*M34>WDcO{ISs-zn&z57V=`7Fz& zLy)omsRk`pj42>GW3QFZ8z7&S`)syf9QhnT@?R{p_fg2#RF&>)fsM08d+!w4v)bw( z?K~ZD-P0S}gl^t+Oq-tqd=DDCT;UF3K{x2=w9v>nmJf9qL0NzWeO0?WQmq*-^0u7H zoeV0I+E%OYKy`00B!4VP*2zq{E33cA47h8iI^N&GK&`OJ6J#SVQ zD|72uDPTo8lpX#GbOAHa6&r1awW#} z%7o^-RHxonDc+AX`)WqvhD_^A5r6liQpuh|nf-#(=~Y|iQuRhDHcxYLYp9FQd7x{f ztqocx_ETAStveX6W*f)8SnAk^RbdkvsQCLqMpq?$7zgY~R^9gqysZalR1m0IVZrh~ zg54pa_hYKo-Mvhx)g$E(!{L0YWc;Jonl$xNDP7@NUb>Wu?CuQ>piO@o^J{CEwTbHV zS**UO?eGoU0C$z2+{lmcIaS#mz8Y?1XLWy%S01>Tw95e2`YVmzoWinfqH4rYk;Hkm zf-apD>H3vyhYqA~iaVG#*rCZO4jN@LIx`gZ)DE%PQ$*U=gRHs;om&EW_>=0LOR8~e z)Gl1AHpgd`O*wDq=&v`h!j)UC$tsu1;5^|F5r2S7nEM^S?3hr@k>xNL@0e zGJ@*YR6dqfIq`(hs9Qn}PKo)rOnBrBmogR$ppk)w3cn`$KS6K-kmcEh0r)=WdEf5? zRGi(q+1;Jk-Old7!oUu&1qHFYu)DiEHalj|nA_Ajb?%=9-}{{NUsvTmK#rk`CDl}? z_Ea6xUy;5UXv|9G`Y!@*o_?Nln*;keI^X}8eN zhr>+cYGr;>Bpwqijw5P*foRJU;L@Ma*veLW#(Hok1T*{x_pBY&#oAo8thcV4+D${?t!W6W>%<$MM!kfhY74}QUHU+6*#RQ|Ru=nlC#3Ko zW50xwtXm50vPF5RpM7PQx*jdYx2>-^n;#65_jeAMR>kggyiKN{3 zQzpfBt66==DMr8MtaW=5BCo0ziV&@z2#Lx=(x^Sjqm-)cw~6ddDbn|=CqWy;8#KTd z2%75iQa2!3;D>G89Nv^Mu(2LwE7WyNl7YrU1N)DHfKy>=;lvLV9p z-pwLun?fa`B}vfgn@~_=2K(nV?5yBzWP>ATG(HM_W!5;Z&StBXPla9iJ<;f zK^2|@GbRdcaIKlS0n{~uWMjOsOOnY}`AzNgiXvw-T5Bh$ZMzpXS4~G`yrbP$8Jyf} zJ{`T}}ADvDFPttn{vA?TK=p z?f*lvZv9o|exEdf#W(yi=Om=vdTR&13CPra)@yx4yzy()KF$k!sh!$Pb<~@ERc+tm z;tg1*UYB3g#*)|t@5RfMjqdSf}eCd+$P5t1ce4oyw8W`_{JlyIF?lsu;ZS=F* z9&Y(|8%v8TdsM2wM`N!GE!+j2ma|sXo~w+^`prng!q917$PRu5UH?@iAs~9^0=&>W z#`c~D$v<-9)FtDpR?S@5vzxwId-XRrIsSA|V9X@)ep;;Fr!VjVtH^sW3N~nz+E34| zEqK>T?P#&}@2Cc9IJEvJAJ>nlUoQt6N^t~~KLE3IDa?zLgt=Ww*IpIvdr`IP1ktK( ztoAM>`X!x8pP?#&03^N;Nv7ToMl|qoyR`?B){Bh(Ra~)Yv$gR#t^IzewQa_WElyA`l62f_M+eL& zJ3Ot5ubcH^J6o^PD6yOGvG+OL7g*BWk#=>-M(k8+GL3Arr>vKYL+(^0R6ndb%u~H^ zSG8C-MYDLtR6l6D11__IoV|;T8JNa#hj^|Nx!EzLCbRy!MJ4?$(OqHejQq#=-?U}l zzJK5p{j4VOfN)i|JoB@q>mLNi$3kLClRQ`oxTTdgy%P4n2fy0{J(HVl>E9ubqD96; zTgmW`XqqY{6Ph{tZIo-rEj6-qDce8SvE~a9D%T?X-W_ynA85%rQ2u`u_s$Fc3=-{? zN_6jfm6TaX+Ej#QUj_+uSJ`+??d40x%U(6eI~rgwbfVbN=f$Rbh zE!;JW)wgzn1}zLoaDr!pj?M7=2M((9t!a=Q-pQ3|R|vhcDW`3rJR(x)%tyrxCT;oe z#0i@R)~wpc6`9|~N}E+*&7o^#`@M6MF6R+@KT>JKd*-U0jCp*Px$S$~5m6@`7s1jnJ0w6<5!IBPJO)$0_3*zQFMhXlHyIYZ-T84RV?Mb?+1m0mzsX8{#o|k+P;FCLak7s%2VV;BJE43#laEdg@dXC; zWiLZ_l7}V4G`_4}hqG+5|88l+g#fZ%V6C~Iy@WRtN8g%~>}?yZdMUfb;Qrra?)%Vh z>+cvkkV$c-ic*g2K)>CDDmOs8UNgNtMRaHubGB)&v%N4=wp2dv<|>0a$BY?yPXv0v!LG=*SM{>p96h%mbdWOQ~sjp}&7qty)Xatc2*e2NqX`3$3ot==7&g=jCHP zTUwEQy3mzN9$!BScg{A*h6Y9(e1ROUE;#&1b;2dZ;f{*GCqsTsAbX~p;rK+-3aykb zA7|dz5YoL6(fFkvbuKA-wy|i2*(%NM0-=wIZe3E%u$BW&!h~j@BYM^s)Fm%aqJrxA zoP_yL2tDS4`gS2+*F*V64eKoFZOqn+1`B@#kKd!F*GkKe#}T)!s3`UQSEo$X|1e}k z(B~?H9qISM;XJ>Kxmp;su%TdLQR~$!G9migV|eA-ugi74 zMS{Z}rouG&kB}(}2y3XC`MH>4m&LBCEb_xXXy<hq8=PG-s*v8bU@^2fm_p^{UZVlOY6Jf&wA{BO9FQ$apgX2A~ zRs(C(b@pU=kf(=>g$6R0O6d(cpmO1kXCu;iHeD|(V}2I-)u z4oZUjbp_OYmYV$u*1bAPd}B{r|Hnp{a z((T4Vp+iCO1zF7&pT54~sMiKEZih%r4XblwRf8wH7&F1;32n*QTw9&`;lgQ#3aU0y zT6$k_a;4%^WueRytf4ZVKW~_XEUwSK2+Qt+LOwni>!X6_332HJ<423um@Lxowd&fD zu!%pgY)~VUd$CN;Lf)Br;_aCs-quXwT}mTz{)%drWh5yMk%V<+uXhFYYDY`p=VI1Y zOs(GiX0V7bHsN@XeEz|a#Ldv`p{#)=Ot%&g%3dce8?L%wDr4VlrA^U6nLXn{ctJR%X-|UD8E# zX@sY{!bIaYDy{{S*8h%dOf$%#63|wuR9Ej5UHnW?vNy@Tg^)-QYIRWf$_3?lYZ#Zl zbLj9#!wZrf>fOyXE3Om2@PUS%1%<5;)$I!2J$~4sn_=~br4%Y(QZ;#yYWpTCzw}k< ze+FLP4kD?ism88g@uGcRlLYqWHiO-GLv8Q^M&5PI^9M1fJjpcn8Eg0UBvq4Cwr>zS z@2izO;hyw?AhaI2jVAk?Q43vNwuDAVpB67;Jd$p1 zqOUzG(wCk!`D^Yo`1s26)C1XLaJ>O<({tD?n zq*;F_;BPq#TD}DA;@cX?TouV%rf^cr3MRSdIpY=Y>65)(eYSM8LlP>k9=g;?%K8m%A4 z(me~?HnqwA8N>FM0mg0~#q#zRd7<+u5LL`16Vv55)QLFcDLcq&kfD1$g;33%ju#d_x4Yn^}|8Pe=}7| z%@>WGCbILRdVj1^uWAFa)t8btGl~OOGpPObzV$}^u1V=eQqsv$PI8BlPGJ3|=|l3D zBrl?uc+X4QK#fV7JRm)i_LN2Px$N}yQ4vZiwbBHJ4mIdMEjegk{FhYcE(QEE|AQXh z1@GfY1Qr!mFSNIZ1FZw*S$~g9b^v|IXJm3u$96fzG`u>Qzq`U2+emyvF4&-AFD0n) zX$`)30wII`LdxqW5mIUZrL1_CLONBakPSO1q(Kp++_qdp?oC2a%{*#)Bt%a>z7AM% zMPs7C-fwwW%?#^avR`hRD>GuUnBjI&>3UAW8QTor|v~H)B9MC{wTb%jqtc}N*VTn_m2c08^&hqVB*mY ziSP6vDq35?KN2F(s>a4EX1uVprhw&gLxkscRunx-Nc+a&S%0Y0XaJn~t>BJnqW%s! z)V)wb+{g{$`}2Es6PMXwQWoOcP|-uzfqbh)tN$mm zXdblXdB?t8?MhTFS6te!Uq?TFnTCH?{c9T5T~#K~+VO6No5B z__Y&|aW?RGGVpIN!u}9&e1v5?*s%?2If0ZrRR237+VB_EaR+KtOv(y&!W%wGy>AP|+wfWfx!1v4Fv{pQ_VMr+ zL1t(!mz#`mOxJUUznvv&krl|$LWw34#vNh&5=l5fie1eKbL*&P?WbDq81!Z}=%SIV zhjy?Yyh65ecGb6=MP_~zo%tI{?X|9#P}H%b!^!?R1oGb^D-W)zjSjLl`%blk+lba# ztonVl>bE$R^kvB|`w_N?LP9sG?d=n(9jyAMoYBTJNf%dEe7-^4a*}J}tNERpYuW9! zjoq~i$%!~l99vcC@G6U65)@V9tR5I7GQ*10U8(Z5ugKC(A_x9aosmLqingMkhmoY& z2`omqDGGhY)#H-1yE^APJrv{QTVs+G9$qO&uDu5M8s)*U!F-l0N+ z{5rjiPp9W69Q!D=vMcC?4`#zi<|3QG2QsRe8wn?VJ~@BCBj2RP@D;zRzCjDr_qK)l zerzCa--XJl{}k+90;#fA?8dcf=UpY6A&zZSXH%M|t};F!p!@)2m29s%%p4}ELLa0&}*N#3ZTDQMY_h9h!Rz#_z3Gv+^G2PUbe6QGC z-|@{$ohsusf6B}uz1&otdx~>>QUJ~!i_!;-{p(+2m#q|ytSg-Ef|$mi#oXzl&c4ZT zW+#(zHWPizOVneK>gm7KejT7vyQIn=iy&3w#eSWn-lR4v>6Te!oU1rJf)O&r=)g(U(ySJ+-b?i6^tujzj z^&6qVwx@1Z(+4(0Q+gdu$N1p@t(b2ap|`K{f1) zBGnW{a|IRpUNI#d$>BM`^yA7cW5Kzv!YoJu?tWLP$!4XF!Ra*M9a+l6Z%|2VQ z!^NbJAhV;r>m+Una;L@zJ3*BkXTekAK`U9gAhc-})reoA$?FMI8$sQ1q}@Y-8NF2p z?t&igD?03Z!p#+=h10Rd-D2Hy9=bkBWN`+y{~IpyErM*ZXRdr(YozjGvPE~PjXo!y zY_@i1U$v82qe%vvC#slw zTmTV5~^BP?3#KL=y`Lj&>LARYFktj^JKrvLW7e_|5*qxcp@iVXh7P# z2-`BhL$lrxnc9PBXfEUK-xeIYWJHP#nHqA)#6khw9hIEaafD*!Jkf*WtQI}_4SmWx z7`dIb%^hIxCeZd;MBR%h-R&!yxwGPzpH#o^O15eVm3}vX{+kIut{{8qduYXKMAwT6 z?Wznc9-)}N5mbJ#XL_A7I5~|a=7JM=8|CqmW1wZ5K&$%^|C*k;;m?Lgr!l6+QHOJV zByN(MP5%bqa?34U>7iP%w#dEQutQrxTAd*;v8Va+D5vwae~bqHIjyq23t{MLri>$j z=)Ry)sf2eu0qvRq6f8rus=d<5rO<2nfcsT}AKL)eZiwzKO&}~0xYewk6Jc@tL0OyO6_MWY>vJ`2NiJ;|si3aUt zesV&o`(K_jvFw+W*U|?$M=DbCi@GW&J_0{BQ{1fvE#6z)BCALzH#3OX3zYanadwmH zzJaPWpMXYnBn+<0X89bLBBRu4F`1py`PA9jM9qn-vExJ6OpTiS8wZw-CB0uob747pt%c$zblDvjb<9JXmOIEBgr&Rgb6!OJZBs9&$qA}D;wKjtw^OS z!go4@ekw~;=RA1uK0`SU5*<4xXw;nK`Z2}vNJ4Za#o{>CN+(puHM4Sg6lC%_(ym#F zB4)!kqdS})>B;V@ZK^k^kV1mTPLLE^uGo-KYi)3y2sJbs6gW#*c|fU40&&MSWWq9# zd19GepW&)UK-)qg{nwH-k0hEr8SEPgw^=_YMYBVx(p?*o^1G+ejx(pd1O^%j+)r%- zvzB_^tc%u8tnAs;?;&5~9BCJ4B>w{Fwx+;!1AyWLS~xq>;uZD z2QlVdbFgs}Q*aEMeJhQ-WWF&Q78z4L9k3)$Xz3W`E~$lo+GctCDWRwzEVam{x@@fK z(&CVTEunL>7_4c_7%+n{)FEu`Lv+j!K7AehxF5JuYM8P&;oK@ozWHC+={bZQJxONg zZZe7YV0!L_dpw=`f=9zA9m$`w2K!&{CqKSX(2ge*bgnrCuj-57C0^x5?FUJ4#Sq7| zjU`OlD>S^6;>9e&htrHTYl!lkCv=}h^ew;Q%v{nzE0uC&0N%AHF4~7U%N}r{ETAcC zpsSigmj$f7^Hk(T8j&d*$tEsvyb7ruJ0_OwuRp^}SgBI)wb+B})Lts0cKltn^_G&% zohW+dKb3mXD$&7eZ;XZ=zron*JB=Qm#Ja!(A6h54G#|QpiXVF(rJ#2$T=Z_wIFX0+ zkJ73?-4ZEqMKsPQxcE?LVGHFJ8`T^d0H;AFHGQtBnVnnB(C;h_ePq$EzLn0Nm0ur| zbZX}yb7jM$n;G{=1@iqno1KoQ3=Mb%N=~OVEkdxlrf`k_5mH?soSsbxO(e>D(eQ{t zO!M+XYfgdwm`w7hJ8b+vD#2+)O`@e*Ndc$vNYD4J8u)Fz!Q3#1wiRV(=3_F~KN02q z*~sdp>@AE}+dB-J=R2aAkz`^sGxxv7RMAhGGypPirE0z5q9w!B_NiedeyMotms#uE zt~TlkBzPq2z#yg{GPBd6C;Z_N@UP5f!kVOL58vw^>Z{OJ{fEog;0y6ys%6n$$^z#k z`0EAumZl`9ppc2{OHS@~>@M44%-Ftaavc|QyQDFb%e%gbCrrq+{cdRMmcgkTrS=EK zlq1>sQj!-ol0d)V5*V1ydZS*8mz3MuxkUF<^)pRaqOc@&~mfHrfjZ~SYPGD z6lnT|(0-MH8pnXO{eis;MXM(WGR2DCnkMR72Ay{R*fQO4jmd0g#<6qQurJxbNn1jl zQbFSE%}=KMc5;q)Wv6{Inb4|2{%WcZlgT#8;(C*^`y_6aBMH;UPO^|^L6E=>=(OP^ zeZ~MA{3_9FL?dGZ=0t%cUz>HFsqvHXR@QVpe~9st)06fM=uFWUXH`qC z0@YohX#1V0n^$RHHKD&|k;xEi+%p3lw`h9Dsg=y;KWlhv6r=w#*7&u+q_KiAc~nQm z3D%dhXg^Z$X`N7yO+x1@DArE|=C>hz_n!6bc%z@E5*qIz3~Wi-y9ab}1x2Itb!)=>Dcd-qpSKH_J_!1KB6!9yrJJV}ZFh;DTxDg*DNkA*^X&W! z)?UwIrD-ao_1pV-(|4}Z{gyG2t=ZW>k=$u@*_~cnop-&gX_Qh-n)8sU0l-H z%$KV%R|p5EJ1bb?GxB}7!J%x%F)NIJ&JFg>8>wb@Fp#AMWbreV*gcSJGpybDy~yS7+gsT)DG=$Yf*+s|(65{wP+ zkQ84`?4@&7wiZ@>QHgch3*tsonA2@xUiJrZkuX8qf}XbAD)xCflK9y`jvtg#c2sTN z2uOHEw0er7+cm}Ip1{g3s+C)cF5N14URn?}hG^7CLz&kwH@(mF;HFaFZA9H}!)#tG zl)pT%d$elFJ8Ylbf@GegHh(3xnWkFFScBy5Zt-@MHCnT)G3g(v6WbCzp&XeXPmxJH zZ)sIELPBxSnjwnGC7>T0So|FRIq1O%Nxf_zs9pBpujO`{K<60cf0rq3-7S2257YT{ zN*QOU$y|_3|oT0IXi z;3IU%aH3`ph-&m9etVAi%37s@e+WnGz%)x004RN^~+GxOY>~Z@r1ry;8o_ zkj?ID>TSsZXYx)lH%T2a@EP=ysTj{{g#7<7ul|>0F-_Xnec>o z+&V)Y8VFY`B<5~oHCGl04~-UFxGvN%vtZ~<(ZgF5MOUj%xgmP?kS9;Ji+6GW*(Xg% zZ{c`6KJ&W%f_1%!YONt;x(#a7Rk5Lu>WW6H zop(ZS%vH&-Nl~DI%FS7#limUC-@u&DW9aA=ho&wg8heAN*ioh)oh+yBL$v0l@SPee zIbNym`5AJ0k)@-D*_Lc&wALO%t39g4V!*rq6x>+BsMCn;+IU9ig@z~Qwwxxx=$f;l z4g0An(b>A^23hl{Hrw`dp_Rug>J;(#MdM_rXY~|vwXI`*xC-CdE&+2n+M?WQYwxxI zhJ``)MMCW%Pi~^n+{7K;u{revXl!4lA`R6x>&@Edypg9T4flI#>edU- zB|7|!)$xz4x*1hdbXTo5O!aIAMO-%EheyD&Z^8oyfO`%mbbieknoLL?LFR{L#%Xfg zPibb#}eJ z*^G3)4rww;B-3j{O19U0$mbT2k>wy~qEx4MwwmgeqJt7XbaeRbIm7Me zFn!mMsoO!Oxoem==L3EFM<{26;-vu|ZdJK**-D2QBE7O%?L1WwbKOY#X2F5fgI&uj zN#;L*)agJnqXFbt2bEdjYDd0NtG|joydYX{m*~RpEJA$3kLFH~-ZZdA?aaf;*66~v z_+IFst%?;E*dGi!vO+s;?R}#y%%B;=9h$?M^*-&1cPAkOuHBn48hBS*IS^J*sfazrG zW@P#KAPH|{85d2urUPk@2uNU?+Ma_%%Jm|5H>bx4;?Rwp~Ea|@{cu$tuG zbEL_&S=SD5Xxl5}R6fQ|o;u|2U81f@W6j8BmSg^B>E;$oUus(P{VaI9*=m;>g3>c# zzZp(mvA_xB%}7!#9oc!AAZ_Za{5+s)r5CBx>$YCJ8Z*`Ih=MmWCExv|p3C2!Fb{1jJUZ6m%|78KzF_as;$SX4vYRx4AEiewKF z={iU3>eFJ24icN3Lc9S{R@T%NnbOwk?175okz@u`aLt3TAnv-hA+ZS9BEMi%_Q;f^ExGw(laXKAJSI&tT3xqM*@=gk+@wvn^-1u2{8=wev|; zfoSp5&;vtMOHYN=Sj#vWU^M^8dM6F(mTiRN`b9oQq*= zOr2WWZ;FguByuiEWZNj9TU+43dqu)grKqdQjh2De?Iw0Sbqa)%Q|JJhLunm8-Nd-R zrzUs7GUJ$;#yX$K^L~I`cR=m*qpCIL0#il;)pG$A_lm}asD_i({|yrj8Yen>EZMX{ zjy=5B*n}A*RWGQ_`lveX97+8#(8orl=@FH&9!cw3kUAe!DvTHHeMqr*Eg+Q~yx44X zWk1q6Zww9|bF@zlLYJRZOZOJ(RZXSxV)1ZN?ByORbB_ud9)|h3p!z~ysk3CEPj2-L z3e?;fId$`dM%CTcgh%I9<8z7BNF%y98k#v9bU<09Tr-r14u?t6Lfk2xtJH5A0{3tk z_{QcXr{PkfUwRSsjs_=`13yV3p0ru1h!S}N46ht)%>Gr5dC^X3{R@kW|9Bd;R^-J4 z*ly`epvw&Q{;LH~QfpxKT=hykR4=@h%8+P??=bA5?yB$BsZNh19vklX-Is2PcVkV; z0Us&l+NBf{)Q9|Qv$C^hG$npun z+~>EIUREQGOD5Tnk7a%kYw%)1=bg~7Sk>UFqMci)<}Cp=p^jZJ$+7qUf!)wYC9nv3 z@f)aD46!#A^tdfkiWWZ8t*_7BbCBHGNidsNTACYdY3C!4&R(!ow~|GHpDhxWSUuCs zVtYE(^CJTK=m~7pASZe6I1{*EgKThrNWt2WWu3*#Us-Ig5o(*RR9h{YvFj^S)qfp! z`VddA&Kw!)a%ck=$J;XgeJXPLv(>~l7DsD4m^dsXIp4@2=@v$GbBH2idaJ+A6lvE| zWNUvbfsbncIxlubOY8N%E#7bIMYi2kDci_m@iOHqJ;+S(jI*PsV?rzWsP9pS!ulD+ z7J@831$%Ef?9cO6KKxJZf;lQf4?#-S^K?-@)u#_2e+M}T8f*~h0CO^_Ha?;Vzo{tH zS8;k9@Ukf6({Yj5lPW1Eisd&XvpYNLFU=Uc8Q3$1w9pHqbHZIT{@`~sNXkOIa*c8BO@nXU z1-Pe1JH8^tTsPe<_LXg*ZlA&GUhK)#dJj-3712-8pwyLM%zl_IT@`;uS=`zu8WSuU zQOgR7s4l-wx&}tRbTT$YIr7He6kD(o5Y2K(qV?ld#|$E{k;k9O5;vgXoCJO zir{|XUdZr|0e`=!V41PFS+$iXnOkI2p4G-;R0pL7tyQB&1BsVF!@huGdlFB*1@q!F z%=STI@+>0rV5@Qa&(`3yMQzZb9Wdn&D0DLL-F#?BIq1wmOnrtk|I^VRQyl4#wW*{^1r(Wb@wV!fB_JxuzjR!Ie2PWiHe!tJSUGDfp z5{LLxjutn#Wm5`HJCuTE-WC6rA=baGw)K@yQukqBb=TAqw_iQ+$22E*-z(P2o7fK7 zO46tX$*8)(KmrYpP)8bye^v_#`usbb{|+$@y<^(AhTyJMM4uAf{an;{P<6OpF{>2Q ztwP4;>`nT8YLYI^fO`v=BRn?ie}^+UuW=Wj^EvSaedcg^AjeBVhW=LDx3n6?R+=Pw z(q_2T<~^-ejQ4b>tD2|1px;A_zQ;Y}&&~3u-}M$QH!>iMWZ7ZSaVG_pS1Zzv1t<0< zCuxOoQtvRP?MpTzCosRiLNq0-L7F(Dljf2w9i%q>aFrfS6iZeTMuZ31C1EMNHc_kt z`-o(WwzBY?wXF(U+q8zYTNYSv<~6bFKZu0qRB3Zgb>>L$nt|ZMzba2n%})J?#$5hF z{7aOhn&is8{jB9DK*Li&Cp>{}8Ll#Z3AEHO)fdl2V?$NjMObWYK$?DO8RD{T zi!#W%fvMR6qMWITcKaNP5{G|{CpxwsRCCD4A$u~`X&T#|oVt-P$F~uUYp4`IQYr6N z!NlVpw$u}R{=@3BaH}~hDSXXx zawpOgwFsT^K!<))&EH)Szm1UZv#X(9nNHubX6~SXGpd+H!yjSqOog|q4B0CcSbJ76 zQgD!g29y3a+1f?vtgJrZ$?|g6UK#?qdfMoj1mxC6p zpx_O!O~{7UZptYueExqD9F9E5w51bkjfT)yb5+;5f{lfR=D!86m|CeqOEqy?w5j@)9nT4%#={4o8SFjpVqqtPu`3hY%oCxh5( zBdzx-pJ!)o7VC}iq(_w46XBlZ8|%rM1d&nARF+35?v@tQAXc4@A06k~HphH7i`|@| z@P8LZAthocRi)cV^`p}IYiD?^la&1EABySTcxnxojGE|r>gxUPUYd>&@QWpZdM?E zwi6~X2F|dY#G?lgO{oraOk~uHaiwj4qsMMT-ltM5%dN8SDRkdYkmhGpy%5FU6II() z5ajqq`Y?mh*~=Vl(*}AW0@|^k(zEw!Qf!6EP!Ya*``|mZL;P>jO3?A8;%{+<-9j53 zetMrNraMt+1Mpve`^+Di{ibW812@jGqu;YV8K%cQON5jZItOMPRJl+?V|(Xz?AE^= z`S>@RGac1=)Cx|;WE==8JQ1mj7#&>*PH>%@~+KbS10e zd6=SK8X(;bP;*_HhDDe2Wq=XdNSO8R%d!Qv~#5w%q}9u@n#x7bp} zSWj(%*1bYBcoEULd_?d2F)xb(9b4j}cLvJ`0vrTy@L*~#mN%~w3)=HeTnHCMnrXDI$DDOzWR+Repb=RPy~>LXK@ zOQ5DB!H3ThJ!l71x}y3st4f~@ki%0+ZncAS$e`LWfOOas;|`sr_V!MoX)aL0bx`wr z;0!m2?tf!$yb`8Ne&PL#e)|j?ndGbqFyA-Mc7EL%YutVFNk>&8KD3s2?+C?}MbLBp z(6dWO>s2NCd;@ef+BlEbdFkd{kLJGtx9~Qr)gC}s)>F-v4Jgosx!O&yPs6-^o=G_! z3a((2`n0$9z-Fc#?+hKdBxZgVOOu=Zq$W3w=j zSO~U!ZcwH%4!>9mCvLi$^@D_F?-0pVNj1+S#io*?qwl(&eIG1MJ`bnXUP|ix%DC6! zD5-iVCzU@%)NKIKnJ_XL64*2HwokGarM-SNml;#B94Pb%aO=I{Ck==L?kLqM4;_|8 zWzAwi`I{<3C&K!7AMaBN zUsWzU9A@xM@w}~?=;VLu_*9>6+%N4o@#Q^Aj4BMfqbA(8LzTMic2Rd6(WI6R&JF|G zR40^aKy){yYD{zJe+@(<*IBAi-O`UxvVnOx>2N=Xn-5V>l}T{RWfJOk#dSx1f?aZ6 z+y^b7ftd;2UNY?%K)j$9@S;piPtgDXAOJ~3K~x85{|wNz20+z5z~dIiEWOR#C)C4x z^Rd}f5~f^JM$PTSz0U~M-DYT5Dbct%*6ED|gX)2Y{i$YNZ}n^|3+COn!h=Gb7S6JWAhsIA*d9qxzS8kUI%mC^YR+I=AJ@=Zh?L-C~!sW&$#; z1=hy{H!}*)%%14Um)6qB1|G9zo^jhZfo{udb>lAR*j&cWo?>jk9O$EPLYD?a{{|aA zAI@~MC3BwY%4cV~+9XUU&kfb3{k%4MtI>mfn4@MgBIgjQr6j7_gxtxiL1nWto!Da< zHVD2GGIG@Z+D+s4!kJW7oze5vnfDk@&L-k~pCR6<$;i7io8!s(nVh0w;AYQ^Q^v>e zhSo$eixf3Kigx?1cGe)Wsauj1{vz6Bht+QLRVS^1oizuKIH(fikfL~rU~ixn5ijh$zb{}7q_3wT$LwBAs{;Mc6-b4iy)i*)KHun|IAg?a+jWabU*1(&Fka*`TRVQMy06-aT|8RsxNX)} z8)V(ckJj#gD{?YcZ0qSNp@od5Sm;ozV;=50(QE!U(_^;8I~+R9=;T7AA$=e-Mp`%c z2xLWGm65Ym&J0$a9|0hqc<3f@r^jmM_7}r%oU>LeMz?*Vm$xkp$C1uPRu9Aah^1coRhRB5kq&onzJI=9x4%Qp_6j#SVtDBy@VB(Ww@wRZsxMToAyMf{;&h+uIuCpP_TCBkoqYB( zzb~Z<`FzXRhHb3?M!$k$I=z9nPeYhWm546a@X+-(5kc=CGo9?L_RTBNUcoA_&Z-nF zOgy`v!v`~axx`){eV&<MAw~<;gq?$8y?0cfTo6rpR&`+^qA}wYdwU2nj{&O2LEh~kcgQlb&)0z(b!9Fxg`5s! z9j!f>HLx=DeH+%vFRhNAO$baS+N6xdg1@0PCIMxuiq7hx+IP0{g)Zc6eu${qL%97z z1he{EGod%^v#cJsc58Aw_abeU6I4DMXv$O;XqHRS-u2lYw_v?wWOa<*)0GlVg~Ehf*xu(i79Om=o5jGe`Vy@2fQsL zTIi@n%xqWJ98_#LM`CA^?Y0wIBNDXuq{WUDB`oq-gn0lZC8> zr)hdayZ5r4&JTR&LY~BtOTTy{*@?*Wcr8nC9r(SlFh8VAszOo6AS+zP2i> zqg6f)1VWNnPY*U&_sPMsD5F{CL7fDVxEZcq>*H$f3a*A_v!wr1AjD^vJ zuv?7s1E3W?K_^dC^j}RHHyapH3h3}&@y7`0s0r1p=c&gAO^oM70rF`ROrFKR4IjPZ zpiC0W(rs`8}{RPwri)6n{X7?vtFcCUe)@IgvMP{s@Ga6UvZ@>zM}txiN-#H zo1qI?`bCm9jC8#*unP=D#~S?jhp9s=LM0!<;YiijGZfc5DBjglEqN98^bE4|j=)}M zqq4rUBB2bZXD@YDl(yc%Th(XG6iqg3Dw3CaD9N_YfKT5Na2j`j*QY-D9$C$PZH$vL zq@GFDvYead)v8})A(5Uf zMZ?B{<{Tt$xXLkGmU%fi+Q&4E@|ddDkk%x88P4dN7Mk*t>X7;(75yPGzGQ1}VJ>)u zd2BPnh%&&OZi4i8RqBsbJ=t8)@&=(rD~A7lp{dENR-Wl1DnxDQQg33AAB!gz*!qQx z|6=k)RU^-t$?$Ax3+H_|P?w@aCwD8HFtu|VSvxgA?4=Rb#xzt3k5%_VPqxGQdG+vD zheljBG=Dm?EP^>4C}#0bnB)1yT#FF;(!ixP+g%-Sm$dJ))KoEh3Nw48p@MUvlMjpi z%T>u(RouuB>z2D<-L%2hwjE{NLj}a`q2l%oHa5jLmIbp2Rog1u9wa?}JND`o*7qfp z#{DMp4`j*KLS#Uk;7y!J>VqnaydrBRSS@i-@R2Od?yP3`JFh3_HeYY&6zo~lS3OP_ z@Z>h^)T`rgTwPyh(;R<# z{ZB~ODAJCFSt4hs-iaeSvIEiZ(!@220rw^n<(o(R@gb5V`M@yfMkMF6?dgBme&PZM{A9>qk53_wkiO*5uq5*>!WI z=+>&D=LP`V=RoeQBZ?bkaJCT;yH2^zUE}l~;5g?xczEv)gY!pKDh3ms>kn%GuWFji zs=u}>LIx_{J~AA2glJo4tAolwho=|YzaHD$8HLA}Au7IHIq`*x-dE=ZWX-RazFKG^d%MP+mxmxhmt@ik9sQc^ClH z?nipLx$61zppFj>)ofs#IeonJZztniEdpuFsR+%d+Gq)M*&1N^d7|dajrsZy z%-3(xqqlj6hEHzoYVj3DqK<%8=5e)3d*a;ni96L5w^A3?%Nd~0g9+Ql8vS>l(ed#H z-DWD6{fD`9Wk%C%poki(=?8+VR0d{GH*`44NXAQ~b+?;FRnk6oZOAL@UJbME%6it- z?2vOkNFK~#I*{JO>l}x+oPc`Escz^6JE1&mmuzI4?S!0xXfCp{H`>LHmC&P0SY|~r zR-R^EkYKPpl63zcgcZ|Or)-4YssLSi7Mk*?$gEjbdKQ8-%O!S3q-(4FhV9fFlI19A zi(RY>{UBjW9og2%*pm$jAA>~we=6pV5*=RM)v#=?R{f!JyDPbE){q=%#WWsPt5!pHSbv}v!h=LGA!0S+4eYjnp#V8@@36?s@TbYMN6nQ-O4YX8(K6*iC#Jw#G*CCj9N zq@f9E_G7`sZRL%Ki?&*l6;>%Gd9NC zpxDRMf{l*S&MacwkIKy>VGahuc^pcf*{hAWZj9s8^_1}*+37g%w|Y3}JL{{T(4hXL zefyDaO#pgtR%9)#v?U!(*j2|#3?o`OO7T0D$gFm%J{3i4G$uTq1!_AKl(ZW(VjT2Y zPeryBO1;}!{?*Bv+IQg;4^K%Y`x?);HE=%90~RfWO!gH?wOMS{XtCj+)g9MI+~9SR zG$>l!m4P;CQ*-MUU!k_&2iUCry!w1`awlSBGM{%H9B1h}GHYVg)Qu2Io=;G&rKM8C zEYfHaLbAAMv|IE>Vj5ZBDy5CwKytjb+C%q5>OU1b_O-P)7g<@oKNWORZmv_UNbb z`+{g}Kh=+!LE(eJ?`{$=D&fJi++JD#gWR$Kq#C7ic8t-Us~wdnM@BKbdmEUBmBvl7 zw%{1o{jfo7{(UNkR}&g%XBxD_gAZX2x~?`-wg=>3yx4v#)NQzd+?_$}&I^WJbVx3Y8{ZtRaQ>;|`hgq#uCx>aPsFTvUI!o5a_V+XS{ zw=X-d+Zj$DVfbAWrd5{d-~i&T13)JNlxAAhcE1!m*D6Oh1b09RNkP7ii>i}y ziZu_TE$I)7(1Wg?cOlz9lG}3?Yy0&~?aDi7H_T|t#-yocDB2z(98Si1z!1%gP@36I z>3eG6^Hido=Lo4Mv)6X?-DHbmQdn=Qv-h^?y zG}F%{LeNA)*gDn;9UK}~38>c-_~aGszsr^AQ7Q*+E4tT%jypuuw+eCJRmNPn?=ii; zdb!_r!@*~X$}fj@ON5=BO4UC`wBcJTgBMvGt0wU7CrgoJ`)*eW3>ED=8}ipN))k|b z7oBl^uFp(L9`ZuHycwPyL*O}80p9cb)OX26_^vvPWV?p3@BfCfcmG~?BANKFzDx*W zJ+h4COblfEcUC_yANh2xAJcvCrxjnrU{Cs2UTz=N$!mh z8S-6h_)k~P4s_*ZBUc99R2|hPxg02&(p{g7ZFoDCYKukpjkYqTot4jI?Zmm(lD}*3 z^s~}i;kjc+cq4vB36VflpP{g+7)h zOjL?qqo(3r;`Ha>88r${1|m**2xz#(aTmlJchphXU%wy=(z2`#^GK7^#ui==_jd|M zf5prJV($`%R3ctnocUZV(D`rDEY%#$DP?F)0<^|mq0FCvMP(Hgdn-2IQO!00*jf*? ztq|jIL*hF}1iMyRN#ieatCFi7-m$dk$#VN6H25p@L^h={86YDnWXeOo1pLtQ0ptA2O_MjTFCa!dXnSu(5-(FwW`8A;W>HNRbp@b zK=BOE?$VaV>c0ICzXz;werH(1?x9zztNsuj-AqyXPoZgZ6py+>LZ1_*OMp(>L&#P~ zaeohF+&IvM2SBA+s`o1c_qzl0vlA`I>3GVGGN$H7cpik1=ieg6>AGyn+|>D)^G_0L zwp8iXSJj`7taPfLWY0Bloz^AT$urKAnCr2}Zdk&|ejjL1QFV4P($#CA6BdA`oM*oI z9+>rx=vg#zy>O*}{YB~&CtK#uDrkJGdIj}gh3mZ(rwqO2{MU&b0b)7*9P{ijss zEhr|RaF5L5$y~~E&%=`Kq=yZ;zU(Jfo_UF%Uf-n;L?G)mfEBiL>G2x%U&^I zC&hW!OJwFY(Td=>rh;9ZavyiszMQ-MM#McUg4n0zAicn;%1)OeA^lwF?8cUV> zUsNu93}~MpPM|+?(TQrpKQU)Z!<2WlMU4qo+W+$#C62HRyXHvzHKO=g#IG}pw#Y5^ zR!zv|+zygnm1Bx)!#u9E;i<7O_a6wt-Woi-V5Db3W24up>^lZT-zUly28wGBdeRMa z?g*h&Cep==39V}p1`ZNBUrsQ;m1xid#q2}BHO*XaQu7yNSHA`RX#?!3sa(FC>b~2G z4Vx5Wm#Ut>4^%i$cpl^6czeQ(0fHmztWDKg zk7Vb+C&o9tBl+}M4$tJeLW_I;mg@Zz6L&o|Kh8}t-~G$*uN4bOKa?Z9dZ84sT@iaq z?cCfdk2^z-=2IJuLXo1NCX+xXmVooVWD^?IISoyaaP%yx7O!r<0K{@s|%3?SaSfwbx^ z=3Av4x6N(Wv{(&P&8S%3Po(pEt5N9~B?cNwQ;rb)8Pcv4wEP_)<8V-^=S*W>Mov6a zVN_V|5SBSF$h1#j)ATI!xR;K_31 zbh29it77n4m5wYt0~PGg~- zm4Fewfy?C~bvh7A&nB8VQBj~KQ^dc@tFD0~rVHPn3(DRZhzS%ulh#F^t**UaS0!a9 zq3EN+@7uYa_4BP6luo>@=Zo8+2)Q#Wv29kHwDu^&o$|n0G>g64UyA4JMmB#3iLEe3 zeh;okzmL=>YFLt}^gh+6U0JgXAR7Nxv3fCR&p2r1x}Y~_iRwhb)2W3uyC)djj#m4z zC&{sHz?Cz=n=wGlS)js2;;@p6M;VA83?Lp=3_7$hv_%I;q^(7jT0x)q?RvKjH}g<_1mcDD>_E5Y&jY-v*^?4Xr7WA<4H!3y;%k8oNc; z8T)k_bY_Sv4{x*Ev5&{iP|`Fk|1$;X{6gjF-(YMpb$W*rdmY2gFFAB^9MJFxqBqo-Vt`sMG z?hNUO9VBfG@Sva4zdwXij#g)xuR2o=IeroB96!VKz!23QBvkAMC^$FK5iili*F$#Y48{M2aNeTmgwb0~5tLaFF!f zVrawqf)*ribyKi6 zdNE9&80D>F2n!2)=)e$%wpSw>Ia=v^J>ijggum@pvmvE*z7G;_!Zz#aTFZ3?0vPlQ zSo2l!W-+WC%}LARjqNtriyl9i(p_UA`**^gz6Y~GDk6GVx|!P7 zwz`;HwgfAm&LL*eL~*J&RgdSC^&OZ|{m%MJvW*vz>{TyLMnmBb_-PKMU;vnfx zYG?jeKmND^_rPL3DMD=q}L)K zLx-up?@HRI6VZ#lgm2-5?g2z=hp{KyYL6#6wU3iC(8FO@m_vM3YxYr_<20bMb-El>j9BfHG;v!pDfY|Z z`0hln`wC6_$I{nSE?pX)gz?uzI=y9?-N+*?x)>VviMZ8k<#k;7vF_MR zX!4P;trN-39V9Cq*pT|9GhdQU?hcF}B&ZW8dOk_?aG+?Ror3wp8DqA4blGiC+mV8~ zKU9ybW$PJ1@^q$3yVqi;zad$^fb^Nas;#Mdaggeww=DG=tF|pI8n;`JyBm0Y1p5p= z=HOo$lZz<# z*b8d4S$X$5rAj5h<3_^Cep1b{&T1wznKSj-T&)TGo2*)`jYD0U+9Qb;eW0XW56$oF zM>XjWwyyh+xOFDF_CP8t)ANdK+9jIMnmFdWk9WnZRL;!tUTwF5?6b)#%ln8tzGLOk zf1(*eRQGOE^b+OcM_|@nvfOwJsCW-Tx4cAs2P*kjASW!7*E=>OxnG~6KFL;OaeQ`W zAkU_9@T~mHnnj1L8583gzly@~V};i=5dHwAdaIR(t|PuzoA`^bp@z*39XLk_7Nwc% z!5jZlXGXa7{#9Qbr>^rWMcu2uznAPbc=ZvcZ8J4@&#CEpjW~3K>aBOy4%n^wS3$*# zFlhbT1~Cm;jx_)Zv{D{B9(Yw1dL$Gm_8;SES>ZQz1X2D>)fW*xFQA_M^OAh(*M#q= zYQDe92RSw%Ug<mz0i1DUM82$+%GE)-^`mAy*4h)hwm3lo@~(z*6ZQ2aD9pML1TRkb4Nzy&=TC)-uih#C-1wQ@y*y{}l#ZY-3S5uj;h& zj_3YW$8>+7zSl#4rs)41KZcA>`RUITUiU@cB-(Y-)&J(O{Bs;8byka-UoB-gX=v(r zU+t91i2rP&f^!Yc_={;%6-$*10beITKliZ+dj<@g#TszNkz9FIW-KPR-CLqJWrSX| zRee(i6t&*q@^O~o!DRd0Qq=EHQYR8zxe_S*PNh~mL7j#Ym$*Vaxe(FF28tKCfK4NT zC)tQzTmWrtNL2VJ(fg&q-BF7BMOas6SDIAQ)tc)F=~sIsVXI1`D9Ey$z`1bf!@0LWF``V8Z2TxD-(IH8dzk_@ zK>Ey!8vCv?aitteBijnCnoczBAt>P)@OOF8x^9Z+v8pG6R4=zusr#8UV<7b8XvU(y zSayt4PN?c&@#f#Wvg9xG=#OMc%SW?BY-IYokI=`j#G7X^O)6li+-^{da*E4ufnoOv z4P&6)Z-6>pBMdJH&5|)3wyb^l#yHZr|2q z&vtvg?XxQnE#xL$m;raf1+@XEMYiV&UKkoOqkrkDY_9xm=%l}cdBLuf-fb{?r_k_n zz#lQ7eI3ap40fD=9KJrG*L{5|ls2AhBZ=qM5<1otcy=2aTtVgiY|)OV1l9fmzaFBV z!j;r~uBcKnoye9|ka~+D4`#t#x?d@OKOnj-;9m<=BT$_DeG|=rE>5DSRG34}Gx*4u z7=!);)r`45a>Cw~VN=#l7OfXzaWEO6HoG5(6PGUU;(U)pnz+qk`*60UnnEka8#z;%<;*QIOY0Jcw<63=2Z|nI zY1>mWncf@8z0spDcR~7O0!q~(M4bco2sFrFQMmhmiiag&UrrJkT~#SI1EFMAP~-=g zweOhc9AZ*Y9VRG(N(`YarZq*oBG0i-GX%CN<#7T z%#AuJpKrn@cU$FSZB<(rVVo>W)UzU}dQIZMOscoDlWxqeST^yubG_QPlznIVaf{>p z`*n7bVXKJN+;L2o^VG0v~HYKq)6h4`&TX#>2~cDP|z)yUU94msL7{Rvefu z+U2CkzU!(f-isbCN^*ZIuwkFlf>*-vVHT0=Ao(L8XU~hRoz>`@j7oiTLnpUo`tz;w z-@`3G$z*C&zm(kIWVpf5hm482MGl43s?oG2?4x9AB}Ng|PBg<*p>iEm_l`DtF`Yww zkCEn#6ph$nadC%5nXf>lWzaN9Ox>#*j%`7vS2x2$hfEo}Z&r;unRY67o9c4rD8;}{%cicj;1J|e=yeo2~h3ZdByz4TYEz{r(3RCVehB%);&~cTb(N}{NXOfvcy&Ut; zXQnMLNpnmh@!lkNL^-vgA~Ik(Y}*lJCzK^yV6nJUM~Iv0gSEX^sr|B6rOGM?InR@+ z=*OONZP=$pIrR;%tiB^pv-dz`a%-MD8rz5{tSzX71D|Gt+w-s=;z)OcfS!rS}>JTc|SGtn?tATinc zfmW3j)LsM~8BP+>obB|ktliof>Qc~Xr6oia3P68%SBx8>`XWH=%GFkCP7(XFnsuul zgx&NLl04ejPb1i-=>r>jMkQ*UYMyAaoRMVL5onR&pfp7IpE9kAu>AVD@}RxScfx?c z)(&!X@X(7HUOxKFL#GEa;>r?!4h8q=4^CA~P3OhxY^w~XWJWlih2RD&gmx`g39qNx zVJc9yyz>28L?L5|o^Dk7epY!~kn)Z4=3Y>2y96v~0J_~t@zWpl&tby3?yQIFkiML*+9OzWa3`y~2a66Y zAy_t3d3G_FFRjRVFrGY%mXOcQh3XBe2`79vcvF9pci~2TQW;1zQQI;wpSr@y)eGjE zKWIQJqBma@_g9K$P7uWSi$u;4ZCxJt5NeRGs6*-UcuiyhUnhCh{%A)T&(R4$Fl9JZ`x|YI9FfcXfSn$GjA``$@P1!^yqdM>TS- zXvH~-b@7JouXJdAIZ$Y2Q6#w<(^zpNEwDI*k*ceqX7ddVyu$c3l{tQGtvYGHE1E&H z;a7|G>s+3n9eO5~?CCMELxWX+#}Os}n@rGLHfKY~9GW6DzP$3c*1+zviaS|Aozr@q zAGdtXt>g}^9tVw>qZ)IQZ2vZJw-#0Rc7WK|rBy!rk@d|=Zn<67X6$M$M_OC5H(_%@ z=4Bqoskp-Ne0pqrW{xJ$v@hiSv=QE@81bon-Ee3HANST&qiKQ(^Ir=7h)_J*EE?9; z>fUlzGYl0i|3GxiKxkkNmaetndfusfE7rP0zN*Zgr;_ZHwV6Ct^4}9#yG~{5EJwz! z^rJCHeJHUn$*~D)BTriUzfe~S&HdpF8<_0ZkJCQC4;zty@vi1@VcX3-V@6FjITI%k9Eep0O)F1j@|ditRj2-GPPnmi~N}n`;KvNYA zloY9Zif^w7^}%~_7L0?54_42~XzNT2vs|PVbX;|oj%6LG^V6U}4+kUr6MCjn#E(|# zTS?%z*2?NAu{ldyJ3hhMy4h8}Tv8jc(b#J{9d|=BvRBSPD^{=)e+aU83Crod(73Ba z>jxY2{w14@Nn%D^Q&T=hcxXECff|gN)+-y^`)YhmhYFS@)SG6g_(DRLsmkRuDE&^a zRBNnI*L}b@uORH8#kw_uv#nKoUnl(|3~-ARf))z-4uy6c22J}H@v^x@H8+4}pBE&} zQEZ48%-%25t)x=t+r%Xn7=sgR>a=G10p`}3!8KxuKL^0fNTc-oKGDox%FDhHuROzLFM38P9!BXNs$gjs_!*-F)xr8OpFOqgW9I~BTsP^sT+H8}JT~JUYCO|cN z7_|Q(U_%VijjG1P6;-GDM>x-4lUcQzC^SKIbr;n+Pl-NkAsTf?Fzz9tT?WSWGi0v~ zA>9^1w(@bJXSInMS7I6&K~%hfrA32(c^W+vDLuf0)^$lD8#2Aw&0PGNBA`l=?ez>u zRZO+x6;NCR(W={IT68f^`4FPmo2nO2sqXFr^naLyfM%?BR>3{<75Iuh2c-HkKel?Lj>q{AL>8i$L7!GrD1Dn;Q*xYQ%=E896jBfJ9lzrvcS4~oV z&$)oyLUAWnbU;L+CJYgr`oMDVwAylap~K1&J_a#Q z?8J2RBXj4*%+q^2ro%Zey*y&H_F~~P6@c>@2+x9vYHmz4_bR?Ex{ z@7RMi49exU=pRJ#zN^xq+^RE5ir&5`a_)f0#2zXE&w%jDs#h+nhGvD9Y+$(JEVUP3 z6CdBK^fHTR$F>eyUuDcH$h2}fcx^@2bNMWVy-`d(>higkWUf9dxBE!XGKE;remDzJ^dlKZ^5 zx-)vJ6ud{eaVqfUG|{?HqW-ZU|GA)PMS;bUz}^3d`n4l;Xbx1JCOV>pYnR`2lA^|_ z-55fewhU3*7^Sqi{!fBkHdb|YYXF^duD#Dmf>WThKwI413GPmUy9C$Zga8Q=!zDm~ z;O_43S_%}3v=m;TxR$m^ve$g>hdX}8P^aA$t|wvX_ozlnzwR;=noSksv7 zib%q&9~C{D0?VcoUz)~zv!Wv%V$>|@B(n7xqse}uXIor)yU5sk%UK)jAnN-s(aUYX z>JvmQ2NC^znJD25@#Z1Ky|OV??!$Vj3e$x3#1mUHo&Hzxpd;aVHxEl|%%0RU&zPu3 zCkgpivOeD|SbN>j_C}^owaXDo_ZpM79!n|HR%_}HwQcGV3vWXgNnP8_XmFe$_9#(9 zzsQ&8hMNs$iX94C(8cnm6mZkN%0W3;%4TGd>t1?P+s(%y#CwPgxR2Tj_k+A`7F@mB~DIfcu7G%|IOBi&m1ozZ_7 zXW=rKMK_6a2Z0YSv6z@vQEj2>r&I8*%wU@#MzsHB(iI^76h}^j=EgT|qw8Om&G-^( z7{{w>+=yVK;D=-v%0ubRPh?=v{v%fwsD~wst(J{Z zTkr?+25p4B6$8j2i`IKRY@1|h&MDU>H4V@^eT6#SCdhw^K69&qar{BOIlqP?%6fT)?Qf%FXm5pLw3L` znhg7>3*ZCmmG!J2HUUKxI(iV(#9E9YgINVoz1NFxzt6Om?^ZY*zU2Q4Uvm;E8X=F;igsL=N9;sk=8p*c`~m*xg5*n{P0qnjY?>@G6qxAu z#`p2rDYr>K?S!4V*m~XOSnC9+EjL|l$aU4&?9eS62=!(&7KVuTcX`;F0oFz?Q@a?R z?fom+NBsoFdRD8Mb})0|6_|t>BAYu2pLoMOXuhda=RqvoUov_w7qSjbQ>uANbzC=S zj!UB1|8=#~HV2~{G38BQ+K@)b>q#i}mhk&%r9r2NV;tgL;V?6^Kzz%#TDe?EsaikfxA{EYn#FRtEz19_CCm+XFu$zfO?%ml zo?)CWYaI8I&p2PpvPAwyv|+TN#0AVXrZJs3PMDR%Iw23~mMBlhR8OHBn_xFb1$;hQ zjXkQZcCk^t{#-TbGql|TXx2@tg;QWRZH8U;3flQ!pxOdxhZyMhT}gYbCcOTnv?@&L zug1(Z?)mx5^FU1NWay8xRv)FPPOEJ-bsO-uk&u4`bHG2rwc7-`G)#<+F2d3=hRuP3 zA{X+5$1~``Fyar}#N9rVeV69Lf9#U_mwbdjODw19+s{qg_GVCEx8H)K##zDWUli>F zQ?*UJXD1E!?11ssj!SR7ZPi%wE5Knd##mhec)^AYr4`F(1@^ zH`3}iU##shP&MK-wD1wq85g0iqX;qGfkrpjrXD1_wmWciA=!Ucvc8RC)bB*vvz4Mo zPoT6$^)9qD?}$fyM@6TeqkJlV>(cU4yJ0IwQJta(Ke ze>6_Hec~JeJKa92`ERV6+XdCEy{%^UKV-hf!kmq>Zobi}?x%f>IUjsj7tXSEIyrx> zA$Rr>c3xa!zWYGXb)lh?rI^=6LP}Rwr`0xgB3Rt)hMhDU;6z`ByDpQO;g4W~N2?6} z0?s;%(6t@e&@8SuvW(wb{FJ@2$6&)A!p?YXwOz2)+Le8%N*4~0jrBi^?YydcW(*3~Ta51V@RIv<2-C+e0O z;Q1#W@d9pa_X0A^hQDNY@|}8S_@@P~9S_k-^M!_u6gFp=dkg}{6#=E~P4a0d@wEKR z*;Xnwc%`(csnTSZbXHBV`4d^&u406xCF-(A-08JXLwoYNyz>BIUlhkHx4O{0i?0@}XCybvO|EN`PB~1q{ zP>K+?3K+T?`f4>$XAf|^vGDxGep%hk$G=o$joY9$!e^0JEQ-D-T0276Ok!@=1g2_f zGADQVkhbu5A=1HuAFC>$|LOR*&Z9@{oGj!mW>C<)frT zM%!4mIfh!h^O3cC8d`62h}FvLp$BFH^-mM^^%0G_!<5)vsYd{F+De2q(a>LC5ZsnR z3obD{OGw{AaeRyFkqGGhs-&HsI~df~CrirsoTcwv6ZqKh%B2o}X~z7#CZyRRHMfpg znLk*$YIUZsp9TMma4>eE(1MnP1!F9h{bZ?sPDQ^1s`HPKuKz+<(Gr+nER_b7@VIU_ zzZW*frLIMpv&Iv-ZGlt!2|G534j$_wLzLk?SBV?XBd(p5oNf!ny!y&!#4E@=tMb40 z%8{|ke^;=)qPxY6eQGm*Qq|GMbK(P2X3rMS{0Hx&r`qPIYLyg4`;NfWQqY%6p)w8n zz8iFZF-^@iK~v(=s5iHmrf%x1nowR)=0_hVEq1BFJ0neoftXte-2G-WXz*r7Wq+S-Z^l& zAAz6e0^_QXMpPw44OjYOw^GzfMfX0UcBHXATM6c^COS8r^;*5ZA#U?lokFqVWIN{~?No=;To8)8BlM@o>Te7DRmD)@IgI{Mgii$s|7!#t zH+8~@bzN)L9n;cUv%tgrB`HYvz_Wj>OY!l1z;!q z1uw8z)k;a97&&)A4-jnDcd*T$Gd>gs=9ed`Sk`c8H$N|$;8OB9(BZjCAA5P|pGY)) zi17N)!rk@@{TdA}nIDq4$w=}oAAdM$oUISV|7kS)yVeo^(c9un`bNy{Vd8upLT1n? zNJKe9s=r2p9cPZt|1$@((G_E(J zP)Sg^SmKA(h`VJ8)a4Uhq}>6&Ra0rsVsPgT;LsT)%j<*pg%G>Hl6>sTT)!PC^Y+BC zVYMpPo1T_U_hB$Yvcmjx#yVjet(49}d@h>NYm%TzSH_brL^%$z$<6uvAt_6*HW3ZsPV^@t4yE_GTQ6zLku%hEyYh#zf?z#y* zw3O|s^U$WA)e~bI_sg%7SkS0=X{(08xxReA{ot%?2HYZ`=W8zeW^nI;7vpcv# zoN{)u68goFS>Zm@n~mI#goM6PN>QZ|O_YAvO-MXK)Vvp=%qm6sZI-&^x702(VZug7 zAG~$A?r7rKG2lyI6i)M5yQ$*N$3k zG_)}3Z_OFw1~We16`GNo@K+l~awX`Di;7C;Yt=Q|pe;sOR6J21*cqk(x$sCtC--*u#)rwf)= zaww^W&%8@E{Gl80Lw?1VUZ4>ziQCO$ZZKV_gfeIxbgcVGiCNb^)9(?l+B>a@};5ndv8wveG*iO$*`eA}U`M#virc@2_}8%w!O^93&(O4qb4C9wvfj=T>@D)WV6hJhi`4a5KWdFk>Ua zMK^V1y*@_00Yj~=^p~}BQmkeyMRxTQvUAQuANR64D?=)7e@FVin`u&ZR5JSKG0?Dn z#H~iLyzkF+%yH=U6Cc%0X3l$^sp(8cyFO(9izodQsCG$PO?_+C+c!&X_83nu-?p0O zf2kNb&1&oR@D48vNJ+ER?_I6cyxh6U(A{4_(^o38UQ)fhKyC9<*8Y~+dT(P?XDB<3==J!qg48Y;$<43NmZg@YskcZU{iO2$T!7= zrX(>9>qyA6y+-i##Y_$IJA8DkD_a&B-lf2k9M;CW)(g97ZPx^~gFVK^PC})X>0?&m z9;Hc^UsD#qy&10Y&6K-w2{p4@twh!*H})!T%}(wHQD}wNu8?{bso5Ml(3`@(ep*1 z%(*~|iW3U|z&de-q3zZu>5BQd)hwprrHMw&QfiTxc;g^&?)uCTuNXzg15;yIH_me? z@{{2kRRVa)<3N72kmb+`(8ex6N=3pZVK|csW44ffsGz#$l&5)~TN^P82>X#yse{<* z*ThTHfV~&TR2N5D%{jrt+zVDm^j8de1DqWQn*0D9wV5e?myk)ze6F`gNoj-m zg9Sx5T3RHEnFAHA>p?f{h5jYbg!i!FZ`Ed6L-t^O2VMMz=8R|T&q(@19i<)-iteiv zQNt{?Dh8ZR%NW1HLFy=n78f)!w+(Z*1tKF$J7&ut#=Kq0JSPmaDNZ!$Hn6`Rcv>^% z8V87Pc7d#0q@1N3xJiGd)uE)B{$Ti95T&$ZYWtP&=pUt5i$QCA%D?4O_BImMXJCCZ z1eiO7xM6?eoOtLDEc9QHKW2s__X-ik6$1toH}vM5LB#{Cf`Hu@5IB|F2LFiO2K!Rk$Hs&;C6c#CGL zJ=(>yy~bPhP4P7SY=u4Qx23KI+1+u1UM)Z|7l5ROipkYfKdiCZqLm^dl&H;pa{3%K z0o9wEpn*LlFg%!ivJ1WeCD`p0XZ%gJ`g{#WiP*aD{(*`L&zVCiiQ8$LxT}VVZ}SbfANG@Z zeTryNBvT)UY03!0w+p&5&T-}Y&O+O!DyCbH)~)tXs;ly{fy8b8F+8)Ck%?6YRb{0WSQ8xN`|Z^|})V|EYBREb;X6 zetY7nW4Dh~{oz+n_nn1C9Z>IS9K5I_YRimP`+GWg%@!K^b-7Co_Zx(KAqpH%G~WbzPFfod0EkB!~K+|siD7CirC*KOxZoHevNwXgchA9^qm6zDT;N0 z2+j;6&U^(tp@Z_b^?)^>6di(9>r^G(?I*OJ&B(ApsOV_YR&AjhW)k8mf;yxDO;`#( zw8ElqE5e?Mh9}*3obgi}e?9no@gp7iyMW+Qw4(JrvirMKFf;427P?;j2&IyFNSD`(h8*NkGhv`1nGUrv-lvBHMGVIPx@JcmRuX%m-^3_+H zdy?ANQP!JSO6}+)R)0>TxcFLmQ**EuIB!TScJFKf(Gd*bQ zNNTr!EKPp_cZ{Dfw&~u9@vTCM?ssQybqVHpb4W;KNXvz(ayB-FP7O6Qs~CG%YcT%T zpHX`u>w>A^gZmYwA3&%64!t*CsK-Uelxi#T`{HzvTv9*-Bk_Sb^uUt__dz%J5@x*yHXKs#UNCI+{i27zC%J!6q;Rm9!Nb|SOduZmgt)@5 zL=!RqUm6jQJi=7IHY4&W=-ZPXZHxO#5sgR>B$|{7;J#oUXAL{wE%xuz%CLsQZB9#S){6C8{reKd3G zxF?I)yY?OQaZkvmqM+>0JneJBu{X~N>Q4p!%A~sd5VTW!!qBRO3B!p8o?!Z`7;&@y z%+J~r=j_b9`WAE89hPsm5m!D5x*Mn5yAnC=c00%s>obSP5YN12yaP9hE5-urjxZ*+ z1`YpH_+dCxqd!^lWEnO7_q_=T?T(4f_g+kBHRd5rz{l^U(!JG&rWbLzYcNrf8o<7d zpa%^I&&Mc+_b2LETJ%~E!JufNiqXPlZ+?|stvosOgX?AL&w4#GP^&%B=29#bq6f!B z4o;kKtt#Q-aH5elEH*VFTdN7QZf;q~<-dd4iv=(=OCJHC2N#7XmroEj6zNjam=*h=b)E@yqeogp)2i*UDx zLW464_Wn;ab|GPNxTVu`K}|-GY*|32VG^6jbwq;;D3^$a4zB`x=K@eShV*?FP^WF+ zS=Sgo_NCk!?YI7VMkX#3DYhPFNE|40SEb|(7I`vQ?bq6BV7S#G5fN{<~#(gWpIxs)b9w!9(P!>Do4Wj_l1qlBxR663{)dnBFDofGDB zTaFU9*^lH_*v@Xt9_&=h!p@XXm|H`@%N62Og1m`=xwx44+zg^^XN*1icbc!WzA@f| zjEY*xz|iZYYu1oXSi{J?Q+4`kMMwccNI|9PZGh^BLA^Ets|r}`JO~@GTD+jooceYp zG*3LJcM@@Jsdm~{&s%s* zQ!|Gkb^UPmYPA*G-oW8+ySXNEq%j9tGf$iW#9y}hizON{nu&v19ycW!lUq6866Jrd zlAK)Y0`O@>FQz8{3jY3swRbbt)}gQq2dh3>N*X-E*m)shvz>$v_-bv(jaD}vur})) zwZU!RJ$=A-)hWimnHh7H>CQypyK_uS1EGtz0gciDe=i5sc`ByTA=j91d>oiXuy-`s z0gFXz?2~q;`7?VB~n9!abn#7SPzs#7(w~ znfb=ZoNKPLVvCQD);B!+9hsZ^$(a}d=hxNb%u7pV#9o+hConIr0B-9C1$H1R98Bn{ zhMs&d{B{QO%vnH=jGjGwzi0&kjnHR@I)v{}g&c&iu{Nm#r{ zys{UJx8y&urw*~VY&hZWK%v8pTxWTT>m07-$knPOH#?J*JVefkUF_5fQnyDR>tsLW zIXm|gUmPn|&N3QxW_|IFH7E#(Y7Uy&k8p7=)0e44&H(1fFG|nXSqka}+7M3~@s6qM zHm2&!VJ6P@%=T-H9jnsX&FTHJXcs%V&MLRxt(Y*z>Nl&cZa->u;WDdjnp)fal&UXT z@n(>s&PGDpWHoTVBJ|Q-pu{zTm%zA_K$uVxxVl2|bQrYnQRtXCgxLDb#abv|3<9MrxjQ`dLQ`=&5g?m;M1LlN{Jbof@Qp*f)|eekY@vdy;F^`7P<=mC#f zuJO3j6qOF`Va5(JW^p&i*-*i8K8EgC)=aUj6MVcfN7Yq}c)$IQtWANOM-=wgP3}w8z%BZnI`1gZGCKYugzADkZDAGQW zqyxH>x_w+)^v=P$cZ2~`6`gu1a)zi*-Dv6lF{KgbhUng}mmpUUiLndA# zYT8pcythL)pE364RXsY`qrtm9gv=(&G1|p|*FJ2WYwFcr`HA@YD#ka1fS#wAp2q@S zcSZ6*=s*9ec3r3%cb2th7Dv19HQFK&8b3m{^JI%6Yid-Uk;dXqZ`H|dR6`dlI#hxE zrwMyYW;m%QDjHkrcShD$hPVCUIM*Ng-T9Xs;e97S9SbW(4z%>meh;yKTiUQ*W!ypIn;Gp7GS&o4^O3vY zJ2FozIg)mxU&5jde=1HgL{`>L%N3^+fFnyltL6(=xz0R32PkwZ zuy7?PV?B{Pi(PlbM>p{0MhV!Z;{JXV=I?os{m+SqRtDeir4+c{V*B6hrBroN@6Tkt zQd{w0pHh#5%1bw?G?@U7B<9vp2B$^{{ql~<93$zVBuz#_4jv%0B8E+9S!1rvaC}!u zd~M^^^omgF)LnH%RN};SIhV7jyGam8usPSdHJINWT|4a}?Q!{S0DPI9#KoE8)GE zo5g~XZ-A>TB}(2TG&Isdi31L%M-y_~Qf(7t)iwj(?NcOAR=ocnG_)c3U_(&)#>Al~ zNG7f%$yQZl)hFW&s^FLjC46R>3h&s#GVCB@@^&WuiKW-y#`k3qy9Z{$t@;wa1@F{} zh_=%7d*x$sVE$3$zbA&Oz9Y`CMk&6FrLS$(ktXbp8RxjW+Pmi7I>!e7ega;mgXBfr zfz92WaODP3?Ve2Mk25D7ASykJd43Jz)l0$2Yps^Q%XV{4XovHvO?v znch$(>;;_T=ZRKqflixBI943=O{r9;Sf9`SK3Ot+ZWPL?r*|=}TfGlQDbn@-Bl`2A+G`_-9yVe0|5JGL1Twvg zl6D@%PL7d=d#p^6Z!3|M?`EY@@vlK;9(ZQlYv)sBEB>-IBc+}%!dSOnxLaY7mw7EG zo&pz*Qhqg-==Mr-3w+PgW1?eDpJ4Y^8Fm+c=ee2cTc>Nd%IPAh2>&iMb=5KRrN<-r z9Ff3Y>;yq-2a=`Nh(o>y1>X?ro5e_{+2j>Q!wJvEMvh!k z>Fbvo1(_#>5KkJVbofWsj#FIxeAnfv+l*IqJ3Eb6lKDGPow=RVmv@Irt=Zc9+Ug{{ zCpigEH-a8LA!=9}cyg7nq&0KC?}!SwV$M5|C|@ws`^v)k2MaGeOmaOx%YnZ{ism4c zDh$jV>(PMa;=HNkr=c5+NxTc^?Ld;Fp_WQ@CvW;}q6O1H-_Ej}J~zw7vOrj8(s$X2 zre0&t{F{+2+2K6h$j*^i$gHqbo9(fa>fSj`^k^^P{sz+9eOUX|BYWoqV_zGf`EN`Q z7cn=>%~JA5l0So$4oqXpy9Km=rOL9iiVX81<*JiukcsF@7vipc#o3q1_zI2`|H~+r zL#G&pX0mtSXR(9E3HDt!=r^Bit+R~&qe;U{ino4>aI0m+Mb|P{cu5p|M=5$+iuP>f z(1psz88;sI<&bE?IYxo~VtYPh+%3vduD?pePsHt(Fh9NuyChcRU9j@ShD`mFi4uwt zx6h@#dgdqh^7XG@JGYV4kN*<#CKDBF!j$|IbI4?tigSfaXJ$VC2Xpp#LA`x~r6m-X z_W}JosxA+Q_KpI2JSED%iulGzV}5%CD)A>#zc?QXhd6q3BFULMWEQYutC!XypbbK$r;v~eJeIdK)Dq@f8!{TQ_Yz2-E?Sh z12R+A6HhNr+G`Z>>Hs+6yftN-dx3LSh||8QN$vHcc(oe{re_B=*h=!lEF-NBv1$In znD2Xuvtfzf{GOTk-X)K(uSj+4tOi#O7iuxWkC+>dcliKI%Oh}lmQ6{!v^Aw4)x`XF z`w!=9=u1P@4;l%3Ze-i{FuP-zpGJVD98%4E(4b%q;zElIAN?P=*Z0cv8xkGgM6|J{ zvD4Z!?o1(x{?$r!O_jLeUjwGSCtg0){Z#aKN!fdbbj39ol5n3ZRAGax96cZ6Tth`GVtlp%Z>){g98T z%46nLlR)*m5XE(2nqFM__A%($Q;OWTnfkOb9Ge%W=t}0fcZhquBd%1{IxDA}>h+69 zEA3zIQTDNl8{?s!&sppK0ef_Y+AirJS;PRae`-pHZO`8ew< za+S=p$1wjMAamih_$mhZ{4MwTf;zu<{o}8)GbLbek8l6 z582AGup1&gJF{OH+qQ&cNFfj6PM!KAE)mfj$yhRRV;`nDru>^VW%DuR_i zGwD=9zdeLtAL-CxK&!EY-8qP7%mDpTg*jmbOV2kVFA6%S6>YrdZ=mTiTM8{@xmG`G zhTVcB*H-yDO3mP=N;6+sDzgo=uq2_v5Q8612iTOGMrZbBI@5|cbpT{T3Q763%!j&* z>|5t@uGS9!aNO|PJD|Sv3@XGKTAjkQI)Wsq3dy`(JVoVN4b zpiJxBwCjqx=_XA#fdgiVX`92b$zV_s=-|cB3JNsXsyfGm?H2*W{{))l>faqf001BW zNklLUe z&?r@+PZEb!bdj5dYvdtkSYh(LYK)*F(Uf-SMNT{RGY5YGV$A1sGiJeZ{F zDwaa6#bg=)?);hP#0=1)5s()zh_|j~`e&Nx``hCE+lBPxP13dni0Zm(K92Xyw{ejD zA4qnEF>jb*=) zdJ#Kemy{-3YXf2V_l!>U9j#t5kXE1dnWjsP~g5jhX25KG9mm@sv>LnHSYJ~9dX@rd%R#wk*E zf>Mo6#v75Jyj^ot{~KWS!C+9vD~!%Ngcl!hxmr4xX8%K)cOx(`%Id6}up`>3m**Gj zMGS(rIBjuapGQeqAzk|zql5ebVcP@JZ5r)Q+i-#j`l*SylR_YQ4qIv!&U&GUq}=bt zUbdUiabL-Z}iGv4(fy6XawA)pJTz$3b_oLkPaw+~UFjY7p=8HtW`%$NsDwpT9MXE~BJTd$UcWx0Aql8!Y<_U|-iVRP4HzwVe* z(V*Lf)DFr7d+ZtMvEhV62}D;erSg@MM9p^lY@XAO&2@{Zc4Ow}S%gF15r3$~e5)nP z^CaQB`C-QFVQG6xWXVp0u_IO56oHd1#=5f#eDx1FgD*9&nv{bHq+3jM?!-ks-p961%_p+irKIdSCJ$TxLza#Z;&&Q^HQ7g%ye8 zSIn7}bNql|mu`UKBE*C>5O>%M$o4R%;=`GmEfX&BocZV=rpQ>Ki<^nsS0e05N9Y(A z8!5lR3x6SqO)#|UKBH}KlJC2+Y106FHG;WSHR2&-!0+EBjGnt-^z>EVaq7OMj3uLm zeqJin`>p8i9}WGoRyZ-Q%IyvR_>bo{X-cdJqz9!abyQP$ccO{r?IKESCiHQy(DuH9 z?U`8PPs!JI!9rO>iHi;=s`E_b>Ko-^b%>k2BlEs1{0|FrP{S&Iv*?7+El?0{{g;g8 zlRcY#skKFZwMhEuGfnSAw6B!U{{BR$`BE##?=dAD5!4vRbncW#b^idjt4tF719R!V zWa_U~oPA9=dcx4XxkCA39r|sJ(RWEmnLB}L&32}|OGO%FH|F3dH5ZfEd2-nEJ*epF z_F8NoE@aAF&(Y=&C3W!-md1O>^gmxPZt=TUFp1sOY#HJ?Z`z3YCX7v^E99M;Po~5( zXs117I~{)_();HcdJIm90`q&YFXUl9XT9+`WNWl6*as5u`;a`nY}Yu zV(T++>}Yu96{c(Hk@{yhvN_HWU7jEulFYV4J!Ae}&d%)N*w~4I zqF{^IVkatg*X-`@nmT*ae+J+Cobz9oG2N;e-O@_k7dhD8?ZbR$BAXG%nI1h-t~Xmu zn}5FhN1t$bbzzU2sf=T4Trl3GGS>UJf$QzEz?wa0MPuKq>}&_=@CBNE12Fh1*%#T# z-Yg0n?FxL)qA0x(I9NvLbSs~e(1_6c4yeZ?bx-#eJzX+-lK-KRBkx>Sn{b$^;BiCC zlUWNFWf_tN7&BG0VIUzeN@>Ctp}=s`&(S8ZMz2n4t8`S`AqU(8Ga+pjs~mc%D85(e zMk;bPUh_C<$9bIflMUKdWpqnWdU*$QrJI_BdGI8@gm>o|_WP?Ldm<+oXU%8E+)P&c zJJwy;Qf-J!GUy@EgpV*MhKMs_pye40R5rw#lxt%tr9@A)Eh<e;`iGr#ybI#k`>`>+L%vvVho;uEe5^R1%Bo3Uf%sS-<{?v=Qt}Wl zUB$Hbtiua0GbLC;#@md)6M#88KwmQnJ=krzUj){COW@TuK zE0fDusWePwWo4DsX-TU`g4+AB$<)D^`Gx&F!!!9ikzKvKb`7CIWz|!;1&3}}ot0YT z_^(!{76NL=JDR^K>8X#3m8X=ag%V$T4a~Eub&3L!ZBC4y{s(*Pv$&;(s}#rxiP#M-Ka=TGUqinn8s46ZP@RFq1<-l1Bn3_xd$$kE z*za{3?EFb}WOmVn^;XY%EVgA8N_BN#vI9R%%|66vh9TDN>TMb_iCzAD>coxi~94$hV+vi;V}!UdhF5!$Gx|W z?a)uEd+(}F9;mwWpsJe$Zn2s9f4{J2Y!&uz*VlNncQ>A^!;ERyo}7N&l*hjo%6L|= z>nBC=*@PiYA+ICVPWw;fYCg3YyF$AjAz3`zk#be#%v6MxbLh+jFOK&#co1lGUU%U1c9G086s<1+VKY?|GOHYmWsB&Hf|GZx z{_;%a)podtPq8!(WL>2cR_ zw!|@&T}5cuQf;wBYqK`7Zth;LG#p@M_hHgDPaOnIVP3gNot>q9{>3MJO}nc9|I$?Z z%jYy}JSd@CYxec&#J=6b*w=lZaqCSqlD`()+{4dcr( z7`~ac#n$}O#q>aHTIUB<$whkk0qN?YWCvG(TjV0y<6-2UDFe4|h`Pz2tu3(Ax?@jS zx8((~jmL@>eWv>B9MX(C2sf(|ZR*K9=Dy>MJLmDMy4T|^vD?8XsFC$xft>}YpmKR>Pe7CMrhAW_5D-?Scz@CdE-}3}cIei4~(W;hK@37ug zG3wuCq@~RbrQlUDaNtN@v*cHL&NF8yQ{LXuCol zEk4|X>j7R4dgz$=iN=`|2d>vwrR*HC`(i1j@(%bqWK?^5x5%IdJ_NOJX~sryt|3IP z7L#5)F@EBKiLfi@vb29_H0>%Qf7dedu`Frr;?P5DfZX|&R^AabD=W6`QtMkZNmEL< zf}3eD`BwHfzQJc5+itjHi~Q`dVcppsuv2YNB`XKRtQ!$6DV48lO3)+vaX6Gysz0Xh zrylW-MgMY2{Slm!<1*~EK34b6w#a)z(YTuOn!D=!7HvKK##pCmh+xrV(Gq`(Og#Y{ zJHZ%mp0Rd}(N@PC6i#C8`-b(-ThO|i@EqQyX$l0onFnu6$=$lvx8J&d`dYC2iJa;U<0A7f$K|M~#2EwvKmcU9aEO{a(M7VIIFWhdq9sudruuO*s4V`uqwP`|qdA z>%aO>tL&rS2C4jBpWP3AjD0ZJ$d-N%mgIKOD2oSwjPme|`{X&9*7_gLB;NW}!C8N2 z8+wu5b`{7Myr0}|Io0;4EB0BCmA4(OwyPXHs%cHwa&5@A&Pg)44P-+>);q_I?Ap!p z`3|9IEuq)lT<38y>n*>@dQLyEo?0KovwMh|ZI76?x@?IrvSY<+z!`al@6unmZJ_*_eO4#?$8xdndhsb8P?_>|^tOh2cikncw_Q zX6Xzzy*`0LdjPFEDt_*wa;hWj@kwx_8mOyNRMM>$3US~>%y#&yILI}M&~qm!^Gr)K z)>^~ceBKdZ;+b7Dq+)PoMa&|hm=N&xK5E)50KeKt=K3K*fv%2zDdyO{(QJ48LUODz z?8+4?r)H6DHJ$W-b4eqo84bKk+G(iDj{9mm{UkOj3ieTP*oDnR=JZ$1GL7ufERMVJ ztZ~O2hP~-g`Qwx5)9eBXw@BMjsP!o2Za<7ue~n{elbGYSFs0NtlJdrAcpcUeJ5^Ez zDSqTo-u*^RNk5p4J-};wDgK)R&AFGvb}~5nnbBoB>4Yahw*I6II+50!EHW{>s$W{s z6HP_3C8_RMW98Ha)z`ULm(+D^i(;@1kE;ECK*g_v)jR)*#4j^cYk?opGN#@h#f7%Y zBU)DrY8>R!{Y^^qAH#O(0(t-1V!#lKy#EM|jZx10geYJy^W@6LTz}%%GWwJllR2kMxrRD#u9oAUn<|LJiKS=jaB#lpG zi918`zmAIOu`V7wbunPN)l@!mOMY=|)*b%Xch51yI}^{{1oCeqI=+^o<^;vkv82CN z@>1T@9%p6}JD=CV6Q1b$C1r8bbZTLLp0P#Kw1~w|p?yuNs`E{%FGtBQW(7Ps zi>h(n2$zbth}s}h|5wF}=0v3{!*kTYvuvuPWePEdP9us>0jQoGxu@_S<|;<1(@C9YSdQ z#GwJD9E7bka{4uCg*qyms*4ti6Kz<@Vn(=6=jFCIbJo(PM@ECgytHkxq0WVf`mJQD zH5dHvFr}nMmJ>4zUD&56FxLTH?x0TYD}p}1kvA+1Q z9cQ~}D51eW%$KuTs$NWa+=3sbWj5>Acb1c~<)+$|O-ZXfW9B^Q~d<%oOtP-+oEI*6!WEAQt*${7*8*}mfhcz?;{LIUH4jyX zT!swn2VLKgGZ?4lNO;x~7oG*w>I4|6#JmBGs>f4p(0zZjFY}jMssVJqhQk6829Z+Vsj$ z@c=_Nl9*aubR>IM)t<*i9!7kzz$xc|H%(c`EdyOGCc3bt;%qO%#27+QHAVh- zBX2tbjV}Q!n}E)4vyx_nOL3d5EQ(Y+;|AQb+eL0C5c2;<6wr+k5=&G)i8_by^o!suDq*m<&3wM^JbaA?#1^kT~)y9Hcs_l1P_ckg{Qr zy`hlfHGn>YRG;@%)X5EGuLkN@Noerv?|z-aSqm2X>D!g_WJmu+8h_N$kUhhr|J@Kb zzReZJ+&wCjPFZSsUC{5mYwNc(?z8*Q1KWZ3TN%a6D$jl-C>aF=wuhD+0z5lMbfi7; z!&rx#PX-E&5Y609wcAMYWeNoHWFyoG0p%zKp%rfSfT9Rm1)9+qIUij1euO2fCu6E)cYJeVLzE=@?Q zhV$fMYTlX9Hi$5DkIHRVwc6jRM>~mb{R`Rk_4M8fZ*&5CD|KSO zi(TNq`J}oa4dpt{g7T)$i7fIOXz= zMv9mgBtdmaH#TI{-wbq_4*Z=$?x>UO4xB|26bV^3LNRBe(v-}^9Ri6a#WM2MAze3y zq-`xo=h-A9-#fO-Esu_lVJ=jXxodrJ{mIG`ZYr0HwJ3Ak(wminxZ;eswqAPn%wv9P zN#9Rn*d>PEzaSl%OYMP`;x5Z0c3zy7g&#$Z7gNbINNw~}ksJ{u1MV5S zFvQq_M^qa3SE;;|^yM0Z;1xtOB1ls%5jO9KPTK}uI8OBOYf?`%VQnO|_#~ipcVNnO zrWP4Vs~W;*m$0Wf>G`rO(|V9JeF^((ik0Rytev0W%Cwo}){J-Do(sIvB$2I-7a8zP zY`Y|}W1d4cwo>W4N#%brWOw(3t=65~7B67uUQnq%*OlsLETR`F-;4L7JKNIo*MAMQ zo*_7}+m(YxWPQAqHOEP!_8Ln|J+iE%*EXG~ZuaKlb}A#jO1rJE^d|Uz9uFJcnIz=B z(UoIJukMEC-X_xSo7kC&*6u7~<(E{VvB5%3j}tWwW5nbmIroWdn?0gkvO3Z;A8TAF z@!T|I&X259V@oxIu?ty$`X8k2C6#8iAyNMmNjC*Lrm)%%zru#!7DWX&! z&uH&m{t^)7(a|LswWCSj`Jmwes+&$){gxt{aCJ)5w5bl+CS8a!Y-g!hll8{0EYkv% z&Yx4QFif@jLqd)lM4kE)=9GfTR7CiF9@wL2L8q>$c5VQ@Sch@52yyQScrRvQ@6Ia5 zS(TOeQ$34GeM!@;S6oj}N*k(XVme^qJLstFpqTE!iT0u+4=BB^LVV*e?4%f#(pR8c zc9B+TNXQgRw$n%vZ%(0RCwG z(%f?vMfbSU_^h}UC(!q>PR_S+3ym)^4BBvql}@2QoFmK09$4jP%bsT{e1YjfSA(>- zRT{R1uX{hS{mLt!->5uij&PBhK-*eGlj<7hk9d}$<5l|(gGOw!wtH^YCLf8`1S_6j z5k9}pI>+~_T)GZ@UXZBtG)0kh!k0H%jd||!*n%YGHmX$mgAg174R}uIwFuOCoZxx5 z>sEVd+$JF;8TtWlqnMY~GrFR#(P2-BtIiS{zDH$QHqfQDK=5V4pk(N)rJxek#8e-u z)UL1PKOc!4NfK#4gz+-B;Zixgrcwa$l%s+d!`0qzsuFWtG)pm&m_{m5Q7R`}s7!dG z8rPO6C>>BZSasV&k<lB_(j`jS>Weu!gy~ZT;Q0w4 zb_dai<1n{3g5Cv!=Jl{N=_cEHcSN>#W;?eRFesGJtv1o|3`D1fE44YM6m{3t%GIpg zd=B~dGT}@f!o-EZoEXB%4n)h|8E(E6yyQLTNe9K1DJuKISReLbiaKJZm8Y)>+itL1c@QBvf#`i9#>Zshc@>EM*awaq zVL0TR@x1H8rsE-^_zy}CMv9%9&)QX=p&wQdn!h0~)sD4CN5!P!qAxnQ_Dlr31?E{@ z_AG^O2YJl+l1$~tC_ka|8SWFpDCCWM&xL>tN}RjH}8`l!V(2Z3h8ML)NIp2SkL^Ae>$o{3Ug@Xv$KQJdo z6UQVG*SRQIcR_5OhNOOBOcS4jj+RsUbegEidNwh6nWpX@F>c#h6BuZlsa)E~x@v&Y z1#?+1k0iVLvTEbsRqNyF7<3LqUcE$Uy%rT+kM{h3~ z(qQLjcFz4wl&6eJ{3wxy|3QAWkk*}yw!KF3Z4zW}UeP9-MOyfajPIth&Z;!b4C(e8 z%gq?o!73U$PsO|;`*$+g@OrT61h!p_*x}Pf^H&D1D!_gpzBy?k_WJ#lVYHv8=O=as z)=_h3ig1hU)@gCcb^NUBZ8g;O8y0E(Cw75Zl@lcKFp*Qm^UpwVm69IO!-jSxsJYTs zsCYhww>Wh8ENFZN*5f}Q-3O~Q9L`eI>!+jVr=pUZ9n*6yaH_WG=q{oY=ZUuNU~RfO zD#Jbke-o1p_h|nL9v$-%@{L7PPq7kP)MtM$Ec&E?V6>_REfncRB55Y7wjHgSYq#KY zcWA31wtdI2oz;@0YfqL*L58juaX4nVp;kuGD}$OdLls?03&l<)epU#a7tHCOD9TS) z)G8wwA0=jQCie1PlR9&>C)LzA$Fry^Ir*lDiGL>?dO}SESv-sq+wRil6@sn3 zLS;}>$ko0C?^mW*iH5RtVtQGNY0W0a_kRgPc9X8%Kyoi5VJb6y^j94^UGS}sVn`3x zjFSx7<|h7S2${{Pz-bR!I$leqNiMayQ^Vfc$?ljDWRDkD>G(`!#Rbvyy+t!U5!`^$ zvhjX0xUaEAdWwv>Z)NCqkx|LeH~&*nK-gRzAsx4h-BMYVo2XXpVgdsObX8j{ z%IFUm`Qr!aZZhyBlDtoX7O6`#>#GNa_8FR#1}In-lCoZ<0;q0 z&p&aD@!Opa=0sB?ox{m}`LDW-W{ACW$d#8ZMfS9}TDhT6;vI36)bD!>@*h|l{>Oa! z)5t`(-$X&gYmye9813deDAvc3=+2P!&(x+bpSg2(L4?zj1gI%$Ne;Dn8Y! z3j`gm5b7m>SL6kI@?;DdV-0@r*ZA{}*M8%u1u4+e`SV?j3zROe9|7%h2X2{j~(9{zNt9m=mrLK;D@*$*(eGl)tbmYu!1-cvong!r% z5ystVEcE2EW@RliJt%x|wYGTyo)idLy{Cj>TIG~{Y^ zLIx0WUr>ySwHUiuXe}`&`um~8AI2;WVj97YEwY+yr~1$UL_oX0a&?rx&R{AwyN0b%QRdMf&f5tS3u&tp8`n&2ozD)=p%% z`XI?&Rnw+cted7c)|(Qw~B86;KTCO0+Xd>F71+w%V#^YKyk-PPTjwmKQ|{8F|$$a1s=KSppm$?M9MbedKn_OnMliwWVLB8Q6Eg@@=bh;I{A&Am z)07_jjD&Y3-@Y-{U73-2dM)DCV_{9 zY48Ac%tzp-9)!B(K}+r_?QUyvI>wr)9M=2!rs4a=Jh~~n*K=%w_ourP$#35W>v_Ii z=tVxUyUviW&rAAIYCNT^84llXAJ|qp&AK3;VqpQM?xoa>A7e~`*36ZjFx9Cvbj;Nb z(J_zes(Ibk<+BZl+aDG4dLa4y?~)ra7Iw#5)@AQlhrDpmGyrc z!zuyeODOJE0qwj&ShJsL@nof;wLyXXLBHfwEL_Vd*OKXAPDcKgj?8Q8*gY?y(?3}{ z+8R7ziRi&=jBK-*_YJYUprF;#8&c%v8ta)c&3qd&72jHxB)hAf$L9E-@~gGP`6t6& ze*?Du0v83#2=dei9ycdCFk1QF;f5C!BziK6Fmj9_;xSR}z2MJ@mfJQa8{CidU?ZPS z8Sdz&8D3jpD|7m8gujl1vP~r(_kt*Sg-~1}LhHOlLoO0e&j!BR7yRs&QjZ~4E)LX` zLk~?#hZSlYZXtKh3#`5NLABZYRgP#QN_x!yR}Z+d`r)^8QRSs-knXx@$p1CV z<+h~%jbiD#f-r0eBj8ukei>OG9e_+csPg3?Nn&M{ahpiiL@{RWaA+co&Us97DZkox zoz;HJYTf3`#J1g{?z!_UqeqgR8o-jh9c*YxwW~j=d-kcdizCG?)E92|Q?NglIMSyi zBg=F}(x0M(Ut677S*3V{v41r%=zGj@p1tsR$Bp#*?_J_?rgtRT`q^r7M^_K77G&N7 zJ^TXNrL}7R%%Ue#t1g)f8vYJ+p%t)xm`dYUBztz^w&?Aw8UsqdZp#tglhjOw0)uQj}1!g zy-Ha_fgjzCMhqk=7h$y5OVaT*hepq+U90AQ_k|wpaY_0K#dHS^J4xu*lTbe%9C%v! z>w4wm#n@R|$MNPL!hThzsbBZw>YU5%*h2A+J28#Q+=Eu8=eD-+zgFsHV)6fCa6FEA zNhmJXH*&G}=Ry8I%^34j+T^~TRMR_=C);VIb&tek_->s(jjYo=yX#3lC7vr=)I6y| zFd?uy*b58I;!lYPnZA<-M7$(s9lDmraHm1Ut1hX2{-zi_PO-HV%(&X{TrEO=n+K7%R|5GRNJXBR zbK$A5K|Rk_tEY2>ddHVhZ?8{`zor;>&|=60FJxjr$Bt}nG}8x0!MltleF+Jvfj=Vv z=TF6!q9DIIM1x-|&$^|wIit|KBo{4WEFGIpx;PtIJ;ye(4+;Oz$l}&U-{d4bJW9Ij zw&DDa6y(1A$NRa1cp z)tMH@G3_4@xsgHjx7i{WJFCnY1o{0c(0&Kd<0jDe4zQ^^(eo#ub02}INW#iQ=;2d9 zvoeZv@xYZeL`(Ox4wz$5@SvJWMU-kZv#32)Ir63>I28#Se$9-Gi7?KCRBsF`e#UNTSlXbtViamEl@zT#a>0JL!u|wlQt_tGNv&k zFpA}EYr@WGmrmdK?mu*}znP!LaSu-?&Gb9#o$6#aG-1xwM!0MN*C|}qM;mLg+aM40 zaz&<{51D4&Ck{SLv_6jT;s9y0YryG075m?)ei*5El4EMrt#LlBRufeC1$b8*)yY+r zgR8*i8Dns#AE9P`hlWigv*Zu*RQ_U|E%{+Ky|7ei{0|fOO62(^O375(qzu1HH1jyP z+XK*!O3++k4xK!svN9GlZzHJDT%y+}nVJ<-dYjYIr{7)7xGTEjf|ZCj9(UFquNzW? z6C#rVtJrgNIeQn6 z5l@ZoVpe4qY-kM%+e8SNXz0N!;Yy7xjc#f2Pr0vLaU0o?7hVadqPqB*pT4W>wV7)X z_gSdYzX43d5}|_!h}Rrq?%xgiHVC-3M>Xmq)8Y`~S(lW?zPHFSOgZBm@P^fd^TQlF zqaXBq0L#@FsT$#Q_W-AUqHy$FXs8$L6TonGg_e`ka9S1X@0t*Yw@n7u14!swmFzVf_wgHY`&VJA`pTHUM>`&ONE^Y>9xCf@f{G-w=~Rt5<5S4cShx}6 z;S`J|XZZ%gg(1q*+bcINr1ZHNX>>ek(iLD&yvX8)WXH4;nRQxZb~0rA5Fk$h(7EfN zWkrZ?G$7=xs&p}0(c}%#s0~re9z>yQm7nxydSBLXcm=}WZH*os=fm0Gl;+kGsx@8A zsznZtl=VZNim-w4@?-uuqZp$O8Hg1=!CyrG#@}TrYET4edvY;Y^&TA zJZwZfWesRADArX}-FRJf`%~!K zFko^3VM;hqzA*H9K~Sc;in`Uo6}zi0JHk|>8S%ASZ05uO%hxh4Y*Bb;2yG2g&VTh= zn&2bKRXU{or%?y`5%PsG;;NY4>)82w5c9=`;5EfTEicC!5_}+2#nhy!aDo!%(5+b3{hGCyi;T2s=u&BCDcAs8aeC&}qT~7E*Fua?{u*c~nq^Sp^UpZ#?LwF~h zS8utI)+wHwohNx+=hZo-H{*%7WK?<-2BhBso&SZ3Q&>*W%TJ)cOD|GG;1_ssdqfPXm&vv><>hNG$#Dlp#~OtkSeBn>BdgU?FFijF2ChkGB_Io)?^BKlDPpxK;jCoqmd> zFl5wZ@~vov?^n*s_xbnX?#gOxxu;}yhJ$ug5iQ{l?CnTe{}1S>YlPaFh>nCY#TOQi zNKkAIS4keH2)++3nNLx96L5VvG$9HIY(i8kSm}N>@b7ntH%>OrlU-zvEoUyUQ+d;0 z#QWYV&g^E5?`HTCBz&p4%RdxvgE5^t|dv_F<;^%KSFQYyLo zksQws$~_aP+<+*#7g4$?ir%j+RgX~5&AZGs|Mv60^rtZulGyWG5As}m1+zT2rAbW{ z;~QFc>~^aqr>nc~v&g|1(ujJ{Yh4VVOoF7#B@*0OIcT$sp2dB%_iyE9+m-6>^y1Vr zvfYCiy#p9$UbCKftC}T0NwG$3*ZfMT6G`;H7ohTEp~qV&)tIH)JTr7=3!*=BfvyDu z1?qzjXBS$r%cWW^fWudf9Lh>)u$8!QPMGPb!PQq2{d$b`V_)dgUO>`0wM!SMB(yc= zNf`0_8^C~QAfyE_dL-dWO>mnNq{shsaNvsCF)xMw?(0(js)|QXRPWvpeOKOxke1e2 z+0)-Yu%*8=8e>eJ@$fW0B{VIF=yWcXWo6ly6wmZ;oSLqSi0TiA{;?K1>mSvdxm0UD zQ*_KMx@~_7hCTLo3ZF1^yU#c8`trsEOi%N_J^PIB=oOYzot1_^fVr3hx^F6(6;G^o z-$e2-i1>34qWf=%B5Q-MwHCao?(*|Ou9=gcaP~NB`*B`h!dkX_8>mk0O5C)qkuwv- ztXQt*Tvn3bW*J!)q8w0Ha-gbbRkt zkbSwqk)OBcfb`G88Zrj>kc;qTJG5_q<_Vb`v+;xD9hx8B4(+USq&&=rYB2SClS$uO z^zI>7Ru6+l-GxRbfh(6FEj|Ibx<=(@W0j~Wz=QRK2P>IEn~~|6T{!T9K~gkmT>)zz z1PYJ7&Qv8os8?mta>Yn@eo_536uL7CSap>6Ni?`-0g*FZ;JZ4HFt429Q%l8Et3&+j zeAlg-leto$;6){+pemvbpR#_ss?w%|V(SQKbVky!1;C>Dgfkm}uu$N9FsM;y@aRj% zEOg#Mdg5uB#!aJ65rO3G`YFa5#wQ{s-09I|*%$5c0hxJlsaO|FeU4 z=N!-a*2b?#9re82W_enF)$2D@Y7K-Ic}aSrJxg>q#vj#$cSU{os}`<5?;4cqYsfl} zn|CScp6k#h?^WK!LeEuDZIVaz`Cy_Wn;1_+iFfrN%x*|r>0*hRVZTB5P|HIh2Pm@r$SI1{F3i4ai8Q&=zp`9CD(nD?M0k zb@(>8XJW|LGywK-QPL@0*}lt9w)iK|g-W1jJ%Hw|fb(V8=B*2!)R#10l4^JklDKig zA8QMb?g-SJq-b7TG_kJYaF}?@Hzyj~nyKS-)kY;qOCBd**35(kU5FQ*Vy>G>?D%)U z6WE5fvQ8h$<`ebFiRo21`fRu(@-^=RIHL2g0s7 zKNekK--BSo=aagynBPt*zj-ARx)qXs(7dtk-dCPS_+;v2AvtE)UBOjPCb=3Q&rdA1!k-_e7g~x+sEM~98R%W zhI`$kH9YRx`bMtRWNG`CHF@h2O&CYi|29x115ofav}B|rJe2UqKIpCmsyi2}?kNLZ zG#~n|1Tg7WqU6eKt|c&KZtkFRbCy}HAR9js7UxxZ9!u2aEm6)S;ot}2RGaNfJFyBp z59^uF@lW-8m%7jcV}NBx6$d9n4~GK3)nS@*MycIBHUlEm+$#g~a))C0HI?#5A%puU z#*GBZEg|h*1L(8CG3)btXig?SzLkwQaFa_v_qLeaQBW)nS|c-L_I#D%?Md%tXR4Bq zc~g?*#WjDJcLm}3?IP^yzrAv4zDPhJNS9ERzdAw}-30O+gI>7+oVrd}--`Ii0LKX} zu4Y*Un5#XEXZu~^gA<@7UqEM8g)Epu^ePAG?;n*`pRrVOHMmkZbEo$zv$uoN4uMWB z?MRsmK+mnl{xVHXrq*i1-z%59rlw;yFPZvzf&C8rgHZPX+S8D;{kDn+-%BsVsjuEGRG z6@Xu-Irw#}YD9L6R)>WyKM|As3)ads*QN6lZI5_ur=Vg>5%|CdwNCA?W<5@ahAZqlQXzf_$f)UIKYnaQ{Hs)hExMa<~ zW0t(u?>UCSRD29iv1^hlLo;Zp44{9`y80*wQf;Yhsx?@gRh^F0)nxgL%;t4uq6!=D znp%E-ezQHEn89o+{G)Vzxgg|=%7nS9&xWf^z9-T&OeFrk#o^YLe;TGp`WN_Cg0N$% zV$$DA;TaTWmchN92D_ISOx?=5E1K~7s%l&_mBFn2nmLfPW`HMZ9cf? zM>Qov+2q~MrjG@;>;sZ}j%?dtbbK7^kTs$K@vg>|SKDTxm4aQNvHydvUP*dy1$5IV zmBeEz1)E!m3>Ld*kxIE1B%=;6{`=FR-|`#2FyDhoY1w9*Nw&j8u`~Wu@o&R+Ms~9O zeuFF=t&%0XtI?r9%*}5;zH=zmcc-EM_eMF@o#<6}<~Xq@>#BS)L@6I&Dqkh%M-qFM z_JHR?MVLb~3ByXOw7H=6%VH~Y=U8c7fpp#)FP#{j%86X=XZ}edES+cVFJ7_hURb;E zKamQx)t#`4e3#yftvm*HL^hQ@KUA{+5Utomv3@LL{TzeP`mDFc0Q+Al_ZbH2R0S+q zfrdFiGk#LKk&4WahwR+xXPjMojI(u=aTcsFG>}d1S*bp zRoZb+@w-^^tE-aKMCJ8(a%1YVy}uQbdWA}rM3u1#(1fgnsco2QjT5flU3kq&qq)91 z_OEHM?G~u*Th+?f%2paJwz4kFijGxz*o$@3dxJc&hUkFdT34C;A_?*Tk^Vhd^`CAk z;V+?4^NpnM%KB$Nw#_%Ne4R!baf4*iAktT4rDu$2#^IuM=PCStQSCR(*tNGE`}qpV zvsx-E!c~qGfo@+xax;b{^Tc|APv4MS$N-5;6q#R9#943cxJy>vOe2&?^l-w=pD6t) zk5-RTS1yY6omRKbVzIr}LynJtT^pq`$|ttf{|SN%fGp2048Zp}&-;EKU`=PunBALQ zv%9-HK(Sj<5fuf*Ld8O`6T7=}wln@sozpoxr*5<0ea`u>>zI|ft;F8!CAR87D|;%6 zosbqXvXjb?tB|>gt}G7;w0FKC`Jw+772oX6Ev^vOD*!=we=zm<}?PPUJF`% zRc)U~==V3Goni&6r->dOV0Gtt!i38P_0Ae>i6^?hLrnJt#Dm{6Vyi*hw-;$qOr+&p zk%Z&0U8cj13RanMRK21WHdh?U!PA1s>atconv;y5se4~KmSdfy$enC z`sWWQEjg{UvkrK6Gj^_JaNPN>-5jB1ySz^v7vj8%yLJPR{)iI}__mB*iE4sLABl|VKhUJ!*Qkgi{)*d3$j`Geq> z*1((es!_|B(lupzIf6N95cp&_;CU)($LWlO51{G&VQMRxaT6SEzJtV{MrFw$tBv*JOLZrdAkX z?PJn<)#2sH1AA%`?6PL8*+;P){!e9#iY*=~(r1R%MM)`U{*TJbR;Bs6@P_d&Oi{UC z6FhAtJ0XYIH$IZx+C9kq_D^zBJE)1OrQB@4(5zX4qX#UizYy(_UXj$AX>S%kZ%P}; zrzRU5%>&taQ|zbJp6y-3^V)6@`_BaNsts3f#wU0|9bh-LfqXj-5*Du#b`~@%md$|l z>;!i(Zq9?`f3=SSd%u}DdDe(JtzNG~5OTq{Z4i8+yU4fe6uE0Yuv0Vx^ZjXzOJOX1 zE0SIDAEes|kzs4ac5Dir5vMXUpXz2+$+}Cmd1;kt^DUaK6CHbqq+u|7Ay>!?T}$@q z&nm^Pk$jh#F}o6@{{K{S3{+%^7ToK?cG-0Hc7G6?`4_Q?n?>ulusSz~X#3WnKx2$O z>^k)~7+@KKDCUz5%`&99Dq-bzCm7RUb22W+Vy2p4sdb4fTl~hqoPJ$ zLn9A6T=$*f8w!(miJB!_mAiF?boyOTKSrcnUy+B~RXSZ4Z+T7eR_;;T?jmd6jeg(R zhyH+l2i<^w->@&@1kC*2#Osa{5?8BcjZ&RZ(NwQpe-Px;2gtfLhURWDrgamCJ4|r6 z!99ZeRd6WYYSL+uZNo*P=85!QB35UJ*Y^&*B1>W4_JIC2lIhVoa%$}%cTEp*Omj8g z_f=>00&=5DyYA2-F#Q&Q+ujxY?>gk=4b{-$z^-(HF-^eXnGI)I&HVXCP|`Hj(z#T! zJyOX~&aruCGA}Dcl%` zS})P24V1dxQr>%;oTHFcS$C}&< zl#tWH_mgVMNFgS+U@M?_8rWVPr&jGK)g@% z(r&f!a}-UEDc#7eko4IcDq9xVe zd9w92yC?2yM@`qQfOiOZv=%z@7UY-b@M^XsZ&(zk-unaIz^rQ9bWy3WL~WK+Dgzq9 z?r11>Nm{iPTdL&hD6(h2=+^V1NwY~hHz&`@MRv{v))HZ?Kf~zG!KCA3Ah(w*R<2bf zCo9#RN^-}i-kT{ZBM*rT3>6GbR1SR2?zLvFf8B4cZ)X~If^LzMCMQfcPt4$RYPz4a zX2EJP?iz5>1g79KtdEzIWcbWBc1(jxFYA(RSY5?yqq3m5O6!j*<+iC@U8v|&nP}@) zhw3jSN_nIdGFTD02sF1Tp?xQ4Hb4&cB5zJ_*z8?JB6f?ED+FFRm7Vh)9H&J;$Bb&o zSTsuQ$#Lo(Z>-+fS!$1Ugq_k2N;6^i&Ju6gaj|Qwh|N7-CF^bLh3*#pv7>6=imI9N z5JsmV9+Ao6?Bo1;;s$AKN7adAR6n&L8tSTP*xI^f|8RAC*PxVw^9jwT3O@H2%<3jM zl26nOvv~hdH7T7SZ2+NdN0*1)^RdomXIu?({`nxz*WA_=_(gchAVFA?P=ntEPwEJw z(uo}D2h7fFoUt1M)BI2`F#Y}lZeaN--&Xvs1)OScPeziqkYY|B4a7aKCr+D4fKb&7~qE2g@u8*84e zjQ!!@u#0R;6jb-#0Hxe>EWPdpO&p*SQCXzqZ_vs4MTQJl?`j!M*?N*}iHVFJW0@wE zC%XQOY1KoP8`nH+IU-uDnMi0jN%`W2y3I4vY^Qa0ol-jaK2>j5AiDjN@`dJt#gWkI z9SQj|f^ytZ%5@$zZ#A^gebtAH2z%RsE*v*b#W8RSOk~sVHFJUdz#l6V4X>y?SY#2` zpY-pmEWd3wvMn!bvpbBE|5IJwi>XK#rVO_Y?QG!EmEPn$YwNjvYTJNExnZv~giaYI zcGe&2<;F{Pxa(4gvWyc8rr}39K zW#b>D-z_07a+4@+9P^e4SLUYEJODHr;=7RVtDE%R1Z*kKDUDylM$~7z+1lsCKZ84L7t`9GBcfYo zi<$6iRg%Gzluwr+emjCp)&p!R91&;86>yLCmdcKSH$SI*4UX5ZT~|3@e{I33_vf+g zA41qRfa%f};lF<)KKPvY2d5w{_Q?x^il7_#V%>bW|wq#vBEfMH>zn- zU#NKI_i0ux96o+%(&_+b8}_yWRUvUd_QqL!G!ql8C{ zB|fp*F}G_F4=gNvFvc^N7Fe?=15vDizF!0?HH+xC$)pq3Kzas>Op6lqWGnXrn`W0 z6NKyaAPS5l=gMlw%{JBN{2Ae5a{}3;Qy{js;AS4dr24A0Q&hK$;_O(Z5|7Cl(~;eP z{_Jl515V&~N^6G+eK_Ia>^KjxGc>hbsQWp7JEuI1lhkj=h#fTD+G_i(T{uico2kup zkmPVRmhycJl6pEOdv4be>zL$qOatdTh&W@gW{Sa}(yR}9iG7^a+VKNCFSW1rE_Jlt znDy%Y`4@Tf=aF3+4EgZ4mGLvgR_M=m;V|}!ZzS9KEp+fWm9!^CujPTpj8SbeQnmU> z)jipv>|P~9*X8Z}KZ_&HEALG@Y_!K?IwlY0dliowi}Q>Vzk89bG6@8Q;txHc%GUncjh`1A9yJn`DR(o}_`l5iR$#1Ou zw-g#4M5b+9H*k0{f7)x8-N3l@j`{Q>q55mpJguQorB$DFRQ#EuxE3d9GtAOoe_3vR z#*}Z`?5mnPr-(NU4uI1<07F~2be9aR9}S+g$0J{)(2b9l@>LX?Gg0VpPoZ9&EZ2;I z`4Yh9$RdX?eRfTFO`u9c(cOO4Tt^iNfx=n4f=cZ%8q>>Y<*I_*mpzgb77;ywUz#em zFMwwH4pOKbBylIiO%{34$x5XV(T8nGV_hFK(NSuw+Hn}P{&LXpKsoN<9e%<2F-#kvtrbkI#nCg z9{5>xrRH+^<>li0&z$>@RT%Q`9jor2(Uaqu=_A*&m!=&LBh9M0P9OT znx(tLqXros{e;Ywt}yRr6IHCC)b9&0c9Lr4cfg@lFo_4nH?Ku%&_Cl-(_CchKlDkd z^+e#%V&MD}*6S_(8a>pfO^z~Zx8#7^%E zuUVpKrG?@&S;JT`7xF3G>VHiv`pgvV^_|kDF@%cWyFB5N%M}+Gn2kmwztpPre5w_* zNo;b0XR}SS_Skf5TOVYN-x%QBZt3?YE_K{}4pX~0#e)v2Gry=d8U%bl78*SQdjG9z z>(`3yrxcyyg(4rDip@H{BHw~u>Q5K!I1}#rb=fGN_6auXk5>)*&8mCRV(%D>#Ye1$ z<`?vd1S-x~bo@hUTLwm%9X=WzZZuyz$na@EXp*2p3B~0fRMO8Rt@bPF<)P$ltEV<0 z#k0AZSv#q%dc$&(jZRT{xIiW93ncDe_2{|CU%?0M^CnqLz?rx58Wm^wF79BIj0Z{yr;wH@CtG zu4_!I4-Vb*84iC6+Ivi>(pshQtAr945&yo=;Ua!^68>fyeH*CMOYtfvsM>j@<)SG}x{?c7dOAUp7-qhj(vm2NlG?)G5Y?P5DKlBMwx zXzECzg=xj{=kWro^!L)-KjWn-xKDgZiJ(m{{I+GVPoDi{G($Ym#2C<v|g7RP5X}oVw(Sv5kv>2X0nAl&rYsTIv*Q`E4epQLBteALH=EbO!B> z(OPvN)q~XwttU2SoVDHlvUZVcWkGS3nKOLU;!GN+WwMV8%wkH@4fyLEVL?H~k)_af zxuK)it1euqI&vORe!8N6O+ndopjj!VYV+mw;FJpoudfA;OK|jLMqkQ-{7&k%?2y^X zqS?es_y#Mx(+Ub?5^T>AHEw*b>UFzc0^**quKi?mNgtLbdsz2uQ03oM?k^T?R#YW= zuG%>b;q8wkFKVc!#@@846W)2LT~@))8b{uiFnF`$qi6o!zk0>;o1lk5TJH#WeKtS7re#^wu} zA46ItQgw8aYS<{n4=Z4f_lK|5c=8VzOhF}QYTAqAzh=7J{8N^GsWxbKB-^hoS$^vb zw2uPClVcM41vtY>`pla^#*%oIY@w=)PO-cUceLzHmWR#ZT}x4K&I;>w-f8XIidJsU zSJ|%W9naICng%cPBq0pvAqPe90C8X9_*gK zLMC@7Ko)~OO$TnZBOVya?#!ofv*d;|Vv3mU1(gE72%`EbtzALp)(D@bo9k-NjL=3Q zB9kVFy?j)~JtSVzTJd6%$#d!(Z+=CRegk0pJXc*m7wY>_i9{SG<<}mnwyk*Gnwdwq?=6}KdE{%CN?ZQ)w25CV@AH3s_RbONDZH_Th=$!%j=2$+NWCG(G8(fjoML@N%GxyWM8t8 zpajx|->N-PM|}1vE^Q_Ead%_(g&C8nhvCf6+1Nk9)znhq7!S3gEZ%prQmUrf7Cl)$ zHZsV$3G^~Xd3&OzWY<#QMMAEjj;#N~=Z$P*Y~^Q=$MwmE42RC^zD9VQ2YQj&@|>JyFWBj~mz{i3WKzF^R|N^17|&^S z<4f8~f2U*|zfRKs>8ii)3~~~Sx=y^$??nFKP~B0$$TK3N5>zhUCfRe>*giMOtF&3Y z{6odd5+{=BlSu6ssw>Zfx>q17P!4pkrNixZv6+_+BtIzf`8*m^Q>bfy!#ARQPNqo5 zx1_oW*xJSkT3O2p`rMQK$GXCqnOi7d1EC`kmTH`_oPMa9m1~I?9cIpai}}ZM%;&y= zb78YM?>?*B@(PS}12=3SCVaZ`ps8#k4zT%tJeywK!NcwdohoZN@TAa;eoDJK6V?77 zC?$|-u-~NRVswf^cWuAl+W(|>tA&}hfrpf;=+G)nYULD6@sAo;qJq(28e)O@4=Z4<-84g(#|&Vqml&u&3htNa%t2g!OHp%Vz?oClb#t z49>C+=6*MaysL+R>vKiRO!jP4sjuF~ZlAPV;Xp4q%pv=H0_?&I{xe`b$if2h3YWfX*Bs+`K@NoWSz5y-?vk zK(?|Tg71sz6C?h{WsIAvD@)zVEXQ^cEq-8W?o8rLGl+gHZM97ERBBgFzN}wj?37uC zJJ%(r@p{tD-*{B~Pohb01uOFam&Ssc{z8<{Ot5yipw=$YgZoI2rWgBmB4qaWtgqHV zx4r|eUr;H27I^iG(yIOz!&X@y@SdD*W7&(mrTW`+k|S-6%@jf0x1@27v>}v#X|b&= z%t2!t#Z3F(cpH97n4PM2dCoilM=8g8@rjdaY~J1{PnNAn)=|f+U|u_ z`tMRKTcld(A!PY%m6}~d-X4a=4Ix~e#(cE^o5)_q9KHxXIS0;;H*gMDWT*2&=07&T zB&P>ozRLV4M7UOI)e2cOwcL4@qN7||7S3i}K`YCPYwF%m&#U;1s7H6Af3^{Z&IT2n zDVn;@)9!h!Hhkyc-fq%}Atd=0vu1o?>25Wl4!6MLx_~R}fHQWkqTf@Njn9CUT_D$5 z1Aj&Ve^e9x;crmR3$T+nL!-;4V%1MyrFcFkwM#42ss#z_^ApBB1B%TjO1{YaycBbM zD9p^;;AQ)a>^N%aR)}LF>RA&%+Q{wU!r!)0bK!?~>H8c`>m`-@_TP+GRJJxCl*&nV zcQK}8$;#z7fOljE#cfk+bJ%l^-89m4FJn%1!j|@gdzD%G?Pr{MX=wHY#*=Vz&NVhp zN^9`8NTr$WfbVMq$!`f0dn>ie2Q7M@=;n{aBObGpWf9y5Gn79htJaPs`=BPYav9PW z6-nEi0pg|s_bMx@w6B zq{#Rr#T2jbnX2Y=zBWGRNd3YFXFpq%DFp3RP4vXCqz#Hd-fUN|%o3IMufRik3!VK( zW%Ul#m*-XQ)PwBFt#)=pmON!tqSvd=dqzVS=`iexDeCPx z$f;+u8jTD!-0~3N)(uAgF0hZ9iAJpi?|pB0TW>K_3J|~l4R~YcDz>+kfS3gbx?7_ z$^*dA>4dH!Lb~G>$OR z_XSb^eL&L-4oVIuy_O&{eiF>t%HY_^FtJq>B`X8J{ti7-iRt|gb_zZvw?kJkr(ath z_=DihYL#?j$xCVpZ~9%eg-=1}Emqv@PuTy1qT3@6jjMb%{quYXs8h^MY0-?mH!Fy0 z?j&BcUa7$n=)eCXw7f%@6%5XDfy|WsFuxv$$=F-@$ESuX{tm8oi_MHu29sYwvlmxA zy;|k?KxkY!)#q77%hiHr`5DMOQZYE(@Rl=dN0#w4XC))!UW*x2&s3}NBCYijOL^Yd zx#}(XhwZD~EDy^95j%XTYqmOGy9l+D?yF5{U@>--m8V%m0!E0}u&3HIr(pZUIjLRN z8ZS9Lr5>*bZ|E|pyB=~kRJ7fBkv4Cv+&H9~^Oeeh`YI3Fif*|C9h>N*-jf3;M?;@! zwZ@p3^M!{((qpem`l%w{l~B7qk7~|o4hQ_;_w}mm z_&cvr-|Xww9koS#4SPd$d;kCv(@8`@R7#5P*=2HK#bKwrp>{QiM%RQc3Agg_F?8%Y z)rDVFh8VT^!_~V})ze{ZM0*{94yevLD;E08DUtE}ARoH8cKk-$sNql~k^GoIJY2@Y?m>Mw2$oOu9A~Nr?;4&K=3#`x!bpTBXD9D*M{0Za=2l zVGXdVo}$PqrJGMYN?L0%F286@FP8l=gjdUyuI5$qwjG=U?H$*&_XQLwV*(P7!PjiR zxX+rYIj|Z0_Xcpb2u0~pit-Ln=dPkk8X#ql<)rP76PUxVX~zm}J|ZUjAozy$HG!X| zn4nE_$zMDx+>#4mGW!(s8bkKY5h>bFH9A6ZzZE!ik>Sh5jcL`*aNnxXMFGrp8W0zV zAUgUFFszzt)=H|`HxqAO=g`Q*4p+Z#F!QTo>LOtHDbZOWf`JjD|CO;au7=3pKZxyo zTfDE6tn?e{>B*HIPWG{gFHL$O&Oy%%ju)4nwEQr^f1^S66=6b0#^eKxud5Az+-W%H zC*ntai1P*umHZy4+!u7K7Gr!1gV_G8{_|>YS0>L{t6uZw;w7$ATl|sAu1L~9k27w} zbkKG@ba9Gm(gsN2EYBO}nQA|!J!8Gh`^8&5TfLpjj0|{U&?r06k(sPrTe_(umyn(M zi%P3JR?^2=8Qnsp=ycJj$|~Fm_HT>+`vfuznX$l?`>;2whAmlWY0)f}x%&c15w z^l8Lyt&u+8u&r)D#eMKMzGB^`3$0V5lu*O^q8+b`RG0;6T0!kQ3+=m&^mZnq@Y96A zctQSYkWIy4eg8q)%oC~m4zxIv<1Aeo5cKZbfPl6o*p2U`-1nK78{er(YNzghFVvmh z7IdXOOVJ^eT6cijb{cH%QtG- z)S_;f$biqTS3JbE?+QV^F@kKRgtkV(%%5QBhepOMALjT%l6^tBBAuYqi4?Fr6wb!F z%9jQzZF)#(b&)WjIa7&VOuqjCHD0Nvod~#p5w_hlwEc_WZLvx{TUuH&&FTpf{U*ff z?nzdnvWounQDjb-)g~dNH9Q|~wsx6oFlP=?YSUAZX<*Iz(LTcZ+@ulXf$%#jmF7XJ z{=hgsm9$(FXkw^hQXA;gPO4^%>ha33{ex78&la@$Q7CpS-1n&*z-yeqFO?DW?`2Ip zz)+ffvz?$PRUF@(l5DQ1nyWj77Y`ABR6=+~7p19>k#Ai z`xM}x+);z3|ENL1(>d^DoZ~;)8cxVsF;#vNYP?FY=#c2P)uJ2Ds(8`RnTH8=b}gGeDyXIPiEfB;mR^7jWaJekYy(E@HQ%M$Y zAzhkGTC#%b%;rKp<|<{_tF-5`n!A(W{Bqa$vwRLnAKTfNY0fiFTR4i`w+C4My$kCk zsExfSHggZLqeE4ywS}}E3d!Br$eL#clTI^6hAWEoSN&m;$mGdtU*#chep;5Z8%SHG~jQ3J>cJ;&zNIO7z%;u;z2BJn9uy_ZFcl9rkc@lf!UN7+s&g=H13G8=la zDpczc7W)kjwFB1PwmRXO=!t_WA4jw9c}YBCoN>Dh@CP2c7T{m;)i@m|C?!V=*+EJ} zZh+r-Fzu7Yl=$MA#Ahn$e?dyNLX^62g;?Gu_RI!&4_3pg+e+=8xvJ@^i*_mwBn1$* zMOJLEp@w4KWe+csJWc#yEcFePp&yBAh6_(yt8U$3b<5Rd-@r)My>cwTPcwY};TOoM zI$!DL5W%7fBAY*|7EJ=h>}Min&EJ8rue)mLU8-k8pqm>LiWYHn(*%+^?Npk6v>KW$ z_`1@gg}JTHPq2!A1&0qP`L3!%9JPy2ikO_hr_Y9?LVeDv_l{d? zD*I+kfp2F#`KND&n>RanR4Hhw<)WWdWO`H46S1m|;#G6CP{i(06u$t<=_=CS0FCI& z)T2&-)8K2MyL<-uj!hR|_O8l{`a&zltMor45?#m2|B^)KFH(KtGzH5bP^Rrf3B?RWG-SCm01`J| z<;q62*CR!$t`|8~NafH?i;W*WT}>(%ms=gUNu~Kn(R59f66XjPPGVpDDZjhq5xX7# zu|7?L+sDWLoM$NThY}j_r@%S4*Fk}P22(o#Eq(${M2gOsA=>JHKtcgVXTQ-bCq&v@ zv$otf6Q-4muU+ZRNA}JyWnDSPaN(hb;~o*7yj9ILN4-PYtT#!m_t$Olw6>{I=C6Bd z^{z^%Zw)2%b*WjBLHah3Rnwt)Ls{y4M>2Q~c@5L4&6ihoczVHr3`(`9D1|MD`K}na zCKIn!#*TKR$q|ea*P$5_6#Ew`*DR#mx1X9Rd*I~H@A#i42Bq1T5SaFEtmFS}g>{GI z^GsM@OGO@w7hZw9yD!CyuCDeDL*_=Poi+wG>3}1T9alf?B~7ZLGWk0zcVoq?xdL`j z2cx$pF{U(Udex73TuC;xl+2RB#8cLS(-$+etgE3}d)bCfg}0%ldLzEETIq!#dcDx# zB9`;t7JS*Q^ky09m^rNXyRiOPQMKA+E1AQr4t)t3{NBjwvp&8u+~>~B7vP)l-sKV} zftP1QR^?Jn-A_0=k0?5dXz^pA^z~9{b?R5zwL|UhnMj#-11Wt!!pocn(rXfQZw=Lx zXCOo7Dke{d)|?8AK1W)4y~;j#w)zjAHk-i6Q!0(lsp60~9L^gQ_%c+R{zOpwdZERkfTKHMiZVCWbB;8RIQ|H|0e3y=`(3qhx)bZ9vjED z-YmA~gl$M!wM~LldM1dimCkB~s-6}LQGGK`5I;-seMLfY5$0np0!@4a*F3EY+P6n2 z(^#uTax3z5h1P8kZPZM)^M2L&@uZhuF$yLU7L@~SEhoBpu1KB=qU~c4Nh=!BU!~VCYS+vaYsQHjf39}xXp#L5 zAs-Jzv+V}D)dlvnAqsfURKW@4n`MG1!$QKOB328O_i*lj=!xlK1I~zDbWNm$wG!$= zGQ}yqiveFwL%h>xxJWIR1NIp+^D^8@qanpc5+b(nts1Rgy~F)$2TauE>v7Br`x z^3!^7a@~MaFBzssH}D;+O!4($-12aSCBpRX2B+65cEYRse0$ag`NI0R zJUcJ+`{7nzze?3#DHUs{TXZ-mwsl8M&EEv6nbL^&B3y0D6t;u^aU~|yk#SLw;6Q8V z<+rI%-;3Ru-O$_0#+l?g=CqH^#;nAn=Yv-K2+s70@OB~d^ajlJ`hp67g3Wmko-+k@ z;{mb5ii&5Ns-EdD=(t%ZXplchf^TC_Cl|o7nwG|%HL;1hfZ+NX>t%{%Irfyml4{Q_?^o< zK8l=uZHze<=I2j;817$2Fh7S-^dR9*7nEPmQ*1lWeBe*Q^-(I>!qs*=Eqbt6t@@pE zK&l@h`MT1`pI^x~I7xDKh}f3*V6&eRE%Vswh+b9?_7mCMKvC>8(D7df-wz3(xDZEs ztq=`)Vr9=}k>k;@zZ4*CITTuAoT7Yh)rFS{B{mo&WMMSBsycD9)x3Eva`#tBH^WNX zf7JFBNWxmy>Ddg)6o=X#bg-a|gTA>9>J1?2=Rj{R68mhWNa7f=-L8xDnyEJN7qMGT zskm=cR)&y_dfPUax~gXVvuOFL84(vWaSwW6&FGfxbnc zRbmL8(vS|X31kg{7Fq!tI9w%V7qqPdyb4g1=%x5{&eDQ=iq*|5MPE@q_D-lsMWx8q z;Pc&}K|!QBT$Y4Q?Aa_3|0a^bQ~bJr*~IV@+w0V=H&9S6(lT->bt=fV+!aVzFU9wR zl!oRaqDbZ%W59=}vs->Qd?{fFDBTNz7e{j7xVhvDNe4Q9MD$)^wVg^>TWG!5foZIU zcCxzpXTg^Hrh3Dm^avW!i31uOBlp;3m^t0xtZWar_GIm?(*2I+zbMACZmqV0B zrW4LkSoLci$mt06zMU)bwlv9_8LG6}lNqH{dvy@WyjE>;d$#Ro!Aq)Q?fb9RUh2$t zb-6%#dMl8BPVv$1IL7idq-iFKPW7Obwuy8_Nx%C%kqEIeHN0W&zF13>x|p*uM}mtrv7$T9I4g$;PJ8mwR2BpDBQPEO&Lo z8bjTx8xxYuZt?|kdZ%SGb%=|fY8%|FEu0W-Y4CHQ8@&bnt`o|&0rE~&`BX_Ixs=Mc zYgNZYh|p2!?5=Eo`HyVPB`gtFV5iiF?fP2m>rl0ys(CiKoYf91RqkJgY6a+s2v@0f zfb_0vv|Acz_ykY7FBDzqSE+ZA?3k5gudjfn`495(Ea7W{(dAP}ul5)FY@uq{7OTro zc)DR&+{8SyeyX)65oj@v>F{fZ_Ox)#xFd!?%{M&SBdmP|`%kD?-!Zji>sj0SiFmzd zsf{})_HC5djAK*|)mM$eQZMCO6ET`cndg5a1X zp)iaB@HyYrxJ?C)L2HYXA+%SE4do&&QF;v=B3klFVAfC$MGy_OxJVEVLNpXOH3u!Z z*rq}0KWK>WJw4C;95gWLU$QY&d{bOQC$RBHp)$--_b(&P?WJOm~+u~z}lhsM*E zAqAZQu|$Q gmX Date: Wed, 20 Aug 2025 17:28:02 -0600 Subject: [PATCH 077/147] Version 9.3d --- shaders/shaders.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 6a6b4422..6040b4f6 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -28,9 +28,9 @@ particles.before.deferred = true #endif texture.gbuffers.noisetex = textures/water_256_RG_8bit.png -texture.gbuffers.colortex2 = textures/bluenoise_64.png -texture.deferred.colortex2 = textures/bluenoise_64.png -texture.composite.colortex2 = textures/bluenoise_64.png +# texture.gbuffers.colortex2 = textures/bluenoise_64.png +# texture.deferred.colortex2 = textures/bluenoise_64.png +# texture.composite.colortex2 = textures/bluenoise_64.png #if CLOUD_VOL_STYLE == 0 texture.gbuffers.gaux2 = textures/clouds_natural_512_R_8bit.png From b42f4a3a0c1bd44199820e33306d7f1f4e6b60a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Wed, 20 Aug 2025 17:42:19 -0600 Subject: [PATCH 078/147] Version 9.3d --- ForDevelopers.EN.md | 18 +++++++++--------- ParaDesarrolladores.ES.md | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/ForDevelopers.EN.md b/ForDevelopers.EN.md index a0a24d3a..8def9b5d 100644 --- a/ForDevelopers.EN.md +++ b/ForDevelopers.EN.md @@ -59,15 +59,15 @@ The shaders used for any other unspecified dimension are direct descendants of t Buffers are used and assigned in the following way: - - noisetex: Stores the water normals in two channels, with the third component being calculated at runtime. (RG8) - - colortex0: Bluenoise (not loaded). (R8) - - colortex1: Main buffer. When DOF is active, it is four channels, with the fourth channel storing the scene depth for antialiasing and to avoid sudden focus changes due to camera shake. (Without DOF: R11F_G11F_B10F, with DOF: RGBA16) - - colortex2: Unused. (R8) - - colortex3: Stores the history used for temporal sampling. When DOF is active, it is four channels, with the fourth channel storing the scene depth for antialiasing and to avoid sudden focus changes due to camera shake. (Without DOF: R11F_G11F_B10F, with DOF: RGBA16) - - gaux1: Stores a version of the scene that will be used for screen-space reflections and refractions. After it is used for that, it is used as an auxiliary to store the scene's bloom. (R11F_G11F_B10F) - - gaux2: Stores the cloud map. (R8) - - gaux3: Stores the historical value of the scene's auto-exposure. The auto-exposure value is obtained by doing a weighted average with the value of this channel and the calculated one in the current scene to create a gradual transition of auto-exposure over time. Yes, it is excessive to use an entire buffer to store a single floating-point value, but it is what it is. It is only used if the default auto-exposure method is used. (R16F) - - gaux4: Stores the color of the sky (without clouds or other objects) to give the color that should be used in the fog (yes, the fog is always the color of the "sky"). This way, objects are blurred and blended with the sky in the distance. +- noisetex: Stores the water normals in two channels, with the third component being calculated at runtime. (RG8) +- colortex0: Unused. (R8) +- colortex1: Main buffer. When DOF is active, it is four channels, with the fourth channel storing the scene depth for antialiasing and to avoid sudden focus changes due to camera shake. (Without DOF: R11F_G11F_B10F, with DOF: RGBA16) +- colortex2: Bluenoise (not loaded). (R8) +- colortex3: Stores the history used for temporal sampling. When DOF is active, it is four channels, with the fourth channel storing the scene depth for antialiasing and to avoid sudden focus changes due to camera shake. (Without DOF: R11F_G11F_B10F, with DOF: RGBA16) +- gaux1: Stores a version of the scene that will be used for screen-space reflections and refractions. After it is used for that, it is used as an auxiliary to store the scene's bloom. (R11F_G11F_B10F) +- gaux2: Stores the cloud map. (R8) +- gaux3: Stores the historical value of the scene's auto-exposure. The auto-exposure value is obtained by doing a weighted average with the value of this channel and the calculated one in the current scene to create a gradual transition of auto-exposure over time. Yes, it is excessive to use an entire buffer to store a single floating-point value, but it is what it is. It is only used if the default auto-exposure method is used. (R16F) +- gaux4: Stores the color of the sky (without clouds or other objects) to give the color that should be used in the fog (yes, the fog is always the color of the "sky"). This way, objects are blurred and blended with the sky in the distance. ----- diff --git a/ParaDesarrolladores.ES.md b/ParaDesarrolladores.ES.md index 9320da43..dac67bf9 100644 --- a/ParaDesarrolladores.ES.md +++ b/ParaDesarrolladores.ES.md @@ -61,9 +61,9 @@ Los shaders que se emplean para cualquier otra dimensión no especificada son de Los buffers son utilizados y asignados de la siguiente manera: - noisetex: Almacena las normales del agua en dos canales, el tercer componente es calculado al momento. (RG8) -- colortex0: Ruido azul (no cargado). (R8) +- colortex0: Sin usar. (R8) - colortex1: Buffer principal. Cuando está actvo el DOF, es de cuatro canales, donde el cuarto canal almacena la profundidad de la escena para ser también suavizada por el antialias, y así evitar problemas en cambios de enfoque súbitos por la sacudida de la cámara. (Sin DOF: R11F_G11F_B10F, con DOF: RGBA16) -- colortex2: Sin usar. (R8) +- colortex2: Ruido azul (no cargado). (R8) - colortex3: Aquí se almacena el historial empleado por el muestreo temporal. Cuando está actvo el DOF, es de cuatro canales, donde el cuarto canal almacena la profundidad de la escena para ser también suavizada por el antialias, y así evitar problemas en cambios de enfoque súbitos por la sacudida de la cámara. (Sin DOF: R11F_G11F_B10F, con DOF: RGBA16) - gaux1: Aquí se almacena una versión de la escena que será empleada en los reflejos y refracciones de espacio de pantalla. Después de ser empleado para ello, se utiliza como auxiliar para almacenar el bloom de la escena. (R11F_G11F_B10F) - gaux2: Almacena el mapa para las nubes. (R8) From 7f9cf4b123e103b532acdce1acf0a0898f07e2ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 1 Sep 2025 03:23:56 -0600 Subject: [PATCH 079/147] Version 9.3e --- README.md | 2 +- shaders/common/composite1_fragment.glsl | 4 +-- shaders/common/deferred_fragment.glsl | 4 +-- shaders/common/solid_blocks_fragment.glsl | 3 +- shaders/lib/dither.glsl | 39 +++++++++++++++++++++-- shaders/shaders.properties | 25 ++++++++------- 6 files changed, 58 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index c943f2ce..224a76de 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.3d +## Version: 9.3e ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/common/composite1_fragment.glsl b/shaders/common/composite1_fragment.glsl index 6aa88ee9..f1c253de 100644 --- a/shaders/common/composite1_fragment.glsl +++ b/shaders/common/composite1_fragment.glsl @@ -46,9 +46,9 @@ void main() { #if defined BLOOM || defined DOF #if AA_TYPE > 0 - float dither = shifted_eclectic_r_dither(gl_FragCoord.xy); + float dither = shifted_dither_makeup(gl_FragCoord.xy); #else - float dither = semiblue(gl_FragCoord.xy); + float dither = dither_makeup(gl_FragCoord.xy); #endif #endif diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index e4fd7806..325ffbea 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -116,9 +116,9 @@ void main() { #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) #if AA_TYPE > 0 - float dither = shifted_semiblue(gl_FragCoord.xy + (frameCounter%5000)); + float dither = shifted_dither_makeup(gl_FragCoord.xy + frame_mod); #else - float dither = semiblue(gl_FragCoord.xy); + float dither = dither_makeup(gl_FragCoord.xy); #endif #endif diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index e9de48fa..c315fcef 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -116,7 +116,8 @@ varying vec3 omni_light; void main() { #if (defined SHADOW_CASTING && !defined NETHER) || defined DISTANT_HORIZONS #if AA_TYPE > 0 - float dither = shifted_dither17(gl_FragCoord.xy); + float dither = shifted_dither_makeup(gl_FragCoord.xy + frame_mod); + // float dither = shifted_dither_makeup(gl_FragCoord.xy); #else float dither = r_dither(gl_FragCoord.xy); #endif diff --git a/shaders/lib/dither.glsl b/shaders/lib/dither.glsl index ec64de20..3f1fe2ca 100644 --- a/shaders/lib/dither.glsl +++ b/shaders/lib/dither.glsl @@ -30,9 +30,8 @@ but there is no such texture currently. #if MC_VERSION >= 11300 uniform float dither_shift; -#else - uniform int frame_mod; #endif +uniform int frame_mod; float hash12(vec2 v) { @@ -117,6 +116,17 @@ float semiblue(vec2 xy) { return fract(dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); } +float dither_makeup(vec2 xy) { + vec2 tile = floor(xy * 0.125); + float flip = mod(tile.x + tile.y, 2.0); + vec2 zw = mix(xy, xy.yx, flip); + + return fract( + dot(vec2(0.24512233375330728, 0.4301597090019468), zw) + + dot(vec2(0.735151469707489, 0.737424373626709), tile) + ); +} + // float valve_red(vec2 xy) { // float vDither = dot(vec2( 171.0, 231.0 ), xy ); // return fract(vDither / 103.0); // (103.0, 71. 97.0 ) @@ -201,6 +211,19 @@ float semiblue(vec2 xy) { return fract(dither_shift + dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); } + float shifted_dither_makeup(vec2 xy) { + vec2 tile = floor(xy * 0.125); + float flip = mod(tile.x + tile.y, 2.0); + vec2 zw = mix(xy, xy.yx, flip); + + return fract( + dither_shift + + dot(vec2(0.24512233375330728, 0.4301597090019468), zw) + + dot(vec2(0.735151469707489, 0.737424373626709), tile) + ); + } + + // float shifted_valve_red(vec2 xy) { // float vDither = dot(vec2( 171.0, 231.0 ), xy ); // vDither = fract(vDither / 103.0); // (103.0, 71. 97.0 ) @@ -270,6 +293,18 @@ float semiblue(vec2 xy) { return fract((frame_mod * 0.4) + dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); } + float shifted_dither_makeup(vec2 xy) { + vec2 tile = floor(xy * 0.125); + float flip = mod(tile.x + tile.y, 2.0); + vec2 zw = mix(xy, xy.yx, flip); + + return fract( + (frame_mod * 0.4) + + dot(vec2(0.24512233375330728, 0.4301597090019468), zw) + + dot(vec2(0.735151469707489, 0.737424373626709), tile) + ); + } + // float shifted_valve_red(vec2 xy) { // float vDither = dot(vec2( 171.0, 231.0 ), xy ); // vDither = fract(vDither / 103.0); // (103.0, 71. 97.0 ) diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 6040b4f6..25320a46 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -147,7 +147,7 @@ uniform.int.frame_mod = fmod(frameCounter, 8) # as much as possible from one to the next. It helps to make the flickering of the image # so fast that it is "absorbed" and better masked by the TAA history. -#if AA_TYPE > -5 +#if AA_TYPE > 0 uniform.vec2.taa_offset = vec2((if( \ frame_mod == 0, 0.5, \ frame_mod == 1, -0.5, \ @@ -173,16 +173,19 @@ uniform.int.frame_mod = fmod(frameCounter, 8) # This only works in recent versions of Minecraft/Optifine/Iris. # For older versions, a mechanism that depends on the # uniform "frame_mod" is used to calculate the increment. - uniform.float.dither_shift = if( \ - frame_mod == 0, 0.625, \ - frame_mod == 1, 0.75, \ - frame_mod == 2, 0.375, \ - frame_mod == 3, 0.125, \ - frame_mod == 4, 0.5, \ - frame_mod == 5, 0.25, \ - frame_mod == 6, 0.875, \ - frame_mod == 7, 0.0, \ - 0.0) + + #if MC_VERSION >= 11300 + uniform.float.dither_shift = if( \ + frame_mod == 0, 0.625, \ + frame_mod == 1, 0.75, \ + frame_mod == 2, 0.375, \ + frame_mod == 3, 0.125, \ + frame_mod == 4, 0.5, \ + frame_mod == 5, 0.25, \ + frame_mod == 6, 0.875, \ + frame_mod == 7, 0.0, \ + 0.0) + #endif #endif # FOV - A precalculated value related to FOV From abb1b74c63247c4e4c42146743013e9d15b8e672 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 4 Oct 2025 19:51:30 -0600 Subject: [PATCH 080/147] Copper objects and lanterns --- shaders/block.properties | 4 +-- shaders/common/deferred_fragment.glsl | 2 +- shaders/common/solid_blocks_fragment.glsl | 3 +- shaders/item.properties | 2 +- shaders/lib/dither.glsl | 1 + shaders/shaders.properties | 42 ++++++++++++++++++----- 6 files changed, 39 insertions(+), 15 deletions(-) diff --git a/shaders/block.properties b/shaders/block.properties index b71a544a..1c1373c7 100644 --- a/shaders/block.properties +++ b/shaders/block.properties @@ -27,7 +27,7 @@ block.10079 = ice slime_block white_stained_glass orange_stained_glass magenta_stained_glass light_blue_stained_glass yellow_stained_glass lime_stained_glass pink_stained_glass gray_stained_glass light_gray_stained_glass cyan_stained_glass purple_stained_glass blue_stained_glass brown_stained_glass green_stained_glass red_stained_glass black_stained_glass white_stained_glass_pane orange_stained_glass_pane magenta_stained_glass_pane light_blue_stained_glass_pane yellow_stained_glass_pane lime_stained_glass_pane pink_stained_glass_pane gray_stained_glass_pane light_gray_stained_glass_pane cyan_stained_glass_pane purple_stained_glass_pane blue_stained_glass_pane brown_stained_glass_pane green_stained_glass_pane red_stained_glass_pane black_stained_glass_pane tinted_glass deeperdarker:soundproof_glass naturalist:crimson_froglass naturalist:verdant_froglass naturalist:azure_froglass naturalist:crimson_froglass_pane naturalist:verdant_froglass_pane naturalist:azure_froglass_pane createframed:white_stained_framed_glass_door createframed:white_stained_framed_glass_trapdoor createframed:white_stained_tiled_glass createframed:white_stained_tiled_glass_pane createframed:white_stained_framed_glass createframed:white_stained_framed_glass_pane createframed:horizontal_white_stained_framed_glass createframed:horizontal_white_stained_framed_glass_pane createframed:vertical_white_stained_framed_glass createframed:vertical_white_stained_framed_glass_pane createframed:light_gray_stained_framed_glass_door createframed:light_gray_stained_framed_glass_trapdoor createframed:light_gray_stained_tiled_glass createframed:light_gray_stained_tiled_glass_pane createframed:light_gray_stained_framed_glass createframed:light_gray_stained_framed_glass_pane createframed:horizontal_light_gray_stained_framed_glass createframed:horizontal_light_gray_stained_framed_glass_pane createframed:vertical_light_gray_stained_framed_glass createframed:vertical_light_gray_stained_framed_glass_pane createframed:gray_stained_framed_glass_door createframed:gray_stained_framed_glass_trapdoor createframed:gray_stained_tiled_glass createframed:gray_stained_tiled_glass_pane createframed:gray_stained_framed_glass createframed:gray_stained_framed_glass_pane createframed:horizontal_gray_stained_framed_glass createframed:horizontal_gray_stained_framed_glass_pane createframed:vertical_gray_stained_framed_glass createframed:vertical_gray_stained_framed_glass_pane createframed:black_stained_framed_glass_door createframed:black_stained_framed_glass_trapdoor createframed:black_stained_tiled_glass createframed:black_stained_tiled_glass_pane createframed:black_stained_framed_glass createframed:black_stained_framed_glass_pane createframed:horizontal_black_stained_framed_glass createframed:horizontal_black_stained_framed_glass_pane createframed:vertical_black_stained_framed_glass createframed:vertical_black_stained_framed_glass_pane createframed:brown_stained_framed_glass_door createframed:brown_stained_framed_glass_trapdoor createframed:brown_stained_tiled_glass createframed:brown_stained_tiled_glass_pane createframed:brown_stained_framed_glass createframed:brown_stained_framed_glass_pane createframed:horizontal_brown_stained_framed_glass createframed:horizontal_brown_stained_framed_glass_pane createframed:vertical_brown_stained_framed_glass createframed:vertical_brown_stained_framed_glass_pane createframed:red_stained_framed_glass_door createframed:red_stained_framed_glass_trapdoor createframed:red_stained_tiled_glass createframed:red_stained_tiled_glass_pane createframed:red_stained_framed_glass createframed:red_stained_framed_glass_pane createframed:horizontal_red_stained_framed_glass createframed:horizontal_red_stained_framed_glass_pane createframed:vertical_red_stained_framed_glass createframed:vertical_red_stained_framed_glass_pane createframed:orange_stained_framed_glass_door createframed:orange_stained_framed_glass_trapdoor createframed:orange_stained_tiled_glass createframed:orange_stained_tiled_glass_pane createframed:orange_stained_framed_glass createframed:orange_stained_framed_glass_pane createframed:horizontal_orange_stained_framed_glass createframed:horizontal_orange_stained_framed_glass_pane createframed:vertical_orange_stained_framed_glass createframed:vertical_orange_stained_framed_glass_pane createframed:yellow_stained_framed_glass_door createframed:yellow_stained_framed_glass_trapdoor createframed:yellow_stained_tiled_glass createframed:yellow_stained_tiled_glass_pane createframed:yellow_stained_framed_glass createframed:yellow_stained_framed_glass_pane createframed:horizontal_yellow_stained_framed_glass createframed:horizontal_yellow_stained_framed_glass_pane createframed:vertical_yellow_stained_framed_glass createframed:vertical_yellow_stained_framed_glass_pane createframed:lime_stained_framed_glass_door createframed:lime_stained_framed_glass_trapdoor createframed:lime_stained_tiled_glass createframed:lime_stained_tiled_glass_pane createframed:lime_stained_framed_glass createframed:lime_stained_framed_glass_pane createframed:horizontal_lime_stained_framed_glass createframed:horizontal_lime_stained_framed_glass_pane createframed:vertical_lime_stained_framed_glass createframed:vertical_lime_stained_framed_glass_pane createframed:green_stained_framed_glass_door createframed:green_stained_framed_glass_trapdoor createframed:green_stained_tiled_glass createframed:green_stained_tiled_glass_pane createframed:green_stained_framed_glass createframed:green_stained_framed_glass_pane createframed:horizontal_green_stained_framed_glass createframed:horizontal_green_stained_framed_glass_pane createframed:vertical_green_stained_framed_glass createframed:vertical_green_stained_framed_glass_pane createframed:cyan_stained_framed_glass_door createframed:cyan_stained_framed_glass_trapdoor createframed:cyan_stained_tiled_glass createframed:cyan_stained_tiled_glass_pane createframed:cyan_stained_framed_glass createframed:cyan_stained_framed_glass_pane createframed:horizontal_cyan_stained_framed_glass createframed:horizontal_cyan_stained_framed_glass_pane createframed:vertical_cyan_stained_framed_glass createframed:vertical_cyan_stained_framed_glass_pane createframed:light_blue_stained_framed_glass_door createframed:light_blue_stained_framed_glass_trapdoor createframed:light_blue_stained_tiled_glass createframed:light_blue_stained_tiled_glass_pane createframed:light_blue_stained_framed_glass createframed:light_blue_stained_framed_glass_pane createframed:horizontal_light_blue_stained_framed_glass createframed:horizontal_light_blue_stained_framed_glass_pane createframed:vertical_light_blue_stained_framed_glass createframed:vertical_light_blue_stained_framed_glass_pane createframed:blue_stained_framed_glass_door createframed:blue_stained_framed_glass_trapdoor createframed:blue_stained_tiled_glass createframed:blue_stained_tiled_glass_pane createframed:blue_stained_framed_glass createframed:blue_stained_framed_glass_pane createframed:horizontal_blue_stained_framed_glass createframed:horizontal_blue_stained_framed_glass_pane createframed:vertical_blue_stained_framed_glass createframed:vertical_blue_stained_framed_glass_pane createframed:purple_stained_framed_glass_door createframed:purple_stained_framed_glass_trapdoor createframed:purple_stained_tiled_glass createframed:purple_stained_tiled_glass_pane createframed:purple_stained_framed_glass createframed:purple_stained_framed_glass_pane createframed:horizontal_purple_stained_framed_glass createframed:horizontal_purple_stained_framed_glass_pane createframed:vertical_purple_stained_framed_glass createframed:vertical_purple_stained_framed_glass_pane createframed:magenta_stained_framed_glass_door createframed:magenta_stained_framed_glass_trapdoor createframed:magenta_stained_tiled_glass createframed:magenta_stained_tiled_glass_pane createframed:magenta_stained_framed_glass createframed:magenta_stained_framed_glass_pane createframed:horizontal_magenta_stained_framed_glass createframed:horizontal_magenta_stained_framed_glass_pane createframed:vertical_magenta_stained_framed_glass createframed:vertical_magenta_stained_framed_glass_pane createframed:pink_stained_framed_glass_door createframed:pink_stained_framed_glass_trapdoor createframed:pink_stained_tiled_glass createframed:pink_stained_tiled_glass_pane createframed:pink_stained_framed_glass createframed:pink_stained_framed_glass_pane createframed:horizontal_pink_stained_framed_glass createframed:horizontal_pink_stained_framed_glass_pane createframed:vertical_pink_stained_framed_glass createframed:vertical_pink_stained_framed_glass_pane # EMMISIVE (LIKE GLOWSTONE) - block.10089 = ochre_froglight verdant_froglight pearlescent_froglight glowstone shroomlight torch wall_torch redstone_torch redstone_wall_torch jack_o_lantern redstone_lamp lantern sea_lantern soul_lantern soul_torch soul_wall_torch cataclysm:void_lantern_block deeperdarker:sculk_gleam + block.10089 = ochre_froglight verdant_froglight pearlescent_froglight glowstone shroomlight torch wall_torch redstone_torch redstone_wall_torch jack_o_lantern redstone_lamp lantern sea_lantern soul_lantern soul_torch soul_wall_torch copper_lantern exposed_copper_lantern weathered_copper_lantern oxidized_copper_lantern waxed_copper_lantern waxed_exposed_copper_lantern waxed_weathered_copper_lantern waxed_oxidized_copper_lantern cataclysm:void_lantern_block deeperdarker:sculk_gleam # NEW EMMISIVE block.10090 = magma_block end_root campfire:lit=true soul_campfire:lit=true beacon betterendforge:mossy_glowshroom_hymenophore betterendforge:mossy_glowshroom_fur betterendforge:blue_vine_lantern betterendforge:blue_vine_fur betterendforge::lumecorn:shape=light_top_middle betterendforge::lumecorn:shape=light_middle betterendforge::lumecorn:shape=light_bottom betterendforge::purple_polypore betterendforge::bulb_vine:shape=bottom @@ -39,7 +39,7 @@ block.10214 = minecraft:fire # METAL-LIKE - block.10400 = iron_block iron_trapdoor gold_block emerald_block lapis_block diamond_block copper_block exposed_copper weathered_copper oxidized_copper cut_copper exposed_cut_copper weathered_cut_copper oxidized_cut_copper cut_copper_stairs exposed_cut_copper_stairs weathered_cut_copper_stairs oxidized_cut_copper_stairs cut_copper_slab exposed_cut_copper_slab weathered_cut_copper_slab oxidized_cut_copper_slab waxed_cut_copper_slab waxed_weathered_cut_copper_slab waxed_weathered_copper waxed_exposed_copper waxed_copper_block waxed_oxidized_cut_copper_slab waxed_weathered_cut_copper_slab waxed_exposed_cut_copper_slab waxed_cuyt_copper_slab waxed_oxidized_copper waxed_cut_copper waxed_exposed_cut_copper waxed_weathered_cut_copper waxed_oxidized_cut_copper waxed_cut_copper_stairs waxed_exposed_cut_copper_stairs waxed_weathered_cut_copper_stairs waxed_oxidized_cut_copper_stairs heavy_weighted_pressure_plate light_weighted_pressure_plate iron_bars copper_bars chain copper_chain tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top tfc:metal/anvil/bismuth_bronze tfc:metal/block/bismuth_bronze tfc:metal/bars/bismuth_bronze tfc:metal/trapdoor/bismuth_bronze tfc:metal/block/bismuth_bronze_stairs tfc:block/metal/block/bismuth_bronze_slab tfc:block/metal/block/bismuth_bronze_slab_top tfc:metal/anvil/black_bronze tfc:metal/block/black_bronze tfc:metal/bars/black_bronze tfc:metal/trapdoor/black_bronze tfc:metal/block/black_bronze_stairs tfc:block/metal/block/black_bronze_slab tfc:block/metal/block/black_bronze_slab_top tfc:metal/anvil/bronze tfc:metal/block/bronze tfc:metal/bars/bronze tfc:metal/trapdoor/bronze tfc:metal/block/bronze_stairs tfc:block/metal/block/bronze_slab tfc:block/metal/block/bronze_slab_top tfc:metal/anvil/brass tfc:metal/block/brass tfc:metal/bars/brass tfc:metal/trapdoor/brass tfc:metal/block/brass_stairs tfc:block/metal/block/brass_slab tfc:block/metal/block/brass_slab_top tfc:metal/anvil/copper tfc:metal/block/copper tfc:metal/bars/copper tfc:metal/trapdoor/copper tfc:metal/block/copper_stairs tfc:block/metal/block/copper_slab tfc:block/metal/block/copper_slab_top tfc:metal/anvil/gold tfc:metal/block/gold tfc:metal/bars/gold tfc:metal/trapdoor/gold tfc:metal/block/gold_stairs tfc:block/metal/block/gold_slab tfc:block/metal/block/gold_slab_top tfc:metal/anvil/nickel tfc:metal/block/nickel tfc:metal/bars/nickel tfc:metal/trapdoor/nickel tfc:metal/block/nickel_stairs tfc:block/metal/block/nickel_slab tfc:block/metal/block/nickel_slab_top tfc:metal/anvil/rose_gold tfc:metal/block/rose_gold tfc:metal/bars/rose_gold tfc:metal/trapdoor/rose_gold tfc:metal/block/rose_gold_stairs tfc:block/metal/block/rose_gold_slab tfc:block/metal/block/rose_gold_slab_top tfc:metal/anvil/silver tfc:metal/block/silver tfc:metal/bars/silver tfc:metal/trapdoor/silver tfc:metal/block/silver_stairs tfc:block/metal/block/silver_slab tfc:block/metal/block/silver_slab_top tfc:metal/anvil/tin tfc:metal/block/tin tfc:metal/bars/tin tfc:metal/trapdoor/tin tfc:metal/block/tin_stairs tfc:block/metal/block/tin_slab tfc:block/metal/block/tin_slab_top tfc:metal/anvil/zinc tfc:metal/block/zinc tfc:metal/bars/zinc tfc:metal/trapdoor/zinc tfc:metal/block/zinc_stairs tfc:block/metal/block/zinc_slab tfc:block/metal/block/zinc_slab_top tfc:metal/anvil/sterling_silver tfc:metal/block/sterling_silver tfc:metal/bars/sterling_silver tfc:metal/trapdoor/sterling_silver tfc:metal/block/sterling_silver_stairs tfc:block/metal/block/sterling_silver_slab tfc:block/metal/block/sterling_silver_slab_top tfc:metal/anvil/wrought_iron tfc:metal/block/wrought_iron tfc:metal/bars/wrought_iron tfc:metal/trapdoor/wrought_iron tfc:metal/block/wrought_iron_stairs tfc:block/metal/block/wrought_iron_slab tfc:block/metal/block/wrought_iron_slab_top tfc:metal/anvil/cast_iron tfc:metal/block/cast_iron tfc:metal/bars/cast_iron tfc:metal/trapdoor/cast_iron tfc:metal/block/cast_iron_stairs tfc:block/metal/block/cast_iron_slab tfc:block/metal/block/cast_iron_slab_top tfc:metal/anvil/pig_iron tfc:metal/block/pig_iron tfc:metal/bars/pig_iron tfc:metal/trapdoor/pig_iron tfc:metal/block/pig_iron_stairs tfc:block/metal/block/pig_iron_slab tfc:block/metal/block/pig_iron_slab_top tfc:metal/anvil/steel tfc:metal/block/steel tfc:metal/bars/steel tfc:metal/trapdoor/steel tfc:metal/block/steel_stairs tfc:block/metal/block/steel_slab tfc:block/metal/block/steel_slab_top tfc:metal/anvil/black_steel tfc:metal/block/black_steel tfc:metal/bars/black_steel tfc:metal/trapdoor/black_steel tfc:metal/block/black_steel_stairs tfc:block/metal/block/black_steel_slab tfc:block/metal/block/black_steel_slab_top tfc:metal/anvil/blue_steel tfc:metal/block/blue_steel tfc:metal/bars/blue_steel tfc:metal/trapdoor/blue_steel tfc:metal/block/blue_steel_stairs tfc:block/metal/block/blue_steel_slab tfc:block/metal/block/blue_steel_slab_top tfc:metal/anvil/red_steel tfc:metal/block/red_steel tfc:metal/bars/red_steel tfc:metal/trapdoor/red_steel tfc:metal/block/red_steel_stairs tfc:block/metal/block/red_steel_slab tfc:block/metal/block/red_steel_slab_top tfc:metal/anvil/weak_steel tfc:metal/block/weak_steel tfc:metal/bars/weak_steel tfc:metal/trapdoor/weak_steel tfc:metal/block/weak_steel_stairs tfc:block/metal/block/weak_steel_slab tfc:block/metal/block/weak_steel_slab_top tfc:metal/anvil/weak_blue_steel tfc:metal/block/weak_blue_steel tfc:metal/bars/weak_blue_steel tfc:metal/trapdoor/weak_blue_steel tfc:metal/block/weak_blue_steel_stairs tfc:block/metal/block/weak_blue_steel_slab tfc:block/metal/block/weak_blue_steel_slab_top tfc:metal/anvil/weak_red_steel tfc:metal/block/weak_red_steel tfc:metal/bars/weak_red_steel tfc:metal/trapdoor/weak_red_steel tfc:metal/block/weak_red_steel_stairs tfc:block/metal/block/weak_red_steel_slab tfc:block/metal/block/weak_red_steel_slab_top tfc:metal/anvil/high_carbon_steel tfc:metal/block/high_carbon_steel tfc:metal/bars/high_carbon_steel tfc:metal/trapdoor/high_carbon_steel tfc:metal/block/high_carbon_steel_stairs tfc:block/metal/block/high_carbon_steel_slab tfc:block/metal/block/high_carbon_steel_slab_top tfc:metal/anvil/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel tfc:metal/bars/high_carbon_black_steel tfc:metal/trapdoor/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel_stairs tfc:block/metal/block/high_carbon_black_steel_slab tfc:block/metal/block/high_carbon_black_steel_slab_top tfc:metal/anvil/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel tfc:metal/bars/high_carbon_blue_steel tfc:metal/trapdoor/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel_stairs tfc:block/metal/block/high_carbon_blue_steel_slab tfc:block/metal/block/high_carbon_blue_steel_slab_top tfc:metal/anvil/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel tfc:metal/bars/high_carbon_red_steel tfc:metal/trapdoor/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel_stairs tfc:block/metal/block/high_carbon_red_steel_slab tfc:block/metal/block/high_carbon_red_steel_slab_top tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top create:copper_ladder create:brass_ladder create:copper_scaffolding create:brass_scaffolding create:brass_block create:copper_bars create:brass_bars create:smart_chute create:fluid_tank create:steam_whistle create:steam_engine create:spout create:hose_pulley create:item_drain create:train_casing create:smart_fluid_pipe create:fluid_pipe create:mechanical_pump create:copper_valve_handle create:fluid_valve create:mechanical_crafter create:sequenced_gearshift create:flywheel create:rotation_speed_controller create:mechanical_arm create:railway_casing create:controls create:brass_funnel create:brass_tunnel create:content_observer create:stockpile_switch create:redstone_link create:pulse_repeater create:pulse_extender create:peculiar_bell create_jetpack:jetpack create_enchantment_industry:printer create_enchantment_industry:disenchanter cataclysm:ancient_metal_block cataclysm:cursium_block cataclysm:enderite_block cataclysm:witherite_block cataclysm:ignitium_block cataclysm:mechanical_fusion_anvil cataclysm:emp cataclysm:black_steel_block create_dd:furnace_engine create_dd:bore_block create_dd:industrial_fan create_dd:hydraulic_press create_dd:item_stockpile create_dd:fluid_reservoir create_dd:dark_metal_block create_dd:dark_metal_plating create_dd:dark_metal_block_slab create_dd:dark_metal_block_stairs create_dd:dark_metal_bricks create_dd:dark_metal_brick_slab create_dd:dark_metal_brick_stairs create:zinc_block create:industrial_iron_block create:train_door create:chute create:item_vault create:haunted_bell minecraft:netherite_block create_jetpack:netherite_jetpack createutilities:void_steel_block createutilities:void_steel_scaffolding createutilities:void_casing createutilities:void_steel_bars createutilities:void_steel_ladder createutilities:void_motor createutilities:void_chest createutilities:void_tank createutilities:void_battery railways:smokestack_caboosestyle railways:smokestack_long railways:smokestack_coalburner railways:smokestack_oilburner railways:smokestack_streamlined railways:smokestack_woodburner railways:fuel_tank railways:portable_fuel_interface create_power_loader:empty_brass_chunk_loader create_power_loader:brass_chunk_loader create_connected:empty_fan_catalyst create_connected:fan_blasting_catalyst create_connected:fan_smoking_catalyst create_connected:fan_splashing_catalyst create_connected:fan_haunting_catalyst create_connected:sequenced_pulse_generator create_connected:item_silo create_things_and_misc:card_reader create_things_and_misc:card_press create_things_and_misc:sprinkler create_things_and_misc:brass_tiles create_things_and_misc:brass_tiles_slab create_things_and_misc:brass_tiles_stair create_things_and_misc:brass_bricks create_things_and_misc:brass_brick_slab create_things_and_misc:brass_brick_stairs vintageimprovements:vanadium_block createcasing:brass_shaft createcasing:creative_casing create_dd:stargaze_singularity_scaffolding create_dd:stargaze_singularity_block create_dd:stargaze_singularity_casing create_dd:mithril_scaffolding create_dd:mithril_block create_dd:mithril_casing create_dd:bronze_scaffolding create_dd:bronze_block create_dd:bronze_casing create_dd:steel_scaffolding create_dd:steel_block create_dd:steel_casing create_dd:industrial_iron_block create_dd:industrial_casing create_dd:tin_scaffolding create_dd:tin_block create_dd:chromatic_block create_dd:refined_radiance_scaffolding create_dd:refined_radiance_block create_dd:refined_radiance_casing create_dd:shadow_steel_scaffolding create_dd:shadow_steel_block create_dd:shadow_steel_casing create_dd:blaze_gold_scaffolding create_dd:blaze_gold_block create_dd:blaze_gold_casing create_dd:hydraulic_scaffolding create_dd:hydraulic_casing create_dd:overburden_scaffolding create_dd:overburden_casing create_dd:train_scaffolding create_dd:zinc_scaffolding create_dd:industrial_scaffolding create_dd:netherite_scaffolding create_dd:bronze_saw create_dd:bronze_drill createbigcannons:big_cartridge createbigcannons:cast_iron_block createbigcannons:nethersteel_block createbigcannons:basin_foundry_lid createbigcannons:wrought_iron_drop_mortar_end createbigcannons:wrought_iron_cannon_end createbigcannons:wrought_iron_cannon_chamber create_dd:flywheel railways:slashed_locometal railways:riveted_locometal railways:locometal_pillar railways:locometal_smokebox railways:plated_locometal railways:flat_slashed_locometal railways:flat_riveted_locometal railways:brass_wrapped_locometal railways:copper_wrapped_locometal railways:iron_wrapped_locometal railways:locometal_boiler railways:brass_wrapped_locometal_boiler railways:copper_wrapped_locometal_boiler railways:iron_wrapped_locometal_boiler railways:white_slashed_locometal railways:white_riveted_locometal railways:white_locometal_pillar railways:white_locometal_smokebox railways:white_plated_locometal railways:white_flat_slashed_locometal railways:white_flat_riveted_locometal railways:white_brass_wrapped_locometal railways:white_copper_wrapped_locometal railways:white_iron_wrapped_locometal railways:white_locometal_boiler railways:white_brass_wrapped_locometal_boiler railways:white_copper_wrapped_locometal_boiler railways:white_iron_wrapped_locometal_boiler railways:light_gray_slashed_locometal railways:light_gray_riveted_locometal railways:light_gray_locometal_pillar railways:light_gray_locometal_smokebox railways:light_gray_plated_locometal railways:light_gray_flat_slashed_locometal railways:light_gray_flat_riveted_locometal railways:light_gray_brass_wrapped_locometal railways:light_gray_copper_wrapped_locometal railways:light_gray_iron_wrapped_locometal railways:light_gray_locometal_boiler railways:light_gray_brass_wrapped_locometal_boiler railways:light_gray_copper_wrapped_locometal_boiler railways:light_gray_iron_wrapped_locometal_boiler railways:gray_slashed_locometal railways:gray_riveted_locometal railways:gray_locometal_pillar railways:gray_locometal_smokebox railways:gray_plated_locometal railways:gray_flat_slashed_locometal railways:gray_flat_riveted_locometal railways:gray_brass_wrapped_locometal railways:gray_copper_wrapped_locometal railways:gray_iron_wrapped_locometal railways:gray_locometal_boiler railways:gray_brass_wrapped_locometal_boiler railways:gray_copper_wrapped_locometal_boiler railways:gray_iron_wrapped_locometal_boiler railways:black_slashed_locometal railways:black_riveted_locometal railways:black_locometal_pillar railways:black_locometal_smokebox railways:black_plated_locometal railways:black_flat_slashed_locometal railways:black_flat_riveted_locometal railways:black_brass_wrapped_locometal railways:black_copper_wrapped_locometal railways:black_iron_wrapped_locometal railways:black_locometal_boiler railways:black_brass_wrapped_locometal_boiler railways:black_copper_wrapped_locometal_boiler railways:black_iron_wrapped_locometal_boiler railways:brown_slashed_locometal railways:brown_riveted_locometal railways:brown_locometal_pillar railways:brown_locometal_smokebox railways:brown_plated_locometal railways:brown_flat_slashed_locometal railways:brown_flat_riveted_locometal railways:brown_brass_wrapped_locometal railways:brown_copper_wrapped_locometal railways:brown_iron_wrapped_locometal railways:brown_locometal_boiler railways:brown_brass_wrapped_locometal_boiler railways:brown_copper_wrapped_locometal_boiler railways:brown_iron_wrapped_locometal_boiler railways:red_slashed_locometal railways:red_riveted_locometal railways:red_locometal_pillar railways:red_locometal_smokebox railways:red_plated_locometal railways:red_flat_slashed_locometal railways:red_flat_riveted_locometal railways:red_brass_wrapped_locometal railways:red_copper_wrapped_locometal railways:red_iron_wrapped_locometal railways:red_locometal_boiler railways:red_brass_wrapped_locometal_boiler railways:red_copper_wrapped_locometal_boiler railways:red_iron_wrapped_locometal_boiler railways:orange_slashed_locometal railways:orange_riveted_locometal railways:orange_locometal_pillar railways:orange_locometal_smokebox railways:orange_plated_locometal railways:orange_flat_slashed_locometal railways:orange_flat_riveted_locometal railways:orange_brass_wrapped_locometal railways:orange_copper_wrapped_locometal railways:orange_iron_wrapped_locometal railways:orange_locometal_boiler railways:orange_brass_wrapped_locometal_boiler railways:orange_copper_wrapped_locometal_boiler railways:orange_iron_wrapped_locometal_boiler railways:yellow_slashed_locometal railways:yellow_riveted_locometal railways:yellow_locometal_pillar railways:yellow_locometal_smokebox railways:yellow_plated_locometal railways:yellow_flat_slashed_locometal railways:yellow_flat_riveted_locometal railways:yellow_brass_wrapped_locometal railways:yellow_copper_wrapped_locometal railways:yellow_iron_wrapped_locometal railways:yellow_locometal_boiler railways:yellow_brass_wrapped_locometal_boiler railways:yellow_copper_wrapped_locometal_boiler railways:yellow_iron_wrapped_locometal_boiler railways:lime_slashed_locometal railways:lime_riveted_locometal railways:lime_locometal_pillar railways:lime_locometal_smokebox railways:lime_plated_locometal railways:lime_flat_slashed_locometal railways:lime_flat_riveted_locometal railways:lime_brass_wrapped_locometal railways:lime_copper_wrapped_locometal railways:lime_iron_wrapped_locometal railways:lime_locometal_boiler railways:lime_brass_wrapped_locometal_boiler railways:lime_copper_wrapped_locometal_boiler railways:lime_iron_wrapped_locometal_boiler railways:green_slashed_locometal railways:green_riveted_locometal railways:green_locometal_pillar railways:green_locometal_smokebox railways:green_plated_locometal railways:green_flat_slashed_locometal railways:green_flat_riveted_locometal railways:green_brass_wrapped_locometal railways:green_copper_wrapped_locometal railways:green_iron_wrapped_locometal railways:green_locometal_boiler railways:green_brass_wrapped_locometal_boiler railways:green_copper_wrapped_locometal_boiler railways:green_iron_wrapped_locometal_boiler railways:cyan_slashed_locometal railways:cyan_riveted_locometal railways:cyan_locometal_pillar railways:cyan_locometal_smokebox railways:cyan_plated_locometal railways:cyan_flat_slashed_locometal railways:cyan_flat_riveted_locometal railways:cyan_brass_wrapped_locometal railways:cyan_copper_wrapped_locometal railways:cyan_iron_wrapped_locometal railways:cyan_locometal_boiler railways:cyan_brass_wrapped_locometal_boiler railways:cyan_copper_wrapped_locometal_boiler railways:cyan_iron_wrapped_locometal_boiler railways:light_blue_slashed_locometal railways:light_blue_riveted_locometal railways:light_blue_locometal_pillar railways:light_blue_locometal_smokebox railways:light_blue_plated_locometal railways:light_blue_flat_slashed_locometal railways:light_blue_flat_riveted_locometal railways:light_blue_brass_wrapped_locometal railways:light_blue_copper_wrapped_locometal railways:light_blue_iron_wrapped_locometal railways:light_blue_locometal_boiler railways:light_blue_brass_wrapped_locometal_boiler railways:light_blue_copper_wrapped_locometal_boiler railways:light_blue_iron_wrapped_locometal_boiler railways:blue_slashed_locometal railways:blue_riveted_locometal railways:blue_locometal_pillar railways:blue_locometal_smokebox railways:blue_plated_locometal railways:blue_flat_slashed_locometal railways:blue_flat_riveted_locometal railways:blue_brass_wrapped_locometal railways:blue_copper_wrapped_locometal railways:blue_iron_wrapped_locometal railways:blue_locometal_boiler railways:blue_brass_wrapped_locometal_boiler railways:blue_copper_wrapped_locometal_boiler railways:blue_iron_wrapped_locometal_boiler railways:purple_slashed_locometal railways:purple_riveted_locometal railways:purple_locometal_pillar railways:purple_locometal_smokebox railways:purple_plated_locometal railways:purple_flat_slashed_locometal railways:purple_flat_riveted_locometal railways:purple_brass_wrapped_locometal railways:purple_copper_wrapped_locometal railways:purple_iron_wrapped_locometal railways:purple_locometal_boiler railways:purple_brass_wrapped_locometal_boiler railways:purple_copper_wrapped_locometal_boiler railways:purple_iron_wrapped_locometal_boiler railways:magenta_slashed_locometal railways:magenta_riveted_locometal railways:magenta_locometal_pillar railways:magenta_locometal_smokebox railways:magenta_plated_locometal railways:magenta_flat_slashed_locometal railways:magenta_flat_riveted_locometal railways:magenta_brass_wrapped_locometal railways:magenta_copper_wrapped_locometal railways:magenta_iron_wrapped_locometal railways:magenta_locometal_boiler railways:magenta_brass_wrapped_locometal_boiler railways:magenta_copper_wrapped_locometal_boiler railways:magenta_iron_wrapped_locometal_boiler railways:pink_slashed_locometal railways:pink_riveted_locometal railways:pink_locometal_pillar railways:pink_locometal_smokebox railways:pink_plated_locometal railways:pink_flat_slashed_locometal railways:pink_flat_riveted_locometal railways:pink_brass_wrapped_locometal railways:pink_copper_wrapped_locometal railways:pink_iron_wrapped_locometal railways:pink_locometal_boiler railways:pink_brass_wrapped_locometal_boiler railways:pink_copper_wrapped_locometal_boiler railways:pink_iron_wrapped_locometal_boiler create:copper_shingles create:copper_shingle_stairs create:copper_shingle_slab create:waxed_copper_shingles create:waxed_copper_shingle_stairs create:waxed_copper_shingle_slab create:exposed_copper_shingles create:exposed_copper_shingle_stairs create:exposed_copper_shingle_slab create:waxed_exposed_copper_shingles create:waxed_exposed_copper_shingle_stairs create:waxed_exposed_copper_shingle_slab create:weathered_copper_shingles create:weathered_copper_shingle_stairs create:weathered_copper_shingle_slab create:waxed_weathered_copper_shingles create:waxed_weathered_copper_shingle_stairs create:waxed_weathered_copper_shingle_slab create:oxidized_copper_shingles create:oxidized_copper_shingle_stairs create:oxidized_copper_shingle_slab create:waxed_oxidized_copper_shingles create:waxed_oxidized_copper_shingle_stairs create:waxed_oxidized_copper_shingle_slab create:copper_tiles create:copper_tile_stairs create:copper_tile_slab create:waxed_copper_tiles create:waxed_copper_tile_stairs create:waxed_copper_tile_slab create:exposed_copper_tiles create:exposed_copper_tile_stairs create:exposed_copper_tile_slab create:waxed_exposed_copper_tiles create:waxed_exposed_copper_tile_stairs create:waxed_exposed_copper_tile_slab create:weathered_copper_tiles create:weathered_copper_tile_stairs create:weathered_copper_tile_slab create:waxed_weathered_copper_tiles create:waxed_weathered_copper_tile_stairs create:waxed_weathered_copper_tile_slab create:oxidized_copper_tiles create:oxidized_copper_tile_stairs create:oxidized_copper_tile_slab create:waxed_oxidized_copper_tiles create:waxed_oxidized_copper_tile_stairs create:waxed_oxidized_copper_tile_slab create_dd:steel_polished_block create_dd:steel_polished_stairs create_dd:steel_polished_slab create_dd:steel_tiled_block create_dd:steel_tiled_stairs create_dd:steel_tiled_slab create_dd:zinc_polished_block create_dd:zinc_polished_stairs create_dd:zinc_polished_slab create_dd:zinc_tiled_block create_dd:zinc_tiled_stairs create_dd:zinc_tiled_slab create_dd:bronze_polished_block create_dd:bronze_polished_stairs create_dd:bronze_polished_slab create_dd:bronze_tiled_block create_dd:bronze_tiled_stairs create_dd:bronze_tiled_slab createbigcannons:cast_iron_sliding_breech createbigcannons:unbored_cast_iron_sliding_breech createbigcannons:incomplete_cast_iron_sliding_breech createbigcannons:cast_iron_quickfiring_breech createbigcannons:cast_iron_screw_breech createbigcannons:unbored_cast_iron_screw_breech createbigcannons:incomplete_cast_iron_screw_breech createbigcannons:cast_iron_cannon_end createbigcannons:cast_iron_autocannon_breech createbigcannons:unbored_cast_iron_autocannon_breech createbigcannons:incomplete_cast_iron_autocannon_breech createbigcannons:cast_iron_autocannon_recoil_spring createbigcannons:unbored_cast_iron_autocannon_recoil_spring createbigcannons:incomplete_cast_iron_autocannon_recoil_spring createbigcannons:cast_iron_autocannon_barrel createbigcannons:unbored_cast_iron_autocannon_barrel createbigcannons:very_small_cast_iron_cannon_layer createbigcannons:small_cast_iron_cannon_layer createbigcannons:medium_cast_iron_cannon_layer createbigcannons:large_cast_iron_cannon_layer createbigcannons:very_large_cast_iron_cannon_layer createbigcannons:unbored_very_small_cast_iron_cannon_layer createbigcannons:unbored_small_cast_iron_cannon_layer createbigcannons:unbored_medium_cast_iron_cannon_layer createbigcannons:unbored_large_cast_iron_cannon_layer createbigcannons:unbored_very_large_cast_iron_cannon_layer createbigcannons:cast_iron_cannon_barrel createbigcannons:built_up_cast_iron_cannon_barrel createbigcannons:cast_iron_cannon_chamber createbigcannons:built_up_cast_iron_cannon_chamber createbigcannons:thick_cast_iron_cannon_chamber createbigcannons:bronze_sliding_breech createbigcannons:unbored_bronze_sliding_breech createbigcannons:incomplete_bronze_sliding_breech createbigcannons:bronze_quickfiring_breech createbigcannons:bronze_screw_breech createbigcannons:unbored_bronze_screw_breech createbigcannons:incomplete_bronze_screw_breech createbigcannons:bronze_cannon_end createbigcannons:bronze_autocannon_breech createbigcannons:unbored_bronze_autocannon_breech createbigcannons:incomplete_bronze_autocannon_breech createbigcannons:bronze_autocannon_recoil_spring createbigcannons:unbored_bronze_autocannon_recoil_spring createbigcannons:incomplete_bronze_autocannon_recoil_spring createbigcannons:bronze_autocannon_barrel createbigcannons:unbored_bronze_autocannon_barrel createbigcannons:very_small_bronze_cannon_layer createbigcannons:small_bronze_cannon_layer createbigcannons:medium_bronze_cannon_layer createbigcannons:large_bronze_cannon_layer createbigcannons:very_large_bronze_cannon_layer createbigcannons:unbored_very_small_bronze_cannon_layer createbigcannons:unbored_small_bronze_cannon_layer createbigcannons:unbored_medium_bronze_cannon_layer createbigcannons:unbored_large_bronze_cannon_layer createbigcannons:unbored_very_large_bronze_cannon_layer createbigcannons:bronze_cannon_barrel createbigcannons:built_up_bronze_cannon_barrel createbigcannons:bronze_cannon_chamber createbigcannons:built_up_bronze_cannon_chamber createbigcannons:thick_bronze_cannon_chamber createbigcannons:steel_sliding_breech createbigcannons:unbored_steel_sliding_breech createbigcannons:incomplete_steel_sliding_breech createbigcannons:steel_quickfiring_breech createbigcannons:steel_screw_breech createbigcannons:unbored_steel_screw_breech createbigcannons:incomplete_steel_screw_breech createbigcannons:steel_cannon_end createbigcannons:steel_autocannon_breech createbigcannons:unbored_steel_autocannon_breech createbigcannons:incomplete_steel_autocannon_breech createbigcannons:steel_autocannon_recoil_spring createbigcannons:unbored_steel_autocannon_recoil_spring createbigcannons:incomplete_steel_autocannon_recoil_spring createbigcannons:steel_autocannon_barrel createbigcannons:unbored_steel_autocannon_barrel createbigcannons:very_small_steel_cannon_layer createbigcannons:small_steel_cannon_layer createbigcannons:medium_steel_cannon_layer createbigcannons:large_steel_cannon_layer createbigcannons:very_large_steel_cannon_layer createbigcannons:unbored_very_small_steel_cannon_layer createbigcannons:unbored_small_steel_cannon_layer createbigcannons:unbored_medium_steel_cannon_layer createbigcannons:unbored_large_steel_cannon_layer createbigcannons:unbored_very_large_steel_cannon_layer createbigcannons:steel_cannon_barrel createbigcannons:built_up_steel_cannon_barrel createbigcannons:steel_cannon_chamber createbigcannons:built_up_steel_cannon_chamber createbigcannons:thick_steel_cannon_chamber createbigcannons:nethersteel_sliding_breech createbigcannons:unbored_nethersteel_sliding_breech createbigcannons:incomplete_nethersteel_sliding_breech createbigcannons:nethersteel_quickfiring_breech createbigcannons:nethersteel_screw_breech createbigcannons:unbored_nethersteel_screw_breech createbigcannons:incomplete_nethersteel_screw_breech createbigcannons:nethersteel_cannon_end createbigcannons:nethersteel_autocannon_breech createbigcannons:unbored_nethersteel_autocannon_breech createbigcannons:incomplete_nethersteel_autocannon_breech createbigcannons:nethersteel_autocannon_recoil_spring createbigcannons:unbored_nethersteel_autocannon_recoil_spring createbigcannons:incomplete_nethersteel_autocannon_recoil_spring createbigcannons:nethersteel_autocannon_barrel createbigcannons:unbored_nethersteel_autocannon_barrel createbigcannons:very_small_nethersteel_cannon_layer createbigcannons:small_nethersteel_cannon_layer createbigcannons:medium_nethersteel_cannon_layer createbigcannons:large_nethersteel_cannon_layer createbigcannons:very_large_nethersteel_cannon_layer createbigcannons:unbored_very_small_nethersteel_cannon_layer createbigcannons:unbored_small_nethersteel_cannon_layer createbigcannons:unbored_medium_nethersteel_cannon_layer createbigcannons:unbored_large_nethersteel_cannon_layer createbigcannons:unbored_very_large_nethersteel_cannon_layer createbigcannons:nethersteel_cannon_barrel createbigcannons:built_up_nethersteel_cannon_barrel createbigcannons:nethersteel_cannon_chamber createbigcannons:built_up_nethersteel_cannon_chamber createbigcannons:thick_nethersteel_cannon_chamber createcasing:brass_mixer createcasing:brass_press createcasing:brass_depot createcasing:copper_mixer createcasing:copper_press createcasing:copper_depot createcasing:railway_gearbox createcasing:railway_encased_chain_drive createcasing:railway_adjustable_chain_gearshift createcasing:railway_mixer createcasing:railway_press createcasing:railway_depot createcasing:creative_gearbox createcasing:creative_encased_chain_drive createcasing:creative_adjustable_chain_gearshift createcasing:creative_mixer createcasing:creative_press createcasing:creative_depot createcasing:industrial_iron_gearbox createcasing:industrial_iron_encased_chain_drive createcasing:industrial_iron_adjustable_chain_gearshift createcasing:industrial_iron_mixer createcasing:industrial_iron_press createcasing:industrial_iron_depot createdeco:brass_coinstack createdeco:brass_bars createdeco:brass_bars_overlay createdeco:brass_mesh_fence createdeco:brass_hull createdeco:brass_catwalk createdeco:brass_catwalk_stairs createdeco:brass_catwalk_railing createdeco:brass_support_wedge createdeco:brass_support createdeco:brass_sheet_metal createdeco:brass_door createdeco:locked_brass_door createdeco:brass_trapdoor createdeco:red_brass_lamp createdeco:green_brass_lamp createdeco:blue_brass_lamp createdeco:yellow_brass_lamp createdeco:iron_coinstack createdeco:iron_bars createdeco:iron_bars_overlay createdeco:iron_mesh_fence createdeco:iron_hull createdeco:iron_catwalk createdeco:iron_catwalk_stairs createdeco:iron_catwalk_railing createdeco:iron_support_wedge createdeco:iron_support createdeco:iron_sheet_metal createdeco:iron_door createdeco:locked_iron_door createdeco:iron_trapdoor createdeco:red_iron_lamp createdeco:green_iron_lamp createdeco:blue_iron_lamp createdeco:yellow_iron_lamp createdeco:copper_coinstack createdeco:copper_bars createdeco:copper_bars_overlay createdeco:copper_mesh_fence createdeco:copper_hull createdeco:copper_catwalk createdeco:copper_catwalk_stairs createdeco:copper_catwalk_railing createdeco:copper_support_wedge createdeco:copper_support createdeco:copper_sheet_metal createdeco:copper_door createdeco:locked_copper_door createdeco:copper_trapdoor createdeco:red_copper_lamp createdeco:green_copper_lamp createdeco:blue_copper_lamp createdeco:yellow_copper_lamp createdeco:industrial_iron_coinstack createdeco:industrial_iron_bars createdeco:industrial_iron_bars_overlay createdeco:industrial_iron_mesh_fence createdeco:industrial_iron_hull createdeco:industrial_iron_catwalk createdeco:industrial_iron_catwalk_stairs createdeco:industrial_iron_catwalk_railing createdeco:industrial_iron_support_wedge createdeco:industrial_iron_support createdeco:industrial_iron_sheet_metal createdeco:industrial_iron_door createdeco:locked_industrial_iron_door createdeco:industrial_iron_trapdoor createdeco:red_industrial_iron_lamp createdeco:green_industrial_iron_lamp createdeco:blue_industrial_iron_lamp createdeco:yellow_industrial_iron_lamp createdeco:zinc_coinstack createdeco:zinc_bars createdeco:zinc_bars_overlay createdeco:zinc_mesh_fence createdeco:zinc_hull createdeco:zinc_catwalk createdeco:zinc_catwalk_stairs createdeco:zinc_catwalk_railing createdeco:zinc_support_wedge createdeco:zinc_support createdeco:zinc_sheet_metal createdeco:zinc_door createdeco:locked_zinc_door createdeco:zinc_trapdoor createdeco:red_zinc_lamp createdeco:green_zinc_lamp createdeco:blue_zinc_lamp createdeco:yellow_zinc_lamp + block.10400 = iron_block iron_trapdoor gold_block emerald_block lapis_block diamond_block copper_block exposed_copper weathered_copper oxidized_copper cut_copper exposed_cut_copper weathered_cut_copper oxidized_cut_copper cut_copper_stairs exposed_cut_copper_stairs weathered_cut_copper_stairs oxidized_cut_copper_stairs cut_copper_slab exposed_cut_copper_slab weathered_cut_copper_slab oxidized_cut_copper_slab waxed_cut_copper_slab waxed_weathered_cut_copper_slab waxed_weathered_copper waxed_exposed_copper waxed_copper_block waxed_oxidized_cut_copper_slab waxed_weathered_cut_copper_slab waxed_exposed_cut_copper_slab waxed_cuyt_copper_slab waxed_oxidized_copper waxed_cut_copper waxed_exposed_cut_copper waxed_weathered_cut_copper waxed_oxidized_cut_copper waxed_cut_copper_stairs waxed_exposed_cut_copper_stairs waxed_weathered_cut_copper_stairs waxed_oxidized_cut_copper_stairs heavy_weighted_pressure_plate light_weighted_pressure_plate iron_bars copper_bars exposed_copper_bars weathered_copper_bars oxidized_copper_bars waxed_copper_bars waxed_exposed_copper_bars waxed_weathered_copper_bars waxed_oxidized_copper_bars chain copper_chain exposed_copper_chain weathered_copper_chain oxidized_copper_chain waxed_copper_chain waxed_exposed_copper_chain waxed_weathered_copper_chain waxed_oxidized_copper_chain copper_golem_statue exposed_copper_golem_statue weathered_copper_golem_statue oxidized_copper_golem_statue waxed_copper_golem_statue waxed_exposed_copper_golem_statue waxed_weathered_copper_golem_statue waxed_oxidized_copper_golem_statue tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top tfc:metal/anvil/bismuth_bronze tfc:metal/block/bismuth_bronze tfc:metal/bars/bismuth_bronze tfc:metal/trapdoor/bismuth_bronze tfc:metal/block/bismuth_bronze_stairs tfc:block/metal/block/bismuth_bronze_slab tfc:block/metal/block/bismuth_bronze_slab_top tfc:metal/anvil/black_bronze tfc:metal/block/black_bronze tfc:metal/bars/black_bronze tfc:metal/trapdoor/black_bronze tfc:metal/block/black_bronze_stairs tfc:block/metal/block/black_bronze_slab tfc:block/metal/block/black_bronze_slab_top tfc:metal/anvil/bronze tfc:metal/block/bronze tfc:metal/bars/bronze tfc:metal/trapdoor/bronze tfc:metal/block/bronze_stairs tfc:block/metal/block/bronze_slab tfc:block/metal/block/bronze_slab_top tfc:metal/anvil/brass tfc:metal/block/brass tfc:metal/bars/brass tfc:metal/trapdoor/brass tfc:metal/block/brass_stairs tfc:block/metal/block/brass_slab tfc:block/metal/block/brass_slab_top tfc:metal/anvil/copper tfc:metal/block/copper tfc:metal/bars/copper tfc:metal/trapdoor/copper tfc:metal/block/copper_stairs tfc:block/metal/block/copper_slab tfc:block/metal/block/copper_slab_top tfc:metal/anvil/gold tfc:metal/block/gold tfc:metal/bars/gold tfc:metal/trapdoor/gold tfc:metal/block/gold_stairs tfc:block/metal/block/gold_slab tfc:block/metal/block/gold_slab_top tfc:metal/anvil/nickel tfc:metal/block/nickel tfc:metal/bars/nickel tfc:metal/trapdoor/nickel tfc:metal/block/nickel_stairs tfc:block/metal/block/nickel_slab tfc:block/metal/block/nickel_slab_top tfc:metal/anvil/rose_gold tfc:metal/block/rose_gold tfc:metal/bars/rose_gold tfc:metal/trapdoor/rose_gold tfc:metal/block/rose_gold_stairs tfc:block/metal/block/rose_gold_slab tfc:block/metal/block/rose_gold_slab_top tfc:metal/anvil/silver tfc:metal/block/silver tfc:metal/bars/silver tfc:metal/trapdoor/silver tfc:metal/block/silver_stairs tfc:block/metal/block/silver_slab tfc:block/metal/block/silver_slab_top tfc:metal/anvil/tin tfc:metal/block/tin tfc:metal/bars/tin tfc:metal/trapdoor/tin tfc:metal/block/tin_stairs tfc:block/metal/block/tin_slab tfc:block/metal/block/tin_slab_top tfc:metal/anvil/zinc tfc:metal/block/zinc tfc:metal/bars/zinc tfc:metal/trapdoor/zinc tfc:metal/block/zinc_stairs tfc:block/metal/block/zinc_slab tfc:block/metal/block/zinc_slab_top tfc:metal/anvil/sterling_silver tfc:metal/block/sterling_silver tfc:metal/bars/sterling_silver tfc:metal/trapdoor/sterling_silver tfc:metal/block/sterling_silver_stairs tfc:block/metal/block/sterling_silver_slab tfc:block/metal/block/sterling_silver_slab_top tfc:metal/anvil/wrought_iron tfc:metal/block/wrought_iron tfc:metal/bars/wrought_iron tfc:metal/trapdoor/wrought_iron tfc:metal/block/wrought_iron_stairs tfc:block/metal/block/wrought_iron_slab tfc:block/metal/block/wrought_iron_slab_top tfc:metal/anvil/cast_iron tfc:metal/block/cast_iron tfc:metal/bars/cast_iron tfc:metal/trapdoor/cast_iron tfc:metal/block/cast_iron_stairs tfc:block/metal/block/cast_iron_slab tfc:block/metal/block/cast_iron_slab_top tfc:metal/anvil/pig_iron tfc:metal/block/pig_iron tfc:metal/bars/pig_iron tfc:metal/trapdoor/pig_iron tfc:metal/block/pig_iron_stairs tfc:block/metal/block/pig_iron_slab tfc:block/metal/block/pig_iron_slab_top tfc:metal/anvil/steel tfc:metal/block/steel tfc:metal/bars/steel tfc:metal/trapdoor/steel tfc:metal/block/steel_stairs tfc:block/metal/block/steel_slab tfc:block/metal/block/steel_slab_top tfc:metal/anvil/black_steel tfc:metal/block/black_steel tfc:metal/bars/black_steel tfc:metal/trapdoor/black_steel tfc:metal/block/black_steel_stairs tfc:block/metal/block/black_steel_slab tfc:block/metal/block/black_steel_slab_top tfc:metal/anvil/blue_steel tfc:metal/block/blue_steel tfc:metal/bars/blue_steel tfc:metal/trapdoor/blue_steel tfc:metal/block/blue_steel_stairs tfc:block/metal/block/blue_steel_slab tfc:block/metal/block/blue_steel_slab_top tfc:metal/anvil/red_steel tfc:metal/block/red_steel tfc:metal/bars/red_steel tfc:metal/trapdoor/red_steel tfc:metal/block/red_steel_stairs tfc:block/metal/block/red_steel_slab tfc:block/metal/block/red_steel_slab_top tfc:metal/anvil/weak_steel tfc:metal/block/weak_steel tfc:metal/bars/weak_steel tfc:metal/trapdoor/weak_steel tfc:metal/block/weak_steel_stairs tfc:block/metal/block/weak_steel_slab tfc:block/metal/block/weak_steel_slab_top tfc:metal/anvil/weak_blue_steel tfc:metal/block/weak_blue_steel tfc:metal/bars/weak_blue_steel tfc:metal/trapdoor/weak_blue_steel tfc:metal/block/weak_blue_steel_stairs tfc:block/metal/block/weak_blue_steel_slab tfc:block/metal/block/weak_blue_steel_slab_top tfc:metal/anvil/weak_red_steel tfc:metal/block/weak_red_steel tfc:metal/bars/weak_red_steel tfc:metal/trapdoor/weak_red_steel tfc:metal/block/weak_red_steel_stairs tfc:block/metal/block/weak_red_steel_slab tfc:block/metal/block/weak_red_steel_slab_top tfc:metal/anvil/high_carbon_steel tfc:metal/block/high_carbon_steel tfc:metal/bars/high_carbon_steel tfc:metal/trapdoor/high_carbon_steel tfc:metal/block/high_carbon_steel_stairs tfc:block/metal/block/high_carbon_steel_slab tfc:block/metal/block/high_carbon_steel_slab_top tfc:metal/anvil/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel tfc:metal/bars/high_carbon_black_steel tfc:metal/trapdoor/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel_stairs tfc:block/metal/block/high_carbon_black_steel_slab tfc:block/metal/block/high_carbon_black_steel_slab_top tfc:metal/anvil/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel tfc:metal/bars/high_carbon_blue_steel tfc:metal/trapdoor/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel_stairs tfc:block/metal/block/high_carbon_blue_steel_slab tfc:block/metal/block/high_carbon_blue_steel_slab_top tfc:metal/anvil/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel tfc:metal/bars/high_carbon_red_steel tfc:metal/trapdoor/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel_stairs tfc:block/metal/block/high_carbon_red_steel_slab tfc:block/metal/block/high_carbon_red_steel_slab_top tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top create:copper_ladder create:brass_ladder create:copper_scaffolding create:brass_scaffolding create:brass_block create:copper_bars create:brass_bars create:smart_chute create:fluid_tank create:steam_whistle create:steam_engine create:spout create:hose_pulley create:item_drain create:train_casing create:smart_fluid_pipe create:fluid_pipe create:mechanical_pump create:copper_valve_handle create:fluid_valve create:mechanical_crafter create:sequenced_gearshift create:flywheel create:rotation_speed_controller create:mechanical_arm create:railway_casing create:controls create:brass_funnel create:brass_tunnel create:content_observer create:stockpile_switch create:redstone_link create:pulse_repeater create:pulse_extender create:peculiar_bell create_jetpack:jetpack create_enchantment_industry:printer create_enchantment_industry:disenchanter cataclysm:ancient_metal_block cataclysm:cursium_block cataclysm:enderite_block cataclysm:witherite_block cataclysm:ignitium_block cataclysm:mechanical_fusion_anvil cataclysm:emp cataclysm:black_steel_block create_dd:furnace_engine create_dd:bore_block create_dd:industrial_fan create_dd:hydraulic_press create_dd:item_stockpile create_dd:fluid_reservoir create_dd:dark_metal_block create_dd:dark_metal_plating create_dd:dark_metal_block_slab create_dd:dark_metal_block_stairs create_dd:dark_metal_bricks create_dd:dark_metal_brick_slab create_dd:dark_metal_brick_stairs create:zinc_block create:industrial_iron_block create:train_door create:chute create:item_vault create:haunted_bell minecraft:netherite_block create_jetpack:netherite_jetpack createutilities:void_steel_block createutilities:void_steel_scaffolding createutilities:void_casing createutilities:void_steel_bars createutilities:void_steel_ladder createutilities:void_motor createutilities:void_chest createutilities:void_tank createutilities:void_battery railways:smokestack_caboosestyle railways:smokestack_long railways:smokestack_coalburner railways:smokestack_oilburner railways:smokestack_streamlined railways:smokestack_woodburner railways:fuel_tank railways:portable_fuel_interface create_power_loader:empty_brass_chunk_loader create_power_loader:brass_chunk_loader create_connected:empty_fan_catalyst create_connected:fan_blasting_catalyst create_connected:fan_smoking_catalyst create_connected:fan_splashing_catalyst create_connected:fan_haunting_catalyst create_connected:sequenced_pulse_generator create_connected:item_silo create_things_and_misc:card_reader create_things_and_misc:card_press create_things_and_misc:sprinkler create_things_and_misc:brass_tiles create_things_and_misc:brass_tiles_slab create_things_and_misc:brass_tiles_stair create_things_and_misc:brass_bricks create_things_and_misc:brass_brick_slab create_things_and_misc:brass_brick_stairs vintageimprovements:vanadium_block createcasing:brass_shaft createcasing:creative_casing create_dd:stargaze_singularity_scaffolding create_dd:stargaze_singularity_block create_dd:stargaze_singularity_casing create_dd:mithril_scaffolding create_dd:mithril_block create_dd:mithril_casing create_dd:bronze_scaffolding create_dd:bronze_block create_dd:bronze_casing create_dd:steel_scaffolding create_dd:steel_block create_dd:steel_casing create_dd:industrial_iron_block create_dd:industrial_casing create_dd:tin_scaffolding create_dd:tin_block create_dd:chromatic_block create_dd:refined_radiance_scaffolding create_dd:refined_radiance_block create_dd:refined_radiance_casing create_dd:shadow_steel_scaffolding create_dd:shadow_steel_block create_dd:shadow_steel_casing create_dd:blaze_gold_scaffolding create_dd:blaze_gold_block create_dd:blaze_gold_casing create_dd:hydraulic_scaffolding create_dd:hydraulic_casing create_dd:overburden_scaffolding create_dd:overburden_casing create_dd:train_scaffolding create_dd:zinc_scaffolding create_dd:industrial_scaffolding create_dd:netherite_scaffolding create_dd:bronze_saw create_dd:bronze_drill createbigcannons:big_cartridge createbigcannons:cast_iron_block createbigcannons:nethersteel_block createbigcannons:basin_foundry_lid createbigcannons:wrought_iron_drop_mortar_end createbigcannons:wrought_iron_cannon_end createbigcannons:wrought_iron_cannon_chamber create_dd:flywheel railways:slashed_locometal railways:riveted_locometal railways:locometal_pillar railways:locometal_smokebox railways:plated_locometal railways:flat_slashed_locometal railways:flat_riveted_locometal railways:brass_wrapped_locometal railways:copper_wrapped_locometal railways:iron_wrapped_locometal railways:locometal_boiler railways:brass_wrapped_locometal_boiler railways:copper_wrapped_locometal_boiler railways:iron_wrapped_locometal_boiler railways:white_slashed_locometal railways:white_riveted_locometal railways:white_locometal_pillar railways:white_locometal_smokebox railways:white_plated_locometal railways:white_flat_slashed_locometal railways:white_flat_riveted_locometal railways:white_brass_wrapped_locometal railways:white_copper_wrapped_locometal railways:white_iron_wrapped_locometal railways:white_locometal_boiler railways:white_brass_wrapped_locometal_boiler railways:white_copper_wrapped_locometal_boiler railways:white_iron_wrapped_locometal_boiler railways:light_gray_slashed_locometal railways:light_gray_riveted_locometal railways:light_gray_locometal_pillar railways:light_gray_locometal_smokebox railways:light_gray_plated_locometal railways:light_gray_flat_slashed_locometal railways:light_gray_flat_riveted_locometal railways:light_gray_brass_wrapped_locometal railways:light_gray_copper_wrapped_locometal railways:light_gray_iron_wrapped_locometal railways:light_gray_locometal_boiler railways:light_gray_brass_wrapped_locometal_boiler railways:light_gray_copper_wrapped_locometal_boiler railways:light_gray_iron_wrapped_locometal_boiler railways:gray_slashed_locometal railways:gray_riveted_locometal railways:gray_locometal_pillar railways:gray_locometal_smokebox railways:gray_plated_locometal railways:gray_flat_slashed_locometal railways:gray_flat_riveted_locometal railways:gray_brass_wrapped_locometal railways:gray_copper_wrapped_locometal railways:gray_iron_wrapped_locometal railways:gray_locometal_boiler railways:gray_brass_wrapped_locometal_boiler railways:gray_copper_wrapped_locometal_boiler railways:gray_iron_wrapped_locometal_boiler railways:black_slashed_locometal railways:black_riveted_locometal railways:black_locometal_pillar railways:black_locometal_smokebox railways:black_plated_locometal railways:black_flat_slashed_locometal railways:black_flat_riveted_locometal railways:black_brass_wrapped_locometal railways:black_copper_wrapped_locometal railways:black_iron_wrapped_locometal railways:black_locometal_boiler railways:black_brass_wrapped_locometal_boiler railways:black_copper_wrapped_locometal_boiler railways:black_iron_wrapped_locometal_boiler railways:brown_slashed_locometal railways:brown_riveted_locometal railways:brown_locometal_pillar railways:brown_locometal_smokebox railways:brown_plated_locometal railways:brown_flat_slashed_locometal railways:brown_flat_riveted_locometal railways:brown_brass_wrapped_locometal railways:brown_copper_wrapped_locometal railways:brown_iron_wrapped_locometal railways:brown_locometal_boiler railways:brown_brass_wrapped_locometal_boiler railways:brown_copper_wrapped_locometal_boiler railways:brown_iron_wrapped_locometal_boiler railways:red_slashed_locometal railways:red_riveted_locometal railways:red_locometal_pillar railways:red_locometal_smokebox railways:red_plated_locometal railways:red_flat_slashed_locometal railways:red_flat_riveted_locometal railways:red_brass_wrapped_locometal railways:red_copper_wrapped_locometal railways:red_iron_wrapped_locometal railways:red_locometal_boiler railways:red_brass_wrapped_locometal_boiler railways:red_copper_wrapped_locometal_boiler railways:red_iron_wrapped_locometal_boiler railways:orange_slashed_locometal railways:orange_riveted_locometal railways:orange_locometal_pillar railways:orange_locometal_smokebox railways:orange_plated_locometal railways:orange_flat_slashed_locometal railways:orange_flat_riveted_locometal railways:orange_brass_wrapped_locometal railways:orange_copper_wrapped_locometal railways:orange_iron_wrapped_locometal railways:orange_locometal_boiler railways:orange_brass_wrapped_locometal_boiler railways:orange_copper_wrapped_locometal_boiler railways:orange_iron_wrapped_locometal_boiler railways:yellow_slashed_locometal railways:yellow_riveted_locometal railways:yellow_locometal_pillar railways:yellow_locometal_smokebox railways:yellow_plated_locometal railways:yellow_flat_slashed_locometal railways:yellow_flat_riveted_locometal railways:yellow_brass_wrapped_locometal railways:yellow_copper_wrapped_locometal railways:yellow_iron_wrapped_locometal railways:yellow_locometal_boiler railways:yellow_brass_wrapped_locometal_boiler railways:yellow_copper_wrapped_locometal_boiler railways:yellow_iron_wrapped_locometal_boiler railways:lime_slashed_locometal railways:lime_riveted_locometal railways:lime_locometal_pillar railways:lime_locometal_smokebox railways:lime_plated_locometal railways:lime_flat_slashed_locometal railways:lime_flat_riveted_locometal railways:lime_brass_wrapped_locometal railways:lime_copper_wrapped_locometal railways:lime_iron_wrapped_locometal railways:lime_locometal_boiler railways:lime_brass_wrapped_locometal_boiler railways:lime_copper_wrapped_locometal_boiler railways:lime_iron_wrapped_locometal_boiler railways:green_slashed_locometal railways:green_riveted_locometal railways:green_locometal_pillar railways:green_locometal_smokebox railways:green_plated_locometal railways:green_flat_slashed_locometal railways:green_flat_riveted_locometal railways:green_brass_wrapped_locometal railways:green_copper_wrapped_locometal railways:green_iron_wrapped_locometal railways:green_locometal_boiler railways:green_brass_wrapped_locometal_boiler railways:green_copper_wrapped_locometal_boiler railways:green_iron_wrapped_locometal_boiler railways:cyan_slashed_locometal railways:cyan_riveted_locometal railways:cyan_locometal_pillar railways:cyan_locometal_smokebox railways:cyan_plated_locometal railways:cyan_flat_slashed_locometal railways:cyan_flat_riveted_locometal railways:cyan_brass_wrapped_locometal railways:cyan_copper_wrapped_locometal railways:cyan_iron_wrapped_locometal railways:cyan_locometal_boiler railways:cyan_brass_wrapped_locometal_boiler railways:cyan_copper_wrapped_locometal_boiler railways:cyan_iron_wrapped_locometal_boiler railways:light_blue_slashed_locometal railways:light_blue_riveted_locometal railways:light_blue_locometal_pillar railways:light_blue_locometal_smokebox railways:light_blue_plated_locometal railways:light_blue_flat_slashed_locometal railways:light_blue_flat_riveted_locometal railways:light_blue_brass_wrapped_locometal railways:light_blue_copper_wrapped_locometal railways:light_blue_iron_wrapped_locometal railways:light_blue_locometal_boiler railways:light_blue_brass_wrapped_locometal_boiler railways:light_blue_copper_wrapped_locometal_boiler railways:light_blue_iron_wrapped_locometal_boiler railways:blue_slashed_locometal railways:blue_riveted_locometal railways:blue_locometal_pillar railways:blue_locometal_smokebox railways:blue_plated_locometal railways:blue_flat_slashed_locometal railways:blue_flat_riveted_locometal railways:blue_brass_wrapped_locometal railways:blue_copper_wrapped_locometal railways:blue_iron_wrapped_locometal railways:blue_locometal_boiler railways:blue_brass_wrapped_locometal_boiler railways:blue_copper_wrapped_locometal_boiler railways:blue_iron_wrapped_locometal_boiler railways:purple_slashed_locometal railways:purple_riveted_locometal railways:purple_locometal_pillar railways:purple_locometal_smokebox railways:purple_plated_locometal railways:purple_flat_slashed_locometal railways:purple_flat_riveted_locometal railways:purple_brass_wrapped_locometal railways:purple_copper_wrapped_locometal railways:purple_iron_wrapped_locometal railways:purple_locometal_boiler railways:purple_brass_wrapped_locometal_boiler railways:purple_copper_wrapped_locometal_boiler railways:purple_iron_wrapped_locometal_boiler railways:magenta_slashed_locometal railways:magenta_riveted_locometal railways:magenta_locometal_pillar railways:magenta_locometal_smokebox railways:magenta_plated_locometal railways:magenta_flat_slashed_locometal railways:magenta_flat_riveted_locometal railways:magenta_brass_wrapped_locometal railways:magenta_copper_wrapped_locometal railways:magenta_iron_wrapped_locometal railways:magenta_locometal_boiler railways:magenta_brass_wrapped_locometal_boiler railways:magenta_copper_wrapped_locometal_boiler railways:magenta_iron_wrapped_locometal_boiler railways:pink_slashed_locometal railways:pink_riveted_locometal railways:pink_locometal_pillar railways:pink_locometal_smokebox railways:pink_plated_locometal railways:pink_flat_slashed_locometal railways:pink_flat_riveted_locometal railways:pink_brass_wrapped_locometal railways:pink_copper_wrapped_locometal railways:pink_iron_wrapped_locometal railways:pink_locometal_boiler railways:pink_brass_wrapped_locometal_boiler railways:pink_copper_wrapped_locometal_boiler railways:pink_iron_wrapped_locometal_boiler create:copper_shingles create:copper_shingle_stairs create:copper_shingle_slab create:waxed_copper_shingles create:waxed_copper_shingle_stairs create:waxed_copper_shingle_slab create:exposed_copper_shingles create:exposed_copper_shingle_stairs create:exposed_copper_shingle_slab create:waxed_exposed_copper_shingles create:waxed_exposed_copper_shingle_stairs create:waxed_exposed_copper_shingle_slab create:weathered_copper_shingles create:weathered_copper_shingle_stairs create:weathered_copper_shingle_slab create:waxed_weathered_copper_shingles create:waxed_weathered_copper_shingle_stairs create:waxed_weathered_copper_shingle_slab create:oxidized_copper_shingles create:oxidized_copper_shingle_stairs create:oxidized_copper_shingle_slab create:waxed_oxidized_copper_shingles create:waxed_oxidized_copper_shingle_stairs create:waxed_oxidized_copper_shingle_slab create:copper_tiles create:copper_tile_stairs create:copper_tile_slab create:waxed_copper_tiles create:waxed_copper_tile_stairs create:waxed_copper_tile_slab create:exposed_copper_tiles create:exposed_copper_tile_stairs create:exposed_copper_tile_slab create:waxed_exposed_copper_tiles create:waxed_exposed_copper_tile_stairs create:waxed_exposed_copper_tile_slab create:weathered_copper_tiles create:weathered_copper_tile_stairs create:weathered_copper_tile_slab create:waxed_weathered_copper_tiles create:waxed_weathered_copper_tile_stairs create:waxed_weathered_copper_tile_slab create:oxidized_copper_tiles create:oxidized_copper_tile_stairs create:oxidized_copper_tile_slab create:waxed_oxidized_copper_tiles create:waxed_oxidized_copper_tile_stairs create:waxed_oxidized_copper_tile_slab create_dd:steel_polished_block create_dd:steel_polished_stairs create_dd:steel_polished_slab create_dd:steel_tiled_block create_dd:steel_tiled_stairs create_dd:steel_tiled_slab create_dd:zinc_polished_block create_dd:zinc_polished_stairs create_dd:zinc_polished_slab create_dd:zinc_tiled_block create_dd:zinc_tiled_stairs create_dd:zinc_tiled_slab create_dd:bronze_polished_block create_dd:bronze_polished_stairs create_dd:bronze_polished_slab create_dd:bronze_tiled_block create_dd:bronze_tiled_stairs create_dd:bronze_tiled_slab createbigcannons:cast_iron_sliding_breech createbigcannons:unbored_cast_iron_sliding_breech createbigcannons:incomplete_cast_iron_sliding_breech createbigcannons:cast_iron_quickfiring_breech createbigcannons:cast_iron_screw_breech createbigcannons:unbored_cast_iron_screw_breech createbigcannons:incomplete_cast_iron_screw_breech createbigcannons:cast_iron_cannon_end createbigcannons:cast_iron_autocannon_breech createbigcannons:unbored_cast_iron_autocannon_breech createbigcannons:incomplete_cast_iron_autocannon_breech createbigcannons:cast_iron_autocannon_recoil_spring createbigcannons:unbored_cast_iron_autocannon_recoil_spring createbigcannons:incomplete_cast_iron_autocannon_recoil_spring createbigcannons:cast_iron_autocannon_barrel createbigcannons:unbored_cast_iron_autocannon_barrel createbigcannons:very_small_cast_iron_cannon_layer createbigcannons:small_cast_iron_cannon_layer createbigcannons:medium_cast_iron_cannon_layer createbigcannons:large_cast_iron_cannon_layer createbigcannons:very_large_cast_iron_cannon_layer createbigcannons:unbored_very_small_cast_iron_cannon_layer createbigcannons:unbored_small_cast_iron_cannon_layer createbigcannons:unbored_medium_cast_iron_cannon_layer createbigcannons:unbored_large_cast_iron_cannon_layer createbigcannons:unbored_very_large_cast_iron_cannon_layer createbigcannons:cast_iron_cannon_barrel createbigcannons:built_up_cast_iron_cannon_barrel createbigcannons:cast_iron_cannon_chamber createbigcannons:built_up_cast_iron_cannon_chamber createbigcannons:thick_cast_iron_cannon_chamber createbigcannons:bronze_sliding_breech createbigcannons:unbored_bronze_sliding_breech createbigcannons:incomplete_bronze_sliding_breech createbigcannons:bronze_quickfiring_breech createbigcannons:bronze_screw_breech createbigcannons:unbored_bronze_screw_breech createbigcannons:incomplete_bronze_screw_breech createbigcannons:bronze_cannon_end createbigcannons:bronze_autocannon_breech createbigcannons:unbored_bronze_autocannon_breech createbigcannons:incomplete_bronze_autocannon_breech createbigcannons:bronze_autocannon_recoil_spring createbigcannons:unbored_bronze_autocannon_recoil_spring createbigcannons:incomplete_bronze_autocannon_recoil_spring createbigcannons:bronze_autocannon_barrel createbigcannons:unbored_bronze_autocannon_barrel createbigcannons:very_small_bronze_cannon_layer createbigcannons:small_bronze_cannon_layer createbigcannons:medium_bronze_cannon_layer createbigcannons:large_bronze_cannon_layer createbigcannons:very_large_bronze_cannon_layer createbigcannons:unbored_very_small_bronze_cannon_layer createbigcannons:unbored_small_bronze_cannon_layer createbigcannons:unbored_medium_bronze_cannon_layer createbigcannons:unbored_large_bronze_cannon_layer createbigcannons:unbored_very_large_bronze_cannon_layer createbigcannons:bronze_cannon_barrel createbigcannons:built_up_bronze_cannon_barrel createbigcannons:bronze_cannon_chamber createbigcannons:built_up_bronze_cannon_chamber createbigcannons:thick_bronze_cannon_chamber createbigcannons:steel_sliding_breech createbigcannons:unbored_steel_sliding_breech createbigcannons:incomplete_steel_sliding_breech createbigcannons:steel_quickfiring_breech createbigcannons:steel_screw_breech createbigcannons:unbored_steel_screw_breech createbigcannons:incomplete_steel_screw_breech createbigcannons:steel_cannon_end createbigcannons:steel_autocannon_breech createbigcannons:unbored_steel_autocannon_breech createbigcannons:incomplete_steel_autocannon_breech createbigcannons:steel_autocannon_recoil_spring createbigcannons:unbored_steel_autocannon_recoil_spring createbigcannons:incomplete_steel_autocannon_recoil_spring createbigcannons:steel_autocannon_barrel createbigcannons:unbored_steel_autocannon_barrel createbigcannons:very_small_steel_cannon_layer createbigcannons:small_steel_cannon_layer createbigcannons:medium_steel_cannon_layer createbigcannons:large_steel_cannon_layer createbigcannons:very_large_steel_cannon_layer createbigcannons:unbored_very_small_steel_cannon_layer createbigcannons:unbored_small_steel_cannon_layer createbigcannons:unbored_medium_steel_cannon_layer createbigcannons:unbored_large_steel_cannon_layer createbigcannons:unbored_very_large_steel_cannon_layer createbigcannons:steel_cannon_barrel createbigcannons:built_up_steel_cannon_barrel createbigcannons:steel_cannon_chamber createbigcannons:built_up_steel_cannon_chamber createbigcannons:thick_steel_cannon_chamber createbigcannons:nethersteel_sliding_breech createbigcannons:unbored_nethersteel_sliding_breech createbigcannons:incomplete_nethersteel_sliding_breech createbigcannons:nethersteel_quickfiring_breech createbigcannons:nethersteel_screw_breech createbigcannons:unbored_nethersteel_screw_breech createbigcannons:incomplete_nethersteel_screw_breech createbigcannons:nethersteel_cannon_end createbigcannons:nethersteel_autocannon_breech createbigcannons:unbored_nethersteel_autocannon_breech createbigcannons:incomplete_nethersteel_autocannon_breech createbigcannons:nethersteel_autocannon_recoil_spring createbigcannons:unbored_nethersteel_autocannon_recoil_spring createbigcannons:incomplete_nethersteel_autocannon_recoil_spring createbigcannons:nethersteel_autocannon_barrel createbigcannons:unbored_nethersteel_autocannon_barrel createbigcannons:very_small_nethersteel_cannon_layer createbigcannons:small_nethersteel_cannon_layer createbigcannons:medium_nethersteel_cannon_layer createbigcannons:large_nethersteel_cannon_layer createbigcannons:very_large_nethersteel_cannon_layer createbigcannons:unbored_very_small_nethersteel_cannon_layer createbigcannons:unbored_small_nethersteel_cannon_layer createbigcannons:unbored_medium_nethersteel_cannon_layer createbigcannons:unbored_large_nethersteel_cannon_layer createbigcannons:unbored_very_large_nethersteel_cannon_layer createbigcannons:nethersteel_cannon_barrel createbigcannons:built_up_nethersteel_cannon_barrel createbigcannons:nethersteel_cannon_chamber createbigcannons:built_up_nethersteel_cannon_chamber createbigcannons:thick_nethersteel_cannon_chamber createcasing:brass_mixer createcasing:brass_press createcasing:brass_depot createcasing:copper_mixer createcasing:copper_press createcasing:copper_depot createcasing:railway_gearbox createcasing:railway_encased_chain_drive createcasing:railway_adjustable_chain_gearshift createcasing:railway_mixer createcasing:railway_press createcasing:railway_depot createcasing:creative_gearbox createcasing:creative_encased_chain_drive createcasing:creative_adjustable_chain_gearshift createcasing:creative_mixer createcasing:creative_press createcasing:creative_depot createcasing:industrial_iron_gearbox createcasing:industrial_iron_encased_chain_drive createcasing:industrial_iron_adjustable_chain_gearshift createcasing:industrial_iron_mixer createcasing:industrial_iron_press createcasing:industrial_iron_depot createdeco:brass_coinstack createdeco:brass_bars createdeco:brass_bars_overlay createdeco:brass_mesh_fence createdeco:brass_hull createdeco:brass_catwalk createdeco:brass_catwalk_stairs createdeco:brass_catwalk_railing createdeco:brass_support_wedge createdeco:brass_support createdeco:brass_sheet_metal createdeco:brass_door createdeco:locked_brass_door createdeco:brass_trapdoor createdeco:red_brass_lamp createdeco:green_brass_lamp createdeco:blue_brass_lamp createdeco:yellow_brass_lamp createdeco:iron_coinstack createdeco:iron_bars createdeco:iron_bars_overlay createdeco:iron_mesh_fence createdeco:iron_hull createdeco:iron_catwalk createdeco:iron_catwalk_stairs createdeco:iron_catwalk_railing createdeco:iron_support_wedge createdeco:iron_support createdeco:iron_sheet_metal createdeco:iron_door createdeco:locked_iron_door createdeco:iron_trapdoor createdeco:red_iron_lamp createdeco:green_iron_lamp createdeco:blue_iron_lamp createdeco:yellow_iron_lamp createdeco:copper_coinstack createdeco:copper_bars createdeco:copper_bars_overlay createdeco:copper_mesh_fence createdeco:copper_hull createdeco:copper_catwalk createdeco:copper_catwalk_stairs createdeco:copper_catwalk_railing createdeco:copper_support_wedge createdeco:copper_support createdeco:copper_sheet_metal createdeco:copper_door createdeco:locked_copper_door createdeco:copper_trapdoor createdeco:red_copper_lamp createdeco:green_copper_lamp createdeco:blue_copper_lamp createdeco:yellow_copper_lamp createdeco:industrial_iron_coinstack createdeco:industrial_iron_bars createdeco:industrial_iron_bars_overlay createdeco:industrial_iron_mesh_fence createdeco:industrial_iron_hull createdeco:industrial_iron_catwalk createdeco:industrial_iron_catwalk_stairs createdeco:industrial_iron_catwalk_railing createdeco:industrial_iron_support_wedge createdeco:industrial_iron_support createdeco:industrial_iron_sheet_metal createdeco:industrial_iron_door createdeco:locked_industrial_iron_door createdeco:industrial_iron_trapdoor createdeco:red_industrial_iron_lamp createdeco:green_industrial_iron_lamp createdeco:blue_industrial_iron_lamp createdeco:yellow_industrial_iron_lamp createdeco:zinc_coinstack createdeco:zinc_bars createdeco:zinc_bars_overlay createdeco:zinc_mesh_fence createdeco:zinc_hull createdeco:zinc_catwalk createdeco:zinc_catwalk_stairs createdeco:zinc_catwalk_railing createdeco:zinc_support_wedge createdeco:zinc_support createdeco:zinc_sheet_metal createdeco:zinc_door createdeco:locked_zinc_door createdeco:zinc_trapdoor createdeco:red_zinc_lamp createdeco:green_zinc_lamp createdeco:blue_zinc_lamp createdeco:yellow_zinc_lamp # SAND-LIKE block.10410 = sand red_sand dirt_path gravel suspicious_gravel suspicious_sand white_concrete_powder light_gray_concrete_powder gray_concrete_powder black_concrete_powder brown_concrete_powder red_concrete_powder orange_concrete_powder yellow_concrete_powder lime_concrete_powder green_concrete_powder cyan_concrete_powder light_blue_concrete_powder blue_concrete_powder purple_concrete_powder magenta_concrete_powder pink_concrete_powder coarse_dirt diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index 325ffbea..f3536f0d 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -116,7 +116,7 @@ void main() { #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) #if AA_TYPE > 0 - float dither = shifted_dither_makeup(gl_FragCoord.xy + frame_mod); + float dither = shifted_dither_makeup(gl_FragCoord.xy); #else float dither = dither_makeup(gl_FragCoord.xy); #endif diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index c315fcef..39857769 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -116,8 +116,7 @@ varying vec3 omni_light; void main() { #if (defined SHADOW_CASTING && !defined NETHER) || defined DISTANT_HORIZONS #if AA_TYPE > 0 - float dither = shifted_dither_makeup(gl_FragCoord.xy + frame_mod); - // float dither = shifted_dither_makeup(gl_FragCoord.xy); + float dither = shifted_dither_makeup(gl_FragCoord.xy); #else float dither = r_dither(gl_FragCoord.xy); #endif diff --git a/shaders/item.properties b/shaders/item.properties index c81a5a7a..e8688351 100644 --- a/shaders/item.properties +++ b/shaders/item.properties @@ -1,5 +1,5 @@ # Normal light -item.11001=minecraft:glowstone minecraft:sea_lantern minecraft:shroomlight minecraft:jack_o_lantern minecraft:beacon minecraft:end_rod minecraft:lantern minecraft:soul_lantern minecraft:torch minecraft:soul_torch minecraft:campfire minecraft:soul_campfire minecraft:lava_bucket additionallanterns:andesite_chain additionallanterns:andesite_lantern additionallanterns:basalt_chain additionallanterns:basalt_lantern additionallanterns:black_andesite_lantern additionallanterns:black_basalt_lantern additionallanterns:black_blackstone_lantern additionallanterns:black_bone_lantern additionallanterns:black_bricks_lantern additionallanterns:black_cobblestone_lantern additionallanterns:black_crimson_lantern additionallanterns:black_dark_prismarine_lantern additionallanterns:black_diamond_lantern additionallanterns:black_diorite_lantern additionallanterns:black_emerald_lantern additionallanterns:black_end_stone_lantern additionallanterns:black_gold_lantern additionallanterns:black_granite_lantern additionallanterns:black_iron_lantern additionallanterns:black_mossy_cobblestone_lantern additionallanterns:black_netherite_lantern additionallanterns:black_normal_lantern additionallanterns:black_normal_nether_bricks_lantern additionallanterns:black_normal_sandstone_lantern additionallanterns:black_obsidian_lantern additionallanterns:black_prismarine_lantern additionallanterns:black_purpur_lantern additionallanterns:black_quartz_lantern additionallanterns:black_red_nether_bricks_lantern additionallanterns:black_red_sandstone_lantern additionallanterns:black_smooth_stone_lantern additionallanterns:black_stone_bricks_lantern additionallanterns:black_stone_lantern additionallanterns:black_warped_lantern additionallanterns:blackstone_chain additionallanterns:blackstone_lantern additionallanterns:blue_andesite_lantern additionallanterns:blue_basalt_lantern additionallanterns:blue_blackstone_lantern additionallanterns:blue_bone_lantern additionallanterns:blue_bricks_lantern additionallanterns:blue_cobblestone_lantern additionallanterns:blue_crimson_lantern additionallanterns:blue_dark_prismarine_lantern additionallanterns:blue_diamond_lantern additionallanterns:blue_diorite_lantern additionallanterns:blue_emerald_lantern additionallanterns:blue_end_stone_lantern additionallanterns:blue_gold_lantern additionallanterns:blue_granite_lantern additionallanterns:blue_iron_lantern additionallanterns:blue_mossy_cobblestone_lantern additionallanterns:blue_netherite_lantern additionallanterns:blue_normal_lantern additionallanterns:blue_normal_nether_bricks_lantern additionallanterns:blue_normal_sandstone_lantern additionallanterns:blue_obsidian_lantern additionallanterns:blue_prismarine_lantern additionallanterns:blue_purpur_lantern additionallanterns:blue_quartz_lantern additionallanterns:blue_red_nether_bricks_lantern additionallanterns:blue_red_sandstone_lantern additionallanterns:blue_smooth_stone_lantern additionallanterns:blue_stone_bricks_lantern additionallanterns:blue_stone_lantern additionallanterns:blue_warped_lantern additionallanterns:bone_chain additionallanterns:bone_lantern additionallanterns:bricks_chain additionallanterns:bricks_lantern additionallanterns:brown_andesite_lantern additionallanterns:brown_basalt_lantern additionallanterns:brown_blackstone_lantern additionallanterns:brown_bone_lantern additionallanterns:brown_bricks_lantern additionallanterns:brown_cobblestone_lantern additionallanterns:brown_crimson_lantern additionallanterns:brown_dark_prismarine_lantern additionallanterns:brown_diamond_lantern additionallanterns:brown_diorite_lantern additionallanterns:brown_emerald_lantern additionallanterns:brown_end_stone_lantern additionallanterns:brown_gold_lantern additionallanterns:brown_granite_lantern additionallanterns:brown_iron_lantern additionallanterns:brown_mossy_cobblestone_lantern additionallanterns:brown_netherite_lantern additionallanterns:brown_normal_lantern additionallanterns:brown_normal_nether_bricks_lantern additionallanterns:brown_normal_sandstone_lantern additionallanterns:brown_obsidian_lantern additionallanterns:brown_prismarine_lantern additionallanterns:brown_purpur_lantern additionallanterns:brown_quartz_lantern additionallanterns:brown_red_nether_bricks_lantern additionallanterns:brown_red_sandstone_lantern additionallanterns:brown_smooth_stone_lantern additionallanterns:brown_stone_bricks_lantern additionallanterns:brown_stone_lantern additionallanterns:brown_warped_lantern additionallanterns:cobblestone_chain additionallanterns:cobblestone_lantern additionallanterns:crimson_chain additionallanterns:crimson_lantern additionallanterns:cyan_andesite_lantern additionallanterns:cyan_basalt_lantern additionallanterns:cyan_blackstone_lantern additionallanterns:cyan_bone_lantern additionallanterns:cyan_bricks_lantern additionallanterns:cyan_cobblestone_lantern additionallanterns:cyan_crimson_lantern additionallanterns:cyan_dark_prismarine_lantern additionallanterns:cyan_diamond_lantern additionallanterns:cyan_diorite_lantern additionallanterns:cyan_emerald_lantern additionallanterns:cyan_end_stone_lantern additionallanterns:cyan_gold_lantern additionallanterns:cyan_granite_lantern additionallanterns:cyan_iron_lantern additionallanterns:cyan_mossy_cobblestone_lantern additionallanterns:cyan_netherite_lantern additionallanterns:cyan_normal_lantern additionallanterns:cyan_normal_nether_bricks_lantern additionallanterns:cyan_normal_sandstone_lantern additionallanterns:cyan_obsidian_lantern additionallanterns:cyan_prismarine_lantern additionallanterns:cyan_purpur_lantern additionallanterns:cyan_quartz_lantern additionallanterns:cyan_red_nether_bricks_lantern additionallanterns:cyan_red_sandstone_lantern additionallanterns:cyan_smooth_stone_lantern additionallanterns:cyan_stone_bricks_lantern additionallanterns:cyan_stone_lantern additionallanterns:cyan_warped_lantern additionallanterns:dark_prismarine_chain additionallanterns:dark_prismarine_lantern additionallanterns:diamond_chain additionallanterns:diamond_lantern additionallanterns:diorite_chain additionallanterns:diorite_lantern additionallanterns:emerald_chain additionallanterns:emerald_lantern additionallanterns:end_stone_chain additionallanterns:end_stone_lantern additionallanterns:gold_chain additionallanterns:gold_lantern additionallanterns:granite_chain additionallanterns:granite_lantern additionallanterns:gray_andesite_lantern additionallanterns:gray_basalt_lantern additionallanterns:gray_blackstone_lantern additionallanterns:gray_bone_lantern additionallanterns:gray_bricks_lantern additionallanterns:gray_cobblestone_lantern additionallanterns:gray_crimson_lantern additionallanterns:gray_dark_prismarine_lantern additionallanterns:gray_diamond_lantern additionallanterns:gray_diorite_lantern additionallanterns:gray_emerald_lantern additionallanterns:gray_end_stone_lantern additionallanterns:gray_gold_lantern additionallanterns:gray_granite_lantern additionallanterns:gray_iron_lantern additionallanterns:gray_mossy_cobblestone_lantern additionallanterns:gray_netherite_lantern additionallanterns:gray_normal_lantern additionallanterns:gray_normal_nether_bricks_lantern additionallanterns:gray_normal_sandstone_lantern additionallanterns:gray_obsidian_lantern additionallanterns:gray_prismarine_lantern additionallanterns:gray_purpur_lantern additionallanterns:gray_quartz_lantern additionallanterns:gray_red_nether_bricks_lantern additionallanterns:gray_red_sandstone_lantern additionallanterns:gray_smooth_stone_lantern additionallanterns:gray_stone_bricks_lantern additionallanterns:gray_stone_lantern additionallanterns:gray_warped_lantern additionallanterns:green_andesite_lantern additionallanterns:green_basalt_lantern additionallanterns:green_blackstone_lantern additionallanterns:green_bone_lantern additionallanterns:green_bricks_lantern additionallanterns:green_cobblestone_lantern additionallanterns:green_crimson_lantern additionallanterns:green_dark_prismarine_lantern additionallanterns:green_diamond_lantern additionallanterns:green_diorite_lantern additionallanterns:green_emerald_lantern additionallanterns:green_end_stone_lantern additionallanterns:green_gold_lantern additionallanterns:green_granite_lantern additionallanterns:green_iron_lantern additionallanterns:green_mossy_cobblestone_lantern additionallanterns:green_netherite_lantern additionallanterns:green_normal_lantern additionallanterns:green_normal_nether_bricks_lantern additionallanterns:green_normal_sandstone_lantern additionallanterns:green_obsidian_lantern additionallanterns:green_prismarine_lantern additionallanterns:green_purpur_lantern additionallanterns:green_quartz_lantern additionallanterns:green_red_nether_bricks_lantern additionallanterns:green_red_sandstone_lantern additionallanterns:green_smooth_stone_lantern additionallanterns:green_stone_bricks_lantern additionallanterns:green_stone_lantern additionallanterns:green_warped_lantern additionallanterns:iron_lantern additionallanterns:light_blue_andesite_lantern additionallanterns:light_blue_basalt_lantern additionallanterns:light_blue_blackstone_lantern additionallanterns:light_blue_bone_lantern additionallanterns:light_blue_bricks_lantern additionallanterns:light_blue_cobblestone_lantern additionallanterns:light_blue_crimson_lantern additionallanterns:light_blue_dark_prismarine_lantern additionallanterns:light_blue_diamond_lantern additionallanterns:light_blue_diorite_lantern additionallanterns:light_blue_emerald_lantern additionallanterns:light_blue_end_stone_lantern additionallanterns:light_blue_gold_lantern additionallanterns:light_blue_granite_lantern additionallanterns:light_blue_iron_lantern additionallanterns:light_blue_mossy_cobblestone_lantern additionallanterns:light_blue_netherite_lantern additionallanterns:light_blue_normal_lantern additionallanterns:light_blue_normal_nether_bricks_lantern additionallanterns:light_blue_normal_sandstone_lantern additionallanterns:light_blue_obsidian_lantern additionallanterns:light_blue_prismarine_lantern additionallanterns:light_blue_purpur_lantern additionallanterns:light_blue_quartz_lantern additionallanterns:light_blue_red_nether_bricks_lantern additionallanterns:light_blue_red_sandstone_lantern additionallanterns:light_blue_smooth_stone_lantern additionallanterns:light_blue_stone_bricks_lantern additionallanterns:light_blue_stone_lantern additionallanterns:light_blue_warped_lantern additionallanterns:light_gray_andesite_lantern additionallanterns:light_gray_basalt_lantern additionallanterns:light_gray_blackstone_lantern additionallanterns:light_gray_bone_lantern additionallanterns:light_gray_bricks_lantern additionallanterns:light_gray_cobblestone_lantern additionallanterns:light_gray_crimson_lantern additionallanterns:light_gray_dark_prismarine_lantern additionallanterns:light_gray_diamond_lantern additionallanterns:light_gray_diorite_lantern additionallanterns:light_gray_emerald_lantern additionallanterns:light_gray_end_stone_lantern additionallanterns:light_gray_gold_lantern additionallanterns:light_gray_granite_lantern additionallanterns:light_gray_iron_lantern additionallanterns:light_gray_mossy_cobblestone_lantern additionallanterns:light_gray_netherite_lantern additionallanterns:light_gray_normal_lantern additionallanterns:light_gray_normal_nether_bricks_lantern additionallanterns:light_gray_normal_sandstone_lantern additionallanterns:light_gray_obsidian_lantern additionallanterns:light_gray_prismarine_lantern additionallanterns:light_gray_purpur_lantern additionallanterns:light_gray_quartz_lantern additionallanterns:light_gray_red_nether_bricks_lantern additionallanterns:light_gray_red_sandstone_lantern additionallanterns:light_gray_smooth_stone_lantern additionallanterns:light_gray_stone_bricks_lantern additionallanterns:light_gray_stone_lantern additionallanterns:light_gray_warped_lantern additionallanterns:lime_andesite_lantern additionallanterns:lime_basalt_lantern additionallanterns:lime_blackstone_lantern additionallanterns:lime_bone_lantern additionallanterns:lime_bricks_lantern additionallanterns:lime_cobblestone_lantern additionallanterns:lime_crimson_lantern additionallanterns:lime_dark_prismarine_lantern additionallanterns:lime_diamond_lantern additionallanterns:lime_diorite_lantern additionallanterns:lime_emerald_lantern additionallanterns:lime_end_stone_lantern additionallanterns:lime_gold_lantern additionallanterns:lime_granite_lantern additionallanterns:lime_iron_lantern additionallanterns:lime_mossy_cobblestone_lantern additionallanterns:lime_netherite_lantern additionallanterns:lime_normal_lantern additionallanterns:lime_normal_nether_bricks_lantern additionallanterns:lime_normal_sandstone_lantern additionallanterns:lime_obsidian_lantern additionallanterns:lime_prismarine_lantern additionallanterns:lime_purpur_lantern additionallanterns:lime_quartz_lantern additionallanterns:lime_red_nether_bricks_lantern additionallanterns:lime_red_sandstone_lantern additionallanterns:lime_smooth_stone_lantern additionallanterns:lime_stone_bricks_lantern additionallanterns:lime_stone_lantern additionallanterns:lime_warped_lantern additionallanterns:magenta_andesite_lantern additionallanterns:magenta_basalt_lantern additionallanterns:magenta_blackstone_lantern additionallanterns:magenta_bone_lantern additionallanterns:magenta_bricks_lantern additionallanterns:magenta_cobblestone_lantern additionallanterns:magenta_crimson_lantern additionallanterns:magenta_dark_prismarine_lantern additionallanterns:magenta_diamond_lantern additionallanterns:magenta_diorite_lantern additionallanterns:magenta_emerald_lantern additionallanterns:magenta_end_stone_lantern additionallanterns:magenta_gold_lantern additionallanterns:magenta_granite_lantern additionallanterns:magenta_iron_lantern additionallanterns:magenta_mossy_cobblestone_lantern additionallanterns:magenta_netherite_lantern additionallanterns:magenta_normal_lantern additionallanterns:magenta_normal_nether_bricks_lantern additionallanterns:magenta_normal_sandstone_lantern additionallanterns:magenta_obsidian_lantern additionallanterns:magenta_prismarine_lantern additionallanterns:magenta_purpur_lantern additionallanterns:magenta_quartz_lantern additionallanterns:magenta_red_nether_bricks_lantern additionallanterns:magenta_red_sandstone_lantern additionallanterns:magenta_smooth_stone_lantern additionallanterns:magenta_stone_bricks_lantern additionallanterns:magenta_stone_lantern additionallanterns:magenta_warped_lantern additionallanterns:mossy_cobblestone_chain additionallanterns:mossy_cobblestone_lantern additionallanterns:netherite_chain additionallanterns:netherite_lantern additionallanterns:normal_nether_bricks_chain additionallanterns:normal_nether_bricks_lantern additionallanterns:normal_sandstone_chain additionallanterns:normal_sandstone_lantern additionallanterns:obsidian_chain additionallanterns:obsidian_lantern additionallanterns:orange_andesite_lantern additionallanterns:orange_basalt_lantern additionallanterns:orange_blackstone_lantern additionallanterns:orange_bone_lantern additionallanterns:orange_bricks_lantern additionallanterns:orange_cobblestone_lantern additionallanterns:orange_crimson_lantern additionallanterns:orange_dark_prismarine_lantern additionallanterns:orange_diamond_lantern additionallanterns:orange_diorite_lantern additionallanterns:orange_emerald_lantern additionallanterns:orange_end_stone_lantern additionallanterns:orange_gold_lantern additionallanterns:orange_granite_lantern additionallanterns:orange_iron_lantern additionallanterns:orange_mossy_cobblestone_lantern additionallanterns:orange_netherite_lantern additionallanterns:orange_normal_lantern additionallanterns:orange_normal_nether_bricks_lantern additionallanterns:orange_normal_sandstone_lantern additionallanterns:orange_obsidian_lantern additionallanterns:orange_prismarine_lantern additionallanterns:orange_purpur_lantern additionallanterns:orange_quartz_lantern additionallanterns:orange_red_nether_bricks_lantern additionallanterns:orange_red_sandstone_lantern additionallanterns:orange_smooth_stone_lantern additionallanterns:orange_stone_bricks_lantern additionallanterns:orange_stone_lantern additionallanterns:orange_warped_lantern additionallanterns:pink_andesite_lantern additionallanterns:pink_basalt_lantern additionallanterns:pink_blackstone_lantern additionallanterns:pink_bone_lantern additionallanterns:pink_bricks_lantern additionallanterns:pink_cobblestone_lantern additionallanterns:pink_crimson_lantern additionallanterns:pink_dark_prismarine_lantern additionallanterns:pink_diamond_lantern additionallanterns:pink_diorite_lantern additionallanterns:pink_emerald_lantern additionallanterns:pink_end_stone_lantern additionallanterns:pink_gold_lantern additionallanterns:pink_granite_lantern additionallanterns:pink_iron_lantern additionallanterns:pink_mossy_cobblestone_lantern additionallanterns:pink_netherite_lantern additionallanterns:pink_normal_lantern additionallanterns:pink_normal_nether_bricks_lantern additionallanterns:pink_normal_sandstone_lantern additionallanterns:pink_obsidian_lantern additionallanterns:pink_prismarine_lantern additionallanterns:pink_purpur_lantern additionallanterns:pink_quartz_lantern additionallanterns:pink_red_nether_bricks_lantern additionallanterns:pink_red_sandstone_lantern additionallanterns:pink_smooth_stone_lantern additionallanterns:pink_stone_bricks_lantern additionallanterns:pink_stone_lantern additionallanterns:pink_warped_lantern additionallanterns:prismarine_chain additionallanterns:prismarine_lantern additionallanterns:purple_andesite_lantern additionallanterns:purple_basalt_lantern additionallanterns:purple_blackstone_lantern additionallanterns:purple_bone_lantern additionallanterns:purple_bricks_lantern additionallanterns:purple_cobblestone_lantern additionallanterns:purple_crimson_lantern additionallanterns:purple_dark_prismarine_lantern additionallanterns:purple_diamond_lantern additionallanterns:purple_diorite_lantern additionallanterns:purple_emerald_lantern additionallanterns:purple_end_stone_lantern additionallanterns:purple_gold_lantern additionallanterns:purple_granite_lantern additionallanterns:purple_iron_lantern additionallanterns:purple_mossy_cobblestone_lantern additionallanterns:purple_netherite_lantern additionallanterns:purple_normal_lantern additionallanterns:purple_normal_nether_bricks_lantern additionallanterns:purple_normal_sandstone_lantern additionallanterns:purple_obsidian_lantern additionallanterns:purple_prismarine_lantern additionallanterns:purple_purpur_lantern additionallanterns:purple_quartz_lantern additionallanterns:purple_red_nether_bricks_lantern additionallanterns:purple_red_sandstone_lantern additionallanterns:purple_smooth_stone_lantern additionallanterns:purple_stone_bricks_lantern additionallanterns:purple_stone_lantern additionallanterns:purple_warped_lantern additionallanterns:purpur_chain additionallanterns:purpur_lantern additionallanterns:quartz_chain additionallanterns:quartz_lantern additionallanterns:red_andesite_lantern additionallanterns:red_basalt_lantern additionallanterns:red_blackstone_lantern additionallanterns:red_bone_lantern additionallanterns:red_bricks_lantern additionallanterns:red_cobblestone_lantern additionallanterns:red_crimson_lantern additionallanterns:red_dark_prismarine_lantern additionallanterns:red_diamond_lantern additionallanterns:red_diorite_lantern additionallanterns:red_emerald_lantern additionallanterns:red_end_stone_lantern additionallanterns:red_gold_lantern additionallanterns:red_granite_lantern additionallanterns:red_iron_lantern additionallanterns:red_mossy_cobblestone_lantern additionallanterns:red_nether_bricks_chain additionallanterns:red_nether_bricks_lantern additionallanterns:red_netherite_lantern additionallanterns:red_normal_lantern additionallanterns:red_normal_nether_bricks_lantern additionallanterns:red_normal_sandstone_lantern additionallanterns:red_obsidian_lantern additionallanterns:red_prismarine_lantern additionallanterns:red_purpur_lantern additionallanterns:red_quartz_lantern additionallanterns:red_red_nether_bricks_lantern additionallanterns:red_red_sandstone_lantern additionallanterns:red_sandstone_chain additionallanterns:red_sandstone_lantern additionallanterns:red_smooth_stone_lantern additionallanterns:red_stone_bricks_lantern additionallanterns:red_stone_lantern additionallanterns:red_warped_lantern additionallanterns:smooth_stone_chain additionallanterns:smooth_stone_lantern additionallanterns:stone_bricks_chain additionallanterns:stone_bricks_lantern additionallanterns:stone_chain additionallanterns:stone_lantern additionallanterns:warped_chain additionallanterns:warped_lantern additionallanterns:white_andesite_lantern additionallanterns:white_basalt_lantern additionallanterns:white_blackstone_lantern additionallanterns:white_bone_lantern additionallanterns:white_bricks_lantern additionallanterns:white_cobblestone_lantern additionallanterns:white_crimson_lantern additionallanterns:white_dark_prismarine_lantern additionallanterns:white_diamond_lantern additionallanterns:white_diorite_lantern additionallanterns:white_emerald_lantern additionallanterns:white_end_stone_lantern additionallanterns:white_gold_lantern additionallanterns:white_granite_lantern additionallanterns:white_iron_lantern additionallanterns:white_mossy_cobblestone_lantern additionallanterns:white_netherite_lantern additionallanterns:white_normal_lantern additionallanterns:white_normal_nether_bricks_lantern additionallanterns:white_normal_sandstone_lantern additionallanterns:white_obsidian_lantern additionallanterns:white_prismarine_lantern additionallanterns:white_purpur_lantern additionallanterns:white_quartz_lantern additionallanterns:white_red_nether_bricks_lantern additionallanterns:white_red_sandstone_lantern additionallanterns:white_smooth_stone_lantern additionallanterns:white_stone_bricks_lantern additionallanterns:white_stone_lantern additionallanterns:white_warped_lantern additionallanterns:yellow_andesite_lantern additionallanterns:yellow_basalt_lantern additionallanterns:yellow_blackstone_lantern additionallanterns:yellow_bone_lantern additionallanterns:yellow_bricks_lantern additionallanterns:yellow_cobblestone_lantern additionallanterns:yellow_crimson_lantern additionallanterns:yellow_dark_prismarine_lantern additionallanterns:yellow_diamond_lantern additionallanterns:yellow_diorite_lantern additionallanterns:yellow_emerald_lantern additionallanterns:yellow_end_stone_lantern additionallanterns:yellow_gold_lantern additionallanterns:yellow_granite_lantern additionallanterns:yellow_iron_lantern additionallanterns:yellow_mossy_cobblestone_lantern additionallanterns:yellow_netherite_lantern additionallanterns:yellow_normal_lantern additionallanterns:yellow_normal_nether_bricks_lantern additionallanterns:yellow_normal_sandstone_lantern additionallanterns:yellow_obsidian_lantern additionallanterns:yellow_prismarine_lantern additionallanterns:yellow_purpur_lantern additionallanterns:yellow_quartz_lantern additionallanterns:yellow_red_nether_bricks_lantern additionallanterns:yellow_red_sandstone_lantern additionallanterns:yellow_smooth_stone_lantern additionallanterns:yellow_stone_bricks_lantern additionallanterns:yellow_stone_lantern additionallanterns:yellow_warped_lantern +item.11001=minecraft:glowstone minecraft:sea_lantern minecraft:shroomlight minecraft:jack_o_lantern minecraft:beacon minecraft:end_rod minecraft:lantern minecraft:soul_lantern minecraft:torch minecraft:soul_torch minecraft:campfire minecraft:soul_campfire minecraft:lava_bucket minecraft:copper_lantern minecraft:exposed_copper_lantern minecraft:weathered_copper_lantern minecraft:oxidized_copper_lantern minecraft:waxed_copper_lantern minecraft:waxed_exposed_copper_lantern minecraft:waxed_weathered_copper_lantern minecraft:waxed_oxidized_copper_lantern additionallanterns:andesite_chain additionallanterns:andesite_lantern additionallanterns:basalt_chain additionallanterns:basalt_lantern additionallanterns:black_andesite_lantern additionallanterns:black_basalt_lantern additionallanterns:black_blackstone_lantern additionallanterns:black_bone_lantern additionallanterns:black_bricks_lantern additionallanterns:black_cobblestone_lantern additionallanterns:black_crimson_lantern additionallanterns:black_dark_prismarine_lantern additionallanterns:black_diamond_lantern additionallanterns:black_diorite_lantern additionallanterns:black_emerald_lantern additionallanterns:black_end_stone_lantern additionallanterns:black_gold_lantern additionallanterns:black_granite_lantern additionallanterns:black_iron_lantern additionallanterns:black_mossy_cobblestone_lantern additionallanterns:black_netherite_lantern additionallanterns:black_normal_lantern additionallanterns:black_normal_nether_bricks_lantern additionallanterns:black_normal_sandstone_lantern additionallanterns:black_obsidian_lantern additionallanterns:black_prismarine_lantern additionallanterns:black_purpur_lantern additionallanterns:black_quartz_lantern additionallanterns:black_red_nether_bricks_lantern additionallanterns:black_red_sandstone_lantern additionallanterns:black_smooth_stone_lantern additionallanterns:black_stone_bricks_lantern additionallanterns:black_stone_lantern additionallanterns:black_warped_lantern additionallanterns:blackstone_chain additionallanterns:blackstone_lantern additionallanterns:blue_andesite_lantern additionallanterns:blue_basalt_lantern additionallanterns:blue_blackstone_lantern additionallanterns:blue_bone_lantern additionallanterns:blue_bricks_lantern additionallanterns:blue_cobblestone_lantern additionallanterns:blue_crimson_lantern additionallanterns:blue_dark_prismarine_lantern additionallanterns:blue_diamond_lantern additionallanterns:blue_diorite_lantern additionallanterns:blue_emerald_lantern additionallanterns:blue_end_stone_lantern additionallanterns:blue_gold_lantern additionallanterns:blue_granite_lantern additionallanterns:blue_iron_lantern additionallanterns:blue_mossy_cobblestone_lantern additionallanterns:blue_netherite_lantern additionallanterns:blue_normal_lantern additionallanterns:blue_normal_nether_bricks_lantern additionallanterns:blue_normal_sandstone_lantern additionallanterns:blue_obsidian_lantern additionallanterns:blue_prismarine_lantern additionallanterns:blue_purpur_lantern additionallanterns:blue_quartz_lantern additionallanterns:blue_red_nether_bricks_lantern additionallanterns:blue_red_sandstone_lantern additionallanterns:blue_smooth_stone_lantern additionallanterns:blue_stone_bricks_lantern additionallanterns:blue_stone_lantern additionallanterns:blue_warped_lantern additionallanterns:bone_chain additionallanterns:bone_lantern additionallanterns:bricks_chain additionallanterns:bricks_lantern additionallanterns:brown_andesite_lantern additionallanterns:brown_basalt_lantern additionallanterns:brown_blackstone_lantern additionallanterns:brown_bone_lantern additionallanterns:brown_bricks_lantern additionallanterns:brown_cobblestone_lantern additionallanterns:brown_crimson_lantern additionallanterns:brown_dark_prismarine_lantern additionallanterns:brown_diamond_lantern additionallanterns:brown_diorite_lantern additionallanterns:brown_emerald_lantern additionallanterns:brown_end_stone_lantern additionallanterns:brown_gold_lantern additionallanterns:brown_granite_lantern additionallanterns:brown_iron_lantern additionallanterns:brown_mossy_cobblestone_lantern additionallanterns:brown_netherite_lantern additionallanterns:brown_normal_lantern additionallanterns:brown_normal_nether_bricks_lantern additionallanterns:brown_normal_sandstone_lantern additionallanterns:brown_obsidian_lantern additionallanterns:brown_prismarine_lantern additionallanterns:brown_purpur_lantern additionallanterns:brown_quartz_lantern additionallanterns:brown_red_nether_bricks_lantern additionallanterns:brown_red_sandstone_lantern additionallanterns:brown_smooth_stone_lantern additionallanterns:brown_stone_bricks_lantern additionallanterns:brown_stone_lantern additionallanterns:brown_warped_lantern additionallanterns:cobblestone_chain additionallanterns:cobblestone_lantern additionallanterns:crimson_chain additionallanterns:crimson_lantern additionallanterns:cyan_andesite_lantern additionallanterns:cyan_basalt_lantern additionallanterns:cyan_blackstone_lantern additionallanterns:cyan_bone_lantern additionallanterns:cyan_bricks_lantern additionallanterns:cyan_cobblestone_lantern additionallanterns:cyan_crimson_lantern additionallanterns:cyan_dark_prismarine_lantern additionallanterns:cyan_diamond_lantern additionallanterns:cyan_diorite_lantern additionallanterns:cyan_emerald_lantern additionallanterns:cyan_end_stone_lantern additionallanterns:cyan_gold_lantern additionallanterns:cyan_granite_lantern additionallanterns:cyan_iron_lantern additionallanterns:cyan_mossy_cobblestone_lantern additionallanterns:cyan_netherite_lantern additionallanterns:cyan_normal_lantern additionallanterns:cyan_normal_nether_bricks_lantern additionallanterns:cyan_normal_sandstone_lantern additionallanterns:cyan_obsidian_lantern additionallanterns:cyan_prismarine_lantern additionallanterns:cyan_purpur_lantern additionallanterns:cyan_quartz_lantern additionallanterns:cyan_red_nether_bricks_lantern additionallanterns:cyan_red_sandstone_lantern additionallanterns:cyan_smooth_stone_lantern additionallanterns:cyan_stone_bricks_lantern additionallanterns:cyan_stone_lantern additionallanterns:cyan_warped_lantern additionallanterns:dark_prismarine_chain additionallanterns:dark_prismarine_lantern additionallanterns:diamond_chain additionallanterns:diamond_lantern additionallanterns:diorite_chain additionallanterns:diorite_lantern additionallanterns:emerald_chain additionallanterns:emerald_lantern additionallanterns:end_stone_chain additionallanterns:end_stone_lantern additionallanterns:gold_chain additionallanterns:gold_lantern additionallanterns:granite_chain additionallanterns:granite_lantern additionallanterns:gray_andesite_lantern additionallanterns:gray_basalt_lantern additionallanterns:gray_blackstone_lantern additionallanterns:gray_bone_lantern additionallanterns:gray_bricks_lantern additionallanterns:gray_cobblestone_lantern additionallanterns:gray_crimson_lantern additionallanterns:gray_dark_prismarine_lantern additionallanterns:gray_diamond_lantern additionallanterns:gray_diorite_lantern additionallanterns:gray_emerald_lantern additionallanterns:gray_end_stone_lantern additionallanterns:gray_gold_lantern additionallanterns:gray_granite_lantern additionallanterns:gray_iron_lantern additionallanterns:gray_mossy_cobblestone_lantern additionallanterns:gray_netherite_lantern additionallanterns:gray_normal_lantern additionallanterns:gray_normal_nether_bricks_lantern additionallanterns:gray_normal_sandstone_lantern additionallanterns:gray_obsidian_lantern additionallanterns:gray_prismarine_lantern additionallanterns:gray_purpur_lantern additionallanterns:gray_quartz_lantern additionallanterns:gray_red_nether_bricks_lantern additionallanterns:gray_red_sandstone_lantern additionallanterns:gray_smooth_stone_lantern additionallanterns:gray_stone_bricks_lantern additionallanterns:gray_stone_lantern additionallanterns:gray_warped_lantern additionallanterns:green_andesite_lantern additionallanterns:green_basalt_lantern additionallanterns:green_blackstone_lantern additionallanterns:green_bone_lantern additionallanterns:green_bricks_lantern additionallanterns:green_cobblestone_lantern additionallanterns:green_crimson_lantern additionallanterns:green_dark_prismarine_lantern additionallanterns:green_diamond_lantern additionallanterns:green_diorite_lantern additionallanterns:green_emerald_lantern additionallanterns:green_end_stone_lantern additionallanterns:green_gold_lantern additionallanterns:green_granite_lantern additionallanterns:green_iron_lantern additionallanterns:green_mossy_cobblestone_lantern additionallanterns:green_netherite_lantern additionallanterns:green_normal_lantern additionallanterns:green_normal_nether_bricks_lantern additionallanterns:green_normal_sandstone_lantern additionallanterns:green_obsidian_lantern additionallanterns:green_prismarine_lantern additionallanterns:green_purpur_lantern additionallanterns:green_quartz_lantern additionallanterns:green_red_nether_bricks_lantern additionallanterns:green_red_sandstone_lantern additionallanterns:green_smooth_stone_lantern additionallanterns:green_stone_bricks_lantern additionallanterns:green_stone_lantern additionallanterns:green_warped_lantern additionallanterns:iron_lantern additionallanterns:light_blue_andesite_lantern additionallanterns:light_blue_basalt_lantern additionallanterns:light_blue_blackstone_lantern additionallanterns:light_blue_bone_lantern additionallanterns:light_blue_bricks_lantern additionallanterns:light_blue_cobblestone_lantern additionallanterns:light_blue_crimson_lantern additionallanterns:light_blue_dark_prismarine_lantern additionallanterns:light_blue_diamond_lantern additionallanterns:light_blue_diorite_lantern additionallanterns:light_blue_emerald_lantern additionallanterns:light_blue_end_stone_lantern additionallanterns:light_blue_gold_lantern additionallanterns:light_blue_granite_lantern additionallanterns:light_blue_iron_lantern additionallanterns:light_blue_mossy_cobblestone_lantern additionallanterns:light_blue_netherite_lantern additionallanterns:light_blue_normal_lantern additionallanterns:light_blue_normal_nether_bricks_lantern additionallanterns:light_blue_normal_sandstone_lantern additionallanterns:light_blue_obsidian_lantern additionallanterns:light_blue_prismarine_lantern additionallanterns:light_blue_purpur_lantern additionallanterns:light_blue_quartz_lantern additionallanterns:light_blue_red_nether_bricks_lantern additionallanterns:light_blue_red_sandstone_lantern additionallanterns:light_blue_smooth_stone_lantern additionallanterns:light_blue_stone_bricks_lantern additionallanterns:light_blue_stone_lantern additionallanterns:light_blue_warped_lantern additionallanterns:light_gray_andesite_lantern additionallanterns:light_gray_basalt_lantern additionallanterns:light_gray_blackstone_lantern additionallanterns:light_gray_bone_lantern additionallanterns:light_gray_bricks_lantern additionallanterns:light_gray_cobblestone_lantern additionallanterns:light_gray_crimson_lantern additionallanterns:light_gray_dark_prismarine_lantern additionallanterns:light_gray_diamond_lantern additionallanterns:light_gray_diorite_lantern additionallanterns:light_gray_emerald_lantern additionallanterns:light_gray_end_stone_lantern additionallanterns:light_gray_gold_lantern additionallanterns:light_gray_granite_lantern additionallanterns:light_gray_iron_lantern additionallanterns:light_gray_mossy_cobblestone_lantern additionallanterns:light_gray_netherite_lantern additionallanterns:light_gray_normal_lantern additionallanterns:light_gray_normal_nether_bricks_lantern additionallanterns:light_gray_normal_sandstone_lantern additionallanterns:light_gray_obsidian_lantern additionallanterns:light_gray_prismarine_lantern additionallanterns:light_gray_purpur_lantern additionallanterns:light_gray_quartz_lantern additionallanterns:light_gray_red_nether_bricks_lantern additionallanterns:light_gray_red_sandstone_lantern additionallanterns:light_gray_smooth_stone_lantern additionallanterns:light_gray_stone_bricks_lantern additionallanterns:light_gray_stone_lantern additionallanterns:light_gray_warped_lantern additionallanterns:lime_andesite_lantern additionallanterns:lime_basalt_lantern additionallanterns:lime_blackstone_lantern additionallanterns:lime_bone_lantern additionallanterns:lime_bricks_lantern additionallanterns:lime_cobblestone_lantern additionallanterns:lime_crimson_lantern additionallanterns:lime_dark_prismarine_lantern additionallanterns:lime_diamond_lantern additionallanterns:lime_diorite_lantern additionallanterns:lime_emerald_lantern additionallanterns:lime_end_stone_lantern additionallanterns:lime_gold_lantern additionallanterns:lime_granite_lantern additionallanterns:lime_iron_lantern additionallanterns:lime_mossy_cobblestone_lantern additionallanterns:lime_netherite_lantern additionallanterns:lime_normal_lantern additionallanterns:lime_normal_nether_bricks_lantern additionallanterns:lime_normal_sandstone_lantern additionallanterns:lime_obsidian_lantern additionallanterns:lime_prismarine_lantern additionallanterns:lime_purpur_lantern additionallanterns:lime_quartz_lantern additionallanterns:lime_red_nether_bricks_lantern additionallanterns:lime_red_sandstone_lantern additionallanterns:lime_smooth_stone_lantern additionallanterns:lime_stone_bricks_lantern additionallanterns:lime_stone_lantern additionallanterns:lime_warped_lantern additionallanterns:magenta_andesite_lantern additionallanterns:magenta_basalt_lantern additionallanterns:magenta_blackstone_lantern additionallanterns:magenta_bone_lantern additionallanterns:magenta_bricks_lantern additionallanterns:magenta_cobblestone_lantern additionallanterns:magenta_crimson_lantern additionallanterns:magenta_dark_prismarine_lantern additionallanterns:magenta_diamond_lantern additionallanterns:magenta_diorite_lantern additionallanterns:magenta_emerald_lantern additionallanterns:magenta_end_stone_lantern additionallanterns:magenta_gold_lantern additionallanterns:magenta_granite_lantern additionallanterns:magenta_iron_lantern additionallanterns:magenta_mossy_cobblestone_lantern additionallanterns:magenta_netherite_lantern additionallanterns:magenta_normal_lantern additionallanterns:magenta_normal_nether_bricks_lantern additionallanterns:magenta_normal_sandstone_lantern additionallanterns:magenta_obsidian_lantern additionallanterns:magenta_prismarine_lantern additionallanterns:magenta_purpur_lantern additionallanterns:magenta_quartz_lantern additionallanterns:magenta_red_nether_bricks_lantern additionallanterns:magenta_red_sandstone_lantern additionallanterns:magenta_smooth_stone_lantern additionallanterns:magenta_stone_bricks_lantern additionallanterns:magenta_stone_lantern additionallanterns:magenta_warped_lantern additionallanterns:mossy_cobblestone_chain additionallanterns:mossy_cobblestone_lantern additionallanterns:netherite_chain additionallanterns:netherite_lantern additionallanterns:normal_nether_bricks_chain additionallanterns:normal_nether_bricks_lantern additionallanterns:normal_sandstone_chain additionallanterns:normal_sandstone_lantern additionallanterns:obsidian_chain additionallanterns:obsidian_lantern additionallanterns:orange_andesite_lantern additionallanterns:orange_basalt_lantern additionallanterns:orange_blackstone_lantern additionallanterns:orange_bone_lantern additionallanterns:orange_bricks_lantern additionallanterns:orange_cobblestone_lantern additionallanterns:orange_crimson_lantern additionallanterns:orange_dark_prismarine_lantern additionallanterns:orange_diamond_lantern additionallanterns:orange_diorite_lantern additionallanterns:orange_emerald_lantern additionallanterns:orange_end_stone_lantern additionallanterns:orange_gold_lantern additionallanterns:orange_granite_lantern additionallanterns:orange_iron_lantern additionallanterns:orange_mossy_cobblestone_lantern additionallanterns:orange_netherite_lantern additionallanterns:orange_normal_lantern additionallanterns:orange_normal_nether_bricks_lantern additionallanterns:orange_normal_sandstone_lantern additionallanterns:orange_obsidian_lantern additionallanterns:orange_prismarine_lantern additionallanterns:orange_purpur_lantern additionallanterns:orange_quartz_lantern additionallanterns:orange_red_nether_bricks_lantern additionallanterns:orange_red_sandstone_lantern additionallanterns:orange_smooth_stone_lantern additionallanterns:orange_stone_bricks_lantern additionallanterns:orange_stone_lantern additionallanterns:orange_warped_lantern additionallanterns:pink_andesite_lantern additionallanterns:pink_basalt_lantern additionallanterns:pink_blackstone_lantern additionallanterns:pink_bone_lantern additionallanterns:pink_bricks_lantern additionallanterns:pink_cobblestone_lantern additionallanterns:pink_crimson_lantern additionallanterns:pink_dark_prismarine_lantern additionallanterns:pink_diamond_lantern additionallanterns:pink_diorite_lantern additionallanterns:pink_emerald_lantern additionallanterns:pink_end_stone_lantern additionallanterns:pink_gold_lantern additionallanterns:pink_granite_lantern additionallanterns:pink_iron_lantern additionallanterns:pink_mossy_cobblestone_lantern additionallanterns:pink_netherite_lantern additionallanterns:pink_normal_lantern additionallanterns:pink_normal_nether_bricks_lantern additionallanterns:pink_normal_sandstone_lantern additionallanterns:pink_obsidian_lantern additionallanterns:pink_prismarine_lantern additionallanterns:pink_purpur_lantern additionallanterns:pink_quartz_lantern additionallanterns:pink_red_nether_bricks_lantern additionallanterns:pink_red_sandstone_lantern additionallanterns:pink_smooth_stone_lantern additionallanterns:pink_stone_bricks_lantern additionallanterns:pink_stone_lantern additionallanterns:pink_warped_lantern additionallanterns:prismarine_chain additionallanterns:prismarine_lantern additionallanterns:purple_andesite_lantern additionallanterns:purple_basalt_lantern additionallanterns:purple_blackstone_lantern additionallanterns:purple_bone_lantern additionallanterns:purple_bricks_lantern additionallanterns:purple_cobblestone_lantern additionallanterns:purple_crimson_lantern additionallanterns:purple_dark_prismarine_lantern additionallanterns:purple_diamond_lantern additionallanterns:purple_diorite_lantern additionallanterns:purple_emerald_lantern additionallanterns:purple_end_stone_lantern additionallanterns:purple_gold_lantern additionallanterns:purple_granite_lantern additionallanterns:purple_iron_lantern additionallanterns:purple_mossy_cobblestone_lantern additionallanterns:purple_netherite_lantern additionallanterns:purple_normal_lantern additionallanterns:purple_normal_nether_bricks_lantern additionallanterns:purple_normal_sandstone_lantern additionallanterns:purple_obsidian_lantern additionallanterns:purple_prismarine_lantern additionallanterns:purple_purpur_lantern additionallanterns:purple_quartz_lantern additionallanterns:purple_red_nether_bricks_lantern additionallanterns:purple_red_sandstone_lantern additionallanterns:purple_smooth_stone_lantern additionallanterns:purple_stone_bricks_lantern additionallanterns:purple_stone_lantern additionallanterns:purple_warped_lantern additionallanterns:purpur_chain additionallanterns:purpur_lantern additionallanterns:quartz_chain additionallanterns:quartz_lantern additionallanterns:red_andesite_lantern additionallanterns:red_basalt_lantern additionallanterns:red_blackstone_lantern additionallanterns:red_bone_lantern additionallanterns:red_bricks_lantern additionallanterns:red_cobblestone_lantern additionallanterns:red_crimson_lantern additionallanterns:red_dark_prismarine_lantern additionallanterns:red_diamond_lantern additionallanterns:red_diorite_lantern additionallanterns:red_emerald_lantern additionallanterns:red_end_stone_lantern additionallanterns:red_gold_lantern additionallanterns:red_granite_lantern additionallanterns:red_iron_lantern additionallanterns:red_mossy_cobblestone_lantern additionallanterns:red_nether_bricks_chain additionallanterns:red_nether_bricks_lantern additionallanterns:red_netherite_lantern additionallanterns:red_normal_lantern additionallanterns:red_normal_nether_bricks_lantern additionallanterns:red_normal_sandstone_lantern additionallanterns:red_obsidian_lantern additionallanterns:red_prismarine_lantern additionallanterns:red_purpur_lantern additionallanterns:red_quartz_lantern additionallanterns:red_red_nether_bricks_lantern additionallanterns:red_red_sandstone_lantern additionallanterns:red_sandstone_chain additionallanterns:red_sandstone_lantern additionallanterns:red_smooth_stone_lantern additionallanterns:red_stone_bricks_lantern additionallanterns:red_stone_lantern additionallanterns:red_warped_lantern additionallanterns:smooth_stone_chain additionallanterns:smooth_stone_lantern additionallanterns:stone_bricks_chain additionallanterns:stone_bricks_lantern additionallanterns:stone_chain additionallanterns:stone_lantern additionallanterns:warped_chain additionallanterns:warped_lantern additionallanterns:white_andesite_lantern additionallanterns:white_basalt_lantern additionallanterns:white_blackstone_lantern additionallanterns:white_bone_lantern additionallanterns:white_bricks_lantern additionallanterns:white_cobblestone_lantern additionallanterns:white_crimson_lantern additionallanterns:white_dark_prismarine_lantern additionallanterns:white_diamond_lantern additionallanterns:white_diorite_lantern additionallanterns:white_emerald_lantern additionallanterns:white_end_stone_lantern additionallanterns:white_gold_lantern additionallanterns:white_granite_lantern additionallanterns:white_iron_lantern additionallanterns:white_mossy_cobblestone_lantern additionallanterns:white_netherite_lantern additionallanterns:white_normal_lantern additionallanterns:white_normal_nether_bricks_lantern additionallanterns:white_normal_sandstone_lantern additionallanterns:white_obsidian_lantern additionallanterns:white_prismarine_lantern additionallanterns:white_purpur_lantern additionallanterns:white_quartz_lantern additionallanterns:white_red_nether_bricks_lantern additionallanterns:white_red_sandstone_lantern additionallanterns:white_smooth_stone_lantern additionallanterns:white_stone_bricks_lantern additionallanterns:white_stone_lantern additionallanterns:white_warped_lantern additionallanterns:yellow_andesite_lantern additionallanterns:yellow_basalt_lantern additionallanterns:yellow_blackstone_lantern additionallanterns:yellow_bone_lantern additionallanterns:yellow_bricks_lantern additionallanterns:yellow_cobblestone_lantern additionallanterns:yellow_crimson_lantern additionallanterns:yellow_dark_prismarine_lantern additionallanterns:yellow_diamond_lantern additionallanterns:yellow_diorite_lantern additionallanterns:yellow_emerald_lantern additionallanterns:yellow_end_stone_lantern additionallanterns:yellow_gold_lantern additionallanterns:yellow_granite_lantern additionallanterns:yellow_iron_lantern additionallanterns:yellow_mossy_cobblestone_lantern additionallanterns:yellow_netherite_lantern additionallanterns:yellow_normal_lantern additionallanterns:yellow_normal_nether_bricks_lantern additionallanterns:yellow_normal_sandstone_lantern additionallanterns:yellow_obsidian_lantern additionallanterns:yellow_prismarine_lantern additionallanterns:yellow_purpur_lantern additionallanterns:yellow_quartz_lantern additionallanterns:yellow_red_nether_bricks_lantern additionallanterns:yellow_red_sandstone_lantern additionallanterns:yellow_smooth_stone_lantern additionallanterns:yellow_stone_bricks_lantern additionallanterns:yellow_stone_lantern additionallanterns:yellow_warped_lantern # Low light item.11002=minecraft:redstone_torch minecraft:crying_obsidian minecraft:respawn_anchor minecraft:nether_star minecraft:magma_cream minecraft:blaze_powder minecraft:blaze_rod minecraft:prismarine_crystals minecraft:glowstone_dust minecraft:glow_item_frame minecraft:glow_berries minecraft:glow_lichen minecraft:glow_ink_sac \ No newline at end of file diff --git a/shaders/lib/dither.glsl b/shaders/lib/dither.glsl index 3f1fe2ca..1e4245fa 100644 --- a/shaders/lib/dither.glsl +++ b/shaders/lib/dither.glsl @@ -212,6 +212,7 @@ float dither_makeup(vec2 xy) { } float shifted_dither_makeup(vec2 xy) { + xy = xy + vec2(frame_mod * 3, frame_mod); vec2 tile = floor(xy * 0.125); float flip = mod(tile.x + tile.y, 2.0); vec2 zw = mix(xy, xy.yx, flip); diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 25320a46..4ff9d973 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -138,7 +138,7 @@ variable.float.light_mix_f = max(light_mix_c, light_mix_d) uniform.float.light_mix = max(light_mix_e, light_mix_f) # Frame modulus -uniform.int.frame_mod = fmod(frameCounter, 8) +uniform.int.frame_mod = fmod(frameCounter, 16) # TAA OFFSET - The offset for TAA is precalculated here. # It is based on a pentagon (repeated twice as it is a multiple of the 10-frame module.) @@ -157,6 +157,14 @@ uniform.int.frame_mod = fmod(frameCounter, 8) frame_mod == 5, -0.5, \ frame_mod == 6, -0.5, \ frame_mod == 7, 0.5, \ + frame_mod == 8, 0.5, \ + frame_mod == 9, -0.5, \ + frame_mod == 10, -0.5, \ + frame_mod == 11, 0.5, \ + frame_mod == 12, 0.5, \ + frame_mod == 13, -0.5, \ + frame_mod == 14, -0.5, \ + frame_mod == 15, 0.5, \ 0.0)) * pixel_size_x, \ (if( \ frame_mod == 0, 0.5, \ @@ -167,6 +175,14 @@ uniform.int.frame_mod = fmod(frameCounter, 8) frame_mod == 5, -0.5, \ frame_mod == 6, 0.5, \ frame_mod == 7, -0.5, \ + frame_mod == 8, 0.5, \ + frame_mod == 9, -0.5, \ + frame_mod == 10, 0.5, \ + frame_mod == 11, -0.5, \ + frame_mod == 12, 0.5, \ + frame_mod == 13, -0.5, \ + frame_mod == 14, 0.5, \ + frame_mod == 15, -0.5, \ 0.0)) * pixel_size_y) # Dither shift - When Temporal sampling is active, dithering patterns change over time. @@ -176,14 +192,22 @@ uniform.int.frame_mod = fmod(frameCounter, 8) #if MC_VERSION >= 11300 uniform.float.dither_shift = if( \ - frame_mod == 0, 0.625, \ - frame_mod == 1, 0.75, \ - frame_mod == 2, 0.375, \ - frame_mod == 3, 0.125, \ - frame_mod == 4, 0.5, \ - frame_mod == 5, 0.25, \ - frame_mod == 6, 0.875, \ - frame_mod == 7, 0.0, \ + frame_mod == 0, 0.0625, \ + frame_mod == 1, 0.4375, \ + frame_mod == 2, 0.875, \ + frame_mod == 3, 0.625, \ + frame_mod == 4, 0.25, \ + frame_mod == 5, 0.8125, \ + frame_mod == 6, 0.125, \ + frame_mod == 7, 0.9375, \ + frame_mod == 8, 0.3125, \ + frame_mod == 9, 0.5, \ + frame_mod == 10, 0.375, \ + frame_mod == 11, 0.5625, \ + frame_mod == 12, 0.75, \ + frame_mod == 13, 0.6875, \ + frame_mod == 14, 0.1875, \ + frame_mod == 15, 0.0, \ 0.0) #endif #endif From 9a00b69f47bf13daba376e3ea5f209dea12a9863 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 4 Oct 2025 23:54:45 -0600 Subject: [PATCH 081/147] Version 9.3e --- shaders/common/composite_fragment.glsl | 2 +- shaders/common/skybasic_fragment.glsl | 2 -- shaders/common/skybasic_vertex.glsl | 12 +++++++----- shaders/common/skytextured_fragment.glsl | 4 ++-- shaders/common/solid_blocks_fragment.glsl | 2 -- shaders/common/solid_blocks_vertex.glsl | 4 ++++ shaders/common/water_blocks_fragment.glsl | 1 - shaders/common/water_blocks_vertex.glsl | 4 ++++ shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 2 +- shaders/lang/es_ES.lang | 2 +- shaders/lang/es_MX.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- shaders/src/light_vertex.glsl | 3 +++ 17 files changed, 29 insertions(+), 21 deletions(-) diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index fef94bf2..fd5878f9 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -227,7 +227,7 @@ void main() { // Bloom source float bloom_luma = smoothstep(0.85, 1.0, luma(block_color.rgb * exposure)) * 0.5; - block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); + block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); /* DRAWBUFFERS:146 */ gl_FragData[0] = block_color; gl_FragData[1] = block_color * bloom_luma; diff --git a/shaders/common/skybasic_fragment.glsl b/shaders/common/skybasic_fragment.glsl index 9c99705e..760002b7 100644 --- a/shaders/common/skybasic_fragment.glsl +++ b/shaders/common/skybasic_fragment.glsl @@ -88,8 +88,6 @@ void main() { #endif #endif - // DEBUG - // block_color.rgba = vec4(0.7, 0.0, 0.5, star_data.a); block_color.rgba = vec4(texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb, clamp(star_data.a * 2.0, 0.0, 1.0)); #include "/src/writebuffers.glsl" diff --git a/shaders/common/skybasic_vertex.glsl b/shaders/common/skybasic_vertex.glsl index 12396b75..fcafdcf6 100644 --- a/shaders/common/skybasic_vertex.glsl +++ b/shaders/common/skybasic_vertex.glsl @@ -49,11 +49,13 @@ void main() { gl_Position.xy += taa_offset * gl_Position.w; #endif - star_data = vec4( - float(gl_Color.r == gl_Color.g && - gl_Color.g == gl_Color.b && - gl_Color.r > 0.0) * gl_Color.r - ); + // star_data = vec4( + // float(gl_Color.r == gl_Color.g && + // gl_Color.g == gl_Color.b && + // gl_Color.r > 0.0) * gl_Color.r + // ); + + star_data = vec4(0.0); #if MC_VERSION < 11604 up_vec = normalize(gbufferModelView[1].xyz); diff --git a/shaders/common/skytextured_fragment.glsl b/shaders/common/skytextured_fragment.glsl index 766f73c1..24a533fc 100644 --- a/shaders/common/skytextured_fragment.glsl +++ b/shaders/common/skytextured_fragment.glsl @@ -28,8 +28,8 @@ varying float sky_luma_correction; // Flat void main() { #if defined THE_END - vec4 block_color = vec4(ZENITH_DAY_COLOR, 1.0); - vec3 background_color = ZENITH_DAY_COLOR; + vec4 block_color = vec4(ZENITH_DAY_COLOR, 0.0); + // vec3 background_color = ZENITH_DAY_COLOR; #elif defined NETHER // Unused vec4 background_color_full = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); vec3 background_color = background_color_full.rgb; diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 39857769..4938b809 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -225,8 +225,6 @@ void main() { block_color.rgb *= 1.5; #endif - // block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); - #include "/src/finalcolor.glsl" #include "/src/writebuffers.glsl" } diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index 6b716072..bda1ae0d 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -59,6 +59,10 @@ uniform mat4 gbufferProjectionInverse; uniform float frameTimeCounter; #endif +#if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 + uniform float endFlashIntensity; +#endif + /* Ins / Outs */ varying vec2 texcoord; diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index 53ca2012..459a78e0 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -136,7 +136,6 @@ void main() { float dither = 1.0; #endif - // vec4 block_color = texture2D(tex, texcoord); vec4 block_color; vec3 real_light; diff --git a/shaders/common/water_blocks_vertex.glsl b/shaders/common/water_blocks_vertex.glsl index f874b04e..166f881f 100644 --- a/shaders/common/water_blocks_vertex.glsl +++ b/shaders/common/water_blocks_vertex.glsl @@ -43,6 +43,10 @@ uniform mat4 gbufferProjectionInverse; uniform vec3 shadowLightPosition; #endif +#if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 + uniform float endFlashIntensity; +#endif + /* Ins / Outs */ varying vec2 texcoord; diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index c00eb0f6..6d910e14 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -15,7 +15,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.3d +value.ACERCADE.0=v.9.3e #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index aac857f6..15a255aa 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3d +value.ACERCADE.0=v.9.3e # Opciones ############################# diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index aac857f6..15a255aa 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3d +value.ACERCADE.0=v.9.3e # Opciones ############################# diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index aac857f6..15a255aa 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3d +value.ACERCADE.0=v.9.3e # Opciones ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 37925f78..114720b5 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -15,7 +15,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.3d +value.ACERCADE.0=v.9.3e #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 32a81ecf..3dacb70b 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -15,7 +15,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.3d +value.ACERCADE.0=v.9.3e #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 39009e40..0cc12a89 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -15,7 +15,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.3d +value.ACERCADE.0=v.9.3e #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index cd527c52..c0bd0388 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -15,7 +15,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.3d +value.ACERCADE.0=v.9.3e #Options ############################# diff --git a/shaders/src/light_vertex.glsl b/shaders/src/light_vertex.glsl index 369d17ea..3c183678 100644 --- a/shaders/src/light_vertex.glsl +++ b/shaders/src/light_vertex.glsl @@ -62,6 +62,9 @@ float omni_strength = (direct_light_strength * .125) + 1.0; direct_light_color = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; #else direct_light_color = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); + #if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 + direct_light_color += (endFlashIntensity * endFlashIntensity * 0.1); + #endif #endif // Direct light strenght -- From acc1fc8630a036ae24f774f818c8f767bb9dd708 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sun, 5 Oct 2025 00:01:46 -0600 Subject: [PATCH 082/147] Version 9.3e --- shaders/common/solid_dh_blocks_vertex.glsl | 4 ++++ shaders/common/solid_dh_water_vertex.glsl | 4 ++++ shaders/src/light_vertex_dh.glsl | 3 +++ 3 files changed, 11 insertions(+) diff --git a/shaders/common/solid_dh_blocks_vertex.glsl b/shaders/common/solid_dh_blocks_vertex.glsl index 893be77f..bef564b9 100644 --- a/shaders/common/solid_dh_blocks_vertex.glsl +++ b/shaders/common/solid_dh_blocks_vertex.glsl @@ -31,6 +31,10 @@ uniform mat4 gbufferProjectionInverse; uniform sampler2D lightmap; #endif +#if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 + uniform float endFlashIntensity; +#endif + /* Ins / Outs */ varying vec2 texcoord; diff --git a/shaders/common/solid_dh_water_vertex.glsl b/shaders/common/solid_dh_water_vertex.glsl index af6cfcfe..0664dc4b 100644 --- a/shaders/common/solid_dh_water_vertex.glsl +++ b/shaders/common/solid_dh_water_vertex.glsl @@ -31,6 +31,10 @@ uniform mat4 gbufferProjectionInverse; uniform sampler2D lightmap; #endif +#if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 + uniform float endFlashIntensity; +#endif + /* Ins / Outs */ varying vec2 texcoord; diff --git a/shaders/src/light_vertex_dh.glsl b/shaders/src/light_vertex_dh.glsl index 35866e18..0b6e16b3 100644 --- a/shaders/src/light_vertex_dh.glsl +++ b/shaders/src/light_vertex_dh.glsl @@ -56,6 +56,9 @@ float omni_strength = (direct_light_strength * .125) + 1.0; direct_light_color = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; #else direct_light_color = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); + #if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 + direct_light_color += (endFlashIntensity * endFlashIntensity * 0.1); + #endif #endif direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); From 0625a0241dfedee6689f38ce27aac64e87398e49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 6 Dec 2025 16:59:24 -0600 Subject: [PATCH 083/147] Version 9.3f --- README.md | 2 +- shaders/common/solid_blocks_fragment.glsl | 2 +- shaders/gbuffers_beaconbeam.fsh | 2 +- shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 2 +- shaders/lang/es_ES.lang | 2 +- shaders/lang/es_MX.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- shaders/lib/config.glsl | 2 +- shaders/src/light_vertex.glsl | 6 +++--- shaders/src/light_vertex_dh.glsl | 6 +----- shaders/world-1/gbuffers_beaconbeam.fsh | 2 +- shaders/world0/gbuffers_beaconbeam.fsh | 2 +- shaders/world1/gbuffers_beaconbeam.fsh | 2 +- 17 files changed, 19 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 224a76de..8f5b62ec 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.3e +## Version: 9.3f ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 4938b809..8b482597 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -122,7 +122,7 @@ void main() { #endif #endif // Avoid render in DH transition - #ifdef DISTANT_HORIZONS + #if defined DISTANT_HORIZONS && !defined GBUFFER_BEACONBEAM float t = far - dhNearPlane; float sup = t * TRANSITION_DH_SUP; float inf = t * TRANSITION_DH_INF; diff --git a/shaders/gbuffers_beaconbeam.fsh b/shaders/gbuffers_beaconbeam.fsh index 258594a6..65d650d5 100644 --- a/shaders/gbuffers_beaconbeam.fsh +++ b/shaders/gbuffers_beaconbeam.fsh @@ -1,6 +1,6 @@ #version 120 /* MakeUp - gbuffers_beaconbeam.fsh -Render: BEacon beam +Render: Beacon beam Javier Garduño - GNU Lesser General Public License v3.0 */ diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 6d910e14..647db72c 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -15,7 +15,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.3e +value.ACERCADE.0=v.9.3f #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index 15a255aa..6bcd1ea6 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3e +value.ACERCADE.0=v.9.3f # Opciones ############################# diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index 15a255aa..6bcd1ea6 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3e +value.ACERCADE.0=v.9.3f # Opciones ############################# diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index 15a255aa..6bcd1ea6 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3e +value.ACERCADE.0=v.9.3f # Opciones ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 114720b5..a4979b59 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -15,7 +15,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.3e +value.ACERCADE.0=v.9.3f #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 3dacb70b..d15fb7de 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -15,7 +15,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.3e +value.ACERCADE.0=v.9.3f #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 0cc12a89..2e8d1106 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -15,7 +15,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.3e +value.ACERCADE.0=v.9.3f #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index c0bd0388..d4d4ca76 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -15,7 +15,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.3e +value.ACERCADE.0=v.9.3f #Options ############################# diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index a8e6447b..99b897e5 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -68,7 +68,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define COLOR_SCHEME 1 // [0 1 2 3 4 5 6 7 99] Ethereal: Old default theme. New shoka: Reinterpretation of a classic. Shoka: The classic. Legacy: Very old default. Captain: A cold preset of stylish colors. Psycodelic: Remaster of old vivid scheme. Cocoa: Warm theme. Testigo: Fantasy and cute scheme. Custom: Choose your colors in advanced options. #define WATER_TEXTURE 0 // [0 1] Enable or disable resource pack water texture. It does not work properly in 1.12. In that case the default value is recommended. #define AVOID_DARK_LEVEL 0.030 // [0.000 0.005 0.010 0.015 0.020 0.025 0.030 0.035 0.040 0.045 0.050 0.055 0.060] Minimal omni light intensity in caves. -#define NIGHT_BRIGHT 0.60 // [0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70] Adjusts the brightness of the night light in exteriors. +#define NIGHT_BRIGHT 0.60 // [0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70] Adjusts the brightness of the night light in exteriors. #define V_CLOUDS 1 // [0 1 2] Volumetric static: The clouds move, but they keep their shape. Volumetric dynamic: Clouds change shape over time, a different cloud landscape every time (medium performance hit). Vanilla: Original vanilla clouds. #define CLOUD_VOL_STYLE 0 // [0 1] Set the volumetric cloud style. #define CLOUD_REFLECTION // Set off-screen volumetric clouds reflection (volumetric clouds must be active). diff --git a/shaders/src/light_vertex.glsl b/shaders/src/light_vertex.glsl index 3c183678..42003c61 100644 --- a/shaders/src/light_vertex.glsl +++ b/shaders/src/light_vertex.glsl @@ -15,7 +15,7 @@ if (isEyeInWater == 1) { #endif // Candels color and intensity -// --- OPTIMIZACIÓN #1: Reemplazar pow(x, 1.5) por x * sqrt(x) --- +// Reemplazar pow(x, 1.5) por x * sqrt(x) --- candle_color = CANDLE_BASELIGHT * (illumination.x * sqrt(illumination.x) + sixth_pow(illumination.x * 1.17)); #ifdef DYN_HAND_LIGHT @@ -39,7 +39,7 @@ candle_color = clamp(candle_color, vec3(0.0), vec3(4.0)); vec3 normal = gl_NormalMatrix * gl_Normal; float sun_light_strength; -// --- OPTIMIZACIÓN #2: Evitar length() en el condicional --- +// Evitar length() en el condicional --- if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals normal = normalize(normal); sun_light_strength = dot(normal, sun_vec); @@ -119,7 +119,7 @@ float omni_strength = (direct_light_strength * .125) + 1.0; #ifndef SHADOW_CASTING // Fake shadows if (isEyeInWater == 0) { - // --- OPTIMIZACIÓN #4: Reemplazar pow(x, 10.0) con multiplicaciones --- + // Reemplazar pow(x, 10.0) con multiplicaciones --- float vis_sky_2 = visible_sky * visible_sky; float vis_sky_4 = vis_sky_2 * vis_sky_2; float vis_sky_8 = vis_sky_4 * vis_sky_4; diff --git a/shaders/src/light_vertex_dh.glsl b/shaders/src/light_vertex_dh.glsl index 0b6e16b3..0604d4c2 100644 --- a/shaders/src/light_vertex_dh.glsl +++ b/shaders/src/light_vertex_dh.glsl @@ -7,7 +7,6 @@ tint_color = gl_Color; vec2 illumination = lmcoord; #endif -// OPTIMIZACIÓN: Reemplazar (max(x, c) - c) con max(x - c, 0), que puede ser marginalmente más rápido. illumination.y = max(illumination.y - 0.065, 0.0) * 1.06951871657754; visible_sky = clamp(illumination.y, 0.0, 1.0); @@ -16,8 +15,6 @@ visible_sky = clamp(illumination.y, 0.0, 1.0); #endif // Intensidad y color de luz de candelas -// --- OPTIMIZACIÓN #1: Reemplazar pow(x, 1.5) por x * sqrt(x) --- -// Es mucho más rápido y matemáticamente idéntico. float candle_luma = illumination.x * sqrt(illumination.x); candle_color = CANDLE_BASELIGHT * (candle_luma + sixth_pow(illumination.x * 1.17)); candle_color = clamp(candle_color, vec3(0.0), vec3(4.0)); @@ -32,7 +29,6 @@ candle_color = clamp(candle_color, vec3(0.0), vec3(4.0)); vec3 normal = gl_NormalMatrix * gl_Normal; float sun_light_strength; -// --- OPTIMIZACIÓN #2: Evitar length() en el condicional --- // Comprobar la longitud al cuadrado (dot product) es mucho más rápido que la longitud (sqrt). if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals normal = normalize(normal); @@ -82,7 +78,7 @@ direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); #endif if (isEyeInWater == 0) { - // --- OPTIMIZACIÓN #1: Reemplazar pow(x, 10.0) con multiplicaciones --- + // Reemplazar pow(x, 10.0) con multiplicaciones --- // Esto es órdenes de magnitud más rápido. x^10 = (x^2)^2 * x^2 float vis_sky_2 = visible_sky * visible_sky; // x^2 float vis_sky_4 = vis_sky_2 * vis_sky_2; // x^4 diff --git a/shaders/world-1/gbuffers_beaconbeam.fsh b/shaders/world-1/gbuffers_beaconbeam.fsh index 7259b15d..653bea98 100644 --- a/shaders/world-1/gbuffers_beaconbeam.fsh +++ b/shaders/world-1/gbuffers_beaconbeam.fsh @@ -1,6 +1,6 @@ #version 120 /* MakeUp - gbuffers_beaconbeam.fsh -Render: BEacon beam +Render: Beacon beam Javier Garduño - GNU Lesser General Public License v3.0 */ diff --git a/shaders/world0/gbuffers_beaconbeam.fsh b/shaders/world0/gbuffers_beaconbeam.fsh index f4ccbfab..d4c5b69c 100644 --- a/shaders/world0/gbuffers_beaconbeam.fsh +++ b/shaders/world0/gbuffers_beaconbeam.fsh @@ -1,6 +1,6 @@ #version 120 /* MakeUp - gbuffers_beaconbeam.fsh -Render: BEacon beam +Render: Beacon beam Javier Garduño - GNU Lesser General Public License v3.0 */ diff --git a/shaders/world1/gbuffers_beaconbeam.fsh b/shaders/world1/gbuffers_beaconbeam.fsh index 1d84dbbb..f9dc696b 100644 --- a/shaders/world1/gbuffers_beaconbeam.fsh +++ b/shaders/world1/gbuffers_beaconbeam.fsh @@ -1,6 +1,6 @@ #version 120 /* MakeUp - gbuffers_beaconbeam.fsh -Render: BEacon beam +Render: Beacon beam Javier Garduño - GNU Lesser General Public License v3.0 */ From fb08fe89bffe66c1cb0a0f7ae5cd80513282e087 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 6 Dec 2025 17:54:23 -0600 Subject: [PATCH 084/147] Version 9.3g --- README.md | 2 +- shaders/common/skybasic_vertex.glsl | 16 +++++++++------- shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 2 +- shaders/lang/es_ES.lang | 2 +- shaders/lang/es_MX.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- 10 files changed, 18 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 8f5b62ec..ebfc7604 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.3f +## Version: 9.3g ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/common/skybasic_vertex.glsl b/shaders/common/skybasic_vertex.glsl index fcafdcf6..1a83b780 100644 --- a/shaders/common/skybasic_vertex.glsl +++ b/shaders/common/skybasic_vertex.glsl @@ -49,13 +49,15 @@ void main() { gl_Position.xy += taa_offset * gl_Position.w; #endif - // star_data = vec4( - // float(gl_Color.r == gl_Color.g && - // gl_Color.g == gl_Color.b && - // gl_Color.r > 0.0) * gl_Color.r - // ); - - star_data = vec4(0.0); + #if !defined THE_END + star_data = vec4( + float(gl_Color.r == gl_Color.g && + gl_Color.g == gl_Color.b && + gl_Color.r > 0.0) * gl_Color.r + ); + #else + star_data = vec4(0.0); + #endif #if MC_VERSION < 11604 up_vec = normalize(gbufferModelView[1].xyz); diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 647db72c..b12e7cda 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -15,7 +15,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.3f +value.ACERCADE.0=v.9.3g #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index 6bcd1ea6..5f70b922 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3f +value.ACERCADE.0=v.9.3g # Opciones ############################# diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index 6bcd1ea6..5f70b922 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3f +value.ACERCADE.0=v.9.3g # Opciones ############################# diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index 6bcd1ea6..5f70b922 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3f +value.ACERCADE.0=v.9.3g # Opciones ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index a4979b59..cbddce56 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -15,7 +15,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.3f +value.ACERCADE.0=v.9.3g #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index d15fb7de..fc327bd3 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -15,7 +15,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.3f +value.ACERCADE.0=v.9.3g #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 2e8d1106..f63c7adc 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -15,7 +15,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.3f +value.ACERCADE.0=v.9.3g #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index d4d4ca76..4d53768b 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -15,7 +15,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.3f +value.ACERCADE.0=v.9.3g #Options ############################# From a39e4a7911671b3672567e9bc7187ee0bb4a2196 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 6 Dec 2025 20:07:01 -0600 Subject: [PATCH 085/147] Fix declaration in dithers --- shaders/lib/dither.glsl | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/shaders/lib/dither.glsl b/shaders/lib/dither.glsl index 1e4245fa..89ffe5c5 100644 --- a/shaders/lib/dither.glsl +++ b/shaders/lib/dither.glsl @@ -252,10 +252,6 @@ float dither_makeup(vec2 xy) { return fract((frame_mod * 0.4) + dot(frag, vec2(0.75487766624669276, 0.569840290998))); } - float shifted_r_dither(vec2 frag) { - return fract((frame_mod * 0.4) + dot(frag, vec2(0.75487766624669276, 0.569840290998))); - } - float shifted_eclectic_r_dither(vec2 frag) { vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); float state = fract(dot(v * v, vec2(3571.0))); @@ -269,6 +265,18 @@ float dither_makeup(vec2 xy) { return fract((frame_mod * 0.4) + dot(frag, vec2(0.3076923076923077, 0.5384615384615384))); } + float shifted_dither17(vec2 pos) { + return fract((frame_mod * 0.4) + dot(pos, vec2(0.11764705882352941, 0.4117647058823529))); + } + + float shifted_eclectic_dither17(vec2 frag) { + vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); + float state = fract(dot(v * v, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.15; + + return fract((frame_mod * 0.4)+ p4 + dot(frag, vec2(0.11764705882352941, 0.4117647058823529))); + } + float shifted_dither_grad_noise(vec2 frag) { return fract((frame_mod * 0.4) + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))); } From b7ff3849777436b8e33971940368c6190bf0d837 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 6 Dec 2025 20:30:36 -0600 Subject: [PATCH 086/147] Advance in 1.12.2 compatibility --- shaders/common/skybasic_fragment.glsl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/shaders/common/skybasic_fragment.glsl b/shaders/common/skybasic_fragment.glsl index 760002b7..ebdad52b 100644 --- a/shaders/common/skybasic_fragment.glsl +++ b/shaders/common/skybasic_fragment.glsl @@ -88,7 +88,10 @@ void main() { #endif #endif - block_color.rgba = vec4(texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb, clamp(star_data.a * 2.0, 0.0, 1.0)); + + #if MC_VERSION >= 11604 + block_color.rgba = vec4(texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb, clamp(star_data.a * 2.0, 0.0, 1.0)); + #endif #include "/src/writebuffers.glsl" } From 842e4245839b3d2f01f4b482133b563c74c2e2a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 6 Dec 2025 23:05:30 -0600 Subject: [PATCH 087/147] Advance in 1.14.X compatibility --- shaders/common/composite2_fragment.glsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shaders/common/composite2_fragment.glsl b/shaders/common/composite2_fragment.glsl index a5646f18..b83daf62 100644 --- a/shaders/common/composite2_fragment.glsl +++ b/shaders/common/composite2_fragment.glsl @@ -1,6 +1,6 @@ #include "/lib/config.glsl" -#if MC_VERSION < 11300 +#if MC_VERSION < 11604 const bool colortex0Clear = false; const bool colortex1Clear = false; const bool colortex2Clear = false; From b51841ad44d102c731efd4dd76aeb4fda7f3c55b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 6 Dec 2025 23:33:15 -0600 Subject: [PATCH 088/147] Version 9.3h --- README.md | 2 +- shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 2 +- shaders/lang/es_ES.lang | 2 +- shaders/lang/es_MX.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index ebfc7604..3c0901ea 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.3g +## Version: 9.3h ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index b12e7cda..7baf7119 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -15,7 +15,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.3g +value.ACERCADE.0=v.9.3h #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index 5f70b922..ebb09867 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3g +value.ACERCADE.0=v.9.3h # Opciones ############################# diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index 5f70b922..ebb09867 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3g +value.ACERCADE.0=v.9.3h # Opciones ############################# diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index 5f70b922..ebb09867 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3g +value.ACERCADE.0=v.9.3h # Opciones ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index cbddce56..8797da9c 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -15,7 +15,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.3g +value.ACERCADE.0=v.9.3h #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index fc327bd3..9ea63f4a 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -15,7 +15,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.3g +value.ACERCADE.0=v.9.3h #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index f63c7adc..b86de7e1 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -15,7 +15,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.3g +value.ACERCADE.0=v.9.3h #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 4d53768b..55145735 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -15,7 +15,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.3g +value.ACERCADE.0=v.9.3h #Options ############################# From 6db8eeeaa2cc68f5da59d51c2f8d43f678a52bdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Tue, 23 Dec 2025 18:05:23 -0600 Subject: [PATCH 089/147] Consistent bloom --- README.md | 2 +- shaders/common/composite1_fragment.glsl | 6 ++++++ shaders/common/composite2_fragment.glsl | 4 ++-- shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 2 +- shaders/lang/es_ES.lang | 2 +- shaders/lang/es_MX.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- shaders/lib/bloom.glsl | 8 ++++---- shaders/lib/config.glsl | 2 +- shaders/lib/dither.glsl | 3 ++- shaders/lib/fast_taa.glsl | 5 +++-- shaders/shaders.properties | 24 +++++++++++++++--------- 16 files changed, 42 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 3c0901ea..06474399 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.3h +## Version: 9.3i ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/common/composite1_fragment.glsl b/shaders/common/composite1_fragment.glsl index f1c253de..5fca292a 100644 --- a/shaders/common/composite1_fragment.glsl +++ b/shaders/common/composite1_fragment.glsl @@ -23,6 +23,10 @@ uniform float inv_aspect_ratio; uniform float fov_y_inv; #endif +#ifdef BLOOM + uniform float soft_lod; +#endif + /* Ins / Outs */ varying vec2 texcoord; @@ -59,6 +63,8 @@ void main() { #ifdef BLOOM vec3 bloom = mipmap_bloom(gaux1, texcoord, dither); block_color.rgb += bloom; + + // block_color.rgb = texture2DLod(gaux1, texcoord, soft_lod).rgb; #endif block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); diff --git a/shaders/common/composite2_fragment.glsl b/shaders/common/composite2_fragment.glsl index b83daf62..9805382c 100644 --- a/shaders/common/composite2_fragment.glsl +++ b/shaders/common/composite2_fragment.glsl @@ -1,6 +1,6 @@ #include "/lib/config.glsl" -#if MC_VERSION < 11604 +// #if MC_VERSION < 11604 const bool colortex0Clear = false; const bool colortex1Clear = false; const bool colortex2Clear = false; @@ -9,7 +9,7 @@ const bool gaux2Clear = false; const bool gaux3Clear = false; const bool gaux4Clear = false; -#endif +// #endif /* Uniforms */ diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 7baf7119..e384ef88 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -15,7 +15,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.3h +value.ACERCADE.0=v.9.3i #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index ebb09867..51df97f2 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3h +value.ACERCADE.0=v.9.3i # Opciones ############################# diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index ebb09867..51df97f2 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3h +value.ACERCADE.0=v.9.3i # Opciones ############################# diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index ebb09867..51df97f2 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3h +value.ACERCADE.0=v.9.3i # Opciones ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 8797da9c..7546e6b6 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -15,7 +15,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.3h +value.ACERCADE.0=v.9.3i #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 9ea63f4a..78c241e1 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -15,7 +15,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.3h +value.ACERCADE.0=v.9.3i #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index b86de7e1..42c7de68 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -15,7 +15,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.3h +value.ACERCADE.0=v.9.3i #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 55145735..d69b6279 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -15,7 +15,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.3h +value.ACERCADE.0=v.9.3i #Options ############################# diff --git a/shaders/lib/bloom.glsl b/shaders/lib/bloom.glsl index 74d0afb2..38191259 100644 --- a/shaders/lib/bloom.glsl +++ b/shaders/lib/bloom.glsl @@ -22,10 +22,10 @@ vec3 mipmap_bloom(sampler2D image, vec2 coords, float dither) { offset = vec2(cos(n), sin(n)) * dither_x * blur_radios_factor; offset_2 = vec2(-offset.y * 1.25, offset.x * 1.25); - blur_sample += texture2D(image, coords + offset, -1.0).rgb; - blur_sample += texture2D(image, coords - offset, -1.0).rgb; - blur_sample += texture2D(image, coords + offset_2, -1.0).rgb; - blur_sample += texture2D(image, coords - offset_2, -1.0).rgb; + blur_sample += texture2DLod(image, coords + offset, soft_lod).rgb; + blur_sample += texture2DLod(image, coords - offset, soft_lod).rgb; + blur_sample += texture2DLod(image, coords + offset_2, soft_lod).rgb; + blur_sample += texture2DLod(image, coords - offset_2, soft_lod).rgb; } blur_sample /= (BLOOM_SAMPLES * 4.0); diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index 99b897e5..cd673266 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -75,7 +75,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define END_CLOUDS // Activates drawing of clouds in the end (only works if volumetric clouds are active) #define BLACK_ENTITY_FIX 0 // [0 1] Removes black entity bug in old video drivers (activate ONLY if you have problems with black entities) #define BLOOM // Enable or disable bloom effect -#define BLOOM_SAMPLES 2.0 // [2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0] Bloom sample pairs. +#define BLOOM_SAMPLES 3.0 // [2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0] Bloom sample pairs. #define CHROMA_ABER 0 // [0 1] Enable chroma aberration. #define CHROMA_ABER_STRENGTH 0.04 // [0.04 0.05 0.06] Chroma aberration strength. #define VOL_LIGHT 1 // [0 1 2] Depth based: Turn on depth based godrays, faster and can work better than volumetric light for very short shadow distances. Volumetric: It activates the volumetric light, more accurate and faster, but it needs the shadows enabled to work. diff --git a/shaders/lib/dither.glsl b/shaders/lib/dither.glsl index 89ffe5c5..6acfd1dd 100644 --- a/shaders/lib/dither.glsl +++ b/shaders/lib/dither.glsl @@ -212,7 +212,7 @@ float dither_makeup(vec2 xy) { } float shifted_dither_makeup(vec2 xy) { - xy = xy + vec2(frame_mod * 3, frame_mod); + xy = xy + vec2(frame_mod * 7.0, frame_mod * 15.0); vec2 tile = floor(xy * 0.125); float flip = mod(tile.x + tile.y, 2.0); vec2 zw = mix(xy, xy.yx, flip); @@ -303,6 +303,7 @@ float dither_makeup(vec2 xy) { } float shifted_dither_makeup(vec2 xy) { + xy = xy + vec2(frame_mod * 7.0, frame_mod * 15.0); vec2 tile = floor(xy * 0.125); float flip = mod(tile.x + tile.y, 2.0); vec2 zw = mix(xy, xy.yx, flip); diff --git a/shaders/lib/fast_taa.glsl b/shaders/lib/fast_taa.glsl index 926c9208..946f8d30 100644 --- a/shaders/lib/fast_taa.glsl +++ b/shaders/lib/fast_taa.glsl @@ -219,7 +219,8 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { ); float ponderation = clamp((distance(c_max, c_min) - previous_cliped.a) / previous_cliped.a, 0.0, 1.0); - return mix(current_color, previous_cliped.rgb, 0.99 - (smoothstep(0.0, 1.0, ponderation) * 0.44)); + return mix(current_color, previous_cliped.rgb, 0.99 - (smoothstep(0.0, 1.0, ponderation) * 0.33)); + // return mix(current_color, previous_cliped.rgb, 0.01); } } @@ -258,6 +259,6 @@ vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { ); float ponderation = clamp((distance(c_max, c_min) - previous_cliped.a) / previous_cliped.a, 0.0, 1.0); - return mix(current_color, vec4(previous_cliped.rgb, previous.a), 0.99 - (smoothstep(0.0, 1.0, ponderation) * 0.39)); + return mix(current_color, vec4(previous_cliped.rgb, previous.a), 0.99 - (smoothstep(0.0, 1.0, ponderation) * 0.33)); } } diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 4ff9d973..cc8ef36e 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -1,14 +1,14 @@ # MakeUp - shader.properties #Profiles -profile.no_effects= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=0 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=0 SUN_REFLECTION=0 WAVING=0 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS -profile.shadowless_low= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS -profile.shadowless_medium= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.shadowless_high= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=2.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.no_effects= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=0 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=0 SUN_REFLECTION=0 WAVING=0 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS +profile.shadowless_low= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS +profile.shadowless_medium= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.shadowless_high= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS # Default forced options vignette = false @@ -221,4 +221,10 @@ uniform.float.fov_y_inv = 1.0 / atan(1.0 / gbufferProjection.1.1) * 0.5 #ifdef DISTANT_HORIZONS dhShadow.enabled = false blend.dh_water=SRC_ALPHA ONE_MINUS_SRC_ALPHA ONE ONE_MINUS_SRC_ALPHA -#endif \ No newline at end of file +#endif + +# BLOOM Mipmap level calculation +variable.float.soft_ref_height = 128.0 +variable.float.soft_lod_scale = max(1.0, viewHeight / soft_ref_height) +# Optifine use 'log'. Divide with ln(2) (0.69314718) +uniform.float.soft_lod = max(0.0, log(soft_lod_scale) / 0.69314718) \ No newline at end of file From 49748c195088b1743d5fb01a0def2eefa1d5314d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Thu, 1 Jan 2026 18:32:33 -0600 Subject: [PATCH 090/147] Illuminartion --- README.md | 2 +- shaders/common/composite1_fragment.glsl | 4 ++-- shaders/common/deferred_fragment.glsl | 4 ++-- shaders/common/solid_blocks_fragment.glsl | 4 ++-- shaders/common/solid_blocks_vertex.glsl | 2 +- shaders/lib/config.glsl | 2 +- shaders/lib/dither.glsl | 7 ++++--- shaders/lib/shadow_frag.glsl | 1 - shaders/shaders.properties | 16 ++++++++-------- shaders/src/light_vertex.glsl | 8 ++++++-- shaders/src/light_vertex_dh.glsl | 6 +++--- shaders/src/shadow_src_vertex.glsl | 1 + 12 files changed, 31 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 06474399..ca71956a 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ High performance Minecraft shader (Java). ## Tested on: * Minecraft 1.12.+ - 1.21.x -* Nvidia and Intel +* Nvidia, AMD, Intel * Windows and Linux ## You can: diff --git a/shaders/common/composite1_fragment.glsl b/shaders/common/composite1_fragment.glsl index 5fca292a..c9501cc3 100644 --- a/shaders/common/composite1_fragment.glsl +++ b/shaders/common/composite1_fragment.glsl @@ -50,9 +50,9 @@ void main() { #if defined BLOOM || defined DOF #if AA_TYPE > 0 - float dither = shifted_dither_makeup(gl_FragCoord.xy); + float dither = shifted_semiblue(gl_FragCoord.xy); #else - float dither = dither_makeup(gl_FragCoord.xy); + float dither = semiblue(gl_FragCoord.xy); #endif #endif diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index f3536f0d..e83aca47 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -116,9 +116,9 @@ void main() { #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) #if AA_TYPE > 0 - float dither = shifted_dither_makeup(gl_FragCoord.xy); + float dither = shifted_semiblue(gl_FragCoord.xy); #else - float dither = dither_makeup(gl_FragCoord.xy); + float dither = semiblue(gl_FragCoord.xy); #endif #endif diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 8b482597..abbf574d 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -116,9 +116,9 @@ varying vec3 omni_light; void main() { #if (defined SHADOW_CASTING && !defined NETHER) || defined DISTANT_HORIZONS #if AA_TYPE > 0 - float dither = shifted_dither_makeup(gl_FragCoord.xy); + float dither = shifted_dither13(gl_FragCoord.xy); #else - float dither = r_dither(gl_FragCoord.xy); + float dither = dither13(gl_FragCoord.xy); #endif #endif // Avoid render in DH transition diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index bda1ae0d..6e44b332 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -54,7 +54,7 @@ uniform mat4 gbufferProjectionInverse; uniform vec3 shadowLightPosition; #endif -#if WAVING == 1 +#if WAVING == 1 || defined SHADOW_CASTING uniform vec3 cameraPosition; uniform float frameTimeCounter; #endif diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index cd673266..66b5e5f1 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -53,7 +53,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 // #define DOF // Enables depth of field (high performance cost). #define DOF_STRENGTH 0.09 // [0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13] Depth of field strength. #define AO 1 // [0 1] Turn on for enhanced ambient occlusion (medium performance cost). -#define AOSTEPS 4 // [2 3 4 5 6 7 8 9 10 11] How many samples are taken for AO (high performance cost). +#define AOSTEPS 5 // [2 3 4 5 6 7 8 9 10 11] How many samples are taken for AO (high performance cost). #define AO_STRENGTH 0.70 // [0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.66 0.70 0.75 0.80 0.85] Ambient occlusion strength (strength NOT affect performance). #define AA_TYPE 2 // [0 1 2 3] No: Disable antialiasing (not recommended). Denoise only: Supersampling is only used to eliminate noise. TAA: Enable antialiasing. TAA+: Use FXAA to improve the result of TAA. It does not apply if chromatic aberration or DoF is being used. //#define MOTION_BLUR // Turn on motion blur diff --git a/shaders/lib/dither.glsl b/shaders/lib/dither.glsl index 6acfd1dd..8e0b24ff 100644 --- a/shaders/lib/dither.glsl +++ b/shaders/lib/dither.glsl @@ -204,6 +204,7 @@ float dither_makeup(vec2 xy) { } float shifted_semiblue(vec2 xy) { + xy = xy + vec2(frame_mod * 5.0, frame_mod * 15.0); vec2 tile = floor(xy * 0.25); float flip = mod(tile.x + tile.y, 2.0); xy = mix(xy, xy.yx, flip); @@ -212,7 +213,7 @@ float dither_makeup(vec2 xy) { } float shifted_dither_makeup(vec2 xy) { - xy = xy + vec2(frame_mod * 7.0, frame_mod * 15.0); + xy = xy + vec2(frame_mod * 9.0, frame_mod * 15.0); vec2 tile = floor(xy * 0.125); float flip = mod(tile.x + tile.y, 2.0); vec2 zw = mix(xy, xy.yx, flip); @@ -220,7 +221,7 @@ float dither_makeup(vec2 xy) { return fract( dither_shift + dot(vec2(0.24512233375330728, 0.4301597090019468), zw) + - dot(vec2(0.735151469707489, 0.737424373626709), tile) + dot(vec2(0.9996657054871321, 0.9998746076598763), tile) ); } @@ -311,7 +312,7 @@ float dither_makeup(vec2 xy) { return fract( (frame_mod * 0.4) + dot(vec2(0.24512233375330728, 0.4301597090019468), zw) + - dot(vec2(0.735151469707489, 0.737424373626709), tile) + dot(vec2(0.9996657054871321, 0.9998746076598763), tile) ); } diff --git a/shaders/lib/shadow_frag.glsl b/shaders/lib/shadow_frag.glsl index 88fe230c..ae132ea5 100644 --- a/shaders/lib/shadow_frag.glsl +++ b/shaders/lib/shadow_frag.glsl @@ -18,7 +18,6 @@ float get_shadow(vec3 the_shadow_pos, float dither) { vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; vec2 offset_2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; - // vec2 offset_2 = vec2(-offset.y, offset.x); float z_bias = dither * 0.00002; diff --git a/shaders/shaders.properties b/shaders/shaders.properties index cc8ef36e..058f0bc1 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -1,14 +1,14 @@ # MakeUp - shader.properties #Profiles -profile.no_effects= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=0 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=0 SUN_REFLECTION=0 WAVING=0 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS -profile.shadowless_low= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS -profile.shadowless_medium= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.shadowless_high= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.no_effects= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=0 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=5 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=0 SUN_REFLECTION=0 WAVING=0 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS +profile.shadowless_low= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=5 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS +profile.shadowless_medium= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=5 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.shadowless_high= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=5 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=5 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=5 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=5 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=5 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS # Default forced options vignette = false diff --git a/shaders/src/light_vertex.glsl b/shaders/src/light_vertex.glsl index 42003c61..aebc9d46 100644 --- a/shaders/src/light_vertex.glsl +++ b/shaders/src/light_vertex.glsl @@ -55,7 +55,8 @@ if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals #endif // Omni light intensity changes by angle -float omni_strength = (direct_light_strength * .125) + 1.0; +// float omni_strength = (direct_light_strength * .125) + 1.0; +// float omni_strength = (direct_light_strength) + 1.0; // Direct light color #ifdef UNKNOWN_DIM @@ -67,6 +68,9 @@ float omni_strength = (direct_light_strength * .125) + 1.0; #endif #endif +// Omni light intensity changes by angle +float omni_strength = ((direct_light_strength + 1.0) * 0.25) + 1.0; + // Direct light strenght -- #ifdef FOLIAGE_V // This shader has foliage // --- CORRECCIÓN: La variable se declara y calcula aquí, fuera del if/else --- @@ -105,7 +109,7 @@ float omni_strength = (direct_light_strength * .125) + 1.0; vec3 omni_color_min = omni_color * luma_ratio; omni_color = max(omni_color, omni_color_min); - omni_light = mix(omni_color_min, omni_color, visible_sky); + omni_light = mix(omni_color_min, omni_color, visible_sky) * omni_strength; #endif // Avoid flat illumination in caves for entities diff --git a/shaders/src/light_vertex_dh.glsl b/shaders/src/light_vertex_dh.glsl index 0604d4c2..16c59260 100644 --- a/shaders/src/light_vertex_dh.glsl +++ b/shaders/src/light_vertex_dh.glsl @@ -44,8 +44,8 @@ if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals direct_light_strength = mix(-sun_light_strength, sun_light_strength, light_mix); #endif -// Intensidad por dirección -float omni_strength = (direct_light_strength * .125) + 1.0; +// Omni light intensity changes by angle +float omni_strength = ((direct_light_strength + 1.0) * 0.25) + 1.0; // Calculamos color de luz directa #ifdef UNKNOWN_DIM @@ -74,7 +74,7 @@ direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); vec3 omni_color_min = omni_color * luma_ratio; omni_color = max(omni_color, omni_color_min); - omni_light = mix(omni_color_min, omni_color, visible_sky); + omni_light = mix(omni_color_min, omni_color, visible_sky) * omni_strength; #endif if (isEyeInWater == 0) { diff --git a/shaders/src/shadow_src_vertex.glsl b/shaders/src/shadow_src_vertex.glsl index deed8c78..92a87d9b 100644 --- a/shaders/src/shadow_src_vertex.glsl +++ b/shaders/src/shadow_src_vertex.glsl @@ -22,6 +22,7 @@ vec3 shadow_world_normal = normalize(mat3(gbufferModelViewInverse) * normal); vec3 bias = shadow_world_normal * min(SHADOW_FIX_FACTOR + length(position.xyz) * 0.005, 0.5) * (2.0 - max(NdotL, 0.0)); vec3 shadow_world = position.xyz + bias; + shadow_pos = get_shadow_pos(shadow_world); // --- OPTIMIZACIÓN: Reemplazar sqrt() y el costoso pow() --- From aef22cba32c35ac467f25bc178d483d9c9d8d253 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Fri, 2 Jan 2026 00:41:20 -0600 Subject: [PATCH 091/147] Locked shadows (partial) --- shaders/common/solid_blocks_fragment.glsl | 49 ++++++++++++++++++++--- shaders/common/solid_blocks_vertex.glsl | 13 +++++- shaders/lang/en_US.lang | 8 ++++ shaders/lib/config.glsl | 1 + shaders/shaders.properties | 2 +- shaders/src/light_vertex.glsl | 1 - shaders/src/position_vertex.glsl | 4 ++ 7 files changed, 69 insertions(+), 9 deletions(-) diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index abbf574d..983b2a00 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -59,9 +59,17 @@ uniform float blindness; uniform int worldTime; uniform vec3 moonPosition; uniform vec3 sunPosition; - #if defined THE_END - uniform mat4 gbufferModelView; - #endif +#endif + +#if SHADOW_LOCK > 0 && defined SHADOW_CASTING + uniform vec3 cameraPosition; + uniform mat4 shadowModelView; + uniform mat4 shadowProjection; + uniform vec3 shadowLightPosition; +#endif + +#if defined THE_END || (SHADOW_LOCK > 0 && defined SHADOW_CASTING && !defined NETHER) + uniform mat4 gbufferModelView; #endif /* Ins / Outs */ @@ -74,6 +82,12 @@ varying vec3 candle_color; varying float direct_light_strength; varying vec3 omni_light; +#if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER + varying vec3 vWorldPos; + varying vec3 vNormal; + varying vec3 vBias; +#endif + #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND varying float emmisive_type; #endif @@ -113,12 +127,16 @@ varying vec3 omni_light; #include "/lib/material_gloss_fragment.glsl" #endif +#if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER + #include "/lib/shadow_vertex.glsl" +#endif + void main() { #if (defined SHADOW_CASTING && !defined NETHER) || defined DISTANT_HORIZONS #if AA_TYPE > 0 float dither = shifted_dither13(gl_FragCoord.xy); #else - float dither = dither13(gl_FragCoord.xy); + float dither = dither17(gl_FragCoord.xy); #endif #endif // Avoid render in DH transition @@ -165,11 +183,30 @@ void main() { #endif #if defined SHADOW_CASTING && !defined NETHER + #if SHADOW_LOCK > 0 + // 1. PRE-SNAP OFFSET (Estabilizador) + // Usamos la normal que nos llegó del vertex para el empujoncito. + // vec3 offsetVector = normalize(vNormal) * 0.002; + vec3 offsetVector = vNormal * 0.002; + vec3 preSnapPos = vWorldPos + offsetVector; + + // 2. SNAPPING (VOXELIZACIÓN) + float texelSize = SHADOW_LOCK; + vec3 absPos = preSnapPos + cameraPosition; + // Redondeo al bloque + vec3 snappedAbsolute = floor(absPos * texelSize) / texelSize; + snappedAbsolute += 0.5 / texelSize; // Centrar en el texel + vec3 final_world_pos = (snappedAbsolute - cameraPosition) + vBias; + vec3 shadow_real_pos = get_shadow_pos(final_world_pos); + #else + vec3 shadow_real_pos = shadow_pos; + #endif + #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_pos, dither); + vec3 shadow_c = get_colored_shadow(shadow_real_pos, dither); shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); #else - float shadow_c = get_shadow(shadow_pos, dither); + float shadow_c = get_shadow(shadow_real_pos, dither); shadow_c = mix(shadow_c, 1.0, shadow_diffuse); #endif #else diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index 6e44b332..25f42e0c 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -54,7 +54,7 @@ uniform mat4 gbufferProjectionInverse; uniform vec3 shadowLightPosition; #endif -#if WAVING == 1 || defined SHADOW_CASTING +#if WAVING == 1 uniform vec3 cameraPosition; uniform float frameTimeCounter; #endif @@ -73,6 +73,12 @@ varying vec3 candle_color; varying float direct_light_strength; varying vec3 omni_light; +#if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER + varying vec3 vWorldPos; + varying vec3 vNormal; + varying vec3 vBias; +#endif + #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND varying float emmisive_type; #endif @@ -185,4 +191,9 @@ void main() { #if defined GBUFFER_ENTITY_GLOW gl_Position.z *= 0.01; #endif + + #if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER + vNormal = shadow_world_normal; + vBias = bias; + #endif } diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index e384ef88..ccecdf12 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -255,6 +255,14 @@ screen.COMPATIBILITY_SCREEN.comment=Set compatibility options screen.SHADOWS_SCREEN=Shadows screen.SHADOWS_SCREEN.comment=Set shadows options +option.SHADOW_LOCK=Pixel locked shadows +value.SHADOW_LOCK.0=Disabled +value.SHADOW_LOCK.16=16x16 +value.SHADOW_LOCK.32=32x32 +value.SHADOW_LOCK.64=64x64 +value.SHADOW_LOCK.128=128x128 +value.SHADOW_LOCK.256=256x256 + screen.DOF_SCREEN=Depth of field screen.DOF_SCREEN.comment=Set depth of field options diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index 66b5e5f1..c92d2106 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -199,6 +199,7 @@ const float sunPathRotation = -25.0; // [-40.0 -35.0 -30.0 -25.0 -20.0 -15.0 -10 #define SHADOW_DISTANCE_SLIDER 1 // [0 1 2] #define SHADOW_QTY_SLIDER 2 // [1 2 3] +#define SHADOW_LOCK 16 // [0 16 32 64 128 256] #define SHADOW_CASTING // Enable or disable shadows. Configure quality in advanced options. diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 058f0bc1..ec6883cb 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -55,7 +55,7 @@ screen.ADVANCED_SCREEN.columns=3 screen.ADVANCED_SCREEN = [COMPATIBILITY_SCREEN] [ACCESIBILITY_SCREEN] [CUSTOM_COLORS_SCREEN] [SHADOWS_SCREEN] [DOF_SCREEN] [AO_SCREEN] [WATER_SCREEN] [POST_SCREEN] [CLOUDS_SCREEN] [LIGHT_SCREEN] [FOG_SCREEN] [MOTION_BLUR_SCREEN] screen.COMPATIBILITY_SCREEN = USE_BASIC_SH BLACK_ENTITY_FIX DEBUG_MODE -screen.SHADOWS_SCREEN = SHADOW_TYPE SHADOW_BLUR SHADOW_DISTANCE_SLIDER SHADOW_QTY_SLIDER +screen.SHADOWS_SCREEN = SHADOW_TYPE SHADOW_BLUR SHADOW_DISTANCE_SLIDER SHADOW_QTY_SLIDER SHADOW_LOCK screen.DOF_SCREEN = DOF_STRENGTH screen.AO_SCREEN = AOSTEPS AO_STRENGTH screen.WATER_SCREEN = WATER_ABSORPTION WATER_TEXTURE VANILLA_WATER WATER_COLOR_SOURCE WATER_TURBULENCE diff --git a/shaders/src/light_vertex.glsl b/shaders/src/light_vertex.glsl index aebc9d46..7600d0fa 100644 --- a/shaders/src/light_vertex.glsl +++ b/shaders/src/light_vertex.glsl @@ -39,7 +39,6 @@ candle_color = clamp(candle_color, vec3(0.0), vec3(4.0)); vec3 normal = gl_NormalMatrix * gl_Normal; float sun_light_strength; -// Evitar length() en el condicional --- if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals normal = normalize(normal); sun_light_strength = dot(normal, sun_vec); diff --git a/shaders/src/position_vertex.glsl b/shaders/src/position_vertex.glsl index df2bbe44..fa50ee74 100644 --- a/shaders/src/position_vertex.glsl +++ b/shaders/src/position_vertex.glsl @@ -74,4 +74,8 @@ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; #else gl_FogFragCoord = length(viewPos.xyz); #endif +#endif + +#if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER && !defined GBUFFER_BASIC && !defined GBUFFER_CLOUDS && !defined GBUFFER_ARMOR_GLINT && !defined GBUFFER_SPIDEREYES + vWorldPos = position.xyz; #endif \ No newline at end of file From 0162db1ce2b0aeb86b421a5beaf2531967dd93d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 3 Jan 2026 01:14:26 -0600 Subject: [PATCH 092/147] Version 9.4 --- shaders/lang/es_AR.lang | 8 ++++++++ shaders/lang/es_ES.lang | 8 ++++++++ shaders/lang/es_MX.lang | 8 ++++++++ shaders/lang/ko_KR.lang | 8 ++++++++ shaders/lang/sv_SE.lang | 8 ++++++++ shaders/lang/tr_TR.lang | 8 ++++++++ shaders/lang/zh_CN.lang | 8 ++++++++ shaders/lib/config.glsl | 2 +- shaders/src/light_vertex.glsl | 4 ++-- shaders/src/light_vertex_dh.glsl | 2 +- 10 files changed, 60 insertions(+), 4 deletions(-) diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index 51df97f2..3f5b8c62 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -255,6 +255,14 @@ screen.COMPATIBILITY_SCREEN.comment=Configurar opciones de compatibilidad screen.SHADOWS_SCREEN=Sombras screen.SHADOWS_SCREEN.comment=Configurar opciones de sombras +option.SHADOW_LOCK=Sombras pixeladas +value.SHADOW_LOCK.0=Deshabilitado +value.SHADOW_LOCK.16=16x16 +value.SHADOW_LOCK.32=32x32 +value.SHADOW_LOCK.64=64x64 +value.SHADOW_LOCK.128=128x128 +value.SHADOW_LOCK.256=256x256 + screen.DOF_SCREEN=Profundidad de campo screen.DOF_SCREEN.comment=Configurar opciones de profundidad de campo diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index 51df97f2..3f5b8c62 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -255,6 +255,14 @@ screen.COMPATIBILITY_SCREEN.comment=Configurar opciones de compatibilidad screen.SHADOWS_SCREEN=Sombras screen.SHADOWS_SCREEN.comment=Configurar opciones de sombras +option.SHADOW_LOCK=Sombras pixeladas +value.SHADOW_LOCK.0=Deshabilitado +value.SHADOW_LOCK.16=16x16 +value.SHADOW_LOCK.32=32x32 +value.SHADOW_LOCK.64=64x64 +value.SHADOW_LOCK.128=128x128 +value.SHADOW_LOCK.256=256x256 + screen.DOF_SCREEN=Profundidad de campo screen.DOF_SCREEN.comment=Configurar opciones de profundidad de campo diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index 51df97f2..3f5b8c62 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -255,6 +255,14 @@ screen.COMPATIBILITY_SCREEN.comment=Configurar opciones de compatibilidad screen.SHADOWS_SCREEN=Sombras screen.SHADOWS_SCREEN.comment=Configurar opciones de sombras +option.SHADOW_LOCK=Sombras pixeladas +value.SHADOW_LOCK.0=Deshabilitado +value.SHADOW_LOCK.16=16x16 +value.SHADOW_LOCK.32=32x32 +value.SHADOW_LOCK.64=64x64 +value.SHADOW_LOCK.128=128x128 +value.SHADOW_LOCK.256=256x256 + screen.DOF_SCREEN=Profundidad de campo screen.DOF_SCREEN.comment=Configurar opciones de profundidad de campo diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 7546e6b6..187c228e 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -254,6 +254,14 @@ screen.COMPATIBILITY_SCREEN.comment=호환성 옵션 설정 screen.SHADOWS_SCREEN=그림자 screen.SHADOWS_SCREEN.comment=그림자 옵션 설정 +option.SHADOW_LOCK=Pixel locked shadows +value.SHADOW_LOCK.0=Disabled +value.SHADOW_LOCK.16=16x16 +value.SHADOW_LOCK.32=32x32 +value.SHADOW_LOCK.64=64x64 +value.SHADOW_LOCK.128=128x128 +value.SHADOW_LOCK.256=256x256 + screen.DOF_SCREEN=깊이 감지 screen.DOF_SCREEN.comment=깊이 감지 옵션 설정 diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 78c241e1..b50d4174 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -254,6 +254,14 @@ screen.COMPATIBILITY_SCREEN.comment=Ställ in kompatibilitetsalternativ screen.SHADOWS_SCREEN=Skuggor screen.SHADOWS_SCREEN.comment=Ändra skuggalternativ +option.SHADOW_LOCK=Pixel locked shadows +value.SHADOW_LOCK.0=Disabled +value.SHADOW_LOCK.16=16x16 +value.SHADOW_LOCK.32=32x32 +value.SHADOW_LOCK.64=64x64 +value.SHADOW_LOCK.128=128x128 +value.SHADOW_LOCK.256=256x256 + screen.DOF_SCREEN=Skärpedjup screen.DOF_SCREEN.comment=Ändra skärpedjupsalternativ diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 42c7de68..027e71c6 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -250,6 +250,14 @@ screen.COMPATIBILITY_SCREEN.comment=Uyumluluk seçeneklerini ayarlayın. screen.SHADOWS_SCREEN=Gölgeler screen.SHADOWS_SCREEN.comment=Gölge seçeneklerini ayarlayın. +option.SHADOW_LOCK=Pixel locked shadows +value.SHADOW_LOCK.0=Disabled +value.SHADOW_LOCK.16=16x16 +value.SHADOW_LOCK.32=32x32 +value.SHADOW_LOCK.64=64x64 +value.SHADOW_LOCK.128=128x128 +value.SHADOW_LOCK.256=256x256 + screen.DOF_SCREEN=Alan derinliği screen.DOF_SCREEN.comment=Alan derinliği (AD) seçeneklerini ayarlayın. diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index d69b6279..23203150 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -255,6 +255,14 @@ screen.COMPATIBILITY_SCREEN.comment=设置兼容性选项 screen.SHADOWS_SCREEN=阴影 screen.SHADOWS_SCREEN.comment=设置阴影选项 +option.SHADOW_LOCK=Pixel locked shadows +value.SHADOW_LOCK.0=Disabled +value.SHADOW_LOCK.16=16x16 +value.SHADOW_LOCK.32=32x32 +value.SHADOW_LOCK.64=64x64 +value.SHADOW_LOCK.128=128x128 +value.SHADOW_LOCK.256=256x256 + screen.DOF_SCREEN=景深 screen.DOF_SCREEN.comment=设置景深选项 diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index c92d2106..22fe2e0b 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -199,7 +199,7 @@ const float sunPathRotation = -25.0; // [-40.0 -35.0 -30.0 -25.0 -20.0 -15.0 -10 #define SHADOW_DISTANCE_SLIDER 1 // [0 1 2] #define SHADOW_QTY_SLIDER 2 // [1 2 3] -#define SHADOW_LOCK 16 // [0 16 32 64 128 256] +#define SHADOW_LOCK 0 // [0 16 32 64 128 256] #define SHADOW_CASTING // Enable or disable shadows. Configure quality in advanced options. diff --git a/shaders/src/light_vertex.glsl b/shaders/src/light_vertex.glsl index 7600d0fa..ec292528 100644 --- a/shaders/src/light_vertex.glsl +++ b/shaders/src/light_vertex.glsl @@ -68,7 +68,7 @@ if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals #endif // Omni light intensity changes by angle -float omni_strength = ((direct_light_strength + 1.0) * 0.25) + 1.0; +float omni_strength = ((direct_light_strength + 1.0) * 0.25) + 0.75; // Direct light strenght -- #ifdef FOLIAGE_V // This shader has foliage @@ -96,7 +96,7 @@ float omni_strength = ((direct_light_strength + 1.0) * 0.25) + 1.0; // Omni light color #if defined THE_END || defined NETHER - omni_light = LIGHT_DAY_COLOR; + omni_light = LIGHT_DAY_COLOR * omni_strength; #else direct_light_color = mix(direct_light_color, ZENITH_SKY_RAIN_COLOR * luma(direct_light_color) * 0.4, rainStrength); diff --git a/shaders/src/light_vertex_dh.glsl b/shaders/src/light_vertex_dh.glsl index 16c59260..db41c8c5 100644 --- a/shaders/src/light_vertex_dh.glsl +++ b/shaders/src/light_vertex_dh.glsl @@ -45,7 +45,7 @@ if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals #endif // Omni light intensity changes by angle -float omni_strength = ((direct_light_strength + 1.0) * 0.25) + 1.0; +float omni_strength = ((direct_light_strength + 1.0) * 0.25) + 0.75; // Calculamos color de luz directa #ifdef UNKNOWN_DIM From e80073c24d3129209a95a845d123cd352aedd22b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 3 Jan 2026 18:21:07 -0600 Subject: [PATCH 093/147] Broken water shadow --- README.md | 2 +- shaders/common/solid_blocks_fragment.glsl | 5 --- shaders/common/water_blocks_fragment.glsl | 39 +++++++++++++++++++++-- shaders/common/water_blocks_vertex.glsl | 11 +++++++ shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 2 +- shaders/lang/es_ES.lang | 2 +- shaders/lang/es_MX.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- shaders/src/position_vertex_water.glsl | 5 +-- 13 files changed, 59 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index ca71956a..f9e5171b 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.3i +## Version: 9.4 ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 983b2a00..9a7255d7 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -184,13 +184,8 @@ void main() { #if defined SHADOW_CASTING && !defined NETHER #if SHADOW_LOCK > 0 - // 1. PRE-SNAP OFFSET (Estabilizador) - // Usamos la normal que nos llegó del vertex para el empujoncito. - // vec3 offsetVector = normalize(vNormal) * 0.002; vec3 offsetVector = vNormal * 0.002; vec3 preSnapPos = vWorldPos + offsetVector; - - // 2. SNAPPING (VOXELIZACIÓN) float texelSize = SHADOW_LOCK; vec3 absPos = preSnapPos + cameraPosition; // Redondeo al bloque diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index 459a78e0..fa1784f9 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -33,6 +33,7 @@ uniform float rainStrength; uniform float light_mix; uniform ivec2 eyeBrightnessSmooth; uniform sampler2D gaux4; +uniform vec3 cameraPosition; #if defined DISTANT_HORIZONS uniform float dhNearPlane; @@ -61,7 +62,6 @@ uniform sampler2D gaux4; #endif #if defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER - uniform vec3 cameraPosition; uniform mat4 gbufferModelViewInverse; #endif @@ -72,6 +72,16 @@ uniform float blindness; uniform float darknessLightFactor; #endif +#if SHADOW_LOCK > 0 && defined SHADOW_CASTING + uniform mat4 shadowModelView; + uniform mat4 shadowProjection; + uniform vec3 shadowLightPosition; +#endif + +#if defined THE_END || (SHADOW_LOCK > 0 && defined SHADOW_CASTING && !defined NETHER) + uniform mat4 gbufferModelView; +#endif + /* Ins / Outs */ varying vec2 texcoord; @@ -98,6 +108,12 @@ varying vec3 low_sky_color; varying float shadow_diffuse; #endif +#if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER + varying vec3 vWorldPos; + varying vec3 vNormal; + varying vec3 vBias; +#endif + #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY varying float umbral; varying vec3 cloud_color; @@ -121,6 +137,10 @@ varying vec3 low_sky_color; #include "/lib/volumetric_clouds.glsl" #endif +#if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER + #include "/lib/shadow_vertex.glsl" +#endif + // MAIN FUNCTION ------------------ void main() { @@ -174,11 +194,24 @@ void main() { #ifdef VANILLA_WATER block_color = texture2D(tex, texcoord); #if defined SHADOW_CASTING && !defined NETHER + #if SHADOW_LOCK > 0 + vec3 offsetVector = vNormal * 0.002; + vec3 preSnapPos = vWorldPos + offsetVector; + float texelSize = SHADOW_LOCK; + vec3 absPos = preSnapPos + cameraPosition; + // Redondeo al bloque + vec3 snappedAbsolute = floor(absPos * texelSize) / texelSize; + snappedAbsolute += 0.5 / texelSize; // Centrar en el texel + vec3 final_world_pos = (snappedAbsolute - cameraPosition) + vBias; + vec3 shadow_real_pos = get_shadow_pos(final_world_pos); + #else + vec3 shadow_real_pos = shadow_pos; + #endif #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_pos, dither); + vec3 shadow_c = get_colored_shadow(shadow_real_pos, dither); shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); #else - float shadow_c = get_shadow(shadow_pos, dither); + float shadow_c = get_shadow(shadow_real_pos, dither); shadow_c = mix(shadow_c, 1.0, shadow_diffuse); #endif #else diff --git a/shaders/common/water_blocks_vertex.glsl b/shaders/common/water_blocks_vertex.glsl index 166f881f..08853e15 100644 --- a/shaders/common/water_blocks_vertex.glsl +++ b/shaders/common/water_blocks_vertex.glsl @@ -68,6 +68,12 @@ varying vec3 up_vec; varying vec3 hi_sky_color; varying vec3 low_sky_color; +#if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER + varying vec3 vWorldPos; + varying vec3 vNormal; + varying vec3 vBias; +#endif + #if defined SHADOW_CASTING && !defined NETHER varying vec3 shadow_pos; varying float shadow_diffuse; @@ -136,4 +142,9 @@ void main() { #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY #include "/lib/volumetric_clouds_vertex.glsl" #endif + + #if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER + vNormal = shadow_world_normal; + vBias = bias; + #endif } diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index ccecdf12..e9f56025 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -15,7 +15,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.3i +value.ACERCADE.0=v.9.4 #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index 3f5b8c62..0cb0c7e8 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3i +value.ACERCADE.0=v.9.4 # Opciones ############################# diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index 3f5b8c62..0cb0c7e8 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3i +value.ACERCADE.0=v.9.4 # Opciones ############################# diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index 3f5b8c62..0cb0c7e8 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.3i +value.ACERCADE.0=v.9.4 # Opciones ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 187c228e..a7493567 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -15,7 +15,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.3i +value.ACERCADE.0=v.9.4 #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index b50d4174..2a4e08c7 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -15,7 +15,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.3i +value.ACERCADE.0=v.9.4 #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 027e71c6..94a21e6c 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -15,7 +15,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.3i +value.ACERCADE.0=v.9.4 #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 23203150..7f7a37f1 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -15,7 +15,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.3i +value.ACERCADE.0=v.9.4 #Options ############################# diff --git a/shaders/src/position_vertex_water.glsl b/shaders/src/position_vertex_water.glsl index 3d44db03..53d78820 100644 --- a/shaders/src/position_vertex_water.glsl +++ b/shaders/src/position_vertex_water.glsl @@ -10,5 +10,6 @@ gl_FogFragCoord = length(position2.xyz); gl_Position.xy += taa_offset * gl_Position.w; #endif - - +#if defined SHADOW_CASTING && SHADOW_LOCK > 0 + vWorldPos = position.xyz; +#endif From d93e2f876fbc23ae79b5ad2db22cba2b74160332 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 3 Jan 2026 18:47:55 -0600 Subject: [PATCH 094/147] Version 9.4 --- shaders/shaders.properties | 4 ++-- shaders/src/position_vertex_water.glsl | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/shaders/shaders.properties b/shaders/shaders.properties index ec6883cb..5e03efbd 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -48,7 +48,7 @@ program.world-1/shadow.enabled=SHADOW_CASTING # Config main screen screen.columns = 3 -screen = ACERCADE WAVING COLOR_SCHEME BLOOM REFLECTION_SLIDER AO SUN_REFLECTION SHADOW_CASTING V_CLOUDS CLOUD_REFLECTION COLORED_SHADOW AA_TYPE REFRACTION VOL_LIGHT DOF MATERIAL_GLOSS CHROMA_ABER MOTION_BLUR [ADVANCED_SCREEN] +screen = ACERCADE WAVING COLOR_SCHEME BLOOM REFLECTION_SLIDER AO SUN_REFLECTION SHADOW_CASTING V_CLOUDS CLOUD_REFLECTION COLORED_SHADOW AA_TYPE REFRACTION SHADOW_LOCK DOF MATERIAL_GLOSS VOL_LIGHT CHROMA_ABER MOTION_BLUR [ADVANCED_SCREEN] # Sub-screens: screen.ADVANCED_SCREEN.columns=3 @@ -84,7 +84,7 @@ screen.CUSTOM_COLORS_NV = NV_COLOR_R NV_COLOR_G NV_COLOR_B screen.CUSTOM_COLORS_SCREEN.columns=1 screen.CUSTOM_COLORS_SCREEN = [CUSTOM_COLORS_DAY] [CUSTOM_COLORS_SUNSET] [CUSTOM_COLORS_NIGHT] [CUSTOM_COLORS_WATER] [CUSTOM_COLORS_NV] OMNI_TINT_CUSTOM -sliders = SHADOW_DISTANCE_SLIDER SHADOW_QTY_SLIDER REFLECTION_SLIDER SHADOW_BLUR DOF_STRENGTH AOSTEPS AO_STRENGTH MOTION_BLUR_STRENGTH WATER_ABSORPTION CHROMA_ABER_STRENGTH BLOOM_SAMPLES CLOUD_STEPS_AVG sunPathRotation NIGHT_BRIGHT AVOID_DARK_LEVEL WATER_TURBULENCE FOG_ADJUST MOTION_BLUR_SAMPLES BLOCKLIGHT_TEMP LIGHT_DAY_COLOR_R LIGHT_DAY_COLOR_G LIGHT_DAY_COLOR_B ZENITH_DAY_COLOR_R ZENITH_DAY_COLOR_G ZENITH_DAY_COLOR_B HORIZON_DAY_COLOR_R HORIZON_DAY_COLOR_G HORIZON_DAY_COLOR_B LIGHT_SUNSET_COLOR_R LIGHT_SUNSET_COLOR_G LIGHT_SUNSET_COLOR_B ZENITH_SUNSET_COLOR_R ZENITH_SUNSET_COLOR_G ZENITH_SUNSET_COLOR_B HORIZON_SUNSET_COLOR_R HORIZON_SUNSET_COLOR_G HORIZON_SUNSET_COLOR_B LIGHT_NIGHT_COLOR_R LIGHT_NIGHT_COLOR_G LIGHT_NIGHT_COLOR_B ZENITH_NIGHT_COLOR_R ZENITH_NIGHT_COLOR_G ZENITH_NIGHT_COLOR_B HORIZON_NIGHT_COLOR_R HORIZON_NIGHT_COLOR_G HORIZON_NIGHT_COLOR_B WATER_COLOR_R WATER_COLOR_G WATER_COLOR_B NV_COLOR_R NV_COLOR_G NV_COLOR_B OMNI_TINT_CUSTOM +sliders = SHADOW_DISTANCE_SLIDER SHADOW_QTY_SLIDER REFLECTION_SLIDER SHADOW_BLUR DOF_STRENGTH AOSTEPS AO_STRENGTH MOTION_BLUR_STRENGTH WATER_ABSORPTION CHROMA_ABER_STRENGTH BLOOM_SAMPLES CLOUD_STEPS_AVG sunPathRotation NIGHT_BRIGHT AVOID_DARK_LEVEL WATER_TURBULENCE FOG_ADJUST MOTION_BLUR_SAMPLES BLOCKLIGHT_TEMP LIGHT_DAY_COLOR_R LIGHT_DAY_COLOR_G LIGHT_DAY_COLOR_B ZENITH_DAY_COLOR_R ZENITH_DAY_COLOR_G ZENITH_DAY_COLOR_B HORIZON_DAY_COLOR_R HORIZON_DAY_COLOR_G HORIZON_DAY_COLOR_B LIGHT_SUNSET_COLOR_R LIGHT_SUNSET_COLOR_G LIGHT_SUNSET_COLOR_B ZENITH_SUNSET_COLOR_R ZENITH_SUNSET_COLOR_G ZENITH_SUNSET_COLOR_B HORIZON_SUNSET_COLOR_R HORIZON_SUNSET_COLOR_G HORIZON_SUNSET_COLOR_B LIGHT_NIGHT_COLOR_R LIGHT_NIGHT_COLOR_G LIGHT_NIGHT_COLOR_B ZENITH_NIGHT_COLOR_R ZENITH_NIGHT_COLOR_G ZENITH_NIGHT_COLOR_B HORIZON_NIGHT_COLOR_R HORIZON_NIGHT_COLOR_G HORIZON_NIGHT_COLOR_B WATER_COLOR_R WATER_COLOR_G WATER_COLOR_B NV_COLOR_R NV_COLOR_G NV_COLOR_B OMNI_TINT_CUSTOM SHADOW_LOCK # Custom uniforms ----- diff --git a/shaders/src/position_vertex_water.glsl b/shaders/src/position_vertex_water.glsl index 53d78820..a5c1b614 100644 --- a/shaders/src/position_vertex_water.glsl +++ b/shaders/src/position_vertex_water.glsl @@ -10,6 +10,6 @@ gl_FogFragCoord = length(position2.xyz); gl_Position.xy += taa_offset * gl_Position.w; #endif -#if defined SHADOW_CASTING && SHADOW_LOCK > 0 +#if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER vWorldPos = position.xyz; #endif From 46d262195d62713c9843b329f565fed1f556f51f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 3 Jan 2026 19:10:30 -0600 Subject: [PATCH 095/147] Removed comments --- shaders/common/composite2_fragment.glsl | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/shaders/common/composite2_fragment.glsl b/shaders/common/composite2_fragment.glsl index 9805382c..d7ca6023 100644 --- a/shaders/common/composite2_fragment.glsl +++ b/shaders/common/composite2_fragment.glsl @@ -1,15 +1,13 @@ #include "/lib/config.glsl" -// #if MC_VERSION < 11604 - const bool colortex0Clear = false; - const bool colortex1Clear = false; - const bool colortex2Clear = false; - const bool colortex3Clear = false; - const bool gaux1Clear = false; - const bool gaux2Clear = false; - const bool gaux3Clear = false; - const bool gaux4Clear = false; -// #endif +const bool colortex0Clear = false; +const bool colortex1Clear = false; +const bool colortex2Clear = false; +const bool colortex3Clear = false; +const bool gaux1Clear = false; +const bool gaux2Clear = false; +const bool gaux3Clear = false; +const bool gaux4Clear = false; /* Uniforms */ From 12cb93207624c151390f102b85c1477e0ea4bd7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 5 Jan 2026 00:30:34 -0600 Subject: [PATCH 096/147] Refactor I --- shaders/common/composite1_fragment.glsl | 2 +- shaders/common/composite_fragment.glsl | 12 ++--- shaders/common/deferred_fragment.glsl | 24 +++++----- shaders/common/line_blocks_vertex.glsl | 2 +- shaders/common/skybasic_vertex.glsl | 2 +- shaders/common/skytextured_vertex.glsl | 2 +- shaders/common/solid_dh_water_fragment.glsl | 6 +-- shaders/common/solid_dh_water_vertex.glsl | 8 ++-- shaders/common/water_blocks_fragment.glsl | 4 +- shaders/common/water_blocks_vertex.glsl | 4 +- shaders/lib/ao.glsl | 51 ++++++++++----------- shaders/lib/bloom.glsl | 2 +- shaders/lib/blur.glsl | 2 +- shaders/lib/depth.glsl | 2 +- shaders/lib/depth_dh.glsl | 2 +- shaders/lib/luma.glsl | 2 +- shaders/lib/volumetric_clouds_vertex.glsl | 4 +- shaders/lib/water.glsl | 8 ++-- shaders/lib/water_dh.glsl | 8 ++-- shaders/shaders.properties | 4 +- shaders/src/light_vertex.glsl | 2 +- shaders/src/light_vertex_dh.glsl | 2 +- shaders/src/position_vertex.glsl | 2 +- shaders/src/position_vertex_dh.glsl | 2 +- shaders/src/position_vertex_water.glsl | 10 ++-- shaders/src/taa_offset.glsl | 4 +- 26 files changed, 86 insertions(+), 87 deletions(-) diff --git a/shaders/common/composite1_fragment.glsl b/shaders/common/composite1_fragment.glsl index c9501cc3..cff9ccb5 100644 --- a/shaders/common/composite1_fragment.glsl +++ b/shaders/common/composite1_fragment.glsl @@ -12,7 +12,7 @@ uniform sampler2D colortex1; uniform sampler2D gaux1; -uniform float inv_aspect_ratio; +uniform float aspectRatioInverse; #ifdef DOF uniform float centerDepthSmooth; diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index fd5878f9..0852a783 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -98,30 +98,30 @@ varying float exposure; void main() { vec4 block_color = texture2DLod(colortex1, texcoord, 0); float d = texture2DLod(depthtex0, texcoord, 0).r; - float linear_d = ld(d); + float linearDepth = ld(d); vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); // Depth to distance - float screen_distance = linear_d * far * 0.5; + float screen_distance = linearDepth * far * 0.5; // Underwater fog if(isEyeInWater == 1) { - float water_absorption = clamp(-pow((-linear_d + 1.0), (4.0 + (WATER_ABSORPTION * 4.0))) + 1.0, 0.0, 1.0); + float water_absorption = clamp(-pow((-linearDepth + 1.0), (4.0 + (WATER_ABSORPTION * 4.0))) + 1.0, 0.0, 1.0); block_color.rgb = mix(block_color.rgb, WATER_COLOR * direct_light_color * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), water_absorption); } else if(isEyeInWater == 2) { - block_color = mix(block_color, vec4(1.0, .1, 0.0, 1.0), clamp(sqrt(linear_d * far * 0.125), 0.0, 1.0)); + block_color = mix(block_color, vec4(1.0, .1, 0.0, 1.0), clamp(sqrt(linearDepth * far * 0.125), 0.0, 1.0)); } #if MC_VERSION >= 11900 - if((blindness > .01 || darknessFactor > .01) && linear_d > 0.999) { + if((blindness > .01 || darknessFactor > .01) && linearDepth > 0.999) { block_color.rgb = vec3(0.0); } #else - if(blindness > .01 && linear_d > 0.999) { + if(blindness > .01 && linearDepth > 0.999) { block_color.rgb = vec3(0.0); } #endif diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index e83aca47..2c3b4091 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -32,7 +32,7 @@ uniform int frameCounter; #endif #if AO == 1 - uniform float inv_aspect_ratio; + uniform float aspectRatioInverse; uniform float fov_y_inv; #endif @@ -107,8 +107,8 @@ varying vec3 up_vec; // Flat void main() { vec4 block_color = texture2DLod(colortex1, texcoord, 0); - float d = texture2DLod(depthtex0, texcoord, 0).r; - float linear_d = ld(d); + float depth = texture2DLod(depthtex0, texcoord, 0).r; + float linearDepth = ld(depth); vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); @@ -123,7 +123,7 @@ void main() { #endif #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY - if(linear_d > 0.9999) { // Only sky + if(linearDepth > 0.9999) { // Only sky vec4 world_pos = gbufferModelViewInverse * gbufferProjectionInverse * (vec4(texcoord, 1.0, 1.0) * 2.0 - 1.0); view_vector = normalize(world_pos.xyz); @@ -148,12 +148,12 @@ void main() { #else #if defined NETHER #if !defined DISTANT_HORIZONS - if(linear_d > 0.9999) { // Only sky + if(linearDepth > 0.9999) { // Only sky block_color = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); } #endif #elif !defined NETHER && !defined THE_END - if(linear_d > 0.9999 && isEyeInWater == 1) { // Only sky and water + if(linearDepth > 0.9999 && isEyeInWater == 1) { // Only sky and water vec4 screen_pos = vec4(gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), gl_FragCoord.z, 1.0); vec4 fragposition = gbufferProjectionInverse * (screen_pos * 2.0 - 1.0); @@ -167,14 +167,14 @@ void main() { // AO distance attenuation #if defined NETHER if(NETHER_FOG_DISTANCE == 0) { - linear_d = sqrt(linear_d); + linearDepth = sqrt(linearDepth); } else { - float screen_distance = 2.0 * near * far / (far + near - (2.0 * d - 1.0) * (far - near)); - linear_d = screen_distance / NETHER_SIGHT; + float screen_distance = 2.0 * near * far / (far + near - (2.0 * depth - 1.0) * (far - near)); + linearDepth = screen_distance / NETHER_SIGHT; } #endif float ao_att = - pow(clamp(linear_d * 1.6, 0.0, 1.0), mix(fog_density_coeff, 1.0, rainStrength)); + pow(clamp(linearDepth * 1.6, 0.0, 1.0), mix(fog_density_coeff, 1.0, rainStrength)); float final_ao = mix(dbao(dither), 1.0, ao_att); block_color.rgb *= final_ao; @@ -188,13 +188,13 @@ void main() { // Underwater sky if(isEyeInWater == 1) { - if(linear_d > 0.9999) { + if(linearDepth > 0.9999) { block_color.rgb = mix(NIGHT_CORRECTION * WATER_COLOR * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), block_color.rgb, max(clamp(view_vector.y - 0.1, 0.0, 1.0), rainStrength)); } } block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); /* DRAWBUFFERS:14 */ - gl_FragData[0] = vec4(block_color.rgb, d); + gl_FragData[0] = vec4(block_color.rgb, depth); gl_FragData[1] = block_color; } \ No newline at end of file diff --git a/shaders/common/line_blocks_vertex.glsl b/shaders/common/line_blocks_vertex.glsl index edaf0547..ad7a7d0b 100644 --- a/shaders/common/line_blocks_vertex.glsl +++ b/shaders/common/line_blocks_vertex.glsl @@ -24,6 +24,6 @@ void main() { gl_Position = mu_ftransform(); #if AA_TYPE > 1 - gl_Position.xy += taa_offset * gl_Position.w; + gl_Position.xy += taaOffset * gl_Position.w; #endif } diff --git a/shaders/common/skybasic_vertex.glsl b/shaders/common/skybasic_vertex.glsl index 1a83b780..33595dc9 100644 --- a/shaders/common/skybasic_vertex.glsl +++ b/shaders/common/skybasic_vertex.glsl @@ -46,7 +46,7 @@ void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; #if AA_TYPE > 0 - gl_Position.xy += taa_offset * gl_Position.w; + gl_Position.xy += taaOffset * gl_Position.w; #endif #if !defined THE_END diff --git a/shaders/common/skytextured_vertex.glsl b/shaders/common/skytextured_vertex.glsl index 27a9a533..052f4e50 100644 --- a/shaders/common/skytextured_vertex.glsl +++ b/shaders/common/skytextured_vertex.glsl @@ -45,6 +45,6 @@ void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; #if AA_TYPE > 0 - gl_Position.xy += taa_offset * gl_Position.w; + gl_Position.xy += taaOffset * gl_Position.w; #endif } diff --git a/shaders/common/solid_dh_water_fragment.glsl b/shaders/common/solid_dh_water_fragment.glsl index 8c23e193..b36cef67 100644 --- a/shaders/common/solid_dh_water_fragment.glsl +++ b/shaders/common/solid_dh_water_fragment.glsl @@ -75,7 +75,7 @@ varying vec4 position; varying vec3 fragposition; varying vec3 tangent; varying vec3 binormal; -varying vec3 water_normal; +varying vec3 waterNormal; varying vec3 hi_sky_color; varying vec3 low_sky_color; varying vec3 up_vec; @@ -109,9 +109,9 @@ void main() { float inf = t * TRANSITION_DH_INF; float view_dist = length(position.xyz); float d = texture2DLod(depthtex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight), 0.0).r; - float linear_d = ld(d); + float linearDepth = ld(d); - if(linear_d < 0.9999 || view_dist < dhNearPlane + inf) { + if(linearDepth < 0.9999 || view_dist < dhNearPlane + inf) { discard; return; } diff --git a/shaders/common/solid_dh_water_vertex.glsl b/shaders/common/solid_dh_water_vertex.glsl index 0664dc4b..7a189766 100644 --- a/shaders/common/solid_dh_water_vertex.glsl +++ b/shaders/common/solid_dh_water_vertex.glsl @@ -47,7 +47,7 @@ varying vec4 position; varying vec3 fragposition; varying vec3 tangent; varying vec3 binormal; -varying vec3 water_normal; +varying vec3 waterNormal; varying vec3 hi_sky_color; varying vec3 low_sky_color; varying vec3 up_vec; @@ -77,12 +77,12 @@ void main() { #include "/src/light_vertex_dh.glsl" #include "/src/fog_vertex_dh.glsl" - vec4 position2 = gl_ModelViewMatrix * gl_Vertex; - fragposition = position2.xyz; + vec4 viewSpacePos4D = gl_ModelViewMatrix * gl_Vertex; + fragposition = viewSpacePos4D.xyz; binormal = normalize(gbufferModelView[2].xyz); tangent = normalize(gbufferModelView[0].xyz); - water_normal = normal; + waterNormal = normal; up_vec = normalize(gbufferModelView[1].xyz); diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index fa1784f9..fe254638 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -88,7 +88,7 @@ varying vec2 texcoord; varying vec2 lmcoord; varying vec4 tint_color; varying float frog_adjust; -varying vec3 water_normal; +varying vec3 waterNormal; varying float block_type; varying vec4 worldposition; varying vec3 fragposition; @@ -286,7 +286,7 @@ void main() { block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125); if(block_type > 1.5) { // Glass - block_color = cristal_shader(fragposition, water_normal, block_color, sky_color_reflect, fresnel * fresnel, visible_sky, dither, direct_light_color); + block_color = cristal_shader(fragposition, waterNormal, block_color, sky_color_reflect, fresnel * fresnel, visible_sky, dither, direct_light_color); } } diff --git a/shaders/common/water_blocks_vertex.glsl b/shaders/common/water_blocks_vertex.glsl index 08853e15..8b101042 100644 --- a/shaders/common/water_blocks_vertex.glsl +++ b/shaders/common/water_blocks_vertex.glsl @@ -53,7 +53,7 @@ varying vec2 texcoord; varying vec2 lmcoord; varying vec4 tint_color; varying float frog_adjust; -varying vec3 water_normal; +varying vec3 waterNormal; varying float block_type; varying vec4 worldposition; varying vec3 fragposition; @@ -118,7 +118,7 @@ void main() { #include "/src/light_vertex.glsl" - water_normal = normal; + waterNormal = normal; tangent = normalize(gl_NormalMatrix * at_tangent.xyz); binormal = normalize(gl_NormalMatrix * -cross(gl_Normal, at_tangent.xyz)); diff --git a/shaders/lib/ao.glsl b/shaders/lib/ao.glsl index 6624703d..7df131cb 100644 --- a/shaders/lib/ao.glsl +++ b/shaders/lib/ao.glsl @@ -1,46 +1,45 @@ -/* MakeUp - ao.glsl +/* MakeUp - ambientOcclusion.glsl Based on old Capt Tatsu's ambient occlusion functions. */ float dbao(float dither) { - float ao = 0.0; + float ambientOcclusion = 0.0; - float inv_steps = 1.0 / AOSTEPS; + float stepsInverse = 1.0 / AOSTEPS; vec2 offset; float n; - float dither_x; + float ditherSample; - float d = texture2DLod(depthtex0, texcoord.xy, 0.0).r; - float hand_check = d < 0.56 ? 1024.0 : 1.0; - d = ld(d); + float linearDepth = ld(texture2DLod(depthtex0, texcoord.xy, 0.0).r); + float handCheck = linearDepth < 0.56 ? 1024.0 : 1.0; - float sd = 0.0; + float sampleLinearDepth = 0.0; float angle = 0.0; float dist = 0.0; - float far_and_check = hand_check * 2.0 * far; - vec2 scale = vec2(inv_aspect_ratio, 1.0) * (fov_y_inv / (d * far)); - vec2 scale_factor = scale * inv_steps; - float sample_d; + float farAndCheck = handCheck * 2.0 * far; + vec2 scale = vec2(aspectRatioInverse, 1.0) * (fov_y_inv / (linearDepth * far)); + vec2 scaleFactor = scale * stepsInverse; + float checkDepth; for (int i = 0; i < AOSTEPS; i++) { - dither_x = (i + dither); - n = fract(dither_x * 1.6180339887) * 3.141592653589793; - offset = vec2(cos(n), sin(n)) * dither_x * scale_factor; + ditherSample = (i + dither); + n = fract(ditherSample * 1.6180339887) * 3.141592653589793; + offset = vec2(cos(n), sin(n)) * ditherSample * scaleFactor; - sd = ld(texture2DLod(depthtex0, texcoord.xy + offset, 0.0).r); - sample_d = (d - sd) * far_and_check; - angle = clamp(0.5 - sample_d, 0.0, 1.0); - dist = clamp(0.25 * sample_d - 1.0, 0.0, 1.0); + sampleLinearDepth = ld(texture2DLod(depthtex0, texcoord.xy + offset, 0.0).r); + checkDepth = (linearDepth - sampleLinearDepth) * farAndCheck; + angle = clamp(0.5 - checkDepth, 0.0, 1.0); + dist = clamp(0.25 * checkDepth - 1.0, 0.0, 1.0); - sd = ld(texture2DLod(depthtex0, texcoord.xy - offset, 0.0).r); - sample_d = (d - sd) * far_and_check; - angle += clamp(0.5 - sample_d, 0.0, 1.0); - dist += clamp(0.25 * sample_d - 1.0, 0.0, 1.0); + sampleLinearDepth = ld(texture2DLod(depthtex0, texcoord.xy - offset, 0.0).r); + checkDepth = (linearDepth - sampleLinearDepth) * farAndCheck; + angle += clamp(0.5 - checkDepth, 0.0, 1.0); + dist += clamp(0.25 * checkDepth - 1.0, 0.0, 1.0); - ao += clamp(angle + dist, 0.0, 1.0); + ambientOcclusion += clamp(angle + dist, 0.0, 1.0); } - ao /= AOSTEPS; + ambientOcclusion /= AOSTEPS; - return sqrt((ao * AO_STRENGTH) + (1.0 - AO_STRENGTH)); + return sqrt((ambientOcclusion * AO_STRENGTH) + (1.0 - AO_STRENGTH)); } diff --git a/shaders/lib/bloom.glsl b/shaders/lib/bloom.glsl index 38191259..809a541b 100644 --- a/shaders/lib/bloom.glsl +++ b/shaders/lib/bloom.glsl @@ -6,7 +6,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 vec3 mipmap_bloom(sampler2D image, vec2 coords, float dither) { vec3 blur_sample = vec3(0.0); - vec2 blur_radius_vec = vec2(0.1 * inv_aspect_ratio, 0.1); + vec2 blur_radius_vec = vec2(0.1 * aspectRatioInverse, 0.1); int sample_c = int(BLOOM_SAMPLES); diff --git a/shaders/lib/blur.glsl b/shaders/lib/blur.glsl index d606d960..5a5cf9f9 100644 --- a/shaders/lib/blur.glsl +++ b/shaders/lib/blur.glsl @@ -18,7 +18,7 @@ vec3 noised_blur(vec4 color_depth, sampler2D image, vec2 coords, float force, fl if (blur_radius > min(pixel_size_x, pixel_size_y)) { vec3 blur_sample = vec3(0.0); - vec2 blur_radius_vec = vec2(blur_radius * inv_aspect_ratio, blur_radius); + vec2 blur_radius_vec = vec2(blur_radius * aspectRatioInverse, blur_radius); float dither_base = dither; dither *= 6.283185307179586; diff --git a/shaders/lib/depth.glsl b/shaders/lib/depth.glsl index 3041add6..dbaf4789 100644 --- a/shaders/lib/depth.glsl +++ b/shaders/lib/depth.glsl @@ -1,4 +1,4 @@ -/* MakeUp - depth_dh.glsl +/* MakeUp - depth.glsl Depth utilities. Javier Garduño - GNU Lesser General Public License v3.0 diff --git a/shaders/lib/depth_dh.glsl b/shaders/lib/depth_dh.glsl index 0caa490b..be6f28cc 100644 --- a/shaders/lib/depth_dh.glsl +++ b/shaders/lib/depth_dh.glsl @@ -1,4 +1,4 @@ -/* MakeUp - depth_hd.glsl +/* MakeUp - depth_dh.glsl Depth utilities (dh). Javier Garduño - GNU Lesser General Public License v3.0 diff --git a/shaders/lib/luma.glsl b/shaders/lib/luma.glsl index 9fbdc3de..4c56d588 100644 --- a/shaders/lib/luma.glsl +++ b/shaders/lib/luma.glsl @@ -8,6 +8,6 @@ float luma(vec3 color) { return dot(color, vec3(0.2126, 0.7152, 0.0722)); } -float color_average(vec3 color) { +float colorAverage(vec3 color) { return (color.r + color.g + color.b) * 0.3333333333; } diff --git a/shaders/lib/volumetric_clouds_vertex.glsl b/shaders/lib/volumetric_clouds_vertex.glsl index 45e6e12d..6669bbdc 100644 --- a/shaders/lib/volumetric_clouds_vertex.glsl +++ b/shaders/lib/volumetric_clouds_vertex.glsl @@ -12,7 +12,7 @@ dark_cloud_color = day_blend( dark_cloud_color = mix( dark_cloud_color, - ZENITH_SKY_RAIN_COLOR * color_average(dark_cloud_color), + ZENITH_SKY_RAIN_COLOR * colorAverage(dark_cloud_color), rainStrength ); @@ -22,7 +22,7 @@ vec3 cloud_color_aux = mix( LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR * vec3(0.5, 0.6, 0.75) ), - ZENITH_SKY_RAIN_COLOR * color_average(dark_cloud_color), + ZENITH_SKY_RAIN_COLOR * colorAverage(dark_cloud_color), rainStrength ); diff --git a/shaders/lib/water.glsl b/shaders/lib/water.glsl index 290060fa..f19a6d47 100644 --- a/shaders/lib/water.glsl +++ b/shaders/lib/water.glsl @@ -159,14 +159,14 @@ vec3 refraction(vec3 fragpos, vec3 color, vec3 refraction) { } vec3 get_normals(vec3 bump, vec3 fragpos) { - float NdotE = abs(dot(water_normal, normalize(fragpos))); + float NdotE = abs(dot(waterNormal, normalize(fragpos))); bump *= vec3(NdotE) + vec3(0.0, 0.0, 1.0 - NdotE); mat3 tbn_matrix = mat3( - tangent.x, binormal.x, water_normal.x, - tangent.y, binormal.y, water_normal.y, - tangent.z, binormal.z, water_normal.z + tangent.x, binormal.x, waterNormal.x, + tangent.y, binormal.y, waterNormal.y, + tangent.z, binormal.z, waterNormal.z ); return normalize(bump * tbn_matrix); diff --git a/shaders/lib/water_dh.glsl b/shaders/lib/water_dh.glsl index 902b6a53..9251bb5a 100644 --- a/shaders/lib/water_dh.glsl +++ b/shaders/lib/water_dh.glsl @@ -54,14 +54,14 @@ vec3 refraction(vec3 fragpos, vec3 color, vec3 refraction) { } vec3 get_normals(vec3 bump, vec3 fragpos) { - float NdotE = abs(dot(water_normal, normalize(fragpos))); + float NdotE = abs(dot(waterNormal, normalize(fragpos))); bump *= vec3(NdotE) + vec3(0.0, 0.0, 1.0 - NdotE); mat3 tbn_matrix = mat3( - tangent.x, binormal.x, water_normal.x, - tangent.y, binormal.y, water_normal.y, - tangent.z, binormal.z, water_normal.z + tangent.x, binormal.x, waterNormal.x, + tangent.y, binormal.y, waterNormal.y, + tangent.z, binormal.z, waterNormal.z ); return normalize(bump * tbn_matrix); diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 5e03efbd..a11859e8 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -93,7 +93,7 @@ sliders = SHADOW_DISTANCE_SLIDER SHADOW_QTY_SLIDER REFLECTION_SLIDER SHADOW_BLUR # Pixel size uniform.float.pixel_size_x = 1.0 / viewWidth uniform.float.pixel_size_y = 1.0 / viewHeight -uniform.float.inv_aspect_ratio = 1.0 / aspectRatio +uniform.float.aspectRatioInverse = 1.0 / aspectRatio # Time constants variable.float.hour_world = worldTime * 0.001 @@ -148,7 +148,7 @@ uniform.int.frame_mod = fmod(frameCounter, 16) # so fast that it is "absorbed" and better masked by the TAA history. #if AA_TYPE > 0 - uniform.vec2.taa_offset = vec2((if( \ + uniform.vec2.taaOffset = vec2((if( \ frame_mod == 0, 0.5, \ frame_mod == 1, -0.5, \ frame_mod == 2, -0.5, \ diff --git a/shaders/src/light_vertex.glsl b/shaders/src/light_vertex.glsl index ec292528..d0bd31fe 100644 --- a/shaders/src/light_vertex.glsl +++ b/shaders/src/light_vertex.glsl @@ -102,7 +102,7 @@ float omni_strength = ((direct_light_strength + 1.0) * 0.25) + 0.75; // Minimal light vec3 omni_color = mix(hi_sky_color_rgb, direct_light_color * 0.45, OMNI_TINT); - float omni_color_luma = color_average(omni_color); + float omni_color_luma = colorAverage(omni_color); // --- OPTIMIZACIÓN #3: Prevenir división por cero --- float luma_ratio = AVOID_DARK_LEVEL / max(omni_color_luma, 0.0001); vec3 omni_color_min = omni_color * luma_ratio; diff --git a/shaders/src/light_vertex_dh.glsl b/shaders/src/light_vertex_dh.glsl index db41c8c5..07828b1c 100644 --- a/shaders/src/light_vertex_dh.glsl +++ b/shaders/src/light_vertex_dh.glsl @@ -66,7 +66,7 @@ direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); // Minimal light vec3 omni_color = mix(hi_sky_color_rgb, direct_light_color * 0.45, OMNI_TINT); - float omni_color_luma = color_average(omni_color); + float omni_color_luma = colorAverage(omni_color); // --- OPTIMIZACIÓN #3: Prevenir división por cero --- float luma_ratio = AVOID_DARK_LEVEL / max(omni_color_luma, 0.0001); diff --git a/shaders/src/position_vertex.glsl b/shaders/src/position_vertex.glsl index fa50ee74..8a49d290 100644 --- a/shaders/src/position_vertex.glsl +++ b/shaders/src/position_vertex.glsl @@ -62,7 +62,7 @@ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; #endif #if AA_TYPE > 1 - gl_Position.xy += taa_offset * gl_Position.w; + gl_Position.xy += taaOffset * gl_Position.w; #endif #ifndef SHADER_BASIC diff --git a/shaders/src/position_vertex_dh.glsl b/shaders/src/position_vertex_dh.glsl index 869e7a50..68a18220 100644 --- a/shaders/src/position_vertex_dh.glsl +++ b/shaders/src/position_vertex_dh.glsl @@ -7,7 +7,7 @@ if(dhMaterialId == DH_BLOCK_WATER) { // Water gl_Position = dhProjection * gbufferModelView * position; #if AA_TYPE > 1 - gl_Position.xy += taa_offset * gl_Position.w; + gl_Position.xy += taaOffset * gl_Position.w; #endif // Fog intensity calculation diff --git a/shaders/src/position_vertex_water.glsl b/shaders/src/position_vertex_water.glsl index a5c1b614..085f746c 100644 --- a/shaders/src/position_vertex_water.glsl +++ b/shaders/src/position_vertex_water.glsl @@ -1,13 +1,13 @@ -vec4 position2 = gl_ModelViewMatrix * gl_Vertex; -fragposition = position2.xyz; -vec4 position = gbufferModelViewInverse * position2; +vec4 viewSpacePos4D = gl_ModelViewMatrix * gl_Vertex; +fragposition = viewSpacePos4D.xyz; +vec4 position = gbufferModelViewInverse * viewSpacePos4D; worldposition = position + vec4(cameraPosition.xyz, 0.0); gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; -gl_FogFragCoord = length(position2.xyz); +gl_FogFragCoord = length(viewSpacePos4D.xyz); #if AA_TYPE > 1 - gl_Position.xy += taa_offset * gl_Position.w; + gl_Position.xy += taaOffset * gl_Position.w; #endif #if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER diff --git a/shaders/src/taa_offset.glsl b/shaders/src/taa_offset.glsl index 35d138e1..9c1752a6 100644 --- a/shaders/src/taa_offset.glsl +++ b/shaders/src/taa_offset.glsl @@ -1,5 +1,5 @@ #if MC_VERSION >= 11300 - uniform vec2 taa_offset; + uniform vec2 taaOffset; #else uniform int frame_mod; uniform float pixel_size_x; @@ -18,5 +18,5 @@ vec2(-0.5720614028176845, -0.4156269377774534) ); - vec2 taa_offset = offset_array[frame_mod] * vec2(pixel_size_x, pixel_size_y); + vec2 taaOffset = offset_array[frame_mod] * vec2(pixel_size_x, pixel_size_y); #endif From b549251b3a4f3a19af4c1390be9275392bda4c67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 5 Jan 2026 01:32:29 -0600 Subject: [PATCH 097/147] Refactor II --- shaders/common/basic_blocks_fragment.glsl | 4 +- shaders/common/clouds_blocks_fragment.glsl | 4 +- shaders/common/composite1_fragment.glsl | 14 +++--- shaders/common/composite2_fragment.glsl | 18 ++++---- shaders/common/composite_fragment.glsl | 44 +++++++++---------- shaders/common/damage_fragment.glsl | 2 +- shaders/common/deferred_fragment.glsl | 20 ++++----- shaders/common/final_fragment.glsl | 30 ++++++------- shaders/common/glint_blocks_fragment.glsl | 2 +- shaders/common/line_blocks_fragment.glsl | 2 +- shaders/common/prepare_fragment.glsl | 6 +-- shaders/common/shadow_fragment.glsl | 4 +- shaders/common/skybasic_fragment.glsl | 12 ++--- shaders/common/skytextured_fragment.glsl | 8 ++-- shaders/common/solid_blocks_fragment.glsl | 30 ++++++------- shaders/common/solid_dh_blocks_fragment.glsl | 12 ++--- shaders/common/solid_dh_water_fragment.glsl | 30 ++++++------- .../common/spidereyes_blocks_fragment.glsl | 2 +- shaders/common/water_blocks_fragment.glsl | 32 +++++++------- shaders/lib/ao.glsl | 2 +- shaders/lib/blur.glsl | 8 ++-- shaders/lib/volumetric_clouds.glsl | 22 +++++----- shaders/lib/volumetric_clouds_end.glsl | 16 +++---- shaders/shaders.properties | 4 +- shaders/src/cloudfinalcolor.glsl | 8 ++-- shaders/src/finalcolor.glsl | 12 ++--- shaders/src/finalcolor_dh.glsl | 8 ++-- shaders/src/writebuffers.glsl | 22 +++++----- 28 files changed, 189 insertions(+), 189 deletions(-) diff --git a/shaders/common/basic_blocks_fragment.glsl b/shaders/common/basic_blocks_fragment.glsl index fa3ecf69..d0a280b7 100644 --- a/shaders/common/basic_blocks_fragment.glsl +++ b/shaders/common/basic_blocks_fragment.glsl @@ -8,8 +8,8 @@ varying vec3 basic_light; // MAIN FUNCTION ------------------ void main() { - vec4 block_color = tint_color; - block_color.rgb *= basic_light; + vec4 blockColor = tint_color; + blockColor.rgb *= basic_light; #include "/src/writebuffers.glsl" } diff --git a/shaders/common/clouds_blocks_fragment.glsl b/shaders/common/clouds_blocks_fragment.glsl index 4624cfdd..9a8effde 100644 --- a/shaders/common/clouds_blocks_fragment.glsl +++ b/shaders/common/clouds_blocks_fragment.glsl @@ -28,11 +28,11 @@ uniform float blindness; void main() { #if V_CLOUDS == 0 || defined UNKNOWN_DIM - vec4 block_color = texture2D(tex, texcoord) * tint_color; + vec4 blockColor = texture2D(tex, texcoord) * tint_color; #include "/src/cloudfinalcolor.glsl" #include "/src/writebuffers.glsl" #elif MC_VERSION <= 11300 - vec4 block_color = vec4(0.0); + vec4 blockColor = vec4(0.0); #include "/src/writebuffers.glsl" #endif } diff --git a/shaders/common/composite1_fragment.glsl b/shaders/common/composite1_fragment.glsl index cff9ccb5..5206f290 100644 --- a/shaders/common/composite1_fragment.glsl +++ b/shaders/common/composite1_fragment.glsl @@ -20,7 +20,7 @@ uniform float aspectRatioInverse; uniform float pixel_size_y; uniform float viewWidth; uniform float viewHeight; - uniform float fov_y_inv; + uniform float fovYInverse; #endif #ifdef BLOOM @@ -46,7 +46,7 @@ varying vec2 texcoord; // MAIN FUNCTION ------------------ void main() { - vec4 block_color = texture2DLod(colortex1, texcoord, 0); + vec4 blockColor = texture2DLod(colortex1, texcoord, 0); #if defined BLOOM || defined DOF #if AA_TYPE > 0 @@ -57,17 +57,17 @@ void main() { #endif #ifdef DOF - block_color.rgb = noised_blur(block_color, colortex1, texcoord, DOF_STRENGTH, dither); + blockColor.rgb = noised_blur(blockColor, colortex1, texcoord, DOF_STRENGTH, dither); #endif #ifdef BLOOM vec3 bloom = mipmap_bloom(gaux1, texcoord, dither); - block_color.rgb += bloom; + blockColor.rgb += bloom; - // block_color.rgb = texture2DLod(gaux1, texcoord, soft_lod).rgb; + // blockColor.rgb = texture2DLod(gaux1, texcoord, soft_lod).rgb; #endif - block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); /* DRAWBUFFERS:1 */ - gl_FragData[0] = block_color; + gl_FragData[0] = blockColor; } diff --git a/shaders/common/composite2_fragment.glsl b/shaders/common/composite2_fragment.glsl index d7ca6023..54f493c6 100644 --- a/shaders/common/composite2_fragment.glsl +++ b/shaders/common/composite2_fragment.glsl @@ -52,7 +52,7 @@ varying vec2 texcoord; // MAIN FUNCTION ------------------ void main() { - vec4 block_color = texture2DLod(colortex1, texcoord, 0); + vec4 blockColor = texture2DLod(colortex1, texcoord, 0); // Precalc past position and velocity #if AA_TYPE > 0 || defined MOTION_BLUR @@ -86,23 +86,23 @@ void main() { #ifdef MOTION_BLUR // "Speed" vec2 velocity = texcoord - texcoord_past; - block_color.rgb = motion_blur(block_color.rgb, z_depth, velocity, colortex1); + blockColor.rgb = motion_blur(blockColor.rgb, z_depth, velocity, colortex1); #endif #if AA_TYPE > 0 #ifdef DOF - block_color = fast_taa_depth(block_color, texcoord_past); + blockColor = fast_taa_depth(blockColor, texcoord_past); #else - block_color.rgb = fast_taa(block_color.rgb, texcoord_past); + blockColor.rgb = fast_taa(blockColor.rgb, texcoord_past); #endif - block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); /* DRAWBUFFERS:13 */ - gl_FragData[0] = block_color; // colortex1 - gl_FragData[1] = block_color; // To TAA averages + gl_FragData[0] = blockColor; // colortex1 + gl_FragData[1] = blockColor; // To TAA averages #else - block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); /* DRAWBUFFERS:1 */ - gl_FragData[0] = block_color; // colortex1 + gl_FragData[0] = blockColor; // colortex1 #endif } diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index 0852a783..e717c19d 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -96,7 +96,7 @@ varying float exposure; // MAIN FUNCTION ------------------ void main() { - vec4 block_color = texture2DLod(colortex1, texcoord, 0); + vec4 blockColor = texture2DLod(colortex1, texcoord, 0); float d = texture2DLod(depthtex0, texcoord, 0).r; float linearDepth = ld(d); @@ -109,20 +109,20 @@ void main() { if(isEyeInWater == 1) { float water_absorption = clamp(-pow((-linearDepth + 1.0), (4.0 + (WATER_ABSORPTION * 4.0))) + 1.0, 0.0, 1.0); - block_color.rgb = - mix(block_color.rgb, WATER_COLOR * direct_light_color * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), water_absorption); + blockColor.rgb = + mix(blockColor.rgb, WATER_COLOR * direct_light_color * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), water_absorption); } else if(isEyeInWater == 2) { - block_color = mix(block_color, vec4(1.0, .1, 0.0, 1.0), clamp(sqrt(linearDepth * far * 0.125), 0.0, 1.0)); + blockColor = mix(blockColor, vec4(1.0, .1, 0.0, 1.0), clamp(sqrt(linearDepth * far * 0.125), 0.0, 1.0)); } #if MC_VERSION >= 11900 if((blindness > .01 || darknessFactor > .01) && linearDepth > 0.999) { - block_color.rgb = vec3(0.0); + blockColor.rgb = vec3(0.0); } #else if(blindness > .01 && linearDepth > 0.999) { - block_color.rgb = vec3(0.0); + blockColor.rgb = vec3(0.0); } #endif @@ -161,7 +161,7 @@ void main() { vol_intensity *= 0.666; - block_color.rgb += (vol_light_color * vol_light * vol_intensity * 2.0); + blockColor.rgb += (vol_light_color * vol_light * vol_intensity * 2.0); #else // Light source position for depth based godrays intensity calculation vec3 intermediate_vector = @@ -172,8 +172,8 @@ void main() { vol_intensity = pow(clamp(vol_intensity, 0.0, 1.0), vol_mixer) * 0.5 * abs(light_mix * 2.0 - 1.0); - block_color.rgb = - mix(block_color.rgb, vol_light_color * vol_light, vol_intensity * (vol_light * 0.5 + 0.5) * (1.0 - rainStrength)); + blockColor.rgb = + mix(blockColor.rgb, vol_light_color * vol_light, vol_intensity * (vol_light * 0.5 + 0.5) * (1.0 - rainStrength)); #endif #endif @@ -200,42 +200,42 @@ void main() { #if defined THE_END vol_intensity = ((square_pow(clamp((vol_intensity + .666667) * 0.6, 0.0, 1.0)) * 0.5)); - block_color.rgb += (vol_light_color * vol_light * vol_intensity * 2.0); + blockColor.rgb += (vol_light_color * vol_light * vol_intensity * 2.0); #else vol_intensity = pow(clamp((vol_intensity + 0.5) * 0.666666666666666, 0.0, 1.0), vol_mixer) * 0.6 * abs(light_mix * 2.0 - 1.0); - block_color.rgb = - mix(block_color.rgb, vol_light_color * vol_light, vol_intensity * (vol_light * 0.5 + 0.5) * (1.0 - rainStrength)); + blockColor.rgb = + mix(blockColor.rgb, vol_light_color * vol_light, vol_intensity * (vol_light * 0.5 + 0.5) * (1.0 - rainStrength)); #endif #endif // Dentro de la nieve #ifdef BLOOM if(isEyeInWater == 3) { - block_color.rgb = - mix(block_color.rgb, vec3(0.7, 0.8, 1.0) / exposure, clamp(screen_distance, 0.0, 1.0)); + blockColor.rgb = + mix(blockColor.rgb, vec3(0.7, 0.8, 1.0) / exposure, clamp(screen_distance, 0.0, 1.0)); } #else if(isEyeInWater == 3) { - block_color.rgb = - mix(block_color.rgb, vec3(0.85, 0.9, 0.6), clamp(screen_distance, 0.0, 1.0)); + blockColor.rgb = + mix(blockColor.rgb, vec3(0.85, 0.9, 0.6), clamp(screen_distance, 0.0, 1.0)); } #endif #ifdef BLOOM // Bloom source - float bloom_luma = smoothstep(0.85, 1.0, luma(block_color.rgb * exposure)) * 0.5; + float bloom_luma = smoothstep(0.85, 1.0, luma(blockColor.rgb * exposure)) * 0.5; - block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); /* DRAWBUFFERS:146 */ - gl_FragData[0] = block_color; - gl_FragData[1] = block_color * bloom_luma; + gl_FragData[0] = blockColor; + gl_FragData[1] = blockColor * bloom_luma; gl_FragData[2] = vec4(exposure, 0.0, 0.0, 0.0); #else - block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); /* DRAWBUFFERS:16 */ - gl_FragData[0] = block_color; + gl_FragData[0] = blockColor; gl_FragData[1] = vec4(exposure, 0.0, 0.0, 0.0); #endif } \ No newline at end of file diff --git a/shaders/common/damage_fragment.glsl b/shaders/common/damage_fragment.glsl index ebe8c606..1d6f3f4d 100644 --- a/shaders/common/damage_fragment.glsl +++ b/shaders/common/damage_fragment.glsl @@ -11,7 +11,7 @@ varying vec2 texcoord; // MAIN FUNCTION ------------------ void main() { - vec4 block_color = texture2D(tex, texcoord); + vec4 blockColor = texture2D(tex, texcoord); #include "/src/writebuffers.glsl" } diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index 2c3b4091..cf04ab8d 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -33,7 +33,7 @@ uniform int frameCounter; #if AO == 1 uniform float aspectRatioInverse; - uniform float fov_y_inv; + uniform float fovYInverse; #endif #if V_CLOUDS != 0 && !defined UNKNOWN_DIM @@ -106,7 +106,7 @@ varying vec3 up_vec; // Flat // MAIN FUNCTION ------------------ void main() { - vec4 block_color = texture2DLod(colortex1, texcoord, 0); + vec4 blockColor = texture2DLod(colortex1, texcoord, 0); float depth = texture2DLod(depthtex0, texcoord, 0).r; float linearDepth = ld(depth); @@ -138,10 +138,10 @@ void main() { #ifdef THE_END #ifdef END_CLOUDS - block_color.rgb = get_end_cloud(view_vector, block_color.rgb, bright, dither, cameraPosition, CLOUD_STEPS_AVG); + blockColor.rgb = get_end_cloud(view_vector, blockColor.rgb, bright, dither, cameraPosition, CLOUD_STEPS_AVG); #endif #else - block_color.rgb = get_cloud(view_vector, block_color.rgb, bright, dither, cameraPosition, CLOUD_STEPS_AVG, umbral, cloud_color, dark_cloud_color); + blockColor.rgb = get_cloud(view_vector, blockColor.rgb, bright, dither, cameraPosition, CLOUD_STEPS_AVG, umbral, cloud_color, dark_cloud_color); #endif } @@ -149,7 +149,7 @@ void main() { #if defined NETHER #if !defined DISTANT_HORIZONS if(linearDepth > 0.9999) { // Only sky - block_color = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); + blockColor = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); } #endif #elif !defined NETHER && !defined THE_END @@ -177,7 +177,7 @@ void main() { pow(clamp(linearDepth * 1.6, 0.0, 1.0), mix(fog_density_coeff, 1.0, rainStrength)); float final_ao = mix(dbao(dither), 1.0, ao_att); - block_color.rgb *= final_ao; + blockColor.rgb *= final_ao; #endif #if defined THE_END || defined NETHER @@ -189,12 +189,12 @@ void main() { // Underwater sky if(isEyeInWater == 1) { if(linearDepth > 0.9999) { - block_color.rgb = mix(NIGHT_CORRECTION * WATER_COLOR * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), block_color.rgb, max(clamp(view_vector.y - 0.1, 0.0, 1.0), rainStrength)); + blockColor.rgb = mix(NIGHT_CORRECTION * WATER_COLOR * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), blockColor.rgb, max(clamp(view_vector.y - 0.1, 0.0, 1.0), rainStrength)); } } - block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); /* DRAWBUFFERS:14 */ - gl_FragData[0] = vec4(block_color.rgb, depth); - gl_FragData[1] = block_color; + gl_FragData[0] = vec4(blockColor.rgb, depth); + gl_FragData[1] = blockColor; } \ No newline at end of file diff --git a/shaders/common/final_fragment.glsl b/shaders/common/final_fragment.glsl index 1c0f924e..7357d4ca 100644 --- a/shaders/common/final_fragment.glsl +++ b/shaders/common/final_fragment.glsl @@ -103,47 +103,47 @@ varying float exposure; void main() { #if CHROMA_ABER == 1 - vec3 block_color = color_aberration(); + vec3 blockColor = color_aberration(); #else - vec3 block_color = texture2D(colortex1, texcoord).rgb; + vec3 blockColor = texture2D(colortex1, texcoord).rgb; #if AA_TYPE == 3 && !defined DOF - block_color = fxaa311(block_color, 5); + blockColor = fxaa311(blockColor, 5); #endif #endif // Exposure correction - block_color *= vec3(exposure); - block_color = custom_sigmoid(block_color); + blockColor *= vec3(exposure); + blockColor = custom_sigmoid(blockColor); // Color-grading ----- // DEVELOPER: If your post processing effect only involves the current pixel, // it can be placed here. For example: // Saturation: - // float actual_luma = luma(block_color); - // block_color = mix(vec3(actual_luma), block_color, 1.5); + // float actual_luma = luma(blockColor); + // blockColor = mix(vec3(actual_luma), blockColor, 1.5); // Color-blindness correction #ifdef COLOR_BLINDNESS - block_color = color_blindness(block_color); + blockColor = color_blindness(blockColor); #endif #ifdef DEBUG_MODE if(texcoord.x < 0.5 && texcoord.y < 0.5) { - block_color = texture2D(shadowtex1, texcoord * 2.0).rrr; + blockColor = texture2D(shadowtex1, texcoord * 2.0).rrr; } else if(texcoord.x >= 0.5 && texcoord.y >= 0.5) { - block_color = vec3(texture2D(gaux3, vec2(0.5)).r * 0.25); + blockColor = vec3(texture2D(gaux3, vec2(0.5)).r * 0.25); } else if(texcoord.x < 0.5 && texcoord.y >= 0.5) { - block_color = texture2D(colortex1, ((texcoord - vec2(0.0, 0.5)) * 2.0)).rgb; + blockColor = texture2D(colortex1, ((texcoord - vec2(0.0, 0.5)) * 2.0)).rgb; } else if(texcoord.x >= 0.5 && texcoord.y < 0.5) { - block_color = texture2D(shadowcolor0, ((texcoord - vec2(0.5, 0.0)) * 2.0)).rgb; + blockColor = texture2D(shadowcolor0, ((texcoord - vec2(0.5, 0.0)) * 2.0)).rgb; } else { - block_color = vec3(0.5); + blockColor = vec3(0.5); } - gl_FragData[0] = vec4(block_color, 1.0); + gl_FragData[0] = vec4(blockColor, 1.0); #else - gl_FragData[0] = vec4(block_color, 1.0); + gl_FragData[0] = vec4(blockColor, 1.0); #endif } \ No newline at end of file diff --git a/shaders/common/glint_blocks_fragment.glsl b/shaders/common/glint_blocks_fragment.glsl index 74c32844..7d0cad64 100644 --- a/shaders/common/glint_blocks_fragment.glsl +++ b/shaders/common/glint_blocks_fragment.glsl @@ -14,7 +14,7 @@ varying float exposure; void main() { // Toma el color puro del bloque - vec4 block_color = texture2D(tex, texcoord) * tint_color / max(0.001, exposure); + vec4 blockColor = texture2D(tex, texcoord) * tint_color / max(0.001, exposure); #include "/src/writebuffers.glsl" } \ No newline at end of file diff --git a/shaders/common/line_blocks_fragment.glsl b/shaders/common/line_blocks_fragment.glsl index 2238c24c..09b0ab71 100644 --- a/shaders/common/line_blocks_fragment.glsl +++ b/shaders/common/line_blocks_fragment.glsl @@ -7,7 +7,7 @@ varying vec4 tint_color; void main() { - vec4 block_color = tint_color; + vec4 blockColor = tint_color; #include "/src/writebuffers.glsl" } diff --git a/shaders/common/prepare_fragment.glsl b/shaders/common/prepare_fragment.glsl index 7fdcb8a2..71f73065 100644 --- a/shaders/common/prepare_fragment.glsl +++ b/shaders/common/prepare_fragment.glsl @@ -31,7 +31,7 @@ varying vec3 low_sky_color; void main() { #if defined THE_END || defined NETHER - vec3 block_color = ZENITH_DAY_COLOR; + vec3 blockColor = ZENITH_DAY_COLOR; #else #if AA_TYPE > 0 @@ -47,10 +47,10 @@ void main() { (vec4(gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), gl_FragCoord.z, 1.0) * 2.0 - 1.0); vec3 nfragpos = normalize(fragpos.xyz); float n_u = clamp(dot(nfragpos, up_vec) + dither, 0.0, 1.0); - vec3 block_color = + vec3 blockColor = mix(low_sky_color, hi_sky_color, smoothstep(0.0, 1.0, pow(n_u, 0.333))); - block_color = xyz_to_rgb(block_color); + blockColor = xyz_to_rgb(blockColor); #endif #include "/src/writebuffers.glsl" diff --git a/shaders/common/shadow_fragment.glsl b/shaders/common/shadow_fragment.glsl index 7574db52..38496bd9 100644 --- a/shaders/common/shadow_fragment.glsl +++ b/shaders/common/shadow_fragment.glsl @@ -25,8 +25,8 @@ void main() { discard; } - vec4 block_color = texture2D(tex, texcoord); + vec4 blockColor = texture2D(tex, texcoord); /* DRAWBUFFERS:0 */ - gl_FragData[0] = block_color; + gl_FragData[0] = blockColor; } diff --git a/shaders/common/skybasic_fragment.glsl b/shaders/common/skybasic_fragment.glsl index ebdad52b..ed1cfa98 100644 --- a/shaders/common/skybasic_fragment.glsl +++ b/shaders/common/skybasic_fragment.glsl @@ -50,12 +50,12 @@ void main() { #if MC_VERSION < 11604 vec4 background_color = vec4(ZENITH_DAY_COLOR, 1.0); #endif - vec4 block_color = vec4(0.0, 0.0, 0.0, 1.0); + vec4 blockColor = vec4(0.0, 0.0, 0.0, 1.0); #elif defined NETHER // Unused #if MC_VERSION < 11604 vec4 background_color = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); #endif - vec4 block_color = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); + vec4 blockColor = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); #else #if MC_VERSION < 11604 #if AA_TYPE > 0 @@ -79,18 +79,18 @@ void main() { vec4 background_color = texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), 0); #endif - vec4 block_color = star_data; + vec4 blockColor = star_data; - block_color = mix(background_color, block_color, block_color); + blockColor = mix(background_color, blockColor, blockColor); #if MC_VERSION >= 11604 - // block_color.a = star_data.a; + // blockColor.a = star_data.a; #endif #endif #if MC_VERSION >= 11604 - block_color.rgba = vec4(texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb, clamp(star_data.a * 2.0, 0.0, 1.0)); + blockColor.rgba = vec4(texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb, clamp(star_data.a * 2.0, 0.0, 1.0)); #endif #include "/src/writebuffers.glsl" diff --git a/shaders/common/skytextured_fragment.glsl b/shaders/common/skytextured_fragment.glsl index 24a533fc..c141f148 100644 --- a/shaders/common/skytextured_fragment.glsl +++ b/shaders/common/skytextured_fragment.glsl @@ -28,17 +28,17 @@ varying float sky_luma_correction; // Flat void main() { #if defined THE_END - vec4 block_color = vec4(ZENITH_DAY_COLOR, 0.0); + vec4 blockColor = vec4(ZENITH_DAY_COLOR, 0.0); // vec3 background_color = ZENITH_DAY_COLOR; #elif defined NETHER // Unused vec4 background_color_full = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); vec3 background_color = background_color_full.rgb; - vec4 block_color = vec4(background_color, 1.0); + vec4 blockColor = vec4(background_color, 1.0); #else // Toma el color puro del bloque - vec4 block_color = texture2D(tex, texcoord) * tint_color; + vec4 blockColor = texture2D(tex, texcoord) * tint_color; - block_color.rgb *= sky_luma_correction; + blockColor.rgb *= sky_luma_correction; #endif #include "/src/writebuffers.glsl" diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 9a7255d7..3ba7ad19 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -153,16 +153,16 @@ void main() { // Toma el color puro del bloque #if defined GBUFFER_ENTITIES && BLACK_ENTITY_FIX == 1 - vec4 block_color = texture2D(tex, texcoord); - if(block_color.a < 0.1 && entityId != 10101) { // Black entities bug workaround + vec4 blockColor = texture2D(tex, texcoord); + if(blockColor.a < 0.1 && entityId != 10101) { // Black entities bug workaround discard; } - block_color *= tint_color; + blockColor *= tint_color; #else - vec4 block_color = texture2D(tex, texcoord) * tint_color; + vec4 blockColor = texture2D(tex, texcoord) * tint_color; #endif - float block_luma = luma(block_color.rgb); + float block_luma = luma(blockColor.rgb); vec3 final_candle_color = candle_color; #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND @@ -172,13 +172,13 @@ void main() { #endif #ifdef GBUFFER_WEATHER - block_color.a *= .5; + blockColor.a *= .5; #endif #if defined GBUFFER_ENTITIES // Thunderbolt render if(entityId == 10101) { - block_color.a = 1.0; + blockColor.a = 1.0; } #endif @@ -209,10 +209,10 @@ void main() { #endif #if defined GBUFFER_BEACONBEAM - block_color.rgb *= 1.5; + blockColor.rgb *= 1.5; #elif defined GBUFFER_ENTITY_GLOW - block_color.rgb = - clamp(vec3(luma(block_color.rgb)) * vec3(0.75, 0.75, 1.5), vec3(0.3), vec3(1.0)); + blockColor.rgb = + clamp(vec3(luma(blockColor.rgb)) * vec3(0.75, 0.75, 1.5), vec3(0.3), vec3(1.0)); vec3 real_light = omni_light + (shadow_c * direct_light_color * direct_light_strength) * (1.0 - (rainStrength * 0.75)) + final_candle_color; @@ -239,22 +239,22 @@ void main() { final_candle_color; #endif - block_color.rgb *= mix(real_light, vec3(1.0), nightVision * 0.125); - block_color.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); + blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * 0.125); + blockColor.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); #endif #if defined GBUFFER_ENTITIES if(entityId == 10101) { // Thunderbolt render - block_color = vec4(1.0, 1.0, 1.0, 0.5); + blockColor = vec4(1.0, 1.0, 1.0, 0.5); } else { float entity_poderation = luma(real_light); // Red damage bright ponderation - block_color.rgb = mix(block_color.rgb, entityColor.rgb, entityColor.a * entity_poderation * 3.0); + blockColor.rgb = mix(blockColor.rgb, entityColor.rgb, entityColor.a * entity_poderation * 3.0); } #endif #if MC_VERSION < 11300 && defined GBUFFER_TEXTURED - block_color.rgb *= 1.5; + blockColor.rgb *= 1.5; #endif #include "/src/finalcolor.glsl" diff --git a/shaders/common/solid_dh_blocks_fragment.glsl b/shaders/common/solid_dh_blocks_fragment.glsl index 42f7028c..9db6bada 100644 --- a/shaders/common/solid_dh_blocks_fragment.glsl +++ b/shaders/common/solid_dh_blocks_fragment.glsl @@ -52,14 +52,14 @@ void main() { return; } - vec4 block_color = tint_color; + vec4 blockColor = tint_color; // Synthetic pseudo-texture vec3 synth_pos = (position.xyz + cameraPosition) * 6.0; synth_pos = floor(synth_pos + 0.01); float synth_noise = (hash13(synth_pos) - 0.5) * 0.1; - block_color.rgb += vec3(synth_noise); - block_color.rgb = clamp(block_color.rgb, vec3(0.0), vec3(1.0)); + blockColor.rgb += vec3(synth_noise); + blockColor.rgb = clamp(blockColor.rgb, vec3(0.0), vec3(1.0)); float block_luma = luma(tint_color.rgb); @@ -72,10 +72,10 @@ void main() { (shadow_c * direct_light_color * direct_light_strength) * (1.0 - (rainStrength * 0.75)) + final_candle_color; - block_color.rgb *= mix(real_light, vec3(1.0), nightVision * 0.125); - block_color.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); + blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * 0.125); + blockColor.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); - block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); #include "/src/finalcolor_dh.glsl" #include "/src/writebuffers.glsl" diff --git a/shaders/common/solid_dh_water_fragment.glsl b/shaders/common/solid_dh_water_fragment.glsl index b36cef67..061e876b 100644 --- a/shaders/common/solid_dh_water_fragment.glsl +++ b/shaders/common/solid_dh_water_fragment.glsl @@ -146,7 +146,7 @@ void main() { sky_color_reflect = xyz_to_rgb(sky_color_reflect); #if !defined VANILLA_WATER && WATER_TEXTURE == 1 - vec4 block_color = vec4(0.1); + vec4 blockColor = vec4(0.1); // Synthetic water texture vec3 synth_pos = (position.xyz + cameraPosition) * 8.0; synth_pos = floor(synth_pos + 0.01); @@ -155,7 +155,7 @@ void main() { noise *= noise; noise *= noise; float synth_noise = (noise * 0.3) + 0.5; - block_color.rgb += vec3(synth_noise); + blockColor.rgb += vec3(synth_noise); #elif defined VANILLA_WATER // Synthetic water texture vec3 synth_pos = (position.xyz + cameraPosition) * 8.0; @@ -164,16 +164,16 @@ void main() { noise *= noise; noise *= noise; float synth_noise = (noise * 0.227) + 0.773; - vec4 block_color = vec4(vec3(synth_noise), tint_color.a); + vec4 blockColor = vec4(vec3(synth_noise), tint_color.a); #else - vec4 block_color; + vec4 blockColor; #endif if(block_type < DH_BLOCK_WATER + 0.5 && block_type > DH_BLOCK_WATER - 0.5) { // Water #ifdef VANILLA_WATER float shadow_c = abs((light_mix * 2.0) - 1.0); - float fresnel_tex = luma(block_color.rgb); + float fresnel_tex = luma(blockColor.rgb); real_light = omni_light + (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + @@ -181,14 +181,14 @@ void main() { real_light *= (fresnel_tex * 2.0) - 0.25; - block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tint_color.rgb; + blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tint_color.rgb; - block_color.rgb = water_shader_dh(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); + blockColor.rgb = water_shader_dh(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); - block_color.a = sqrt(block_color.a); + blockColor.a = sqrt(blockColor.a); #else #if WATER_TEXTURE == 1 - float water_texture = luma(block_color.rgb); + float water_texture = luma(blockColor.rgb); #else float water_texture = 1.0; #endif @@ -198,24 +198,24 @@ void main() { candle_color; #if WATER_COLOR_SOURCE == 0 - block_color.rgb = water_texture * real_light * WATER_COLOR; + blockColor.rgb = water_texture * real_light * WATER_COLOR; #elif WATER_COLOR_SOURCE == 1 - block_color.rgb = 0.3 * water_texture * real_light * tint_color.rgb; + blockColor.rgb = 0.3 * water_texture * real_light * tint_color.rgb; #endif - block_color = vec4(refraction(fragposition, block_color.rgb, water_normal_base), 1.0); + blockColor = vec4(refraction(fragposition, blockColor.rgb, water_normal_base), 1.0); #if WATER_TEXTURE == 1 fresnel = clamp(fresnel * (water_texture * water_texture + 0.5), 0.0, 1.0); #endif - block_color.rgb = water_shader_dh(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); + blockColor.rgb = water_shader_dh(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); #endif } else { // Otros translúcidos - block_color = tint_color; + blockColor = tint_color; float shadow_c = abs((light_mix * 2.0) - 1.0); @@ -223,7 +223,7 @@ void main() { (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + candle_color; - block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125); + blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * .125); } #include "/src/finalcolor_dh.glsl" diff --git a/shaders/common/spidereyes_blocks_fragment.glsl b/shaders/common/spidereyes_blocks_fragment.glsl index 129bb089..1adba7cd 100644 --- a/shaders/common/spidereyes_blocks_fragment.glsl +++ b/shaders/common/spidereyes_blocks_fragment.glsl @@ -12,7 +12,7 @@ varying vec2 texcoord; void main() { // Toma el color puro del bloque - vec4 block_color = texture2D(tex, texcoord); + vec4 blockColor = texture2D(tex, texcoord); #include "/src/writebuffers.glsl" } diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index fe254638..5d5d787d 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -156,7 +156,7 @@ void main() { float dither = 1.0; #endif - vec4 block_color; + vec4 blockColor; vec3 real_light; #ifdef VANILLA_WATER @@ -192,7 +192,7 @@ void main() { #endif if(block_type > 2.5) { // Water #ifdef VANILLA_WATER - block_color = texture2D(tex, texcoord); + blockColor = texture2D(tex, texcoord); #if defined SHADOW_CASTING && !defined NETHER #if SHADOW_LOCK > 0 vec3 offsetVector = vNormal * 0.002; @@ -218,7 +218,7 @@ void main() { float shadow_c = abs((light_mix * 2.0) - 1.0); #endif - float fresnel_tex = luma(block_color.rgb); + float fresnel_tex = luma(blockColor.rgb); real_light = omni_light + (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + @@ -226,15 +226,15 @@ void main() { real_light *= (fresnel_tex * 2.0) - 0.25; - block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tint_color.rgb; + blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tint_color.rgb; - block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); + blockColor.rgb = water_shader(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); - block_color.a = sqrt(block_color.a); + blockColor.a = sqrt(blockColor.a); #else #if WATER_TEXTURE == 1 - block_color = texture2D(tex, texcoord); - float water_texture = luma(block_color.rgb); + blockColor = texture2D(tex, texcoord); + float water_texture = luma(blockColor.rgb); #else float water_texture = 1.0; #endif @@ -244,12 +244,12 @@ void main() { candle_color; #if WATER_COLOR_SOURCE == 0 - block_color.rgb = water_texture * real_light * WATER_COLOR; + blockColor.rgb = water_texture * real_light * WATER_COLOR; #elif WATER_COLOR_SOURCE == 1 - block_color.rgb = 0.3 * water_texture * real_light * tint_color.rgb; + blockColor.rgb = 0.3 * water_texture * real_light * tint_color.rgb; #endif - block_color = vec4(refraction(fragposition, block_color.rgb, water_normal_base), 1.0); + blockColor = vec4(refraction(fragposition, blockColor.rgb, water_normal_base), 1.0); #if WATER_TEXTURE == 1 water_texture += 0.25; @@ -258,14 +258,14 @@ void main() { fresnel = clamp(fresnel * (water_texture), 0.0, 1.0); #endif - block_color.rgb = water_shader(fragposition, surface_normal, block_color.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); + blockColor.rgb = water_shader(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); #endif } else { // Otros translúcidos - block_color = texture2D(tex, texcoord); + blockColor = texture2D(tex, texcoord); - block_color *= tint_color; + blockColor *= tint_color; #if defined SHADOW_CASTING && !defined NETHER #if defined COLORED_SHADOW @@ -283,10 +283,10 @@ void main() { (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + candle_color; - block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125); + blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * .125); if(block_type > 1.5) { // Glass - block_color = cristal_shader(fragposition, waterNormal, block_color, sky_color_reflect, fresnel * fresnel, visible_sky, dither, direct_light_color); + blockColor = cristal_shader(fragposition, waterNormal, blockColor, sky_color_reflect, fresnel * fresnel, visible_sky, dither, direct_light_color); } } diff --git a/shaders/lib/ao.glsl b/shaders/lib/ao.glsl index 7df131cb..bfa5e273 100644 --- a/shaders/lib/ao.glsl +++ b/shaders/lib/ao.glsl @@ -18,7 +18,7 @@ float dbao(float dither) { float angle = 0.0; float dist = 0.0; float farAndCheck = handCheck * 2.0 * far; - vec2 scale = vec2(aspectRatioInverse, 1.0) * (fov_y_inv / (linearDepth * far)); + vec2 scale = vec2(aspectRatioInverse, 1.0) * (fovYInverse / (linearDepth * far)); vec2 scaleFactor = scale * stepsInverse; float checkDepth; diff --git a/shaders/lib/blur.glsl b/shaders/lib/blur.glsl index 5a5cf9f9..9ef37194 100644 --- a/shaders/lib/blur.glsl +++ b/shaders/lib/blur.glsl @@ -5,13 +5,13 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ vec3 noised_blur(vec4 color_depth, sampler2D image, vec2 coords, float force, float dither) { - vec3 block_color = color_depth.rgb; + vec3 blockColor = color_depth.rgb; float the_depth = color_depth.a; float blur_radius = 0.0; if (the_depth > 0.56) { // Manos no blur_radius = - max(abs(the_depth - centerDepthSmooth) - 0.000075, 0.0) * fov_y_inv; + max(abs(the_depth - centerDepthSmooth) - 0.000075, 0.0) * fovYInverse; blur_radius = blur_radius * inversesqrt(0.1 + blur_radius * blur_radius) * force; blur_radius = min(blur_radius, 0.1); } @@ -29,8 +29,8 @@ vec3 noised_blur(vec4 color_depth, sampler2D image, vec2 coords, float force, fl blur_sample += texture2D(image, coords + offset, -2.0).rgb; blur_sample += texture2D(image, coords - offset, -2.0).rgb; - block_color = blur_sample * 0.5; + blockColor = blur_sample * 0.5; } - return block_color; + return blockColor; } diff --git a/shaders/lib/volumetric_clouds.glsl b/shaders/lib/volumetric_clouds.glsl index 4a9327a5..f7bd7afc 100644 --- a/shaders/lib/volumetric_clouds.glsl +++ b/shaders/lib/volumetric_clouds.glsl @@ -2,7 +2,7 @@ Fast volumetric clouds - MakeUp implementation */ -vec3 get_cloud_old(vec3 view_vector, vec3 block_color, float bright, float dither, vec3 base_pos, int samples, float umbral, vec3 cloud_color, vec3 dark_cloud_color) { +vec3 get_cloud_old(vec3 view_vector, vec3 blockColor, float bright, float dither, vec3 base_pos, int samples, float umbral, vec3 cloud_color, vec3 dark_cloud_color) { float plane_distance; float cloud_value; float density; @@ -23,7 +23,7 @@ vec3 get_cloud_old(vec3 view_vector, vec3 block_color, float bright, float dithe float dist_aux_coeff_blur; #if VOL_LIGHT == 0 - block_color.rgb *= + blockColor.rgb *= clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; #endif @@ -31,7 +31,7 @@ vec3 get_cloud_old(vec3 view_vector, vec3 block_color, float bright, float dithe float d_dh = texture2D(dhDepthTex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight)).r; float linear_d_dh = ld_dh(d_dh); if (linear_d_dh < 0.9999) { - return block_color; + return blockColor; } #endif @@ -135,26 +135,26 @@ vec3 get_cloud_old(vec3 view_vector, vec3 block_color, float bright, float dithe cloud_color = mix(cloud_color, cloud_color * 13.0, (1.0 - pow(cloud_value, 0.2)) * bright * bright * (1.0 - rainStrength)); - block_color = mix( - block_color, + blockColor = mix( + blockColor, cloud_color, cloud_value * clamp((view_vector.y - 0.06) * 5.0, 0.0, 1.0) ); } - return block_color; + return blockColor; } -vec3 get_cloud(vec3 view_vector, vec3 block_color, float bright, float dither, vec3 base_pos, int samples, float umbral, vec3 cloud_color, vec3 dark_cloud_color) { +vec3 get_cloud(vec3 view_vector, vec3 blockColor, float bright, float dither, vec3 base_pos, int samples, float umbral, vec3 cloud_color, vec3 dark_cloud_color) { #if VOL_LIGHT == 0 - block_color.rgb *= clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; + blockColor.rgb *= clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; #endif #if defined DISTANT_HORIZONS && defined DEFERRED_SHADER float d_dh = texture2D(dhDepthTex0, gl_FragCoord.xy / vec2(viewWidth, viewHeight)).r; float linear_d_dh = ld_dh(d_dh); if (linear_d_dh < 0.9999) { - return block_color; + return blockColor; } #endif @@ -242,8 +242,8 @@ vec3 get_cloud(vec3 view_vector, vec3 block_color, float bright, float dither, v float cloud_value_approx = sqrt(sqrt(cloud_value)); cloud_color = mix(cloud_color, cloud_color * 13.0, (1.0 - cloud_value_approx) * bright * bright * (1.0 - rainStrength)); - block_color = mix(block_color, cloud_color, cloud_value * clamp((view_vector.y - 0.06) * 5.0, 0.0, 1.0)); + blockColor = mix(blockColor, cloud_color, cloud_value * clamp((view_vector.y - 0.06) * 5.0, 0.0, 1.0)); } - return block_color; + return blockColor; } diff --git a/shaders/lib/volumetric_clouds_end.glsl b/shaders/lib/volumetric_clouds_end.glsl index a99f26a7..fd5f10a5 100644 --- a/shaders/lib/volumetric_clouds_end.glsl +++ b/shaders/lib/volumetric_clouds_end.glsl @@ -2,21 +2,21 @@ Fast volumetric clouds (for The End) - MakeUp implementation */ -vec3 get_end_cloud(vec3 view_vector, vec3 block_color, float bright, float dither, vec3 base_pos, int samples) { - block_color.rgb *= clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; +vec3 get_end_cloud(vec3 view_vector, vec3 blockColor, float bright, float dither, vec3 base_pos, int samples) { + blockColor.rgb *= clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; #if defined DISTANT_HORIZONS && defined DEFERRED_SHADER float d_dh = texture2DLod(dhDepthTex0, gl_FragCoord.xy / vec2(viewWidth, viewHeight), 0.0).r; float linear_d_dh = ld_dh(d_dh); if (linear_d_dh < 0.9999) { - return block_color; + return blockColor; } #endif if (view_vector.y > 0.0) { // Vista sobre el horizonte float umbral = 0.25; - vec3 cloud_color = block_color * 1.75; - vec3 dark_cloud_color = block_color * 0.9; + vec3 cloud_color = blockColor * 1.75; + vec3 dark_cloud_color = blockColor * 0.9; float view_y_inv = 1.0 / view_vector.y; @@ -90,9 +90,9 @@ vec3 get_end_cloud(vec3 view_vector, vec3 block_color, float bright, float dithe cloud_color = mix(cloud_color, dark_cloud_color, sqrt(density)); cloud_color = mix(cloud_color, cloud_color * 2.0, (1.0 - cloud_value) * bright); - block_color = mix(block_color, cloud_color, cloud_value * clamp((view_vector.y - 0.06) * 5.0, 0.0, 1.0)); - block_color = mix(block_color, vec3(1.0), clamp(bright * .04, 0.0, 1.0)); + blockColor = mix(blockColor, cloud_color, cloud_value * clamp((view_vector.y - 0.06) * 5.0, 0.0, 1.0)); + blockColor = mix(blockColor, vec3(1.0), clamp(bright * .04, 0.0, 1.0)); } - return block_color; + return blockColor; } \ No newline at end of file diff --git a/shaders/shaders.properties b/shaders/shaders.properties index a11859e8..9ade5e27 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -213,10 +213,10 @@ uniform.int.frame_mod = fmod(frameCounter, 16) #endif # FOV - A precalculated value related to FOV -uniform.float.fov_y_inv = 1.0 / atan(1.0 / gbufferProjection.1.1) * 0.5 +uniform.float.fovYInverse = 1.0 / atan(1.0 / gbufferProjection.1.1) * 0.5 # float horizontalFOV = atan(1.0 / gbufferProjection[0].x); -# float verticalFOV = atan(1.0 / gbufferProjection[1].y); <-- fov_y_inv +# float verticalFOV = atan(1.0 / gbufferProjection[1].y); <-- fovYInverse #ifdef DISTANT_HORIZONS dhShadow.enabled = false diff --git a/shaders/src/cloudfinalcolor.glsl b/shaders/src/cloudfinalcolor.glsl index 830bc41a..39438a2e 100644 --- a/shaders/src/cloudfinalcolor.glsl +++ b/shaders/src/cloudfinalcolor.glsl @@ -1,15 +1,15 @@ #if MC_VERSION < 12106 - block_color.rgb = + blockColor.rgb = mix( - block_color.rgb, + blockColor.rgb, texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), 0.0).rgb, clamp(pow(gl_FogFragCoord / (far * 1.66), 1.5), 0.0, 1.0) ); #else - block_color.rgb = + blockColor.rgb = mix( - block_color.rgb, + blockColor.rgb, texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), 0.0).rgb, clamp(pow(gl_FogFragCoord / (2000.0), 1.5), 0.0, 1.0) ); diff --git a/shaders/src/finalcolor.glsl b/shaders/src/finalcolor.glsl index 7b0eb5ca..ca8951aa 100644 --- a/shaders/src/finalcolor.glsl +++ b/shaders/src/finalcolor.glsl @@ -1,10 +1,10 @@ #if defined THE_END if(isEyeInWater == 0 && FOG_ADJUST < 15.0) { // In the air - block_color.rgb = mix(block_color.rgb, ZENITH_DAY_COLOR, frog_adjust); + blockColor.rgb = mix(blockColor.rgb, ZENITH_DAY_COLOR, frog_adjust); } #elif defined NETHER if(isEyeInWater == 0 && FOG_ADJUST < 15.0) { // In the air - block_color.rgb = mix(block_color.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frog_adjust); + blockColor.rgb = mix(blockColor.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frog_adjust); } #else #ifdef FOG_ACTIVE // Fog active @@ -20,11 +20,11 @@ #endif #if defined GBUFFER_ENTITIES if(isEyeInWater == 0 && entityId != 10101 && FOG_ADJUST < 15.0) { // In the air - block_color.rgb = mix(block_color.rgb, fog_texture, frog_adjust); + blockColor.rgb = mix(blockColor.rgb, fog_texture, frog_adjust); } #else if(isEyeInWater == 0) { // In the air - block_color.rgb = mix(block_color.rgb, fog_texture, frog_adjust); + blockColor.rgb = mix(blockColor.rgb, fog_texture, frog_adjust); } #endif #endif @@ -32,10 +32,10 @@ #if MC_VERSION >= 11900 if(blindness > .01 || darknessFactor > .01) { - block_color.rgb = mix(block_color.rgb, vec3(0.0), max(blindness, darknessLightFactor) * gl_FogFragCoord * 0.24); + blockColor.rgb = mix(blockColor.rgb, vec3(0.0), max(blindness, darknessLightFactor) * gl_FogFragCoord * 0.24); } #else if(blindness > .01) { - block_color.rgb = mix(block_color.rgb, vec3(0.0), blindness * gl_FogFragCoord * 0.24); + blockColor.rgb = mix(blockColor.rgb, vec3(0.0), blindness * gl_FogFragCoord * 0.24); } #endif \ No newline at end of file diff --git a/shaders/src/finalcolor_dh.glsl b/shaders/src/finalcolor_dh.glsl index e31ac4c0..c6be58bf 100644 --- a/shaders/src/finalcolor_dh.glsl +++ b/shaders/src/finalcolor_dh.glsl @@ -1,15 +1,15 @@ #if defined DH_WATER if(isEyeInWater == 0) { vec3 fog_texture = texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), 0.0).rgb; - block_color.rgb = mix(block_color.rgb, fog_texture, frog_adjust); + blockColor.rgb = mix(blockColor.rgb, fog_texture, frog_adjust); } #elif defined NETHER #if NETHER_FOG_DISTANCE == 1 - block_color.rgb = mix(fogColor * 0.1, vec3(1.0), 0.04); + blockColor.rgb = mix(fogColor * 0.1, vec3(1.0), 0.04); #else - block_color.rgb = mix(block_color.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frog_adjust); + blockColor.rgb = mix(blockColor.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frog_adjust); #endif #else vec3 fog_texture = texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), 0.0).rgb; - block_color.rgb = mix(block_color.rgb, fog_texture, frog_adjust); + blockColor.rgb = mix(blockColor.rgb, fog_texture, frog_adjust); #endif \ No newline at end of file diff --git a/shaders/src/writebuffers.glsl b/shaders/src/writebuffers.glsl index a930ab93..1869d99f 100644 --- a/shaders/src/writebuffers.glsl +++ b/shaders/src/writebuffers.glsl @@ -1,24 +1,24 @@ #ifdef WATER_F - block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); /* DRAWBUFFERS:1 */ - gl_FragData[0] = block_color; + gl_FragData[0] = blockColor; #elif (defined SPECIAL_TRANS && MC_VERSION >= 11300) || defined GBUFFER_HAND_WATER /* DRAWBUFFERS:1 */ - gl_FragData[0] = block_color; + gl_FragData[0] = blockColor; #else #if defined SET_FOG_COLOR /* DRAWBUFFERS:17 */ - block_color = clamp(block_color, vec3(0.0), vec3(50.0)); - gl_FragData[0] = vec4(block_color, 1.0); - gl_FragData[1] = vec4(block_color, 1.0); + blockColor = clamp(blockColor, vec3(0.0), vec3(50.0)); + gl_FragData[0] = vec4(blockColor, 1.0); + gl_FragData[1] = vec4(blockColor, 1.0); #elif MC_VERSION < 11604 && defined GBUFFER_SKYBASIC /* DRAWBUFFERS:17 */ - block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); - gl_FragData[0] = block_color; - gl_FragData[1] = block_color; + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); + gl_FragData[0] = blockColor; + gl_FragData[1] = blockColor; #else /* DRAWBUFFERS:1 */ - block_color = clamp(block_color, vec4(0.0), vec4(vec3(50.0), 1.0)); - gl_FragData[0] = block_color; + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); + gl_FragData[0] = blockColor; #endif #endif From baca0ab9c377c383e483ed63e581a1a387201b7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 5 Jan 2026 02:16:31 -0600 Subject: [PATCH 098/147] Refactor III --- shaders/common/composite_fragment.glsl | 60 +++++++++---------- shaders/common/composite_vertex.glsl | 6 +- shaders/common/deferred_fragment.glsl | 20 +++---- shaders/common/solid_dh_water_fragment.glsl | 4 +- shaders/composite.fsh | 1 + shaders/composite.vsh | 1 + shaders/composite1.fsh | 1 + shaders/composite1.vsh | 1 + shaders/composite2.fsh | 1 + shaders/composite2.vsh | 1 + shaders/deferred.fsh | 1 + shaders/deferred.vsh | 1 + shaders/final.fsh | 1 + shaders/final.vsh | 1 + shaders/gbuffers_armor_glint.fsh | 1 + shaders/gbuffers_armor_glint.vsh | 1 + shaders/gbuffers_basic.fsh | 1 + shaders/gbuffers_basic.vsh | 1 + shaders/gbuffers_beaconbeam.fsh | 1 + shaders/gbuffers_beaconbeam.vsh | 1 + shaders/gbuffers_block.fsh | 1 + shaders/gbuffers_block.vsh | 1 + shaders/gbuffers_clouds.fsh | 1 + shaders/gbuffers_clouds.vsh | 1 + shaders/gbuffers_damagedblock.fsh | 1 + shaders/gbuffers_damagedblock.vsh | 1 + shaders/gbuffers_entities.fsh | 1 + shaders/gbuffers_entities.vsh | 1 + shaders/gbuffers_entities_glowing.fsh | 1 + shaders/gbuffers_entities_glowing.vsh | 1 + shaders/gbuffers_hand.fsh | 1 + shaders/gbuffers_hand.vsh | 1 + shaders/gbuffers_hand_water.fsh | 1 + shaders/gbuffers_hand_water.vsh | 1 + shaders/gbuffers_line.fsh | 1 + shaders/gbuffers_line.vsh | 1 + shaders/gbuffers_skybasic.fsh | 1 + shaders/gbuffers_skybasic.vsh | 1 + shaders/gbuffers_skytextured.fsh | 1 + shaders/gbuffers_skytextured.vsh | 1 + shaders/gbuffers_spidereyes.fsh | 1 + shaders/gbuffers_spidereyes.vsh | 1 + shaders/gbuffers_terrain.fsh | 1 + shaders/gbuffers_terrain.vsh | 1 + shaders/gbuffers_textured.fsh | 1 + shaders/gbuffers_textured.vsh | 1 + shaders/gbuffers_water.fsh | 1 + shaders/gbuffers_water.vsh | 1 + shaders/gbuffers_weather.fsh | 1 + shaders/gbuffers_weather.vsh | 1 + shaders/lib/material_gloss_fragment.glsl | 10 ++-- shaders/lib/volumetric_clouds.glsl | 24 ++++---- shaders/lib/volumetric_clouds_end.glsl | 12 ++-- shaders/lib/volumetric_light.glsl | 2 +- shaders/lib/water.glsl | 4 +- shaders/lib/water_dh.glsl | 4 +- shaders/prepare.fsh | 1 + shaders/prepare.vsh | 1 + shaders/shadow.fsh | 1 + shaders/shadow.vsh | 1 + shaders/world-1/composite.fsh | 1 + shaders/world-1/composite.vsh | 1 + shaders/world-1/composite1.fsh | 1 + shaders/world-1/composite1.vsh | 1 + shaders/world-1/composite2.fsh | 1 + shaders/world-1/composite2.vsh | 1 + shaders/world-1/deferred.fsh | 1 + shaders/world-1/deferred.vsh | 1 + shaders/world-1/dh_terrain.fsh | 1 + shaders/world-1/dh_terrain.vsh | 1 + shaders/world-1/dh_water.fsh | 1 + shaders/world-1/dh_water.vsh | 1 + shaders/world-1/final.fsh | 1 + shaders/world-1/final.vsh | 1 + shaders/world-1/gbuffers_armor_glint.fsh | 1 + shaders/world-1/gbuffers_armor_glint.vsh | 1 + shaders/world-1/gbuffers_basic.fsh | 1 + shaders/world-1/gbuffers_basic.vsh | 1 + shaders/world-1/gbuffers_beaconbeam.fsh | 1 + shaders/world-1/gbuffers_beaconbeam.vsh | 1 + shaders/world-1/gbuffers_block.fsh | 1 + shaders/world-1/gbuffers_block.vsh | 1 + shaders/world-1/gbuffers_clouds.fsh | 1 + shaders/world-1/gbuffers_clouds.vsh | 1 + shaders/world-1/gbuffers_damagedblock.fsh | 1 + shaders/world-1/gbuffers_damagedblock.vsh | 1 + shaders/world-1/gbuffers_entities.fsh | 1 + shaders/world-1/gbuffers_entities.vsh | 1 + shaders/world-1/gbuffers_entities_glowing.fsh | 1 + shaders/world-1/gbuffers_entities_glowing.vsh | 1 + shaders/world-1/gbuffers_hand.fsh | 1 + shaders/world-1/gbuffers_hand.vsh | 1 + shaders/world-1/gbuffers_hand_water.fsh | 1 + shaders/world-1/gbuffers_hand_water.vsh | 1 + shaders/world-1/gbuffers_line.fsh | 1 + shaders/world-1/gbuffers_line.vsh | 1 + shaders/world-1/gbuffers_skybasic.fsh | 1 + shaders/world-1/gbuffers_skybasic.vsh | 1 + shaders/world-1/gbuffers_skytextured.fsh | 1 + shaders/world-1/gbuffers_skytextured.vsh | 1 + shaders/world-1/gbuffers_spidereyes.fsh | 1 + shaders/world-1/gbuffers_spidereyes.vsh | 1 + shaders/world-1/gbuffers_terrain.fsh | 1 + shaders/world-1/gbuffers_terrain.vsh | 1 + shaders/world-1/gbuffers_textured.fsh | 1 + shaders/world-1/gbuffers_textured.vsh | 1 + shaders/world-1/gbuffers_water.fsh | 1 + shaders/world-1/gbuffers_water.vsh | 1 + shaders/world-1/gbuffers_weather.fsh | 1 + shaders/world-1/gbuffers_weather.vsh | 1 + shaders/world-1/prepare.fsh | 1 + shaders/world-1/prepare.vsh | 1 + shaders/world0/composite.fsh | 1 + shaders/world0/composite.vsh | 1 + shaders/world0/composite1.fsh | 1 + shaders/world0/composite1.vsh | 1 + shaders/world0/composite2.fsh | 1 + shaders/world0/composite2.vsh | 1 + shaders/world0/deferred.fsh | 1 + shaders/world0/deferred.vsh | 1 + shaders/world0/dh_terrain.fsh | 1 + shaders/world0/dh_terrain.vsh | 1 + shaders/world0/dh_water.fsh | 1 + shaders/world0/dh_water.vsh | 1 + shaders/world0/final.fsh | 1 + shaders/world0/final.vsh | 1 + shaders/world0/gbuffers_armor_glint.fsh | 1 + shaders/world0/gbuffers_armor_glint.vsh | 1 + shaders/world0/gbuffers_basic.fsh | 1 + shaders/world0/gbuffers_basic.vsh | 1 + shaders/world0/gbuffers_beaconbeam.fsh | 1 + shaders/world0/gbuffers_beaconbeam.vsh | 1 + shaders/world0/gbuffers_block.fsh | 1 + shaders/world0/gbuffers_block.vsh | 1 + shaders/world0/gbuffers_clouds.fsh | 1 + shaders/world0/gbuffers_clouds.vsh | 1 + shaders/world0/gbuffers_damagedblock.fsh | 1 + shaders/world0/gbuffers_damagedblock.vsh | 1 + shaders/world0/gbuffers_entities.fsh | 1 + shaders/world0/gbuffers_entities.vsh | 1 + shaders/world0/gbuffers_entities_glowing.fsh | 1 + shaders/world0/gbuffers_entities_glowing.vsh | 1 + shaders/world0/gbuffers_hand.fsh | 1 + shaders/world0/gbuffers_hand.vsh | 1 + shaders/world0/gbuffers_hand_water.fsh | 1 + shaders/world0/gbuffers_hand_water.vsh | 1 + shaders/world0/gbuffers_line.fsh | 1 + shaders/world0/gbuffers_line.vsh | 1 + shaders/world0/gbuffers_skybasic.fsh | 1 + shaders/world0/gbuffers_skybasic.vsh | 1 + shaders/world0/gbuffers_skytextured.fsh | 1 + shaders/world0/gbuffers_skytextured.vsh | 1 + shaders/world0/gbuffers_spidereyes.fsh | 1 + shaders/world0/gbuffers_spidereyes.vsh | 1 + shaders/world0/gbuffers_terrain.fsh | 1 + shaders/world0/gbuffers_terrain.vsh | 1 + shaders/world0/gbuffers_textured.fsh | 1 + shaders/world0/gbuffers_textured.vsh | 1 + shaders/world0/gbuffers_water.fsh | 1 + shaders/world0/gbuffers_water.vsh | 1 + shaders/world0/gbuffers_weather.fsh | 1 + shaders/world0/gbuffers_weather.vsh | 1 + shaders/world0/prepare.fsh | 1 + shaders/world0/prepare.vsh | 1 + shaders/world0/shadow.fsh | 1 + shaders/world0/shadow.vsh | 1 + shaders/world1/composite.fsh | 1 + shaders/world1/composite.vsh | 1 + shaders/world1/composite1.fsh | 1 + shaders/world1/composite1.vsh | 1 + shaders/world1/composite2.fsh | 1 + shaders/world1/composite2.vsh | 1 + shaders/world1/deferred.fsh | 1 + shaders/world1/deferred.vsh | 1 + shaders/world1/dh_terrain.fsh | 1 + shaders/world1/dh_terrain.vsh | 1 + shaders/world1/dh_water.fsh | 1 + shaders/world1/dh_water.vsh | 1 + shaders/world1/final.fsh | 1 + shaders/world1/final.vsh | 1 + shaders/world1/gbuffers_armor_glint.fsh | 1 + shaders/world1/gbuffers_armor_glint.vsh | 1 + shaders/world1/gbuffers_basic.fsh | 1 + shaders/world1/gbuffers_basic.vsh | 1 + shaders/world1/gbuffers_beaconbeam.fsh | 1 + shaders/world1/gbuffers_beaconbeam.vsh | 1 + shaders/world1/gbuffers_block.fsh | 1 + shaders/world1/gbuffers_block.vsh | 1 + shaders/world1/gbuffers_clouds.fsh | 1 + shaders/world1/gbuffers_clouds.vsh | 1 + shaders/world1/gbuffers_damagedblock.fsh | 1 + shaders/world1/gbuffers_damagedblock.vsh | 1 + shaders/world1/gbuffers_entities.fsh | 1 + shaders/world1/gbuffers_entities.vsh | 1 + shaders/world1/gbuffers_entities_glowing.fsh | 1 + shaders/world1/gbuffers_entities_glowing.vsh | 1 + shaders/world1/gbuffers_hand.fsh | 1 + shaders/world1/gbuffers_hand.vsh | 1 + shaders/world1/gbuffers_hand_water.fsh | 1 + shaders/world1/gbuffers_hand_water.vsh | 1 + shaders/world1/gbuffers_line.fsh | 1 + shaders/world1/gbuffers_line.vsh | 1 + shaders/world1/gbuffers_skybasic.fsh | 1 + shaders/world1/gbuffers_skybasic.vsh | 1 + shaders/world1/gbuffers_skytextured.fsh | 1 + shaders/world1/gbuffers_skytextured.vsh | 1 + shaders/world1/gbuffers_spidereyes.fsh | 1 + shaders/world1/gbuffers_spidereyes.vsh | 1 + shaders/world1/gbuffers_terrain.fsh | 1 + shaders/world1/gbuffers_terrain.vsh | 1 + shaders/world1/gbuffers_textured.fsh | 1 + shaders/world1/gbuffers_textured.vsh | 1 + shaders/world1/gbuffers_water.fsh | 1 + shaders/world1/gbuffers_water.vsh | 1 + shaders/world1/gbuffers_weather.fsh | 1 + shaders/world1/gbuffers_weather.vsh | 1 + shaders/world1/prepare.fsh | 1 + shaders/world1/prepare.vsh | 1 + shaders/world1/shadow.fsh | 1 + shaders/world1/shadow.vsh | 1 + 220 files changed, 283 insertions(+), 73 deletions(-) diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index e717c19d..e7174e37 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -63,7 +63,7 @@ varying float exposure; #if VOL_LIGHT == 1 && !defined NETHER varying vec3 vol_light_color; varying vec2 lightpos; - varying vec3 astro_pos; + varying vec3 astroLightPos; #endif #if VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER @@ -141,39 +141,39 @@ void main() { vol_light = 0.5; } #else - float vol_light = ss_godrays(dither); + float vol_light = ssGodrays(dither); #endif - vec4 center_world_pos = modeli_times_projectioni * (vec4(0.5, 0.5, 1.0, 1.0) * 2.0 - 1.0); - vec3 center_view_vector = normalize(center_world_pos.xyz); + vec4 centerFarPlanePos = modeli_times_projectioni * (vec4(0.5, 0.5, 1.0, 1.0) * 2.0 - 1.0); + vec3 centerEyeDirection = normalize(centerFarPlanePos.xyz); - vec4 world_pos = modeli_times_projectioni * (vec4(texcoord, 1.0, 1.0) * 2.0 - 1.0); - vec3 view_vector = normalize(world_pos.xyz); + vec4 farPlaneClipPos = modeli_times_projectioni * (vec4(texcoord, 1.0, 1.0) * 2.0 - 1.0); + vec3 eyeDirection = normalize(farPlaneClipPos.xyz); #if defined THE_END // Fixed light source position in sky for intensity calculation - vec3 intermediate_vector = + vec3 auxVector = normalize((gbufferModelViewInverse * gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz); - float vol_intensity = - clamp(dot(center_view_vector, intermediate_vector), 0.0, 1.0); + float volumetricIntensity = + clamp(dot(centerEyeDirection, auxVector), 0.0, 1.0); - vol_intensity *= clamp(dot(view_vector, intermediate_vector), 0.0, 1.0); + volumetricIntensity *= clamp(dot(eyeDirection, auxVector), 0.0, 1.0); - vol_intensity *= 0.666; + volumetricIntensity *= 0.666; - blockColor.rgb += (vol_light_color * vol_light * vol_intensity * 2.0); + blockColor.rgb += (vol_light_color * vol_light * volumetricIntensity * 2.0); #else // Light source position for depth based godrays intensity calculation - vec3 intermediate_vector = - normalize((gbufferModelViewInverse * vec4(astro_pos, 0.0)).xyz); - float vol_intensity = - clamp(dot(center_view_vector, intermediate_vector), 0.0, 1.0); - vol_intensity *= dot(view_vector, intermediate_vector); - vol_intensity = - pow(clamp(vol_intensity, 0.0, 1.0), vol_mixer) * 0.5 * abs(light_mix * 2.0 - 1.0); + vec3 auxVector = + normalize((gbufferModelViewInverse * vec4(astroLightPos, 0.0)).xyz); + float volumetricIntensity = + clamp(dot(centerEyeDirection, auxVector), 0.0, 1.0); + volumetricIntensity *= dot(eyeDirection, auxVector); + volumetricIntensity = + pow(clamp(volumetricIntensity, 0.0, 1.0), vol_mixer) * 0.5 * abs(light_mix * 2.0 - 1.0); blockColor.rgb = - mix(blockColor.rgb, vol_light_color * vol_light, vol_intensity * (vol_light * 0.5 + 0.5) * (1.0 - rainStrength)); + mix(blockColor.rgb, vol_light_color * vol_light, volumetricIntensity * (vol_light * 0.5 + 0.5) * (1.0 - rainStrength)); #endif #endif @@ -186,27 +186,27 @@ void main() { // Volumetric intensity adjustments - vec4 world_pos = modeli_times_projectioni * (vec4(texcoord, 1.0, 1.0) * 2.0 - 1.0); - vec3 view_vector = normalize(world_pos.xyz); + vec4 farPlaneClipPos = modeli_times_projectioni * (vec4(texcoord, 1.0, 1.0) * 2.0 - 1.0); + vec3 eyeDirection = normalize(farPlaneClipPos.xyz); #if defined THE_END // Fixed light source position in sky for volumetrics intensity calculation (The End) - float vol_intensity = dot(view_vector, normalize((gbufferModelViewInverse * gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz)); + float volumetricIntensity = dot(eyeDirection, normalize((gbufferModelViewInverse * gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz)); #else // Light source position for volumetrics intensity calculation - float vol_intensity = dot(view_vector, normalize((gbufferModelViewInverse * vec4(shadowLightPosition, 0.0)).xyz)); + float volumetricIntensity = dot(eyeDirection, normalize((gbufferModelViewInverse * vec4(shadowLightPosition, 0.0)).xyz)); #endif #if defined THE_END - vol_intensity = - ((square_pow(clamp((vol_intensity + .666667) * 0.6, 0.0, 1.0)) * 0.5)); - blockColor.rgb += (vol_light_color * vol_light * vol_intensity * 2.0); + volumetricIntensity = + ((square_pow(clamp((volumetricIntensity + .666667) * 0.6, 0.0, 1.0)) * 0.5)); + blockColor.rgb += (vol_light_color * vol_light * volumetricIntensity * 2.0); #else - vol_intensity = - pow(clamp((vol_intensity + 0.5) * 0.666666666666666, 0.0, 1.0), vol_mixer) * 0.6 * abs(light_mix * 2.0 - 1.0); + volumetricIntensity = + pow(clamp((volumetricIntensity + 0.5) * 0.666666666666666, 0.0, 1.0), vol_mixer) * 0.6 * abs(light_mix * 2.0 - 1.0); blockColor.rgb = - mix(blockColor.rgb, vol_light_color * vol_light, vol_intensity * (vol_light * 0.5 + 0.5) * (1.0 - rainStrength)); + mix(blockColor.rgb, vol_light_color * vol_light, volumetricIntensity * (vol_light * 0.5 + 0.5) * (1.0 - rainStrength)); #endif #endif diff --git a/shaders/common/composite_vertex.glsl b/shaders/common/composite_vertex.glsl index 146e5ef2..4d4f0cd4 100644 --- a/shaders/common/composite_vertex.glsl +++ b/shaders/common/composite_vertex.glsl @@ -48,7 +48,7 @@ varying float exposure; // Flat #if VOL_LIGHT == 1 && !defined NETHER varying vec2 lightpos; // Flat - varying vec3 astro_pos; // Flat + varying vec3 astroLightPos; // Flat #endif #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) @@ -98,8 +98,8 @@ void main() { #endif #if VOL_LIGHT == 1 && !defined NETHER - astro_pos = sunPosition * step(0.5, light_mix) * 2.0 + moonPosition; - vec4 tpos = vec4(astro_pos, 1.0) * gbufferProjection; + astroLightPos = sunPosition * step(0.5, light_mix) * 2.0 + moonPosition; + vec4 tpos = vec4(astroLightPos, 1.0) * gbufferProjection; tpos = vec4(tpos.xyz / tpos.w, 1.0); vec2 pos1 = tpos.xy / tpos.z; lightpos = pos1 * 0.5 + 0.5; diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index cf04ab8d..98b5a21d 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -112,7 +112,7 @@ void main() { vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - vec3 view_vector = vec3(1.0); + vec3 eyeDirection = vec3(1.0); #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) #if AA_TYPE > 0 @@ -124,24 +124,24 @@ void main() { #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY if(linearDepth > 0.9999) { // Only sky - vec4 world_pos = gbufferModelViewInverse * gbufferProjectionInverse * (vec4(texcoord, 1.0, 1.0) * 2.0 - 1.0); - view_vector = normalize(world_pos.xyz); + vec4 farPlaneClipPos = gbufferModelViewInverse * gbufferProjectionInverse * (vec4(texcoord, 1.0, 1.0) * 2.0 - 1.0); + eyeDirection = normalize(farPlaneClipPos.xyz); #ifdef THE_END - float bright = dot(view_vector, vec3(0.0, 0.89442719, 0.4472136)); + float bright = dot(eyeDirection, vec3(0.0, 0.89442719, 0.4472136)); bright = clamp((bright * 2.0) - 1.0, 0.0, 1.0); bright *= bright * bright * bright; #else - float bright = dot(view_vector, normalize((gbufferModelViewInverse * vec4(sunPosition, 0.0)).xyz)); + float bright = dot(eyeDirection, normalize((gbufferModelViewInverse * vec4(sunPosition, 0.0)).xyz)); bright = clamp(bright * bright * bright, 0.0, 1.0); #endif #ifdef THE_END #ifdef END_CLOUDS - blockColor.rgb = get_end_cloud(view_vector, blockColor.rgb, bright, dither, cameraPosition, CLOUD_STEPS_AVG); + blockColor.rgb = get_end_cloud(eyeDirection, blockColor.rgb, bright, dither, cameraPosition, CLOUD_STEPS_AVG); #endif #else - blockColor.rgb = get_cloud(view_vector, blockColor.rgb, bright, dither, cameraPosition, CLOUD_STEPS_AVG, umbral, cloud_color, dark_cloud_color); + blockColor.rgb = get_cloud(eyeDirection, blockColor.rgb, bright, dither, cameraPosition, CLOUD_STEPS_AVG, umbral, cloud_color, dark_cloud_color); #endif } @@ -157,8 +157,8 @@ void main() { vec4 screen_pos = vec4(gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), gl_FragCoord.z, 1.0); vec4 fragposition = gbufferProjectionInverse * (screen_pos * 2.0 - 1.0); - vec4 world_pos = gbufferModelViewInverse * vec4(fragposition.xyz, 0.0); - view_vector = normalize(world_pos.xyz); + vec4 farPlaneClipPos = gbufferModelViewInverse * vec4(fragposition.xyz, 0.0); + eyeDirection = normalize(farPlaneClipPos.xyz); } #endif #endif @@ -189,7 +189,7 @@ void main() { // Underwater sky if(isEyeInWater == 1) { if(linearDepth > 0.9999) { - blockColor.rgb = mix(NIGHT_CORRECTION * WATER_COLOR * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), blockColor.rgb, max(clamp(view_vector.y - 0.1, 0.0, 1.0), rainStrength)); + blockColor.rgb = mix(NIGHT_CORRECTION * WATER_COLOR * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), blockColor.rgb, max(clamp(eyeDirection.y - 0.1, 0.0, 1.0), rainStrength)); } } diff --git a/shaders/common/solid_dh_water_fragment.glsl b/shaders/common/solid_dh_water_fragment.glsl index 061e876b..036e4b33 100644 --- a/shaders/common/solid_dh_water_fragment.glsl +++ b/shaders/common/solid_dh_water_fragment.glsl @@ -119,8 +119,8 @@ void main() { #ifdef VANILLA_WATER vec3 water_normal_base = vec3(0.0, 0.0, 1.0); #else - vec3 world_pos = position.xyz + cameraPosition; - vec3 water_normal_base = normal_waves_dh(world_pos.xzy); + vec3 mapPos = position.xyz + cameraPosition; + vec3 water_normal_base = normal_waves_dh(mapPos.xzy); #endif vec3 surface_normal; diff --git a/shaders/composite.fsh b/shaders/composite.fsh index 532802c8..5520d828 100644 --- a/shaders/composite.fsh +++ b/shaders/composite.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite.fsh Render: Bloom and volumetric light diff --git a/shaders/composite.vsh b/shaders/composite.vsh index d4827e4f..0bed7b4d 100644 --- a/shaders/composite.vsh +++ b/shaders/composite.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite.fsh Render: Bloom and volumetric light diff --git a/shaders/composite1.fsh b/shaders/composite1.fsh index bbe70881..e63a3c96 100644 --- a/shaders/composite1.fsh +++ b/shaders/composite1.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Bloom and DoF diff --git a/shaders/composite1.vsh b/shaders/composite1.vsh index fd4c9019..e390adbd 100644 --- a/shaders/composite1.vsh +++ b/shaders/composite1.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Bloom and DoF diff --git a/shaders/composite2.fsh b/shaders/composite2.fsh index 547b766a..e4bde726 100644 --- a/shaders/composite2.fsh +++ b/shaders/composite2.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Antialiasing and motion blur diff --git a/shaders/composite2.vsh b/shaders/composite2.vsh index 2143e4a0..610eedae 100644 --- a/shaders/composite2.vsh +++ b/shaders/composite2.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Antialiasing and motion blur diff --git a/shaders/deferred.fsh b/shaders/deferred.fsh index 55e52743..b035733d 100644 --- a/shaders/deferred.fsh +++ b/shaders/deferred.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - deferred.fsh Render: Ambient occlusion, volumetric clouds diff --git a/shaders/deferred.vsh b/shaders/deferred.vsh index 80e340ec..909bf106 100644 --- a/shaders/deferred.vsh +++ b/shaders/deferred.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - deferred.vsh Render: Ambient occlusion, volumetric clouds diff --git a/shaders/final.fsh b/shaders/final.fsh index a824b8f5..c9429b76 100644 --- a/shaders/final.fsh +++ b/shaders/final.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - final.fsh Render: Final renderer diff --git a/shaders/final.vsh b/shaders/final.vsh index 7b2ef90e..f1616fc3 100644 --- a/shaders/final.vsh +++ b/shaders/final.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - final.fsh Render: Final renderer diff --git a/shaders/gbuffers_armor_glint.fsh b/shaders/gbuffers_armor_glint.fsh index 14f201ce..6017452a 100644 --- a/shaders/gbuffers_armor_glint.fsh +++ b/shaders/gbuffers_armor_glint.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_armor_glint.fsh Render: Glow objects diff --git a/shaders/gbuffers_armor_glint.vsh b/shaders/gbuffers_armor_glint.vsh index ac9fc903..ff10d45d 100644 --- a/shaders/gbuffers_armor_glint.vsh +++ b/shaders/gbuffers_armor_glint.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_armor_glint.vsh Render: Glow objects diff --git a/shaders/gbuffers_basic.fsh b/shaders/gbuffers_basic.fsh index c667a17d..039583a6 100644 --- a/shaders/gbuffers_basic.fsh +++ b/shaders/gbuffers_basic.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_basic.fsh Render: Basic elements - lines diff --git a/shaders/gbuffers_basic.vsh b/shaders/gbuffers_basic.vsh index ae248f47..f86486b3 100644 --- a/shaders/gbuffers_basic.vsh +++ b/shaders/gbuffers_basic.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_basic.vsh Render: Basic elements - lines diff --git a/shaders/gbuffers_beaconbeam.fsh b/shaders/gbuffers_beaconbeam.fsh index 65d650d5..9aac426b 100644 --- a/shaders/gbuffers_beaconbeam.fsh +++ b/shaders/gbuffers_beaconbeam.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_beaconbeam.fsh Render: Beacon beam diff --git a/shaders/gbuffers_beaconbeam.vsh b/shaders/gbuffers_beaconbeam.vsh index 5858935f..3ec8273a 100644 --- a/shaders/gbuffers_beaconbeam.vsh +++ b/shaders/gbuffers_beaconbeam.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_beaconbeam.vsh Render: Beacon beam diff --git a/shaders/gbuffers_block.fsh b/shaders/gbuffers_block.fsh index ba0ebcdf..84eed4f7 100644 --- a/shaders/gbuffers_block.fsh +++ b/shaders/gbuffers_block.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_block.fsh Render: Generic blocks diff --git a/shaders/gbuffers_block.vsh b/shaders/gbuffers_block.vsh index a5e84ebd..e0ef4437 100644 --- a/shaders/gbuffers_block.vsh +++ b/shaders/gbuffers_block.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_block.vsh Render: Generic block diff --git a/shaders/gbuffers_clouds.fsh b/shaders/gbuffers_clouds.fsh index b6b38134..ccbcf446 100644 --- a/shaders/gbuffers_clouds.fsh +++ b/shaders/gbuffers_clouds.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_clouds.fsh Render: sky, clouds diff --git a/shaders/gbuffers_clouds.vsh b/shaders/gbuffers_clouds.vsh index 95a771e8..e5222e52 100644 --- a/shaders/gbuffers_clouds.vsh +++ b/shaders/gbuffers_clouds.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_clouds.vsh Render: sky, clouds diff --git a/shaders/gbuffers_damagedblock.fsh b/shaders/gbuffers_damagedblock.fsh index 93d9c83c..ea3edbfd 100644 --- a/shaders/gbuffers_damagedblock.fsh +++ b/shaders/gbuffers_damagedblock.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_damagedblock.fsh Render: Damaged block effect diff --git a/shaders/gbuffers_damagedblock.vsh b/shaders/gbuffers_damagedblock.vsh index 67c448e2..82538de1 100644 --- a/shaders/gbuffers_damagedblock.vsh +++ b/shaders/gbuffers_damagedblock.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_damagedblock.vsh Render: Damaged block effect diff --git a/shaders/gbuffers_entities.fsh b/shaders/gbuffers_entities.fsh index 61123f0b..54c01524 100644 --- a/shaders/gbuffers_entities.fsh +++ b/shaders/gbuffers_entities.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities.fsh Render: Droped objects, mobs and things like that diff --git a/shaders/gbuffers_entities.vsh b/shaders/gbuffers_entities.vsh index 90a3c6eb..5f3cf0ee 100644 --- a/shaders/gbuffers_entities.vsh +++ b/shaders/gbuffers_entities.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities.vsh Render: Droped objects, mobs and things like that diff --git a/shaders/gbuffers_entities_glowing.fsh b/shaders/gbuffers_entities_glowing.fsh index e19f7d8b..e20f60eb 100644 --- a/shaders/gbuffers_entities_glowing.fsh +++ b/shaders/gbuffers_entities_glowing.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities_glowing.fsh Render: Droped objects, mobs and things like that... glowing diff --git a/shaders/gbuffers_entities_glowing.vsh b/shaders/gbuffers_entities_glowing.vsh index 23fc1dfc..48c4b313 100644 --- a/shaders/gbuffers_entities_glowing.vsh +++ b/shaders/gbuffers_entities_glowing.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities_glowing.vsh Render: Droped objects, mobs and things like that... glowing diff --git a/shaders/gbuffers_hand.fsh b/shaders/gbuffers_hand.fsh index e8664a9b..77c0f0a9 100644 --- a/shaders/gbuffers_hand.fsh +++ b/shaders/gbuffers_hand.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand.fsh Render: Hand opaque objects diff --git a/shaders/gbuffers_hand.vsh b/shaders/gbuffers_hand.vsh index 128007d6..ade09107 100644 --- a/shaders/gbuffers_hand.vsh +++ b/shaders/gbuffers_hand.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand.vsh Render: Hand opaque objects diff --git a/shaders/gbuffers_hand_water.fsh b/shaders/gbuffers_hand_water.fsh index d88297eb..4806eeef 100644 --- a/shaders/gbuffers_hand_water.fsh +++ b/shaders/gbuffers_hand_water.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand_water.fsh Render: Translucent hand objects diff --git a/shaders/gbuffers_hand_water.vsh b/shaders/gbuffers_hand_water.vsh index 9cf9d022..a528be39 100644 --- a/shaders/gbuffers_hand_water.vsh +++ b/shaders/gbuffers_hand_water.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand_water.vsh Render: Translucent hand objects diff --git a/shaders/gbuffers_line.fsh b/shaders/gbuffers_line.fsh index 43ef5a58..8c1245c5 100644 --- a/shaders/gbuffers_line.fsh +++ b/shaders/gbuffers_line.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_line.vsh Render: Render lines diff --git a/shaders/gbuffers_line.vsh b/shaders/gbuffers_line.vsh index 2c7e2d72..f74ffce2 100644 --- a/shaders/gbuffers_line.vsh +++ b/shaders/gbuffers_line.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_line.vsh Render: Render lines diff --git a/shaders/gbuffers_skybasic.fsh b/shaders/gbuffers_skybasic.fsh index fe7df7dc..4aeea27f 100644 --- a/shaders/gbuffers_skybasic.fsh +++ b/shaders/gbuffers_skybasic.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skybasic.fsh Render: Sky diff --git a/shaders/gbuffers_skybasic.vsh b/shaders/gbuffers_skybasic.vsh index a2de150a..bfbd9fee 100644 --- a/shaders/gbuffers_skybasic.vsh +++ b/shaders/gbuffers_skybasic.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skybasic.vsh Render: Sky diff --git a/shaders/gbuffers_skytextured.fsh b/shaders/gbuffers_skytextured.fsh index 70961f1e..5fa4d6c1 100644 --- a/shaders/gbuffers_skytextured.fsh +++ b/shaders/gbuffers_skytextured.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skytextured.fsh Render: sun, moon diff --git a/shaders/gbuffers_skytextured.vsh b/shaders/gbuffers_skytextured.vsh index d40750ae..6f5ffc33 100644 --- a/shaders/gbuffers_skytextured.vsh +++ b/shaders/gbuffers_skytextured.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skytextured.vsh Render: sun, moon diff --git a/shaders/gbuffers_spidereyes.fsh b/shaders/gbuffers_spidereyes.fsh index 4f713fba..4de29fb8 100644 --- a/shaders/gbuffers_spidereyes.fsh +++ b/shaders/gbuffers_spidereyes.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_spidereyes.fsh Render: Some creatures eyes (like spider) diff --git a/shaders/gbuffers_spidereyes.vsh b/shaders/gbuffers_spidereyes.vsh index 131fe0bb..263839e5 100644 --- a/shaders/gbuffers_spidereyes.vsh +++ b/shaders/gbuffers_spidereyes.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_spidereyes.vsh Render: Some creatures eyes (like spider) diff --git a/shaders/gbuffers_terrain.fsh b/shaders/gbuffers_terrain.fsh index 3b81b491..b382244a 100644 --- a/shaders/gbuffers_terrain.fsh +++ b/shaders/gbuffers_terrain.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_terrain.fsh Render: Almost everything diff --git a/shaders/gbuffers_terrain.vsh b/shaders/gbuffers_terrain.vsh index dbc08039..50a4a01b 100644 --- a/shaders/gbuffers_terrain.vsh +++ b/shaders/gbuffers_terrain.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_terrain.vsh Render: Almost everything diff --git a/shaders/gbuffers_textured.fsh b/shaders/gbuffers_textured.fsh index 1d0ea672..56512ab9 100644 --- a/shaders/gbuffers_textured.fsh +++ b/shaders/gbuffers_textured.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_textured.fsh Render: Particles diff --git a/shaders/gbuffers_textured.vsh b/shaders/gbuffers_textured.vsh index 19d7231f..4b460492 100644 --- a/shaders/gbuffers_textured.vsh +++ b/shaders/gbuffers_textured.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_textured.vsh Render: Particles diff --git a/shaders/gbuffers_water.fsh b/shaders/gbuffers_water.fsh index 9e78bd37..e14e6079 100644 --- a/shaders/gbuffers_water.fsh +++ b/shaders/gbuffers_water.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_water.fsh Render: Water and translucent blocks diff --git a/shaders/gbuffers_water.vsh b/shaders/gbuffers_water.vsh index 3ed8906d..1271f9c9 100644 --- a/shaders/gbuffers_water.vsh +++ b/shaders/gbuffers_water.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_water.vsh Render: Water and translucent blocks diff --git a/shaders/gbuffers_weather.fsh b/shaders/gbuffers_weather.fsh index 9a444da0..a2ac5035 100644 --- a/shaders/gbuffers_weather.fsh +++ b/shaders/gbuffers_weather.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_weather.fsh Render: Weather diff --git a/shaders/gbuffers_weather.vsh b/shaders/gbuffers_weather.vsh index e8f7830f..9d09cb2d 100644 --- a/shaders/gbuffers_weather.vsh +++ b/shaders/gbuffers_weather.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_weather.vsh Render: Weather diff --git a/shaders/lib/material_gloss_fragment.glsl b/shaders/lib/material_gloss_fragment.glsl index 87cb4a8b..d80a6508 100644 --- a/shaders/lib/material_gloss_fragment.glsl +++ b/shaders/lib/material_gloss_fragment.glsl @@ -1,8 +1,8 @@ #if defined THE_END float material_gloss(vec3 reflected_vector, vec2 lmcoord_alt, float gloss_power, vec3 flat_normal) { - vec3 astro_pos = (gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; + vec3 astroLightPos = (gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; float astro_vector = - max(dot(normalize(reflected_vector), normalize(astro_pos)), 0.0) * step(0.0001, dot(astro_pos, flat_normal)); + max(dot(normalize(reflected_vector), normalize(astroLightPos)), 0.0) * step(0.0001, dot(astroLightPos, flat_normal)); return clamp( mix(0.0, 1.0, pow(clamp(astro_vector * 2.0 - 1.0, 0.0, 1.0), gloss_power)), @@ -12,10 +12,10 @@ } #else float material_gloss(vec3 reflected_vector, vec2 lmcoord_alt, float gloss_power, vec3 flat_normal) { - vec3 astro_pos = mix(-sunPosition, sunPosition, light_mix); + vec3 astroLightPos = mix(-sunPosition, sunPosition, light_mix); float astro_vector = - max(dot(normalize(reflected_vector), normalize(astro_pos)), 0.0) * - step(0.0001, dot(astro_pos, flat_normal)); + max(dot(normalize(reflected_vector), normalize(astroLightPos)), 0.0) * + step(0.0001, dot(astroLightPos, flat_normal)); return clamp( mix(0.0, 1.0, pow(clamp(astro_vector * 2.0 - 1.0, 0.0, 1.0), gloss_power)) * diff --git a/shaders/lib/volumetric_clouds.glsl b/shaders/lib/volumetric_clouds.glsl index f7bd7afc..98e46157 100644 --- a/shaders/lib/volumetric_clouds.glsl +++ b/shaders/lib/volumetric_clouds.glsl @@ -2,7 +2,7 @@ Fast volumetric clouds - MakeUp implementation */ -vec3 get_cloud_old(vec3 view_vector, vec3 blockColor, float bright, float dither, vec3 base_pos, int samples, float umbral, vec3 cloud_color, vec3 dark_cloud_color) { +vec3 get_cloud_old(vec3 eyeDirection, vec3 blockColor, float bright, float dither, vec3 base_pos, int samples, float umbral, vec3 cloud_color, vec3 dark_cloud_color) { float plane_distance; float cloud_value; float density; @@ -18,7 +18,7 @@ vec3 get_cloud_old(vec3 view_vector, vec3 blockColor, float bright, float dither float opacity_dist; vec3 increment; float increment_dist; - float view_y_inv = 1.0 / view_vector.y; + float view_y_inv = 1.0 / eyeDirection.y; float distance_aux; float dist_aux_coeff_blur; @@ -35,12 +35,12 @@ vec3 get_cloud_old(vec3 view_vector, vec3 blockColor, float bright, float dither } #endif - if (view_vector.y > 0.0) { // Over horizon + if (eyeDirection.y > 0.0) { // Over horizon plane_distance = (CLOUD_PLANE - base_pos.y) * view_y_inv; - intersection_pos = (view_vector * plane_distance) + base_pos; + intersection_pos = (eyeDirection * plane_distance) + base_pos; plane_distance = (CLOUD_PLANE_SUP - base_pos.y) * view_y_inv; - intersection_pos_sup = (view_vector * plane_distance) + base_pos; + intersection_pos_sup = (eyeDirection * plane_distance) + base_pos; dif_sup = CLOUD_PLANE_SUP - CLOUD_PLANE_CENTER; dif_inf = CLOUD_PLANE_CENTER - CLOUD_PLANE; @@ -138,14 +138,14 @@ vec3 get_cloud_old(vec3 view_vector, vec3 blockColor, float bright, float dither blockColor = mix( blockColor, cloud_color, - cloud_value * clamp((view_vector.y - 0.06) * 5.0, 0.0, 1.0) + cloud_value * clamp((eyeDirection.y - 0.06) * 5.0, 0.0, 1.0) ); } return blockColor; } -vec3 get_cloud(vec3 view_vector, vec3 blockColor, float bright, float dither, vec3 base_pos, int samples, float umbral, vec3 cloud_color, vec3 dark_cloud_color) { +vec3 get_cloud(vec3 eyeDirection, vec3 blockColor, float bright, float dither, vec3 base_pos, int samples, float umbral, vec3 cloud_color, vec3 dark_cloud_color) { #if VOL_LIGHT == 0 blockColor.rgb *= clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; #endif @@ -158,14 +158,14 @@ vec3 get_cloud(vec3 view_vector, vec3 blockColor, float bright, float dither, ve } #endif - if (view_vector.y > 0.0) { // Over horizon - float view_y_inv = 1.0 / view_vector.y; + if (eyeDirection.y > 0.0) { // Over horizon + float view_y_inv = 1.0 / eyeDirection.y; float plane_distance_inf = (CLOUD_PLANE - base_pos.y) * view_y_inv; - vec3 intersection_pos = (view_vector * plane_distance_inf) + base_pos; + vec3 intersection_pos = (eyeDirection * plane_distance_inf) + base_pos; float plane_distance_sup = (CLOUD_PLANE_SUP - base_pos.y) * view_y_inv; - vec3 intersection_pos_sup = (view_vector * plane_distance_sup) + base_pos; + vec3 intersection_pos_sup = (eyeDirection * plane_distance_sup) + base_pos; float dif_sup = CLOUD_PLANE_SUP - CLOUD_PLANE_CENTER; float dif_inf = CLOUD_PLANE_CENTER - CLOUD_PLANE; @@ -242,7 +242,7 @@ vec3 get_cloud(vec3 view_vector, vec3 blockColor, float bright, float dither, ve float cloud_value_approx = sqrt(sqrt(cloud_value)); cloud_color = mix(cloud_color, cloud_color * 13.0, (1.0 - cloud_value_approx) * bright * bright * (1.0 - rainStrength)); - blockColor = mix(blockColor, cloud_color, cloud_value * clamp((view_vector.y - 0.06) * 5.0, 0.0, 1.0)); + blockColor = mix(blockColor, cloud_color, cloud_value * clamp((eyeDirection.y - 0.06) * 5.0, 0.0, 1.0)); } return blockColor; diff --git a/shaders/lib/volumetric_clouds_end.glsl b/shaders/lib/volumetric_clouds_end.glsl index fd5f10a5..006e2881 100644 --- a/shaders/lib/volumetric_clouds_end.glsl +++ b/shaders/lib/volumetric_clouds_end.glsl @@ -2,7 +2,7 @@ Fast volumetric clouds (for The End) - MakeUp implementation */ -vec3 get_end_cloud(vec3 view_vector, vec3 blockColor, float bright, float dither, vec3 base_pos, int samples) { +vec3 get_end_cloud(vec3 eyeDirection, vec3 blockColor, float bright, float dither, vec3 base_pos, int samples) { blockColor.rgb *= clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; #if defined DISTANT_HORIZONS && defined DEFERRED_SHADER @@ -13,18 +13,18 @@ vec3 get_end_cloud(vec3 view_vector, vec3 blockColor, float bright, float dither } #endif - if (view_vector.y > 0.0) { // Vista sobre el horizonte + if (eyeDirection.y > 0.0) { // Vista sobre el horizonte float umbral = 0.25; vec3 cloud_color = blockColor * 1.75; vec3 dark_cloud_color = blockColor * 0.9; - float view_y_inv = 1.0 / view_vector.y; + float view_y_inv = 1.0 / eyeDirection.y; float plane_distance_inf = (CLOUD_PLANE - base_pos.y) * view_y_inv; - vec3 intersection_pos = (view_vector * plane_distance_inf) + base_pos; + vec3 intersection_pos = (eyeDirection * plane_distance_inf) + base_pos; float plane_distance_sup = (CLOUD_PLANE_SUP - base_pos.y) * view_y_inv; - vec3 intersection_pos_sup = (view_vector * plane_distance_sup) + base_pos; + vec3 intersection_pos_sup = (eyeDirection * plane_distance_sup) + base_pos; vec3 increment = (intersection_pos_sup - intersection_pos) / samples; float increment_dist = length(increment); @@ -90,7 +90,7 @@ vec3 get_end_cloud(vec3 view_vector, vec3 blockColor, float bright, float dither cloud_color = mix(cloud_color, dark_cloud_color, sqrt(density)); cloud_color = mix(cloud_color, cloud_color * 2.0, (1.0 - cloud_value) * bright); - blockColor = mix(blockColor, cloud_color, cloud_value * clamp((view_vector.y - 0.06) * 5.0, 0.0, 1.0)); + blockColor = mix(blockColor, cloud_color, cloud_value * clamp((eyeDirection.y - 0.06) * 5.0, 0.0, 1.0)); blockColor = mix(blockColor, vec3(1.0), clamp(bright * .04, 0.0, 1.0)); } diff --git a/shaders/lib/volumetric_light.glsl b/shaders/lib/volumetric_light.glsl index 431939f0..a192d360 100644 --- a/shaders/lib/volumetric_light.glsl +++ b/shaders/lib/volumetric_light.glsl @@ -99,7 +99,7 @@ Volumetric light - MakeUp implementation #elif VOL_LIGHT == 1 - float ss_godrays(float dither) { + float ssGodrays(float dither) { float light = 0.0; float comp = 1.0 - (near / (far * far)); diff --git a/shaders/lib/water.glsl b/shaders/lib/water.glsl index f19a6d47..5b7d7598 100644 --- a/shaders/lib/water.glsl +++ b/shaders/lib/water.glsl @@ -95,9 +95,9 @@ vec3 fast_raymarch(vec3 direction, vec3 hit_coord, inout float infinite, float d #if SUN_REFLECTION == 1 #if !defined NETHER && !defined THE_END float sun_reflection(vec3 fragpos) { - vec3 astro_pos = worldTime > 12900 ? moonPosition : sunPosition; + vec3 astroLightPos = worldTime > 12900 ? moonPosition : sunPosition; float astro_vector = - max(dot(normalize(fragpos), normalize(astro_pos)), 0.0); + max(dot(normalize(fragpos), normalize(astroLightPos)), 0.0); return smoothstep(0.995, 1.0, astro_vector) * clamp(lmcoord.y, 0.0, 1.0) * diff --git a/shaders/lib/water_dh.glsl b/shaders/lib/water_dh.glsl index 9251bb5a..9f9eab69 100644 --- a/shaders/lib/water_dh.glsl +++ b/shaders/lib/water_dh.glsl @@ -5,9 +5,9 @@ Water reflection and refraction related functions (dh). #if SUN_REFLECTION == 1 #if !defined NETHER && !defined THE_END float sun_reflection(vec3 fragpos) { - vec3 astro_pos = worldTime > 12900 ? moonPosition : sunPosition; + vec3 astroLightPos = worldTime > 12900 ? moonPosition : sunPosition; float astro_vector = - max(dot(normalize(fragpos), normalize(astro_pos)), 0.0); + max(dot(normalize(fragpos), normalize(astroLightPos)), 0.0); return smoothstep(0.995, 1.0, astro_vector) * clamp(lmcoord.y, 0.0, 1.0) * diff --git a/shaders/prepare.fsh b/shaders/prepare.fsh index c980cf12..f81c6e95 100644 --- a/shaders/prepare.fsh +++ b/shaders/prepare.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - prepare.fsh Render: Sky diff --git a/shaders/prepare.vsh b/shaders/prepare.vsh index 5f6bdf2a..d374c4ba 100644 --- a/shaders/prepare.vsh +++ b/shaders/prepare.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - prepare.vsh Render: Sky diff --git a/shaders/shadow.fsh b/shaders/shadow.fsh index 82481046..3baf476d 100644 --- a/shaders/shadow.fsh +++ b/shaders/shadow.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - shadow.fsh Render: Shadowmap diff --git a/shaders/shadow.vsh b/shaders/shadow.vsh index 454c2ce6..9c2ef33d 100644 --- a/shaders/shadow.vsh +++ b/shaders/shadow.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - shadow.fsh Render: Shadowmap diff --git a/shaders/world-1/composite.fsh b/shaders/world-1/composite.fsh index 955fbe21..b4d93dda 100644 --- a/shaders/world-1/composite.fsh +++ b/shaders/world-1/composite.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite.fsh Render: Bloom and volumetric light diff --git a/shaders/world-1/composite.vsh b/shaders/world-1/composite.vsh index 666b0419..13e2cc6e 100644 --- a/shaders/world-1/composite.vsh +++ b/shaders/world-1/composite.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite.fsh Render: Bloom and volumetric light diff --git a/shaders/world-1/composite1.fsh b/shaders/world-1/composite1.fsh index 44af527b..e122b4cc 100644 --- a/shaders/world-1/composite1.fsh +++ b/shaders/world-1/composite1.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Bloom and DoF diff --git a/shaders/world-1/composite1.vsh b/shaders/world-1/composite1.vsh index 18bd55e6..fbfbd77c 100644 --- a/shaders/world-1/composite1.vsh +++ b/shaders/world-1/composite1.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Bloom and DoF diff --git a/shaders/world-1/composite2.fsh b/shaders/world-1/composite2.fsh index f5520553..3fffb1e8 100644 --- a/shaders/world-1/composite2.fsh +++ b/shaders/world-1/composite2.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Antialiasing and motion blur diff --git a/shaders/world-1/composite2.vsh b/shaders/world-1/composite2.vsh index 360939f5..18561c21 100644 --- a/shaders/world-1/composite2.vsh +++ b/shaders/world-1/composite2.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Antialiasing and motion blur diff --git a/shaders/world-1/deferred.fsh b/shaders/world-1/deferred.fsh index 40a0b025..fef65058 100644 --- a/shaders/world-1/deferred.fsh +++ b/shaders/world-1/deferred.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - deferred.fsh Render: Ambient occlusion, volumetric clouds diff --git a/shaders/world-1/deferred.vsh b/shaders/world-1/deferred.vsh index faeb30a5..930e626e 100644 --- a/shaders/world-1/deferred.vsh +++ b/shaders/world-1/deferred.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - deferred.vsh Render: Ambient occlusion, volumetric clouds diff --git a/shaders/world-1/dh_terrain.fsh b/shaders/world-1/dh_terrain.fsh index 1fcd15b1..22a7afc9 100644 --- a/shaders/world-1/dh_terrain.fsh +++ b/shaders/world-1/dh_terrain.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_terrain.fsh Render: DH Terrain diff --git a/shaders/world-1/dh_terrain.vsh b/shaders/world-1/dh_terrain.vsh index 2d86c184..96f1adb5 100644 --- a/shaders/world-1/dh_terrain.vsh +++ b/shaders/world-1/dh_terrain.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_terrain.vsh Render: DH Terrain diff --git a/shaders/world-1/dh_water.fsh b/shaders/world-1/dh_water.fsh index 4596d981..a70c0620 100644 --- a/shaders/world-1/dh_water.fsh +++ b/shaders/world-1/dh_water.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_water.fsh Render: DH Water diff --git a/shaders/world-1/dh_water.vsh b/shaders/world-1/dh_water.vsh index 62efbf34..cbe3a486 100644 --- a/shaders/world-1/dh_water.vsh +++ b/shaders/world-1/dh_water.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_water.vsh Render: DH Water diff --git a/shaders/world-1/final.fsh b/shaders/world-1/final.fsh index 1f43aa5d..8b8250c8 100644 --- a/shaders/world-1/final.fsh +++ b/shaders/world-1/final.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - final.fsh Render: Final renderer diff --git a/shaders/world-1/final.vsh b/shaders/world-1/final.vsh index c1b4b368..037c2b89 100644 --- a/shaders/world-1/final.vsh +++ b/shaders/world-1/final.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - final.fsh Render: Final renderer diff --git a/shaders/world-1/gbuffers_armor_glint.fsh b/shaders/world-1/gbuffers_armor_glint.fsh index c178fc21..4ae21ba1 100644 --- a/shaders/world-1/gbuffers_armor_glint.fsh +++ b/shaders/world-1/gbuffers_armor_glint.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_armor_glint.fsh Render: Glow objects diff --git a/shaders/world-1/gbuffers_armor_glint.vsh b/shaders/world-1/gbuffers_armor_glint.vsh index 33201d99..2429463c 100644 --- a/shaders/world-1/gbuffers_armor_glint.vsh +++ b/shaders/world-1/gbuffers_armor_glint.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_armor_glint.vsh Render: Glow objects diff --git a/shaders/world-1/gbuffers_basic.fsh b/shaders/world-1/gbuffers_basic.fsh index 866cef2b..83786eb5 100644 --- a/shaders/world-1/gbuffers_basic.fsh +++ b/shaders/world-1/gbuffers_basic.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_basic.fsh Render: Basic elements - lines diff --git a/shaders/world-1/gbuffers_basic.vsh b/shaders/world-1/gbuffers_basic.vsh index 5ca642d4..b33a6ea3 100644 --- a/shaders/world-1/gbuffers_basic.vsh +++ b/shaders/world-1/gbuffers_basic.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_basic.vsh Render: Basic elements - lines diff --git a/shaders/world-1/gbuffers_beaconbeam.fsh b/shaders/world-1/gbuffers_beaconbeam.fsh index 653bea98..405700fc 100644 --- a/shaders/world-1/gbuffers_beaconbeam.fsh +++ b/shaders/world-1/gbuffers_beaconbeam.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_beaconbeam.fsh Render: Beacon beam diff --git a/shaders/world-1/gbuffers_beaconbeam.vsh b/shaders/world-1/gbuffers_beaconbeam.vsh index 13184e86..cc98a440 100644 --- a/shaders/world-1/gbuffers_beaconbeam.vsh +++ b/shaders/world-1/gbuffers_beaconbeam.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_beaconbeam.vsh Render: Beacon beam diff --git a/shaders/world-1/gbuffers_block.fsh b/shaders/world-1/gbuffers_block.fsh index b96bf411..90ba7b4f 100644 --- a/shaders/world-1/gbuffers_block.fsh +++ b/shaders/world-1/gbuffers_block.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_beaconbeam.fsh Render: Beacon beam diff --git a/shaders/world-1/gbuffers_block.vsh b/shaders/world-1/gbuffers_block.vsh index 200c44fd..7710351c 100644 --- a/shaders/world-1/gbuffers_block.vsh +++ b/shaders/world-1/gbuffers_block.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_block.vsh Render: Beacon beam diff --git a/shaders/world-1/gbuffers_clouds.fsh b/shaders/world-1/gbuffers_clouds.fsh index 3deb4554..875bf217 100644 --- a/shaders/world-1/gbuffers_clouds.fsh +++ b/shaders/world-1/gbuffers_clouds.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_clouds.fsh Render: sky, clouds diff --git a/shaders/world-1/gbuffers_clouds.vsh b/shaders/world-1/gbuffers_clouds.vsh index fa953168..32492435 100644 --- a/shaders/world-1/gbuffers_clouds.vsh +++ b/shaders/world-1/gbuffers_clouds.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_clouds.vsh Render: sky, clouds diff --git a/shaders/world-1/gbuffers_damagedblock.fsh b/shaders/world-1/gbuffers_damagedblock.fsh index 2bf4d69e..0dbaa35d 100644 --- a/shaders/world-1/gbuffers_damagedblock.fsh +++ b/shaders/world-1/gbuffers_damagedblock.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_damagedblock.fsh Render: Damaged block effect diff --git a/shaders/world-1/gbuffers_damagedblock.vsh b/shaders/world-1/gbuffers_damagedblock.vsh index b1bfd220..8b913e68 100644 --- a/shaders/world-1/gbuffers_damagedblock.vsh +++ b/shaders/world-1/gbuffers_damagedblock.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_damagedblock.vsh Render: Damaged block effect diff --git a/shaders/world-1/gbuffers_entities.fsh b/shaders/world-1/gbuffers_entities.fsh index 0397b00a..0f81027d 100644 --- a/shaders/world-1/gbuffers_entities.fsh +++ b/shaders/world-1/gbuffers_entities.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities.fsh Render: Droped objects, mobs and things like that diff --git a/shaders/world-1/gbuffers_entities.vsh b/shaders/world-1/gbuffers_entities.vsh index f4be9694..04b288ed 100644 --- a/shaders/world-1/gbuffers_entities.vsh +++ b/shaders/world-1/gbuffers_entities.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities.vsh Render: Droped objects, mobs and things like that diff --git a/shaders/world-1/gbuffers_entities_glowing.fsh b/shaders/world-1/gbuffers_entities_glowing.fsh index fef251a9..d3bdb71e 100644 --- a/shaders/world-1/gbuffers_entities_glowing.fsh +++ b/shaders/world-1/gbuffers_entities_glowing.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities_glowing.fsh Render: Droped objects, mobs and things like that... glowing diff --git a/shaders/world-1/gbuffers_entities_glowing.vsh b/shaders/world-1/gbuffers_entities_glowing.vsh index 32306c9e..22a556b7 100644 --- a/shaders/world-1/gbuffers_entities_glowing.vsh +++ b/shaders/world-1/gbuffers_entities_glowing.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities_glowing.vsh Render: Droped objects, mobs and things like that... glowing diff --git a/shaders/world-1/gbuffers_hand.fsh b/shaders/world-1/gbuffers_hand.fsh index 39dedf95..7762de69 100644 --- a/shaders/world-1/gbuffers_hand.fsh +++ b/shaders/world-1/gbuffers_hand.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand.fsh Render: Hand opaque objects diff --git a/shaders/world-1/gbuffers_hand.vsh b/shaders/world-1/gbuffers_hand.vsh index 56d6c3af..b178af45 100644 --- a/shaders/world-1/gbuffers_hand.vsh +++ b/shaders/world-1/gbuffers_hand.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand.vsh Render: Hand opaque objects diff --git a/shaders/world-1/gbuffers_hand_water.fsh b/shaders/world-1/gbuffers_hand_water.fsh index 701574eb..3e21b428 100644 --- a/shaders/world-1/gbuffers_hand_water.fsh +++ b/shaders/world-1/gbuffers_hand_water.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand_water.fsh Render: Translucent hand objects diff --git a/shaders/world-1/gbuffers_hand_water.vsh b/shaders/world-1/gbuffers_hand_water.vsh index 1eb176af..0deb4d90 100644 --- a/shaders/world-1/gbuffers_hand_water.vsh +++ b/shaders/world-1/gbuffers_hand_water.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand_water.vsh Render: Translucent hand objects diff --git a/shaders/world-1/gbuffers_line.fsh b/shaders/world-1/gbuffers_line.fsh index 8ee82ed3..3c220e17 100644 --- a/shaders/world-1/gbuffers_line.fsh +++ b/shaders/world-1/gbuffers_line.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_line.vsh Render: Render lines diff --git a/shaders/world-1/gbuffers_line.vsh b/shaders/world-1/gbuffers_line.vsh index 2d9ff4ac..3f2325a1 100644 --- a/shaders/world-1/gbuffers_line.vsh +++ b/shaders/world-1/gbuffers_line.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_line.vsh Render: Render lines diff --git a/shaders/world-1/gbuffers_skybasic.fsh b/shaders/world-1/gbuffers_skybasic.fsh index 3679a1d0..eee76899 100644 --- a/shaders/world-1/gbuffers_skybasic.fsh +++ b/shaders/world-1/gbuffers_skybasic.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skybasic.fsh Render: Sky diff --git a/shaders/world-1/gbuffers_skybasic.vsh b/shaders/world-1/gbuffers_skybasic.vsh index d595de70..17a8f811 100644 --- a/shaders/world-1/gbuffers_skybasic.vsh +++ b/shaders/world-1/gbuffers_skybasic.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skybasic.vsh Render: Sky diff --git a/shaders/world-1/gbuffers_skytextured.fsh b/shaders/world-1/gbuffers_skytextured.fsh index 844594ae..127b6130 100644 --- a/shaders/world-1/gbuffers_skytextured.fsh +++ b/shaders/world-1/gbuffers_skytextured.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skytextured.fsh Render: sun, moon diff --git a/shaders/world-1/gbuffers_skytextured.vsh b/shaders/world-1/gbuffers_skytextured.vsh index a433f70c..a4c6a553 100644 --- a/shaders/world-1/gbuffers_skytextured.vsh +++ b/shaders/world-1/gbuffers_skytextured.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skytextured.vsh Render: sun, moon diff --git a/shaders/world-1/gbuffers_spidereyes.fsh b/shaders/world-1/gbuffers_spidereyes.fsh index e44cf17d..bdd7cf0b 100644 --- a/shaders/world-1/gbuffers_spidereyes.fsh +++ b/shaders/world-1/gbuffers_spidereyes.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_spidereyes.fsh Render: Some creatures eyes (like spider) diff --git a/shaders/world-1/gbuffers_spidereyes.vsh b/shaders/world-1/gbuffers_spidereyes.vsh index 58ad2aea..ea1cbb01 100644 --- a/shaders/world-1/gbuffers_spidereyes.vsh +++ b/shaders/world-1/gbuffers_spidereyes.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_spidereyes.vsh Render: Some creatures eyes (like spider) diff --git a/shaders/world-1/gbuffers_terrain.fsh b/shaders/world-1/gbuffers_terrain.fsh index 8fc1507f..107df70b 100644 --- a/shaders/world-1/gbuffers_terrain.fsh +++ b/shaders/world-1/gbuffers_terrain.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_terrain.fsh Render: Almost everything diff --git a/shaders/world-1/gbuffers_terrain.vsh b/shaders/world-1/gbuffers_terrain.vsh index 403ba65b..3ecbc59e 100644 --- a/shaders/world-1/gbuffers_terrain.vsh +++ b/shaders/world-1/gbuffers_terrain.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_terrain.vsh Render: Almost everything diff --git a/shaders/world-1/gbuffers_textured.fsh b/shaders/world-1/gbuffers_textured.fsh index fe9fc1a0..7c4d9e00 100644 --- a/shaders/world-1/gbuffers_textured.fsh +++ b/shaders/world-1/gbuffers_textured.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_textured.fsh Render: Particles diff --git a/shaders/world-1/gbuffers_textured.vsh b/shaders/world-1/gbuffers_textured.vsh index b46b3a50..e3dbb636 100644 --- a/shaders/world-1/gbuffers_textured.vsh +++ b/shaders/world-1/gbuffers_textured.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_textured.vsh Render: Particles diff --git a/shaders/world-1/gbuffers_water.fsh b/shaders/world-1/gbuffers_water.fsh index e555d733..3f1124c1 100644 --- a/shaders/world-1/gbuffers_water.fsh +++ b/shaders/world-1/gbuffers_water.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_water.fsh Render: Water and translucent blocks diff --git a/shaders/world-1/gbuffers_water.vsh b/shaders/world-1/gbuffers_water.vsh index 975eb137..63b128f8 100644 --- a/shaders/world-1/gbuffers_water.vsh +++ b/shaders/world-1/gbuffers_water.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_water.vsh Render: Water and translucent blocks diff --git a/shaders/world-1/gbuffers_weather.fsh b/shaders/world-1/gbuffers_weather.fsh index 376dbfaa..e3fc0bd9 100644 --- a/shaders/world-1/gbuffers_weather.fsh +++ b/shaders/world-1/gbuffers_weather.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_weather.fsh Render: Weather diff --git a/shaders/world-1/gbuffers_weather.vsh b/shaders/world-1/gbuffers_weather.vsh index bed40bf5..146cb231 100644 --- a/shaders/world-1/gbuffers_weather.vsh +++ b/shaders/world-1/gbuffers_weather.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_weather.vsh Render: Weather diff --git a/shaders/world-1/prepare.fsh b/shaders/world-1/prepare.fsh index 5f85191f..0e65c003 100644 --- a/shaders/world-1/prepare.fsh +++ b/shaders/world-1/prepare.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - prepare.fsh Render: Sky diff --git a/shaders/world-1/prepare.vsh b/shaders/world-1/prepare.vsh index f7e65057..381dc8cb 100644 --- a/shaders/world-1/prepare.vsh +++ b/shaders/world-1/prepare.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - prepare.vsh Render: Sky diff --git a/shaders/world0/composite.fsh b/shaders/world0/composite.fsh index 53b9fe5b..9502052f 100644 --- a/shaders/world0/composite.fsh +++ b/shaders/world0/composite.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite.fsh Render: Bloom and volumetric light diff --git a/shaders/world0/composite.vsh b/shaders/world0/composite.vsh index dfc66e66..ed279edb 100644 --- a/shaders/world0/composite.vsh +++ b/shaders/world0/composite.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite.fsh Render: Bloom and volumetric light diff --git a/shaders/world0/composite1.fsh b/shaders/world0/composite1.fsh index 41715a0c..3c3f2b93 100644 --- a/shaders/world0/composite1.fsh +++ b/shaders/world0/composite1.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Bloom and DoF diff --git a/shaders/world0/composite1.vsh b/shaders/world0/composite1.vsh index 0a392f7b..58ea1d5a 100644 --- a/shaders/world0/composite1.vsh +++ b/shaders/world0/composite1.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Bloom and DoF diff --git a/shaders/world0/composite2.fsh b/shaders/world0/composite2.fsh index 4c1094b4..c0ba765d 100644 --- a/shaders/world0/composite2.fsh +++ b/shaders/world0/composite2.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Antialiasing and motion blur diff --git a/shaders/world0/composite2.vsh b/shaders/world0/composite2.vsh index 61350503..c5fd9f58 100644 --- a/shaders/world0/composite2.vsh +++ b/shaders/world0/composite2.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Antialiasing and motion blur diff --git a/shaders/world0/deferred.fsh b/shaders/world0/deferred.fsh index c5ddf4b0..2e2a4dff 100644 --- a/shaders/world0/deferred.fsh +++ b/shaders/world0/deferred.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - deferred.fsh Render: Ambient occlusion, volumetric clouds diff --git a/shaders/world0/deferred.vsh b/shaders/world0/deferred.vsh index ff7d4355..d74bd30f 100644 --- a/shaders/world0/deferred.vsh +++ b/shaders/world0/deferred.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - deferred.vsh Render: Ambient occlusion, volumetric clouds diff --git a/shaders/world0/dh_terrain.fsh b/shaders/world0/dh_terrain.fsh index f6b476a9..4b91dcbf 100644 --- a/shaders/world0/dh_terrain.fsh +++ b/shaders/world0/dh_terrain.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_terrain.fsh Render: DH Terrain diff --git a/shaders/world0/dh_terrain.vsh b/shaders/world0/dh_terrain.vsh index 873038ae..9cbd8a0f 100644 --- a/shaders/world0/dh_terrain.vsh +++ b/shaders/world0/dh_terrain.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_terrain.vsh Render: DH Terrain diff --git a/shaders/world0/dh_water.fsh b/shaders/world0/dh_water.fsh index c5eb4113..3ce3761f 100644 --- a/shaders/world0/dh_water.fsh +++ b/shaders/world0/dh_water.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_water.fsh Render: DH Water diff --git a/shaders/world0/dh_water.vsh b/shaders/world0/dh_water.vsh index 46cc8080..8f2ccc9f 100644 --- a/shaders/world0/dh_water.vsh +++ b/shaders/world0/dh_water.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_water.vsh Render: DH Water diff --git a/shaders/world0/final.fsh b/shaders/world0/final.fsh index da8787ac..c4e73c37 100644 --- a/shaders/world0/final.fsh +++ b/shaders/world0/final.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - final.fsh Render: Final renderer diff --git a/shaders/world0/final.vsh b/shaders/world0/final.vsh index 01602b94..c206105f 100644 --- a/shaders/world0/final.vsh +++ b/shaders/world0/final.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - final.fsh Render: Final renderer diff --git a/shaders/world0/gbuffers_armor_glint.fsh b/shaders/world0/gbuffers_armor_glint.fsh index 329b44d5..9f55cfdd 100644 --- a/shaders/world0/gbuffers_armor_glint.fsh +++ b/shaders/world0/gbuffers_armor_glint.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_armor_glint.fsh Render: Glow objects diff --git a/shaders/world0/gbuffers_armor_glint.vsh b/shaders/world0/gbuffers_armor_glint.vsh index f057d3de..528f0b9e 100644 --- a/shaders/world0/gbuffers_armor_glint.vsh +++ b/shaders/world0/gbuffers_armor_glint.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_armor_glint.vsh Render: Glow objects diff --git a/shaders/world0/gbuffers_basic.fsh b/shaders/world0/gbuffers_basic.fsh index e2006ba4..5d2efcd9 100644 --- a/shaders/world0/gbuffers_basic.fsh +++ b/shaders/world0/gbuffers_basic.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_basic.fsh Render: Basic elements - lines diff --git a/shaders/world0/gbuffers_basic.vsh b/shaders/world0/gbuffers_basic.vsh index 328c4b4f..77c449dc 100644 --- a/shaders/world0/gbuffers_basic.vsh +++ b/shaders/world0/gbuffers_basic.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_basic.vsh Render: Basic elements - lines diff --git a/shaders/world0/gbuffers_beaconbeam.fsh b/shaders/world0/gbuffers_beaconbeam.fsh index d4c5b69c..c7dbcef6 100644 --- a/shaders/world0/gbuffers_beaconbeam.fsh +++ b/shaders/world0/gbuffers_beaconbeam.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_beaconbeam.fsh Render: Beacon beam diff --git a/shaders/world0/gbuffers_beaconbeam.vsh b/shaders/world0/gbuffers_beaconbeam.vsh index afeffc1e..c3a5a829 100644 --- a/shaders/world0/gbuffers_beaconbeam.vsh +++ b/shaders/world0/gbuffers_beaconbeam.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_beaconbeam.vsh Render: Beacon beam diff --git a/shaders/world0/gbuffers_block.fsh b/shaders/world0/gbuffers_block.fsh index 536381d0..d06b9a59 100644 --- a/shaders/world0/gbuffers_block.fsh +++ b/shaders/world0/gbuffers_block.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_beaconbeam.fsh Render: Beacon beam diff --git a/shaders/world0/gbuffers_block.vsh b/shaders/world0/gbuffers_block.vsh index 27dfc3ee..4933ca80 100644 --- a/shaders/world0/gbuffers_block.vsh +++ b/shaders/world0/gbuffers_block.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_block.vsh Render: Beacon beam diff --git a/shaders/world0/gbuffers_clouds.fsh b/shaders/world0/gbuffers_clouds.fsh index cf24d1a4..8f92a929 100644 --- a/shaders/world0/gbuffers_clouds.fsh +++ b/shaders/world0/gbuffers_clouds.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_clouds.fsh Render: sky, clouds diff --git a/shaders/world0/gbuffers_clouds.vsh b/shaders/world0/gbuffers_clouds.vsh index a9623a76..863caa57 100644 --- a/shaders/world0/gbuffers_clouds.vsh +++ b/shaders/world0/gbuffers_clouds.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_clouds.vsh Render: sky, clouds diff --git a/shaders/world0/gbuffers_damagedblock.fsh b/shaders/world0/gbuffers_damagedblock.fsh index f87c153d..ccb716f9 100644 --- a/shaders/world0/gbuffers_damagedblock.fsh +++ b/shaders/world0/gbuffers_damagedblock.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_damagedblock.fsh Render: Damaged block effect diff --git a/shaders/world0/gbuffers_damagedblock.vsh b/shaders/world0/gbuffers_damagedblock.vsh index 44ffa676..e7014f3e 100644 --- a/shaders/world0/gbuffers_damagedblock.vsh +++ b/shaders/world0/gbuffers_damagedblock.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_damagedblock.vsh Render: Damaged block effect diff --git a/shaders/world0/gbuffers_entities.fsh b/shaders/world0/gbuffers_entities.fsh index 298b55ab..544b3fb8 100644 --- a/shaders/world0/gbuffers_entities.fsh +++ b/shaders/world0/gbuffers_entities.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities.fsh Render: Droped objects, mobs and things like that diff --git a/shaders/world0/gbuffers_entities.vsh b/shaders/world0/gbuffers_entities.vsh index 832f59c3..7489c1be 100644 --- a/shaders/world0/gbuffers_entities.vsh +++ b/shaders/world0/gbuffers_entities.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities.vsh Render: Droped objects, mobs and things like that diff --git a/shaders/world0/gbuffers_entities_glowing.fsh b/shaders/world0/gbuffers_entities_glowing.fsh index a6d30fb4..cf0640d6 100644 --- a/shaders/world0/gbuffers_entities_glowing.fsh +++ b/shaders/world0/gbuffers_entities_glowing.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities_glowing.fsh Render: Droped objects, mobs and things like that... glowing diff --git a/shaders/world0/gbuffers_entities_glowing.vsh b/shaders/world0/gbuffers_entities_glowing.vsh index db083706..826dcae9 100644 --- a/shaders/world0/gbuffers_entities_glowing.vsh +++ b/shaders/world0/gbuffers_entities_glowing.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities_glowing.vsh Render: Droped objects, mobs and things like that... glowing diff --git a/shaders/world0/gbuffers_hand.fsh b/shaders/world0/gbuffers_hand.fsh index 17cf5717..842231e2 100644 --- a/shaders/world0/gbuffers_hand.fsh +++ b/shaders/world0/gbuffers_hand.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand.fsh Render: Hand opaque objects diff --git a/shaders/world0/gbuffers_hand.vsh b/shaders/world0/gbuffers_hand.vsh index 8e74712e..d5af61b8 100644 --- a/shaders/world0/gbuffers_hand.vsh +++ b/shaders/world0/gbuffers_hand.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand.vsh Render: Hand opaque objects diff --git a/shaders/world0/gbuffers_hand_water.fsh b/shaders/world0/gbuffers_hand_water.fsh index 1b3e0f1d..1965121e 100644 --- a/shaders/world0/gbuffers_hand_water.fsh +++ b/shaders/world0/gbuffers_hand_water.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand_water.fsh Render: Translucent hand objects diff --git a/shaders/world0/gbuffers_hand_water.vsh b/shaders/world0/gbuffers_hand_water.vsh index 04f23a5d..76eadb19 100644 --- a/shaders/world0/gbuffers_hand_water.vsh +++ b/shaders/world0/gbuffers_hand_water.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand_water.vsh Render: Translucent hand objects diff --git a/shaders/world0/gbuffers_line.fsh b/shaders/world0/gbuffers_line.fsh index 81badcc6..b15d73d8 100644 --- a/shaders/world0/gbuffers_line.fsh +++ b/shaders/world0/gbuffers_line.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_line.vsh Render: Render lines diff --git a/shaders/world0/gbuffers_line.vsh b/shaders/world0/gbuffers_line.vsh index 2c349660..539931eb 100644 --- a/shaders/world0/gbuffers_line.vsh +++ b/shaders/world0/gbuffers_line.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_line.vsh Render: Render lines diff --git a/shaders/world0/gbuffers_skybasic.fsh b/shaders/world0/gbuffers_skybasic.fsh index 0e0980df..a0010611 100644 --- a/shaders/world0/gbuffers_skybasic.fsh +++ b/shaders/world0/gbuffers_skybasic.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skybasic.fsh Render: Sky diff --git a/shaders/world0/gbuffers_skybasic.vsh b/shaders/world0/gbuffers_skybasic.vsh index ba2b7c4f..0f6cff96 100644 --- a/shaders/world0/gbuffers_skybasic.vsh +++ b/shaders/world0/gbuffers_skybasic.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skybasic.vsh Render: Sky diff --git a/shaders/world0/gbuffers_skytextured.fsh b/shaders/world0/gbuffers_skytextured.fsh index cb5916a7..d665a01d 100644 --- a/shaders/world0/gbuffers_skytextured.fsh +++ b/shaders/world0/gbuffers_skytextured.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skytextured.fsh Render: sun, moon diff --git a/shaders/world0/gbuffers_skytextured.vsh b/shaders/world0/gbuffers_skytextured.vsh index 0ce77fdf..368af4ac 100644 --- a/shaders/world0/gbuffers_skytextured.vsh +++ b/shaders/world0/gbuffers_skytextured.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skytextured.vsh Render: sun, moon diff --git a/shaders/world0/gbuffers_spidereyes.fsh b/shaders/world0/gbuffers_spidereyes.fsh index 7ed68b6c..32cab37b 100644 --- a/shaders/world0/gbuffers_spidereyes.fsh +++ b/shaders/world0/gbuffers_spidereyes.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_spidereyes.fsh Render: Some creatures eyes (like spider) diff --git a/shaders/world0/gbuffers_spidereyes.vsh b/shaders/world0/gbuffers_spidereyes.vsh index b608dc8c..e61ebbc8 100644 --- a/shaders/world0/gbuffers_spidereyes.vsh +++ b/shaders/world0/gbuffers_spidereyes.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_spidereyes.vsh Render: Some creatures eyes (like spider) diff --git a/shaders/world0/gbuffers_terrain.fsh b/shaders/world0/gbuffers_terrain.fsh index 8ddb378e..ccf3deec 100644 --- a/shaders/world0/gbuffers_terrain.fsh +++ b/shaders/world0/gbuffers_terrain.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_terrain.fsh Render: Almost everything diff --git a/shaders/world0/gbuffers_terrain.vsh b/shaders/world0/gbuffers_terrain.vsh index f1d9866b..065cccd4 100644 --- a/shaders/world0/gbuffers_terrain.vsh +++ b/shaders/world0/gbuffers_terrain.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_terrain.vsh Render: Almost everything diff --git a/shaders/world0/gbuffers_textured.fsh b/shaders/world0/gbuffers_textured.fsh index fc6e9ce0..07b7e2c7 100644 --- a/shaders/world0/gbuffers_textured.fsh +++ b/shaders/world0/gbuffers_textured.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_textured.fsh Render: Particles diff --git a/shaders/world0/gbuffers_textured.vsh b/shaders/world0/gbuffers_textured.vsh index 0ae14be7..c732f8b3 100644 --- a/shaders/world0/gbuffers_textured.vsh +++ b/shaders/world0/gbuffers_textured.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_textured.vsh Render: Particles diff --git a/shaders/world0/gbuffers_water.fsh b/shaders/world0/gbuffers_water.fsh index 7cd318f0..ec17b994 100644 --- a/shaders/world0/gbuffers_water.fsh +++ b/shaders/world0/gbuffers_water.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_water.fsh Render: Water and translucent blocks diff --git a/shaders/world0/gbuffers_water.vsh b/shaders/world0/gbuffers_water.vsh index 83994320..ac8f8846 100644 --- a/shaders/world0/gbuffers_water.vsh +++ b/shaders/world0/gbuffers_water.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_water.vsh Render: Water and translucent blocks diff --git a/shaders/world0/gbuffers_weather.fsh b/shaders/world0/gbuffers_weather.fsh index 86237cfd..dc2c16d9 100644 --- a/shaders/world0/gbuffers_weather.fsh +++ b/shaders/world0/gbuffers_weather.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_weather.fsh Render: Weather diff --git a/shaders/world0/gbuffers_weather.vsh b/shaders/world0/gbuffers_weather.vsh index 886ce8b7..5c61e9d7 100644 --- a/shaders/world0/gbuffers_weather.vsh +++ b/shaders/world0/gbuffers_weather.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_weather.vsh Render: Weather diff --git a/shaders/world0/prepare.fsh b/shaders/world0/prepare.fsh index c9e8a24a..56fe114e 100644 --- a/shaders/world0/prepare.fsh +++ b/shaders/world0/prepare.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - prepare.fsh Render: Sky diff --git a/shaders/world0/prepare.vsh b/shaders/world0/prepare.vsh index 02dceeba..379b9c20 100644 --- a/shaders/world0/prepare.vsh +++ b/shaders/world0/prepare.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - prepare.vsh Render: Sky diff --git a/shaders/world0/shadow.fsh b/shaders/world0/shadow.fsh index 13474207..36438f20 100644 --- a/shaders/world0/shadow.fsh +++ b/shaders/world0/shadow.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - shadow.fsh Render: Shadowmap diff --git a/shaders/world0/shadow.vsh b/shaders/world0/shadow.vsh index 59bf4539..b0ff4ca6 100644 --- a/shaders/world0/shadow.vsh +++ b/shaders/world0/shadow.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - shadow.fsh Render: Shadowmap diff --git a/shaders/world1/composite.fsh b/shaders/world1/composite.fsh index 1ec3b167..f9312957 100644 --- a/shaders/world1/composite.fsh +++ b/shaders/world1/composite.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite.fsh Render: Bloom and volumetric light diff --git a/shaders/world1/composite.vsh b/shaders/world1/composite.vsh index 5dbe8864..0c6491ce 100644 --- a/shaders/world1/composite.vsh +++ b/shaders/world1/composite.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite.fsh Render: Bloom and volumetric light diff --git a/shaders/world1/composite1.fsh b/shaders/world1/composite1.fsh index 99965971..9275d292 100644 --- a/shaders/world1/composite1.fsh +++ b/shaders/world1/composite1.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Bloom and DoF diff --git a/shaders/world1/composite1.vsh b/shaders/world1/composite1.vsh index ed556719..7c432b84 100644 --- a/shaders/world1/composite1.vsh +++ b/shaders/world1/composite1.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Bloom and DoF diff --git a/shaders/world1/composite2.fsh b/shaders/world1/composite2.fsh index 52798148..c45d5f5c 100644 --- a/shaders/world1/composite2.fsh +++ b/shaders/world1/composite2.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Antialiasing and motion blur diff --git a/shaders/world1/composite2.vsh b/shaders/world1/composite2.vsh index af31fa3c..40b85a35 100644 --- a/shaders/world1/composite2.vsh +++ b/shaders/world1/composite2.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Antialiasing and motion blur diff --git a/shaders/world1/deferred.fsh b/shaders/world1/deferred.fsh index 665c8610..f3ff6197 100644 --- a/shaders/world1/deferred.fsh +++ b/shaders/world1/deferred.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - deferred.fsh Render: Ambient occlusion, volumetric clouds diff --git a/shaders/world1/deferred.vsh b/shaders/world1/deferred.vsh index d1135ae0..87674335 100644 --- a/shaders/world1/deferred.vsh +++ b/shaders/world1/deferred.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - deferred.vsh Render: Ambient occlusion, volumetric clouds diff --git a/shaders/world1/dh_terrain.fsh b/shaders/world1/dh_terrain.fsh index a13a699d..1d033ae6 100644 --- a/shaders/world1/dh_terrain.fsh +++ b/shaders/world1/dh_terrain.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_terrain.fsh Render: DH Terrain diff --git a/shaders/world1/dh_terrain.vsh b/shaders/world1/dh_terrain.vsh index 7b614452..be0bc50d 100644 --- a/shaders/world1/dh_terrain.vsh +++ b/shaders/world1/dh_terrain.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_terrain.vsh Render: DH Terrain diff --git a/shaders/world1/dh_water.fsh b/shaders/world1/dh_water.fsh index f50919c0..94c0d042 100644 --- a/shaders/world1/dh_water.fsh +++ b/shaders/world1/dh_water.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_water.fsh Render: DH Water diff --git a/shaders/world1/dh_water.vsh b/shaders/world1/dh_water.vsh index 5292f932..caeadc11 100644 --- a/shaders/world1/dh_water.vsh +++ b/shaders/world1/dh_water.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_water.vsh Render: DH Water diff --git a/shaders/world1/final.fsh b/shaders/world1/final.fsh index c48125c8..6e3b378a 100644 --- a/shaders/world1/final.fsh +++ b/shaders/world1/final.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - final.fsh Render: Final renderer diff --git a/shaders/world1/final.vsh b/shaders/world1/final.vsh index 0a451fe8..7b4a322f 100644 --- a/shaders/world1/final.vsh +++ b/shaders/world1/final.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - final.fsh Render: Final renderer diff --git a/shaders/world1/gbuffers_armor_glint.fsh b/shaders/world1/gbuffers_armor_glint.fsh index 52e54b3a..27c4c7c3 100644 --- a/shaders/world1/gbuffers_armor_glint.fsh +++ b/shaders/world1/gbuffers_armor_glint.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_armor_glint.fsh Render: Glow objects diff --git a/shaders/world1/gbuffers_armor_glint.vsh b/shaders/world1/gbuffers_armor_glint.vsh index 85704c3f..dd726678 100644 --- a/shaders/world1/gbuffers_armor_glint.vsh +++ b/shaders/world1/gbuffers_armor_glint.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_armor_glint.vsh Render: Glow objects diff --git a/shaders/world1/gbuffers_basic.fsh b/shaders/world1/gbuffers_basic.fsh index 5b041989..7daffa01 100644 --- a/shaders/world1/gbuffers_basic.fsh +++ b/shaders/world1/gbuffers_basic.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_basic.fsh Render: Basic elements - lines diff --git a/shaders/world1/gbuffers_basic.vsh b/shaders/world1/gbuffers_basic.vsh index 5fdffa66..928c846a 100644 --- a/shaders/world1/gbuffers_basic.vsh +++ b/shaders/world1/gbuffers_basic.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_basic.vsh Render: Basic elements - lines diff --git a/shaders/world1/gbuffers_beaconbeam.fsh b/shaders/world1/gbuffers_beaconbeam.fsh index f9dc696b..001e78a1 100644 --- a/shaders/world1/gbuffers_beaconbeam.fsh +++ b/shaders/world1/gbuffers_beaconbeam.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_beaconbeam.fsh Render: Beacon beam diff --git a/shaders/world1/gbuffers_beaconbeam.vsh b/shaders/world1/gbuffers_beaconbeam.vsh index cd6c5b2f..091334a0 100644 --- a/shaders/world1/gbuffers_beaconbeam.vsh +++ b/shaders/world1/gbuffers_beaconbeam.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_beaconbeam.vsh Render: Beacon beam diff --git a/shaders/world1/gbuffers_block.fsh b/shaders/world1/gbuffers_block.fsh index 33ef5e3d..6e1bb4e9 100644 --- a/shaders/world1/gbuffers_block.fsh +++ b/shaders/world1/gbuffers_block.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_beaconbeam.fsh Render: Beacon beam diff --git a/shaders/world1/gbuffers_block.vsh b/shaders/world1/gbuffers_block.vsh index 979bb97d..bc040298 100644 --- a/shaders/world1/gbuffers_block.vsh +++ b/shaders/world1/gbuffers_block.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_block.vsh Render: Beacon beam diff --git a/shaders/world1/gbuffers_clouds.fsh b/shaders/world1/gbuffers_clouds.fsh index 8e8e77ac..caab5380 100644 --- a/shaders/world1/gbuffers_clouds.fsh +++ b/shaders/world1/gbuffers_clouds.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_clouds.fsh Render: sky, clouds diff --git a/shaders/world1/gbuffers_clouds.vsh b/shaders/world1/gbuffers_clouds.vsh index 9f77342e..660a5c1e 100644 --- a/shaders/world1/gbuffers_clouds.vsh +++ b/shaders/world1/gbuffers_clouds.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_clouds.vsh Render: sky, clouds diff --git a/shaders/world1/gbuffers_damagedblock.fsh b/shaders/world1/gbuffers_damagedblock.fsh index eb3be40e..6ae54ba8 100644 --- a/shaders/world1/gbuffers_damagedblock.fsh +++ b/shaders/world1/gbuffers_damagedblock.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_damagedblock.fsh Render: Damaged block effect diff --git a/shaders/world1/gbuffers_damagedblock.vsh b/shaders/world1/gbuffers_damagedblock.vsh index edc4d24b..6dd4daed 100644 --- a/shaders/world1/gbuffers_damagedblock.vsh +++ b/shaders/world1/gbuffers_damagedblock.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_damagedblock.vsh Render: Damaged block effect diff --git a/shaders/world1/gbuffers_entities.fsh b/shaders/world1/gbuffers_entities.fsh index a6026c13..d5736693 100644 --- a/shaders/world1/gbuffers_entities.fsh +++ b/shaders/world1/gbuffers_entities.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities.fsh Render: Droped objects, mobs and things like that diff --git a/shaders/world1/gbuffers_entities.vsh b/shaders/world1/gbuffers_entities.vsh index 1e8bfc4e..05204a9b 100644 --- a/shaders/world1/gbuffers_entities.vsh +++ b/shaders/world1/gbuffers_entities.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities.vsh Render: Droped objects, mobs and things like that diff --git a/shaders/world1/gbuffers_entities_glowing.fsh b/shaders/world1/gbuffers_entities_glowing.fsh index c4b616aa..9044bdf0 100644 --- a/shaders/world1/gbuffers_entities_glowing.fsh +++ b/shaders/world1/gbuffers_entities_glowing.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities_glowing.fsh Render: Droped objects, mobs and things like that... glowing diff --git a/shaders/world1/gbuffers_entities_glowing.vsh b/shaders/world1/gbuffers_entities_glowing.vsh index ec9e91d7..28c7eb56 100644 --- a/shaders/world1/gbuffers_entities_glowing.vsh +++ b/shaders/world1/gbuffers_entities_glowing.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities_glowing.vsh Render: Droped objects, mobs and things like that... glowing diff --git a/shaders/world1/gbuffers_hand.fsh b/shaders/world1/gbuffers_hand.fsh index 9168a9ec..399077f4 100644 --- a/shaders/world1/gbuffers_hand.fsh +++ b/shaders/world1/gbuffers_hand.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand.fsh Render: Hand opaque objects diff --git a/shaders/world1/gbuffers_hand.vsh b/shaders/world1/gbuffers_hand.vsh index 8e041a55..08666613 100644 --- a/shaders/world1/gbuffers_hand.vsh +++ b/shaders/world1/gbuffers_hand.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand.vsh Render: Hand opaque objects diff --git a/shaders/world1/gbuffers_hand_water.fsh b/shaders/world1/gbuffers_hand_water.fsh index 740aec1b..7a67c2a8 100644 --- a/shaders/world1/gbuffers_hand_water.fsh +++ b/shaders/world1/gbuffers_hand_water.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand_water.fsh Render: Translucent hand objects diff --git a/shaders/world1/gbuffers_hand_water.vsh b/shaders/world1/gbuffers_hand_water.vsh index 0feebc48..ffc2010e 100644 --- a/shaders/world1/gbuffers_hand_water.vsh +++ b/shaders/world1/gbuffers_hand_water.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand_water.vsh Render: Translucent hand objects diff --git a/shaders/world1/gbuffers_line.fsh b/shaders/world1/gbuffers_line.fsh index 22c4cc2d..deb446c0 100644 --- a/shaders/world1/gbuffers_line.fsh +++ b/shaders/world1/gbuffers_line.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_line.vsh Render: Render lines diff --git a/shaders/world1/gbuffers_line.vsh b/shaders/world1/gbuffers_line.vsh index c63a7eb0..b41ca134 100644 --- a/shaders/world1/gbuffers_line.vsh +++ b/shaders/world1/gbuffers_line.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_line.vsh Render: Render lines diff --git a/shaders/world1/gbuffers_skybasic.fsh b/shaders/world1/gbuffers_skybasic.fsh index 5888a84a..799b744b 100644 --- a/shaders/world1/gbuffers_skybasic.fsh +++ b/shaders/world1/gbuffers_skybasic.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skybasic.fsh Render: Sky diff --git a/shaders/world1/gbuffers_skybasic.vsh b/shaders/world1/gbuffers_skybasic.vsh index 92c319cd..73d9a982 100644 --- a/shaders/world1/gbuffers_skybasic.vsh +++ b/shaders/world1/gbuffers_skybasic.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skybasic.vsh Render: Sky diff --git a/shaders/world1/gbuffers_skytextured.fsh b/shaders/world1/gbuffers_skytextured.fsh index 6bf44d65..5a0513ae 100644 --- a/shaders/world1/gbuffers_skytextured.fsh +++ b/shaders/world1/gbuffers_skytextured.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skytextured.fsh Render: sun, moon diff --git a/shaders/world1/gbuffers_skytextured.vsh b/shaders/world1/gbuffers_skytextured.vsh index e96fe864..281acf87 100644 --- a/shaders/world1/gbuffers_skytextured.vsh +++ b/shaders/world1/gbuffers_skytextured.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skytextured.vsh Render: sun, moon diff --git a/shaders/world1/gbuffers_spidereyes.fsh b/shaders/world1/gbuffers_spidereyes.fsh index 9c6088ef..a033bca5 100644 --- a/shaders/world1/gbuffers_spidereyes.fsh +++ b/shaders/world1/gbuffers_spidereyes.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_spidereyes.fsh Render: Some creatures eyes (like spider) diff --git a/shaders/world1/gbuffers_spidereyes.vsh b/shaders/world1/gbuffers_spidereyes.vsh index 24657f36..aabbb611 100644 --- a/shaders/world1/gbuffers_spidereyes.vsh +++ b/shaders/world1/gbuffers_spidereyes.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_spidereyes.vsh Render: Some creatures eyes (like spider) diff --git a/shaders/world1/gbuffers_terrain.fsh b/shaders/world1/gbuffers_terrain.fsh index c3367884..33a01349 100644 --- a/shaders/world1/gbuffers_terrain.fsh +++ b/shaders/world1/gbuffers_terrain.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_terrain.fsh Render: Almost everything diff --git a/shaders/world1/gbuffers_terrain.vsh b/shaders/world1/gbuffers_terrain.vsh index 8d5069f9..3ac37425 100644 --- a/shaders/world1/gbuffers_terrain.vsh +++ b/shaders/world1/gbuffers_terrain.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_terrain.vsh Render: Almost everything diff --git a/shaders/world1/gbuffers_textured.fsh b/shaders/world1/gbuffers_textured.fsh index 29de1e09..6142e9bb 100644 --- a/shaders/world1/gbuffers_textured.fsh +++ b/shaders/world1/gbuffers_textured.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_textured.fsh Render: Particles diff --git a/shaders/world1/gbuffers_textured.vsh b/shaders/world1/gbuffers_textured.vsh index 997c60d2..b136d006 100644 --- a/shaders/world1/gbuffers_textured.vsh +++ b/shaders/world1/gbuffers_textured.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_textured.vsh Render: Particles diff --git a/shaders/world1/gbuffers_water.fsh b/shaders/world1/gbuffers_water.fsh index c9f1d95b..89672a2f 100644 --- a/shaders/world1/gbuffers_water.fsh +++ b/shaders/world1/gbuffers_water.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_water.fsh Render: Water and translucent blocks diff --git a/shaders/world1/gbuffers_water.vsh b/shaders/world1/gbuffers_water.vsh index a3e1909a..4aa55443 100644 --- a/shaders/world1/gbuffers_water.vsh +++ b/shaders/world1/gbuffers_water.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_water.vsh Render: Water and translucent blocks diff --git a/shaders/world1/gbuffers_weather.fsh b/shaders/world1/gbuffers_weather.fsh index a53585ab..b7474a34 100644 --- a/shaders/world1/gbuffers_weather.fsh +++ b/shaders/world1/gbuffers_weather.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_weather.fsh Render: Weather diff --git a/shaders/world1/gbuffers_weather.vsh b/shaders/world1/gbuffers_weather.vsh index ce007fad..5055297c 100644 --- a/shaders/world1/gbuffers_weather.vsh +++ b/shaders/world1/gbuffers_weather.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_weather.vsh Render: Weather diff --git a/shaders/world1/prepare.fsh b/shaders/world1/prepare.fsh index e04e1693..46cd46e2 100644 --- a/shaders/world1/prepare.fsh +++ b/shaders/world1/prepare.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - prepare.fsh Render: Sky diff --git a/shaders/world1/prepare.vsh b/shaders/world1/prepare.vsh index f3f1ffa0..0f3a4565 100644 --- a/shaders/world1/prepare.vsh +++ b/shaders/world1/prepare.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - prepare.vsh Render: Sky diff --git a/shaders/world1/shadow.fsh b/shaders/world1/shadow.fsh index eac13cd5..b96099da 100644 --- a/shaders/world1/shadow.fsh +++ b/shaders/world1/shadow.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - shadow.fsh Render: Shadowmap diff --git a/shaders/world1/shadow.vsh b/shaders/world1/shadow.vsh index cba65780..b986b3dd 100644 --- a/shaders/world1/shadow.vsh +++ b/shaders/world1/shadow.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - shadow.fsh Render: Shadowmap From 3f16c2114e1764682343495e1fa73b5ac1831ef6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 5 Jan 2026 02:50:14 -0600 Subject: [PATCH 099/147] Refactor IV --- shaders/common/solid_blocks_fragment.glsl | 4 +- shaders/common/solid_blocks_vertex.glsl | 2 +- shaders/common/water_blocks_fragment.glsl | 8 +- shaders/common/water_blocks_vertex.glsl | 2 +- shaders/lib/material_gloss_fragment.glsl | 16 +-- shaders/lib/shadow_frag.glsl | 16 +-- shaders/lib/shadow_vertex.glsl | 14 +-- shaders/lib/volumetric_light.glsl | 67 +++++----- shaders/lib/water.glsl | 144 +++++++++++----------- shaders/lib/water_dh.glsl | 14 +-- shaders/src/shadow_src_vertex.glsl | 4 +- 11 files changed, 144 insertions(+), 147 deletions(-) diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 3ba7ad19..5d855f05 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -97,7 +97,7 @@ varying vec3 omni_light; #endif #if defined SHADOW_CASTING && !defined NETHER - varying vec3 shadow_pos; + varying vec3 shadowPos; varying float shadow_diffuse; #endif @@ -194,7 +194,7 @@ void main() { vec3 final_world_pos = (snappedAbsolute - cameraPosition) + vBias; vec3 shadow_real_pos = get_shadow_pos(final_world_pos); #else - vec3 shadow_real_pos = shadow_pos; + vec3 shadow_real_pos = shadowPos; #endif #if defined COLORED_SHADOW diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index 25f42e0c..7f1bebc1 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -88,7 +88,7 @@ varying vec3 omni_light; #endif #if defined SHADOW_CASTING && !defined NETHER - varying vec3 shadow_pos; + varying vec3 shadowPos; varying float shadow_diffuse; #endif diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index 5d5d787d..6ae0946a 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -104,7 +104,7 @@ varying vec3 hi_sky_color; varying vec3 low_sky_color; #if defined SHADOW_CASTING && !defined NETHER - varying vec3 shadow_pos; + varying vec3 shadowPos; varying float shadow_diffuse; #endif @@ -205,7 +205,7 @@ void main() { vec3 final_world_pos = (snappedAbsolute - cameraPosition) + vBias; vec3 shadow_real_pos = get_shadow_pos(final_world_pos); #else - vec3 shadow_real_pos = shadow_pos; + vec3 shadow_real_pos = shadowPos; #endif #if defined COLORED_SHADOW vec3 shadow_c = get_colored_shadow(shadow_real_pos, dither); @@ -269,10 +269,10 @@ void main() { #if defined SHADOW_CASTING && !defined NETHER #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_pos, dither); + vec3 shadow_c = get_colored_shadow(shadowPos, dither); shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); #else - float shadow_c = get_shadow(shadow_pos, dither); + float shadow_c = get_shadow(shadowPos, dither); shadow_c = mix(shadow_c, 1.0, shadow_diffuse); #endif #else diff --git a/shaders/common/water_blocks_vertex.glsl b/shaders/common/water_blocks_vertex.glsl index 8b101042..08265faa 100644 --- a/shaders/common/water_blocks_vertex.glsl +++ b/shaders/common/water_blocks_vertex.glsl @@ -75,7 +75,7 @@ varying vec3 low_sky_color; #endif #if defined SHADOW_CASTING && !defined NETHER - varying vec3 shadow_pos; + varying vec3 shadowPos; varying float shadow_diffuse; #endif diff --git a/shaders/lib/material_gloss_fragment.glsl b/shaders/lib/material_gloss_fragment.glsl index d80a6508..7c933e58 100644 --- a/shaders/lib/material_gloss_fragment.glsl +++ b/shaders/lib/material_gloss_fragment.glsl @@ -1,24 +1,24 @@ #if defined THE_END - float material_gloss(vec3 reflected_vector, vec2 lmcoord_alt, float gloss_power, vec3 flat_normal) { + float material_gloss(vec3 reflectedVector, vec2 lmcoord_alt, float gloss_power, vec3 flat_normal) { vec3 astroLightPos = (gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; - float astro_vector = - max(dot(normalize(reflected_vector), normalize(astroLightPos)), 0.0) * step(0.0001, dot(astroLightPos, flat_normal)); + float astroAlignment = + max(dot(normalize(reflectedVector), normalize(astroLightPos)), 0.0) * step(0.0001, dot(astroLightPos, flat_normal)); return clamp( - mix(0.0, 1.0, pow(clamp(astro_vector * 2.0 - 1.0, 0.0, 1.0), gloss_power)), + mix(0.0, 1.0, pow(clamp(astroAlignment * 2.0 - 1.0, 0.0, 1.0), gloss_power)), 0.0, 1.0 ); } #else - float material_gloss(vec3 reflected_vector, vec2 lmcoord_alt, float gloss_power, vec3 flat_normal) { + float material_gloss(vec3 reflectedVector, vec2 lmcoord_alt, float gloss_power, vec3 flat_normal) { vec3 astroLightPos = mix(-sunPosition, sunPosition, light_mix); - float astro_vector = - max(dot(normalize(reflected_vector), normalize(astroLightPos)), 0.0) * + float astroAlignment = + max(dot(normalize(reflectedVector), normalize(astroLightPos)), 0.0) * step(0.0001, dot(astroLightPos, flat_normal)); return clamp( - mix(0.0, 1.0, pow(clamp(astro_vector * 2.0 - 1.0, 0.0, 1.0), gloss_power)) * + mix(0.0, 1.0, pow(clamp(astroAlignment * 2.0 - 1.0, 0.0, 1.0), gloss_power)) * clamp(lmcoord_alt.y, 0.0, 1.0) * (1.0 - rainStrength), 0.0, diff --git a/shaders/lib/shadow_frag.glsl b/shaders/lib/shadow_frag.glsl index ae132ea5..a862abc4 100644 --- a/shaders/lib/shadow_frag.glsl +++ b/shaders/lib/shadow_frag.glsl @@ -39,7 +39,7 @@ float get_shadow(vec3 the_shadow_pos, float dither) { #if SHADOW_TYPE == 0 // Pixelated float shadow_detector = 1.0; float shadow_black = 1.0; - vec4 shadow_color = vec4(1.0); + vec4 shadowColor = vec4(1.0); float alpha_complement; @@ -47,17 +47,17 @@ float get_shadow(vec3 the_shadow_pos, float dither) { if (shadow_detector < 1.0) { shadow_black = shadow2D(shadowtex1, vec3(the_shadow_pos.xy, the_shadow_pos.z)).r; if (shadow_black != shadow_detector) { - shadow_color = texture2D(shadowcolor0, the_shadow_pos.xy); - alpha_complement = 1.0 - shadow_color.a; - shadow_color.rgb = mix(shadow_color.rgb, vec3(1.0), alpha_complement); - shadow_color.rgb *= alpha_complement; + shadowColor = texture2D(shadowcolor0, the_shadow_pos.xy); + alpha_complement = 1.0 - shadowColor.a; + shadowColor.rgb = mix(shadowColor.rgb, vec3(1.0), alpha_complement); + shadowColor.rgb *= alpha_complement; } } - shadow_color *= shadow_black; - shadow_color.rgb = clamp(shadow_color.rgb * (1.0 - shadow_detector) + shadow_detector, vec3(0.0), vec3(1.0)); + shadowColor *= shadow_black; + shadowColor.rgb = clamp(shadowColor.rgb * (1.0 - shadow_detector) + shadow_detector, vec3(0.0), vec3(1.0)); - return shadow_color.rgb; + return shadowColor.rgb; #elif SHADOW_TYPE == 1 // Soft float shadow_detector_a = 1.0; diff --git a/shaders/lib/shadow_vertex.glsl b/shaders/lib/shadow_vertex.glsl index 99a74c99..8c0969a7 100644 --- a/shaders/lib/shadow_vertex.glsl +++ b/shaders/lib/shadow_vertex.glsl @@ -6,15 +6,15 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define diagonal3(m) vec3((m)[0].x, (m)[1].y, m[2].z) -vec3 get_shadow_pos(vec3 shadow_pos) { - shadow_pos = mat3(shadowModelView) * shadow_pos + shadowModelView[3].xyz; - shadow_pos = diagonal3(shadowProjection) * shadow_pos + shadowProjection[3].xyz; +vec3 get_shadow_pos(vec3 shadowPos) { + shadowPos = mat3(shadowModelView) * shadowPos + shadowModelView[3].xyz; + shadowPos = diagonal3(shadowProjection) * shadowPos + shadowProjection[3].xyz; - float distb = length(shadow_pos.xy); + float distb = length(shadowPos.xy); float distortion = distb * SHADOW_DIST + (1.0 - SHADOW_DIST); - shadow_pos.xy /= distortion; - shadow_pos.z *= 0.2; + shadowPos.xy /= distortion; + shadowPos.z *= 0.2; - return shadow_pos * 0.5 + 0.5; + return shadowPos * 0.5 + 0.5; } diff --git a/shaders/lib/volumetric_light.glsl b/shaders/lib/volumetric_light.glsl index a192d360..15f3bb97 100644 --- a/shaders/lib/volumetric_light.glsl +++ b/shaders/lib/volumetric_light.glsl @@ -6,44 +6,44 @@ Volumetric light - MakeUp implementation #define diagonal3(m) vec3((m)[0].x, (m)[1].y, m[2].z) - vec3 get_volumetric_pos(vec3 shadow_pos) { - shadow_pos = mat3(shadowModelView) * shadow_pos + shadowModelView[3].xyz; - shadow_pos = diagonal3(shadowProjection) * shadow_pos + shadowProjection[3].xyz; - float distb = length(shadow_pos.xy); + vec3 get_volumetric_pos(vec3 shadowPos) { + shadowPos = mat3(shadowModelView) * shadowPos + shadowModelView[3].xyz; + shadowPos = diagonal3(shadowProjection) * shadowPos + shadowProjection[3].xyz; + float distb = length(shadowPos.xy); float distortion = distb * SHADOW_DIST + (1.0 - SHADOW_DIST); - shadow_pos.xy /= distortion; - shadow_pos.z *= 0.2; + shadowPos.xy /= distortion; + shadowPos.z *= 0.2; - return shadow_pos * 0.5 + 0.5; + return shadowPos * 0.5 + 0.5; } - float get_volumetric_light(float dither, float view_distance, mat4 modeli_times_projectioni) { + float get_volumetric_light(float dither, float visibleDistance, mat4 modeli_times_projectioni) { float light = 0.0; - float current_depth; - vec3 view_pos; + float currentDistance; + vec3 viewPos; vec4 pos; - vec3 shadow_pos; + vec3 shadowPos; for (int i = 0; i < GODRAY_STEPS; i++) { // Exponentialy spaced shadow samples - current_depth = exp2(i + dither) - 0.6; - if (current_depth > view_distance) { + currentDistance = exp2(i + dither) - 0.6; + if (currentDistance > visibleDistance) { break; } // Distance to depth - current_depth = (far * (current_depth - near)) / (current_depth * (far - near)); + currentDistance = (far * (currentDistance - near)) / (currentDistance * (far - near)); - view_pos = vec3(texcoord, current_depth); + viewPos = vec3(texcoord, currentDistance); // Clip to world - pos = modeli_times_projectioni * (vec4(view_pos, 1.0) * 2.0 - 1.0); - view_pos = (pos.xyz /= pos.w).xyz; + pos = modeli_times_projectioni * (vec4(viewPos, 1.0) * 2.0 - 1.0); + viewPos = (pos.xyz /= pos.w).xyz; - shadow_pos = get_volumetric_pos(view_pos); - light += shadow2D(shadowtex1, shadow_pos).r; + shadowPos = get_volumetric_pos(viewPos); + light += shadow2D(shadowtex1, shadowPos).r; } light /= GODRAY_STEPS; @@ -53,45 +53,42 @@ Volumetric light - MakeUp implementation #if defined COLORED_SHADOW - vec3 get_volumetric_color_light(float dither, float view_distance, mat4 modeli_times_projectioni) { + vec3 get_volumetric_color_light(float dither, float visibleDistance, mat4 modeli_times_projectioni) { float light = 0.0; - float current_depth; - vec3 view_pos; + float currentDistance; + vec3 viewPos; vec4 pos; - vec3 shadow_pos; + vec3 shadowPos; float shadow_detector = 1.0; float shadow_black = 1.0; - vec4 shadow_color = vec4(1.0); - vec3 light_color = vec3(0.0); + vec4 shadowColor = vec4(1.0); float alpha_complement; for (int i = 0; i < GODRAY_STEPS; i++) { // Exponentialy spaced shadow samples - current_depth = exp2(i + dither) - 0.6; - if (current_depth > view_distance) { + currentDistance = exp2(i + dither) - 0.6; + if (currentDistance > visibleDistance) { break; } // Distance to depth - current_depth = (far * (current_depth - near)) / (current_depth * (far - near)); + currentDistance = (far * (currentDistance - near)) / (currentDistance * (far - near)); - view_pos = vec3(texcoord, current_depth); + viewPos = vec3(texcoord, currentDistance); // Clip to world - pos = modeli_times_projectioni * (vec4(view_pos, 1.0) * 2.0 - 1.0); - view_pos = (pos.xyz /= pos.w).xyz; - shadow_pos = get_volumetric_pos(view_pos); + pos = modeli_times_projectioni * (vec4(viewPos, 1.0) * 2.0 - 1.0); + viewPos = (pos.xyz /= pos.w).xyz; + shadowPos = get_volumetric_pos(viewPos); - light += shadow2D(shadowtex0, shadow_pos).r; + light += shadow2D(shadowtex0, shadowPos).r; } - // light_color /= GODRAY_STEPS; light /= GODRAY_STEPS; - // return light_color; return vec3(light); } diff --git a/shaders/lib/water.glsl b/shaders/lib/water.glsl index 5b7d7598..28c39ad5 100644 --- a/shaders/lib/water.glsl +++ b/shaders/lib/water.glsl @@ -2,93 +2,93 @@ Water reflection and refraction related functions. */ -vec3 fast_raymarch(vec3 direction, vec3 hit_coord, inout float infinite, float dither) { - vec3 dir_increment; - vec3 current_march = hit_coord; - vec3 old_current_march; - float screen_depth; - float depth_diff = 1.0; - vec3 march_pos = camera_to_screen(hit_coord); - float prev_screen_depth = march_pos.z; - float hit_z = march_pos.z; - bool search_flag = false; - bool hidden_flag = false; - bool first_hidden = true; - bool out_flag = false; - bool to_far = false; - vec3 last_march_pos; +vec3 fastRaymarch(vec3 direction, vec3 hitPoint, inout float infinite, float dither) { + vec3 pathIncrement; + vec3 currentMarchPoint = hitPoint; + vec3 oldMarchPoint; + float screenDepth; + float depthDifference = 1.0; + vec3 screenMarchPos = camera_to_screen(hitPoint); + float prevScreenDepth = screenMarchPos.z; + float hitPointDepth = screenMarchPos.z; + bool searchFlag = false; + bool hiddenFlag = false; + bool firstHidden = true; + bool outOfEyeFlag = false; + bool toFar = false; + vec3 lastScreenMarchPos; int no_hidden_steps = 0; bool hiddens = false; // Ray marching for (int i = 0; i < RAYMARCH_STEPS; i++) { - if (search_flag) { - dir_increment *= 0.5; - current_march += dir_increment * sign(depth_diff); + if (searchFlag) { + pathIncrement *= 0.5; + currentMarchPoint += pathIncrement * sign(depthDifference); } else { - old_current_march = current_march; - current_march = hit_coord + ((direction * exp2(i + dither)) - direction); - dir_increment = current_march - old_current_march; + oldMarchPoint = currentMarchPoint; + currentMarchPoint = hitPoint + ((direction * exp2(i + dither)) - direction); + pathIncrement = currentMarchPoint - oldMarchPoint; } - last_march_pos = march_pos; - march_pos = camera_to_screen(current_march); + lastScreenMarchPos = screenMarchPos; + screenMarchPos = camera_to_screen(currentMarchPoint); if ( // Is outside screen space - march_pos.x < 0.0 || - march_pos.x > 1.0 || - march_pos.y < 0.0 || - march_pos.y > 1.0 || - march_pos.z < 0.0 + screenMarchPos.x < 0.0 || + screenMarchPos.x > 1.0 || + screenMarchPos.y < 0.0 || + screenMarchPos.y > 1.0 || + screenMarchPos.z < 0.0 ) { - out_flag = true; + outOfEyeFlag = true; } - if (march_pos.z > 0.9999) { - to_far = true; + if (screenMarchPos.z > 0.9999) { + toFar = true; } - screen_depth = texture2D(depthtex1, march_pos.xy).x; - depth_diff = screen_depth - march_pos.z; + screenDepth = texture2D(depthtex1, screenMarchPos.xy).x; + depthDifference = screenDepth - screenMarchPos.z; - if (depth_diff < 0.0 && abs(screen_depth - prev_screen_depth) > abs(march_pos.z - last_march_pos.z)) { - hidden_flag = true; + if (depthDifference < 0.0 && abs(screenDepth - prevScreenDepth) > abs(screenMarchPos.z - lastScreenMarchPos.z)) { + hiddenFlag = true; hiddens = true; - if (first_hidden) { - first_hidden = false; + if (firstHidden) { + firstHidden = false; } - } else if (depth_diff > 0.0) { - hidden_flag = false; + } else if (depthDifference > 0.0) { + hiddenFlag = false; if (!hiddens) { no_hidden_steps++; } } - if (search_flag == false && depth_diff < 0.0 && hidden_flag == false) { - search_flag = true; + if (searchFlag == false && depthDifference < 0.0 && hiddenFlag == false) { + searchFlag = true; } - prev_screen_depth = screen_depth; + prevScreenDepth = screenDepth; } - infinite = float(screen_depth > 0.9999); + infinite = float(screenDepth > 0.9999); - if (out_flag) { + if (outOfEyeFlag) { infinite = 1.0; - return march_pos; - } else if (to_far) { - if (screen_depth > 0.9999) { + return screenMarchPos; + } else if (toFar) { + if (screenDepth > 0.9999) { infinite = 1.0; - return march_pos; - } else if (no_hidden_steps < 3 || screen_depth > hit_z) { - return march_pos; + return screenMarchPos; + } else if (no_hidden_steps < 3 || screenDepth > hitPointDepth) { + return screenMarchPos; } else { infinite = 1.0; return vec3(1.0); } } else { - return march_pos; + return screenMarchPos; } } @@ -96,10 +96,10 @@ vec3 fast_raymarch(vec3 direction, vec3 hit_coord, inout float infinite, float d #if !defined NETHER && !defined THE_END float sun_reflection(vec3 fragpos) { vec3 astroLightPos = worldTime > 12900 ? moonPosition : sunPosition; - float astro_vector = + float astroAlignment = max(dot(normalize(fragpos), normalize(astroLightPos)), 0.0); - return smoothstep(0.995, 1.0, astro_vector) * + return smoothstep(0.995, 1.0, astroAlignment) * clamp(lmcoord.y, 0.0, 1.0) * (1.0 - rainStrength) * 3.0; } @@ -119,10 +119,10 @@ vec3 normal_waves(vec3 pos) { wave_3 = wave_3 - .5; wave_3 *= 0.66; - vec2 partial_wave = wave_1 + wave_2 + wave_3; - vec3 final_wave = vec3(partial_wave, WATER_TURBULENCE - (rainStrength * 0.6 * WATER_TURBULENCE * visible_sky)); + vec2 partialWave = wave_1 + wave_2 + wave_3; + vec3 finalWave = vec3(partialWave, WATER_TURBULENCE - (rainStrength * 0.6 * WATER_TURBULENCE * visible_sky)); - return normalize(final_wave); + return normalize(finalWave); } vec3 refraction(vec3 fragpos, vec3 color, vec3 refraction) { @@ -180,7 +180,7 @@ vec4 reflection_calc(vec3 fragpos, vec3 normal, vec3 reflected, inout float infi vec3 pos = camera_to_screen(fragpos + reflected * 76.0); #endif #else // Raymarch - vec3 pos = fast_raymarch(reflected, fragpos, infinite, dither); + vec3 pos = fastRaymarch(reflected, fragpos, infinite, dither); #endif float border = @@ -205,7 +205,7 @@ vec3 water_shader( float fresnel, float visible_sky, float dither, - vec3 light_color + vec3 lightColor ) { vec4 reflection = vec4(0.0); float infinite = 1.0; @@ -229,7 +229,7 @@ vec3 water_shader( #ifndef NETHER #ifndef THE_END return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + - vec3(sun_reflection(reflect(normalize(fragpos), normal))) * light_color * infinite * visible_sky; + vec3(sun_reflection(reflect(normalize(fragpos), normal))) * lightColor * infinite * visible_sky; #else return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); #endif @@ -246,20 +246,20 @@ vec3 water_shader( vec4 cristal_reflection_calc(vec3 fragpos, vec3 normal, inout float infinite, float dither) { #if SSR_TYPE == 0 #if defined DISTANT_HORIZONS - vec3 reflected_vector = reflect(normalize(fragpos), normal) * 768.0; + vec3 reflectedVector = reflect(normalize(fragpos), normal) * 768.0; #else - vec3 reflected_vector = reflect(normalize(fragpos), normal) * 76.0; + vec3 reflectedVector = reflect(normalize(fragpos), normal) * 76.0; #endif - vec3 pos = camera_to_screen(fragpos + reflected_vector); + vec3 pos = camera_to_screen(fragpos + reflectedVector); #else - vec3 reflected_vector = reflect(normalize(fragpos), normal); - vec3 pos = fast_raymarch(reflected_vector, fragpos, infinite, dither); + vec3 reflectedVector = reflect(normalize(fragpos), normal); + vec3 pos = fastRaymarch(reflectedVector, fragpos, infinite, dither); if (pos.x > 99.0) { // Fallback #if defined DISTANT_HORIZONS - pos = camera_to_screen(fragpos + reflected_vector * 768.0); + pos = camera_to_screen(fragpos + reflectedVector * 768.0); #else - pos = camera_to_screen(fragpos + reflected_vector * 76.0); + pos = camera_to_screen(fragpos + reflectedVector * 76.0); #endif } #endif @@ -275,11 +275,11 @@ vec4 cristal_shader( vec3 fragpos, vec3 normal, vec4 color, - vec3 sky_reflection, + vec3 skyReflectionColor, float fresnel, float visible_sky, float dither, - vec3 light_color + vec3 lightColor ) { vec4 reflection = vec4(0.0); float infinite = 0.0; @@ -288,15 +288,15 @@ vec4 cristal_shader( reflection = cristal_reflection_calc(fragpos, normal, infinite, dither); #endif - sky_reflection = mix(color.rgb, sky_reflection, visible_sky * visible_sky); + skyReflectionColor = mix(color.rgb, skyReflectionColor, visible_sky * visible_sky); reflection.rgb = mix( - sky_reflection, + skyReflectionColor, reflection.rgb, reflection.a ); - color.rgb = mix(color.rgb, sky_reflection, fresnel); + color.rgb = mix(color.rgb, skyReflectionColor, fresnel); color.rgb = mix(color.rgb, reflection.rgb, fresnel); color.a = mix(color.a, 1.0, fresnel * .9); @@ -306,7 +306,7 @@ vec4 cristal_shader( #ifndef THE_END return color + vec4( mix( - vec3(sun_reflection(reflect(normalize(fragpos), normal)) * light_color * infinite * visible_sky), + vec3(sun_reflection(reflect(normalize(fragpos), normal)) * lightColor * infinite * visible_sky), vec3(0.0), reflection.a ), diff --git a/shaders/lib/water_dh.glsl b/shaders/lib/water_dh.glsl index 9f9eab69..ee79dadc 100644 --- a/shaders/lib/water_dh.glsl +++ b/shaders/lib/water_dh.glsl @@ -6,10 +6,10 @@ Water reflection and refraction related functions (dh). #if !defined NETHER && !defined THE_END float sun_reflection(vec3 fragpos) { vec3 astroLightPos = worldTime > 12900 ? moonPosition : sunPosition; - float astro_vector = + float astroAlignment = max(dot(normalize(fragpos), normalize(astroLightPos)), 0.0); - return smoothstep(0.995, 1.0, astro_vector) * + return smoothstep(0.995, 1.0, astroAlignment) * clamp(lmcoord.y, 0.0, 1.0) * (1.0 - rainStrength) * 3.0; } @@ -21,10 +21,10 @@ vec3 normal_waves_dh(vec3 pos) { vec2 wave_2 = texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.03125) - (frameTimeCounter * .025)).rg; wave_2 = wave_2 - .5; - vec2 partial_wave = wave_2; - vec3 final_wave = vec3(partial_wave, WATER_TURBULENCE); + vec2 partialWave = wave_2; + vec3 finalWave = vec3(partialWave, WATER_TURBULENCE); - return normalize(final_wave); + return normalize(finalWave); } vec3 refraction(vec3 fragpos, vec3 color, vec3 refraction) { @@ -98,7 +98,7 @@ vec3 water_shader_dh( float fresnel, float visible_sky, float dither, - vec3 light_color + vec3 lightColor ) { vec4 reflection = vec4(0.0); float infinite = 1.0; @@ -122,7 +122,7 @@ vec3 water_shader_dh( #ifndef NETHER #ifndef THE_END return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + - vec3(sun_reflection(reflect(normalize(fragpos), normal))) * light_color * infinite * visible_sky; + vec3(sun_reflection(reflect(normalize(fragpos), normal))) * lightColor * infinite * visible_sky; #else return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); #endif diff --git a/shaders/src/shadow_src_vertex.glsl b/shaders/src/shadow_src_vertex.glsl index 92a87d9b..07b6bd5f 100644 --- a/shaders/src/shadow_src_vertex.glsl +++ b/shaders/src/shadow_src_vertex.glsl @@ -23,10 +23,10 @@ vec3 bias = shadow_world_normal * min(SHADOW_FIX_FACTOR + length(position.xyz) * vec3 shadow_world = position.xyz + bias; -shadow_pos = get_shadow_pos(shadow_world); +shadowPos = get_shadow_pos(shadow_world); // --- OPTIMIZACIÓN: Reemplazar sqrt() y el costoso pow() --- -vec2 shadow_diffuse_aux = shadow_pos.xy * 2.0 - 1.0; +vec2 shadow_diffuse_aux = shadowPos.xy * 2.0 - 1.0; float diffuse = length(shadow_diffuse_aux); // Reemplazo ultra-rápido de pow(diffuse, 10.0) From 459ceab63f917c9fd42c13f482e8b0e42d0c2abc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 5 Jan 2026 19:02:19 -0600 Subject: [PATCH 100/147] Refactor V --- shaders/common/composite_fragment.glsl | 40 ++++++++++---------- shaders/common/composite_vertex.glsl | 14 +++---- shaders/common/solid_blocks_fragment.glsl | 12 +++--- shaders/common/solid_blocks_vertex.glsl | 4 +- shaders/common/solid_dh_blocks_fragment.glsl | 8 ++-- shaders/common/solid_dh_blocks_vertex.glsl | 4 +- shaders/common/solid_dh_water_fragment.glsl | 18 ++++----- shaders/common/solid_dh_water_vertex.glsl | 4 +- shaders/common/water_blocks_fragment.glsl | 20 +++++----- shaders/common/water_blocks_vertex.glsl | 4 +- shaders/lib/material_gloss_fragment.glsl | 4 +- shaders/shaders.properties | 4 +- shaders/src/light_vertex.glsl | 12 +++--- shaders/src/light_vertex_dh.glsl | 12 +++--- 14 files changed, 80 insertions(+), 80 deletions(-) diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index e7174e37..1f69f828 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -30,19 +30,19 @@ uniform ivec2 eyeBrightnessSmooth; uniform sampler2D depthtex1; uniform vec3 sunPosition; uniform vec3 moonPosition; - uniform float light_mix; + uniform float dayNightMix; uniform mat4 gbufferProjectionInverse; uniform mat4 gbufferModelViewInverse; uniform mat4 gbufferModelView; - uniform float vol_mixer; + uniform float volumetricDayMixer; #endif #if VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER - uniform float light_mix; + uniform float dayNightMix; uniform mat4 gbufferProjectionInverse; uniform mat4 gbufferModelViewInverse; uniform mat4 gbufferModelView; - uniform float vol_mixer; + uniform float volumetricDayMixer; uniform vec3 shadowLightPosition; uniform mat4 shadowModelView; uniform mat4 shadowProjection; @@ -57,17 +57,17 @@ uniform ivec2 eyeBrightnessSmooth; /* Ins / Outs */ varying vec2 texcoord; -varying vec3 direct_light_color; +varying vec3 directLightColor; varying float exposure; #if VOL_LIGHT == 1 && !defined NETHER - varying vec3 vol_light_color; + varying vec3 volumetricLightColor; varying vec2 lightpos; varying vec3 astroLightPos; #endif #if VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER - varying vec3 vol_light_color; + varying vec3 volumetricLightColor; #endif #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) @@ -107,10 +107,10 @@ void main() { // Underwater fog if(isEyeInWater == 1) { - float water_absorption = clamp(-pow((-linearDepth + 1.0), (4.0 + (WATER_ABSORPTION * 4.0))) + 1.0, 0.0, 1.0); + float waterAbsorption = clamp(-pow((-linearDepth + 1.0), (4.0 + (WATER_ABSORPTION * 4.0))) + 1.0, 0.0, 1.0); blockColor.rgb = - mix(blockColor.rgb, WATER_COLOR * direct_light_color * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), water_absorption); + mix(blockColor.rgb, WATER_COLOR * directLightColor * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), waterAbsorption); } else if(isEyeInWater == 2) { blockColor = mix(blockColor, vec4(1.0, .1, 0.0, 1.0), clamp(sqrt(linearDepth * far * 0.125), 0.0, 1.0)); @@ -136,12 +136,12 @@ void main() { #if VOL_LIGHT == 1 && !defined NETHER #if defined THE_END - float vol_light = 0.1; + float volumetricLight = 0.1; if(d > 0.9999) { - vol_light = 0.5; + volumetricLight = 0.5; } #else - float vol_light = ssGodrays(dither); + float volumetricLight = ssGodrays(dither); #endif vec4 centerFarPlanePos = modeli_times_projectioni * (vec4(0.5, 0.5, 1.0, 1.0) * 2.0 - 1.0); @@ -161,7 +161,7 @@ void main() { volumetricIntensity *= 0.666; - blockColor.rgb += (vol_light_color * vol_light * volumetricIntensity * 2.0); + blockColor.rgb += (volumetricLightColor * volumetricLight * volumetricIntensity * 2.0); #else // Light source position for depth based godrays intensity calculation vec3 auxVector = @@ -170,18 +170,18 @@ void main() { clamp(dot(centerEyeDirection, auxVector), 0.0, 1.0); volumetricIntensity *= dot(eyeDirection, auxVector); volumetricIntensity = - pow(clamp(volumetricIntensity, 0.0, 1.0), vol_mixer) * 0.5 * abs(light_mix * 2.0 - 1.0); + pow(clamp(volumetricIntensity, 0.0, 1.0), volumetricDayMixer) * 0.5 * abs(dayNightMix * 2.0 - 1.0); blockColor.rgb = - mix(blockColor.rgb, vol_light_color * vol_light, volumetricIntensity * (vol_light * 0.5 + 0.5) * (1.0 - rainStrength)); + mix(blockColor.rgb, volumetricLightColor * volumetricLight, volumetricIntensity * (volumetricLight * 0.5 + 0.5) * (1.0 - rainStrength)); #endif #endif #if VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER #if defined COLORED_SHADOW - vec3 vol_light = get_volumetric_color_light(dither, screen_distance, modeli_times_projectioni); + vec3 volumetricLight = get_volumetric_color_light(dither, screen_distance, modeli_times_projectioni); #else - float vol_light = get_volumetric_light(dither, screen_distance, modeli_times_projectioni); + float volumetricLight = get_volumetric_light(dither, screen_distance, modeli_times_projectioni); #endif // Volumetric intensity adjustments @@ -200,13 +200,13 @@ void main() { #if defined THE_END volumetricIntensity = ((square_pow(clamp((volumetricIntensity + .666667) * 0.6, 0.0, 1.0)) * 0.5)); - blockColor.rgb += (vol_light_color * vol_light * volumetricIntensity * 2.0); + blockColor.rgb += (volumetricLightColor * volumetricLight * volumetricIntensity * 2.0); #else volumetricIntensity = - pow(clamp((volumetricIntensity + 0.5) * 0.666666666666666, 0.0, 1.0), vol_mixer) * 0.6 * abs(light_mix * 2.0 - 1.0); + pow(clamp((volumetricIntensity + 0.5) * 0.666666666666666, 0.0, 1.0), volumetricDayMixer) * 0.6 * abs(dayNightMix * 2.0 - 1.0); blockColor.rgb = - mix(blockColor.rgb, vol_light_color * vol_light, volumetricIntensity * (vol_light * 0.5 + 0.5) * (1.0 - rainStrength)); + mix(blockColor.rgb, volumetricLightColor * volumetricLight, volumetricIntensity * (volumetricLight * 0.5 + 0.5) * (1.0 - rainStrength)); #endif #endif diff --git a/shaders/common/composite_vertex.glsl b/shaders/common/composite_vertex.glsl index 4d4f0cd4..48da9992 100644 --- a/shaders/common/composite_vertex.glsl +++ b/shaders/common/composite_vertex.glsl @@ -18,7 +18,7 @@ uniform ivec2 eyeBrightnessSmooth; #endif #if VOL_LIGHT == 1 && !defined NETHER - uniform float light_mix; + uniform float dayNightMix; uniform vec3 sunPosition; uniform vec3 moonPosition; uniform mat4 gbufferProjection; @@ -38,10 +38,10 @@ uniform float frameTime; /* Ins / Outs */ varying vec2 texcoord; -varying vec3 direct_light_color; +varying vec3 directLightColor; #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - varying vec3 vol_light_color; // Flat + varying vec3 volumetricLightColor; // Flat #endif varying float exposure; // Flat @@ -67,8 +67,8 @@ void main() { vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - direct_light_color = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); - direct_light_color = mix(direct_light_color, ZENITH_SKY_RAIN_COLOR * luma(direct_light_color), rainStrength); + directLightColor = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); + directLightColor = mix(directLightColor, ZENITH_SKY_RAIN_COLOR * luma(directLightColor), rainStrength); // Exposure float mipmap_level = log2(min(viewWidth, viewHeight)) - 1.0; @@ -94,11 +94,11 @@ void main() { vol_attenuation = 0.1 + (eye_bright_smooth.y * 0.002); } - vol_light_color = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR) * 1.2 * vol_attenuation; + volumetricLightColor = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR) * 1.2 * vol_attenuation; #endif #if VOL_LIGHT == 1 && !defined NETHER - astroLightPos = sunPosition * step(0.5, light_mix) * 2.0 + moonPosition; + astroLightPos = sunPosition * step(0.5, dayNightMix) * 2.0 + moonPosition; vec4 tpos = vec4(astroLightPos, 1.0) * gbufferProjection; tpos = vec4(tpos.xyz / tpos.w, 1.0); vec2 pos1 = tpos.xy / tpos.z; diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 5d855f05..7b051ad2 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -17,7 +17,7 @@ uniform sampler2D tex; uniform int isEyeInWater; uniform float nightVision; uniform float rainStrength; -uniform float light_mix; +uniform float dayNightMix; uniform float pixel_size_x; uniform float pixel_size_y; uniform sampler2D gaux4; @@ -77,7 +77,7 @@ uniform float blindness; varying vec2 texcoord; varying vec4 tint_color; varying float frog_adjust; -varying vec3 direct_light_color; +varying vec3 directLightColor; varying vec3 candle_color; varying float direct_light_strength; varying vec3 omni_light; @@ -205,7 +205,7 @@ void main() { shadow_c = mix(shadow_c, 1.0, shadow_diffuse); #endif #else - float shadow_c = abs((light_mix * 2.0) - 1.0); + float shadow_c = abs((dayNightMix * 2.0) - 1.0); #endif #if defined GBUFFER_BEACONBEAM @@ -214,7 +214,7 @@ void main() { blockColor.rgb = clamp(vec3(luma(blockColor.rgb)) * vec3(0.75, 0.75, 1.5), vec3(0.3), vec3(1.0)); vec3 real_light = omni_light + - (shadow_c * direct_light_color * direct_light_strength) * (1.0 - (rainStrength * 0.75)) + + (shadow_c * directLightColor * direct_light_strength) * (1.0 - (rainStrength * 0.75)) + final_candle_color; #else #if defined MATERIAL_GLOSS && !defined NETHER @@ -231,11 +231,11 @@ void main() { float material = material_gloss_factor * block_luma; vec3 real_light = omni_light + - (shadow_c * ((direct_light_color * direct_light_strength) + (direct_light_color * material))) * (1.0 - (rainStrength * 0.75)) + + (shadow_c * ((directLightColor * direct_light_strength) + (directLightColor * material))) * (1.0 - (rainStrength * 0.75)) + final_candle_color; #else vec3 real_light = omni_light + - (shadow_c * direct_light_color * direct_light_strength) * (1.0 - (rainStrength * 0.75)) + + (shadow_c * directLightColor * direct_light_strength) * (1.0 - (rainStrength * 0.75)) + final_candle_color; #endif diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index 7f1bebc1..8e7d038e 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -16,7 +16,7 @@ uniform float viewWidth; uniform float viewHeight; uniform vec3 sunPosition; uniform int isEyeInWater; -uniform float light_mix; +uniform float dayNightMix; uniform float far; uniform float rainStrength; uniform ivec2 eyeBrightnessSmooth; @@ -68,7 +68,7 @@ uniform mat4 gbufferProjectionInverse; varying vec2 texcoord; varying vec4 tint_color; varying float frog_adjust; -varying vec3 direct_light_color; +varying vec3 directLightColor; varying vec3 candle_color; varying float direct_light_strength; varying vec3 omni_light; diff --git a/shaders/common/solid_dh_blocks_fragment.glsl b/shaders/common/solid_dh_blocks_fragment.glsl index 9db6bada..6c0ae362 100644 --- a/shaders/common/solid_dh_blocks_fragment.glsl +++ b/shaders/common/solid_dh_blocks_fragment.glsl @@ -2,7 +2,7 @@ /* Uniforms */ -uniform float light_mix; +uniform float dayNightMix; uniform float nightVision; uniform float rainStrength; uniform float pixel_size_x; @@ -22,7 +22,7 @@ uniform int dhRenderDistance; varying vec2 texcoord; varying vec4 tint_color; -varying vec3 direct_light_color; +varying vec3 directLightColor; varying vec3 candle_color; varying float direct_light_strength; varying vec3 omni_light; @@ -65,11 +65,11 @@ void main() { vec3 final_candle_color = candle_color; - float shadow_c = abs((light_mix * 2.0) - 1.0); + float shadow_c = abs((dayNightMix * 2.0) - 1.0); vec3 real_light = omni_light + - (shadow_c * direct_light_color * direct_light_strength) * (1.0 - (rainStrength * 0.75)) + + (shadow_c * directLightColor * direct_light_strength) * (1.0 - (rainStrength * 0.75)) + final_candle_color; blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * 0.125); diff --git a/shaders/common/solid_dh_blocks_vertex.glsl b/shaders/common/solid_dh_blocks_vertex.glsl index bef564b9..f7b47a4f 100644 --- a/shaders/common/solid_dh_blocks_vertex.glsl +++ b/shaders/common/solid_dh_blocks_vertex.glsl @@ -18,7 +18,7 @@ uniform mat4 gbufferModelView; uniform mat4 gbufferModelViewInverse; uniform vec3 sunPosition; uniform int isEyeInWater; -uniform float light_mix; +uniform float dayNightMix; uniform float far; uniform float rainStrength; uniform mat4 gbufferProjectionInverse; @@ -39,7 +39,7 @@ uniform mat4 gbufferProjectionInverse; varying vec2 texcoord; varying vec4 tint_color; -varying vec3 direct_light_color; +varying vec3 directLightColor; varying vec3 candle_color; varying float direct_light_strength; varying vec3 omni_light; diff --git a/shaders/common/solid_dh_water_fragment.glsl b/shaders/common/solid_dh_water_fragment.glsl index 036e4b33..f6aede69 100644 --- a/shaders/common/solid_dh_water_fragment.glsl +++ b/shaders/common/solid_dh_water_fragment.glsl @@ -31,7 +31,7 @@ uniform vec3 moonPosition; uniform int worldTime; uniform float nightVision; uniform float rainStrength; -uniform float light_mix; +uniform float dayNightMix; uniform ivec2 eyeBrightnessSmooth; uniform float viewWidth; uniform float viewHeight; @@ -67,7 +67,7 @@ uniform float blindness; varying vec2 texcoord; varying vec4 tint_color; -varying vec3 direct_light_color; +varying vec3 directLightColor; varying vec3 candle_color; varying float direct_light_strength; varying vec3 omni_light; @@ -171,19 +171,19 @@ void main() { if(block_type < DH_BLOCK_WATER + 0.5 && block_type > DH_BLOCK_WATER - 0.5) { // Water #ifdef VANILLA_WATER - float shadow_c = abs((light_mix * 2.0) - 1.0); + float shadow_c = abs((dayNightMix * 2.0) - 1.0); float fresnel_tex = luma(blockColor.rgb); real_light = omni_light + - (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + + (direct_light_strength * shadow_c * directLightColor) * (1.0 - rainStrength * 0.75) + candle_color; real_light *= (fresnel_tex * 2.0) - 0.25; blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tint_color.rgb; - blockColor.rgb = water_shader_dh(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); + blockColor.rgb = water_shader_dh(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, directLightColor); blockColor.a = sqrt(blockColor.a); #else @@ -194,7 +194,7 @@ void main() { #endif real_light = omni_light + - (direct_light_strength * visible_sky * direct_light_color) * (1.0 - rainStrength * 0.75) + + (direct_light_strength * visible_sky * directLightColor) * (1.0 - rainStrength * 0.75) + candle_color; #if WATER_COLOR_SOURCE == 0 @@ -209,7 +209,7 @@ void main() { fresnel = clamp(fresnel * (water_texture * water_texture + 0.5), 0.0, 1.0); #endif - blockColor.rgb = water_shader_dh(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); + blockColor.rgb = water_shader_dh(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, directLightColor); #endif @@ -217,10 +217,10 @@ void main() { blockColor = tint_color; - float shadow_c = abs((light_mix * 2.0) - 1.0); + float shadow_c = abs((dayNightMix * 2.0) - 1.0); real_light = omni_light + - (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + + (direct_light_strength * shadow_c * directLightColor) * (1.0 - rainStrength * 0.75) + candle_color; blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * .125); diff --git a/shaders/common/solid_dh_water_vertex.glsl b/shaders/common/solid_dh_water_vertex.glsl index 7a189766..ecae5e6f 100644 --- a/shaders/common/solid_dh_water_vertex.glsl +++ b/shaders/common/solid_dh_water_vertex.glsl @@ -18,7 +18,7 @@ uniform mat4 gbufferModelView; uniform mat4 gbufferModelViewInverse; uniform vec3 sunPosition; uniform int isEyeInWater; -uniform float light_mix; +uniform float dayNightMix; uniform float far; uniform float rainStrength; uniform mat4 gbufferProjectionInverse; @@ -39,7 +39,7 @@ uniform mat4 gbufferProjectionInverse; varying vec2 texcoord; varying vec4 tint_color; -varying vec3 direct_light_color; +varying vec3 directLightColor; varying vec3 candle_color; varying float direct_light_strength; varying vec3 omni_light; diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index 6ae0946a..73d9c9c9 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -30,7 +30,7 @@ uniform vec3 moonPosition; uniform int worldTime; uniform float nightVision; uniform float rainStrength; -uniform float light_mix; +uniform float dayNightMix; uniform ivec2 eyeBrightnessSmooth; uniform sampler2D gaux4; uniform vec3 cameraPosition; @@ -94,7 +94,7 @@ varying vec4 worldposition; varying vec3 fragposition; varying vec3 tangent; varying vec3 binormal; -varying vec3 direct_light_color; +varying vec3 directLightColor; varying vec3 candle_color; varying float direct_light_strength; varying vec3 omni_light; @@ -215,20 +215,20 @@ void main() { shadow_c = mix(shadow_c, 1.0, shadow_diffuse); #endif #else - float shadow_c = abs((light_mix * 2.0) - 1.0); + float shadow_c = abs((dayNightMix * 2.0) - 1.0); #endif float fresnel_tex = luma(blockColor.rgb); real_light = omni_light + - (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + + (direct_light_strength * shadow_c * directLightColor) * (1.0 - rainStrength * 0.75) + candle_color; real_light *= (fresnel_tex * 2.0) - 0.25; blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tint_color.rgb; - blockColor.rgb = water_shader(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); + blockColor.rgb = water_shader(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, directLightColor); blockColor.a = sqrt(blockColor.a); #else @@ -240,7 +240,7 @@ void main() { #endif real_light = omni_light + - (direct_light_strength * visible_sky * direct_light_color) * (1.0 - rainStrength * 0.75) + + (direct_light_strength * visible_sky * directLightColor) * (1.0 - rainStrength * 0.75) + candle_color; #if WATER_COLOR_SOURCE == 0 @@ -258,7 +258,7 @@ void main() { fresnel = clamp(fresnel * (water_texture), 0.0, 1.0); #endif - blockColor.rgb = water_shader(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, direct_light_color); + blockColor.rgb = water_shader(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, directLightColor); #endif @@ -276,17 +276,17 @@ void main() { shadow_c = mix(shadow_c, 1.0, shadow_diffuse); #endif #else - float shadow_c = abs((light_mix * 2.0) - 1.0); + float shadow_c = abs((dayNightMix * 2.0) - 1.0); #endif real_light = omni_light + - (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + + (direct_light_strength * shadow_c * directLightColor) * (1.0 - rainStrength * 0.75) + candle_color; blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * .125); if(block_type > 1.5) { // Glass - blockColor = cristal_shader(fragposition, waterNormal, blockColor, sky_color_reflect, fresnel * fresnel, visible_sky, dither, direct_light_color); + blockColor = cristal_shader(fragposition, waterNormal, blockColor, sky_color_reflect, fresnel * fresnel, visible_sky, dither, directLightColor); } } diff --git a/shaders/common/water_blocks_vertex.glsl b/shaders/common/water_blocks_vertex.glsl index 08265faa..8dd91178 100644 --- a/shaders/common/water_blocks_vertex.glsl +++ b/shaders/common/water_blocks_vertex.glsl @@ -14,7 +14,7 @@ uniform vec3 sunPosition; uniform int isEyeInWater; -uniform float light_mix; +uniform float dayNightMix; uniform float far; uniform float nightVision; uniform ivec2 eyeBrightnessSmooth; @@ -59,7 +59,7 @@ varying vec4 worldposition; varying vec3 fragposition; varying vec3 tangent; varying vec3 binormal; -varying vec3 direct_light_color; +varying vec3 directLightColor; varying vec3 candle_color; varying float direct_light_strength; varying vec3 omni_light; diff --git a/shaders/lib/material_gloss_fragment.glsl b/shaders/lib/material_gloss_fragment.glsl index 7c933e58..7b0cfd08 100644 --- a/shaders/lib/material_gloss_fragment.glsl +++ b/shaders/lib/material_gloss_fragment.glsl @@ -12,7 +12,7 @@ } #else float material_gloss(vec3 reflectedVector, vec2 lmcoord_alt, float gloss_power, vec3 flat_normal) { - vec3 astroLightPos = mix(-sunPosition, sunPosition, light_mix); + vec3 astroLightPos = mix(-sunPosition, sunPosition, dayNightMix); float astroAlignment = max(dot(normalize(reflectedVector), normalize(astroLightPos)), 0.0) * step(0.0001, dot(astroLightPos, flat_normal)); @@ -23,6 +23,6 @@ (1.0 - rainStrength), 0.0, 1.0 - ) * abs(mix(1.0, -1.0, light_mix)); + ) * abs(mix(1.0, -1.0, dayNightMix)); } #endif \ No newline at end of file diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 9ade5e27..78ca0886 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -125,7 +125,7 @@ variable.float.moment_aux_7 = (day_moment * 4.0) - 3.0 variable.float.moment_aux_8 = moment_aux_7 * moment_aux_7 * moment_aux_7 * moment_aux_7 variable.float.night_vol_mixer = clamp(((-moment_aux_8 + 1.0) * 7.0) + 1.0, 1.0, 8.0) -uniform.float.vol_mixer = max(day_vol_mixer, night_vol_mixer) +uniform.float.volumetricDayMixer = max(day_vol_mixer, night_vol_mixer) # Light mix - Similar to the previous cases, a value that depends on the time of day # to adjust various different parameters. @@ -135,7 +135,7 @@ variable.float.light_mix_c = 0.0 variable.float.light_mix_d = if(worldTime >= 22915 && worldTime < 23515, (worldTime - 22915) * 0.0016666666666666668, 0.0) variable.float.light_mix_e = max(light_mix_a, light_mix_b) variable.float.light_mix_f = max(light_mix_c, light_mix_d) -uniform.float.light_mix = max(light_mix_e, light_mix_f) +uniform.float.dayNightMix = max(light_mix_e, light_mix_f) # Frame modulus uniform.int.frame_mod = fmod(frameCounter, 16) diff --git a/shaders/src/light_vertex.glsl b/shaders/src/light_vertex.glsl index d0bd31fe..16ffabe1 100644 --- a/shaders/src/light_vertex.glsl +++ b/shaders/src/light_vertex.glsl @@ -50,7 +50,7 @@ if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals #if defined THE_END || defined NETHER direct_light_strength = sun_light_strength; #else - direct_light_strength = mix(-sun_light_strength, sun_light_strength, light_mix); + direct_light_strength = mix(-sun_light_strength, sun_light_strength, dayNightMix); #endif // Omni light intensity changes by angle @@ -59,11 +59,11 @@ if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals // Direct light color #ifdef UNKNOWN_DIM - direct_light_color = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; + directLightColor = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; #else - direct_light_color = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); + directLightColor = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); #if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 - direct_light_color += (endFlashIntensity * endFlashIntensity * 0.1); + directLightColor += (endFlashIntensity * endFlashIntensity * 0.1); #endif #endif @@ -98,10 +98,10 @@ float omni_strength = ((direct_light_strength + 1.0) * 0.25) + 0.75; #if defined THE_END || defined NETHER omni_light = LIGHT_DAY_COLOR * omni_strength; #else - direct_light_color = mix(direct_light_color, ZENITH_SKY_RAIN_COLOR * luma(direct_light_color) * 0.4, rainStrength); + directLightColor = mix(directLightColor, ZENITH_SKY_RAIN_COLOR * luma(directLightColor) * 0.4, rainStrength); // Minimal light - vec3 omni_color = mix(hi_sky_color_rgb, direct_light_color * 0.45, OMNI_TINT); + vec3 omni_color = mix(hi_sky_color_rgb, directLightColor * 0.45, OMNI_TINT); float omni_color_luma = colorAverage(omni_color); // --- OPTIMIZACIÓN #3: Prevenir división por cero --- float luma_ratio = AVOID_DARK_LEVEL / max(omni_color_luma, 0.0001); diff --git a/shaders/src/light_vertex_dh.glsl b/shaders/src/light_vertex_dh.glsl index 07828b1c..f931fe26 100644 --- a/shaders/src/light_vertex_dh.glsl +++ b/shaders/src/light_vertex_dh.glsl @@ -41,7 +41,7 @@ if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals #if defined THE_END || defined NETHER direct_light_strength = sun_light_strength; #else - direct_light_strength = mix(-sun_light_strength, sun_light_strength, light_mix); + direct_light_strength = mix(-sun_light_strength, sun_light_strength, dayNightMix); #endif // Omni light intensity changes by angle @@ -49,11 +49,11 @@ float omni_strength = ((direct_light_strength + 1.0) * 0.25) + 0.75; // Calculamos color de luz directa #ifdef UNKNOWN_DIM - direct_light_color = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; + directLightColor = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; #else - direct_light_color = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); + directLightColor = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); #if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 - direct_light_color += (endFlashIntensity * endFlashIntensity * 0.1); + directLightColor += (endFlashIntensity * endFlashIntensity * 0.1); #endif #endif @@ -62,10 +62,10 @@ direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); #if defined THE_END || defined NETHER omni_light = LIGHT_DAY_COLOR; #else - direct_light_color = mix(direct_light_color, ZENITH_SKY_RAIN_COLOR * luma(direct_light_color) * 0.4, rainStrength); + directLightColor = mix(directLightColor, ZENITH_SKY_RAIN_COLOR * luma(directLightColor) * 0.4, rainStrength); // Minimal light - vec3 omni_color = mix(hi_sky_color_rgb, direct_light_color * 0.45, OMNI_TINT); + vec3 omni_color = mix(hi_sky_color_rgb, directLightColor * 0.45, OMNI_TINT); float omni_color_luma = colorAverage(omni_color); // --- OPTIMIZACIÓN #3: Prevenir división por cero --- From 6e41c299343a9a3ed177d5c9340a9a6b7341c25d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 5 Jan 2026 22:20:28 -0600 Subject: [PATCH 101/147] Refactor VI --- shaders/common/composite1_fragment.glsl | 2 +- shaders/common/composite2_fragment.glsl | 7 +- shaders/common/composite_fragment.glsl | 4 +- shaders/common/deferred_fragment.glsl | 2 +- shaders/common/prepare_fragment.glsl | 2 +- shaders/common/skybasic_fragment.glsl | 2 +- shaders/common/solid_blocks_fragment.glsl | 2 +- shaders/common/solid_dh_blocks_fragment.glsl | 4 +- shaders/common/solid_dh_water_fragment.glsl | 4 +- shaders/common/water_blocks_fragment.glsl | 4 +- shaders/lib/ao.glsl | 3 +- shaders/lib/dither.glsl | 389 +++++++------------ shaders/lib/fast_taa.glsl | 107 +---- shaders/lib/motion_blur.glsl | 9 +- shaders/shaders.properties | 106 +++-- shaders/src/taa_offset.glsl | 32 +- 16 files changed, 257 insertions(+), 422 deletions(-) diff --git a/shaders/common/composite1_fragment.glsl b/shaders/common/composite1_fragment.glsl index 5206f290..2d97f661 100644 --- a/shaders/common/composite1_fragment.glsl +++ b/shaders/common/composite1_fragment.glsl @@ -50,7 +50,7 @@ void main() { #if defined BLOOM || defined DOF #if AA_TYPE > 0 - float dither = shifted_semiblue(gl_FragCoord.xy); + float dither = shiftedSemiblue(gl_FragCoord.xy); #else float dither = semiblue(gl_FragCoord.xy); #endif diff --git a/shaders/common/composite2_fragment.glsl b/shaders/common/composite2_fragment.glsl index 54f493c6..f5f1bc0c 100644 --- a/shaders/common/composite2_fragment.glsl +++ b/shaders/common/composite2_fragment.glsl @@ -84,9 +84,14 @@ void main() { #endif #ifdef MOTION_BLUR + #if AA_TYPE > 0 + float dither = shiftedDitherMakeup(gl_FragCoord.xy); + #else + float dither = ditherMakeup(gl_FragCoord.xy); + #endif // "Speed" vec2 velocity = texcoord - texcoord_past; - blockColor.rgb = motion_blur(blockColor.rgb, z_depth, velocity, colortex1); + blockColor.rgb = motion_blur(blockColor.rgb, z_depth, velocity, dither, colortex1); #endif #if AA_TYPE > 0 diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index 1f69f828..d226b11a 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -128,9 +128,9 @@ void main() { #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) #if AA_TYPE > 0 - float dither = shifted_dither17(gl_FragCoord.xy); + float dither = shiftedDither17(gl_FragCoord.xy); #else - float dither = r_dither(gl_FragCoord.xy); + float dither = rDither(gl_FragCoord.xy); #endif #endif diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index 98b5a21d..eb77f92c 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -116,7 +116,7 @@ void main() { #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) #if AA_TYPE > 0 - float dither = shifted_semiblue(gl_FragCoord.xy); + float dither = shiftedSemiblue(gl_FragCoord.xy); #else float dither = semiblue(gl_FragCoord.xy); #endif diff --git a/shaders/common/prepare_fragment.glsl b/shaders/common/prepare_fragment.glsl index 71f73065..819163fe 100644 --- a/shaders/common/prepare_fragment.glsl +++ b/shaders/common/prepare_fragment.glsl @@ -35,7 +35,7 @@ void main() { #else #if AA_TYPE > 0 - float dither = shifted_r_dither(gl_FragCoord.xy); + float dither = shiftedRDither(gl_FragCoord.xy); #else float dither = dither13(gl_FragCoord.xy); #endif diff --git a/shaders/common/skybasic_fragment.glsl b/shaders/common/skybasic_fragment.glsl index ed1cfa98..3bf81973 100644 --- a/shaders/common/skybasic_fragment.glsl +++ b/shaders/common/skybasic_fragment.glsl @@ -59,7 +59,7 @@ void main() { #else #if MC_VERSION < 11604 #if AA_TYPE > 0 - float dither = shifted_r_dither(gl_FragCoord.xy); + float dither = shiftedRDither(gl_FragCoord.xy); #else float dither = dither13(gl_FragCoord.xy); #endif diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 7b051ad2..adf17d93 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -134,7 +134,7 @@ varying vec3 omni_light; void main() { #if (defined SHADOW_CASTING && !defined NETHER) || defined DISTANT_HORIZONS #if AA_TYPE > 0 - float dither = shifted_dither13(gl_FragCoord.xy); + float dither = shiftedDither13(gl_FragCoord.xy); #else float dither = dither17(gl_FragCoord.xy); #endif diff --git a/shaders/common/solid_dh_blocks_fragment.glsl b/shaders/common/solid_dh_blocks_fragment.glsl index 6c0ae362..10b96f8f 100644 --- a/shaders/common/solid_dh_blocks_fragment.glsl +++ b/shaders/common/solid_dh_blocks_fragment.glsl @@ -38,9 +38,9 @@ varying float frog_adjust; void main() { #if AA_TYPE > 0 - float dither = shifted_r_dither(gl_FragCoord.xy); + float dither = shiftedRDither(gl_FragCoord.xy); #else - float dither = r_dither(gl_FragCoord.xy); + float dither = rDither(gl_FragCoord.xy); #endif // Avoid render unnecessary DH diff --git a/shaders/common/solid_dh_water_fragment.glsl b/shaders/common/solid_dh_water_fragment.glsl index f6aede69..996a4779 100644 --- a/shaders/common/solid_dh_water_fragment.glsl +++ b/shaders/common/solid_dh_water_fragment.glsl @@ -98,9 +98,9 @@ void main() { vec3 real_light; #if AA_TYPE > 0 - float dither = shifted_r_dither(gl_FragCoord.xy); + float dither = shiftedRDither(gl_FragCoord.xy); #else - float dither = r_dither(gl_FragCoord.xy); + float dither = rDither(gl_FragCoord.xy); // dither = 1.0; #endif diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index 73d9c9c9..faf9febb 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -148,9 +148,9 @@ void main() { #if SHADOW_TYPE == 1 || defined DISTANT_HORIZONS || (defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER) || SSR_TYPE > 0 #if AA_TYPE > 0 - float dither = shifted_r_dither(gl_FragCoord.xy); + float dither = shiftedRDither(gl_FragCoord.xy); #else - float dither = r_dither(gl_FragCoord.xy); + float dither = rDither(gl_FragCoord.xy); #endif #else float dither = 1.0; diff --git a/shaders/lib/ao.glsl b/shaders/lib/ao.glsl index bfa5e273..aff047e8 100644 --- a/shaders/lib/ao.glsl +++ b/shaders/lib/ao.glsl @@ -11,8 +11,9 @@ float dbao(float dither) { float n; float ditherSample; - float linearDepth = ld(texture2DLod(depthtex0, texcoord.xy, 0.0).r); + float linearDepth = texture2DLod(depthtex0, texcoord.xy, 0.0).r; float handCheck = linearDepth < 0.56 ? 1024.0 : 1.0; + linearDepth = ld(linearDepth); float sampleLinearDepth = 0.0; float angle = 0.0; diff --git a/shaders/lib/dither.glsl b/shaders/lib/dither.glsl index 8e0b24ff..ce3d8f42 100644 --- a/shaders/lib/dither.glsl +++ b/shaders/lib/dither.glsl @@ -5,7 +5,7 @@ There are a multitude of dithers in MakeUp, with different variants. There are fixed ones (that do not change over time) as well as those that change when temporal sampling is active. Of the latter, there are two versions: -one that uses dither_shift (Minecraft 1.13+) and another that uses frame_mod +one that uses ditherShift (Minecraft 1.13+) and another that uses frameMod to rotate the dither values. There are several variants because each one performs better or worse @@ -28,299 +28,208 @@ but there is no such texture currently. */ + +uniform int frameMod; + #if MC_VERSION >= 11300 - uniform float dither_shift; + uniform float ditherShift; +#else + float ditherShift = frameMod * 0.1875; #endif -uniform int frame_mod; -float hash12(vec2 v) +float hash12(vec2 point) { - v = 0.0002314814814814815 * v + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); + point = 0.0002314814814814815 * point + vec2(0.25, 0.0); + float state = fract(dot(point * point, vec2(3571.0))); return fract(state * state * 7142.0); } -float hash13(vec3 v) +float hash13(vec3 point) { - v = fract(v * .1031); - v += dot(v, v.zyx + 31.32); - return fract((v.x + v.y) * v.z); + point = fract(point * .1031); + point += dot(point, point.zyx + 31.32); + return fract((point.x + point.y) * point.z); } -vec2 hash22(vec2 p) +vec2 hash22(vec2 point) { - vec3 p3 = fract(vec3(p.xyx) * vec3(.1031, .1030, .0973)); - p3 += dot(p3, p3.yzx+33.33); - return fract((p3.xx+p3.yz)*p3.zy); + vec3 p3 = fract(vec3(point.xyx) * vec3(.1031, .1030, .0973)); + p3 += dot(p3, p3.yzx + 33.33); + return fract((p3.xx + p3.yz) * p3.zy); } -float r_dither(vec2 frag) { - return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998))); +float rDither(vec2 point) { + return fract(dot(point, vec2(0.75487766624669276, 0.569840290998))); } -float eclectic_r_dither(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); +float eclecticRDither(vec2 point) { + vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); + float state = fract(dot(rPoint * rPoint, vec2(3571.0))); float p4 = fract(state * state * 7142.0) * 0.075; - return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998)) + p4); + return fract(dot(point, vec2(0.75487766624669276, 0.569840290998)) + p4); } -float dither13(vec2 frag) -{ - return fract(dot(frag, vec2(0.3076923076923077, 0.5384615384615384))); +float dither13(vec2 point) { + return fract(dot(point, vec2(0.3076923076923077, 0.5384615384615384))); } -float eclectic_dither13(vec2 frag) -{ - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); +float eclecticDither13(vec2 point) { + vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); + float state = fract(dot(rPoint * rPoint, vec2(3571.0))); float p4 = fract(state * state * 7142.0) * 0.075; - return fract(dot(frag, vec2(0.3076923076923077, 0.5384615384615384)) + p4); + return fract(dot(point, vec2(0.3076923076923077, 0.5384615384615384)) + p4); } -float dither17(vec2 pos) { - return fract(dot(pos, vec2(0.11764705882352941, 0.4117647058823529))); +float dither17(vec2 point) { + return fract(dot(point, vec2(0.11764705882352941, 0.4117647058823529))); } -float eclectic_dither17(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); +float eclecticDither17(vec2 point) { + vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); + float state = fract(dot(rPoint * rPoint, vec2(3571.0))); float p4 = fract(state * state * 7142.0) * 0.15; - return fract(p4 + dot(frag, vec2(0.11764705882352941, 0.4117647058823529))); + return fract(p4 + dot(point, vec2(0.11764705882352941, 0.4117647058823529))); } -float dither_grad_noise(vec2 frag) { - return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag))); +float ditherGradNoise(vec2 point) { + return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), point))); } -float eclectic_dither_grad_noise(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); +float eclecticDitherGradNoise(vec2 point) { + vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); + float state = fract(dot(rPoint * rPoint, vec2(3571.0))); float p4 = fract(state * state * 7142.0) * 0.075; - return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)) + p4); + return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), point)) + p4); } -float texture_noise_64(vec2 p, sampler2D noise) { - return texture2DLod(noise, p * 0.015625, 0).r; +float textureNoise64(vec2 point, sampler2D noise) { + return texture2DLod(noise, point * 0.015625, 0).r; } -float semiblue(vec2 xy) { - vec2 tile = floor(xy * 0.25); +float semiblue(vec2 point) { + vec2 tile = floor(point * 0.25); float flip = mod(tile.x + tile.y, 2.0); - xy = mix(xy, xy.yx, flip); + point = mix(point, point.yx, flip); - return fract(dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); + return fract(dot(vec2(0.75487766624669276, 0.569840290998), point) + hash12(tile)); } -float dither_makeup(vec2 xy) { - vec2 tile = floor(xy * 0.125); +float ditherMakeup(vec2 point) { + vec2 tile = floor(point * 0.125); float flip = mod(tile.x + tile.y, 2.0); - vec2 zw = mix(xy, xy.yx, flip); + vec2 rPoint = mix(point, point.yx, flip); return fract( - dot(vec2(0.24512233375330728, 0.4301597090019468), zw) + + dot(vec2(0.24512233375330728, 0.4301597090019468), rPoint) + dot(vec2(0.735151469707489, 0.737424373626709), tile) ); } -// float valve_red(vec2 xy) { -// float vDither = dot(vec2( 171.0, 231.0 ), xy ); +// float valveRed(vec2 point) { +// float vDither = dot(vec2( 171.0, 231.0 ), point ); // return fract(vDither / 103.0); // (103.0, 71. 97.0 ) // } -#if MC_VERSION >= 11300 - float shifted_hash12(vec2 v) - { - v = 0.0002314814814814815 * v + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - return fract(dither_shift + (state * state * 7142.0)); - } - - float shifted_hash13(vec3 v) - { - v = fract(v * .1031); - v += dot(v, v.zyx + 31.32); - return fract(dither_shift + ((v.x + v.y) * v.z)); - } - - float shifted_r_dither(vec2 frag) { - return fract(dither_shift + dot(frag, vec2(0.75487766624669276, 0.569840290998))); - } - - float shifted_eclectic_r_dither(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.075; - - return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998)) + dither_shift + p4); - } - - float shifted_dither13(vec2 frag) - { - return fract(dither_shift + dot(frag, vec2(0.3076923076923077, 0.5384615384615384))); - } - - float shifted_eclectic_dither13(vec2 frag) - { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.075; - - return fract(dot(frag, vec2(0.3076923076923077, 0.5384615384615384)) + dither_shift + p4); - } - - float shifted_dither17(vec2 pos) { - return fract(dither_shift + dot(pos, vec2(0.11764705882352941, 0.4117647058823529))); - } - - float shifted_eclectic_dither17(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; - - return fract(dither_shift + p4 + dot(frag, vec2(0.11764705882352941, 0.4117647058823529))); - } - - float shifted_dither_grad_noise(vec2 frag) { - return fract(dither_shift + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))); - } - - float shifted_eclectic_dither_grad_noise(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.075; - - return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)) + dither_shift + p4); - } - - float shifted_texture_noise_64(vec2 p, sampler2D noise) { - float dither = texture2DLod(noise, p * 0.015625, 0).r; - return fract(dither_shift + dither); - } - - float shifted_semiblue(vec2 xy) { - xy = xy + vec2(frame_mod * 5.0, frame_mod * 15.0); - vec2 tile = floor(xy * 0.25); - float flip = mod(tile.x + tile.y, 2.0); - xy = mix(xy, xy.yx, flip); - - return fract(dither_shift + dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); - } - - float shifted_dither_makeup(vec2 xy) { - xy = xy + vec2(frame_mod * 9.0, frame_mod * 15.0); - vec2 tile = floor(xy * 0.125); - float flip = mod(tile.x + tile.y, 2.0); - vec2 zw = mix(xy, xy.yx, flip); - - return fract( - dither_shift + - dot(vec2(0.24512233375330728, 0.4301597090019468), zw) + - dot(vec2(0.9996657054871321, 0.9998746076598763), tile) - ); - } - - - // float shifted_valve_red(vec2 xy) { - // float vDither = dot(vec2( 171.0, 231.0 ), xy ); - // vDither = fract(vDither / 103.0); // (103.0, 71. 97.0 ) - - // return fract(dither_shift + vDither); - // } +float shiftedHash12(vec2 point) +{ + point = 0.0002314814814814815 * point + vec2(0.25, 0.0); + float state = fract(dot(point * point, vec2(3571.0))); + return fract(ditherShift + (state * state * 7142.0)); +} -#else +float shiftedHash13(vec3 point) +{ + point = fract(point * .1031); + point += dot(point, point.zyx + 31.32); + return fract(ditherShift + ((point.x + point.y) * point.z)); +} - float shifted_hash12(vec2 v) - { - v = 0.0002314814814814815 * v + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - return fract((frame_mod * 0.4) + (state * state * 7142.0)); - } - - float shifted_hash13(vec3 v) - { - v = fract(v * .1031); - v += dot(v, v.zyx + 31.32); - return fract((frame_mod * 0.4) + ((v.x + v.y) * v.z)); - } - - float shifted_r_dither(vec2 frag) { - return fract((frame_mod * 0.4) + dot(frag, vec2(0.75487766624669276, 0.569840290998))); - } - - float shifted_eclectic_r_dither(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.075; - - return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998)) + (frame_mod * 0.4) + p4); - } - - float shifted_dither13(vec2 frag) - { - return fract((frame_mod * 0.4) + dot(frag, vec2(0.3076923076923077, 0.5384615384615384))); - } - - float shifted_dither17(vec2 pos) { - return fract((frame_mod * 0.4) + dot(pos, vec2(0.11764705882352941, 0.4117647058823529))); - } - - float shifted_eclectic_dither17(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; - - return fract((frame_mod * 0.4)+ p4 + dot(frag, vec2(0.11764705882352941, 0.4117647058823529))); - } - - float shifted_dither_grad_noise(vec2 frag) { - return fract((frame_mod * 0.4) + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))); - } - - float shifted_eclectic_dither_grad_noise(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.075; - - return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)) + (frame_mod * 0.4) + p4); - } - - float shifted_texture_noise_64(vec2 p, sampler2D noise) { - float dither = texture2DLod(noise, p * 0.015625, 0).r; - return fract((frame_mod * 0.4) + dither); - } - - float shifted_semiblue(vec2 xy) { - vec2 tile = floor(xy * 0.25); - float flip = mod(tile.x + tile.y, 2.0); - xy = mix(xy, xy.yx, flip); - - return fract((frame_mod * 0.4) + dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); - } - - float shifted_dither_makeup(vec2 xy) { - xy = xy + vec2(frame_mod * 7.0, frame_mod * 15.0); - vec2 tile = floor(xy * 0.125); - float flip = mod(tile.x + tile.y, 2.0); - vec2 zw = mix(xy, xy.yx, flip); - - return fract( - (frame_mod * 0.4) + - dot(vec2(0.24512233375330728, 0.4301597090019468), zw) + - dot(vec2(0.9996657054871321, 0.9998746076598763), tile) - ); - } - - // float shifted_valve_red(vec2 xy) { - // float vDither = dot(vec2( 171.0, 231.0 ), xy ); - // vDither = fract(vDither / 103.0); // (103.0, 71. 97.0 ) - - // return fract((frame_mod * 0.4) + vDither); - // } +float shiftedRDither(vec2 point) { + return fract(ditherShift + dot(point, vec2(0.75487766624669276, 0.569840290998))); +} + +float shiftedEclecticRDither(vec2 point) { + vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); + float state = fract(dot(rPoint * rPoint, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.075; + + return fract(dot(point, vec2(0.75487766624669276, 0.569840290998)) + ditherShift + p4); +} + +float shiftedDither13(vec2 point) +{ + return fract(ditherShift + dot(point, vec2(0.3076923076923077, 0.5384615384615384))); +} + +float shiftedEclecticDither13(vec2 point) +{ + vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); + float state = fract(dot(rPoint * rPoint, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.075; + + return fract(dot(point, vec2(0.3076923076923077, 0.5384615384615384)) + ditherShift + p4); +} + +float shiftedDither17(vec2 point) { + return fract(ditherShift + dot(point, vec2(0.11764705882352941, 0.4117647058823529))); +} + +float shiftedEclecticDither17(vec2 point) { + vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); + float state = fract(dot(rPoint * rPoint, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.15; + + return fract(ditherShift + p4 + dot(point, vec2(0.11764705882352941, 0.4117647058823529))); +} + +float shiftedDitherGradNoise(vec2 point) { + return fract(ditherShift + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), point)))); +} + +float shiftedEclecticDitherGradNoise(vec2 point) { + vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); + float state = fract(dot(rPoint * rPoint, vec2(3571.0))); + float p4 = fract(state * state * 7142.0) * 0.075; + + return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), point)) + ditherShift + p4); +} + +float shiftedTextureNoise64(vec2 point, sampler2D noise) { + float dither = texture2DLod(noise, point * 0.015625, 0).r; + return fract(ditherShift + dither); +} + +float shiftedSemiblue(vec2 point) { + point = point + vec2(frameMod * 5.0, frameMod * 15.0); + vec2 tile = floor(point * 0.25); + float flip = mod(tile.x + tile.y, 2.0); + point = mix(point, point.yx, flip); + + return fract(ditherShift + dot(vec2(0.75487766624669276, 0.569840290998), point) + hash12(tile)); +} + +float shiftedDitherMakeup(vec2 point) { + point = point + vec2(frameMod * 9.0, frameMod * 15.0); + vec2 tile = floor(point * 0.125); + float flip = mod(tile.x + tile.y, 2.0); + vec2 zw = mix(point, point.yx, flip); + + return fract( + ditherShift + + dot(vec2(0.24512233375330728, 0.4301597090019468), zw) + + dot(vec2(0.9996657054871321, 0.9998746076598763), tile) + ); +} + +// float shiftedValveRed(vec2 point) { +// float vDither = dot(vec2(171.0, 231.0), point ); +// vDither = fract(vDither / 103.0); // (103.0, 71. 97.0 ) + +// return fract(ditherShift + vDither); +// } -#endif diff --git a/shaders/lib/fast_taa.glsl b/shaders/lib/fast_taa.glsl index 946f8d30..498bc4ee 100644 --- a/shaders/lib/fast_taa.glsl +++ b/shaders/lib/fast_taa.glsl @@ -4,41 +4,6 @@ Temporal antialiasing functions. Javier Garduño - GNU Lesser General Public License v3.0 */ -// vec3 selective_blur(vec3 neighborhood[9], float hueThreshold) { -// // El píxel central está en el índice 4 -// vec3 centerColor = neighborhood[4]; -// vec3 centerHSV = rgb2hsv(centerColor); - -// vec3 accumulatedColor = centerColor; -// float count = 1.0; - -// // Itera sobre todo el array de vecinos -// for (int i = 0; i < 9; i++) { -// // Salta el píxel central, ya que ya está incluido -// if (i == 4) { -// continue; -// } - -// vec3 neighborColor = neighborhood[i]; -// vec3 neighborHSV = rgb2hsv(neighborColor); - -// // Compara la diferencia de tono -// float hueDiff = abs(centerHSV.x - neighborHSV.x); - -// // Considera la naturaleza cíclica del tono -// if (hueDiff > 0.5) { -// hueDiff = 1.0 - hueDiff; -// } - -// if (hueDiff <= hueThreshold) { -// accumulatedColor += neighborColor; -// count++; -// } -// } - -// return accumulatedColor / count; -// } - vec4 convex_hull( vec3 c, vec3 previous, vec3 up, vec3 down, vec3 left, vec3 right, vec3 ul, vec3 ur, vec3 dl, vec3 dr) { @@ -59,27 +24,11 @@ vec4 convex_hull( vec3 mean = sum * 0.1111111111111111; // 1 / 9 vec3 variance = abs(sum_sq * 0.1111111111111111 - mean * mean); // Varianza = E[x^2] - E[x]^2 - // 2. Definir el rango de clamping vec3 std_dev = sqrt(variance); vec3 min_valid = mean - std_dev; vec3 max_valid = mean + std_dev; - // 3. Aplicar el clamping return vec4(clamp(previous, min_valid, max_valid), distance(min_valid, max_valid)); - - // Clip 2 - // float radio = length(max_valid - mean); - - // vec3 color_vector = previous - mean; - // float color_dist = length(color_vector); - - // float factor = 1.0; - // if (color_dist > radio) { - // factor = (radio / color_dist); - // } - // previous = mean + (color_vector * factor); - - // return vec4(previous, distance(min_valid, max_valid)); } // float edge_detector( @@ -144,18 +93,6 @@ vec4 convex_hull( // return smoothstep(relative_threshold, relative_threshold + smoothness, max_lineness); // } -// float fast_edge_detector(vec3 current_color, vec3 left, vec3 right, vec3 up, vec3 down) { -// vec3 edge_color = -left; -// edge_color -= right; -// edge_color += current_color * 4.0; -// edge_color -= down; -// edge_color -= up; -// edge_color = edge_color / (current_color * 2.0); - -// float edge = clamp(length(edge_color) * 0.5773502691896258, 0.0, 1.0); // 1/sqrt(3) -// return smoothstep(0.25, 0.75, edge); -// } - vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { // Verificamos si proyección queda fuera de la pantalla actual if (clamp(texcoord_past, 0.0, 1.0) != texcoord_past) { @@ -176,34 +113,6 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { vec3 c_max = max(max(max(left, right), down),max(up, max(ul, max(ur, max(dl, max(dr, current_color)))))); vec3 c_min = min(min(min(left, right), down),min(up, min(ul, min(ur, min(dl, min(dr, current_color)))))); - // float edge = edge_detector( - // current_color, - // up, - // down, - // left, - // right, - // ul, - // ur, - // dl, - // dr - // ); - - // Clip 1 - // previous = clamp(previous, nmin, nmax); - - // Clip 2 - // vec3 center = (c_min + c_max) * 0.5; - // float radio = length(nmax - center); - - // vec3 color_vector = previous - center; - // float color_dist = length(color_vector); - - // float factor = 1.0; - // if (color_dist > radio) { - // factor = (radio / color_dist); - // } - // previous = center + (color_vector * factor); - // Clip 3 vec4 previous_cliped = convex_hull( current_color, @@ -219,7 +128,13 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { ); float ponderation = clamp((distance(c_max, c_min) - previous_cliped.a) / previous_cliped.a, 0.0, 1.0); - return mix(current_color, previous_cliped.rgb, 0.99 - (smoothstep(0.0, 1.0, ponderation) * 0.33)); + + #ifdef MOTION_BLUR + float velocity = length(texcoord - texcoord_past) * 10.0; + return mix(current_color, previous_cliped.rgb, clamp(0.99 - velocity - (smoothstep(0.0, 1.0, ponderation) * 0.33), 0.0, 1.0)); + #else + return mix(current_color, previous_cliped.rgb, 0.99 - (smoothstep(0.0, 1.0, ponderation) * 0.33)); + #endif // return mix(current_color, previous_cliped.rgb, 0.01); } } @@ -259,6 +174,12 @@ vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { ); float ponderation = clamp((distance(c_max, c_min) - previous_cliped.a) / previous_cliped.a, 0.0, 1.0); - return mix(current_color, vec4(previous_cliped.rgb, previous.a), 0.99 - (smoothstep(0.0, 1.0, ponderation) * 0.33)); + + #ifdef MOTION_BLUR + float velocity = length(texcoord - texcoord_past) * 10.0; + return mix(current_color, vec4(previous_cliped.rgb, previous.a), clamp(0.99 - velocity - (smoothstep(0.0, 1.0, ponderation) * 0.33), 0.0, 1.0)); + #else + return mix(current_color, vec4(previous_cliped.rgb, previous.a), 0.99 - (smoothstep(0.0, 1.0, ponderation) * 0.33)); + #endif } } diff --git a/shaders/lib/motion_blur.glsl b/shaders/lib/motion_blur.glsl index 5a480a35..995bb726 100644 --- a/shaders/lib/motion_blur.glsl +++ b/shaders/lib/motion_blur.glsl @@ -4,7 +4,7 @@ Motion blur functions. Javier Garduño - GNU Lesser General Public License v3.0 */ -vec3 motion_blur(vec3 color, float the_depth, vec2 blur_velocity, sampler2D image) { +vec3 motion_blur(vec3 color, float the_depth, vec2 blur_velocity, float dither, sampler2D image) { if (the_depth > 0.7) { // No hand vec2 double_pixels = 2.0 * vec2(pixel_size_x, pixel_size_y); vec3 m_blur = vec3(0.0); @@ -12,13 +12,8 @@ vec3 motion_blur(vec3 color, float the_depth, vec2 blur_velocity, sampler2D imag blur_velocity = (MOTION_BLUR_STRENGTH * blur_velocity) / ((1.0 + length(blur_velocity)) * (frameTime * 500.0)) ; - #if AA_TYPE > 0 vec2 coord = - texcoord - blur_velocity * (1.5 + shifted_r_dither(gl_FragCoord.xy)); - #else - vec2 coord = - texcoord - blur_velocity * (1.5 + eclectic_r_dither(gl_FragCoord.xy)); - #endif + texcoord - blur_velocity * (1.5 + dither); float weight = 0.0; float mask; diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 78ca0886..a701a1e3 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -138,7 +138,7 @@ variable.float.light_mix_f = max(light_mix_c, light_mix_d) uniform.float.dayNightMix = max(light_mix_e, light_mix_f) # Frame modulus -uniform.int.frame_mod = fmod(frameCounter, 16) +uniform.int.frameMod = fmod(frameCounter, 16) # TAA OFFSET - The offset for TAA is precalculated here. # It is based on a pentagon (repeated twice as it is a multiple of the 10-frame module.) @@ -149,67 +149,65 @@ uniform.int.frame_mod = fmod(frameCounter, 16) #if AA_TYPE > 0 uniform.vec2.taaOffset = vec2((if( \ - frame_mod == 0, 0.5, \ - frame_mod == 1, -0.5, \ - frame_mod == 2, -0.5, \ - frame_mod == 3, 0.5, \ - frame_mod == 4, 0.5, \ - frame_mod == 5, -0.5, \ - frame_mod == 6, -0.5, \ - frame_mod == 7, 0.5, \ - frame_mod == 8, 0.5, \ - frame_mod == 9, -0.5, \ - frame_mod == 10, -0.5, \ - frame_mod == 11, 0.5, \ - frame_mod == 12, 0.5, \ - frame_mod == 13, -0.5, \ - frame_mod == 14, -0.5, \ - frame_mod == 15, 0.5, \ + frameMod == 0, 0.5, \ + frameMod == 1, -0.5, \ + frameMod == 2, -0.5, \ + frameMod == 3, 0.5, \ + frameMod == 4, 0.5, \ + frameMod == 5, -0.5, \ + frameMod == 6, -0.5, \ + frameMod == 7, 0.5, \ + frameMod == 8, 0.5, \ + frameMod == 9, -0.5, \ + frameMod == 10, -0.5, \ + frameMod == 11, 0.5, \ + frameMod == 12, 0.5, \ + frameMod == 13, -0.5, \ + frameMod == 14, -0.5, \ + frameMod == 15, 0.5, \ 0.0)) * pixel_size_x, \ (if( \ - frame_mod == 0, 0.5, \ - frame_mod == 1, -0.5, \ - frame_mod == 2, 0.5, \ - frame_mod == 3, -0.5, \ - frame_mod == 4, 0.5, \ - frame_mod == 5, -0.5, \ - frame_mod == 6, 0.5, \ - frame_mod == 7, -0.5, \ - frame_mod == 8, 0.5, \ - frame_mod == 9, -0.5, \ - frame_mod == 10, 0.5, \ - frame_mod == 11, -0.5, \ - frame_mod == 12, 0.5, \ - frame_mod == 13, -0.5, \ - frame_mod == 14, 0.5, \ - frame_mod == 15, -0.5, \ + frameMod == 0, 0.5, \ + frameMod == 1, -0.5, \ + frameMod == 2, 0.5, \ + frameMod == 3, -0.5, \ + frameMod == 4, 0.5, \ + frameMod == 5, -0.5, \ + frameMod == 6, 0.5, \ + frameMod == 7, -0.5, \ + frameMod == 8, 0.5, \ + frameMod == 9, -0.5, \ + frameMod == 10, 0.5, \ + frameMod == 11, -0.5, \ + frameMod == 12, 0.5, \ + frameMod == 13, -0.5, \ + frameMod == 14, 0.5, \ + frameMod == 15, -0.5, \ 0.0)) * pixel_size_y) # Dither shift - When Temporal sampling is active, dithering patterns change over time. # This only works in recent versions of Minecraft/Optifine/Iris. # For older versions, a mechanism that depends on the - # uniform "frame_mod" is used to calculate the increment. - - #if MC_VERSION >= 11300 - uniform.float.dither_shift = if( \ - frame_mod == 0, 0.0625, \ - frame_mod == 1, 0.4375, \ - frame_mod == 2, 0.875, \ - frame_mod == 3, 0.625, \ - frame_mod == 4, 0.25, \ - frame_mod == 5, 0.8125, \ - frame_mod == 6, 0.125, \ - frame_mod == 7, 0.9375, \ - frame_mod == 8, 0.3125, \ - frame_mod == 9, 0.5, \ - frame_mod == 10, 0.375, \ - frame_mod == 11, 0.5625, \ - frame_mod == 12, 0.75, \ - frame_mod == 13, 0.6875, \ - frame_mod == 14, 0.1875, \ - frame_mod == 15, 0.0, \ + # uniform "frameMod" is used to calculate the increment. + + uniform.float.ditherShift = if( \ + frameMod == 0, 0.0625, \ + frameMod == 1, 0.4375, \ + frameMod == 2, 0.875, \ + frameMod == 3, 0.625, \ + frameMod == 4, 0.25, \ + frameMod == 5, 0.8125, \ + frameMod == 6, 0.125, \ + frameMod == 7, 0.9375, \ + frameMod == 8, 0.3125, \ + frameMod == 9, 0.5, \ + frameMod == 10, 0.375, \ + frameMod == 11, 0.5625, \ + frameMod == 12, 0.75, \ + frameMod == 13, 0.6875, \ + frameMod == 14, 0.1875, \ + frameMod == 15, 0.0, \ 0.0) - #endif #endif # FOV - A precalculated value related to FOV diff --git a/shaders/src/taa_offset.glsl b/shaders/src/taa_offset.glsl index 9c1752a6..18be6ffb 100644 --- a/shaders/src/taa_offset.glsl +++ b/shaders/src/taa_offset.glsl @@ -1,22 +1,28 @@ #if MC_VERSION >= 11300 uniform vec2 taaOffset; #else - uniform int frame_mod; + uniform int frameMod; uniform float pixel_size_x; uniform float pixel_size_y; - vec2[10] offset_array = vec2[10] ( - vec2(0.7071067811865476, 0.0), - vec2(-0.5720614028176843, 0.4156269377774535), - vec2(0.2185080122244104, -0.6724985119639574), - vec2(0.21850801222441057, 0.6724985119639574), - vec2(-0.5720614028176845, -0.4156269377774534), - vec2(0.7071067811865476, 0.0), - vec2(-0.5720614028176843, 0.4156269377774535), - vec2(0.2185080122244104, -0.6724985119639574), - vec2(0.21850801222441057, 0.6724985119639574), - vec2(-0.5720614028176845, -0.4156269377774534) + vec2[16] offset_array = vec2[16] ( + vec2(0.5, 0.5), + vec2(-0.5, -0.5), + vec2(-0.5, 0.5), + vec2(0.5, -0.5), + vec2(0.5, 0.5), + vec2(-0.5, -0.5), + vec2(-0.5, 0.5), + vec2(0.5, -0.5), + vec2(0.5, 0.5), + vec2(-0.5, -0.5), + vec2(-0.5, 0.5), + vec2(0.5, -0.5), + vec2(0.5, 0.5), + vec2(-0.5, -0.5), + vec2(-0.5, 0.5), + vec2(0.5, -0.5) ); - vec2 taaOffset = offset_array[frame_mod] * vec2(pixel_size_x, pixel_size_y); + vec2 taaOffset = offset_array[frameMod] * vec2(pixel_size_x, pixel_size_y); #endif From 37f51ae1e7ddd7f4520828f6bf9e10b15123c2b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 5 Jan 2026 22:46:11 -0600 Subject: [PATCH 102/147] Refactor VII --- shaders/common/basic_blocks_fragment.glsl | 8 +++--- shaders/common/basic_blocks_vertex.glsl | 12 ++++---- shaders/common/clouds_blocks_fragment.glsl | 4 +-- shaders/common/clouds_blocks_vertex.glsl | 4 +-- shaders/common/composite_fragment.glsl | 2 +- shaders/common/composite_vertex.glsl | 4 +-- shaders/common/deferred_fragment.glsl | 2 +- shaders/common/deferred_vertex.glsl | 2 +- shaders/common/glint_blocks_fragment.glsl | 4 +-- shaders/common/glint_blocks_vertex.glsl | 4 +-- shaders/common/line_blocks_fragment.glsl | 4 +-- shaders/common/line_blocks_vertex.glsl | 4 +-- shaders/common/skytextured_fragment.glsl | 4 +-- shaders/common/skytextured_vertex.glsl | 6 ++-- shaders/common/solid_blocks_fragment.glsl | 6 ++-- shaders/common/solid_blocks_vertex.glsl | 4 +-- shaders/common/solid_dh_blocks_fragment.glsl | 6 ++-- shaders/common/solid_dh_blocks_vertex.glsl | 4 +-- shaders/common/solid_dh_water_fragment.glsl | 20 ++++++------- shaders/common/solid_dh_water_vertex.glsl | 4 +-- shaders/common/water_blocks_fragment.glsl | 20 ++++++------- shaders/common/water_blocks_vertex.glsl | 4 +-- shaders/lib/aberration.glsl | 10 +++---- shaders/lib/basic_utils.glsl | 30 ++++++++++---------- shaders/lib/color_utils.glsl | 6 ++-- shaders/lib/color_utils_end.glsl | 6 ++-- shaders/lib/color_utils_nether.glsl | 6 ++-- shaders/lib/day_blend.glsl | 16 +++++------ shaders/lib/volumetric_clouds_vertex.glsl | 8 +++--- shaders/lib/water.glsl | 18 ++++++------ shaders/lib/water_dh.glsl | 6 ++-- shaders/shaders.properties | 14 ++++----- shaders/src/fog_vertex.glsl | 4 +-- shaders/src/fog_vertex_dh.glsl | 2 +- shaders/src/hi_sky.glsl | 2 +- shaders/src/light_vertex.glsl | 24 ++++++++-------- shaders/src/light_vertex_dh.glsl | 16 +++++------ shaders/src/low_sky.glsl | 2 +- shaders/src/position_vertex_dh.glsl | 2 +- 39 files changed, 152 insertions(+), 152 deletions(-) diff --git a/shaders/common/basic_blocks_fragment.glsl b/shaders/common/basic_blocks_fragment.glsl index d0a280b7..932c1322 100644 --- a/shaders/common/basic_blocks_fragment.glsl +++ b/shaders/common/basic_blocks_fragment.glsl @@ -1,15 +1,15 @@ #include "/lib/config.glsl" /* Uniforms, ins, outs */ -varying vec4 tint_color; +varying vec4 tintColor; varying vec2 texcoord; -varying vec3 basic_light; +varying vec3 basicLight; // MAIN FUNCTION ------------------ void main() { - vec4 blockColor = tint_color; - blockColor.rgb *= basic_light; + vec4 blockColor = tintColor; + blockColor.rgb *= basicLight; #include "/src/writebuffers.glsl" } diff --git a/shaders/common/basic_blocks_vertex.glsl b/shaders/common/basic_blocks_vertex.glsl index 6a3fcbbe..3b272e64 100644 --- a/shaders/common/basic_blocks_vertex.glsl +++ b/shaders/common/basic_blocks_vertex.glsl @@ -21,9 +21,9 @@ uniform mat4 gbufferProjectionInverse; /* Ins / Outs */ -varying vec4 tint_color; +varying vec4 tintColor; varying vec2 texcoord; -varying vec3 basic_light; +varying vec3 basicLight; /* Utility functions */ @@ -39,10 +39,10 @@ varying vec3 basic_light; void main() { #include "/src/basiccoords_vertex.glsl" #include "/src/position_vertex.glsl" - tint_color = gl_Color; + tintColor = gl_Color; - basic_light = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); - basic_light = mix(basic_light, ZENITH_SKY_RAIN_COLOR * luma(basic_light), rainStrength); + basicLight = dayBlend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); + basicLight = mix(basicLight, ZENITH_SKY_RAIN_COLOR * luma(basicLight), rainStrength); vec2 illumination = clamp(abs(lmcoord), 0.0, 1.0); // Fix lines without correct illumination data illumination.y = (max(illumination.y, 0.065) - 0.065) * 1.06951871657754; @@ -50,5 +50,5 @@ void main() { vec3 candle_color = CANDLE_BASELIGHT * ((illumination.x * illumination.x) + pow(illumination.x * 1.165, 6.0)); - basic_light += candle_color; + basicLight += candle_color; } diff --git a/shaders/common/clouds_blocks_fragment.glsl b/shaders/common/clouds_blocks_fragment.glsl index 9a8effde..485d7be2 100644 --- a/shaders/common/clouds_blocks_fragment.glsl +++ b/shaders/common/clouds_blocks_fragment.glsl @@ -21,14 +21,14 @@ uniform float blindness; #if V_CLOUDS == 0 || defined UNKNOWN_DIM varying vec2 texcoord; - varying vec4 tint_color; + varying vec4 tintColor; #endif // Main function --------- void main() { #if V_CLOUDS == 0 || defined UNKNOWN_DIM - vec4 blockColor = texture2D(tex, texcoord) * tint_color; + vec4 blockColor = texture2D(tex, texcoord) * tintColor; #include "/src/cloudfinalcolor.glsl" #include "/src/writebuffers.glsl" #elif MC_VERSION <= 11300 diff --git a/shaders/common/clouds_blocks_vertex.glsl b/shaders/common/clouds_blocks_vertex.glsl index b6063d27..60ae18f9 100644 --- a/shaders/common/clouds_blocks_vertex.glsl +++ b/shaders/common/clouds_blocks_vertex.glsl @@ -16,7 +16,7 @@ uniform mat4 gbufferProjectionInverse; #if V_CLOUDS == 0 || defined UNKNOWN_DIM varying vec2 texcoord; - varying vec4 tint_color; + varying vec4 tintColor; #endif /* Utility functions */ @@ -34,7 +34,7 @@ uniform mat4 gbufferProjectionInverse; void main() { #if V_CLOUDS == 0 || defined UNKNOWN_DIM texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; - tint_color = gl_Color; + tintColor = gl_Color; #endif #include "/src/position_vertex.glsl" } diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index d226b11a..f3c1a3ea 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -199,7 +199,7 @@ void main() { #if defined THE_END volumetricIntensity = - ((square_pow(clamp((volumetricIntensity + .666667) * 0.6, 0.0, 1.0)) * 0.5)); + ((squarePow(clamp((volumetricIntensity + .666667) * 0.6, 0.0, 1.0)) * 0.5)); blockColor.rgb += (volumetricLightColor * volumetricLight * volumetricIntensity * 2.0); #else volumetricIntensity = diff --git a/shaders/common/composite_vertex.glsl b/shaders/common/composite_vertex.glsl index 48da9992..e6526327 100644 --- a/shaders/common/composite_vertex.glsl +++ b/shaders/common/composite_vertex.glsl @@ -67,7 +67,7 @@ void main() { vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - directLightColor = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); + directLightColor = dayBlend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); directLightColor = mix(directLightColor, ZENITH_SKY_RAIN_COLOR * luma(directLightColor), rainStrength); // Exposure @@ -94,7 +94,7 @@ void main() { vol_attenuation = 0.1 + (eye_bright_smooth.y * 0.002); } - volumetricLightColor = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR) * 1.2 * vol_attenuation; + volumetricLightColor = dayBlend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR) * 1.2 * vol_attenuation; #endif #if VOL_LIGHT == 1 && !defined NETHER diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index eb77f92c..f7173053 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -183,7 +183,7 @@ void main() { #if defined THE_END || defined NETHER #define NIGHT_CORRECTION 1.0 #else - #define NIGHT_CORRECTION day_blend_float(1.0, 1.0, 0.1) + #define NIGHT_CORRECTION dayBlendFloat(1.0, 1.0, 0.1) #endif // Underwater sky diff --git a/shaders/common/deferred_vertex.glsl b/shaders/common/deferred_vertex.glsl index 59515d37..a29eed42 100644 --- a/shaders/common/deferred_vertex.glsl +++ b/shaders/common/deferred_vertex.glsl @@ -49,7 +49,7 @@ void main() { #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) fog_density_coeff = FOG_DENSITY * FOG_ADJUST; #else - fog_density_coeff = day_blend_float(FOG_SUNSET, FOG_DAY, FOG_NIGHT) * FOG_ADJUST; + fog_density_coeff = dayBlendFloat(FOG_SUNSET, FOG_DAY, FOG_NIGHT) * FOG_ADJUST; #endif #endif diff --git a/shaders/common/glint_blocks_fragment.glsl b/shaders/common/glint_blocks_fragment.glsl index 7d0cad64..dcf6555b 100644 --- a/shaders/common/glint_blocks_fragment.glsl +++ b/shaders/common/glint_blocks_fragment.glsl @@ -7,14 +7,14 @@ uniform sampler2D tex; /* Ins / Outs */ varying vec2 texcoord; -varying vec4 tint_color; +varying vec4 tintColor; varying float exposure; // MAIN FUNCTION ------------------ void main() { // Toma el color puro del bloque - vec4 blockColor = texture2D(tex, texcoord) * tint_color / max(0.001, exposure); + vec4 blockColor = texture2D(tex, texcoord) * tintColor / max(0.001, exposure); #include "/src/writebuffers.glsl" } \ No newline at end of file diff --git a/shaders/common/glint_blocks_vertex.glsl b/shaders/common/glint_blocks_vertex.glsl index ab4014d6..80606ebf 100644 --- a/shaders/common/glint_blocks_vertex.glsl +++ b/shaders/common/glint_blocks_vertex.glsl @@ -9,7 +9,7 @@ uniform mat4 gbufferProjectionInverse; /* Ins / Outs */ varying vec2 texcoord; -varying vec4 tint_color; +varying vec4 tintColor; varying float exposure; #if AA_TYPE > 0 @@ -24,5 +24,5 @@ void main() { exposure = texture2D(gaux3, vec2(0.5)).r; - tint_color = gl_Color; + tintColor = gl_Color; } diff --git a/shaders/common/line_blocks_fragment.glsl b/shaders/common/line_blocks_fragment.glsl index 09b0ab71..8f7378eb 100644 --- a/shaders/common/line_blocks_fragment.glsl +++ b/shaders/common/line_blocks_fragment.glsl @@ -4,10 +4,10 @@ /* Ins / Outs */ -varying vec4 tint_color; +varying vec4 tintColor; void main() { - vec4 blockColor = tint_color; + vec4 blockColor = tintColor; #include "/src/writebuffers.glsl" } diff --git a/shaders/common/line_blocks_vertex.glsl b/shaders/common/line_blocks_vertex.glsl index ad7a7d0b..ca2a33a8 100644 --- a/shaders/common/line_blocks_vertex.glsl +++ b/shaders/common/line_blocks_vertex.glsl @@ -7,7 +7,7 @@ uniform float viewWidth; /* Ins / Outs */ -varying vec4 tint_color; +varying vec4 tintColor; /* Utility functions */ @@ -20,7 +20,7 @@ varying vec4 tint_color; // MAIN FUNCTION ------------------ void main() { - tint_color = gl_Color; + tintColor = gl_Color; gl_Position = mu_ftransform(); #if AA_TYPE > 1 diff --git a/shaders/common/skytextured_fragment.glsl b/shaders/common/skytextured_fragment.glsl index c141f148..4921b657 100644 --- a/shaders/common/skytextured_fragment.glsl +++ b/shaders/common/skytextured_fragment.glsl @@ -21,7 +21,7 @@ uniform sampler2D tex; /* Ins / Outs */ varying vec2 texcoord; -varying vec4 tint_color; +varying vec4 tintColor; varying float sky_luma_correction; // Flat // MAIN FUNCTION ------------------ @@ -36,7 +36,7 @@ void main() { vec4 blockColor = vec4(background_color, 1.0); #else // Toma el color puro del bloque - vec4 blockColor = texture2D(tex, texcoord) * tint_color; + vec4 blockColor = texture2D(tex, texcoord) * tintColor; blockColor.rgb *= sky_luma_correction; #endif diff --git a/shaders/common/skytextured_vertex.glsl b/shaders/common/skytextured_vertex.glsl index 052f4e50..d234dd3c 100644 --- a/shaders/common/skytextured_vertex.glsl +++ b/shaders/common/skytextured_vertex.glsl @@ -13,7 +13,7 @@ /* Ins / Outs */ varying vec2 texcoord; -varying vec4 tint_color; +varying vec4 tintColor; varying float sky_luma_correction; #if AA_TYPE > 0 @@ -28,9 +28,9 @@ varying float sky_luma_correction; void main() { texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; - tint_color = gl_Color; + tintColor = gl_Color; - sky_luma_correction = luma(day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR)); + sky_luma_correction = luma(dayBlend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR)); #if defined UNKNOWN_DIM sky_luma_correction = 1.0; diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index adf17d93..5af0bbe0 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -75,7 +75,7 @@ uniform float blindness; /* Ins / Outs */ varying vec2 texcoord; -varying vec4 tint_color; +varying vec4 tintColor; varying float frog_adjust; varying vec3 directLightColor; varying vec3 candle_color; @@ -157,9 +157,9 @@ void main() { if(blockColor.a < 0.1 && entityId != 10101) { // Black entities bug workaround discard; } - blockColor *= tint_color; + blockColor *= tintColor; #else - vec4 blockColor = texture2D(tex, texcoord) * tint_color; + vec4 blockColor = texture2D(tex, texcoord) * tintColor; #endif float block_luma = luma(blockColor.rgb); diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index 8e7d038e..d203a8a0 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -66,7 +66,7 @@ uniform mat4 gbufferProjectionInverse; /* Ins / Outs */ varying vec2 texcoord; -varying vec4 tint_color; +varying vec4 tintColor; varying float frog_adjust; varying vec3 directLightColor; varying vec3 candle_color; @@ -133,7 +133,7 @@ varying vec3 omni_light; void main() { vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); vec3 hi_sky_color; - float visible_sky; + float visibleSky; #include "/src/basiccoords_vertex.glsl" #include "/src/position_vertex.glsl" diff --git a/shaders/common/solid_dh_blocks_fragment.glsl b/shaders/common/solid_dh_blocks_fragment.glsl index 10b96f8f..036dc04e 100644 --- a/shaders/common/solid_dh_blocks_fragment.glsl +++ b/shaders/common/solid_dh_blocks_fragment.glsl @@ -21,7 +21,7 @@ uniform int dhRenderDistance; /* Ins / Outs */ varying vec2 texcoord; -varying vec4 tint_color; +varying vec4 tintColor; varying vec3 directLightColor; varying vec3 candle_color; varying float direct_light_strength; @@ -52,7 +52,7 @@ void main() { return; } - vec4 blockColor = tint_color; + vec4 blockColor = tintColor; // Synthetic pseudo-texture vec3 synth_pos = (position.xyz + cameraPosition) * 6.0; @@ -61,7 +61,7 @@ void main() { blockColor.rgb += vec3(synth_noise); blockColor.rgb = clamp(blockColor.rgb, vec3(0.0), vec3(1.0)); - float block_luma = luma(tint_color.rgb); + float block_luma = luma(tintColor.rgb); vec3 final_candle_color = candle_color; diff --git a/shaders/common/solid_dh_blocks_vertex.glsl b/shaders/common/solid_dh_blocks_vertex.glsl index f7b47a4f..6a1c99a3 100644 --- a/shaders/common/solid_dh_blocks_vertex.glsl +++ b/shaders/common/solid_dh_blocks_vertex.glsl @@ -38,7 +38,7 @@ uniform mat4 gbufferProjectionInverse; /* Ins / Outs */ varying vec2 texcoord; -varying vec4 tint_color; +varying vec4 tintColor; varying vec3 directLightColor; varying vec3 candle_color; varying float direct_light_strength; @@ -59,7 +59,7 @@ varying float frog_adjust; void main() { vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - float visible_sky; + float visibleSky; vec3 hi_sky_color; #include "/src/basiccoords_vertex_dh.glsl" diff --git a/shaders/common/solid_dh_water_fragment.glsl b/shaders/common/solid_dh_water_fragment.glsl index 996a4779..b3c4e616 100644 --- a/shaders/common/solid_dh_water_fragment.glsl +++ b/shaders/common/solid_dh_water_fragment.glsl @@ -66,7 +66,7 @@ uniform float blindness; /* Ins / Outs */ varying vec2 texcoord; -varying vec4 tint_color; +varying vec4 tintColor; varying vec3 directLightColor; varying vec3 candle_color; varying float direct_light_strength; @@ -79,7 +79,7 @@ varying vec3 waterNormal; varying vec3 hi_sky_color; varying vec3 low_sky_color; varying vec3 up_vec; -varying float visible_sky; +varying float visibleSky; varying vec2 lmcoord; varying float block_type; varying float frog_adjust; @@ -131,7 +131,7 @@ void main() { } float normal_dot_eye = dot(surface_normal, normalize(fragposition)); - float fresnel = square_pow(1.0 + normal_dot_eye); + float fresnel = squarePow(1.0 + normal_dot_eye); vec3 reflect_water_vec = reflect(fragposition, surface_normal); vec3 norm_reflect_water_vec = normalize(reflect_water_vec); @@ -164,7 +164,7 @@ void main() { noise *= noise; noise *= noise; float synth_noise = (noise * 0.227) + 0.773; - vec4 blockColor = vec4(vec3(synth_noise), tint_color.a); + vec4 blockColor = vec4(vec3(synth_noise), tintColor.a); #else vec4 blockColor; #endif @@ -181,9 +181,9 @@ void main() { real_light *= (fresnel_tex * 2.0) - 0.25; - blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tint_color.rgb; + blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tintColor.rgb; - blockColor.rgb = water_shader_dh(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, directLightColor); + blockColor.rgb = water_shader_dh(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visibleSky, dither, directLightColor); blockColor.a = sqrt(blockColor.a); #else @@ -194,13 +194,13 @@ void main() { #endif real_light = omni_light + - (direct_light_strength * visible_sky * directLightColor) * (1.0 - rainStrength * 0.75) + + (direct_light_strength * visibleSky * directLightColor) * (1.0 - rainStrength * 0.75) + candle_color; #if WATER_COLOR_SOURCE == 0 blockColor.rgb = water_texture * real_light * WATER_COLOR; #elif WATER_COLOR_SOURCE == 1 - blockColor.rgb = 0.3 * water_texture * real_light * tint_color.rgb; + blockColor.rgb = 0.3 * water_texture * real_light * tintColor.rgb; #endif blockColor = vec4(refraction(fragposition, blockColor.rgb, water_normal_base), 1.0); @@ -209,13 +209,13 @@ void main() { fresnel = clamp(fresnel * (water_texture * water_texture + 0.5), 0.0, 1.0); #endif - blockColor.rgb = water_shader_dh(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, directLightColor); + blockColor.rgb = water_shader_dh(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visibleSky, dither, directLightColor); #endif } else { // Otros translúcidos - blockColor = tint_color; + blockColor = tintColor; float shadow_c = abs((dayNightMix * 2.0) - 1.0); diff --git a/shaders/common/solid_dh_water_vertex.glsl b/shaders/common/solid_dh_water_vertex.glsl index ecae5e6f..2559e421 100644 --- a/shaders/common/solid_dh_water_vertex.glsl +++ b/shaders/common/solid_dh_water_vertex.glsl @@ -38,7 +38,7 @@ uniform mat4 gbufferProjectionInverse; /* Ins / Outs */ varying vec2 texcoord; -varying vec4 tint_color; +varying vec4 tintColor; varying vec3 directLightColor; varying vec3 candle_color; varying float direct_light_strength; @@ -51,7 +51,7 @@ varying vec3 waterNormal; varying vec3 hi_sky_color; varying vec3 low_sky_color; varying vec3 up_vec; -varying float visible_sky; +varying float visibleSky; varying vec2 lmcoord; varying float block_type; varying float frog_adjust; diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index faf9febb..4c3cebb6 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -86,7 +86,7 @@ uniform float blindness; varying vec2 texcoord; varying vec2 lmcoord; -varying vec4 tint_color; +varying vec4 tintColor; varying float frog_adjust; varying vec3 waterNormal; varying float block_type; @@ -98,7 +98,7 @@ varying vec3 directLightColor; varying vec3 candle_color; varying float direct_light_strength; varying vec3 omni_light; -varying float visible_sky; +varying float visibleSky; varying vec3 up_vec; varying vec3 hi_sky_color; varying vec3 low_sky_color; @@ -173,7 +173,7 @@ void main() { } float normal_dot_eye = dot(surface_normal, normalize(fragposition)); - float fresnel = square_pow(1.0 + normal_dot_eye); + float fresnel = squarePow(1.0 + normal_dot_eye); vec3 reflect_water_vec = reflect(fragposition, surface_normal); vec3 norm_reflect_water_vec = normalize(reflect_water_vec); @@ -226,9 +226,9 @@ void main() { real_light *= (fresnel_tex * 2.0) - 0.25; - blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tint_color.rgb; + blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tintColor.rgb; - blockColor.rgb = water_shader(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, directLightColor); + blockColor.rgb = water_shader(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visibleSky, dither, directLightColor); blockColor.a = sqrt(blockColor.a); #else @@ -240,13 +240,13 @@ void main() { #endif real_light = omni_light + - (direct_light_strength * visible_sky * directLightColor) * (1.0 - rainStrength * 0.75) + + (direct_light_strength * visibleSky * directLightColor) * (1.0 - rainStrength * 0.75) + candle_color; #if WATER_COLOR_SOURCE == 0 blockColor.rgb = water_texture * real_light * WATER_COLOR; #elif WATER_COLOR_SOURCE == 1 - blockColor.rgb = 0.3 * water_texture * real_light * tint_color.rgb; + blockColor.rgb = 0.3 * water_texture * real_light * tintColor.rgb; #endif blockColor = vec4(refraction(fragposition, blockColor.rgb, water_normal_base), 1.0); @@ -258,14 +258,14 @@ void main() { fresnel = clamp(fresnel * (water_texture), 0.0, 1.0); #endif - blockColor.rgb = water_shader(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visible_sky, dither, directLightColor); + blockColor.rgb = water_shader(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visibleSky, dither, directLightColor); #endif } else { // Otros translúcidos blockColor = texture2D(tex, texcoord); - blockColor *= tint_color; + blockColor *= tintColor; #if defined SHADOW_CASTING && !defined NETHER #if defined COLORED_SHADOW @@ -286,7 +286,7 @@ void main() { blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * .125); if(block_type > 1.5) { // Glass - blockColor = cristal_shader(fragposition, waterNormal, blockColor, sky_color_reflect, fresnel * fresnel, visible_sky, dither, directLightColor); + blockColor = cristal_shader(fragposition, waterNormal, blockColor, sky_color_reflect, fresnel * fresnel, visibleSky, dither, directLightColor); } } diff --git a/shaders/common/water_blocks_vertex.glsl b/shaders/common/water_blocks_vertex.glsl index 8dd91178..8f8d3dee 100644 --- a/shaders/common/water_blocks_vertex.glsl +++ b/shaders/common/water_blocks_vertex.glsl @@ -51,7 +51,7 @@ uniform mat4 gbufferProjectionInverse; varying vec2 texcoord; varying vec2 lmcoord; -varying vec4 tint_color; +varying vec4 tintColor; varying float frog_adjust; varying vec3 waterNormal; varying float block_type; @@ -63,7 +63,7 @@ varying vec3 directLightColor; varying vec3 candle_color; varying float direct_light_strength; varying vec3 omni_light; -varying float visible_sky; +varying float visibleSky; varying vec3 up_vec; varying vec3 hi_sky_color; varying vec3 low_sky_color; diff --git a/shaders/lib/aberration.glsl b/shaders/lib/aberration.glsl index c4bfb961..956fa830 100644 --- a/shaders/lib/aberration.glsl +++ b/shaders/lib/aberration.glsl @@ -7,11 +7,11 @@ vec3 color_aberration() { offset *= vec2(0.125) * CHROMA_ABER_STRENGTH; - vec3 aberrated_color = vec3(0.0); + vec3 aberratedColor = vec3(0.0); - aberrated_color.r = texture2DLod(colortex1, texcoord - offset, 0.0).r; - aberrated_color.g = texture2DLod(colortex1, texcoord - (offset * 0.5), 0.0).g; - aberrated_color.b = texture2DLod(colortex1, texcoord, 0.0).b; + aberratedColor.r = texture2DLod(colortex1, texcoord - offset, 0.0).r; + aberratedColor.g = texture2DLod(colortex1, texcoord - (offset * 0.5), 0.0).g; + aberratedColor.b = texture2DLod(colortex1, texcoord, 0.0).b; - return aberrated_color; + return aberratedColor; } diff --git a/shaders/lib/basic_utils.glsl b/shaders/lib/basic_utils.glsl index 9a990bfc..881ad866 100644 --- a/shaders/lib/basic_utils.glsl +++ b/shaders/lib/basic_utils.glsl @@ -4,70 +4,70 @@ Misc utilities. Javier Garduño - GNU Lesser General Public License v3.0 */ -float square_pow(float x) { +float squarePow(float x) { return x * x; } -float cube_pow(float x) { +float cubePow(float x) { return x * x * x; } -float fourth_pow(float x) { +float fourthPow(float x) { float temp_2 = x * x; return temp_2 * temp_2; } -float fifth_pow(float x) { +float fifthPow(float x) { float temp_2 = x * x; return temp_2 * temp_2 * x; } -float sixth_pow(float x) { +float sixthPow(float x) { float temp_2 = x * x; return temp_2 * temp_2 * temp_2; } -vec3 vec3_square_pow(vec3 x) { +vec3 SquarePowVec3(vec3 x) { return x * x; } -vec3 vec3_cube_pow(vec3 x) { +vec3 cubePowVec3(vec3 x) { return x * x * x; } -vec3 vec3_fourth_pow(vec3 x) { +vec3 fourthPowVec3(vec3 x) { vec3 temp_2 = x * x; return temp_2 * temp_2; } -vec3 vec3_fifth_pow(vec3 x) { +vec3 fifthPowVec3(vec3 x) { vec3 temp_2 = x * x; return temp_2 * temp_2 * x; } -vec3 vec3_sixth_pow(vec3 x) { +vec3 sixthPowVec3(vec3 x) { vec3 temp_2 = x * x; return temp_2 * temp_2 * temp_2; } -vec4 vec4_square_pow(vec4 x) { +vec4 squarePowVec4(vec4 x) { return x * x; } -vec4 vec4_cube_pow(vec4 x) { +vec4 cubePowVec4(vec4 x) { return x * x * x; } -vec4 vec4_fourth_pow(vec4 x) { +vec4 fourthPowVec4(vec4 x) { return x * x * x * x; } -vec4 vec3_fifth_pow(vec4 x) { +vec4 fifthPowVec4(vec4 x) { vec4 temp_2 = x * x; return temp_2 * temp_2 * x; } -vec4 vec3_sixth_pow(vec4 x) { +vec4 sixthPowVec4(vec4 x) { vec4 temp_2 = x * x; return temp_2 * temp_2 * temp_2; } diff --git a/shaders/lib/color_utils.glsl b/shaders/lib/color_utils.glsl index 827b1fc2..e6ba77ed 100644 --- a/shaders/lib/color_utils.glsl +++ b/shaders/lib/color_utils.glsl @@ -4,9 +4,9 @@ Usefull data for color manipulation. Javier Garduño - GNU Lesser General Public License v3.0 */ -uniform float day_moment; -uniform float day_mixer; -uniform float night_mixer; +uniform float dayMoment; +uniform float dayMixer; +uniform float nightMixer; uniform int moonPhase; #ifdef UNKNOWN_DIM diff --git a/shaders/lib/color_utils_end.glsl b/shaders/lib/color_utils_end.glsl index 3f389b88..2d4310c0 100644 --- a/shaders/lib/color_utils_end.glsl +++ b/shaders/lib/color_utils_end.glsl @@ -4,9 +4,9 @@ Usefull data for color manipulation. Javier Garduño - GNU Lesser General Public License v3.0 */ -uniform float day_moment; -uniform float day_mixer; -uniform float night_mixer; +uniform float dayMoment; +uniform float dayMixer; +uniform float nightMixer; #define OMNI_TINT 0.5 #define LIGHT_SUNSET_COLOR vec3(0.1023825, 0.082467, 0.1023825) diff --git a/shaders/lib/color_utils_nether.glsl b/shaders/lib/color_utils_nether.glsl index eff5e451..992fec60 100644 --- a/shaders/lib/color_utils_nether.glsl +++ b/shaders/lib/color_utils_nether.glsl @@ -4,9 +4,9 @@ Usefull data for color manipulation. Javier Garduño - GNU Lesser General Public License v3.0 */ -uniform float day_moment; -uniform float day_mixer; -uniform float night_mixer; +uniform float dayMoment; +uniform float dayMixer; +uniform float nightMixer; #define OMNI_TINT 0.5 #define LIGHT_SUNSET_COLOR vec3(0.06885294, 0.06297058, 0.04879411) diff --git a/shaders/lib/day_blend.glsl b/shaders/lib/day_blend.glsl index d41e4d20..bca33a20 100644 --- a/shaders/lib/day_blend.glsl +++ b/shaders/lib/day_blend.glsl @@ -1,19 +1,19 @@ -vec3 day_blend(vec3 sunset, vec3 day, vec3 night) { +vec3 dayBlend(vec3 sunset, vec3 day, vec3 night) { // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) - vec3 day_color = mix(sunset, day, day_mixer); - vec3 night_color = mix(sunset, night, night_mixer); + vec3 dayColor = mix(sunset, day, dayMixer); + vec3 nightColor = mix(sunset, night, nightMixer); - return mix(day_color, night_color, step(0.5, day_moment)); + return mix(dayColor, nightColor, step(0.5, dayMoment)); } -float day_blend_float(float sunset, float day, float night) { +float dayBlendFloat(float sunset, float day, float night) { // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) - float day_value = mix(sunset, day, day_mixer); - float night_value = mix(sunset, night, night_mixer); + float dayValue = mix(sunset, day, dayMixer); + float nightValue = mix(sunset, night, nightMixer); - return mix(day_value, night_value, step(0.5, day_moment)); + return mix(dayValue, nightValue, step(0.5, dayMoment)); } \ No newline at end of file diff --git a/shaders/lib/volumetric_clouds_vertex.glsl b/shaders/lib/volumetric_clouds_vertex.glsl index 6669bbdc..2a43ebc9 100644 --- a/shaders/lib/volumetric_clouds_vertex.glsl +++ b/shaders/lib/volumetric_clouds_vertex.glsl @@ -4,7 +4,7 @@ umbral = (smoothstep(1.0, 0.0, rainStrength) * .3) + .55; #endif -dark_cloud_color = day_blend( +dark_cloud_color = dayBlend( ZENITH_SUNSET_COLOR, ZENITH_DAY_COLOR, ZENITH_NIGHT_COLOR @@ -17,7 +17,7 @@ dark_cloud_color = mix( ); vec3 cloud_color_aux = mix( - day_blend( + dayBlend( LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR * vec3(0.5, 0.6, 0.75) @@ -28,7 +28,7 @@ vec3 cloud_color_aux = mix( cloud_color = mix( clamp(mix(vec3(luma(cloud_color_aux)), cloud_color_aux, 0.5) * vec3(1.5), 0.0, 1.4), - day_blend( + dayBlend( HORIZON_SUNSET_COLOR, HORIZON_DAY_COLOR, HORIZON_NIGHT_COLOR @@ -42,7 +42,7 @@ dark_cloud_color = mix(dark_cloud_color, cloud_color, 0.22); dark_cloud_color = mix( dark_cloud_color, - day_blend( + dayBlend( cloud_color_aux, dark_cloud_color, dark_cloud_color diff --git a/shaders/lib/water.glsl b/shaders/lib/water.glsl index 28c39ad5..aa77f53c 100644 --- a/shaders/lib/water.glsl +++ b/shaders/lib/water.glsl @@ -120,7 +120,7 @@ vec3 normal_waves(vec3 pos) { wave_3 *= 0.66; vec2 partialWave = wave_1 + wave_2 + wave_3; - vec3 finalWave = vec3(partialWave, WATER_TURBULENCE - (rainStrength * 0.6 * WATER_TURBULENCE * visible_sky)); + vec3 finalWave = vec3(partialWave, WATER_TURBULENCE - (rainStrength * 0.6 * WATER_TURBULENCE * visibleSky)); return normalize(finalWave); } @@ -203,7 +203,7 @@ vec3 water_shader( vec3 sky_reflect, vec3 reflected, float fresnel, - float visible_sky, + float visibleSky, float dither, vec3 lightColor ) { @@ -216,7 +216,7 @@ vec3 water_shader( #endif reflection.rgb = mix( - sky_reflect * visible_sky, + sky_reflect * visibleSky, reflection.rgb, reflection.a ); @@ -229,7 +229,7 @@ vec3 water_shader( #ifndef NETHER #ifndef THE_END return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + - vec3(sun_reflection(reflect(normalize(fragpos), normal))) * lightColor * infinite * visible_sky; + vec3(sun_reflection(reflect(normalize(fragpos), normal))) * lightColor * infinite * visibleSky; #else return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); #endif @@ -264,8 +264,8 @@ vec4 cristal_reflection_calc(vec3 fragpos, vec3 normal, inout float infinite, fl } #endif - float border_x = max(-fourth_pow(abs(2.0 * pos.x - 1.0)) + 1.0, 0.0); - float border_y = max(-fourth_pow(abs(2.0 * pos.y - 1.0)) + 1.0, 0.0); + float border_x = max(-fourthPow(abs(2.0 * pos.x - 1.0)) + 1.0, 0.0); + float border_y = max(-fourthPow(abs(2.0 * pos.y - 1.0)) + 1.0, 0.0); float border = min(border_x, border_y); return vec4(texture2D(gaux1, pos.xy, 0.0).rgb, border); @@ -277,7 +277,7 @@ vec4 cristal_shader( vec4 color, vec3 skyReflectionColor, float fresnel, - float visible_sky, + float visibleSky, float dither, vec3 lightColor ) { @@ -288,7 +288,7 @@ vec4 cristal_shader( reflection = cristal_reflection_calc(fragpos, normal, infinite, dither); #endif - skyReflectionColor = mix(color.rgb, skyReflectionColor, visible_sky * visible_sky); + skyReflectionColor = mix(color.rgb, skyReflectionColor, visibleSky * visibleSky); reflection.rgb = mix( skyReflectionColor, @@ -306,7 +306,7 @@ vec4 cristal_shader( #ifndef THE_END return color + vec4( mix( - vec3(sun_reflection(reflect(normalize(fragpos), normal)) * lightColor * infinite * visible_sky), + vec3(sun_reflection(reflect(normalize(fragpos), normal)) * lightColor * infinite * visibleSky), vec3(0.0), reflection.a ), diff --git a/shaders/lib/water_dh.glsl b/shaders/lib/water_dh.glsl index ee79dadc..a03989b2 100644 --- a/shaders/lib/water_dh.glsl +++ b/shaders/lib/water_dh.glsl @@ -96,7 +96,7 @@ vec3 water_shader_dh( vec3 sky_reflect, vec3 reflected, float fresnel, - float visible_sky, + float visibleSky, float dither, vec3 lightColor ) { @@ -109,7 +109,7 @@ vec3 water_shader_dh( #endif reflection.rgb = mix( - sky_reflect * visible_sky, + sky_reflect * visibleSky, reflection.rgb, reflection.a ); @@ -122,7 +122,7 @@ vec3 water_shader_dh( #ifndef NETHER #ifndef THE_END return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + - vec3(sun_reflection(reflect(normalize(fragpos), normal))) * lightColor * infinite * visible_sky; + vec3(sun_reflection(reflect(normalize(fragpos), normal))) * lightColor * infinite * visibleSky; #else return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); #endif diff --git a/shaders/shaders.properties b/shaders/shaders.properties index a701a1e3..5a3eba72 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -97,7 +97,7 @@ uniform.float.aspectRatioInverse = 1.0 / aspectRatio # Time constants variable.float.hour_world = worldTime * 0.001 -uniform.float.day_moment = hour_world * 0.04166666666666667 +uniform.float.dayMoment = hour_world * 0.04166666666666667 # Day color mixer (for shadows) - This formula allows graphing the function that is calculated later. # It allows setting values depending on the time of day. Particularly interesting are the transitions @@ -106,22 +106,22 @@ uniform.float.day_moment = hour_world * 0.04166666666666667 # f(x) = min(−((x−.25)^2)∙20 + 1.25, 1) # g(x) = min(−((x−.75)^2)∙50 + 3.125, 1) -variable.float.moment_aux = day_moment - 0.25 +variable.float.moment_aux = dayMoment - 0.25 variable.float.moment_aux_2 = moment_aux * moment_aux -uniform.float.day_mixer = clamp(-moment_aux_2 * 20.0 + 1.25, 0.0, 1.0) +uniform.float.dayMixer = clamp(-moment_aux_2 * 20.0 + 1.25, 0.0, 1.0) -variable.float.moment_aux_3 = day_moment - 0.75 +variable.float.moment_aux_3 = dayMoment - 0.75 variable.float.moment_aux_4 = moment_aux_3 * moment_aux_3 -uniform.float.night_mixer = clamp(-moment_aux_4 * 50.0 + 3.125, 0.0, 1.0) +uniform.float.nightMixer = clamp(-moment_aux_4 * 50.0 + 3.125, 0.0, 1.0) # Day color mixer (for volumetric light) - "Similar to the previous case, but applied to values # dependent on the time of day for volumetric lighting. -variable.float.moment_aux_5 = (day_moment * 4.0) - 1.0 +variable.float.moment_aux_5 = (dayMoment * 4.0) - 1.0 variable.float.moment_aux_6 = moment_aux_5 * moment_aux_5 * moment_aux_5 * moment_aux_5 variable.float.day_vol_mixer = clamp(((-moment_aux_6 + 1.0) * 7.0) + 1.0, 1.0, 8.0) -variable.float.moment_aux_7 = (day_moment * 4.0) - 3.0 +variable.float.moment_aux_7 = (dayMoment * 4.0) - 3.0 variable.float.moment_aux_8 = moment_aux_7 * moment_aux_7 * moment_aux_7 * moment_aux_7 variable.float.night_vol_mixer = clamp(((-moment_aux_8 + 1.0) * 7.0) + 1.0, 1.0, 8.0) diff --git a/shaders/src/fog_vertex.glsl b/shaders/src/fog_vertex.glsl index 70ad4f36..ee427071 100644 --- a/shaders/src/fog_vertex.glsl +++ b/shaders/src/fog_vertex.glsl @@ -4,14 +4,14 @@ #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) float fog_density_coeff = FOG_DENSITY * FOG_ADJUST; #else - float fog_density_coeff = day_blend_float( + float fog_density_coeff = dayBlendFloat( FOG_SUNSET, FOG_DAY, FOG_NIGHT ) * FOG_ADJUST; #endif - float fog_intensity_coeff = max(eye_bright_smooth.y * 0.004166666666666667, visible_sky); + float fog_intensity_coeff = max(eye_bright_smooth.y * 0.004166666666666667, visibleSky); #ifdef DISTANT_HORIZONS frog_adjust = pow( diff --git a/shaders/src/fog_vertex_dh.glsl b/shaders/src/fog_vertex_dh.glsl index 24813f99..032a469a 100644 --- a/shaders/src/fog_vertex_dh.glsl +++ b/shaders/src/fog_vertex_dh.glsl @@ -1,5 +1,5 @@ #if !defined THE_END && !defined NETHER - float fog_intensity_coeff = max(eye_bright_smooth.y * 0.004166666666666667, visible_sky); + float fog_intensity_coeff = max(eye_bright_smooth.y * 0.004166666666666667, visibleSky); frog_adjust = pow( clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fog_intensity_coeff, mix(fog_density_coeff * 0.15, 0.5, rainStrength) diff --git a/shaders/src/hi_sky.glsl b/shaders/src/hi_sky.glsl index 979ae9da..092dfd6c 100644 --- a/shaders/src/hi_sky.glsl +++ b/shaders/src/hi_sky.glsl @@ -2,7 +2,7 @@ vec3 hi_sky_color_rgb = skyColor; hi_sky_color = rgb_to_xyz(hi_sky_color_rgb); #else - vec3 hi_sky_color_rgb = day_blend( + vec3 hi_sky_color_rgb = dayBlend( ZENITH_SUNSET_COLOR, ZENITH_DAY_COLOR, ZENITH_NIGHT_COLOR diff --git a/shaders/src/light_vertex.glsl b/shaders/src/light_vertex.glsl index 16ffabe1..ad21a71a 100644 --- a/shaders/src/light_vertex.glsl +++ b/shaders/src/light_vertex.glsl @@ -1,29 +1,29 @@ -tint_color = gl_Color; +tintColor = gl_Color; // Native light (lmcoord.x: candel, lmcoord.y: sky) ---- vec2 illumination = lmcoord; illumination.y = max(illumination.y - 0.065, 0.0) * 1.06951871657754; -visible_sky = clamp(illumination.y, 0.0, 1.0); +visibleSky = clamp(illumination.y, 0.0, 1.0); // Underwater light adjust if (isEyeInWater == 1) { - visible_sky = (visible_sky * .95) + .05; + visibleSky = (visibleSky * .95) + .05; } #if defined UNKNOWN_DIM - visible_sky = (visible_sky * 0.99) + 0.01; + visibleSky = (visibleSky * 0.99) + 0.01; #endif // Candels color and intensity // Reemplazar pow(x, 1.5) por x * sqrt(x) --- -candle_color = CANDLE_BASELIGHT * (illumination.x * sqrt(illumination.x) + sixth_pow(illumination.x * 1.17)); +candle_color = CANDLE_BASELIGHT * (illumination.x * sqrt(illumination.x) + sixthPow(illumination.x * 1.17)); #ifdef DYN_HAND_LIGHT if (heldItemId == 11001 || heldItemId2 == 11001 || heldItemId == 11002 || heldItemId2 == 11002) { float dist_offset = (heldItemId == 11001 || heldItemId2 == 11001) ? 0.0 : 0.5; float hand_dist = (1.0 - clamp((gl_FogFragCoord * 0.06666666666666667) + dist_offset, 0.0, 1.0)); // --- OPTIMIZACIÓN #1 (de nuevo): Reemplazar pow(x, 1.5) --- - vec3 hand_light = CANDLE_BASELIGHT * (hand_dist * sqrt(hand_dist) + sixth_pow(hand_dist * 1.17)); + vec3 hand_light = CANDLE_BASELIGHT * (hand_dist * sqrt(hand_dist) + sixthPow(hand_dist * 1.17)); candle_color = max(candle_color, hand_light); } #endif @@ -61,7 +61,7 @@ if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals #ifdef UNKNOWN_DIM directLightColor = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; #else - directLightColor = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); + directLightColor = dayBlend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); #if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 directLightColor += (endFlashIntensity * endFlashIntensity * 0.1); #endif @@ -108,13 +108,13 @@ float omni_strength = ((direct_light_strength + 1.0) * 0.25) + 0.75; vec3 omni_color_min = omni_color * luma_ratio; omni_color = max(omni_color, omni_color_min); - omni_light = mix(omni_color_min, omni_color, visible_sky) * omni_strength; + omni_light = mix(omni_color_min, omni_color, visibleSky) * omni_strength; #endif // Avoid flat illumination in caves for entities #ifdef CAVEENTITY_V float candle_cave_strength = (direct_light_strength * .5) + .5; - candle_cave_strength = mix(candle_cave_strength, 1.0, visible_sky); + candle_cave_strength = mix(candle_cave_strength, 1.0, visibleSky); candle_color *= candle_cave_strength; #endif @@ -123,15 +123,15 @@ float omni_strength = ((direct_light_strength + 1.0) * 0.25) + 0.75; // Fake shadows if (isEyeInWater == 0) { // Reemplazar pow(x, 10.0) con multiplicaciones --- - float vis_sky_2 = visible_sky * visible_sky; + float vis_sky_2 = visibleSky * visibleSky; float vis_sky_4 = vis_sky_2 * vis_sky_2; float vis_sky_8 = vis_sky_4 * vis_sky_4; direct_light_strength = mix(0.0, direct_light_strength, vis_sky_8 * vis_sky_2); } else { - direct_light_strength = mix(0.0, direct_light_strength, visible_sky); + direct_light_strength = mix(0.0, direct_light_strength, visibleSky); } #else - direct_light_strength = mix(0.0, direct_light_strength, visible_sky); + direct_light_strength = mix(0.0, direct_light_strength, visibleSky); #endif #endif diff --git a/shaders/src/light_vertex_dh.glsl b/shaders/src/light_vertex_dh.glsl index f931fe26..70162f5c 100644 --- a/shaders/src/light_vertex_dh.glsl +++ b/shaders/src/light_vertex_dh.glsl @@ -1,4 +1,4 @@ -tint_color = gl_Color; +tintColor = gl_Color; // Luz nativa (lmcoord.x: candela, lmcoord.y: cielo) ---- #if defined THE_END || defined NETHER @@ -8,15 +8,15 @@ tint_color = gl_Color; #endif illumination.y = max(illumination.y - 0.065, 0.0) * 1.06951871657754; -visible_sky = clamp(illumination.y, 0.0, 1.0); +visibleSky = clamp(illumination.y, 0.0, 1.0); #if defined UNKNOWN_DIM - visible_sky = (visible_sky * 0.6) + 0.4; + visibleSky = (visibleSky * 0.6) + 0.4; #endif // Intensidad y color de luz de candelas float candle_luma = illumination.x * sqrt(illumination.x); -candle_color = CANDLE_BASELIGHT * (candle_luma + sixth_pow(illumination.x * 1.17)); +candle_color = CANDLE_BASELIGHT * (candle_luma + sixthPow(illumination.x * 1.17)); candle_color = clamp(candle_color, vec3(0.0), vec3(4.0)); // Atenuación por dirección de luz directa =================================== @@ -51,7 +51,7 @@ float omni_strength = ((direct_light_strength + 1.0) * 0.25) + 0.75; #ifdef UNKNOWN_DIM directLightColor = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; #else - directLightColor = day_blend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); + directLightColor = dayBlend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); #if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 directLightColor += (endFlashIntensity * endFlashIntensity * 0.1); #endif @@ -74,19 +74,19 @@ direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); vec3 omni_color_min = omni_color * luma_ratio; omni_color = max(omni_color, omni_color_min); - omni_light = mix(omni_color_min, omni_color, visible_sky) * omni_strength; + omni_light = mix(omni_color_min, omni_color, visibleSky) * omni_strength; #endif if (isEyeInWater == 0) { // Reemplazar pow(x, 10.0) con multiplicaciones --- // Esto es órdenes de magnitud más rápido. x^10 = (x^2)^2 * x^2 - float vis_sky_2 = visible_sky * visible_sky; // x^2 + float vis_sky_2 = visibleSky * visibleSky; // x^2 float vis_sky_4 = vis_sky_2 * vis_sky_2; // x^4 float vis_sky_8 = vis_sky_4 * vis_sky_4; // x^8 float vis_sky_10 = vis_sky_8 * vis_sky_2; // x^10 direct_light_strength = mix(0.0, direct_light_strength, vis_sky_10); } else { - direct_light_strength = mix(0.0, direct_light_strength, visible_sky); + direct_light_strength = mix(0.0, direct_light_strength, visibleSky); } if (dhMaterialId == DH_BLOCK_ILLUMINATED) { diff --git a/shaders/src/low_sky.glsl b/shaders/src/low_sky.glsl index 40deba36..447e675d 100644 --- a/shaders/src/low_sky.glsl +++ b/shaders/src/low_sky.glsl @@ -2,7 +2,7 @@ vec3 low_sky_color_rgb = fogColor; low_sky_color = rgb_to_xyz(low_sky_color_rgb); #else - vec3 low_sky_color_rgb = day_blend( + vec3 low_sky_color_rgb = dayBlend( HORIZON_SUNSET_COLOR, HORIZON_DAY_COLOR, HORIZON_NIGHT_COLOR diff --git a/shaders/src/position_vertex_dh.glsl b/shaders/src/position_vertex_dh.glsl index 68a18220..6888dba4 100644 --- a/shaders/src/position_vertex_dh.glsl +++ b/shaders/src/position_vertex_dh.glsl @@ -14,7 +14,7 @@ gl_Position = dhProjection * gbufferModelView * position; #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) float fog_density_coeff = FOG_DENSITY * FOG_ADJUST; #else - float fog_density_coeff = day_blend_float( + float fog_density_coeff = dayBlendFloat( FOG_SUNSET, FOG_DAY, FOG_NIGHT From a3ecca5c90bcd7c1cea599ef8c98c5d972470911 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 5 Jan 2026 23:20:23 -0600 Subject: [PATCH 103/147] Refactor VIII --- shaders/common/basic_blocks_vertex.glsl | 4 +- shaders/common/solid_blocks_fragment.glsl | 20 ++--- shaders/common/solid_blocks_vertex.glsl | 12 +-- shaders/common/solid_dh_blocks_fragment.glsl | 12 +-- shaders/common/solid_dh_blocks_vertex.glsl | 6 +- shaders/common/solid_dh_water_fragment.glsl | 24 +++--- shaders/common/solid_dh_water_vertex.glsl | 6 +- shaders/common/water_blocks_fragment.glsl | 24 +++--- shaders/common/water_blocks_vertex.glsl | 6 +- shaders/src/light_vertex.glsl | 88 ++++++++++---------- shaders/src/light_vertex_dh.glsl | 52 ++++++------ shaders/src/position_vertex.glsl | 2 +- 12 files changed, 127 insertions(+), 129 deletions(-) diff --git a/shaders/common/basic_blocks_vertex.glsl b/shaders/common/basic_blocks_vertex.glsl index 3b272e64..795a785e 100644 --- a/shaders/common/basic_blocks_vertex.glsl +++ b/shaders/common/basic_blocks_vertex.glsl @@ -47,8 +47,8 @@ void main() { vec2 illumination = clamp(abs(lmcoord), 0.0, 1.0); // Fix lines without correct illumination data illumination.y = (max(illumination.y, 0.065) - 0.065) * 1.06951871657754; - vec3 candle_color = + vec3 candleColor = CANDLE_BASELIGHT * ((illumination.x * illumination.x) + pow(illumination.x * 1.165, 6.0)); - basicLight += candle_color; + basicLight += candleColor; } diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 5af0bbe0..52fe3474 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -78,9 +78,9 @@ varying vec2 texcoord; varying vec4 tintColor; varying float frog_adjust; varying vec3 directLightColor; -varying vec3 candle_color; -varying float direct_light_strength; -varying vec3 omni_light; +varying vec3 candleColor; +varying float directLightStrength; +varying vec3 omniLight; #if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER varying vec3 vWorldPos; @@ -164,7 +164,7 @@ void main() { float block_luma = luma(blockColor.rgb); - vec3 final_candle_color = candle_color; + vec3 final_candle_color = candleColor; #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND if(emmisive_type > 0.5) { final_candle_color *= block_luma * 1.5; @@ -213,8 +213,8 @@ void main() { #elif defined GBUFFER_ENTITY_GLOW blockColor.rgb = clamp(vec3(luma(blockColor.rgb)) * vec3(0.75, 0.75, 1.5), vec3(0.3), vec3(1.0)); - vec3 real_light = omni_light + - (shadow_c * directLightColor * direct_light_strength) * (1.0 - (rainStrength * 0.75)) + + vec3 real_light = omniLight + + (shadow_c * directLightColor * directLightStrength) * (1.0 - (rainStrength * 0.75)) + final_candle_color; #else #if defined MATERIAL_GLOSS && !defined NETHER @@ -230,12 +230,12 @@ void main() { float material_gloss_factor = material_gloss(reflect(sub_position3_normalized, flat_normal), lmcoord_alt, final_gloss_power, flat_normal) * gloss_factor; float material = material_gloss_factor * block_luma; - vec3 real_light = omni_light + - (shadow_c * ((directLightColor * direct_light_strength) + (directLightColor * material))) * (1.0 - (rainStrength * 0.75)) + + vec3 real_light = omniLight + + (shadow_c * ((directLightColor * directLightStrength) + (directLightColor * material))) * (1.0 - (rainStrength * 0.75)) + final_candle_color; #else - vec3 real_light = omni_light + - (shadow_c * directLightColor * direct_light_strength) * (1.0 - (rainStrength * 0.75)) + + vec3 real_light = omniLight + + (shadow_c * directLightColor * directLightStrength) * (1.0 - (rainStrength * 0.75)) + final_candle_color; #endif diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index d203a8a0..c371310f 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -69,9 +69,9 @@ varying vec2 texcoord; varying vec4 tintColor; varying float frog_adjust; varying vec3 directLightColor; -varying vec3 candle_color; -varying float direct_light_strength; -varying vec3 omni_light; +varying vec3 candleColor; +varying float directLightStrength; +varying vec3 omniLight; #if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER varying vec3 vWorldPos; @@ -155,10 +155,10 @@ void main() { #if defined FOLIAGE_V && !defined NETHER #ifdef SHADOW_CASTING if(is_foliage > .2) { - direct_light_strength = + directLightStrength = mix( - direct_light_strength, - far_direct_light_strength, + directLightStrength, + farDirectLightStrength, clamp((gl_Position.z / SHADOW_LIMIT) * 2.0 - 0.5, 0.0, 1.0) ); } diff --git a/shaders/common/solid_dh_blocks_fragment.glsl b/shaders/common/solid_dh_blocks_fragment.glsl index 036dc04e..b65ed53c 100644 --- a/shaders/common/solid_dh_blocks_fragment.glsl +++ b/shaders/common/solid_dh_blocks_fragment.glsl @@ -23,9 +23,9 @@ uniform int dhRenderDistance; varying vec2 texcoord; varying vec4 tintColor; varying vec3 directLightColor; -varying vec3 candle_color; -varying float direct_light_strength; -varying vec3 omni_light; +varying vec3 candleColor; +varying float directLightStrength; +varying vec3 omniLight; varying vec4 position; varying float frog_adjust; @@ -63,13 +63,13 @@ void main() { float block_luma = luma(tintColor.rgb); - vec3 final_candle_color = candle_color; + vec3 final_candle_color = candleColor; float shadow_c = abs((dayNightMix * 2.0) - 1.0); vec3 real_light = - omni_light + - (shadow_c * directLightColor * direct_light_strength) * (1.0 - (rainStrength * 0.75)) + + omniLight + + (shadow_c * directLightColor * directLightStrength) * (1.0 - (rainStrength * 0.75)) + final_candle_color; blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * 0.125); diff --git a/shaders/common/solid_dh_blocks_vertex.glsl b/shaders/common/solid_dh_blocks_vertex.glsl index 6a1c99a3..50048e91 100644 --- a/shaders/common/solid_dh_blocks_vertex.glsl +++ b/shaders/common/solid_dh_blocks_vertex.glsl @@ -40,9 +40,9 @@ uniform mat4 gbufferProjectionInverse; varying vec2 texcoord; varying vec4 tintColor; varying vec3 directLightColor; -varying vec3 candle_color; -varying float direct_light_strength; -varying vec3 omni_light; +varying vec3 candleColor; +varying float directLightStrength; +varying vec3 omniLight; varying vec4 position; varying float frog_adjust; diff --git a/shaders/common/solid_dh_water_fragment.glsl b/shaders/common/solid_dh_water_fragment.glsl index b3c4e616..00a437a6 100644 --- a/shaders/common/solid_dh_water_fragment.glsl +++ b/shaders/common/solid_dh_water_fragment.glsl @@ -68,9 +68,9 @@ uniform float blindness; varying vec2 texcoord; varying vec4 tintColor; varying vec3 directLightColor; -varying vec3 candle_color; -varying float direct_light_strength; -varying vec3 omni_light; +varying vec3 candleColor; +varying float directLightStrength; +varying vec3 omniLight; varying vec4 position; varying vec3 fragposition; varying vec3 tangent; @@ -175,9 +175,9 @@ void main() { float fresnel_tex = luma(blockColor.rgb); - real_light = omni_light + - (direct_light_strength * shadow_c * directLightColor) * (1.0 - rainStrength * 0.75) + - candle_color; + real_light = omniLight + + (directLightStrength * shadow_c * directLightColor) * (1.0 - rainStrength * 0.75) + + candleColor; real_light *= (fresnel_tex * 2.0) - 0.25; @@ -193,9 +193,9 @@ void main() { float water_texture = 1.0; #endif - real_light = omni_light + - (direct_light_strength * visibleSky * directLightColor) * (1.0 - rainStrength * 0.75) + - candle_color; + real_light = omniLight + + (directLightStrength * visibleSky * directLightColor) * (1.0 - rainStrength * 0.75) + + candleColor; #if WATER_COLOR_SOURCE == 0 blockColor.rgb = water_texture * real_light * WATER_COLOR; @@ -219,9 +219,9 @@ void main() { float shadow_c = abs((dayNightMix * 2.0) - 1.0); - real_light = omni_light + - (direct_light_strength * shadow_c * directLightColor) * (1.0 - rainStrength * 0.75) + - candle_color; + real_light = omniLight + + (directLightStrength * shadow_c * directLightColor) * (1.0 - rainStrength * 0.75) + + candleColor; blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * .125); } diff --git a/shaders/common/solid_dh_water_vertex.glsl b/shaders/common/solid_dh_water_vertex.glsl index 2559e421..440ac546 100644 --- a/shaders/common/solid_dh_water_vertex.glsl +++ b/shaders/common/solid_dh_water_vertex.glsl @@ -40,9 +40,9 @@ uniform mat4 gbufferProjectionInverse; varying vec2 texcoord; varying vec4 tintColor; varying vec3 directLightColor; -varying vec3 candle_color; -varying float direct_light_strength; -varying vec3 omni_light; +varying vec3 candleColor; +varying float directLightStrength; +varying vec3 omniLight; varying vec4 position; varying vec3 fragposition; varying vec3 tangent; diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index 4c3cebb6..e118ae1b 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -95,9 +95,9 @@ varying vec3 fragposition; varying vec3 tangent; varying vec3 binormal; varying vec3 directLightColor; -varying vec3 candle_color; -varying float direct_light_strength; -varying vec3 omni_light; +varying vec3 candleColor; +varying float directLightStrength; +varying vec3 omniLight; varying float visibleSky; varying vec3 up_vec; varying vec3 hi_sky_color; @@ -220,9 +220,9 @@ void main() { float fresnel_tex = luma(blockColor.rgb); - real_light = omni_light + - (direct_light_strength * shadow_c * directLightColor) * (1.0 - rainStrength * 0.75) + - candle_color; + real_light = omniLight + + (directLightStrength * shadow_c * directLightColor) * (1.0 - rainStrength * 0.75) + + candleColor; real_light *= (fresnel_tex * 2.0) - 0.25; @@ -239,9 +239,9 @@ void main() { float water_texture = 1.0; #endif - real_light = omni_light + - (direct_light_strength * visibleSky * directLightColor) * (1.0 - rainStrength * 0.75) + - candle_color; + real_light = omniLight + + (directLightStrength * visibleSky * directLightColor) * (1.0 - rainStrength * 0.75) + + candleColor; #if WATER_COLOR_SOURCE == 0 blockColor.rgb = water_texture * real_light * WATER_COLOR; @@ -279,9 +279,9 @@ void main() { float shadow_c = abs((dayNightMix * 2.0) - 1.0); #endif - real_light = omni_light + - (direct_light_strength * shadow_c * directLightColor) * (1.0 - rainStrength * 0.75) + - candle_color; + real_light = omniLight + + (directLightStrength * shadow_c * directLightColor) * (1.0 - rainStrength * 0.75) + + candleColor; blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * .125); diff --git a/shaders/common/water_blocks_vertex.glsl b/shaders/common/water_blocks_vertex.glsl index 8f8d3dee..00f3514e 100644 --- a/shaders/common/water_blocks_vertex.glsl +++ b/shaders/common/water_blocks_vertex.glsl @@ -60,9 +60,9 @@ varying vec3 fragposition; varying vec3 tangent; varying vec3 binormal; varying vec3 directLightColor; -varying vec3 candle_color; -varying float direct_light_strength; -varying vec3 omni_light; +varying vec3 candleColor; +varying float directLightStrength; +varying vec3 omniLight; varying float visibleSky; varying vec3 up_vec; varying vec3 hi_sky_color; diff --git a/shaders/src/light_vertex.glsl b/shaders/src/light_vertex.glsl index ad21a71a..8dca89df 100644 --- a/shaders/src/light_vertex.glsl +++ b/shaders/src/light_vertex.glsl @@ -15,47 +15,45 @@ if (isEyeInWater == 1) { #endif // Candels color and intensity -// Reemplazar pow(x, 1.5) por x * sqrt(x) --- -candle_color = CANDLE_BASELIGHT * (illumination.x * sqrt(illumination.x) + sixthPow(illumination.x * 1.17)); +candleColor = CANDLE_BASELIGHT * (illumination.x * sqrt(illumination.x) + sixthPow(illumination.x * 1.17)); #ifdef DYN_HAND_LIGHT if (heldItemId == 11001 || heldItemId2 == 11001 || heldItemId == 11002 || heldItemId2 == 11002) { - float dist_offset = (heldItemId == 11001 || heldItemId2 == 11001) ? 0.0 : 0.5; - float hand_dist = (1.0 - clamp((gl_FogFragCoord * 0.06666666666666667) + dist_offset, 0.0, 1.0)); - // --- OPTIMIZACIÓN #1 (de nuevo): Reemplazar pow(x, 1.5) --- - vec3 hand_light = CANDLE_BASELIGHT * (hand_dist * sqrt(hand_dist) + sixthPow(hand_dist * 1.17)); - candle_color = max(candle_color, hand_light); + float distanceOffset = (heldItemId == 11001 || heldItemId2 == 11001) ? 0.0 : 0.5; + float handDistance = (1.0 - clamp((gl_FogFragCoord * 0.06666666666666667) + distanceOffset, 0.0, 1.0)); + vec3 handLight = CANDLE_BASELIGHT * (handDistance * sqrt(handDistance) + sixthPow(handDistance * 1.17)); + candleColor = max(candleColor, handLight); } #endif -candle_color = clamp(candle_color, vec3(0.0), vec3(4.0)); +candleColor = clamp(candleColor, vec3(0.0), vec3(4.0)); // Atenuation by light angle =================================== #if defined THE_END || defined NETHER - vec3 sun_vec = normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; + vec3 astroVector = normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; #else - vec3 sun_vec = normalize(sunPosition); + vec3 astroVector = normalize(sunPosition); #endif vec3 normal = gl_NormalMatrix * gl_Normal; -float sun_light_strength; +float astroLightStrength; if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals normal = normalize(normal); - sun_light_strength = dot(normal, sun_vec); + astroLightStrength = dot(normal, astroVector); } else { normal = vec3(0.0, 1.0, 0.0); - sun_light_strength = 1.0; + astroLightStrength = 1.0; } #if defined THE_END || defined NETHER - direct_light_strength = sun_light_strength; + directLightStrength = astroLightStrength; #else - direct_light_strength = mix(-sun_light_strength, sun_light_strength, dayNightMix); + directLightStrength = mix(-astroLightStrength, astroLightStrength, dayNightMix); #endif // Omni light intensity changes by angle -// float omni_strength = (direct_light_strength * .125) + 1.0; -// float omni_strength = (direct_light_strength) + 1.0; +// float omniStrength = (directLightStrength * .125) + 1.0; +// float omniStrength = (directLightStrength) + 1.0; // Direct light color #ifdef UNKNOWN_DIM @@ -68,54 +66,54 @@ if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals #endif // Omni light intensity changes by angle -float omni_strength = ((direct_light_strength + 1.0) * 0.25) + 0.75; +float omniStrength = ((directLightStrength + 1.0) * 0.25) + 0.75; // Direct light strenght -- #ifdef FOLIAGE_V // This shader has foliage // --- CORRECCIÓN: La variable se declara y calcula aquí, fuera del if/else --- - // Esto asegura que 'far_direct_light_strength' esté siempre disponible después de este bloque. - float far_direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); + // Esto asegura que 'farDirectLightStrength' esté siempre disponible después de este bloque. + float farDirectLightStrength = clamp(directLightStrength, 0.0, 1.0); if (mc_Entity.x != ENTITY_LEAVES) { - far_direct_light_strength = far_direct_light_strength * 0.75 + 0.25; + farDirectLightStrength = farDirectLightStrength * 0.75 + 0.25; } - // Ahora, la lógica del if/else solo modifica 'direct_light_strength' y 'omni_strength'. + // Ahora, la lógica del if/else solo modifica 'directLightStrength' y 'omniStrength'. if (is_foliage > .2) { // It's foliage, light is atenuated by angle #ifdef SHADOW_CASTING - direct_light_strength = sqrt(abs(direct_light_strength)); + directLightStrength = sqrt(abs(directLightStrength)); #else - direct_light_strength = (clamp(direct_light_strength, 0.0, 1.0) * 0.5 + 0.5) * 0.75; + directLightStrength = (clamp(directLightStrength, 0.0, 1.0) * 0.5 + 0.5) * 0.75; #endif - omni_strength = 1.0; + omniStrength = 1.0; } else { - direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); + directLightStrength = clamp(directLightStrength, 0.0, 1.0); } #else - direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); + directLightStrength = clamp(directLightStrength, 0.0, 1.0); #endif // Omni light color #if defined THE_END || defined NETHER - omni_light = LIGHT_DAY_COLOR * omni_strength; + omniLight = LIGHT_DAY_COLOR * omniStrength; #else directLightColor = mix(directLightColor, ZENITH_SKY_RAIN_COLOR * luma(directLightColor) * 0.4, rainStrength); // Minimal light - vec3 omni_color = mix(hi_sky_color_rgb, directLightColor * 0.45, OMNI_TINT); - float omni_color_luma = colorAverage(omni_color); + vec3 omniColor = mix(hi_sky_color_rgb, directLightColor * 0.45, OMNI_TINT); + float omniColorLuma = colorAverage(omniColor); // --- OPTIMIZACIÓN #3: Prevenir división por cero --- - float luma_ratio = AVOID_DARK_LEVEL / max(omni_color_luma, 0.0001); - vec3 omni_color_min = omni_color * luma_ratio; - omni_color = max(omni_color, omni_color_min); + float lumaRatio = AVOID_DARK_LEVEL / max(omniColorLuma, 0.0001); + vec3 omniColorMin = omniColor * lumaRatio; + omniColor = max(omniColor, omniColorMin); - omni_light = mix(omni_color_min, omni_color, visibleSky) * omni_strength; + omniLight = mix(omniColorMin, omniColor, visibleSky) * omniStrength; #endif // Avoid flat illumination in caves for entities #ifdef CAVEENTITY_V - float candle_cave_strength = (direct_light_strength * .5) + .5; - candle_cave_strength = mix(candle_cave_strength, 1.0, visibleSky); - candle_color *= candle_cave_strength; + float candleCaveStrength = (directLightStrength * .5) + .5; + candleCaveStrength = mix(candleCaveStrength, 1.0, visibleSky); + candleColor *= candleCaveStrength; #endif #if !defined THE_END && !defined NETHER @@ -123,20 +121,20 @@ float omni_strength = ((direct_light_strength + 1.0) * 0.25) + 0.75; // Fake shadows if (isEyeInWater == 0) { // Reemplazar pow(x, 10.0) con multiplicaciones --- - float vis_sky_2 = visibleSky * visibleSky; - float vis_sky_4 = vis_sky_2 * vis_sky_2; - float vis_sky_8 = vis_sky_4 * vis_sky_4; - direct_light_strength = mix(0.0, direct_light_strength, vis_sky_8 * vis_sky_2); + float visSky2 = visibleSky * visibleSky; + float visSky4 = visSky2 * visSky2; + float visSky8 = visSky4 * visSky4; + directLightStrength = mix(0.0, directLightStrength, visSky8 * visSky2); } else { - direct_light_strength = mix(0.0, direct_light_strength, visibleSky); + directLightStrength = mix(0.0, directLightStrength, visibleSky); } #else - direct_light_strength = mix(0.0, direct_light_strength, visibleSky); + directLightStrength = mix(0.0, directLightStrength, visibleSky); #endif #endif #ifdef EMMISIVE_V - if (is_fake_emmisor > 0.5) { - omni_light = vec3(0.45); + if (isFakeEmmisor > 0.5) { + omniLight = vec3(0.45); } #endif \ No newline at end of file diff --git a/shaders/src/light_vertex_dh.glsl b/shaders/src/light_vertex_dh.glsl index 70162f5c..541b3fc0 100644 --- a/shaders/src/light_vertex_dh.glsl +++ b/shaders/src/light_vertex_dh.glsl @@ -16,36 +16,36 @@ visibleSky = clamp(illumination.y, 0.0, 1.0); // Intensidad y color de luz de candelas float candle_luma = illumination.x * sqrt(illumination.x); -candle_color = CANDLE_BASELIGHT * (candle_luma + sixthPow(illumination.x * 1.17)); -candle_color = clamp(candle_color, vec3(0.0), vec3(4.0)); +candleColor = CANDLE_BASELIGHT * (candle_luma + sixthPow(illumination.x * 1.17)); +candleColor = clamp(candleColor, vec3(0.0), vec3(4.0)); // Atenuación por dirección de luz directa =================================== #if defined THE_END || defined NETHER - vec3 sun_vec = normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; + vec3 astroVector = normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; #else - vec3 sun_vec = normalize(sunPosition); + vec3 astroVector = normalize(sunPosition); #endif vec3 normal = gl_NormalMatrix * gl_Normal; -float sun_light_strength; +float astroLightStrength; // Comprobar la longitud al cuadrado (dot product) es mucho más rápido que la longitud (sqrt). if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals normal = normalize(normal); - sun_light_strength = dot(normal, sun_vec); + astroLightStrength = dot(normal, astroVector); } else { normal = vec3(0.0, 1.0, 0.0); - sun_light_strength = 1.0; + astroLightStrength = 1.0; } #if defined THE_END || defined NETHER - direct_light_strength = sun_light_strength; + directLightStrength = astroLightStrength; #else - direct_light_strength = mix(-sun_light_strength, sun_light_strength, dayNightMix); + directLightStrength = mix(-astroLightStrength, astroLightStrength, dayNightMix); #endif // Omni light intensity changes by angle -float omni_strength = ((direct_light_strength + 1.0) * 0.25) + 0.75; +float omniStrength = ((directLightStrength + 1.0) * 0.25) + 0.75; // Calculamos color de luz directa #ifdef UNKNOWN_DIM @@ -57,40 +57,40 @@ float omni_strength = ((direct_light_strength + 1.0) * 0.25) + 0.75; #endif #endif -direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); +directLightStrength = clamp(directLightStrength, 0.0, 1.0); #if defined THE_END || defined NETHER - omni_light = LIGHT_DAY_COLOR; + omniLight = LIGHT_DAY_COLOR; #else directLightColor = mix(directLightColor, ZENITH_SKY_RAIN_COLOR * luma(directLightColor) * 0.4, rainStrength); // Minimal light - vec3 omni_color = mix(hi_sky_color_rgb, directLightColor * 0.45, OMNI_TINT); - float omni_color_luma = colorAverage(omni_color); + vec3 omniColor = mix(hi_sky_color_rgb, directLightColor * 0.45, OMNI_TINT); + float omniColorLuma = colorAverage(omniColor); // --- OPTIMIZACIÓN #3: Prevenir división por cero --- - float luma_ratio = AVOID_DARK_LEVEL / max(omni_color_luma, 0.0001); + float lumaRatio = AVOID_DARK_LEVEL / max(omniColorLuma, 0.0001); - vec3 omni_color_min = omni_color * luma_ratio; - omni_color = max(omni_color, omni_color_min); + vec3 omniColorMin = omniColor * lumaRatio; + omniColor = max(omniColor, omniColorMin); - omni_light = mix(omni_color_min, omni_color, visibleSky) * omni_strength; + omniLight = mix(omniColorMin, omniColor, visibleSky) * omniStrength; #endif if (isEyeInWater == 0) { // Reemplazar pow(x, 10.0) con multiplicaciones --- // Esto es órdenes de magnitud más rápido. x^10 = (x^2)^2 * x^2 - float vis_sky_2 = visibleSky * visibleSky; // x^2 - float vis_sky_4 = vis_sky_2 * vis_sky_2; // x^4 - float vis_sky_8 = vis_sky_4 * vis_sky_4; // x^8 - float vis_sky_10 = vis_sky_8 * vis_sky_2; // x^10 - direct_light_strength = mix(0.0, direct_light_strength, vis_sky_10); + float visSky2 = visibleSky * visibleSky; // x^2 + float visSky4 = visSky2 * visSky2; // x^4 + float visSky8 = visSky4 * visSky4; // x^8 + float vis_sky_10 = visSky8 * visSky2; // x^10 + directLightStrength = mix(0.0, directLightStrength, vis_sky_10); } else { - direct_light_strength = mix(0.0, direct_light_strength, visibleSky); + directLightStrength = mix(0.0, directLightStrength, visibleSky); } if (dhMaterialId == DH_BLOCK_ILLUMINATED) { - direct_light_strength = 10.0; + directLightStrength = 10.0; } else if (dhMaterialId == DH_BLOCK_LAVA) { - direct_light_strength = 1.0; + directLightStrength = 1.0; } diff --git a/shaders/src/position_vertex.glsl b/shaders/src/position_vertex.glsl index 8a49d290..e8a86e7a 100644 --- a/shaders/src/position_vertex.glsl +++ b/shaders/src/position_vertex.glsl @@ -58,7 +58,7 @@ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; #endif #ifdef EMMISIVE_V - float is_fake_emmisor = float(mc_Entity.x == ENTITY_F_EMMISIVE); + float isFakeEmmisor = float(mc_Entity.x == ENTITY_F_EMMISIVE); #endif #if AA_TYPE > 1 From f80b818437b10ce48cb26a01ded89343892baf2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 10 Jan 2026 14:19:58 -0600 Subject: [PATCH 104/147] Flame entities, Refactor IX --- shaders/common/solid_blocks_fragment.glsl | 10 +++++----- shaders/common/solid_blocks_vertex.glsl | 23 +++++++++++++++++------ shaders/entity.properties | 4 ++++ shaders/src/light_vertex.glsl | 2 +- shaders/src/position_vertex.glsl | 4 ++-- shaders/src/shadow_src_vertex.glsl | 2 +- 6 files changed, 30 insertions(+), 15 deletions(-) diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 52fe3474..b7aa9dc1 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -88,12 +88,12 @@ varying vec3 omniLight; varying vec3 vBias; #endif -#if defined GBUFFER_TERRAIN || defined GBUFFER_HAND - varying float emmisive_type; +#if defined GBUFFER_TERRAIN || defined GBUFFER_HAND || defined GBUFFER_ENTITIES + varying float isEmissiveEntity; #endif #ifdef FOLIAGE_V - varying float is_foliage; + varying float isFoliage; #endif #if defined SHADOW_CASTING && !defined NETHER @@ -165,8 +165,8 @@ void main() { float block_luma = luma(blockColor.rgb); vec3 final_candle_color = candleColor; - #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND - if(emmisive_type > 0.5) { + #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND || defined GBUFFER_ENTITIES + if(isEmissiveEntity > 0.5) { final_candle_color *= block_luma * 1.5; } #endif diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index c371310f..f7810313 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -63,6 +63,10 @@ uniform mat4 gbufferProjectionInverse; uniform float endFlashIntensity; #endif +#if defined GBUFFER_ENTITIES + uniform int entityId; +#endif + /* Ins / Outs */ varying vec2 texcoord; @@ -79,12 +83,12 @@ varying vec3 omniLight; varying vec3 vBias; #endif -#if defined GBUFFER_TERRAIN || defined GBUFFER_HAND - varying float emmisive_type; +#if defined GBUFFER_TERRAIN || defined GBUFFER_HAND || defined GBUFFER_ENTITIES + varying float isEmissiveEntity; #endif #ifdef FOLIAGE_V - varying float is_foliage; + varying float isFoliage; #endif #if defined SHADOW_CASTING && !defined NETHER @@ -142,9 +146,16 @@ void main() { #include "/src/fog_vertex.glsl" #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND - emmisive_type = 0.0; + isEmissiveEntity = 0.0; if(mc_Entity.x == ENTITY_NO_SHADOW_FIRE || mc_Entity.x == ENTITY_EMMISIVE || mc_Entity.x == ENTITY_S_EMMISIVE) { - emmisive_type = 1.0; + isEmissiveEntity = 1.0; + } + #endif + + #if defined GBUFFER_ENTITIES + if (entityId == 10102) { + isEmissiveEntity = 1.0; + directLightStrength = 1.0; } #endif @@ -154,7 +165,7 @@ void main() { #if defined FOLIAGE_V && !defined NETHER #ifdef SHADOW_CASTING - if(is_foliage > .2) { + if (isFoliage > .2) { directLightStrength = mix( directLightStrength, diff --git a/shaders/entity.properties b/shaders/entity.properties index 5fe704f1..9495822a 100644 --- a/shaders/entity.properties +++ b/shaders/entity.properties @@ -1,3 +1,7 @@ # MakeUp - entity.properties +# Lightning bolt entity.10101=minecraft:lightning_bolt + +# Entity flames (Iris) +entity.10102=minecraft:entity_flame diff --git a/shaders/src/light_vertex.glsl b/shaders/src/light_vertex.glsl index 8dca89df..c678f62d 100644 --- a/shaders/src/light_vertex.glsl +++ b/shaders/src/light_vertex.glsl @@ -78,7 +78,7 @@ float omniStrength = ((directLightStrength + 1.0) * 0.25) + 0.75; } // Ahora, la lógica del if/else solo modifica 'directLightStrength' y 'omniStrength'. - if (is_foliage > .2) { // It's foliage, light is atenuated by angle + if (isFoliage > .2) { // It's foliage, light is atenuated by angle #ifdef SHADOW_CASTING directLightStrength = sqrt(abs(directLightStrength)); #else diff --git a/shaders/src/position_vertex.glsl b/shaders/src/position_vertex.glsl index e8a86e7a..1fd0324a 100644 --- a/shaders/src/position_vertex.glsl +++ b/shaders/src/position_vertex.glsl @@ -2,7 +2,7 @@ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; #ifdef FOLIAGE_V // Lógica optimizada para follaje y bloques generales - is_foliage = 0.0; + isFoliage = 0.0; // Comprobamos si la entidad actual es un tipo de follaje. bool isFoliageEntity = ( @@ -18,7 +18,7 @@ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; vec4 position = gbufferModelViewInverse * sub_position; if (isFoliageEntity) { - is_foliage = 0.4; + isFoliage = 0.4; #if WAVING == 1 if (mc_Entity.x != ENTITY_SMALLENTS_NW) { diff --git a/shaders/src/shadow_src_vertex.glsl b/shaders/src/shadow_src_vertex.glsl index 07b6bd5f..563f7057 100644 --- a/shaders/src/shadow_src_vertex.glsl +++ b/shaders/src/shadow_src_vertex.glsl @@ -9,7 +9,7 @@ float dot_product = dot(normal, light_direction); float NdotL; #ifdef FOLIAGE_V - float foliage_factor = step(0.2, is_foliage); + float foliage_factor = step(0.2, isFoliage); NdotL = mix(dot_product, abs(dot_product), foliage_factor); #else NdotL = dot_product; From e207749e1c765f19aef0ffe62293ab314e2f3c5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 10 Jan 2026 19:32:36 -0600 Subject: [PATCH 105/147] Refactor X --- shaders/common/clouds_blocks_fragment.glsl | 4 +- shaders/common/composite1_fragment.glsl | 10 ++--- shaders/common/composite2_fragment.glsl | 4 +- shaders/common/deferred_fragment.glsl | 6 +-- shaders/common/final_fragment.glsl | 4 +- shaders/common/prepare_fragment.glsl | 12 +++--- shaders/common/prepare_vertex.glsl | 4 +- shaders/common/skybasic_fragment.glsl | 16 +++---- shaders/common/skybasic_vertex.glsl | 4 +- shaders/common/solid_blocks_fragment.glsl | 34 +++++++-------- shaders/common/solid_blocks_vertex.glsl | 44 ++++++++++---------- shaders/common/solid_dh_blocks_fragment.glsl | 6 +-- shaders/common/solid_dh_blocks_vertex.glsl | 4 +- shaders/common/solid_dh_water_fragment.glsl | 14 +++---- shaders/common/solid_dh_water_vertex.glsl | 6 +-- shaders/common/water_blocks_fragment.glsl | 24 +++++------ shaders/common/water_blocks_vertex.glsl | 10 ++--- shaders/lib/basic_utils.glsl | 32 +++++++------- shaders/lib/bloom.glsl | 38 ++++++++--------- shaders/lib/blur.glsl | 34 +++++++-------- shaders/lib/fast_taa.glsl | 32 +++++++------- shaders/lib/fxaa.glsl | 20 ++++----- shaders/lib/material_gloss_fragment.glsl | 14 +++---- shaders/lib/motion_blur.glsl | 6 +-- shaders/lib/post.glsl | 8 ++-- shaders/lib/shadow_frag.glsl | 22 +++++----- shaders/lib/water.glsl | 2 +- shaders/lib/water_dh.glsl | 2 +- shaders/shaders.properties | 14 +++---- shaders/src/cloudfinalcolor.glsl | 4 +- shaders/src/finalcolor.glsl | 12 +++--- shaders/src/finalcolor_dh.glsl | 10 ++--- shaders/src/fog_vertex.glsl | 12 +++--- shaders/src/fog_vertex_dh.glsl | 8 ++-- shaders/src/hi_sky.glsl | 14 +++---- shaders/src/light_vertex.glsl | 2 +- shaders/src/light_vertex_dh.glsl | 2 +- shaders/src/low_sky.glsl | 14 +++---- shaders/src/position_vertex.glsl | 6 +-- shaders/src/shadow_src_vertex.glsl | 12 +++--- shaders/src/taa_offset.glsl | 8 ++-- 41 files changed, 267 insertions(+), 267 deletions(-) diff --git a/shaders/common/clouds_blocks_fragment.glsl b/shaders/common/clouds_blocks_fragment.glsl index 485d7be2..5ca07aa7 100644 --- a/shaders/common/clouds_blocks_fragment.glsl +++ b/shaders/common/clouds_blocks_fragment.glsl @@ -12,8 +12,8 @@ uniform float blindness; #endif #if V_CLOUDS == 0 || defined UNKNOWN_DIM - uniform float pixel_size_x; - uniform float pixel_size_y; + uniform float pixelSizeX; + uniform float pixelSizeY; uniform sampler2D gaux4; #endif diff --git a/shaders/common/composite1_fragment.glsl b/shaders/common/composite1_fragment.glsl index 2d97f661..8ff309d6 100644 --- a/shaders/common/composite1_fragment.glsl +++ b/shaders/common/composite1_fragment.glsl @@ -16,15 +16,15 @@ uniform float aspectRatioInverse; #ifdef DOF uniform float centerDepthSmooth; - uniform float pixel_size_x; - uniform float pixel_size_y; + uniform float pixelSizeX; + uniform float pixelSizeY; uniform float viewWidth; uniform float viewHeight; uniform float fovYInverse; #endif #ifdef BLOOM - uniform float soft_lod; + uniform float softLod; #endif /* Ins / Outs */ @@ -57,14 +57,14 @@ void main() { #endif #ifdef DOF - blockColor.rgb = noised_blur(blockColor, colortex1, texcoord, DOF_STRENGTH, dither); + blockColor.rgb = noisedBlur(blockColor, colortex1, texcoord, DOF_STRENGTH, dither); #endif #ifdef BLOOM vec3 bloom = mipmap_bloom(gaux1, texcoord, dither); blockColor.rgb += bloom; - // blockColor.rgb = texture2DLod(gaux1, texcoord, soft_lod).rgb; + // blockColor.rgb = texture2DLod(gaux1, texcoord, softLod).rgb; #endif blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); diff --git a/shaders/common/composite2_fragment.glsl b/shaders/common/composite2_fragment.glsl index f5f1bc0c..2d1ba5df 100644 --- a/shaders/common/composite2_fragment.glsl +++ b/shaders/common/composite2_fragment.glsl @@ -15,8 +15,8 @@ uniform sampler2D colortex1; #if AA_TYPE > 0 || defined MOTION_BLUR uniform sampler2D colortex3; // TAA past averages - uniform float pixel_size_x; - uniform float pixel_size_y; + uniform float pixelSizeX; + uniform float pixelSizeY; uniform mat4 gbufferProjectionInverse; uniform mat4 gbufferProjection; uniform mat4 gbufferModelViewInverse; diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index f7173053..019a0c5d 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -52,8 +52,8 @@ uniform int frameCounter; uniform mat4 gbufferModelViewInverse; uniform mat4 gbufferProjectionInverse; -uniform float pixel_size_x; -uniform float pixel_size_y; +uniform float pixelSizeX; +uniform float pixelSizeY; #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) uniform mat4 gbufferProjection; @@ -154,7 +154,7 @@ void main() { #endif #elif !defined NETHER && !defined THE_END if(linearDepth > 0.9999 && isEyeInWater == 1) { // Only sky and water - vec4 screen_pos = vec4(gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), gl_FragCoord.z, 1.0); + vec4 screen_pos = vec4(gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), gl_FragCoord.z, 1.0); vec4 fragposition = gbufferProjectionInverse * (screen_pos * 2.0 - 1.0); vec4 farPlaneClipPos = gbufferModelViewInverse * vec4(fragposition.xyz, 0.0); diff --git a/shaders/common/final_fragment.glsl b/shaders/common/final_fragment.glsl index 7357d4ca..eff09993 100644 --- a/shaders/common/final_fragment.glsl +++ b/shaders/common/final_fragment.glsl @@ -69,8 +69,8 @@ uniform sampler2D colortex1; uniform float viewWidth; #if AA_TYPE == 3 - uniform float pixel_size_x; - uniform float pixel_size_y; + uniform float pixelSizeX; + uniform float pixelSizeY; #endif /* Ins / Outs */ diff --git a/shaders/common/prepare_fragment.glsl b/shaders/common/prepare_fragment.glsl index 819163fe..2ff6d494 100644 --- a/shaders/common/prepare_fragment.glsl +++ b/shaders/common/prepare_fragment.glsl @@ -13,15 +13,15 @@ /* Uniforms */ uniform mat4 gbufferProjectionInverse; -uniform float pixel_size_x; -uniform float pixel_size_y; +uniform float pixelSizeX; +uniform float pixelSizeY; uniform float rainStrength; /* Ins / Outs */ varying vec3 up_vec; -varying vec3 hi_sky_color; -varying vec3 low_sky_color; +varying vec3 ZenithSkyColor; +varying vec3 horizonSkyColor; /* Utility functions */ @@ -44,11 +44,11 @@ void main() { vec4 fragpos = gbufferProjectionInverse * - (vec4(gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), gl_FragCoord.z, 1.0) * 2.0 - 1.0); + (vec4(gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), gl_FragCoord.z, 1.0) * 2.0 - 1.0); vec3 nfragpos = normalize(fragpos.xyz); float n_u = clamp(dot(nfragpos, up_vec) + dither, 0.0, 1.0); vec3 blockColor = - mix(low_sky_color, hi_sky_color, smoothstep(0.0, 1.0, pow(n_u, 0.333))); + mix(horizonSkyColor, ZenithSkyColor, smoothstep(0.0, 1.0, pow(n_u, 0.333))); blockColor = xyz_to_rgb(blockColor); #endif diff --git a/shaders/common/prepare_vertex.glsl b/shaders/common/prepare_vertex.glsl index c51bb3fc..48087d83 100644 --- a/shaders/common/prepare_vertex.glsl +++ b/shaders/common/prepare_vertex.glsl @@ -18,8 +18,8 @@ uniform float rainStrength; /* Ins / Outs */ varying vec3 up_vec; -varying vec3 hi_sky_color; -varying vec3 low_sky_color; +varying vec3 ZenithSkyColor; +varying vec3 horizonSkyColor; /* Utility functions */ diff --git a/shaders/common/skybasic_fragment.glsl b/shaders/common/skybasic_fragment.glsl index 3bf81973..320b94c9 100644 --- a/shaders/common/skybasic_fragment.glsl +++ b/shaders/common/skybasic_fragment.glsl @@ -13,8 +13,8 @@ /* Uniforms */ uniform sampler2D gaux4; -uniform float pixel_size_x; -uniform float pixel_size_y; +uniform float pixelSizeX; +uniform float pixelSizeY; #ifdef NETHER uniform vec3 fogColor; @@ -31,8 +31,8 @@ uniform float pixel_size_y; #if MC_VERSION < 11604 varying vec3 up_vec; - varying vec3 hi_sky_color; - varying vec3 low_sky_color; + varying vec3 ZenithSkyColor; + varying vec3 horizonSkyColor; #endif varying vec4 star_data; @@ -68,15 +68,15 @@ void main() { vec4 fragpos = gbufferProjectionInverse * - (vec4(gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), gl_FragCoord.z, 1.0) * 2.0 - 1.0); + (vec4(gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), gl_FragCoord.z, 1.0) * 2.0 - 1.0); vec3 nfragpos = normalize(fragpos.xyz); float n_u = clamp(dot(nfragpos, up_vec) + dither, 0.0, 1.0); - vec4 background_color = vec4(mix(low_sky_color, hi_sky_color, smoothstep(0.0, 1.0, pow(n_u, 0.333))), 1.0); + vec4 background_color = vec4(mix(horizonSkyColor, ZenithSkyColor, smoothstep(0.0, 1.0, pow(n_u, 0.333))), 1.0); background_color.rgb = xyz_to_rgb(background_color.rgb); #else // Toma el color puro del bloque - vec4 background_color = texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), 0); + vec4 background_color = texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), 0); #endif vec4 blockColor = star_data; @@ -90,7 +90,7 @@ void main() { #if MC_VERSION >= 11604 - blockColor.rgba = vec4(texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb, clamp(star_data.a * 2.0, 0.0, 1.0)); + blockColor.rgba = vec4(texture2D(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY)).rgb, clamp(star_data.a * 2.0, 0.0, 1.0)); #endif #include "/src/writebuffers.glsl" diff --git a/shaders/common/skybasic_vertex.glsl b/shaders/common/skybasic_vertex.glsl index 33595dc9..a100ed18 100644 --- a/shaders/common/skybasic_vertex.glsl +++ b/shaders/common/skybasic_vertex.glsl @@ -24,8 +24,8 @@ uniform mat4 gbufferModelView; #if MC_VERSION < 11604 varying vec3 up_vec; - varying vec3 hi_sky_color; - varying vec3 low_sky_color; + varying vec3 ZenithSkyColor; + varying vec3 horizonSkyColor; #endif varying vec4 star_data; diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index b7aa9dc1..f41b9667 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -18,8 +18,8 @@ uniform int isEyeInWater; uniform float nightVision; uniform float rainStrength; uniform float dayNightMix; -uniform float pixel_size_x; -uniform float pixel_size_y; +uniform float pixelSizeX; +uniform float pixelSizeY; uniform sampler2D gaux4; #if defined DISTANT_HORIZONS @@ -76,7 +76,7 @@ uniform float blindness; varying vec2 texcoord; varying vec4 tintColor; -varying float frog_adjust; +varying float frogAdjust; varying vec3 directLightColor; varying vec3 candleColor; varying float directLightStrength; @@ -98,17 +98,17 @@ varying vec3 omniLight; #if defined SHADOW_CASTING && !defined NETHER varying vec3 shadowPos; - varying float shadow_diffuse; + varying float shadowDiffuse; #endif #if defined MATERIAL_GLOSS && !defined NETHER - varying vec3 flat_normal; + varying vec3 flatNormal; varying vec3 sub_position3_normalized; - varying vec2 lmcoord_alt; - varying float gloss_factor; - varying float gloss_power; - varying float luma_factor; - varying float luma_power; + varying vec2 lmcoordAlt; + varying float glossFactor; + varying float glossPower; + varying float lumaFactor; + varying float lumaPower; #endif /* Utility functions */ @@ -199,10 +199,10 @@ void main() { #if defined COLORED_SHADOW vec3 shadow_c = get_colored_shadow(shadow_real_pos, dither); - shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); + shadow_c = mix(shadow_c, vec3(1.0), shadowDiffuse); #else float shadow_c = get_shadow(shadow_real_pos, dither); - shadow_c = mix(shadow_c, 1.0, shadow_diffuse); + shadow_c = mix(shadow_c, 1.0, shadowDiffuse); #endif #else float shadow_c = abs((dayNightMix * 2.0) - 1.0); @@ -218,16 +218,16 @@ void main() { final_candle_color; #else #if defined MATERIAL_GLOSS && !defined NETHER - float final_gloss_power = gloss_power; - block_luma *= luma_factor; + float final_gloss_power = glossPower; + block_luma *= lumaFactor; - if(luma_power < 0.0) { // Metallic + if(lumaPower < 0.0) { // Metallic final_gloss_power -= (block_luma * 73.334); } else { - block_luma = pow(block_luma, luma_power); + block_luma = pow(block_luma, lumaPower); } - float material_gloss_factor = material_gloss(reflect(sub_position3_normalized, flat_normal), lmcoord_alt, final_gloss_power, flat_normal) * gloss_factor; + float material_gloss_factor = material_gloss(reflect(sub_position3_normalized, flatNormal), lmcoordAlt, final_gloss_power, flatNormal) * glossFactor; float material = material_gloss_factor * block_luma; vec3 real_light = omniLight + diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index f7810313..c40124a1 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -71,7 +71,7 @@ uniform mat4 gbufferProjectionInverse; varying vec2 texcoord; varying vec4 tintColor; -varying float frog_adjust; +varying float frogAdjust; varying vec3 directLightColor; varying vec3 candleColor; varying float directLightStrength; @@ -93,17 +93,17 @@ varying vec3 omniLight; #if defined SHADOW_CASTING && !defined NETHER varying vec3 shadowPos; - varying float shadow_diffuse; + varying float shadowDiffuse; #endif #if defined MATERIAL_GLOSS && !defined NETHER - varying vec3 flat_normal; + varying vec3 flatNormal; varying vec3 sub_position3_normalized; - varying vec2 lmcoord_alt; - varying float gloss_factor; - varying float gloss_power; - varying float luma_factor; - varying float luma_power; + varying vec2 lmcoordAlt; + varying float glossFactor; + varying float glossPower; + varying float lumaFactor; + varying float lumaPower; #endif #if defined FOLIAGE_V || defined GBUFFER_TERRAIN || defined GBUFFER_HAND || (defined MATERIAL_GLOSS && !defined NETHER) @@ -136,7 +136,7 @@ varying vec3 omniLight; void main() { vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - vec3 hi_sky_color; + vec3 ZenithSkyColor; float visibleSky; #include "/src/basiccoords_vertex.glsl" @@ -177,26 +177,26 @@ void main() { #endif #if defined MATERIAL_GLOSS && !defined NETHER - luma_factor = 1.0; - luma_power = 2.0; - gloss_power = 6.0; - gloss_factor = 1.05; + lumaFactor = 1.0; + lumaPower = 2.0; + glossPower = 6.0; + glossFactor = 1.05; if(mc_Entity.x == ENTITY_SAND) { // Sand-like block - luma_power = 4.0; + lumaPower = 4.0; } else if(mc_Entity.x == ENTITY_METAL) { // Metal-like block - luma_factor = 1.35; - luma_power = -1.0; // Metallic - gloss_power = 100.0; + lumaFactor = 1.35; + lumaPower = -1.0; // Metallic + glossPower = 100.0; } else if(mc_Entity.x == ENTITY_FABRIC) { // Fabric-like blocks - gloss_power = 3.0; - gloss_factor = 0.1; + glossPower = 3.0; + glossFactor = 0.1; } - flat_normal = normal; + flatNormal = normal; sub_position3_normalized = normalize(sub_position.xyz); - lmcoord_alt = lmcoord; + lmcoordAlt = lmcoord; #endif #if defined GBUFFER_ENTITY_GLOW @@ -204,7 +204,7 @@ void main() { #endif #if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER - vNormal = shadow_world_normal; + vNormal = shadowWorldNormal; vBias = bias; #endif } diff --git a/shaders/common/solid_dh_blocks_fragment.glsl b/shaders/common/solid_dh_blocks_fragment.glsl index b65ed53c..ba383835 100644 --- a/shaders/common/solid_dh_blocks_fragment.glsl +++ b/shaders/common/solid_dh_blocks_fragment.glsl @@ -5,8 +5,8 @@ uniform float dayNightMix; uniform float nightVision; uniform float rainStrength; -uniform float pixel_size_x; -uniform float pixel_size_y; +uniform float pixelSizeX; +uniform float pixelSizeY; uniform sampler2D gaux4; uniform float dhNearPlane; uniform float dhFarPlane; @@ -27,7 +27,7 @@ varying vec3 candleColor; varying float directLightStrength; varying vec3 omniLight; varying vec4 position; -varying float frog_adjust; +varying float frogAdjust; /* Utility functions */ diff --git a/shaders/common/solid_dh_blocks_vertex.glsl b/shaders/common/solid_dh_blocks_vertex.glsl index 50048e91..4e198713 100644 --- a/shaders/common/solid_dh_blocks_vertex.glsl +++ b/shaders/common/solid_dh_blocks_vertex.glsl @@ -44,7 +44,7 @@ varying vec3 candleColor; varying float directLightStrength; varying vec3 omniLight; varying vec4 position; -varying float frog_adjust; +varying float frogAdjust; /* Utility functions */ @@ -60,7 +60,7 @@ varying float frog_adjust; void main() { vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); float visibleSky; - vec3 hi_sky_color; + vec3 ZenithSkyColor; #include "/src/basiccoords_vertex_dh.glsl" #include "/src/position_vertex_dh.glsl" diff --git a/shaders/common/solid_dh_water_fragment.glsl b/shaders/common/solid_dh_water_fragment.glsl index 00a437a6..491baf39 100644 --- a/shaders/common/solid_dh_water_fragment.glsl +++ b/shaders/common/solid_dh_water_fragment.glsl @@ -13,8 +13,8 @@ /* Uniforms */ uniform sampler2D tex; -uniform float pixel_size_x; -uniform float pixel_size_y; +uniform float pixelSizeX; +uniform float pixelSizeY; uniform float near; uniform float far; uniform sampler2D gaux1; @@ -76,13 +76,13 @@ varying vec3 fragposition; varying vec3 tangent; varying vec3 binormal; varying vec3 waterNormal; -varying vec3 hi_sky_color; -varying vec3 low_sky_color; +varying vec3 ZenithSkyColor; +varying vec3 horizonSkyColor; varying vec3 up_vec; varying float visibleSky; varying vec2 lmcoord; varying float block_type; -varying float frog_adjust; +varying float frogAdjust; /* Utility functions */ @@ -138,9 +138,9 @@ void main() { vec3 sky_color_reflect; if(isEyeInWater == 0 || isEyeInWater == 2) { - sky_color_reflect = mix(low_sky_color, hi_sky_color, smoothstep(0.0, 1.0, pow(clamp(dot(norm_reflect_water_vec, up_vec), 0.0001, 1.0), 0.333))); + sky_color_reflect = mix(horizonSkyColor, ZenithSkyColor, smoothstep(0.0, 1.0, pow(clamp(dot(norm_reflect_water_vec, up_vec), 0.0001, 1.0), 0.333))); } else { - sky_color_reflect = hi_sky_color * .5 * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667); + sky_color_reflect = ZenithSkyColor * .5 * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667); } sky_color_reflect = xyz_to_rgb(sky_color_reflect); diff --git a/shaders/common/solid_dh_water_vertex.glsl b/shaders/common/solid_dh_water_vertex.glsl index 440ac546..388d8264 100644 --- a/shaders/common/solid_dh_water_vertex.glsl +++ b/shaders/common/solid_dh_water_vertex.glsl @@ -48,13 +48,13 @@ varying vec3 fragposition; varying vec3 tangent; varying vec3 binormal; varying vec3 waterNormal; -varying vec3 hi_sky_color; -varying vec3 low_sky_color; +varying vec3 ZenithSkyColor; +varying vec3 horizonSkyColor; varying vec3 up_vec; varying float visibleSky; varying vec2 lmcoord; varying float block_type; -varying float frog_adjust; +varying float frogAdjust; /* Utility functions */ diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index e118ae1b..99b438f0 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -13,8 +13,8 @@ /* Uniforms */ uniform sampler2D tex; -uniform float pixel_size_x; -uniform float pixel_size_y; +uniform float pixelSizeX; +uniform float pixelSizeY; uniform float near; uniform float far; uniform sampler2D gaux1; @@ -87,7 +87,7 @@ uniform float blindness; varying vec2 texcoord; varying vec2 lmcoord; varying vec4 tintColor; -varying float frog_adjust; +varying float frogAdjust; varying vec3 waterNormal; varying float block_type; varying vec4 worldposition; @@ -100,12 +100,12 @@ varying float directLightStrength; varying vec3 omniLight; varying float visibleSky; varying vec3 up_vec; -varying vec3 hi_sky_color; -varying vec3 low_sky_color; +varying vec3 ZenithSkyColor; +varying vec3 horizonSkyColor; #if defined SHADOW_CASTING && !defined NETHER varying vec3 shadowPos; - varying float shadow_diffuse; + varying float shadowDiffuse; #endif #if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER @@ -180,9 +180,9 @@ void main() { vec3 sky_color_reflect; if(isEyeInWater == 0 || isEyeInWater == 2) { - sky_color_reflect = mix(low_sky_color, hi_sky_color, smoothstep(0.0, 1.0, pow(clamp(dot(norm_reflect_water_vec, up_vec), 0.0001, 1.0), 0.333))); + sky_color_reflect = mix(horizonSkyColor, ZenithSkyColor, smoothstep(0.0, 1.0, pow(clamp(dot(norm_reflect_water_vec, up_vec), 0.0001, 1.0), 0.333))); } else { - sky_color_reflect = hi_sky_color * .5 * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667); + sky_color_reflect = ZenithSkyColor * .5 * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667); } sky_color_reflect = xyz_to_rgb(sky_color_reflect); @@ -209,10 +209,10 @@ void main() { #endif #if defined COLORED_SHADOW vec3 shadow_c = get_colored_shadow(shadow_real_pos, dither); - shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); + shadow_c = mix(shadow_c, vec3(1.0), shadowDiffuse); #else float shadow_c = get_shadow(shadow_real_pos, dither); - shadow_c = mix(shadow_c, 1.0, shadow_diffuse); + shadow_c = mix(shadow_c, 1.0, shadowDiffuse); #endif #else float shadow_c = abs((dayNightMix * 2.0) - 1.0); @@ -270,10 +270,10 @@ void main() { #if defined SHADOW_CASTING && !defined NETHER #if defined COLORED_SHADOW vec3 shadow_c = get_colored_shadow(shadowPos, dither); - shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); + shadow_c = mix(shadow_c, vec3(1.0), shadowDiffuse); #else float shadow_c = get_shadow(shadowPos, dither); - shadow_c = mix(shadow_c, 1.0, shadow_diffuse); + shadow_c = mix(shadow_c, 1.0, shadowDiffuse); #endif #else float shadow_c = abs((dayNightMix * 2.0) - 1.0); diff --git a/shaders/common/water_blocks_vertex.glsl b/shaders/common/water_blocks_vertex.glsl index 00f3514e..596c0cfa 100644 --- a/shaders/common/water_blocks_vertex.glsl +++ b/shaders/common/water_blocks_vertex.glsl @@ -52,7 +52,7 @@ uniform mat4 gbufferProjectionInverse; varying vec2 texcoord; varying vec2 lmcoord; varying vec4 tintColor; -varying float frog_adjust; +varying float frogAdjust; varying vec3 waterNormal; varying float block_type; varying vec4 worldposition; @@ -65,8 +65,8 @@ varying float directLightStrength; varying vec3 omniLight; varying float visibleSky; varying vec3 up_vec; -varying vec3 hi_sky_color; -varying vec3 low_sky_color; +varying vec3 ZenithSkyColor; +varying vec3 horizonSkyColor; #if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER varying vec3 vWorldPos; @@ -76,7 +76,7 @@ varying vec3 low_sky_color; #if defined SHADOW_CASTING && !defined NETHER varying vec3 shadowPos; - varying float shadow_diffuse; + varying float shadowDiffuse; #endif #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY @@ -144,7 +144,7 @@ void main() { #endif #if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER - vNormal = shadow_world_normal; + vNormal = shadowWorldNormal; vBias = bias; #endif } diff --git a/shaders/lib/basic_utils.glsl b/shaders/lib/basic_utils.glsl index 881ad866..06481422 100644 --- a/shaders/lib/basic_utils.glsl +++ b/shaders/lib/basic_utils.glsl @@ -13,18 +13,18 @@ float cubePow(float x) { } float fourthPow(float x) { - float temp_2 = x * x; - return temp_2 * temp_2; + float temp2 = x * x; + return temp2 * temp2; } float fifthPow(float x) { - float temp_2 = x * x; - return temp_2 * temp_2 * x; + float temp2 = x * x; + return temp2 * temp2 * x; } float sixthPow(float x) { - float temp_2 = x * x; - return temp_2 * temp_2 * temp_2; + float temp2 = x * x; + return temp2 * temp2 * temp2; } vec3 SquarePowVec3(vec3 x) { @@ -36,18 +36,18 @@ vec3 cubePowVec3(vec3 x) { } vec3 fourthPowVec3(vec3 x) { - vec3 temp_2 = x * x; - return temp_2 * temp_2; + vec3 temp2 = x * x; + return temp2 * temp2; } vec3 fifthPowVec3(vec3 x) { - vec3 temp_2 = x * x; - return temp_2 * temp_2 * x; + vec3 temp2 = x * x; + return temp2 * temp2 * x; } vec3 sixthPowVec3(vec3 x) { - vec3 temp_2 = x * x; - return temp_2 * temp_2 * temp_2; + vec3 temp2 = x * x; + return temp2 * temp2 * temp2; } vec4 squarePowVec4(vec4 x) { @@ -63,11 +63,11 @@ vec4 fourthPowVec4(vec4 x) { } vec4 fifthPowVec4(vec4 x) { - vec4 temp_2 = x * x; - return temp_2 * temp_2 * x; + vec4 temp2 = x * x; + return temp2 * temp2 * x; } vec4 sixthPowVec4(vec4 x) { - vec4 temp_2 = x * x; - return temp_2 * temp_2 * temp_2; + vec4 temp2 = x * x; + return temp2 * temp2 * temp2; } diff --git a/shaders/lib/bloom.glsl b/shaders/lib/bloom.glsl index 809a541b..ba016161 100644 --- a/shaders/lib/bloom.glsl +++ b/shaders/lib/bloom.glsl @@ -5,30 +5,30 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ vec3 mipmap_bloom(sampler2D image, vec2 coords, float dither) { - vec3 blur_sample = vec3(0.0); - vec2 blur_radius_vec = vec2(0.1 * aspectRatioInverse, 0.1); + vec3 blurSample = vec3(0.0); + vec2 blurRadiusVec = vec2(0.1 * aspectRatioInverse, 0.1); - int sample_c = int(BLOOM_SAMPLES); + int samplesQuantity = int(BLOOM_SAMPLES); - vec2 blur_radios_factor = blur_radius_vec * (1.0 / BLOOM_SAMPLES); + vec2 blurRadiusFactor = blurRadiusVec * (1.0 / BLOOM_SAMPLES); float n; vec2 offset; - vec2 offset_2; - float dither_x; - - for(int i = 0; i < sample_c; i++) { - dither_x = i + dither; - n = fract(dither_x * 1.6180339887) * 6.283185307179586; - offset = vec2(cos(n), sin(n)) * dither_x * blur_radios_factor; - offset_2 = vec2(-offset.y * 1.25, offset.x * 1.25); - - blur_sample += texture2DLod(image, coords + offset, soft_lod).rgb; - blur_sample += texture2DLod(image, coords - offset, soft_lod).rgb; - blur_sample += texture2DLod(image, coords + offset_2, soft_lod).rgb; - blur_sample += texture2DLod(image, coords - offset_2, soft_lod).rgb; + vec2 offset2; + float ditherShifted; + + for(int i = 0; i < samplesQuantity; i++) { + ditherShifted = i + dither; + n = fract(ditherShifted * 1.6180339887) * 6.283185307179586; + offset = vec2(cos(n), sin(n)) * ditherShifted * blurRadiusFactor; + offset2 = vec2(-offset.y * 1.25, offset.x * 1.25); + + blurSample += texture2DLod(image, coords + offset, softLod).rgb; + blurSample += texture2DLod(image, coords - offset, softLod).rgb; + blurSample += texture2DLod(image, coords + offset2, softLod).rgb; + blurSample += texture2DLod(image, coords - offset2, softLod).rgb; } - blur_sample /= (BLOOM_SAMPLES * 4.0); + blurSample /= (BLOOM_SAMPLES * 4.0); - return blur_sample; + return blurSample; } diff --git a/shaders/lib/blur.glsl b/shaders/lib/blur.glsl index 9ef37194..609da133 100644 --- a/shaders/lib/blur.glsl +++ b/shaders/lib/blur.glsl @@ -4,32 +4,32 @@ Blur functions. Javier Garduño - GNU Lesser General Public License v3.0 */ -vec3 noised_blur(vec4 color_depth, sampler2D image, vec2 coords, float force, float dither) { - vec3 blockColor = color_depth.rgb; - float the_depth = color_depth.a; - float blur_radius = 0.0; - - if (the_depth > 0.56) { // Manos no - blur_radius = - max(abs(the_depth - centerDepthSmooth) - 0.000075, 0.0) * fovYInverse; - blur_radius = blur_radius * inversesqrt(0.1 + blur_radius * blur_radius) * force; - blur_radius = min(blur_radius, 0.1); +vec3 noisedBlur(vec4 colorAndDepth, sampler2D image, vec2 coords, float force, float dither) { + vec3 blockColor = colorAndDepth.rgb; + float depthAlone = colorAndDepth.a; + float blurRadius = 0.0; + + if (depthAlone > 0.56) { // Manos no + blurRadius = + max(abs(depthAlone - centerDepthSmooth) - 0.000075, 0.0) * fovYInverse; + blurRadius = blurRadius * inversesqrt(0.1 + blurRadius * blurRadius) * force; + blurRadius = min(blurRadius, 0.1); } - if (blur_radius > min(pixel_size_x, pixel_size_y)) { - vec3 blur_sample = vec3(0.0); - vec2 blur_radius_vec = vec2(blur_radius * aspectRatioInverse, blur_radius); + if (blurRadius > min(pixelSizeX, pixelSizeY)) { + vec3 blurSample = vec3(0.0); + vec2 blurRadiusVec = vec2(blurRadius * aspectRatioInverse, blurRadius); float dither_base = dither; dither *= 6.283185307179586; float current_radius = (0.25 + dither_base); - vec2 offset = vec2(cos(dither), sin(dither)) * blur_radius_vec * current_radius; + vec2 offset = vec2(cos(dither), sin(dither)) * blurRadiusVec * current_radius; - blur_sample += texture2D(image, coords + offset, -2.0).rgb; - blur_sample += texture2D(image, coords - offset, -2.0).rgb; + blurSample += texture2D(image, coords + offset, -2.0).rgb; + blurSample += texture2D(image, coords - offset, -2.0).rgb; - blockColor = blur_sample * 0.5; + blockColor = blurSample * 0.5; } return blockColor; diff --git a/shaders/lib/fast_taa.glsl b/shaders/lib/fast_taa.glsl index 498bc4ee..788b6bc1 100644 --- a/shaders/lib/fast_taa.glsl +++ b/shaders/lib/fast_taa.glsl @@ -101,14 +101,14 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { // Previous color vec3 previous = texture2DLod(colortex3, texcoord_past, 0.0).rgb; - vec3 left = texture2DLod(colortex1, texcoord + vec2(-pixel_size_x, 0.0), 0.0).rgb; - vec3 right = texture2DLod(colortex1, texcoord + vec2(pixel_size_x, 0.0), 0.0).rgb; - vec3 down = texture2DLod(colortex1, texcoord + vec2(0.0, -pixel_size_y), 0.0).rgb; - vec3 up = texture2DLod(colortex1, texcoord + vec2(0.0, pixel_size_y), 0.0).rgb; - vec3 ul = texture2DLod(colortex1, texcoord + vec2(-pixel_size_x, pixel_size_y), 0.0).rgb; - vec3 ur = texture2DLod(colortex1, texcoord + vec2(pixel_size_x, pixel_size_y), 0.0).rgb; - vec3 dl = texture2DLod(colortex1, texcoord + vec2(-pixel_size_x, -pixel_size_y), 0.0).rgb; - vec3 dr = texture2DLod(colortex1, texcoord + vec2(pixel_size_x, -pixel_size_y), 0.0).rgb; + vec3 left = texture2DLod(colortex1, texcoord + vec2(-pixelSizeX, 0.0), 0.0).rgb; + vec3 right = texture2DLod(colortex1, texcoord + vec2(pixelSizeX, 0.0), 0.0).rgb; + vec3 down = texture2DLod(colortex1, texcoord + vec2(0.0, -pixelSizeY), 0.0).rgb; + vec3 up = texture2DLod(colortex1, texcoord + vec2(0.0, pixelSizeY), 0.0).rgb; + vec3 ul = texture2DLod(colortex1, texcoord + vec2(-pixelSizeX, pixelSizeY), 0.0).rgb; + vec3 ur = texture2DLod(colortex1, texcoord + vec2(pixelSizeX, pixelSizeY), 0.0).rgb; + vec3 dl = texture2DLod(colortex1, texcoord + vec2(-pixelSizeX, -pixelSizeY), 0.0).rgb; + vec3 dr = texture2DLod(colortex1, texcoord + vec2(pixelSizeX, -pixelSizeY), 0.0).rgb; vec3 c_max = max(max(max(left, right), down),max(up, max(ul, max(ur, max(dl, max(dr, current_color)))))); vec3 c_min = min(min(min(left, right), down),min(up, min(ul, min(ur, min(dl, min(dr, current_color)))))); @@ -147,14 +147,14 @@ vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { // Muestra del pasado vec4 previous = texture2DLod(colortex3, texcoord_past, 0.0); - vec4 left = texture2DLod(colortex1, texcoord + vec2(-pixel_size_x, 0.0), 0.0); - vec4 right = texture2DLod(colortex1, texcoord + vec2(pixel_size_x, 0.0), 0.0); - vec4 down = texture2DLod(colortex1, texcoord + vec2(0.0, -pixel_size_y), 0.0); - vec4 up = texture2DLod(colortex1, texcoord + vec2(0.0, pixel_size_y), 0.0); - vec4 ul = texture2DLod(colortex1, texcoord + vec2(-pixel_size_x, pixel_size_y), 0.0); - vec4 ur = texture2DLod(colortex1, texcoord + vec2(pixel_size_x, pixel_size_y), 0.0); - vec4 dl = texture2DLod(colortex1, texcoord + vec2(-pixel_size_x, -pixel_size_y), 0.0); - vec4 dr = texture2DLod(colortex1, texcoord + vec2(pixel_size_x, -pixel_size_y), 0.0); + vec4 left = texture2DLod(colortex1, texcoord + vec2(-pixelSizeX, 0.0), 0.0); + vec4 right = texture2DLod(colortex1, texcoord + vec2(pixelSizeX, 0.0), 0.0); + vec4 down = texture2DLod(colortex1, texcoord + vec2(0.0, -pixelSizeY), 0.0); + vec4 up = texture2DLod(colortex1, texcoord + vec2(0.0, pixelSizeY), 0.0); + vec4 ul = texture2DLod(colortex1, texcoord + vec2(-pixelSizeX, pixelSizeY), 0.0); + vec4 ur = texture2DLod(colortex1, texcoord + vec2(pixelSizeX, pixelSizeY), 0.0); + vec4 dl = texture2DLod(colortex1, texcoord + vec2(-pixelSizeX, -pixelSizeY), 0.0); + vec4 dr = texture2DLod(colortex1, texcoord + vec2(pixelSizeX, -pixelSizeY), 0.0); vec3 c_max = max(max(max(left.rgb, right.rgb), down.rgb),max(up.rgb, max(ul.rgb, max(ur.rgb, max(dl.rgb, max(dr.rgb, current_color.rgb)))))); vec3 c_min = min(min(min(left.rgb, right.rgb), down.rgb),min(up.rgb, min(ul.rgb, min(ur.rgb, min(dl.rgb, min(dr.rgb, current_color.rgb)))))); diff --git a/shaders/lib/fxaa.glsl b/shaders/lib/fxaa.glsl index 8e6fc073..3715b955 100644 --- a/shaders/lib/fxaa.glsl +++ b/shaders/lib/fxaa.glsl @@ -16,10 +16,10 @@ vec3 fxaa311(vec3 color, int iterations){ // Luma at the current fragment float lumaCenter = luma(color); // Luma at the four direct neighbours of the current fragment. - float lumaDown = luma(texture2DLod(colortex1, texcoord.xy + vec2(0.0,-pixel_size_y), 0.0).rgb); - float lumaUp = luma(texture2DLod(colortex1, texcoord.xy + vec2(0.0,pixel_size_y), 0.0).rgb); - float lumaLeft = luma(texture2DLod(colortex1, texcoord.xy + vec2(-pixel_size_x, 0.0), 0.0).rgb); - float lumaRight = luma(texture2DLod(colortex1, texcoord.xy + vec2(pixel_size_x, 0.0), 0.0).rgb); + float lumaDown = luma(texture2DLod(colortex1, texcoord.xy + vec2(0.0,-pixelSizeY), 0.0).rgb); + float lumaUp = luma(texture2DLod(colortex1, texcoord.xy + vec2(0.0,pixelSizeY), 0.0).rgb); + float lumaLeft = luma(texture2DLod(colortex1, texcoord.xy + vec2(-pixelSizeX, 0.0), 0.0).rgb); + float lumaRight = luma(texture2DLod(colortex1, texcoord.xy + vec2(pixelSizeX, 0.0), 0.0).rgb); // Find the maximum and minimum luma around the current fragment. float lumaMin = min(lumaCenter, min(min(lumaDown, lumaUp), min(lumaLeft, lumaRight))); @@ -31,10 +31,10 @@ vec3 fxaa311(vec3 color, int iterations){ // If the luma variation is lower that a threshold (or if we are in a really dark area), we are not on an edge, don't perform any FXAA. if (lumaRange > max(edgeThresholdMin, lumaMax * edgeThresholdMax)) { // Query the 4 remaining corners lumas. - float lumaDownLeft = luma(texture2DLod(colortex1, texcoord.xy + vec2(-pixel_size_x, -pixel_size_y), 0.0).rgb); - float lumaUpRight = luma(texture2DLod(colortex1, texcoord.xy + vec2(pixel_size_x, pixel_size_y), 0.0).rgb); - float lumaUpLeft = luma(texture2DLod(colortex1, texcoord.xy + vec2(-pixel_size_x, pixel_size_y), 0.0).rgb); - float lumaDownRight = luma(texture2DLod(colortex1, texcoord.xy + vec2(pixel_size_x, -pixel_size_y), 0.0).rgb); + float lumaDownLeft = luma(texture2DLod(colortex1, texcoord.xy + vec2(-pixelSizeX, -pixelSizeY), 0.0).rgb); + float lumaUpRight = luma(texture2DLod(colortex1, texcoord.xy + vec2(pixelSizeX, pixelSizeY), 0.0).rgb); + float lumaUpLeft = luma(texture2DLod(colortex1, texcoord.xy + vec2(-pixelSizeX, pixelSizeY), 0.0).rgb); + float lumaDownRight = luma(texture2DLod(colortex1, texcoord.xy + vec2(pixelSizeX, -pixelSizeY), 0.0).rgb); // Combine the four edges lumas (using intermediary variables for future computations with the same values). float lumaDownUp = lumaDown + lumaUp; @@ -66,7 +66,7 @@ vec3 fxaa311(vec3 color, int iterations){ float gradientScaled = 0.25f*max(abs(gradient1), abs(gradient2)); // Choose the step size (one pixel) according to the edge direction. - float stepLength = isHorizontal ? pixel_size_y : pixel_size_x; + float stepLength = isHorizontal ? pixelSizeY : pixelSizeX; // Average luma in the correct direction. float lumaLocalAverage = 0.0; @@ -88,7 +88,7 @@ vec3 fxaa311(vec3 color, int iterations){ } // Compute offset (for each iteration step) in the right direction. - vec2 offset = isHorizontal ? vec2(pixel_size_x, 0.0) : vec2(0.0, pixel_size_y); + vec2 offset = isHorizontal ? vec2(pixelSizeX, 0.0) : vec2(0.0, pixelSizeY); // Compute UVs to explore on each side of the edge, orthogonally. The QUALITY allows us to step faster. vec2 uv1 = currentUv - offset; diff --git a/shaders/lib/material_gloss_fragment.glsl b/shaders/lib/material_gloss_fragment.glsl index 7b0cfd08..c463e3d3 100644 --- a/shaders/lib/material_gloss_fragment.glsl +++ b/shaders/lib/material_gloss_fragment.glsl @@ -1,25 +1,25 @@ #if defined THE_END - float material_gloss(vec3 reflectedVector, vec2 lmcoord_alt, float gloss_power, vec3 flat_normal) { + float material_gloss(vec3 reflectedVector, vec2 lmcoordAlt, float glossPower, vec3 flatNormal) { vec3 astroLightPos = (gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; float astroAlignment = - max(dot(normalize(reflectedVector), normalize(astroLightPos)), 0.0) * step(0.0001, dot(astroLightPos, flat_normal)); + max(dot(normalize(reflectedVector), normalize(astroLightPos)), 0.0) * step(0.0001, dot(astroLightPos, flatNormal)); return clamp( - mix(0.0, 1.0, pow(clamp(astroAlignment * 2.0 - 1.0, 0.0, 1.0), gloss_power)), + mix(0.0, 1.0, pow(clamp(astroAlignment * 2.0 - 1.0, 0.0, 1.0), glossPower)), 0.0, 1.0 ); } #else - float material_gloss(vec3 reflectedVector, vec2 lmcoord_alt, float gloss_power, vec3 flat_normal) { + float material_gloss(vec3 reflectedVector, vec2 lmcoordAlt, float glossPower, vec3 flatNormal) { vec3 astroLightPos = mix(-sunPosition, sunPosition, dayNightMix); float astroAlignment = max(dot(normalize(reflectedVector), normalize(astroLightPos)), 0.0) * - step(0.0001, dot(astroLightPos, flat_normal)); + step(0.0001, dot(astroLightPos, flatNormal)); return clamp( - mix(0.0, 1.0, pow(clamp(astroAlignment * 2.0 - 1.0, 0.0, 1.0), gloss_power)) * - clamp(lmcoord_alt.y, 0.0, 1.0) * + mix(0.0, 1.0, pow(clamp(astroAlignment * 2.0 - 1.0, 0.0, 1.0), glossPower)) * + clamp(lmcoordAlt.y, 0.0, 1.0) * (1.0 - rainStrength), 0.0, 1.0 diff --git a/shaders/lib/motion_blur.glsl b/shaders/lib/motion_blur.glsl index 995bb726..37f32ff8 100644 --- a/shaders/lib/motion_blur.glsl +++ b/shaders/lib/motion_blur.glsl @@ -4,9 +4,9 @@ Motion blur functions. Javier Garduño - GNU Lesser General Public License v3.0 */ -vec3 motion_blur(vec3 color, float the_depth, vec2 blur_velocity, float dither, sampler2D image) { - if (the_depth > 0.7) { // No hand - vec2 double_pixels = 2.0 * vec2(pixel_size_x, pixel_size_y); +vec3 motion_blur(vec3 color, float depthAlone, vec2 blur_velocity, float dither, sampler2D image) { + if (depthAlone > 0.7) { // No hand + vec2 double_pixels = 2.0 * vec2(pixelSizeX, pixelSizeY); vec3 m_blur = vec3(0.0); blur_velocity = diff --git a/shaders/lib/post.glsl b/shaders/lib/post.glsl index 5216f24f..0625fa0f 100644 --- a/shaders/lib/post.glsl +++ b/shaders/lib/post.glsl @@ -1,9 +1,9 @@ vec3 sharpen(sampler2D image, vec3 color, vec2 coords) { - vec3 sum = -texture2DLod(image, coords + vec2(-pixel_size_x, 0.0), 0.0).rgb; - sum -= texture2DLod(image, coords + vec2(0.0, -pixel_size_y), 0.0).rgb; + vec3 sum = -texture2DLod(image, coords + vec2(-pixelSizeX, 0.0), 0.0).rgb; + sum -= texture2DLod(image, coords + vec2(0.0, -pixelSizeY), 0.0).rgb; sum += 11.0 * color; - sum -= texture2DLod(image, coords + vec2(0.0, pixel_size_y), 0.0).rgb; - sum -= texture2DLod(image, coords + vec2(pixel_size_x, 0.0), 0.0).rgb; + sum -= texture2DLod(image, coords + vec2(0.0, pixelSizeY), 0.0).rgb; + sum -= texture2DLod(image, coords + vec2(pixelSizeX, 0.0), 0.0).rgb; return sum * 0.14285714285714285; } diff --git a/shaders/lib/shadow_frag.glsl b/shaders/lib/shadow_frag.glsl index a862abc4..c3547577 100644 --- a/shaders/lib/shadow_frag.glsl +++ b/shaders/lib/shadow_frag.glsl @@ -17,14 +17,14 @@ float get_shadow(vec3 the_shadow_pos, float dither) { shadow_sample = 0.0; vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; - vec2 offset_2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; + vec2 offset2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; float z_bias = dither * 0.00002; shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; - shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset_2, the_shadow_pos.z - z_bias)).r; - shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset_2, the_shadow_pos.z - z_bias)).r; + shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset2, the_shadow_pos.z - z_bias)).r; + shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset2, the_shadow_pos.z - z_bias)).r; // shadow_sample *= 0.5; shadow_sample *= 0.25; @@ -83,15 +83,15 @@ float get_shadow(vec3 the_shadow_pos, float dither) { float dither_2 = dither + 1.5707963267948966; vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; - vec2 offset_2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; - // vec2 offset_2 = vec2(-offset.y, offset.x); + vec2 offset2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; + // vec2 offset2 = vec2(-offset.y, offset.x); float z_bias = dither * 0.00002; shadow_detector_a = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; shadow_detector_b = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; - shadow_detector_c = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset_2, the_shadow_pos.z - z_bias)).r; - shadow_detector_d = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset_2, the_shadow_pos.z - z_bias)).r; + shadow_detector_c = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset2, the_shadow_pos.z - z_bias)).r; + shadow_detector_d = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset2, the_shadow_pos.z - z_bias)).r; if (shadow_detector_a < 1.0) { shadow_black_a = shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; @@ -118,9 +118,9 @@ float get_shadow(vec3 the_shadow_pos, float dither) { shadow_color_b *= shadow_black_b; if (shadow_detector_c < 1.0) { - shadow_black_c = shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset_2, the_shadow_pos.z - z_bias)).r; + shadow_black_c = shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset2, the_shadow_pos.z - z_bias)).r; if (shadow_black_c != shadow_detector_c) { - shadow_color_c = texture2D(shadowcolor0, the_shadow_pos.xy + offset_2); + shadow_color_c = texture2D(shadowcolor0, the_shadow_pos.xy + offset2); alpha_complement = 1.0 - shadow_color_c.a; shadow_color_c.rgb = mix(shadow_color_c.rgb, vec3(1.0), alpha_complement); shadow_color_c.rgb *= alpha_complement; @@ -130,9 +130,9 @@ float get_shadow(vec3 the_shadow_pos, float dither) { shadow_color_c *= shadow_black_c; if (shadow_detector_d < 1.0) { - shadow_black_d = shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset_2, the_shadow_pos.z - z_bias)).r; + shadow_black_d = shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset2, the_shadow_pos.z - z_bias)).r; if (shadow_black_d != shadow_detector_d) { - shadow_color_d = texture2D(shadowcolor0, the_shadow_pos.xy - offset_2); + shadow_color_d = texture2D(shadowcolor0, the_shadow_pos.xy - offset2); alpha_complement = 1.0 - shadow_color_d.a; shadow_color_d.rgb = mix(shadow_color_d.rgb, vec3(1.0), alpha_complement); shadow_color_d.rgb *= alpha_complement; diff --git a/shaders/lib/water.glsl b/shaders/lib/water.glsl index aa77f53c..e09733b6 100644 --- a/shaders/lib/water.glsl +++ b/shaders/lib/water.glsl @@ -126,7 +126,7 @@ vec3 normal_waves(vec3 pos) { } vec3 refraction(vec3 fragpos, vec3 color, vec3 refraction) { - vec2 pos = gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y); + vec2 pos = gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY); #if REFRACTION == 1 pos = pos + refraction.xy * (0.075 / (1.0 + length(fragpos) * 0.4)); diff --git a/shaders/lib/water_dh.glsl b/shaders/lib/water_dh.glsl index a03989b2..bed0732f 100644 --- a/shaders/lib/water_dh.glsl +++ b/shaders/lib/water_dh.glsl @@ -28,7 +28,7 @@ vec3 normal_waves_dh(vec3 pos) { } vec3 refraction(vec3 fragpos, vec3 color, vec3 refraction) { - vec2 pos = gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y); + vec2 pos = gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY); #if REFRACTION == 1 pos = pos + refraction.xy * (0.075 / (1.0 + length(fragpos) * 0.4)); diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 5a3eba72..bfd23922 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -91,8 +91,8 @@ sliders = SHADOW_DISTANCE_SLIDER SHADOW_QTY_SLIDER REFLECTION_SLIDER SHADOW_BLUR # Many values are precalculated to avoid their later or repetitive calculation. # Pixel size -uniform.float.pixel_size_x = 1.0 / viewWidth -uniform.float.pixel_size_y = 1.0 / viewHeight +uniform.float.pixelSizeX = 1.0 / viewWidth +uniform.float.pixelSizeY = 1.0 / viewHeight uniform.float.aspectRatioInverse = 1.0 / aspectRatio # Time constants @@ -165,7 +165,7 @@ uniform.int.frameMod = fmod(frameCounter, 16) frameMod == 13, -0.5, \ frameMod == 14, -0.5, \ frameMod == 15, 0.5, \ - 0.0)) * pixel_size_x, \ + 0.0)) * pixelSizeX, \ (if( \ frameMod == 0, 0.5, \ frameMod == 1, -0.5, \ @@ -183,7 +183,7 @@ uniform.int.frameMod = fmod(frameCounter, 16) frameMod == 13, -0.5, \ frameMod == 14, 0.5, \ frameMod == 15, -0.5, \ - 0.0)) * pixel_size_y) + 0.0)) * pixelSizeY) # Dither shift - When Temporal sampling is active, dithering patterns change over time. # This only works in recent versions of Minecraft/Optifine/Iris. @@ -222,7 +222,7 @@ blend.dh_water=SRC_ALPHA ONE_MINUS_SRC_ALPHA ONE ONE_MINUS_SRC_ALPHA #endif # BLOOM Mipmap level calculation -variable.float.soft_ref_height = 128.0 -variable.float.soft_lod_scale = max(1.0, viewHeight / soft_ref_height) +variable.float.softBaseSize = 128.0 +variable.float.softLodScale = max(1.0, viewHeight / softBaseSize) # Optifine use 'log'. Divide with ln(2) (0.69314718) -uniform.float.soft_lod = max(0.0, log(soft_lod_scale) / 0.69314718) \ No newline at end of file +uniform.float.softLod = max(0.0, log(softLodScale) / 0.69314718) \ No newline at end of file diff --git a/shaders/src/cloudfinalcolor.glsl b/shaders/src/cloudfinalcolor.glsl index 39438a2e..865e5d4f 100644 --- a/shaders/src/cloudfinalcolor.glsl +++ b/shaders/src/cloudfinalcolor.glsl @@ -3,14 +3,14 @@ blockColor.rgb = mix( blockColor.rgb, - texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), 0.0).rgb, + texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), 0.0).rgb, clamp(pow(gl_FogFragCoord / (far * 1.66), 1.5), 0.0, 1.0) ); #else blockColor.rgb = mix( blockColor.rgb, - texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), 0.0).rgb, + texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), 0.0).rgb, clamp(pow(gl_FogFragCoord / (2000.0), 1.5), 0.0, 1.0) ); #endif diff --git a/shaders/src/finalcolor.glsl b/shaders/src/finalcolor.glsl index ca8951aa..32a29e82 100644 --- a/shaders/src/finalcolor.glsl +++ b/shaders/src/finalcolor.glsl @@ -1,10 +1,10 @@ #if defined THE_END if(isEyeInWater == 0 && FOG_ADJUST < 15.0) { // In the air - blockColor.rgb = mix(blockColor.rgb, ZENITH_DAY_COLOR, frog_adjust); + blockColor.rgb = mix(blockColor.rgb, ZENITH_DAY_COLOR, frogAdjust); } #elif defined NETHER if(isEyeInWater == 0 && FOG_ADJUST < 15.0) { // In the air - blockColor.rgb = mix(blockColor.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frog_adjust); + blockColor.rgb = mix(blockColor.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frogAdjust); } #else #ifdef FOG_ACTIVE // Fog active @@ -13,18 +13,18 @@ if(darknessFactor > .01) { fog_texture = vec3(0.0); } else { - fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; + fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY)).rgb; } #else - vec3 fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; + vec3 fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY)).rgb; #endif #if defined GBUFFER_ENTITIES if(isEyeInWater == 0 && entityId != 10101 && FOG_ADJUST < 15.0) { // In the air - blockColor.rgb = mix(blockColor.rgb, fog_texture, frog_adjust); + blockColor.rgb = mix(blockColor.rgb, fog_texture, frogAdjust); } #else if(isEyeInWater == 0) { // In the air - blockColor.rgb = mix(blockColor.rgb, fog_texture, frog_adjust); + blockColor.rgb = mix(blockColor.rgb, fog_texture, frogAdjust); } #endif #endif diff --git a/shaders/src/finalcolor_dh.glsl b/shaders/src/finalcolor_dh.glsl index c6be58bf..d3efd088 100644 --- a/shaders/src/finalcolor_dh.glsl +++ b/shaders/src/finalcolor_dh.glsl @@ -1,15 +1,15 @@ #if defined DH_WATER if(isEyeInWater == 0) { - vec3 fog_texture = texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), 0.0).rgb; - blockColor.rgb = mix(blockColor.rgb, fog_texture, frog_adjust); + vec3 fog_texture = texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), 0.0).rgb; + blockColor.rgb = mix(blockColor.rgb, fog_texture, frogAdjust); } #elif defined NETHER #if NETHER_FOG_DISTANCE == 1 blockColor.rgb = mix(fogColor * 0.1, vec3(1.0), 0.04); #else - blockColor.rgb = mix(blockColor.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frog_adjust); + blockColor.rgb = mix(blockColor.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frogAdjust); #endif #else - vec3 fog_texture = texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), 0.0).rgb; - blockColor.rgb = mix(blockColor.rgb, fog_texture, frog_adjust); + vec3 fog_texture = texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), 0.0).rgb; + blockColor.rgb = mix(blockColor.rgb, fog_texture, frogAdjust); #endif \ No newline at end of file diff --git a/shaders/src/fog_vertex.glsl b/shaders/src/fog_vertex.glsl index ee427071..425500ee 100644 --- a/shaders/src/fog_vertex.glsl +++ b/shaders/src/fog_vertex.glsl @@ -11,16 +11,16 @@ ) * FOG_ADJUST; #endif - float fog_intensity_coeff = max(eye_bright_smooth.y * 0.004166666666666667, visibleSky); + float fogIntensityCoeff = max(eye_bright_smooth.y * 0.004166666666666667, visibleSky); #ifdef DISTANT_HORIZONS - frog_adjust = pow( - clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fog_intensity_coeff, + frogAdjust = pow( + clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fogIntensityCoeff, mix(fog_density_coeff * 0.15, 0.5, rainStrength) ); #else - frog_adjust = pow( - clamp(gl_FogFragCoord / far, 0.0, 1.0) * fog_intensity_coeff, + frogAdjust = pow( + clamp(gl_FogFragCoord / far, 0.0, 1.0) * fogIntensityCoeff, mix(fog_density_coeff, 1.0, rainStrength) ); #endif @@ -43,5 +43,5 @@ float sight = far; #endif #endif - frog_adjust = sqrt(clamp(gl_FogFragCoord / sight, 0.0, 1.0)); + frogAdjust = sqrt(clamp(gl_FogFragCoord / sight, 0.0, 1.0)); #endif diff --git a/shaders/src/fog_vertex_dh.glsl b/shaders/src/fog_vertex_dh.glsl index 032a469a..ccf9704f 100644 --- a/shaders/src/fog_vertex_dh.glsl +++ b/shaders/src/fog_vertex_dh.glsl @@ -1,9 +1,9 @@ #if !defined THE_END && !defined NETHER - float fog_intensity_coeff = max(eye_bright_smooth.y * 0.004166666666666667, visibleSky); - frog_adjust = pow( - clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fog_intensity_coeff, + float fogIntensityCoeff = max(eye_bright_smooth.y * 0.004166666666666667, visibleSky); + frogAdjust = pow( + clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fogIntensityCoeff, mix(fog_density_coeff * 0.15, 0.5, rainStrength) ); #else - frog_adjust = sqrt(clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0)); + frogAdjust = sqrt(clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0)); #endif \ No newline at end of file diff --git a/shaders/src/hi_sky.glsl b/shaders/src/hi_sky.glsl index 092dfd6c..3bc237e9 100644 --- a/shaders/src/hi_sky.glsl +++ b/shaders/src/hi_sky.glsl @@ -1,18 +1,18 @@ #ifdef UNKNOWN_DIM - vec3 hi_sky_color_rgb = skyColor; - hi_sky_color = rgb_to_xyz(hi_sky_color_rgb); + vec3 ZenithSkyColorRGB = skyColor; + ZenithSkyColor = rgb_to_xyz(ZenithSkyColorRGB); #else - vec3 hi_sky_color_rgb = dayBlend( + vec3 ZenithSkyColorRGB = dayBlend( ZENITH_SUNSET_COLOR, ZENITH_DAY_COLOR, ZENITH_NIGHT_COLOR ); - hi_sky_color_rgb = mix( - hi_sky_color_rgb, - ZENITH_SKY_RAIN_COLOR * luma(hi_sky_color_rgb), + ZenithSkyColorRGB = mix( + ZenithSkyColorRGB, + ZENITH_SKY_RAIN_COLOR * luma(ZenithSkyColorRGB), rainStrength ); - hi_sky_color = rgb_to_xyz(hi_sky_color_rgb); + ZenithSkyColor = rgb_to_xyz(ZenithSkyColorRGB); #endif \ No newline at end of file diff --git a/shaders/src/light_vertex.glsl b/shaders/src/light_vertex.glsl index c678f62d..4bc7f622 100644 --- a/shaders/src/light_vertex.glsl +++ b/shaders/src/light_vertex.glsl @@ -99,7 +99,7 @@ float omniStrength = ((directLightStrength + 1.0) * 0.25) + 0.75; directLightColor = mix(directLightColor, ZENITH_SKY_RAIN_COLOR * luma(directLightColor) * 0.4, rainStrength); // Minimal light - vec3 omniColor = mix(hi_sky_color_rgb, directLightColor * 0.45, OMNI_TINT); + vec3 omniColor = mix(ZenithSkyColorRGB, directLightColor * 0.45, OMNI_TINT); float omniColorLuma = colorAverage(omniColor); // --- OPTIMIZACIÓN #3: Prevenir división por cero --- float lumaRatio = AVOID_DARK_LEVEL / max(omniColorLuma, 0.0001); diff --git a/shaders/src/light_vertex_dh.glsl b/shaders/src/light_vertex_dh.glsl index 541b3fc0..79919764 100644 --- a/shaders/src/light_vertex_dh.glsl +++ b/shaders/src/light_vertex_dh.glsl @@ -65,7 +65,7 @@ directLightStrength = clamp(directLightStrength, 0.0, 1.0); directLightColor = mix(directLightColor, ZENITH_SKY_RAIN_COLOR * luma(directLightColor) * 0.4, rainStrength); // Minimal light - vec3 omniColor = mix(hi_sky_color_rgb, directLightColor * 0.45, OMNI_TINT); + vec3 omniColor = mix(ZenithSkyColorRGB, directLightColor * 0.45, OMNI_TINT); float omniColorLuma = colorAverage(omniColor); // --- OPTIMIZACIÓN #3: Prevenir división por cero --- diff --git a/shaders/src/low_sky.glsl b/shaders/src/low_sky.glsl index 447e675d..a230b1e6 100644 --- a/shaders/src/low_sky.glsl +++ b/shaders/src/low_sky.glsl @@ -1,18 +1,18 @@ #ifdef UNKNOWN_DIM - vec3 low_sky_color_rgb = fogColor; - low_sky_color = rgb_to_xyz(low_sky_color_rgb); + vec3 horizonSkyColorRGB = fogColor; + horizonSkyColor = rgb_to_xyz(horizonSkyColorRGB); #else - vec3 low_sky_color_rgb = dayBlend( + vec3 horizonSkyColorRGB = dayBlend( HORIZON_SUNSET_COLOR, HORIZON_DAY_COLOR, HORIZON_NIGHT_COLOR ); - low_sky_color_rgb = mix( - low_sky_color_rgb, - HORIZON_SKY_RAIN_COLOR * luma(low_sky_color_rgb), + horizonSkyColorRGB = mix( + horizonSkyColorRGB, + HORIZON_SKY_RAIN_COLOR * luma(horizonSkyColorRGB), rainStrength ); - low_sky_color = rgb_to_xyz(low_sky_color_rgb); + horizonSkyColor = rgb_to_xyz(horizonSkyColorRGB); #endif \ No newline at end of file diff --git a/shaders/src/position_vertex.glsl b/shaders/src/position_vertex.glsl index 1fd0324a..cb4cc02c 100644 --- a/shaders/src/position_vertex.glsl +++ b/shaders/src/position_vertex.glsl @@ -38,10 +38,10 @@ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; weight *= lmcoord.y * lmcoord.y; // Calculamos el DESPLAZAMIENTO y lo añadimos a la posición base ya calculada. - vec3 wave_offset_world = wave_move(worldpos.xzy) * weight * (0.03 + (rainStrength * .05)); - vec4 wave_offset_clip = gl_ModelViewProjectionMatrix * vec4(wave_offset_world, 0.0); + vec3 waveOffsetWorld = wave_move(worldpos.xzy) * weight * (0.03 + (rainStrength * .05)); + vec4 waveOffsetClip = gl_ModelViewProjectionMatrix * vec4(waveOffsetWorld, 0.0); - gl_Position += wave_offset_clip; + gl_Position += waveOffsetClip; } #endif } diff --git a/shaders/src/shadow_src_vertex.glsl b/shaders/src/shadow_src_vertex.glsl index 563f7057..8ef07baf 100644 --- a/shaders/src/shadow_src_vertex.glsl +++ b/shaders/src/shadow_src_vertex.glsl @@ -17,13 +17,13 @@ float NdotL; NdotL = clamp(NdotL, 0.0, 1.0); -vec3 shadow_world_normal = normalize(mat3(gbufferModelViewInverse) * normal); +vec3 shadowWorldNormal = normalize(mat3(gbufferModelViewInverse) * normal); -vec3 bias = shadow_world_normal * min(SHADOW_FIX_FACTOR + length(position.xyz) * 0.005, 0.5) * (2.0 - max(NdotL, 0.0)); -vec3 shadow_world = position.xyz + bias; +vec3 bias = shadowWorldNormal * min(SHADOW_FIX_FACTOR + length(position.xyz) * 0.005, 0.5) * (2.0 - max(NdotL, 0.0)); +vec3 shadowWorld = position.xyz + bias; -shadowPos = get_shadow_pos(shadow_world); +shadowPos = get_shadow_pos(shadowWorld); // --- OPTIMIZACIÓN: Reemplazar sqrt() y el costoso pow() --- vec2 shadow_diffuse_aux = shadowPos.xy * 2.0 - 1.0; @@ -33,6 +33,6 @@ float diffuse = length(shadow_diffuse_aux); float diffuse2 = diffuse * diffuse; float diffuse4 = diffuse2 * diffuse2; float diffuse8 = diffuse4 * diffuse4; -shadow_diffuse = diffuse8 * diffuse2; +shadowDiffuse = diffuse8 * diffuse2; -shadow_diffuse = clamp(shadow_diffuse, 0.0, 1.0); \ No newline at end of file +shadowDiffuse = clamp(shadowDiffuse, 0.0, 1.0); \ No newline at end of file diff --git a/shaders/src/taa_offset.glsl b/shaders/src/taa_offset.glsl index 18be6ffb..87939425 100644 --- a/shaders/src/taa_offset.glsl +++ b/shaders/src/taa_offset.glsl @@ -2,10 +2,10 @@ uniform vec2 taaOffset; #else uniform int frameMod; - uniform float pixel_size_x; - uniform float pixel_size_y; + uniform float pixelSizeX; + uniform float pixelSizeY; - vec2[16] offset_array = vec2[16] ( + vec2[16] offsetArray = vec2[16] ( vec2(0.5, 0.5), vec2(-0.5, -0.5), vec2(-0.5, 0.5), @@ -24,5 +24,5 @@ vec2(0.5, -0.5) ); - vec2 taaOffset = offset_array[frameMod] * vec2(pixel_size_x, pixel_size_y); + vec2 taaOffset = offsetArray[frameMod] * vec2(pixelSizeX, pixelSizeY); #endif From 3fd243271db7eb798a64bf3aee6f83e7563805e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 10 Jan 2026 23:28:19 -0600 Subject: [PATCH 106/147] Refactor XI --- shaders/common/composite2_fragment.glsl | 16 +-- shaders/common/composite_fragment.glsl | 4 +- shaders/common/composite_vertex.glsl | 4 +- shaders/common/damage_vertex.glsl | 1 - shaders/common/deferred_fragment.glsl | 16 +-- shaders/common/deferred_vertex.glsl | 14 +-- shaders/common/line_blocks_vertex.glsl | 2 +- shaders/common/prepare_fragment.glsl | 10 +- shaders/common/prepare_vertex.glsl | 6 +- shaders/common/skybasic_fragment.glsl | 10 +- shaders/common/skybasic_vertex.glsl | 6 +- shaders/common/solid_blocks_fragment.glsl | 40 +++---- shaders/common/solid_blocks_vertex.glsl | 8 +- shaders/common/solid_dh_blocks_fragment.glsl | 24 ++-- shaders/common/solid_dh_blocks_vertex.glsl | 4 +- shaders/common/solid_dh_water_fragment.glsl | 102 ++++++++--------- shaders/common/solid_dh_water_vertex.glsl | 12 +- shaders/common/water_blocks_fragment.glsl | 110 +++++++++---------- shaders/common/water_blocks_vertex.glsl | 20 ++-- shaders/lib/color_conversion.glsl | 60 +++++----- shaders/lib/fast_taa.glsl | 78 ++++++------- shaders/lib/fxaa.glsl | 2 +- shaders/lib/material_gloss_fragment.glsl | 4 +- shaders/lib/motion_blur.glsl | 2 +- shaders/lib/mu_ftransform.glsl | 2 +- shaders/lib/volumetric_clouds.glsl | 22 ++-- shaders/lib/volumetric_clouds_end.glsl | 10 +- shaders/lib/volumetric_clouds_vertex.glsl | 30 ++--- shaders/src/fog_vertex.glsl | 10 +- shaders/src/fog_vertex_dh.glsl | 4 +- shaders/src/hi_sky.glsl | 4 +- shaders/src/low_sky.glsl | 4 +- shaders/src/position_vertex.glsl | 8 +- shaders/src/position_vertex_dh.glsl | 4 +- 34 files changed, 326 insertions(+), 327 deletions(-) diff --git a/shaders/common/composite2_fragment.glsl b/shaders/common/composite2_fragment.glsl index 2d1ba5df..0fff2795 100644 --- a/shaders/common/composite2_fragment.glsl +++ b/shaders/common/composite2_fragment.glsl @@ -58,7 +58,7 @@ void main() { #if AA_TYPE > 0 || defined MOTION_BLUR // Retrojection of previous frame float z_depth = texture2DLod(depthtex1, texcoord, 0).r; - vec2 texcoord_past; + vec2 texcoordPast; vec3 curr_view_pos; vec3 curr_feet_player_pos; vec3 prev_feet_player_pos; @@ -66,7 +66,7 @@ void main() { vec2 final_pos; if(z_depth < 0.56) { - texcoord_past = texcoord; + texcoordPast = texcoord; } else { curr_view_pos = vec3(vec2(gbufferProjectionInverse[0].x, gbufferProjectionInverse[1].y) * (texcoord * 2.0 - 1.0) + gbufferProjectionInverse[3].xy, gbufferProjectionInverse[3].z); @@ -78,7 +78,7 @@ void main() { prev_view_pos = mat3(gbufferPreviousModelView) * prev_feet_player_pos + gbufferPreviousModelView[3].xyz; final_pos = vec2(gbufferPreviousProjection[0].x, gbufferPreviousProjection[1].y) * prev_view_pos.xy + gbufferPreviousProjection[3].xy; - texcoord_past = (final_pos / -prev_view_pos.z) * 0.5 + 0.5; + texcoordPast = (final_pos / -prev_view_pos.z) * 0.5 + 0.5; } #endif @@ -87,18 +87,18 @@ void main() { #if AA_TYPE > 0 float dither = shiftedDitherMakeup(gl_FragCoord.xy); #else - float dither = ditherMakeup(gl_FragCoord.xy); + float dither = ditherMakeup(gl_FragCoord.xy); #endif // "Speed" - vec2 velocity = texcoord - texcoord_past; - blockColor.rgb = motion_blur(blockColor.rgb, z_depth, velocity, dither, colortex1); + vec2 velocity = texcoord - texcoordPast; + blockColor.rgb = motionBlur(blockColor.rgb, z_depth, velocity, dither, colortex1); #endif #if AA_TYPE > 0 #ifdef DOF - blockColor = fast_taa_depth(blockColor, texcoord_past); + blockColor = fastTaaDepth(blockColor, texcoordPast); #else - blockColor.rgb = fast_taa(blockColor.rgb, texcoord_past); + blockColor.rgb = fastTaa(blockColor.rgb, texcoordPast); #endif blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index f3c1a3ea..d77a91f4 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -100,7 +100,7 @@ void main() { float d = texture2DLod(depthtex0, texcoord, 0).r; float linearDepth = ld(d); - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + vec2 eyeBrightSmoothFloat = vec2(eyeBrightnessSmooth); // Depth to distance float screen_distance = linearDepth * far * 0.5; @@ -110,7 +110,7 @@ void main() { float waterAbsorption = clamp(-pow((-linearDepth + 1.0), (4.0 + (WATER_ABSORPTION * 4.0))) + 1.0, 0.0, 1.0); blockColor.rgb = - mix(blockColor.rgb, WATER_COLOR * directLightColor * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), waterAbsorption); + mix(blockColor.rgb, WATER_COLOR * directLightColor * ((eyeBrightSmoothFloat.y * .8 + 48) * 0.004166666666666667), waterAbsorption); } else if(isEyeInWater == 2) { blockColor = mix(blockColor, vec4(1.0, .1, 0.0, 1.0), clamp(sqrt(linearDepth * far * 0.125), 0.0, 1.0)); diff --git a/shaders/common/composite_vertex.glsl b/shaders/common/composite_vertex.glsl index e6526327..63825265 100644 --- a/shaders/common/composite_vertex.glsl +++ b/shaders/common/composite_vertex.glsl @@ -65,7 +65,7 @@ void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; texcoord = gl_MultiTexCoord0.xy; - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + vec2 eyeBrightSmoothFloat = vec2(eyeBrightnessSmooth); directLightColor = dayBlend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); directLightColor = mix(directLightColor, ZENITH_SKY_RAIN_COLOR * luma(directLightColor), rainStrength); @@ -91,7 +91,7 @@ void main() { if(isEyeInWater == 0) { vol_attenuation = 1.0; } else { - vol_attenuation = 0.1 + (eye_bright_smooth.y * 0.002); + vol_attenuation = 0.1 + (eyeBrightSmoothFloat.y * 0.002); } volumetricLightColor = dayBlend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR) * 1.2 * vol_attenuation; diff --git a/shaders/common/damage_vertex.glsl b/shaders/common/damage_vertex.glsl index d8ed7e75..a3cbbfc4 100644 --- a/shaders/common/damage_vertex.glsl +++ b/shaders/common/damage_vertex.glsl @@ -7,7 +7,6 @@ uniform mat4 gbufferProjectionInverse; /* Ins / Outs */ varying vec2 texcoord; -varying float var_fog_frag_coord; /* Utility functions */ diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index 019a0c5d..2a17e449 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -64,16 +64,16 @@ uniform float pixelSizeY; /* Ins / Outs */ varying vec2 texcoord; -varying vec3 up_vec; // Flat +varying vec3 upVector; // Flat #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY varying float umbral; - varying vec3 cloud_color; - varying vec3 dark_cloud_color; + varying vec3 cloudColor; + varying vec3 darkCloudColor; #endif #if AO == 1 - varying float fog_density_coeff; + varying float fogDensityCoeff; #endif /* Utility functions */ @@ -110,7 +110,7 @@ void main() { float depth = texture2DLod(depthtex0, texcoord, 0).r; float linearDepth = ld(depth); - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + vec2 eyeBrightSmoothFloat = vec2(eyeBrightnessSmooth); vec3 eyeDirection = vec3(1.0); @@ -141,7 +141,7 @@ void main() { blockColor.rgb = get_end_cloud(eyeDirection, blockColor.rgb, bright, dither, cameraPosition, CLOUD_STEPS_AVG); #endif #else - blockColor.rgb = get_cloud(eyeDirection, blockColor.rgb, bright, dither, cameraPosition, CLOUD_STEPS_AVG, umbral, cloud_color, dark_cloud_color); + blockColor.rgb = get_cloud(eyeDirection, blockColor.rgb, bright, dither, cameraPosition, CLOUD_STEPS_AVG, umbral, cloudColor, darkCloudColor); #endif } @@ -174,7 +174,7 @@ void main() { } #endif float ao_att = - pow(clamp(linearDepth * 1.6, 0.0, 1.0), mix(fog_density_coeff, 1.0, rainStrength)); + pow(clamp(linearDepth * 1.6, 0.0, 1.0), mix(fogDensityCoeff, 1.0, rainStrength)); float final_ao = mix(dbao(dither), 1.0, ao_att); blockColor.rgb *= final_ao; @@ -189,7 +189,7 @@ void main() { // Underwater sky if(isEyeInWater == 1) { if(linearDepth > 0.9999) { - blockColor.rgb = mix(NIGHT_CORRECTION * WATER_COLOR * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), blockColor.rgb, max(clamp(eyeDirection.y - 0.1, 0.0, 1.0), rainStrength)); + blockColor.rgb = mix(NIGHT_CORRECTION * WATER_COLOR * ((eyeBrightSmoothFloat.y * .8 + 48) * 0.004166666666666667), blockColor.rgb, max(clamp(eyeDirection.y - 0.1, 0.0, 1.0), rainStrength)); } } diff --git a/shaders/common/deferred_vertex.glsl b/shaders/common/deferred_vertex.glsl index a29eed42..67bfcfe8 100644 --- a/shaders/common/deferred_vertex.glsl +++ b/shaders/common/deferred_vertex.glsl @@ -20,16 +20,16 @@ uniform mat4 gbufferModelView; /* Ins / Outs */ varying vec2 texcoord; -varying vec3 up_vec; +varying vec3 upVector; #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY varying float umbral; - varying vec3 cloud_color; - varying vec3 dark_cloud_color; + varying vec3 cloudColor; + varying vec3 darkCloudColor; #endif #if AO == 1 - varying float fog_density_coeff; + varying float fogDensityCoeff; #endif /* Utility functions */ @@ -43,13 +43,13 @@ varying vec3 up_vec; void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; texcoord = gl_MultiTexCoord0.xy; - up_vec = normalize(gbufferModelView[1].xyz); + upVector = normalize(gbufferModelView[1].xyz); #if AO == 1 #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - fog_density_coeff = FOG_DENSITY * FOG_ADJUST; + fogDensityCoeff = FOG_DENSITY * FOG_ADJUST; #else - fog_density_coeff = dayBlendFloat(FOG_SUNSET, FOG_DAY, FOG_NIGHT) * FOG_ADJUST; + fogDensityCoeff = dayBlendFloat(FOG_SUNSET, FOG_DAY, FOG_NIGHT) * FOG_ADJUST; #endif #endif diff --git a/shaders/common/line_blocks_vertex.glsl b/shaders/common/line_blocks_vertex.glsl index ca2a33a8..0cc489d1 100644 --- a/shaders/common/line_blocks_vertex.glsl +++ b/shaders/common/line_blocks_vertex.glsl @@ -21,7 +21,7 @@ varying vec4 tintColor; void main() { tintColor = gl_Color; - gl_Position = mu_ftransform(); + gl_Position = muFtransform(); #if AA_TYPE > 1 gl_Position.xy += taaOffset * gl_Position.w; diff --git a/shaders/common/prepare_fragment.glsl b/shaders/common/prepare_fragment.glsl index 2ff6d494..4a84f04f 100644 --- a/shaders/common/prepare_fragment.glsl +++ b/shaders/common/prepare_fragment.glsl @@ -19,8 +19,8 @@ uniform float rainStrength; /* Ins / Outs */ -varying vec3 up_vec; -varying vec3 ZenithSkyColor; +varying vec3 upVector; +varying vec3 zenithSkyColor; varying vec3 horizonSkyColor; /* Utility functions */ @@ -46,11 +46,11 @@ void main() { gbufferProjectionInverse * (vec4(gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), gl_FragCoord.z, 1.0) * 2.0 - 1.0); vec3 nfragpos = normalize(fragpos.xyz); - float n_u = clamp(dot(nfragpos, up_vec) + dither, 0.0, 1.0); + float n_u = clamp(dot(nfragpos, upVector) + dither, 0.0, 1.0); vec3 blockColor = - mix(horizonSkyColor, ZenithSkyColor, smoothstep(0.0, 1.0, pow(n_u, 0.333))); + mix(horizonSkyColor, zenithSkyColor, smoothstep(0.0, 1.0, pow(n_u, 0.333))); - blockColor = xyz_to_rgb(blockColor); + blockColor = xyzToRgb(blockColor); #endif #include "/src/writebuffers.glsl" diff --git a/shaders/common/prepare_vertex.glsl b/shaders/common/prepare_vertex.glsl index 48087d83..d30a9665 100644 --- a/shaders/common/prepare_vertex.glsl +++ b/shaders/common/prepare_vertex.glsl @@ -17,8 +17,8 @@ uniform float rainStrength; /* Ins / Outs */ -varying vec3 up_vec; -varying vec3 ZenithSkyColor; +varying vec3 upVector; +varying vec3 zenithSkyColor; varying vec3 horizonSkyColor; /* Utility functions */ @@ -33,5 +33,5 @@ void main() { #include "/src/hi_sky.glsl" #include "/src/low_sky.glsl" - up_vec = normalize(gbufferModelView[1].xyz); + upVector = normalize(gbufferModelView[1].xyz); } diff --git a/shaders/common/skybasic_fragment.glsl b/shaders/common/skybasic_fragment.glsl index 320b94c9..35059320 100644 --- a/shaders/common/skybasic_fragment.glsl +++ b/shaders/common/skybasic_fragment.glsl @@ -30,8 +30,8 @@ uniform float pixelSizeY; /* Ins / Outs */ #if MC_VERSION < 11604 - varying vec3 up_vec; - varying vec3 ZenithSkyColor; + varying vec3 upVector; + varying vec3 zenithSkyColor; varying vec3 horizonSkyColor; #endif @@ -70,9 +70,9 @@ void main() { gbufferProjectionInverse * (vec4(gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), gl_FragCoord.z, 1.0) * 2.0 - 1.0); vec3 nfragpos = normalize(fragpos.xyz); - float n_u = clamp(dot(nfragpos, up_vec) + dither, 0.0, 1.0); - vec4 background_color = vec4(mix(horizonSkyColor, ZenithSkyColor, smoothstep(0.0, 1.0, pow(n_u, 0.333))), 1.0); - background_color.rgb = xyz_to_rgb(background_color.rgb); + float n_u = clamp(dot(nfragpos, upVector) + dither, 0.0, 1.0); + vec4 background_color = vec4(mix(horizonSkyColor, zenithSkyColor, smoothstep(0.0, 1.0, pow(n_u, 0.333))), 1.0); + background_color.rgb = xyzToRgb(background_color.rgb); #else // Toma el color puro del bloque diff --git a/shaders/common/skybasic_vertex.glsl b/shaders/common/skybasic_vertex.glsl index a100ed18..714d5a62 100644 --- a/shaders/common/skybasic_vertex.glsl +++ b/shaders/common/skybasic_vertex.glsl @@ -23,8 +23,8 @@ uniform mat4 gbufferModelView; /* Ins / Outs */ #if MC_VERSION < 11604 - varying vec3 up_vec; - varying vec3 ZenithSkyColor; + varying vec3 upVector; + varying vec3 zenithSkyColor; varying vec3 horizonSkyColor; #endif @@ -60,7 +60,7 @@ void main() { #endif #if MC_VERSION < 11604 - up_vec = normalize(gbufferModelView[1].xyz); + upVector = normalize(gbufferModelView[1].xyz); #include "/src/hi_sky.glsl" #include "/src/low_sky.glsl" diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index f41b9667..3dd09397 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -103,7 +103,7 @@ varying vec3 omniLight; #if defined MATERIAL_GLOSS && !defined NETHER varying vec3 flatNormal; - varying vec3 sub_position3_normalized; + varying vec3 viewPositionNormalized; varying vec2 lmcoordAlt; varying float glossFactor; varying float glossPower; @@ -164,10 +164,10 @@ void main() { float block_luma = luma(blockColor.rgb); - vec3 final_candle_color = candleColor; + vec3 finalCandleColor = candleColor; #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND || defined GBUFFER_ENTITIES if(isEmissiveEntity > 0.5) { - final_candle_color *= block_luma * 1.5; + finalCandleColor *= block_luma * 1.5; } #endif @@ -198,14 +198,14 @@ void main() { #endif #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_real_pos, dither); - shadow_c = mix(shadow_c, vec3(1.0), shadowDiffuse); + vec3 shadowValue = get_colored_shadow(shadow_real_pos, dither); + shadowValue = mix(shadowValue, vec3(1.0), shadowDiffuse); #else - float shadow_c = get_shadow(shadow_real_pos, dither); - shadow_c = mix(shadow_c, 1.0, shadowDiffuse); + float shadowValue = get_shadow(shadow_real_pos, dither); + shadowValue = mix(shadowValue, 1.0, shadowDiffuse); #endif #else - float shadow_c = abs((dayNightMix * 2.0) - 1.0); + float shadowValue = abs((dayNightMix * 2.0) - 1.0); #endif #if defined GBUFFER_BEACONBEAM @@ -213,9 +213,9 @@ void main() { #elif defined GBUFFER_ENTITY_GLOW blockColor.rgb = clamp(vec3(luma(blockColor.rgb)) * vec3(0.75, 0.75, 1.5), vec3(0.3), vec3(1.0)); - vec3 real_light = omniLight + - (shadow_c * directLightColor * directLightStrength) * (1.0 - (rainStrength * 0.75)) + - final_candle_color; + vec3 realLight = omniLight + + (shadowValue * directLightColor * directLightStrength) * (1.0 - (rainStrength * 0.75)) + + finalCandleColor; #else #if defined MATERIAL_GLOSS && !defined NETHER float final_gloss_power = glossPower; @@ -227,19 +227,19 @@ void main() { block_luma = pow(block_luma, lumaPower); } - float material_gloss_factor = material_gloss(reflect(sub_position3_normalized, flatNormal), lmcoordAlt, final_gloss_power, flatNormal) * glossFactor; + float material_gloss_factor = materialGloss(reflect(viewPositionNormalized, flatNormal), lmcoordAlt, final_gloss_power, flatNormal) * glossFactor; float material = material_gloss_factor * block_luma; - vec3 real_light = omniLight + - (shadow_c * ((directLightColor * directLightStrength) + (directLightColor * material))) * (1.0 - (rainStrength * 0.75)) + - final_candle_color; + vec3 realLight = omniLight + + (shadowValue * ((directLightColor * directLightStrength) + (directLightColor * material))) * (1.0 - (rainStrength * 0.75)) + + finalCandleColor; #else - vec3 real_light = omniLight + - (shadow_c * directLightColor * directLightStrength) * (1.0 - (rainStrength * 0.75)) + - final_candle_color; + vec3 realLight = omniLight + + (shadowValue * directLightColor * directLightStrength) * (1.0 - (rainStrength * 0.75)) + + finalCandleColor; #endif - blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * 0.125); + blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * 0.125); blockColor.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); #endif @@ -248,7 +248,7 @@ void main() { // Thunderbolt render blockColor = vec4(1.0, 1.0, 1.0, 0.5); } else { - float entity_poderation = luma(real_light); // Red damage bright ponderation + float entity_poderation = luma(realLight); // Red damage bright ponderation blockColor.rgb = mix(blockColor.rgb, entityColor.rgb, entityColor.a * entity_poderation * 3.0); } #endif diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index c40124a1..1c6a24ea 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -98,7 +98,7 @@ varying vec3 omniLight; #if defined MATERIAL_GLOSS && !defined NETHER varying vec3 flatNormal; - varying vec3 sub_position3_normalized; + varying vec3 viewPositionNormalized; varying vec2 lmcoordAlt; varying float glossFactor; varying float glossPower; @@ -135,8 +135,8 @@ varying vec3 omniLight; // MAIN FUNCTION ------------------ void main() { - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - vec3 ZenithSkyColor; + vec2 eyeBrightSmoothFloat = vec2(eyeBrightnessSmooth); + vec3 zenithSkyColor; float visibleSky; #include "/src/basiccoords_vertex.glsl" @@ -194,7 +194,7 @@ void main() { } flatNormal = normal; - sub_position3_normalized = normalize(sub_position.xyz); + viewPositionNormalized = normalize(viewPosition.xyz); lmcoordAlt = lmcoord; #endif diff --git a/shaders/common/solid_dh_blocks_fragment.glsl b/shaders/common/solid_dh_blocks_fragment.glsl index ba383835..c7d1cb79 100644 --- a/shaders/common/solid_dh_blocks_fragment.glsl +++ b/shaders/common/solid_dh_blocks_fragment.glsl @@ -46,8 +46,8 @@ void main() { // Avoid render unnecessary DH float t = far - dhNearPlane; float inf = t * TRANSITION_DH_INF; - float view_dist = length(position.xyz); - if(view_dist < dhNearPlane + inf) { + float visibleDistance = length(position.xyz); + if(visibleDistance < dhNearPlane + inf) { discard; return; } @@ -55,24 +55,24 @@ void main() { vec4 blockColor = tintColor; // Synthetic pseudo-texture - vec3 synth_pos = (position.xyz + cameraPosition) * 6.0; - synth_pos = floor(synth_pos + 0.01); - float synth_noise = (hash13(synth_pos) - 0.5) * 0.1; - blockColor.rgb += vec3(synth_noise); + vec3 synthesisPosition = (position.xyz + cameraPosition) * 6.0; + synthesisPosition = floor(synthesisPosition + 0.01); + float syntheticNoise = (hash13(synthesisPosition) - 0.5) * 0.1; + blockColor.rgb += vec3(syntheticNoise); blockColor.rgb = clamp(blockColor.rgb, vec3(0.0), vec3(1.0)); float block_luma = luma(tintColor.rgb); - vec3 final_candle_color = candleColor; + vec3 finalCandleColor = candleColor; - float shadow_c = abs((dayNightMix * 2.0) - 1.0); + float shadowValue = abs((dayNightMix * 2.0) - 1.0); - vec3 real_light = + vec3 realLight = omniLight + - (shadow_c * directLightColor * directLightStrength) * (1.0 - (rainStrength * 0.75)) + - final_candle_color; + (shadowValue * directLightColor * directLightStrength) * (1.0 - (rainStrength * 0.75)) + + finalCandleColor; - blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * 0.125); + blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * 0.125); blockColor.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); diff --git a/shaders/common/solid_dh_blocks_vertex.glsl b/shaders/common/solid_dh_blocks_vertex.glsl index 4e198713..9fd4023f 100644 --- a/shaders/common/solid_dh_blocks_vertex.glsl +++ b/shaders/common/solid_dh_blocks_vertex.glsl @@ -58,9 +58,9 @@ varying float frogAdjust; // MAIN FUNCTION ------------------ void main() { - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + vec2 eyeBrightSmoothFloat = vec2(eyeBrightnessSmooth); float visibleSky; - vec3 ZenithSkyColor; + vec3 zenithSkyColor; #include "/src/basiccoords_vertex_dh.glsl" #include "/src/position_vertex_dh.glsl" diff --git a/shaders/common/solid_dh_water_fragment.glsl b/shaders/common/solid_dh_water_fragment.glsl index 491baf39..c00401d7 100644 --- a/shaders/common/solid_dh_water_fragment.glsl +++ b/shaders/common/solid_dh_water_fragment.glsl @@ -76,12 +76,12 @@ varying vec3 fragposition; varying vec3 tangent; varying vec3 binormal; varying vec3 waterNormal; -varying vec3 ZenithSkyColor; +varying vec3 zenithSkyColor; varying vec3 horizonSkyColor; -varying vec3 up_vec; +varying vec3 upVector; varying float visibleSky; varying vec2 lmcoord; -varying float block_type; +varying float blockType; varying float frogAdjust; /* Utility functions */ @@ -94,8 +94,8 @@ varying float frogAdjust; #include "/lib/luma.glsl" void main() { - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - vec3 real_light; + vec2 eyeBrightSmoothFloat = vec2(eyeBrightnessSmooth); + vec3 realLight; #if AA_TYPE > 0 float dither = shiftedRDither(gl_FragCoord.xy); @@ -107,109 +107,109 @@ void main() { // Avoid render unnecessary DH float t = far - dhNearPlane; float inf = t * TRANSITION_DH_INF; - float view_dist = length(position.xyz); + float visibleDistance = length(position.xyz); float d = texture2DLod(depthtex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight), 0.0).r; float linearDepth = ld(d); - if(linearDepth < 0.9999 || view_dist < dhNearPlane + inf) { + if(linearDepth < 0.9999 || visibleDistance < dhNearPlane + inf) { discard; return; } #ifdef VANILLA_WATER - vec3 water_normal_base = vec3(0.0, 0.0, 1.0); + vec3 waterNormalBase = vec3(0.0, 0.0, 1.0); #else vec3 mapPos = position.xyz + cameraPosition; - vec3 water_normal_base = normal_waves_dh(mapPos.xzy); + vec3 waterNormalBase = normal_waves_dh(mapPos.xzy); #endif - vec3 surface_normal; - if(block_type < DH_BLOCK_WATER + 0.5 && block_type > DH_BLOCK_WATER - 0.5) { // Water - surface_normal = get_normals(water_normal_base, fragposition); + vec3 surfaceNormal; + if(blockType < DH_BLOCK_WATER + 0.5 && blockType > DH_BLOCK_WATER - 0.5) { // Water + surfaceNormal = get_normals(waterNormalBase, fragposition); } else { - surface_normal = get_normals(vec3(0.0, 0.0, 1.0), fragposition); + surfaceNormal = get_normals(vec3(0.0, 0.0, 1.0), fragposition); } - float normal_dot_eye = dot(surface_normal, normalize(fragposition)); - float fresnel = squarePow(1.0 + normal_dot_eye); + float normalDotEye = dot(surfaceNormal, normalize(fragposition)); + float fresnel = squarePow(1.0 + normalDotEye); - vec3 reflect_water_vec = reflect(fragposition, surface_normal); - vec3 norm_reflect_water_vec = normalize(reflect_water_vec); + vec3 reflectWaterVector = reflect(fragposition, surfaceNormal); + vec3 normalizedReflectWaterVector = normalize(reflectWaterVector); - vec3 sky_color_reflect; + vec3 skyColorReflect; if(isEyeInWater == 0 || isEyeInWater == 2) { - sky_color_reflect = mix(horizonSkyColor, ZenithSkyColor, smoothstep(0.0, 1.0, pow(clamp(dot(norm_reflect_water_vec, up_vec), 0.0001, 1.0), 0.333))); + skyColorReflect = mix(horizonSkyColor, zenithSkyColor, smoothstep(0.0, 1.0, pow(clamp(dot(normalizedReflectWaterVector, upVector), 0.0001, 1.0), 0.333))); } else { - sky_color_reflect = ZenithSkyColor * .5 * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667); + skyColorReflect = zenithSkyColor * .5 * ((eyeBrightSmoothFloat.y * .8 + 48) * 0.004166666666666667); } - sky_color_reflect = xyz_to_rgb(sky_color_reflect); + skyColorReflect = xyzToRgb(skyColorReflect); #if !defined VANILLA_WATER && WATER_TEXTURE == 1 vec4 blockColor = vec4(0.1); // Synthetic water texture - vec3 synth_pos = (position.xyz + cameraPosition) * 8.0; - synth_pos = floor(synth_pos + 0.01); - float noise = hash13(synth_pos); + vec3 synthesisPosition = (position.xyz + cameraPosition) * 8.0; + synthesisPosition = floor(synthesisPosition + 0.01); + float noise = hash13(synthesisPosition); noise *= noise; noise *= noise; noise *= noise; - float synth_noise = (noise * 0.3) + 0.5; - blockColor.rgb += vec3(synth_noise); + float syntheticNoise = (noise * 0.3) + 0.5; + blockColor.rgb += vec3(syntheticNoise); #elif defined VANILLA_WATER // Synthetic water texture - vec3 synth_pos = (position.xyz + cameraPosition) * 8.0; - synth_pos = floor(synth_pos + 0.01); - float noise = hash13(synth_pos); + vec3 synthesisPosition = (position.xyz + cameraPosition) * 8.0; + synthesisPosition = floor(synthesisPosition + 0.01); + float noise = hash13(synthesisPosition); noise *= noise; noise *= noise; - float synth_noise = (noise * 0.227) + 0.773; - vec4 blockColor = vec4(vec3(synth_noise), tintColor.a); + float syntheticNoise = (noise * 0.227) + 0.773; + vec4 blockColor = vec4(vec3(syntheticNoise), tintColor.a); #else vec4 blockColor; #endif - if(block_type < DH_BLOCK_WATER + 0.5 && block_type > DH_BLOCK_WATER - 0.5) { // Water + if(blockType < DH_BLOCK_WATER + 0.5 && blockType > DH_BLOCK_WATER - 0.5) { // Water #ifdef VANILLA_WATER - float shadow_c = abs((dayNightMix * 2.0) - 1.0); + float shadowValue = abs((dayNightMix * 2.0) - 1.0); - float fresnel_tex = luma(blockColor.rgb); + float fresnelTex = luma(blockColor.rgb); - real_light = omniLight + - (directLightStrength * shadow_c * directLightColor) * (1.0 - rainStrength * 0.75) + + realLight = omniLight + + (directLightStrength * shadowValue * directLightColor) * (1.0 - rainStrength * 0.75) + candleColor; - real_light *= (fresnel_tex * 2.0) - 0.25; + realLight *= (fresnelTex * 2.0) - 0.25; - blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tintColor.rgb; + blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * .125) * tintColor.rgb; - blockColor.rgb = water_shader_dh(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visibleSky, dither, directLightColor); + blockColor.rgb = water_shader_dh(fragposition, surfaceNormal, blockColor.rgb, skyColorReflect, normalizedReflectWaterVector, fresnel, visibleSky, dither, directLightColor); blockColor.a = sqrt(blockColor.a); #else #if WATER_TEXTURE == 1 - float water_texture = luma(blockColor.rgb); + float waterTexture = luma(blockColor.rgb); #else - float water_texture = 1.0; + float waterTexture = 1.0; #endif - real_light = omniLight + + realLight = omniLight + (directLightStrength * visibleSky * directLightColor) * (1.0 - rainStrength * 0.75) + candleColor; #if WATER_COLOR_SOURCE == 0 - blockColor.rgb = water_texture * real_light * WATER_COLOR; + blockColor.rgb = waterTexture * realLight * WATER_COLOR; #elif WATER_COLOR_SOURCE == 1 - blockColor.rgb = 0.3 * water_texture * real_light * tintColor.rgb; + blockColor.rgb = 0.3 * waterTexture * realLight * tintColor.rgb; #endif - blockColor = vec4(refraction(fragposition, blockColor.rgb, water_normal_base), 1.0); + blockColor = vec4(refraction(fragposition, blockColor.rgb, waterNormalBase), 1.0); #if WATER_TEXTURE == 1 - fresnel = clamp(fresnel * (water_texture * water_texture + 0.5), 0.0, 1.0); + fresnel = clamp(fresnel * (waterTexture * waterTexture + 0.5), 0.0, 1.0); #endif - blockColor.rgb = water_shader_dh(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visibleSky, dither, directLightColor); + blockColor.rgb = water_shader_dh(fragposition, surfaceNormal, blockColor.rgb, skyColorReflect, normalizedReflectWaterVector, fresnel, visibleSky, dither, directLightColor); #endif @@ -217,13 +217,13 @@ void main() { blockColor = tintColor; - float shadow_c = abs((dayNightMix * 2.0) - 1.0); + float shadowValue = abs((dayNightMix * 2.0) - 1.0); - real_light = omniLight + - (directLightStrength * shadow_c * directLightColor) * (1.0 - rainStrength * 0.75) + + realLight = omniLight + + (directLightStrength * shadowValue * directLightColor) * (1.0 - rainStrength * 0.75) + candleColor; - blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * .125); + blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * .125); } #include "/src/finalcolor_dh.glsl" diff --git a/shaders/common/solid_dh_water_vertex.glsl b/shaders/common/solid_dh_water_vertex.glsl index 388d8264..b04d627d 100644 --- a/shaders/common/solid_dh_water_vertex.glsl +++ b/shaders/common/solid_dh_water_vertex.glsl @@ -48,12 +48,12 @@ varying vec3 fragposition; varying vec3 tangent; varying vec3 binormal; varying vec3 waterNormal; -varying vec3 ZenithSkyColor; +varying vec3 zenithSkyColor; varying vec3 horizonSkyColor; -varying vec3 up_vec; +varying vec3 upVector; varying float visibleSky; varying vec2 lmcoord; -varying float block_type; +varying float blockType; varying float frogAdjust; /* Utility functions */ @@ -68,7 +68,7 @@ varying float frogAdjust; // MAIN FUNCTION ------------------ void main() { - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + vec2 eyeBrightSmoothFloat = vec2(eyeBrightnessSmooth); #include "/src/basiccoords_vertex_dh.glsl" #include "/src/position_vertex_dh.glsl" @@ -84,9 +84,9 @@ void main() { tangent = normalize(gbufferModelView[0].xyz); waterNormal = normal; - up_vec = normalize(gbufferModelView[1].xyz); + upVector = normalize(gbufferModelView[1].xyz); if(dhMaterialId == DH_BLOCK_WATER) { // Water - block_type = float(DH_BLOCK_WATER); + blockType = float(DH_BLOCK_WATER); } } diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index 99b438f0..c1cc9686 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -89,7 +89,7 @@ varying vec2 lmcoord; varying vec4 tintColor; varying float frogAdjust; varying vec3 waterNormal; -varying float block_type; +varying float blockType; varying vec4 worldposition; varying vec3 fragposition; varying vec3 tangent; @@ -99,8 +99,8 @@ varying vec3 candleColor; varying float directLightStrength; varying vec3 omniLight; varying float visibleSky; -varying vec3 up_vec; -varying vec3 ZenithSkyColor; +varying vec3 upVector; +varying vec3 zenithSkyColor; varying vec3 horizonSkyColor; #if defined SHADOW_CASTING && !defined NETHER @@ -116,8 +116,8 @@ varying vec3 horizonSkyColor; #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY varying float umbral; - varying vec3 cloud_color; - varying vec3 dark_cloud_color; + varying vec3 cloudColor; + varying vec3 darkCloudColor; #endif /* Utility functions */ @@ -144,7 +144,7 @@ varying vec3 horizonSkyColor; // MAIN FUNCTION ------------------ void main() { - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + vec2 eyeBrightSmoothFloat = vec2(eyeBrightnessSmooth); #if SHADOW_TYPE == 1 || defined DISTANT_HORIZONS || (defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER) || SSR_TYPE > 0 #if AA_TYPE > 0 @@ -157,40 +157,40 @@ void main() { #endif vec4 blockColor; - vec3 real_light; + vec3 realLight; #ifdef VANILLA_WATER - vec3 water_normal_base = vec3(0.0, 0.0, 1.0); + vec3 waterNormalBase = vec3(0.0, 0.0, 1.0); #else - vec3 water_normal_base = normal_waves(worldposition.xzy); + vec3 waterNormalBase = normal_waves(worldposition.xzy); #endif - vec3 surface_normal; - if(block_type > 2.5) { // Water - surface_normal = get_normals(water_normal_base, fragposition); + vec3 surfaceNormal; + if(blockType > 2.5) { // Water + surfaceNormal = get_normals(waterNormalBase, fragposition); } else { - surface_normal = get_normals(vec3(0.0, 0.0, 1.0), fragposition); + surfaceNormal = get_normals(vec3(0.0, 0.0, 1.0), fragposition); } - float normal_dot_eye = dot(surface_normal, normalize(fragposition)); - float fresnel = squarePow(1.0 + normal_dot_eye); + float normalDotEye = dot(surfaceNormal, normalize(fragposition)); + float fresnel = squarePow(1.0 + normalDotEye); - vec3 reflect_water_vec = reflect(fragposition, surface_normal); - vec3 norm_reflect_water_vec = normalize(reflect_water_vec); + vec3 reflectWaterVector = reflect(fragposition, surfaceNormal); + vec3 normalizedReflectWaterVector = normalize(reflectWaterVector); - vec3 sky_color_reflect; + vec3 skyColorReflect; if(isEyeInWater == 0 || isEyeInWater == 2) { - sky_color_reflect = mix(horizonSkyColor, ZenithSkyColor, smoothstep(0.0, 1.0, pow(clamp(dot(norm_reflect_water_vec, up_vec), 0.0001, 1.0), 0.333))); + skyColorReflect = mix(horizonSkyColor, zenithSkyColor, smoothstep(0.0, 1.0, pow(clamp(dot(normalizedReflectWaterVector, upVector), 0.0001, 1.0), 0.333))); } else { - sky_color_reflect = ZenithSkyColor * .5 * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667); + skyColorReflect = zenithSkyColor * .5 * ((eyeBrightSmoothFloat.y * .8 + 48) * 0.004166666666666667); } - sky_color_reflect = xyz_to_rgb(sky_color_reflect); + skyColorReflect = xyzToRgb(skyColorReflect); #if defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER - sky_color_reflect = get_cloud(normalize((gbufferModelViewInverse * vec4(reflect_water_vec * far, 1.0)).xyz), sky_color_reflect, 0.0, dither, worldposition.xyz, int(CLOUD_STEPS_AVG * 0.5), umbral, cloud_color, dark_cloud_color); + skyColorReflect = get_cloud(normalize((gbufferModelViewInverse * vec4(reflectWaterVector * far, 1.0)).xyz), skyColorReflect, 0.0, dither, worldposition.xyz, int(CLOUD_STEPS_AVG * 0.5), umbral, cloudColor, darkCloudColor); #endif - if(block_type > 2.5) { // Water + if(blockType > 2.5) { // Water #ifdef VANILLA_WATER blockColor = texture2D(tex, texcoord); #if defined SHADOW_CASTING && !defined NETHER @@ -208,57 +208,57 @@ void main() { vec3 shadow_real_pos = shadowPos; #endif #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_real_pos, dither); - shadow_c = mix(shadow_c, vec3(1.0), shadowDiffuse); + vec3 shadowValue = get_colored_shadow(shadow_real_pos, dither); + shadowValue = mix(shadowValue, vec3(1.0), shadowDiffuse); #else - float shadow_c = get_shadow(shadow_real_pos, dither); - shadow_c = mix(shadow_c, 1.0, shadowDiffuse); + float shadowValue = get_shadow(shadow_real_pos, dither); + shadowValue = mix(shadowValue, 1.0, shadowDiffuse); #endif #else - float shadow_c = abs((dayNightMix * 2.0) - 1.0); + float shadowValue = abs((dayNightMix * 2.0) - 1.0); #endif - float fresnel_tex = luma(blockColor.rgb); + float fresnelTex = luma(blockColor.rgb); - real_light = omniLight + - (directLightStrength * shadow_c * directLightColor) * (1.0 - rainStrength * 0.75) + + realLight = omniLight + + (directLightStrength * shadowValue * directLightColor) * (1.0 - rainStrength * 0.75) + candleColor; - real_light *= (fresnel_tex * 2.0) - 0.25; + realLight *= (fresnelTex * 2.0) - 0.25; - blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tintColor.rgb; + blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * .125) * tintColor.rgb; - blockColor.rgb = water_shader(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visibleSky, dither, directLightColor); + blockColor.rgb = water_shader(fragposition, surfaceNormal, blockColor.rgb, skyColorReflect, normalizedReflectWaterVector, fresnel, visibleSky, dither, directLightColor); blockColor.a = sqrt(blockColor.a); #else #if WATER_TEXTURE == 1 blockColor = texture2D(tex, texcoord); - float water_texture = luma(blockColor.rgb); + float waterTexture = luma(blockColor.rgb); #else - float water_texture = 1.0; + float waterTexture = 1.0; #endif - real_light = omniLight + + realLight = omniLight + (directLightStrength * visibleSky * directLightColor) * (1.0 - rainStrength * 0.75) + candleColor; #if WATER_COLOR_SOURCE == 0 - blockColor.rgb = water_texture * real_light * WATER_COLOR; + blockColor.rgb = waterTexture * realLight * WATER_COLOR; #elif WATER_COLOR_SOURCE == 1 - blockColor.rgb = 0.3 * water_texture * real_light * tintColor.rgb; + blockColor.rgb = 0.3 * waterTexture * realLight * tintColor.rgb; #endif - blockColor = vec4(refraction(fragposition, blockColor.rgb, water_normal_base), 1.0); + blockColor = vec4(refraction(fragposition, blockColor.rgb, waterNormalBase), 1.0); #if WATER_TEXTURE == 1 - water_texture += 0.25; - water_texture *= water_texture; - water_texture *= water_texture; - fresnel = clamp(fresnel * (water_texture), 0.0, 1.0); + waterTexture += 0.25; + waterTexture *= waterTexture; + waterTexture *= waterTexture; + fresnel = clamp(fresnel * (waterTexture), 0.0, 1.0); #endif - blockColor.rgb = water_shader(fragposition, surface_normal, blockColor.rgb, sky_color_reflect, norm_reflect_water_vec, fresnel, visibleSky, dither, directLightColor); + blockColor.rgb = water_shader(fragposition, surfaceNormal, blockColor.rgb, skyColorReflect, normalizedReflectWaterVector, fresnel, visibleSky, dither, directLightColor); #endif @@ -269,24 +269,24 @@ void main() { #if defined SHADOW_CASTING && !defined NETHER #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadowPos, dither); - shadow_c = mix(shadow_c, vec3(1.0), shadowDiffuse); + vec3 shadowValue = get_colored_shadow(shadowPos, dither); + shadowValue = mix(shadowValue, vec3(1.0), shadowDiffuse); #else - float shadow_c = get_shadow(shadowPos, dither); - shadow_c = mix(shadow_c, 1.0, shadowDiffuse); + float shadowValue = get_shadow(shadowPos, dither); + shadowValue = mix(shadowValue, 1.0, shadowDiffuse); #endif #else - float shadow_c = abs((dayNightMix * 2.0) - 1.0); + float shadowValue = abs((dayNightMix * 2.0) - 1.0); #endif - real_light = omniLight + - (directLightStrength * shadow_c * directLightColor) * (1.0 - rainStrength * 0.75) + + realLight = omniLight + + (directLightStrength * shadowValue * directLightColor) * (1.0 - rainStrength * 0.75) + candleColor; - blockColor.rgb *= mix(real_light, vec3(1.0), nightVision * .125); + blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * .125); - if(block_type > 1.5) { // Glass - blockColor = cristal_shader(fragposition, waterNormal, blockColor, sky_color_reflect, fresnel * fresnel, visibleSky, dither, directLightColor); + if(blockType > 1.5) { // Glass + blockColor = cristal_shader(fragposition, waterNormal, blockColor, skyColorReflect, fresnel * fresnel, visibleSky, dither, directLightColor); } } diff --git a/shaders/common/water_blocks_vertex.glsl b/shaders/common/water_blocks_vertex.glsl index 596c0cfa..a34ad6d3 100644 --- a/shaders/common/water_blocks_vertex.glsl +++ b/shaders/common/water_blocks_vertex.glsl @@ -54,7 +54,7 @@ varying vec2 lmcoord; varying vec4 tintColor; varying float frogAdjust; varying vec3 waterNormal; -varying float block_type; +varying float blockType; varying vec4 worldposition; varying vec3 fragposition; varying vec3 tangent; @@ -64,8 +64,8 @@ varying vec3 candleColor; varying float directLightStrength; varying vec3 omniLight; varying float visibleSky; -varying vec3 up_vec; -varying vec3 ZenithSkyColor; +varying vec3 upVector; +varying vec3 zenithSkyColor; varying vec3 horizonSkyColor; #if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER @@ -81,8 +81,8 @@ varying vec3 horizonSkyColor; #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY varying float umbral; - varying vec3 cloud_color; - varying vec3 dark_cloud_color; + varying vec3 cloudColor; + varying vec3 darkCloudColor; #endif attribute vec4 mc_Entity; @@ -107,7 +107,7 @@ attribute vec4 at_tangent; // MAIN FUNCTION ------------------ void main() { - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + vec2 eyeBrightSmoothFloat = vec2(eyeBrightnessSmooth); #include "/src/basiccoords_vertex.glsl" #include "/src/position_vertex_water.glsl" @@ -124,14 +124,14 @@ void main() { binormal = normalize(gl_NormalMatrix * -cross(gl_Normal, at_tangent.xyz)); // Special entities - block_type = 0.0; // 3 - Water, 2 - Glass, ? - Other + blockType = 0.0; // 3 - Water, 2 - Glass, ? - Other if(mc_Entity.x == ENTITY_WATER) { // Water - block_type = 3.0; + blockType = 3.0; } else if(mc_Entity.x == ENTITY_STAINED) { // Glass - block_type = 2.0; + blockType = 2.0; } - up_vec = normalize(gbufferModelView[1].xyz); + upVector = normalize(gbufferModelView[1].xyz); #include "/src/fog_vertex.glsl" diff --git a/shaders/lib/color_conversion.glsl b/shaders/lib/color_conversion.glsl index febd4d0c..a453a2ce 100644 --- a/shaders/lib/color_conversion.glsl +++ b/shaders/lib/color_conversion.glsl @@ -1,20 +1,20 @@ -vec3 rgb_to_xyz(vec3 rgb) { +vec3 rgbToXyz(vec3 rgb) { vec3 xyz; vec3 rgb2 = rgb; vec3 mask = vec3(greaterThan(rgb, vec3(0.04045))); rgb2 = mix(rgb2 / 12.92, pow((rgb2 + 0.055) / 1.055, vec3(2.4)), mask); - const mat3 rgb_to_xyz_matrix = mat3( + const mat3 rgbToXyzMatrix = mat3( 0.4124564, 0.3575761, 0.1804375, 0.2126729, 0.7151522, 0.0721750, 0.0193339, 0.1191920, 0.9503041 ); - xyz = rgb_to_xyz_matrix * rgb2; + xyz = rgbToXyzMatrix * rgb2; return xyz; } -vec3 xyz_to_lab(vec3 xyz) { +vec3 xyzToLab(vec3 xyz) { vec3 xyz2 = xyz / vec3(0.95047, 1.0, 1.08883); vec3 mask = vec3(greaterThan(xyz2, vec3(0.008856))); xyz2 = mix(7.787 * xyz2 + 16.0 / 116.0, pow(xyz2, vec3(1.0 / 3.0)), mask); @@ -26,7 +26,7 @@ vec3 xyz_to_lab(vec3 xyz) { return vec3(L, a, b); } -vec3 lab_to_xyz(vec3 lab) { +vec3 labToXyz(vec3 lab) { float L = lab.x; float a = lab.y; float b = lab.z; @@ -42,21 +42,21 @@ vec3 lab_to_xyz(vec3 lab) { return xyz * vec3(0.95047, 1.0, 1.08883); } -vec3 xyz_to_rgb(vec3 xyz) { - const mat3 xyz_to_rgb_matrix = mat3( +vec3 xyzToRgb(vec3 xyz) { + const mat3 xyzToRgbMatrix = mat3( 3.2404542, -1.5371385, -0.4985314, -0.9692660, 1.8760108, 0.0415560, 0.0556434, -0.2040259, 1.0572252 ); - vec3 rgb = xyz_to_rgb_matrix * xyz; + vec3 rgb = xyzToRgbMatrix * xyz; vec3 mask = vec3(greaterThan(rgb, vec3(0.0031308))); rgb = mix(12.92 * rgb, 1.055 * pow(rgb, vec3(1.0 / 2.4)) - 0.055, mask); return clamp(rgb, 0.0, 1.0); } -vec3 rgb2hsv(vec3 c) { +vec3 rgbToHsv(vec3 c) { vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r)); @@ -65,7 +65,7 @@ vec3 rgb2hsv(vec3 c) { return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); } -vec3 hsv2rgb(vec3 c) { +vec3 hsvToRgb(vec3 c) { vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); @@ -75,7 +75,7 @@ vec3 hsv2rgb(vec3 c) { // Funciones auxiliares para la corrección gamma (sRGB <-> Lineal) // Convierte un canal de sRGB a RGB lineal -float srgb_to_linear(float c) { +float srgbToLinear(float c) { if (c <= 0.04045) { return c / 12.92; } else { @@ -84,16 +84,16 @@ float srgb_to_linear(float c) { } // Convierte un vector de sRGB a RGB lineal -vec3 srgb_to_linear(vec3 c) { +vec3 srgbToLinear(vec3 c) { return vec3( - srgb_to_linear(c.r), - srgb_to_linear(c.g), - srgb_to_linear(c.b) + srgbToLinear(c.r), + srgbToLinear(c.g), + srgbToLinear(c.b) ); } // Convierte un canal de RGB lineal a sRGB -float linear_to_srgb(float c) { +float linearToSrgb(float c) { if (c <= 0.0031308) { return c * 12.92; } else { @@ -102,11 +102,11 @@ float linear_to_srgb(float c) { } // Convierte un vector de RGB lineal a sRGB -vec3 linear_to_srgb(vec3 c) { +vec3 linearToSrgb(vec3 c) { return vec3( - linear_to_srgb(c.r), - linear_to_srgb(c.g), - linear_to_srgb(c.b) + linearToSrgb(c.r), + linearToSrgb(c.g), + linearToSrgb(c.b) ); } @@ -137,20 +137,20 @@ const mat3 INV_M2 = mat3( // ----- FUNCIÓN PRINCIPAL DE CONVERSIÓN RGB -> OKLAB ----- -vec3 rgb_to_oklab(vec3 c) { +vec3 rgbToOklab(vec3 c) { // 1. Convertir de sRGB a RGB lineal - vec3 linear_rgb = srgb_to_linear(c); - vec3 lms = M1 * linear_rgb; - vec3 lms_cubed = pow(lms, vec3(1.0/3.0)); - return M2 * lms_cubed; + vec3 linearRgb = srgbToLinear(c); + vec3 lms = M1 * linearRgb; + vec3 lmsCubed = pow(lms, vec3(1.0/3.0)); + return M2 * lmsCubed; } // ----- FUNCIÓN PRINCIPAL DE CONVERSIÓN OKLAB -> RGB ----- -vec3 oklab_to_rgb(vec3 c) { - vec3 lms_cubed = INV_M2 * c; - vec3 lms = pow(lms_cubed, vec3(3.0)); - vec3 linear_rgb = INV_M1 * lms; +vec3 oklabToRgb(vec3 c) { + vec3 lmsCubed = INV_M2 * c; + vec3 lms = pow(lmsCubed, vec3(3.0)); + vec3 linearRgb = INV_M1 * lms; - return linear_to_srgb(linear_rgb); + return linearToSrgb(linearRgb); } diff --git a/shaders/lib/fast_taa.glsl b/shaders/lib/fast_taa.glsl index 788b6bc1..935c00ba 100644 --- a/shaders/lib/fast_taa.glsl +++ b/shaders/lib/fast_taa.glsl @@ -4,31 +4,31 @@ Temporal antialiasing functions. Javier Garduño - GNU Lesser General Public License v3.0 */ -vec4 convex_hull( +vec4 convexHull( vec3 c, vec3 previous, vec3 up, vec3 down, vec3 left, vec3 right, vec3 ul, vec3 ur, vec3 dl, vec3 dr) { // Cálculo de varianza vec3 sum = c + up + down + left + right + ul + ur + dl + dr; vec3 sum_sq = - c*c + - up*up + - down*down + - left*left + - right*right + - ul*ul + - ur*ur + - dl*dl + - dr*dr; + c * c + + up * up + + down * down + + left * left + + right * right + + ul * ul + + ur * ur + + dl * dl + + dr * dr; vec3 mean = sum * 0.1111111111111111; // 1 / 9 vec3 variance = abs(sum_sq * 0.1111111111111111 - mean * mean); // Varianza = E[x^2] - E[x]^2 - vec3 std_dev = sqrt(variance); - vec3 min_valid = mean - std_dev; - vec3 max_valid = mean + std_dev; + vec3 stdDev = sqrt(variance); + vec3 minValid = mean - stdDev; + vec3 maxValid = mean + stdDev; - return vec4(clamp(previous, min_valid, max_valid), distance(min_valid, max_valid)); + return vec4(clamp(previous, minValid, maxValid), distance(minValid, maxValid)); } // float edge_detector( @@ -93,13 +93,13 @@ vec4 convex_hull( // return smoothstep(relative_threshold, relative_threshold + smoothness, max_lineness); // } -vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { +vec3 fastTaa(vec3 currentColor, vec2 texcoordPast) { // Verificamos si proyección queda fuera de la pantalla actual - if (clamp(texcoord_past, 0.0, 1.0) != texcoord_past) { - return current_color; + if (clamp(texcoordPast, 0.0, 1.0) != texcoordPast) { + return currentColor; } else { // Previous color - vec3 previous = texture2DLod(colortex3, texcoord_past, 0.0).rgb; + vec3 previous = texture2DLod(colortex3, texcoordPast, 0.0).rgb; vec3 left = texture2DLod(colortex1, texcoord + vec2(-pixelSizeX, 0.0), 0.0).rgb; vec3 right = texture2DLod(colortex1, texcoord + vec2(pixelSizeX, 0.0), 0.0).rgb; @@ -110,12 +110,12 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { vec3 dl = texture2DLod(colortex1, texcoord + vec2(-pixelSizeX, -pixelSizeY), 0.0).rgb; vec3 dr = texture2DLod(colortex1, texcoord + vec2(pixelSizeX, -pixelSizeY), 0.0).rgb; - vec3 c_max = max(max(max(left, right), down),max(up, max(ul, max(ur, max(dl, max(dr, current_color)))))); - vec3 c_min = min(min(min(left, right), down),min(up, min(ul, min(ur, min(dl, min(dr, current_color)))))); + vec3 colorMax = max(max(max(left, right), down),max(up, max(ul, max(ur, max(dl, max(dr, currentColor)))))); + vec3 colorMin = min(min(min(left, right), down),min(up, min(ul, min(ur, min(dl, min(dr, currentColor)))))); // Clip 3 - vec4 previous_cliped = convex_hull( - current_color, + vec4 previousClipped = convexHull( + currentColor, previous, up, down, @@ -127,25 +127,25 @@ vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { dr ); - float ponderation = clamp((distance(c_max, c_min) - previous_cliped.a) / previous_cliped.a, 0.0, 1.0); + float ponderation = clamp((distance(colorMax, colorMin) - previousClipped.a) / previousClipped.a, 0.0, 1.0); #ifdef MOTION_BLUR - float velocity = length(texcoord - texcoord_past) * 10.0; - return mix(current_color, previous_cliped.rgb, clamp(0.99 - velocity - (smoothstep(0.0, 1.0, ponderation) * 0.33), 0.0, 1.0)); + float velocity = length(texcoord - texcoordPast) * 10.0; + return mix(currentColor, previousClipped.rgb, clamp(0.99 - velocity - (smoothstep(0.0, 1.0, ponderation) * 0.33), 0.0, 1.0)); #else - return mix(current_color, previous_cliped.rgb, 0.99 - (smoothstep(0.0, 1.0, ponderation) * 0.33)); + return mix(currentColor, previousClipped.rgb, 0.99 - (smoothstep(0.0, 1.0, ponderation) * 0.33)); #endif - // return mix(current_color, previous_cliped.rgb, 0.01); + // return mix(currentColor, previousClipped.rgb, 0.01); } } -vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { +vec4 fastTaaDepth(vec4 currentColor, vec2 texcoordPast) { // Verificamos si proyección queda fuera de la pantalla actual - if (clamp(texcoord_past, 0.0, 1.0) != texcoord_past) { - return current_color; + if (clamp(texcoordPast, 0.0, 1.0) != texcoordPast) { + return currentColor; } else { // Muestra del pasado - vec4 previous = texture2DLod(colortex3, texcoord_past, 0.0); + vec4 previous = texture2DLod(colortex3, texcoordPast, 0.0); vec4 left = texture2DLod(colortex1, texcoord + vec2(-pixelSizeX, 0.0), 0.0); vec4 right = texture2DLod(colortex1, texcoord + vec2(pixelSizeX, 0.0), 0.0); @@ -156,12 +156,12 @@ vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { vec4 dl = texture2DLod(colortex1, texcoord + vec2(-pixelSizeX, -pixelSizeY), 0.0); vec4 dr = texture2DLod(colortex1, texcoord + vec2(pixelSizeX, -pixelSizeY), 0.0); - vec3 c_max = max(max(max(left.rgb, right.rgb), down.rgb),max(up.rgb, max(ul.rgb, max(ur.rgb, max(dl.rgb, max(dr.rgb, current_color.rgb)))))); - vec3 c_min = min(min(min(left.rgb, right.rgb), down.rgb),min(up.rgb, min(ul.rgb, min(ur.rgb, min(dl.rgb, min(dr.rgb, current_color.rgb)))))); + vec3 colorMax = max(max(max(left.rgb, right.rgb), down.rgb),max(up.rgb, max(ul.rgb, max(ur.rgb, max(dl.rgb, max(dr.rgb, currentColor.rgb)))))); + vec3 colorMin = min(min(min(left.rgb, right.rgb), down.rgb),min(up.rgb, min(ul.rgb, min(ur.rgb, min(dl.rgb, min(dr.rgb, currentColor.rgb)))))); // Clip 3 - vec4 previous_cliped = convex_hull( - current_color.rgb, + vec4 previousClipped = convexHull( + currentColor.rgb, previous.rgb, up.rgb, down.rgb, @@ -173,13 +173,13 @@ vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { dr.rgb ); - float ponderation = clamp((distance(c_max, c_min) - previous_cliped.a) / previous_cliped.a, 0.0, 1.0); + float ponderation = clamp((distance(colorMax, colorMin) - previousClipped.a) / previousClipped.a, 0.0, 1.0); #ifdef MOTION_BLUR - float velocity = length(texcoord - texcoord_past) * 10.0; - return mix(current_color, vec4(previous_cliped.rgb, previous.a), clamp(0.99 - velocity - (smoothstep(0.0, 1.0, ponderation) * 0.33), 0.0, 1.0)); + float velocity = length(texcoord - texcoordPast) * 10.0; + return mix(currentColor, vec4(previousClipped.rgb, previous.a), clamp(0.99 - velocity - (smoothstep(0.0, 1.0, ponderation) * 0.33), 0.0, 1.0)); #else - return mix(current_color, vec4(previous_cliped.rgb, previous.a), 0.99 - (smoothstep(0.0, 1.0, ponderation) * 0.33)); + return mix(currentColor, vec4(previousClipped.rgb, previous.a), 0.99 - (smoothstep(0.0, 1.0, ponderation) * 0.33)); #endif } } diff --git a/shaders/lib/fxaa.glsl b/shaders/lib/fxaa.glsl index 3715b955..aec7a9c1 100644 --- a/shaders/lib/fxaa.glsl +++ b/shaders/lib/fxaa.glsl @@ -1,4 +1,4 @@ -/* MakeUp Ultra Fast - fxaa_intel.glsl +/* MakeUp Ultra Fast - fxaa.glsl FXAA 3.11 from Simon Rodriguez http://blog.simonrodriguez.fr/articles/30-07-2016_implementing_fxaa.html diff --git a/shaders/lib/material_gloss_fragment.glsl b/shaders/lib/material_gloss_fragment.glsl index c463e3d3..ad5d9a7c 100644 --- a/shaders/lib/material_gloss_fragment.glsl +++ b/shaders/lib/material_gloss_fragment.glsl @@ -1,5 +1,5 @@ #if defined THE_END - float material_gloss(vec3 reflectedVector, vec2 lmcoordAlt, float glossPower, vec3 flatNormal) { + float materialGloss(vec3 reflectedVector, vec2 lmcoordAlt, float glossPower, vec3 flatNormal) { vec3 astroLightPos = (gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; float astroAlignment = max(dot(normalize(reflectedVector), normalize(astroLightPos)), 0.0) * step(0.0001, dot(astroLightPos, flatNormal)); @@ -11,7 +11,7 @@ ); } #else - float material_gloss(vec3 reflectedVector, vec2 lmcoordAlt, float glossPower, vec3 flatNormal) { + float materialGloss(vec3 reflectedVector, vec2 lmcoordAlt, float glossPower, vec3 flatNormal) { vec3 astroLightPos = mix(-sunPosition, sunPosition, dayNightMix); float astroAlignment = max(dot(normalize(reflectedVector), normalize(astroLightPos)), 0.0) * diff --git a/shaders/lib/motion_blur.glsl b/shaders/lib/motion_blur.glsl index 37f32ff8..ccce7ab8 100644 --- a/shaders/lib/motion_blur.glsl +++ b/shaders/lib/motion_blur.glsl @@ -4,7 +4,7 @@ Motion blur functions. Javier Garduño - GNU Lesser General Public License v3.0 */ -vec3 motion_blur(vec3 color, float depthAlone, vec2 blur_velocity, float dither, sampler2D image) { +vec3 motionBlur(vec3 color, float depthAlone, vec2 blur_velocity, float dither, sampler2D image) { if (depthAlone > 0.7) { // No hand vec2 double_pixels = 2.0 * vec2(pixelSizeX, pixelSizeY); vec3 m_blur = vec3(0.0); diff --git a/shaders/lib/mu_ftransform.glsl b/shaders/lib/mu_ftransform.glsl index a903bccd..a4489094 100644 --- a/shaders/lib/mu_ftransform.glsl +++ b/shaders/lib/mu_ftransform.glsl @@ -1,4 +1,4 @@ -vec4 mu_ftransform() { +vec4 muFtransform() { float lineWidth = 2.0; vec2 screenSize = vec2(viewWidth, viewHeight); mat4 VIEW_SCALE = mat4(mat3(1.0 - 0.00390625)); diff --git a/shaders/lib/volumetric_clouds.glsl b/shaders/lib/volumetric_clouds.glsl index 98e46157..9374a24c 100644 --- a/shaders/lib/volumetric_clouds.glsl +++ b/shaders/lib/volumetric_clouds.glsl @@ -2,7 +2,7 @@ Fast volumetric clouds - MakeUp implementation */ -vec3 get_cloud_old(vec3 eyeDirection, vec3 blockColor, float bright, float dither, vec3 base_pos, int samples, float umbral, vec3 cloud_color, vec3 dark_cloud_color) { +vec3 get_cloud_old(vec3 eyeDirection, vec3 blockColor, float bright, float dither, vec3 base_pos, int samples, float umbral, vec3 cloudColor, vec3 darkCloudColor) { float plane_distance; float cloud_value; float density; @@ -126,18 +126,18 @@ vec3 get_cloud_old(vec3 eyeDirection, vec3 blockColor, float bright, float dithe float att_factor = mix(1.0, 0.75, bright * (1.0 - rainStrength)); #if CLOUD_VOL_STYLE == 1 - cloud_color = mix(cloud_color * att_factor, dark_cloud_color * att_factor, pow(density, 0.3) * 0.85); + cloudColor = mix(cloudColor * att_factor, darkCloudColor * att_factor, pow(density, 0.3) * 0.85); #else - cloud_color = mix(cloud_color * att_factor, dark_cloud_color * att_factor, pow(density, 0.4)); + cloudColor = mix(cloudColor * att_factor, darkCloudColor * att_factor, pow(density, 0.4)); #endif // Halo brillante de contra al sol - cloud_color = - mix(cloud_color, cloud_color * 13.0, (1.0 - pow(cloud_value, 0.2)) * bright * bright * (1.0 - rainStrength)); + cloudColor = + mix(cloudColor, cloudColor * 13.0, (1.0 - pow(cloud_value, 0.2)) * bright * bright * (1.0 - rainStrength)); blockColor = mix( blockColor, - cloud_color, + cloudColor, cloud_value * clamp((eyeDirection.y - 0.06) * 5.0, 0.0, 1.0) ); } @@ -145,7 +145,7 @@ vec3 get_cloud_old(vec3 eyeDirection, vec3 blockColor, float bright, float dithe return blockColor; } -vec3 get_cloud(vec3 eyeDirection, vec3 blockColor, float bright, float dither, vec3 base_pos, int samples, float umbral, vec3 cloud_color, vec3 dark_cloud_color) { +vec3 get_cloud(vec3 eyeDirection, vec3 blockColor, float bright, float dither, vec3 base_pos, int samples, float umbral, vec3 cloudColor, vec3 darkCloudColor) { #if VOL_LIGHT == 0 blockColor.rgb *= clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; #endif @@ -234,15 +234,15 @@ vec3 get_cloud(vec3 eyeDirection, vec3 blockColor, float bright, float dither, v float density_approx = sqrt(sqrt(density)); // x^0.25 #if CLOUD_VOL_STYLE == 1 - cloud_color = mix(cloud_color * att_factor, dark_cloud_color * att_factor, density_approx * 0.85); + cloudColor = mix(cloudColor * att_factor, darkCloudColor * att_factor, density_approx * 0.85); #else - cloud_color = mix(cloud_color * att_factor, dark_cloud_color * att_factor, sqrt(density)); + cloudColor = mix(cloudColor * att_factor, darkCloudColor * att_factor, sqrt(density)); #endif float cloud_value_approx = sqrt(sqrt(cloud_value)); - cloud_color = mix(cloud_color, cloud_color * 13.0, (1.0 - cloud_value_approx) * bright * bright * (1.0 - rainStrength)); + cloudColor = mix(cloudColor, cloudColor * 13.0, (1.0 - cloud_value_approx) * bright * bright * (1.0 - rainStrength)); - blockColor = mix(blockColor, cloud_color, cloud_value * clamp((eyeDirection.y - 0.06) * 5.0, 0.0, 1.0)); + blockColor = mix(blockColor, cloudColor, cloud_value * clamp((eyeDirection.y - 0.06) * 5.0, 0.0, 1.0)); } return blockColor; diff --git a/shaders/lib/volumetric_clouds_end.glsl b/shaders/lib/volumetric_clouds_end.glsl index 006e2881..dc72f777 100644 --- a/shaders/lib/volumetric_clouds_end.glsl +++ b/shaders/lib/volumetric_clouds_end.glsl @@ -15,8 +15,8 @@ vec3 get_end_cloud(vec3 eyeDirection, vec3 blockColor, float bright, float dithe if (eyeDirection.y > 0.0) { // Vista sobre el horizonte float umbral = 0.25; - vec3 cloud_color = blockColor * 1.75; - vec3 dark_cloud_color = blockColor * 0.9; + vec3 cloudColor = blockColor * 1.75; + vec3 darkCloudColor = blockColor * 0.9; float view_y_inv = 1.0 / eyeDirection.y; @@ -87,10 +87,10 @@ vec3 get_end_cloud(vec3 eyeDirection, vec3 blockColor, float bright, float dithe cloud_value = clamp(cloud_value / opacity_dist, 0.0, 1.0); density = clamp(density, 0.0001, 1.0); - cloud_color = mix(cloud_color, dark_cloud_color, sqrt(density)); - cloud_color = mix(cloud_color, cloud_color * 2.0, (1.0 - cloud_value) * bright); + cloudColor = mix(cloudColor, darkCloudColor, sqrt(density)); + cloudColor = mix(cloudColor, cloudColor * 2.0, (1.0 - cloud_value) * bright); - blockColor = mix(blockColor, cloud_color, cloud_value * clamp((eyeDirection.y - 0.06) * 5.0, 0.0, 1.0)); + blockColor = mix(blockColor, cloudColor, cloud_value * clamp((eyeDirection.y - 0.06) * 5.0, 0.0, 1.0)); blockColor = mix(blockColor, vec3(1.0), clamp(bright * .04, 0.0, 1.0)); } diff --git a/shaders/lib/volumetric_clouds_vertex.glsl b/shaders/lib/volumetric_clouds_vertex.glsl index 2a43ebc9..f38170bd 100644 --- a/shaders/lib/volumetric_clouds_vertex.glsl +++ b/shaders/lib/volumetric_clouds_vertex.glsl @@ -4,30 +4,30 @@ umbral = (smoothstep(1.0, 0.0, rainStrength) * .3) + .55; #endif -dark_cloud_color = dayBlend( +darkCloudColor = dayBlend( ZENITH_SUNSET_COLOR, ZENITH_DAY_COLOR, ZENITH_NIGHT_COLOR ); -dark_cloud_color = mix( - dark_cloud_color, - ZENITH_SKY_RAIN_COLOR * colorAverage(dark_cloud_color), +darkCloudColor = mix( + darkCloudColor, + ZENITH_SKY_RAIN_COLOR * colorAverage(darkCloudColor), rainStrength ); -vec3 cloud_color_aux = mix( +vec3 cloudColor_aux = mix( dayBlend( LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR * vec3(0.5, 0.6, 0.75) ), - ZENITH_SKY_RAIN_COLOR * colorAverage(dark_cloud_color), + ZENITH_SKY_RAIN_COLOR * colorAverage(darkCloudColor), rainStrength ); -cloud_color = mix( - clamp(mix(vec3(luma(cloud_color_aux)), cloud_color_aux, 0.5) * vec3(1.5), 0.0, 1.4), +cloudColor = mix( + clamp(mix(vec3(luma(cloudColor_aux)), cloudColor_aux, 0.5) * vec3(1.5), 0.0, 1.4), dayBlend( HORIZON_SUNSET_COLOR, HORIZON_DAY_COLOR, @@ -36,16 +36,16 @@ cloud_color = mix( 0.3 ); -cloud_color = mix(cloud_color, HORIZON_SKY_RAIN_COLOR * luma(cloud_color_aux) * 5.0, rainStrength); +cloudColor = mix(cloudColor, HORIZON_SKY_RAIN_COLOR * luma(cloudColor_aux) * 5.0, rainStrength); -dark_cloud_color = mix(dark_cloud_color, cloud_color, 0.22); +darkCloudColor = mix(darkCloudColor, cloudColor, 0.22); -dark_cloud_color = mix( - dark_cloud_color, +darkCloudColor = mix( + darkCloudColor, dayBlend( - cloud_color_aux, - dark_cloud_color, - dark_cloud_color + cloudColor_aux, + darkCloudColor, + darkCloudColor ), 0.4 ); \ No newline at end of file diff --git a/shaders/src/fog_vertex.glsl b/shaders/src/fog_vertex.glsl index 425500ee..5a45744d 100644 --- a/shaders/src/fog_vertex.glsl +++ b/shaders/src/fog_vertex.glsl @@ -2,26 +2,26 @@ // Fog intensity calculation #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - float fog_density_coeff = FOG_DENSITY * FOG_ADJUST; + float fogDensityCoeff = FOG_DENSITY * FOG_ADJUST; #else - float fog_density_coeff = dayBlendFloat( + float fogDensityCoeff = dayBlendFloat( FOG_SUNSET, FOG_DAY, FOG_NIGHT ) * FOG_ADJUST; #endif - float fogIntensityCoeff = max(eye_bright_smooth.y * 0.004166666666666667, visibleSky); + float fogIntensityCoeff = max(eyeBrightSmoothFloat.y * 0.004166666666666667, visibleSky); #ifdef DISTANT_HORIZONS frogAdjust = pow( clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fogIntensityCoeff, - mix(fog_density_coeff * 0.15, 0.5, rainStrength) + mix(fogDensityCoeff * 0.15, 0.5, rainStrength) ); #else frogAdjust = pow( clamp(gl_FogFragCoord / far, 0.0, 1.0) * fogIntensityCoeff, - mix(fog_density_coeff, 1.0, rainStrength) + mix(fogDensityCoeff, 1.0, rainStrength) ); #endif diff --git a/shaders/src/fog_vertex_dh.glsl b/shaders/src/fog_vertex_dh.glsl index ccf9704f..3ea3d9c6 100644 --- a/shaders/src/fog_vertex_dh.glsl +++ b/shaders/src/fog_vertex_dh.glsl @@ -1,8 +1,8 @@ #if !defined THE_END && !defined NETHER - float fogIntensityCoeff = max(eye_bright_smooth.y * 0.004166666666666667, visibleSky); + float fogIntensityCoeff = max(eyeBrightSmoothFloat.y * 0.004166666666666667, visibleSky); frogAdjust = pow( clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fogIntensityCoeff, - mix(fog_density_coeff * 0.15, 0.5, rainStrength) + mix(fogDensityCoeff * 0.15, 0.5, rainStrength) ); #else frogAdjust = sqrt(clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0)); diff --git a/shaders/src/hi_sky.glsl b/shaders/src/hi_sky.glsl index 3bc237e9..9c3c9944 100644 --- a/shaders/src/hi_sky.glsl +++ b/shaders/src/hi_sky.glsl @@ -1,6 +1,6 @@ #ifdef UNKNOWN_DIM vec3 ZenithSkyColorRGB = skyColor; - ZenithSkyColor = rgb_to_xyz(ZenithSkyColorRGB); + zenithSkyColor = rgbToXyz(ZenithSkyColorRGB); #else vec3 ZenithSkyColorRGB = dayBlend( ZENITH_SUNSET_COLOR, @@ -14,5 +14,5 @@ rainStrength ); - ZenithSkyColor = rgb_to_xyz(ZenithSkyColorRGB); + zenithSkyColor = rgbToXyz(ZenithSkyColorRGB); #endif \ No newline at end of file diff --git a/shaders/src/low_sky.glsl b/shaders/src/low_sky.glsl index a230b1e6..38d7cced 100644 --- a/shaders/src/low_sky.glsl +++ b/shaders/src/low_sky.glsl @@ -1,6 +1,6 @@ #ifdef UNKNOWN_DIM vec3 horizonSkyColorRGB = fogColor; - horizonSkyColor = rgb_to_xyz(horizonSkyColorRGB); + horizonSkyColor = rgbToXyz(horizonSkyColorRGB); #else vec3 horizonSkyColorRGB = dayBlend( HORIZON_SUNSET_COLOR, @@ -14,5 +14,5 @@ rainStrength ); - horizonSkyColor = rgb_to_xyz(horizonSkyColorRGB); + horizonSkyColor = rgbToXyz(horizonSkyColorRGB); #endif \ No newline at end of file diff --git a/shaders/src/position_vertex.glsl b/shaders/src/position_vertex.glsl index cb4cc02c..816c9008 100644 --- a/shaders/src/position_vertex.glsl +++ b/shaders/src/position_vertex.glsl @@ -14,8 +14,8 @@ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; mc_Entity.x == ENTITY_SMALLENTS_NW ); - vec4 sub_position = gl_ModelViewMatrix * gl_Vertex; - vec4 position = gbufferModelViewInverse * sub_position; + vec4 viewPosition = gl_ModelViewMatrix * gl_Vertex; + vec4 position = gbufferModelViewInverse * viewPosition; if (isFoliageEntity) { isFoliage = 0.4; @@ -48,10 +48,10 @@ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; #else // Lógica para cuando no es un shader con follaje (p. ej. entidades) - vec4 sub_position = gl_ModelViewMatrix * gl_Vertex; + vec4 viewPosition = gl_ModelViewMatrix * gl_Vertex; #ifndef NO_SHADOWS #ifdef SHADOW_CASTING - vec4 position = gbufferModelViewInverse * sub_position; + vec4 position = gbufferModelViewInverse * viewPosition; #endif #endif diff --git a/shaders/src/position_vertex_dh.glsl b/shaders/src/position_vertex_dh.glsl index 6888dba4..436db233 100644 --- a/shaders/src/position_vertex_dh.glsl +++ b/shaders/src/position_vertex_dh.glsl @@ -12,9 +12,9 @@ gl_Position = dhProjection * gbufferModelView * position; // Fog intensity calculation #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - float fog_density_coeff = FOG_DENSITY * FOG_ADJUST; + float fogDensityCoeff = FOG_DENSITY * FOG_ADJUST; #else - float fog_density_coeff = dayBlendFloat( + float fogDensityCoeff = dayBlendFloat( FOG_SUNSET, FOG_DAY, FOG_NIGHT From 604f5417d28f86e92c1b5409b0db276d32f85e82 Mon Sep 17 00:00:00 2001 From: ximossi <116030901+abrossimow@users.noreply.github.com> Date: Sat, 17 Jan 2026 12:16:22 +0100 Subject: [PATCH 107/147] added natures_spirit and farmersrespite blocks to list --- shaders/block.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/shaders/block.properties b/shaders/block.properties index 1c1373c7..f250af99 100644 --- a/shaders/block.properties +++ b/shaders/block.properties @@ -3,10 +3,10 @@ #if MC_VERSION >= 11300 # GRASS LIKE ENTITIES - block.10031 = minecraft:cherry_sapling minecraft:torchflower minecraft:short_grass minecraft:grass minecraft:fern minecraft:seagrass biomesoplenty:dune_grass biomesoplenty:dead_grass biomesoplenty:desert_grass biomesoplenty:sprout biomesoplenty:bush environmental:mycelium_sprouts upgrade_aquatic:blue_pickerelweed upgrade_aquatic:purple_pickerelweed byg:beach_grass byg:clover_patch byg:flower_patch byg:horseweed byg:leaf_pile byg:prairie_grass byg:reeds byg:short_beach_grass byg:short_grass byg:tall_prairie_grass byg:weed_grass byg:wilted_grass byg:winter_grass ecotones:clover ecotones:reeds ecotones:sandy_grass ecotones:short_grass terrestria:cattail terrestria:dead_grass terrestria:sakura_leaf_pile terrestria:tall_cattail wildworld:acacia_leaf_pile wildworld:birch_leaf_pile wildworld:dark_oak_leaf_pile wildworld:jungle_leaf_pile wildworld:oak_leaf_pile wildworld:spruce_leaf_pile biomesoplenty:bush minecraft:nether_sprouts minecraft:warped_roots minecraft:crimson_roots projectvibrantjourneys:beach_grass projectvibrantjourneys:short_grass minecraft:oak_sapling minecraft:spruce_sapling minecraft:birch_sapling minecraft:jungle_sapling minecraft:acacia_sapling minecraft:dark_oak_sapling minecraft:dead_bush minecraft:dandelion minecraft:poppy minecraft:blue_orchid minecraft:allium minecraft:azure_bluet minecraft:red_tulip minecraft:orange_tulip minecraft:white_tulip minecraft:pink_tulip minecraft:oxeye_daisy minecraft:cornflower minecraft:lily_of_the_valley minecraft:wither_rose minecraft:sweet_berry_bush biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom atmospheric:rosewood_sapling atmospheric:morado_sapling atmospheric:yucca_sapling atmospheric:kousa_sapling atmospheric:aspen_sapling atmospheric:grimwood_sapling atmospheric:warm_monkey_brush atmospheric:hot_monkey_brush atmospheric:scalding_monkey_brush atmospheric:yucca_flower atmospheric:gilia autumnity:red_maple_sapling autumnity:orange_maple_sapling autumnity:yellow_maple_sapling autumnity:maple_sapling autumnity:autumn_crocus earthmobsmod:buttercup environmental:willow_sapling environmental:cherry_sapling environmental:pink_wisteria_sapling environmental:blue_wisteria_sapling environmental:purple_wisteria_sapling environmental:white_wisteria_sapling farmersdelight:wild_cabbages farmersdelight:wild_onions farmersdelight:wild_tomatoes farmersdelight:wild_carrots farmersdelight:wild_potatoes farmersdelight:wild_beetroots neapolitan:small_banana_frond neapolitan:banana_frond neapolitan:large_banana_frond upgrade_aquatic:river_sapling upgrade_aquatic:beachgrass upgrade_aquatic:white_searocket upgrade_aquatic:pink_searocket environmental:cattail environmental:cartwheel environmental:bluebell environmental:violet environmental:dianthus environmental:red_lotus_flower environmental:white_lotus_flower environmental:yellow_hibiscus environmental:orange_hibiscus environmental:red_hibiscus environmental:pink_hibiscus environmental:magenta_hibiscus environmental:purple_hibiscus buzzier_bees:buttercup buzzier_bees:white_clover buzzier_bees:pink_clover neapolitan:strawberry_pips biomesoplenty:origin_sapling biomesoplenty:flowering_oak_sapling biomesoplenty:rainbow_birch_sapling biomesoplenty:yellow_autumn_sapling biomesoplenty:orange_autumn_sapling biomesoplenty:maple_sapling biomesoplenty:fir_sapling biomesoplenty:redwood_sapling biomesoplenty:white_cherry_sapling biomesoplenty:pink_cherry_sapling biomesoplenty:mahogany_sapling biomesoplenty:jacaranda_sapling biomesoplenty:palm_sapling biomesoplenty:willow_sapling biomesoplenty:dead_sapling biomesoplenty:magic_sapling biomesoplenty:umbran_sapling biomesoplenty:hellbark_sapling astralsorcery:glow_flower botania:white_mystical_flower botania:gray_mystical_flower botania:orange_mystical_flower botania:magenta_mystical_flower botania:light_blue_mystical_flower botania:light_gray_mystical_flower botania:yellow_mystical_flower botania:lime_mystical_flower botania:pink_mystical_flower botania:cyan_mystical_flower botania:purple_mystical_flower botania:blue_mystical_flower botania:brown_mystical_flower botania:green_mystical_flower botania:red_mystical_flower botania:black_mystical_flower botania:white_mushroom botania:orange_mushroom botania:magenta_mushroom botania:light_blue_mushroom botania:yellow_mushroom botania:lime_mushroom botania:pink_mushroom botania:gray_mushroom botania:light_gray_mushroom botania:cyan_mushroom botania:purple_mushroom botania:blue_mushroom botania:brown_mushroom botania:green_mushroom botania:red_mushroom botania:black_mushroom botania:hydroangeas botania:manastar botania:pure_daisy botania:endoflame botania:thermalily botania:rosa_arcana botania:munchdew botania:entropinnyum botania:kekimurus botania:gourmaryllis botania:narslimmus botania:spectrolus botania:dandelifeon botania:rafflowsia botania:shulk_me_not botania:bellethorn botania:bellethorn_chibi botania:bergamute botania:dreadthorn botania:heisei_dream botania:tigerseye botania:jaded_amaranthus botania:orechid botania:fallen_kanade botania:exoflame botania:agricarnation botania:agricarnation_chibi botania:hopperhock botania:hopperhock_chibi botania:tangleberrie botania:jiyuulia botania:rannuncarpus botania:rannuncarpus_chibi botania:hyacidus botania:pollidisiac botania:clayconia botania:clayconia_chibi botania:loonium botania:daffomill botania:vinculotus botania:spectranthemum botania:medumone botania:marimorphosis botania:marimorphosis_chibi botania:bubbell botania:bubbell_chibi botania:solegnolia botania:solegnolia_chibi botania:orechid_ignem terrestria:tiny_cactus pamhc2trees:apple_sapling pamhc2trees:avocado_sapling pamhc2trees:candlenut_sapling pamhc2trees:cherry_sapling pamhc2trees:chestnut_sapling pamhc2trees:gooseberry_sapling pamhc2trees:lemon_sapling pamhc2trees:nutmeg_sapling pamhc2trees:orange_sapling pamhc2trees:peach_sapling pamhc2trees:pear_sapling pamhc2trees:plum_sapling pamhc2trees:walnut_sapling pamhc2trees:spiderweb_sapling pamhc2trees:hazelnut_sapling pamhc2trees:pawpaw_sapling pamhc2trees:soursop_sapling pamhc2trees:almond_sapling pamhc2trees:apricot_sapling pamhc2trees:banana_sapling pamhc2trees:cashew_sapling pamhc2trees:cinnamon_sapling pamhc2trees:coconut_sapling pamhc2trees:date_sapling pamhc2trees:dragonfruit_sapling pamhc2trees:durian_sapling pamhc2trees:fig_sapling pamhc2trees:grapefruit_sapling pamhc2trees:lime_sapling pamhc2trees:mango_sapling pamhc2trees:olive_sapling pamhc2trees:papaya_sapling pamhc2trees:paperbark_sapling pamhc2trees:pecan_sapling pamhc2trees:peppercorn_sapling pamhc2trees:persimmon_sapling pamhc2trees:pistachio_sapling pamhc2trees:pomegranate_sapling pamhc2trees:starfruit_sapling pamhc2trees:vanillabean_sapling pamhc2trees:breadfruit_sapling pamhc2trees:guava_sapling pamhc2trees:jackfruit_sapling pamhc2trees:lychee_sapling pamhc2trees:passionfruit_sapling pamhc2trees:rambutan_sapling pamhc2trees:tamarind_sapling pamhc2trees:maple_sapling pamhc2trees:pinenut_sapling byg:purple_bulbis_anomaly byg:blue_bulbis_anomaly byg:embur_wart byg:cryptic_bramble biomesoplenty:glowshroom biomesoplenty:toadstool biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom biomesoplenty:mangrove_root biomesoplenty:reed biomesoplenty:sprout biomesoplenty:bush pamhc2crops:aridgarden pamhc2crops:frostgarden pamhc2crops:shadedgarden pamhc2crops:soggygarden pamhc2crops:tropicalgarden pamhc2crops:windygarden pamhc2crops:pamamaranthcrop pamhc2crops:pambarleycrop pamhc2crops:pambeancrop pamhc2crops:pamchickpeacrop pamhc2crops:pamcorncrop pamhc2crops:pamlentilcrop pamhc2crops:pammilletcrop pamhc2crops:pamoatcrop pamhc2crops:pamquinoacrop pamhc2crops:pamricecrop pamhc2crops:pamryecrop pamhc2crops:pamsoybeancrops pamhc2crops:pamcottoncrop pamhc2crops:pamflaxcrop pamhc2crops:pamkenafcrop pamhc2crops:pamjutecrop pamhc2crops:pamsisalcrop pamhc2crops:pamartichokecrop pamhc2crops:pamasparaguscrop pamhc2crops:pambellpeppercrop pamhc2crops:pambroccolicrop pamhc2crops:pambrusselsproutcrop pamhc2crops:pamcabbagecrop pamhc2crops:pamcauliflowercrop pamhc2crops:pamcelerycrop pamhc2crops:pamchilipeppercrop pamhc2crops:pamcucumbercrop pamhc2crops:pameggplantcrop pamhc2crops:pamkalecrops pamhc2crops:pamlettucecrop pamhc2crops:pamokracrop pamhc2crops:pampeascrop pamhc2crops:pamspinachcrop pamhc2crops:pamtomatillocrop pamhc2crops:pamtomatocrop pamhc2crops:pamwintersquashcrop pamhc2crops:pamzucchinicrop pamhc2crops:pamarrowrootcrop pamhc2crops:pamcassavacrop pamhc2crops:pamgarliccrop pamhc2crops:pamjicamacrop pamhc2crops:pamleekcrop pamhc2crops:pamkohlrabicrop pamhc2crops:pamonioncrop pamhc2crops:pamparsnipcrop pamhc2crops:pampeanutcrop pamhc2crops:pamradishcrop pamhc2crops:pamrhubarbcrop pamhc2crops:pamrutabagacrop pamhc2crops:pamscallioncrop pamhc2crops:pamsweetpotatocrop pamhc2crops:pamtarocrop pamhc2crops:pamturnipcrop pamhc2crops:pamwaterchestnutcrop pamhc2crops:pamblackberrycrop pamhc2crops:pamblueberrycrop pamhc2crops:pamcactusfruitcrop pamhc2crops:pamcandleberrycrop pamhc2crops:pamcantaloupecrop pamhc2crops:pamcranberrycrop pamhc2crops:pamelderberrycrop pamhc2crops:pamgrapecrop pamhc2crops:pamgreengrapecrop pamhc2crops:pamhuckleberrycrop pamhc2crops:pamjuniperberrycrop pamhc2crops:pamkiwicrop pamhc2crops:pammullberrycrop pamhc2crops:pampineapplecrop pamhc2crops:pamraspberrycrop pamhc2crops:pamstrawberrycrop pamhc2crops:pamcoffeebeancrop pamhc2crops:pamtealeafcrop pamhc2crops:pamagavecrop pamhc2crops:pamwhitemushroomcrop pamhc2crops:pamgingercrop pamhc2crops:pamsesamecrop pamhc2crops:pamspiceleafcrop pamhc2crops:pammustardcrop byg:lament_sprouts byg:synthian_fungus byg:blue_glowcane byg:pink_glowcane byg:purple_glowcane byg:red_glowcane byg:warped_bush byg:blue_glowshroom byg:purple_glowshroom byg:scorched_bush byg:soul_shroom byg:soul_shroom_spore_end byg:death_cap byg:weeping_roots byg:nether_bristle byg:synthian_sprout byg:synthian_roots byg:hanging_synthian_roots byg:embur_sprouts byg:embur_roots byg:ivis_roots byg:ivis_sprout byg:bulbis_sprouts byg:ether_bush byg:thereal_bellflower byg:nightshade_sprouts byg:nightshade_roots byg:oddity_bush byg:shulkren_fungus byg:vermillion_sculk_tendrils byg:vermillion_sculk_growth byg:green_mushroom byg:weeping_milkcap byg:wood_blewit byg:black_puff byg:crimson_berry_bush byg:blueberry_bush byg:nightshade_berry_bush byg:winter_succulent byg:allium_flower_bush byg:alpine_bellflower byg:amaranth byg:angelica byg:begonia byg:bistort byg:black_rose byg:blue_sage byg:california_poppy byg:crocus byg:cyan_amaranth byg:cyan_rose byg:cyan_tulip byg:daffodil byg:fairy_slipper byg:firecracker_flower_bush byg:green_tulip byg:guzmania byg:incan_lily byg:iris byg:kovan_flower byg:lazarus_bellflower byg:lolipop_flower byg:magenta_amaranth byg:magenta_tulip byg:orange_amaranth byg:orange_daisy byg:osiria_rose byg:peach_leather_flower byg:pink_allium byg:pink_allium_flower_bush byg:pink_anemone byg:pink_daffodil byg:pink_orchid byg:protea_flower byg:purple_amaranth byg:purple_orchid byg:purple_sage byg:purple_tulip byg:red_cornflower byg:red_orchid byg:richea byg:rose byg:snowdrops byg:silver_vase_flower byg:torch_ginger byg:violet_leather_flower byg:white_anemone byg:white_sage byg:white_cyclamen byg:winter_rose byg:winter_scilla byg:yellow_daffodil byg:yellow_tulip byg:horseweed byg:winter_cyclamen cutecore:cherry_leaf_litter cutecore:cherry_wood_sapling cutecore:wisteria_sapling cutecore:wisteria_leaf_litter cutecore:lemon_leaf_litter cutecore:lemon_sapling cutecore:hyacinth cutecore:lotus_flower cutecore:violets cutecore:pink_rose cutecore:white_rose cutecore:rose cutecore:forget_me_nots cutecore:pink_carnation cutecore:red_carnation cutecore:white_carnation forbidden_arcanus:yellow_orchid forbidden_arcanus:golden_orchid immersiveengineering:hemp:growth=bottom0 immersiveengineering:hemp:growth=bottom1 immersiveengineering:hemp:growth=bottom2 immersiveengineering:hemp:growth=bottom3 simplefarming:apple_sapling simplefarming:apricot_sapling simplefarming:banana_sapling simplefarming:cherry_sapling simplefarming:mango_sapling simplefarming:olive_sapling simplefarming:orange_sapling simplefarming:pear_sapling simplefarming:plum_sapling simplefarming:barley_crop simplefarming:cassava_crop simplefarming:corn_crop simplefarming:cotton_crop simplefarming:cross_crop simplefarming:cucumber_crop simplefarming:cumin_plant simplefarming:eggplant_crop simplefarming:ginger_crop simplefarming:honeydew_crop simplefarming:kenaf_crop simplefarming:lettuce_crop simplefarming:oat_crop simplefarming:onion_crop simplefarming:pea_crop simplefarming:peanut_crop simplefarming:pepper_crop simplefarming:quinoa_plant simplefarming:radish_crop simplefarming:rice_crop simplefarming:rye_crop simplefarming:scrop simplefarming:hcrop simplefarming:marshmallow_crop simplefarming:sunflower_plant simplefarming:sorghum_crop simplefarming:soybean_crop simplefarming:spinach_crop simplefarming:sweet_potato_crop simplefarming:tomato_crop simplefarming:turnip_crop simplefarming:wild_crop simplefarming:yam_crop simplefarming:zucchini_crop byg:aspen_sapling byg:baobab_sapling byg:blue_enchanted_sapling byg:green_enchanted_sapling byg:pink_cherry_sapling byg:white_cherry_sapling byg:cika_sapling byg:cypress_sapling byg:ebony_sapling byg:ether_sapling byg:fir_sapling byg:aspen_sapling byg:holly_berry_sapling byg:holly_sapling byg:jacaranda_sapling byg:flowering_jacaranda_sapling byg:indigo_jacaranda_sapling byg:indigo_flowering_jacaranda_sapling byg:lament_sapling byg:mahogany_sapling byg:mangrove_sapling byg:maple_sapling byg:red_maple_sapling byg:silver_maple_sapling byg:nightshade_sapling byg:flowering_nightshade_sapling byg:palm_sapling byg:palo_verde_sapling byg:flowering_palo_verde_sapling byg:pine_sapling byg:rainbow_eucalyptus_sapling byg:redwood_sapling byg:pine_sapling byg:skyris_sapling byg:green_apple_skyris_sapling byg:willow_sapling byg:witch_hazel_sapling byg:blooming_witch_hazel_sapling byg:zelkova_sapling byg:withering_oak_sapling byg:araucaria_sapling byg:blue_spruce_sapling byg:brown_birch_sapling byg:brown_oak_sapling byg:zelkova_sapling byg:brown_zelkova_sapling byg:joshua_sapling byg:ripe_joshua_sapling byg:orange_birch_sapling byg:orange_oak_sapling byg:orange_spruce_sapling byg:orchard_sapling byg:flowering_orchard_sapling byg:ripe_orchard_sapling byg:red_birch_sapling byg:red_oak_sapling byg:red_spruce_sapling byg:yellow_birch_sapling byg:yellow_spruce_sapling byg:green_mushroom occultism:otherworld_sapling_natural occultism:otherworld_sapling integrateddynamics:menril_sapling projectvibrantjourneys:glowcap projectvibrantjourneys:crimson_nettle projectvibrantjourneys:warped_nettle twilightforest:mayapple deeperdarker:echo_sapling create_dd:rubber_sapling vegandelight:wild_soybean minecraft:firefly_bush minecraft:bush minecraft:short_dry_grass minecraft:tall_dry_grass minecraft:cactus_flower tfc:plant/allium tfc:plant/anthurium tfc:plant/arrowhead tfc:plant/artist_conk + block.10031 = minecraft:cherry_sapling minecraft:torchflower minecraft:short_grass minecraft:grass minecraft:fern minecraft:seagrass biomesoplenty:dune_grass biomesoplenty:dead_grass biomesoplenty:desert_grass biomesoplenty:sprout biomesoplenty:bush environmental:mycelium_sprouts upgrade_aquatic:blue_pickerelweed upgrade_aquatic:purple_pickerelweed byg:beach_grass byg:clover_patch byg:flower_patch byg:horseweed byg:leaf_pile byg:prairie_grass byg:reeds byg:short_beach_grass byg:short_grass byg:tall_prairie_grass byg:weed_grass byg:wilted_grass byg:winter_grass ecotones:clover ecotones:reeds ecotones:sandy_grass ecotones:short_grass terrestria:cattail terrestria:dead_grass terrestria:sakura_leaf_pile terrestria:tall_cattail wildworld:acacia_leaf_pile wildworld:birch_leaf_pile wildworld:dark_oak_leaf_pile wildworld:jungle_leaf_pile wildworld:oak_leaf_pile wildworld:spruce_leaf_pile biomesoplenty:bush minecraft:nether_sprouts minecraft:warped_roots minecraft:crimson_roots projectvibrantjourneys:beach_grass projectvibrantjourneys:short_grass minecraft:oak_sapling minecraft:spruce_sapling minecraft:birch_sapling minecraft:jungle_sapling minecraft:acacia_sapling minecraft:dark_oak_sapling minecraft:dead_bush minecraft:dandelion minecraft:poppy minecraft:blue_orchid minecraft:allium minecraft:azure_bluet minecraft:red_tulip minecraft:orange_tulip minecraft:white_tulip minecraft:pink_tulip minecraft:oxeye_daisy minecraft:cornflower minecraft:lily_of_the_valley minecraft:wither_rose minecraft:sweet_berry_bush biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom atmospheric:rosewood_sapling atmospheric:morado_sapling atmospheric:yucca_sapling atmospheric:kousa_sapling atmospheric:aspen_sapling atmospheric:grimwood_sapling atmospheric:warm_monkey_brush atmospheric:hot_monkey_brush atmospheric:scalding_monkey_brush atmospheric:yucca_flower atmospheric:gilia autumnity:red_maple_sapling autumnity:orange_maple_sapling autumnity:yellow_maple_sapling autumnity:maple_sapling autumnity:autumn_crocus earthmobsmod:buttercup environmental:willow_sapling environmental:cherry_sapling environmental:pink_wisteria_sapling environmental:blue_wisteria_sapling environmental:purple_wisteria_sapling environmental:white_wisteria_sapling farmersdelight:wild_cabbages farmersdelight:wild_onions farmersdelight:wild_tomatoes farmersdelight:wild_carrots farmersdelight:wild_potatoes farmersdelight:wild_beetroots neapolitan:small_banana_frond neapolitan:banana_frond neapolitan:large_banana_frond upgrade_aquatic:river_sapling upgrade_aquatic:beachgrass upgrade_aquatic:white_searocket upgrade_aquatic:pink_searocket environmental:cattail environmental:cartwheel environmental:bluebell environmental:violet environmental:dianthus environmental:red_lotus_flower environmental:white_lotus_flower environmental:yellow_hibiscus environmental:orange_hibiscus environmental:red_hibiscus environmental:pink_hibiscus environmental:magenta_hibiscus environmental:purple_hibiscus buzzier_bees:buttercup buzzier_bees:white_clover buzzier_bees:pink_clover neapolitan:strawberry_pips biomesoplenty:origin_sapling biomesoplenty:flowering_oak_sapling biomesoplenty:rainbow_birch_sapling biomesoplenty:yellow_autumn_sapling biomesoplenty:orange_autumn_sapling biomesoplenty:maple_sapling biomesoplenty:fir_sapling biomesoplenty:redwood_sapling biomesoplenty:white_cherry_sapling biomesoplenty:pink_cherry_sapling biomesoplenty:mahogany_sapling biomesoplenty:jacaranda_sapling biomesoplenty:palm_sapling biomesoplenty:willow_sapling biomesoplenty:dead_sapling biomesoplenty:magic_sapling biomesoplenty:umbran_sapling biomesoplenty:hellbark_sapling astralsorcery:glow_flower botania:white_mystical_flower botania:gray_mystical_flower botania:orange_mystical_flower botania:magenta_mystical_flower botania:light_blue_mystical_flower botania:light_gray_mystical_flower botania:yellow_mystical_flower botania:lime_mystical_flower botania:pink_mystical_flower botania:cyan_mystical_flower botania:purple_mystical_flower botania:blue_mystical_flower botania:brown_mystical_flower botania:green_mystical_flower botania:red_mystical_flower botania:black_mystical_flower botania:white_mushroom botania:orange_mushroom botania:magenta_mushroom botania:light_blue_mushroom botania:yellow_mushroom botania:lime_mushroom botania:pink_mushroom botania:gray_mushroom botania:light_gray_mushroom botania:cyan_mushroom botania:purple_mushroom botania:blue_mushroom botania:brown_mushroom botania:green_mushroom botania:red_mushroom botania:black_mushroom botania:hydroangeas botania:manastar botania:pure_daisy botania:endoflame botania:thermalily botania:rosa_arcana botania:munchdew botania:entropinnyum botania:kekimurus botania:gourmaryllis botania:narslimmus botania:spectrolus botania:dandelifeon botania:rafflowsia botania:shulk_me_not botania:bellethorn botania:bellethorn_chibi botania:bergamute botania:dreadthorn botania:heisei_dream botania:tigerseye botania:jaded_amaranthus botania:orechid botania:fallen_kanade botania:exoflame botania:agricarnation botania:agricarnation_chibi botania:hopperhock botania:hopperhock_chibi botania:tangleberrie botania:jiyuulia botania:rannuncarpus botania:rannuncarpus_chibi botania:hyacidus botania:pollidisiac botania:clayconia botania:clayconia_chibi botania:loonium botania:daffomill botania:vinculotus botania:spectranthemum botania:medumone botania:marimorphosis botania:marimorphosis_chibi botania:bubbell botania:bubbell_chibi botania:solegnolia botania:solegnolia_chibi botania:orechid_ignem terrestria:tiny_cactus pamhc2trees:apple_sapling pamhc2trees:avocado_sapling pamhc2trees:candlenut_sapling pamhc2trees:cherry_sapling pamhc2trees:chestnut_sapling pamhc2trees:gooseberry_sapling pamhc2trees:lemon_sapling pamhc2trees:nutmeg_sapling pamhc2trees:orange_sapling pamhc2trees:peach_sapling pamhc2trees:pear_sapling pamhc2trees:plum_sapling pamhc2trees:walnut_sapling pamhc2trees:spiderweb_sapling pamhc2trees:hazelnut_sapling pamhc2trees:pawpaw_sapling pamhc2trees:soursop_sapling pamhc2trees:almond_sapling pamhc2trees:apricot_sapling pamhc2trees:banana_sapling pamhc2trees:cashew_sapling pamhc2trees:cinnamon_sapling pamhc2trees:coconut_sapling pamhc2trees:date_sapling pamhc2trees:dragonfruit_sapling pamhc2trees:durian_sapling pamhc2trees:fig_sapling pamhc2trees:grapefruit_sapling pamhc2trees:lime_sapling pamhc2trees:mango_sapling pamhc2trees:olive_sapling pamhc2trees:papaya_sapling pamhc2trees:paperbark_sapling pamhc2trees:pecan_sapling pamhc2trees:peppercorn_sapling pamhc2trees:persimmon_sapling pamhc2trees:pistachio_sapling pamhc2trees:pomegranate_sapling pamhc2trees:starfruit_sapling pamhc2trees:vanillabean_sapling pamhc2trees:breadfruit_sapling pamhc2trees:guava_sapling pamhc2trees:jackfruit_sapling pamhc2trees:lychee_sapling pamhc2trees:passionfruit_sapling pamhc2trees:rambutan_sapling pamhc2trees:tamarind_sapling pamhc2trees:maple_sapling pamhc2trees:pinenut_sapling byg:purple_bulbis_anomaly byg:blue_bulbis_anomaly byg:embur_wart byg:cryptic_bramble biomesoplenty:glowshroom biomesoplenty:toadstool biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom biomesoplenty:mangrove_root biomesoplenty:reed biomesoplenty:sprout biomesoplenty:bush pamhc2crops:aridgarden pamhc2crops:frostgarden pamhc2crops:shadedgarden pamhc2crops:soggygarden pamhc2crops:tropicalgarden pamhc2crops:windygarden pamhc2crops:pamamaranthcrop pamhc2crops:pambarleycrop pamhc2crops:pambeancrop pamhc2crops:pamchickpeacrop pamhc2crops:pamcorncrop pamhc2crops:pamlentilcrop pamhc2crops:pammilletcrop pamhc2crops:pamoatcrop pamhc2crops:pamquinoacrop pamhc2crops:pamricecrop pamhc2crops:pamryecrop pamhc2crops:pamsoybeancrops pamhc2crops:pamcottoncrop pamhc2crops:pamflaxcrop pamhc2crops:pamkenafcrop pamhc2crops:pamjutecrop pamhc2crops:pamsisalcrop pamhc2crops:pamartichokecrop pamhc2crops:pamasparaguscrop pamhc2crops:pambellpeppercrop pamhc2crops:pambroccolicrop pamhc2crops:pambrusselsproutcrop pamhc2crops:pamcabbagecrop pamhc2crops:pamcauliflowercrop pamhc2crops:pamcelerycrop pamhc2crops:pamchilipeppercrop pamhc2crops:pamcucumbercrop pamhc2crops:pameggplantcrop pamhc2crops:pamkalecrops pamhc2crops:pamlettucecrop pamhc2crops:pamokracrop pamhc2crops:pampeascrop pamhc2crops:pamspinachcrop pamhc2crops:pamtomatillocrop pamhc2crops:pamtomatocrop pamhc2crops:pamwintersquashcrop pamhc2crops:pamzucchinicrop pamhc2crops:pamarrowrootcrop pamhc2crops:pamcassavacrop pamhc2crops:pamgarliccrop pamhc2crops:pamjicamacrop pamhc2crops:pamleekcrop pamhc2crops:pamkohlrabicrop pamhc2crops:pamonioncrop pamhc2crops:pamparsnipcrop pamhc2crops:pampeanutcrop pamhc2crops:pamradishcrop pamhc2crops:pamrhubarbcrop pamhc2crops:pamrutabagacrop pamhc2crops:pamscallioncrop pamhc2crops:pamsweetpotatocrop pamhc2crops:pamtarocrop pamhc2crops:pamturnipcrop pamhc2crops:pamwaterchestnutcrop pamhc2crops:pamblackberrycrop pamhc2crops:pamblueberrycrop pamhc2crops:pamcactusfruitcrop pamhc2crops:pamcandleberrycrop pamhc2crops:pamcantaloupecrop pamhc2crops:pamcranberrycrop pamhc2crops:pamelderberrycrop pamhc2crops:pamgrapecrop pamhc2crops:pamgreengrapecrop pamhc2crops:pamhuckleberrycrop pamhc2crops:pamjuniperberrycrop pamhc2crops:pamkiwicrop pamhc2crops:pammullberrycrop pamhc2crops:pampineapplecrop pamhc2crops:pamraspberrycrop pamhc2crops:pamstrawberrycrop pamhc2crops:pamcoffeebeancrop pamhc2crops:pamtealeafcrop pamhc2crops:pamagavecrop pamhc2crops:pamwhitemushroomcrop pamhc2crops:pamgingercrop pamhc2crops:pamsesamecrop pamhc2crops:pamspiceleafcrop pamhc2crops:pammustardcrop byg:lament_sprouts byg:synthian_fungus byg:blue_glowcane byg:pink_glowcane byg:purple_glowcane byg:red_glowcane byg:warped_bush byg:blue_glowshroom byg:purple_glowshroom byg:scorched_bush byg:soul_shroom byg:soul nat_shroom_spore_end byg:death_cap byg:weeping_roots byg:nether_bristle byg:synthian_sprout byg:synthian_roots byg:hanging_synthian_roots byg:embur_sprouts byg:embur_roots byg:ivis_roots byg:ivis_sprout byg:bulbis_sprouts byg:ether_bush byg:thereal_bellflower byg:nightshade_sprouts byg:nightshade_roots byg:oddity_bush byg:shulkren_fungus byg:vermillion_sculk_tendrils byg:vermillion_sculk_growth byg:green_mushroom byg:weeping_milkcap byg:wood_blewit byg:black_puff byg:crimson_berry_bush byg:blueberry_bush byg:nightshade_berry_bush byg:winter_succulent byg:allium_flower_bush byg:alpine_bellflower byg:amaranth byg:angelica byg:begonia byg:bistort byg:black_rose byg:blue_sage byg:california_poppy byg:crocus byg:cyan_amaranth byg:cyan_rose byg:cyan_tulip byg:daffodil byg:fairy_slipper byg:firecracker_flower_bush byg:green_tulip byg:guzmania byg:incan_lily byg:iris byg:kovan_flower byg:lazarus_bellflower byg:lolipop_flower byg:magenta_amaranth byg:magenta_tulip byg:orange_amaranth byg:orange_daisy byg:osiria_rose byg:peach_leather_flower byg:pink_allium byg:pink_allium_flower_bush byg:pink_anemone byg:pink_daffodil byg:pink_orchid byg:protea_flower byg:purple_amaranth byg:purple_orchid byg:purple_sage byg:purple_tulip byg:red_cornflower byg:red_orchid byg:richea byg:rose byg:snowdrops byg:silver_vase_flower byg:torch_ginger byg:violet_leather_flower byg:white_anemone byg:white_sage byg:white_cyclamen byg:winter_rose byg:winter_scilla byg:yellow_daffodil byg:yellow_tulip byg:horseweed byg:winter_cyclamen cutecore:cherry_leaf_litter cutecore:cherry_wood_sapling cutecore:wisteria_sapling cutecore:wisteria_leaf_litter cutecore:lemon_leaf_litter cutecore:lemon_sapling cutecore:hyacinth cutecore:lotus_flower cutecore:violets cutecore:pink_rose cutecore:white_rose cutecore:rose cutecore:forget_me_nots cutecore:pink_carnation cutecore:red_carnation cutecore:white_carnation forbidden_arcanus:yellow_orchid forbidden_arcanus:golden_orchid immersiveengineering:hemp:growth=bottom0 immersiveengineering:hemp:growth=bottom1 immersiveengineering:hemp:growth=bottom2 immersiveengineering:hemp:growth=bottom3 simplefarming:apple_sapling simplefarming:apricot_sapling simplefarming:banana_sapling simplefarming:cherry_sapling simplefarming:mango_sapling simplefarming:olive_sapling simplefarming:orange_sapling simplefarming:pear_sapling simplefarming:plum_sapling simplefarming:barley_crop simplefarming:cassava_crop simplefarming:corn_crop simplefarming:cotton_crop simplefarming:cross_crop simplefarming:cucumber_crop simplefarming:cumin_plant simplefarming:eggplant_crop simplefarming:ginger_crop simplefarming:honeydew_crop simplefarming:kenaf_crop simplefarming:lettuce_crop simplefarming:oat_crop simplefarming:onion_crop simplefarming:pea_crop simplefarming:peanut_crop simplefarming:pepper_crop simplefarming:quinoa_plant simplefarming:radish_crop simplefarming:rice_crop simplefarming:rye_crop simplefarming:scrop simplefarming:hcrop simplefarming:marshmallow_crop simplefarming:sunflower_plant simplefarming:sorghum_crop simplefarming:soybean_crop simplefarming:spinach_crop simplefarming:sweet_potato_crop simplefarming:tomato_crop simplefarming:turnip_crop simplefarming:wild_crop simplefarming:yam_crop simplefarming:zucchini_crop byg:aspen_sapling byg:baobab_sapling byg:blue_enchanted_sapling byg:green_enchanted_sapling byg:pink_cherry_sapling byg:white_cherry_sapling byg:cika_sapling byg:cypress_sapling byg:ebony_sapling byg:ether_sapling byg:fir_sapling byg:aspen_sapling byg:holly_berry_sapling byg:holly_sapling byg:jacaranda_sapling byg:flowering_jacaranda_sapling byg:indigo_jacaranda_sapling byg:indigo_flowering_jacaranda_sapling byg:lament_sapling byg:mahogany_sapling byg:mangrove_sapling byg:maple_sapling byg:red_maple_sapling byg:silver_maple_sapling byg:nightshade_sapling byg:flowering_nightshade_sapling byg:palm_sapling byg:palo_verde_sapling byg:flowering_palo_verde_sapling byg:pine_sapling byg:rainbow_eucalyptus_sapling byg:redwood_sapling byg:pine_sapling byg:skyris_sapling byg:green_apple_skyris_sapling byg:willow_sapling byg:witch_hazel_sapling byg:blooming_witch_hazel_sapling byg:zelkova_sapling byg:withering_oak_sapling byg:araucaria_sapling byg:blue_spruce_sapling byg:brown_birch_sapling byg:brown_oak_sapling byg:zelkova_sapling byg:brown_zelkova_sapling byg:joshua_sapling byg:ripe_joshua_sapling byg:orange_birch_sapling byg:orange_oak_sapling byg:orange_spruce_sapling byg:orchard_sapling byg:flowering_orchard_sapling byg:ripe_orchard_sapling byg:red_birch_sapling byg:red_oak_sapling byg:red_spruce_sapling byg:yellow_birch_sapling byg:yellow_spruce_sapling byg:green_mushroom occultism:otherworld_sapling_natural occultism:otherworld_sapling integrateddynamics:menril_sapling projectvibrantjourneys:glowcap projectvibrantjourneys:crimson_nettle projectvibrantjourneys:warped_nettle twilightforest:mayapple deeperdarker:echo_sapling create_dd:rubber_sapling vegandelight:wild_soybean minecraft:firefly_bush minecraft:bush minecraft:short_dry_grass minecraft:tall_dry_grass minecraft:cactus_flower tfc:plant/allium tfc:plant/anthurium tfc:plant/arrowhead tfc:plant/artist_conk natures_spirit:purple_heather natures_spirit:white_heather natures_spirit:red_heather # CROPS LIKE ENTITIES - block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots farmersdelight:cabbages farmersdelight:budding_tomatoes farmersdelight:onions vegandelight:soybean_crop tfc:crop/carrot tfc:crop/tomato + block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots farmersdelight:cabbages farmersdelight:budding_tomatoes farmersdelight:onions vegandelight:soybean_crop tfc:crop/carrot tfc:crop/tomato farmersrespite:small_tea_bush # LOWER-HALF ENTITIES block.10175 = minecraft:pitcher_plant:half=lower minecraft:sunflower:half=lower minecraft:lilac:half=lower minecraft:tall_grass:half=lower minecraft:large_fern:half=lower minecraft:rose_bush:half=lower minecraft:peony:half=lower minecraft:tall_seagrass:half=lower atmospheric:water_hyacinth:half=lower atmospheric:tall_yucca_flower:half=lower environmental:tall_cattail:half=lower environmental:pink_delphinium:half=lower environmental:blue_delphinium:half=lower environmental:purple_delphinium:half=lower environmental:white_delphinium:half=lower environmental:bird_of_paradise:half=lower environmental:giant_tall_grass:half=lower farmersdelight:wild_rice:half=lower upgrade_aquatic:flowering_rush:half=lower upgrade_aquatic:tall_beachgrass:half=lower upgrade_aquatic:tall_blue_pickerelweed:half=lower upgrade_aquatic:tall_purple_pickerelweed:half=lower biomesoplenty:barley:half=lower biomesoplenty:goldenrod:half=lower biomesoplenty:blue_hydrangea:half=lower biomesoplenty:watergrass:half=lower botania:white_double_flower:half=lower botania:orange_double_flower:half=lower botania:magenta_double_flower:half=lower botania:light_blue_double_flower:half=lower botania:yellow_double_flower:half=lower botania:lime_double_flower:half=lower botania:pink_double_flower:half=lower botania:gray_double_flower:half=lower botania:light_gray_double_flower:half=lower botania:cyan_double_flower:half=lower botania:purple_double_flower:half=lower botania:blue_double_flower:half=lower botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=lower biomesoplenty:reed:half=lower biomesoplenty:cattail:half=lower byg:tall_crimson_roots:half=lower byg:tall_ether_grass:half=lower byg:reeds:half=lower byg:tall_prairie_grass:half=lower byg:tall_allium:half=lower byg:azalea:half=lower byg:tall_pink_allium:half=lower moreflowerbushes:purple_hibiscus:half=lower moreflowerbushes:mountain_laurel:half=lower moreflowerbushes:larkspur:half=lower moreflowerbushes:golden_shower:half=lower moreflowerbushes:fuchsia:half=lower moreflowerbushes:butterfly_weed:half=lower moreflowerbushes:blue_sage:half=lower moreflowerbushes:blue_hortensia:half=lower byg:japanese_orchid:half=lower byg:delphinium:half=lower byg:foxglove:half=lower cutecore:pink_rosebush:half=lower cutecore:white_rosebush:half=lower cutecore:pink_hydrangeas:half=lower cutecore:blue_hydrangeas:half=lower cutecore:purple_hydrangeas:half=lower farmersdelight:rice create_bic_bit:sunflowerstem:half=lower tfc:plant/badderlocks:half=lower @@ -15,7 +15,7 @@ block.10176 = minecraft:pitcher_plant:half=upper minecraft:sunflower:half=upper minecraft:lilac:half=upper minecraft:tall_grass:half=upper minecraft:large_fern:half=upper minecraft:rose_bush:half=upper minecraft:peony:half=upper minecraft:tall_seagrass:half=upper atmospheric:water_hyacinth:half=upper atmospheric:tall_yucca_flower:half=upper environmental:tall_cattail:half=upper environmental:pink_delphinium:half=upper environmental:blue_delphinium:half=upper environmental:purple_delphinium:half=upper environmental:white_delphinium:half=upper environmental:bird_of_paradise:half=upper environmental:giant_tall_grass:half=upper farmersdelight:wild_rice:half=upper upgrade_aquatic:flowering_rush:half=upper upgrade_aquatic:tall_beachgrass:half=upper upgrade_aquatic:tall_blue_pickerelweed:half=upper upgrade_aquatic:tall_purple_pickerelweed:half=upper biomesoplenty:barley:half=upper biomesoplenty:goldenrod:half=upper biomesoplenty:blue_hydrangea:half=upper biomesoplenty:watergrass:half=upper botania:white_double_flower:half=upper botania:orange_double_flower:half=upper botania:magenta_double_flower:half=upper botania:light_blue_double_flower:half=upper botania:yellow_double_flower:half=upper botania:lime_double_flower:half=upper botania:pink_double_flower:half=upper botania:gray_double_flower:half=upper botania:light_gray_double_flower:half=upper botania:cyan_double_flower:half=upper botania:purple_double_flower:half=upper botania:blue_double_flower:half=upper botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=upper biomesoplenty:reed:half=upper biomesoplenty:cattail:half=upper byg:tall_crimson_roots:half=upper byg:tall_ether_grass:half=upper byg:reeds:half=upper byg:tall_prairie_grass:half=upper byg:tall_allium:half=upper byg:azalea:half=upper byg:tall_pink_allium:half=upper moreflowerbushes:purple_hibiscus:half=upper moreflowerbushes:mountain_laurel:half=upper moreflowerbushes:larkspur:half=upper moreflowerbushes:golden_shower:half=upper moreflowerbushes:fuchsia:half=upper moreflowerbushes:butterfly_weed:half=upper moreflowerbushes:blue_sage:half=upper moreflowerbushes:blue_hortensia:half=upper byg:japanese_orchid:half=upper byg:delphinium:half=upper byg:foxglove:half=upper cutecore:pink_rosebush:half=upper cutecore:white_rosebush:half=upper cutecore:pink_hydrangeas:half=upper cutecore:blue_hydrangeas:half=upper cutecore:purple_hydrangeas:half=upper farmersdelight:rice_panicles create_bic_bit:sunflowerstem:half=upper tfc:plant/badderlocks:half=upper # LEAVES - block.10018 = minecraft:cherry_leaves minecraft:oak_leaves minecraft:spruce_leaves minecraft:birch_leaves minecraft:jungle_leaves minecraft:acacia_leaves minecraft:dark_oak_leaves minecraft:pale_oak_leaves minecraft:azalea_leaves minecraft:azalea_leaves_flowers minecraft:flowering_azalea_leaves minecraft:mangrove_leaves biomesoplenty:origin_leaves biomesoplenty:flowering_oak_leaves biomesoplenty:rainbow_birch_leaves biomesoplenty:yellow_autumn_leaves biomesoplenty:orange_autumn_leaves biomesoplenty:maple_leaves biomesoplenty:fir_leaves biomesoplenty:redwood_leaves biomesoplenty:mahogany_leaves biomesoplenty:palm_leaves biomesoplenty:willow_leaves biomesoplenty:dead_leaves biomesoplenty:magic_leaves biomesoplenty:umbran_leaves biomesoplenty:hellbark_leaves biomesoplenty:pink_cherry_leaves biomesoplenty:white_cherry_leaves biomesoplenty:jacaranda_leaves quark:blue_blossom_leaves quark:lavender_blossom_leaves quark:orange_blossom_leaves quark:pink_blossom_leaves quark:yellow_blossom_leaves atmospheric:rosewood_leaves atmospheric:morado_leaves atmospheric:flowering_morado_leaves atmospheric:yucca_leaves atmospheric:kousa_leaves atmospheric:aspen_leaves atmospheric:grimwood_leaves autumnity:red_maple_leaves autumnity:orange_maple_leaves autumnity:yellow_maple_leaves autumnity:maple_leaves environmental:willow_leaves environmental:cherry_leaves environmental:pink_wisteria_leaves environmental:blue_wisteria_leaves environmental:purple_wisteria_leaves environmental:white_wisteria_leaves environmental:pink_hanging_wisteria_leaves environmental:blue_hanging_wisteria_leaves environmental:purple_hanging_wisteria_leaves environmental:white_hanging_wisteria_leaves environmental:hanging_willow_leaves upgrade_aquatic:river_leaves byg:aspen_leaves byg:araucaria_leaves byg:baobab_leaves byg:blooming_witch_hazel_leaves byg:blue_enchanted_leaves byg:blue_spruce_leaves byg:brown_birch_leaves byg:brown_oak_leaves byg:brown_zelkova_leaves byg:cika_leaves byg:cypress_leaves byg:ebony_leaves byg:fir_leaves byg:flowering_orchard_leaves byg:flowering_nightshade_leaves byg:flowering_palo_verde_leaves byg:green_apple_skyris_leaves byg:green_enchanted_leaves byg:holly_berry_leaves byg:holly_leaves byg:indigo_jacaranda_leaves byg:jacaranda_leaves byg:joshua_leaves byg:mahogany_leaves byg:mangrove_leaves byg:maple_leaves byg:orange_birch_leaves byg:orange_oak_leaves byg:orange_spruce_leaves byg:orchard_leaves byg:palo_verde_leaves byg:pine_leaves byg:pink_cherry_leaves byg:rainbow_eucalyptus_leaves byg:red_birch_leaves byg:red_maple_leaves byg:red_oak_leaves byg:red_spruce_leaves byg:redwood_leaves byg:ripe_joshua_leaves byg:ripe_orchard_leaves byg:silver_maple_leaves byg:skyris_leaves byg:white_cherry_leaves byg:willow_leaves byg:witch_hazel_leaves byg:yellow_birch_leaves byg:yellow_spruce_leaves byg:zelkova_leaves ecotones:hazel_leaves sakurarosea:alt_sakura_leaves sakurarosea:sakura_leaves sakurarosea:white_sakura_leaves terrestria:cypress_leaves terrestria:dark_japanese_maple_leaves terrestria:hemlock_leaves terrestria:japanese_maple_leaves terrestria:japanese_maple_shrub_leaves terrestria:jungle_palm_leaves terrestria:rainbow_eucalyptus_leaves terrestria:redwood_leaves terrestria:rubber_leaves terrestria:sakura_leaves terrestria:willow_leaves terrestria:yucca_palm_leaves traverse:brown_autumnal_leaves traverse:fir_leaves traverse:orange_autumnal_leaves traverse:red_autumnal_leaves traverse:yellow_autumnal_leaves vanillaenhanced:redwood_leaves wild_explorer:autumn_oak_leaves wild_explorer:autumn_birch_leaves wild_explorer:pink_cherry_oak_leaves wild_explorer:white_cherry_oak_leaves wild_explorer:palm_leaves cutecore:cherry_wood_leaves cutecore:cherry_wood_leaves_fruit cutecore:wisteria_leaves cutecore:lemon_leaves cutecore:lemon_leaves_fruiting dynamictrees:jungle_leaves dynamictrees:oak_leaves dynamictrees:spruce_leaves dynamictrees:dark_oak_leaves dynamictrees:acacia_leaves dynamictrees:birch_leaves simplefarming:apple_leaves simplefarming:apricot_leaves simplefarming:banana_leaves simplefarming:cherry_leaves simplefarming:mango_leaves simplefarming:olive_leaves simplefarming:orange_leaves simplefarming:pear_leaves simplefarming:plum_leaves mythicbotany:dreamwood_leaves undergarden:smogstem_leaves undergarden:wigglewood_leaves occultism:otherworld_leaves occultism:otherworld_leaves_natural integrateddynamics:menril_leaves extlights:xmas_leaves extlights:xmas_leaves_bulb extlights:xmas_leaves_bulb_red extlights:xmas_leaves_bulb_green extlights:xmas_leaves_bulb_blue extlights:xmas_leaves_bulb_blinking_redgreen extlights:xmas_leaves_bulb_blinking_redblue extlights:xmas_leaves_bulb_blinking_greenblue extlights:xmas_leaves_bulb_blinking_rgb extlights:xmas_leaves_bulb_smooth_redgreen extlights:xmas_leaves_bulb_smooth_redblue extlights:xmas_leaves_bulb_smooth_greenblue extlights:xmas_leaves_bulb_smooth_rgb techreborn:rubber_leaves blockus:legacy_leaves blockus:white_oak_leaves architects_palette:twisted_leaves twilightforest:twilight_oak_leaves twilightforest:canopy_leaves twilightforest:mangrove_leaves twilightforest:dark_leaves twilightforest:time_leaves twilightforest:transformation_leaves twilightforest:mining_leaves twilightforest:sorting_leaves twilightforest:giant_leaves twilightforest:thorn_leaves tfc:wood/leaves/acacia tfc:wood/leaves/ash tfc:wood/leaves/aspen tfc:wood/leaves/birch tfc:wood/leaves/blackwood tfc:wood/leaves/chestnut tfc:wood/leaves/douglas_fir tfc:wood/leaves/hickory tfc:wood/leaves/kapok tfc:wood/leaves/mangrove tfc:wood/leaves/maple tfc:wood/leaves/oak tfc:wood/leaves/palm tfc:wood/leaves/pine tfc:wood/leaves/rosewood tfc:wood/leaves/sequoia tfc:wood/leaves/spruce tfc:wood/leaves/sycamore tfc:wood/leaves/white_cedar tfc:wood/leaves/willow tfc:plant/cherry_leaves tfc:plant/green_apple_leaves tfc:plant/lemon_leaves tfc:plant/olive_leaves tfc:plant/orange_leaves tfc:plant/peach_leaves tfc:plant/plum_leaves tfc:plant/red_apple_leaves deeperdarker:echo_leaves create_dd:rubber_leaves + block.10018 = minecraft:cherry_leaves minecraft:oak_leaves minecraft:spruce_leaves minecraft:birch_leaves minecraft:jungle_leaves minecraft:acacia_leaves minecraft:dark_oak_leaves minecraft:pale_oak_leaves minecraft:azalea_leaves minecraft:azalea_leaves_flowers minecraft:flowering_azalea_leaves minecraft:mangrove_leaves biomesoplenty:origin_leaves biomesoplenty:flowering_oak_leaves biomesoplenty:rainbow_birch_leaves biomesoplenty:yellow_autumn_leaves biomesoplenty:orange_autumn_leaves biomesoplenty:maple_leaves biomesoplenty:fir_leaves biomesoplenty:redwood_leaves biomesoplenty:mahogany_leaves biomesoplenty:palm_leaves biomesoplenty:willow_leaves biomesoplenty:dead_leaves biomesoplenty:magic_leaves biomesoplenty:umbran_leaves biomesoplenty:hellbark_leaves biomesoplenty:pink_cherry_leaves biomesoplenty:white_cherry_leaves biomesoplenty:jacaranda_leaves quark:blue_blossom_leaves quark:lavender_blossom_leaves quark:orange_blossom_leaves quark:pink_blossom_leaves quark:yellow_blossom_leaves atmospheric:rosewood_leaves atmospheric:morado_leaves atmospheric:flowering_morado_leaves atmospheric:yucca_leaves atmospheric:kousa_leaves atmospheric:aspen_leaves atmospheric:grimwood_leaves autumnity:red_maple_leaves autumnity:orange_maple_leaves autumnity:yellow_maple_leaves autumnity:maple_leaves environmental:willow_leaves environmental:cherry_leaves environmental:pink_wisteria_leaves environmental:blue_wisteria_leaves environmental:purple_wisteria_leaves environmental:white_wisteria_leaves environmental:pink_hanging_wisteria_leaves environmental:blue_hanging_wisteria_leaves environmental:purple_hanging_wisteria_leaves environmental:white_hanging_wisteria_leaves environmental:hanging_willow_leaves upgrade_aquatic:river_leaves byg:aspen_leaves byg:araucaria_leaves byg:baobab_leaves byg:blooming_witch_hazel_leaves byg:blue_enchanted_leaves byg:blue_spruce_leaves byg:brown_birch_leaves byg:brown_oak_leaves byg:brown_zelkova_leaves byg:cika_leaves byg:cypress_leaves byg:ebony_leaves byg:fir_leaves byg:flowering_orchard_leaves byg:flowering_nightshade_leaves byg:flowering_palo_verde_leaves byg:green_apple_skyris_leaves byg:green_enchanted_leaves byg:holly_berry_leaves byg:holly_leaves byg:indigo_jacaranda_leaves byg:jacaranda_leaves byg:joshua_leaves byg:mahogany_leaves byg:mangrove_leaves byg:maple_leaves byg:orange_birch_leaves byg:orange_oak_leaves byg:orange_spruce_leaves byg:orchard_leaves byg:palo_verde_leaves byg:pine_leaves byg:pink_cherry_leaves byg:rainbow_eucalyptus_leaves byg:red_birch_leaves byg:red_maple_leaves byg:red_oak_leaves byg:red_spruce_leaves byg:redwood_leaves byg:ripe_joshua_leaves byg:ripe_orchard_leaves byg:silver_maple_leaves byg:skyris_leaves byg:white_cherry_leaves byg:willow_leaves byg:witch_hazel_leaves byg:yellow_birch_leaves byg:yellow_spruce_leaves byg:zelkova_leaves ecotones:hazel_leaves sakurarosea:alt_sakura_leaves sakurarosea:sakura_leaves sakurarosea:white_sakura_leaves terrestria:cypress_leaves terrestria:dark_japanese_maple_leaves terrestria:hemlock_leaves terrestria:japanese_maple_leaves terrestria:japanese_maple_shrub_leaves terrestria:jungle_palm_leaves terrestria:rainbow_eucalyptus_leaves terrestria:redwood_leaves terrestria:rubber_leaves terrestria:sakura_leaves terrestria:willow_leaves terrestria:yucca_palm_leaves traverse:brown_autumnal_leaves traverse:fir_leaves traverse:orange_autumnal_leaves traverse:red_autumnal_leaves traverse:yellow_autumnal_leaves vanillaenhanced:redwood_leaves wild_explorer:autumn_oak_leaves wild_explorer:autumn_birch_leaves wild_explorer:pink_cherry_oak_leaves wild_explorer:white_cherry_oak_leaves wild_explorer:palm_leaves cutecore:cherry_wood_leaves cutecore:cherry_wood_leaves_fruit cutecore:wisteria_leaves cutecore:lemon_leaves cutecore:lemon_leaves_fruiting dynamictrees:jungle_leaves dynamictrees:oak_leaves dynamictrees:spruce_leaves dynamictrees:dark_oak_leaves dynamictrees:acacia_leaves dynamictrees:birch_leaves simplefarming:apple_leaves simplefarming:apricot_leaves simplefarming:banana_leaves simplefarming:cherry_leaves simplefarming:mango_leaves simplefarming:olive_leaves simplefarming:orange_leaves simplefarming:pear_leaves simplefarming:plum_leaves mythicbotany:dreamwood_leaves undergarden:smogstem_leaves undergarden:wigglewood_leaves occultism:otherworld_leaves occultism:otherworld_leaves_natural integrateddynamics:menril_leaves extlights:xmas_leaves extlights:xmas_leaves_bulb extlights:xmas_leaves_bulb_red extlights:xmas_leaves_bulb_green extlights:xmas_leaves_bulb_blue extlights:xmas_leaves_bulb_blinking_redgreen extlights:xmas_leaves_bulb_blinking_redblue extlights:xmas_leaves_bulb_blinking_greenblue extlights:xmas_leaves_bulb_blinking_rgb extlights:xmas_leaves_bulb_smooth_redgreen extlights:xmas_leaves_bulb_smooth_redblue extlights:xmas_leaves_bulb_smooth_greenblue extlights:xmas_leaves_bulb_smooth_rgb techreborn:rubber_leaves blockus:legacy_leaves blockus:white_oak_leaves architects_palette:twisted_leaves twilightforest:twilight_oak_leaves twilightforest:canopy_leaves twilightforest:mangrove_leaves twilightforest:dark_leaves twilightforest:time_leaves twilightforest:transformation_leaves twilightforest:mining_leaves twilightforest:sorting_leaves twilightforest:giant_leaves twilightforest:thorn_leaves tfc:wood/leaves/acacia tfc:wood/leaves/ash tfc:wood/leaves/aspen tfc:wood/leaves/birch tfc:wood/leaves/blackwood tfc:wood/leaves/chestnut tfc:wood/leaves/douglas_fir tfc:wood/leaves/hickory tfc:wood/leaves/kapok tfc:wood/leaves/mangrove tfc:wood/leaves/maple tfc:wood/leaves/oak tfc:wood/leaves/palm tfc:wood/leaves/pine tfc:wood/leaves/rosewood tfc:wood/leaves/sequoia tfc:wood/leaves/spruce tfc:wood/leaves/sycamore tfc:wood/leaves/white_cedar tfc:wood/leaves/willow tfc:plant/cherry_leaves tfc:plant/green_apple_leaves tfc:plant/lemon_leaves tfc:plant/olive_leaves tfc:plant/orange_leaves tfc:plant/peach_leaves tfc:plant/plum_leaves tfc:plant/red_apple_leaves deeperdarker:echo_leaves create_dd:rubber_leaves natures_spirit:yellow_larch_leaves natures_spirit:larch_leaves natures_spirit:fir_leaves natures_spirit:redwood_leaves natures_spirit:sugi_leaves natures_spirit:white_wisteria_leaves natures_spirit:blue_wisteria_leaves natures_spirit:pink_wisteria_leaves natures_spirit:purple_wisteria_leaves natures_spirit:part_white_wisteria_leaves natures_spirit:blue_wisteria_leaves natures_spirit:part_blue_wisteria_leaves natures_spirit:pink_wisteria_leaves natures_spirit:part_pink_wisteria_leaves natures_spirit:purple_wisteria_leaves natures_spirit:fir_leaves natures_spirit:willow_leaves natures_spirit:aspen_leaves red_marple_leaves natures_spirit:orange_marple_leaves natures_spirit:yellow_marple_leaves natures_spirit:cypress_leaves natures_spirit:olive_leaves natures_spirit:joshua_leaves natures_spirit:ghaf_leaves natures_spirit:palo_verde_leaves natures_spirit:coconut_leaves natures_spirit:cedar_leaves natures_spirit:mahogany_leaves natures_spirit:saxaul_leaves natures_spirit:frosty_fir_leaves natures_spirit:part_purple_wisteria_leaves natures_spirit:wisteria_leaves natures_spirit:frosty_redwood_leaves betterend:pythadendron_leaves betterend:lacugrove_leaves betterend:dragon_tree_leaves betterend:tenanea_leaves tenanea_outer_leaves betterend:umbrella_tree_leaves betterend:helix_tree_leaves betterend:helix_tree_leaves betterend:lucernia_leaves betterend:lucernia_outer_leaves betterend:glowing_pillar_leaves betternether:willow_leaves betternether:rubeus_leaves betternether:anchor_tree_leaves betternether:nether_sakura_leaves blossom:flowering_oak_leaves # NO-WAVEABLE SMALL ELEMENTS block.10032 = sugar_cane tube_coral brain_coral fire_coral bubble_coral horn_coral dead_tube_coral dead_brain_coral dead_fire_coral dead_bubble_coral dead_horn_coral tube_coral_fan brain_coral_fan fire_coral_fan bubble_coral_fan horn_coral_fan dead_tube_coral_fan dead_brain_coral_fan dead_fire_coral_fan dead_bubble_coral_fan dead_horn_coral_fan nether_wart tfc:plant/athyrium_fern tfc:plant/canna tfc:plant/goldenrod tfc:plant/pampas_grass tfc:plant/perovskia tfc:plant/rose tfc:plant/beachgrass tfc:plant/bluegrass tfc:plant/bromegrass tfc:plant/fountain_grass tfc:plant/manatee_grass tfc:plant/orchard_grass tfc:plant/ryegrass tfc:plant/scutch_grass tfc:plant/star_grass tfc:plant/timothy_grass tfc:plant/raddia_grass tfc:plant/allium tfc:plant/anthurium tfc:plant/arrowhead tfc:plant/badderlocks tfc:plant/barrel_cactus tfc:plant/blood_lily tfc:plant/blue_ginger tfc:plant/blue_orchid tfc:plant/bur_reed tfc:plant/butterfly_milkweed tfc:plant/black_orchid tfc:plant/calendula tfc:plant/cattail tfc:plant/cobblestone_lichen tfc:plant/coontail tfc:plant/cordgrass tfc:plant/dandelion tfc:plant/dead_bush tfc:plant/desert_flame tfc:plant/duckweed tfc:plant/eel_grass tfc:plant/field_horsetail tfc:plant/foxglove tfc:plant/grape_hyacinth tfc:plant/green_algae tfc:plant/gutweed tfc:plant/guzmania tfc:plant/heliconia tfc:plant/heather tfc:plant/hibiscus tfc:plant/houstonia tfc:plant/kangaroo_paw tfc:plant/king_fern tfc:plant/labrador_tea tfc:plant/lady_fern tfc:plant/laminaria tfc:plant/licorice_fern tfc:plant/artists_conk tfc:plant/lily_of_the_valley tfc:plant/lilac tfc:plant/lotus tfc:plant/maiden_pink tfc:plant/marigold tfc:plant/meads_milkweed tfc:plant/milfoil tfc:plant/morning_glory tfc:plant/philodendron tfc:plant/moss tfc:plant/nasturtium tfc:plant/ostrich_fern tfc:plant/oxeye_daisy tfc:plant/phragmite tfc:plant/pickerelweed tfc:plant/pistia tfc:plant/poppy tfc:plant/primrose tfc:plant/pulsatilla tfc:plant/red_algae tfc:plant/reindeer_lichen tfc:plant/red_sealing_wax_palm tfc:plant/sacred_datura tfc:plant/sagebrush tfc:plant/sago tfc:plant/saguaro_fruit tfc:plant/sapphire_tower tfc:plant/sargassum tfc:plant/sea_lavender tfc:plant/sea_palm tfc:plant/silver_spurflower tfc:plant/snapdragon_pink tfc:plant/snapdragon_red tfc:plant/snapdragon_white tfc:plant/snapdragon_yellow tfc:plant/strelitzia tfc:plant/switchgrass tfc:plant/sword_fern tfc:plant/tall_fescue_grass tfc:plant/toquilla_palm tfc:plant/trillium tfc:plant/tropical_milkweed tfc:plant/tulip_orange tfc:plant/tulip_pink tfc:plant/tulip_red tfc:plant/tulip_white tfc:plant/turtle_grass tfc:plant/vriesea tfc:plant/water_canna tfc:plant/white_water_lily tfc:plant/purple_water_lily tfc:plant/yellow_water_lily tfc:plant/water_taro tfc:plant/yucca tfc:plant/hanging_vines_plant tfc:plant/hanging_vines tfc:plant/spanish_moss_plant tfc:plant/spanish_moss tfc:plant/liana_plant tfc:plant/liana tfc:plant/tree_fern_plant tfc:plant/tree_fern tfc:plant/arundo_plant tfc:plant/arundo tfc:plant/dry_phragmite_plant tfc:plant/dry_phragmite tfc:plant/winged_kelp_plant tfc:plant/winged_kelp tfc:plant/leafy_kelp_plant tfc:plant/leafy_kelp tfc:plant/giant_kelp_plant tfc:plant/giant_kelp_flower tfc:plant/ivy tfc:plant/jungle_vines tfc:plant/saguaro_plant tfc:plant/saguaro tfc:plant/golden_bamboo tfc:plant/golden_bamboo_sapling tfc:wild_crop/barley tfc:wild_crop/oat tfc:wild_crop/rye tfc:wild_crop/maize tfc:wild_crop/wheat tfc:wild_crop/rice tfc:wild_crop/beet tfc:wild_crop/cabbage tfc:wild_crop/carrot tfc:wild_crop/garlic tfc:wild_crop/green_bean tfc:wild_crop/potato tfc:wild_crop/onion tfc:wild_crop/soybean tfc:wild_crop/squash tfc:wild_crop/sugarcane tfc:wild_crop/tomato tfc:wild_crop/jute tfc:wild_crop/papyrus tfc:wild_crop/pumpkin tfc:wild_crop/melon tfc:wild_crop/red_bell_pepper tfc:wild_crop/yellow_bell_pepper tfc:plant/snowberry_bush tfc:plant/bunchberry_bush tfc:plant/gooseberry_bush tfc:plant/cloudberry_bush tfc:plant/strawberry_bush tfc:plant/wintergreen_berry_bush tfc:plant/cranberry_bush From b3006559f61dd899d0ca5834ffc81f55e652d715 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 19 Jan 2026 00:00:49 -0600 Subject: [PATCH 108/147] Version number update --- README.md | 2 +- shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 2 +- shaders/lang/es_ES.lang | 2 +- shaders/lang/es_MX.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index f9e5171b..5241a1a3 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.4 +## Version: 9.4a ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index e9f56025..ff43c7ac 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -15,7 +15,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.4 +value.ACERCADE.0=v.9.4a #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index 0cb0c7e8..025b7151 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4 +value.ACERCADE.0=v.9.4a # Opciones ############################# diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index 0cb0c7e8..025b7151 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4 +value.ACERCADE.0=v.9.4a # Opciones ############################# diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index 0cb0c7e8..025b7151 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4 +value.ACERCADE.0=v.9.4a # Opciones ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index a7493567..7c471fec 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -15,7 +15,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.4 +value.ACERCADE.0=v.9.4a #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 2a4e08c7..cb3c860a 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -15,7 +15,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.4 +value.ACERCADE.0=v.9.4a #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 94a21e6c..cbe29414 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -15,7 +15,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.4 +value.ACERCADE.0=v.9.4a #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 7f7a37f1..0dea621a 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -15,7 +15,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.4 +value.ACERCADE.0=v.9.4a #Options ############################# From ef067be5f49fac43b47201b9d9c6b28944cec1a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 24 Jan 2026 13:52:50 -0600 Subject: [PATCH 109/147] Version 9.4b (Temporal rollback) --- README.md | 2 +- shaders/common/solid_blocks_vertex.glsl | 12 ++++++------ shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 2 +- shaders/lang/es_ES.lang | 2 +- shaders/lang/es_MX.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- 10 files changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 5241a1a3..6976e606 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.4a +## Version: 9.4b ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index 1c6a24ea..3bba41e0 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -152,12 +152,12 @@ void main() { } #endif - #if defined GBUFFER_ENTITIES - if (entityId == 10102) { - isEmissiveEntity = 1.0; - directLightStrength = 1.0; - } - #endif + // #if defined GBUFFER_ENTITIES + // if (entityId == 10102) { + // isEmissiveEntity = 1.0; + // directLightStrength = 1.0; + // } + // #endif #if defined SHADOW_CASTING && !defined NETHER #include "/src/shadow_src_vertex.glsl" diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index ff43c7ac..8cc7948b 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -15,7 +15,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.4a +value.ACERCADE.0=v.9.4b #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index 025b7151..24b96f7a 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4a +value.ACERCADE.0=v.9.4b # Opciones ############################# diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index 025b7151..24b96f7a 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4a +value.ACERCADE.0=v.9.4b # Opciones ############################# diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index 025b7151..24b96f7a 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4a +value.ACERCADE.0=v.9.4b # Opciones ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 7c471fec..38e0b09a 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -15,7 +15,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.4a +value.ACERCADE.0=v.9.4b #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index cb3c860a..ae2138b8 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -15,7 +15,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.4a +value.ACERCADE.0=v.9.4b #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index cbe29414..4fe4679f 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -15,7 +15,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.4a +value.ACERCADE.0=v.9.4b #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 0dea621a..a74a7c61 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -15,7 +15,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.4a +value.ACERCADE.0=v.9.4b #Options ############################# From 3b4a0c17a14f9d3d7d7ed4643421d7a4763547c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Thu, 26 Feb 2026 01:13:12 -0600 Subject: [PATCH 110/147] Aurora's Lanterns Support (Beta) --- README.md | 2 +- shaders/block.properties | 10 +++++----- shaders/common/solid_blocks_fragment.glsl | 2 +- shaders/common/solid_blocks_vertex.glsl | 11 ++++++++++- shaders/entity.properties | 3 +++ shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 2 +- shaders/lang/es_ES.lang | 2 +- shaders/lang/es_MX.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- 13 files changed, 28 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 6976e606..ba5436af 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.4b +## Version: 9.4c ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/block.properties b/shaders/block.properties index f250af99..7fa3bf80 100644 --- a/shaders/block.properties +++ b/shaders/block.properties @@ -27,7 +27,7 @@ block.10079 = ice slime_block white_stained_glass orange_stained_glass magenta_stained_glass light_blue_stained_glass yellow_stained_glass lime_stained_glass pink_stained_glass gray_stained_glass light_gray_stained_glass cyan_stained_glass purple_stained_glass blue_stained_glass brown_stained_glass green_stained_glass red_stained_glass black_stained_glass white_stained_glass_pane orange_stained_glass_pane magenta_stained_glass_pane light_blue_stained_glass_pane yellow_stained_glass_pane lime_stained_glass_pane pink_stained_glass_pane gray_stained_glass_pane light_gray_stained_glass_pane cyan_stained_glass_pane purple_stained_glass_pane blue_stained_glass_pane brown_stained_glass_pane green_stained_glass_pane red_stained_glass_pane black_stained_glass_pane tinted_glass deeperdarker:soundproof_glass naturalist:crimson_froglass naturalist:verdant_froglass naturalist:azure_froglass naturalist:crimson_froglass_pane naturalist:verdant_froglass_pane naturalist:azure_froglass_pane createframed:white_stained_framed_glass_door createframed:white_stained_framed_glass_trapdoor createframed:white_stained_tiled_glass createframed:white_stained_tiled_glass_pane createframed:white_stained_framed_glass createframed:white_stained_framed_glass_pane createframed:horizontal_white_stained_framed_glass createframed:horizontal_white_stained_framed_glass_pane createframed:vertical_white_stained_framed_glass createframed:vertical_white_stained_framed_glass_pane createframed:light_gray_stained_framed_glass_door createframed:light_gray_stained_framed_glass_trapdoor createframed:light_gray_stained_tiled_glass createframed:light_gray_stained_tiled_glass_pane createframed:light_gray_stained_framed_glass createframed:light_gray_stained_framed_glass_pane createframed:horizontal_light_gray_stained_framed_glass createframed:horizontal_light_gray_stained_framed_glass_pane createframed:vertical_light_gray_stained_framed_glass createframed:vertical_light_gray_stained_framed_glass_pane createframed:gray_stained_framed_glass_door createframed:gray_stained_framed_glass_trapdoor createframed:gray_stained_tiled_glass createframed:gray_stained_tiled_glass_pane createframed:gray_stained_framed_glass createframed:gray_stained_framed_glass_pane createframed:horizontal_gray_stained_framed_glass createframed:horizontal_gray_stained_framed_glass_pane createframed:vertical_gray_stained_framed_glass createframed:vertical_gray_stained_framed_glass_pane createframed:black_stained_framed_glass_door createframed:black_stained_framed_glass_trapdoor createframed:black_stained_tiled_glass createframed:black_stained_tiled_glass_pane createframed:black_stained_framed_glass createframed:black_stained_framed_glass_pane createframed:horizontal_black_stained_framed_glass createframed:horizontal_black_stained_framed_glass_pane createframed:vertical_black_stained_framed_glass createframed:vertical_black_stained_framed_glass_pane createframed:brown_stained_framed_glass_door createframed:brown_stained_framed_glass_trapdoor createframed:brown_stained_tiled_glass createframed:brown_stained_tiled_glass_pane createframed:brown_stained_framed_glass createframed:brown_stained_framed_glass_pane createframed:horizontal_brown_stained_framed_glass createframed:horizontal_brown_stained_framed_glass_pane createframed:vertical_brown_stained_framed_glass createframed:vertical_brown_stained_framed_glass_pane createframed:red_stained_framed_glass_door createframed:red_stained_framed_glass_trapdoor createframed:red_stained_tiled_glass createframed:red_stained_tiled_glass_pane createframed:red_stained_framed_glass createframed:red_stained_framed_glass_pane createframed:horizontal_red_stained_framed_glass createframed:horizontal_red_stained_framed_glass_pane createframed:vertical_red_stained_framed_glass createframed:vertical_red_stained_framed_glass_pane createframed:orange_stained_framed_glass_door createframed:orange_stained_framed_glass_trapdoor createframed:orange_stained_tiled_glass createframed:orange_stained_tiled_glass_pane createframed:orange_stained_framed_glass createframed:orange_stained_framed_glass_pane createframed:horizontal_orange_stained_framed_glass createframed:horizontal_orange_stained_framed_glass_pane createframed:vertical_orange_stained_framed_glass createframed:vertical_orange_stained_framed_glass_pane createframed:yellow_stained_framed_glass_door createframed:yellow_stained_framed_glass_trapdoor createframed:yellow_stained_tiled_glass createframed:yellow_stained_tiled_glass_pane createframed:yellow_stained_framed_glass createframed:yellow_stained_framed_glass_pane createframed:horizontal_yellow_stained_framed_glass createframed:horizontal_yellow_stained_framed_glass_pane createframed:vertical_yellow_stained_framed_glass createframed:vertical_yellow_stained_framed_glass_pane createframed:lime_stained_framed_glass_door createframed:lime_stained_framed_glass_trapdoor createframed:lime_stained_tiled_glass createframed:lime_stained_tiled_glass_pane createframed:lime_stained_framed_glass createframed:lime_stained_framed_glass_pane createframed:horizontal_lime_stained_framed_glass createframed:horizontal_lime_stained_framed_glass_pane createframed:vertical_lime_stained_framed_glass createframed:vertical_lime_stained_framed_glass_pane createframed:green_stained_framed_glass_door createframed:green_stained_framed_glass_trapdoor createframed:green_stained_tiled_glass createframed:green_stained_tiled_glass_pane createframed:green_stained_framed_glass createframed:green_stained_framed_glass_pane createframed:horizontal_green_stained_framed_glass createframed:horizontal_green_stained_framed_glass_pane createframed:vertical_green_stained_framed_glass createframed:vertical_green_stained_framed_glass_pane createframed:cyan_stained_framed_glass_door createframed:cyan_stained_framed_glass_trapdoor createframed:cyan_stained_tiled_glass createframed:cyan_stained_tiled_glass_pane createframed:cyan_stained_framed_glass createframed:cyan_stained_framed_glass_pane createframed:horizontal_cyan_stained_framed_glass createframed:horizontal_cyan_stained_framed_glass_pane createframed:vertical_cyan_stained_framed_glass createframed:vertical_cyan_stained_framed_glass_pane createframed:light_blue_stained_framed_glass_door createframed:light_blue_stained_framed_glass_trapdoor createframed:light_blue_stained_tiled_glass createframed:light_blue_stained_tiled_glass_pane createframed:light_blue_stained_framed_glass createframed:light_blue_stained_framed_glass_pane createframed:horizontal_light_blue_stained_framed_glass createframed:horizontal_light_blue_stained_framed_glass_pane createframed:vertical_light_blue_stained_framed_glass createframed:vertical_light_blue_stained_framed_glass_pane createframed:blue_stained_framed_glass_door createframed:blue_stained_framed_glass_trapdoor createframed:blue_stained_tiled_glass createframed:blue_stained_tiled_glass_pane createframed:blue_stained_framed_glass createframed:blue_stained_framed_glass_pane createframed:horizontal_blue_stained_framed_glass createframed:horizontal_blue_stained_framed_glass_pane createframed:vertical_blue_stained_framed_glass createframed:vertical_blue_stained_framed_glass_pane createframed:purple_stained_framed_glass_door createframed:purple_stained_framed_glass_trapdoor createframed:purple_stained_tiled_glass createframed:purple_stained_tiled_glass_pane createframed:purple_stained_framed_glass createframed:purple_stained_framed_glass_pane createframed:horizontal_purple_stained_framed_glass createframed:horizontal_purple_stained_framed_glass_pane createframed:vertical_purple_stained_framed_glass createframed:vertical_purple_stained_framed_glass_pane createframed:magenta_stained_framed_glass_door createframed:magenta_stained_framed_glass_trapdoor createframed:magenta_stained_tiled_glass createframed:magenta_stained_tiled_glass_pane createframed:magenta_stained_framed_glass createframed:magenta_stained_framed_glass_pane createframed:horizontal_magenta_stained_framed_glass createframed:horizontal_magenta_stained_framed_glass_pane createframed:vertical_magenta_stained_framed_glass createframed:vertical_magenta_stained_framed_glass_pane createframed:pink_stained_framed_glass_door createframed:pink_stained_framed_glass_trapdoor createframed:pink_stained_tiled_glass createframed:pink_stained_tiled_glass_pane createframed:pink_stained_framed_glass createframed:pink_stained_framed_glass_pane createframed:horizontal_pink_stained_framed_glass createframed:horizontal_pink_stained_framed_glass_pane createframed:vertical_pink_stained_framed_glass createframed:vertical_pink_stained_framed_glass_pane # EMMISIVE (LIKE GLOWSTONE) - block.10089 = ochre_froglight verdant_froglight pearlescent_froglight glowstone shroomlight torch wall_torch redstone_torch redstone_wall_torch jack_o_lantern redstone_lamp lantern sea_lantern soul_lantern soul_torch soul_wall_torch copper_lantern exposed_copper_lantern weathered_copper_lantern oxidized_copper_lantern waxed_copper_lantern waxed_exposed_copper_lantern waxed_weathered_copper_lantern waxed_oxidized_copper_lantern cataclysm:void_lantern_block deeperdarker:sculk_gleam + block.10089 = ochre_froglight verdant_froglight pearlescent_froglight glowstone shroomlight torch wall_torch redstone_torch redstone_wall_torch jack_o_lantern redstone_lamp lantern sea_lantern soul_lantern soul_torch soul_wall_torch copper_lantern exposed_copper_lantern weathered_copper_lantern oxidized_copper_lantern waxed_copper_lantern waxed_exposed_copper_lantern waxed_weathered_copper_lantern waxed_oxidized_copper_lantern cataclysm:void_lantern_block deeperdarker:sculk_gleam auroraslanterns:amethyst_lantern auroraslanterns:redstone_lantern # NEW EMMISIVE block.10090 = magma_block end_root campfire:lit=true soul_campfire:lit=true beacon betterendforge:mossy_glowshroom_hymenophore betterendforge:mossy_glowshroom_fur betterendforge:blue_vine_lantern betterendforge:blue_vine_fur betterendforge::lumecorn:shape=light_top_middle betterendforge::lumecorn:shape=light_middle betterendforge::lumecorn:shape=light_bottom betterendforge::purple_polypore betterendforge::bulb_vine:shape=bottom @@ -59,7 +59,7 @@ # UPPER-HALF ENTITIES block.10176 = minecraft:double_plant:half=upper thebetweenlands:swamp_double_tallgrass:half=upper thebetweenlands:tall_cattail:half=upper midnight:double_midnight_grass:half=upper zawa:eucalyptus_top botania:doubleflower1:half=upper botania:doubleflower2:half=upper zawa:karvy_top tfc:plant/badderlocks:half=upper - + block.10018 = minecraft:leaves minecraft:leaves2 biomesoplenty:leaves_0 biomesoplenty:leaves_1 biomesoplenty:leaves_2 biomesoplenty:leaves_3 biomesoplenty:leaves_4 biomesoplenty:leaves_5 atum:palm_leaves atum:deadwood_leaves quark:variant_leaves twilightforest:twilight_leaves twilightforest:magic_leaves twilightforest:twilight_leaves_3 twilightforest:dark_leaves twilightforest:giant_leaves midnight:shadowroot_leaves midnight:dark_willow_leaves aether_legacy:aether_leaves aether_legacy:crystal_leaves dynamictrees:leaves0 dynamictrees:leaves1 betterwithmods:blood_leaves rustic:leaves thebetweenlands:leaves_weedwood_tree thebetweenlands:leaves_sap_tree thebetweenlands:leaves_rubber_tree thebetweenlands:leaves_hearthgrove_tree thebetweenlands:leaves_nibbletwig_tree thebetweenlands:leaves_spirit_tree_top thebetweenlands:leaves_spirit_tree_middle thebetweenlands:leaves_spirit_tree_bottom ic2:leaves tconstruct:slime_leaves forestry:leaves pvj:leaves_willow pvj:leaves_mangrove pvj:leaves_palm pvj:leaves_redwood pvj:leaves_fir pvj:leaves_pine pvj:leaves_aspen pvj:leaves_red_maple pvj:leaves_orange_maple pvj:leaves_baobab pvj:leaves_cottonwood pvj:leaves_juniper pvj:leaves_juniper_berried pvj:leaves_white_cherry_blossom pvj:leaves_pink_cherry_blossom pvj:leaves_jacaranda extrabiomesxl:leaf_autumn_brown extrabiomesxl:leaf_autumn_orange extrabiomesxl:leaf_autumn_red extrabiomesxl:leaf_autumn_yellow extrabiomesxl:leaf_cypress_bald extrabiomesxl:leaf_cypress_regular extrabiomesxl:leaf_fir extrabiomesxl:leaf_japanese_maple_regular extrabiomesxl:leaf_japanese_maple_shrub extrabiomesxl:leaf_rainbow_eucalyptus extrabiomesxl:leaf_redwood extrabiomesxl:leaf_sakura extrautils2:ironwood_leaves musiccraft:mleaves thaumcraft:leaves_greatwood thaumcraft:leaves_silverwood # WATER LIKE @@ -73,10 +73,10 @@ # NO-WAVEABLE block.10032 = reeds sugar_cane tube_coral brain_coral fire_coral bubble_coral horn_coral dead_tube_coral dead_brain_coral dead_fire_coral dead_bubble_coral dead_horn_coral tube_coral_fan brain_coral_fan fire_coral_fan bubble_coral_fan horn_coral_fan dead_tube_coral_fan dead_brain_coral_fan dead_fire_coral_fan dead_bubble_coral_fan dead_horn_coral_fan sapling nether_wart - + # NEW EMMISIVE block.10090 = magma flowing_lava lava end_root beacon betterendforge:mossy_glowshroom_hymenophore betterendforge:mossy_glowshroom_fur betterendforge:blue_vine_lantern betterendforge:blue_vine_fur betterendforge::lumecorn:shape=light_top_middle betterendforge::lumecorn:shape=light_middle betterendforge::lumecorn:shape=light_bottom betterendforge::purple_polypore betterendforge::bulb_vine:shape=bottom - + # FAKE EMMISORS block.10213 = minecraft:soul_fire @@ -85,7 +85,7 @@ # METAL-LIKE block.10400 = iron_block gold_block emerald_block lapis_block diamond_block - + # SAND-LIKE block.10410 = sand red_sand dirt_path diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 3dd09397..42724db7 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -133,7 +133,7 @@ varying vec3 omniLight; void main() { #if (defined SHADOW_CASTING && !defined NETHER) || defined DISTANT_HORIZONS - #if AA_TYPE > 0 + #if AA_TYPE > 0 float dither = shiftedDither13(gl_FragCoord.xy); #else float dither = dither17(gl_FragCoord.xy); diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index 3bba41e0..4d4043ff 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -145,6 +145,7 @@ void main() { #include "/src/light_vertex.glsl" #include "/src/fog_vertex.glsl" + // Glowing blocks #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND isEmissiveEntity = 0.0; if(mc_Entity.x == ENTITY_NO_SHADOW_FIRE || mc_Entity.x == ENTITY_EMMISIVE || mc_Entity.x == ENTITY_S_EMMISIVE) { @@ -152,6 +153,7 @@ void main() { } #endif + // Flame entities // #if defined GBUFFER_ENTITIES // if (entityId == 10102) { // isEmissiveEntity = 1.0; @@ -159,6 +161,13 @@ void main() { // } // #endif + // Glowing entities + #if defined GBUFFER_ENTITIES + if (entityId == 10103) { + isEmissiveEntity = 1.0; + } + #endif + #if defined SHADOW_CASTING && !defined NETHER #include "/src/shadow_src_vertex.glsl" #endif @@ -196,7 +205,7 @@ void main() { flatNormal = normal; viewPositionNormalized = normalize(viewPosition.xyz); - lmcoordAlt = lmcoord; + lmcoordAlt = lmcoord; #endif #if defined GBUFFER_ENTITY_GLOW diff --git a/shaders/entity.properties b/shaders/entity.properties index 9495822a..19f48b7d 100644 --- a/shaders/entity.properties +++ b/shaders/entity.properties @@ -5,3 +5,6 @@ entity.10101=minecraft:lightning_bolt # Entity flames (Iris) entity.10102=minecraft:entity_flame + +# Entity glowing +entity.10103=auroraslanterns:wall_lantern diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 8cc7948b..9245b22d 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -15,7 +15,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.4b +value.ACERCADE.0=v.9.4c #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index 24b96f7a..09102e26 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4b +value.ACERCADE.0=v.9.4c # Opciones ############################# diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index 24b96f7a..09102e26 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4b +value.ACERCADE.0=v.9.4c # Opciones ############################# diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index 24b96f7a..09102e26 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4b +value.ACERCADE.0=v.9.4c # Opciones ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 38e0b09a..8557cf6a 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -15,7 +15,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.4b +value.ACERCADE.0=v.9.4c #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index ae2138b8..932b33c7 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -15,7 +15,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.4b +value.ACERCADE.0=v.9.4c #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 4fe4679f..5e9f5c35 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -15,7 +15,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.4b +value.ACERCADE.0=v.9.4c #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index a74a7c61..1da2e938 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -15,7 +15,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.4b +value.ACERCADE.0=v.9.4c #Options ############################# From 11d56ddbeaa760c929c3089722eb64be074192a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 28 Feb 2026 21:44:30 -0600 Subject: [PATCH 111/147] Version 9.4d --- README.md | 2 +- shaders/common/composite_fragment.glsl | 8 ++++---- shaders/common/deferred_fragment.glsl | 4 ++-- shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 2 +- shaders/lang/es_ES.lang | 2 +- shaders/lang/es_MX.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- 11 files changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index ba5436af..a45a3d9a 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.4c +## Version: 9.4d ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index d77a91f4..5a27fe8d 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -107,8 +107,8 @@ void main() { // Underwater fog if(isEyeInWater == 1) { - float waterAbsorption = clamp(-pow((-linearDepth + 1.0), (4.0 + (WATER_ABSORPTION * 4.0))) + 1.0, 0.0, 1.0); - + float waterAbsorption = clamp(1.0 - pow(1.001 - linearDepth, 5.0 + (4.0 * WATER_ABSORPTION)), 0.0, 1.0); + blockColor.rgb = mix(blockColor.rgb, WATER_COLOR * directLightColor * ((eyeBrightSmoothFloat.y * .8 + 48) * 0.004166666666666667), waterAbsorption); @@ -227,7 +227,7 @@ void main() { // Bloom source float bloom_luma = smoothstep(0.85, 1.0, luma(blockColor.rgb * exposure)) * 0.5; - blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); /* DRAWBUFFERS:146 */ gl_FragData[0] = blockColor; gl_FragData[1] = blockColor * bloom_luma; @@ -238,4 +238,4 @@ void main() { gl_FragData[0] = blockColor; gl_FragData[1] = vec4(exposure, 0.0, 0.0, 0.0); #endif -} \ No newline at end of file +} diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index 2a17e449..0b492b92 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -76,7 +76,7 @@ varying vec3 upVector; // Flat varying float fogDensityCoeff; #endif -/* Utility functions */ +/* Utility functions */ #include "/lib/depth.glsl" #include "/lib/luma.glsl" @@ -197,4 +197,4 @@ void main() { /* DRAWBUFFERS:14 */ gl_FragData[0] = vec4(blockColor.rgb, depth); gl_FragData[1] = blockColor; -} \ No newline at end of file +} diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 9245b22d..5a784568 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -15,7 +15,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.4c +value.ACERCADE.0=v.9.4d #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index 09102e26..df5ea9ad 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4c +value.ACERCADE.0=v.9.4d # Opciones ############################# diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index 09102e26..df5ea9ad 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4c +value.ACERCADE.0=v.9.4d # Opciones ############################# diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index 09102e26..df5ea9ad 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4c +value.ACERCADE.0=v.9.4d # Opciones ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 8557cf6a..7e23c4d6 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -15,7 +15,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.4c +value.ACERCADE.0=v.9.4d #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 932b33c7..1c24cc4e 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -15,7 +15,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.4c +value.ACERCADE.0=v.9.4d #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 5e9f5c35..29d8ac42 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -15,7 +15,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.4c +value.ACERCADE.0=v.9.4d #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 1da2e938..0d8a9097 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -15,7 +15,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.4c +value.ACERCADE.0=v.9.4d #Options ############################# From e0f603108f6cfddc1013eed8a2fc90f90a1fc1c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 7 Mar 2026 17:55:45 -0600 Subject: [PATCH 112/147] Red canvas --- shaders/common/solid_voxy_blocks_fragment.glsl | 7 +++++++ shaders/common/voxy.json | 7 +++++++ shaders/common/water_voxy_blocks_fragment.glsl | 5 +++++ shaders/voxy.json | 1 + shaders/voxy_opaque.glsl | 1 + shaders/voxy_translucent.glsl | 1 + shaders/world-1/voxy.json | 1 + shaders/world-1/voxy_opaque.glsl | 1 + shaders/world-1/voxy_translucent.glsl | 1 + shaders/world0/voxy.json | 1 + shaders/world0/voxy_opaque.glsl | 1 + shaders/world0/voxy_translucent.glsl | 1 + shaders/world1/voxy.json | 1 + shaders/world1/voxy_opaque.glsl | 1 + shaders/world1/voxy_translucent.glsl | 1 + 15 files changed, 31 insertions(+) create mode 100644 shaders/common/solid_voxy_blocks_fragment.glsl create mode 100644 shaders/common/voxy.json create mode 100644 shaders/common/water_voxy_blocks_fragment.glsl create mode 100644 shaders/voxy.json create mode 100644 shaders/voxy_opaque.glsl create mode 100644 shaders/voxy_translucent.glsl create mode 100644 shaders/world-1/voxy.json create mode 100644 shaders/world-1/voxy_opaque.glsl create mode 100644 shaders/world-1/voxy_translucent.glsl create mode 100644 shaders/world0/voxy.json create mode 100644 shaders/world0/voxy_opaque.glsl create mode 100644 shaders/world0/voxy_translucent.glsl create mode 100644 shaders/world1/voxy.json create mode 100644 shaders/world1/voxy_opaque.glsl create mode 100644 shaders/world1/voxy_translucent.glsl diff --git a/shaders/common/solid_voxy_blocks_fragment.glsl b/shaders/common/solid_voxy_blocks_fragment.glsl new file mode 100644 index 00000000..d3e05a0c --- /dev/null +++ b/shaders/common/solid_voxy_blocks_fragment.glsl @@ -0,0 +1,7 @@ +layout(location = 0) out vec4 gbufferData0; +layout(location = 1) out vec4 gbufferData1; + +void voxy_emitFragment(VoxyFragmentParameters parameters) { + gbufferData0 = vec4(1.0, 0.0, 0.0, 1.0); + gbufferData1 = vec4(1.0, 0.0, 0.0, 1.0); +} \ No newline at end of file diff --git a/shaders/common/voxy.json b/shaders/common/voxy.json new file mode 100644 index 00000000..639b4bfe --- /dev/null +++ b/shaders/common/voxy.json @@ -0,0 +1,7 @@ +{ + "version": 1, + "uniforms": [], + "samplers": {}, + "opaqueDrawBuffers": [1, 7], + "translucentDrawBuffers": [1] +} \ No newline at end of file diff --git a/shaders/common/water_voxy_blocks_fragment.glsl b/shaders/common/water_voxy_blocks_fragment.glsl new file mode 100644 index 00000000..e03eb567 --- /dev/null +++ b/shaders/common/water_voxy_blocks_fragment.glsl @@ -0,0 +1,5 @@ +layout(location = 0) out vec4 gbufferData0; + +void voxy_emitFragment(VoxyFragmentParameters parameters) { + gbufferData0 = vec4(1.0, 0.0, 0.0, 1.0); +} \ No newline at end of file diff --git a/shaders/voxy.json b/shaders/voxy.json new file mode 100644 index 00000000..bacb35a8 --- /dev/null +++ b/shaders/voxy.json @@ -0,0 +1 @@ +#include "/common/voxy.json" \ No newline at end of file diff --git a/shaders/voxy_opaque.glsl b/shaders/voxy_opaque.glsl new file mode 100644 index 00000000..5ad1c52b --- /dev/null +++ b/shaders/voxy_opaque.glsl @@ -0,0 +1 @@ +#include "/common/solid_voxy_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaders/voxy_translucent.glsl b/shaders/voxy_translucent.glsl new file mode 100644 index 00000000..9752a6d6 --- /dev/null +++ b/shaders/voxy_translucent.glsl @@ -0,0 +1 @@ +#include "/common/water_voxy_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaders/world-1/voxy.json b/shaders/world-1/voxy.json new file mode 100644 index 00000000..bacb35a8 --- /dev/null +++ b/shaders/world-1/voxy.json @@ -0,0 +1 @@ +#include "/common/voxy.json" \ No newline at end of file diff --git a/shaders/world-1/voxy_opaque.glsl b/shaders/world-1/voxy_opaque.glsl new file mode 100644 index 00000000..5ad1c52b --- /dev/null +++ b/shaders/world-1/voxy_opaque.glsl @@ -0,0 +1 @@ +#include "/common/solid_voxy_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaders/world-1/voxy_translucent.glsl b/shaders/world-1/voxy_translucent.glsl new file mode 100644 index 00000000..9752a6d6 --- /dev/null +++ b/shaders/world-1/voxy_translucent.glsl @@ -0,0 +1 @@ +#include "/common/water_voxy_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaders/world0/voxy.json b/shaders/world0/voxy.json new file mode 100644 index 00000000..bacb35a8 --- /dev/null +++ b/shaders/world0/voxy.json @@ -0,0 +1 @@ +#include "/common/voxy.json" \ No newline at end of file diff --git a/shaders/world0/voxy_opaque.glsl b/shaders/world0/voxy_opaque.glsl new file mode 100644 index 00000000..5ad1c52b --- /dev/null +++ b/shaders/world0/voxy_opaque.glsl @@ -0,0 +1 @@ +#include "/common/solid_voxy_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaders/world0/voxy_translucent.glsl b/shaders/world0/voxy_translucent.glsl new file mode 100644 index 00000000..9752a6d6 --- /dev/null +++ b/shaders/world0/voxy_translucent.glsl @@ -0,0 +1 @@ +#include "/common/water_voxy_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaders/world1/voxy.json b/shaders/world1/voxy.json new file mode 100644 index 00000000..bacb35a8 --- /dev/null +++ b/shaders/world1/voxy.json @@ -0,0 +1 @@ +#include "/common/voxy.json" \ No newline at end of file diff --git a/shaders/world1/voxy_opaque.glsl b/shaders/world1/voxy_opaque.glsl new file mode 100644 index 00000000..5ad1c52b --- /dev/null +++ b/shaders/world1/voxy_opaque.glsl @@ -0,0 +1 @@ +#include "/common/solid_voxy_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaders/world1/voxy_translucent.glsl b/shaders/world1/voxy_translucent.glsl new file mode 100644 index 00000000..9752a6d6 --- /dev/null +++ b/shaders/world1/voxy_translucent.glsl @@ -0,0 +1 @@ +#include "/common/water_voxy_blocks_fragment.glsl" \ No newline at end of file From 683926d2cfd4003e17273b90114fe3beb72e0c8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 21 Mar 2026 18:30:27 -0600 Subject: [PATCH 113/147] Avances Voxy --- .../common/solid_voxy_blocks_fragment.glsl | 188 +++++++++++++++++- shaders/common/voxy.json | 2 +- .../common/water_voxy_blocks_fragment.glsl | 2 +- shaders/lib/dither.glsl | 18 +- shaders/src/hi_sky_voxy.glsl | 18 ++ 5 files changed, 217 insertions(+), 11 deletions(-) create mode 100644 shaders/src/hi_sky_voxy.glsl diff --git a/shaders/common/solid_voxy_blocks_fragment.glsl b/shaders/common/solid_voxy_blocks_fragment.glsl index d3e05a0c..79fa7261 100644 --- a/shaders/common/solid_voxy_blocks_fragment.glsl +++ b/shaders/common/solid_voxy_blocks_fragment.glsl @@ -1,7 +1,191 @@ +#include "/lib/config.glsl" +#include "/lib/basic_utils.glsl" +#include "/lib/luma.glsl" +#include "/lib/dither.glsl" + +/* Color utils */ + +#if defined THE_END + #include "/lib/color_utils_end.glsl" +#elif defined NETHER + #include "/lib/color_utils_nether.glsl" +#else + #include "/lib/color_utils.glsl" +#endif + layout(location = 0) out vec4 gbufferData0; layout(location = 1) out vec4 gbufferData1; +/* +struct VoxyFragmentParameters { + vec4 sampledColour; + vec2 tile; + vec2 uv; + uint face; + uint modelId; + vec2 lightMap; + vec4 tinting; + uint customId; +}; +*/ + void voxy_emitFragment(VoxyFragmentParameters parameters) { - gbufferData0 = vec4(1.0, 0.0, 0.0, 1.0); - gbufferData1 = vec4(1.0, 0.0, 0.0, 1.0); + // Re-assign + + uint face = parameters.face; + uint customId = parameters.customId; + + // Includes + + #include "/src/hi_sky_voxy.glsl" + + // -- Position Vertex + + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + float fogDensityCoeff = FOG_DENSITY * FOG_ADJUST; + #else + float fogDensityCoeff = dayBlendFloat( + FOG_SUNSET, + FOG_DAY, + FOG_NIGHT + ) * FOG_ADJUST; + #endif + + // ---- Original Light Vertex Logic + + // Luz nativa (lmcoord.x: candela, lmcoord.y: cielo) ---- + #if defined THE_END || defined NETHER + vec2 illumination = vec2(parameters.lightMap.x, 1.0); + #else + vec2 illumination = parameters.lightMap; + #endif + + illumination.y = max(illumination.y - 0.065, 0.0) * 1.06951871657754; + float visibleSky = clamp(illumination.y, 0.0, 1.0); + + #if defined UNKNOWN_DIM + visibleSky = (visibleSky * 0.6) + 0.4; + #endif + + // Intensidad y color de luz de candelas + float candle_luma = illumination.x * sqrt(illumination.x); + vec3 candleColor = CANDLE_BASELIGHT * (candle_luma + sixthPow(illumination.x * 1.17)); + candleColor = clamp(candleColor, vec3(0.0), vec3(4.0)); + + // Atenuación por dirección de luz directa =================================== + #if defined THE_END || defined NETHER + vec3 astroVector = normalize(vxModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; + #else + vec3 astroVector = normalize(sunPosition); + #endif + + // vec3 normal = gl_NormalMatrix * gl_Normal; + vec3 normal = vec3(uint((face>>1)==2), uint((face>>1)==0), uint((face>>1)==1)) * (float(int(face)&1)*2-1); + float astroLightStrength; + + // Comprobar la longitud al cuadrado (dot product) es mucho más rápido que la longitud (sqrt). + if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals + normal = normalize(normal); + astroLightStrength = dot(normal, astroVector); + } else { + normal = vec3(0.0, 1.0, 0.0); + astroLightStrength = 1.0; + } + + #if defined THE_END || defined NETHER + float directLightStrength = astroLightStrength; + #else + float directLightStrength = mix(-astroLightStrength, astroLightStrength, dayNightMix); + #endif + + // Omni light intensity changes by angle + float omniStrength = ((directLightStrength + 1.0) * 0.25) + 0.75; + + // Calculamos color de luz directa + #ifdef UNKNOWN_DIM + vec3 directLightColor = texture2D(lightmap, vec2(0.0, parameters.lightMap.y)).rgb; + #else + vec3 directLightColor = dayBlend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); + #if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 + directLightColor += (endFlashIntensity * endFlashIntensity * 0.1); + #endif + #endif + + directLightStrength = clamp(directLightStrength, 0.0, 1.0); + + #if defined THE_END || defined NETHER + vec3 omniLight = LIGHT_DAY_COLOR; + #else + directLightColor = mix(directLightColor, ZENITH_SKY_RAIN_COLOR * luma(directLightColor) * 0.4, rainStrength); + + // Minimal light + vec3 omniColor = mix(ZenithSkyColorRGB, directLightColor * 0.45, OMNI_TINT); + float omniColorLuma = colorAverage(omniColor); + + // --- OPTIMIZACIÓN #3: Prevenir división por cero --- + float lumaRatio = AVOID_DARK_LEVEL / max(omniColorLuma, 0.0001); + + vec3 omniColorMin = omniColor * lumaRatio; + omniColor = max(omniColor, omniColorMin); + + vec3 omniLight = mix(omniColorMin, omniColor, visibleSky) * omniStrength; + #endif + + if (isEyeInWater == 0) { + // Reemplazar pow(x, 10.0) con multiplicaciones --- + // Esto es órdenes de magnitud más rápido. x^10 = (x^2)^2 * x^2 + float visSky2 = visibleSky * visibleSky; // x^2 + float visSky4 = visSky2 * visSky2; // x^4 + float visSky8 = visSky4 * visSky4; // x^8 + float vis_sky_10 = visSky8 * visSky2; // x^10 + directLightStrength = mix(0.0, directLightStrength, vis_sky_10); + } else { + directLightStrength = mix(0.0, directLightStrength, visibleSky); + } + + if (customId == ENTITY_EMMISIVE) { + directLightStrength = 10.0; + } else if (customId == ENTITY_S_EMMISIVE) { + directLightStrength = 1.0; + } + + // Fog Vertex + + // 1. Reconstruir posición en clip space + vec2 ndc = (gl_FragCoord.xy / vec2(viewWidth, viewHeight)) * 2.0 - 1.0; + float depth = gl_FragCoord.z * 2.0 - 1.0; + vec4 clipPos = vec4(ndc, depth, 1.0); + + // 2. Pasar a world space + vec4 worldPos = vxViewProjInv * clipPos; + worldPos /= worldPos.w; + + // 3. La distancia desde la cámara (equivalente a gl_FogFragCoord) + float fogFragCoord = length(worldPos.xyz); + + vec2 eyeBrightSmoothFloat = vec2(eyeBrightnessSmooth); + + #if !defined THE_END && !defined NETHER + float fogIntensityCoeff = max(eyeBrightSmoothFloat.y * 0.004166666666666667, visibleSky); + float frogAdjust = pow( + clamp(fogFragCoord / float(vxRenderDistance), 0.0, 1.0) * fogIntensityCoeff, + mix(fogDensityCoeff * 0.15, 0.5, rainStrength) + ); + #else + float frogAdjust = sqrt(clamp(fogFragCoord / float(vxRenderDistance), 0.0, 1.0)); + #endif + + // ---- Original Fragment Logic + + #if AA_TYPE > 0 + float dither = shiftedRDither(gl_FragCoord.xy); + #else + float dither = rDither(gl_FragCoord.xy); + #endif + + + + + gbufferData0 = parameters.sampledColour * parameters.tinting; + gbufferData1 = parameters.sampledColour * parameters.tinting; } \ No newline at end of file diff --git a/shaders/common/voxy.json b/shaders/common/voxy.json index 639b4bfe..67f16388 100644 --- a/shaders/common/voxy.json +++ b/shaders/common/voxy.json @@ -1,6 +1,6 @@ { "version": 1, - "uniforms": [], + "uniforms": ["sunPosition", "dayNightMix", "rainStrength", "skyColor", "isEyeInWater", "eyeBrightnessSmooth", "vxViewProjInv", "viewWidth", "viewHeight", "vxRenderDistance"], "samplers": {}, "opaqueDrawBuffers": [1, 7], "translucentDrawBuffers": [1] diff --git a/shaders/common/water_voxy_blocks_fragment.glsl b/shaders/common/water_voxy_blocks_fragment.glsl index e03eb567..318e8117 100644 --- a/shaders/common/water_voxy_blocks_fragment.glsl +++ b/shaders/common/water_voxy_blocks_fragment.glsl @@ -1,5 +1,5 @@ layout(location = 0) out vec4 gbufferData0; void voxy_emitFragment(VoxyFragmentParameters parameters) { - gbufferData0 = vec4(1.0, 0.0, 0.0, 1.0); + gbufferData0 = parameters.sampledColour * parameters.tinting; } \ No newline at end of file diff --git a/shaders/lib/dither.glsl b/shaders/lib/dither.glsl index ce3d8f42..cc7b949a 100644 --- a/shaders/lib/dither.glsl +++ b/shaders/lib/dither.glsl @@ -106,9 +106,11 @@ float eclecticDitherGradNoise(vec2 point) { return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), point)) + p4); } -float textureNoise64(vec2 point, sampler2D noise) { - return texture2DLod(noise, point * 0.015625, 0).r; -} +#if !defined VOXY + float textureNoise64(vec2 point, sampler2D noise) { + return texture2DLod(noise, point * 0.015625, 0).r; + } +#endif float semiblue(vec2 point) { vec2 tile = floor(point * 0.25); @@ -199,10 +201,12 @@ float shiftedEclecticDitherGradNoise(vec2 point) { return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), point)) + ditherShift + p4); } -float shiftedTextureNoise64(vec2 point, sampler2D noise) { - float dither = texture2DLod(noise, point * 0.015625, 0).r; - return fract(ditherShift + dither); -} +#if !defined VOXY + float shiftedTextureNoise64(vec2 point, sampler2D noise) { + float dither = texture2DLod(noise, point * 0.015625, 0).r; + return fract(ditherShift + dither); + } +#endif float shiftedSemiblue(vec2 point) { point = point + vec2(frameMod * 5.0, frameMod * 15.0); diff --git a/shaders/src/hi_sky_voxy.glsl b/shaders/src/hi_sky_voxy.glsl new file mode 100644 index 00000000..b5f6c3bd --- /dev/null +++ b/shaders/src/hi_sky_voxy.glsl @@ -0,0 +1,18 @@ +#ifdef UNKNOWN_DIM + vec3 ZenithSkyColorRGB = skyColor; + vec3 zenithSkyColor = rgbToXyz(ZenithSkyColorRGB); +#else + vec3 ZenithSkyColorRGB = dayBlend( + ZENITH_SUNSET_COLOR, + ZENITH_DAY_COLOR, + ZENITH_NIGHT_COLOR + ); + + ZenithSkyColorRGB = mix( + ZenithSkyColorRGB, + ZENITH_SKY_RAIN_COLOR * luma(ZenithSkyColorRGB), + rainStrength + ); + + vec3 zenithSkyColor = rgbToXyz(ZenithSkyColorRGB); +#endif \ No newline at end of file From 1147df3b602988824f4a40a153a8009b22ee138d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Wed, 25 Mar 2026 21:54:39 -0600 Subject: [PATCH 114/147] Bloques 26.1 --- shaders/block.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shaders/block.properties b/shaders/block.properties index 7fa3bf80..68f05529 100644 --- a/shaders/block.properties +++ b/shaders/block.properties @@ -3,7 +3,7 @@ #if MC_VERSION >= 11300 # GRASS LIKE ENTITIES - block.10031 = minecraft:cherry_sapling minecraft:torchflower minecraft:short_grass minecraft:grass minecraft:fern minecraft:seagrass biomesoplenty:dune_grass biomesoplenty:dead_grass biomesoplenty:desert_grass biomesoplenty:sprout biomesoplenty:bush environmental:mycelium_sprouts upgrade_aquatic:blue_pickerelweed upgrade_aquatic:purple_pickerelweed byg:beach_grass byg:clover_patch byg:flower_patch byg:horseweed byg:leaf_pile byg:prairie_grass byg:reeds byg:short_beach_grass byg:short_grass byg:tall_prairie_grass byg:weed_grass byg:wilted_grass byg:winter_grass ecotones:clover ecotones:reeds ecotones:sandy_grass ecotones:short_grass terrestria:cattail terrestria:dead_grass terrestria:sakura_leaf_pile terrestria:tall_cattail wildworld:acacia_leaf_pile wildworld:birch_leaf_pile wildworld:dark_oak_leaf_pile wildworld:jungle_leaf_pile wildworld:oak_leaf_pile wildworld:spruce_leaf_pile biomesoplenty:bush minecraft:nether_sprouts minecraft:warped_roots minecraft:crimson_roots projectvibrantjourneys:beach_grass projectvibrantjourneys:short_grass minecraft:oak_sapling minecraft:spruce_sapling minecraft:birch_sapling minecraft:jungle_sapling minecraft:acacia_sapling minecraft:dark_oak_sapling minecraft:dead_bush minecraft:dandelion minecraft:poppy minecraft:blue_orchid minecraft:allium minecraft:azure_bluet minecraft:red_tulip minecraft:orange_tulip minecraft:white_tulip minecraft:pink_tulip minecraft:oxeye_daisy minecraft:cornflower minecraft:lily_of_the_valley minecraft:wither_rose minecraft:sweet_berry_bush biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom atmospheric:rosewood_sapling atmospheric:morado_sapling atmospheric:yucca_sapling atmospheric:kousa_sapling atmospheric:aspen_sapling atmospheric:grimwood_sapling atmospheric:warm_monkey_brush atmospheric:hot_monkey_brush atmospheric:scalding_monkey_brush atmospheric:yucca_flower atmospheric:gilia autumnity:red_maple_sapling autumnity:orange_maple_sapling autumnity:yellow_maple_sapling autumnity:maple_sapling autumnity:autumn_crocus earthmobsmod:buttercup environmental:willow_sapling environmental:cherry_sapling environmental:pink_wisteria_sapling environmental:blue_wisteria_sapling environmental:purple_wisteria_sapling environmental:white_wisteria_sapling farmersdelight:wild_cabbages farmersdelight:wild_onions farmersdelight:wild_tomatoes farmersdelight:wild_carrots farmersdelight:wild_potatoes farmersdelight:wild_beetroots neapolitan:small_banana_frond neapolitan:banana_frond neapolitan:large_banana_frond upgrade_aquatic:river_sapling upgrade_aquatic:beachgrass upgrade_aquatic:white_searocket upgrade_aquatic:pink_searocket environmental:cattail environmental:cartwheel environmental:bluebell environmental:violet environmental:dianthus environmental:red_lotus_flower environmental:white_lotus_flower environmental:yellow_hibiscus environmental:orange_hibiscus environmental:red_hibiscus environmental:pink_hibiscus environmental:magenta_hibiscus environmental:purple_hibiscus buzzier_bees:buttercup buzzier_bees:white_clover buzzier_bees:pink_clover neapolitan:strawberry_pips biomesoplenty:origin_sapling biomesoplenty:flowering_oak_sapling biomesoplenty:rainbow_birch_sapling biomesoplenty:yellow_autumn_sapling biomesoplenty:orange_autumn_sapling biomesoplenty:maple_sapling biomesoplenty:fir_sapling biomesoplenty:redwood_sapling biomesoplenty:white_cherry_sapling biomesoplenty:pink_cherry_sapling biomesoplenty:mahogany_sapling biomesoplenty:jacaranda_sapling biomesoplenty:palm_sapling biomesoplenty:willow_sapling biomesoplenty:dead_sapling biomesoplenty:magic_sapling biomesoplenty:umbran_sapling biomesoplenty:hellbark_sapling astralsorcery:glow_flower botania:white_mystical_flower botania:gray_mystical_flower botania:orange_mystical_flower botania:magenta_mystical_flower botania:light_blue_mystical_flower botania:light_gray_mystical_flower botania:yellow_mystical_flower botania:lime_mystical_flower botania:pink_mystical_flower botania:cyan_mystical_flower botania:purple_mystical_flower botania:blue_mystical_flower botania:brown_mystical_flower botania:green_mystical_flower botania:red_mystical_flower botania:black_mystical_flower botania:white_mushroom botania:orange_mushroom botania:magenta_mushroom botania:light_blue_mushroom botania:yellow_mushroom botania:lime_mushroom botania:pink_mushroom botania:gray_mushroom botania:light_gray_mushroom botania:cyan_mushroom botania:purple_mushroom botania:blue_mushroom botania:brown_mushroom botania:green_mushroom botania:red_mushroom botania:black_mushroom botania:hydroangeas botania:manastar botania:pure_daisy botania:endoflame botania:thermalily botania:rosa_arcana botania:munchdew botania:entropinnyum botania:kekimurus botania:gourmaryllis botania:narslimmus botania:spectrolus botania:dandelifeon botania:rafflowsia botania:shulk_me_not botania:bellethorn botania:bellethorn_chibi botania:bergamute botania:dreadthorn botania:heisei_dream botania:tigerseye botania:jaded_amaranthus botania:orechid botania:fallen_kanade botania:exoflame botania:agricarnation botania:agricarnation_chibi botania:hopperhock botania:hopperhock_chibi botania:tangleberrie botania:jiyuulia botania:rannuncarpus botania:rannuncarpus_chibi botania:hyacidus botania:pollidisiac botania:clayconia botania:clayconia_chibi botania:loonium botania:daffomill botania:vinculotus botania:spectranthemum botania:medumone botania:marimorphosis botania:marimorphosis_chibi botania:bubbell botania:bubbell_chibi botania:solegnolia botania:solegnolia_chibi botania:orechid_ignem terrestria:tiny_cactus pamhc2trees:apple_sapling pamhc2trees:avocado_sapling pamhc2trees:candlenut_sapling pamhc2trees:cherry_sapling pamhc2trees:chestnut_sapling pamhc2trees:gooseberry_sapling pamhc2trees:lemon_sapling pamhc2trees:nutmeg_sapling pamhc2trees:orange_sapling pamhc2trees:peach_sapling pamhc2trees:pear_sapling pamhc2trees:plum_sapling pamhc2trees:walnut_sapling pamhc2trees:spiderweb_sapling pamhc2trees:hazelnut_sapling pamhc2trees:pawpaw_sapling pamhc2trees:soursop_sapling pamhc2trees:almond_sapling pamhc2trees:apricot_sapling pamhc2trees:banana_sapling pamhc2trees:cashew_sapling pamhc2trees:cinnamon_sapling pamhc2trees:coconut_sapling pamhc2trees:date_sapling pamhc2trees:dragonfruit_sapling pamhc2trees:durian_sapling pamhc2trees:fig_sapling pamhc2trees:grapefruit_sapling pamhc2trees:lime_sapling pamhc2trees:mango_sapling pamhc2trees:olive_sapling pamhc2trees:papaya_sapling pamhc2trees:paperbark_sapling pamhc2trees:pecan_sapling pamhc2trees:peppercorn_sapling pamhc2trees:persimmon_sapling pamhc2trees:pistachio_sapling pamhc2trees:pomegranate_sapling pamhc2trees:starfruit_sapling pamhc2trees:vanillabean_sapling pamhc2trees:breadfruit_sapling pamhc2trees:guava_sapling pamhc2trees:jackfruit_sapling pamhc2trees:lychee_sapling pamhc2trees:passionfruit_sapling pamhc2trees:rambutan_sapling pamhc2trees:tamarind_sapling pamhc2trees:maple_sapling pamhc2trees:pinenut_sapling byg:purple_bulbis_anomaly byg:blue_bulbis_anomaly byg:embur_wart byg:cryptic_bramble biomesoplenty:glowshroom biomesoplenty:toadstool biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom biomesoplenty:mangrove_root biomesoplenty:reed biomesoplenty:sprout biomesoplenty:bush pamhc2crops:aridgarden pamhc2crops:frostgarden pamhc2crops:shadedgarden pamhc2crops:soggygarden pamhc2crops:tropicalgarden pamhc2crops:windygarden pamhc2crops:pamamaranthcrop pamhc2crops:pambarleycrop pamhc2crops:pambeancrop pamhc2crops:pamchickpeacrop pamhc2crops:pamcorncrop pamhc2crops:pamlentilcrop pamhc2crops:pammilletcrop pamhc2crops:pamoatcrop pamhc2crops:pamquinoacrop pamhc2crops:pamricecrop pamhc2crops:pamryecrop pamhc2crops:pamsoybeancrops pamhc2crops:pamcottoncrop pamhc2crops:pamflaxcrop pamhc2crops:pamkenafcrop pamhc2crops:pamjutecrop pamhc2crops:pamsisalcrop pamhc2crops:pamartichokecrop pamhc2crops:pamasparaguscrop pamhc2crops:pambellpeppercrop pamhc2crops:pambroccolicrop pamhc2crops:pambrusselsproutcrop pamhc2crops:pamcabbagecrop pamhc2crops:pamcauliflowercrop pamhc2crops:pamcelerycrop pamhc2crops:pamchilipeppercrop pamhc2crops:pamcucumbercrop pamhc2crops:pameggplantcrop pamhc2crops:pamkalecrops pamhc2crops:pamlettucecrop pamhc2crops:pamokracrop pamhc2crops:pampeascrop pamhc2crops:pamspinachcrop pamhc2crops:pamtomatillocrop pamhc2crops:pamtomatocrop pamhc2crops:pamwintersquashcrop pamhc2crops:pamzucchinicrop pamhc2crops:pamarrowrootcrop pamhc2crops:pamcassavacrop pamhc2crops:pamgarliccrop pamhc2crops:pamjicamacrop pamhc2crops:pamleekcrop pamhc2crops:pamkohlrabicrop pamhc2crops:pamonioncrop pamhc2crops:pamparsnipcrop pamhc2crops:pampeanutcrop pamhc2crops:pamradishcrop pamhc2crops:pamrhubarbcrop pamhc2crops:pamrutabagacrop pamhc2crops:pamscallioncrop pamhc2crops:pamsweetpotatocrop pamhc2crops:pamtarocrop pamhc2crops:pamturnipcrop pamhc2crops:pamwaterchestnutcrop pamhc2crops:pamblackberrycrop pamhc2crops:pamblueberrycrop pamhc2crops:pamcactusfruitcrop pamhc2crops:pamcandleberrycrop pamhc2crops:pamcantaloupecrop pamhc2crops:pamcranberrycrop pamhc2crops:pamelderberrycrop pamhc2crops:pamgrapecrop pamhc2crops:pamgreengrapecrop pamhc2crops:pamhuckleberrycrop pamhc2crops:pamjuniperberrycrop pamhc2crops:pamkiwicrop pamhc2crops:pammullberrycrop pamhc2crops:pampineapplecrop pamhc2crops:pamraspberrycrop pamhc2crops:pamstrawberrycrop pamhc2crops:pamcoffeebeancrop pamhc2crops:pamtealeafcrop pamhc2crops:pamagavecrop pamhc2crops:pamwhitemushroomcrop pamhc2crops:pamgingercrop pamhc2crops:pamsesamecrop pamhc2crops:pamspiceleafcrop pamhc2crops:pammustardcrop byg:lament_sprouts byg:synthian_fungus byg:blue_glowcane byg:pink_glowcane byg:purple_glowcane byg:red_glowcane byg:warped_bush byg:blue_glowshroom byg:purple_glowshroom byg:scorched_bush byg:soul_shroom byg:soul nat_shroom_spore_end byg:death_cap byg:weeping_roots byg:nether_bristle byg:synthian_sprout byg:synthian_roots byg:hanging_synthian_roots byg:embur_sprouts byg:embur_roots byg:ivis_roots byg:ivis_sprout byg:bulbis_sprouts byg:ether_bush byg:thereal_bellflower byg:nightshade_sprouts byg:nightshade_roots byg:oddity_bush byg:shulkren_fungus byg:vermillion_sculk_tendrils byg:vermillion_sculk_growth byg:green_mushroom byg:weeping_milkcap byg:wood_blewit byg:black_puff byg:crimson_berry_bush byg:blueberry_bush byg:nightshade_berry_bush byg:winter_succulent byg:allium_flower_bush byg:alpine_bellflower byg:amaranth byg:angelica byg:begonia byg:bistort byg:black_rose byg:blue_sage byg:california_poppy byg:crocus byg:cyan_amaranth byg:cyan_rose byg:cyan_tulip byg:daffodil byg:fairy_slipper byg:firecracker_flower_bush byg:green_tulip byg:guzmania byg:incan_lily byg:iris byg:kovan_flower byg:lazarus_bellflower byg:lolipop_flower byg:magenta_amaranth byg:magenta_tulip byg:orange_amaranth byg:orange_daisy byg:osiria_rose byg:peach_leather_flower byg:pink_allium byg:pink_allium_flower_bush byg:pink_anemone byg:pink_daffodil byg:pink_orchid byg:protea_flower byg:purple_amaranth byg:purple_orchid byg:purple_sage byg:purple_tulip byg:red_cornflower byg:red_orchid byg:richea byg:rose byg:snowdrops byg:silver_vase_flower byg:torch_ginger byg:violet_leather_flower byg:white_anemone byg:white_sage byg:white_cyclamen byg:winter_rose byg:winter_scilla byg:yellow_daffodil byg:yellow_tulip byg:horseweed byg:winter_cyclamen cutecore:cherry_leaf_litter cutecore:cherry_wood_sapling cutecore:wisteria_sapling cutecore:wisteria_leaf_litter cutecore:lemon_leaf_litter cutecore:lemon_sapling cutecore:hyacinth cutecore:lotus_flower cutecore:violets cutecore:pink_rose cutecore:white_rose cutecore:rose cutecore:forget_me_nots cutecore:pink_carnation cutecore:red_carnation cutecore:white_carnation forbidden_arcanus:yellow_orchid forbidden_arcanus:golden_orchid immersiveengineering:hemp:growth=bottom0 immersiveengineering:hemp:growth=bottom1 immersiveengineering:hemp:growth=bottom2 immersiveengineering:hemp:growth=bottom3 simplefarming:apple_sapling simplefarming:apricot_sapling simplefarming:banana_sapling simplefarming:cherry_sapling simplefarming:mango_sapling simplefarming:olive_sapling simplefarming:orange_sapling simplefarming:pear_sapling simplefarming:plum_sapling simplefarming:barley_crop simplefarming:cassava_crop simplefarming:corn_crop simplefarming:cotton_crop simplefarming:cross_crop simplefarming:cucumber_crop simplefarming:cumin_plant simplefarming:eggplant_crop simplefarming:ginger_crop simplefarming:honeydew_crop simplefarming:kenaf_crop simplefarming:lettuce_crop simplefarming:oat_crop simplefarming:onion_crop simplefarming:pea_crop simplefarming:peanut_crop simplefarming:pepper_crop simplefarming:quinoa_plant simplefarming:radish_crop simplefarming:rice_crop simplefarming:rye_crop simplefarming:scrop simplefarming:hcrop simplefarming:marshmallow_crop simplefarming:sunflower_plant simplefarming:sorghum_crop simplefarming:soybean_crop simplefarming:spinach_crop simplefarming:sweet_potato_crop simplefarming:tomato_crop simplefarming:turnip_crop simplefarming:wild_crop simplefarming:yam_crop simplefarming:zucchini_crop byg:aspen_sapling byg:baobab_sapling byg:blue_enchanted_sapling byg:green_enchanted_sapling byg:pink_cherry_sapling byg:white_cherry_sapling byg:cika_sapling byg:cypress_sapling byg:ebony_sapling byg:ether_sapling byg:fir_sapling byg:aspen_sapling byg:holly_berry_sapling byg:holly_sapling byg:jacaranda_sapling byg:flowering_jacaranda_sapling byg:indigo_jacaranda_sapling byg:indigo_flowering_jacaranda_sapling byg:lament_sapling byg:mahogany_sapling byg:mangrove_sapling byg:maple_sapling byg:red_maple_sapling byg:silver_maple_sapling byg:nightshade_sapling byg:flowering_nightshade_sapling byg:palm_sapling byg:palo_verde_sapling byg:flowering_palo_verde_sapling byg:pine_sapling byg:rainbow_eucalyptus_sapling byg:redwood_sapling byg:pine_sapling byg:skyris_sapling byg:green_apple_skyris_sapling byg:willow_sapling byg:witch_hazel_sapling byg:blooming_witch_hazel_sapling byg:zelkova_sapling byg:withering_oak_sapling byg:araucaria_sapling byg:blue_spruce_sapling byg:brown_birch_sapling byg:brown_oak_sapling byg:zelkova_sapling byg:brown_zelkova_sapling byg:joshua_sapling byg:ripe_joshua_sapling byg:orange_birch_sapling byg:orange_oak_sapling byg:orange_spruce_sapling byg:orchard_sapling byg:flowering_orchard_sapling byg:ripe_orchard_sapling byg:red_birch_sapling byg:red_oak_sapling byg:red_spruce_sapling byg:yellow_birch_sapling byg:yellow_spruce_sapling byg:green_mushroom occultism:otherworld_sapling_natural occultism:otherworld_sapling integrateddynamics:menril_sapling projectvibrantjourneys:glowcap projectvibrantjourneys:crimson_nettle projectvibrantjourneys:warped_nettle twilightforest:mayapple deeperdarker:echo_sapling create_dd:rubber_sapling vegandelight:wild_soybean minecraft:firefly_bush minecraft:bush minecraft:short_dry_grass minecraft:tall_dry_grass minecraft:cactus_flower tfc:plant/allium tfc:plant/anthurium tfc:plant/arrowhead tfc:plant/artist_conk natures_spirit:purple_heather natures_spirit:white_heather natures_spirit:red_heather + block.10031 = minecraft:cherry_sapling minecraft:torchflower minecraft:short_grass minecraft:grass minecraft:fern minecraft:seagrass biomesoplenty:dune_grass biomesoplenty:dead_grass biomesoplenty:desert_grass biomesoplenty:sprout biomesoplenty:bush environmental:mycelium_sprouts upgrade_aquatic:blue_pickerelweed upgrade_aquatic:purple_pickerelweed byg:beach_grass byg:clover_patch byg:flower_patch byg:horseweed byg:leaf_pile byg:prairie_grass byg:reeds byg:short_beach_grass byg:short_grass byg:tall_prairie_grass byg:weed_grass byg:wilted_grass byg:winter_grass ecotones:clover ecotones:reeds ecotones:sandy_grass ecotones:short_grass terrestria:cattail terrestria:dead_grass terrestria:sakura_leaf_pile terrestria:tall_cattail wildworld:acacia_leaf_pile wildworld:birch_leaf_pile wildworld:dark_oak_leaf_pile wildworld:jungle_leaf_pile wildworld:oak_leaf_pile wildworld:spruce_leaf_pile biomesoplenty:bush minecraft:nether_sprouts minecraft:warped_roots minecraft:crimson_roots projectvibrantjourneys:beach_grass projectvibrantjourneys:short_grass minecraft:oak_sapling minecraft:spruce_sapling minecraft:birch_sapling minecraft:jungle_sapling minecraft:acacia_sapling minecraft:dark_oak_sapling minecraft:dead_bush minecraft:dandelion minecraft:golden_dandelion minecraft:poppy minecraft:blue_orchid minecraft:allium minecraft:azure_bluet minecraft:red_tulip minecraft:orange_tulip minecraft:white_tulip minecraft:pink_tulip minecraft:oxeye_daisy minecraft:cornflower minecraft:lily_of_the_valley minecraft:wither_rose minecraft:sweet_berry_bush biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom atmospheric:rosewood_sapling atmospheric:morado_sapling atmospheric:yucca_sapling atmospheric:kousa_sapling atmospheric:aspen_sapling atmospheric:grimwood_sapling atmospheric:warm_monkey_brush atmospheric:hot_monkey_brush atmospheric:scalding_monkey_brush atmospheric:yucca_flower atmospheric:gilia autumnity:red_maple_sapling autumnity:orange_maple_sapling autumnity:yellow_maple_sapling autumnity:maple_sapling autumnity:autumn_crocus earthmobsmod:buttercup environmental:willow_sapling environmental:cherry_sapling environmental:pink_wisteria_sapling environmental:blue_wisteria_sapling environmental:purple_wisteria_sapling environmental:white_wisteria_sapling farmersdelight:wild_cabbages farmersdelight:wild_onions farmersdelight:wild_tomatoes farmersdelight:wild_carrots farmersdelight:wild_potatoes farmersdelight:wild_beetroots neapolitan:small_banana_frond neapolitan:banana_frond neapolitan:large_banana_frond upgrade_aquatic:river_sapling upgrade_aquatic:beachgrass upgrade_aquatic:white_searocket upgrade_aquatic:pink_searocket environmental:cattail environmental:cartwheel environmental:bluebell environmental:violet environmental:dianthus environmental:red_lotus_flower environmental:white_lotus_flower environmental:yellow_hibiscus environmental:orange_hibiscus environmental:red_hibiscus environmental:pink_hibiscus environmental:magenta_hibiscus environmental:purple_hibiscus buzzier_bees:buttercup buzzier_bees:white_clover buzzier_bees:pink_clover neapolitan:strawberry_pips biomesoplenty:origin_sapling biomesoplenty:flowering_oak_sapling biomesoplenty:rainbow_birch_sapling biomesoplenty:yellow_autumn_sapling biomesoplenty:orange_autumn_sapling biomesoplenty:maple_sapling biomesoplenty:fir_sapling biomesoplenty:redwood_sapling biomesoplenty:white_cherry_sapling biomesoplenty:pink_cherry_sapling biomesoplenty:mahogany_sapling biomesoplenty:jacaranda_sapling biomesoplenty:palm_sapling biomesoplenty:willow_sapling biomesoplenty:dead_sapling biomesoplenty:magic_sapling biomesoplenty:umbran_sapling biomesoplenty:hellbark_sapling astralsorcery:glow_flower botania:white_mystical_flower botania:gray_mystical_flower botania:orange_mystical_flower botania:magenta_mystical_flower botania:light_blue_mystical_flower botania:light_gray_mystical_flower botania:yellow_mystical_flower botania:lime_mystical_flower botania:pink_mystical_flower botania:cyan_mystical_flower botania:purple_mystical_flower botania:blue_mystical_flower botania:brown_mystical_flower botania:green_mystical_flower botania:red_mystical_flower botania:black_mystical_flower botania:white_mushroom botania:orange_mushroom botania:magenta_mushroom botania:light_blue_mushroom botania:yellow_mushroom botania:lime_mushroom botania:pink_mushroom botania:gray_mushroom botania:light_gray_mushroom botania:cyan_mushroom botania:purple_mushroom botania:blue_mushroom botania:brown_mushroom botania:green_mushroom botania:red_mushroom botania:black_mushroom botania:hydroangeas botania:manastar botania:pure_daisy botania:endoflame botania:thermalily botania:rosa_arcana botania:munchdew botania:entropinnyum botania:kekimurus botania:gourmaryllis botania:narslimmus botania:spectrolus botania:dandelifeon botania:rafflowsia botania:shulk_me_not botania:bellethorn botania:bellethorn_chibi botania:bergamute botania:dreadthorn botania:heisei_dream botania:tigerseye botania:jaded_amaranthus botania:orechid botania:fallen_kanade botania:exoflame botania:agricarnation botania:agricarnation_chibi botania:hopperhock botania:hopperhock_chibi botania:tangleberrie botania:jiyuulia botania:rannuncarpus botania:rannuncarpus_chibi botania:hyacidus botania:pollidisiac botania:clayconia botania:clayconia_chibi botania:loonium botania:daffomill botania:vinculotus botania:spectranthemum botania:medumone botania:marimorphosis botania:marimorphosis_chibi botania:bubbell botania:bubbell_chibi botania:solegnolia botania:solegnolia_chibi botania:orechid_ignem terrestria:tiny_cactus pamhc2trees:apple_sapling pamhc2trees:avocado_sapling pamhc2trees:candlenut_sapling pamhc2trees:cherry_sapling pamhc2trees:chestnut_sapling pamhc2trees:gooseberry_sapling pamhc2trees:lemon_sapling pamhc2trees:nutmeg_sapling pamhc2trees:orange_sapling pamhc2trees:peach_sapling pamhc2trees:pear_sapling pamhc2trees:plum_sapling pamhc2trees:walnut_sapling pamhc2trees:spiderweb_sapling pamhc2trees:hazelnut_sapling pamhc2trees:pawpaw_sapling pamhc2trees:soursop_sapling pamhc2trees:almond_sapling pamhc2trees:apricot_sapling pamhc2trees:banana_sapling pamhc2trees:cashew_sapling pamhc2trees:cinnamon_sapling pamhc2trees:coconut_sapling pamhc2trees:date_sapling pamhc2trees:dragonfruit_sapling pamhc2trees:durian_sapling pamhc2trees:fig_sapling pamhc2trees:grapefruit_sapling pamhc2trees:lime_sapling pamhc2trees:mango_sapling pamhc2trees:olive_sapling pamhc2trees:papaya_sapling pamhc2trees:paperbark_sapling pamhc2trees:pecan_sapling pamhc2trees:peppercorn_sapling pamhc2trees:persimmon_sapling pamhc2trees:pistachio_sapling pamhc2trees:pomegranate_sapling pamhc2trees:starfruit_sapling pamhc2trees:vanillabean_sapling pamhc2trees:breadfruit_sapling pamhc2trees:guava_sapling pamhc2trees:jackfruit_sapling pamhc2trees:lychee_sapling pamhc2trees:passionfruit_sapling pamhc2trees:rambutan_sapling pamhc2trees:tamarind_sapling pamhc2trees:maple_sapling pamhc2trees:pinenut_sapling byg:purple_bulbis_anomaly byg:blue_bulbis_anomaly byg:embur_wart byg:cryptic_bramble biomesoplenty:glowshroom biomesoplenty:toadstool biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom biomesoplenty:mangrove_root biomesoplenty:reed biomesoplenty:sprout biomesoplenty:bush pamhc2crops:aridgarden pamhc2crops:frostgarden pamhc2crops:shadedgarden pamhc2crops:soggygarden pamhc2crops:tropicalgarden pamhc2crops:windygarden pamhc2crops:pamamaranthcrop pamhc2crops:pambarleycrop pamhc2crops:pambeancrop pamhc2crops:pamchickpeacrop pamhc2crops:pamcorncrop pamhc2crops:pamlentilcrop pamhc2crops:pammilletcrop pamhc2crops:pamoatcrop pamhc2crops:pamquinoacrop pamhc2crops:pamricecrop pamhc2crops:pamryecrop pamhc2crops:pamsoybeancrops pamhc2crops:pamcottoncrop pamhc2crops:pamflaxcrop pamhc2crops:pamkenafcrop pamhc2crops:pamjutecrop pamhc2crops:pamsisalcrop pamhc2crops:pamartichokecrop pamhc2crops:pamasparaguscrop pamhc2crops:pambellpeppercrop pamhc2crops:pambroccolicrop pamhc2crops:pambrusselsproutcrop pamhc2crops:pamcabbagecrop pamhc2crops:pamcauliflowercrop pamhc2crops:pamcelerycrop pamhc2crops:pamchilipeppercrop pamhc2crops:pamcucumbercrop pamhc2crops:pameggplantcrop pamhc2crops:pamkalecrops pamhc2crops:pamlettucecrop pamhc2crops:pamokracrop pamhc2crops:pampeascrop pamhc2crops:pamspinachcrop pamhc2crops:pamtomatillocrop pamhc2crops:pamtomatocrop pamhc2crops:pamwintersquashcrop pamhc2crops:pamzucchinicrop pamhc2crops:pamarrowrootcrop pamhc2crops:pamcassavacrop pamhc2crops:pamgarliccrop pamhc2crops:pamjicamacrop pamhc2crops:pamleekcrop pamhc2crops:pamkohlrabicrop pamhc2crops:pamonioncrop pamhc2crops:pamparsnipcrop pamhc2crops:pampeanutcrop pamhc2crops:pamradishcrop pamhc2crops:pamrhubarbcrop pamhc2crops:pamrutabagacrop pamhc2crops:pamscallioncrop pamhc2crops:pamsweetpotatocrop pamhc2crops:pamtarocrop pamhc2crops:pamturnipcrop pamhc2crops:pamwaterchestnutcrop pamhc2crops:pamblackberrycrop pamhc2crops:pamblueberrycrop pamhc2crops:pamcactusfruitcrop pamhc2crops:pamcandleberrycrop pamhc2crops:pamcantaloupecrop pamhc2crops:pamcranberrycrop pamhc2crops:pamelderberrycrop pamhc2crops:pamgrapecrop pamhc2crops:pamgreengrapecrop pamhc2crops:pamhuckleberrycrop pamhc2crops:pamjuniperberrycrop pamhc2crops:pamkiwicrop pamhc2crops:pammullberrycrop pamhc2crops:pampineapplecrop pamhc2crops:pamraspberrycrop pamhc2crops:pamstrawberrycrop pamhc2crops:pamcoffeebeancrop pamhc2crops:pamtealeafcrop pamhc2crops:pamagavecrop pamhc2crops:pamwhitemushroomcrop pamhc2crops:pamgingercrop pamhc2crops:pamsesamecrop pamhc2crops:pamspiceleafcrop pamhc2crops:pammustardcrop byg:lament_sprouts byg:synthian_fungus byg:blue_glowcane byg:pink_glowcane byg:purple_glowcane byg:red_glowcane byg:warped_bush byg:blue_glowshroom byg:purple_glowshroom byg:scorched_bush byg:soul_shroom byg:soul nat_shroom_spore_end byg:death_cap byg:weeping_roots byg:nether_bristle byg:synthian_sprout byg:synthian_roots byg:hanging_synthian_roots byg:embur_sprouts byg:embur_roots byg:ivis_roots byg:ivis_sprout byg:bulbis_sprouts byg:ether_bush byg:thereal_bellflower byg:nightshade_sprouts byg:nightshade_roots byg:oddity_bush byg:shulkren_fungus byg:vermillion_sculk_tendrils byg:vermillion_sculk_growth byg:green_mushroom byg:weeping_milkcap byg:wood_blewit byg:black_puff byg:crimson_berry_bush byg:blueberry_bush byg:nightshade_berry_bush byg:winter_succulent byg:allium_flower_bush byg:alpine_bellflower byg:amaranth byg:angelica byg:begonia byg:bistort byg:black_rose byg:blue_sage byg:california_poppy byg:crocus byg:cyan_amaranth byg:cyan_rose byg:cyan_tulip byg:daffodil byg:fairy_slipper byg:firecracker_flower_bush byg:green_tulip byg:guzmania byg:incan_lily byg:iris byg:kovan_flower byg:lazarus_bellflower byg:lolipop_flower byg:magenta_amaranth byg:magenta_tulip byg:orange_amaranth byg:orange_daisy byg:osiria_rose byg:peach_leather_flower byg:pink_allium byg:pink_allium_flower_bush byg:pink_anemone byg:pink_daffodil byg:pink_orchid byg:protea_flower byg:purple_amaranth byg:purple_orchid byg:purple_sage byg:purple_tulip byg:red_cornflower byg:red_orchid byg:richea byg:rose byg:snowdrops byg:silver_vase_flower byg:torch_ginger byg:violet_leather_flower byg:white_anemone byg:white_sage byg:white_cyclamen byg:winter_rose byg:winter_scilla byg:yellow_daffodil byg:yellow_tulip byg:horseweed byg:winter_cyclamen cutecore:cherry_leaf_litter cutecore:cherry_wood_sapling cutecore:wisteria_sapling cutecore:wisteria_leaf_litter cutecore:lemon_leaf_litter cutecore:lemon_sapling cutecore:hyacinth cutecore:lotus_flower cutecore:violets cutecore:pink_rose cutecore:white_rose cutecore:rose cutecore:forget_me_nots cutecore:pink_carnation cutecore:red_carnation cutecore:white_carnation forbidden_arcanus:yellow_orchid forbidden_arcanus:golden_orchid immersiveengineering:hemp:growth=bottom0 immersiveengineering:hemp:growth=bottom1 immersiveengineering:hemp:growth=bottom2 immersiveengineering:hemp:growth=bottom3 simplefarming:apple_sapling simplefarming:apricot_sapling simplefarming:banana_sapling simplefarming:cherry_sapling simplefarming:mango_sapling simplefarming:olive_sapling simplefarming:orange_sapling simplefarming:pear_sapling simplefarming:plum_sapling simplefarming:barley_crop simplefarming:cassava_crop simplefarming:corn_crop simplefarming:cotton_crop simplefarming:cross_crop simplefarming:cucumber_crop simplefarming:cumin_plant simplefarming:eggplant_crop simplefarming:ginger_crop simplefarming:honeydew_crop simplefarming:kenaf_crop simplefarming:lettuce_crop simplefarming:oat_crop simplefarming:onion_crop simplefarming:pea_crop simplefarming:peanut_crop simplefarming:pepper_crop simplefarming:quinoa_plant simplefarming:radish_crop simplefarming:rice_crop simplefarming:rye_crop simplefarming:scrop simplefarming:hcrop simplefarming:marshmallow_crop simplefarming:sunflower_plant simplefarming:sorghum_crop simplefarming:soybean_crop simplefarming:spinach_crop simplefarming:sweet_potato_crop simplefarming:tomato_crop simplefarming:turnip_crop simplefarming:wild_crop simplefarming:yam_crop simplefarming:zucchini_crop byg:aspen_sapling byg:baobab_sapling byg:blue_enchanted_sapling byg:green_enchanted_sapling byg:pink_cherry_sapling byg:white_cherry_sapling byg:cika_sapling byg:cypress_sapling byg:ebony_sapling byg:ether_sapling byg:fir_sapling byg:aspen_sapling byg:holly_berry_sapling byg:holly_sapling byg:jacaranda_sapling byg:flowering_jacaranda_sapling byg:indigo_jacaranda_sapling byg:indigo_flowering_jacaranda_sapling byg:lament_sapling byg:mahogany_sapling byg:mangrove_sapling byg:maple_sapling byg:red_maple_sapling byg:silver_maple_sapling byg:nightshade_sapling byg:flowering_nightshade_sapling byg:palm_sapling byg:palo_verde_sapling byg:flowering_palo_verde_sapling byg:pine_sapling byg:rainbow_eucalyptus_sapling byg:redwood_sapling byg:pine_sapling byg:skyris_sapling byg:green_apple_skyris_sapling byg:willow_sapling byg:witch_hazel_sapling byg:blooming_witch_hazel_sapling byg:zelkova_sapling byg:withering_oak_sapling byg:araucaria_sapling byg:blue_spruce_sapling byg:brown_birch_sapling byg:brown_oak_sapling byg:zelkova_sapling byg:brown_zelkova_sapling byg:joshua_sapling byg:ripe_joshua_sapling byg:orange_birch_sapling byg:orange_oak_sapling byg:orange_spruce_sapling byg:orchard_sapling byg:flowering_orchard_sapling byg:ripe_orchard_sapling byg:red_birch_sapling byg:red_oak_sapling byg:red_spruce_sapling byg:yellow_birch_sapling byg:yellow_spruce_sapling byg:green_mushroom occultism:otherworld_sapling_natural occultism:otherworld_sapling integrateddynamics:menril_sapling projectvibrantjourneys:glowcap projectvibrantjourneys:crimson_nettle projectvibrantjourneys:warped_nettle twilightforest:mayapple deeperdarker:echo_sapling create_dd:rubber_sapling vegandelight:wild_soybean minecraft:firefly_bush minecraft:bush minecraft:short_dry_grass minecraft:tall_dry_grass minecraft:cactus_flower tfc:plant/allium tfc:plant/anthurium tfc:plant/arrowhead tfc:plant/artist_conk natures_spirit:purple_heather natures_spirit:white_heather natures_spirit:red_heather # CROPS LIKE ENTITIES block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots farmersdelight:cabbages farmersdelight:budding_tomatoes farmersdelight:onions vegandelight:soybean_crop tfc:crop/carrot tfc:crop/tomato farmersrespite:small_tea_bush From b9ee12f5434a6e5dffbeef3975616068c0ea42bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sun, 29 Mar 2026 14:36:57 -0600 Subject: [PATCH 115/147] Normal fix --- .../common/solid_voxy_blocks_fragment.glsl | 24 +++++++++++++++++-- shaders/common/voxy.json | 2 +- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/shaders/common/solid_voxy_blocks_fragment.glsl b/shaders/common/solid_voxy_blocks_fragment.glsl index 79fa7261..848638c0 100644 --- a/shaders/common/solid_voxy_blocks_fragment.glsl +++ b/shaders/common/solid_voxy_blocks_fragment.glsl @@ -34,6 +34,7 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { uint face = parameters.face; uint customId = parameters.customId; + vec4 tintColor = parameters.tinting; // Includes @@ -81,6 +82,7 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { // vec3 normal = gl_NormalMatrix * gl_Normal; vec3 normal = vec3(uint((face>>1)==2), uint((face>>1)==0), uint((face>>1)==1)) * (float(int(face)&1)*2-1); + normal = mat3(vxModelView) * normal; float astroLightStrength; // Comprobar la longitud al cuadrado (dot product) es mucho más rápido que la longitud (sqrt). @@ -183,9 +185,27 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { float dither = rDither(gl_FragCoord.xy); #endif + vec4 blockColor = tintColor; + float block_luma = luma(tintColor.rgb); + vec3 finalCandleColor = candleColor; - gbufferData0 = parameters.sampledColour * parameters.tinting; - gbufferData1 = parameters.sampledColour * parameters.tinting; + float shadowValue = abs((dayNightMix * 2.0) - 1.0); + + vec3 realLight = + omniLight + + (shadowValue * directLightColor * directLightStrength) * (1.0 - (rainStrength * 0.75)) + + finalCandleColor; + + blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * 0.125); + blockColor.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); + + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); + + gbufferData0 = vec4(directLightStrength, directLightStrength, directLightStrength, 1.0); + gbufferData1 = vec4(directLightStrength, directLightStrength, directLightStrength, 1.0); + + // gbufferData0 = parameters.sampledColour * parameters.tinting; + // gbufferData1 = parameters.sampledColour * parameters.tinting; } \ No newline at end of file diff --git a/shaders/common/voxy.json b/shaders/common/voxy.json index 67f16388..6c35a913 100644 --- a/shaders/common/voxy.json +++ b/shaders/common/voxy.json @@ -1,6 +1,6 @@ { "version": 1, - "uniforms": ["sunPosition", "dayNightMix", "rainStrength", "skyColor", "isEyeInWater", "eyeBrightnessSmooth", "vxViewProjInv", "viewWidth", "viewHeight", "vxRenderDistance"], + "uniforms": ["sunPosition", "dayNightMix", "rainStrength", "skyColor", "isEyeInWater", "eyeBrightnessSmooth", "vxViewProjInv", "viewWidth", "viewHeight", "vxRenderDistance", "nightVision", "vxModelView"], "samplers": {}, "opaqueDrawBuffers": [1, 7], "translucentDrawBuffers": [1] From b4d8618779321152cf895a06adcfb4f846393d98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sun, 5 Apr 2026 00:05:46 -0600 Subject: [PATCH 116/147] Falta usar farDirectLightStrength como luz de follaje --- shaders/common/solid_blocks_fragment.glsl | 7 ++ .../common/solid_voxy_blocks_fragment.glsl | 97 +++++++++++++------ shaders/common/voxy.json | 2 +- shaders/lib/day_blend.glsl | 22 +++++ shaders/src/hi_sky_voxy.glsl | 7 +- shaders/src/light_vertex.glsl | 8 +- 6 files changed, 104 insertions(+), 39 deletions(-) diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 42724db7..1569c323 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -241,6 +241,9 @@ void main() { blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * 0.125); blockColor.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); + + // DEBUG + blockColor = vec4(vec3(directLightStrength), 1.0); #endif #if defined GBUFFER_ENTITIES @@ -257,6 +260,10 @@ void main() { blockColor.rgb *= 1.5; #endif + // DEBUG + // blockColor = vec4(omniLight, 1.0); + // blockColor = vec4(vec3(directLightStrength), 1.0); + #include "/src/finalcolor.glsl" #include "/src/writebuffers.glsl" } diff --git a/shaders/common/solid_voxy_blocks_fragment.glsl b/shaders/common/solid_voxy_blocks_fragment.glsl index 848638c0..74d49a9d 100644 --- a/shaders/common/solid_voxy_blocks_fragment.glsl +++ b/shaders/common/solid_voxy_blocks_fragment.glsl @@ -14,7 +14,7 @@ #endif layout(location = 0) out vec4 gbufferData0; -layout(location = 1) out vec4 gbufferData1; +// layout(location = 1) out vec4 gbufferData1; /* struct VoxyFragmentParameters { @@ -30,12 +30,35 @@ struct VoxyFragmentParameters { */ void voxy_emitFragment(VoxyFragmentParameters parameters) { + // "Uniforms" Voxy no recalcula en cada frame algujnos uniforms + float hour_world = worldTime * 0.001; + float dayMomentV = hour_world * 0.04166666666666667; + + float moment_aux = dayMomentV - 0.25; + float moment_aux_2 = moment_aux * moment_aux; + float dayMixerV = clamp(-moment_aux_2 * 20.0 + 1.25, 0.0, 1.0); + + float moment_aux_3 = dayMomentV - 0.75; + float moment_aux_4 = moment_aux_3 * moment_aux_3; + float nightMixerV = clamp(-moment_aux_4 * 50.0 + 3.125, 0.0, 1.0); + // Re-assign uint face = parameters.face; uint customId = parameters.customId; vec4 tintColor = parameters.tinting; - + + // Banderas especiales + + bool isFoliageEntity = ( + customId == ENTITY_LOWERGRASS || + customId == ENTITY_UPPERGRASS || + customId == ENTITY_SMALLGRASS || + customId == ENTITY_SMALLENTS || + customId == ENTITY_LEAVES || + customId == ENTITY_SMALLENTS_NW + ); + // Includes #include "/src/hi_sky_voxy.glsl" @@ -45,10 +68,13 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) float fogDensityCoeff = FOG_DENSITY * FOG_ADJUST; #else - float fogDensityCoeff = dayBlendFloat( + float fogDensityCoeff = dayBlendFloatVoxy( FOG_SUNSET, FOG_DAY, - FOG_NIGHT + FOG_NIGHT, + dayMixerV, + nightMixerV, + dayMomentV, ) * FOG_ADJUST; #endif @@ -101,49 +127,61 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { #endif // Omni light intensity changes by angle - float omniStrength = ((directLightStrength + 1.0) * 0.25) + 0.75; + float omniStrength = ((directLightStrength + 1.0) * 0.25) + 0.75; // Calculamos color de luz directa - #ifdef UNKNOWN_DIM + #if defined UNKNOWN_DIM vec3 directLightColor = texture2D(lightmap, vec2(0.0, parameters.lightMap.y)).rgb; #else - vec3 directLightColor = dayBlend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); + vec3 directLightColor = dayBlendVoxy(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR, dayMixerV, nightMixerV, dayMomentV); #if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 directLightColor += (endFlashIntensity * endFlashIntensity * 0.1); #endif #endif - directLightStrength = clamp(directLightStrength, 0.0, 1.0); + if (isFoliageEntity) { // It's foliage, light is atenuated by angle + #ifdef SHADOW_CASTING + directLightStrength = sqrt(abs(directLightStrength)); + #else + directLightStrength = (clamp(directLightStrength, 0.0, 1.0) * 0.5 + 0.5) * 0.75; + #endif + omniStrength = 1.0; + } else { + directLightStrength = clamp(directLightStrength, 0.0, 1.0); + } #if defined THE_END || defined NETHER - vec3 omniLight = LIGHT_DAY_COLOR; + vec3 omniLight = LIGHT_DAY_COLOR * omniStrength; #else directLightColor = mix(directLightColor, ZENITH_SKY_RAIN_COLOR * luma(directLightColor) * 0.4, rainStrength); // Minimal light vec3 omniColor = mix(ZenithSkyColorRGB, directLightColor * 0.45, OMNI_TINT); float omniColorLuma = colorAverage(omniColor); - // --- OPTIMIZACIÓN #3: Prevenir división por cero --- float lumaRatio = AVOID_DARK_LEVEL / max(omniColorLuma, 0.0001); - vec3 omniColorMin = omniColor * lumaRatio; omniColor = max(omniColor, omniColorMin); - + vec3 omniLight = mix(omniColorMin, omniColor, visibleSky) * omniStrength; #endif - if (isEyeInWater == 0) { - // Reemplazar pow(x, 10.0) con multiplicaciones --- - // Esto es órdenes de magnitud más rápido. x^10 = (x^2)^2 * x^2 - float visSky2 = visibleSky * visibleSky; // x^2 - float visSky4 = visSky2 * visSky2; // x^4 - float visSky8 = visSky4 * visSky4; // x^8 - float vis_sky_10 = visSky8 * visSky2; // x^10 - directLightStrength = mix(0.0, directLightStrength, vis_sky_10); - } else { - directLightStrength = mix(0.0, directLightStrength, visibleSky); - } + #if !defined THE_END && !defined NETHER + #ifndef SHADOW_CASTING + // Fake shadows + if (isEyeInWater == 0) { + // Reemplazar pow(x, 10.0) con multiplicaciones --- + float visSky2 = visibleSky * visibleSky; + float visSky4 = visSky2 * visSky2; + float visSky8 = visSky4 * visSky4; + directLightStrength = mix(0.0, directLightStrength, visSky8 * visSky2); + } else { + directLightStrength = mix(0.0, directLightStrength, visibleSky); + } + #else + directLightStrength = mix(0.0, directLightStrength, visibleSky); + #endif + #endif if (customId == ENTITY_EMMISIVE) { directLightStrength = 10.0; @@ -179,7 +217,7 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { // ---- Original Fragment Logic - #if AA_TYPE > 0 + #if AA_TYPE > 0 float dither = shiftedRDither(gl_FragCoord.xy); #else float dither = rDither(gl_FragCoord.xy); @@ -193,8 +231,7 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { float shadowValue = abs((dayNightMix * 2.0) - 1.0); - vec3 realLight = - omniLight + + vec3 realLight = omniLight + (shadowValue * directLightColor * directLightStrength) * (1.0 - (rainStrength * 0.75)) + finalCandleColor; @@ -203,9 +240,9 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); - gbufferData0 = vec4(directLightStrength, directLightStrength, directLightStrength, 1.0); - gbufferData1 = vec4(directLightStrength, directLightStrength, directLightStrength, 1.0); + // gbufferData0 = parameters.sampledColour * blockColor; + // gbufferData1 = parameters.sampledColour * blockColor; - // gbufferData0 = parameters.sampledColour * parameters.tinting; - // gbufferData1 = parameters.sampledColour * parameters.tinting; + gbufferData0 = vec4(vec3(directLightStrength), 1.0); + // gbufferData1 = vec4(visibleSky, visibleSky, visibleSky, 1.0); } \ No newline at end of file diff --git a/shaders/common/voxy.json b/shaders/common/voxy.json index 6c35a913..fcc4a4d0 100644 --- a/shaders/common/voxy.json +++ b/shaders/common/voxy.json @@ -1,6 +1,6 @@ { "version": 1, - "uniforms": ["sunPosition", "dayNightMix", "rainStrength", "skyColor", "isEyeInWater", "eyeBrightnessSmooth", "vxViewProjInv", "viewWidth", "viewHeight", "vxRenderDistance", "nightVision", "vxModelView"], + "uniforms": ["worldTime", "sunPosition", "dayNightMix", "rainStrength", "skyColor", "isEyeInWater", "eyeBrightnessSmooth", "vxViewProjInv", "viewWidth", "viewHeight", "vxRenderDistance", "nightVision", "vxModelView"], "samplers": {}, "opaqueDrawBuffers": [1, 7], "translucentDrawBuffers": [1] diff --git a/shaders/lib/day_blend.glsl b/shaders/lib/day_blend.glsl index bca33a20..b99afa4a 100644 --- a/shaders/lib/day_blend.glsl +++ b/shaders/lib/day_blend.glsl @@ -15,5 +15,27 @@ float dayBlendFloat(float sunset, float day, float night) { float dayValue = mix(sunset, day, dayMixer); float nightValue = mix(sunset, night, nightMixer); + return mix(dayValue, nightValue, step(0.5, dayMoment)); +} + +// Voxy + +vec3 dayBlendVoxy(vec3 sunset, vec3 day, vec3 night, float dayMixerV, float nightMixerV, float dayMomentV) { + // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) + // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) + + vec3 dayColor = mix(sunset, day, dayMixerV); + vec3 nightColor = mix(sunset, night, nightMixerV); + + return mix(dayColor, nightColor, step(0.5, dayMomentV)); +} + +float dayBlendFloatVoxy(float sunset, float day, float night, float dayMixerV, float nightMixerV, float dayMomentV) { + // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) + // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) + + float dayValue = mix(sunset, day, dayMixer); + float nightValue = mix(sunset, night, nightMixer); + return mix(dayValue, nightValue, step(0.5, dayMoment)); } \ No newline at end of file diff --git a/shaders/src/hi_sky_voxy.glsl b/shaders/src/hi_sky_voxy.glsl index b5f6c3bd..7428c494 100644 --- a/shaders/src/hi_sky_voxy.glsl +++ b/shaders/src/hi_sky_voxy.glsl @@ -2,10 +2,13 @@ vec3 ZenithSkyColorRGB = skyColor; vec3 zenithSkyColor = rgbToXyz(ZenithSkyColorRGB); #else - vec3 ZenithSkyColorRGB = dayBlend( + vec3 ZenithSkyColorRGB = dayBlendVoxy( ZENITH_SUNSET_COLOR, ZENITH_DAY_COLOR, - ZENITH_NIGHT_COLOR + ZENITH_NIGHT_COLOR, + dayMixerV, + nightMixerV, + dayMomentV ); ZenithSkyColorRGB = mix( diff --git a/shaders/src/light_vertex.glsl b/shaders/src/light_vertex.glsl index 4bc7f622..6fdb4207 100644 --- a/shaders/src/light_vertex.glsl +++ b/shaders/src/light_vertex.glsl @@ -51,10 +51,6 @@ if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals directLightStrength = mix(-astroLightStrength, astroLightStrength, dayNightMix); #endif -// Omni light intensity changes by angle -// float omniStrength = (directLightStrength * .125) + 1.0; -// float omniStrength = (directLightStrength) + 1.0; - // Direct light color #ifdef UNKNOWN_DIM directLightColor = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; @@ -76,7 +72,7 @@ float omniStrength = ((directLightStrength + 1.0) * 0.25) + 0.75; if (mc_Entity.x != ENTITY_LEAVES) { farDirectLightStrength = farDirectLightStrength * 0.75 + 0.25; } - + // Ahora, la lógica del if/else solo modifica 'directLightStrength' y 'omniStrength'. if (isFoliage > .2) { // It's foliage, light is atenuated by angle #ifdef SHADOW_CASTING @@ -105,7 +101,7 @@ float omniStrength = ((directLightStrength + 1.0) * 0.25) + 0.75; float lumaRatio = AVOID_DARK_LEVEL / max(omniColorLuma, 0.0001); vec3 omniColorMin = omniColor * lumaRatio; omniColor = max(omniColor, omniColorMin); - + omniLight = mix(omniColorMin, omniColor, visibleSky) * omniStrength; #endif From 42f4f0c699a2c3a026955821614f606b2cbe1147 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 18 Apr 2026 18:18:38 -0600 Subject: [PATCH 117/147] farDirectLightStrength --- .../common/solid_voxy_blocks_fragment.glsl | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/shaders/common/solid_voxy_blocks_fragment.glsl b/shaders/common/solid_voxy_blocks_fragment.glsl index 74d49a9d..1aad1ee9 100644 --- a/shaders/common/solid_voxy_blocks_fragment.glsl +++ b/shaders/common/solid_voxy_blocks_fragment.glsl @@ -139,7 +139,12 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { #endif #endif + float farDirectLightStrength = clamp(directLightStrength, 0.0, 1.0); if (isFoliageEntity) { // It's foliage, light is atenuated by angle + if (customId != ENTITY_LEAVES) { + farDirectLightStrength = farDirectLightStrength * 0.75 + 0.25; + } + #ifdef SHADOW_CASTING directLightStrength = sqrt(abs(directLightStrength)); #else @@ -215,6 +220,21 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { float frogAdjust = sqrt(clamp(fogFragCoord / float(vxRenderDistance), 0.0, 1.0)); #endif + #if !defined NETHER + #ifdef SHADOW_CASTING + if (isFoliageEntity) { + // directLightStrength = + // mix( + // directLightStrength, + // farDirectLightStrength, + // clamp((gl_Position.z / SHADOW_LIMIT) * 2.0 - 0.5, 0.0, 1.0) + // ); + + directLightStrength = farDirectLightStrength; + } + #endif + #endif + // ---- Original Fragment Logic #if AA_TYPE > 0 From d71327f6d20f8450e36428e611f48730721ffaac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 20 Apr 2026 22:39:37 -0600 Subject: [PATCH 118/147] Blocks 26.x --- shaders/block.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shaders/block.properties b/shaders/block.properties index 7fa3bf80..68f05529 100644 --- a/shaders/block.properties +++ b/shaders/block.properties @@ -3,7 +3,7 @@ #if MC_VERSION >= 11300 # GRASS LIKE ENTITIES - block.10031 = minecraft:cherry_sapling minecraft:torchflower minecraft:short_grass minecraft:grass minecraft:fern minecraft:seagrass biomesoplenty:dune_grass biomesoplenty:dead_grass biomesoplenty:desert_grass biomesoplenty:sprout biomesoplenty:bush environmental:mycelium_sprouts upgrade_aquatic:blue_pickerelweed upgrade_aquatic:purple_pickerelweed byg:beach_grass byg:clover_patch byg:flower_patch byg:horseweed byg:leaf_pile byg:prairie_grass byg:reeds byg:short_beach_grass byg:short_grass byg:tall_prairie_grass byg:weed_grass byg:wilted_grass byg:winter_grass ecotones:clover ecotones:reeds ecotones:sandy_grass ecotones:short_grass terrestria:cattail terrestria:dead_grass terrestria:sakura_leaf_pile terrestria:tall_cattail wildworld:acacia_leaf_pile wildworld:birch_leaf_pile wildworld:dark_oak_leaf_pile wildworld:jungle_leaf_pile wildworld:oak_leaf_pile wildworld:spruce_leaf_pile biomesoplenty:bush minecraft:nether_sprouts minecraft:warped_roots minecraft:crimson_roots projectvibrantjourneys:beach_grass projectvibrantjourneys:short_grass minecraft:oak_sapling minecraft:spruce_sapling minecraft:birch_sapling minecraft:jungle_sapling minecraft:acacia_sapling minecraft:dark_oak_sapling minecraft:dead_bush minecraft:dandelion minecraft:poppy minecraft:blue_orchid minecraft:allium minecraft:azure_bluet minecraft:red_tulip minecraft:orange_tulip minecraft:white_tulip minecraft:pink_tulip minecraft:oxeye_daisy minecraft:cornflower minecraft:lily_of_the_valley minecraft:wither_rose minecraft:sweet_berry_bush biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom atmospheric:rosewood_sapling atmospheric:morado_sapling atmospheric:yucca_sapling atmospheric:kousa_sapling atmospheric:aspen_sapling atmospheric:grimwood_sapling atmospheric:warm_monkey_brush atmospheric:hot_monkey_brush atmospheric:scalding_monkey_brush atmospheric:yucca_flower atmospheric:gilia autumnity:red_maple_sapling autumnity:orange_maple_sapling autumnity:yellow_maple_sapling autumnity:maple_sapling autumnity:autumn_crocus earthmobsmod:buttercup environmental:willow_sapling environmental:cherry_sapling environmental:pink_wisteria_sapling environmental:blue_wisteria_sapling environmental:purple_wisteria_sapling environmental:white_wisteria_sapling farmersdelight:wild_cabbages farmersdelight:wild_onions farmersdelight:wild_tomatoes farmersdelight:wild_carrots farmersdelight:wild_potatoes farmersdelight:wild_beetroots neapolitan:small_banana_frond neapolitan:banana_frond neapolitan:large_banana_frond upgrade_aquatic:river_sapling upgrade_aquatic:beachgrass upgrade_aquatic:white_searocket upgrade_aquatic:pink_searocket environmental:cattail environmental:cartwheel environmental:bluebell environmental:violet environmental:dianthus environmental:red_lotus_flower environmental:white_lotus_flower environmental:yellow_hibiscus environmental:orange_hibiscus environmental:red_hibiscus environmental:pink_hibiscus environmental:magenta_hibiscus environmental:purple_hibiscus buzzier_bees:buttercup buzzier_bees:white_clover buzzier_bees:pink_clover neapolitan:strawberry_pips biomesoplenty:origin_sapling biomesoplenty:flowering_oak_sapling biomesoplenty:rainbow_birch_sapling biomesoplenty:yellow_autumn_sapling biomesoplenty:orange_autumn_sapling biomesoplenty:maple_sapling biomesoplenty:fir_sapling biomesoplenty:redwood_sapling biomesoplenty:white_cherry_sapling biomesoplenty:pink_cherry_sapling biomesoplenty:mahogany_sapling biomesoplenty:jacaranda_sapling biomesoplenty:palm_sapling biomesoplenty:willow_sapling biomesoplenty:dead_sapling biomesoplenty:magic_sapling biomesoplenty:umbran_sapling biomesoplenty:hellbark_sapling astralsorcery:glow_flower botania:white_mystical_flower botania:gray_mystical_flower botania:orange_mystical_flower botania:magenta_mystical_flower botania:light_blue_mystical_flower botania:light_gray_mystical_flower botania:yellow_mystical_flower botania:lime_mystical_flower botania:pink_mystical_flower botania:cyan_mystical_flower botania:purple_mystical_flower botania:blue_mystical_flower botania:brown_mystical_flower botania:green_mystical_flower botania:red_mystical_flower botania:black_mystical_flower botania:white_mushroom botania:orange_mushroom botania:magenta_mushroom botania:light_blue_mushroom botania:yellow_mushroom botania:lime_mushroom botania:pink_mushroom botania:gray_mushroom botania:light_gray_mushroom botania:cyan_mushroom botania:purple_mushroom botania:blue_mushroom botania:brown_mushroom botania:green_mushroom botania:red_mushroom botania:black_mushroom botania:hydroangeas botania:manastar botania:pure_daisy botania:endoflame botania:thermalily botania:rosa_arcana botania:munchdew botania:entropinnyum botania:kekimurus botania:gourmaryllis botania:narslimmus botania:spectrolus botania:dandelifeon botania:rafflowsia botania:shulk_me_not botania:bellethorn botania:bellethorn_chibi botania:bergamute botania:dreadthorn botania:heisei_dream botania:tigerseye botania:jaded_amaranthus botania:orechid botania:fallen_kanade botania:exoflame botania:agricarnation botania:agricarnation_chibi botania:hopperhock botania:hopperhock_chibi botania:tangleberrie botania:jiyuulia botania:rannuncarpus botania:rannuncarpus_chibi botania:hyacidus botania:pollidisiac botania:clayconia botania:clayconia_chibi botania:loonium botania:daffomill botania:vinculotus botania:spectranthemum botania:medumone botania:marimorphosis botania:marimorphosis_chibi botania:bubbell botania:bubbell_chibi botania:solegnolia botania:solegnolia_chibi botania:orechid_ignem terrestria:tiny_cactus pamhc2trees:apple_sapling pamhc2trees:avocado_sapling pamhc2trees:candlenut_sapling pamhc2trees:cherry_sapling pamhc2trees:chestnut_sapling pamhc2trees:gooseberry_sapling pamhc2trees:lemon_sapling pamhc2trees:nutmeg_sapling pamhc2trees:orange_sapling pamhc2trees:peach_sapling pamhc2trees:pear_sapling pamhc2trees:plum_sapling pamhc2trees:walnut_sapling pamhc2trees:spiderweb_sapling pamhc2trees:hazelnut_sapling pamhc2trees:pawpaw_sapling pamhc2trees:soursop_sapling pamhc2trees:almond_sapling pamhc2trees:apricot_sapling pamhc2trees:banana_sapling pamhc2trees:cashew_sapling pamhc2trees:cinnamon_sapling pamhc2trees:coconut_sapling pamhc2trees:date_sapling pamhc2trees:dragonfruit_sapling pamhc2trees:durian_sapling pamhc2trees:fig_sapling pamhc2trees:grapefruit_sapling pamhc2trees:lime_sapling pamhc2trees:mango_sapling pamhc2trees:olive_sapling pamhc2trees:papaya_sapling pamhc2trees:paperbark_sapling pamhc2trees:pecan_sapling pamhc2trees:peppercorn_sapling pamhc2trees:persimmon_sapling pamhc2trees:pistachio_sapling pamhc2trees:pomegranate_sapling pamhc2trees:starfruit_sapling pamhc2trees:vanillabean_sapling pamhc2trees:breadfruit_sapling pamhc2trees:guava_sapling pamhc2trees:jackfruit_sapling pamhc2trees:lychee_sapling pamhc2trees:passionfruit_sapling pamhc2trees:rambutan_sapling pamhc2trees:tamarind_sapling pamhc2trees:maple_sapling pamhc2trees:pinenut_sapling byg:purple_bulbis_anomaly byg:blue_bulbis_anomaly byg:embur_wart byg:cryptic_bramble biomesoplenty:glowshroom biomesoplenty:toadstool biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom biomesoplenty:mangrove_root biomesoplenty:reed biomesoplenty:sprout biomesoplenty:bush pamhc2crops:aridgarden pamhc2crops:frostgarden pamhc2crops:shadedgarden pamhc2crops:soggygarden pamhc2crops:tropicalgarden pamhc2crops:windygarden pamhc2crops:pamamaranthcrop pamhc2crops:pambarleycrop pamhc2crops:pambeancrop pamhc2crops:pamchickpeacrop pamhc2crops:pamcorncrop pamhc2crops:pamlentilcrop pamhc2crops:pammilletcrop pamhc2crops:pamoatcrop pamhc2crops:pamquinoacrop pamhc2crops:pamricecrop pamhc2crops:pamryecrop pamhc2crops:pamsoybeancrops pamhc2crops:pamcottoncrop pamhc2crops:pamflaxcrop pamhc2crops:pamkenafcrop pamhc2crops:pamjutecrop pamhc2crops:pamsisalcrop pamhc2crops:pamartichokecrop pamhc2crops:pamasparaguscrop pamhc2crops:pambellpeppercrop pamhc2crops:pambroccolicrop pamhc2crops:pambrusselsproutcrop pamhc2crops:pamcabbagecrop pamhc2crops:pamcauliflowercrop pamhc2crops:pamcelerycrop pamhc2crops:pamchilipeppercrop pamhc2crops:pamcucumbercrop pamhc2crops:pameggplantcrop pamhc2crops:pamkalecrops pamhc2crops:pamlettucecrop pamhc2crops:pamokracrop pamhc2crops:pampeascrop pamhc2crops:pamspinachcrop pamhc2crops:pamtomatillocrop pamhc2crops:pamtomatocrop pamhc2crops:pamwintersquashcrop pamhc2crops:pamzucchinicrop pamhc2crops:pamarrowrootcrop pamhc2crops:pamcassavacrop pamhc2crops:pamgarliccrop pamhc2crops:pamjicamacrop pamhc2crops:pamleekcrop pamhc2crops:pamkohlrabicrop pamhc2crops:pamonioncrop pamhc2crops:pamparsnipcrop pamhc2crops:pampeanutcrop pamhc2crops:pamradishcrop pamhc2crops:pamrhubarbcrop pamhc2crops:pamrutabagacrop pamhc2crops:pamscallioncrop pamhc2crops:pamsweetpotatocrop pamhc2crops:pamtarocrop pamhc2crops:pamturnipcrop pamhc2crops:pamwaterchestnutcrop pamhc2crops:pamblackberrycrop pamhc2crops:pamblueberrycrop pamhc2crops:pamcactusfruitcrop pamhc2crops:pamcandleberrycrop pamhc2crops:pamcantaloupecrop pamhc2crops:pamcranberrycrop pamhc2crops:pamelderberrycrop pamhc2crops:pamgrapecrop pamhc2crops:pamgreengrapecrop pamhc2crops:pamhuckleberrycrop pamhc2crops:pamjuniperberrycrop pamhc2crops:pamkiwicrop pamhc2crops:pammullberrycrop pamhc2crops:pampineapplecrop pamhc2crops:pamraspberrycrop pamhc2crops:pamstrawberrycrop pamhc2crops:pamcoffeebeancrop pamhc2crops:pamtealeafcrop pamhc2crops:pamagavecrop pamhc2crops:pamwhitemushroomcrop pamhc2crops:pamgingercrop pamhc2crops:pamsesamecrop pamhc2crops:pamspiceleafcrop pamhc2crops:pammustardcrop byg:lament_sprouts byg:synthian_fungus byg:blue_glowcane byg:pink_glowcane byg:purple_glowcane byg:red_glowcane byg:warped_bush byg:blue_glowshroom byg:purple_glowshroom byg:scorched_bush byg:soul_shroom byg:soul nat_shroom_spore_end byg:death_cap byg:weeping_roots byg:nether_bristle byg:synthian_sprout byg:synthian_roots byg:hanging_synthian_roots byg:embur_sprouts byg:embur_roots byg:ivis_roots byg:ivis_sprout byg:bulbis_sprouts byg:ether_bush byg:thereal_bellflower byg:nightshade_sprouts byg:nightshade_roots byg:oddity_bush byg:shulkren_fungus byg:vermillion_sculk_tendrils byg:vermillion_sculk_growth byg:green_mushroom byg:weeping_milkcap byg:wood_blewit byg:black_puff byg:crimson_berry_bush byg:blueberry_bush byg:nightshade_berry_bush byg:winter_succulent byg:allium_flower_bush byg:alpine_bellflower byg:amaranth byg:angelica byg:begonia byg:bistort byg:black_rose byg:blue_sage byg:california_poppy byg:crocus byg:cyan_amaranth byg:cyan_rose byg:cyan_tulip byg:daffodil byg:fairy_slipper byg:firecracker_flower_bush byg:green_tulip byg:guzmania byg:incan_lily byg:iris byg:kovan_flower byg:lazarus_bellflower byg:lolipop_flower byg:magenta_amaranth byg:magenta_tulip byg:orange_amaranth byg:orange_daisy byg:osiria_rose byg:peach_leather_flower byg:pink_allium byg:pink_allium_flower_bush byg:pink_anemone byg:pink_daffodil byg:pink_orchid byg:protea_flower byg:purple_amaranth byg:purple_orchid byg:purple_sage byg:purple_tulip byg:red_cornflower byg:red_orchid byg:richea byg:rose byg:snowdrops byg:silver_vase_flower byg:torch_ginger byg:violet_leather_flower byg:white_anemone byg:white_sage byg:white_cyclamen byg:winter_rose byg:winter_scilla byg:yellow_daffodil byg:yellow_tulip byg:horseweed byg:winter_cyclamen cutecore:cherry_leaf_litter cutecore:cherry_wood_sapling cutecore:wisteria_sapling cutecore:wisteria_leaf_litter cutecore:lemon_leaf_litter cutecore:lemon_sapling cutecore:hyacinth cutecore:lotus_flower cutecore:violets cutecore:pink_rose cutecore:white_rose cutecore:rose cutecore:forget_me_nots cutecore:pink_carnation cutecore:red_carnation cutecore:white_carnation forbidden_arcanus:yellow_orchid forbidden_arcanus:golden_orchid immersiveengineering:hemp:growth=bottom0 immersiveengineering:hemp:growth=bottom1 immersiveengineering:hemp:growth=bottom2 immersiveengineering:hemp:growth=bottom3 simplefarming:apple_sapling simplefarming:apricot_sapling simplefarming:banana_sapling simplefarming:cherry_sapling simplefarming:mango_sapling simplefarming:olive_sapling simplefarming:orange_sapling simplefarming:pear_sapling simplefarming:plum_sapling simplefarming:barley_crop simplefarming:cassava_crop simplefarming:corn_crop simplefarming:cotton_crop simplefarming:cross_crop simplefarming:cucumber_crop simplefarming:cumin_plant simplefarming:eggplant_crop simplefarming:ginger_crop simplefarming:honeydew_crop simplefarming:kenaf_crop simplefarming:lettuce_crop simplefarming:oat_crop simplefarming:onion_crop simplefarming:pea_crop simplefarming:peanut_crop simplefarming:pepper_crop simplefarming:quinoa_plant simplefarming:radish_crop simplefarming:rice_crop simplefarming:rye_crop simplefarming:scrop simplefarming:hcrop simplefarming:marshmallow_crop simplefarming:sunflower_plant simplefarming:sorghum_crop simplefarming:soybean_crop simplefarming:spinach_crop simplefarming:sweet_potato_crop simplefarming:tomato_crop simplefarming:turnip_crop simplefarming:wild_crop simplefarming:yam_crop simplefarming:zucchini_crop byg:aspen_sapling byg:baobab_sapling byg:blue_enchanted_sapling byg:green_enchanted_sapling byg:pink_cherry_sapling byg:white_cherry_sapling byg:cika_sapling byg:cypress_sapling byg:ebony_sapling byg:ether_sapling byg:fir_sapling byg:aspen_sapling byg:holly_berry_sapling byg:holly_sapling byg:jacaranda_sapling byg:flowering_jacaranda_sapling byg:indigo_jacaranda_sapling byg:indigo_flowering_jacaranda_sapling byg:lament_sapling byg:mahogany_sapling byg:mangrove_sapling byg:maple_sapling byg:red_maple_sapling byg:silver_maple_sapling byg:nightshade_sapling byg:flowering_nightshade_sapling byg:palm_sapling byg:palo_verde_sapling byg:flowering_palo_verde_sapling byg:pine_sapling byg:rainbow_eucalyptus_sapling byg:redwood_sapling byg:pine_sapling byg:skyris_sapling byg:green_apple_skyris_sapling byg:willow_sapling byg:witch_hazel_sapling byg:blooming_witch_hazel_sapling byg:zelkova_sapling byg:withering_oak_sapling byg:araucaria_sapling byg:blue_spruce_sapling byg:brown_birch_sapling byg:brown_oak_sapling byg:zelkova_sapling byg:brown_zelkova_sapling byg:joshua_sapling byg:ripe_joshua_sapling byg:orange_birch_sapling byg:orange_oak_sapling byg:orange_spruce_sapling byg:orchard_sapling byg:flowering_orchard_sapling byg:ripe_orchard_sapling byg:red_birch_sapling byg:red_oak_sapling byg:red_spruce_sapling byg:yellow_birch_sapling byg:yellow_spruce_sapling byg:green_mushroom occultism:otherworld_sapling_natural occultism:otherworld_sapling integrateddynamics:menril_sapling projectvibrantjourneys:glowcap projectvibrantjourneys:crimson_nettle projectvibrantjourneys:warped_nettle twilightforest:mayapple deeperdarker:echo_sapling create_dd:rubber_sapling vegandelight:wild_soybean minecraft:firefly_bush minecraft:bush minecraft:short_dry_grass minecraft:tall_dry_grass minecraft:cactus_flower tfc:plant/allium tfc:plant/anthurium tfc:plant/arrowhead tfc:plant/artist_conk natures_spirit:purple_heather natures_spirit:white_heather natures_spirit:red_heather + block.10031 = minecraft:cherry_sapling minecraft:torchflower minecraft:short_grass minecraft:grass minecraft:fern minecraft:seagrass biomesoplenty:dune_grass biomesoplenty:dead_grass biomesoplenty:desert_grass biomesoplenty:sprout biomesoplenty:bush environmental:mycelium_sprouts upgrade_aquatic:blue_pickerelweed upgrade_aquatic:purple_pickerelweed byg:beach_grass byg:clover_patch byg:flower_patch byg:horseweed byg:leaf_pile byg:prairie_grass byg:reeds byg:short_beach_grass byg:short_grass byg:tall_prairie_grass byg:weed_grass byg:wilted_grass byg:winter_grass ecotones:clover ecotones:reeds ecotones:sandy_grass ecotones:short_grass terrestria:cattail terrestria:dead_grass terrestria:sakura_leaf_pile terrestria:tall_cattail wildworld:acacia_leaf_pile wildworld:birch_leaf_pile wildworld:dark_oak_leaf_pile wildworld:jungle_leaf_pile wildworld:oak_leaf_pile wildworld:spruce_leaf_pile biomesoplenty:bush minecraft:nether_sprouts minecraft:warped_roots minecraft:crimson_roots projectvibrantjourneys:beach_grass projectvibrantjourneys:short_grass minecraft:oak_sapling minecraft:spruce_sapling minecraft:birch_sapling minecraft:jungle_sapling minecraft:acacia_sapling minecraft:dark_oak_sapling minecraft:dead_bush minecraft:dandelion minecraft:golden_dandelion minecraft:poppy minecraft:blue_orchid minecraft:allium minecraft:azure_bluet minecraft:red_tulip minecraft:orange_tulip minecraft:white_tulip minecraft:pink_tulip minecraft:oxeye_daisy minecraft:cornflower minecraft:lily_of_the_valley minecraft:wither_rose minecraft:sweet_berry_bush biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom atmospheric:rosewood_sapling atmospheric:morado_sapling atmospheric:yucca_sapling atmospheric:kousa_sapling atmospheric:aspen_sapling atmospheric:grimwood_sapling atmospheric:warm_monkey_brush atmospheric:hot_monkey_brush atmospheric:scalding_monkey_brush atmospheric:yucca_flower atmospheric:gilia autumnity:red_maple_sapling autumnity:orange_maple_sapling autumnity:yellow_maple_sapling autumnity:maple_sapling autumnity:autumn_crocus earthmobsmod:buttercup environmental:willow_sapling environmental:cherry_sapling environmental:pink_wisteria_sapling environmental:blue_wisteria_sapling environmental:purple_wisteria_sapling environmental:white_wisteria_sapling farmersdelight:wild_cabbages farmersdelight:wild_onions farmersdelight:wild_tomatoes farmersdelight:wild_carrots farmersdelight:wild_potatoes farmersdelight:wild_beetroots neapolitan:small_banana_frond neapolitan:banana_frond neapolitan:large_banana_frond upgrade_aquatic:river_sapling upgrade_aquatic:beachgrass upgrade_aquatic:white_searocket upgrade_aquatic:pink_searocket environmental:cattail environmental:cartwheel environmental:bluebell environmental:violet environmental:dianthus environmental:red_lotus_flower environmental:white_lotus_flower environmental:yellow_hibiscus environmental:orange_hibiscus environmental:red_hibiscus environmental:pink_hibiscus environmental:magenta_hibiscus environmental:purple_hibiscus buzzier_bees:buttercup buzzier_bees:white_clover buzzier_bees:pink_clover neapolitan:strawberry_pips biomesoplenty:origin_sapling biomesoplenty:flowering_oak_sapling biomesoplenty:rainbow_birch_sapling biomesoplenty:yellow_autumn_sapling biomesoplenty:orange_autumn_sapling biomesoplenty:maple_sapling biomesoplenty:fir_sapling biomesoplenty:redwood_sapling biomesoplenty:white_cherry_sapling biomesoplenty:pink_cherry_sapling biomesoplenty:mahogany_sapling biomesoplenty:jacaranda_sapling biomesoplenty:palm_sapling biomesoplenty:willow_sapling biomesoplenty:dead_sapling biomesoplenty:magic_sapling biomesoplenty:umbran_sapling biomesoplenty:hellbark_sapling astralsorcery:glow_flower botania:white_mystical_flower botania:gray_mystical_flower botania:orange_mystical_flower botania:magenta_mystical_flower botania:light_blue_mystical_flower botania:light_gray_mystical_flower botania:yellow_mystical_flower botania:lime_mystical_flower botania:pink_mystical_flower botania:cyan_mystical_flower botania:purple_mystical_flower botania:blue_mystical_flower botania:brown_mystical_flower botania:green_mystical_flower botania:red_mystical_flower botania:black_mystical_flower botania:white_mushroom botania:orange_mushroom botania:magenta_mushroom botania:light_blue_mushroom botania:yellow_mushroom botania:lime_mushroom botania:pink_mushroom botania:gray_mushroom botania:light_gray_mushroom botania:cyan_mushroom botania:purple_mushroom botania:blue_mushroom botania:brown_mushroom botania:green_mushroom botania:red_mushroom botania:black_mushroom botania:hydroangeas botania:manastar botania:pure_daisy botania:endoflame botania:thermalily botania:rosa_arcana botania:munchdew botania:entropinnyum botania:kekimurus botania:gourmaryllis botania:narslimmus botania:spectrolus botania:dandelifeon botania:rafflowsia botania:shulk_me_not botania:bellethorn botania:bellethorn_chibi botania:bergamute botania:dreadthorn botania:heisei_dream botania:tigerseye botania:jaded_amaranthus botania:orechid botania:fallen_kanade botania:exoflame botania:agricarnation botania:agricarnation_chibi botania:hopperhock botania:hopperhock_chibi botania:tangleberrie botania:jiyuulia botania:rannuncarpus botania:rannuncarpus_chibi botania:hyacidus botania:pollidisiac botania:clayconia botania:clayconia_chibi botania:loonium botania:daffomill botania:vinculotus botania:spectranthemum botania:medumone botania:marimorphosis botania:marimorphosis_chibi botania:bubbell botania:bubbell_chibi botania:solegnolia botania:solegnolia_chibi botania:orechid_ignem terrestria:tiny_cactus pamhc2trees:apple_sapling pamhc2trees:avocado_sapling pamhc2trees:candlenut_sapling pamhc2trees:cherry_sapling pamhc2trees:chestnut_sapling pamhc2trees:gooseberry_sapling pamhc2trees:lemon_sapling pamhc2trees:nutmeg_sapling pamhc2trees:orange_sapling pamhc2trees:peach_sapling pamhc2trees:pear_sapling pamhc2trees:plum_sapling pamhc2trees:walnut_sapling pamhc2trees:spiderweb_sapling pamhc2trees:hazelnut_sapling pamhc2trees:pawpaw_sapling pamhc2trees:soursop_sapling pamhc2trees:almond_sapling pamhc2trees:apricot_sapling pamhc2trees:banana_sapling pamhc2trees:cashew_sapling pamhc2trees:cinnamon_sapling pamhc2trees:coconut_sapling pamhc2trees:date_sapling pamhc2trees:dragonfruit_sapling pamhc2trees:durian_sapling pamhc2trees:fig_sapling pamhc2trees:grapefruit_sapling pamhc2trees:lime_sapling pamhc2trees:mango_sapling pamhc2trees:olive_sapling pamhc2trees:papaya_sapling pamhc2trees:paperbark_sapling pamhc2trees:pecan_sapling pamhc2trees:peppercorn_sapling pamhc2trees:persimmon_sapling pamhc2trees:pistachio_sapling pamhc2trees:pomegranate_sapling pamhc2trees:starfruit_sapling pamhc2trees:vanillabean_sapling pamhc2trees:breadfruit_sapling pamhc2trees:guava_sapling pamhc2trees:jackfruit_sapling pamhc2trees:lychee_sapling pamhc2trees:passionfruit_sapling pamhc2trees:rambutan_sapling pamhc2trees:tamarind_sapling pamhc2trees:maple_sapling pamhc2trees:pinenut_sapling byg:purple_bulbis_anomaly byg:blue_bulbis_anomaly byg:embur_wart byg:cryptic_bramble biomesoplenty:glowshroom biomesoplenty:toadstool biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom biomesoplenty:mangrove_root biomesoplenty:reed biomesoplenty:sprout biomesoplenty:bush pamhc2crops:aridgarden pamhc2crops:frostgarden pamhc2crops:shadedgarden pamhc2crops:soggygarden pamhc2crops:tropicalgarden pamhc2crops:windygarden pamhc2crops:pamamaranthcrop pamhc2crops:pambarleycrop pamhc2crops:pambeancrop pamhc2crops:pamchickpeacrop pamhc2crops:pamcorncrop pamhc2crops:pamlentilcrop pamhc2crops:pammilletcrop pamhc2crops:pamoatcrop pamhc2crops:pamquinoacrop pamhc2crops:pamricecrop pamhc2crops:pamryecrop pamhc2crops:pamsoybeancrops pamhc2crops:pamcottoncrop pamhc2crops:pamflaxcrop pamhc2crops:pamkenafcrop pamhc2crops:pamjutecrop pamhc2crops:pamsisalcrop pamhc2crops:pamartichokecrop pamhc2crops:pamasparaguscrop pamhc2crops:pambellpeppercrop pamhc2crops:pambroccolicrop pamhc2crops:pambrusselsproutcrop pamhc2crops:pamcabbagecrop pamhc2crops:pamcauliflowercrop pamhc2crops:pamcelerycrop pamhc2crops:pamchilipeppercrop pamhc2crops:pamcucumbercrop pamhc2crops:pameggplantcrop pamhc2crops:pamkalecrops pamhc2crops:pamlettucecrop pamhc2crops:pamokracrop pamhc2crops:pampeascrop pamhc2crops:pamspinachcrop pamhc2crops:pamtomatillocrop pamhc2crops:pamtomatocrop pamhc2crops:pamwintersquashcrop pamhc2crops:pamzucchinicrop pamhc2crops:pamarrowrootcrop pamhc2crops:pamcassavacrop pamhc2crops:pamgarliccrop pamhc2crops:pamjicamacrop pamhc2crops:pamleekcrop pamhc2crops:pamkohlrabicrop pamhc2crops:pamonioncrop pamhc2crops:pamparsnipcrop pamhc2crops:pampeanutcrop pamhc2crops:pamradishcrop pamhc2crops:pamrhubarbcrop pamhc2crops:pamrutabagacrop pamhc2crops:pamscallioncrop pamhc2crops:pamsweetpotatocrop pamhc2crops:pamtarocrop pamhc2crops:pamturnipcrop pamhc2crops:pamwaterchestnutcrop pamhc2crops:pamblackberrycrop pamhc2crops:pamblueberrycrop pamhc2crops:pamcactusfruitcrop pamhc2crops:pamcandleberrycrop pamhc2crops:pamcantaloupecrop pamhc2crops:pamcranberrycrop pamhc2crops:pamelderberrycrop pamhc2crops:pamgrapecrop pamhc2crops:pamgreengrapecrop pamhc2crops:pamhuckleberrycrop pamhc2crops:pamjuniperberrycrop pamhc2crops:pamkiwicrop pamhc2crops:pammullberrycrop pamhc2crops:pampineapplecrop pamhc2crops:pamraspberrycrop pamhc2crops:pamstrawberrycrop pamhc2crops:pamcoffeebeancrop pamhc2crops:pamtealeafcrop pamhc2crops:pamagavecrop pamhc2crops:pamwhitemushroomcrop pamhc2crops:pamgingercrop pamhc2crops:pamsesamecrop pamhc2crops:pamspiceleafcrop pamhc2crops:pammustardcrop byg:lament_sprouts byg:synthian_fungus byg:blue_glowcane byg:pink_glowcane byg:purple_glowcane byg:red_glowcane byg:warped_bush byg:blue_glowshroom byg:purple_glowshroom byg:scorched_bush byg:soul_shroom byg:soul nat_shroom_spore_end byg:death_cap byg:weeping_roots byg:nether_bristle byg:synthian_sprout byg:synthian_roots byg:hanging_synthian_roots byg:embur_sprouts byg:embur_roots byg:ivis_roots byg:ivis_sprout byg:bulbis_sprouts byg:ether_bush byg:thereal_bellflower byg:nightshade_sprouts byg:nightshade_roots byg:oddity_bush byg:shulkren_fungus byg:vermillion_sculk_tendrils byg:vermillion_sculk_growth byg:green_mushroom byg:weeping_milkcap byg:wood_blewit byg:black_puff byg:crimson_berry_bush byg:blueberry_bush byg:nightshade_berry_bush byg:winter_succulent byg:allium_flower_bush byg:alpine_bellflower byg:amaranth byg:angelica byg:begonia byg:bistort byg:black_rose byg:blue_sage byg:california_poppy byg:crocus byg:cyan_amaranth byg:cyan_rose byg:cyan_tulip byg:daffodil byg:fairy_slipper byg:firecracker_flower_bush byg:green_tulip byg:guzmania byg:incan_lily byg:iris byg:kovan_flower byg:lazarus_bellflower byg:lolipop_flower byg:magenta_amaranth byg:magenta_tulip byg:orange_amaranth byg:orange_daisy byg:osiria_rose byg:peach_leather_flower byg:pink_allium byg:pink_allium_flower_bush byg:pink_anemone byg:pink_daffodil byg:pink_orchid byg:protea_flower byg:purple_amaranth byg:purple_orchid byg:purple_sage byg:purple_tulip byg:red_cornflower byg:red_orchid byg:richea byg:rose byg:snowdrops byg:silver_vase_flower byg:torch_ginger byg:violet_leather_flower byg:white_anemone byg:white_sage byg:white_cyclamen byg:winter_rose byg:winter_scilla byg:yellow_daffodil byg:yellow_tulip byg:horseweed byg:winter_cyclamen cutecore:cherry_leaf_litter cutecore:cherry_wood_sapling cutecore:wisteria_sapling cutecore:wisteria_leaf_litter cutecore:lemon_leaf_litter cutecore:lemon_sapling cutecore:hyacinth cutecore:lotus_flower cutecore:violets cutecore:pink_rose cutecore:white_rose cutecore:rose cutecore:forget_me_nots cutecore:pink_carnation cutecore:red_carnation cutecore:white_carnation forbidden_arcanus:yellow_orchid forbidden_arcanus:golden_orchid immersiveengineering:hemp:growth=bottom0 immersiveengineering:hemp:growth=bottom1 immersiveengineering:hemp:growth=bottom2 immersiveengineering:hemp:growth=bottom3 simplefarming:apple_sapling simplefarming:apricot_sapling simplefarming:banana_sapling simplefarming:cherry_sapling simplefarming:mango_sapling simplefarming:olive_sapling simplefarming:orange_sapling simplefarming:pear_sapling simplefarming:plum_sapling simplefarming:barley_crop simplefarming:cassava_crop simplefarming:corn_crop simplefarming:cotton_crop simplefarming:cross_crop simplefarming:cucumber_crop simplefarming:cumin_plant simplefarming:eggplant_crop simplefarming:ginger_crop simplefarming:honeydew_crop simplefarming:kenaf_crop simplefarming:lettuce_crop simplefarming:oat_crop simplefarming:onion_crop simplefarming:pea_crop simplefarming:peanut_crop simplefarming:pepper_crop simplefarming:quinoa_plant simplefarming:radish_crop simplefarming:rice_crop simplefarming:rye_crop simplefarming:scrop simplefarming:hcrop simplefarming:marshmallow_crop simplefarming:sunflower_plant simplefarming:sorghum_crop simplefarming:soybean_crop simplefarming:spinach_crop simplefarming:sweet_potato_crop simplefarming:tomato_crop simplefarming:turnip_crop simplefarming:wild_crop simplefarming:yam_crop simplefarming:zucchini_crop byg:aspen_sapling byg:baobab_sapling byg:blue_enchanted_sapling byg:green_enchanted_sapling byg:pink_cherry_sapling byg:white_cherry_sapling byg:cika_sapling byg:cypress_sapling byg:ebony_sapling byg:ether_sapling byg:fir_sapling byg:aspen_sapling byg:holly_berry_sapling byg:holly_sapling byg:jacaranda_sapling byg:flowering_jacaranda_sapling byg:indigo_jacaranda_sapling byg:indigo_flowering_jacaranda_sapling byg:lament_sapling byg:mahogany_sapling byg:mangrove_sapling byg:maple_sapling byg:red_maple_sapling byg:silver_maple_sapling byg:nightshade_sapling byg:flowering_nightshade_sapling byg:palm_sapling byg:palo_verde_sapling byg:flowering_palo_verde_sapling byg:pine_sapling byg:rainbow_eucalyptus_sapling byg:redwood_sapling byg:pine_sapling byg:skyris_sapling byg:green_apple_skyris_sapling byg:willow_sapling byg:witch_hazel_sapling byg:blooming_witch_hazel_sapling byg:zelkova_sapling byg:withering_oak_sapling byg:araucaria_sapling byg:blue_spruce_sapling byg:brown_birch_sapling byg:brown_oak_sapling byg:zelkova_sapling byg:brown_zelkova_sapling byg:joshua_sapling byg:ripe_joshua_sapling byg:orange_birch_sapling byg:orange_oak_sapling byg:orange_spruce_sapling byg:orchard_sapling byg:flowering_orchard_sapling byg:ripe_orchard_sapling byg:red_birch_sapling byg:red_oak_sapling byg:red_spruce_sapling byg:yellow_birch_sapling byg:yellow_spruce_sapling byg:green_mushroom occultism:otherworld_sapling_natural occultism:otherworld_sapling integrateddynamics:menril_sapling projectvibrantjourneys:glowcap projectvibrantjourneys:crimson_nettle projectvibrantjourneys:warped_nettle twilightforest:mayapple deeperdarker:echo_sapling create_dd:rubber_sapling vegandelight:wild_soybean minecraft:firefly_bush minecraft:bush minecraft:short_dry_grass minecraft:tall_dry_grass minecraft:cactus_flower tfc:plant/allium tfc:plant/anthurium tfc:plant/arrowhead tfc:plant/artist_conk natures_spirit:purple_heather natures_spirit:white_heather natures_spirit:red_heather # CROPS LIKE ENTITIES block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots farmersdelight:cabbages farmersdelight:budding_tomatoes farmersdelight:onions vegandelight:soybean_crop tfc:crop/carrot tfc:crop/tomato farmersrespite:small_tea_bush From 4101b0ab75c64f8498f0cada73c8924864a14027 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Wed, 22 Apr 2026 19:42:23 -0600 Subject: [PATCH 119/147] Fog advance --- shaders/common/composite_fragment.glsl | 3 ++- shaders/common/final_fragment.glsl | 4 ++-- shaders/common/solid_blocks_fragment.glsl | 2 +- shaders/common/solid_blocks_vertex.glsl | 4 ++++ shaders/common/solid_voxy_blocks_fragment.glsl | 15 ++++++++------- shaders/common/voxy.json | 6 ++++-- shaders/common/water_blocks_vertex.glsl | 4 ++++ shaders/src/finalcolor_voxy.glsl | 15 +++++++++++++++ shaders/src/fog_vertex.glsl | 9 +++++++++ 9 files changed, 49 insertions(+), 13 deletions(-) create mode 100644 shaders/src/finalcolor_voxy.glsl diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index 5a27fe8d..561c2c4c 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -117,7 +117,8 @@ void main() { } #if MC_VERSION >= 11900 - if((blindness > .01 || darknessFactor > .01) && linearDepth > 0.999) { + // if((blindness > .01 || darknessFactor > .01) && linearDepth > 0.999) { + if((blindness > .01 || darknessFactor > .01) && linearDepth > 0.9) { blockColor.rgb = vec3(0.0); } #else diff --git a/shaders/common/final_fragment.glsl b/shaders/common/final_fragment.glsl index eff09993..95dcf4f9 100644 --- a/shaders/common/final_fragment.glsl +++ b/shaders/common/final_fragment.glsl @@ -6,7 +6,7 @@ noisetex - Water normals colortex0 - Unused colortex1 - Antialiasing auxiliar -colortex2 - Bluenoise +colortex2 - Bluenoise colortex3 - TAA Averages history gaux1 - Screen-Space-Reflection / Bloom auxiliar gaux2 - Clouds texture @@ -110,7 +110,7 @@ void main() { blockColor = fxaa311(blockColor, 5); #endif #endif - + // Exposure correction blockColor *= vec3(exposure); blockColor = custom_sigmoid(blockColor); diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 1569c323..93bcb207 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -243,7 +243,7 @@ void main() { blockColor.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); // DEBUG - blockColor = vec4(vec3(directLightStrength), 1.0); + // blockColor = vec4(vec3(directLightStrength), 1.0); #endif #if defined GBUFFER_ENTITIES diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index 4d4043ff..e5a4056c 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -26,6 +26,10 @@ uniform mat4 gbufferProjectionInverse; uniform int dhRenderDistance; #endif +#ifdef VOXY + uniform int vxRenderDistance; +#endif + #ifdef DYN_HAND_LIGHT uniform int heldItemId; uniform int heldItemId2; diff --git a/shaders/common/solid_voxy_blocks_fragment.glsl b/shaders/common/solid_voxy_blocks_fragment.glsl index 1aad1ee9..67ed4b1e 100644 --- a/shaders/common/solid_voxy_blocks_fragment.glsl +++ b/shaders/common/solid_voxy_blocks_fragment.glsl @@ -213,11 +213,11 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { #if !defined THE_END && !defined NETHER float fogIntensityCoeff = max(eyeBrightSmoothFloat.y * 0.004166666666666667, visibleSky); float frogAdjust = pow( - clamp(fogFragCoord / float(vxRenderDistance), 0.0, 1.0) * fogIntensityCoeff, + clamp(fogFragCoord / float(vxRenderDistance * 16), 0.0, 1.0) * fogIntensityCoeff, mix(fogDensityCoeff * 0.15, 0.5, rainStrength) ); #else - float frogAdjust = sqrt(clamp(fogFragCoord / float(vxRenderDistance), 0.0, 1.0)); + float frogAdjust = sqrt(clamp(fogFragCoord / float(vxRenderDistance * 16), 0.0, 1.0)); #endif #if !defined NETHER @@ -230,7 +230,7 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { // clamp((gl_Position.z / SHADOW_LIMIT) * 2.0 - 0.5, 0.0, 1.0) // ); - directLightStrength = farDirectLightStrength; + directLightStrength = farDirectLightStrength; // Shortcut } #endif #endif @@ -260,9 +260,10 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); - // gbufferData0 = parameters.sampledColour * blockColor; - // gbufferData1 = parameters.sampledColour * blockColor; + blockColor = parameters.sampledColour * blockColor; - gbufferData0 = vec4(vec3(directLightStrength), 1.0); - // gbufferData1 = vec4(visibleSky, visibleSky, visibleSky, 1.0); + #include "/src/finalcolor_voxy.glsl" + + // Real color + gbufferData0 = blockColor; } \ No newline at end of file diff --git a/shaders/common/voxy.json b/shaders/common/voxy.json index fcc4a4d0..49d1dcd5 100644 --- a/shaders/common/voxy.json +++ b/shaders/common/voxy.json @@ -1,7 +1,9 @@ { "version": 1, - "uniforms": ["worldTime", "sunPosition", "dayNightMix", "rainStrength", "skyColor", "isEyeInWater", "eyeBrightnessSmooth", "vxViewProjInv", "viewWidth", "viewHeight", "vxRenderDistance", "nightVision", "vxModelView"], - "samplers": {}, + "uniforms": ["worldTime", "sunPosition", "dayNightMix", "rainStrength", "skyColor", "fogColor", "isEyeInWater", "eyeBrightnessSmooth", "vxViewProjInv", "viewWidth", "viewHeight", "vxRenderDistance", "nightVision", "vxModelView", "pixelSizeX", "pixelSizeY"], + "samplers": { + "gaux4": "sampler2D" + }, "opaqueDrawBuffers": [1, 7], "translucentDrawBuffers": [1] } \ No newline at end of file diff --git a/shaders/common/water_blocks_vertex.glsl b/shaders/common/water_blocks_vertex.glsl index a34ad6d3..2bc58c79 100644 --- a/shaders/common/water_blocks_vertex.glsl +++ b/shaders/common/water_blocks_vertex.glsl @@ -28,6 +28,10 @@ uniform mat4 gbufferProjectionInverse; uniform int dhRenderDistance; #endif +#ifdef VOXY + uniform int vxRenderDistance; +#endif + #ifdef DYN_HAND_LIGHT uniform int heldItemId; uniform int heldItemId2; diff --git a/shaders/src/finalcolor_voxy.glsl b/shaders/src/finalcolor_voxy.glsl new file mode 100644 index 00000000..76a2738e --- /dev/null +++ b/shaders/src/finalcolor_voxy.glsl @@ -0,0 +1,15 @@ +#if defined VOXY_WATER + if(isEyeInWater == 0) { + vec3 fog_texture = textureLod(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), 0.0).rgb; + blockColor.rgb = mix(blockColor.rgb, fog_texture, frogAdjust); + } +#elif defined NETHER + #if NETHER_FOG_DISTANCE == 1 + blockColor.rgb = mix(fogColor * 0.1, vec3(1.0), 0.04); + #else + blockColor.rgb = mix(blockColor.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frogAdjust); + #endif +#else + vec3 fog_texture = textureLod(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), 0.0).rgb; + blockColor.rgb = mix(blockColor.rgb, fog_texture, frogAdjust); +#endif \ No newline at end of file diff --git a/shaders/src/fog_vertex.glsl b/shaders/src/fog_vertex.glsl index 5a45744d..aadc47cc 100644 --- a/shaders/src/fog_vertex.glsl +++ b/shaders/src/fog_vertex.glsl @@ -18,6 +18,11 @@ clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fogIntensityCoeff, mix(fogDensityCoeff * 0.15, 0.5, rainStrength) ); + #elif defined VOXY + frogAdjust = pow( + clamp(gl_FogFragCoord / (vxRenderDistance * 16), 0.0, 1.0) * fogIntensityCoeff, + mix(fogDensityCoeff * 0.15, 0.5, rainStrength) + ); #else frogAdjust = pow( clamp(gl_FogFragCoord / far, 0.0, 1.0) * fogIntensityCoeff, @@ -32,6 +37,8 @@ #else #if defined DISTANT_HORIZONS float sight = dhRenderDistance; + #elif defined VOXY + float sight = (vxRenderDistance * 16); #else float sight = NETHER_SIGHT; #endif @@ -39,6 +46,8 @@ #else #if defined DISTANT_HORIZONS float sight = dhRenderDistance; + #elif defined VOXY + float sight = (vxRenderDistance * 16); #else float sight = far; #endif From b28b1be7b9a9a3987544fae49e8fe01bb823042d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Wed, 22 Apr 2026 21:32:25 -0600 Subject: [PATCH 120/147] Fog II --- shaders/voxy_opaque.glsl | 3 +++ shaders/voxy_translucent.glsl | 3 +++ shaders/world-1/voxy_opaque.glsl | 3 +++ shaders/world-1/voxy_translucent.glsl | 3 +++ shaders/world0/voxy_opaque.glsl | 2 ++ shaders/world0/voxy_translucent.glsl | 2 ++ shaders/world1/voxy_opaque.glsl | 3 +++ shaders/world1/voxy_translucent.glsl | 3 +++ 8 files changed, 22 insertions(+) diff --git a/shaders/voxy_opaque.glsl b/shaders/voxy_opaque.glsl index 5ad1c52b..5cbc431c 100644 --- a/shaders/voxy_opaque.glsl +++ b/shaders/voxy_opaque.glsl @@ -1 +1,4 @@ +#define VOXY_BLOCK +#define UNKNOWN_DIM + #include "/common/solid_voxy_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaders/voxy_translucent.glsl b/shaders/voxy_translucent.glsl index 9752a6d6..f3e548ae 100644 --- a/shaders/voxy_translucent.glsl +++ b/shaders/voxy_translucent.glsl @@ -1 +1,4 @@ +#define VOXY_WATER +#define UNKNOWN_DIM + #include "/common/water_voxy_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaders/world-1/voxy_opaque.glsl b/shaders/world-1/voxy_opaque.glsl index 5ad1c52b..d1a5f08a 100644 --- a/shaders/world-1/voxy_opaque.glsl +++ b/shaders/world-1/voxy_opaque.glsl @@ -1 +1,4 @@ +#define VOXY_WATER +#define NETHER + #include "/common/solid_voxy_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaders/world-1/voxy_translucent.glsl b/shaders/world-1/voxy_translucent.glsl index 9752a6d6..4a1b6d51 100644 --- a/shaders/world-1/voxy_translucent.glsl +++ b/shaders/world-1/voxy_translucent.glsl @@ -1 +1,4 @@ +#define VOXY_WATER +#define NETHER + #include "/common/water_voxy_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaders/world0/voxy_opaque.glsl b/shaders/world0/voxy_opaque.glsl index 5ad1c52b..bee5ff95 100644 --- a/shaders/world0/voxy_opaque.glsl +++ b/shaders/world0/voxy_opaque.glsl @@ -1 +1,3 @@ +#define VOXY_BLOCK + #include "/common/solid_voxy_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaders/world0/voxy_translucent.glsl b/shaders/world0/voxy_translucent.glsl index 9752a6d6..455b8756 100644 --- a/shaders/world0/voxy_translucent.glsl +++ b/shaders/world0/voxy_translucent.glsl @@ -1 +1,3 @@ +#define VOXY_WATER + #include "/common/water_voxy_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaders/world1/voxy_opaque.glsl b/shaders/world1/voxy_opaque.glsl index 5ad1c52b..2eaa5cb2 100644 --- a/shaders/world1/voxy_opaque.glsl +++ b/shaders/world1/voxy_opaque.glsl @@ -1 +1,4 @@ +#define VOXY_BLOCK +#define THE_END + #include "/common/solid_voxy_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaders/world1/voxy_translucent.glsl b/shaders/world1/voxy_translucent.glsl index 9752a6d6..8a577f6d 100644 --- a/shaders/world1/voxy_translucent.glsl +++ b/shaders/world1/voxy_translucent.glsl @@ -1 +1,4 @@ +#define VOXY_WATER +#define THE_END + #include "/common/water_voxy_blocks_fragment.glsl" \ No newline at end of file From 8d38cec120d5908c4f3ee0406280eebfcc23829d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Wed, 22 Apr 2026 22:11:21 -0600 Subject: [PATCH 121/147] Fog III --- .../common/solid_voxy_blocks_fragment.glsl | 4 ++ shaders/common/voxy.json | 2 +- .../common/water_voxy_blocks_fragment.glsl | 53 +++++++++++++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/shaders/common/solid_voxy_blocks_fragment.glsl b/shaders/common/solid_voxy_blocks_fragment.glsl index 67ed4b1e..0e88ced2 100644 --- a/shaders/common/solid_voxy_blocks_fragment.glsl +++ b/shaders/common/solid_voxy_blocks_fragment.glsl @@ -264,6 +264,10 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { #include "/src/finalcolor_voxy.glsl" + if (blindness > .01) { + blockColor.rgb = vec3(0.0); + } + // Real color gbufferData0 = blockColor; } \ No newline at end of file diff --git a/shaders/common/voxy.json b/shaders/common/voxy.json index 49d1dcd5..93d146fa 100644 --- a/shaders/common/voxy.json +++ b/shaders/common/voxy.json @@ -1,6 +1,6 @@ { "version": 1, - "uniforms": ["worldTime", "sunPosition", "dayNightMix", "rainStrength", "skyColor", "fogColor", "isEyeInWater", "eyeBrightnessSmooth", "vxViewProjInv", "viewWidth", "viewHeight", "vxRenderDistance", "nightVision", "vxModelView", "pixelSizeX", "pixelSizeY"], + "uniforms": ["worldTime", "sunPosition", "dayNightMix", "rainStrength", "skyColor", "fogColor", "isEyeInWater", "eyeBrightnessSmooth", "vxViewProjInv", "viewWidth", "viewHeight", "vxRenderDistance", "nightVision", "vxModelView", "pixelSizeX", "pixelSizeY", "blindness"], "samplers": { "gaux4": "sampler2D" }, diff --git a/shaders/common/water_voxy_blocks_fragment.glsl b/shaders/common/water_voxy_blocks_fragment.glsl index 318e8117..136d21ba 100644 --- a/shaders/common/water_voxy_blocks_fragment.glsl +++ b/shaders/common/water_voxy_blocks_fragment.glsl @@ -1,5 +1,58 @@ +#include "/lib/config.glsl" +#include "/lib/basic_utils.glsl" +#include "/lib/luma.glsl" +#include "/lib/dither.glsl" + +/* Color utils */ + +#if defined THE_END + #include "/lib/color_utils_end.glsl" +#elif defined NETHER + #include "/lib/color_utils_nether.glsl" +#else + #include "/lib/color_utils.glsl" +#endif + layout(location = 0) out vec4 gbufferData0; +/* +struct VoxyFragmentParameters { + vec4 sampledColour; + vec2 tile; + vec2 uv; + uint face; + uint modelId; + vec2 lightMap; + vec4 tinting; + uint customId; +}; +*/ + void voxy_emitFragment(VoxyFragmentParameters parameters) { + // "Uniforms" Voxy no recalcula en cada frame algujnos uniforms + float hour_world = worldTime * 0.001; + float dayMomentV = hour_world * 0.04166666666666667; + + float moment_aux = dayMomentV - 0.25; + float moment_aux_2 = moment_aux * moment_aux; + float dayMixerV = clamp(-moment_aux_2 * 20.0 + 1.25, 0.0, 1.0); + + float moment_aux_3 = dayMomentV - 0.75; + float moment_aux_4 = moment_aux_3 * moment_aux_3; + float nightMixerV = clamp(-moment_aux_4 * 50.0 + 3.125, 0.0, 1.0); + + // -- Position Vertex + + + + + + // ---- Original Fragment Logic + + + + + + gbufferData0 = parameters.sampledColour * parameters.tinting; } \ No newline at end of file From 0a3ebdb0b9bb29a1a8c3a58ad464c7a886c125a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Fri, 24 Apr 2026 00:33:21 -0600 Subject: [PATCH 122/147] Debug flickering --- README.md | 2 +- shaders/common/solid_blocks_fragment.glsl | 23 ++++++++++++++++++----- shaders/common/solid_blocks_vertex.glsl | 12 ++++++------ shaders/entity.properties | 4 ++-- shaders/lang/es_AR.lang | 8 ++++---- shaders/lang/es_ES.lang | 8 ++++---- shaders/lang/es_MX.lang | 8 ++++---- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- 11 files changed, 43 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index a45a3d9a..30f7a9d3 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.4d +## Version: 9.4e.beta ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 42724db7..0417091d 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -162,11 +162,22 @@ void main() { vec4 blockColor = texture2D(tex, texcoord) * tintColor; #endif - float block_luma = luma(blockColor.rgb); + #if defined GBUFFER_ENTITIES + vec4 originalEntityColor = blockColor; + #endif + + float block_luma = luma(blockColor.rgb); + + float isEmissiveEntityLocal = 0.0; + #if defined GBUFFER_ENTITIES + if (isEmissiveEntity > 0.5 || entityId == 10202) { // Custom lanterns + isEmissiveEntityLocal = 1.0; + } + #endif - vec3 finalCandleColor = candleColor; + vec3 finalCandleColor = candleColor; #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND || defined GBUFFER_ENTITIES - if(isEmissiveEntity > 0.5) { + if(isEmissiveEntityLocal > 0.5) { finalCandleColor *= block_luma * 1.5; } #endif @@ -244,9 +255,11 @@ void main() { #endif #if defined GBUFFER_ENTITIES - if(entityId == 10101) { - // Thunderbolt render + if(entityId == 10101) { // Thunderbolt render blockColor = vec4(1.0, 1.0, 1.0, 0.5); + } else if (entityId == 10201) { // Flame entity + blockColor = originalEntityColor; + blockColor.rgb = blockColor.rgb * blockColor.rgb; } else { float entity_poderation = luma(realLight); // Red damage bright ponderation blockColor.rgb = mix(blockColor.rgb, entityColor.rgb, entityColor.a * entity_poderation * 3.0); diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index 4d4043ff..b34ee797 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -155,18 +155,18 @@ void main() { // Flame entities // #if defined GBUFFER_ENTITIES - // if (entityId == 10102) { + // if (entityId == 10201) { // isEmissiveEntity = 1.0; // directLightStrength = 1.0; // } // #endif // Glowing entities - #if defined GBUFFER_ENTITIES - if (entityId == 10103) { - isEmissiveEntity = 1.0; - } - #endif + // #if defined GBUFFER_ENTITIES + // if (entityId == 10202) { + // isEmissiveEntity = 1.0; + // } + // #endif #if defined SHADOW_CASTING && !defined NETHER #include "/src/shadow_src_vertex.glsl" diff --git a/shaders/entity.properties b/shaders/entity.properties index 19f48b7d..0dd4af87 100644 --- a/shaders/entity.properties +++ b/shaders/entity.properties @@ -4,7 +4,7 @@ entity.10101=minecraft:lightning_bolt # Entity flames (Iris) -entity.10102=minecraft:entity_flame +entity.10201=minecraft:entity_flame # Entity glowing -entity.10103=auroraslanterns:wall_lantern +entity.10202=auroraslanterns:wall_lantern diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index df5ea9ad..f89daf68 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4d +value.ACERCADE.0=v.9.4e.beta # Opciones ############################# @@ -165,7 +165,7 @@ option.HORIZON_DAY_COLOR_B=Color del horizonte diurno B option.HORIZON_NIGHT_COLOR_R=Color del horizonte nocturno R option.HORIZON_NIGHT_COLOR_G=Color del horizonte nocturno G -option.HORIZON_NIGHT_COLOR_B=Color del horizonte nocturno B +option.HORIZON_NIGHT_COLOR_B=Color del horizonte nocturno B option.WATER_COLOR_R=Color del agua R option.WATER_COLOR_G=Color del agua G @@ -188,7 +188,7 @@ value.V_CLOUDS.2=Volumétricas dinámicas option.CLOUD_VOL_STYLE=Estilo de nube volumétrica value.CLOUD_VOL_STYLE.0=Natural -value.CLOUD_VOL_STYLE.1=Cúbico +value.CLOUD_VOL_STYLE.1=Cúbico option.CLOUD_SPEED=Velocidad de nubes value.CLOUD_SPEED.0=Normal @@ -243,7 +243,7 @@ option.USE_BASIC_SH=Shader básico para dimensiones personalizadas option.MATERIAL_GLOSS=Brillo del material -option.DYN_HAND_LIGHT=Luz dinámica falsa +option.DYN_HAND_LIGHT=Luz dinámica falsa # Pantallas screen.ADVANCED_SCREEN=Opciones avanzadas diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index df5ea9ad..f89daf68 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4d +value.ACERCADE.0=v.9.4e.beta # Opciones ############################# @@ -165,7 +165,7 @@ option.HORIZON_DAY_COLOR_B=Color del horizonte diurno B option.HORIZON_NIGHT_COLOR_R=Color del horizonte nocturno R option.HORIZON_NIGHT_COLOR_G=Color del horizonte nocturno G -option.HORIZON_NIGHT_COLOR_B=Color del horizonte nocturno B +option.HORIZON_NIGHT_COLOR_B=Color del horizonte nocturno B option.WATER_COLOR_R=Color del agua R option.WATER_COLOR_G=Color del agua G @@ -188,7 +188,7 @@ value.V_CLOUDS.2=Volumétricas dinámicas option.CLOUD_VOL_STYLE=Estilo de nube volumétrica value.CLOUD_VOL_STYLE.0=Natural -value.CLOUD_VOL_STYLE.1=Cúbico +value.CLOUD_VOL_STYLE.1=Cúbico option.CLOUD_SPEED=Velocidad de nubes value.CLOUD_SPEED.0=Normal @@ -243,7 +243,7 @@ option.USE_BASIC_SH=Shader básico para dimensiones personalizadas option.MATERIAL_GLOSS=Brillo del material -option.DYN_HAND_LIGHT=Luz dinámica falsa +option.DYN_HAND_LIGHT=Luz dinámica falsa # Pantallas screen.ADVANCED_SCREEN=Opciones avanzadas diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index df5ea9ad..f89daf68 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4d +value.ACERCADE.0=v.9.4e.beta # Opciones ############################# @@ -165,7 +165,7 @@ option.HORIZON_DAY_COLOR_B=Color del horizonte diurno B option.HORIZON_NIGHT_COLOR_R=Color del horizonte nocturno R option.HORIZON_NIGHT_COLOR_G=Color del horizonte nocturno G -option.HORIZON_NIGHT_COLOR_B=Color del horizonte nocturno B +option.HORIZON_NIGHT_COLOR_B=Color del horizonte nocturno B option.WATER_COLOR_R=Color del agua R option.WATER_COLOR_G=Color del agua G @@ -188,7 +188,7 @@ value.V_CLOUDS.2=Volumétricas dinámicas option.CLOUD_VOL_STYLE=Estilo de nube volumétrica value.CLOUD_VOL_STYLE.0=Natural -value.CLOUD_VOL_STYLE.1=Cúbico +value.CLOUD_VOL_STYLE.1=Cúbico option.CLOUD_SPEED=Velocidad de nubes value.CLOUD_SPEED.0=Normal @@ -243,7 +243,7 @@ option.USE_BASIC_SH=Shader básico para dimensiones personalizadas option.MATERIAL_GLOSS=Brillo del material -option.DYN_HAND_LIGHT=Luz dinámica falsa +option.DYN_HAND_LIGHT=Luz dinámica falsa # Pantallas screen.ADVANCED_SCREEN=Opciones avanzadas diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 7e23c4d6..cb5bea0f 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -15,7 +15,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.4d +value.ACERCADE.0=v.9.4e.beta #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 1c24cc4e..1e175876 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -15,7 +15,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.4d +value.ACERCADE.0=v.9.4e.beta #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 29d8ac42..3790f20b 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -15,7 +15,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.4d +value.ACERCADE.0=v.9.4e.beta #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 0d8a9097..617d8ca4 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -15,7 +15,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.4d +value.ACERCADE.0=v.9.4e.beta #Options ############################# From c38f7f1d88e33e8f503f3c7be2e67d775b7184dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Fri, 24 Apr 2026 11:46:55 -0600 Subject: [PATCH 123/147] Beta --- shaders/lang/en_US.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 5a784568..6b882b5c 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -15,7 +15,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.4d +value.ACERCADE.0=v.9.4e.beta #Options ############################# From f71d146293ca449e41dd49030d77e688f2d8ba50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Fri, 24 Apr 2026 23:07:57 -0600 Subject: [PATCH 124/147] Version 9.4e --- README.md | 2 +- shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 2 +- shaders/lang/es_ES.lang | 2 +- shaders/lang/es_MX.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 30f7a9d3..cf156191 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.4e.beta +## Version: 9.4e ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 6b882b5c..501ab741 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -15,7 +15,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.4e.beta +value.ACERCADE.0=v.9.4e #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index f89daf68..1636cd00 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4e.beta +value.ACERCADE.0=v.9.4e # Opciones ############################# diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index f89daf68..1636cd00 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4e.beta +value.ACERCADE.0=v.9.4e # Opciones ############################# diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index f89daf68..1636cd00 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4e.beta +value.ACERCADE.0=v.9.4e # Opciones ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index cb5bea0f..52c46e7c 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -15,7 +15,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.4e.beta +value.ACERCADE.0=v.9.4e #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 1e175876..194e5f80 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -15,7 +15,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.4e.beta +value.ACERCADE.0=v.9.4e #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 3790f20b..e9696ea7 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -15,7 +15,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.4e.beta +value.ACERCADE.0=v.9.4e #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 617d8ca4..578a7268 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -15,7 +15,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.4e.beta +value.ACERCADE.0=v.9.4e #Options ############################# From 2465ebcbd0a17b9f9014f29394ef1173fee780ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Tue, 28 Apr 2026 00:45:39 -0600 Subject: [PATCH 125/147] Avance water --- .../common/solid_voxy_blocks_fragment.glsl | 9 +- shaders/common/voxy.json | 3 +- .../common/water_voxy_blocks_fragment.glsl | 106 +++++++++++++- shaders/lib/water_voxy.glsl | 135 ++++++++++++++++++ shaders/src/low_sky_voxy.glsl | 21 +++ 5 files changed, 264 insertions(+), 10 deletions(-) create mode 100644 shaders/lib/water_voxy.glsl create mode 100644 shaders/src/low_sky_voxy.glsl diff --git a/shaders/common/solid_voxy_blocks_fragment.glsl b/shaders/common/solid_voxy_blocks_fragment.glsl index 0e88ced2..78b5588b 100644 --- a/shaders/common/solid_voxy_blocks_fragment.glsl +++ b/shaders/common/solid_voxy_blocks_fragment.glsl @@ -30,7 +30,7 @@ struct VoxyFragmentParameters { */ void voxy_emitFragment(VoxyFragmentParameters parameters) { - // "Uniforms" Voxy no recalcula en cada frame algujnos uniforms + // "Uniforms" Voxy no recalcula en cada frame algunos uniforms float hour_world = worldTime * 0.001; float dayMomentV = hour_world * 0.04166666666666667; @@ -223,13 +223,6 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { #if !defined NETHER #ifdef SHADOW_CASTING if (isFoliageEntity) { - // directLightStrength = - // mix( - // directLightStrength, - // farDirectLightStrength, - // clamp((gl_Position.z / SHADOW_LIMIT) * 2.0 - 0.5, 0.0, 1.0) - // ); - directLightStrength = farDirectLightStrength; // Shortcut } #endif diff --git a/shaders/common/voxy.json b/shaders/common/voxy.json index 93d146fa..384dd5a1 100644 --- a/shaders/common/voxy.json +++ b/shaders/common/voxy.json @@ -2,7 +2,8 @@ "version": 1, "uniforms": ["worldTime", "sunPosition", "dayNightMix", "rainStrength", "skyColor", "fogColor", "isEyeInWater", "eyeBrightnessSmooth", "vxViewProjInv", "viewWidth", "viewHeight", "vxRenderDistance", "nightVision", "vxModelView", "pixelSizeX", "pixelSizeY", "blindness"], "samplers": { - "gaux4": "sampler2D" + "gaux4": "sampler2D", + "noisetex": "sampler2D" }, "opaqueDrawBuffers": [1, 7], "translucentDrawBuffers": [1] diff --git a/shaders/common/water_voxy_blocks_fragment.glsl b/shaders/common/water_voxy_blocks_fragment.glsl index 136d21ba..e65f287a 100644 --- a/shaders/common/water_voxy_blocks_fragment.glsl +++ b/shaders/common/water_voxy_blocks_fragment.glsl @@ -13,6 +13,8 @@ #include "/lib/color_utils.glsl" #endif +#include "/lib/water_voxy.glsl" + layout(location = 0) out vec4 gbufferData0; /* @@ -41,18 +43,120 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { float moment_aux_4 = moment_aux_3 * moment_aux_3; float nightMixerV = clamp(-moment_aux_4 * 50.0 + 3.125, 0.0, 1.0); + // Re-assign + + uint face = parameters.face; + uint customId = parameters.customId; + vec4 tintColor = parameters.tinting; + + // Includes + + #include "/src/hi_sky_voxy.glsl" + #include "/src/low_sky_voxy.glsl" + // -- Position Vertex + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + float fogDensityCoeff = FOG_DENSITY * FOG_ADJUST; + #else + float fogDensityCoeff = dayBlendFloatVoxy( + FOG_SUNSET, + FOG_DAY, + FOG_NIGHT, + dayMixerV, + nightMixerV, + dayMomentV, + ) * FOG_ADJUST; + #endif + + // ---- Original Light Vertex Logic + + // Luz nativa (lmcoord.x: candela, lmcoord.y: cielo) ---- + #if defined THE_END || defined NETHER + vec2 illumination = vec2(parameters.lightMap.x, 1.0); + #else + vec2 illumination = parameters.lightMap; + #endif + + illumination.y = max(illumination.y - 0.065, 0.0) * 1.06951871657754; + float visibleSky = clamp(illumination.y, 0.0, 1.0); + + #if defined UNKNOWN_DIM + visibleSky = (visibleSky * 0.6) + 0.4; + #endif + + // Intensidad y color de luz de candelas + float candle_luma = illumination.x * sqrt(illumination.x); + vec3 candleColor = CANDLE_BASELIGHT * (candle_luma + sixthPow(illumination.x * 1.17)); + candleColor = clamp(candleColor, vec3(0.0), vec3(4.0)); + + // Atenuación por dirección de luz directa =================================== + #if defined THE_END || defined NETHER + vec3 astroVector = normalize(vxModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; + #else + vec3 astroVector = normalize(sunPosition); + #endif + + + + + + + + + + // Fog Vertex + + // 1. Reconstruir posición en clip space + vec2 ndc = (gl_FragCoord.xy / vec2(viewWidth, viewHeight)) * 2.0 - 1.0; + float depth = gl_FragCoord.z * 2.0 - 1.0; + vec4 clipPos = vec4(ndc, depth, 1.0); + + // 2. Pasar a world space + vec4 worldPos = vxViewProjInv * clipPos; + worldPos /= worldPos.w; + + vec4 worldposition = worldPos + vec4(cameraPosition, 0.0); // Posición de mundo absoluta + + // 3. La distancia desde la cámara (equivalente a gl_FogFragCoord) + float fogFragCoord = length(worldPos.xyz); + + vec2 eyeBrightSmoothFloat = vec2(eyeBrightnessSmooth); + + #if !defined THE_END && !defined NETHER + float fogIntensityCoeff = max(eyeBrightSmoothFloat.y * 0.004166666666666667, visibleSky); + float frogAdjust = pow( + clamp(fogFragCoord / float(vxRenderDistance * 16), 0.0, 1.0) * fogIntensityCoeff, + mix(fogDensityCoeff * 0.15, 0.5, rainStrength) + ); + #else + float frogAdjust = sqrt(clamp(fogFragCoord / float(vxRenderDistance * 16), 0.0, 1.0)); + #endif + // ---- Original Fragment Logic + vec4 blockColor; + vec3 realLight; + + #ifdef VANILLA_WATER + vec3 waterNormalBase = vec3(0.0, 0.0, 1.0); + #else + vec3 waterNormalBase = normal_waves_voxy(worldposition.xzy); + #endif + + + + // Temporal + blockColor = parameters.sampledColour * parameters.tinting; + #include "/src/finalcolor_voxy.glsl" - gbufferData0 = parameters.sampledColour * parameters.tinting; + gbufferData0 = blockColor; } \ No newline at end of file diff --git a/shaders/lib/water_voxy.glsl b/shaders/lib/water_voxy.glsl new file mode 100644 index 00000000..0ce35eca --- /dev/null +++ b/shaders/lib/water_voxy.glsl @@ -0,0 +1,135 @@ +/* MakeUp - water_dh.glsl +Water reflection and refraction related functions (dh). +*/ + +#if SUN_REFLECTION == 1 + #if !defined NETHER && !defined THE_END + float sun_reflection(vec3 fragpos) { + vec3 astroLightPos = worldTime > 12900 ? moonPosition : sunPosition; + float astroAlignment = + max(dot(normalize(fragpos), normalize(astroLightPos)), 0.0); + + return smoothstep(0.995, 1.0, astroAlignment) * + clamp(lmcoord.y, 0.0, 1.0) * + (1.0 - rainStrength) * 3.0; + } + + #endif +#endif + +vec3 normal_waves_voxy(vec3 pos) { + vec2 wave_2 = + texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.03125) - (frameTimeCounter * .025)).rg; + wave_2 = wave_2 - .5; + vec2 partialWave = wave_2; + vec3 finalWave = vec3(partialWave, WATER_TURBULENCE); + + return normalize(finalWave); +} + +vec3 refraction(vec3 fragpos, vec3 color, vec3 refraction) { + vec2 pos = gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY); + + #if REFRACTION == 1 + pos = pos + refraction.xy * (0.075 / (1.0 + length(fragpos) * 0.4)); + #endif + + float water_absortion; + if (isEyeInWater == 0) { + float water_distance = + 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * gl_FragCoord.z - 1.0) * (dhFarPlane - dhNearPlane)); + + float earth_distance = texture2D(dhDepthTex1, pos.xy).r; + earth_distance = + 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * earth_distance - 1.0) * (dhFarPlane - dhNearPlane)); + + water_absortion = (earth_distance - water_distance) * 0.5; + water_absortion *= water_absortion; + water_absortion = (1.0 / -((water_absortion * WATER_ABSORPTION) + 1.125)) + 1.0; + } else { + water_absortion = 0.0; + } + + return mix(texture2D(gaux1, pos.xy).rgb, color, water_absortion); +} + +vec3 get_normals(vec3 bump, vec3 fragpos) { + float NdotE = abs(dot(waterNormal, normalize(fragpos))); + + bump *= vec3(NdotE) + vec3(0.0, 0.0, 1.0 - NdotE); + + mat3 tbn_matrix = mat3( + tangent.x, binormal.x, waterNormal.x, + tangent.y, binormal.y, waterNormal.y, + tangent.z, binormal.z, waterNormal.z + ); + + return normalize(bump * tbn_matrix); +} + +vec4 reflection_calc_dh(vec3 fragpos, vec3 normal, vec3 reflected, vec3 infinite_color, float dither) { + vec3 pos = camera_to_screen(fragpos + reflected * 768.0); + + float border = + clamp((1.0 - (max(0.0, abs(pos.y - 0.5)) * 2.0)) * 50.0, 0.0, 1.0); + + border = clamp(border - pow(pos.y, 10.0), 0.0, 1.0); + + pos.x = abs(pos.x); + if (pos.x > 1.0) { + pos.x = 1.0 - (pos.x - 1.0); + } + + vec4 final_reflex; + if (texture2D(depthtex0, pos.xy).r < 0.999) { + final_reflex = vec4(infinite_color, border); + } else { + final_reflex = vec4(texture2D(gaux1, pos.xy).rgb, border); + } + return final_reflex; +} + +vec3 water_shader_dh( + vec3 fragpos, + vec3 normal, + vec3 color, + vec3 sky_reflect, + vec3 reflected, + float fresnel, + float visibleSky, + float dither, + vec3 lightColor +) { + vec4 reflection = vec4(0.0); + float infinite = 1.0; + + #if REFLECTION == 1 + reflection = + reflection_calc_dh(fragpos, normal, reflected, sky_reflect, dither); + #endif + + reflection.rgb = mix( + sky_reflect * visibleSky, + reflection.rgb, + reflection.a + ); + + #ifdef VANILLA_WATER + fresnel *= 0.8; + #endif + + #if SUN_REFLECTION == 1 + #ifndef NETHER + #ifndef THE_END + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + + vec3(sun_reflection(reflect(normalize(fragpos), normal))) * lightColor * infinite * visibleSky; + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif +} diff --git a/shaders/src/low_sky_voxy.glsl b/shaders/src/low_sky_voxy.glsl new file mode 100644 index 00000000..d3708ecf --- /dev/null +++ b/shaders/src/low_sky_voxy.glsl @@ -0,0 +1,21 @@ +#ifdef UNKNOWN_DIM + vec3 horizonSkyColorRGB = fogColor; + vec3 horizonSkyColor = rgbToXyz(horizonSkyColorRGB); +#else + vec3 horizonSkyColorRGB = dayBlendVoxy( + HORIZON_SUNSET_COLOR, + HORIZON_DAY_COLOR, + HORIZON_NIGHT_COLOR, + dayMixerV, + nightMixerV, + dayMomentV + ); + + horizonSkyColorRGB = mix( + horizonSkyColorRGB, + HORIZON_SKY_RAIN_COLOR * luma(horizonSkyColorRGB), + rainStrength + ); + + vec3 horizonSkyColor = rgbToXyz(horizonSkyColorRGB); +#endif \ No newline at end of file From 1717ef128e0437a896d99fb0f3418802c7a8b21b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Tue, 28 Apr 2026 20:04:30 -0600 Subject: [PATCH 126/147] Avance water II --- shaders/common/voxy.json | 2 +- .../common/water_voxy_blocks_fragment.glsl | 126 ++++++++++- shaders/lib/water_voxy.glsl | 200 +++++++++--------- 3 files changed, 218 insertions(+), 110 deletions(-) diff --git a/shaders/common/voxy.json b/shaders/common/voxy.json index 384dd5a1..89820a5a 100644 --- a/shaders/common/voxy.json +++ b/shaders/common/voxy.json @@ -1,6 +1,6 @@ { "version": 1, - "uniforms": ["worldTime", "sunPosition", "dayNightMix", "rainStrength", "skyColor", "fogColor", "isEyeInWater", "eyeBrightnessSmooth", "vxViewProjInv", "viewWidth", "viewHeight", "vxRenderDistance", "nightVision", "vxModelView", "pixelSizeX", "pixelSizeY", "blindness"], + "uniforms": ["worldTime", "sunPosition", "dayNightMix", "rainStrength", "skyColor", "fogColor", "isEyeInWater", "eyeBrightnessSmooth", "vxViewProjInv", "vxProjInv", "vxModelViewInv", "viewWidth", "viewHeight", "vxRenderDistance", "nightVision", "vxModelView", "pixelSizeX", "pixelSizeY", "blindness", "frameTimeCounter", "cameraPosition"], "samplers": { "gaux4": "sampler2D", "noisetex": "sampler2D" diff --git a/shaders/common/water_voxy_blocks_fragment.glsl b/shaders/common/water_voxy_blocks_fragment.glsl index e65f287a..9b1a3c4f 100644 --- a/shaders/common/water_voxy_blocks_fragment.glsl +++ b/shaders/common/water_voxy_blocks_fragment.glsl @@ -97,9 +97,37 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { vec3 astroVector = normalize(sunPosition); #endif + vec3 normal = vec3(uint((face>>1)==2), uint((face>>1)==0), uint((face>>1)==1)) * (float(int(face)&1)*2-1); + normal = mat3(vxModelView) * normal; + float astroLightStrength; + + // Comprobar la longitud al cuadrado (dot product) es mucho más rápido que la longitud (sqrt). + if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals + normal = normalize(normal); + astroLightStrength = dot(normal, astroVector); + } else { + normal = vec3(0.0, 1.0, 0.0); + astroLightStrength = 1.0; + } + #if defined THE_END || defined NETHER + float directLightStrength = astroLightStrength; + #else + float directLightStrength = mix(-astroLightStrength, astroLightStrength, dayNightMix); + #endif + // Omni light intensity changes by angle + float omniStrength = ((directLightStrength + 1.0) * 0.25) + 0.75; + // Calculamos color de luz directa + #if defined UNKNOWN_DIM + vec3 directLightColor = texture2D(lightmap, vec2(0.0, parameters.lightMap.y)).rgb; + #else + vec3 directLightColor = dayBlendVoxy(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR, dayMixerV, nightMixerV, dayMomentV); + #if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 + directLightColor += (endFlashIntensity * endFlashIntensity * 0.1); + #endif + #endif @@ -107,20 +135,25 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { - + vec3 binormal = normalize(vxModelView[2].xyz); + vec3 tangent = normalize(vxModelView[0].xyz); + vec3 upVector = normalize(vxModelView[1].xyz); // Fog Vertex - // 1. Reconstruir posición en clip space + // 1. Reconstruir clip space (base común) vec2 ndc = (gl_FragCoord.xy / vec2(viewWidth, viewHeight)) * 2.0 - 1.0; float depth = gl_FragCoord.z * 2.0 - 1.0; vec4 clipPos = vec4(ndc, depth, 1.0); - // 2. Pasar a world space - vec4 worldPos = vxViewProjInv * clipPos; - worldPos /= worldPos.w; + // 2. View space + vec4 viewSpacePos4D = vxProjInv * clipPos; + viewSpacePos4D /= viewSpacePos4D.w; + vec3 fragposition = viewSpacePos4D.xyz; - vec4 worldposition = worldPos + vec4(cameraPosition, 0.0); // Posición de mundo absoluta + // 3. World space derivado directamente de fragposition + vec4 worldPos = vxModelViewInv * viewSpacePos4D; + vec4 worldposition = worldPos + vec4(cameraPosition, 0.0); // 3. La distancia desde la cámara (equivalente a gl_FogFragCoord) float fogFragCoord = length(worldPos.xyz); @@ -148,9 +181,84 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { vec3 waterNormalBase = normal_waves_voxy(worldposition.xzy); #endif - - - + vec3 surfaceNormal; + if(customId == ENTITY_WATER) { // Water + surfaceNormal = get_normals_voxy(waterNormalBase, fragposition, tangent, binormal, normal); + } else { + surfaceNormal = get_normals_voxy(vec3(0.0, 0.0, 1.0), fragposition, tangent, binormal, normal); + } + + float normalDotEye = dot(surfaceNormal, normalize(fragposition)); + float fresnel = squarePow(1.0 + normalDotEye); + + vec3 reflectWaterVector = reflect(fragposition, surfaceNormal); + vec3 normalizedReflectWaterVector = normalize(reflectWaterVector); + + vec3 skyColorReflect; + if(isEyeInWater == 0 || isEyeInWater == 2) { + skyColorReflect = mix(horizonSkyColor, zenithSkyColor, smoothstep(0.0, 1.0, pow(clamp(dot(normalizedReflectWaterVector, upVector), 0.0001, 1.0), 0.333))); + } else { + skyColorReflect = zenithSkyColor * .5 * ((eyeBrightSmoothFloat.y * .8 + 48) * 0.004166666666666667); + } + + skyColorReflect = xyzToRgb(skyColorReflect); + + if(customId == ENTITY_WATER) { // Water + #ifdef VANILLA_WATER + blockColor = parameters.sampledColour; + + float shadowValue = abs((dayNightMix * 2.0) - 1.0); + float fresnelTex = luma(blockColor.rgb); + + realLight = omniLight + + (directLightStrength * shadowValue * directLightColor) * (1.0 - rainStrength * 0.75) + + candleColor; + #else + #if WATER_TEXTURE == 1 + #else + float waterTexture = 1.0; + #endif + + #if WATER_COLOR_SOURCE == 0 + // blockColor.rgb = waterTexture * realLight * WATER_COLOR; + #elif WATER_COLOR_SOURCE == 1 + // blockColor.rgb = 0.3 * waterTexture * realLight * tintColor.rgb; + #endif + + #if WATER_TEXTURE == 1 + // waterTexture += 0.25; + // waterTexture *= waterTexture; + // waterTexture *= waterTexture; + // fresnel = clamp(fresnel * (waterTexture), 0.0, 1.0); + #endif + #endif + } else { // Otros translúcidos + // blockColor = texture2D(tex, texcoord); + + // blockColor *= tintColor; + + #if defined SHADOW_CASTING && !defined NETHER + #if defined COLORED_SHADOW + // vec3 shadowValue = get_colored_shadow(shadowPos, dither); + // shadowValue = mix(shadowValue, vec3(1.0), shadowDiffuse); + #else + // float shadowValue = get_shadow(shadowPos, dither); + // shadowValue = mix(shadowValue, 1.0, shadowDiffuse); + #endif + #else + // float shadowValue = abs((dayNightMix * 2.0) - 1.0); + #endif + + // realLight = omniLight + + // (directLightStrength * shadowValue * directLightColor) * (1.0 - rainStrength * 0.75) + + // candleColor; + + // blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * .125); + + // if(blockType > 1.5) { // Glass + // blockColor = cristal_shader(fragposition, waterNormal, blockColor, skyColorReflect, fresnel * fresnel, visibleSky, dither, directLightColor); + // } + } // Temporal diff --git a/shaders/lib/water_voxy.glsl b/shaders/lib/water_voxy.glsl index 0ce35eca..7e4d5e33 100644 --- a/shaders/lib/water_voxy.glsl +++ b/shaders/lib/water_voxy.glsl @@ -2,24 +2,24 @@ Water reflection and refraction related functions (dh). */ -#if SUN_REFLECTION == 1 - #if !defined NETHER && !defined THE_END - float sun_reflection(vec3 fragpos) { - vec3 astroLightPos = worldTime > 12900 ? moonPosition : sunPosition; - float astroAlignment = - max(dot(normalize(fragpos), normalize(astroLightPos)), 0.0); +// #if SUN_REFLECTION == 1 +// #if !defined NETHER && !defined THE_END +// float sun_reflection(vec3 fragpos) { +// vec3 astroLightPos = worldTime > 12900 ? moonPosition : sunPosition; +// float astroAlignment = +// max(dot(normalize(fragpos), normalize(astroLightPos)), 0.0); - return smoothstep(0.995, 1.0, astroAlignment) * - clamp(lmcoord.y, 0.0, 1.0) * - (1.0 - rainStrength) * 3.0; - } +// return smoothstep(0.995, 1.0, astroAlignment) * +// clamp(lmcoord.y, 0.0, 1.0) * +// (1.0 - rainStrength) * 3.0; +// } - #endif -#endif +// #endif +// #endif vec3 normal_waves_voxy(vec3 pos) { vec2 wave_2 = - texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.03125) - (frameTimeCounter * .025)).rg; + texture(noisetex, ((pos.xy - pos.z * 0.2) * 0.03125) - (frameTimeCounter * .025)).rg; wave_2 = wave_2 - .5; vec2 partialWave = wave_2; vec3 finalWave = vec3(partialWave, WATER_TURBULENCE); @@ -27,33 +27,33 @@ vec3 normal_waves_voxy(vec3 pos) { return normalize(finalWave); } -vec3 refraction(vec3 fragpos, vec3 color, vec3 refraction) { - vec2 pos = gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY); +// vec3 refraction(vec3 fragpos, vec3 color, vec3 refraction) { +// vec2 pos = gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY); - #if REFRACTION == 1 - pos = pos + refraction.xy * (0.075 / (1.0 + length(fragpos) * 0.4)); - #endif +// #if REFRACTION == 1 +// pos = pos + refraction.xy * (0.075 / (1.0 + length(fragpos) * 0.4)); +// #endif - float water_absortion; - if (isEyeInWater == 0) { - float water_distance = - 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * gl_FragCoord.z - 1.0) * (dhFarPlane - dhNearPlane)); +// float water_absortion; +// if (isEyeInWater == 0) { +// float water_distance = +// 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * gl_FragCoord.z - 1.0) * (dhFarPlane - dhNearPlane)); - float earth_distance = texture2D(dhDepthTex1, pos.xy).r; - earth_distance = - 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * earth_distance - 1.0) * (dhFarPlane - dhNearPlane)); +// float earth_distance = texture2D(dhDepthTex1, pos.xy).r; +// earth_distance = +// 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * earth_distance - 1.0) * (dhFarPlane - dhNearPlane)); - water_absortion = (earth_distance - water_distance) * 0.5; - water_absortion *= water_absortion; - water_absortion = (1.0 / -((water_absortion * WATER_ABSORPTION) + 1.125)) + 1.0; - } else { - water_absortion = 0.0; - } +// water_absortion = (earth_distance - water_distance) * 0.5; +// water_absortion *= water_absortion; +// water_absortion = (1.0 / -((water_absortion * WATER_ABSORPTION) + 1.125)) + 1.0; +// } else { +// water_absortion = 0.0; +// } - return mix(texture2D(gaux1, pos.xy).rgb, color, water_absortion); -} +// return mix(texture2D(gaux1, pos.xy).rgb, color, water_absortion); +// } -vec3 get_normals(vec3 bump, vec3 fragpos) { +vec3 get_normals_voxy(vec3 bump, vec3 fragpos, vec3 tangent, vec3 binormal, vec3 waterNormal) { float NdotE = abs(dot(waterNormal, normalize(fragpos))); bump *= vec3(NdotE) + vec3(0.0, 0.0, 1.0 - NdotE); @@ -67,69 +67,69 @@ vec3 get_normals(vec3 bump, vec3 fragpos) { return normalize(bump * tbn_matrix); } -vec4 reflection_calc_dh(vec3 fragpos, vec3 normal, vec3 reflected, vec3 infinite_color, float dither) { - vec3 pos = camera_to_screen(fragpos + reflected * 768.0); - - float border = - clamp((1.0 - (max(0.0, abs(pos.y - 0.5)) * 2.0)) * 50.0, 0.0, 1.0); - - border = clamp(border - pow(pos.y, 10.0), 0.0, 1.0); - - pos.x = abs(pos.x); - if (pos.x > 1.0) { - pos.x = 1.0 - (pos.x - 1.0); - } - - vec4 final_reflex; - if (texture2D(depthtex0, pos.xy).r < 0.999) { - final_reflex = vec4(infinite_color, border); - } else { - final_reflex = vec4(texture2D(gaux1, pos.xy).rgb, border); - } - return final_reflex; -} - -vec3 water_shader_dh( - vec3 fragpos, - vec3 normal, - vec3 color, - vec3 sky_reflect, - vec3 reflected, - float fresnel, - float visibleSky, - float dither, - vec3 lightColor -) { - vec4 reflection = vec4(0.0); - float infinite = 1.0; - - #if REFLECTION == 1 - reflection = - reflection_calc_dh(fragpos, normal, reflected, sky_reflect, dither); - #endif - - reflection.rgb = mix( - sky_reflect * visibleSky, - reflection.rgb, - reflection.a - ); - - #ifdef VANILLA_WATER - fresnel *= 0.8; - #endif - - #if SUN_REFLECTION == 1 - #ifndef NETHER - #ifndef THE_END - return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + - vec3(sun_reflection(reflect(normalize(fragpos), normal))) * lightColor * infinite * visibleSky; - #else - return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); - #endif - #else - return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); - #endif - #else - return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); - #endif -} +// vec4 reflection_calc_dh(vec3 fragpos, vec3 normal, vec3 reflected, vec3 infinite_color, float dither) { +// vec3 pos = camera_to_screen(fragpos + reflected * 768.0); + +// float border = +// clamp((1.0 - (max(0.0, abs(pos.y - 0.5)) * 2.0)) * 50.0, 0.0, 1.0); + +// border = clamp(border - pow(pos.y, 10.0), 0.0, 1.0); + +// pos.x = abs(pos.x); +// if (pos.x > 1.0) { +// pos.x = 1.0 - (pos.x - 1.0); +// } + +// vec4 final_reflex; +// if (texture2D(depthtex0, pos.xy).r < 0.999) { +// final_reflex = vec4(infinite_color, border); +// } else { +// final_reflex = vec4(texture2D(gaux1, pos.xy).rgb, border); +// } +// return final_reflex; +// } + +// vec3 water_shader_dh( +// vec3 fragpos, +// vec3 normal, +// vec3 color, +// vec3 sky_reflect, +// vec3 reflected, +// float fresnel, +// float visibleSky, +// float dither, +// vec3 lightColor +// ) { +// vec4 reflection = vec4(0.0); +// float infinite = 1.0; + +// #if REFLECTION == 1 +// reflection = +// reflection_calc_dh(fragpos, normal, reflected, sky_reflect, dither); +// #endif + +// reflection.rgb = mix( +// sky_reflect * visibleSky, +// reflection.rgb, +// reflection.a +// ); + +// #ifdef VANILLA_WATER +// fresnel *= 0.8; +// #endif + +// #if SUN_REFLECTION == 1 +// #ifndef NETHER +// #ifndef THE_END +// return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + +// vec3(sun_reflection(reflect(normalize(fragpos), normal))) * lightColor * infinite * visibleSky; +// #else +// return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); +// #endif +// #else +// return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); +// #endif +// #else +// return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); +// #endif +// } From fccf44d2780bce90ffee0224933e444c740286f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Wed, 29 Apr 2026 20:04:00 -0600 Subject: [PATCH 127/147] Avance water III --- shaders/common/water_blocks_fragment.glsl | 18 ++-- .../common/water_voxy_blocks_fragment.glsl | 87 ++++++++++++++----- shaders/lib/water_voxy.glsl | 86 +++++++++--------- 3 files changed, 115 insertions(+), 76 deletions(-) diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index c1cc9686..ea638148 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -164,7 +164,7 @@ void main() { #else vec3 waterNormalBase = normal_waves(worldposition.xzy); #endif - + vec3 surfaceNormal; if(blockType > 2.5) { // Water surfaceNormal = get_normals(waterNormalBase, fragposition); @@ -259,7 +259,7 @@ void main() { #endif blockColor.rgb = water_shader(fragposition, surfaceNormal, blockColor.rgb, skyColorReflect, normalizedReflectWaterVector, fresnel, visibleSky, dither, directLightColor); - + #endif } else { // Otros translúcidos @@ -268,13 +268,13 @@ void main() { blockColor *= tintColor; #if defined SHADOW_CASTING && !defined NETHER - #if defined COLORED_SHADOW - vec3 shadowValue = get_colored_shadow(shadowPos, dither); - shadowValue = mix(shadowValue, vec3(1.0), shadowDiffuse); - #else - float shadowValue = get_shadow(shadowPos, dither); - shadowValue = mix(shadowValue, 1.0, shadowDiffuse); - #endif + #if defined COLORED_SHADOW + vec3 shadowValue = get_colored_shadow(shadowPos, dither); + shadowValue = mix(shadowValue, vec3(1.0), shadowDiffuse); + #else + float shadowValue = get_shadow(shadowPos, dither); + shadowValue = mix(shadowValue, 1.0, shadowDiffuse); + #endif #else float shadowValue = abs((dayNightMix * 2.0) - 1.0); #endif diff --git a/shaders/common/water_voxy_blocks_fragment.glsl b/shaders/common/water_voxy_blocks_fragment.glsl index 9b1a3c4f..126d4fa6 100644 --- a/shaders/common/water_voxy_blocks_fragment.glsl +++ b/shaders/common/water_voxy_blocks_fragment.glsl @@ -129,11 +129,46 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { #endif #endif + directLightStrength = clamp(directLightStrength, 0.0, 1.0); + #if defined THE_END || defined NETHER + vec3 omniLight = LIGHT_DAY_COLOR * omniStrength; + #else + directLightColor = mix(directLightColor, ZENITH_SKY_RAIN_COLOR * luma(directLightColor) * 0.4, rainStrength); + // Minimal light + vec3 omniColor = mix(ZenithSkyColorRGB, directLightColor * 0.45, OMNI_TINT); + float omniColorLuma = colorAverage(omniColor); + // --- OPTIMIZACIÓN #3: Prevenir división por cero --- + float lumaRatio = AVOID_DARK_LEVEL / max(omniColorLuma, 0.0001); + vec3 omniColorMin = omniColor * lumaRatio; + omniColor = max(omniColor, omniColorMin); + vec3 omniLight = mix(omniColorMin, omniColor, visibleSky) * omniStrength; + #endif + #if !defined THE_END && !defined NETHER + #ifndef SHADOW_CASTING + // Fake shadows + if (isEyeInWater == 0) { + // Reemplazar pow(x, 10.0) con multiplicaciones --- + float visSky2 = visibleSky * visibleSky; + float visSky4 = visSky2 * visSky2; + float visSky8 = visSky4 * visSky4; + directLightStrength = mix(0.0, directLightStrength, visSky8 * visSky2); + } else { + directLightStrength = mix(0.0, directLightStrength, visibleSky); + } + #else + directLightStrength = mix(0.0, directLightStrength, visibleSky); + #endif + #endif + if (customId == ENTITY_EMMISIVE) { + directLightStrength = 10.0; + } else if (customId == ENTITY_S_EMMISIVE) { + directLightStrength = 1.0; + } vec3 binormal = normalize(vxModelView[2].xyz); vec3 tangent = normalize(vxModelView[0].xyz); @@ -213,47 +248,51 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { realLight = omniLight + (directLightStrength * shadowValue * directLightColor) * (1.0 - rainStrength * 0.75) + candleColor; + + realLight *= (fresnelTex * 2.0) - 0.25; + + blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * .125) * tintColor.rgb; + + // blockColor.rgb = water_shader(fragposition, surfaceNormal, blockColor.rgb, skyColorReflect, normalizedReflectWaterVector, fresnel, visibleSky, dither, directLightColor); + + blockColor.a = sqrt(blockColor.a); #else #if WATER_TEXTURE == 1 + blockColor = parameters.sampledColour; + float waterTexture = luma(blockColor.rgb); #else float waterTexture = 1.0; #endif + realLight = omniLight + + (directLightStrength * visibleSky * directLightColor) * (1.0 - rainStrength * 0.75) + + candleColor; + #if WATER_COLOR_SOURCE == 0 - // blockColor.rgb = waterTexture * realLight * WATER_COLOR; + blockColor.rgb = waterTexture * realLight * WATER_COLOR; #elif WATER_COLOR_SOURCE == 1 - // blockColor.rgb = 0.3 * waterTexture * realLight * tintColor.rgb; + blockColor.rgb = 0.3 * waterTexture * realLight * tintColor.rgb; #endif #if WATER_TEXTURE == 1 - // waterTexture += 0.25; - // waterTexture *= waterTexture; - // waterTexture *= waterTexture; - // fresnel = clamp(fresnel * (waterTexture), 0.0, 1.0); + waterTexture += 0.25; + waterTexture *= waterTexture; + waterTexture *= waterTexture; + fresnel = clamp(fresnel * (waterTexture), 0.0, 1.0); #endif #endif } else { // Otros translúcidos - // blockColor = texture2D(tex, texcoord); + blockColor = parameters.sampledColour; - // blockColor *= tintColor; + blockColor *= tintColor; - #if defined SHADOW_CASTING && !defined NETHER - #if defined COLORED_SHADOW - // vec3 shadowValue = get_colored_shadow(shadowPos, dither); - // shadowValue = mix(shadowValue, vec3(1.0), shadowDiffuse); - #else - // float shadowValue = get_shadow(shadowPos, dither); - // shadowValue = mix(shadowValue, 1.0, shadowDiffuse); - #endif - #else - // float shadowValue = abs((dayNightMix * 2.0) - 1.0); - #endif + float shadowValue = abs((dayNightMix * 2.0) - 1.0); - // realLight = omniLight + - // (directLightStrength * shadowValue * directLightColor) * (1.0 - rainStrength * 0.75) + - // candleColor; + realLight = omniLight + + (directLightStrength * shadowValue * directLightColor) * (1.0 - rainStrength * 0.75) + + candleColor; - // blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * .125); + blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * .125); // if(blockType > 1.5) { // Glass // blockColor = cristal_shader(fragposition, waterNormal, blockColor, skyColorReflect, fresnel * fresnel, visibleSky, dither, directLightColor); @@ -262,7 +301,7 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { // Temporal - blockColor = parameters.sampledColour * parameters.tinting; + // blockColor = parameters.sampledColour * parameters.tinting; #include "/src/finalcolor_voxy.glsl" diff --git a/shaders/lib/water_voxy.glsl b/shaders/lib/water_voxy.glsl index 7e4d5e33..83c57bc4 100644 --- a/shaders/lib/water_voxy.glsl +++ b/shaders/lib/water_voxy.glsl @@ -89,47 +89,47 @@ vec3 get_normals_voxy(vec3 bump, vec3 fragpos, vec3 tangent, vec3 binormal, vec3 // return final_reflex; // } -// vec3 water_shader_dh( -// vec3 fragpos, -// vec3 normal, -// vec3 color, -// vec3 sky_reflect, -// vec3 reflected, -// float fresnel, -// float visibleSky, -// float dither, -// vec3 lightColor -// ) { -// vec4 reflection = vec4(0.0); -// float infinite = 1.0; - -// #if REFLECTION == 1 -// reflection = -// reflection_calc_dh(fragpos, normal, reflected, sky_reflect, dither); -// #endif - -// reflection.rgb = mix( -// sky_reflect * visibleSky, -// reflection.rgb, -// reflection.a -// ); - -// #ifdef VANILLA_WATER -// fresnel *= 0.8; -// #endif +vec3 water_shader_voxy( + vec3 fragpos, + vec3 normal, + vec3 color, + vec3 sky_reflect, + vec3 reflected, + float fresnel, + float visibleSky, + float dither, + vec3 lightColor +) { + vec4 reflection = vec4(0.0); + float infinite = 1.0; + + #if REFLECTION == 1 + reflection = + reflection_calc_voxy(fragpos, normal, reflected, sky_reflect, dither); + #endif + + reflection.rgb = mix( + sky_reflect * visibleSky, + reflection.rgb, + reflection.a + ); -// #if SUN_REFLECTION == 1 -// #ifndef NETHER -// #ifndef THE_END -// return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + -// vec3(sun_reflection(reflect(normalize(fragpos), normal))) * lightColor * infinite * visibleSky; -// #else -// return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); -// #endif -// #else -// return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); -// #endif -// #else -// return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); -// #endif -// } + #ifdef VANILLA_WATER + fresnel *= 0.8; + #endif + + #if SUN_REFLECTION == 1 + #ifndef NETHER + #ifndef THE_END + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + + vec3(sun_reflection(reflect(normalize(fragpos), normal))) * lightColor * infinite * visibleSky; + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif +} From 3d104aa9f606140b9d6a711f6495300bfb8edfc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Thu, 30 Apr 2026 19:31:06 -0600 Subject: [PATCH 128/147] Avance water IV --- .../common/solid_voxy_blocks_fragment.glsl | 1 + shaders/common/voxy.json | 5 +- .../common/water_voxy_blocks_fragment.glsl | 10 +- shaders/lib/projection_utils_voxy.glsl | 15 ++ shaders/lib/volumetric_clouds.glsl | 151 +----------------- shaders/lib/water.glsl | 6 +- shaders/lib/water_voxy.glsl | 70 ++++---- 7 files changed, 68 insertions(+), 190 deletions(-) create mode 100644 shaders/lib/projection_utils_voxy.glsl diff --git a/shaders/common/solid_voxy_blocks_fragment.glsl b/shaders/common/solid_voxy_blocks_fragment.glsl index 78b5588b..bcd05dee 100644 --- a/shaders/common/solid_voxy_blocks_fragment.glsl +++ b/shaders/common/solid_voxy_blocks_fragment.glsl @@ -263,4 +263,5 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { // Real color gbufferData0 = blockColor; + // gbufferData1 = blockColor; } \ No newline at end of file diff --git a/shaders/common/voxy.json b/shaders/common/voxy.json index 89820a5a..1ae01704 100644 --- a/shaders/common/voxy.json +++ b/shaders/common/voxy.json @@ -1,10 +1,11 @@ { "version": 1, - "uniforms": ["worldTime", "sunPosition", "dayNightMix", "rainStrength", "skyColor", "fogColor", "isEyeInWater", "eyeBrightnessSmooth", "vxViewProjInv", "vxProjInv", "vxModelViewInv", "viewWidth", "viewHeight", "vxRenderDistance", "nightVision", "vxModelView", "pixelSizeX", "pixelSizeY", "blindness", "frameTimeCounter", "cameraPosition"], + "uniforms": ["worldTime", "sunPosition", "moonPosition", "dayNightMix", "rainStrength", "skyColor", "fogColor", "isEyeInWater", "eyeBrightnessSmooth", "vxViewProjInv", "vxProj", "vxProjInv", "vxModelViewInv", "vxModelView", "viewWidth", "viewHeight", "vxRenderDistance", "nightVision", "pixelSizeX", "pixelSizeY", "blindness", "frameTimeCounter", "cameraPosition"], "samplers": { + "gaux1": "sampler2D", "gaux4": "sampler2D", "noisetex": "sampler2D" }, - "opaqueDrawBuffers": [1, 7], + "opaqueDrawBuffers": [1, 4], "translucentDrawBuffers": [1] } \ No newline at end of file diff --git a/shaders/common/water_voxy_blocks_fragment.glsl b/shaders/common/water_voxy_blocks_fragment.glsl index 126d4fa6..e204e66b 100644 --- a/shaders/common/water_voxy_blocks_fragment.glsl +++ b/shaders/common/water_voxy_blocks_fragment.glsl @@ -13,6 +13,7 @@ #include "/lib/color_utils.glsl" #endif +#include "/lib/projection_utils_voxy.glsl" #include "/lib/water_voxy.glsl" layout(location = 0) out vec4 gbufferData0; @@ -48,6 +49,7 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { uint face = parameters.face; uint customId = parameters.customId; vec4 tintColor = parameters.tinting; + vec2 lmcoord = parameters.lightMap; // Includes @@ -73,9 +75,9 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { // Luz nativa (lmcoord.x: candela, lmcoord.y: cielo) ---- #if defined THE_END || defined NETHER - vec2 illumination = vec2(parameters.lightMap.x, 1.0); + vec2 illumination = vec2(lmcoord.x, 1.0); #else - vec2 illumination = parameters.lightMap; + vec2 illumination = lmcoord; #endif illumination.y = max(illumination.y - 0.065, 0.0) * 1.06951871657754; @@ -121,7 +123,7 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { // Calculamos color de luz directa #if defined UNKNOWN_DIM - vec3 directLightColor = texture2D(lightmap, vec2(0.0, parameters.lightMap.y)).rgb; + vec3 directLightColor = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; #else vec3 directLightColor = dayBlendVoxy(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR, dayMixerV, nightMixerV, dayMomentV); #if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 @@ -253,7 +255,7 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * .125) * tintColor.rgb; - // blockColor.rgb = water_shader(fragposition, surfaceNormal, blockColor.rgb, skyColorReflect, normalizedReflectWaterVector, fresnel, visibleSky, dither, directLightColor); + blockColor.rgb = water_shader_voxy(fragposition, surfaceNormal, blockColor.rgb, skyColorReflect, normalizedReflectWaterVector, fresnel, visibleSky, directLightColor, lmcoord); blockColor.a = sqrt(blockColor.a); #else diff --git a/shaders/lib/projection_utils_voxy.glsl b/shaders/lib/projection_utils_voxy.glsl new file mode 100644 index 00000000..c90b2f0f --- /dev/null +++ b/shaders/lib/projection_utils_voxy.glsl @@ -0,0 +1,15 @@ +/* MakeUp - projection_utils.glsl +Projection generic functions. + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define diagonal3(m) vec3((m)[0].x, (m)[1].y, m[2].z) +#define projMAD(m, v) (diagonal3(m) * (v) + (m)[3].xyz) + +vec3 camera_to_screen_voxy(vec3 fragpos) { + vec4 pos = vxProj * vec4(fragpos, 1.0); + pos /= pos.w; + + return pos.xyz * 0.5 + 0.5; +} diff --git a/shaders/lib/volumetric_clouds.glsl b/shaders/lib/volumetric_clouds.glsl index 9374a24c..f4c32d40 100644 --- a/shaders/lib/volumetric_clouds.glsl +++ b/shaders/lib/volumetric_clouds.glsl @@ -2,149 +2,6 @@ Fast volumetric clouds - MakeUp implementation */ -vec3 get_cloud_old(vec3 eyeDirection, vec3 blockColor, float bright, float dither, vec3 base_pos, int samples, float umbral, vec3 cloudColor, vec3 darkCloudColor) { - float plane_distance; - float cloud_value; - float density; - vec3 intersection_pos; - vec3 intersection_pos_sup; - float dif_inf; - float dif_sup; - float dist_aux_coeff; - float current_value; - float surface_inf; - float surface_sup; - bool first_contact = true; - float opacity_dist; - vec3 increment; - float increment_dist; - float view_y_inv = 1.0 / eyeDirection.y; - float distance_aux; - float dist_aux_coeff_blur; - - #if VOL_LIGHT == 0 - blockColor.rgb *= - clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; - #endif - - #if defined DISTANT_HORIZONS && defined DEFERRED_SHADER - float d_dh = texture2D(dhDepthTex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight)).r; - float linear_d_dh = ld_dh(d_dh); - if (linear_d_dh < 0.9999) { - return blockColor; - } - #endif - - if (eyeDirection.y > 0.0) { // Over horizon - plane_distance = (CLOUD_PLANE - base_pos.y) * view_y_inv; - intersection_pos = (eyeDirection * plane_distance) + base_pos; - - plane_distance = (CLOUD_PLANE_SUP - base_pos.y) * view_y_inv; - intersection_pos_sup = (eyeDirection * plane_distance) + base_pos; - - dif_sup = CLOUD_PLANE_SUP - CLOUD_PLANE_CENTER; - dif_inf = CLOUD_PLANE_CENTER - CLOUD_PLANE; - dist_aux_coeff = (CLOUD_PLANE_SUP - CLOUD_PLANE) * 0.075; - dist_aux_coeff_blur = dist_aux_coeff * 0.3; - - opacity_dist = dist_aux_coeff * 2.0 * view_y_inv; - - increment = (intersection_pos_sup - intersection_pos) / samples; - increment_dist = length(increment); - - cloud_value = 0.0; - - intersection_pos += (increment * dither); - - for (int i = 0; i < samples; i++) { - current_value = - texture2D( - gaux2, - (intersection_pos.xz * 0.0002777777777777778) + (frameTimeCounter * CLOUD_HI_FACTOR) - ).r; - - - #if V_CLOUDS == 2 && CLOUD_VOL_STYLE == 0 - current_value += - texture2D( - gaux2, - (intersection_pos.zx * 0.0002777777777777778) + (frameTimeCounter * CLOUD_LOW_FACTOR) - ).r; - - current_value *= 0.5; - current_value = smoothstep(0.05, 0.95, current_value); - - #endif - - // Ajuste por umbral - current_value = (current_value - umbral) / (1.0 - umbral); - - // Superficies inferior y superior de nubes - surface_inf = CLOUD_PLANE_CENTER - (current_value * dif_inf); - surface_sup = CLOUD_PLANE_CENTER + (current_value * dif_sup); - - if ( // Dentro de la nube - intersection_pos.y > surface_inf && - intersection_pos.y < surface_sup - ) { - cloud_value += min(increment_dist, surface_sup - surface_inf); - - if (first_contact) { - first_contact = false; - density = - (surface_sup - intersection_pos.y) / - (CLOUD_PLANE_SUP - CLOUD_PLANE); - } - } - else if (surface_inf < surface_sup && i > 0) { // Fuera de la nube - distance_aux = min( - abs(intersection_pos.y - surface_inf), - abs(intersection_pos.y - surface_sup) - ); - - if (distance_aux < dist_aux_coeff_blur) { - cloud_value += min( - (clamp(dist_aux_coeff_blur - distance_aux, 0.0, dist_aux_coeff_blur) / dist_aux_coeff_blur) * increment_dist, - surface_sup - surface_inf - ); - - if (first_contact) { - first_contact = false; - density = - (surface_sup - intersection_pos.y) / - (CLOUD_PLANE_SUP - CLOUD_PLANE); - } - } - } - - intersection_pos += increment; - } - - cloud_value = clamp(cloud_value / opacity_dist, 0.0, 1.0); - density = clamp(density, 0.0001, 1.0); - - float att_factor = mix(1.0, 0.75, bright * (1.0 - rainStrength)); - - #if CLOUD_VOL_STYLE == 1 - cloudColor = mix(cloudColor * att_factor, darkCloudColor * att_factor, pow(density, 0.3) * 0.85); - #else - cloudColor = mix(cloudColor * att_factor, darkCloudColor * att_factor, pow(density, 0.4)); - #endif - - // Halo brillante de contra al sol - cloudColor = - mix(cloudColor, cloudColor * 13.0, (1.0 - pow(cloud_value, 0.2)) * bright * bright * (1.0 - rainStrength)); - - blockColor = mix( - blockColor, - cloudColor, - cloud_value * clamp((eyeDirection.y - 0.06) * 5.0, 0.0, 1.0) - ); - } - - return blockColor; -} - vec3 get_cloud(vec3 eyeDirection, vec3 blockColor, float bright, float dither, vec3 base_pos, int samples, float umbral, vec3 cloudColor, vec3 darkCloudColor) { #if VOL_LIGHT == 0 blockColor.rgb *= clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; @@ -173,7 +30,7 @@ vec3 get_cloud(vec3 eyeDirection, vec3 blockColor, float bright, float dither, v vec3 increment = (intersection_pos_sup - intersection_pos) / samples; float increment_dist = length(increment); - + float dist_aux_coeff = (CLOUD_PLANE_SUP - CLOUD_PLANE) * 0.075; float dist_aux_coeff_blur = dist_aux_coeff * 0.3; float opacity_dist = dist_aux_coeff * 2.0 * view_y_inv; @@ -196,7 +53,7 @@ vec3 get_cloud(vec3 eyeDirection, vec3 blockColor, float bright, float dither, v float surface_inf = CLOUD_PLANE_CENTER - (current_value * dif_inf); float surface_sup = CLOUD_PLANE_CENTER + (current_value * dif_sup); - + float current_opacity = 0.0; float cloud_thickness = surface_sup - surface_inf; @@ -220,7 +77,7 @@ vec3 get_cloud(vec3 eyeDirection, vec3 blockColor, float bright, float dither, v density = (surface_sup - intersection_pos.y) / (CLOUD_PLANE_SUP - CLOUD_PLANE); } } - + intersection_pos += increment; } @@ -232,7 +89,7 @@ vec3 get_cloud(vec3 eyeDirection, vec3 blockColor, float bright, float dither, v // --- OPTIMIZACIÓN: Reemplazar pow() por aproximaciones con sqrt() --- // pow(x, 0.25) es mucho más rápido y visualmente casi idéntico a pow(x, 0.3) o pow(x, 0.4) float density_approx = sqrt(sqrt(density)); // x^0.25 - + #if CLOUD_VOL_STYLE == 1 cloudColor = mix(cloudColor * att_factor, darkCloudColor * att_factor, density_approx * 0.85); #else diff --git a/shaders/lib/water.glsl b/shaders/lib/water.glsl index e09733b6..d90fbdfc 100644 --- a/shaders/lib/water.glsl +++ b/shaders/lib/water.glsl @@ -17,7 +17,7 @@ vec3 fastRaymarch(vec3 direction, vec3 hitPoint, inout float infinite, float dit bool outOfEyeFlag = false; bool toFar = false; vec3 lastScreenMarchPos; - + int no_hidden_steps = 0; bool hiddens = false; @@ -174,7 +174,7 @@ vec3 get_normals(vec3 bump, vec3 fragpos) { vec4 reflection_calc(vec3 fragpos, vec3 normal, vec3 reflected, inout float infinite, float dither) { #if SSR_TYPE == 0 // Flipped image - #if defined DISTANT_HORIZONS + #if defined DISTANT_HORIZONS || defined VOXY vec3 pos = camera_to_screen(fragpos + reflected * 768.0); #else vec3 pos = camera_to_screen(fragpos + reflected * 76.0); @@ -229,7 +229,7 @@ vec3 water_shader( #ifndef NETHER #ifndef THE_END return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + - vec3(sun_reflection(reflect(normalize(fragpos), normal))) * lightColor * infinite * visibleSky; + vec3(sun_reflection(reflect(normalize(fragpos), normal))) * lightColor * infinite * visibleSky; #else return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); #endif diff --git a/shaders/lib/water_voxy.glsl b/shaders/lib/water_voxy.glsl index 83c57bc4..8c634869 100644 --- a/shaders/lib/water_voxy.glsl +++ b/shaders/lib/water_voxy.glsl @@ -2,20 +2,20 @@ Water reflection and refraction related functions (dh). */ -// #if SUN_REFLECTION == 1 -// #if !defined NETHER && !defined THE_END -// float sun_reflection(vec3 fragpos) { -// vec3 astroLightPos = worldTime > 12900 ? moonPosition : sunPosition; -// float astroAlignment = -// max(dot(normalize(fragpos), normalize(astroLightPos)), 0.0); - -// return smoothstep(0.995, 1.0, astroAlignment) * -// clamp(lmcoord.y, 0.0, 1.0) * -// (1.0 - rainStrength) * 3.0; -// } +#if SUN_REFLECTION == 1 + #if !defined NETHER && !defined THE_END + float sun_reflection(vec3 fragpos, vec2 lmcoord) { + vec3 astroLightPos = worldTime > 12900 ? moonPosition : sunPosition; + float astroAlignment = + max(dot(normalize(fragpos), normalize(astroLightPos)), 0.0); + + return smoothstep(0.995, 1.0, astroAlignment) * + clamp(lmcoord.y, 0.0, 1.0) * + (1.0 - rainStrength) * 3.0; + } -// #endif -// #endif + #endif +#endif vec3 normal_waves_voxy(vec3 pos) { vec2 wave_2 = @@ -67,27 +67,22 @@ vec3 get_normals_voxy(vec3 bump, vec3 fragpos, vec3 tangent, vec3 binormal, vec3 return normalize(bump * tbn_matrix); } -// vec4 reflection_calc_dh(vec3 fragpos, vec3 normal, vec3 reflected, vec3 infinite_color, float dither) { -// vec3 pos = camera_to_screen(fragpos + reflected * 768.0); +// vec4 reflection_calc_voxy(vec3 fragpos, vec3 normal, vec3 reflected, vec3 infinite_color, float dither) { +vec4 reflection_calc_voxy(vec3 fragpos, vec3 normal, vec3 reflected, vec3 infinite_color) { + vec3 pos = camera_to_screen_voxy(fragpos + reflected * 768.0); -// float border = -// clamp((1.0 - (max(0.0, abs(pos.y - 0.5)) * 2.0)) * 50.0, 0.0, 1.0); + float border = + clamp((1.0 - (max(0.0, abs(pos.y - 0.5)) * 2.0)) * 50.0, 0.0, 1.0); -// border = clamp(border - pow(pos.y, 10.0), 0.0, 1.0); + border = clamp(border - pow(pos.y, 10.0), 0.0, 1.0); -// pos.x = abs(pos.x); -// if (pos.x > 1.0) { -// pos.x = 1.0 - (pos.x - 1.0); -// } + pos.x = abs(pos.x); + if (pos.x > 1.0) { + pos.x = 1.0 - (pos.x - 1.0); + } -// vec4 final_reflex; -// if (texture2D(depthtex0, pos.xy).r < 0.999) { -// final_reflex = vec4(infinite_color, border); -// } else { -// final_reflex = vec4(texture2D(gaux1, pos.xy).rgb, border); -// } -// return final_reflex; -// } + return vec4(texture(gaux1, pos.xy).rgb, border); +} vec3 water_shader_voxy( vec3 fragpos, @@ -97,21 +92,28 @@ vec3 water_shader_voxy( vec3 reflected, float fresnel, float visibleSky, - float dither, - vec3 lightColor + // float dither, + vec3 lightColor, + vec2 lmcoord ) { vec4 reflection = vec4(0.0); float infinite = 1.0; #if REFLECTION == 1 reflection = - reflection_calc_voxy(fragpos, normal, reflected, sky_reflect, dither); + // reflection_calc_voxy(fragpos, normal, reflected, sky_reflect, dither); + reflection_calc_voxy(fragpos, normal, reflected, sky_reflect); + // vec4(1.0, 0.0, 0.0, 1.0); #endif + // DEBUG + return reflection.rgb; + reflection.rgb = mix( sky_reflect * visibleSky, reflection.rgb, reflection.a + // 1.0 ); #ifdef VANILLA_WATER @@ -122,7 +124,7 @@ vec3 water_shader_voxy( #ifndef NETHER #ifndef THE_END return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + - vec3(sun_reflection(reflect(normalize(fragpos), normal))) * lightColor * infinite * visibleSky; + vec3(sun_reflection(reflect(normalize(fragpos), normal), lmcoord)) * lightColor * infinite * visibleSky; #else return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); #endif From b1bf88ea3ae1c9f15747288fbf561523a6a64195 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Fri, 1 May 2026 00:33:54 -0600 Subject: [PATCH 129/147] RC Old buffer names --- README.md | 4 ++-- shaders/common/solid_blocks_vertex.glsl | 2 +- shaders/lang/es_AR.lang | 2 +- shaders/lang/es_ES.lang | 2 +- shaders/lang/es_MX.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- shaders/lib/water.glsl | 6 +++--- 10 files changed, 13 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index cf156191..176b5a05 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.4e +## Version: 9.4f ### This version works in Optifine and Iris 1.5.1 or higher. @@ -21,7 +21,7 @@ High performance Minecraft shader (Java). * FAST! ## Tested on: -* Minecraft 1.12.+ - 1.21.x +* Minecraft 1.12.+ - 26.1.x * Nvidia, AMD, Intel * Windows and Linux diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index b34ee797..513e7506 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -146,7 +146,7 @@ void main() { #include "/src/fog_vertex.glsl" // Glowing blocks - #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND + #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND || defined GBUFFER_ENTITIES isEmissiveEntity = 0.0; if(mc_Entity.x == ENTITY_NO_SHADOW_FIRE || mc_Entity.x == ENTITY_EMMISIVE || mc_Entity.x == ENTITY_S_EMMISIVE) { isEmissiveEntity = 1.0; diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index 1636cd00..53abe719 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4e +value.ACERCADE.0=v.9.4f # Opciones ############################# diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index 1636cd00..53abe719 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4e +value.ACERCADE.0=v.9.4f # Opciones ############################# diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index 1636cd00..53abe719 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4e +value.ACERCADE.0=v.9.4f # Opciones ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 52c46e7c..7b2b47b9 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -15,7 +15,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.4e +value.ACERCADE.0=v.9.4f #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 194e5f80..51c76ddf 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -15,7 +15,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.4e +value.ACERCADE.0=v.9.4f #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index e9696ea7..abd78672 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -15,7 +15,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.4e +value.ACERCADE.0=v.9.4f #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 578a7268..bd802779 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -15,7 +15,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.4e +value.ACERCADE.0=v.9.4f #Options ############################# diff --git a/shaders/lib/water.glsl b/shaders/lib/water.glsl index e09733b6..d90fbdfc 100644 --- a/shaders/lib/water.glsl +++ b/shaders/lib/water.glsl @@ -17,7 +17,7 @@ vec3 fastRaymarch(vec3 direction, vec3 hitPoint, inout float infinite, float dit bool outOfEyeFlag = false; bool toFar = false; vec3 lastScreenMarchPos; - + int no_hidden_steps = 0; bool hiddens = false; @@ -174,7 +174,7 @@ vec3 get_normals(vec3 bump, vec3 fragpos) { vec4 reflection_calc(vec3 fragpos, vec3 normal, vec3 reflected, inout float infinite, float dither) { #if SSR_TYPE == 0 // Flipped image - #if defined DISTANT_HORIZONS + #if defined DISTANT_HORIZONS || defined VOXY vec3 pos = camera_to_screen(fragpos + reflected * 768.0); #else vec3 pos = camera_to_screen(fragpos + reflected * 76.0); @@ -229,7 +229,7 @@ vec3 water_shader( #ifndef NETHER #ifndef THE_END return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + - vec3(sun_reflection(reflect(normalize(fragpos), normal))) * lightColor * infinite * visibleSky; + vec3(sun_reflection(reflect(normalize(fragpos), normal))) * lightColor * infinite * visibleSky; #else return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); #endif From 23a094ccc2d282cdad2bab7ec45f07bbc7ac3d1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Fri, 1 May 2026 00:34:35 -0600 Subject: [PATCH 130/147] RC Old buffer names --- shaders/lang/en_US.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 501ab741..a5f5a110 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -15,7 +15,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.4e +value.ACERCADE.0=v.9.4f #Options ############################# From 2936abd09886ec989af105afe727a69fe11fdc26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Fri, 1 May 2026 00:39:09 -0600 Subject: [PATCH 131/147] =?UTF-8?q?Sincronizaci=C3=B3n=20de=20cambios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- shaders/common/solid_blocks_vertex.glsl | 2 +- shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 2 +- shaders/lang/es_ES.lang | 2 +- shaders/lang/es_MX.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index cf156191..176b5a05 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.4e +## Version: 9.4f ### This version works in Optifine and Iris 1.5.1 or higher. @@ -21,7 +21,7 @@ High performance Minecraft shader (Java). * FAST! ## Tested on: -* Minecraft 1.12.+ - 1.21.x +* Minecraft 1.12.+ - 26.1.x * Nvidia, AMD, Intel * Windows and Linux diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index c1e6ffd5..2ed95d11 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -150,7 +150,7 @@ void main() { #include "/src/fog_vertex.glsl" // Glowing blocks - #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND + #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND || defined GBUFFER_ENTITIES isEmissiveEntity = 0.0; if(mc_Entity.x == ENTITY_NO_SHADOW_FIRE || mc_Entity.x == ENTITY_EMMISIVE || mc_Entity.x == ENTITY_S_EMMISIVE) { isEmissiveEntity = 1.0; diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 501ab741..a5f5a110 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -15,7 +15,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.4e +value.ACERCADE.0=v.9.4f #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index 1636cd00..53abe719 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4e +value.ACERCADE.0=v.9.4f # Opciones ############################# diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index 1636cd00..53abe719 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4e +value.ACERCADE.0=v.9.4f # Opciones ############################# diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index 1636cd00..53abe719 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4e +value.ACERCADE.0=v.9.4f # Opciones ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 52c46e7c..7b2b47b9 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -15,7 +15,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.4e +value.ACERCADE.0=v.9.4f #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 194e5f80..51c76ddf 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -15,7 +15,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.4e +value.ACERCADE.0=v.9.4f #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index e9696ea7..abd78672 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -15,7 +15,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.4e +value.ACERCADE.0=v.9.4f #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 578a7268..bd802779 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -15,7 +15,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.4e +value.ACERCADE.0=v.9.4f #Options ############################# From 11092d6b45080ef4ebb5faed4724014a88b98e3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Fri, 1 May 2026 16:18:56 -0600 Subject: [PATCH 132/147] Bloom moved and fix --- shaders/common/composite1_fragment.glsl | 12 ++++++------ shaders/common/composite_fragment.glsl | 6 +++--- shaders/common/final_fragment.glsl | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/shaders/common/composite1_fragment.glsl b/shaders/common/composite1_fragment.glsl index 8ff309d6..0b6cd571 100644 --- a/shaders/common/composite1_fragment.glsl +++ b/shaders/common/composite1_fragment.glsl @@ -5,13 +5,13 @@ #endif #ifdef BLOOM - const bool gaux1MipmapEnabled = true; + const bool colortex0MipmapEnabled = true; #endif /* Uniforms */ uniform sampler2D colortex1; -uniform sampler2D gaux1; +uniform sampler2D colortex0; uniform float aspectRatioInverse; #ifdef DOF @@ -31,7 +31,9 @@ uniform float aspectRatioInverse; varying vec2 texcoord; -#include "/lib/bloom.glsl" +#ifdef BLOOM + #include "/lib/bloom.glsl" +#endif /* Utility functions */ @@ -61,10 +63,8 @@ void main() { #endif #ifdef BLOOM - vec3 bloom = mipmap_bloom(gaux1, texcoord, dither); + vec3 bloom = mipmap_bloom(colortex0, texcoord, dither); blockColor.rgb += bloom; - - // blockColor.rgb = texture2DLod(gaux1, texcoord, softLod).rgb; #endif blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index 5a27fe8d..a35a92ab 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -228,9 +228,9 @@ void main() { float bloom_luma = smoothstep(0.85, 1.0, luma(blockColor.rgb * exposure)) * 0.5; blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); - /* DRAWBUFFERS:146 */ - gl_FragData[0] = blockColor; - gl_FragData[1] = blockColor * bloom_luma; + /* DRAWBUFFERS:016 */ + gl_FragData[0] = blockColor * bloom_luma; + gl_FragData[1] = blockColor; gl_FragData[2] = vec4(exposure, 0.0, 0.0, 0.0); #else blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); diff --git a/shaders/common/final_fragment.glsl b/shaders/common/final_fragment.glsl index eff09993..5f00b906 100644 --- a/shaders/common/final_fragment.glsl +++ b/shaders/common/final_fragment.glsl @@ -6,7 +6,7 @@ noisetex - Water normals colortex0 - Unused colortex1 - Antialiasing auxiliar -colortex2 - Bluenoise +colortex2 - Bluenoise colortex3 - TAA Averages history gaux1 - Screen-Space-Reflection / Bloom auxiliar gaux2 - Clouds texture @@ -14,7 +14,7 @@ gaux3 - Exposure auxiliar gaux4 - Fog auxiliar const int noisetexFormat = RG8; -const int colortex0Format = R8; +const int colortex0Format = R11F_G11F_B10F; */ #ifdef DOF /* @@ -110,7 +110,7 @@ void main() { blockColor = fxaa311(blockColor, 5); #endif #endif - + // Exposure correction blockColor *= vec3(exposure); blockColor = custom_sigmoid(blockColor); From a424491830d0c3e6a66814f0d5e18e7ecd4ac059 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Fri, 1 May 2026 17:06:24 -0600 Subject: [PATCH 133/147] End Sky Fix for old versions --- shaders/common/skybasic_fragment.glsl | 2 +- shaders/common/skytextured_fragment.glsl | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/shaders/common/skybasic_fragment.glsl b/shaders/common/skybasic_fragment.glsl index 35059320..6ad224f7 100644 --- a/shaders/common/skybasic_fragment.glsl +++ b/shaders/common/skybasic_fragment.glsl @@ -88,7 +88,7 @@ void main() { #endif #endif - + #if MC_VERSION >= 11604 blockColor.rgba = vec4(texture2D(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY)).rgb, clamp(star_data.a * 2.0, 0.0, 1.0)); #endif diff --git a/shaders/common/skytextured_fragment.glsl b/shaders/common/skytextured_fragment.glsl index 4921b657..dc3536c6 100644 --- a/shaders/common/skytextured_fragment.glsl +++ b/shaders/common/skytextured_fragment.glsl @@ -28,8 +28,11 @@ varying float sky_luma_correction; // Flat void main() { #if defined THE_END - vec4 blockColor = vec4(ZENITH_DAY_COLOR, 0.0); - // vec3 background_color = ZENITH_DAY_COLOR; + #if MC_VERSION >= 12109 + vec4 blockColor = vec4(ZENITH_DAY_COLOR, 0.0); // End Flashes Fix + #else + vec4 blockColor = vec4(ZENITH_DAY_COLOR, 1.0); + #endif #elif defined NETHER // Unused vec4 background_color_full = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); vec3 background_color = background_color_full.rgb; @@ -37,7 +40,7 @@ void main() { #else // Toma el color puro del bloque vec4 blockColor = texture2D(tex, texcoord) * tintColor; - + blockColor.rgb *= sky_luma_correction; #endif From a95175749075507818c3a9409fe62e0c36326e5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Fri, 1 May 2026 17:12:11 -0600 Subject: [PATCH 134/147] Entities fix --- shaders/common/solid_blocks_vertex.glsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index 513e7506..11de7e2b 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -106,7 +106,7 @@ varying vec3 omniLight; varying float lumaPower; #endif -#if defined FOLIAGE_V || defined GBUFFER_TERRAIN || defined GBUFFER_HAND || (defined MATERIAL_GLOSS && !defined NETHER) +#if defined FOLIAGE_V || defined GBUFFER_TERRAIN || defined GBUFFER_HAND || defined MATERIAL_GLOSS attribute vec4 mc_Entity; #endif From ab3695a97d4c203c3ac2199e0c85f17b03beb57d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Fri, 1 May 2026 17:56:44 -0600 Subject: [PATCH 135/147] =?UTF-8?q?Actualizaci=C3=B3n=20de=20descripci?= =?UTF-8?q?=C3=B3n=20de=20buffers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ForDevelopers.EN.md | 4 ++-- ParaDesarrolladores.ES.md | 14 +++++++------- shaders/common/final_fragment.glsl | 6 +++--- shaders/textures/bluenoise_64.png | Bin 5525 -> 0 bytes shaders/textures/bluenoise_64.png.mcmeta | 7 ------- shaders/textures/bluenoise_RG_64.png | Bin 11372 -> 0 bytes shaders/textures/bluenoise_RG_64.png.mcmeta | 7 ------- 7 files changed, 12 insertions(+), 26 deletions(-) delete mode 100644 shaders/textures/bluenoise_64.png delete mode 100644 shaders/textures/bluenoise_64.png.mcmeta delete mode 100644 shaders/textures/bluenoise_RG_64.png delete mode 100644 shaders/textures/bluenoise_RG_64.png.mcmeta diff --git a/ForDevelopers.EN.md b/ForDevelopers.EN.md index 8def9b5d..e942c2c0 100644 --- a/ForDevelopers.EN.md +++ b/ForDevelopers.EN.md @@ -60,9 +60,9 @@ The shaders used for any other unspecified dimension are direct descendants of t Buffers are used and assigned in the following way: - noisetex: Stores the water normals in two channels, with the third component being calculated at runtime. (RG8) -- colortex0: Unused. (R8) +- colortex0: Bloom auxiliar. (R11F_G11F_B10F) - colortex1: Main buffer. When DOF is active, it is four channels, with the fourth channel storing the scene depth for antialiasing and to avoid sudden focus changes due to camera shake. (Without DOF: R11F_G11F_B10F, with DOF: RGBA16) -- colortex2: Bluenoise (not loaded). (R8) +- colortex2: Unused. (R8) - colortex3: Stores the history used for temporal sampling. When DOF is active, it is four channels, with the fourth channel storing the scene depth for antialiasing and to avoid sudden focus changes due to camera shake. (Without DOF: R11F_G11F_B10F, with DOF: RGBA16) - gaux1: Stores a version of the scene that will be used for screen-space reflections and refractions. After it is used for that, it is used as an auxiliary to store the scene's bloom. (R11F_G11F_B10F) - gaux2: Stores the cloud map. (R8) diff --git a/ParaDesarrolladores.ES.md b/ParaDesarrolladores.ES.md index dac67bf9..42e52b67 100644 --- a/ParaDesarrolladores.ES.md +++ b/ParaDesarrolladores.ES.md @@ -26,7 +26,7 @@ Los archivos de traducción. Le dan nombre a las opciones en las pantallas de co ### shaders/lib -Aquí se encuentran archivos con rutinas o declaraciones específicas que son empleadas en diversos lugares de las rutinas principales. +Aquí se encuentran archivos con rutinas o declaraciones específicas que son empleadas en diversos lugares de las rutinas principales. Los archivos que se encuentran en este directorio son tomados como "bibliotecas", y son llamados FUERA de la función principal del shader que los solicita (es decir, que no se insertan dentro de la función main del shader en cuestión). Usualmente porque declaran funciones o valores empleados por quien los solicita. @@ -61,10 +61,10 @@ Los shaders que se emplean para cualquier otra dimensión no especificada son de Los buffers son utilizados y asignados de la siguiente manera: - noisetex: Almacena las normales del agua en dos canales, el tercer componente es calculado al momento. (RG8) -- colortex0: Sin usar. (R8) +- colortex0: Auxixialr para bloom. (R11F_G11F_B10F) - colortex1: Buffer principal. Cuando está actvo el DOF, es de cuatro canales, donde el cuarto canal almacena la profundidad de la escena para ser también suavizada por el antialias, y así evitar problemas en cambios de enfoque súbitos por la sacudida de la cámara. (Sin DOF: R11F_G11F_B10F, con DOF: RGBA16) -- colortex2: Ruido azul (no cargado). (R8) -- colortex3: Aquí se almacena el historial empleado por el muestreo temporal. Cuando está actvo el DOF, es de cuatro canales, donde el cuarto canal almacena la profundidad de la escena para ser también suavizada por el antialias, y así evitar problemas en cambios de enfoque súbitos por la sacudida de la cámara. (Sin DOF: R11F_G11F_B10F, con DOF: RGBA16) +- colortex2: No usado. (R8) +- colortex3: Aquí se almacena el historial empleado por el muestreo temporal. Cuando está actvo el DOF, es de cuatro canales, donde el cuarto canal almacena la profundidad de la escena para ser también suavizada por el antialias, y así evitar problemas en cambios de enfoque súbitos por la sacudida de la cámara. (Sin DOF: R11F_G11F_B10F, con DOF: RGBA16) - gaux1: Aquí se almacena una versión de la escena que será empleada en los reflejos y refracciones de espacio de pantalla. Después de ser empleado para ello, se utiliza como auxiliar para almacenar el bloom de la escena. (R11F_G11F_B10F) - gaux2: Almacena el mapa para las nubes. (R8) - gaux3: Almacena el valor histórico de autoexposición de la escena. El valor de autoexposición se obtiene haciendo un promedio ponderado con el valor de este canal y el calculado en la escena actual, a fin de hacer una transición de autoexposición gradual en el tiempo. Sí, es un exceso usar un buffer entero para guardar un único valor flotante, pero es lo que hay. Sólo es usado si se usa el método de autoexposición predeterminado. (R16F) @@ -95,14 +95,14 @@ El resultado se escribirá en: 6. En Composite se calcula el nivel de autoexposure del cuadro actual, y se pondera con el valor histórico guardado en gaux3. Se calcula también la luz volumétrica, y se prepara el bloom. El auto exposure no toma en cuenta ninguno de estos últimos efectos ni los posteriores. "Preparar el bloom", significa guardar una versión de la escena actual con el nivel de exposición aplicado, en: gaux1. -Se guarda también el valor calculado de la autoexposición en: gaux3. +Se guarda también el valor calculado de la autoexposición en: gaux3. -7. En Composite1 se calcula el DOF, y se aplica el Bloom. Para aplicar el Bloom se lee un nivel de mipmap del buffer gaux3 calculado en el paso anterior. El resutado se escribe en: colortex1 +7. En Composite1 se calcula el DOF, y se aplica el Bloom. Para aplicar el Bloom se lee un nivel de mipmap del buffer gaux3 calculado en el paso anterior. El resultado se escribe en: colortex1 8. En Composite2 se calcula el AA y el motion blur. El resultado se escribe en: colortex0. Si el supermuestreo temporal está activo, se escribe el histórico en colortex3. 9. En Final, se aplican efectos de postprocesado, como aberración cromática, la autoexposición, el mapa de tonos, y ayudas para ceguera al color. -Para terminar, la imagen es enviada a la pantalla. +Para terminar, la imagen es enviada a la pantalla. ----- diff --git a/shaders/common/final_fragment.glsl b/shaders/common/final_fragment.glsl index 5f00b906..08a826e4 100644 --- a/shaders/common/final_fragment.glsl +++ b/shaders/common/final_fragment.glsl @@ -4,11 +4,11 @@ /* noisetex - Water normals -colortex0 - Unused +colortex0 - Bloom auxiliar colortex1 - Antialiasing auxiliar -colortex2 - Bluenoise +colortex2 - Unused colortex3 - TAA Averages history -gaux1 - Screen-Space-Reflection / Bloom auxiliar +gaux1 - Screen-Space-Reflection gaux2 - Clouds texture gaux3 - Exposure auxiliar gaux4 - Fog auxiliar diff --git a/shaders/textures/bluenoise_64.png b/shaders/textures/bluenoise_64.png deleted file mode 100644 index f26e93bcd8cfebe0aa5d0b303e247a6990772076..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5525 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 Ows%+L&PUr(CI1fv+UQ9D diff --git a/shaders/textures/bluenoise_RG_64.png.mcmeta b/shaders/textures/bluenoise_RG_64.png.mcmeta deleted file mode 100644 index 193e38ee..00000000 --- a/shaders/textures/bluenoise_RG_64.png.mcmeta +++ /dev/null @@ -1,7 +0,0 @@ -{ - "texture": - { - "blur": false, - "clamp": false - } -} From 6052b2128eb294ca642616ecb6dbf75a0fc74b38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Fri, 1 May 2026 18:01:18 -0600 Subject: [PATCH 136/147] Correct final_fragment.glsl --- shaders/common/final_fragment.glsl | 4 ---- 1 file changed, 4 deletions(-) diff --git a/shaders/common/final_fragment.glsl b/shaders/common/final_fragment.glsl index 5c66303d..08a826e4 100644 --- a/shaders/common/final_fragment.glsl +++ b/shaders/common/final_fragment.glsl @@ -6,11 +6,7 @@ noisetex - Water normals colortex0 - Bloom auxiliar colortex1 - Antialiasing auxiliar -<<<<<<< HEAD -colortex2 - Bluenoise -======= colortex2 - Unused ->>>>>>> develop colortex3 - TAA Averages history gaux1 - Screen-Space-Reflection gaux2 - Clouds texture From 6fb5e092ce9cc1e27903c247b6cf561c583a509e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 2 May 2026 13:29:58 -0600 Subject: [PATCH 137/147] =?UTF-8?q?Avance=20refracci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shaders/common/final_fragment.glsl | 4 +- .../common/solid_voxy_blocks_fragment.glsl | 4 +- shaders/common/voxy.json | 3 +- .../common/water_voxy_blocks_fragment.glsl | 2 + shaders/lib/water_voxy.glsl | 55 +++++++++---------- 5 files changed, 35 insertions(+), 33 deletions(-) diff --git a/shaders/common/final_fragment.glsl b/shaders/common/final_fragment.glsl index 08a826e4..5ef58a6b 100644 --- a/shaders/common/final_fragment.glsl +++ b/shaders/common/final_fragment.glsl @@ -112,8 +112,8 @@ void main() { #endif // Exposure correction - blockColor *= vec3(exposure); - blockColor = custom_sigmoid(blockColor); + // blockColor *= vec3(exposure); + // blockColor = custom_sigmoid(blockColor); // Color-grading ----- // DEVELOPER: If your post processing effect only involves the current pixel, diff --git a/shaders/common/solid_voxy_blocks_fragment.glsl b/shaders/common/solid_voxy_blocks_fragment.glsl index bcd05dee..d1f4c340 100644 --- a/shaders/common/solid_voxy_blocks_fragment.glsl +++ b/shaders/common/solid_voxy_blocks_fragment.glsl @@ -14,7 +14,7 @@ #endif layout(location = 0) out vec4 gbufferData0; -// layout(location = 1) out vec4 gbufferData1; +layout(location = 1) out vec4 gbufferData1; /* struct VoxyFragmentParameters { @@ -263,5 +263,5 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { // Real color gbufferData0 = blockColor; - // gbufferData1 = blockColor; + gbufferData1 = blockColor; } \ No newline at end of file diff --git a/shaders/common/voxy.json b/shaders/common/voxy.json index 1ae01704..ccebeb6a 100644 --- a/shaders/common/voxy.json +++ b/shaders/common/voxy.json @@ -4,7 +4,8 @@ "samplers": { "gaux1": "sampler2D", "gaux4": "sampler2D", - "noisetex": "sampler2D" + "noisetex": "sampler2D", + "vxDepthTexTrans": "sampler2D" }, "opaqueDrawBuffers": [1, 4], "translucentDrawBuffers": [1] diff --git a/shaders/common/water_voxy_blocks_fragment.glsl b/shaders/common/water_voxy_blocks_fragment.glsl index e204e66b..4d756837 100644 --- a/shaders/common/water_voxy_blocks_fragment.glsl +++ b/shaders/common/water_voxy_blocks_fragment.glsl @@ -276,6 +276,8 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { blockColor.rgb = 0.3 * waterTexture * realLight * tintColor.rgb; #endif + blockColor = vec4(refraction_voxy(fragposition, blockColor.rgb, waterNormalBase), 1.0); + #if WATER_TEXTURE == 1 waterTexture += 0.25; waterTexture *= waterTexture; diff --git a/shaders/lib/water_voxy.glsl b/shaders/lib/water_voxy.glsl index 8c634869..db97428e 100644 --- a/shaders/lib/water_voxy.glsl +++ b/shaders/lib/water_voxy.glsl @@ -27,31 +27,38 @@ vec3 normal_waves_voxy(vec3 pos) { return normalize(finalWave); } -// vec3 refraction(vec3 fragpos, vec3 color, vec3 refraction) { -// vec2 pos = gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY); +vec3 refraction_voxy(vec3 fragpos, vec3 color, vec3 refraction) { + vec2 pos = gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY); -// #if REFRACTION == 1 -// pos = pos + refraction.xy * (0.075 / (1.0 + length(fragpos) * 0.4)); -// #endif + #if REFRACTION == 1 + pos = pos + refraction.xy * (0.075 / (1.0 + length(fragpos) * 0.4)); + #endif + + const float vxNear = 1.0; + const float vxFar = vxRenderDistance; + // const float vxFar = 48000; // 16 * 3000 + + float water_absortion; + + if (isEyeInWater == 0) { -// float water_absortion; -// if (isEyeInWater == 0) { -// float water_distance = -// 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * gl_FragCoord.z - 1.0) * (dhFarPlane - dhNearPlane)); + float water_distance = + 2.0 * vxNear * vxFar / (vxFar + vxNear - (2.0 * gl_FragCoord.z - 1.0) * (vxFar - vxNear)); -// float earth_distance = texture2D(dhDepthTex1, pos.xy).r; -// earth_distance = -// 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * earth_distance - 1.0) * (dhFarPlane - dhNearPlane)); + float earth_depth = texture(vxDepthTexTrans, pos.xy).r; + float earth_distance = + 2.0 * vxNear * vxFar / (vxFar + vxNear - (2.0 * earth_depth - 1.0) * (vxFar - vxNear)); -// water_absortion = (earth_distance - water_distance) * 0.5; -// water_absortion *= water_absortion; -// water_absortion = (1.0 / -((water_absortion * WATER_ABSORPTION) + 1.125)) + 1.0; -// } else { -// water_absortion = 0.0; -// } + water_absortion = (earth_distance - water_distance) * 0.5; + water_absortion *= water_absortion; + water_absortion = (1.0 / -((water_absortion * WATER_ABSORPTION) + 1.125)) + 1.0; -// return mix(texture2D(gaux1, pos.xy).rgb, color, water_absortion); -// } + } else { + water_absortion = 0.0; + } + + return mix(texture(gaux1, pos.xy).rgb, color, water_absortion); +} vec3 get_normals_voxy(vec3 bump, vec3 fragpos, vec3 tangent, vec3 binormal, vec3 waterNormal) { float NdotE = abs(dot(waterNormal, normalize(fragpos))); @@ -67,7 +74,6 @@ vec3 get_normals_voxy(vec3 bump, vec3 fragpos, vec3 tangent, vec3 binormal, vec3 return normalize(bump * tbn_matrix); } -// vec4 reflection_calc_voxy(vec3 fragpos, vec3 normal, vec3 reflected, vec3 infinite_color, float dither) { vec4 reflection_calc_voxy(vec3 fragpos, vec3 normal, vec3 reflected, vec3 infinite_color) { vec3 pos = camera_to_screen_voxy(fragpos + reflected * 768.0); @@ -92,7 +98,6 @@ vec3 water_shader_voxy( vec3 reflected, float fresnel, float visibleSky, - // float dither, vec3 lightColor, vec2 lmcoord ) { @@ -101,19 +106,13 @@ vec3 water_shader_voxy( #if REFLECTION == 1 reflection = - // reflection_calc_voxy(fragpos, normal, reflected, sky_reflect, dither); reflection_calc_voxy(fragpos, normal, reflected, sky_reflect); - // vec4(1.0, 0.0, 0.0, 1.0); #endif - // DEBUG - return reflection.rgb; - reflection.rgb = mix( sky_reflect * visibleSky, reflection.rgb, reflection.a - // 1.0 ); #ifdef VANILLA_WATER From 120f45858c2ef829174916297f04661ca7a4353b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 2 May 2026 18:58:50 -0600 Subject: [PATCH 138/147] Partial working Voxy --- shaders/common/final_fragment.glsl | 4 ++-- .../common/water_voxy_blocks_fragment.glsl | 4 +++- shaders/lib/water_voxy.glsl | 5 ++-- shaders/src/finalcolor_dh.glsl | 24 ++++++++++--------- shaders/src/finalcolor_voxy.glsl | 24 ++++++++++--------- shaders/src/writebuffers.glsl | 2 +- 6 files changed, 34 insertions(+), 29 deletions(-) diff --git a/shaders/common/final_fragment.glsl b/shaders/common/final_fragment.glsl index 5ef58a6b..08a826e4 100644 --- a/shaders/common/final_fragment.glsl +++ b/shaders/common/final_fragment.glsl @@ -112,8 +112,8 @@ void main() { #endif // Exposure correction - // blockColor *= vec3(exposure); - // blockColor = custom_sigmoid(blockColor); + blockColor *= vec3(exposure); + blockColor = custom_sigmoid(blockColor); // Color-grading ----- // DEVELOPER: If your post processing effect only involves the current pixel, diff --git a/shaders/common/water_voxy_blocks_fragment.glsl b/shaders/common/water_voxy_blocks_fragment.glsl index 4d756837..9eaa6a94 100644 --- a/shaders/common/water_voxy_blocks_fragment.glsl +++ b/shaders/common/water_voxy_blocks_fragment.glsl @@ -204,7 +204,7 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { mix(fogDensityCoeff * 0.15, 0.5, rainStrength) ); #else - float frogAdjust = sqrt(clamp(fogFragCoord / float(vxRenderDistance * 16), 0.0, 1.0)); + float frogAdjust = sqrt(clamp(fogFragCoord / 48000.0, 0.0, 1.0)); #endif // ---- Original Fragment Logic @@ -284,6 +284,8 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { waterTexture *= waterTexture; fresnel = clamp(fresnel * (waterTexture), 0.0, 1.0); #endif + + blockColor.rgb = water_shader_voxy(fragposition, surfaceNormal, blockColor.rgb, skyColorReflect, normalizedReflectWaterVector, fresnel, visibleSky, directLightColor, lmcoord); #endif } else { // Otros translúcidos blockColor = parameters.sampledColour; diff --git a/shaders/lib/water_voxy.glsl b/shaders/lib/water_voxy.glsl index db97428e..0411b706 100644 --- a/shaders/lib/water_voxy.glsl +++ b/shaders/lib/water_voxy.glsl @@ -34,9 +34,8 @@ vec3 refraction_voxy(vec3 fragpos, vec3 color, vec3 refraction) { pos = pos + refraction.xy * (0.075 / (1.0 + length(fragpos) * 0.4)); #endif - const float vxNear = 1.0; - const float vxFar = vxRenderDistance; - // const float vxFar = 48000; // 16 * 3000 + const float vxNear = 8.0; // Must be 16.0, but 8.0 for fast non-linearity compensation in water-earth distance calculation + const float vxFar = 48000.0; // 16 * 3000 Documented farplane float water_absortion; diff --git a/shaders/src/finalcolor_dh.glsl b/shaders/src/finalcolor_dh.glsl index d3efd088..eb35e66b 100644 --- a/shaders/src/finalcolor_dh.glsl +++ b/shaders/src/finalcolor_dh.glsl @@ -1,15 +1,17 @@ -#if defined DH_WATER - if(isEyeInWater == 0) { +#ifdef FOG_ACTIVE // Fog active + #if defined DH_WATER + if(isEyeInWater == 0) { + vec3 fog_texture = texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), 0.0).rgb; + blockColor.rgb = mix(blockColor.rgb, fog_texture, frogAdjust); + } + #elif defined NETHER + #if NETHER_FOG_DISTANCE == 1 + blockColor.rgb = mix(fogColor * 0.1, vec3(1.0), 0.04); + #else + blockColor.rgb = mix(blockColor.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frogAdjust); + #endif + #else vec3 fog_texture = texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), 0.0).rgb; blockColor.rgb = mix(blockColor.rgb, fog_texture, frogAdjust); - } -#elif defined NETHER - #if NETHER_FOG_DISTANCE == 1 - blockColor.rgb = mix(fogColor * 0.1, vec3(1.0), 0.04); - #else - blockColor.rgb = mix(blockColor.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frogAdjust); #endif -#else - vec3 fog_texture = texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), 0.0).rgb; - blockColor.rgb = mix(blockColor.rgb, fog_texture, frogAdjust); #endif \ No newline at end of file diff --git a/shaders/src/finalcolor_voxy.glsl b/shaders/src/finalcolor_voxy.glsl index 76a2738e..cdfc78a3 100644 --- a/shaders/src/finalcolor_voxy.glsl +++ b/shaders/src/finalcolor_voxy.glsl @@ -1,15 +1,17 @@ -#if defined VOXY_WATER - if(isEyeInWater == 0) { +#ifdef FOG_ACTIVE // Fog active + #if defined VOXY_WATER + if(isEyeInWater == 0) { + vec3 fog_texture = textureLod(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), 0.0).rgb; + blockColor.rgb = mix(blockColor.rgb, fog_texture, frogAdjust); + } + #elif defined NETHER + #if NETHER_FOG_DISTANCE == 1 + blockColor.rgb = mix(fogColor * 0.1, vec3(1.0), 0.04); + #else + blockColor.rgb = mix(blockColor.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frogAdjust); + #endif + #else vec3 fog_texture = textureLod(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), 0.0).rgb; blockColor.rgb = mix(blockColor.rgb, fog_texture, frogAdjust); - } -#elif defined NETHER - #if NETHER_FOG_DISTANCE == 1 - blockColor.rgb = mix(fogColor * 0.1, vec3(1.0), 0.04); - #else - blockColor.rgb = mix(blockColor.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frogAdjust); #endif -#else - vec3 fog_texture = textureLod(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), 0.0).rgb; - blockColor.rgb = mix(blockColor.rgb, fog_texture, frogAdjust); #endif \ No newline at end of file diff --git a/shaders/src/writebuffers.glsl b/shaders/src/writebuffers.glsl index 1869d99f..02141351 100644 --- a/shaders/src/writebuffers.glsl +++ b/shaders/src/writebuffers.glsl @@ -7,8 +7,8 @@ gl_FragData[0] = blockColor; #else #if defined SET_FOG_COLOR - /* DRAWBUFFERS:17 */ blockColor = clamp(blockColor, vec3(0.0), vec3(50.0)); + /* DRAWBUFFERS:17 */ gl_FragData[0] = vec4(blockColor, 1.0); gl_FragData[1] = vec4(blockColor, 1.0); #elif MC_VERSION < 11604 && defined GBUFFER_SKYBASIC From 8876035c218146ab2132342a37789f2fbdea23a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sun, 3 May 2026 13:05:46 -0600 Subject: [PATCH 139/147] Avance cristal voxy --- .../common/water_voxy_blocks_fragment.glsl | 6 +- shaders/lib/water.glsl | 4 +- shaders/lib/water_voxy.glsl | 71 +++++++++++++++++-- 3 files changed, 72 insertions(+), 9 deletions(-) diff --git a/shaders/common/water_voxy_blocks_fragment.glsl b/shaders/common/water_voxy_blocks_fragment.glsl index 9eaa6a94..38214294 100644 --- a/shaders/common/water_voxy_blocks_fragment.glsl +++ b/shaders/common/water_voxy_blocks_fragment.glsl @@ -300,9 +300,9 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * .125); - // if(blockType > 1.5) { // Glass - // blockColor = cristal_shader(fragposition, waterNormal, blockColor, skyColorReflect, fresnel * fresnel, visibleSky, dither, directLightColor); - // } + if(customId == ENTITY_STAINED) { // Glass + blockColor = cristal_shader_voxy(fragposition, normal, blockColor, skyColorReflect, fresnel * fresnel, visibleSky, directLightColor, lmcoord); + } } diff --git a/shaders/lib/water.glsl b/shaders/lib/water.glsl index d90fbdfc..846b3bfe 100644 --- a/shaders/lib/water.glsl +++ b/shaders/lib/water.glsl @@ -245,12 +245,12 @@ vec3 water_shader( vec4 cristal_reflection_calc(vec3 fragpos, vec3 normal, inout float infinite, float dither) { #if SSR_TYPE == 0 - #if defined DISTANT_HORIZONS + #if defined DISTANT_HORIZONS || defined VOXY vec3 reflectedVector = reflect(normalize(fragpos), normal) * 768.0; #else vec3 reflectedVector = reflect(normalize(fragpos), normal) * 76.0; #endif - vec3 pos = camera_to_screen(fragpos + reflectedVector); + vec3 pos = camera_to_screen(fragpos + reflectedVector); #else vec3 reflectedVector = reflect(normalize(fragpos), normal); vec3 pos = fastRaymarch(reflectedVector, fragpos, infinite, dither); diff --git a/shaders/lib/water_voxy.glsl b/shaders/lib/water_voxy.glsl index 0411b706..f59cef7f 100644 --- a/shaders/lib/water_voxy.glsl +++ b/shaders/lib/water_voxy.glsl @@ -1,5 +1,5 @@ -/* MakeUp - water_dh.glsl -Water reflection and refraction related functions (dh). +/* MakeUp - water_voxy.glsl +Water reflection and refraction related functions (voxy). */ #if SUN_REFLECTION == 1 @@ -73,7 +73,7 @@ vec3 get_normals_voxy(vec3 bump, vec3 fragpos, vec3 tangent, vec3 binormal, vec3 return normalize(bump * tbn_matrix); } -vec4 reflection_calc_voxy(vec3 fragpos, vec3 normal, vec3 reflected, vec3 infinite_color) { +vec4 reflection_calc_voxy(vec3 fragpos, vec3 normal, vec3 reflected) { vec3 pos = camera_to_screen_voxy(fragpos + reflected * 768.0); float border = @@ -105,7 +105,7 @@ vec3 water_shader_voxy( #if REFLECTION == 1 reflection = - reflection_calc_voxy(fragpos, normal, reflected, sky_reflect); + reflection_calc_voxy(fragpos, normal, reflected); #endif reflection.rgb = mix( @@ -133,3 +133,66 @@ vec3 water_shader_voxy( return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); #endif } + +vec4 cristal_reflection_calc_voxy(vec3 fragpos, vec3 normal) { + vec3 reflectedVector = reflect(normalize(fragpos), normal) * 768.0; + vec3 pos = camera_to_screen_voxy(fragpos + reflectedVector); + + float border_x = max(-fourthPow(abs(2.0 * pos.x - 1.0)) + 1.0, 0.0); + float border_y = max(-fourthPow(abs(2.0 * pos.y - 1.0)) + 1.0, 0.0); + float border = min(border_x, border_y); + + return vec4(texture(gaux1, pos.xy, 0.0).rgb, border); +} + +vec4 cristal_shader_voxy( + vec3 fragpos, + vec3 normal, + vec4 color, + vec3 skyReflectionColor, + float fresnel, + float visibleSky, + vec3 lightColor, + vec2 lmcoord +) { + vec4 reflection = vec4(0.0); + float infinite = 0.0; + + #if REFLECTION == 1 + reflection = cristal_reflection_calc_voxy(fragpos, normal); + #endif + + skyReflectionColor = mix(color.rgb, skyReflectionColor, visibleSky * visibleSky); + + reflection.rgb = mix( + skyReflectionColor, + reflection.rgb, + reflection.a + ); + + color.rgb = mix(color.rgb, skyReflectionColor, fresnel); + color.rgb = mix(color.rgb, reflection.rgb, fresnel); + + color.a = mix(color.a, 1.0, fresnel * .9); + + #if SUN_REFLECTION == 1 + #ifndef NETHER + #ifndef THE_END + return color + vec4( + mix( + vec3(sun_reflection(reflect(normalize(fragpos), normal), lmcoord) * lightColor * infinite * visibleSky), + vec3(0.0), + reflection.a + ), + 0.0 + ); + #else + return color; + #endif + #else + return color; + #endif + #else + return color; + #endif +} From af9ab3d312b0f4f51215b1149445bea07bf0cf58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sun, 3 May 2026 16:09:13 -0600 Subject: [PATCH 140/147] Voxy sin "material gloss" --- shaders/common/solid_blocks_vertex.glsl | 4 +--- shaders/common/solid_voxy_blocks_fragment.glsl | 4 ++-- shaders/common/water_voxy_blocks_fragment.glsl | 12 ++++++------ 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index bdf7f7d7..adfb6454 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -110,9 +110,7 @@ varying vec3 omniLight; varying float lumaPower; #endif -#if defined FOLIAGE_V || defined GBUFFER_TERRAIN || defined GBUFFER_HAND || defined MATERIAL_GLOSS - attribute vec4 mc_Entity; -#endif +attribute vec4 mc_Entity; #if WAVING == 1 attribute vec2 mc_midTexCoord; diff --git a/shaders/common/solid_voxy_blocks_fragment.glsl b/shaders/common/solid_voxy_blocks_fragment.glsl index d1f4c340..cf211bf7 100644 --- a/shaders/common/solid_voxy_blocks_fragment.glsl +++ b/shaders/common/solid_voxy_blocks_fragment.glsl @@ -74,7 +74,7 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { FOG_NIGHT, dayMixerV, nightMixerV, - dayMomentV, + dayMomentV ) * FOG_ADJUST; #endif @@ -87,7 +87,7 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { vec2 illumination = parameters.lightMap; #endif - illumination.y = max(illumination.y - 0.065, 0.0) * 1.06951871657754; + illumination.y *= 1.06951871657754; float visibleSky = clamp(illumination.y, 0.0, 1.0); #if defined UNKNOWN_DIM diff --git a/shaders/common/water_voxy_blocks_fragment.glsl b/shaders/common/water_voxy_blocks_fragment.glsl index 38214294..a5256587 100644 --- a/shaders/common/water_voxy_blocks_fragment.glsl +++ b/shaders/common/water_voxy_blocks_fragment.glsl @@ -67,7 +67,7 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { FOG_NIGHT, dayMixerV, nightMixerV, - dayMomentV, + dayMomentV ) * FOG_ADJUST; #endif @@ -80,7 +80,7 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { vec2 illumination = lmcoord; #endif - illumination.y = max(illumination.y - 0.065, 0.0) * 1.06951871657754; + illumination.y *= 1.06951871657754; float visibleSky = clamp(illumination.y, 0.0, 1.0); #if defined UNKNOWN_DIM @@ -305,11 +305,11 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { } } - - // Temporal - // blockColor = parameters.sampledColour * parameters.tinting; - #include "/src/finalcolor_voxy.glsl" + if (blindness > .01) { + blockColor.rgb = vec3(0.0); + } + gbufferData0 = blockColor; } \ No newline at end of file From 61d1b0907caabc3afdc1f5b92e5040165bdd5c3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 4 May 2026 15:40:21 -0600 Subject: [PATCH 141/147] RC Version 9.5 --- shaders/common/solid_blocks_vertex.glsl | 15 -- .../common/solid_voxy_blocks_fragment.glsl | 154 ++++++------------ .../common/water_voxy_blocks_fragment.glsl | 96 +---------- shaders/lib/material_gloss_fragment_voxy.glsl | 28 ++++ shaders/src/voxy_position_light.glsl | 74 +++++++++ shaders/src/voxy_uniforms_replace.glsl | 18 ++ 6 files changed, 174 insertions(+), 211 deletions(-) create mode 100644 shaders/lib/material_gloss_fragment_voxy.glsl create mode 100644 shaders/src/voxy_position_light.glsl create mode 100644 shaders/src/voxy_uniforms_replace.glsl diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index adfb6454..f0794860 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -155,21 +155,6 @@ void main() { } #endif - // Flame entities - // #if defined GBUFFER_ENTITIES - // if (entityId == 10201) { - // isEmissiveEntity = 1.0; - // directLightStrength = 1.0; - // } - // #endif - - // Glowing entities - // #if defined GBUFFER_ENTITIES - // if (entityId == 10202) { - // isEmissiveEntity = 1.0; - // } - // #endif - #if defined SHADOW_CASTING && !defined NETHER #include "/src/shadow_src_vertex.glsl" #endif diff --git a/shaders/common/solid_voxy_blocks_fragment.glsl b/shaders/common/solid_voxy_blocks_fragment.glsl index cf211bf7..9d40f22c 100644 --- a/shaders/common/solid_voxy_blocks_fragment.glsl +++ b/shaders/common/solid_voxy_blocks_fragment.glsl @@ -13,6 +13,10 @@ #include "/lib/color_utils.glsl" #endif +#if defined MATERIAL_GLOSS && !defined NETHER + #include "/lib/material_gloss_fragment_voxy.glsl" +#endif + layout(location = 0) out vec4 gbufferData0; layout(location = 1) out vec4 gbufferData1; @@ -30,23 +34,10 @@ struct VoxyFragmentParameters { */ void voxy_emitFragment(VoxyFragmentParameters parameters) { - // "Uniforms" Voxy no recalcula en cada frame algunos uniforms - float hour_world = worldTime * 0.001; - float dayMomentV = hour_world * 0.04166666666666667; - - float moment_aux = dayMomentV - 0.25; - float moment_aux_2 = moment_aux * moment_aux; - float dayMixerV = clamp(-moment_aux_2 * 20.0 + 1.25, 0.0, 1.0); - - float moment_aux_3 = dayMomentV - 0.75; - float moment_aux_4 = moment_aux_3 * moment_aux_3; - float nightMixerV = clamp(-moment_aux_4 * 50.0 + 3.125, 0.0, 1.0); - - // Re-assign + // Includes - uint face = parameters.face; - uint customId = parameters.customId; - vec4 tintColor = parameters.tinting; + #include "/src/voxy_uniforms_replace.glsl" + #include "/src/hi_sky_voxy.glsl" // Banderas especiales @@ -59,85 +50,7 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { customId == ENTITY_SMALLENTS_NW ); - // Includes - - #include "/src/hi_sky_voxy.glsl" - - // -- Position Vertex - - #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - float fogDensityCoeff = FOG_DENSITY * FOG_ADJUST; - #else - float fogDensityCoeff = dayBlendFloatVoxy( - FOG_SUNSET, - FOG_DAY, - FOG_NIGHT, - dayMixerV, - nightMixerV, - dayMomentV - ) * FOG_ADJUST; - #endif - - // ---- Original Light Vertex Logic - - // Luz nativa (lmcoord.x: candela, lmcoord.y: cielo) ---- - #if defined THE_END || defined NETHER - vec2 illumination = vec2(parameters.lightMap.x, 1.0); - #else - vec2 illumination = parameters.lightMap; - #endif - - illumination.y *= 1.06951871657754; - float visibleSky = clamp(illumination.y, 0.0, 1.0); - - #if defined UNKNOWN_DIM - visibleSky = (visibleSky * 0.6) + 0.4; - #endif - - // Intensidad y color de luz de candelas - float candle_luma = illumination.x * sqrt(illumination.x); - vec3 candleColor = CANDLE_BASELIGHT * (candle_luma + sixthPow(illumination.x * 1.17)); - candleColor = clamp(candleColor, vec3(0.0), vec3(4.0)); - - // Atenuación por dirección de luz directa =================================== - #if defined THE_END || defined NETHER - vec3 astroVector = normalize(vxModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; - #else - vec3 astroVector = normalize(sunPosition); - #endif - - // vec3 normal = gl_NormalMatrix * gl_Normal; - vec3 normal = vec3(uint((face>>1)==2), uint((face>>1)==0), uint((face>>1)==1)) * (float(int(face)&1)*2-1); - normal = mat3(vxModelView) * normal; - float astroLightStrength; - - // Comprobar la longitud al cuadrado (dot product) es mucho más rápido que la longitud (sqrt). - if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals - normal = normalize(normal); - astroLightStrength = dot(normal, astroVector); - } else { - normal = vec3(0.0, 1.0, 0.0); - astroLightStrength = 1.0; - } - - #if defined THE_END || defined NETHER - float directLightStrength = astroLightStrength; - #else - float directLightStrength = mix(-astroLightStrength, astroLightStrength, dayNightMix); - #endif - - // Omni light intensity changes by angle - float omniStrength = ((directLightStrength + 1.0) * 0.25) + 0.75; - - // Calculamos color de luz directa - #if defined UNKNOWN_DIM - vec3 directLightColor = texture2D(lightmap, vec2(0.0, parameters.lightMap.y)).rgb; - #else - vec3 directLightColor = dayBlendVoxy(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR, dayMixerV, nightMixerV, dayMomentV); - #if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 - directLightColor += (endFlashIntensity * endFlashIntensity * 0.1); - #endif - #endif + #include "/src/voxy_position_light.glsl" float farDirectLightStrength = clamp(directLightStrength, 0.0, 1.0); if (isFoliageEntity) { // It's foliage, light is atenuated by angle @@ -228,6 +141,28 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { #endif #endif + #if defined MATERIAL_GLOSS && !defined NETHER + float lumaFactor = 1.0; + float lumaPower = 2.0; + float glossPower = 6.0; + float glossFactor = 1.05; + + if(customId == ENTITY_SAND) { // Sand-like block + lumaPower = 4.0; + } else if(customId == ENTITY_METAL) { // Metal-like block + lumaFactor = 1.35; + lumaPower = -1.0; // Metallic + glossPower = 100.0; + } else if(customId == ENTITY_FABRIC) { // Fabric-like blocks + glossPower = 3.0; + glossFactor = 0.1; + } + + vec4 viewPosition = vxProjInv * clipPos; + viewPosition /= viewPosition.w; + vec3 viewPositionNormalized = normalize(viewPosition.xyz); + #endif + // ---- Original Fragment Logic #if AA_TYPE > 0 @@ -236,25 +171,40 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { float dither = rDither(gl_FragCoord.xy); #endif - vec4 blockColor = tintColor; + vec4 blockColor = parameters.sampledColour * tintColor; - float block_luma = luma(tintColor.rgb); + float block_luma = luma(blockColor.rgb); vec3 finalCandleColor = candleColor; float shadowValue = abs((dayNightMix * 2.0) - 1.0); - vec3 realLight = omniLight + - (shadowValue * directLightColor * directLightStrength) * (1.0 - (rainStrength * 0.75)) + - finalCandleColor; + #if defined MATERIAL_GLOSS && !defined NETHER + block_luma *= lumaFactor; + + if(lumaPower < 0.0) { // Metallic + glossPower -= (block_luma * 73.334); + } else { + block_luma = pow(block_luma, lumaPower); + } + + float material_gloss_factor = materialGloss(reflect(viewPositionNormalized, normal), lmcoord, glossPower, normal) * glossFactor; + + float material = material_gloss_factor * block_luma; + vec3 realLight = omniLight + + (shadowValue * ((directLightColor * directLightStrength) + (directLightColor * material))) * (1.0 - (rainStrength * 0.75)) + + finalCandleColor; + #else + vec3 realLight = omniLight + + (shadowValue * directLightColor * directLightStrength) * (1.0 - (rainStrength * 0.75)) + + finalCandleColor; + #endif blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * 0.125); blockColor.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); - blockColor = parameters.sampledColour * blockColor; - #include "/src/finalcolor_voxy.glsl" if (blindness > .01) { diff --git a/shaders/common/water_voxy_blocks_fragment.glsl b/shaders/common/water_voxy_blocks_fragment.glsl index a5256587..39d81759 100644 --- a/shaders/common/water_voxy_blocks_fragment.glsl +++ b/shaders/common/water_voxy_blocks_fragment.glsl @@ -32,104 +32,12 @@ struct VoxyFragmentParameters { */ void voxy_emitFragment(VoxyFragmentParameters parameters) { - // "Uniforms" Voxy no recalcula en cada frame algujnos uniforms - float hour_world = worldTime * 0.001; - float dayMomentV = hour_world * 0.04166666666666667; - - float moment_aux = dayMomentV - 0.25; - float moment_aux_2 = moment_aux * moment_aux; - float dayMixerV = clamp(-moment_aux_2 * 20.0 + 1.25, 0.0, 1.0); - - float moment_aux_3 = dayMomentV - 0.75; - float moment_aux_4 = moment_aux_3 * moment_aux_3; - float nightMixerV = clamp(-moment_aux_4 * 50.0 + 3.125, 0.0, 1.0); - - // Re-assign - - uint face = parameters.face; - uint customId = parameters.customId; - vec4 tintColor = parameters.tinting; - vec2 lmcoord = parameters.lightMap; - // Includes - + #include "/src/voxy_uniforms_replace.glsl" #include "/src/hi_sky_voxy.glsl" #include "/src/low_sky_voxy.glsl" - // -- Position Vertex - - #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - float fogDensityCoeff = FOG_DENSITY * FOG_ADJUST; - #else - float fogDensityCoeff = dayBlendFloatVoxy( - FOG_SUNSET, - FOG_DAY, - FOG_NIGHT, - dayMixerV, - nightMixerV, - dayMomentV - ) * FOG_ADJUST; - #endif - - // ---- Original Light Vertex Logic - - // Luz nativa (lmcoord.x: candela, lmcoord.y: cielo) ---- - #if defined THE_END || defined NETHER - vec2 illumination = vec2(lmcoord.x, 1.0); - #else - vec2 illumination = lmcoord; - #endif - - illumination.y *= 1.06951871657754; - float visibleSky = clamp(illumination.y, 0.0, 1.0); - - #if defined UNKNOWN_DIM - visibleSky = (visibleSky * 0.6) + 0.4; - #endif - - // Intensidad y color de luz de candelas - float candle_luma = illumination.x * sqrt(illumination.x); - vec3 candleColor = CANDLE_BASELIGHT * (candle_luma + sixthPow(illumination.x * 1.17)); - candleColor = clamp(candleColor, vec3(0.0), vec3(4.0)); - - // Atenuación por dirección de luz directa =================================== - #if defined THE_END || defined NETHER - vec3 astroVector = normalize(vxModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; - #else - vec3 astroVector = normalize(sunPosition); - #endif - - vec3 normal = vec3(uint((face>>1)==2), uint((face>>1)==0), uint((face>>1)==1)) * (float(int(face)&1)*2-1); - normal = mat3(vxModelView) * normal; - float astroLightStrength; - - // Comprobar la longitud al cuadrado (dot product) es mucho más rápido que la longitud (sqrt). - if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals - normal = normalize(normal); - astroLightStrength = dot(normal, astroVector); - } else { - normal = vec3(0.0, 1.0, 0.0); - astroLightStrength = 1.0; - } - - #if defined THE_END || defined NETHER - float directLightStrength = astroLightStrength; - #else - float directLightStrength = mix(-astroLightStrength, astroLightStrength, dayNightMix); - #endif - - // Omni light intensity changes by angle - float omniStrength = ((directLightStrength + 1.0) * 0.25) + 0.75; - - // Calculamos color de luz directa - #if defined UNKNOWN_DIM - vec3 directLightColor = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; - #else - vec3 directLightColor = dayBlendVoxy(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR, dayMixerV, nightMixerV, dayMomentV); - #if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 - directLightColor += (endFlashIntensity * endFlashIntensity * 0.1); - #endif - #endif + #include "/src/voxy_position_light.glsl" directLightStrength = clamp(directLightStrength, 0.0, 1.0); diff --git a/shaders/lib/material_gloss_fragment_voxy.glsl b/shaders/lib/material_gloss_fragment_voxy.glsl new file mode 100644 index 00000000..f26dd6d6 --- /dev/null +++ b/shaders/lib/material_gloss_fragment_voxy.glsl @@ -0,0 +1,28 @@ +#if defined THE_END + float materialGloss(vec3 reflectedVector, vec2 lmcoordAlt, float glossPower, vec3 flatNormal) { + vec3 astroLightPos = (vxModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; + float astroAlignment = + max(dot(normalize(reflectedVector), normalize(astroLightPos)), 0.0) * step(0.0001, dot(astroLightPos, flatNormal)); + + return clamp( + mix(0.0, 1.0, pow(clamp(astroAlignment * 2.0 - 1.0, 0.0, 1.0), glossPower)), + 0.0, + 1.0 + ); + } +#else + float materialGloss(vec3 reflectedVector, vec2 lmcoordAlt, float glossPower, vec3 flatNormal) { + vec3 astroLightPos = mix(-sunPosition, sunPosition, dayNightMix); + float astroAlignment = + max(dot(normalize(reflectedVector), normalize(astroLightPos)), 0.0) * + step(0.0001, dot(astroLightPos, flatNormal)); + + return clamp( + mix(0.0, 1.0, pow(clamp(astroAlignment * 2.0 - 1.0, 0.0, 1.0), glossPower)) * + clamp(lmcoordAlt.y, 0.0, 1.0) * + (1.0 - rainStrength), + 0.0, + 1.0 + ) * abs(mix(1.0, -1.0, dayNightMix)); + } +#endif \ No newline at end of file diff --git a/shaders/src/voxy_position_light.glsl b/shaders/src/voxy_position_light.glsl new file mode 100644 index 00000000..0c2fcaeb --- /dev/null +++ b/shaders/src/voxy_position_light.glsl @@ -0,0 +1,74 @@ +// -- Position Vertex + + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + float fogDensityCoeff = FOG_DENSITY * FOG_ADJUST; + #else + float fogDensityCoeff = dayBlendFloatVoxy( + FOG_SUNSET, + FOG_DAY, + FOG_NIGHT, + dayMixerV, + nightMixerV, + dayMomentV + ) * FOG_ADJUST; + #endif + + // ---- Original Light Vertex Logic + + // Luz nativa (lmcoord.x: candela, lmcoord.y: cielo) ---- + #if defined THE_END || defined NETHER + vec2 illumination = vec2(lmcoord.x, 1.0); + #else + vec2 illumination = lmcoord; + #endif + + illumination.y *= 1.06951871657754; + float visibleSky = clamp(illumination.y, 0.0, 1.0); + + #if defined UNKNOWN_DIM + visibleSky = (visibleSky * 0.6) + 0.4; + #endif + + // Intensidad y color de luz de candelas + float candle_luma = illumination.x * sqrt(illumination.x); + vec3 candleColor = CANDLE_BASELIGHT * (candle_luma + sixthPow(illumination.x * 1.17)); + candleColor = clamp(candleColor, vec3(0.0), vec3(4.0)); + + // Atenuación por dirección de luz directa =================================== + #if defined THE_END || defined NETHER + vec3 astroVector = normalize(vxModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; + #else + vec3 astroVector = normalize(sunPosition); + #endif + + vec3 normal = vec3(uint((face>>1)==2), uint((face>>1)==0), uint((face>>1)==1)) * (float(int(face)&1)*2-1); + normal = mat3(vxModelView) * normal; + float astroLightStrength; + + // Comprobar la longitud al cuadrado (dot product) es mucho más rápido que la longitud (sqrt). + if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals + normal = normalize(normal); + astroLightStrength = dot(normal, astroVector); + } else { + normal = vec3(0.0, 1.0, 0.0); + astroLightStrength = 1.0; + } + + #if defined THE_END || defined NETHER + float directLightStrength = astroLightStrength; + #else + float directLightStrength = mix(-astroLightStrength, astroLightStrength, dayNightMix); + #endif + + // Omni light intensity changes by angle + float omniStrength = ((directLightStrength + 1.0) * 0.25) + 0.75; + + // Calculamos color de luz directa + #if defined UNKNOWN_DIM + vec3 directLightColor = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; + #else + vec3 directLightColor = dayBlendVoxy(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR, dayMixerV, nightMixerV, dayMomentV); + #if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 + directLightColor += (endFlashIntensity * endFlashIntensity * 0.1); + #endif + #endif \ No newline at end of file diff --git a/shaders/src/voxy_uniforms_replace.glsl b/shaders/src/voxy_uniforms_replace.glsl new file mode 100644 index 00000000..e7135811 --- /dev/null +++ b/shaders/src/voxy_uniforms_replace.glsl @@ -0,0 +1,18 @@ +// "Uniforms" Voxy no recalcula en cada frame algunos uniforms + float hour_world = worldTime * 0.001; + float dayMomentV = hour_world * 0.04166666666666667; + + float moment_aux = dayMomentV - 0.25; + float moment_aux_2 = moment_aux * moment_aux; + float dayMixerV = clamp(-moment_aux_2 * 20.0 + 1.25, 0.0, 1.0); + + float moment_aux_3 = dayMomentV - 0.75; + float moment_aux_4 = moment_aux_3 * moment_aux_3; + float nightMixerV = clamp(-moment_aux_4 * 50.0 + 3.125, 0.0, 1.0); + + // Re-assign + + uint face = parameters.face; + uint customId = parameters.customId; + vec4 tintColor = parameters.tinting; + vec2 lmcoord = parameters.lightMap; \ No newline at end of file From 92ee3596657907d388cab003f959f8f844e17af3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 4 May 2026 19:53:35 -0600 Subject: [PATCH 142/147] Fog fixes --- .../common/solid_voxy_blocks_fragment.glsl | 13 +++++---- shaders/common/voxy.json | 27 ++++++++++++++++++- shaders/lib/water_voxy.glsl | 2 +- shaders/src/finalcolor.glsl | 3 +++ shaders/world-1/voxy_opaque.glsl | 2 +- 5 files changed, 39 insertions(+), 8 deletions(-) diff --git a/shaders/common/solid_voxy_blocks_fragment.glsl b/shaders/common/solid_voxy_blocks_fragment.glsl index 9d40f22c..267e8172 100644 --- a/shaders/common/solid_voxy_blocks_fragment.glsl +++ b/shaders/common/solid_voxy_blocks_fragment.glsl @@ -101,11 +101,11 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { #endif #endif - if (customId == ENTITY_EMMISIVE) { - directLightStrength = 10.0; - } else if (customId == ENTITY_S_EMMISIVE) { - directLightStrength = 1.0; - } + // if (customId == ENTITY_EMMISIVE) { + // directLightStrength = 10.0; + // } else if (customId == ENTITY_S_EMMISIVE) { + // directLightStrength = 1.0; + // } // Fog Vertex @@ -176,6 +176,9 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { float block_luma = luma(blockColor.rgb); vec3 finalCandleColor = candleColor; + if (customId == ENTITY_EMMISIVE) { + finalCandleColor *= block_luma * 1.5; + } float shadowValue = abs((dayNightMix * 2.0) - 1.0); diff --git a/shaders/common/voxy.json b/shaders/common/voxy.json index ccebeb6a..9b7df942 100644 --- a/shaders/common/voxy.json +++ b/shaders/common/voxy.json @@ -1,6 +1,31 @@ { "version": 1, - "uniforms": ["worldTime", "sunPosition", "moonPosition", "dayNightMix", "rainStrength", "skyColor", "fogColor", "isEyeInWater", "eyeBrightnessSmooth", "vxViewProjInv", "vxProj", "vxProjInv", "vxModelViewInv", "vxModelView", "viewWidth", "viewHeight", "vxRenderDistance", "nightVision", "pixelSizeX", "pixelSizeY", "blindness", "frameTimeCounter", "cameraPosition"], + "uniforms": [ + "endFlashIntensity", + "worldTime", + "sunPosition", + "moonPosition", + "dayNightMix", + "rainStrength", + "skyColor", + "fogColor", + "isEyeInWater", + "eyeBrightnessSmooth", + "vxViewProjInv", + "vxProj", + "vxProjInv", + "vxModelViewInv", + "vxModelView", + "viewWidth", + "viewHeight", + "vxRenderDistance", + "nightVision", + "pixelSizeX", + "pixelSizeY", + "blindness", + "frameTimeCounter", + "cameraPosition" + ], "samplers": { "gaux1": "sampler2D", "gaux4": "sampler2D", diff --git a/shaders/lib/water_voxy.glsl b/shaders/lib/water_voxy.glsl index f59cef7f..5a65fd01 100644 --- a/shaders/lib/water_voxy.glsl +++ b/shaders/lib/water_voxy.glsl @@ -34,7 +34,7 @@ vec3 refraction_voxy(vec3 fragpos, vec3 color, vec3 refraction) { pos = pos + refraction.xy * (0.075 / (1.0 + length(fragpos) * 0.4)); #endif - const float vxNear = 8.0; // Must be 16.0, but 8.0 for fast non-linearity compensation in water-earth distance calculation + const float vxNear = 16.0; // Must be 16.0, but 8.0 for fast non-linearity compensation in water-earth distance calculation const float vxFar = 48000.0; // 16 * 3000 Documented farplane float water_absortion; diff --git a/shaders/src/finalcolor.glsl b/shaders/src/finalcolor.glsl index 32a29e82..a9df714c 100644 --- a/shaders/src/finalcolor.glsl +++ b/shaders/src/finalcolor.glsl @@ -21,10 +21,13 @@ #if defined GBUFFER_ENTITIES if(isEyeInWater == 0 && entityId != 10101 && FOG_ADJUST < 15.0) { // In the air blockColor.rgb = mix(blockColor.rgb, fog_texture, frogAdjust); + // blockColor.rgb = mix(blockColor.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frogAdjust); } #else if(isEyeInWater == 0) { // In the air blockColor.rgb = mix(blockColor.rgb, fog_texture, frogAdjust); + // DEBUG + // /blockColor.rgb = mix(blockColor.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frogAdjust); } #endif #endif diff --git a/shaders/world-1/voxy_opaque.glsl b/shaders/world-1/voxy_opaque.glsl index d1a5f08a..1e615974 100644 --- a/shaders/world-1/voxy_opaque.glsl +++ b/shaders/world-1/voxy_opaque.glsl @@ -1,4 +1,4 @@ -#define VOXY_WATER +#define VOXY_BLOCK #define NETHER #include "/common/solid_voxy_blocks_fragment.glsl" \ No newline at end of file From 53da9c6d43b1d6c7183274c23253411ac7810cad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Mon, 4 May 2026 22:17:35 -0600 Subject: [PATCH 143/147] Version 9.5 --- README.md | 2 +- shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 2 +- shaders/lang/es_ES.lang | 2 +- shaders/lang/es_MX.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- shaders/lib/water.glsl | 13 +++++++------ 10 files changed, 16 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 176b5a05..bfdc8073 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.4f +## Version: 9.5 ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index a5f5a110..1f3d4356 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -15,7 +15,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.4f +value.ACERCADE.0=v.9.5 #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index 53abe719..dcffc115 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4f +value.ACERCADE.0=v.9.5 # Opciones ############################# diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index 53abe719..dcffc115 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4f +value.ACERCADE.0=v.9.5 # Opciones ############################# diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index 53abe719..dcffc115 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.4f +value.ACERCADE.0=v.9.5 # Opciones ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 7b2b47b9..878966de 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -15,7 +15,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.4f +value.ACERCADE.0=v.9.5 #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 51c76ddf..6271b9d4 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -15,7 +15,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.4f +value.ACERCADE.0=v.9.5 #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index abd78672..46c4648f 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -15,7 +15,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.4f +value.ACERCADE.0=v.9.5 #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index bd802779..3bf10906 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -15,7 +15,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.4f +value.ACERCADE.0=v.9.5 #Options ############################# diff --git a/shaders/lib/water.glsl b/shaders/lib/water.glsl index 846b3bfe..ebde953e 100644 --- a/shaders/lib/water.glsl +++ b/shaders/lib/water.glsl @@ -2,6 +2,10 @@ Water reflection and refraction related functions. */ +float linearizeDepth(float depth) { + return gbufferProjection[3][2] / (gbufferProjection[2][2] + 2.0 * depth - 1.0); +} + vec3 fastRaymarch(vec3 direction, vec3 hitPoint, inout float infinite, float dither) { vec3 pathIncrement; vec3 currentMarchPoint = hitPoint; @@ -134,12 +138,9 @@ vec3 refraction(vec3 fragpos, vec3 color, vec3 refraction) { float water_absortion; if (isEyeInWater == 0) { - float water_distance = - 2.0 * near * far / (far + near - (2.0 * gl_FragCoord.z - 1.0) * (far - near)); - - float earth_distance = texture2D(depthtex1, pos.xy).r; - earth_distance = - 2.0 * near * far / (far + near - (2.0 * earth_distance - 1.0) * (far - near)); + float water_distance = linearizeDepth(gl_FragCoord.z); + float earth_depth = texture2D(depthtex1, pos.xy).r; + float earth_distance = linearizeDepth(earth_depth); #if defined DISTANT_HORIZONS float earth_distance_dh = texture2D(dhDepthTex1, pos.xy).r; From d124154f428572df2e3d8e935ac18f37be11703b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Tue, 5 May 2026 22:39:17 -0600 Subject: [PATCH 144/147] Comentando dithers no usados --- shaders/lib/dither.glsl | 164 ++++++++++++++++++++-------------------- 1 file changed, 80 insertions(+), 84 deletions(-) diff --git a/shaders/lib/dither.glsl b/shaders/lib/dither.glsl index cc7b949a..165421c1 100644 --- a/shaders/lib/dither.glsl +++ b/shaders/lib/dither.glsl @@ -51,66 +51,64 @@ float hash13(vec3 point) return fract((point.x + point.y) * point.z); } -vec2 hash22(vec2 point) -{ - vec3 p3 = fract(vec3(point.xyx) * vec3(.1031, .1030, .0973)); - p3 += dot(p3, p3.yzx + 33.33); - return fract((p3.xx + p3.yz) * p3.zy); -} +// vec2 hash22(vec2 point) +// { +// vec3 p3 = fract(vec3(point.xyx) * vec3(.1031, .1030, .0973)); +// p3 += dot(p3, p3.yzx + 33.33); +// return fract((p3.xx + p3.yz) * p3.zy); +// } float rDither(vec2 point) { return fract(dot(point, vec2(0.75487766624669276, 0.569840290998))); } -float eclecticRDither(vec2 point) { - vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); - float state = fract(dot(rPoint * rPoint, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.075; +// float eclecticRDither(vec2 point) { +// vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); +// float state = fract(dot(rPoint * rPoint, vec2(3571.0))); +// float p4 = fract(state * state * 7142.0) * 0.075; - return fract(dot(point, vec2(0.75487766624669276, 0.569840290998)) + p4); -} +// return fract(dot(point, vec2(0.75487766624669276, 0.569840290998)) + p4); +// } float dither13(vec2 point) { return fract(dot(point, vec2(0.3076923076923077, 0.5384615384615384))); } -float eclecticDither13(vec2 point) { - vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); - float state = fract(dot(rPoint * rPoint, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.075; +// float eclecticDither13(vec2 point) { +// vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); +// float state = fract(dot(rPoint * rPoint, vec2(3571.0))); +// float p4 = fract(state * state * 7142.0) * 0.075; - return fract(dot(point, vec2(0.3076923076923077, 0.5384615384615384)) + p4); -} +// return fract(dot(point, vec2(0.3076923076923077, 0.5384615384615384)) + p4); +// } float dither17(vec2 point) { return fract(dot(point, vec2(0.11764705882352941, 0.4117647058823529))); } -float eclecticDither17(vec2 point) { - vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); - float state = fract(dot(rPoint * rPoint, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; +// float eclecticDither17(vec2 point) { +// vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); +// float state = fract(dot(rPoint * rPoint, vec2(3571.0))); +// float p4 = fract(state * state * 7142.0) * 0.15; - return fract(p4 + dot(point, vec2(0.11764705882352941, 0.4117647058823529))); -} +// return fract(p4 + dot(point, vec2(0.11764705882352941, 0.4117647058823529))); +// } -float ditherGradNoise(vec2 point) { - return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), point))); -} +// float ditherGradNoise(vec2 point) { +// return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), point))); +// } -float eclecticDitherGradNoise(vec2 point) { - vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); - float state = fract(dot(rPoint * rPoint, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.075; +// float eclecticDitherGradNoise(vec2 point) { +// vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); +// float state = fract(dot(rPoint * rPoint, vec2(3571.0))); +// float p4 = fract(state * state * 7142.0) * 0.075; - return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), point)) + p4); -} +// return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), point)) + p4); +// } -#if !defined VOXY - float textureNoise64(vec2 point, sampler2D noise) { - return texture2DLod(noise, point * 0.015625, 0).r; - } -#endif +// float textureNoise64(vec2 point, sampler2D noise) { +// return texture2DLod(noise, point * 0.015625, 0).r; +// } float semiblue(vec2 point) { vec2 tile = floor(point * 0.25); @@ -137,76 +135,74 @@ float ditherMakeup(vec2 point) { // } -float shiftedHash12(vec2 point) -{ - point = 0.0002314814814814815 * point + vec2(0.25, 0.0); - float state = fract(dot(point * point, vec2(3571.0))); - return fract(ditherShift + (state * state * 7142.0)); -} +// float shiftedHash12(vec2 point) +// { +// point = 0.0002314814814814815 * point + vec2(0.25, 0.0); +// float state = fract(dot(point * point, vec2(3571.0))); +// return fract(ditherShift + (state * state * 7142.0)); +// } -float shiftedHash13(vec3 point) -{ - point = fract(point * .1031); - point += dot(point, point.zyx + 31.32); - return fract(ditherShift + ((point.x + point.y) * point.z)); -} +// float shiftedHash13(vec3 point) +// { +// point = fract(point * .1031); +// point += dot(point, point.zyx + 31.32); +// return fract(ditherShift + ((point.x + point.y) * point.z)); +// } float shiftedRDither(vec2 point) { return fract(ditherShift + dot(point, vec2(0.75487766624669276, 0.569840290998))); } -float shiftedEclecticRDither(vec2 point) { - vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); - float state = fract(dot(rPoint * rPoint, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.075; +// float shiftedEclecticRDither(vec2 point) { +// vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); +// float state = fract(dot(rPoint * rPoint, vec2(3571.0))); +// float p4 = fract(state * state * 7142.0) * 0.075; - return fract(dot(point, vec2(0.75487766624669276, 0.569840290998)) + ditherShift + p4); -} +// return fract(dot(point, vec2(0.75487766624669276, 0.569840290998)) + ditherShift + p4); +// } float shiftedDither13(vec2 point) { return fract(ditherShift + dot(point, vec2(0.3076923076923077, 0.5384615384615384))); } -float shiftedEclecticDither13(vec2 point) -{ - vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); - float state = fract(dot(rPoint * rPoint, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.075; +// float shiftedEclecticDither13(vec2 point) +// { +// vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); +// float state = fract(dot(rPoint * rPoint, vec2(3571.0))); +// float p4 = fract(state * state * 7142.0) * 0.075; - return fract(dot(point, vec2(0.3076923076923077, 0.5384615384615384)) + ditherShift + p4); -} +// return fract(dot(point, vec2(0.3076923076923077, 0.5384615384615384)) + ditherShift + p4); +// } float shiftedDither17(vec2 point) { return fract(ditherShift + dot(point, vec2(0.11764705882352941, 0.4117647058823529))); } -float shiftedEclecticDither17(vec2 point) { - vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); - float state = fract(dot(rPoint * rPoint, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; +// float shiftedEclecticDither17(vec2 point) { +// vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); +// float state = fract(dot(rPoint * rPoint, vec2(3571.0))); +// float p4 = fract(state * state * 7142.0) * 0.15; - return fract(ditherShift + p4 + dot(point, vec2(0.11764705882352941, 0.4117647058823529))); -} +// return fract(ditherShift + p4 + dot(point, vec2(0.11764705882352941, 0.4117647058823529))); +// } -float shiftedDitherGradNoise(vec2 point) { - return fract(ditherShift + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), point)))); -} +// float shiftedDitherGradNoise(vec2 point) { +// return fract(ditherShift + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), point)))); +// } -float shiftedEclecticDitherGradNoise(vec2 point) { - vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); - float state = fract(dot(rPoint * rPoint, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.075; +// float shiftedEclecticDitherGradNoise(vec2 point) { +// vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); +// float state = fract(dot(rPoint * rPoint, vec2(3571.0))); +// float p4 = fract(state * state * 7142.0) * 0.075; - return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), point)) + ditherShift + p4); -} +// return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), point)) + ditherShift + p4); +// } -#if !defined VOXY - float shiftedTextureNoise64(vec2 point, sampler2D noise) { - float dither = texture2DLod(noise, point * 0.015625, 0).r; - return fract(ditherShift + dither); - } -#endif +// float shiftedTextureNoise64(vec2 point, sampler2D noise) { +// float dither = texture2DLod(noise, point * 0.015625, 0).r; +// return fract(ditherShift + dither); +// } float shiftedSemiblue(vec2 point) { point = point + vec2(frameMod * 5.0, frameMod * 15.0); From f02388652830695a174fd33f1d9471e47fcd9085 Mon Sep 17 00:00:00 2001 From: KaBooMa Date: Wed, 6 May 2026 22:24:54 -0500 Subject: [PATCH 145/147] feat: compat for ars_nouveau and dynamic trees[arsnouveau,quark,terralith,densetrees,plus] --- shaders/block.properties | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/shaders/block.properties b/shaders/block.properties index 68f05529..6a8e9730 100644 --- a/shaders/block.properties +++ b/shaders/block.properties @@ -3,7 +3,7 @@ #if MC_VERSION >= 11300 # GRASS LIKE ENTITIES - block.10031 = minecraft:cherry_sapling minecraft:torchflower minecraft:short_grass minecraft:grass minecraft:fern minecraft:seagrass biomesoplenty:dune_grass biomesoplenty:dead_grass biomesoplenty:desert_grass biomesoplenty:sprout biomesoplenty:bush environmental:mycelium_sprouts upgrade_aquatic:blue_pickerelweed upgrade_aquatic:purple_pickerelweed byg:beach_grass byg:clover_patch byg:flower_patch byg:horseweed byg:leaf_pile byg:prairie_grass byg:reeds byg:short_beach_grass byg:short_grass byg:tall_prairie_grass byg:weed_grass byg:wilted_grass byg:winter_grass ecotones:clover ecotones:reeds ecotones:sandy_grass ecotones:short_grass terrestria:cattail terrestria:dead_grass terrestria:sakura_leaf_pile terrestria:tall_cattail wildworld:acacia_leaf_pile wildworld:birch_leaf_pile wildworld:dark_oak_leaf_pile wildworld:jungle_leaf_pile wildworld:oak_leaf_pile wildworld:spruce_leaf_pile biomesoplenty:bush minecraft:nether_sprouts minecraft:warped_roots minecraft:crimson_roots projectvibrantjourneys:beach_grass projectvibrantjourneys:short_grass minecraft:oak_sapling minecraft:spruce_sapling minecraft:birch_sapling minecraft:jungle_sapling minecraft:acacia_sapling minecraft:dark_oak_sapling minecraft:dead_bush minecraft:dandelion minecraft:golden_dandelion minecraft:poppy minecraft:blue_orchid minecraft:allium minecraft:azure_bluet minecraft:red_tulip minecraft:orange_tulip minecraft:white_tulip minecraft:pink_tulip minecraft:oxeye_daisy minecraft:cornflower minecraft:lily_of_the_valley minecraft:wither_rose minecraft:sweet_berry_bush biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom atmospheric:rosewood_sapling atmospheric:morado_sapling atmospheric:yucca_sapling atmospheric:kousa_sapling atmospheric:aspen_sapling atmospheric:grimwood_sapling atmospheric:warm_monkey_brush atmospheric:hot_monkey_brush atmospheric:scalding_monkey_brush atmospheric:yucca_flower atmospheric:gilia autumnity:red_maple_sapling autumnity:orange_maple_sapling autumnity:yellow_maple_sapling autumnity:maple_sapling autumnity:autumn_crocus earthmobsmod:buttercup environmental:willow_sapling environmental:cherry_sapling environmental:pink_wisteria_sapling environmental:blue_wisteria_sapling environmental:purple_wisteria_sapling environmental:white_wisteria_sapling farmersdelight:wild_cabbages farmersdelight:wild_onions farmersdelight:wild_tomatoes farmersdelight:wild_carrots farmersdelight:wild_potatoes farmersdelight:wild_beetroots neapolitan:small_banana_frond neapolitan:banana_frond neapolitan:large_banana_frond upgrade_aquatic:river_sapling upgrade_aquatic:beachgrass upgrade_aquatic:white_searocket upgrade_aquatic:pink_searocket environmental:cattail environmental:cartwheel environmental:bluebell environmental:violet environmental:dianthus environmental:red_lotus_flower environmental:white_lotus_flower environmental:yellow_hibiscus environmental:orange_hibiscus environmental:red_hibiscus environmental:pink_hibiscus environmental:magenta_hibiscus environmental:purple_hibiscus buzzier_bees:buttercup buzzier_bees:white_clover buzzier_bees:pink_clover neapolitan:strawberry_pips biomesoplenty:origin_sapling biomesoplenty:flowering_oak_sapling biomesoplenty:rainbow_birch_sapling biomesoplenty:yellow_autumn_sapling biomesoplenty:orange_autumn_sapling biomesoplenty:maple_sapling biomesoplenty:fir_sapling biomesoplenty:redwood_sapling biomesoplenty:white_cherry_sapling biomesoplenty:pink_cherry_sapling biomesoplenty:mahogany_sapling biomesoplenty:jacaranda_sapling biomesoplenty:palm_sapling biomesoplenty:willow_sapling biomesoplenty:dead_sapling biomesoplenty:magic_sapling biomesoplenty:umbran_sapling biomesoplenty:hellbark_sapling astralsorcery:glow_flower botania:white_mystical_flower botania:gray_mystical_flower botania:orange_mystical_flower botania:magenta_mystical_flower botania:light_blue_mystical_flower botania:light_gray_mystical_flower botania:yellow_mystical_flower botania:lime_mystical_flower botania:pink_mystical_flower botania:cyan_mystical_flower botania:purple_mystical_flower botania:blue_mystical_flower botania:brown_mystical_flower botania:green_mystical_flower botania:red_mystical_flower botania:black_mystical_flower botania:white_mushroom botania:orange_mushroom botania:magenta_mushroom botania:light_blue_mushroom botania:yellow_mushroom botania:lime_mushroom botania:pink_mushroom botania:gray_mushroom botania:light_gray_mushroom botania:cyan_mushroom botania:purple_mushroom botania:blue_mushroom botania:brown_mushroom botania:green_mushroom botania:red_mushroom botania:black_mushroom botania:hydroangeas botania:manastar botania:pure_daisy botania:endoflame botania:thermalily botania:rosa_arcana botania:munchdew botania:entropinnyum botania:kekimurus botania:gourmaryllis botania:narslimmus botania:spectrolus botania:dandelifeon botania:rafflowsia botania:shulk_me_not botania:bellethorn botania:bellethorn_chibi botania:bergamute botania:dreadthorn botania:heisei_dream botania:tigerseye botania:jaded_amaranthus botania:orechid botania:fallen_kanade botania:exoflame botania:agricarnation botania:agricarnation_chibi botania:hopperhock botania:hopperhock_chibi botania:tangleberrie botania:jiyuulia botania:rannuncarpus botania:rannuncarpus_chibi botania:hyacidus botania:pollidisiac botania:clayconia botania:clayconia_chibi botania:loonium botania:daffomill botania:vinculotus botania:spectranthemum botania:medumone botania:marimorphosis botania:marimorphosis_chibi botania:bubbell botania:bubbell_chibi botania:solegnolia botania:solegnolia_chibi botania:orechid_ignem terrestria:tiny_cactus pamhc2trees:apple_sapling pamhc2trees:avocado_sapling pamhc2trees:candlenut_sapling pamhc2trees:cherry_sapling pamhc2trees:chestnut_sapling pamhc2trees:gooseberry_sapling pamhc2trees:lemon_sapling pamhc2trees:nutmeg_sapling pamhc2trees:orange_sapling pamhc2trees:peach_sapling pamhc2trees:pear_sapling pamhc2trees:plum_sapling pamhc2trees:walnut_sapling pamhc2trees:spiderweb_sapling pamhc2trees:hazelnut_sapling pamhc2trees:pawpaw_sapling pamhc2trees:soursop_sapling pamhc2trees:almond_sapling pamhc2trees:apricot_sapling pamhc2trees:banana_sapling pamhc2trees:cashew_sapling pamhc2trees:cinnamon_sapling pamhc2trees:coconut_sapling pamhc2trees:date_sapling pamhc2trees:dragonfruit_sapling pamhc2trees:durian_sapling pamhc2trees:fig_sapling pamhc2trees:grapefruit_sapling pamhc2trees:lime_sapling pamhc2trees:mango_sapling pamhc2trees:olive_sapling pamhc2trees:papaya_sapling pamhc2trees:paperbark_sapling pamhc2trees:pecan_sapling pamhc2trees:peppercorn_sapling pamhc2trees:persimmon_sapling pamhc2trees:pistachio_sapling pamhc2trees:pomegranate_sapling pamhc2trees:starfruit_sapling pamhc2trees:vanillabean_sapling pamhc2trees:breadfruit_sapling pamhc2trees:guava_sapling pamhc2trees:jackfruit_sapling pamhc2trees:lychee_sapling pamhc2trees:passionfruit_sapling pamhc2trees:rambutan_sapling pamhc2trees:tamarind_sapling pamhc2trees:maple_sapling pamhc2trees:pinenut_sapling byg:purple_bulbis_anomaly byg:blue_bulbis_anomaly byg:embur_wart byg:cryptic_bramble biomesoplenty:glowshroom biomesoplenty:toadstool biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom biomesoplenty:mangrove_root biomesoplenty:reed biomesoplenty:sprout biomesoplenty:bush pamhc2crops:aridgarden pamhc2crops:frostgarden pamhc2crops:shadedgarden pamhc2crops:soggygarden pamhc2crops:tropicalgarden pamhc2crops:windygarden pamhc2crops:pamamaranthcrop pamhc2crops:pambarleycrop pamhc2crops:pambeancrop pamhc2crops:pamchickpeacrop pamhc2crops:pamcorncrop pamhc2crops:pamlentilcrop pamhc2crops:pammilletcrop pamhc2crops:pamoatcrop pamhc2crops:pamquinoacrop pamhc2crops:pamricecrop pamhc2crops:pamryecrop pamhc2crops:pamsoybeancrops pamhc2crops:pamcottoncrop pamhc2crops:pamflaxcrop pamhc2crops:pamkenafcrop pamhc2crops:pamjutecrop pamhc2crops:pamsisalcrop pamhc2crops:pamartichokecrop pamhc2crops:pamasparaguscrop pamhc2crops:pambellpeppercrop pamhc2crops:pambroccolicrop pamhc2crops:pambrusselsproutcrop pamhc2crops:pamcabbagecrop pamhc2crops:pamcauliflowercrop pamhc2crops:pamcelerycrop pamhc2crops:pamchilipeppercrop pamhc2crops:pamcucumbercrop pamhc2crops:pameggplantcrop pamhc2crops:pamkalecrops pamhc2crops:pamlettucecrop pamhc2crops:pamokracrop pamhc2crops:pampeascrop pamhc2crops:pamspinachcrop pamhc2crops:pamtomatillocrop pamhc2crops:pamtomatocrop pamhc2crops:pamwintersquashcrop pamhc2crops:pamzucchinicrop pamhc2crops:pamarrowrootcrop pamhc2crops:pamcassavacrop pamhc2crops:pamgarliccrop pamhc2crops:pamjicamacrop pamhc2crops:pamleekcrop pamhc2crops:pamkohlrabicrop pamhc2crops:pamonioncrop pamhc2crops:pamparsnipcrop pamhc2crops:pampeanutcrop pamhc2crops:pamradishcrop pamhc2crops:pamrhubarbcrop pamhc2crops:pamrutabagacrop pamhc2crops:pamscallioncrop pamhc2crops:pamsweetpotatocrop pamhc2crops:pamtarocrop pamhc2crops:pamturnipcrop pamhc2crops:pamwaterchestnutcrop pamhc2crops:pamblackberrycrop pamhc2crops:pamblueberrycrop pamhc2crops:pamcactusfruitcrop pamhc2crops:pamcandleberrycrop pamhc2crops:pamcantaloupecrop pamhc2crops:pamcranberrycrop pamhc2crops:pamelderberrycrop pamhc2crops:pamgrapecrop pamhc2crops:pamgreengrapecrop pamhc2crops:pamhuckleberrycrop pamhc2crops:pamjuniperberrycrop pamhc2crops:pamkiwicrop pamhc2crops:pammullberrycrop pamhc2crops:pampineapplecrop pamhc2crops:pamraspberrycrop pamhc2crops:pamstrawberrycrop pamhc2crops:pamcoffeebeancrop pamhc2crops:pamtealeafcrop pamhc2crops:pamagavecrop pamhc2crops:pamwhitemushroomcrop pamhc2crops:pamgingercrop pamhc2crops:pamsesamecrop pamhc2crops:pamspiceleafcrop pamhc2crops:pammustardcrop byg:lament_sprouts byg:synthian_fungus byg:blue_glowcane byg:pink_glowcane byg:purple_glowcane byg:red_glowcane byg:warped_bush byg:blue_glowshroom byg:purple_glowshroom byg:scorched_bush byg:soul_shroom byg:soul nat_shroom_spore_end byg:death_cap byg:weeping_roots byg:nether_bristle byg:synthian_sprout byg:synthian_roots byg:hanging_synthian_roots byg:embur_sprouts byg:embur_roots byg:ivis_roots byg:ivis_sprout byg:bulbis_sprouts byg:ether_bush byg:thereal_bellflower byg:nightshade_sprouts byg:nightshade_roots byg:oddity_bush byg:shulkren_fungus byg:vermillion_sculk_tendrils byg:vermillion_sculk_growth byg:green_mushroom byg:weeping_milkcap byg:wood_blewit byg:black_puff byg:crimson_berry_bush byg:blueberry_bush byg:nightshade_berry_bush byg:winter_succulent byg:allium_flower_bush byg:alpine_bellflower byg:amaranth byg:angelica byg:begonia byg:bistort byg:black_rose byg:blue_sage byg:california_poppy byg:crocus byg:cyan_amaranth byg:cyan_rose byg:cyan_tulip byg:daffodil byg:fairy_slipper byg:firecracker_flower_bush byg:green_tulip byg:guzmania byg:incan_lily byg:iris byg:kovan_flower byg:lazarus_bellflower byg:lolipop_flower byg:magenta_amaranth byg:magenta_tulip byg:orange_amaranth byg:orange_daisy byg:osiria_rose byg:peach_leather_flower byg:pink_allium byg:pink_allium_flower_bush byg:pink_anemone byg:pink_daffodil byg:pink_orchid byg:protea_flower byg:purple_amaranth byg:purple_orchid byg:purple_sage byg:purple_tulip byg:red_cornflower byg:red_orchid byg:richea byg:rose byg:snowdrops byg:silver_vase_flower byg:torch_ginger byg:violet_leather_flower byg:white_anemone byg:white_sage byg:white_cyclamen byg:winter_rose byg:winter_scilla byg:yellow_daffodil byg:yellow_tulip byg:horseweed byg:winter_cyclamen cutecore:cherry_leaf_litter cutecore:cherry_wood_sapling cutecore:wisteria_sapling cutecore:wisteria_leaf_litter cutecore:lemon_leaf_litter cutecore:lemon_sapling cutecore:hyacinth cutecore:lotus_flower cutecore:violets cutecore:pink_rose cutecore:white_rose cutecore:rose cutecore:forget_me_nots cutecore:pink_carnation cutecore:red_carnation cutecore:white_carnation forbidden_arcanus:yellow_orchid forbidden_arcanus:golden_orchid immersiveengineering:hemp:growth=bottom0 immersiveengineering:hemp:growth=bottom1 immersiveengineering:hemp:growth=bottom2 immersiveengineering:hemp:growth=bottom3 simplefarming:apple_sapling simplefarming:apricot_sapling simplefarming:banana_sapling simplefarming:cherry_sapling simplefarming:mango_sapling simplefarming:olive_sapling simplefarming:orange_sapling simplefarming:pear_sapling simplefarming:plum_sapling simplefarming:barley_crop simplefarming:cassava_crop simplefarming:corn_crop simplefarming:cotton_crop simplefarming:cross_crop simplefarming:cucumber_crop simplefarming:cumin_plant simplefarming:eggplant_crop simplefarming:ginger_crop simplefarming:honeydew_crop simplefarming:kenaf_crop simplefarming:lettuce_crop simplefarming:oat_crop simplefarming:onion_crop simplefarming:pea_crop simplefarming:peanut_crop simplefarming:pepper_crop simplefarming:quinoa_plant simplefarming:radish_crop simplefarming:rice_crop simplefarming:rye_crop simplefarming:scrop simplefarming:hcrop simplefarming:marshmallow_crop simplefarming:sunflower_plant simplefarming:sorghum_crop simplefarming:soybean_crop simplefarming:spinach_crop simplefarming:sweet_potato_crop simplefarming:tomato_crop simplefarming:turnip_crop simplefarming:wild_crop simplefarming:yam_crop simplefarming:zucchini_crop byg:aspen_sapling byg:baobab_sapling byg:blue_enchanted_sapling byg:green_enchanted_sapling byg:pink_cherry_sapling byg:white_cherry_sapling byg:cika_sapling byg:cypress_sapling byg:ebony_sapling byg:ether_sapling byg:fir_sapling byg:aspen_sapling byg:holly_berry_sapling byg:holly_sapling byg:jacaranda_sapling byg:flowering_jacaranda_sapling byg:indigo_jacaranda_sapling byg:indigo_flowering_jacaranda_sapling byg:lament_sapling byg:mahogany_sapling byg:mangrove_sapling byg:maple_sapling byg:red_maple_sapling byg:silver_maple_sapling byg:nightshade_sapling byg:flowering_nightshade_sapling byg:palm_sapling byg:palo_verde_sapling byg:flowering_palo_verde_sapling byg:pine_sapling byg:rainbow_eucalyptus_sapling byg:redwood_sapling byg:pine_sapling byg:skyris_sapling byg:green_apple_skyris_sapling byg:willow_sapling byg:witch_hazel_sapling byg:blooming_witch_hazel_sapling byg:zelkova_sapling byg:withering_oak_sapling byg:araucaria_sapling byg:blue_spruce_sapling byg:brown_birch_sapling byg:brown_oak_sapling byg:zelkova_sapling byg:brown_zelkova_sapling byg:joshua_sapling byg:ripe_joshua_sapling byg:orange_birch_sapling byg:orange_oak_sapling byg:orange_spruce_sapling byg:orchard_sapling byg:flowering_orchard_sapling byg:ripe_orchard_sapling byg:red_birch_sapling byg:red_oak_sapling byg:red_spruce_sapling byg:yellow_birch_sapling byg:yellow_spruce_sapling byg:green_mushroom occultism:otherworld_sapling_natural occultism:otherworld_sapling integrateddynamics:menril_sapling projectvibrantjourneys:glowcap projectvibrantjourneys:crimson_nettle projectvibrantjourneys:warped_nettle twilightforest:mayapple deeperdarker:echo_sapling create_dd:rubber_sapling vegandelight:wild_soybean minecraft:firefly_bush minecraft:bush minecraft:short_dry_grass minecraft:tall_dry_grass minecraft:cactus_flower tfc:plant/allium tfc:plant/anthurium tfc:plant/arrowhead tfc:plant/artist_conk natures_spirit:purple_heather natures_spirit:white_heather natures_spirit:red_heather + block.10031 = ars_nouveau:blue_archwood_sapling ars_nouveau:green_archwood_sapling ars_nouveau:potted_blue_archwood_sapling ars_nouveau:potted_green_archwood_sapling ars_nouveau:potted_purple_archwood_sapling ars_nouveau:potted_red_archwood_sapling ars_nouveau:purple_archwood_sapling ars_nouveau:red_archwood_sapling ars_nouveau:sourceberry_bush astralsorcery:glow_flower atmospheric:aspen_sapling atmospheric:gilia atmospheric:grimwood_sapling atmospheric:hot_monkey_brush atmospheric:kousa_sapling atmospheric:morado_sapling atmospheric:rosewood_sapling atmospheric:scalding_monkey_brush atmospheric:warm_monkey_brush atmospheric:yucca_flower atmospheric:yucca_sapling autumnity:autumn_crocus autumnity:maple_sapling autumnity:orange_maple_sapling autumnity:red_maple_sapling autumnity:yellow_maple_sapling biomesoplenty:burning_blossom biomesoplenty:bush biomesoplenty:dead_grass biomesoplenty:dead_sapling biomesoplenty:desert_grass biomesoplenty:dune_grass biomesoplenty:fir_sapling biomesoplenty:flowering_oak_sapling biomesoplenty:glowflower biomesoplenty:glowshroom biomesoplenty:hellbark_sapling biomesoplenty:jacaranda_sapling biomesoplenty:lavender biomesoplenty:magic_sapling biomesoplenty:mahogany_sapling biomesoplenty:mangrove_root biomesoplenty:maple_sapling biomesoplenty:orange_autumn_sapling biomesoplenty:orange_cosmos biomesoplenty:origin_sapling biomesoplenty:palm_sapling biomesoplenty:pink_cherry_sapling biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:rainbow_birch_sapling biomesoplenty:redwood_sapling biomesoplenty:reed biomesoplenty:rose biomesoplenty:sprout biomesoplenty:toadstool biomesoplenty:umbran_sapling biomesoplenty:violet biomesoplenty:white_cherry_sapling biomesoplenty:wildflower biomesoplenty:willow_sapling biomesoplenty:wilted_lily biomesoplenty:yellow_autumn_sapling botania:agricarnation botania:agricarnation_chibi botania:bellethorn botania:bellethorn_chibi botania:bergamute botania:black_mushroom botania:black_mystical_flower botania:blue_mushroom botania:blue_mystical_flower botania:brown_mushroom botania:brown_mystical_flower botania:bubbell botania:bubbell_chibi botania:clayconia botania:clayconia_chibi botania:cyan_mushroom botania:cyan_mystical_flower botania:daffomill botania:dandelifeon botania:dreadthorn botania:endoflame botania:entropinnyum botania:exoflame botania:fallen_kanade botania:gourmaryllis botania:gray_mushroom botania:gray_mystical_flower botania:green_mushroom botania:green_mystical_flower botania:heisei_dream botania:hopperhock botania:hopperhock_chibi botania:hyacidus botania:hydroangeas botania:jaded_amaranthus botania:jiyuulia botania:kekimurus botania:light_blue_mushroom botania:light_blue_mystical_flower botania:light_gray_mushroom botania:light_gray_mystical_flower botania:lime_mushroom botania:lime_mystical_flower botania:loonium botania:magenta_mushroom botania:magenta_mystical_flower botania:manastar botania:marimorphosis botania:marimorphosis_chibi botania:medumone botania:munchdew botania:narslimmus botania:orange_mushroom botania:orange_mystical_flower botania:orechid botania:orechid_ignem botania:pink_mushroom botania:pink_mystical_flower botania:pollidisiac botania:pure_daisy botania:purple_mushroom botania:purple_mystical_flower botania:rafflowsia botania:rannuncarpus botania:rannuncarpus_chibi botania:red_mushroom botania:red_mystical_flower botania:rosa_arcana botania:shulk_me_not botania:solegnolia botania:solegnolia_chibi botania:spectranthemum botania:spectrolus botania:tangleberrie botania:thermalily botania:tigerseye botania:vinculotus botania:white_mushroom botania:white_mystical_flower botania:yellow_mushroom botania:yellow_mystical_flower buzzier_bees:buttercup buzzier_bees:pink_clover buzzier_bees:white_clover byg:allium_flower_bush byg:alpine_bellflower byg:amaranth byg:angelica byg:araucaria_sapling byg:aspen_sapling byg:baobab_sapling byg:beach_grass byg:begonia byg:bistort byg:black_puff byg:black_rose byg:blooming_witch_hazel_sapling byg:blue_bulbis_anomaly byg:blue_enchanted_sapling byg:blue_glowcane byg:blue_glowshroom byg:blue_sage byg:blue_spruce_sapling byg:blueberry_bush byg:brown_birch_sapling byg:brown_oak_sapling byg:brown_zelkova_sapling byg:bulbis_sprouts byg:california_poppy byg:cika_sapling byg:clover_patch byg:crimson_berry_bush byg:crocus byg:cryptic_bramble byg:cyan_amaranth byg:cyan_rose byg:cyan_tulip byg:cypress_sapling byg:daffodil byg:death_cap byg:ebony_sapling byg:embur_roots byg:embur_sprouts byg:embur_wart byg:ether_bush byg:ether_sapling byg:fairy_slipper byg:fir_sapling byg:firecracker_flower_bush byg:flower_patch byg:flowering_jacaranda_sapling byg:flowering_nightshade_sapling byg:flowering_orchard_sapling byg:flowering_palo_verde_sapling byg:green_apple_skyris_sapling byg:green_enchanted_sapling byg:green_mushroom byg:green_tulip byg:guzmania byg:hanging_synthian_roots byg:holly_berry_sapling byg:holly_sapling byg:horseweed byg:incan_lily byg:indigo_flowering_jacaranda_sapling byg:indigo_jacaranda_sapling byg:iris byg:ivis_roots byg:ivis_sprout byg:jacaranda_sapling byg:joshua_sapling byg:kovan_flower byg:lament_sapling byg:lament_sprouts byg:lazarus_bellflower byg:leaf_pile byg:lolipop_flower byg:magenta_amaranth byg:magenta_tulip byg:mahogany_sapling byg:mangrove_sapling byg:maple_sapling byg:nether_bristle byg:nightshade_berry_bush byg:nightshade_roots byg:nightshade_sapling byg:nightshade_sprouts byg:oddity_bush byg:orange_amaranth byg:orange_birch_sapling byg:orange_daisy byg:orange_oak_sapling byg:orange_spruce_sapling byg:orchard_sapling byg:osiria_rose byg:palm_sapling byg:palo_verde_sapling byg:peach_leather_flower byg:pine_sapling byg:pink_allium byg:pink_allium_flower_bush byg:pink_anemone byg:pink_cherry_sapling byg:pink_daffodil byg:pink_glowcane byg:pink_orchid byg:prairie_grass byg:protea_flower byg:purple_amaranth byg:purple_bulbis_anomaly byg:purple_glowcane byg:purple_glowshroom byg:purple_orchid byg:purple_sage byg:purple_tulip byg:rainbow_eucalyptus_sapling byg:red_birch_sapling byg:red_cornflower byg:red_glowcane byg:red_maple_sapling byg:red_oak_sapling byg:red_orchid byg:red_spruce_sapling byg:redwood_sapling byg:reeds byg:richea byg:ripe_joshua_sapling byg:ripe_orchard_sapling byg:rose byg:scorched_bush byg:short_beach_grass byg:short_grass byg:shulkren_fungus byg:silver_maple_sapling byg:silver_vase_flower byg:skyris_sapling byg:snowdrops byg:soul byg:soul_shroom byg:synthian_fungus byg:synthian_roots byg:synthian_sprout byg:tall_prairie_grass byg:thereal_bellflower byg:torch_ginger byg:vermillion_sculk_growth byg:vermillion_sculk_tendrils byg:violet_leather_flower byg:warped_bush byg:weed_grass byg:weeping_milkcap byg:weeping_roots byg:white_anemone byg:white_cherry_sapling byg:white_cyclamen byg:white_sage byg:willow_sapling byg:wilted_grass byg:winter_cyclamen byg:winter_grass byg:winter_rose byg:winter_scilla byg:winter_succulent byg:witch_hazel_sapling byg:withering_oak_sapling byg:wood_blewit byg:yellow_birch_sapling byg:yellow_daffodil byg:yellow_spruce_sapling byg:yellow_tulip byg:zelkova_sapling create_dd:rubber_sapling cutecore:cherry_leaf_litter cutecore:cherry_wood_sapling cutecore:forget_me_nots cutecore:hyacinth cutecore:lemon_leaf_litter cutecore:lemon_sapling cutecore:lotus_flower cutecore:pink_carnation cutecore:pink_rose cutecore:red_carnation cutecore:rose cutecore:violets cutecore:white_carnation cutecore:white_rose cutecore:wisteria_leaf_litter cutecore:wisteria_sapling deeperdarker:echo_sapling dense_dynamictrees:dense_acacia_sapling dense_dynamictrees:dense_apple_oak_sapling dense_dynamictrees:dense_azalea_sapling dense_dynamictrees:dense_birch_sapling dense_dynamictrees:dense_cherry_sapling dense_dynamictrees:dense_cocoa_sapling dense_dynamictrees:dense_crimson_sapling dense_dynamictrees:dense_dark_oak_sapling dense_dynamictrees:dense_jungle_sapling dense_dynamictrees:dense_mangrove_sapling dense_dynamictrees:dense_oak_sapling dense_dynamictrees:dense_spruce_sapling dense_dynamictrees:dense_swamp_oak_sapling dense_dynamictrees:dense_tall_birch_sapling dense_dynamictrees:dense_warped_sapling dtarsnouveau:blue_archwood_sapling dtarsnouveau:green_archwood_sapling dtarsnouveau:purple_archwood_sapling dtarsnouveau:red_archwood_sapling dtarsnouveau:yellow_archwood_sapling dtquark:ancient_sapling dtquark:fiery_blossom_sapling dtquark:frosty_blossom_sapling dtquark:glow_shroom_sapling dtquark:serene_blossom_sapling dtquark:sunny_blossom_sapling dtquark:warm_blossom_sapling dtterralith:acacia_bush_leaves dtterralith:amethyst_sapling dtterralith:ancient_sapling dtterralith:azalea_bush_leaves dtterralith:birch_pine_sapling dtterralith:black_poplar_sapling dtterralith:blue_pine_sapling dtterralith:cedar_sapling dtterralith:cherry_bush_leaves dtterralith:dark_oak_sakura_bush_leaves dtterralith:dwarf_pine_sapling dtterralith:dwarf_spruce_sapling dtterralith:ebony_sapling dtterralith:giga_spruce_sapling dtterralith:jacaranda_sapling dtterralith:kapok_sapling dtterralith:larch_sapling dtterralith:large_swamp_oak_sapling dtterralith:lush_acacia_sapling dtterralith:maple_sapling dtterralith:mega_ancient_sapling dtterralith:mega_blue_pine_sapling dtterralith:mega_larch_sapling dtterralith:mega_mirage_sapling dtterralith:mega_oasis_sapling dtterralith:mega_orange_pine_sapling dtterralith:mega_red_pine_sapling dtterralith:mirage_sapling dtterralith:moonlight_pine_sapling dtterralith:moonlight_spruce_sapling dtterralith:oasis_sapling dtterralith:orange_pine_sapling dtterralith:poplar_sapling dtterralith:red_pine_sapling dtterralith:sakura_sapling dtterralith:silverleaf_poplar_sapling dtterralith:spruce_bush_leaves dtterralith:swamp_birch_sapling dynamictrees:acacia_sapling dynamictrees:apple_oak_sapling dynamictrees:azalea_sapling dynamictrees:birch_sapling dynamictrees:cherry_sapling dynamictrees:cocoa_sapling dynamictrees:crimson_sapling dynamictrees:dark_oak_sapling dynamictrees:jungle_sapling dynamictrees:mangrove_sapling dynamictrees:mega_crimson_sapling dynamictrees:mega_jungle_sapling dynamictrees:mega_spruce_sapling dynamictrees:mega_warped_sapling dynamictrees:oak_sapling dynamictrees:potted_sapling dynamictrees:spruce_sapling dynamictrees:swamp_oak_sapling dynamictrees:tall_birch_sapling dynamictrees:warped_sapling dynamictreesplus:brown_mushroom_sapling dynamictreesplus:pillar_cactus_sapling dynamictreesplus:pipe_cactus_sapling dynamictreesplus:red_mushroom_sapling dynamictreesplus:saguaro_cactus_sapling earthmobsmod:buttercup ecotones:clover ecotones:reeds ecotones:sandy_grass ecotones:short_grass environmental:blue_wisteria_sapling environmental:bluebell environmental:cartwheel environmental:cattail environmental:cherry_sapling environmental:dianthus environmental:magenta_hibiscus environmental:mycelium_sprouts environmental:orange_hibiscus environmental:pink_hibiscus environmental:pink_wisteria_sapling environmental:purple_hibiscus environmental:purple_wisteria_sapling environmental:red_hibiscus environmental:red_lotus_flower environmental:violet environmental:white_lotus_flower environmental:white_wisteria_sapling environmental:willow_sapling environmental:yellow_hibiscus farmersdelight:wild_beetroots farmersdelight:wild_cabbages farmersdelight:wild_carrots farmersdelight:wild_onions farmersdelight:wild_potatoes farmersdelight:wild_tomatoes forbidden_arcanus:golden_orchid forbidden_arcanus:yellow_orchid immersiveengineering:hemp:growth=bottom0 immersiveengineering:hemp:growth=bottom1 immersiveengineering:hemp:growth=bottom2 immersiveengineering:hemp:growth=bottom3 integrateddynamics:menril_sapling minecraft:acacia_sapling minecraft:allium minecraft:azure_bluet minecraft:birch_sapling minecraft:blue_orchid minecraft:bush minecraft:cactus_flower minecraft:cherry_sapling minecraft:cornflower minecraft:crimson_roots minecraft:dandelion minecraft:dark_oak_sapling minecraft:dead_bush minecraft:fern minecraft:firefly_bush minecraft:golden_dandelion minecraft:grass minecraft:jungle_sapling minecraft:lily_of_the_valley minecraft:nether_sprouts minecraft:oak_sapling minecraft:orange_tulip minecraft:oxeye_daisy minecraft:pink_tulip minecraft:poppy minecraft:red_tulip minecraft:seagrass minecraft:short_dry_grass minecraft:short_grass minecraft:spruce_sapling minecraft:sweet_berry_bush minecraft:tall_dry_grass minecraft:torchflower minecraft:warped_roots minecraft:white_tulip minecraft:wither_rose nat_shroom_spore_end natures_spirit:purple_heather natures_spirit:red_heather natures_spirit:white_heather neapolitan:banana_frond neapolitan:large_banana_frond neapolitan:small_banana_frond neapolitan:strawberry_pips occultism:otherworld_sapling occultism:otherworld_sapling_natural pamhc2crops:aridgarden pamhc2crops:frostgarden pamhc2crops:pamagavecrop pamhc2crops:pamamaranthcrop pamhc2crops:pamarrowrootcrop pamhc2crops:pamartichokecrop pamhc2crops:pamasparaguscrop pamhc2crops:pambarleycrop pamhc2crops:pambeancrop pamhc2crops:pambellpeppercrop pamhc2crops:pamblackberrycrop pamhc2crops:pamblueberrycrop pamhc2crops:pambroccolicrop pamhc2crops:pambrusselsproutcrop pamhc2crops:pamcabbagecrop pamhc2crops:pamcactusfruitcrop pamhc2crops:pamcandleberrycrop pamhc2crops:pamcantaloupecrop pamhc2crops:pamcassavacrop pamhc2crops:pamcauliflowercrop pamhc2crops:pamcelerycrop pamhc2crops:pamchickpeacrop pamhc2crops:pamchilipeppercrop pamhc2crops:pamcoffeebeancrop pamhc2crops:pamcorncrop pamhc2crops:pamcottoncrop pamhc2crops:pamcranberrycrop pamhc2crops:pamcucumbercrop pamhc2crops:pameggplantcrop pamhc2crops:pamelderberrycrop pamhc2crops:pamflaxcrop pamhc2crops:pamgarliccrop pamhc2crops:pamgingercrop pamhc2crops:pamgrapecrop pamhc2crops:pamgreengrapecrop pamhc2crops:pamhuckleberrycrop pamhc2crops:pamjicamacrop pamhc2crops:pamjuniperberrycrop pamhc2crops:pamjutecrop pamhc2crops:pamkalecrops pamhc2crops:pamkenafcrop pamhc2crops:pamkiwicrop pamhc2crops:pamkohlrabicrop pamhc2crops:pamleekcrop pamhc2crops:pamlentilcrop pamhc2crops:pamlettucecrop pamhc2crops:pammilletcrop pamhc2crops:pammullberrycrop pamhc2crops:pammustardcrop pamhc2crops:pamoatcrop pamhc2crops:pamokracrop pamhc2crops:pamonioncrop pamhc2crops:pamparsnipcrop pamhc2crops:pampeanutcrop pamhc2crops:pampeascrop pamhc2crops:pampineapplecrop pamhc2crops:pamquinoacrop pamhc2crops:pamradishcrop pamhc2crops:pamraspberrycrop pamhc2crops:pamrhubarbcrop pamhc2crops:pamricecrop pamhc2crops:pamrutabagacrop pamhc2crops:pamryecrop pamhc2crops:pamscallioncrop pamhc2crops:pamsesamecrop pamhc2crops:pamsisalcrop pamhc2crops:pamsoybeancrops pamhc2crops:pamspiceleafcrop pamhc2crops:pamspinachcrop pamhc2crops:pamstrawberrycrop pamhc2crops:pamsweetpotatocrop pamhc2crops:pamtarocrop pamhc2crops:pamtealeafcrop pamhc2crops:pamtomatillocrop pamhc2crops:pamtomatocrop pamhc2crops:pamturnipcrop pamhc2crops:pamwaterchestnutcrop pamhc2crops:pamwhitemushroomcrop pamhc2crops:pamwintersquashcrop pamhc2crops:pamzucchinicrop pamhc2crops:shadedgarden pamhc2crops:soggygarden pamhc2crops:tropicalgarden pamhc2crops:windygarden pamhc2trees:almond_sapling pamhc2trees:apple_sapling pamhc2trees:apricot_sapling pamhc2trees:avocado_sapling pamhc2trees:banana_sapling pamhc2trees:breadfruit_sapling pamhc2trees:candlenut_sapling pamhc2trees:cashew_sapling pamhc2trees:cherry_sapling pamhc2trees:chestnut_sapling pamhc2trees:cinnamon_sapling pamhc2trees:coconut_sapling pamhc2trees:date_sapling pamhc2trees:dragonfruit_sapling pamhc2trees:durian_sapling pamhc2trees:fig_sapling pamhc2trees:gooseberry_sapling pamhc2trees:grapefruit_sapling pamhc2trees:guava_sapling pamhc2trees:hazelnut_sapling pamhc2trees:jackfruit_sapling pamhc2trees:lemon_sapling pamhc2trees:lime_sapling pamhc2trees:lychee_sapling pamhc2trees:mango_sapling pamhc2trees:maple_sapling pamhc2trees:nutmeg_sapling pamhc2trees:olive_sapling pamhc2trees:orange_sapling pamhc2trees:papaya_sapling pamhc2trees:paperbark_sapling pamhc2trees:passionfruit_sapling pamhc2trees:pawpaw_sapling pamhc2trees:peach_sapling pamhc2trees:pear_sapling pamhc2trees:pecan_sapling pamhc2trees:peppercorn_sapling pamhc2trees:persimmon_sapling pamhc2trees:pinenut_sapling pamhc2trees:pistachio_sapling pamhc2trees:plum_sapling pamhc2trees:pomegranate_sapling pamhc2trees:rambutan_sapling pamhc2trees:soursop_sapling pamhc2trees:spiderweb_sapling pamhc2trees:starfruit_sapling pamhc2trees:tamarind_sapling pamhc2trees:vanillabean_sapling pamhc2trees:walnut_sapling projectvibrantjourneys:beach_grass projectvibrantjourneys:crimson_nettle projectvibrantjourneys:glowcap projectvibrantjourneys:short_grass projectvibrantjourneys:warped_nettle simplefarming:apple_sapling simplefarming:apricot_sapling simplefarming:banana_sapling simplefarming:barley_crop simplefarming:cassava_crop simplefarming:cherry_sapling simplefarming:corn_crop simplefarming:cotton_crop simplefarming:cross_crop simplefarming:cucumber_crop simplefarming:cumin_plant simplefarming:eggplant_crop simplefarming:ginger_crop simplefarming:hcrop simplefarming:honeydew_crop simplefarming:kenaf_crop simplefarming:lettuce_crop simplefarming:mango_sapling simplefarming:marshmallow_crop simplefarming:oat_crop simplefarming:olive_sapling simplefarming:onion_crop simplefarming:orange_sapling simplefarming:pea_crop simplefarming:peanut_crop simplefarming:pear_sapling simplefarming:pepper_crop simplefarming:plum_sapling simplefarming:quinoa_plant simplefarming:radish_crop simplefarming:rice_crop simplefarming:rye_crop simplefarming:scrop simplefarming:sorghum_crop simplefarming:soybean_crop simplefarming:spinach_crop simplefarming:sunflower_plant simplefarming:sweet_potato_crop simplefarming:tomato_crop simplefarming:turnip_crop simplefarming:wild_crop simplefarming:yam_crop simplefarming:zucchini_crop terrestria:cattail terrestria:dead_grass terrestria:sakura_leaf_pile terrestria:tall_cattail terrestria:tiny_cactus tfc:plant/allium tfc:plant/anthurium tfc:plant/arrowhead tfc:plant/artist_conk twilightforest:mayapple upgrade_aquatic:beachgrass upgrade_aquatic:blue_pickerelweed upgrade_aquatic:pink_searocket upgrade_aquatic:purple_pickerelweed upgrade_aquatic:river_sapling upgrade_aquatic:white_searocket vegandelight:wild_soybean wildworld:acacia_leaf_pile wildworld:birch_leaf_pile wildworld:dark_oak_leaf_pile wildworld:jungle_leaf_pile wildworld:oak_leaf_pile wildworld:spruce_leaf_pile # CROPS LIKE ENTITIES block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots farmersdelight:cabbages farmersdelight:budding_tomatoes farmersdelight:onions vegandelight:soybean_crop tfc:crop/carrot tfc:crop/tomato farmersrespite:small_tea_bush @@ -15,7 +15,9 @@ block.10176 = minecraft:pitcher_plant:half=upper minecraft:sunflower:half=upper minecraft:lilac:half=upper minecraft:tall_grass:half=upper minecraft:large_fern:half=upper minecraft:rose_bush:half=upper minecraft:peony:half=upper minecraft:tall_seagrass:half=upper atmospheric:water_hyacinth:half=upper atmospheric:tall_yucca_flower:half=upper environmental:tall_cattail:half=upper environmental:pink_delphinium:half=upper environmental:blue_delphinium:half=upper environmental:purple_delphinium:half=upper environmental:white_delphinium:half=upper environmental:bird_of_paradise:half=upper environmental:giant_tall_grass:half=upper farmersdelight:wild_rice:half=upper upgrade_aquatic:flowering_rush:half=upper upgrade_aquatic:tall_beachgrass:half=upper upgrade_aquatic:tall_blue_pickerelweed:half=upper upgrade_aquatic:tall_purple_pickerelweed:half=upper biomesoplenty:barley:half=upper biomesoplenty:goldenrod:half=upper biomesoplenty:blue_hydrangea:half=upper biomesoplenty:watergrass:half=upper botania:white_double_flower:half=upper botania:orange_double_flower:half=upper botania:magenta_double_flower:half=upper botania:light_blue_double_flower:half=upper botania:yellow_double_flower:half=upper botania:lime_double_flower:half=upper botania:pink_double_flower:half=upper botania:gray_double_flower:half=upper botania:light_gray_double_flower:half=upper botania:cyan_double_flower:half=upper botania:purple_double_flower:half=upper botania:blue_double_flower:half=upper botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=upper biomesoplenty:reed:half=upper biomesoplenty:cattail:half=upper byg:tall_crimson_roots:half=upper byg:tall_ether_grass:half=upper byg:reeds:half=upper byg:tall_prairie_grass:half=upper byg:tall_allium:half=upper byg:azalea:half=upper byg:tall_pink_allium:half=upper moreflowerbushes:purple_hibiscus:half=upper moreflowerbushes:mountain_laurel:half=upper moreflowerbushes:larkspur:half=upper moreflowerbushes:golden_shower:half=upper moreflowerbushes:fuchsia:half=upper moreflowerbushes:butterfly_weed:half=upper moreflowerbushes:blue_sage:half=upper moreflowerbushes:blue_hortensia:half=upper byg:japanese_orchid:half=upper byg:delphinium:half=upper byg:foxglove:half=upper cutecore:pink_rosebush:half=upper cutecore:white_rosebush:half=upper cutecore:pink_hydrangeas:half=upper cutecore:blue_hydrangeas:half=upper cutecore:purple_hydrangeas:half=upper farmersdelight:rice_panicles create_bic_bit:sunflowerstem:half=upper tfc:plant/badderlocks:half=upper # LEAVES - block.10018 = minecraft:cherry_leaves minecraft:oak_leaves minecraft:spruce_leaves minecraft:birch_leaves minecraft:jungle_leaves minecraft:acacia_leaves minecraft:dark_oak_leaves minecraft:pale_oak_leaves minecraft:azalea_leaves minecraft:azalea_leaves_flowers minecraft:flowering_azalea_leaves minecraft:mangrove_leaves biomesoplenty:origin_leaves biomesoplenty:flowering_oak_leaves biomesoplenty:rainbow_birch_leaves biomesoplenty:yellow_autumn_leaves biomesoplenty:orange_autumn_leaves biomesoplenty:maple_leaves biomesoplenty:fir_leaves biomesoplenty:redwood_leaves biomesoplenty:mahogany_leaves biomesoplenty:palm_leaves biomesoplenty:willow_leaves biomesoplenty:dead_leaves biomesoplenty:magic_leaves biomesoplenty:umbran_leaves biomesoplenty:hellbark_leaves biomesoplenty:pink_cherry_leaves biomesoplenty:white_cherry_leaves biomesoplenty:jacaranda_leaves quark:blue_blossom_leaves quark:lavender_blossom_leaves quark:orange_blossom_leaves quark:pink_blossom_leaves quark:yellow_blossom_leaves atmospheric:rosewood_leaves atmospheric:morado_leaves atmospheric:flowering_morado_leaves atmospheric:yucca_leaves atmospheric:kousa_leaves atmospheric:aspen_leaves atmospheric:grimwood_leaves autumnity:red_maple_leaves autumnity:orange_maple_leaves autumnity:yellow_maple_leaves autumnity:maple_leaves environmental:willow_leaves environmental:cherry_leaves environmental:pink_wisteria_leaves environmental:blue_wisteria_leaves environmental:purple_wisteria_leaves environmental:white_wisteria_leaves environmental:pink_hanging_wisteria_leaves environmental:blue_hanging_wisteria_leaves environmental:purple_hanging_wisteria_leaves environmental:white_hanging_wisteria_leaves environmental:hanging_willow_leaves upgrade_aquatic:river_leaves byg:aspen_leaves byg:araucaria_leaves byg:baobab_leaves byg:blooming_witch_hazel_leaves byg:blue_enchanted_leaves byg:blue_spruce_leaves byg:brown_birch_leaves byg:brown_oak_leaves byg:brown_zelkova_leaves byg:cika_leaves byg:cypress_leaves byg:ebony_leaves byg:fir_leaves byg:flowering_orchard_leaves byg:flowering_nightshade_leaves byg:flowering_palo_verde_leaves byg:green_apple_skyris_leaves byg:green_enchanted_leaves byg:holly_berry_leaves byg:holly_leaves byg:indigo_jacaranda_leaves byg:jacaranda_leaves byg:joshua_leaves byg:mahogany_leaves byg:mangrove_leaves byg:maple_leaves byg:orange_birch_leaves byg:orange_oak_leaves byg:orange_spruce_leaves byg:orchard_leaves byg:palo_verde_leaves byg:pine_leaves byg:pink_cherry_leaves byg:rainbow_eucalyptus_leaves byg:red_birch_leaves byg:red_maple_leaves byg:red_oak_leaves byg:red_spruce_leaves byg:redwood_leaves byg:ripe_joshua_leaves byg:ripe_orchard_leaves byg:silver_maple_leaves byg:skyris_leaves byg:white_cherry_leaves byg:willow_leaves byg:witch_hazel_leaves byg:yellow_birch_leaves byg:yellow_spruce_leaves byg:zelkova_leaves ecotones:hazel_leaves sakurarosea:alt_sakura_leaves sakurarosea:sakura_leaves sakurarosea:white_sakura_leaves terrestria:cypress_leaves terrestria:dark_japanese_maple_leaves terrestria:hemlock_leaves terrestria:japanese_maple_leaves terrestria:japanese_maple_shrub_leaves terrestria:jungle_palm_leaves terrestria:rainbow_eucalyptus_leaves terrestria:redwood_leaves terrestria:rubber_leaves terrestria:sakura_leaves terrestria:willow_leaves terrestria:yucca_palm_leaves traverse:brown_autumnal_leaves traverse:fir_leaves traverse:orange_autumnal_leaves traverse:red_autumnal_leaves traverse:yellow_autumnal_leaves vanillaenhanced:redwood_leaves wild_explorer:autumn_oak_leaves wild_explorer:autumn_birch_leaves wild_explorer:pink_cherry_oak_leaves wild_explorer:white_cherry_oak_leaves wild_explorer:palm_leaves cutecore:cherry_wood_leaves cutecore:cherry_wood_leaves_fruit cutecore:wisteria_leaves cutecore:lemon_leaves cutecore:lemon_leaves_fruiting dynamictrees:jungle_leaves dynamictrees:oak_leaves dynamictrees:spruce_leaves dynamictrees:dark_oak_leaves dynamictrees:acacia_leaves dynamictrees:birch_leaves simplefarming:apple_leaves simplefarming:apricot_leaves simplefarming:banana_leaves simplefarming:cherry_leaves simplefarming:mango_leaves simplefarming:olive_leaves simplefarming:orange_leaves simplefarming:pear_leaves simplefarming:plum_leaves mythicbotany:dreamwood_leaves undergarden:smogstem_leaves undergarden:wigglewood_leaves occultism:otherworld_leaves occultism:otherworld_leaves_natural integrateddynamics:menril_leaves extlights:xmas_leaves extlights:xmas_leaves_bulb extlights:xmas_leaves_bulb_red extlights:xmas_leaves_bulb_green extlights:xmas_leaves_bulb_blue extlights:xmas_leaves_bulb_blinking_redgreen extlights:xmas_leaves_bulb_blinking_redblue extlights:xmas_leaves_bulb_blinking_greenblue extlights:xmas_leaves_bulb_blinking_rgb extlights:xmas_leaves_bulb_smooth_redgreen extlights:xmas_leaves_bulb_smooth_redblue extlights:xmas_leaves_bulb_smooth_greenblue extlights:xmas_leaves_bulb_smooth_rgb techreborn:rubber_leaves blockus:legacy_leaves blockus:white_oak_leaves architects_palette:twisted_leaves twilightforest:twilight_oak_leaves twilightforest:canopy_leaves twilightforest:mangrove_leaves twilightforest:dark_leaves twilightforest:time_leaves twilightforest:transformation_leaves twilightforest:mining_leaves twilightforest:sorting_leaves twilightforest:giant_leaves twilightforest:thorn_leaves tfc:wood/leaves/acacia tfc:wood/leaves/ash tfc:wood/leaves/aspen tfc:wood/leaves/birch tfc:wood/leaves/blackwood tfc:wood/leaves/chestnut tfc:wood/leaves/douglas_fir tfc:wood/leaves/hickory tfc:wood/leaves/kapok tfc:wood/leaves/mangrove tfc:wood/leaves/maple tfc:wood/leaves/oak tfc:wood/leaves/palm tfc:wood/leaves/pine tfc:wood/leaves/rosewood tfc:wood/leaves/sequoia tfc:wood/leaves/spruce tfc:wood/leaves/sycamore tfc:wood/leaves/white_cedar tfc:wood/leaves/willow tfc:plant/cherry_leaves tfc:plant/green_apple_leaves tfc:plant/lemon_leaves tfc:plant/olive_leaves tfc:plant/orange_leaves tfc:plant/peach_leaves tfc:plant/plum_leaves tfc:plant/red_apple_leaves deeperdarker:echo_leaves create_dd:rubber_leaves natures_spirit:yellow_larch_leaves natures_spirit:larch_leaves natures_spirit:fir_leaves natures_spirit:redwood_leaves natures_spirit:sugi_leaves natures_spirit:white_wisteria_leaves natures_spirit:blue_wisteria_leaves natures_spirit:pink_wisteria_leaves natures_spirit:purple_wisteria_leaves natures_spirit:part_white_wisteria_leaves natures_spirit:blue_wisteria_leaves natures_spirit:part_blue_wisteria_leaves natures_spirit:pink_wisteria_leaves natures_spirit:part_pink_wisteria_leaves natures_spirit:purple_wisteria_leaves natures_spirit:fir_leaves natures_spirit:willow_leaves natures_spirit:aspen_leaves red_marple_leaves natures_spirit:orange_marple_leaves natures_spirit:yellow_marple_leaves natures_spirit:cypress_leaves natures_spirit:olive_leaves natures_spirit:joshua_leaves natures_spirit:ghaf_leaves natures_spirit:palo_verde_leaves natures_spirit:coconut_leaves natures_spirit:cedar_leaves natures_spirit:mahogany_leaves natures_spirit:saxaul_leaves natures_spirit:frosty_fir_leaves natures_spirit:part_purple_wisteria_leaves natures_spirit:wisteria_leaves natures_spirit:frosty_redwood_leaves betterend:pythadendron_leaves betterend:lacugrove_leaves betterend:dragon_tree_leaves betterend:tenanea_leaves tenanea_outer_leaves betterend:umbrella_tree_leaves betterend:helix_tree_leaves betterend:helix_tree_leaves betterend:lucernia_leaves betterend:lucernia_outer_leaves betterend:glowing_pillar_leaves betternether:willow_leaves betternether:rubeus_leaves betternether:anchor_tree_leaves betternether:nether_sakura_leaves blossom:flowering_oak_leaves + block.10018 = architects_palette:twisted_leaves ars_nouveau:blue_archwood_leaves ars_nouveau:green_archwood_leaves ars_nouveau:purple_archwood_leaves ars_nouveau:red_archwood_leaves atmospheric:aspen_leaves atmospheric:flowering_morado_leaves atmospheric:grimwood_leaves atmospheric:kousa_leaves atmospheric:morado_leaves atmospheric:rosewood_leaves atmospheric:yucca_leaves autumnity:maple_leaves autumnity:orange_maple_leaves autumnity:red_maple_leaves autumnity:yellow_maple_leaves betterend:dragon_tree_leaves betterend:glowing_pillar_leaves betterend:helix_tree_leaves betterend:lacugrove_leaves betterend:lucernia_leaves betterend:lucernia_outer_leaves betterend:pythadendron_leaves betterend:tenanea_leaves betterend:umbrella_tree_leaves betternether:anchor_tree_leaves betternether:nether_sakura_leaves betternether:rubeus_leaves betternether:willow_leaves biomesoplenty:dead_leaves biomesoplenty:fir_leaves biomesoplenty:flowering_oak_leaves biomesoplenty:hellbark_leaves biomesoplenty:jacaranda_leaves biomesoplenty:magic_leaves biomesoplenty:mahogany_leaves biomesoplenty:maple_leaves biomesoplenty:orange_autumn_leaves biomesoplenty:origin_leaves biomesoplenty:palm_leaves biomesoplenty:pink_cherry_leaves biomesoplenty:rainbow_birch_leaves biomesoplenty:redwood_leaves biomesoplenty:umbran_leaves biomesoplenty:white_cherry_leaves biomesoplenty:willow_leaves biomesoplenty:yellow_autumn_leaves blockus:legacy_leaves blockus:white_oak_leaves blossom:flowering_oak_leaves byg:araucaria_leaves byg:aspen_leaves byg:baobab_leaves byg:blooming_witch_hazel_leaves byg:blue_enchanted_leaves byg:blue_spruce_leaves byg:brown_birch_leaves byg:brown_oak_leaves byg:brown_zelkova_leaves byg:cika_leaves byg:cypress_leaves byg:ebony_leaves byg:fir_leaves byg:flowering_nightshade_leaves byg:flowering_orchard_leaves byg:flowering_palo_verde_leaves byg:green_apple_skyris_leaves byg:green_enchanted_leaves byg:holly_berry_leaves byg:holly_leaves byg:indigo_jacaranda_leaves byg:jacaranda_leaves byg:joshua_leaves byg:mahogany_leaves byg:mangrove_leaves byg:maple_leaves byg:orange_birch_leaves byg:orange_oak_leaves byg:orange_spruce_leaves byg:orchard_leaves byg:palo_verde_leaves byg:pine_leaves byg:pink_cherry_leaves byg:rainbow_eucalyptus_leaves byg:red_birch_leaves byg:red_maple_leaves byg:red_oak_leaves byg:red_spruce_leaves byg:redwood_leaves byg:ripe_joshua_leaves byg:ripe_orchard_leaves byg:silver_maple_leaves byg:skyris_leaves byg:white_cherry_leaves byg:willow_leaves byg:witch_hazel_leaves byg:yellow_birch_leaves byg:yellow_spruce_leaves byg:zelkova_leaves create_dd:rubber_leaves cutecore:cherry_wood_leaves cutecore:cherry_wood_leaves_fruit cutecore:lemon_leaves cutecore:lemon_leaves_fruiting cutecore:wisteria_leaves deeperdarker:echo_leaves dense_dynamictrees:dense_acacia_leaves dense_dynamictrees:dense_azalea_leaves dense_dynamictrees:dense_birch_leaves dense_dynamictrees:dense_cherry_leaves dense_dynamictrees:dense_cocoa_leaves dense_dynamictrees:dense_dark_oak_leaves dense_dynamictrees:dense_flowering_azalea_leaves dense_dynamictrees:dense_jungle_leaves dense_dynamictrees:dense_mangrove_leaves dense_dynamictrees:dense_oak_leaves dense_dynamictrees:dense_spruce_leaves dtarsnouveau:blue_archwood_leaves dtarsnouveau:green_archwood_leaves dtarsnouveau:purple_archwood_leaves dtarsnouveau:red_archwood_leaves dtarsnouveau:yellow_archwood_leaves dtquark:ancient_leaves dtquark:azalea_leaves dtquark:fiery_blossom_leaves dtquark:flowering_azalea_leaves dtquark:frosty_blossom_leaves dtquark:serene_blossom_leaves dtquark:sunny_blossom_leaves dtquark:warm_blossom_leaves dtterralith:acacia_amethyst_leaves dtterralith:acacia_bush_leaves dtterralith:acacia_conifer_leaves dtterralith:acacia_deciduous_leaves dtterralith:acacia_kapok_leaves dtterralith:acacia_poplar_leaves dtterralith:acacia_sparse_leaves dtterralith:acacia_twiglet_leaves dtterralith:acacia_windswept_leaves dtterralith:azalea_bush_leaves dtterralith:azalea_canopy_leaves dtterralith:azalea_ebony_leaves dtterralith:azalea_mahogany_leaves dtterralith:azalea_mangrove_leaves dtterralith:azalea_oasis_leaves dtterralith:birch_conifer_leaves dtterralith:birch_poplar_leaves dtterralith:birch_scruffy_conifer_leaves dtterralith:birch_scruffy_leaves dtterralith:birch_short_conifer_leaves dtterralith:birch_sparse_leaves dtterralith:birch_twilight_leaves dtterralith:birch_windswept_leaves dtterralith:cherry_bush_leaves dtterralith:dark_oak_ancient_leaves dtterralith:dark_oak_ancient_mirage_leaves dtterralith:dark_oak_blue_conifer_leaves dtterralith:dark_oak_canopy_leaves dtterralith:dark_oak_canopy_mirage_leaves dtterralith:dark_oak_jacaranda_leaves dtterralith:dark_oak_maple_leaves dtterralith:dark_oak_orange_conifer_leaves dtterralith:dark_oak_red_azalea_leaves dtterralith:dark_oak_red_conifer_leaves dtterralith:dark_oak_red_maple_leaves dtterralith:dark_oak_sakura_bush_leaves dtterralith:dark_oak_sakura_leaves dtterralith:dark_oak_wide_leaves dtterralith:flowering_azalea_canopy_leaves dtterralith:flowering_azalea_mahogany_leaves dtterralith:flowering_azalea_mangrove_leaves dtterralith:flowering_azalea_oasis_leaves dtterralith:jungle_jacaranda_leaves dtterralith:jungle_sakura_leaves dtterralith:jungle_sparse_leaves dtterralith:jungle_windswept_leaves dtterralith:mangrove_scruffy_leaves dtterralith:mangrove_sparse_leaves dtterralith:oak_conifer_leaves dtterralith:oak_kapok_leaves dtterralith:oak_scruffy_leaves dtterralith:oak_scruffy_tall_conifer_leaves dtterralith:oak_sparse_leaves dtterralith:oak_tall_conifer_leaves dtterralith:oak_twiglet_leaves dtterralith:oak_twilight_leaves dtterralith:oak_yellow_conifer_leaves dtterralith:spruce_bush_leaves dtterralith:spruce_moonlight_leaves dtterralith:spruce_poplar_leaves dtterralith:spruce_round_leaves dtterralith:spruce_short_conifer_leaves dtterralith:spruce_sparse_leaves dtterralith:spruce_tall_conifer_leaves dtterralith:spruce_twiglet_leaves dtterralith:tall_dark_oak_leaves dynamictrees:acacia_leaves dynamictrees:azalea_leaves dynamictrees:birch_leaves dynamictrees:cherry_leaves dynamictrees:dark_oak_leaves dynamictrees:flowering_azalea_leaves dynamictrees:jungle_leaves dynamictrees:jungle_undergrowth_leaves dynamictrees:mangrove_leaves dynamictrees:oak_leaves dynamictrees:oak_undergrowth_leaves dynamictrees:spruce_leaves ecotones:hazel_leaves environmental:blue_hanging_wisteria_leaves environmental:blue_wisteria_leaves environmental:cherry_leaves environmental:hanging_willow_leaves environmental:pink_hanging_wisteria_leaves environmental:pink_wisteria_leaves environmental:purple_hanging_wisteria_leaves environmental:purple_wisteria_leaves environmental:white_hanging_wisteria_leaves environmental:white_wisteria_leaves environmental:willow_leaves extlights:xmas_leaves extlights:xmas_leaves_bulb extlights:xmas_leaves_bulb_blinking_greenblue extlights:xmas_leaves_bulb_blinking_redblue extlights:xmas_leaves_bulb_blinking_redgreen extlights:xmas_leaves_bulb_blinking_rgb extlights:xmas_leaves_bulb_blue extlights:xmas_leaves_bulb_green extlights:xmas_leaves_bulb_red extlights:xmas_leaves_bulb_smooth_greenblue extlights:xmas_leaves_bulb_smooth_redblue extlights:xmas_leaves_bulb_smooth_redgreen extlights:xmas_leaves_bulb_smooth_rgb integrateddynamics:menril_leaves minecraft:acacia_leaves minecraft:azalea_leaves minecraft:azalea_leaves_flowers minecraft:birch_leaves minecraft:cherry_leaves minecraft:dark_oak_leaves minecraft:flowering_azalea_leaves minecraft:jungle_leaves minecraft:mangrove_leaves minecraft:oak_leaves minecraft:pale_oak_leaves minecraft:spruce_leaves mythicbotany:dreamwood_leaves natures_spirit:aspen_leaves natures_spirit:blue_wisteria_leaves natures_spirit:cedar_leaves natures_spirit:coconut_leaves natures_spirit:cypress_leaves natures_spirit:fir_leaves natures_spirit:frosty_fir_leaves natures_spirit:frosty_redwood_leaves natures_spirit:ghaf_leaves natures_spirit:joshua_leaves natures_spirit:larch_leaves natures_spirit:mahogany_leaves natures_spirit:olive_leaves natures_spirit:orange_marple_leaves natures_spirit:palo_verde_leaves natures_spirit:part_blue_wisteria_leaves natures_spirit:part_pink_wisteria_leaves natures_spirit:part_purple_wisteria_leaves natures_spirit:part_white_wisteria_leaves natures_spirit:pink_wisteria_leaves natures_spirit:purple_wisteria_leaves natures_spirit:redwood_leaves natures_spirit:saxaul_leaves natures_spirit:sugi_leaves natures_spirit:white_wisteria_leaves natures_spirit:willow_leaves natures_spirit:wisteria_leaves natures_spirit:yellow_larch_leaves natures_spirit:yellow_marple_leaves occultism:otherworld_leaves occultism:otherworld_leaves_natural quark:blue_blossom_leaves quark:lavender_blossom_leaves quark:orange_blossom_leaves quark:pink_blossom_leaves quark:yellow_blossom_leaves sakurarosea:alt_sakura_leaves sakurarosea:sakura_leaves sakurarosea:white_sakura_leaves simplefarming:apple_leaves simplefarming:apricot_leaves simplefarming:banana_leaves simplefarming:cherry_leaves simplefarming:mango_leaves simplefarming:olive_leaves simplefarming:orange_leaves simplefarming:pear_leaves simplefarming:plum_leaves techreborn:rubber_leaves terrestria:cypress_leaves terrestria:dark_japanese_maple_leaves terrestria:hemlock_leaves terrestria:japanese_maple_leaves terrestria:japanese_maple_shrub_leaves terrestria:jungle_palm_leaves terrestria:rainbow_eucalyptus_leaves terrestria:redwood_leaves terrestria:rubber_leaves terrestria:sakura_leaves terrestria:willow_leaves terrestria:yucca_palm_leaves tfc:plant/cherry_leaves tfc:plant/green_apple_leaves tfc:plant/lemon_leaves tfc:plant/olive_leaves tfc:plant/orange_leaves tfc:plant/peach_leaves tfc:plant/plum_leaves tfc:plant/red_apple_leaves tfc:wood/leaves/acacia tfc:wood/leaves/ash tfc:wood/leaves/aspen tfc:wood/leaves/birch tfc:wood/leaves/blackwood tfc:wood/leaves/chestnut tfc:wood/leaves/douglas_fir tfc:wood/leaves/hickory tfc:wood/leaves/kapok tfc:wood/leaves/mangrove tfc:wood/leaves/maple tfc:wood/leaves/oak tfc:wood/leaves/palm tfc:wood/leaves/pine tfc:wood/leaves/rosewood tfc:wood/leaves/sequoia tfc:wood/leaves/spruce tfc:wood/leaves/sycamore tfc:wood/leaves/white_cedar tfc:wood/leaves/willow traverse:brown_autumnal_leaves traverse:fir_leaves traverse:orange_autumnal_leaves traverse:red_autumnal_leaves traverse:yellow_autumnal_leaves twilightforest:canopy_leaves twilightforest:dark_leaves twilightforest:giant_leaves twilightforest:mangrove_leaves twilightforest:mining_leaves twilightforest:sorting_leaves twilightforest:thorn_leaves twilightforest:time_leaves twilightforest:transformation_leaves twilightforest:twilight_oak_leaves undergarden:smogstem_leaves undergarden:wigglewood_leaves upgrade_aquatic:river_leaves vanillaenhanced:redwood_leaves wild_explorer:autumn_birch_leaves wild_explorer:autumn_oak_leaves wild_explorer:palm_leaves wild_explorer:pink_cherry_oak_leaves wild_explorer:white_cherry_oak_leaves + + # NO-WAVEABLE SMALL ELEMENTS block.10032 = sugar_cane tube_coral brain_coral fire_coral bubble_coral horn_coral dead_tube_coral dead_brain_coral dead_fire_coral dead_bubble_coral dead_horn_coral tube_coral_fan brain_coral_fan fire_coral_fan bubble_coral_fan horn_coral_fan dead_tube_coral_fan dead_brain_coral_fan dead_fire_coral_fan dead_bubble_coral_fan dead_horn_coral_fan nether_wart tfc:plant/athyrium_fern tfc:plant/canna tfc:plant/goldenrod tfc:plant/pampas_grass tfc:plant/perovskia tfc:plant/rose tfc:plant/beachgrass tfc:plant/bluegrass tfc:plant/bromegrass tfc:plant/fountain_grass tfc:plant/manatee_grass tfc:plant/orchard_grass tfc:plant/ryegrass tfc:plant/scutch_grass tfc:plant/star_grass tfc:plant/timothy_grass tfc:plant/raddia_grass tfc:plant/allium tfc:plant/anthurium tfc:plant/arrowhead tfc:plant/badderlocks tfc:plant/barrel_cactus tfc:plant/blood_lily tfc:plant/blue_ginger tfc:plant/blue_orchid tfc:plant/bur_reed tfc:plant/butterfly_milkweed tfc:plant/black_orchid tfc:plant/calendula tfc:plant/cattail tfc:plant/cobblestone_lichen tfc:plant/coontail tfc:plant/cordgrass tfc:plant/dandelion tfc:plant/dead_bush tfc:plant/desert_flame tfc:plant/duckweed tfc:plant/eel_grass tfc:plant/field_horsetail tfc:plant/foxglove tfc:plant/grape_hyacinth tfc:plant/green_algae tfc:plant/gutweed tfc:plant/guzmania tfc:plant/heliconia tfc:plant/heather tfc:plant/hibiscus tfc:plant/houstonia tfc:plant/kangaroo_paw tfc:plant/king_fern tfc:plant/labrador_tea tfc:plant/lady_fern tfc:plant/laminaria tfc:plant/licorice_fern tfc:plant/artists_conk tfc:plant/lily_of_the_valley tfc:plant/lilac tfc:plant/lotus tfc:plant/maiden_pink tfc:plant/marigold tfc:plant/meads_milkweed tfc:plant/milfoil tfc:plant/morning_glory tfc:plant/philodendron tfc:plant/moss tfc:plant/nasturtium tfc:plant/ostrich_fern tfc:plant/oxeye_daisy tfc:plant/phragmite tfc:plant/pickerelweed tfc:plant/pistia tfc:plant/poppy tfc:plant/primrose tfc:plant/pulsatilla tfc:plant/red_algae tfc:plant/reindeer_lichen tfc:plant/red_sealing_wax_palm tfc:plant/sacred_datura tfc:plant/sagebrush tfc:plant/sago tfc:plant/saguaro_fruit tfc:plant/sapphire_tower tfc:plant/sargassum tfc:plant/sea_lavender tfc:plant/sea_palm tfc:plant/silver_spurflower tfc:plant/snapdragon_pink tfc:plant/snapdragon_red tfc:plant/snapdragon_white tfc:plant/snapdragon_yellow tfc:plant/strelitzia tfc:plant/switchgrass tfc:plant/sword_fern tfc:plant/tall_fescue_grass tfc:plant/toquilla_palm tfc:plant/trillium tfc:plant/tropical_milkweed tfc:plant/tulip_orange tfc:plant/tulip_pink tfc:plant/tulip_red tfc:plant/tulip_white tfc:plant/turtle_grass tfc:plant/vriesea tfc:plant/water_canna tfc:plant/white_water_lily tfc:plant/purple_water_lily tfc:plant/yellow_water_lily tfc:plant/water_taro tfc:plant/yucca tfc:plant/hanging_vines_plant tfc:plant/hanging_vines tfc:plant/spanish_moss_plant tfc:plant/spanish_moss tfc:plant/liana_plant tfc:plant/liana tfc:plant/tree_fern_plant tfc:plant/tree_fern tfc:plant/arundo_plant tfc:plant/arundo tfc:plant/dry_phragmite_plant tfc:plant/dry_phragmite tfc:plant/winged_kelp_plant tfc:plant/winged_kelp tfc:plant/leafy_kelp_plant tfc:plant/leafy_kelp tfc:plant/giant_kelp_plant tfc:plant/giant_kelp_flower tfc:plant/ivy tfc:plant/jungle_vines tfc:plant/saguaro_plant tfc:plant/saguaro tfc:plant/golden_bamboo tfc:plant/golden_bamboo_sapling tfc:wild_crop/barley tfc:wild_crop/oat tfc:wild_crop/rye tfc:wild_crop/maize tfc:wild_crop/wheat tfc:wild_crop/rice tfc:wild_crop/beet tfc:wild_crop/cabbage tfc:wild_crop/carrot tfc:wild_crop/garlic tfc:wild_crop/green_bean tfc:wild_crop/potato tfc:wild_crop/onion tfc:wild_crop/soybean tfc:wild_crop/squash tfc:wild_crop/sugarcane tfc:wild_crop/tomato tfc:wild_crop/jute tfc:wild_crop/papyrus tfc:wild_crop/pumpkin tfc:wild_crop/melon tfc:wild_crop/red_bell_pepper tfc:wild_crop/yellow_bell_pepper tfc:plant/snowberry_bush tfc:plant/bunchberry_bush tfc:plant/gooseberry_bush tfc:plant/cloudberry_bush tfc:plant/strawberry_bush tfc:plant/wintergreen_berry_bush tfc:plant/cranberry_bush From e0ade4d78838e82626395094f28fe476365e18bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Wed, 13 May 2026 02:37:20 -0600 Subject: [PATCH 146/147] Version 9.5a --- README.md | 2 +- shaders/common/skybasic_fragment.glsl | 1 - shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 2 +- shaders/lang/es_ES.lang | 2 +- shaders/lang/es_MX.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- shaders/src/writebuffers.glsl | 13 ++++++++++--- 11 files changed, 19 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index bfdc8073..864c6a8b 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.5 +## Version: 9.5a ### This version works in Optifine and Iris 1.5.1 or higher. diff --git a/shaders/common/skybasic_fragment.glsl b/shaders/common/skybasic_fragment.glsl index 6ad224f7..c498db91 100644 --- a/shaders/common/skybasic_fragment.glsl +++ b/shaders/common/skybasic_fragment.glsl @@ -88,7 +88,6 @@ void main() { #endif #endif - #if MC_VERSION >= 11604 blockColor.rgba = vec4(texture2D(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY)).rgb, clamp(star_data.a * 2.0, 0.0, 1.0)); #endif diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 1f3d4356..791411c7 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -15,7 +15,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.5 +value.ACERCADE.0=v.9.5a #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index dcffc115..aaa7139f 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.5 +value.ACERCADE.0=v.9.5a # Opciones ############################# diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index dcffc115..aaa7139f 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.5 +value.ACERCADE.0=v.9.5a # Opciones ############################# diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index dcffc115..aaa7139f 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.5 +value.ACERCADE.0=v.9.5a # Opciones ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 878966de..9d21c072 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -15,7 +15,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.5 +value.ACERCADE.0=v.9.5a #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 6271b9d4..2b2b94a7 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -15,7 +15,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.5 +value.ACERCADE.0=v.9.5a #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 46c4648f..70c5c2f9 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -15,7 +15,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.5 +value.ACERCADE.0=v.9.5a #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 3bf10906..0c4fb30b 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -15,7 +15,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.5 +value.ACERCADE.0=v.9.5a #Options ############################# diff --git a/shaders/src/writebuffers.glsl b/shaders/src/writebuffers.glsl index 02141351..0c993e12 100644 --- a/shaders/src/writebuffers.glsl +++ b/shaders/src/writebuffers.glsl @@ -17,8 +17,15 @@ gl_FragData[0] = blockColor; gl_FragData[1] = blockColor; #else - /* DRAWBUFFERS:1 */ - blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); - gl_FragData[0] = blockColor; + #if defined GBUFFER_ENTITIES && MC_VERSION >= 260000 // Invisible skin behind water fix + /* DRAWBUFFERS:14 */ + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); + gl_FragData[0] = blockColor; + gl_FragData[1] = blockColor; + #else + /* DRAWBUFFERS:1 */ + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); + gl_FragData[0] = blockColor; + #endif #endif #endif From ab8b7ccfb8126a577630c704e7ed9e64dfb4cb82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Gardu=C3=B1o?= Date: Sat, 23 May 2026 12:14:21 -0600 Subject: [PATCH 147/147] Version 9.5b --- shaders/lang/en_US.lang | 2 +- shaders/lang/es_AR.lang | 2 +- shaders/lang/es_ES.lang | 2 +- shaders/lang/es_MX.lang | 2 +- shaders/lang/ko_KR.lang | 2 +- shaders/lang/sv_SE.lang | 2 +- shaders/lang/tr_TR.lang | 2 +- shaders/lang/zh_CN.lang | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 791411c7..ad1b8481 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -15,7 +15,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.5a +value.ACERCADE.0=v.9.5b #Options ############################# diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang index aaa7139f..60a42e86 100644 --- a/shaders/lang/es_AR.lang +++ b/shaders/lang/es_AR.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.5a +value.ACERCADE.0=v.9.5b # Opciones ############################# diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang index aaa7139f..60a42e86 100644 --- a/shaders/lang/es_ES.lang +++ b/shaders/lang/es_ES.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.5a +value.ACERCADE.0=v.9.5b # Opciones ############################# diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang index aaa7139f..60a42e86 100644 --- a/shaders/lang/es_MX.lang +++ b/shaders/lang/es_MX.lang @@ -15,7 +15,7 @@ profile.comment=Los perfiles "sin sombras" están pensados para máquinas de baj ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. -value.ACERCADE.0=v.9.5a +value.ACERCADE.0=v.9.5b # Opciones ############################# diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang index 9d21c072..0b164ac4 100644 --- a/shaders/lang/ko_KR.lang +++ b/shaders/lang/ko_KR.lang @@ -15,7 +15,7 @@ profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. -value.ACERCADE.0=v.9.5a +value.ACERCADE.0=v.9.5b #옵션 ############################# diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 2b2b94a7..d99731dd 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -15,7 +15,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.5a +value.ACERCADE.0=v.9.5b #Options ############################# diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index 70c5c2f9..e62c3120 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -15,7 +15,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.5a +value.ACERCADE.0=v.9.5b #Options ############################# diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index 0c4fb30b..88455518 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -15,7 +15,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.5a +value.ACERCADE.0=v.9.5b #Options #############################