unpacked shader

This commit is contained in:
2025-05-18 19:14:30 -05:00
parent efff2ffd1a
commit 53859638b2
422 changed files with 21273 additions and 35 deletions

View File

@ -3,7 +3,7 @@ backend = "DEFAULT"
#Enable or disable instance update limiting with distance. #Enable or disable instance update limiting with distance.
limitUpdates = true limitUpdates = true
#The number of worker threads to use. Set to -1 to let Flywheel decide. Set to 0 to disable parallelism. Requires a game restart to take effect. #The number of worker threads to use. Set to -1 to let Flywheel decide. Set to 0 to disable parallelism. Requires a game restart to take effect.
#Range: -1 ~ 16 #Range: -1 ~ 12
workerThreads = -1 workerThreads = -1
#Config options for Flywheel's built-in backends. #Config options for Flywheel's built-in backends.

View File

@ -1,7 +1,7 @@
{ {
"disableMod": false, "disableMod": true,
"disabledDimensions": [ "disabledDimensions": [
"minecraft:the_nether" "the_deep_void:deep_void"
], ],
"disableRaininessEffect": false, "disableRaininessEffect": false,
"disableUndergroundFogMultiplier": false, "disableUndergroundFogMultiplier": false,

View File

@ -1,8 +1,8 @@
#This file stores configuration options for Iris, such as the currently active shaderpack #This file stores configuration options for Iris, such as the currently active shaderpack
#Sat May 17 23:33:39 CDT 2025 #Sun May 18 18:54:04 CDT 2025
colorSpace=SRGB colorSpace=SRGB
disableUpdateMessage=false disableUpdateMessage=false
enableDebugOptions=false enableDebugOptions=false
maxShadowRenderDistance=32 maxShadowRenderDistance=32
shaderPack=ComplementaryUnbound_r5.5.1.zip shaderPack=ComplementaryUnbound_r5.5.1test
enableShaders=true enableShaders=true

View File

@ -2,11 +2,11 @@
[sodiumdynamiclights] [sodiumdynamiclights]
#Lighting mode #Lighting mode
#Allowed Values: OFF, SLOW, FAST, REALTIME #Allowed Values: OFF, SLOW, FAST, REALTIME
mode = "OFF" mode = "REALTIME"
#Enable entities light source. #Enable entities light source.
entities = false entities = true
#Enable first-person player light source. #Enable first-person player light source.
self = false self = true
#Enable block entities light source. #Enable block entities light source.
block_entities = false block_entities = false
#Enables water-sensitive light sources check. This means that water-sensitive items will not light up when submerged in water. #Enables water-sensitive light sources check. This means that water-sensitive items will not light up when submerged in water.

View File

@ -5,7 +5,7 @@ autoSuggestions:true
chatColors:true chatColors:true
chatLinks:true chatLinks:true
chatLinksPrompt:true chatLinksPrompt:true
enableVsync:true enableVsync:false
entityShadows:true entityShadows:true
forceUnicodeFont:false forceUnicodeFont:false
discrete_mouse_scroll:false discrete_mouse_scroll:false
@ -205,37 +205,37 @@ key_key.ftbultimine:key.mouse.5
key_key.ftbteams.open_gui:key.keyboard.unknown key_key.ftbteams.open_gui:key.keyboard.unknown
key_chunkloaders.keys.open_screen:key.keyboard.c key_chunkloaders.keys.open_screen:key.keyboard.c
key_key.biomancy.item_default:key.keyboard.v key_key.biomancy.item_default:key.keyboard.v
key_key.jei.closeRecipeGui:key.keyboard.escape
key_key.jei.bookmark:key.keyboard.a
key_key.jei.previousPage:key.keyboard.unknown
key_key.jei.focusSearch:key.keyboard.f:CONTROL
key_key.jei.clearSearchBar:key.mouse.right
key_key.jei.previousSearch:key.keyboard.up key_key.jei.previousSearch:key.keyboard.up
key_key.jei.recipeBack:key.keyboard.backspace key_key.jei.previousCategory:key.keyboard.page.up:SHIFT
key_key.jei.toggleHideIngredient:key.mouse.left:CONTROL
key_key.jei.previousRecipePage:key.keyboard.page.up
key_key.jei.focusSearch:key.keyboard.f:CONTROL
key_key.jei.nextPage:key.keyboard.unknown key_key.jei.nextPage:key.keyboard.unknown
key_key.jei.toggleOverlay:key.keyboard.o:CONTROL key_key.jei.recipeBack:key.keyboard.backspace
key_key.jei.toggleCheatMode:key.keyboard.unknown key_key.jei.showUses2:key.mouse.right
key_key.jei.cheatItemStack:key.mouse.left:SHIFT key_key.jei.cheatItemStack:key.mouse.left:SHIFT
key_key.jei.toggleCheatModeConfigButton:key.mouse.left:CONTROL key_key.jei.cheatOneItem2:key.mouse.right
key_key.jei.cheatOneItem:key.mouse.left
key_key.jei.showRecipe2:key.mouse.left
key_key.jei.nextSearch:key.keyboard.down key_key.jei.nextSearch:key.keyboard.down
key_key.jei.copy.recipe.id:key.keyboard.unknown key_key.jei.toggleWildcardHideIngredient:key.mouse.right:CONTROL
key_key.jei.cheatItemStack2:key.mouse.middle key_key.jei.toggleCheatMode:key.keyboard.unknown
key_key.jei.nextRecipePage:key.keyboard.page.down
key_key.jei.maxTransferRecipeBookmark:key.mouse.left:CONTROL
key_key.jei.clearSearchBar:key.mouse.right
key_key.jei.previousPage:key.keyboard.unknown
key_key.jei.toggleCheatModeConfigButton:key.mouse.left:CONTROL
key_key.jei.toggleOverlay:key.keyboard.o:CONTROL
key_key.jei.showUses:key.keyboard.u key_key.jei.showUses:key.keyboard.u
key_key.jei.toggleBookmarkOverlay:key.keyboard.unknown key_key.jei.toggleBookmarkOverlay:key.keyboard.unknown
key_key.jei.previousRecipePage:key.keyboard.page.up key_key.jei.copy.recipe.id:key.keyboard.unknown
key_key.jei.toggleHideIngredient:key.mouse.left:CONTROL
key_key.jei.cheatOneItem2:key.mouse.right
key_key.jei.toggleEditMode:key.keyboard.unknown
key_key.jei.previousCategory:key.keyboard.page.up:SHIFT
key_key.jei.nextCategory:key.keyboard.page.down:SHIFT
key_key.jei.showUses2:key.mouse.right
key_key.jei.maxTransferRecipeBookmark:key.mouse.left:CONTROL
key_key.jei.toggleWildcardHideIngredient:key.mouse.right:CONTROL
key_key.jei.transferRecipeBookmark:key.mouse.left:SHIFT
key_key.jei.nextRecipePage:key.keyboard.page.down
key_key.jei.showRecipe:key.keyboard.r key_key.jei.showRecipe:key.keyboard.r
key_key.jei.showRecipe2:key.mouse.left
key_key.jei.closeRecipeGui:key.keyboard.escape
key_key.jei.cheatItemStack2:key.mouse.middle
key_key.jei.nextCategory:key.keyboard.page.down:SHIFT
key_key.jei.transferRecipeBookmark:key.mouse.left:SHIFT
key_key.jei.cheatOneItem:key.mouse.left
key_key.jei.bookmark:key.keyboard.a
key_key.jei.toggleEditMode:key.keyboard.unknown
key_key.ars_nouveau.open_book:key.keyboard.c key_key.ars_nouveau.open_book:key.keyboard.c
key_key.ars_nouveau.selection_hud:key.keyboard.v key_key.ars_nouveau.selection_hud:key.keyboard.v
key_key.ars_nouveau.next_slot:key.keyboard.x key_key.ars_nouveau.next_slot:key.keyboard.x
@ -316,7 +316,7 @@ key_quark.keybind.variant_selector:key.keyboard.r
key_supplementaries.keybind.quiver:key.keyboard.v key_supplementaries.keybind.quiver:key.keyboard.v
key_key.ars_elemental.open_pouch:key.keyboard.j key_key.ars_elemental.open_pouch:key.keyboard.j
key_key.entityculling.toggle:key.keyboard.unknown key_key.entityculling.toggle:key.keyboard.unknown
soundCategory_master:0.17745240066225162 soundCategory_master:1.0
soundCategory_music:0.0 soundCategory_music:0.0
soundCategory_record:1.0 soundCategory_record:1.0
soundCategory_weather:1.0 soundCategory_weather:1.0

View File

@ -1,4 +1,4 @@
#Sat May 17 23:33:40 CDT 2025 #Sun May 18 16:02:22 CDT 2025
AURORA_CONDITION=4 AURORA_CONDITION=4
CLOUD_STYLE_DEFINE=3 CLOUD_STYLE_DEFINE=3
WATER_STYLE_DEFINE=3 WATER_STYLE_DEFINE=3

View File

@ -0,0 +1,52 @@
#Sun May 18 18:54:04 CDT 2025
AURORA_CONDITION=4
CLOUD_STYLE_DEFINE=3
WATER_STYLE_DEFINE=3
ATM_FOG_DISTANCE=60
MOON_PHASE_INF_LIGHT=true
WB_DB_DAY_I=9.0
MOON_PHASE_FULL=0.70
SUN_ANGLE=-40
LIGHT_NIGHT_I=0.60
ATM_FOG_ALTITUDE=70
MOON_PHASE_DARK=0.45
PIXELATED_AO=true
NIGHT_NEBULA=true
BLOCK_REFLECT_QUALITY=1
SUN_MOON_STYLE_DEFINE=2
XLIGHT_R=0.65
WB_DB_RAIN_I=18.0
RAIN_STYLE=2
XLIGHT_G=0.65
XLIGHT_B=0.65
CHROMA_ABERRATION=2
AURORA_STYLE_DEFINE=2
HELD_LIGHTING_MODE=1
PIXELATED_SHADOWS=true
LIGHT_RAIN_I=0.55
LENSFLARE_MODE=1
WB_DOF_I=1.5
LENSFLARE_I=1.20
LIGHT_MORNING_B=1.10
WB_ANAMORPHIC=true
NETHER_VIEW_LIMIT=128.0
WB_DB_NIGHT_I=9.0
LIGHT_COLOR_MULTS=true
LIGHT_NOON_R=0.85
LIGHT_MORNING_R=0.85
NIGHT_STAR_AMOUNT=3
WORLD_BLUR=1
WB_DB_WATER_I=24.0
LIGHT_MORNING_I=0.50
LIGHT_MORNING_G=0.85
LIGHT_NOON_G=0.85
LIGHT_NOON_I=1.10
LIGHT_NOON_B=0.85
WB_DOF_FOCUS=1
WB_DB_NETHER_I=18.0
SHADOW_QUALITY=0
MOON_PHASE_PARTIAL=0.55
WB_CHROMATIC=true
WATER_BUMPINESS=1.00
BLOOM_STRENGTH=0.045
WB_DB_END_I=12.0

View File

@ -0,0 +1,5 @@
- Hello!
- If you don't know how to install the pack, please go to this link and read the "Installation" section
- https://modrinth.com/shader/complementary-reimagined

View File

@ -0,0 +1,92 @@
Complementary License Agreement 1.5
===================================
0. Terminology
--------------
0.1. "The Pack" and/or "This Pack" means the software package that this
specific license file you are reading from is found in.
0.2. "Normal Usage" means usage of The Pack as intended for the general
public. This includes most usage, but the following usages are
definitely NOT considered Normal Usage:
a. Redistributing (parts of) The Pack
b. Modifying code of The Pack
0.3. "User" and/or "Users" means people that are using The Pack under our
definition of Normal Usage.
0.4. "Modpack" means a modification package made for the video
game "Minecraft: Java Edition".
0.5. "Modified Pack" means a software package that consists of The Pack but
with the code intentionally being changed to differ from The Pack.
0.6. "Original Pack" means one of two things:
a. If "This Pack" is an original Complementary Development product,
meaning that this specific license file you are reading from is
found inside an original Complementary Development product, then
"Original Pack" directly means the same thing as "This Pack".
b. But if "This Pack" is not an original Complementary Development
product, meaning that this specific license file you are reading
from is found inside a pack that was created using the grant
detailed at section "1.3", then "Original Pack" refers to the
pack created by Complementary Development that must be mentioned
in the description page(s) of This Pack.
1. Grants
---------
1.1. All Users are free to use This Pack for Normal Usage. This isn't
limited to, but includes:
a. Using The Pack for gameplay
b. Using The Pack for content creation
1.2. This Pack is allowed to be redistributed inside a Modpack as long as
the following conditions are met:
a. This Pack must be visibly credited in the Modpack's description
page(s).
b. The author of the Modpack must acknowledge that any problems that
may arise from using This Pack in their Modpack is entirely under
the responsibility of the author of the Modpack.
1.3. This Pack is allowed to be redistributed as a Modified Pack as long as
the following conditions are met:
a. The Original Pack must be visibly credited in the description
page(s) of the Modified Pack, with a link to the official
Complementary Development website.
b. This license file must still be left inside the Modified Pack
without any changes being made to it, and it must be updated to
the latest one found in the latest version of the Original Pack
every time the Modified Pack gets updated to make more use of the
code from the Original Pack.
c. The Modified Pack must not have the word "Complementary" in its
name, and there should be at least 3 character difference between
the name of the Modified Pack and the Original Pack. Adding or
removing non-alphabetic characters or the removal of
"Complementary" does not count as a character difference.
d. The Modified Pack must look noticeably different from the
Original Pack in multiple common gameplay scenarios that must
include daytime overworld visuals, regardless of the setting or
variable changes in the Modified Pack and/or the Original Pack.
2. Denied Cases
---------------
2.1. Any usage or redistribution of any part of This Pack that isn't
explicitly covered in the "Grants" section of this license should be
treated as "All Rights Reserved". Only exceptions are the files that
contain a notice that they are covered by a different license.
2.2. This agreement only applies to the version of This Pack that this exact
file can be found in. This agreement is not valid for future or past
versions of The Pack unless they contain the exact same agreement.
3. License Infringement
-----------------------
3.1. By using This Pack for any purpose, you agree that Complementary
Development has the right to take action against you in the case of a
license infringement, regardless of This Pack being the Original Pack
or not.
3.2. Complementary Development reserves its rights to not take action
against cases that it deems harmless. For this reason, cases that
Complementary Development did not take action against in the past
cannot be used as an excuse to ignore this agreement.

View File

@ -0,0 +1 @@
This is a placebo file so that some people stop thinking they should put the "shaders" folder to their shaderpacks folder.

View File

@ -0,0 +1 @@
This is a placebo file so that some people stop thinking they should put the "shaders" folder to their shaderpacks folder.

View File

@ -0,0 +1 @@
This is a placebo file so that some people stop thinking they should put the "shaders" folder to their shaderpacks folder.

View File

@ -0,0 +1 @@
This is a placebo file so that some people stop thinking they should put the "shaders" folder to their shaderpacks folder.

View File

@ -0,0 +1 @@
This is a placebo file so that some people stop thinking they should put the "shaders" folder to their shaderpacks folder.

View File

@ -0,0 +1,2 @@
ComplementaryReimagined_r5.5.1.zip
ComplementaryUnbound_r5.5.1.zip

View File

@ -0,0 +1,461 @@
#-----------------------------------------------------------------------------------------------------------------
# Hello! Welcome to the Complementary block library. Shaders use these IDs to perform block specific effects.
# If you want to add modded blocks, please feel free to put your block IDs in the following sections:
#
# block.10009: Leaves
# block.10005: Foliage (for Mc 1.13 and above use the first "block.10005". Otherwise use the second "block.10005")
# block.10024: Modded Ores (shader will do its best to detect ore-pixels if "Enable Glowing Ores" setting is on)
# block.10028: Modded Light Sources / Emissives (shader will do its best to give a nice glow to the block)
# block.20000: No Parallax Occlusion Mapping
#
#
#
# ID Info:
# 5XXX - Block Entities
# 1XXXX - Terrain
# * Note that terrain IDs that satisfy "XXXXX % 4 == 1" are treated non-solid for Advanced Colored Lighting
# 3XXXX - Translucent
# * 31XXX - Translucents with advanced colored light tinting
# * 32XXX - Translucents with alternative shadow calculation
# 4XXXX - Items (see item.properties)
# * 44XXX - Items for colored handheld lighting
# * 45XXX - Items for other Iris exclusive features
# 5XXXX - Entities (see entity.properties)
#-----------------------------------------------------------------------------------------------------------------
block.5000=
block.5004=oak_sign spruce_sign birch_sign jungle_sign acacia_sign dark_oak_sign oak_wall_sign spruce_wall_sign birch_wall_sign jungle_wall_sign acacia_wall_sign dark_oak_wall_sign crimson_sign crimson_wall_sign warped_sign warped_wall_sign mangrove_sign mangrove_wall_sign bamboo_sign bamboo_wall_sign oak_hanging_sign spruce_hanging_sign birch_hanging_sign jungle_hanging_sign acacia_hanging_sign dark_oak_hanging_sign oak_wall_hanging_sign spruce_wall_hanging_sign birch_wall_hanging_sign jungle_wall_hanging_sign acacia_wall_hanging_sign dark_oak_wall_hanging_sign crimson_hanging_sign crimson_wall_hanging_sign warped_hanging_sign warped_wall_hanging_sign mangrove_hanging_sign mangrove_wall_hanging_sign bamboo_hanging_sign bamboo_wall_hanging_sign cherry_sign cherry_wall_sign cherry_hanging_sign cherry_wall_hanging_sign pale_oak_sign pale_oak_hanging_sign
block.5008=chest trapped_chest
block.5012=ender_chest
block.5016=shulker_box white_shulker_box orange_shulker_box magenta_shulker_box light_blue_shulker_box yellow_shulker_box lime_shulker_box pink_shulker_box gray_shulker_box light_gray_shulker_box cyan_shulker_box purple_shulker_box blue_shulker_box brown_shulker_box green_shulker_box red_shulker_box black_shulker_box skeleton_skull wither_skeleton_skull player_head zombie_head creeper_head dragon_head white_banner orange_banner magenta_banner light_blue_banner yellow_banner lime_banner pink_banner gray_banner light_gray_banner cyan_banner purple_banner blue_banner brown_banner green_banner red_banner black_banner white_wall_banner orange_wall_banner magenta_wall_banner light_blue_wall_banner yellow_wall_banner lime_wall_banner pink_wall_banner gray_wall_banner light_gray_wall_banner cyan_wall_banner purple_wall_banner blue_wall_banner brown_wall_banner green_wall_banner red_wall_banner black_wall_banner white_bed orange_bed magenta_bed light_blue_bed yellow_bed lime_bed pink_bed gray_bed light_gray_bed cyan_bed purple_bed blue_bed brown_bed green_bed red_bed black_bed
block.5020=conduit
block.5025=end_portal end_gateway
block.5028=bell
block.5032=
block.5036=
block.10001=big_dripleaf_stem big_dripleaf small_dripleaf
#if MC_VERSION >= 11300
block.10005=grass short_grass fern oak_sapling spruce_sapling birch_sapling jungle_sapling acacia_sapling dark_oak_sapling bamboo_sapling cherry_sapling pale_oak_sapling dead_bush dandelion poppy blue_orchid allium azure_bluet red_tulip orange_tulip white_tulip pink_tulip oxeye_daisy cornflower lily_of_the_valley wither_rose sweet_berry_bush wheat carrots potatoes beetroots pumpkin_stem melon_stem nether_sprouts warped_roots crimson_roots sunflower:half=lower lilac:half=lower rose_bush:half=lower peony:half=lower tall_grass:half=lower large_fern:half=lower torchflower_crop short_dry_grass tall_dry_grass bush cactus_flower closed_eyeblossom
#else
block.10005=tallgrass sapling deadbush yellow_flower red_flower wheat carrots potatoes beetroots pumpkin_stem melon_stem double_plant:half=lower
#endif
block.10009=leaves leaves2 oak_leaves spruce_leaves birch_leaves jungle_leaves acacia_leaves dark_oak_leaves azalea_leaves flowering_azalea_leaves mangrove_leaves cherry_leaves pale_oak_leaves
block.10013=vine pale_hanging_moss
block.10017=reeds attached_pumpkin_stem attached_melon_stem mangrove_propagule seagrass tall_seagrass kelp_plant kelp hanging_roots sugar_cane spore_blossom pink_petals pitcher_plant cobweb wildflowers
block.10021=double_plant:half=upper sunflower:half=upper lilac:half=upper rose_bush:half=upper peony:half=upper tall_grass:half=upper large_fern:half=upper
block.10024=
block.10028=
block.10032=stonebrick monster_egg:variant=stone_brick monster_egg:variant=mossy_brick monster_egg:variant=cracked_brick monster_egg:variant=chiseled_brick stone_bricks mossy_stone_bricks cracked_stone_bricks chiseled_stone_bricks infested_chiseled_stone_bricks infested_cracked_stone_bricks infested_mossy_stone_bricks infested_stone_bricks
#if MC_VERSION >= 11300
block.10033=mossy_stone_brick_wall stone_brick_wall mossy_stone_brick_slab stone_brick_slab stone_brick_stairs mossy_stone_brick_stairs
#else
block.10033=stone_slab:variant=stone_brick double_stone_slab:variant=stone_brick stone_brick_stairs
#endif
block.10037=anvil chipped_anvil damaged_anvil
block.10041=golden_rail powered_rail detector_rail rail activator_rail
#if MC_VERSION >= 11300
block.10045=cauldron hopper
block.10049=water_cauldron
#else
block.10045=cauldron:level=0 hopper
block.10049=cauldron:level=1 cauldron:level=2 cauldron:level=3
#endif
block.10053=powder_snow_cauldron
block.10056=lava_cauldron
block.10061=lever
block.10065=lectern
block.10068=lava flowing_lava
block.10072=fire
block.10076=soul_fire
#if MC_VERSION >= 11300
block.10080=stone infested_stone coal_ore smooth_stone
block.10081=stone_pressure_plate stone_button grindstone stonecutter stone_slab smooth_stone_slab stone_stairs
block.10084=granite
block.10085=granite_wall granite_slab granite_stairs
block.10088=diorite
block.10089=diorite_wall diorite_slab diorite_stairs
block.10092=andesite
block.10093=andesite_wall andesite_slab andesite_stairs
block.10096=polished_granite
block.10097=polished_granite_stairs polished_granite_slab
block.10100=polished_diorite
block.10101=polished_diorite_stairs polished_diorite_slab
block.10104=polished_andesite packed_mud mud_bricks bricks brick_block stone_slab:variant=brick double_stone_slab:variant=brick
block.10105=mud_brick_wall brick_wall polished_andesite_stairs polished_andesite_slab mud_brick_stairs mud_brick_slab brick_slab brick_stairs
#else
block.10080=stone:variant=stone monster_egg:variant=stone
block.10081=stone_pressure_plate stone_slab:variant=stone double_stone_slab:variant=stone
block.10084=stone:variant=granite
block.10088=stone:variant=diorite
block.10092=stone:variant=andesite
block.10096=stone:variant=smooth_granite
block.10100=stone:variant=smooth_diorite
block.10104=stone:variant=smooth_andesite bricks
block.10105=brick_wall brick_slab brick_stairs
#endif
block.10108=deepslate cobbled_deepslate infested_deepslate deepslate_coal_ore
block.10109=cobbled_deepslate_wall cobbled_deepslate_stairs cobbled_deepslate_slab heavy_core
block.10112=polished_deepslate deepslate_bricks cracked_deepslate_bricks deepslate_tiles cracked_deepslate_tiles chiseled_deepslate mud muddy_mangrove_roots
block.10113=polished_deepslate_wall deepslate_brick_wall deepslate_tile_wall polished_deepslate_stairs deepslate_brick_stairs deepslate_tile_stairs polished_deepslate_slab deepslate_brick_slab deepslate_tile_slab mangrove_roots
block.10116=calcite
block.10120=dripstone_block
block.10121=pointed_dripstone daylight_detector
#if MC_VERSION >= 11300
block.10124=grass_block:snowy=true podzol:snowy=true mycelium:snowy=true
block.10128=dirt coarse_dirt rooted_dirt podzol:snowy=false mycelium:snowy=false
block.10129=farmland:moisture=0 farmland:moisture=1 farmland:moisture=2 farmland:moisture=3 farmland:moisture=4 farmland:moisture=5 farmland:moisture=6
block.10132=grass_block:snowy=false
#else
block.10124=grass:snowy=true dirt:snowy=true mycelium:snowy=true
block.10128=dirt:snowy=false mycelium:snowy=false
block.10129=farmland:moisture=0 farmland:moisture=1 farmland:moisture=2 farmland:moisture=3 farmland:moisture=4 farmland:moisture=5 farmland:moisture=6
block.10132=grass:snowy=false
#endif
block.10137=farmland:moisture=7
block.10140=netherrack
block.10144=warped_nylium warped_wart_block
block.10148=crimson_nylium nether_wart_block
#if MC_VERSION >= 11300
block.10152=cobblestone mossy_cobblestone infested_cobblestone moss_block pale_moss_block furnace:lit=false smoker:lit=false blast_furnace:lit=false lodestone piston:extended=false sticky_piston:extended=false dispenser dropper
block.10153=cobblestone_wall mossy_cobblestone_wall piston:extended=true sticky_piston:extended=true piston_head moss_carpet pale_moss_carpet cobblestone_slab cobblestone_stairs mossy_cobblestone_stairs mossy_cobblestone_slab
#else
block.10152=cobblestone monster_egg:variant=cobblestone mossy_cobblestone furnace:lit=false piston sticky_piston dispenser dropper
block.10153=cobblestone_wall mossy_cobblestone_wall piston_head stone_slab:variant=cobblestone double_stone_slab:variant=cobblestone cobblestone_stairs
#endif
block.10156=planks:variant=oak oak_planks stripped_oak_log stripped_oak_wood bookshelf crafting_table
block.10157=tripwire_hook wooden_slab:variant=oak double_wooden_slab:variant=oak oak_slab petrified_oak_slab oak_stairs fence fence_gate oak_fence oak_fence_gate oak_button oak_pressure_plate trapdoor oak_trapdoor
block.10160=log:variant=oak oak_log oak_wood
block.10164=planks:variant=spruce spruce_planks stripped_spruce_log stripped_spruce_wood
block.10165=spruce_fence spruce_fence_gate spruce_button spruce_pressure_plate wooden_slab:variant=spruce double_wooden_slab:variant=spruce spruce_slab spruce_stairs spruce_trapdoor
block.10168=log:variant=spruce spruce_log spruce_wood
block.10172=planks:variant=birch birch_planks stripped_birch_log stripped_birch_wood loom chiseled_bookshelf
block.10173=birch_fence birch_fence_gate birch_button birch_pressure_plate wooden_slab:variant=birch double_wooden_slab:variant=birch birch_slab birch_stairs birch_trapdoor
block.10176=log:variant=birch birch_log birch_wood
block.10180=planks:variant=jungle jungle_planks stripped_jungle_log stripped_jungle_wood
block.10181=jungle_fence jungle_fence_gate jungle_button jungle_pressure_plate composter wooden_slab:variant=jungle double_wooden_slab:variant=jungle jungle_slab jungle_stairs jungle_trapdoor
block.10184=log:variant=jungle jungle_log jungle_wood
block.10188=planks:variant=acacia acacia_planks stripped_acacia_log stripped_acacia_wood
block.10189=acacia_fence acacia_fence_gate acacia_button acacia_pressure_plate wooden_slab:variant=acacia double_wooden_slab:variant=acacia acacia_slab acacia_stairs acacia_trapdoor
block.10192=log2:variant=acacia acacia_log acacia_wood
block.10196=planks:variant=dark_oak dark_oak_planks stripped_dark_oak_log stripped_dark_oak_wood
block.10197=dark_oak_fence dark_oak_fence_gate dark_oak_button dark_oak_pressure_plate wooden_slab:variant=dark_oak double_wooden_slab:variant=dark_oak dark_oak_slab dark_oak_stairs dark_oak_trapdoor
block.10200=log2:variant=dark_oak dark_oak_log dark_oak_wood
block.10204=mangrove_planks stripped_mangrove_log stripped_mangrove_wood
block.10205=mangrove_fence mangrove_fence_gate mangrove_button mangrove_pressure_plate mangrove_slab mangrove_stairs mangrove_trapdoor
block.10208=mangrove_log mangrove_wood
block.10212=crimson_planks stripped_crimson_stem stripped_crimson_hyphae
block.10213=crimson_fence crimson_fence_gate crimson_button crimson_pressure_plate crimson_slab crimson_stairs crimson_trapdoor
block.10216=crimson_stem crimson_hyphae
block.10220=warped_planks stripped_warped_stem stripped_warped_hyphae
block.10221=warped_fence warped_fence_gate warped_button warped_pressure_plate warped_slab warped_stairs warped_trapdoor
block.10224=warped_stem warped_hyphae
block.10228=bedrock
#if MC_VERSION >= 11300
block.10232=sand suspicious_sand
block.10236=red_sand
block.10240=sandstone chiseled_sandstone cut_sandstone smooth_sandstone
block.10241=sandstone_wall sandstone_slab cut_sandstone_slab sandstone_stairs smooth_sandstone_stairs smooth_sandstone_slab
#else
block.10232=sand:variant=sand
block.10236=sand:variant=red_sand
block.10240=sandstone chiseled_sandstone cut_sandstone smooth_sandstone
block.10241=stone_slab:variant=sandstone double_stone_slab:variant=sandstone sandstone_stairs
#endif
block.10244=red_sandstone smooth_red_sandstone chiseled_red_sandstone cut_red_sandstone
block.10245=red_sandstone_wall stone_slab2 double_stone_slab2 red_sandstone_slab cut_red_sandstone_slab red_sandstone_stairs smooth_red_sandstone_stairs smooth_red_sandstone_slab
block.10248=netherite_block
block.10252=ancient_debris
block.10257=iron_bars
block.10260=tnt fletching_table cartography_table smithing_table
block.10264=iron_block
block.10265=heavy_weighted_pressure_plate
block.10268=raw_iron_block
block.10272=iron_ore
block.10276=deepslate_iron_ore
block.10280=raw_copper_block
block.10284=copper_ore
block.10288=deepslate_copper_ore
block.10292=copper_block exposed_copper weathered_copper oxidized_copper cut_copper exposed_cut_copper weathered_cut_copper oxidized_cut_copper waxed_copper_block waxed_exposed_copper waxed_weathered_copper waxed_oxidized_copper waxed_cut_copper waxed_exposed_cut_copper waxed_weathered_cut_copper waxed_oxidized_cut_copper chiseled_copper exposed_chiseled_copper weathered_chiseled_copper oxidized_chiseled_copper waxed_chiseled_copper waxed_exposed_chiseled_copper waxed_weathered_chiseled_copper waxed_oxidized_chiseled_copper
block.10293=lightning_rod 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_stairs waxed_exposed_cut_copper_stairs waxed_weathered_cut_copper_stairs waxed_oxidized_cut_copper_stairs waxed_cut_copper_slab waxed_exposed_cut_copper_slab waxed_weathered_cut_copper_slab waxed_oxidized_cut_copper_slab copper_grate exposed_copper_grate weathered_copper_grate oxidized_copper_grate waxed_copper_grate waxed_exposed_copper_grate waxed_weathered_copper_grate waxed_oxidized_copper_grate
block.10296=raw_gold_block
block.10300=gold_ore
block.10304=deepslate_gold_ore
block.10308=nether_gold_ore
block.10312=gold_block
block.10313=light_weighted_pressure_plate
block.10316=diamond_block
block.10320=diamond_ore
block.10324=deepslate_diamond_ore
block.10328=amethyst_block budding_amethyst
block.10332=small_amethyst_bud medium_amethyst_bud large_amethyst_bud amethyst_cluster
block.10336=emerald_block
block.10340=emerald_ore
block.10344=deepslate_emerald_ore
block.10349=azalea flowering_azalea
block.10352=lapis_block
block.10356=lapis_ore
block.10360=deepslate_lapis_ore
block.10364=quartz_block chiseled_quartz_block smooth_quartz quartz_bricks quartz_pillar
#if MC_VERSION >= 11300
block.10365=quartz_slab quartz_stairs smooth_quartz_stairs smooth_quartz_slab
#else
block.10365=stone_slab:variant=quartz double_stone_slab:variant=quartz quartz_stairs
#endif
block.10368=quartz_ore nether_quartz_ore
block.10372=obsidian
block.10376=purpur_block purpur_pillar
block.10377=purpur_stairs purpur_slab purpur_double_slab
block.10380=snow_block
block.10381=snow_layer snow:layers=8 powder_snow
block.10384=packed_ice
block.10388=blue_ice
block.10392=pumpkin carved_pumpkin
block.10396=lit_pumpkin jack_o_lantern
block.10401=sea_pickle:waterlogged=false
block.10404=sea_pickle:waterlogged=true
block.10408=basalt polished_basalt smooth_basalt
block.10412=glowstone light
block.10416=nether_brick nether_bricks cracked_nether_bricks chiseled_nether_bricks
#if MC_VERSION >= 11300
block.10417=nether_brick_wall nether_brick_fence nether_brick_slab nether_brick_stairs
#else
block.10417=nether_brick_fence stone_slab:variant=nether_brick double_stone_slab:variant=nether_brick nether_brick_stairs
#endif
block.10420=red_nether_bricks
block.10421=red_nether_brick_wall red_nether_brick_slab red_nether_brick_stairs
block.10424=melon_block melon
block.10428=end_stone end_bricks end_stone_bricks
block.10429=end_stone_brick_wall end_stone_brick_stairs end_stone_brick_slab
block.10432=hardened_clay stained_hardened_clay terracotta white_terracotta orange_terracotta magenta_terracotta light_blue_terracotta yellow_terracotta lime_terracotta pink_terracotta gray_terracotta light_gray_terracotta cyan_terracotta purple_terracotta blue_terracotta brown_terracotta green_terracotta red_terracotta black_terracotta
block.10436=white_glazed_terracotta orange_glazed_terracotta magenta_glazed_terracotta light_blue_glazed_terracotta yellow_glazed_terracotta lime_glazed_terracotta pink_glazed_terracotta gray_glazed_terracotta light_gray_glazed_terracotta cyan_glazed_terracotta purple_glazed_terracotta blue_glazed_terracotta brown_glazed_terracotta green_glazed_terracotta red_glazed_terracotta black_glazed_terracotta
block.10440=prismarine prismarine_bricks
block.10441=prismarine_wall prismarine_slab prismarine_stairs prismarine_brick_slab prismarine_brick_stairs
block.10444=dark_prismarine
block.10445=dark_prismarine_stairs dark_prismarine_slab
block.10448=sea_lantern
block.10452=magma magma_block
block.10456=command_block chain_command_block repeating_command_block
block.10460=concrete white_concrete orange_concrete magenta_concrete light_blue_concrete yellow_concrete pink_concrete gray_concrete light_gray_concrete cyan_concrete purple_concrete blue_concrete brown_concrete green_concrete red_concrete black_concrete
block.10464=concrete_powder white_concrete_powder orange_concrete_powder magenta_concrete_powder light_blue_concrete_powder yellow_concrete_powder lime_concrete_powder pink_concrete_powder gray_concrete_powder light_gray_concrete_powder cyan_concrete_powder purple_concrete_powder blue_concrete_powder brown_concrete_powder green_concrete_powder red_concrete_powder black_concrete_powder
block.10468=tube_coral_block brain_coral_block bubble_coral_block fire_coral_block horn_coral_block dead_tube_coral_block dead_brain_coral_block dead_bubble_coral_block dead_fire_coral_block dead_horn_coral_block
block.10473=tube_coral brain_coral bubble_coral fire_coral horn_coral tube_coral_fan brain_coral_fan bubble_coral_fan fire_coral_fan horn_coral_fan dead_tube_coral dead_brain_coral dead_bubble_coral dead_fire_coral dead_horn_coral dead_tube_coral_fan dead_brain_coral_fan dead_bubble_coral_fan dead_fire_coral_fan dead_horn_coral_fan tube_coral_wall_fan brain_coral_wall_fan bubble_coral_wall_fan fire_coral_wall_fan horn_coral_wall_fan dead_tube_coral_wall_fan dead_brain_coral_wall_fan dead_bubble_coral_wall_fan dead_fire_coral_wall_fan dead_horn_coral_wall_fan
block.10476=crying_obsidian
block.10480=blackstone polished_blackstone chiseled_polished_blackstone polished_blackstone_bricks cracked_polished_blackstone_bricks
block.10481=polished_blackstone_brick_wall polished_blackstone_wall blackstone_wall polished_blackstone_button polished_blackstone_pressure_plate blackstone_slab blackstone_stairs polished_blackstone_slab polished_blackstone_stairs polished_blackstone_brick_slab polished_blackstone_brick_stairs
block.10484=gilded_blackstone
block.10489=waterlily lily_pad frogspawn
block.10493=dirt_path grass_path
block.10496=torch wall_torch
block.10500=end_rod
block.10505=chorus_plant
block.10508=chorus_flower:age=0 chorus_flower:age=1 chorus_flower:age=2 chorus_flower:age=3 chorus_flower:age=4
block.10512=chorus_flower:age=5
block.10516=lit_furnace furnace:lit=true
block.10521=cactus
block.10524=noteblock note_block jukebox
block.10528=soul_torch soul_wall_torch
#if MC_VERSION >= 11300
block.10532=brown_mushroom_block
block.10536=red_mushroom_block
block.10540=mushroom_stem
#else
block.10532=
block.10536=
block.10540=
#endif
block.10544=glow_lichen
block.10548=enchanting_table
block.10553=end_portal_frame:eye=false
block.10556=end_portal_frame:eye=true
block.10560=lantern
block.10564=soul_lantern
block.10569=turtle_egg sniffer_egg
block.10572=dragon_egg
block.10576=smoker:lit=true
block.10580=blast_furnace:lit=true
block.10584=coal_block
block.10588=respawn_anchor:charges=0
block.10592=respawn_anchor:charges=1 respawn_anchor:charges=2 respawn_anchor:charges=3 respawn_anchor:charges=4
block.10596=redstone_wire:power=1 redstone_wire:power=2 redstone_wire:power=3 redstone_wire:power=4 redstone_wire:power=5 redstone_wire:power=6 redstone_wire:power=7 redstone_wire:power=8 redstone_wire:power=9 redstone_wire:power=10 redstone_wire:power=11 redstone_wire:power=12 redstone_wire:power=13 redstone_wire:power=14 redstone_wire:power=15
block.10601=redstone_wire:power=0
block.10604=redstone_torch:lit=true redstone_wall_torch:lit=true
block.10605=redstone_torch:lit=false redstone_wall_torch:lit=false
block.10608=redstone_block
#if MC_VERSION >= 11300
block.10612=redstone_ore:lit=false
block.10616=redstone_ore:lit=true
#else
block.10612=redstone_ore
block.10616=lit_redstone_ore
#endif
block.10620=deepslate_redstone_ore:lit=false
block.10624=deepslate_redstone_ore:lit=true
block.10629=cave_vines_plant:berries=false cave_vines:berries=false
block.10632=cave_vines_plant:berries=true cave_vines:berries=true
#if MC_VERSION >= 11300
block.10636=redstone_lamp:lit=false
block.10640=redstone_lamp:lit=true
#else
block.10636=redstone_lamp
block.10640=lit_redstone_lamp
#endif
block.10644=powered_repeater powered_comparator repeater:powered=true comparator:mode=compare:powered=true comparator:mode=subtract:powered=true
block.10645=unpowered_repeater unpowered_comparator repeater:powered=false comparator:mode=compare:powered=false
block.10646=comparator:mode=subtract:powered=false
block.10648=shroomlight
block.10652=campfire:lit=true
block.10656=soul_campfire:lit=true
block.10661=campfire:lit=false soul_campfire:lit=false
block.10664=observer
block.10668=wool white_wool orange_wool magenta_wool light_blue_wool yellow_wool pink_wool gray_wool light_gray_wool cyan_wool purple_wool blue_wool brown_wool green_wool red_wool black_wool
block.10669=carpet white_carpet orange_carpet magenta_carpet light_blue_carpet yellow_carpet pink_carpet gray_carpet light_gray_carpet cyan_carpet purple_carpet blue_carpet brown_carpet green_carpet red_carpet black_carpet tripwire
block.10672=bone_block
block.10676=barrel beehive bee_nest honeycomb_block
block.10680=ochre_froglight
block.10684=verdant_froglight
block.10688=pearlescent_froglight
block.10692=reinforced_deepslate
block.10696=sculk sculk_vein sculk_sensor:sculk_sensor_phase=inactive sculk_sensor:sculk_sensor_phase=cooldown sculk_catalyst
block.10700=sculk_shrieker
block.10704=sculk_sensor:sculk_sensor_phase=active
block.10708=mob_spawner spawner
block.10712=tuff chiseled_tuff polished_tuff tuff_bricks chiseled_tuff_bricks
block.10713=tuff_stairs tuff_slab tuff_wall polished_tuff_stairs polished_tuff_slab polished_tuff_wall tuff_brick_stairs tuff_brick_slab tuff_brick_wall
block.10716=clay
block.10721=ladder
block.10724=gravel suspicious_gravel
block.10729=flower_pot potted_red_mushroom potted_brown_mushroom potted_cactus potted_bamboo potted_flowering_azalea_bush potted_azalea_bush
block.10733=potted_dandelion potted_poppy potted_blue_orchid potted_allium potted_azure_bluet potted_red_tulip potted_orange_tulip potted_white_tulip potted_pink_tulip potted_oxeye_daisy potted_cornflower potted_lily_of_the_valley potted_wither_rose potted_oak_sapling potted_spruce_sapling potted_birch_sapling potted_jungle_sapling potted_acacia_sapling potted_dark_oak_sapling potted_mangrove_propagule potted_fern potted_dead_bush potted_crimson_roots potted_warped_roots pitcher_crop potted_cherry_sapling potted_pale_oak_sapling potted_closed_eyeblossom
block.10736=structure_block jigsaw test_instance_block test_block
block.10741=chain
block.10744=soul_sand soul_soil
block.10748=dried_kelp_block
block.10753=bamboo
block.10756=bamboo_block stripped_bamboo_block bamboo_planks bamboo_mosaic
block.10757=bamboo_fence bamboo_fence_gate bamboo_pressure_plate bamboo_button scaffolding bamboo_slab bamboo_mosaic_slab bamboo_stairs bamboo_mosaic_stairs bamboo_trapdoor
block.10760=cherry_planks stripped_cherry_log stripped_cherry_wood
block.10761=cherry_fence cherry_fence_gate cherry_pressure_plate cherry_button cherry_stairs cherry_slab cherry_trapdoor
block.10764=cherry_log cherry_wood
block.10769=torchflower
block.10773=potted_torchflower
block.10776=warped_fungus crimson_fungus
block.10780=potted_crimson_fungus potted_warped_fungus
block.10784=calibrated_sculk_sensor:sculk_sensor_phase=inactive calibrated_sculk_sensor:sculk_sensor_phase=cooldown
block.10788=calibrated_sculk_sensor:sculk_sensor_phase=active
block.10793=wooden_door oak_door
block.10797=spruce_door
block.10801=birch_door
block.10805=jungle_door
block.10809=acacia_door
block.10813=dark_oak_door
block.10817=mangrove_door
block.10821=crimson_door
block.10825=warped_door
block.10829=bamboo_door
block.10833=cherry_door
block.10836=brewing_stand
block.10840=lime_concrete
block.10844=lime_wool
block.10845=lime_carpet
block.10848=crafter
block.10852=copper_bulb:lit=true waxed_copper_bulb:lit=true exposed_copper_bulb:lit=true waxed_exposed_copper_bulb:lit=true
block.10854=copper_bulb:lit=false waxed_copper_bulb:lit=false exposed_copper_bulb:lit=false waxed_exposed_copper_bulb:lit=false
block.10856=weathered_copper_bulb:lit=true waxed_weathered_copper_bulb:lit=true oxidized_copper_bulb:lit=true waxed_oxidized_copper_bulb:lit=true
block.10858=weathered_copper_bulb:lit=false waxed_weathered_copper_bulb:lit=false oxidized_copper_bulb:lit=false waxed_oxidized_copper_bulb:lit=false
block.10861=copper_door exposed_copper_door weathered_copper_door oxidized_copper_door waxed_copper_door waxed_exposed_copper_door waxed_weathered_copper_door waxed_oxidized_copper_door
block.10865=copper_trapdoor exposed_copper_trapdoor weathered_copper_trapdoor oxidized_copper_trapdoor waxed_copper_trapdoor waxed_exposed_copper_trapdoor waxed_weathered_copper_trapdoor waxed_oxidized_copper_trapdoor
block.10868=trial_spawner:ominous=false:trial_spawner_state=active trial_spawner:ominous=false:trial_spawner_state=ejecting_reward trial_spawner:ominous=false:trial_spawner_state=waiting_for_players trial_spawner:ominous=false:trial_spawner_state=waiting_for_reward_ejection vault:ominous=false:vault_state=active vault:ominous=false:vault_state=ejecting vault:ominous=false:vault_state=unlocking
block.10872=vault:ominous=false:vault_state=inactive vault:ominous=true:vault_state=inactive
block.10873=trial_spawner:ominous=false:trial_spawner_state=cooldown trial_spawner:ominous=false:trial_spawner_state=inactive trial_spawner:ominous=true:trial_spawner_state=cooldown trial_spawner:ominous=true:trial_spawner_state=inactive
block.10876=trial_spawner:ominous=true:trial_spawner_state=active trial_spawner:ominous=true:trial_spawner_state=ejecting_reward trial_spawner:ominous=true:trial_spawner_state=waiting_for_players trial_spawner:ominous=true:trial_spawner_state=waiting_for_reward_ejection vault:ominous=true:vault_state=active vault:ominous=true:vault_state=ejecting vault:ominous=true:vault_state=unlocking
block.10880=
block.10884=weeping_vines_plant
block.10885=weeping_vines twisting_vines_plant twisting_vines
block.10888=hay_block
block.10893=iron_door
block.10897=iron_trapdoor
block.10900=candle:lit=true candle_cake:lit=true light_gray_candle:lit=true light_gray_candle_cake:lit=true gray_candle:lit=true gray_candle_cake:lit=true black_candle:lit=true black_candle_cake:lit=true white_candle:lit=true white_candle_cake:lit=true brown_candle:lit=true brown_candle_cake:lit=true
block.10902=red_candle:lit=true red_candle_cake:lit=true
block.10904=orange_candle:lit=true orange_candle_cake:lit=true
block.10906=yellow_candle:lit=true yellow_candle_cake:lit=true
block.10908=lime_candle:lit=true lime_candle_cake:lit=true
block.10910=green_candle:lit=true green_candle_cake:lit=true
block.10912=cyan_candle:lit=true cyan_candle_cake:lit=true
block.10914=light_blue_candle:lit=true light_blue_candle_cake:lit=true
block.10916=blue_candle:lit=true blue_candle_cake:lit=true
block.10918=purple_candle:lit=true purple_candle_cake:lit=true
block.10920=magenta_candle:lit=true magenta_candle_cake:lit=true
block.10922=pink_candle:lit=true pink_candle_cake:lit=true
block.10924=
block.10928=pale_oak_planks stripped_pale_oak_log stripped_pale_oak_wood
block.10929=pale_oak_fence pale_oak_fence_gate pale_oak_pressure_plate pale_oak_button pale_oak_stairs pale_oak_slab pale_oak_trapdoor
block.10932=pale_oak_log pale_oak_wood
block.10937=pale_oak_door
block.10940=resin_bricks chiseled_resin_bricks resin_block
block.10941=resin_clump resin_brick_stairs resin_brick_slab resin_brick_wall
#if MC_VERSION >= 12105
block.10944=creaking_heart:creaking_heart_state=uprooted
block.10948=creaking_heart:creaking_heart_state=dormant creaking_heart:creaking_heart_state=awake
#else
block.10944=creaking_heart:active=false
block.10948=creaking_heart:active=true
#endif
block.10953=snow:layers=1 snow:layers=2 snow:layers=3 snow:layers=4 snow:layers=5 snow:layers=6 snow:layers=7
block.10956=target:power=0
block.10960=target:power=1 target:power=2 target:power=3 target:power=4 target:power=5 target:power=6 target:power=7 target:power=8 target:power=9 target:power=10 target:power=11 target:power=12 target:power=13 target:power=14 target:power=15
block.10964=sponge
block.10968=wet_sponge
block.10972=firefly_bush
block.10976=open_eyeblossom
block.10980=potted_open_eyeblossom
block.20000=
block.30000=
block.30004=
block.30008=tinted_glass
block.30012=slime slime_block
block.30016=honey_block
block.30020=portal nether_portal
block.31000=stained_glass white_stained_glass
block.31001=stained_glass_pane white_stained_glass_pane
block.31002=orange_stained_glass
block.31003=orange_stained_glass_pane
block.31004=magenta_stained_glass
block.31005=magenta_stained_glass_pane
block.31006=light_blue_stained_glass
block.31007=light_blue_stained_glass_pane works
block.31008=yellow_stained_glass
block.31009=yellow_stained_glass_pane
block.31010=lime_stained_glass
block.31011=lime_stained_glass_pane
block.31012=pink_stained_glass
block.31013=pink_stained_glass_pane
block.31014=gray_stained_glass
block.31015=gray_stained_glass_pane
block.31016=light_gray_stained_glass
block.31017=light_gray_stained_glass_pane
block.31018=cyan_stained_glass
block.31019=cyan_stained_glass_pane
block.31020=purple_stained_glass
block.31021=purple_stained_glass_pane
block.31022=blue_stained_glass
block.31023=blue_stained_glass_pane
block.31024=brown_stained_glass
block.31025=brown_stained_glass_pane
block.31026=green_stained_glass
block.31027=green_stained_glass_pane
block.31028=red_stained_glass
block.31029=red_stained_glass_pane
block.31030=black_stained_glass
block.31031=black_stained_glass_pane
block.32000=water flowing_water
block.32004=ice frosted_ice
block.32008=glass
block.32012=glass_pane
block.32016=beacon
layer.translucent=glass glass_pane beacon

View File

@ -0,0 +1,14 @@
#---------------------------------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------------------------
dimension.world0=minecraft:overworld
dimension.world-1=minecraft:the_nether
dimension.world1=minecraft:the_end
dimension.world2=theabyss:frost_world
dimension.stop= *

View File

@ -0,0 +1,40 @@
#---------------------------------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------------------------
#if MC_VERSION >= 11300
#1.13 And Above Mapping:
entity.50000=end_crystal
entity.50004=lightning_bolt
entity.50008=item_frame glow_item_frame
entity.50012=iron_golem
entity.50016=player
entity.50020=blaze
entity.50024=creeper
entity.50028=drowned
entity.50032=guardian
entity.50036=elder_guardian
entity.50040=endermite
entity.50044=ghast
entity.50048=glow_squid
entity.50052=magma_cube
entity.50056=stray
entity.50060=vex
entity.50064=witch
entity.50068=wither wither_skull
entity.50072=experience_orb
entity.50076=boat oak_boat spruce_boat birch_boat jungle_boat acacia_boat dark_oak_boat mangrove_boat cherry_boat pale_oak_boat chest_boat oak_chest_boat spruce_chest_boat birch_chest_boat jungle_chest_boat acacia_chest_boat dark_oak_chest_boat mangrove_chest_boat cherry_chest_boat pale_oak_chest_boat
entity.50080=allay
entity.50084=slime chicken
entity.50088=entity_flame
entity.50092=trident
entity.50096=minecart chest_minecart command_block_minecart furnace_minecart hopper_minecart spawner_minecart tnt_minecart
entity.50100=bogged
entity.50104=piglin piglin_brute zombified_piglin hoglin zoglin
entity.50108=creaking
entity.50112=name_tag
#else
#1.12 And Below Mapping:
#endif

View File

@ -0,0 +1,65 @@
#---------------------------------------------------------------------------------------------------------------------
# 40XXX - Items
# 44XXX - Items for colored handheld lighting
# 45XXX - Items for other Iris exclusive features
#---------------------------------------------------------------------------------------------------------------------
item.40000=spider_eye fermented_spider_eye
item.40004=filled_map
item.40008=air
item.44002=torch
item.44003=end_rod
item.44004=beacon
item.44007=ochre_froglight
item.44008=verdant_froglight
item.44009=pearlescent_froglight
item.44010=glowstone
item.44011=jack_o_lantern
item.44012=lantern
item.44015=campfire
item.44018=sea_lantern
item.44019=shroomlight
item.44026=crying_obsidian
item.44028=soul_torch
item.44029=soul_lantern
item.44030=soul_campfire
item.44033=enchanting_table
item.44034=glow_lichen
item.44035=redstone_torch
item.44036=small_amethyst_bud medium_amethyst_bud large_amethyst_bud amethyst_cluster
item.44037=magma_block
item.44038=dragon_egg
item.44039=chorus_flower
item.44040=brewing_stand
item.44041=redstone_block
item.45000=trim_emerald trim_redstone trim_lapis trim_amethyst trim_quartz trim_diamond trim_gold trim_iron trim_copper trim_resin
item.45004=wooden_shovel wooden_pickaxe wooden_axe wooden_hoe wooden_sword bow fishing_rod
item.45008=stone_shovel stone_pickaxe stone_axe stone_hoe stone_sword
item.45012=iron_shovel iron_pickaxe iron_axe iron_hoe iron_sword iron_helmet iron_chestplate iron_leggings iron_boots iron_ingot iron_nugget iron_horse_armor flint_and_steel flint spyglass shears chainmail_helmet chainmail_chestplate chainmail_leggings chainmail_boots
item.45016=golden_shovel golden_pickaxe golden_axe golden_hoe golden_sword golden_helmet golden_chestplate golden_leggings golden_boots gold_ingot gold_nugget golden_apple enchanted_golden_apple golden_carrot golden_horse_armor copper_ingot
item.45020=diamond_shovel diamond_pickaxe diamond_axe diamond_hoe diamond_sword diamond_helmet diamond_chestplate diamond_leggings diamond_boots diamond diamond_horse_armor emerald
item.45024=netherite_shovel netherite_pickaxe netherite_axe netherite_hoe netherite_sword netherite_helmet netherite_chestplate netherite_leggings netherite_boots netherite_ingot mace breeze_rod
item.45028=trident
item.45032=lava_bucket
item.45036=bucket water_bucket cod_bucket salmon_bucket tropical_fish_bucket pufferfish_bucket axolotl_bucket tadpole_bucket milk_bucket powder_snow_bucket
item.45040=blaze_rod blaze_powder
item.45044=experience_bottle glow_ink_sac
item.45048=fire_charge
item.45052=chorus_fruit
item.45056=amethyst_shard
item.45060=shield
item.45064=turtle_helmet
item.45068=ender_pearl
item.45072=ender_eye
item.45076=clock
item.45080=compass
item.45084=echo_shard recovery_compass music_disc_5
item.45088=nether_star
item.45092=end_crystal
item.45096=glow_berries
item.45100=glowstone_dust
item.45104=prismarine_crystals
item.45108=totem_of_undying
item.45112=trial_key ominous_trial_key

View File

@ -0,0 +1,194 @@
#ifdef FXAA_TAA_INTERACTION
ivec2 neighbourhoodOffsets[8] = ivec2[8](
ivec2( 1, 1),
ivec2( 1,-1),
ivec2(-1, 1),
ivec2(-1,-1),
ivec2( 1, 0),
ivec2( 0, 1),
ivec2(-1, 0),
ivec2( 0,-1)
);
#endif
//FXAA 3.11 from http://blog.simonrodriguez.fr/articles/30-07-2016_implementing_fxaa.html
float quality[12] = float[12] (1.0, 1.0, 1.0, 1.0, 1.0, 1.5, 2.0, 2.0, 2.0, 2.0, 4.0, 8.0);
void FXAA311(inout vec3 color) {
float edgeThresholdMin = 0.03125;
float edgeThresholdMax = 0.0625;
float subpixelQuality = 0.75;
int iterations = 12;
vec2 view = 1.0 / vec2(viewWidth, viewHeight);
float lumaCenter = GetLuminance(color);
float lumaDown = GetLuminance(texelFetch(colortex3, texelCoord + ivec2( 0, -1), 0).rgb);
float lumaUp = GetLuminance(texelFetch(colortex3, texelCoord + ivec2( 0, 1), 0).rgb);
float lumaLeft = GetLuminance(texelFetch(colortex3, texelCoord + ivec2(-1, 0), 0).rgb);
float lumaRight = GetLuminance(texelFetch(colortex3, texelCoord + ivec2( 1, 0), 0).rgb);
float lumaMin = min(lumaCenter, min(min(lumaDown, lumaUp), min(lumaLeft, lumaRight)));
float lumaMax = max(lumaCenter, max(max(lumaDown, lumaUp), max(lumaLeft, lumaRight)));
float lumaRange = lumaMax - lumaMin;
if (lumaRange > max(edgeThresholdMin, lumaMax * edgeThresholdMax)) {
float lumaDownLeft = GetLuminance(texelFetch(colortex3, texelCoord + ivec2(-1, -1), 0).rgb);
float lumaUpRight = GetLuminance(texelFetch(colortex3, texelCoord + ivec2( 1, 1), 0).rgb);
float lumaUpLeft = GetLuminance(texelFetch(colortex3, texelCoord + ivec2(-1, 1), 0).rgb);
float lumaDownRight = GetLuminance(texelFetch(colortex3, texelCoord + ivec2( 1, -1), 0).rgb);
float lumaDownUp = lumaDown + lumaUp;
float lumaLeftRight = lumaLeft + lumaRight;
float lumaLeftCorners = lumaDownLeft + lumaUpLeft;
float lumaDownCorners = lumaDownLeft + lumaDownRight;
float lumaRightCorners = lumaDownRight + lumaUpRight;
float lumaUpCorners = lumaUpRight + lumaUpLeft;
float edgeHorizontal = abs(-2.0 * lumaLeft + lumaLeftCorners ) +
abs(-2.0 * lumaCenter + lumaDownUp ) * 2.0 +
abs(-2.0 * lumaRight + lumaRightCorners);
float edgeVertical = abs(-2.0 * lumaUp + lumaUpCorners ) +
abs(-2.0 * lumaCenter + lumaLeftRight ) * 2.0 +
abs(-2.0 * lumaDown + lumaDownCorners );
bool isHorizontal = (edgeHorizontal >= edgeVertical);
float luma1 = isHorizontal ? lumaDown : lumaLeft;
float luma2 = isHorizontal ? lumaUp : lumaRight;
float gradient1 = luma1 - lumaCenter;
float gradient2 = luma2 - lumaCenter;
bool is1Steepest = abs(gradient1) >= abs(gradient2);
float gradientScaled = 0.25 * max(abs(gradient1), abs(gradient2));
float stepLength = isHorizontal ? view.y : view.x;
float lumaLocalAverage = 0.0;
if (is1Steepest) {
stepLength = - stepLength;
lumaLocalAverage = 0.5 * (luma1 + lumaCenter);
} else {
lumaLocalAverage = 0.5 * (luma2 + lumaCenter);
}
vec2 currentUv = texCoord;
if (isHorizontal) {
currentUv.y += stepLength * 0.5;
} else {
currentUv.x += stepLength * 0.5;
}
vec2 offset = isHorizontal ? vec2(view.x, 0.0) : vec2(0.0, view.y);
vec2 uv1 = currentUv - offset;
vec2 uv2 = currentUv + offset;
float lumaEnd1 = GetLuminance(texture2D(colortex3, uv1).rgb);
float lumaEnd2 = GetLuminance(texture2D(colortex3, uv2).rgb);
lumaEnd1 -= lumaLocalAverage;
lumaEnd2 -= lumaLocalAverage;
bool reached1 = abs(lumaEnd1) >= gradientScaled;
bool reached2 = abs(lumaEnd2) >= gradientScaled;
bool reachedBoth = reached1 && reached2;
if (!reached1) {
uv1 -= offset;
}
if (!reached2) {
uv2 += offset;
}
if (!reachedBoth) {
for (int i = 2; i < iterations; i++) {
if (!reached1) {
lumaEnd1 = GetLuminance(texture2D(colortex3, uv1).rgb);
lumaEnd1 = lumaEnd1 - lumaLocalAverage;
}
if (!reached2) {
lumaEnd2 = GetLuminance(texture2D(colortex3, uv2).rgb);
lumaEnd2 = lumaEnd2 - lumaLocalAverage;
}
reached1 = abs(lumaEnd1) >= gradientScaled;
reached2 = abs(lumaEnd2) >= gradientScaled;
reachedBoth = reached1 && reached2;
if (!reached1) {
uv1 -= offset * quality[i];
}
if (!reached2) {
uv2 += offset * quality[i];
}
if (reachedBoth) break;
}
}
float distance1 = isHorizontal ? (texCoord.x - uv1.x) : (texCoord.y - uv1.y);
float distance2 = isHorizontal ? (uv2.x - texCoord.x) : (uv2.y - texCoord.y);
bool isDirection1 = distance1 < distance2;
float distanceFinal = min(distance1, distance2);
float edgeThickness = (distance1 + distance2);
float pixelOffset = - distanceFinal / edgeThickness + 0.5;
bool isLumaCenterSmaller = lumaCenter < lumaLocalAverage;
bool correctVariation = ((isDirection1 ? lumaEnd1 : lumaEnd2) < 0.0) != isLumaCenterSmaller;
float finalOffset = correctVariation ? pixelOffset : 0.0;
float lumaAverage = (1.0 / 12.0) * (2.0 * (lumaDownUp + lumaLeftRight) + lumaLeftCorners + lumaRightCorners);
float subPixelOffset1 = clamp(abs(lumaAverage - lumaCenter) / lumaRange, 0.0, 1.0);
float subPixelOffset2 = (-2.0 * subPixelOffset1 + 3.0) * subPixelOffset1 * subPixelOffset1;
float subPixelOffsetFinal = subPixelOffset2 * subPixelOffset2 * subpixelQuality;
finalOffset = max(finalOffset, subPixelOffsetFinal);
// Compute the final UV coordinates.
vec2 finalUv = texCoord;
if (isHorizontal) {
finalUv.y += finalOffset * stepLength;
} else {
finalUv.x += finalOffset * stepLength;
}
#if defined TAA && defined FXAA_TAA_INTERACTION && TAA_MODE == 1
// Less FXAA when moving
vec3 newColor = texture2D(colortex3, finalUv).rgb;
float skipFactor = min1(
20.0 * length(cameraPosition - previousCameraPosition)
#ifdef TAA_MOVEMENT_IMPROVEMENT_FILTER
+ 0.25 // Catmull-Rom sampling gives us headroom to still do a bit of fxaa
#endif
);
float z0 = texelFetch(depthtex0, texelCoord, 0).r;
float z1 = texelFetch(depthtex1, texelCoord, 0).r;
bool edge = false;
for (int i = 0; i < 8; i++) {
ivec2 texelCoordM = texelCoord + neighbourhoodOffsets[i];
float z0Check = texelFetch(depthtex0, texelCoordM, 0).r;
float z1Check = texelFetch(depthtex1, texelCoordM, 0).r;
if (max(abs(GetLinearDepth(z0Check) - GetLinearDepth(z0)), abs(GetLinearDepth(z1Check) - GetLinearDepth(z1))) > 0.09) {
edge = true;
break;
}
}
if (edge) skipFactor = 0.0;
if (dot(texelFetch(colortex2, texelCoord, 0).rgb, vec3(1.0)) < 0.01) skipFactor = 0.0;
color = mix(newColor, color, skipFactor);
#else
color = texture2D(colortex3, finalUv).rgb;
#endif
}
}

View File

@ -0,0 +1,19 @@
// Jitter offset from Chocapic13
vec2 jitterOffsets[8] = vec2[8](
vec2( 0.125,-0.375),
vec2(-0.125, 0.375),
vec2( 0.625, 0.125),
vec2( 0.375,-0.625),
vec2(-0.625, 0.625),
vec2(-0.875,-0.125),
vec2( 0.375,-0.875),
vec2( 0.875, 0.875)
);
vec2 TAAJitter(vec2 coord, float w) {
vec2 offset = jitterOffsets[int(framemod8)] * (w / vec2(viewWidth, viewHeight));
#if TAA_MODE == 1 && !defined DH_TERRAIN && !defined DH_WATER
offset *= 0.125;
#endif
return coord + offset;
}

View File

@ -0,0 +1,177 @@
#if TAA_MODE == 1
float blendMinimum = 0.3;
float blendVariable = 0.2;
float blendConstant = 0.7;
float regularEdge = 20.0;
float extraEdgeMult = 3.0;
#elif TAA_MODE == 2
float blendMinimum = 0.6;
float blendVariable = 0.2;
float blendConstant = 0.7;
float regularEdge = 5.0;
float extraEdgeMult = 3.0;
#endif
#ifdef TAA_MOVEMENT_IMPROVEMENT_FILTER
//Catmull-Rom sampling from Filmic SMAA presentation
vec3 textureCatmullRom(sampler2D colortex, vec2 texcoord, vec2 view) {
vec2 position = texcoord * view;
vec2 centerPosition = floor(position - 0.5) + 0.5;
vec2 f = position - centerPosition;
vec2 f2 = f * f;
vec2 f3 = f * f2;
float c = 0.7;
vec2 w0 = -c * f3 + 2.0 * c * f2 - c * f;
vec2 w1 = (2.0 - c) * f3 - (3.0 - c) * f2 + 1.0;
vec2 w2 = -(2.0 - c) * f3 + (3.0 - 2.0 * c) * f2 + c * f;
vec2 w3 = c * f3 - c * f2;
vec2 w12 = w1 + w2;
vec2 tc12 = (centerPosition + w2 / w12) / view;
vec2 tc0 = (centerPosition - 1.0) / view;
vec2 tc3 = (centerPosition + 2.0) / view;
vec4 color = vec4(texture2DLod(colortex, vec2(tc12.x, tc0.y ), 0).rgb, 1.0) * (w12.x * w0.y ) +
vec4(texture2DLod(colortex, vec2(tc0.x, tc12.y), 0).rgb, 1.0) * (w0.x * w12.y) +
vec4(texture2DLod(colortex, vec2(tc12.x, tc12.y), 0).rgb, 1.0) * (w12.x * w12.y) +
vec4(texture2DLod(colortex, vec2(tc3.x, tc12.y), 0).rgb, 1.0) * (w3.x * w12.y) +
vec4(texture2DLod(colortex, vec2(tc12.x, tc3.y ), 0).rgb, 1.0) * (w12.x * w3.y );
return color.rgb / color.a;
}
#endif
// Previous frame reprojection from Chocapic13
vec2 Reprojection(vec4 viewPos1) {
vec4 pos = gbufferModelViewInverse * viewPos1;
vec4 previousPosition = pos + vec4(cameraPosition - previousCameraPosition, 0.0);
previousPosition = gbufferPreviousModelView * previousPosition;
previousPosition = gbufferPreviousProjection * previousPosition;
return previousPosition.xy / previousPosition.w * 0.5 + 0.5;
}
vec3 ClipAABB(vec3 q, vec3 aabb_min, vec3 aabb_max){
vec3 p_clip = 0.5 * (aabb_max + aabb_min);
vec3 e_clip = 0.5 * (aabb_max - aabb_min) + 0.00000001;
vec3 v_clip = q - vec3(p_clip);
vec3 v_unit = v_clip.xyz / e_clip;
vec3 a_unit = abs(v_unit);
float ma_unit = max(a_unit.x, max(a_unit.y, a_unit.z));
if (ma_unit > 1.0)
return vec3(p_clip) + v_clip / ma_unit;
else
return q;
}
ivec2 neighbourhoodOffsets[8] = ivec2[8](
ivec2( 1, 1),
ivec2( 1,-1),
ivec2(-1, 1),
ivec2(-1,-1),
ivec2( 1, 0),
ivec2( 0, 1),
ivec2(-1, 0),
ivec2( 0,-1)
);
void NeighbourhoodClamping(vec3 color, inout vec3 tempColor, float z0, float z1, inout float edge) {
vec3 minclr = color;
vec3 maxclr = minclr;
int cc = 2;
ivec2 texelCoordM1 = clamp(texelCoord, ivec2(cc), ivec2(view) - cc); // Fixes screen edges
for (int i = 0; i < 8; i++) {
ivec2 texelCoordM2 = texelCoordM1 + neighbourhoodOffsets[i];
float z0Check = texelFetch(depthtex0, texelCoordM2, 0).r;
float z1Check = texelFetch(depthtex1, texelCoordM2, 0).r;
if (max(abs(GetLinearDepth(z0Check) - GetLinearDepth(z0)), abs(GetLinearDepth(z1Check) - GetLinearDepth(z1))) > 0.09) {
edge = regularEdge;
if (int(texelFetch(colortex6, texelCoordM2, 0).g * 255.1) == 253) // Reduced Edge TAA
edge *= extraEdgeMult;
}
vec3 clr = texelFetch(colortex3, texelCoordM2, 0).rgb;
minclr = min(minclr, clr); maxclr = max(maxclr, clr);
}
tempColor = ClipAABB(tempColor, minclr, maxclr);
}
void DoTAA(inout vec3 color, inout vec3 temp, float z1) {
int materialMask = int(texelFetch(colortex6, texelCoord, 0).g * 255.1);
vec4 screenPos1 = vec4(texCoord, z1, 1.0);
vec4 viewPos1 = gbufferProjectionInverse * (screenPos1 * 2.0 - 1.0);
viewPos1 /= viewPos1.w;
#ifdef ENTITY_TAA_NOISY_CLOUD_FIX
float cloudLinearDepth = texture2D(colortex4, texCoord).r;
float lViewPos1 = length(viewPos1);
if (pow2(cloudLinearDepth) * renderDistance < min(lViewPos1, renderDistance)) {
// Material in question is obstructed by the cloud volume
materialMask = 0;
}
#endif
if (materialMask == 254) { // No SSAO, No TAA
#ifndef CUSTOM_PBR
if (z1 <= 0.56) return; // The edge pixel trick doesn't look nice on hand
#endif
int i = 0;
while (i < 4) {
int mms = int(texelFetch(colortex6, texelCoord + neighbourhoodOffsets[i], 0).g * 255.1);
if (mms != materialMask) break;
i++;
} // Checking edge-pixels prevents flickering
if (i == 4) return;
}
float z0 = texelFetch(depthtex0, texelCoord, 0).r;
vec2 prvCoord = texCoord;
if (z1 > 0.56) prvCoord = Reprojection(viewPos1);
#ifndef TAA_MOVEMENT_IMPROVEMENT_FILTER
vec3 tempColor = texture2D(colortex2, prvCoord).rgb;
#else
vec3 tempColor = textureCatmullRom(colortex2, prvCoord, view);
#endif
if (tempColor == vec3(0.0) || any(isnan(tempColor))) { // Fixes the first frame and nans
temp = color;
return;
}
float edge = 0.0;
NeighbourhoodClamping(color, tempColor, z0, z1, edge);
if (materialMask == 253) // Reduced Edge TAA
edge *= extraEdgeMult;
#ifdef DISTANT_HORIZONS
if (z0 == 1.0) {
blendMinimum = 0.75;
blendVariable = 0.05;
blendConstant = 0.9;
edge = 1.0;
}
#endif
vec2 velocity = (texCoord - prvCoord.xy) * view;
float blendFactor = float(prvCoord.x > 0.0 && prvCoord.x < 1.0 &&
prvCoord.y > 0.0 && prvCoord.y < 1.0);
float velocityFactor = dot(velocity, velocity) * 10.0;
blendFactor *= max(exp(-velocityFactor) * blendVariable + blendConstant - length(cameraPosition - previousCameraPosition) * edge, blendMinimum);
color = mix(color, tempColor, blendFactor);
temp = color;
//if (edge > 0.05) color.rgb = vec3(1.0, 0.0, 1.0);
}

View File

@ -0,0 +1,72 @@
vec3 GetAuroraBorealis(vec3 viewPos, float VdotU, float dither) {
float visibility = sqrt1(clamp01(VdotU * 1.5 - 0.225)) - sunVisibility - rainFactor - maxBlindnessDarkness;
visibility *= 1.0 - VdotU * 0.9;
#if AURORA_CONDITION == 1 || AURORA_CONDITION == 3
visibility -= moonPhase;
#endif
#if AURORA_CONDITION == 2 || AURORA_CONDITION == 3
visibility *= inSnowy;
#endif
#if AURORA_CONDITION == 4
visibility = max(visibility * inSnowy, visibility - moonPhase);
#endif
if (visibility > 0.0) {
vec3 aurora = vec3(0.0);
vec3 wpos = mat3(gbufferModelViewInverse) * viewPos;
wpos.xz /= wpos.y;
vec2 cameraPositionM = cameraPosition.xz * 0.0075;
cameraPositionM.x += syncedTime * 0.04;
#ifdef DEFERRED1
int sampleCount = 25;
int sampleCountP = sampleCount + 5;
#else
int sampleCount = 10;
int sampleCountP = sampleCount + 10;
#endif
float ditherM = dither + 5.0;
float auroraAnimate = frameTimeCounter * 0.001;
for (int i = 0; i < sampleCount; i++) {
float current = pow2((i + ditherM) / sampleCountP);
vec2 planePos = wpos.xz * (0.8 + current) * 11.0 + cameraPositionM;
#if AURORA_STYLE == 1
planePos = floor(planePos) * 0.0007;
float noise = texture2D(noisetex, planePos).b;
noise = pow2(pow2(pow2(pow2(1.0 - 2.0 * abs(noise - 0.5)))));
noise *= pow1_5(texture2D(noisetex, planePos * 100.0 + auroraAnimate).b);
#else
planePos *= 0.0007;
float noise = texture2D(noisetex, planePos).r;
noise = pow2(pow2(pow2(pow2(1.0 - 2.0 * abs(noise - 0.5)))));
noise *= texture2D(noisetex, planePos * 3.0 + auroraAnimate).b;
noise *= texture2D(noisetex, planePos * 5.0 - auroraAnimate).b;
#endif
float currentM = 1.0 - current;
aurora += noise * currentM * mix(vec3(7.0, 2.2, 12.0), vec3(6.0, 16.0, 12.0), pow2(pow2(currentM)));
}
#if AURORA_STYLE == 1
aurora *= 1.3;
#else
aurora *= 1.8;
#endif
#ifdef ATM_COLOR_MULTS
aurora *= sqrtAtmColorMult; // C72380KD - Reduced atmColorMult impact on some things
#endif
return aurora * visibility / sampleCount;
}
return vec3(0.0);
}

View File

@ -0,0 +1,30 @@
#ifndef INCLUDE_CLOUD_COORD
#define INCLUDE_CLOUD_COORD
const float cloudNarrowness = 0.05;
// Thanks to SixthSurge
vec2 GetRoundedCloudCoord(vec2 pos, float cloudRoundness) { // cloudRoundness is meant to be 0.125 for clouds and 0.35 for cloud shadows
vec2 coord = pos.xy + 0.5;
vec2 signCoord = sign(coord);
coord = abs(coord) + 1.0;
vec2 i, f = modf(coord, i);
f = smoothstep(0.5 - cloudRoundness, 0.5 + cloudRoundness, f);
coord = i + f;
return (coord - 0.5) * signCoord / 256.0;
}
vec3 ModifyTracePos(vec3 tracePos, int cloudAltitude) {
#if CLOUD_SPEED_MULT == 100
float wind = syncedTime;
#else
#define CLOUD_SPEED_MULT_M CLOUD_SPEED_MULT * 0.01
float wind = frameTimeCounter * CLOUD_SPEED_MULT_M;
#endif
tracePos.x += wind;
tracePos.z += cloudAltitude * 64.0;
tracePos.xz *= cloudNarrowness;
return tracePos.xyz;
}
#endif

View File

@ -0,0 +1,108 @@
#include "/lib/colors/lightAndAmbientColors.glsl"
#include "/lib/colors/cloudColors.glsl"
#include "/lib/atmospherics/sky.glsl"
float InterleavedGradientNoiseForClouds() {
float n = 52.9829189 * fract(0.06711056 * gl_FragCoord.x + 0.00583715 * gl_FragCoord.y);
#ifdef TAA
return fract(n + goldenRatio * mod(float(frameCounter), 3600.0));
#else
return fract(n);
#endif
}
#if SHADOW_QUALITY > -1
vec3 GetShadowOnCloudPosition(vec3 tracePos, vec3 cameraPos) {
vec3 wpos = PlayerToShadow(tracePos - cameraPos);
float distb = sqrt(wpos.x * wpos.x + wpos.y * wpos.y);
float distortFactor = 1.0 - shadowMapBias + distb * shadowMapBias;
vec3 shadowPosition = vec3(vec2(wpos.xy / distortFactor), wpos.z * 0.2);
return shadowPosition * 0.5 + 0.5;
}
bool GetShadowOnCloud(vec3 tracePos, vec3 cameraPos, int cloudAltitude, float lowerPlaneAltitude, float higherPlaneAltitude) {
const float cloudShadowOffset = 0.5;
vec3 shadowPosition0 = GetShadowOnCloudPosition(tracePos, cameraPos);
if (length(shadowPosition0.xy * 2.0 - 1.0) < 1.0) {
float shadowsample0 = shadow2D(shadowtex0, shadowPosition0).z;
if (shadowsample0 == 0.0) return true;
}
return false;
}
#endif
#ifdef CLOUDS_REIMAGINED
#include "/lib/atmospherics/clouds/reimaginedClouds.glsl"
#endif
#ifdef CLOUDS_UNBOUND
#include "/lib/atmospherics/clouds/unboundClouds.glsl"
#endif
vec4 GetClouds(inout float cloudLinearDepth, float skyFade, vec3 cameraPos, vec3 playerPos,
float lViewPos, float VdotS, float VdotU, float dither, vec3 auroraBorealis, vec3 nightNebula) {
vec4 clouds = vec4(0.0);
vec3 nPlayerPos = normalize(playerPos);
float lViewPosM = lViewPos < renderDistance * 1.5 ? lViewPos - 1.0 : 1000000000.0;
float skyMult0 = pow2(skyFade * 3.333333 - 2.333333);
float thresholdMix = pow2(clamp01(VdotU * 5.0));
float thresholdF = mix(far, 1000.0, thresholdMix * 0.5 + 0.5);
#ifdef DISTANT_HORIZONS
thresholdF = max(thresholdF, renderDistance);
#endif
#ifdef CLOUDS_REIMAGINED
cloudAmbientColor *= 1.0 - 0.25 * rainFactor;
#endif
vec3 cloudColorMult = vec3(1.0);
#if CLOUD_R != 100 || CLOUD_G != 100 || CLOUD_B != 100
cloudColorMult *= vec3(CLOUD_R, CLOUD_G, CLOUD_B) * 0.01;
#endif
cloudAmbientColor *= cloudColorMult;
cloudLightColor *= cloudColorMult;
#if !defined DOUBLE_REIM_CLOUDS || defined CLOUDS_UNBOUND
clouds = GetVolumetricClouds(cloudAlt1i, thresholdF, cloudLinearDepth, skyFade, skyMult0,
cameraPos, nPlayerPos, lViewPosM, VdotS, VdotU, dither);
#else
int maxCloudAlt = max(cloudAlt1i, cloudAlt2i);
int minCloudAlt = min(cloudAlt1i, cloudAlt2i);
if (abs(cameraPos.y - minCloudAlt) < abs(cameraPos.y - maxCloudAlt)) {
clouds = GetVolumetricClouds(minCloudAlt, thresholdF, cloudLinearDepth, skyFade, skyMult0,
cameraPos, nPlayerPos, lViewPosM, VdotS, VdotU, dither);
if (clouds.a == 0.0) {
clouds = GetVolumetricClouds(maxCloudAlt, thresholdF, cloudLinearDepth, skyFade, skyMult0,
cameraPos, nPlayerPos, lViewPosM, VdotS, VdotU, dither);
}
} else {
clouds = GetVolumetricClouds(maxCloudAlt, thresholdF, cloudLinearDepth, skyFade, skyMult0,
cameraPos, nPlayerPos, lViewPosM, VdotS, VdotU, dither);
if (clouds.a == 0.0) {
clouds = GetVolumetricClouds(minCloudAlt, thresholdF, cloudLinearDepth, skyFade, skyMult0,
cameraPos, nPlayerPos, lViewPosM, VdotS, VdotU, dither);
}
}
#endif
#ifdef ATM_COLOR_MULTS
clouds.rgb *= sqrtAtmColorMult; // C72380KD - Reduced atmColorMult impact on some things
#endif
#ifdef MOON_PHASE_INF_ATMOSPHERE
clouds.rgb *= moonPhaseInfluence;
#endif
#if AURORA_STYLE > 0
clouds.rgb += auroraBorealis * 0.1;
#endif
#ifdef NIGHT_NEBULA
clouds.rgb += nightNebula * 0.2;
#endif
return clouds;
}

View File

@ -0,0 +1,142 @@
#include "/lib/atmospherics/clouds/cloudCoord.glsl"
const float cloudStretch = 5.5;
const float cloudHeight = cloudStretch * 2.0;
bool GetCloudNoise(vec3 tracePos, inout vec3 tracePosM, int cloudAltitude) {
tracePosM = ModifyTracePos(tracePos, cloudAltitude);
vec2 coord = GetRoundedCloudCoord(tracePosM.xz, 0.125);
#ifdef DEFERRED1
float noise = texture2D(colortex3, coord).b;
#else
float noise = texture2D(gaux4, coord).b;
#endif
float threshold = clamp(abs(cloudAltitude - tracePos.y) / cloudStretch, 0.001, 0.999);
threshold = pow2(pow2(pow2(threshold)));
return noise > threshold * 0.5 + 0.25;
}
vec4 GetVolumetricClouds(int cloudAltitude, float distanceThreshold, inout float cloudLinearDepth, float skyFade, float skyMult0, vec3 cameraPos, vec3 nPlayerPos, float lViewPosM, float VdotS, float VdotU, float dither) {
vec4 volumetricClouds = vec4(0.0);
float higherPlaneAltitude = cloudAltitude + cloudStretch;
float lowerPlaneAltitude = cloudAltitude - cloudStretch;
float lowerPlaneDistance = (lowerPlaneAltitude - cameraPos.y) / nPlayerPos.y;
float higherPlaneDistance = (higherPlaneAltitude - cameraPos.y) / nPlayerPos.y;
float minPlaneDistance = min(lowerPlaneDistance, higherPlaneDistance);
minPlaneDistance = max(minPlaneDistance, 0.0);
float maxPlaneDistance = max(lowerPlaneDistance, higherPlaneDistance);
if (maxPlaneDistance < 0.0) return vec4(0.0);
float planeDistanceDif = maxPlaneDistance - minPlaneDistance;
#if CLOUD_QUALITY == 1 || !defined DEFERRED1
int sampleCount = max(int(planeDistanceDif) / 16, 6);
#elif CLOUD_QUALITY == 2
int sampleCount = max(int(planeDistanceDif) / 8, 12);
#elif CLOUD_QUALITY == 3
int sampleCount = max(int(planeDistanceDif), 12);
#endif
float stepMult = planeDistanceDif / sampleCount;
vec3 traceAdd = nPlayerPos * stepMult;
vec3 tracePos = cameraPos + minPlaneDistance * nPlayerPos;
tracePos += traceAdd * dither;
tracePos.y -= traceAdd.y;
#ifdef FIX_AMD_REFLECTION_CRASH
sampleCount = min(sampleCount, 30); //BFARC
#endif
for (int i = 0; i < sampleCount; i++) {
tracePos += traceAdd;
vec3 cloudPlayerPos = tracePos - cameraPos;
float lTracePos = length(cloudPlayerPos);
float lTracePosXZ = length(cloudPlayerPos.xz);
float cloudMult = 1.0;
if (lTracePosXZ > distanceThreshold) break;
if (lTracePos > lViewPosM) {
if (skyFade < 0.7) continue;
else cloudMult = skyMult0;
}
vec3 tracePosM;
if (GetCloudNoise(tracePos, tracePosM, cloudAltitude)) {
float lightMult = 1.0;
#if SHADOW_QUALITY > -1
float shadowLength = min(shadowDistance, far) * 0.9166667; //consistent08JJ622
if (shadowLength > lTracePos)
if (GetShadowOnCloud(tracePos, cameraPos, cloudAltitude, lowerPlaneAltitude, higherPlaneAltitude)) {
#ifdef CLOUD_CLOSED_AREA_CHECK
if (eyeBrightness.y != 240) continue;
else
#endif
lightMult = 0.25;
}
#endif
float cloudShading = 1.0 - (higherPlaneAltitude - tracePos.y) / cloudHeight;
float VdotSM1 = max0(sunVisibility > 0.5 ? VdotS : - VdotS);
#if CLOUD_QUALITY >= 2
#ifdef DEFERRED1
float cloudShadingM = 1.0 - pow2(cloudShading);
#else
float cloudShadingM = 1.0 - cloudShading;
#endif
float gradientNoise = InterleavedGradientNoiseForClouds();
vec3 cLightPos = tracePosM;
vec3 cLightPosAdd = normalize(ViewToPlayer(lightVec * 1000000000.0)) * vec3(0.08);
cLightPosAdd *= shadowTime;
float light = 2.0;
cLightPos += (1.0 + gradientNoise) * cLightPosAdd;
#ifdef DEFERRED1
light -= texture2D(colortex3, GetRoundedCloudCoord(cLightPos.xz, 0.125)).b * cloudShadingM;
#else
light -= texture2D(gaux4, GetRoundedCloudCoord(cLightPos.xz, 0.125)).b * cloudShadingM;
#endif
cLightPos += gradientNoise * cLightPosAdd;
#ifdef DEFERRED1
light -= texture2D(colortex3, GetRoundedCloudCoord(cLightPos.xz, 0.125)).b * cloudShadingM;
#else
light -= texture2D(gaux4, GetRoundedCloudCoord(cLightPos.xz, 0.125)).b * cloudShadingM;
#endif
float VdotSM2 = VdotSM1 * shadowTime * 0.25;
VdotSM2 += 0.5 * cloudShading + 0.08;
cloudShading = VdotSM2 * light * lightMult;
#endif
vec3 colorSample = cloudAmbientColor + cloudLightColor * (0.07 + cloudShading);
vec3 cloudSkyColor = GetSky(VdotU, VdotS, dither, true, false);
#ifdef ATM_COLOR_MULTS
cloudSkyColor *= sqrtAtmColorMult; // C72380KD - Reduced atmColorMult impact on some things
#endif
float distanceRatio = (distanceThreshold - lTracePosXZ) / distanceThreshold;
float cloudDistanceFactor = clamp(distanceRatio, 0.0, 0.75);
#ifndef DISTANT_HORIZONS
float cloudFogFactor = cloudDistanceFactor;
#else
float cloudFogFactor = pow1_5(clamp(distanceRatio, 0.0, 1.0)) * 0.75;
#endif
float skyMult1 = 1.0 - 0.2 * (1.0 - skyFade) * max(sunVisibility2, nightFactor);
float skyMult2 = 1.0 - 0.33333 * skyFade;
colorSample = mix(cloudSkyColor, colorSample * skyMult1, cloudFogFactor * skyMult2);
colorSample *= pow2(1.0 - maxBlindnessDarkness);
cloudLinearDepth = sqrt(lTracePos / renderDistance);
volumetricClouds.a = pow(cloudDistanceFactor * 1.33333, 0.5 + 10.0 * pow(abs(VdotSM1), 90.0)) * cloudMult;
volumetricClouds.rgb = colorSample;
break;
}
}
return volumetricClouds;
}

View File

@ -0,0 +1,217 @@
#if CLOUD_UNBOUND_SIZE_MULT != 100
#define CLOUD_UNBOUND_SIZE_MULT_M CLOUD_UNBOUND_SIZE_MULT * 0.01
#endif
#if CLOUD_QUALITY == 1 || !defined DEFERRED1
const float cloudStretchRaw = 11.0;
#elif CLOUD_QUALITY == 2
const float cloudStretchRaw = 16.0;
#elif CLOUD_QUALITY == 3
const float cloudStretchRaw = 18.0;
#endif
#if CLOUD_UNBOUND_SIZE_MULT <= 100
const float cloudStretch = cloudStretchRaw;
#else
const float cloudStretch = cloudStretchRaw / float(CLOUD_UNBOUND_SIZE_MULT_M);
#endif
const float cloudHeight = cloudStretch * 2.0;
float Noise3D(vec3 p) {
p.z = fract(p.z) * 128.0;
float iz = floor(p.z);
float fz = fract(p.z);
vec2 a_off = vec2(23.0, 29.0) * (iz) / 128.0;
vec2 b_off = vec2(23.0, 29.0) * (iz + 1.0) / 128.0;
float a = texture2D(noisetex, p.xy + a_off).r;
float b = texture2D(noisetex, p.xy + b_off).r;
return mix(a, b, fz);
}
float GetCloudNoise(vec3 tracePos, int cloudAltitude, float lTracePosXZ, float cloudPlayerPosY) {
vec3 tracePosM = tracePos.xyz * 0.00016;
float wind = 0.0006;
float noise = 0.0;
float currentPersist = 1.0;
float total = 0.0;
#if CLOUD_SPEED_MULT == 100
#define CLOUD_SPEED_MULT_M CLOUD_SPEED_MULT * 0.01
wind *= syncedTime;
#else
#define CLOUD_SPEED_MULT_M CLOUD_SPEED_MULT * 0.01
wind *= frameTimeCounter * CLOUD_SPEED_MULT_M;
#endif
#if CLOUD_UNBOUND_SIZE_MULT != 100
tracePosM *= CLOUD_UNBOUND_SIZE_MULT_M;
wind *= CLOUD_UNBOUND_SIZE_MULT_M;
#endif
#if CLOUD_QUALITY == 1
int sampleCount = 2;
float persistance = 0.6;
float noiseMult = 0.95;
tracePosM *= 0.5; wind *= 0.5;
#elif CLOUD_QUALITY == 2 || !defined DEFERRED1
int sampleCount = 4;
float persistance = 0.5;
float noiseMult = 1.07;
#elif CLOUD_QUALITY == 3
int sampleCount = 4;
float persistance = 0.5;
float noiseMult = 1.0;
#endif
#ifndef DEFERRED1
noiseMult *= 1.2;
#endif
for (int i = 0; i < sampleCount; i++) {
#if CLOUD_QUALITY >= 2
noise += Noise3D(tracePosM + vec3(wind, 0.0, 0.0)) * currentPersist;
#else
noise += texture2D(noisetex, tracePosM.xz + vec2(wind, 0.0)).b * currentPersist;
#endif
total += currentPersist;
tracePosM *= 3.0;
wind *= 0.5;
currentPersist *= persistance;
}
noise = pow2(noise / total);
#ifndef DISTANT_HORIZONS
#define CLOUD_BASE_ADD 0.65
#define CLOUD_FAR_ADD 0.01
#define CLOUD_ABOVE_ADD 0.1
#else
#define CLOUD_BASE_ADD 0.9
#define CLOUD_FAR_ADD -0.005
#define CLOUD_ABOVE_ADD 0.03
#endif
noiseMult *= CLOUD_BASE_ADD
+ CLOUD_FAR_ADD * sqrt(lTracePosXZ + 10.0) // more/less clouds far away
+ CLOUD_ABOVE_ADD * clamp01(-cloudPlayerPosY / cloudHeight) // more clouds when camera is above them
+ CLOUD_UNBOUND_RAIN_ADD * rainFactor; // more clouds during rain
noise *= noiseMult * CLOUD_UNBOUND_AMOUNT;
float threshold = clamp(abs(cloudAltitude - tracePos.y) / cloudStretch, 0.001, 0.999);
threshold = pow2(pow2(pow2(threshold)));
return noise - (threshold * 0.2 + 0.25);
}
vec4 GetVolumetricClouds(int cloudAltitude, float distanceThreshold, inout float cloudLinearDepth, float skyFade, float skyMult0, vec3 cameraPos, vec3 nPlayerPos, float lViewPosM, float VdotS, float VdotU, float dither) {
vec4 volumetricClouds = vec4(0.0);
float higherPlaneAltitude = cloudAltitude + cloudStretch;
float lowerPlaneAltitude = cloudAltitude - cloudStretch;
float lowerPlaneDistance = (lowerPlaneAltitude - cameraPos.y) / nPlayerPos.y;
float higherPlaneDistance = (higherPlaneAltitude - cameraPos.y) / nPlayerPos.y;
float minPlaneDistance = min(lowerPlaneDistance, higherPlaneDistance);
minPlaneDistance = max(minPlaneDistance, 0.0);
float maxPlaneDistance = max(lowerPlaneDistance, higherPlaneDistance);
if (maxPlaneDistance < 0.0) return vec4(0.0);
float planeDistanceDif = maxPlaneDistance - minPlaneDistance;
#ifndef DEFERRED1
float stepMult = 32.0;
#elif CLOUD_QUALITY == 1
float stepMult = 16.0;
#elif CLOUD_QUALITY == 2
float stepMult = 24.0;
#elif CLOUD_QUALITY == 3
float stepMult = 16.0;
#endif
#if CLOUD_UNBOUND_SIZE_MULT > 100
stepMult = stepMult / sqrt(float(CLOUD_UNBOUND_SIZE_MULT_M));
#endif
int sampleCount = int(planeDistanceDif / stepMult + dither + 1);
vec3 traceAdd = nPlayerPos * stepMult;
vec3 tracePos = cameraPos + minPlaneDistance * nPlayerPos;
tracePos += traceAdd * dither;
tracePos.y -= traceAdd.y;
float firstHitPos = 0.0;
float VdotSM1 = max0(sunVisibility > 0.5 ? VdotS : - VdotS);
float VdotSM1M = VdotSM1 * invRainFactor;
float VdotSM2 = pow2(VdotSM1) * abs(sunVisibility - 0.5) * 2.0;
float VdotSM3 = VdotSM2 * (2.5 + rainFactor) + 1.5 * rainFactor;
#ifdef FIX_AMD_REFLECTION_CRASH
sampleCount = min(sampleCount, 30); //BFARC
#endif
for (int i = 0; i < sampleCount; i++) {
tracePos += traceAdd;
if (abs(tracePos.y - cloudAltitude) > cloudStretch) break;
vec3 cloudPlayerPos = tracePos - cameraPos;
float lTracePos = length(cloudPlayerPos);
float lTracePosXZ = length(cloudPlayerPos.xz);
float cloudMult = 1.0;
if (lTracePosXZ > distanceThreshold) break;
if (lTracePos > lViewPosM) {
if (skyFade < 0.7) continue;
else cloudMult = skyMult0;
}
float cloudNoise = GetCloudNoise(tracePos, cloudAltitude, lTracePosXZ, cloudPlayerPos.y);
if (cloudNoise > 0.00001) {
#if defined CLOUD_CLOSED_AREA_CHECK && SHADOW_QUALITY > -1
float shadowLength = min(shadowDistance, far) * 0.9166667; //consistent08JJ622
if (shadowLength < lTracePos)
if (GetShadowOnCloud(tracePos, cameraPos, cloudAltitude, lowerPlaneAltitude, higherPlaneAltitude)) {
if (eyeBrightness.y != 240) continue;
}
#endif
if (firstHitPos < 1.0) {
firstHitPos = lTracePos;
#if CLOUD_QUALITY == 1 && defined DEFERRED1
tracePos.y += 4.0 * (texture2D(noisetex, tracePos.xz * 0.001).r - 0.5);
#endif
}
float opacityFactor = min1(cloudNoise * 8.0);
float cloudShading = 1.0 - (higherPlaneAltitude - tracePos.y) / cloudHeight;
cloudShading *= 1.0 + 0.75 * VdotSM3 * (1.0 - opacityFactor);
vec3 colorSample = cloudAmbientColor * (0.7 + 0.3 * cloudShading) + cloudLightColor * cloudShading;
//vec3 colorSample = 2.5 * cloudLightColor * pow2(cloudShading); // <-- Used this to take the Unbound logo
vec3 cloudSkyColor = GetSky(VdotU, VdotS, dither, true, false);
#ifdef ATM_COLOR_MULTS
cloudSkyColor *= sqrtAtmColorMult; // C72380KD - Reduced atmColorMult impact on some things
#endif
float distanceRatio = (distanceThreshold - lTracePosXZ) / distanceThreshold;
float cloudDistanceFactor = clamp(distanceRatio, 0.0, 0.8) * 1.25;
#ifndef DISTANT_HORIZONS
float cloudFogFactor = cloudDistanceFactor;
#else
float cloudFogFactor = clamp(distanceRatio, 0.0, 1.0);
#endif
float skyMult1 = 1.0 - 0.2 * (1.0 - skyFade) * max(sunVisibility2, nightFactor);
float skyMult2 = 1.0 - 0.33333 * skyFade;
colorSample = mix(cloudSkyColor, colorSample * skyMult1, cloudFogFactor * skyMult2 * 0.72);
colorSample *= pow2(1.0 - maxBlindnessDarkness);
volumetricClouds.rgb = mix(volumetricClouds.rgb, colorSample, 1.0 - min1(volumetricClouds.a));
volumetricClouds.a += opacityFactor * pow(cloudDistanceFactor, 0.5 + 10.0 * pow(abs(VdotSM1M), 90.0)) * cloudMult;
if (volumetricClouds.a > 0.9) {
volumetricClouds.a = 1.0;
break;
}
}
}
if (volumetricClouds.a > 0.5) cloudLinearDepth = sqrt(firstHitPos / renderDistance);
return volumetricClouds;
}

View File

@ -0,0 +1,57 @@
#ifndef INCLUDE_ENDER_BEAMS
#define INCLUDE_ENDER_BEAMS
#include "/lib/colors/lightAndAmbientColors.glsl"
vec3 endOrangeCol = vec3(1.0, 0.3, 0.0);
vec3 beamPurple = normalize(ambientColor * ambientColor * ambientColor) * (2.5 - 1.0 * vlFactor);
vec3 beamOrange = endOrangeCol * (300.0 + 700.0 * vlFactor);
vec2 wind = vec2(syncedTime * 0.00);
float BeamNoise(vec2 planeCoord, vec2 wind) {
float noise = texture2D(noisetex, planeCoord * 0.175 - wind * 0.0625).b;
noise+= texture2D(noisetex, planeCoord * 0.04375 + wind * 0.0375).b * 5.0;
return noise;
}
vec3 DrawEnderBeams(float VdotU, vec3 playerPos) {
int sampleCount = 8;
float VdotUM = 1.0 - VdotU * VdotU;
float VdotUM2 = VdotUM + smoothstep1(pow2(pow2(1.0 - abs(VdotU)))) * 0.2;
vec4 beams = vec4(0.0);
float gradientMix = 1.0;
for (int i = 0; i < sampleCount; i++) {
vec2 planeCoord = playerPos.xz + cameraPosition.xz;
planeCoord *= (1.0 + i * 6.0 / sampleCount) * 0.0014;
float noise = BeamNoise(planeCoord, wind);
noise = max(0.75 - 1.0 / abs(noise - (4.0 + VdotUM * 2.0)), 0.0) * 3.0;
if (noise > 0.0) {
noise *= 0.65;
float fireNoise = texture2D(noisetex, abs(planeCoord * 0.2) - wind).b;
noise *= 0.5 * fireNoise + 0.75;
noise = noise * noise * 3.0 / sampleCount;
noise *= VdotUM2;
vec3 beamColor = beamPurple;
beamColor += beamOrange * pow2(pow2(fireNoise - 0.5));
beamColor *= gradientMix / sampleCount;
noise *= exp2(-6.0 * i / float(sampleCount));
beams += vec4(noise * beamColor, noise);
}
gradientMix += 1.0;
}
beams.rgb *= beams.a * beams.a * beams.a * 3.5;
beams.rgb = sqrt(beams.rgb);
return beams.rgb;
}
#endif //INCLUDE_ENDER_BEAMS

View File

@ -0,0 +1,29 @@
float GetEnderStarNoise(vec2 pos) {
return fract(sin(dot(pos, vec2(12.9898, 4.1414))) * 43758.54953);
}
vec3 GetEnderStars(vec3 viewPos, float VdotU) {
vec3 wpos = normalize((gbufferModelViewInverse * vec4(viewPos * 1000.0, 1.0)).xyz);
vec3 starCoord = 0.65 * wpos / (abs(wpos.y) + length(wpos.xz));
vec2 starCoord2 = starCoord.xz * 0.5;
if (VdotU < 0.0) starCoord2 += 100.0;
float starFactor = 1024.0;
starCoord2 = floor(starCoord2 * starFactor) / starFactor;
float star = 1.0;
star *= GetEnderStarNoise(starCoord2.xy);
star *= GetEnderStarNoise(starCoord2.xy+0.1);
star *= GetEnderStarNoise(starCoord2.xy+0.23);
star = max(star - 0.7, 0.0);
star *= star;
vec3 enderStars = star * endSkyColor * 3000.0;
float VdotUM1 = abs(VdotU);
float VdotUM2 = pow2(1.0 - VdotUM1);
enderStars *= VdotUM1 * VdotUM1 * (VdotUM2 + 0.015) + 0.015;
//if (gl_FragCoord.x > 960.0) enderStars = vec3(VdotUM1); else enderStars = vec3(VdotUM2);
return enderStars;
}

View File

@ -0,0 +1,42 @@
#ifdef CAVE_FOG
#include "/lib/atmospherics/fog/caveFactor.glsl"
#endif
const float rainBloomAdd = 8.0;
const float nightBloomAdd = 3.0;
const float caveBloomAdd = 14.0;
const float waterBloomAdd = 14.0;
#ifdef BORDER_FOG
const float netherBloomAdd = 14.0;
#else
const float netherBloomAdd = 3.0;
#endif
float GetBloomFog(float lViewPos) {
#ifdef OVERWORLD
float bloomFog = pow2(pow2(1.0 - exp(-lViewPos * (0.02 + 0.04 * float(isEyeInWater == 1)))));
float bloomFogMult;
if (isEyeInWater != 1) {
bloomFogMult = (rainFactor2 * rainBloomAdd + nightBloomAdd * (1.0 - sunFactor)) * eyeBrightnessM;
#ifdef CAVE_FOG
bloomFogMult += GetCaveFactor() * caveBloomAdd;
#endif
} else {
bloomFogMult = waterBloomAdd;
}
#elif defined NETHER
float farM = min(renderDistance, NETHER_VIEW_LIMIT); // consistency9023HFUE85JG
float bloomFog = lViewPos / clamp(farM, 96.0, 256.0);
bloomFog *= bloomFog * bloomFog;
bloomFog = 1.0 - exp(-8.0 * bloomFog);
bloomFog *= float(isEyeInWater == 0);
float bloomFogMult = netherBloomAdd;
#endif
bloomFogMult *= BLOOM_STRENGTH * 8.33333;
return 1.0 + bloomFog * bloomFogMult;
}

View File

@ -0,0 +1,7 @@
#ifndef INCLUDE_CAVE_FACTOR
#define INCLUDE_CAVE_FACTOR
float GetCaveFactor() {
return clamp(1.0 - cameraPosition.y / oceanAltitude, 0.0, 1.0 - eyeBrightnessM);
}
#endif

View File

@ -0,0 +1,51 @@
vec3 GetColoredLightFog(vec3 nPlayerPos, vec3 translucentMult, float lViewPos, float lViewPos1, float dither) {
vec3 lightFog = vec3(0.0);
float stepMult = 8.0;
float maxDist = min(effectiveACLdistance * 0.5, far);
int sampleCount = int(maxDist / stepMult + 0.001);
vec3 traceAdd = nPlayerPos * stepMult;
vec3 tracePos = traceAdd * dither;
for (int i = 0; i < sampleCount; i++) {
float lTracePos = length(tracePos);
if (lTracePos > lViewPos1) break;
if (any(greaterThan(abs(tracePos * 2.0), vec3(voxelVolumeSize)))) break;
vec3 voxelPos = SceneToVoxel(tracePos);
voxelPos = clamp01(voxelPos / vec3(voxelVolumeSize));
vec4 lightVolume = GetLightVolume(voxelPos);
vec3 lightSample = lightVolume.rgb;
float lTracePosM = length(
vec3(
tracePos.x,
#if COLORED_LIGHTING_INTERNAL <= 512
tracePos.y * 2.0,
#elif COLORED_LIGHTING_INTERNAL == 768
tracePos.y * 3.0,
#elif COLORED_LIGHTING_INTERNAL == 1024
tracePos.y * 4.0,
#endif
tracePos.z
)
);
lightSample *= max0(1.0 - lTracePosM / maxDist);
lightSample *= pow2(min1(lTracePos * 0.03125));
if (lTracePos > lViewPos) lightSample *= translucentMult;
lightFog += lightSample;
tracePos += traceAdd;
}
#ifdef NETHER
lightFog *= netherColor * 5.0;
#endif
lightFog *= 1.0 - maxBlindnessDarkness;
return pow(lightFog / sampleCount, vec3(0.25));
}

View File

@ -0,0 +1,258 @@
#ifdef ATM_COLOR_MULTS
#include "/lib/colors/colorMultipliers.glsl"
#endif
#ifdef MOON_PHASE_INF_ATMOSPHERE
#include "/lib/colors/moonPhaseInfluence.glsl"
#endif
#ifdef BORDER_FOG
#ifdef OVERWORLD
#include "/lib/atmospherics/sky.glsl"
#elif defined NETHER
#include "/lib/colors/skyColors.glsl"
#endif
void DoBorderFog(inout vec3 color, inout float skyFade, float lPos, float VdotU, float VdotS, float dither) {
#ifdef OVERWORLD
float fog = lPos / renderDistance;
fog = pow2(pow2(fog));
#ifndef DISTANT_HORIZONS
fog = pow2(pow2(fog));
#endif
fog = 1.0 - exp(-3.0 * fog);
#endif
#ifdef NETHER
float farM = min(renderDistance, NETHER_VIEW_LIMIT); // consistency9023HFUE85JG
float fog = lPos / farM;
fog = fog * 0.3 + 0.7 * pow(fog, 256.0 / max(farM, 256.0));
#endif
#ifdef END
float fog = lPos / renderDistance;
fog = pow2(pow2(fog));
fog = 1.0 - exp(-3.0 * fog);
#endif
#ifdef DREAM_TWEAKED_BORDERFOG
fog *= fog * 0.5;
#endif
if (fog > 0.0) {
fog = clamp(fog, 0.0, 1.0);
#ifdef OVERWORLD
vec3 fogColorM = GetSky(VdotU, VdotS, dither, true, false);
#elif defined NETHER
vec3 fogColorM = netherColor;
#else
vec3 fogColorM = endSkyColor;
#endif
#ifdef ATM_COLOR_MULTS
fogColorM *= atmColorMult;
#endif
#ifdef MOON_PHASE_INF_ATMOSPHERE
fogColorM *= moonPhaseInfluence;
#endif
color = mix(color, fogColorM, fog);
#ifndef GBUFFERS_WATER
skyFade = fog;
#else
skyFade = fog * (1.0 - isEyeInWater);
#endif
}
}
#endif
#ifdef CAVE_FOG
#include "/lib/atmospherics/fog/caveFactor.glsl"
void DoCaveFog(inout vec3 color, float lViewPos) {
float fog = GetCaveFactor() * (0.9 - 0.9 * exp(- lViewPos * 0.015));
color = mix(color, caveFogColor, fog);
}
#endif
#ifdef ATMOSPHERIC_FOG
#include "/lib/colors/lightAndAmbientColors.glsl"
#include "/lib/colors/skyColors.glsl"
// SRATA: Atm. fog starts reducing above this altitude
// CRFTM: Atm. fog continues reducing for this meters
#ifdef OVERWORLD
#define atmFogSRATA ATM_FOG_ALTITUDE + 0.1
#ifndef DISTANT_HORIZONS
float atmFogCRFTM = 60.0;
#else
float atmFogCRFTM = 90.0;
#endif
vec3 GetAtmFogColor(float altitudeFactorRaw, float VdotS) {
float nightFogMult = 2.5 - 0.625 * max(pow2(pow2(altitudeFactorRaw)), rainFactor);
float dayNightFogBlend = pow(invNightFactor, 4.0 - VdotS - 2.5 * sunVisibility2);
return mix(
nightUpSkyColor * (nightFogMult - dayNightFogBlend * nightFogMult),
dayDownSkyColor * (0.9 + 0.2 * noonFactor),
dayNightFogBlend
);
}
#else
float atmFogSRATA = 55.1;
float atmFogCRFTM = 30.0;
#endif
float GetAtmFogAltitudeFactor(float altitude) {
float altitudeFactor = pow2(1.0 - clamp(altitude - atmFogSRATA, 0.0, atmFogCRFTM) / atmFogCRFTM);
#ifndef LIGHTSHAFTS_ACTIVE
altitudeFactor = mix(altitudeFactor, 1.0, rainFactor * 0.2);
#endif
return altitudeFactor;
}
void DoAtmosphericFog(inout vec3 color, vec3 playerPos, float lViewPos, float VdotS) {
#ifndef DISTANT_HORIZONS
float renDisFactor = min1(192.0 / renderDistance);
#if ATM_FOG_DISTANCE != 100
#define ATM_FOG_DISTANCE_M 100.0 / ATM_FOG_DISTANCE;
renDisFactor *= ATM_FOG_DISTANCE_M;
#endif
float fog = 1.0 - exp(-pow(lViewPos * (0.001 - 0.0007 * rainFactor), 2.0 - rainFactor2) * lViewPos * renDisFactor);
#else
float fog = pow2(1.0 - exp(-max0(lViewPos - 40.0) * (0.7 + 0.7 * rainFactor) / ATM_FOG_DISTANCE));
#endif
fog *= ATM_FOG_MULT - 0.1 - 0.15 * invRainFactor;
float altitudeFactorRaw = GetAtmFogAltitudeFactor(playerPos.y + cameraPosition.y);
#ifndef DISTANT_HORIZONS
float altitudeFactor = altitudeFactorRaw * 0.9 + 0.1;
#else
float altitudeFactor = altitudeFactorRaw * 0.8 + 0.2;
#endif
#ifdef OVERWORLD
altitudeFactor *= 1.0 - 0.75 * GetAtmFogAltitudeFactor(cameraPosition.y) * invRainFactor;
#if defined SPECIAL_BIOME_WEATHER || RAIN_STYLE == 2
#if RAIN_STYLE == 2
float factor = 1.0;
#else
float factor = max(inSnowy, inDry);
#endif
float fogFactor = 4.0;
#ifdef SPECIAL_BIOME_WEATHER
fogFactor += 2.0 * inDry;
#endif
float fogIntense = pow2(1.0 - exp(-lViewPos * fogFactor / ATM_FOG_DISTANCE));
fog = mix(fog, fogIntense / altitudeFactor, 0.8 * rainFactor * factor);
#endif
#ifdef CAVE_FOG
fog *= 0.2 + 0.8 * sqrt2(eyeBrightnessM);
fog *= 1.0 - GetCaveFactor();
#else
fog *= eyeBrightnessM;
#endif
#else
fog *= 0.5;
#endif
fog *= altitudeFactor;
if (fog > 0.0) {
fog = clamp(fog, 0.0, 1.0);
#ifdef OVERWORLD
vec3 fogColorM = GetAtmFogColor(altitudeFactorRaw, VdotS);
#else
vec3 fogColorM = endSkyColor * 1.5;
#endif
#ifdef ATM_COLOR_MULTS
fogColorM *= atmColorMult;
#endif
#ifdef MOON_PHASE_INF_ATMOSPHERE
fogColorM *= moonPhaseInfluence;
#endif
color = mix(color, fogColorM, fog);
}
}
#endif
#include "/lib/atmospherics/fog/waterFog.glsl"
void DoWaterFog(inout vec3 color, float lViewPos) {
float fog = GetWaterFog(lViewPos);
color = mix(color, waterFogColor, fog);
}
void DoLavaFog(inout vec3 color, float lViewPos) {
float fog = (lViewPos * 3.0 - gl_Fog.start) * gl_Fog.scale;
#ifdef LESS_LAVA_FOG
fog = sqrt(fog) * 0.4;
#endif
fog = 1.0 - exp(-fog);
fog = clamp(fog, 0.0, 1.0);
color = mix(color, fogColor * 5.0, fog);
}
void DoPowderSnowFog(inout vec3 color, float lViewPos) {
float fog = lViewPos;
#ifdef LESS_LAVA_FOG
fog = sqrt(fog) * 0.4;
#endif
fog *= fog;
fog = 1.0 - exp(-fog);
fog = clamp(fog, 0.0, 1.0);
color = mix(color, fogColor, fog);
}
void DoBlindnessFog(inout vec3 color, float lViewPos) {
float fog = lViewPos * 0.3 * blindness;
fog *= fog;
fog = 1.0 - exp(-fog);
fog = clamp(fog, 0.0, 1.0);
color = mix(color, vec3(0.0), fog);
}
void DoDarknessFog(inout vec3 color, float lViewPos) {
float fog = lViewPos * 0.075 * darknessFactor;
fog *= fog;
fog *= fog;
color *= exp(-fog);
}
void DoFog(inout vec3 color, inout float skyFade, float lViewPos, vec3 playerPos, float VdotU, float VdotS, float dither) {
#ifdef CAVE_FOG
DoCaveFog(color, lViewPos);
#endif
#ifdef ATMOSPHERIC_FOG
DoAtmosphericFog(color, playerPos, lViewPos, VdotS);
#endif
#ifdef BORDER_FOG
DoBorderFog(color, skyFade, max(length(playerPos.xz), abs(playerPos.y)), VdotU, VdotS, dither);
#endif
if (isEyeInWater == 1) DoWaterFog(color, lViewPos);
else if (isEyeInWater == 2) DoLavaFog(color, lViewPos);
else if (isEyeInWater == 3) DoPowderSnowFog(color, lViewPos);
if (blindness > 0.00001) DoBlindnessFog(color, lViewPos);
if (darknessFactor > 0.00001) DoDarknessFog(color, lViewPos);
}

View File

@ -0,0 +1,19 @@
#ifndef INCLUDE_WATER_FOG
#define INCLUDE_WATER_FOG
float GetWaterFog(float lViewPos) {
#if WATER_FOG_MULT != 100
#define WATER_FOG_MULT_M WATER_FOG_MULT * 0.01;
lViewPos *= WATER_FOG_MULT_M;
#endif
#if LIGHTSHAFT_QUALI > 0 && SHADOW_QUALITY > -1
float fog = lViewPos / 48.0;
fog *= fog;
#else
float fog = lViewPos / 32.0;
#endif
return 1.0 - exp(-fog);
}
#endif

View File

@ -0,0 +1,83 @@
float Noise3D(vec3 p) {
p.z = fract(p.z) * 128.0;
float iz = floor(p.z);
float fz = fract(p.z);
vec2 a_off = vec2(23.0, 29.0) * (iz) / 128.0;
vec2 b_off = vec2(23.0, 29.0) * (iz + 1.0) / 128.0;
float a = texture2D(noisetex, p.xy + a_off).r;
float b = texture2D(noisetex, p.xy + b_off).r;
return mix(a, b, fz);
}
vec4 GetNetherStorm(vec3 color, vec3 translucentMult, vec3 nPlayerPos, vec3 playerPos, float lViewPos, float lViewPos1, float dither) {
if (isEyeInWater != 0) return vec4(0.0);
vec4 netherStorm = vec4(1.0, 1.0, 1.0, 0.0);
#ifdef BORDER_FOG
float maxDist = min(renderDistance, NETHER_VIEW_LIMIT); // consistency9023HFUE85JG
#else
float maxDist = renderDistance;
#endif
#ifndef LOW_QUALITY_NETHER_STORM
int sampleCount = int(maxDist / 8.0 + 0.001);
vec3 traceAdd = nPlayerPos * maxDist / sampleCount;
vec3 tracePos = cameraPosition;
tracePos += traceAdd * dither;
#else
int sampleCount = int(maxDist / 16.0 + 0.001);
vec3 traceAdd = 0.75 * nPlayerPos * maxDist / sampleCount;
vec3 tracePos = cameraPosition;
tracePos += traceAdd * dither;
tracePos += traceAdd * sampleCount * 0.25;
#endif
vec3 translucentMultM = pow(translucentMult, vec3(1.0 / sampleCount));
for (int i = 0; i < sampleCount; i++) {
tracePos += traceAdd;
vec3 tracedPlayerPos = tracePos - cameraPosition;
float lTracePos = length(tracedPlayerPos);
if (lTracePos > lViewPos1) break;
vec3 wind = vec3(frameTimeCounter * 0.002);
vec3 tracePosM = tracePos * 0.001;
tracePosM.y += tracePosM.x;
tracePosM += Noise3D(tracePosM - wind) * 0.01;
tracePosM = tracePosM * vec3(2.0, 0.5, 2.0);
float traceAltitudeM = abs(tracePos.y - NETHER_STORM_LOWER_ALT);
if (tracePos.y < NETHER_STORM_LOWER_ALT) traceAltitudeM *= 10.0;
traceAltitudeM = 1.0 - min1(abs(traceAltitudeM) / NETHER_STORM_HEIGHT);
for (int h = 0; h < 4; h++) {
float stormSample = pow2(Noise3D(tracePosM + wind));
stormSample *= traceAltitudeM;
stormSample = pow2(pow2(stormSample));
stormSample *= sqrt1(max0(1.0 - lTracePos / maxDist));
netherStorm.a += stormSample;
tracePosM *= 2.0;
wind *= -2.0;
}
if (lTracePos > lViewPos) netherStorm.rgb *= translucentMultM;
}
#ifdef LOW_QUALITY_NETHER_STORM
netherStorm.a *= 1.8;
#endif
netherStorm.a = min1(netherStorm.a * NETHER_STORM_I);
netherStorm.rgb *= netherColor * 3.0 * (1.0 - maxBlindnessDarkness);
//if (netherStorm.a > 0.98) netherStorm.rgb = vec3(1,0,1);
//netherStorm.a *= 1.0 - max0(netherStorm.a - 0.98) * 50.0;
return netherStorm;
}

View File

@ -0,0 +1,106 @@
#include "/lib/atmospherics/stars.glsl"
// Nebula implementation by flytrap https://godotshaders.com/shader/2d-nebula-shader/
#ifndef HQ_NIGHT_NEBULA
const int OCTAVE = 5;
#else
const int OCTAVE = 8;
#endif
const float timescale = 5.0;
const float zoomScale = 3.5;
const vec4 CLOUD1_COL = vec4(0.41, 0.64, 0.97, 0.4);
const vec4 CLOUD2_COL = vec4(0.81, 0.55, 0.21, 0.2);
const vec4 CLOUD3_COL = vec4(0.51, 0.81, 0.98, 1.0);
float sinM(float x) {
return sin(mod(x, 2.0 * pi));
}
float cosM(float x) {
return cos(mod(x, 2.0 * pi));
}
float rand(vec2 inCoord){
return fract(sinM(dot(inCoord, vec2(23.53, 44.0))) * 42350.45);
}
float perlin(vec2 inCoord){
vec2 i = floor(inCoord);
vec2 j = fract(inCoord);
vec2 coord = smoothstep(0.0, 1.0, j);
float a = rand(i);
float b = rand(i + vec2(1.0, 0.0));
float c = rand(i + vec2(0.0, 1.0));
float d = rand(i + vec2(1.0, 1.0));
return mix(mix(a, b, coord.x), mix(c, d, coord.x), coord.y);
}
float fbmCloud(vec2 inCoord, float minimum){
float value = 0.0;
float scale = 0.5;
for (int i = 0; i < OCTAVE; i++){
value += perlin(inCoord) * scale;
inCoord *= 2.0;
scale *= 0.5;
}
return smoothstep(0.0, 1.0, (smoothstep(minimum, 1.0, value) - minimum) / (1.0 - minimum));
}
float fbmCloud2(vec2 inCoord, float minimum){
float value = 0.0;
float scale = 0.5;
for (int i = 0; i < OCTAVE; i++){
value += perlin(inCoord) * scale;
inCoord *= 2.0;
scale *= 0.5;
}
return (smoothstep(minimum, 1.0, value) - minimum) / (1.0 - minimum);
}
vec3 GetNightNebula(vec3 viewPos, float VdotU, float VdotS) {
float nebulaFactor = pow2(max0(VdotU) * min1(nightFactor * 2.0)) * invRainFactor - maxBlindnessDarkness;
if (nebulaFactor < 0.001) return vec3(0.0);
vec2 UV = GetStarCoord(viewPos, 0.75);
float TIME = syncedTime * 0.003 + 15.0;
float timescaled = TIME * timescale;
vec2 zoomUV2
= vec2(zoomScale * UV.x + 0.03 * timescaled * sinM(0.07 * timescaled), zoomScale * UV.y + 0.03 * timescaled * cosM(0.06 * timescaled));
vec2 zoomUV3
= vec2(zoomScale * UV.x + 0.027 * timescaled * sinM(0.07 * timescaled), zoomScale * UV.y + 0.025 * timescaled * cosM(0.06 * timescaled));
vec2 zoomUV4
= vec2(zoomScale * UV.x + 0.021 * timescaled * sinM(0.07 * timescaled), zoomScale * UV.y + 0.021 * timescaled * cosM(0.07 * timescaled));
float tide = 0.05 * sinM(TIME);
float tide2 = 0.06 * cosM(0.3 * TIME);
vec4 nebulaTexture = vec4(vec3(0.0), 0.5 + 0.2 * sinM(0.23 * TIME + UV.x - UV.y));
nebulaTexture += fbmCloud2(zoomUV3, 0.24 + tide) * CLOUD1_COL;
nebulaTexture += fbmCloud(zoomUV2 * 0.9, 0.33 - tide) * CLOUD2_COL;
nebulaTexture = mix(nebulaTexture, CLOUD3_COL, fbmCloud(vec2(0.9 * zoomUV4.x, 0.9 * zoomUV4.y), 0.25 + tide2));
nebulaFactor *= 1.0 - pow2(pow2(pow2(abs(VdotS))));
nebulaTexture.a *= min1(pow2(pow2(nebulaTexture.a))) * nebulaFactor;
float starFactor = 1024.0;
vec2 starCoord = floor(UV * 0.25 * starFactor) / starFactor;
nebulaTexture.rgb *= 1.5 + 10.0 * pow2(max0(GetStarNoise(starCoord) * GetStarNoise(starCoord + 0.1) - 0.6));
#if NIGHT_NEBULA_I != 100
#define NIGHT_NEBULA_IM NIGHT_NEBULA_I * 0.01
nebulaTexture.a *= NIGHT_NEBULA_IM;
#endif
#ifdef ATM_COLOR_MULTS
nebulaTexture.rgb *= sqrtAtmColorMult; // C72380KD - Reduced atmColorMult impact on some things
#endif
return max(nebulaTexture.rgb * nebulaTexture.a, vec3(0.0));
}

View File

@ -0,0 +1,56 @@
#define RAINBOW_DIAMETER 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00 2.05 2.10 2.15 2.20 2.25 2.30 2.35 2.40 2.45 2.50 2.55 2.60 2.65 2.70 2.75 2.80 2.85 2.90 2.95 3.00 3.05 3.10 3.15 3.20 3.25 3.30 3.35 3.40 3.45 3.50 3.55 3.60 3.65 3.70 3.75 3.80 3.85 3.90 3.95 4.00 4.25 4.50 4.75 5.00 5.25 5.50 5.75 6.00 6.25 6.50 6.75 7.00 7.50 8.00]
#define RAINBOW_STYLE 1 //[1 2]
vec3 GetRainbow(vec3 translucentMult, float z0, float z1, float lViewPos, float lViewPos1, float VdotL, float dither) {
vec3 rainbow = vec3(0.0);
float rainbowTime = min1(max0(SdotU - 0.1) / 0.15);
rainbowTime = clamp(rainbowTime - pow2(pow2(pow2(noonFactor))) * 8.0, 0.0, 0.85);
#if RAINBOWS == 1 // After Rain
rainbowTime *= sqrt2(max0(wetness - 0.333) * 1.5) * invRainFactor * inRainy;
#endif
if (rainbowTime > 0.001) {
float cloudLinearDepth = texelFetch(colortex4, texelCoord, 0).r;
float cloudDistance = pow2(cloudLinearDepth + OSIEBCA * dither) * far;
if (cloudDistance < lViewPos1) lViewPos = cloudDistance;
float rainbowLength = max(far, 128.0) * 0.9;
float rainbowCoord = clamp01(1.0 - (VdotL + 0.75) / (0.0625 * RAINBOW_DIAMETER));
float rainbowFactor = rainbowCoord * (1.0 - rainbowCoord);
rainbowFactor = pow2(pow2(rainbowFactor * 3.7));
rainbowFactor *= pow2(min1(lViewPos / rainbowLength));
rainbowFactor *= rainbowTime;
rainbowFactor *= 1.0 - GetCaveFactor();
if (rainbowFactor > 0.0) {
#if RAINBOW_STYLE == 1
float rainbowCoordM = pow(rainbowCoord, 1.4 + max(rainbowCoord - 0.5, 0.0) * 1.6);
rainbowCoordM = smoothstep(0.0, 1.0, rainbowCoordM) * 0.85;
rainbowCoordM += (dither - 0.5) * 0.1;
rainbow += clamp(abs(mod(rainbowCoordM * 6.0 + vec3(-0.55,4.3,2.2) ,6.0)-3.0)-1.0, 0.0, 1.0);
rainbowCoordM += 0.1;
rainbow += clamp(abs(mod(rainbowCoordM * 6.0 + vec3(-0.55,4.3,2.2) ,6.0)-3.0)-1.0, 0.0, 1.0);
rainbowCoordM -= 0.2;
rainbow += clamp(abs(mod(rainbowCoordM * 6.0 + vec3(-0.55,4.3,2.2) ,6.0)-3.0)-1.0, 0.0, 1.0);
rainbow /= 3.0;
rainbow.r += pow2(max(rainbowCoord - 0.5, 0.0)) * (max(1.0 - rainbowCoord, 0.0)) * 26.0;
rainbow = pow(rainbow, vec3(2.2)) * vec3(0.25, 0.075, 0.25) * 3.0;
#else
float rainbowCoordM = pow(rainbowCoord, 1.35);
rainbowCoordM = smoothstep(0.0, 1.0, rainbowCoordM);
rainbow += clamp(abs(mod(rainbowCoordM * 6.0 + vec3(0.0,4.0,2.0) ,6.0)-3.0)-1.0, 0.0, 1.0);
rainbow *= rainbow * (3.0 - 2.0 * rainbow);
rainbow = pow(rainbow, vec3(2.2)) * vec3(0.25, 0.075, 0.25) * 3.0;
#endif
if (z1 > z0 && lViewPos < rainbowLength)
rainbow *= mix(translucentMult, vec3(1.0), lViewPos / rainbowLength);
rainbow *= rainbowFactor;
}
}
return rainbow;
}

View File

@ -0,0 +1,127 @@
#ifndef INCLUDE_SKY
#define INCLUDE_SKY
#include "/lib/colors/lightAndAmbientColors.glsl"
#include "/lib/colors/skyColors.glsl"
#ifdef CAVE_FOG
#include "/lib/atmospherics/fog/caveFactor.glsl"
#endif
vec3 GetSky(float VdotU, float VdotS, float dither, bool doGlare, bool doGround) {
// Prepare variables
float nightFactorSqrt2 = sqrt2(nightFactor);
float nightFactorM = sqrt2(nightFactorSqrt2) * 0.4;
float VdotSM1 = pow2(max(VdotS, 0.0));
float VdotSM2 = pow2(VdotSM1);
float VdotSM3 = pow2(pow2(max(-VdotS, 0.0)));
float VdotSML = sunVisibility > 0.5 ? VdotS : -VdotS;
float VdotUmax0 = max(VdotU, 0.0);
float VdotUmax0M = 1.0 - pow2(VdotUmax0);
// Prepare colors
vec3 upColor = mix(nightUpSkyColor * (1.5 - 0.5 * nightFactorSqrt2 + nightFactorM * VdotSM3 * 1.5), dayUpSkyColor, sunFactor);
vec3 middleColor = mix(nightMiddleSkyColor * (3.0 - 2.0 * nightFactorSqrt2), dayMiddleSkyColor * (1.0 + VdotSM2 * 0.3), sunFactor);
vec3 downColor = mix(nightDownSkyColor, dayDownSkyColor, (sunFactor + sunVisibility) * 0.5);
// Mix the colors
// Set sky gradient
float VdotUM1 = pow2(1.0 - VdotUmax0);
VdotUM1 = pow(VdotUM1, 1.0 - VdotSM2 * 0.4);
VdotUM1 = mix(VdotUM1, 1.0, rainFactor2 * 0.15);
vec3 finalSky = mix(upColor, middleColor, VdotUM1);
// Add sunset color
float VdotUM2 = pow2(1.0 - abs(VdotU));
VdotUM2 = VdotUM2 * VdotUM2 * (3.0 - 2.0 * VdotUM2);
VdotUM2 *= (0.7 - nightFactorM + VdotSM1 * (0.3 + nightFactorM)) * invNoonFactor * sunFactor;
finalSky = mix(finalSky, sunsetDownSkyColorP * (1.0 + VdotSM1 * 0.3), VdotUM2 * invRainFactor);
// Add sky ground with fake light scattering
float VdotUM3 = min(max0(-VdotU + 0.08) / 0.35, 1.0);
VdotUM3 = smoothstep1(VdotUM3);
vec3 scatteredGroundMixer = vec3(VdotUM3 * VdotUM3, sqrt1(VdotUM3), sqrt3(VdotUM3));
scatteredGroundMixer = mix(vec3(VdotUM3), scatteredGroundMixer, 0.75 - 0.5 * rainFactor);
finalSky = mix(finalSky, downColor, scatteredGroundMixer);
//
// Sky Ground
if (doGround)
finalSky *= smoothstep1(pow2(1.0 + min(VdotU, 0.0)));
// Apply Underwater Fog
if (isEyeInWater == 1)
finalSky = mix(finalSky * 3.0, waterFogColor, VdotUmax0M);
// Sun/Moon Glare
if (doGlare) {
if (0.0 < VdotSML) {
float glareScatter = 4.0 * (2.0 - clamp01(VdotS * 1000.0));
float VdotSM4 = pow(abs(VdotS), glareScatter);
float visfactor = 0.075;
float glare = visfactor / (1.0 - (1.0 - visfactor) * VdotSM4) - visfactor;
glare *= 0.5 + pow2(noonFactor) * 1.2;
glare *= 1.0 - rainFactor * 0.5;
float glareWaterFactor = isEyeInWater * sunVisibility;
vec3 glareColor = mix(vec3(0.38, 0.4, 0.5) * 0.7, vec3(0.5), sunVisibility);
glareColor = glareColor + glareWaterFactor * vec3(7.0);
finalSky += glare * shadowTime * glareColor;
}
}
#ifdef CAVE_FOG
// Apply Cave Fog
finalSky = mix(finalSky, caveFogColor, GetCaveFactor() * VdotUmax0M);
#endif
// Dither to fix banding
finalSky += (dither - 0.5) / 128.0;
return finalSky;
}
vec3 GetLowQualitySky(float VdotU, float VdotS, float dither, bool doGlare, bool doGround) {
// Prepare variables
float VdotUmax0 = max(VdotU, 0.0);
float VdotUmax0M = 1.0 - pow2(VdotUmax0);
// Prepare colors
vec3 upColor = mix(nightUpSkyColor, dayUpSkyColor, sunFactor);
vec3 middleColor = mix(nightMiddleSkyColor, dayMiddleSkyColor, sunFactor);
// Mix the colors
// Set sky gradient
float VdotUM1 = pow2(1.0 - VdotUmax0);
VdotUM1 = mix(VdotUM1, 1.0, rainFactor2 * 0.2);
vec3 finalSky = mix(upColor, middleColor, VdotUM1);
// Add sunset color
float VdotUM2 = pow2(1.0 - abs(VdotU));
VdotUM2 *= invNoonFactor * sunFactor * (0.8 + 0.2 * VdotS);
finalSky = mix(finalSky, sunsetDownSkyColorP * (shadowTime * 0.6 + 0.2), VdotUM2 * invRainFactor);
//
// Sky Ground
finalSky *= pow2(pow2(1.0 + min(VdotU, 0.0)));
// Apply Underwater Fog
if (isEyeInWater == 1)
finalSky = mix(finalSky, waterFogColor, VdotUmax0M);
// Sun/Moon Glare
finalSky *= 1.0 + mix(nightFactor, 0.5 + 0.7 * noonFactor, VdotS * 0.5 + 0.5) * pow2(pow2(pow2(VdotS)));
#ifdef CAVE_FOG
// Apply Cave Fog
finalSky = mix(finalSky, caveFogColor, GetCaveFactor() * VdotUmax0M);
#endif
return finalSky;
}
#endif //INCLUDE_SKY

View File

@ -0,0 +1,39 @@
#include "/lib/colors/skyColors.glsl"
float GetStarNoise(vec2 pos) {
return fract(sin(dot(pos, vec2(12.9898, 4.1414))) * 43758.54953);
}
vec2 GetStarCoord(vec3 viewPos, float sphereness) {
vec3 wpos = normalize((gbufferModelViewInverse * vec4(viewPos * 1000.0, 1.0)).xyz);
vec3 starCoord = wpos / (wpos.y + length(wpos.xz) * sphereness);
starCoord.x += 0.006 * syncedTime;
return starCoord.xz;
}
vec3 GetStars(vec2 starCoord, float VdotU, float VdotS) {
if (VdotU < 0.0) return vec3(0.0);
starCoord *= 0.2;
float starFactor = 1024.0;
starCoord = floor(starCoord * starFactor) / starFactor;
float star = 1.0;
star *= GetStarNoise(starCoord.xy);
star *= GetStarNoise(starCoord.xy+0.1);
star *= GetStarNoise(starCoord.xy+0.23);
#if NIGHT_STAR_AMOUNT == 2
star -= 0.7;
#else
star -= 0.6;
star *= 0.65;
#endif
star = max0(star);
star *= star;
star *= min1(VdotU * 3.0) * max0(1.0 - pow(abs(VdotS) * 1.002, 100.0));
star *= invRainFactor * pow2(pow2(invNoonFactor2)) * (1.0 - 0.5 * sunVisibility);
return 40.0 * star * vec3(0.38, 0.4, 0.5);
}

View File

@ -0,0 +1,338 @@
// Volumetric tracing from Robobo1221, highly modified
#include "/lib/colors/lightAndAmbientColors.glsl"
float GetDepth(float depth) {
return 2.0 * near * far / (far + near - (2.0 * depth - 1.0) * (far - near));
}
float GetDistX(float dist) {
return (far * (dist - near)) / (dist * (far - near));
}
vec4 DistortShadow(vec4 shadowpos, float distortFactor) {
shadowpos.xy *= 1.0 / distortFactor;
shadowpos.z = shadowpos.z * 0.2;
shadowpos = shadowpos * 0.5 + 0.5;
return shadowpos;
}
float Noise3D(vec3 p) {
p.z = fract(p.z) * 128.0;
float iz = floor(p.z);
float fz = fract(p.z);
vec2 a_off = vec2(23.0, 29.0) * (iz) / 128.0;
vec2 b_off = vec2(23.0, 29.0) * (iz + 1.0) / 128.0;
float a = texture2D(noisetex, p.xy + a_off).r;
float b = texture2D(noisetex, p.xy + b_off).r;
return mix(a, b, fz);
}
vec4 GetVolumetricLight(inout vec3 color, inout float vlFactor, vec3 translucentMult, float lViewPos0, float lViewPos1, vec3 nViewPos, float VdotL, float VdotU, vec2 texCoord, float z0, float z1, float dither) {
vec4 volumetricLight = vec4(0.0);
float vlMult = 1.0 - maxBlindnessDarkness;
#if SHADOW_QUALITY > -1
// Optifine for some reason doesn't provide correct shadowMapResolution if Shadow Quality isn't 1x
vec2 shadowMapResolutionM = textureSize(shadowtex0, 0);
#endif
#ifdef OVERWORLD
vec3 vlColor = lightColor;
vec3 vlColorReducer = vec3(1.0);
float vlSceneIntensity = isEyeInWater != 1 ? vlFactor : 1.0;
#ifdef SPECIAL_BIOME_WEATHER
vlSceneIntensity = mix(vlSceneIntensity, 1.0, inDry * rainFactor);
#endif
if (sunVisibility < 0.5) {
vlSceneIntensity = 0.0;
float vlMultNightModifier = 0.6 + 0.4 * max0(far - lViewPos1) / far;
#ifdef SPECIAL_PALE_GARDEN_LIGHTSHAFTS
vlMultNightModifier = mix(vlMultNightModifier, 1.0, inPaleGarden);
#endif
vlMult *= vlMultNightModifier;
vlColor = normalize(pow(vlColor, vec3(1.0 - max0(1.0 - 1.5 * nightFactor))));
vlColor *= 0.0766 + 0.0766 * vsBrightness;
} else {
vlColorReducer = 1.0 / sqrt(vlColor);
}
#ifdef SPECIAL_PALE_GARDEN_LIGHTSHAFTS
vlSceneIntensity = mix(vlSceneIntensity, 1.0, inPaleGarden);
vlMult *= 1.0 + (3.0 * inPaleGarden) * (1.0 - sunVisibility);
#endif
float rainyNight = (1.0 - sunVisibility) * rainFactor;
float VdotLM = max((VdotL + 1.0) / 2.0, 0.0);
float VdotUmax0 = max(VdotU, 0.0);
float VdotUM = mix(pow2(1.0 - VdotUmax0), 1.0, 0.5 * vlSceneIntensity);
VdotUM = smoothstep1(VdotUM);
VdotUM = pow(VdotUM, min(lViewPos1 / far, 1.0) * (3.0 - 2.0 * vlSceneIntensity));
vlMult *= mix(VdotUM * VdotLM, 1.0, 0.4 * rainyNight) * vlTime;
vlMult *= mix(invNoonFactor2 * 0.875 + 0.125, 1.0, max(vlSceneIntensity, rainFactor2));
#if LIGHTSHAFT_QUALI == 4
int sampleCount = vlSceneIntensity < 0.5 ? 30 : 50;
#elif LIGHTSHAFT_QUALI == 3
int sampleCount = vlSceneIntensity < 0.5 ? 15 : 30;
#elif LIGHTSHAFT_QUALI == 2
int sampleCount = vlSceneIntensity < 0.5 ? 10 : 20;
#elif LIGHTSHAFT_QUALI == 1
int sampleCount = vlSceneIntensity < 0.5 ? 6 : 12;
#endif
#ifdef LIGHTSHAFT_SMOKE
float totalSmoke = 0.0;
#endif
#else
translucentMult = sqrt(translucentMult); // Because we pow2() the vl result in composite for the End dimension
float vlSceneIntensity = 0.0;
#ifndef LOW_QUALITY_ENDER_NEBULA
int sampleCount = 16;
#else
int sampleCount = 10;
#endif
#endif
float addition = 1.0;
float maxDist = mix(max(far, 96.0) * 0.55, 80.0, vlSceneIntensity);
#if WATER_FOG_MULT != 100
if (isEyeInWater == 1) {
#define WATER_FOG_MULT_M WATER_FOG_MULT * 0.01;
maxDist /= WATER_FOG_MULT_M;
}
#endif
float distMult = maxDist / (sampleCount + addition);
float sampleMultIntense = isEyeInWater != 1 ? 1.0 : 0.85;
float viewFactor = 1.0 - 0.7 * pow2(dot(nViewPos.xy, nViewPos.xy));
float depth0 = GetDepth(z0);
float depth1 = GetDepth(z1);
#ifdef END
if (z0 == 1.0) depth0 = 1000.0;
if (z1 == 1.0) depth1 = 1000.0;
#endif
// Fast but inaccurate perspective distortion approximation
maxDist *= viewFactor;
distMult *= viewFactor;
#ifdef OVERWORLD
float maxCurrentDist = min(depth1, maxDist);
#else
float maxCurrentDist = min(depth1, far);
#endif
for (int i = 0; i < sampleCount; i++) {
float currentDist = (i + dither) * distMult + addition;
if (currentDist > maxCurrentDist) break;
vec4 viewPos = gbufferProjectionInverse * (vec4(texCoord, GetDistX(currentDist), 1.0) * 2.0 - 1.0);
viewPos /= viewPos.w;
vec4 wpos = gbufferModelViewInverse * viewPos;
vec3 playerPos = wpos.xyz / wpos.w;
#ifdef END
#ifdef DISTANT_HORIZONS
playerPos *= sqrt(renderDistance / far);
#endif
vec4 enderBeamSample = vec4(DrawEnderBeams(VdotU, playerPos), 1.0);
enderBeamSample /= sampleCount;
#endif
float shadowSample = 1.0;
vec3 vlSample = vec3(1.0);
#if SHADOW_QUALITY > -1
wpos = shadowModelView * wpos;
wpos = shadowProjection * wpos;
wpos /= wpos.w;
float distb = sqrt(wpos.x * wpos.x + wpos.y * wpos.y);
float distortFactor = 1.0 - shadowMapBias + distb * shadowMapBias;
vec4 shadowPosition = DistortShadow(wpos,distortFactor);
//shadowPosition.z += 0.0001;
#ifdef OVERWORLD
float percentComplete = currentDist / maxDist;
float sampleMult = mix(percentComplete * 3.0, sampleMultIntense, max(rainFactor, vlSceneIntensity));
if (currentDist < 5.0) sampleMult *= smoothstep1(clamp(currentDist / 5.0, 0.0, 1.0));
sampleMult /= sampleCount;
#endif
if (length(shadowPosition.xy * 2.0 - 1.0) < 1.0) {
// 28A3DK6 We need to use texelFetch here or a lot of Nvidia GPUs can't get a valid value
shadowSample = texelFetch(shadowtex0, ivec2(shadowPosition.xy * shadowMapResolutionM), 0).x;
shadowSample = clamp((shadowSample-shadowPosition.z)*65536.0,0.0,1.0);
vlSample = vec3(shadowSample);
#if SHADOW_QUALITY >= 1
if (shadowSample == 0.0) {
float testsample = shadow2D(shadowtex1, shadowPosition.xyz).z;
if (testsample == 1.0) {
vec3 colsample = texture2D(shadowcolor1, shadowPosition.xy).rgb * 4.0;
colsample *= colsample;
vlSample = colsample;
shadowSample = 1.0;
#ifdef OVERWORLD
vlSample *= vlColorReducer;
#endif
}
} else {
#ifdef OVERWORLD
// For water-tinting the water surface when observed from below the surface
if (translucentMult != vec3(1.0) && currentDist > depth0) {
vec3 tinter = vec3(1.0);
if (isEyeInWater == 1) {
vec3 translucentMultM = translucentMult * 2.8;
tinter = pow(translucentMultM, vec3(sunVisibility * 3.0 * clamp01(playerPos.y * 0.03)));
} else {
tinter = 0.1 + 0.9 * pow2(pow2(translucentMult * 1.7));
}
vlSample *= mix(vec3(1.0), tinter, clamp01(oceanAltitude - cameraPosition.y));
}
#endif
if (isEyeInWater == 1 && translucentMult == vec3(1.0)) vlSample = vec3(0.0);
}
#endif
}
#endif
if (currentDist > depth0) vlSample *= translucentMult;
#ifdef OVERWORLD
#ifdef LIGHTSHAFT_SMOKE
vec3 smokePos = 0.0015 * (playerPos + cameraPosition);
vec3 smokeWind = frameTimeCounter * vec3(0.002, 0.001, 0.0);
float smoke = 0.65 * Noise3D(smokePos + smokeWind)
+ 0.25 * Noise3D((smokePos - smokeWind) * 3.0)
+ 0.10 * Noise3D((smokePos + smokeWind) * 9.0);
smoke = smoothstep1(smoothstep1(smoothstep1(smoke)));
totalSmoke += smoke * shadowSample * sampleMult;
#endif
volumetricLight += vec4(vlSample, shadowSample) * sampleMult;
#else
volumetricLight += vec4(vlSample, shadowSample) * enderBeamSample;
#endif
}
#ifdef LIGHTSHAFT_SMOKE
volumetricLight *= pow(totalSmoke / volumetricLight.a, min(1.0 - volumetricLight.a, 0.5));
volumetricLight.rgb /= pow(0.5, 1.0 - volumetricLight.a);
#endif
// Decision of Intensity for Scene Aware Light Shafts //
#if defined OVERWORLD && LIGHTSHAFT_BEHAVIOUR == 1 && SHADOW_QUALITY >= 1
if (viewWidth + viewHeight - gl_FragCoord.x - gl_FragCoord.y < 1.5) {
if (frameCounter % int(0.06666 / frameTimeSmooth + 0.5) == 0) { // Change speed is not too different above 10 fps
int salsX = 5;
int salsY = 5;
float heightThreshold = 6.0;
vec2 viewM = 1.0 / vec2(salsX, salsY);
float salsSampleSum = 0.0;
int salsSampleCount = 0;
for (float i = 0.25; i < salsX; i++) {
for (float h = 0.45; h < salsY; h++) {
vec2 coord = 0.3 + 0.4 * viewM * vec2(i, h);
ivec2 icoord = ivec2(coord * shadowMapResolutionM);
float salsSample = texelFetch(shadowtex0, icoord, 0).x; // read 28A3DK6
if (salsSample < 0.55) {
float sampledHeight = texture2D(shadowcolor1, coord).a;
if (sampledHeight > 0.0) {
sampledHeight = max0(sampledHeight - 0.25) / 0.05; // consistencyMEJHRI7DG
salsSampleSum += sampledHeight;
salsSampleCount++;
}
}
}
}
float salsCheck = salsSampleSum / salsSampleCount;
int reduceAmount = 2;
int skyCheck = 0;
for (float i = 0.1; i < 1.0; i += 0.2) {
skyCheck += int(texelFetch(depthtex0, ivec2(view.x * i, view.y * 0.9), 0).x == 1.0);
}
if (skyCheck >= 4) {
salsCheck = 0.0;
reduceAmount = 3;
}
if (salsCheck > heightThreshold) {
vlFactor = min(vlFactor + OSIEBCA, 1.0);
} else {
vlFactor = max(vlFactor - OSIEBCA * reduceAmount, 0.0);
}
}
} else vlFactor = 0.0;
//if (gl_FragCoord.y < 50) color.rgb = vec3(1,0,1) * float(salsCheck / heightThreshold > gl_FragCoord.x / 1920.0);
/*for (float i = 0.25; i < salsX; i++) {
for (float h = 0.45; h < salsY; h++) {
if (length(texCoord - (0.3 + 0.4 * viewM * vec2(i, h))) < 0.01) return vec4(1,0,1,1);
}
}*/
#endif
#ifdef OVERWORLD
vlColor = pow(vlColor, vec3(0.5 + 0.5 * invNoonFactor * invRainFactor + 0.3 * rainFactor));
vlColor *= 1.0 - (0.3 + 0.3 * noonFactor) * rainFactor - 0.5 * rainyNight;
#if LIGHTSHAFT_DAY_I != 100 || LIGHTSHAFT_NIGHT_I != 100 || LIGHTSHAFT_RAIN_I != 100
#define LIGHTSHAFT_DAY_IM LIGHTSHAFT_DAY_I * 0.01
#define LIGHTSHAFT_NIGHT_IM LIGHTSHAFT_NIGHT_I * 0.01
#define LIGHTSHAFT_RAIN_IM LIGHTSHAFT_RAIN_I * 0.01
if (isEyeInWater == 0) {
#if LIGHTSHAFT_DAY_I != 100 || LIGHTSHAFT_NIGHT_I != 100
vlColor.rgb *= mix(LIGHTSHAFT_NIGHT_IM, LIGHTSHAFT_DAY_IM, sunVisibility);
#endif
#if LIGHTSHAFT_RAIN_I != 100
vlColor.rgb *= mix(1.0, LIGHTSHAFT_RAIN_IM, rainFactor);
#endif
}
#endif
volumetricLight.rgb *= vlColor;
#endif
volumetricLight.rgb *= vlMult;
volumetricLight = max(volumetricLight, vec4(0.0));
#ifdef DISTANT_HORIZONS
if (isEyeInWater == 0) {
#ifdef OVERWORLD
float lViewPosM = lViewPos0;
if (z0 >= 1.0) {
float z0DH = texelFetch(dhDepthTex, texelCoord, 0).r;
vec4 screenPosDH = vec4(texCoord, z0DH, 1.0);
vec4 viewPosDH = dhProjectionInverse * (screenPosDH * 2.0 - 1.0);
viewPosDH /= viewPosDH.w;
lViewPosM = length(viewPosDH.xyz);
}
lViewPosM = min(lViewPosM, renderDistance * 0.6);
float dhVlStillIntense = max(max(vlSceneIntensity, rainFactor), nightFactor * 0.5);
volumetricLight *= mix(0.0003 * lViewPosM, 1.0, dhVlStillIntense);
#else
volumetricLight *= min1(lViewPos1 * 3.0 / renderDistance);
#endif
}
#endif
return volumetricLight;
}

View File

@ -0,0 +1,220 @@
vec3 blocklightCol = vec3(0.1775, 0.108, 0.0775) * vec3(XLIGHT_R, XLIGHT_G, XLIGHT_B);
void AddSpecialLightDetail(inout vec3 light, vec3 albedo, float emission) {
vec3 lightM = max(light, vec3(0.0));
lightM /= (0.2 + 0.8 * GetLuminance(lightM));
lightM *= (1.0 / (1.0 + emission)) * 0.22;
light *= 0.9;
light += pow2(lightM / (albedo + 0.1));
}
vec3 fireSpecialLightColor = vec3(2.05, 0.83, 0.27) * 3.8;
vec3 lavaSpecialLightColor = vec3(3.0, 0.9, 0.2) * 4.0;
vec3 netherPortalSpecialLightColor = vec3(1.8, 0.4, 2.2) * 0.8;
vec3 redstoneSpecialLightColor = vec3(4.0, 0.1, 0.1);
vec4 soulFireSpecialColor = vec4(vec3(0.3, 2.0, 2.2) * 1.0, 0.3);
float candleColorMult = 2.0;
float candleExtraLight = 0.004;
vec4 GetSpecialBlocklightColor(int mat) {
/* Please note that these colors do not determine the intensity of the
final light. Instead; higher values of color change how long the color
will travel, and also how dominant it will be next to other colors.*/
/* Additional feature: An alpha value bigger than 0 will make that
block cast extra light regardless of the vanilla lightmap. Use this
with caution though because our floodfill isn't as accurate as vanilla.*/
if (mat < 50) {
if (mat < 26) {
if (mat < 14) {
if (mat < 8) {
if (mat == 2) return vec4(fireSpecialLightColor, 0.0); // Torch
#ifndef END
if (mat == 3) return vec4(vec3(1.0, 1.0, 1.0) * 4.0, 0.0); // End Rod - This is the base for all lights. Total value 12
#else
if (mat == 3) return vec4(vec3(1.25, 0.5, 1.25) * 4.0, 0.0); // End Rod in the End dimension
#endif
if (mat == 4) return vec4(vec3(0.7, 1.5, 2.0) * 3.0, 0.0); // Beacon
if (mat == 5) return vec4(fireSpecialLightColor, 0.0); // Fire
if (mat == 6) return vec4(vec3(0.7, 1.5, 1.5) * 1.7, 0.0); // Sea Pickle:Waterlogged
if (mat == 7) return vec4(vec3(1.1, 0.85, 0.35) * 5.0, 0.0); // Ochre Froglight
} else {
if (mat == 8) return vec4(vec3(0.6, 1.3, 0.6) * 4.5, 0.0); // Verdant Froglight
if (mat == 9) return vec4(vec3(1.1, 0.5, 0.9) * 4.5, 0.0); // Pearlescent Froglight
if (mat == 10) return vec4(vec3(1.7, 0.9, 0.4) * 4.0, 0.0); // Glowstone
if (mat == 11) return vec4(fireSpecialLightColor, 0.0); // Jack o'Lantern
if (mat == 12) return vec4(fireSpecialLightColor, 0.0); // Lantern
if (mat == 13) return vec4(lavaSpecialLightColor, 0.8); // Lava
}
} else {
if (mat < 20) {
if (mat == 14) return vec4(lavaSpecialLightColor, 0.0); // Lava Cauldron
if (mat == 15) return vec4(fireSpecialLightColor, 0.0); // Campfire:Lit
if (mat == 16) return vec4(vec3(1.7, 0.9, 0.4) * 4.0, 0.0); // Redstone Lamp:Lit
if (mat == 17) return vec4(vec3(1.7, 0.9, 0.4) * 2.0, 0.0); // Respawn Anchor:Lit
if (mat == 18) return vec4(vec3(1.0, 1.25, 1.5) * 3.4, 0.0); // Sea Lantern
if (mat == 19) return vec4(vec3(3.0, 0.9, 0.2) * 3.0, 0.0); // Shroomlight
} else {
if (mat == 20) return vec4(vec3(2.3, 0.9, 0.2) * 3.4, 0.0); // Cave Vines:With Glow Berries
if (mat == 21) return vec4(fireSpecialLightColor * 0.7, 0.0); // Furnace:Lit
if (mat == 22) return vec4(fireSpecialLightColor * 0.7, 0.0); // Smoker:Lit
if (mat == 23) return vec4(fireSpecialLightColor * 0.7, 0.0); // Blast Furnace:Lit
if (mat == 24) return vec4(fireSpecialLightColor * 0.25 * candleColorMult, candleExtraLight); // Standard Candles:Lit
if (mat == 25) return vec4(netherPortalSpecialLightColor * 2.0, 0.4); // Nether Portal
}
}
} else {
if (mat < 38) {
if (mat < 32) {
if (mat == 26) return vec4(netherPortalSpecialLightColor, 0.0); // Crying Obsidian
if (mat == 27) return soulFireSpecialColor; // Soul Fire
if (mat == 28) return soulFireSpecialColor; // Soul Torch
if (mat == 29) return soulFireSpecialColor; // Soul Lantern
if (mat == 30) return soulFireSpecialColor; // Soul Campfire:Lit
if (mat == 31) return vec4(redstoneSpecialLightColor * 0.5, 0.1); // Redstone Ores:Lit
} else {
if (mat == 32) return vec4(redstoneSpecialLightColor * 0.3, 0.1); // Redstone Ores:Unlit
if (mat == 33) return vec4(vec3(1.4, 1.1, 0.5), 0.0); // Enchanting Table
#if GLOWING_LICHEN > 0
if (mat == 34) return vec4(vec3(0.8, 1.1, 1.1), 0.05); // Glow Lichen with IntegratedPBR
#else
if (mat == 34) return vec4(vec3(0.4, 0.55, 0.55), 0.0); // Glow Lichen vanilla
#endif
if (mat == 35) return vec4(redstoneSpecialLightColor * 0.25, 0.0); // Redstone Torch
if (mat == 36) return vec4(vec3(0.325, 0.15, 0.425) * 2.0, 0.05); // Amethyst Cluster, Amethyst Buds, Calibrated Sculk Sensor
if (mat == 37) return vec4(lavaSpecialLightColor * 0.1, 0.1); // Magma Block
}
} else {
if (mat < 44) {
if (mat == 38) return vec4(vec3(2.0, 0.5, 1.5) * 0.3, 0.1); // Dragon Egg
if (mat == 39) return vec4(vec3(2.0, 1.0, 1.5) * 0.25, 0.1); // Chorus Flower
if (mat == 40) return vec4(vec3(2.5, 1.2, 0.4) * 0.1, 0.1); // Brewing Stand
if (mat == 41) return vec4(redstoneSpecialLightColor * 0.4, 0.15); // Redstone Block
if (mat == 42) return vec4(vec3(0.75, 0.75, 3.0) * 0.277, 0.15); // Lapis Block
if (mat == 43) return vec4(vec3(1.7, 0.9, 0.4) * 0.45, 0.05); // Iron Ores
} else {
if (mat == 44) return vec4(vec3(1.7, 1.1, 0.2) * 0.45, 0.1); // Gold Ores
if (mat == 45) return vec4(vec3(1.7, 0.8, 0.4) * 0.45, 0.05); // Copper Ores
if (mat == 46) return vec4(vec3(0.75, 0.75, 3.0) * 0.2, 0.1); // Lapis Ores
if (mat == 47) return vec4(vec3(0.5, 3.5, 0.5) * 0.3, 0.1); // Emerald Ores
if (mat == 48) return vec4(vec3(0.5, 2.0, 2.0) * 0.4, 0.15); // Diamond Ores
if (mat == 49) return vec4(vec3(1.5, 1.5, 1.5) * 0.3, 0.05); // Nether Quartz Ore
}
}
}
} else {
if (mat < 74) {
if (mat < 62) {
if (mat < 56) {
if (mat == 50) return vec4(vec3(1.7, 1.1, 0.2) * 0.45, 0.05); // Nether Gold Ore
if (mat == 51) return vec4(vec3(1.7, 1.1, 0.2) * 0.45, 0.05); // Gilded Blackstone
if (mat == 52) return vec4(vec3(1.8, 0.8, 0.4) * 0.6, 0.15); // Ancient Debris
if (mat == 53) return vec4(vec3(1.4, 0.2, 1.4) * 0.3, 0.05); // Spawner
if (mat == 54) return vec4(vec3(3.1, 1.1, 0.3) * 1.0, 0.1); // Trial Spawner:NotOminous:Active, Vault:NotOminous:Active
if (mat == 55) return vec4(vec3(1.7, 0.9, 0.4) * 4.0, 0.0); // Copper Bulb:BrighterOnes:Lit
} else {
if (mat == 56) return vec4(vec3(1.7, 0.9, 0.4) * 2.0, 0.0); // Copper Bulb:DimmerOnes:Lit
if (mat == 57) return vec4(vec3(0.1, 0.3, 0.4) * 0.5, 0.0005); // Sculk++
if (mat == 58) return vec4(vec3(0.0, 1.4, 1.4) * 4.0, 0.15); // End Portal Frame:Active
if (mat == 59) return vec4(0.0); // Bedrock
if (mat == 60) return vec4(vec3(3.1, 1.1, 0.3) * 0.125, 0.0125); // Command Block
if (mat == 61) return vec4(vec3(3.0, 0.9, 0.2) * 0.125, 0.0125); // Warped Fungus, Crimson Fungus
}
} else {
if (mat < 68) {
if (mat == 62) return vec4(vec3(3.5, 0.6, 0.4) * 0.3, 0.05); // Crimson Stem, Crimson Hyphae
if (mat == 63) return vec4(vec3(0.3, 1.9, 1.5) * 0.3, 0.05); // Warped Stem, Warped Hyphae
if (mat == 64) return vec4(vec3(1.0, 1.0, 1.0) * 0.45, 0.1); // Structure Block, Jigsaw Block, Test Block, Test Instance Block
if (mat == 65) return vec4(vec3(3.0, 0.9, 0.2) * 0.125, 0.0125); // Weeping Vines Plant
if (mat == 66) return vec4(redstoneSpecialLightColor * 0.05, 0.002); // Redstone Wire:Lit, Comparator:Unlit:Subtract
if (mat == 67) return vec4(redstoneSpecialLightColor * 0.125, 0.0125); // Repeater:Lit, Comparator:Lit
} else {
if (mat == 68) return vec4(vec3(0.75), 0.0); // Vault:Inactive
if (mat == 69) return vec4(vec3(1.3, 1.6, 1.6) * 1.0, 0.1); // Trial Spawner:Ominous:Active, Vault:Ominous:Active
if (mat == 70) return vec4(vec3(1.0, 0.1, 0.1) * candleColorMult, candleExtraLight); // Red Candles:Lit
if (mat == 71) return vec4(vec3(1.0, 0.4, 0.1) * candleColorMult, candleExtraLight); // Orange Candles:Lit
if (mat == 72) return vec4(vec3(1.0, 1.0, 0.1) * candleColorMult, candleExtraLight); // Yellow Candles:Lit
if (mat == 73) return vec4(vec3(0.1, 1.0, 0.1) * candleColorMult, candleExtraLight); // Lime Candles:Lit
}
}
} else {
if (mat < 86) {
if (mat < 80) {
if (mat == 74) return vec4(vec3(0.3, 1.0, 0.3) * candleColorMult, candleExtraLight); // Green Candles:Lit
if (mat == 75) return vec4(vec3(0.3, 0.8, 1.0) * candleColorMult, candleExtraLight); // Cyan Candles:Lit
if (mat == 76) return vec4(vec3(0.5, 0.65, 1.0) * candleColorMult, candleExtraLight); // Light Blue Candles:Lit
if (mat == 77) return vec4(vec3(0.1, 0.15, 1.0) * candleColorMult, candleExtraLight); // Blue Candles:Lit
if (mat == 78) return vec4(vec3(0.7, 0.3, 1.0) * candleColorMult, candleExtraLight); // Purple Candles:Lit
if (mat == 79) return vec4(vec3(1.0, 0.1, 1.0) * candleColorMult, candleExtraLight); // Magenta Candles:Lit
} else {
if (mat == 80) return vec4(vec3(1.0, 0.4, 1.0) * candleColorMult, candleExtraLight); // Pink Candles:Lit
if (mat == 81) return vec4(vec3(2.8, 1.1, 0.2) * 0.125, 0.0125); // Open Eyeblossom
if (mat == 82) return vec4(vec3(2.8, 1.1, 0.2) * 0.3, 0.05); // Creaking Heart: Active
if (mat == 83) return vec4(vec3(1.6, 1.6, 0.7) * 0.3, 0.05); // Firefly Bush
if (mat == 84) return vec4(0.0);
if (mat == 85) return vec4(0.0);
}
} else {
if (mat < 92) {
if (mat == 86) return vec4(0.0);
if (mat == 87) return vec4(0.0);
if (mat == 88) return vec4(0.0);
if (mat == 89) return vec4(0.0);
if (mat == 90) return vec4(0.0);
if (mat == 91) return vec4(0.0);
} else {
if (mat == 92) return vec4(0.0);
if (mat == 93) return vec4(0.0);
if (mat == 94) return vec4(0.0);
if (mat == 95) return vec4(0.0);
if (mat == 96) return vec4(0.0);
if (mat == 97) return vec4(0.0);
}
}
}
}
return vec4(blocklightCol * 20.0, 0.0);
}
vec3[] specialTintColor = vec3[](
// 200: White
vec3(1.0),
// 201: Orange
vec3(1.0, 0.3, 0.1),
// 202: Magenta
vec3(1.0, 0.1, 1.0),
// 203: Light Blue
vec3(0.5, 0.65, 1.0),
// 204: Yellow
vec3(1.0, 1.0, 0.1),
// 205: Lime
vec3(0.1, 1.0, 0.1),
// 206: Pink
vec3(1.0, 0.4, 1.0),
// 207: Gray
vec3(1.0),
// 208: Light Gray
vec3(1.0),
// 209: Cyan
vec3(0.3, 0.8, 1.0),
// 210: Purple
vec3(0.7, 0.3, 1.0),
// 211: Blue
vec3(0.1, 0.15, 1.0),
// 212: Brown
vec3(1.0, 0.75, 0.5),
// 213: Green
vec3(0.3, 1.0, 0.3),
// 214: Red
vec3(1.0, 0.1, 0.1),
// 215: Black
vec3(1.0),
// 216: Ice
vec3(0.5, 0.65, 1.0),
// 217: Glass
vec3(1.0),
// 218: Glass Pane
vec3(1.0),
// 219++
vec3(0.0)
);

View File

@ -0,0 +1,3 @@
vec3 cloudRainColor = mix(nightMiddleSkyColor, dayMiddleSkyColor, sunFactor);
vec3 cloudAmbientColor = mix(ambientColor * (sunVisibility2 * (0.55 + 0.1 * noonFactor) + 0.35), cloudRainColor * 0.5, rainFactor);
vec3 cloudLightColor = mix(lightColor * (0.9 + 0.2 * noonFactor), cloudRainColor * 0.25, noonFactor * rainFactor);

View File

@ -0,0 +1,58 @@
#ifndef INCLUDE_LIGHT_AND_AMBIENT_MULTIPLIERS
#define INCLUDE_LIGHT_AND_AMBIENT_MULTIPLIERS
vec3 GetLightColorMult() {
vec3 lightColorMult;
#ifdef OVERWORLD
vec3 morningLightMult = vec3(LIGHT_MORNING_R, LIGHT_MORNING_G, LIGHT_MORNING_B) * LIGHT_MORNING_I;
vec3 noonLightMult = vec3(LIGHT_NOON_R, LIGHT_NOON_G, LIGHT_NOON_B) * LIGHT_NOON_I;
vec3 nightLightMult = vec3(LIGHT_NIGHT_R, LIGHT_NIGHT_G, LIGHT_NIGHT_B) * LIGHT_NIGHT_I;
vec3 rainLightMult = vec3(LIGHT_RAIN_R, LIGHT_RAIN_G, LIGHT_RAIN_B) * LIGHT_RAIN_I;
lightColorMult = mix(noonLightMult, morningLightMult, invNoonFactor2);
lightColorMult = mix(nightLightMult, lightColorMult, sunVisibility2);
lightColorMult = mix(lightColorMult, dot(lightColorMult, vec3(0.33333)) * rainLightMult, rainFactor);
#elif defined NETHER
vec3 netherLightMult = vec3(LIGHT_NETHER_R, LIGHT_NETHER_G, LIGHT_NETHER_B) * LIGHT_NETHER_I;
lightColorMult = netherLightMult;
#elif defined END
vec3 endLightMult = vec3(LIGHT_END_R, LIGHT_END_G, LIGHT_END_B) * LIGHT_END_I;
lightColorMult = endLightMult;
#endif
return lightColorMult;
}
vec3 GetAtmColorMult() {
vec3 atmColorMult;
#ifdef OVERWORLD
vec3 morningAtmMult = vec3(ATM_MORNING_R, ATM_MORNING_G, ATM_MORNING_B) * ATM_MORNING_I;
vec3 noonAtmMult = vec3(ATM_NOON_R, ATM_NOON_G, ATM_NOON_B) * ATM_NOON_I;
vec3 nightAtmMult = vec3(ATM_NIGHT_R, ATM_NIGHT_G, ATM_NIGHT_B) * ATM_NIGHT_I;
vec3 rainAtmMult = vec3(ATM_RAIN_R, ATM_RAIN_G, ATM_RAIN_B) * ATM_RAIN_I;
atmColorMult = mix(noonAtmMult, morningAtmMult, invNoonFactor2);
atmColorMult = mix(nightAtmMult, atmColorMult, sunVisibility2);
atmColorMult = mix(atmColorMult, dot(atmColorMult, vec3(0.33333)) * rainAtmMult, rainFactor);
#elif defined NETHER
vec3 netherAtmMult = vec3(ATM_NETHER_R, ATM_NETHER_G, ATM_NETHER_B) * ATM_NETHER_I;
atmColorMult = netherAtmMult;
#elif defined END
vec3 endAtmMult = vec3(ATM_END_R, ATM_END_G, ATM_END_B) * ATM_END_I;
atmColorMult = endAtmMult;
#endif
return atmColorMult;
}
vec3 lightColorMult;
vec3 atmColorMult;
vec3 sqrtAtmColorMult;
#endif //INCLUDE_LIGHT_AND_AMBIENT_MULTIPLIERS

View File

@ -0,0 +1,77 @@
#ifndef INCLUDE_LIGHT_AND_AMBIENT_COLORS
#define INCLUDE_LIGHT_AND_AMBIENT_COLORS
#if defined OVERWORLD
#ifndef COMPOSITE
vec3 noonClearLightColor = vec3(0.7, 0.55, 0.4) * 1.9; //ground and cloud color
#else
vec3 noonClearLightColor = vec3(0.4, 0.7, 1.4); //light shaft color
#endif
vec3 noonClearAmbientColor = pow(skyColor, vec3(0.65)) * 0.85;
#ifndef COMPOSITE
vec3 sunsetClearLightColor = pow(vec3(0.64, 0.45, 0.3), vec3(1.5 + invNoonFactor)) * 5.0; //ground and cloud color
#else
vec3 sunsetClearLightColor = pow(vec3(0.62, 0.39, 0.24), vec3(1.5 + invNoonFactor)) * 6.8; //light shaft color
#endif
vec3 sunsetClearAmbientColor = noonClearAmbientColor * vec3(1.21, 0.92, 0.76) * 0.95;
#if !defined COMPOSITE && !defined DEFERRED1
vec3 nightClearLightColor = vec3(0.15, 0.14, 0.20) * (0.4 + vsBrightness * 0.4); //ground color
#elif defined DEFERRED1
vec3 nightClearLightColor = vec3(0.11, 0.14, 0.20); //cloud color
#else
vec3 nightClearLightColor = vec3(0.07, 0.12, 0.27); //light shaft color
#endif
vec3 nightClearAmbientColor = vec3(0.09, 0.12, 0.17) * (1.55 + vsBrightness * 0.77);
#ifdef SPECIAL_BIOME_WEATHER
vec3 drlcSnowM = inSnowy * vec3(-0.06, 0.0, 0.04);
vec3 drlcDryM = inDry * vec3(0.0, -0.03, -0.05);
#else
vec3 drlcSnowM = vec3(0.0), drlcDryM = vec3(0.0);
#endif
#if RAIN_STYLE == 2
vec3 drlcRainMP = vec3(-0.03, 0.0, 0.02);
#ifdef SPECIAL_BIOME_WEATHER
vec3 drlcRainM = inRainy * drlcRainMP;
#else
vec3 drlcRainM = drlcRainMP;
#endif
#else
vec3 drlcRainM = vec3(0.0);
#endif
vec3 dayRainLightColor = vec3(0.21, 0.16, 0.13) * 0.85 + noonFactor * vec3(0.0, 0.02, 0.06)
+ rainFactor * (drlcRainM + drlcSnowM + drlcDryM);
vec3 dayRainAmbientColor = vec3(0.2, 0.2, 0.25) * (1.8 + 0.5 * vsBrightness);
vec3 nightRainLightColor = vec3(0.03, 0.035, 0.05) * (0.5 + 0.5 * vsBrightness);
vec3 nightRainAmbientColor = vec3(0.16, 0.20, 0.3) * (0.75 + 0.6 * vsBrightness);
#ifndef COMPOSITE
float noonFactorDM = noonFactor; //ground and cloud factor
#else
float noonFactorDM = noonFactor * noonFactor; //light shaft factor
#endif
vec3 dayLightColor = mix(sunsetClearLightColor, noonClearLightColor, noonFactorDM);
vec3 dayAmbientColor = mix(sunsetClearAmbientColor, noonClearAmbientColor, noonFactorDM);
vec3 clearLightColor = mix(nightClearLightColor, dayLightColor, sunVisibility2);
vec3 clearAmbientColor = mix(nightClearAmbientColor, dayAmbientColor, sunVisibility2);
vec3 rainLightColor = mix(nightRainLightColor, dayRainLightColor, sunVisibility2) * 2.5;
vec3 rainAmbientColor = mix(nightRainAmbientColor, dayRainAmbientColor, sunVisibility2);
vec3 lightColor = mix(clearLightColor, rainLightColor, rainFactor);
vec3 ambientColor = mix(clearAmbientColor, rainAmbientColor, rainFactor);
#elif defined NETHER
vec3 lightColor = vec3(0.0);
vec3 ambientColor = (netherColor + 0.5 * lavaLightColor) * (0.9 + 0.45 * vsBrightness);
#elif defined END
vec3 endLightColor = vec3(0.68, 0.51, 1.07);
float endLightBalancer = 0.2 * vsBrightness;
vec3 lightColor = endLightColor * (0.35 - endLightBalancer);
vec3 ambientColor = endLightColor * (0.2 + endLightBalancer);
#endif
#endif //INCLUDE_LIGHT_AND_AMBIENT_COLORS

View File

@ -0,0 +1,13 @@
#ifndef INCLUDE_MOON_PHASE_INF
#define INCLUDE_MOON_PHASE_INF
#ifdef OVERWORLD
float moonPhaseInfluence = mix(
1.0,
moonPhase == 0 ? MOON_PHASE_FULL : moonPhase != 4 ? MOON_PHASE_PARTIAL : MOON_PHASE_DARK,
1.0 - sunVisibility2
);
#else
float moonPhaseInfluence = 1.0;
#endif
#endif

View File

@ -0,0 +1,56 @@
#ifndef INCLUDE_SKY_COLORS
#define INCLUDE_SKY_COLORS
#ifdef OVERWORLD
vec3 skyColorSqrt = sqrt(skyColor);
// Doing these things because vanilla skyColor gets to 0 during a thunderstorm
float invRainStrength2 = (1.0 - rainStrength) * (1.0 - rainStrength);
vec3 skyColorM = mix(max(skyColorSqrt, vec3(0.63, 0.67, 0.73)), skyColorSqrt, invRainStrength2);
vec3 skyColorM2 = mix(max(skyColor, sunFactor * vec3(0.265, 0.295, 0.35)), skyColor, invRainStrength2);
#ifdef SPECIAL_BIOME_WEATHER
vec3 nmscSnowM = inSnowy * vec3(-0.3, 0.05, 0.2);
vec3 nmscDryM = inDry * vec3(-0.3);
vec3 ndscSnowM = inSnowy * vec3(-0.25, -0.01, 0.25);
vec3 ndscDryM = inDry * vec3(-0.05, -0.09, -0.1);
#else
vec3 nmscSnowM = vec3(0.0), nmscDryM = vec3(0.0), ndscSnowM = vec3(0.0), ndscDryM = vec3(0.0);
#endif
#if RAIN_STYLE == 2
vec3 nmscRainMP = vec3(-0.15, 0.025, 0.1);
vec3 ndscRainMP = vec3(-0.125, -0.005, 0.125);
#ifdef SPECIAL_BIOME_WEATHER
vec3 nmscRainM = inRainy * ndscRainMP;
vec3 ndscRainM = inRainy * ndscRainMP;
#else
vec3 nmscRainM = ndscRainMP;
vec3 ndscRainM = ndscRainMP;
#endif
#else
vec3 nmscRainM = vec3(0.0), ndscRainM = vec3(0.0);
#endif
vec3 nmscWeatherM = vec3(-0.1, -0.4, -0.6) + vec3(0.0, 0.06, 0.12) * noonFactor;
vec3 ndscWeatherM = vec3(-0.15, -0.3, -0.42) + vec3(0.0, 0.02, 0.08) * noonFactor;
vec3 noonUpSkyColor = pow(skyColorM, vec3(2.9));
vec3 noonMiddleSkyColor = skyColorM * (vec3(1.15) + rainFactor * (nmscWeatherM + nmscRainM + nmscSnowM + nmscDryM))
+ noonUpSkyColor * 0.6;
vec3 noonDownSkyColor = skyColorM * (vec3(0.9) + rainFactor * (ndscWeatherM + ndscRainM + ndscSnowM + ndscDryM))
+ noonUpSkyColor * 0.25;
vec3 sunsetUpSkyColor = skyColorM2 * (vec3(0.8, 0.58, 0.58) + vec3(0.1, 0.2, 0.35) * rainFactor2);
vec3 sunsetMiddleSkyColor = skyColorM2 * (vec3(1.8, 1.3, 1.2) + vec3(0.15, 0.25, -0.05) * rainFactor2);
vec3 sunsetDownSkyColorP = vec3(1.45, 0.86, 0.5) - vec3(0.8, 0.3, 0.0) * rainFactor;
vec3 sunsetDownSkyColor = sunsetDownSkyColorP * 0.5 + 0.25 * sunsetMiddleSkyColor;
vec3 dayUpSkyColor = mix(noonUpSkyColor, sunsetUpSkyColor, invNoonFactor2);
vec3 dayMiddleSkyColor = mix(noonMiddleSkyColor, sunsetMiddleSkyColor, invNoonFactor2);
vec3 dayDownSkyColor = mix(noonDownSkyColor, sunsetDownSkyColor, invNoonFactor2);
vec3 nightColFactor = vec3(0.07, 0.14, 0.24) * (1.0 - 0.5 * rainFactor) + skyColor;
vec3 nightUpSkyColor = pow(nightColFactor, vec3(0.90)) * 0.4;
vec3 nightMiddleSkyColor = sqrt(nightUpSkyColor) * 0.68;
vec3 nightDownSkyColor = nightMiddleSkyColor * vec3(0.82, 0.82, 0.88);
#endif
#endif //INCLUDE_SKY_COLORS

View File

@ -0,0 +1,767 @@
/*---------------------------------------------------------------------
___ __ __ ____ ___ ____ _____ _ _ _ _____
|_ _| \/ | _ \ / _ \| _ \_ _|/ \ | \ | |_ _|
| || |\/| | |_) | | | | |_) || | / _ \ | \| | | |
| || | | | __/| |_| | _ < | |/ ___ \| |\ | | |
|___|_| |_|_| \___/|_| \_\|_/_/ \_\_| \_| |_|
.
-> -> -> EDITING THIS FILE HAS A HIGH CHANCE TO BREAK THE SHADER PACK
-> -> -> DO NOT CHANGE ANYTHING UNLESS YOU KNOW WHAT YOU ARE DOING
-> -> -> DO NOT EXPECT SUPPORT AFTER MODIFYING SHADER FILES
---------------------------------------------------------------------*/
//User Settings//
#define SHADER_STYLE 4 //[1 4]
#define RP_MODE 1 //[1 0 3 2]
#define SHADOW_QUALITY 2 //[-1 0 1 2 3 4 5]
const float shadowDistance = 192.0; //[64.0 80.0 96.0 112.0 128.0 160.0 192.0 224.0 256.0 320.0 384.0 512.0 768.0 1024.0]
#define ENTITY_SHADOWS_DEFINE -1 //[-1 1]
#define SSAO_QUALI_DEFINE 2 //[0 2 3]
#define FXAA_DEFINE 1 //[-1 1]
#define DETAIL_QUALITY 2 //[0 2 3]
#define CLOUD_QUALITY 2 //[0 1 2 3]
#define LIGHTSHAFT_QUALI_DEFINE 2 //[0 1 2 3 4]
#define WATER_REFLECT_QUALITY 2 //[-1 0 1 2]
#define BLOCK_REFLECT_QUALITY 3 //[0 1 2 3]
#define ANISOTROPIC_FILTER 0 //[0 4 8 16]
#define COLORED_LIGHTING 0 //[128 192 256 384 512 768 1024]
#if defined IRIS_FEATURE_CUSTOM_IMAGES && SHADOW_QUALITY > -1 && !defined MC_OS_MAC && !(defined DH_TERRAIN || defined DH_WATER)
#define COLORED_LIGHTING_INTERNAL COLORED_LIGHTING
#if COLORED_LIGHTING_INTERNAL > 0
#define COLORED_LIGHT_SATURATION 100 //[50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125]
#define COLORED_LIGHT_FOG
#define COLORED_LIGHT_FOG_I 0.65 //[0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50]
#define PORTAL_EDGE_EFFECT
#ifndef IRIS_HAS_CONNECTED_TEXTURES
#define CONNECTED_GLASS_EFFECT
#endif
//#define COLORED_CANDLE_LIGHT
#endif
#else
#define COLORED_LIGHTING_INTERNAL 0
#endif
#define WATER_STYLE_DEFINE -1 //[-1 1 2 3]
#define WATER_CAUSTIC_STYLE_DEFINE -1 //[-1 1 3]
#define WATER_REFRACTION_INTENSITY 2.0 //[0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0]
#define WATER_FOAM_I 100 //[0 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150]
#define WATER_ALPHA_MULT 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300 325 350 375 400 425 450 475 500 550 600 650 700 750 800 850 900]
#define WATER_FOG_MULT 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300 325 350 375 400 425 450 475 500 550 600 650 700 750 800 850 900]
#define WATERCOLOR_MODE 3 //[3 2 0]
#define BRIGHT_CAVE_WATER
#define WATERCOLOR_R 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300]
#define WATERCOLOR_G 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300]
#define WATERCOLOR_B 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300]
#define UNDERWATERCOLOR_R 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150]
#define UNDERWATERCOLOR_G 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150]
#define UNDERWATERCOLOR_B 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150]
#define WATER_BUMPINESS 1.25 //[0.05 0.10 0.15 0.20 0.25 0.30 0.40 0.50 0.65 0.80 1.00 1.25 1.50 2.00 2.50]
#define WATER_BUMP_SMALL 0.75 //[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 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00]
#define WATER_BUMP_MED 1.70 //[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 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00]
#define WATER_BUMP_BIG 2.00 //[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 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00]
#define WATER_SPEED_MULT 1.10 //[0.00 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 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00]
#define WATER_SIZE_MULT 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300]
#define SHADOW_SMOOTHING 4 //[1 2 3 4]
#define RAIN_PUDDLES 0 //[0 1 2 3 4]
#define SSAO_I 100 //[0 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300]
#define VANILLAAO_I 100 //[0 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300]
#define AURORA_STYLE_DEFINE -1 //[-1 0 1 2]
#define AURORA_CONDITION 3 //[0 1 2 3 4]
//#define NIGHT_NEBULA
#define NIGHT_NEBULA_I 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300]
#define WEATHER_TEX_OPACITY 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300 325 350 375 400 425 450 475 500 550 600 650 700 750 800 850 900]
#define SPECIAL_BIOME_WEATHER
#define RAIN_STYLE 1 //[1 2]
#define SUN_MOON_STYLE_DEFINE -1 //[-1 1 2 3]
#define SUN_MOON_HORIZON
#define SUN_MOON_DURING_RAIN
#define NIGHT_STAR_AMOUNT 2 //[2 3]
#define RAINBOWS 1 //[0 1 3]
#define CLOUD_STYLE_DEFINE -1 //[-1 0 1 3 50]
//#define CLOUD_SHADOWS
#define CLOUD_CLOSED_AREA_CHECK
#define CLOUD_ALT1 192 //[-96 -92 -88 -84 -80 -76 -72 -68 -64 -60 -56 -52 -48 -44 -40 -36 -32 -28 -24 -20 -16 -10 -8 -4 0 4 8 12 16 20 22 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120 124 128 132 136 140 144 148 152 156 160 164 168 172 176 180 184 188 192 196 200 204 208 212 216 220 224 228 232 236 240 244 248 252 256 260 264 268 272 276 280 284 288 292 296 300 304 308 312 316 320 324 328 332 336 340 344 348 352 356 360 364 368 372 376 380 384 388 392 396 400 404 408 412 416 420 424 428 432 436 440 444 448 452 456 460 464 468 472 476 480 484 488 492 496 500 510 520 530 540 550 560 570 580 590 600 610 620 630 640 650 660 670 680 690 700 710 720 730 740 750 760 770 780 790 800]
#define CLOUD_SPEED_MULT 100 //[0 5 7 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300 325 350 375 400 425 450 475 500 550 600 650 700 750 800 850 900]
#define CLOUD_R 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300]
#define CLOUD_G 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300]
#define CLOUD_B 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300]
#define CLOUD_UNBOUND_AMOUNT 1.00 //[0.70 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.80 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.90 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00 1.02 1.04 1.06 1.08 1.10 1.12 1.14 1.16 1.18 1.20 1.22 1.24 1.26 1.28 1.30 1.32 1.34 1.36 1.38 1.40 1.42 1.44 1.46 1.48 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00 2.10 2.20 2.30 2.40 2.50 2.60 2.70 2.80 2.90 3.00]
#define CLOUD_UNBOUND_SIZE_MULT 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300]
#define CLOUD_UNBOUND_RAIN_ADD 0.40 //[0.00 0.05 0.06 0.07 0.08 0.09 0.10 0.12 0.14 0.16 0.18 0.22 0.26 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50]
//#define DOUBLE_REIM_CLOUDS
#define CLOUD_ALT2 288 //[-96 -92 -88 -84 -80 -76 -72 -68 -64 -60 -56 -52 -48 -44 -40 -36 -32 -28 -24 -20 -16 -10 -8 -4 0 4 8 12 16 20 22 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120 124 128 132 136 140 144 148 152 156 160 164 168 172 176 180 184 188 192 196 200 204 208 212 216 220 224 228 232 236 240 244 248 252 256 260 264 268 272 276 280 284 288 292 296 300 304 308 312 316 320 324 328 332 336 340 344 348 352 356 360 364 368 372 376 380 384 388 392 396 400 404 408 412 416 420 424 428 432 436 440 444 448 452 456 460 464 468 472 476 480 484 488 492 496 500 510 520 530 540 550 560 570 580 590 600 610 620 630 640 650 660 670 680 690 700 710 720 730 740 750 760 770 780 790 800]
#define NETHER_VIEW_LIMIT 256.0 //[96.0 112.0 128.0 160.0 192.0 224.0 256.0 320.0 384.0 512.0 768.0 1024.0 99999.0]
#define NETHER_COLOR_MODE 3 //[3 2 0]
#define NETHER_STORM
#define NETHER_STORM_LOWER_ALT 28 //[-296 -292 -288 -284 -280 -276 -272 -268 -264 -260 -256 -252 -248 -244 -240 -236 -232 -228 -224 -220 -216 -212 -208 -204 -200 -196 -192 -188 -184 -180 -176 -172 -168 -164 -160 -156 -152 -148 -144 -140 -136 -132 -128 -124 -120 -116 -112 -108 -104 -100 -96 -92 -88 -84 -80 -76 -72 -68 -64 -60 -56 -52 -48 -44 -40 -36 -32 -28 -24 -20 -16 -12 -8 -4 0 4 8 12 16 20 22 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120 124 128 132 136 140 144 148 152 156 160 164 168 172 176 180 184 188 192 196 200 204 208 212 216 220 224 228 232 236 240 244 248 252 256 260 264 268 272 276 280 284 288 292 296 300]
#define NETHER_STORM_HEIGHT 200 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300 325 350 375 400 425 450 475 500 550 600 650 700 750 800 850 900]
#define NETHER_STORM_I 0.40 //[0.05 0.06 0.07 0.08 0.09 0.10 0.12 0.14 0.16 0.18 0.22 0.26 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50]
#define BORDER_FOG
#define ATM_FOG_MULT 0.95 //[0.50 0.65 0.80 0.95]
#define ATM_FOG_DISTANCE 100 //[10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300]
#define ATM_FOG_ALTITUDE 63 //[0 5 10 15 20 25 30 35 40 45 50 52 54 56 58 60 61 62 63 64 65 66 67 68 69 70 72 74 76 78 80 85 90 95 100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175 180 185 190 195 200 210 220 230 240 250 260 270 280 290 300]
#define CAVE_FOG
#define LIGHTSHAFT_BEHAVIOUR 1 //[0 1 2 3]
#define LIGHTSHAFT_DAY_I 100 //[1 3 5 7 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200]
#define LIGHTSHAFT_NIGHT_I 100 //[1 3 5 7 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200]
#define LIGHTSHAFT_RAIN_I 100 //[1 3 5 7 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200]
//#define LIGHTSHAFT_SMOKE
#define SPECIAL_PALE_GARDEN_LIGHTSHAFTS
#define BLOOM
#define BLOOM_STRENGTH 0.12 //[0.027 0.036 0.045 0.054 0.063 0.072 0.081 0.09 0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.21 0.23 0.25 0.28 0.32 10.00]
#define IMAGE_SHARPENING 5 //[0 1 2 3 4 5 6 7 8 9 10]
//#define MOTION_BLURRING
#define MOTION_BLURRING_STRENGTH 1.00 //[0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00]
#define VIGNETTE_R
#define CHROMA_ABERRATION 0 //[0 1 2 3 4 5 6 7 8]
#define UNDERWATER_DISTORTION
#define LENSFLARE_MODE 0 //[0 1 2]
#define LENSFLARE_I 1.00 //[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 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.25 4.50 4.75 5.00]
#define TAA_MODE 1 //[1 2 0]
#define DISTANT_LIGHT_BOKEH
#define WORLD_BLUR 0 //[0 1 2]
//#define WB_FOV_SCALED
//#define WB_CHROMATIC
//#define WB_ANAMORPHIC
#define WB_DOF_I 64.0 //[1.0 1.5 2.0 3.0 4.5 6.0 9.0 12.0 18.0 24.0 32.0 48.0 64.0 96.0 128.0 192.0 256.0 384.0 512.0 768.0 1024.0 1536.0 2048.0 3072.0 4096.0]
#define WB_DOF_FOCUS 0 //[-1 0 1 2 3 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 65 67 69 72 74 76 79 81 83 86 88 91 94 96 99 102 104 107 110 113 115 118 121 124 127 130 133 136 140 143 146 149 153 156 160 163 167 170 174 178 182 185 189 193 197 201 206 210 214 219 223 227 232 237 242 246 251 256 261 267 272 277 283 288 294 300 306 312 318 324 330 337 344 350 357 364 371 379 386 394 402 410 418 427 435 444 453 462 472 481 491 501 512 530 550 575 600 625 650 675 700 725 750 800 850 900]
#define WB_DB_DAY_I 64.0 //[1.0 1.5 2.0 3.0 4.5 6.0 9.0 12.0 18.0 24.0 32.0 48.0 64.0 96.0 128.0 192.0 256.0 384.0 512.0 768.0 1024.0 1536.0 2048.0 3072.0 4096.0]
#define WB_DB_NIGHT_I 64.0 //[1.0 1.5 2.0 3.0 4.5 6.0 9.0 12.0 18.0 24.0 32.0 48.0 64.0 96.0 128.0 192.0 256.0 384.0 512.0 768.0 1024.0 1536.0 2048.0 3072.0 4096.0]
#define WB_DB_RAIN_I 64.0 //[1.0 1.5 2.0 3.0 4.5 6.0 9.0 12.0 18.0 24.0 32.0 48.0 64.0 96.0 128.0 192.0 256.0 384.0 512.0 768.0 1024.0 1536.0 2048.0 3072.0 4096.0]
#define WB_DB_WATER_I 64.0 //[1.0 1.5 2.0 3.0 4.5 6.0 9.0 12.0 18.0 24.0 32.0 48.0 64.0 96.0 128.0 192.0 256.0 384.0 512.0 768.0 1024.0 1536.0 2048.0 3072.0 4096.0]
#define WB_DB_NETHER_I 64.0 //[1.0 1.5 2.0 3.0 4.5 6.0 9.0 12.0 18.0 24.0 32.0 48.0 64.0 96.0 128.0 192.0 256.0 384.0 512.0 768.0 1024.0 1536.0 2048.0 3072.0 4096.0]
#define WB_DB_END_I 64.0 //[1.0 1.5 2.0 3.0 4.5 6.0 9.0 12.0 18.0 24.0 32.0 48.0 64.0 96.0 128.0 192.0 256.0 384.0 512.0 768.0 1024.0 1536.0 2048.0 3072.0 4096.0]
#define ENTITY_GN_AND_CT
#define GENERATED_NORMAL_MULT 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 250 300 400]
#define COATED_TEXTURE_MULT 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200]
#define GLOWING_ORE_MASTER 1 //[0 1 2]
#define GLOWING_ORE_MULT 1.00 //[0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#if GLOWING_ORE_MASTER == 2 || SHADER_STYLE == 4 && GLOWING_ORE_MASTER == 1
#define GLOWING_ORE_IRON
#define GLOWING_ORE_GOLD
#define GLOWING_ORE_COPPER
#define GLOWING_ORE_REDSTONE
#define GLOWING_ORE_LAPIS
#define GLOWING_ORE_EMERALD
#define GLOWING_ORE_DIAMOND
#define GLOWING_ORE_NETHERQUARTZ
#define GLOWING_ORE_NETHERGOLD
#define GLOWING_ORE_GILDEDBLACKSTONE
#define GLOWING_ORE_ANCIENTDEBRIS
#define GLOWING_ORE_MODDED
#endif
#define GLOWING_AMETHYST 1 //[0 1 2]
#define GLOWING_LICHEN 1 //[0 1 2]
//#define EMISSIVE_REDSTONE_BLOCK
//#define EMISSIVE_LAPIS_BLOCK
//#define GLOWING_ARMOR_TRIM
#define IPBR_EMISSIVE_MODE 1 //[1 3 2]
//#define IPBR_COMPATIBILITY_MODE
#define NORMAL_MAP_STRENGTH 100 //[0 10 15 20 30 40 60 80 100 120 140 160 180 200]
#define CUSTOM_EMISSION_INTENSITY 100 //[0 5 7 10 15 20 25 30 35 40 45 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 225 250]
#define POM_DEPTH 0.80 //[0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00]
#define POM_QUALITY 128 //[16 32 64 128 256 512]
#define POM_DISTANCE 32 //[16 24 32 48 64 128 256 512 1024]
#define POM_LIGHTING_MODE 2 //[1 2]
//#define POM_ALLOW_CUTOUT
#define DIRECTIONAL_BLOCKLIGHT 0 //[0 3 7 11]
#define CAVE_LIGHTING 100 //[0 5 7 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300 325 350 375 400 425 450 475 500 550 600 650 700 750 800 850 900 950 1000 1100 1200 1300 1400 1500 1600]
#define HELD_LIGHTING_MODE 2 //[0 1 2]
#define BLOCKLIGHT_FLICKERING 0 //[0 2 3 4 5 6 7 8 9 10]
#define AMBIENT_MULT 100 //[50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200]
#define PLAYER_SHADOW 1 //[-1 1]
#define WAVING_SPEED 1.00 //[0.00 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 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00]
#define WAVING_I 1.00 //[0.25 0.50 0.75 1.00 1.25 1.50 1.75 2.00 50.0]
#define WAVING_I_RAIN_MULT 100 //[25 50 75 100 125 150 175 200]
#define NO_WAVING_INDOORS
#define WAVING_FOLIAGE
#define WAVING_LEAVES
#define WAVING_LAVA
#define WAVING_LILY_PAD
#define WAVING_WATER_VERTEX
#define WAVING_RAIN
#define SPECIAL_PORTAL_EFFECTS
#define SUN_ANGLE -1 //[-1 0 -20 -30 -40 -50 -60 60 50 40 30 20]
#define SELECT_OUTLINE 1 //[0 1 3 4 2]
//#define SELECT_OUTLINE_AUTO_HIDE
#define SELECT_OUTLINE_I 1.00 //[0.00 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 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00]
#define SELECT_OUTLINE_R 1.35 //[0.00 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 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00]
#define SELECT_OUTLINE_G 0.35 //[0.00 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 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00]
#define SELECT_OUTLINE_B 1.75 //[0.00 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 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00]
//#define WORLD_OUTLINE
#define WORLD_OUTLINE_THICKNESS 1 //[1 2 3 4]
#define WORLD_OUTLINE_I 1.50 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00]
#define WORLD_OUTLINE_ON_ENTITIES
//#define DARK_OUTLINE
#define DARK_OUTLINE_THICKNESS 1 //[1 2]
#define HAND_SWAYING 0 //[0 1 2 3]
#define SHOW_LIGHT_LEVEL 0 //[0 1 2 3]
//#define REDUCE_CLOSE_PARTICLES
//#define LESS_LAVA_FOG
//#define SNOWY_WORLD
//#define COLOR_CODED_PROGRAMS
//#define GLOWING_COLORED_PARTICLES
//#define MOON_PHASE_INF_LIGHT
//#define MOON_PHASE_INF_ATMOSPHERE
#define MOON_PHASE_INF_REFLECTION
#define MOON_PHASE_FULL 1.00 //[0.01 0.03 0.05 0.07 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 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define MOON_PHASE_PARTIAL 0.85 //[0.01 0.03 0.05 0.07 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 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define MOON_PHASE_DARK 0.60 //[0.01 0.03 0.05 0.07 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 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
//#define PIXELATED_SHADOWS
//#define PIXELATED_BLOCKLIGHT
//#define PIXELATED_AO
#define PIXEL_SCALE 1 //[-2 -1 1 2 3 4 5]
#define T_EXPOSURE 1.40 //[0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00 2.10 2.20 2.30 2.40 2.50 2.60 2.70 2.80]
#define TM_WHITE_CURVE 2.0 //[1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0]
#define T_LOWER_CURVE 1.10 //[0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00]
#define T_UPPER_CURVE 1.30 //[0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00]
#define T_SATURATION 1.00 //[0.00 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 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00]
#define T_VIBRANCE 1.00 //[0.00 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 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00]
//#define COLORGRADING
#define GR_RR 100 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500]
#define GR_RG 0 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500]
#define GR_RB 0 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500]
#define GR_RC 1.00 //[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 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00]
#define GR_GR 0 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500]
#define GR_GG 100 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500]
#define GR_GB 0 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500]
#define GR_GC 1.00 //[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 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00]
#define GR_BR 0 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500]
#define GR_BG 0 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500]
#define GR_BB 100 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500]
#define GR_BC 1.00 //[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 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00]
//#define LIGHT_COLOR_MULTS
//#define ATM_COLOR_MULTS
#define LIGHT_MORNING_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_MORNING_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_MORNING_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_MORNING_I 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_MORNING_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_MORNING_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_MORNING_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_MORNING_I 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_NOON_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_NOON_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_NOON_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_NOON_I 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_NOON_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_NOON_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_NOON_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_NOON_I 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_NIGHT_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_NIGHT_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_NIGHT_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_NIGHT_I 1.00 //[0.01 0.03 0.05 0.07 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 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_NIGHT_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_NIGHT_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_NIGHT_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_NIGHT_I 1.00 //[0.01 0.03 0.05 0.07 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 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_RAIN_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_RAIN_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_RAIN_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_RAIN_I 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_RAIN_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_RAIN_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_RAIN_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_RAIN_I 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_NETHER_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_NETHER_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_NETHER_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_NETHER_I 1.00 //[0.01 0.03 0.05 0.07 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 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_NETHER_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_NETHER_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_NETHER_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_NETHER_I 1.00 //[0.01 0.03 0.05 0.07 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 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_END_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_END_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_END_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define LIGHT_END_I 1.00 //[0.01 0.03 0.05 0.07 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 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_END_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_END_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_END_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define ATM_END_I 1.00 //[0.01 0.03 0.05 0.07 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 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define XLIGHT_R 1.00 //[0.01 0.03 0.05 0.07 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 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define XLIGHT_G 1.00 //[0.01 0.03 0.05 0.07 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 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define XLIGHT_B 1.00 //[0.01 0.03 0.05 0.07 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 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
#define XLIGHT_I 1.00 //[0.01 0.03 0.05 0.07 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 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
//#define DREAM_TWEAKED_LIGHTING
//#define DREAM_TWEAKED_BORDERFOG
//#define FOLIAGE_ALT_SUBSURFACE
//Internal Settings//
#define SIDE_SHADOWING
#define SHADOW_FILTERING
#define GLASS_OPACITY 0.25
#define DIRECTIONAL_SHADING
#define ATMOSPHERIC_FOG
#define BLOOM_FOG
#define GLOWING_ENTITY_FIX
#define FLICKERING_FIX
//#define SAFER_GENERATED_NORMALS
#define SHADOW_FRUSTUM_FIT
//Extensions//
//Information//
#define info0 0 //[0]
#define info1 0 //[0]
#define info2 0 //[0]
#define info3 0 //[0]
#define info4 0 //[0]
#define info5 0 //[0]
#define info6 0 //[0]
#define info7 0 //[0]
#define info8 0 //[0]
#define info9 0 //[0]
#define info10 0 //[0]
//Visual Style and Performance Setting Handling//
#if RP_MODE == 1
#define IPBR
#define IPBR_PARTICLE_FEATURES
//#define GENERATED_NORMALS
//#define COATED_TEXTURES
//#define FANCY_GLASS
//#define GREEN_SCREEN_LIME
#endif
#if RP_MODE >= 2
#define CUSTOM_PBR
#define POM
#endif
#if SHADER_STYLE == 1
#define WATER_STYLE_DEFAULT 1
//#define WATER_CAUSTIC_STYLE_DEFAULT 1
#define AURORA_STYLE_DEFAULT 1
#define SUN_MOON_STYLE_DEFAULT 1
#define CLOUD_STYLE_DEFAULT 1
#elif SHADER_STYLE == 4
#define WATER_STYLE_DEFAULT 3
//#define WATER_CAUSTIC_STYLE_DEFAULT 3
#define AURORA_STYLE_DEFAULT 2
#define SUN_MOON_STYLE_DEFAULT 2
#define CLOUD_STYLE_DEFAULT 3
#endif
#if WATER_STYLE_DEFINE == -1
#define WATER_STYLE WATER_STYLE_DEFAULT
#else
#define WATER_STYLE WATER_STYLE_DEFINE
#endif
#if WATER_CAUSTIC_STYLE_DEFINE == -1
#define WATER_CAUSTIC_STYLE WATER_STYLE
#else
#define WATER_CAUSTIC_STYLE WATER_CAUSTIC_STYLE_DEFINE
#endif
#if AURORA_STYLE_DEFINE == -1
#define AURORA_STYLE AURORA_STYLE_DEFAULT
#else
#define AURORA_STYLE AURORA_STYLE_DEFINE
#endif
#if SUN_MOON_STYLE_DEFINE == -1
#define SUN_MOON_STYLE SUN_MOON_STYLE_DEFAULT
#else
#define SUN_MOON_STYLE SUN_MOON_STYLE_DEFINE
#endif
#if CLOUD_STYLE_DEFINE == -1
#define CLOUD_STYLE CLOUD_STYLE_DEFAULT
#else
#define CLOUD_STYLE CLOUD_STYLE_DEFINE
#endif
// Thanks to SpacEagle17 and isuewo for the sun angle handling
#ifdef END
const float sunPathRotation = 0.0;
#else
#if SUN_ANGLE == -1
#if SHADER_STYLE == 1
const float sunPathRotation = 0.0;
#define PERPENDICULAR_TWEAKS
#elif SHADER_STYLE == 4
const float sunPathRotation = -40.0;
#endif
#elif SUN_ANGLE == 0
const float sunPathRotation = 0.0;
#define PERPENDICULAR_TWEAKS
#elif SUN_ANGLE == 20
const float sunPathRotation = 20.0;
#elif SUN_ANGLE == 30
const float sunPathRotation = 30.0;
#elif SUN_ANGLE == 40
const float sunPathRotation = 40.0;
#elif SUN_ANGLE == 50
const float sunPathRotation = 50.0;
#elif SUN_ANGLE == 60
const float sunPathRotation = 60.0;
#elif SUN_ANGLE == -20
const float sunPathRotation = -20.0;
#elif SUN_ANGLE == -30
const float sunPathRotation = -30.0;
#elif SUN_ANGLE == -40
const float sunPathRotation = -40.0;
#elif SUN_ANGLE == -50
const float sunPathRotation = -50.0;
#elif SUN_ANGLE == -60
const float sunPathRotation = -60.0;
#endif
#endif
#if SHADOW_QUALITY >= 1
#if SHADOW_QUALITY > 4 || SHADOW_SMOOTHING < 3
const int shadowMapResolution = 4096;
#else
const int shadowMapResolution = 2048;
#endif
#else
const int shadowMapResolution = 1024;
#endif
#if SSAO_I > 0
#define SSAO_QUALI SSAO_QUALI_DEFINE
#else
#define SSAO_QUALI 0
#endif
#if LIGHTSHAFT_BEHAVIOUR > 0
#define LIGHTSHAFT_QUALI LIGHTSHAFT_QUALI_DEFINE
#else
#define LIGHTSHAFT_QUALI 0
#endif
#if BLOCK_REFLECT_QUALITY >= 1
#define LIGHT_HIGHLIGHT
#endif
#if BLOCK_REFLECT_QUALITY >= 2 && RP_MODE >= 1
#define PBR_REFLECTIONS
#endif
#if BLOCK_REFLECT_QUALITY >= 3 && RP_MODE >= 1
#define TEMPORAL_FILTER
#endif
#if DETAIL_QUALITY == 0 // Potato
#undef PERPENDICULAR_TWEAKS
#define LOW_QUALITY_NETHER_STORM
#define LOW_QUALITY_ENDER_NEBULA
#define WATER_MAT_QUALITY 1
#endif
#if DETAIL_QUALITY >= 1 // not an option for now
#if TAA_MODE >= 1
#define TAA
#endif
#define WATER_MAT_QUALITY 1
#endif
#if DETAIL_QUALITY >= 2 // Medium
#undef WATER_MAT_QUALITY
#define WATER_MAT_QUALITY 2
#define FXAA_TAA_INTERACTION
#define TAA_MOVEMENT_IMPROVEMENT_FILTER
#endif
#if DETAIL_QUALITY >= 3 // High
#undef WATER_MAT_QUALITY
#define WATER_MAT_QUALITY 3 // we use DETAIL_QUALITY >= 3 when writing in gbuffers_water because optifine bad
#define HQ_NIGHT_NEBULA
#define SKY_EFFECT_REFLECTION
#define CONNECTED_GLASS_CORNER_FIX
#define ACL_CORNER_LEAK_FIX
#define DO_NETHER_VINE_WAVING_OUTSIDE_NETHER
#define DO_MORE_FOLIAGE_WAVING
#if defined IRIS_FEATURE_CUSTOM_IMAGES && SHADOW_QUALITY > -1 && RAIN_PUDDLES > 0 && COLORED_LIGHTING_INTERNAL > 0
#define PUDDLE_VOXELIZATION
#endif
#if CLOUD_QUALITY >= 3 && CLOUD_STYLE > 0 && CLOUD_STYLE != 50
#define ENTITY_TAA_NOISY_CLOUD_FIX
#endif
#endif
//Define Handling//
#ifdef OVERWORLD
#if CLOUD_STYLE > 0 && CLOUD_STYLE != 50 && CLOUD_QUALITY > 0
#define VL_CLOUDS_ACTIVE
#if CLOUD_STYLE == 1
#define CLOUDS_REIMAGINED
#endif
#if CLOUD_STYLE == 3
#define CLOUDS_UNBOUND
#endif
#endif
#else
#undef LIGHT_HIGHLIGHT
#undef CAVE_FOG
#undef CLOUD_SHADOWS
#undef SNOWY_WORLD
#undef LIGHTSHAFT_SMOKE
#endif
#ifdef NETHER
#undef ATMOSPHERIC_FOG
#undef NO_WAVING_INDOORS
#else
#undef NETHER_STORM
#endif
#ifdef END
#undef BLOOM_FOG
#endif
#ifndef BLOOM
#undef BLOOM_FOG
#endif
#if defined PIXELATED_SHADOWS || defined PIXELATED_BLOCKLIGHT || defined PIXELATED_AO
#if !defined GBUFFERS_BASIC && !defined DH_TERRAIN && !defined DH_WATER
#define DO_PIXELATION_EFFECTS
#endif
#endif
#ifndef GBUFFERS_TERRAIN
#undef PIXELATED_BLOCKLIGHT
#endif
#ifdef BLOOM_FOG
#if WORLD_BLUR > 0
#define BLOOM_FOG_COMPOSITE3
#elif defined MOTION_BLURRING
#define BLOOM_FOG_COMPOSITE2
#else
#define BLOOM_FOG_COMPOSITE
#endif
#endif
#if defined GBUFFERS_HAND || defined GBUFFERS_ENTITIES
#undef SNOWY_WORLD
#undef DISTANT_LIGHT_BOKEH
#endif
#if defined GBUFFERS_TEXTURED || defined GBUFFERS_BASIC
#undef LIGHT_HIGHLIGHT
#undef DIRECTIONAL_SHADING
#undef SIDE_SHADOWING
#endif
#ifdef GBUFFERS_WATER
#undef LIGHT_HIGHLIGHT
#endif
#ifndef GLOWING_ENTITY_FIX
#undef GBUFFERS_ENTITIES_GLOWING
#endif
#if LIGHTSHAFT_QUALI > 0 && defined OVERWORLD && SHADOW_QUALITY > -1 || defined END
#define LIGHTSHAFTS_ACTIVE
#endif
#if defined WAVING_FOLIAGE || defined WAVING_LEAVES || defined WAVING_LAVA || defined WAVING_LILY_PAD
#define WAVING_ANYTHING_TERRAIN
#endif
#if WATERCOLOR_R != 100 || WATERCOLOR_G != 100 || WATERCOLOR_B != 100
#define WATERCOLOR_RM WATERCOLOR_R * 0.01
#define WATERCOLOR_GM WATERCOLOR_G * 0.01
#define WATERCOLOR_BM WATERCOLOR_B * 0.01
#define WATERCOLOR_CHANGED
#endif
#if UNDERWATERCOLOR_R != 100 || UNDERWATERCOLOR_G != 100 || UNDERWATERCOLOR_B != 100
#define UNDERWATERCOLOR_RM UNDERWATERCOLOR_R * 0.01
#define UNDERWATERCOLOR_GM UNDERWATERCOLOR_G * 0.01
#define UNDERWATERCOLOR_BM UNDERWATERCOLOR_B * 0.01
#define UNDERWATERCOLOR_CHANGED
#endif
#if defined IS_IRIS && !defined IRIS_HAS_TRANSLUCENCY_SORTING
#undef FANCY_GLASS
#endif
#ifdef DISTANT_HORIZONS
#undef DISTANT_LIGHT_BOKEH
#endif
#if defined MC_GL_VENDOR_AMD || defined MC_GL_VENDOR_ATI
#ifndef DEFERRED1
#define FIX_AMD_REFLECTION_CRASH //BFARC: Fixes a driver crashing problem on AMD GPUs
#endif
#endif
//Activate Settings//
#ifdef POM_ALLOW_CUTOUT
#endif
#ifdef BRIGHT_CAVE_WATER
#endif
#ifdef IPBR_PARTICLE_FEATURES
#endif
#ifdef COLORED_CANDLE_LIGHT
#endif
#ifdef PIXELATED_AO
#endif
//Very Common Stuff//
#include "/lib/uniforms.glsl"
#if SHADOW_QUALITY == -1
float timeAngle = worldTime / 24000.0;
#else
float tAmin = fract(sunAngle - 0.033333333);
float tAlin = tAmin < 0.433333333 ? tAmin * 1.15384615385 : tAmin * 0.882352941176 + 0.117647058824;
float hA = tAlin > 0.5 ? 1.0 : 0.0;
float tAfrc = fract(tAlin * 2.0);
float tAfrs = tAfrc*tAfrc*(3.0-2.0*tAfrc);
float tAmix = hA < 0.5 ? 0.3 : -0.1;
float timeAngle = (tAfrc * (1.0-tAmix) + tAfrs * tAmix + hA) * 0.5;
#endif
#include "/lib/util/commonFunctions.glsl"
#ifndef DISTANT_HORIZONS
float renderDistance = far;
#else
float renderDistance = float(dhRenderDistance);
#endif
const float shadowMapBias = 1.0 - 25.6 / shadowDistance;
#ifndef DREAM_TWEAKED_LIGHTING
float noonFactor = sqrt(max(sin(timeAngle*6.28318530718),0.0));
#else
float noonFactor = pow(max(sin(timeAngle*6.28318530718),0.0), 0.2);
#endif
float nightFactor = max(sin(timeAngle*(-6.28318530718)),0.0);
float invNightFactor = 1.0 - nightFactor;
float rainFactor2 = rainFactor * rainFactor;
float invRainFactor = 1.0 - rainFactor;
float invNoonFactor = 1.0 - noonFactor;
float invNoonFactor2 = invNoonFactor * invNoonFactor;
float vsBrightness = clamp(screenBrightness, 0.0, 1.0);
int modifiedWorldDay = int(mod(worldDay, 100) + 5.0);
float syncedTime = (worldTime + modifiedWorldDay * 24000) * 0.05;
const float pi = 3.14159265359;
const float goldenRatio = 1.61803398875;
const float oceanAltitude = 61.9;
#if IRIS_VERSION >= 10800
vec3 cameraPositionBestFract = cameraPositionFract;
#else
vec3 cameraPositionBestFract = fract(cameraPosition);
#endif
#include "/lib/colors/blocklightColors.glsl"
const vec3 caveFogColorRaw = vec3(0.13, 0.13, 0.15);
#if CAVE_LIGHTING < 100
vec3 caveFogColor = caveFogColorRaw * 0.7;
#elif CAVE_LIGHTING == 100
vec3 caveFogColor = caveFogColorRaw * (0.7 + 0.3 * vsBrightness); // Default
#elif CAVE_LIGHTING > 100
vec3 caveFogColor = caveFogColorRaw;
#endif
#if WATERCOLOR_MODE >= 2
vec3 underwaterColorM1 = pow(fogColor, vec3(0.33, 0.21, 0.26));
#else
vec3 underwaterColorM1 = vec3(0.46, 0.62, 1.0);
#endif
#ifndef UNDERWATERCOLOR_CHANGED
vec3 underwaterColorM2 = underwaterColorM1;
#else
vec3 underwaterColorM2 = underwaterColorM1 * vec3(UNDERWATERCOLOR_RM, UNDERWATERCOLOR_GM, UNDERWATERCOLOR_BM);
#endif
vec3 waterFogColor = underwaterColorM2 * vec3(0.2 + 0.1 * vsBrightness);
#if NETHER_COLOR_MODE == 3
float netherColorMixer = inNetherWastes + inCrimsonForest + inWarpedForest + inBasaltDeltas + inSoulValley;
vec3 netherColor = mix(
fogColor * 0.6 + 0.2 * normalize(fogColor + 0.0001),
(
inNetherWastes * vec3(0.38, 0.15, 0.05) + inCrimsonForest * vec3(0.33, 0.07, 0.04) +
inWarpedForest * vec3(0.18, 0.1, 0.25) + inBasaltDeltas * vec3(0.25, 0.235, 0.23) +
inSoulValley * vec3(0.1, vec2(0.24))
),
netherColorMixer
);
#elif NETHER_COLOR_MODE == 2
vec3 netherColor = fogColor * 0.6 + 0.2 * normalize(fogColor + 0.0001);
#elif NETHER_COLOR_MODE == 0
vec3 netherColor = vec3(0.7, 0.26, 0.08) * 0.6;
#endif
vec3 lavaLightColor = vec3(0.15, 0.06, 0.01);
const vec3 endSkyColor = vec3(0.095, 0.07, 0.15) * 1.5;
#if WEATHER_TEX_OPACITY == 100
const float rainTexOpacity = 0.25;
const float snowTexOpacity = 0.5;
#else
#define WEATHER_TEX_OPACITY_M 100.0 / WEATHER_TEX_OPACITY
const float rainTexOpacity = pow(0.25, WEATHER_TEX_OPACITY_M);
const float snowTexOpacity = pow(0.5, WEATHER_TEX_OPACITY_M);
#endif
#ifdef FRAGMENT_SHADER
ivec2 texelCoord = ivec2(gl_FragCoord.xy);
#endif
const int cloudAlt1i = int(CLOUD_ALT1); // Old setting files can send float values
const int cloudAlt2i = int(CLOUD_ALT2);
const float OSIEBCA = 1.0 / 255.0; // One Step In Eight Bit Color Attachment
/* materialMask steps
0 to 240 - PBR Dependant:
IntegratedPBR:
0 to 99: deferredMaterials
OSIEBCA * 0.0 = *Unused as 0.0 is the default value*
OSIEBCA * 1.0 = Intense Fresnel
OSIEBCA * 2.0 = Copper Fresnel
OSIEBCA * 3.0 = Gold Fresnel
OSIEBCA * 4.0 =
OSIEBCA * 5.0 = Redstone Fresnel
100 to 199: Exact copy of deferredMaterials but toned down reflection handling for entities
materialMask += OSIEBCA * 100.0; // Entity Reflection Handling
200 to 240: Random checks
OSIEBCA * 240.0 = Green Screen Lime Blocks
seuspbr:
0 to 240: Increasing metalness
labPBR:
0 to 229: Increasing f0
230 to 240: Consistent metalness with still increasing f0
241 to 255 - PBR Independant:
OSIEBCA * 241.0 = Water
OSIEBCA * 252.0 = Versatile Selection Outline
OSIEBCA * 253.0 = Reduced Edge TAA
OSIEBCA * 254.0 = No SSAO, No TAA
OSIEBCA * 255.0 = *Unused as 1.0 is the clear color*
*/
// 62 75 74 20 74 68 4F 73 65 20 77 68 6F 20 68 6F 70 65 20 69 6E 20 74 68 65 20 6C 69 6D 69 4E 61 6C 0A 77 69 6C 6C 20 72 65 6E 65 77 20 74 68 65 69 72 20 73 54 72 65 6E 67 74 48 2E 0A 74 68 65 79 20 77 69 6C 6C 20 73 6F 41 72 20 6F 6E 20 65 6C 79 54 72 61 73 20 6C 69 6B 65 20 70 68 61 6E 74 6F 6D 73 3B 0A 74 68 65 79 20 77 69 6C 6C 20 72 75 6E 20 61 6E 44 20 6E 6F 74 20 67 72 6F 77 20 77 65 41 72 79 2C 0A 74 68 65 59 20 77 69 6C 6C 20 77 61 6C 6B 20 61 6E 64 20 6E 6F 74 20 62 65 20 66 61 69 6E 74 2E

View File

@ -0,0 +1,60 @@
// GGX area light approximation from Horizon Zero Dawn
float GetNoHSquared(float radiusTan, float NoL, float NoV, float VoL) {
float radiusCos = 1.0 / sqrt(1.0 + radiusTan * radiusTan);
float RoL = 2.0 * NoL * NoV - VoL;
if (RoL >= radiusCos)
return 1.0;
float rOverLengthT = radiusCos * radiusTan / sqrt(1.0 - RoL * RoL);
float NoTr = rOverLengthT * (NoV - RoL * NoL);
float VoTr = rOverLengthT * (2.0 * NoV * NoV - 1.0 - RoL * VoL);
float triple = sqrt(clamp(1.0 - NoL * NoL - NoV * NoV - VoL * VoL + 2.0 * NoL * NoV * VoL, 0.0, 1.0));
float NoBr = rOverLengthT * triple, VoBr = rOverLengthT * (2.0 * triple * NoV);
float NoLVTr = NoL * radiusCos + NoV + NoTr, VoLVTr = VoL * radiusCos + 1.0 + VoTr;
float p = NoBr * VoLVTr, q = NoLVTr * VoLVTr, s = VoBr * NoLVTr;
float xNum = q * (-0.5 * p + 0.25 * VoBr * NoLVTr);
float xDenom = p * p + s * ((s - 2.0 * p)) + NoLVTr * ((NoL * radiusCos + NoV) * VoLVTr * VoLVTr +
q * (-0.5 * (VoLVTr + VoL * radiusCos) - 0.5));
float twoX1 = 2.0 * xNum / (xDenom * xDenom + xNum * xNum);
float sinTheta = twoX1 * xDenom;
float cosTheta = 1.0 - twoX1 * xNum;
NoTr = cosTheta * NoTr + sinTheta * NoBr;
VoTr = cosTheta * VoTr + sinTheta * VoBr;
float newNoL = NoL * radiusCos + NoTr;
float newVoL = VoL * radiusCos + VoTr;
float NoH = NoV + newNoL;
float HoH = 2.0 * newVoL + 2.0;
return clamp(NoH * NoH / HoH, 0.0, 1.0);
}
float GGX(vec3 normalM, vec3 viewPos, vec3 lightVec, float NdotLmax0, float smoothnessG) {
smoothnessG = sqrt1(smoothnessG * 0.9 + 0.1);
float roughnessP = (1.35 - smoothnessG);
float roughness = pow2(pow2(roughnessP));
vec3 halfVec = normalize(lightVec - viewPos);
float dotLH = clamp(dot(halfVec, lightVec), 0.0, 1.0);
float dotNV = dot(normalM, -viewPos);
#if WATER_REFLECT_QUALITY >= 2
float dotNH = GetNoHSquared(0.01, NdotLmax0, dotNV, dot(-viewPos, lightVec));
#else
float dotNH = pow2(min1(2.0 * NdotLmax0 * dotNV * length(halfVec) - dot(-viewPos, lightVec)));
#endif
float denom = dotNH * roughness - dotNH + 1.0;
float D = roughness / (3.141592653589793 * pow2(denom));
float f0 = 0.05;
float F = exp2((-5.55473 * dotLH - 6.98316) * dotLH) * (1.0 - f0) + f0;
float NdotLmax0M = sqrt3(NdotLmax0 * max0(dot(normal, lightVec)));
float specular = max0(NdotLmax0M * D * F / pow2(dotLH));
specular = specular / (0.125 * specular + 1.0);
return specular;
}

View File

@ -0,0 +1,641 @@
//Lighting Includes//
#include "/lib/colors/lightAndAmbientColors.glsl"
#include "/lib/lighting/ggx.glsl"
#if SHADOW_QUALITY > -1 && (defined OVERWORLD || defined END)
#include "/lib/lighting/shadowSampling.glsl"
#endif
#if defined CLOUDS_REIMAGINED && defined CLOUD_SHADOWS
#include "/lib/atmospherics/clouds/cloudCoord.glsl"
#endif
#ifdef LIGHT_COLOR_MULTS
#include "/lib/colors/colorMultipliers.glsl"
#endif
#if defined MOON_PHASE_INF_LIGHT || defined MOON_PHASE_INF_REFLECTION
#include "/lib/colors/moonPhaseInfluence.glsl"
#endif
#if COLORED_LIGHTING_INTERNAL > 0
#include "/lib/misc/voxelization.glsl"
#endif
#ifdef DO_PIXELATION_EFFECTS
#include "/lib/misc/pixelation.glsl"
#endif
vec3 highlightColor = normalize(pow(lightColor, vec3(0.37))) * (0.3 + 1.5 * sunVisibility2) * (1.0 - 0.85 * rainFactor);
//Lighting//
void DoLighting(inout vec4 color, inout vec3 shadowMult, vec3 playerPos, vec3 viewPos, float lViewPos, vec3 geoNormal, vec3 normalM, float dither,
vec3 worldGeoNormal, vec2 lightmap, bool noSmoothLighting, bool noDirectionalShading, bool noVanillaAO,
bool centerShadowBias, int subsurfaceMode, float smoothnessG, float highlightMult, float emission) {
#ifdef DO_PIXELATION_EFFECTS
vec2 pixelationOffset = ComputeTexelOffset(tex, texCoord);
#ifdef PIXELATED_SHADOWS
vec3 playerPosPixelated = TexelSnap(playerPos, pixelationOffset);
#ifdef GBUFFERS_ENTITIES
if (entityId == 50076) { // Boats
playerPosPixelated.y += 0.38; // consistentBOAT2176
}
#endif
#ifdef GBUFFERS_TERRAIN
if (subsurfaceMode == 1) {
playerPosPixelated.y += 0.05; // Fixes grounded foliage having dark bottom pixels depending on the random y-offset
}
#endif
#endif
#ifdef PIXELATED_BLOCKLIGHT
if (!noSmoothLighting) {
lightmap = clamp(TexelSnap(lightmap, pixelationOffset), 0.0, 1.0);
lViewPos = TexelSnap(lViewPos, pixelationOffset);
}
#endif
#endif
float lightmapY2 = pow2(lightmap.y);
float lightmapYM = smoothstep1(lightmap.y);
float subsurfaceHighlight = 0.0;
float ambientMult = 1.0;
vec3 lightColorM = lightColor;
vec3 ambientColorM = ambientColor;
vec3 nViewPos = normalize(viewPos);
#if defined LIGHT_COLOR_MULTS && !defined GBUFFERS_WATER // lightColorMult is defined early in gbuffers_water
lightColorMult = GetLightColorMult();
#endif
#ifdef OVERWORLD
float skyLightShadowMult = pow2(pow2(lightmapY2));
#else
float skyLightShadowMult = 1.0;
#endif
#if defined SIDE_SHADOWING || defined DIRECTIONAL_SHADING
float NdotN = dot(normalM, northVec);
float absNdotN = abs(NdotN);
#endif
#if defined CUSTOM_PBR || defined GENERATED_NORMALS
float NPdotU = abs(dot(geoNormal, upVec));
#endif
// Shadows
#if defined OVERWORLD || defined END
float NdotL = dot(normalM, lightVec);
#ifdef GBUFFERS_WATER
//NdotL = mix(NdotL, 1.0, 1.0 - color.a);
#endif
#ifdef CUSTOM_PBR
float geoNdotL = dot(geoNormal, lightVec);
float geoNdotLM = geoNdotL > 0.0 ? geoNdotL * 10.0 : geoNdotL;
NdotL = min(geoNdotLM, NdotL);
NdotL *= 1.0 - 0.7 * (1.0 - pow2(pow2(NdotUmax0))) * NPdotU;
#endif
#if SHADOW_QUALITY == -1 && defined GBUFFERS_TERRAIN || defined DREAM_TWEAKED_LIGHTING
if (subsurfaceMode == 1) {
NdotU = 1.0;
NdotUmax0 = 1.0;
NdotL = dot(upVec, lightVec);
} else if (subsurfaceMode == 2) {
highlightMult *= NdotL;
NdotL = mix(NdotL, 1.0, 0.35);
}
subsurfaceMode = 0;
#endif
float NdotLmax0 = max0(NdotL);
float NdotLM = NdotLmax0 * 0.9999;
#ifdef GBUFFERS_TEXTURED
NdotLM = 1.0;
#else
#ifdef GBUFFERS_TERRAIN
if (subsurfaceMode != 0) {
#if defined CUSTOM_PBR && defined POM && POM_QUALITY >= 128 && POM_LIGHTING_MODE == 2
shadowMult *= max(pow2(pow2(dot(normalM, geoNormal))), sqrt2(NdotLmax0));
#endif
NdotLM = 1.0;
}
#ifdef SIDE_SHADOWING
else
#endif
#endif
#ifdef SIDE_SHADOWING
NdotLM = max0(NdotL + 0.4) * 0.714;
#ifdef END
NdotLM = sqrt3(NdotLM);
#endif
#endif
#endif
#if ENTITY_SHADOWS_DEFINE == -1 && (defined GBUFFERS_ENTITIES || defined GBUFFERS_BLOCK)
lightColorM = mix(lightColorM * 0.75, ambientColorM, 0.5 * pow2(pow2(1.0 - NdotLM)));
NdotLM = NdotLM * 0.75 + 0.25;
#endif
if (shadowMult.r > 0.00001) {
#if SHADOW_QUALITY > -1
if (NdotLM > 0.0001) {
vec3 shadowMultBeforeLighting = shadowMult;
float shadowLength = min(shadowDistance, far) * 0.9166667 - lViewPos; //consistent08JJ622
if (shadowLength > 0.000001) {
#if SHADOW_SMOOTHING == 4 || SHADOW_QUALITY == 0
float offset = 0.00098;
#elif SHADOW_SMOOTHING == 3
float offset = 0.00075;
#elif SHADOW_SMOOTHING == 2
float offset = 0.0005;
#elif SHADOW_SMOOTHING == 1
float offset = 0.0003;
#endif
vec3 playerPosM = playerPos;
vec3 centerPlayerPos = floor(playerPos + cameraPosition + worldGeoNormal * 0.01) - cameraPosition + 0.5;
#if defined DO_PIXELATION_EFFECTS && defined PIXELATED_SHADOWS
playerPosM = playerPosPixelated;
offset *= 0.75;
#endif
// Fix light leaking in caves //
#ifdef GBUFFERS_TERRAIN
if (centerShadowBias || subsurfaceMode == 1) {
#ifdef OVERWORLD
playerPosM = mix(centerPlayerPos, playerPosM, 0.5 + 0.5 * lightmapYM);
#endif
} else {
#if !defined DO_PIXELATION_EFFECTS || !defined PIXELATED_SHADOWS
float centerFactor = max(glColor.a, lightmapYM);
#if defined PERPENDICULAR_TWEAKS && SHADOW_QUALITY >= 2
// Fake Variable Penumbra Shadows
// Making centerFactor also work in daylight if AO gradient is facing towards sun
if (NdotU > 0.99) {
vec3 aoGradView = dFdx(glColor.a) * normalize(dFdx(playerPos.xyz))
+ dFdy(glColor.a) * normalize(dFdy(playerPos.xyz));
if (dot(normalize(aoGradView.xz), normalize(ViewToPlayer(lightVec).xz)) < 0.3 + 0.4 * dither)
if (dot(lightVec, upVec) < 0.99999) centerFactor = sqrt1(max0(glColor.a - 0.55) / 0.45);
}
#endif
#else
// This works very well with Pixelated Shadows (at least at 16x)
float centerFactor = 1.0 - (1.0 - glColor.a) * max(max0(signMidCoordPos.y), NdotUmax0);
#endif
playerPosM = mix(playerPosM, centerPlayerPos, 0.2 * (1.0 - pow2(pow2(centerFactor))));
}
#elif defined GBUFFERS_HAND
playerPosM = mix(vec3(0.0), playerPosM, 0.2 + 0.8 * lightmapYM);
#elif defined GBUFFERS_TEXTURED
playerPosM = mix(centerPlayerPos, playerPosM + vec3(0.0, 0.02, 0.0), lightmapYM);
#else
playerPosM = mix(playerPosM, centerPlayerPos, 0.2 * (1.0 - lightmapYM));
#endif
// Shadow bias without peter-panning //
#ifndef GBUFFERS_TEXTURED
#ifdef GBUFFERS_TERRAIN
if (subsurfaceMode != 1)
#endif
{
float distanceBias = pow(dot(playerPos, playerPos), 0.75);
distanceBias = 0.12 + 0.0008 * distanceBias;
vec3 bias = worldGeoNormal * distanceBias * (2.0 - 0.95 * NdotLmax0); // 0.95 fixes pink petals noon shadows
#ifdef GBUFFERS_TERRAIN
if (subsurfaceMode == 2) {
bias *= vec3(0.0, 0.0, -0.75);
}
#endif
playerPosM += bias;
}
#endif
vec3 shadowPos = GetShadowPos(playerPosM);
bool leaves = false;
#ifdef GBUFFERS_TERRAIN
if (subsurfaceMode == 0) {
#if defined PERPENDICULAR_TWEAKS && defined SIDE_SHADOWING
offset *= 1.0 + pow2(absNdotN);
#endif
} else {
float VdotL = dot(nViewPos, lightVec);
float lightFactor = pow(max(VdotL, 0.0), 10.0) * float(isEyeInWater == 0);
if (subsurfaceMode == 1) {
offset = 0.0010235 * lightmapYM + 0.0009765;
shadowPos.z -= max(NdotL * 0.0001, 0.0) * lightmapYM;
subsurfaceHighlight = lightFactor * 0.8;
#ifndef SHADOW_FILTERING
shadowPos.z -= 0.0002;
#endif
} else if (subsurfaceMode == 2) {
leaves = true;
offset = 0.0005235 * lightmapYM + 0.0009765;
shadowPos.z -= 0.000175 * lightmapYM;
subsurfaceHighlight = lightFactor * 0.6;
#ifndef SHADOW_FILTERING
NdotLM = mix(NdotL, NdotLM, 0.5);
#endif
} else {
}
}
#endif
shadowMult *= GetShadow(shadowPos, lViewPos, lightmap.y, offset, leaves);
}
float shadowSmooth = 16.0;
if (shadowLength < shadowSmooth) {
float shadowMixer = max0(shadowLength / shadowSmooth);
#ifdef GBUFFERS_TERRAIN
if (subsurfaceMode != 0) {
float shadowMixerM = pow2(shadowMixer);
if (subsurfaceMode == 1) skyLightShadowMult *= mix(0.6 + 0.3 * pow2(noonFactor), 1.0, shadowMixerM);
else skyLightShadowMult *= mix(NdotL * 0.4999 + 0.5, 1.0, shadowMixerM);
subsurfaceHighlight *= shadowMixer;
}
#endif
shadowMult = mix(vec3(skyLightShadowMult * shadowMultBeforeLighting), shadowMult, shadowMixer);
}
}
#else
shadowMult *= skyLightShadowMult;
#endif
#ifdef CLOUD_SHADOWS
vec3 worldPos = playerPos + cameraPosition;
#if defined DO_PIXELATION_EFFECTS && defined PIXELATED_SHADOWS
worldPos = playerPosPixelated + cameraPosition;
#endif
#ifdef CLOUDS_REIMAGINED
float EdotL = dot(eastVec, lightVec);
float EdotLM = tan(acos(EdotL));
#if SUN_ANGLE != 0
float NVdotLM = tan(acos(dot(northVec, lightVec)));
#endif
float distToCloudLayer1 = cloudAlt1i - worldPos.y;
vec3 cloudOffset1 = vec3(distToCloudLayer1 / EdotLM, 0.0, 0.0);
#if SUN_ANGLE != 0
cloudOffset1.z += distToCloudLayer1 / NVdotLM;
#endif
vec2 cloudPos1 = GetRoundedCloudCoord(ModifyTracePos(worldPos + cloudOffset1, cloudAlt1i).xz, 0.35);
float cloudSample = texture2D(gaux4, cloudPos1).b;
cloudSample *= clamp(distToCloudLayer1 * 0.1, 0.0, 1.0);
#ifdef DOUBLE_REIM_CLOUDS
float distToCloudLayer2 = cloudAlt2i - worldPos.y;
vec3 cloudOffset2 = vec3(distToCloudLayer2 / EdotLM, 0.0, 0.0);
#if SUN_ANGLE != 0
cloudOffset2.z += distToCloudLayer2 / NVdotLM;
#endif
vec2 cloudPos2 = GetRoundedCloudCoord(ModifyTracePos(worldPos + cloudOffset2, cloudAlt2i).xz, 0.35);
float cloudSample2 = texture2D(gaux4, cloudPos2).b;
cloudSample2 *= clamp(distToCloudLayer2 * 0.1, 0.0, 1.0);
cloudSample = 1.0 - (1.0 - cloudSample) * (1.0 - cloudSample2);
#endif
cloudSample *= sqrt3(1.0 - abs(EdotL));
shadowMult *= 1.0 - 0.85 * cloudSample;
#else
vec2 csPos = worldPos.xz + worldPos.y * 0.25;
csPos.x += syncedTime;
csPos *= 0.000002 * CLOUD_UNBOUND_SIZE_MULT;
vec2 shadowoffsets[8] = vec2[8](
vec2( 0.0 , 1.0 ),
vec2( 0.7071, 0.7071),
vec2( 1.0 , 0.0 ),
vec2( 0.7071,-0.7071),
vec2( 0.0 ,-1.0 ),
vec2(-0.7071,-0.7071),
vec2(-1.0 , 0.0 ),
vec2(-0.7071, 0.7071));
float cloudSample = 0.0;
for (int i = 0; i < 8; i++) {
cloudSample += texture2D(noisetex, csPos + 0.005 * shadowoffsets[i]).b;
}
shadowMult *= smoothstep1(pow2(min1(cloudSample * 0.2)));
#endif
#endif
shadowMult *= max(NdotLM * shadowTime, 0.0);
}
#ifdef GBUFFERS_WATER
else { // Low Quality Water
shadowMult = vec3(pow2(lightmapY2) * max(NdotLM * shadowTime, 0.0));
}
#endif
#endif
// Blocklight
float lightmapXM;
if (!noSmoothLighting) {
float lightmapXMSteep = pow2(pow2(lightmap.x * lightmap.x)) * (3.8 - 0.6 * vsBrightness);
float lightmapXMCalm = (lightmap.x) * (1.8 + 0.6 * vsBrightness);
lightmapXM = pow(lightmapXMSteep + lightmapXMCalm, 2.25);
} else lightmapXM = pow2(lightmap.x) * lightmap.x * 10.0;
#if BLOCKLIGHT_FLICKERING > 0
vec2 flickerNoise = texture2D(noisetex, vec2(frameTimeCounter * 0.06)).rb;
lightmapXM *= mix(1.0, min1(max(flickerNoise.r, flickerNoise.g) * 1.7), pow2(BLOCKLIGHT_FLICKERING * 0.1));
#endif
vec3 blockLighting = lightmapXM * blocklightCol;
#if COLORED_LIGHTING_INTERNAL > 0
// Prepare
#if defined GBUFFERS_HAND
vec3 voxelPos = SceneToVoxel(vec3(0.0));
#elif defined GBUFFERS_TEXTURED
vec3 voxelPos = SceneToVoxel(playerPos);
#else
vec3 voxelPos = SceneToVoxel(playerPos);
voxelPos = voxelPos + worldGeoNormal * 0.55; // should be close to 0.5 for ACL_CORNER_LEAK_FIX but 0.5 makes slabs flicker
#endif
vec3 specialLighting = vec3(0.0);
vec4 lightVolume = vec4(0.0);
if (CheckInsideVoxelVolume(voxelPos)) {
vec3 voxelPosM = clamp01(voxelPos / vec3(voxelVolumeSize));
lightVolume = GetLightVolume(voxelPosM);
lightVolume = sqrt(lightVolume);
specialLighting = lightVolume.rgb;
}
// Add extra articial light for blocks that request it
lightmapXM = max(lightmapXM, mix(lightmapXM, 10.0, lightVolume.a));
specialLighting *= 1.0 + 50.0 * lightVolume.a;
// Color Balance
specialLighting = lightmapXM * 0.13 * DoLuminanceCorrection(specialLighting + blocklightCol * 0.05);
// Add some extra non-contrasty detail
AddSpecialLightDetail(specialLighting, color.rgb, emission);
#if COLORED_LIGHT_SATURATION != 100
specialLighting = mix(blockLighting, specialLighting, COLORED_LIGHT_SATURATION * 0.01);
#endif
// Serve with distance fade
vec3 absPlayerPosM = abs(playerPos);
#if COLORED_LIGHTING_INTERNAL <= 512
absPlayerPosM.y *= 2.0;
#elif COLORED_LIGHTING_INTERNAL == 768
absPlayerPosM.y *= 3.0;
#elif COLORED_LIGHTING_INTERNAL == 1024
absPlayerPosM.y *= 4.0;
#endif
float maxPlayerPos = max(absPlayerPosM.x, max(absPlayerPosM.y, absPlayerPosM.z));
float blocklightDecider = pow2(min1(maxPlayerPos / effectiveACLdistance * 2.0));
//if (heldItemId != 40000 || heldItemId2 == 40000) // Hold spider eye to see vanilla lighting
blockLighting = mix(specialLighting, blockLighting, blocklightDecider);
//if (heldItemId2 == 40000 && heldItemId != 40000) blockLighting = lightVolume.rgb; // Hold spider eye to see light volume
#endif
#if HELD_LIGHTING_MODE >= 1
float heldLight = heldBlockLightValue; float heldLight2 = heldBlockLightValue2;
#ifndef IS_IRIS
if (heldLight > 15.1) heldLight = 0.0;
if (heldLight2 > 15.1) heldLight2 = 0.0;
#endif
#if COLORED_LIGHTING_INTERNAL == 0
vec3 heldLightCol = blocklightCol; vec3 heldLightCol2 = blocklightCol;
if (heldItemId == 45032) heldLight = 15; if (heldItemId2 == 45032) heldLight2 = 15; // Lava Bucket
#else
vec3 heldLightCol = GetSpecialBlocklightColor(heldItemId - 44000).rgb;
vec3 heldLightCol2 = GetSpecialBlocklightColor(heldItemId2 - 44000).rgb;
if (heldItemId == 45032) { heldLightCol = lavaSpecialLightColor; heldLight = 15; } // Lava Bucket
if (heldItemId2 == 45032) { heldLightCol2 = lavaSpecialLightColor; heldLight2 = 15; }
#if COLORED_LIGHT_SATURATION != 100
heldLightCol = mix(blocklightCol, heldLightCol, COLORED_LIGHT_SATURATION * 0.01);
heldLightCol2 = mix(blocklightCol, heldLightCol2, COLORED_LIGHT_SATURATION * 0.01);
#endif
#endif
vec3 playerPosLightM = playerPos + relativeEyePosition;
playerPosLightM.y += 0.7;
float lViewPosL = length(playerPosLightM) + 6.0;
#if HELD_LIGHTING_MODE == 1
lViewPosL *= 1.5;
#endif
heldLight = pow2(pow2(heldLight * 0.47 / lViewPosL));
heldLight2 = pow2(pow2(heldLight2 * 0.47 / lViewPosL));
vec3 heldLighting = pow2(heldLight * DoLuminanceCorrection(heldLightCol + 0.001))
+ pow2(heldLight2 * DoLuminanceCorrection(heldLightCol2 + 0.001));
#if COLORED_LIGHTING_INTERNAL > 0
AddSpecialLightDetail(heldLighting, color.rgb, emission);
#endif
#ifdef GBUFFERS_HAND
blockLighting *= 0.5;
heldLighting *= 2.0;
#endif
#endif
// Minimum Light
#if !defined END && CAVE_LIGHTING > 0
vec3 minLighting = vec3(0.005625 + vsBrightness * 0.043);
#if CAVE_LIGHTING != 100
#define CAVE_LIGHTING_M CAVE_LIGHTING * 0.01
minLighting *= CAVE_LIGHTING_M;
#endif
minLighting *= vec3(0.45, 0.475, 0.6);
minLighting *= 1.0 - lightmapYM;
#else
vec3 minLighting = vec3(0.0);
#endif
minLighting += nightVision * vec3(0.5, 0.5, 0.75);
// Lighting Tweaks
#ifdef OVERWORLD
ambientMult = mix(lightmapYM, pow2(lightmapYM) * lightmapYM, rainFactor);
#if SHADOW_QUALITY == -1
float tweakFactor = 1.0 + 0.6 * (1.0 - pow2(pow2(pow2(noonFactor))));
lightColorM /= tweakFactor;
ambientMult *= mix(tweakFactor, 1.0, 0.5 * NdotUmax0);
#endif
#if AMBIENT_MULT != 100
#define AMBIENT_MULT_M (AMBIENT_MULT - 100) * 0.006
vec3 shadowMultP = shadowMult / (0.1 + 0.9 * sqrt2(max0(NdotLM)));
ambientMult *= 1.0 + pow2(pow2(max0(1.0 - dot(shadowMultP, shadowMultP)))) * AMBIENT_MULT_M *
(0.5 + 0.2 * sunFactor + 0.8 * noonFactor) * (1.0 - rainFactor * 0.5);
#endif
if (isEyeInWater != 1) {
float lxFactor = (sunVisibility2 * 0.4 + (0.6 - 0.6 * pow2(invNoonFactor))) * (6.0 - 5.0 * rainFactor);
lxFactor *= lightmapY2 + lightmapY2 * 2.0 * pow2(shadowMult.r);
lxFactor = max0(lxFactor - emission * 1000000.0);
blockLighting *= pow(lightmapXM / 60.0 + 0.001, 0.09 * lxFactor);
// Less light in the distance / more light closer to the camera during rain or night to simulate thicker fog
float rainLF = 0.1 * rainFactor;
float lightFogTweaks = 1.0 + max0(96.0 - lViewPos) * (0.002 * (1.0 - sunVisibility2) + 0.0104 * rainLF) - rainLF;
ambientMult *= lightFogTweaks;
lightColorM *= lightFogTweaks;
}
#endif
#ifdef GBUFFERS_HAND
ambientMult *= 1.3; // To improve held map visibility
#endif
// Directional Shading
float directionShade = 1.0;
#ifdef DIRECTIONAL_SHADING
if (!noDirectionalShading) {
float NdotE = dot(normalM, eastVec);
float absNdotE = abs(NdotE);
float absNdotE2 = pow2(absNdotE);
#if !defined NETHER
float NdotUM = 0.75 + NdotU * 0.25;
#else
float NdotUM = 0.75 + abs(NdotU + 0.5) * 0.16666;
#endif
float NdotNM = 1.0 + 0.075 * absNdotN;
float NdotEM = 1.0 - 0.1 * absNdotE2;
directionShade = NdotUM * NdotEM * NdotNM;
#ifdef OVERWORLD
lightColorM *= 1.0 + absNdotE2 * 0.75;
#elif defined NETHER
directionShade *= directionShade;
ambientColorM += lavaLightColor * pow2(absNdotN * 0.5 + max0(-NdotU)) * (0.7 + 0.35 * vsBrightness);
#endif
#if defined CUSTOM_PBR || defined GENERATED_NORMALS
float cpbrAmbFactor = NdotN * NPdotU;
cpbrAmbFactor = 1.0 - 0.3 * cpbrAmbFactor;
ambientColorM *= cpbrAmbFactor;
minLighting *= cpbrAmbFactor;
#endif
#if defined OVERWORLD && defined PERPENDICULAR_TWEAKS && defined SIDE_SHADOWING
// Fake bounced light
ambientColorM = mix(ambientColorM, lightColorM, (0.05 + 0.03 * subsurfaceMode) * absNdotN * lightmapY2);
// Get a bit more natural looking lighting during noon
lightColorM *= 1.0 + max0(1.0 - subsurfaceMode) * pow(noonFactor, 20.0) * (pow2(absNdotN) - absNdotE2 * 0.1);
#endif
}
#endif
#ifdef DREAM_TWEAKED_LIGHTING
ambientColorM = mix(ambientColorM, lightColorM, 0.25) * 1.5;
lightColorM = lightColorM * 0.3;
#endif
// Scene Lighting Stuff
vec3 sceneLighting = lightColorM * shadowMult + ambientColorM * ambientMult;
float dotSceneLighting = dot(sceneLighting, sceneLighting);
#if HELD_LIGHTING_MODE >= 1
blockLighting = sqrt(pow2(blockLighting) + heldLighting);
#endif
blockLighting *= XLIGHT_I;
#ifdef LIGHT_COLOR_MULTS
sceneLighting *= lightColorMult;
#endif
#ifdef MOON_PHASE_INF_LIGHT
sceneLighting *= moonPhaseInfluence;
#endif
// Vanilla Ambient Occlusion
float vanillaAO = 1.0;
#if VANILLAAO_I > 0
vanillaAO = glColor.a;
#if defined DO_PIXELATION_EFFECTS && defined PIXELATED_AO
vanillaAO = TexelSnap(vanillaAO, pixelationOffset);
#endif
if (subsurfaceMode != 0) vanillaAO = mix(min1(vanillaAO * 1.15), 1.0, shadowMult.g);
else if (!noVanillaAO) {
#ifdef GBUFFERS_TERRAIN
vanillaAO = min1(vanillaAO + 0.08);
#ifdef OVERWORLD
vanillaAO = pow(
pow1_5(vanillaAO),
1.0 + dotSceneLighting * 0.02 + NdotUmax0 * (0.15 + 0.25 * pow2(noonFactor * pow2(lightmapY2)))
);
#elif defined NETHER
vanillaAO = pow(
pow1_5(vanillaAO),
1.0 + NdotUmax0 * 0.5
);
#else
vanillaAO = pow(
vanillaAO,
0.75 + NdotUmax0 * 0.25
);
#endif
#endif
vanillaAO = vanillaAO * 0.9 + 0.1;
#if VANILLAAO_I != 100
#define VANILLAAO_IM VANILLAAO_I * 0.01
vanillaAO = pow(vanillaAO, VANILLAAO_IM);
#endif
}
#endif
// Light Highlight
vec3 lightHighlight = vec3(0.0);
#ifdef LIGHT_HIGHLIGHT
float specularHighlight = GGX(normalM, nViewPos, lightVec, NdotLmax0, smoothnessG);
specularHighlight *= highlightMult;
lightHighlight = isEyeInWater != 1 ? shadowMult : pow(shadowMult, vec3(0.25)) * 0.35;
lightHighlight *= (subsurfaceHighlight + specularHighlight) * highlightColor;
#ifdef LIGHT_COLOR_MULTS
lightHighlight *= lightColorMult;
#endif
#ifdef MOON_PHASE_INF_REFLECTION
lightHighlight *= pow2(moonPhaseInfluence);
#endif
#endif
// Mix Colors
vec3 finalDiffuse = pow2(directionShade * vanillaAO) * (blockLighting + pow2(sceneLighting) + minLighting) + pow2(emission);
finalDiffuse = sqrt(max(finalDiffuse, vec3(0.0))); // sqrt() for a bit more realistic light mix, max() to prevent NaNs
// Apply Lighting
color.rgb *= finalDiffuse;
color.rgb += lightHighlight;
color.rgb *= pow2(1.0 - darknessLightFactor);
}

View File

@ -0,0 +1,118 @@
vec3 GetShadowPos(vec3 playerPos) {
vec3 shadowPos = PlayerToShadow(playerPos);
float distb = sqrt(shadowPos.x * shadowPos.x + shadowPos.y * shadowPos.y);
float distortFactor = distb * shadowMapBias + (1.0 - shadowMapBias);
shadowPos.xy /= distortFactor;
shadowPos.z *= 0.2;
return shadowPos * 0.5 + 0.5;
}
vec3 SampleShadow(vec3 shadowPos, float colorMult, float colorPow) {
float shadow0 = shadow2D(shadowtex0, vec3(shadowPos.st, shadowPos.z)).x;
vec3 shadowcol = vec3(0.0);
if (shadow0 < 1.0) {
float shadow1 = shadow2D(shadowtex1, vec3(shadowPos.st, shadowPos.z)).x;
if (shadow1 > 0.9999) {
shadowcol = texture2D(shadowcolor0, shadowPos.st).rgb * shadow1;
shadowcol *= colorMult;
shadowcol = pow(shadowcol, vec3(colorPow));
}
}
return shadowcol * (1.0 - shadow0) + shadow0;
}
float InterleavedGradientNoiseForShadows() {
float n = 52.9829189 * fract(0.06711056 * gl_FragCoord.x + 0.00583715 * gl_FragCoord.y);
#if !defined GBUFFERS_ENTITIES && !defined GBUFFERS_HAND && !defined GBUFFERS_TEXTURED && defined TAA
return fract(n + goldenRatio * mod(float(frameCounter), 3600.0));
#else
return fract(n);
#endif
}
vec2 offsetDist(float x, int s) {
float n = fract(x * 2.427) * 3.1415;
return vec2(cos(n), sin(n)) * 1.4 * x / s;
}
vec3 SampleTAAFilteredShadow(vec3 shadowPos, float lViewPos, float offset, bool leaves, float colorMult, float colorPow) {
vec3 shadow = vec3(0.0);
float gradientNoise = InterleavedGradientNoiseForShadows();
#if SHADOW_QUALITY == 0
int shadowSamples = 0; // We don't use SampleTAAFilteredShadow on Shadow Quality 0
#elif SHADOW_QUALITY == 1
int shadowSamples = 1;
#elif SHADOW_QUALITY == 2 || SHADOW_QUALITY == 3
int shadowSamples = 2;
#elif SHADOW_QUALITY == 4
int shadowSamples = 2;
if (lViewPos < 10.0) shadowSamples = 6;
#elif SHADOW_QUALITY == 5
int shadowSamples = 6;
if (lViewPos < 10.0) shadowSamples = 12;
#endif
#if !defined GBUFFERS_ENTITIES && !defined GBUFFERS_HAND && !defined GBUFFERS_TEXTURED
offset *= 1.3875;
#else
shadowSamples *= 2;
offset *= 0.69375;
#endif
float shadowPosZM = shadowPos.z;
for (int i = 0; i < shadowSamples; i++) {
vec2 offset2 = offsetDist(gradientNoise + i, shadowSamples) * offset;
if (leaves) shadowPosZM = shadowPos.z - 0.12 * offset * (gradientNoise + i) / shadowSamples;
shadow += SampleShadow(vec3(shadowPos.st + offset2, shadowPosZM), colorMult, colorPow);
shadow += SampleShadow(vec3(shadowPos.st - offset2, shadowPosZM), colorMult, colorPow);
}
shadow /= shadowSamples * 2.0;
return shadow;
}
vec2 shadowOffsets[4] = vec2[4](
vec2( 1.0, 0.0),
vec2( 0.0, 1.0),
vec2(-1.0, 0.0),
vec2( 0.0,-1.0));
vec3 SampleBasicFilteredShadow(vec3 shadowPos, float offset) {
float shadow = 0.0;
for (int i = 0; i < 4; i++) {
shadow += shadow2D(shadowtex0, vec3(offset * shadowOffsets[i] + shadowPos.st, shadowPos.z)).x;
}
return vec3(shadow * 0.25);
}
vec3 GetShadow(vec3 shadowPos, float lViewPos, float lightmapY, float offset, bool leaves) {
#if SHADOW_QUALITY > 0
#if ENTITY_SHADOWS_DEFINE == -1 && defined GBUFFERS_BLOCK
offset *= 4.0;
#else
#ifdef OVERWORLD
offset *= 1.0 + rainFactor2 * 2.0;
#else
offset *= 3.0;
#endif
#endif
#endif
float colorMult = 1.2 + 3.8 * lightmapY; // Natural strength is 5.0
float colorPow = 1.1 - 0.6 * pow2(pow2(pow2(lightmapY)));
#if SHADOW_QUALITY >= 1
vec3 shadow = SampleTAAFilteredShadow(shadowPos, lViewPos, offset, leaves, colorMult, colorPow);
#else
vec3 shadow = SampleBasicFilteredShadow(shadowPos, offset);
#endif
return shadow;
}

View File

@ -0,0 +1,107 @@
if (blockEntityId < 5028) {
if (blockEntityId < 5012) {
if (blockEntityId < 5004) {
if (blockEntityId == 5000) { //
} else { // blockEntityId < 5000
}
} else {
if (blockEntityId == 5004) { // Signs
noSmoothLighting = true;
if (glColor.r + glColor.g + glColor.b <= 2.99 || lmCoord.x > 0.999) { // Sign Text
#include "/lib/materials/specificMaterials/others/signText.glsl"
}
#ifdef COATED_TEXTURES
noiseFactor = 0.66;
#endif
} else /*if (blockEntityId == 5008)*/ { // Chest
noSmoothLighting = true;
smoothnessG = pow2(color.g);
#ifdef COATED_TEXTURES
noiseFactor = 0.66;
#endif
}
}
} else {
if (blockEntityId < 5020) {
if (blockEntityId == 5012) { // Ender Chest
noSmoothLighting = true;
float factor = min(pow2(color.g), 0.25);
smoothnessG = factor * 2.0;
if (color.g > color.r || color.b > color.g)
emission = pow2(factor) * 20.0;
emission += 0.35;
#ifdef COATED_TEXTURES
noiseFactor = 0.66;
#endif
} else /*if (blockEntityId == 5016)*/ { // Shulker Box+, Banner+, Head+, Bed+
noSmoothLighting = true;
#ifdef COATED_TEXTURES
noiseFactor = 0.2;
#endif
}
} else {
if (blockEntityId == 5020) { // Conduit
noSmoothLighting = true;
lmCoordM.x = 0.9;
if (color.b > color.r) { // Conduit:Wind, Conduit:Blue Pixels of The Eye
emission = color.r * 16.0;
} else if (color.r > color.b * 2.5) { // Conduit:Red Pixels of The Eye
emission = 20.0;
color.rgb *= vec3(1.0, 0.25, 0.1);
}
} else /*if (blockEntityId == 5024)*/ { // End Portal, End Gateway
#ifdef SPECIAL_PORTAL_EFFECTS
#include "/lib/materials/specificMaterials/others/endPortalEffect.glsl"
#endif
}
}
}
} else {
if (blockEntityId < 5044) {
if (blockEntityId < 5036) {
if (blockEntityId == 5028) { // Bell
if (color.r + color.g > color.b + 0.5) { // Bell:Golden Part
#include "/lib/materials/specificMaterials/terrain/goldBlock.glsl"
} else {
#include "/lib/materials/specificMaterials/terrain/stone.glsl"
}
} else /*if (blockEntityId == 5032)*/ { //
}
} else {
if (blockEntityId == 5036) { //
} else /*if (blockEntityId == 5040)*/ { //
}
}
} else {
if (blockEntityId < 5052) {
if (blockEntityId == 5044) { //
} else /*if (blockEntityId == 5048)*/ { //
}
} else {
if (blockEntityId == 5052) { //
} else if (blockEntityId == 10548) { // Enchanting Table:Book
smoothnessG = pow2(color.g) * 0.35;
if (color.b < 0.0001 && color.r > color.g) {
emission = color.g * 4.0;
}
}
}
}
}

View File

@ -0,0 +1,150 @@
#ifdef POM
#include "/lib/materials/materialMethods/pomEffects.glsl"
#endif
#include "/lib/materials/materialMethods/customEmission.glsl"
void GetCustomMaterials(inout vec4 color, inout vec3 normalM, inout vec2 lmCoordM, inout float NdotU, inout vec3 shadowMult, inout float smoothnessG, inout float smoothnessD, inout float highlightMult, inout float emission, inout float materialMask, vec3 viewPos, float lViewPos) {
vec2 texCoordM = texCoord;
#ifdef POM
float parallaxFade, parallaxTexDepth;
vec2 parallaxLocalCoord;
vec3 parallaxTraceCoordDepth;
vec4 normalMap;
bool skipPom = false;
if (!skipPom) {
texCoordM = vTexCoord.xy * vTexCoordAM.zw + vTexCoordAM.xy;
parallaxFade = pow2(lViewPos / POM_DISTANCE);
#ifdef GBUFFERS_ENTITIES
if (entityId == 50008) parallaxFade = 1.1; // Item Frame, Glow Item Frame
#endif
#ifdef GBUFFERS_BLOCK
if (blockEntityId == 5004) parallaxFade = 1.1; // Signs
#endif
#ifdef GBUFFERS_HAND
if (heldItemId == 40004 || heldItemId2 == 40004) parallaxFade = 1.1; // Filled Map
#endif
parallaxTraceCoordDepth = vec3(texCoordM, 1.0);
parallaxLocalCoord = vTexCoord.st;
normalMap = ReadNormal(vTexCoord.st);
parallaxFade += pow(normalMap.a, 64.0);
if (parallaxFade < 1.0) {
float dither = Bayer64(gl_FragCoord.xy);
#ifdef TAA
dither = fract(dither + goldenRatio * mod(float(frameCounter), 3600.0));
#endif
parallaxLocalCoord = GetParallaxCoord(parallaxFade, dither, texCoordM, parallaxTexDepth, parallaxTraceCoordDepth);
normalMap = textureGrad(normals, texCoordM, dcdx, dcdy);
color = textureGrad(tex, texCoordM, dcdx, dcdy);
#if !defined GBUFFERS_ENTITIES && !defined GBUFFERS_BLOCK
color.rgb *= glColor.rgb;
#else
color *= glColor;
#endif
shadowMult *= GetParallaxShadow(parallaxFade, dither, normalMap.a, parallaxLocalCoord, lightVec, tbnMatrix);
}
}
#endif
// Normal Map
#if NORMAL_MAP_STRENGTH != 0
#ifdef POM
else normalMap = texture2D(normals, texCoordM);
#else
vec4 normalMap = texture2D(normals, texCoordM);
#endif
normalM = normalMap.xyz;
normalM += vec3(0.5, 0.5, 0.0);
normalM = pow(normalM, vec3(NORMAL_MAP_STRENGTH * 0.007)); // 70% strength by default
normalM -= vec3(0.5, 0.5, 0.0);
normalM = normalM * 2.0 - 1.0;
#if RP_MODE == 3 // labPBR
if (normalM.x + normalM.y > -1.999) {
if (length(normalM.xy) > 1.0) normalM.xy = normalize(normalM.xy);
normalM.z = sqrt(1.0 - dot(normalM.xy, normalM.xy));
normalM.xyz = normalize(clamp(normalM.xyz, vec3(-1.0), vec3(1.0)));
} else normalM = vec3(0.0, 0.0, 1.0);
#endif
#if defined POM && POM_QUALITY >= 128 && POM_LIGHTING_MODE == 2
if (!skipPom) {
float slopeThreshold = max(1.0 / POM_QUALITY, 1.0/255.0);
if (parallaxTexDepth - parallaxTraceCoordDepth.z > slopeThreshold) {
vec3 slopeNormal = GetParallaxSlopeNormal(parallaxLocalCoord, parallaxTraceCoordDepth.z, viewVector);
normalM = mix(normalM, slopeNormal, 0.5 * pow2(max0(1.0 - parallaxFade * 2.0)));
}
}
#endif
normalM = clamp(normalize(normalM * tbnMatrix), vec3(-1.0), vec3(1.0));
NdotU = dot(normalM, upVec);
NdotUmax0 = max0(NdotU);
#endif
#if DIRECTIONAL_BLOCKLIGHT > 0
mat3 lightmapTBN = mat3(normalize(dFdx(viewPos)), normalize(dFdy(viewPos)), vec3(0.0));
lightmapTBN[2] = cross(lightmapTBN[0], lightmapTBN[1]);
float lmCoordXDir = lmCoordM.x;
vec2 deriv = vec2(dFdx(lmCoordXDir), dFdy(lmCoordXDir)) * 256.0;
vec3 dir = normalize(vec3(deriv.x * lightmapTBN[0] +
0.0005 * lightmapTBN[2] +
deriv.y * lightmapTBN[1]));
float pwr = clamp(dot(normalM, dir), -1.0, 1.0);
float absPwr = abs(pwr);
if (absPwr > 0.0) pwr = pow(absPwr, 9.0 / DIRECTIONAL_BLOCKLIGHT) * sign(pwr) * lmCoordXDir;
if (length(deriv) > 0.001) lmCoordXDir = pow(max(lmCoordXDir, 0.00001), 1.0 - pwr);
lmCoordM.x = mix(lmCoordM.x, lmCoordXDir, 0.01 * max0(100.0 - pow2(lViewPos)));
#endif
// Specular Map
vec4 specularMap = texture2D(specular, texCoordM);
float smoothnessM = pow2(specularMap.r);
smoothnessG = smoothnessM;
smoothnessD = smoothnessM;
highlightMult = 1.0 + 2.5 * specularMap.r;
#if RP_MODE == 3 // labPBR
highlightMult *= 0.5 + 0.5 * specularMap.g;
#endif
emission = GetCustomEmission(specularMap, texCoordM);
#ifndef GBUFFERS_WATER
#if defined GBUFFERS_ENTITIES || defined GBUFFERS_HAND
if (
materialMask > OSIEBCA * 240.1
&& specularMap.g < 0.01
) return;
#endif
#if RP_MODE == 2 // seuspbr
materialMask = specularMap.g * OSIEBCA * 240.0;
color.rgb *= 1.0 - 0.25 * specularMap.g;
#elif RP_MODE == 3 // labPBR
if (specularMap.g < OSIEBCA * 229.1) {
materialMask = specularMap.g * OSIEBCA * 214.0;
} else {
materialMask = specularMap.g - OSIEBCA * 15.0;
color.rgb *= 0.75;
}
#endif
#endif
}

View File

@ -0,0 +1,71 @@
if (abs(materialMaskInt - 149.5) < 50.0) { // Entity Reflection Handling (see common.glsl for details)
materialMaskInt -= 100;
entityOrHand = true;
}
if (materialMaskInt != 0) {
if (materialMaskInt < 9) {
if (materialMaskInt < 5) {
if (materialMaskInt < 3) {
if (materialMaskInt == 1) { // Intense Fresnel
intenseFresnel = 1.0;
} else /*if (materialMaskInt == 2)*/ { // Copper Fresnel
intenseFresnel = 1.0;
reflectColor = mix(vec3(0.5, 0.75, 0.5), vec3(1.0, 0.45, 0.3), sqrt1(smoothnessD));
}
} else {
if (materialMaskInt == 3) { // Gold Fresnel
intenseFresnel = 1.0;
reflectColor = vec3(1.0, 0.8, 0.5);
} else /*if (materialMaskInt == 4)*/ { // End Portal
}
}
} else {
if (materialMaskInt < 7) {
if (materialMaskInt == 5) { // Redstone Fresnel
intenseFresnel = 1.0;
reflectColor = vec3(1.0, 0.3, 0.2);
} else /*if (materialMaskInt == 6)*/ { //
}
} else {
if (materialMaskInt == 7) { //
} else /*if (materialMaskInt == 8)*/ { //
}
}
}
} else {
if (materialMaskInt < 13) {
if (materialMaskInt < 11) {
if (materialMaskInt == 9) { //
} else /*if (materialMaskInt == 10)*/ { //
}
} else {
if (materialMaskInt == 11) { //
} else /*if (materialMaskInt == 12)*/ { //
}
}
} else {
if (materialMaskInt < 15) {
if (materialMaskInt == 13) { //
} else /*if (materialMaskInt == 14)*/ { //
}
} else {
if (materialMaskInt == 15) { //
} else { // materialMaskInt >= 16 && <= 240
}
}
}
}
}

View File

@ -0,0 +1,214 @@
if (entityId < 50064) {
if (entityId < 50032) {
if (entityId < 50016) {
if (entityId < 50008) {
if (entityId == 50000) { // End Crystal
lmCoordM.x *= 0.7;
if (color.g * 1.2 < color.r) {
emission = 12.0 * color.g;
color.r *= 1.1;
}
} else if (entityId == 50004) { // Lightning Bolt
#include "/lib/materials/specificMaterials/entities/lightningBolt.glsl"
}
} else {
if (entityId == 50008) { // Item Frame, Glow Item Frame
noSmoothLighting = true;
} else /*if (entityId == 50012)*/ { // Iron Golem
#include "/lib/materials/specificMaterials/terrain/ironBlock.glsl"
smoothnessD *= 0.4;
}
}
} else {
if (entityId < 50024) {
if (entityId == 50016) { // Player
if (entityColor.a < 0.001) {
#ifdef COATED_TEXTURES
noiseFactor = 0.5;
#endif
if (CheckForColor(texelFetch(tex, ivec2(0, 0), 0).rgb, vec3(23, 46, 92))) {
for (int i = 63; i >= 56; i--) {
vec3 dif = color.rgb - texelFetch(tex, ivec2(i, 0), 0).rgb;
if (dif == clamp(dif, vec3(-0.001), vec3(0.001))) {
emission = 2.0 * texelFetch(tex, ivec2(i, 1), 0).r;
}
}
}
}
} else /*if (entityId == 50020)*/ { // Blaze
lmCoordM = vec2(0.9, 0.0);
emission = min(color.r, 0.7) * 1.4;
float dotColor = dot(color.rgb, color.rgb);
if (abs(dotColor - 1.5) > 1.4) {
emission = 5.0;
}
}
} else {
if (entityId == 50024) { // Creeper
emission = max0(color.b - color.g - color.r) * 10.0;
} else /*if (entityId == 50028)*/ { // Drowned
if (atlasSize.x < 900) {
if (CheckForColor(color.rgb, vec3(143, 241, 215)) ||
CheckForColor(color.rgb, vec3( 49, 173, 183)) ||
CheckForColor(color.rgb, vec3(101, 224, 221))) emission = 2.5;
}
}
}
}
} else {
if (entityId < 50048) {
if (entityId < 50040) {
if (entityId == 50032) { // Guardian
vec3 absDif = abs(vec3(color.r - color.g, color.g - color.b, color.r - color.b));
float maxDif = max(absDif.r, max(absDif.g, absDif.b));
if (maxDif < 0.1 && color.b > 0.5 && color.b < 0.88) {
emission = pow2(pow1_5(color.b)) * 5.0;
color.rgb *= color.rgb;
}
} else /*if (entityId == 50036)*/ { // Elder Guardian
if (CheckForColor(color.rgb, vec3(203, 177, 165)) ||
CheckForColor(color.rgb, vec3(214, 155, 126))) {
emission = pow2(pow1_5(color.b)) * 10.0;
color.r *= 1.2;
}
}
} else {
if (entityId == 50040) { // Endermite
if (CheckForColor(color.rgb, vec3(87, 23, 50))) {
emission = 8.0;
color.rgb *= color.rgb;
}
} else /*if (entityId == 50044)*/ { // Ghast
if (entityColor.a < 0.001)
emission = max0(color.r - color.g - color.b) * 6.0;
}
}
} else {
if (entityId < 50056) {
if (entityId == 50048) { // Glow Squid
lmCoordM.x = 0.0;
float dotColor = dot(color.rgb, color.rgb);
emission = pow2(pow2(min(dotColor * 0.65, 1.5))) + 0.45;
} else /*if (entityId == 50052)*/ { // Magma Cube
emission = color.g * 6.0;
}
} else {
if (entityId == 50056) { // Stray
if (CheckForColor(color.rgb, vec3(230, 242, 246)) && texCoord.y > 0.35)
emission = 2.5;
} else /*if (entityId == 50060)*/ { // Vex
lmCoordM = vec2(0.0);
emission = pow2(pow2(color.r)) * 3.5 + 0.5;
color.a *= color.a;
}
}
}
}
} else {
if (entityId < 50096) {
if (entityId < 50080) {
if (entityId < 50072) {
if (entityId == 50064) { // Witch
emission = 2.0 * color.g * float(color.g * 1.5 > color.b + color.r);
} else /*if (entityId == 50068)*/ { // Wither, Wither Skull
lmCoordM.x = 0.9;
emission = 3.0 * float(dot(color.rgb, color.rgb) > 1.0);
}
} else {
if (entityId == 50072) { // Experience Orb
emission = 7.5;
color.rgb *= color.rgb;
} else /*if (entityId == 50076)*/ { // Boats
playerPos.y += 0.38; // consistentBOAT2176: to avoid water shadow and the black inner shadow bug
}
}
} else {
if (entityId < 50088) {
if (entityId == 50080) { // Allay
if (atlasSize.x < 900) {
lmCoordM = vec2(0.0);
emission = float(color.r > 0.9 && color.b > 0.9) * 5.0 + color.g;
} else {
lmCoordM.x = 0.8;
}
} else /*if (entityId == 50084)*/ { // Slime, Chicken
//only code is in Vertex Shader for now
}
} else {
if (entityId == 50088) { // Entity Flame (Iris Feature)
emission = 1.3;
} else /*if (entityId == 50092)*/ { // Trident Entity
#ifdef IS_IRIS
// Only on Iris, because otherwise it would be inconsistent with the Trident item
#include "/lib/materials/specificMaterials/others/trident.glsl"
#endif
}
}
}
} else {
if (entityId < 50112) {
if (entityId < 50104) {
if (entityId == 50096) { // Minecart++
if (atlasSize.x < 900 && color.r * color.g * color.b + color.b > 0.3) {
#include "/lib/materials/specificMaterials/terrain/ironBlock.glsl"
smoothnessD *= 0.6;
}
} else /*if (entityId == 50100)*/ { // Bogged
if (CheckForColor(color.rgb, vec3(239, 254, 194)))
emission = 2.5;
}
} else {
if (entityId == 50104) { // Piglin++, Hoglin+
if (atlasSize.x < 900) {
if (CheckForColor(color.rgb, vec3(255)) || CheckForColor(color.rgb, vec3(255, 242, 246))) {
vec2 tSize = textureSize(tex, 0);
vec4 checkRightmostColor = texelFetch(tex, ivec2(texCoord * tSize) + ivec2(1, 0), 0);
if (
CheckForColor(checkRightmostColor.rgb, vec3(201, 130, 101)) ||
CheckForColor(checkRightmostColor.rgb, vec3(241, 158, 152)) ||
CheckForColor(checkRightmostColor.rgb, vec3(223, 127, 119)) ||
CheckForColor(checkRightmostColor.rgb, vec3(241, 158, 152)) ||
CheckForColor(checkRightmostColor.rgb, vec3(165, 99, 80)) ||
CheckForColor(checkRightmostColor.rgb, vec3(213, 149, 122)) ||
CheckForColor(checkRightmostColor.rgb, vec3(255))
) {
emission = 1.0;
}
}
}
} else /*if (entityId == 50108)*/ { // Creaking
if (color.r > 0.7 && color.r > color.g * 1.2 && color.g > color.b * 2.0) { // Eyes
lmCoordM.x = 0.5;
emission = 5.0 * color.g;
color.rgb *= color.rgb;
}
}
}
} else {
if (entityId < 50120) {
if (entityId == 50112) { // Name Tag
noDirectionalShading = true;
color.rgb *= 1.5;
if (color.a < 0.5) {
color.a = 0.12;
color.rgb *= 5.0;
}
} else /*if (entityId == 50116)*/ { //
}
} else {
if (entityId == 50120) { //
} else /*if (entityId == 50124)*/ { //
}
}
}
}
}

View File

@ -0,0 +1,226 @@
int mat = currentRenderedItemId;
#ifdef GBUFFERS_HAND
float lViewPos = 0.0;
#endif
int subsurfaceMode;
bool centerShadowBias;
float noPuddles;
if (currentRenderedItemId < 45000) {
#include "/lib/materials/materialHandling/terrainMaterials.glsl"
} else
if (currentRenderedItemId < 45064) {
if (currentRenderedItemId < 45032) {
if (currentRenderedItemId < 45016) {
if (currentRenderedItemId < 45008) {
if (currentRenderedItemId == 45000) { // Armor Trims
smoothnessG = 0.5;
highlightMult = 2.0;
smoothnessD = 0.5;
#ifdef GLOWING_ARMOR_TRIM
emission = 1.0;
#endif
} else if (currentRenderedItemId == 45004) { // Wooden Tools, Bow, Fishing Rod
#include "/lib/materials/specificMaterials/planks/sprucePlanks.glsl"
smoothnessG = min(smoothnessG, 0.4);
smoothnessD = smoothnessG;
}
} else {
if (currentRenderedItemId == 45008) { // Stone Tools
if (CheckForStick(color.rgb)) {
#include "/lib/materials/specificMaterials/planks/sprucePlanks.glsl"
} else {
#include "/lib/materials/specificMaterials/terrain/stone.glsl"
}
} else /*if (currentRenderedItemId == 45012)*/ { // Iron Tools, Iron Armor, Iron Ingot, Iron Nugget, Iron Horse Armor, Flint and Steel, Flint, Spyglass, Shears, Chainmail Armor
if (CheckForStick(color.rgb)) {
#include "/lib/materials/specificMaterials/planks/sprucePlanks.glsl"
} else {
#include "/lib/materials/specificMaterials/terrain/ironBlock.glsl"
}
}
}
} else {
if (currentRenderedItemId < 45024) {
if (currentRenderedItemId == 45016) { // Golden Tools, Golden Armor, Gold Ingot, Gold Nugget, Golden Apple, Enchanted Golden Apple, Golden Carrot, Golden Horse Armor, Copper Ingot
if (CheckForStick(color.rgb)) {
#include "/lib/materials/specificMaterials/planks/sprucePlanks.glsl"
} else {
#include "/lib/materials/specificMaterials/terrain/goldBlock.glsl"
}
} else /*if (currentRenderedItemId == 45020)*/ { // Diamond Tools, Diamond Armor, Diamond, Diamond Horse Armor, Emerald
if (CheckForStick(color.rgb)) {
#include "/lib/materials/specificMaterials/planks/sprucePlanks.glsl"
} else {
#include "/lib/materials/specificMaterials/terrain/diamondBlock.glsl"
}
}
} else {
if (currentRenderedItemId == 45024) { // Netherite Tools, Netherite Armor, Netherite Ingot
materialMask = OSIEBCA; // Intense Fresnel
smoothnessG = color.r * 1.5;
smoothnessG = min1(smoothnessG);
highlightMult = smoothnessG * 2.0;
smoothnessD = smoothnessG * smoothnessG * 0.5;
#ifdef COATED_TEXTURES
noiseFactor = 0.33;
#endif
} else /*if (currentRenderedItemId == 45028)*/ { // Trident Item
#include "/lib/materials/specificMaterials/others/trident.glsl"
}
}
}
} else {
if (currentRenderedItemId < 45048) {
if (currentRenderedItemId < 45040) {
if (currentRenderedItemId == 45032) { // Lava Bucket
if (color.r + color.g > color.b * 2.0) {
emission = color.r + color.g - color.b * 1.5;
emission *= 1.8;
color.rg += color.b * vec2(0.4, 0.15);
color.b *= 0.8;
} else {
#include "/lib/materials/specificMaterials/terrain/ironBlock.glsl"
}
} else /*if (currentRenderedItemId == 45036)*/ { // Bucket++
if (GetMaxColorDif(color.rgb) < 0.01) {
#include "/lib/materials/specificMaterials/terrain/ironBlock.glsl"
} else {
float factor = color.b;
smoothnessG = factor;
highlightMult = factor * 2.0;
smoothnessD = factor;
}
}
} else {
if (currentRenderedItemId == 45040) { // Blaze Rod, Blaze Powder
noSmoothLighting = false;
lmCoordM.x = 0.85;
emission = color.g;
color.rgb = sqrt1(color.rgb);
} else /*if (currentRenderedItemId == 45044)*/ { // Bottle o' Enchanting, Glow Inc Sac
emission = color.b * 2.0;
}
}
} else {
if (currentRenderedItemId < 45056) {
if (currentRenderedItemId == 45048) { // Fire Charge
emission = max0(color.r + color.g - color.b * 0.5);
} else /*if (currentRenderedItemId == 45052)*/ { // Chorus Fruit
emission = max0(color.b * 2.0 - color.r) * 1.5;
}
} else {
if (currentRenderedItemId == 45056) { // Amethyst Shard
materialMask = OSIEBCA; // Intense Fresnel
float factor = pow2(color.r);
smoothnessG = 0.8 - factor * 0.3;
highlightMult = factor * 3.0;
smoothnessD = factor;
} else /*if (currentRenderedItemId == 45060)*/ { // Shield
float factor = min(color.r * color.g * color.b * 4.0, 0.7) * 0.7;
smoothnessG = factor;
highlightMult = factor * 3.0;
smoothnessD = factor;
}
}
}
}
} else {
if (currentRenderedItemId < 45096) {
if (currentRenderedItemId < 45080) {
if (currentRenderedItemId < 45072) {
if (currentRenderedItemId == 45064) { // Turtle Shell
float factor = color.g * 0.7;
smoothnessG = factor;
highlightMult = factor * 3.0;
smoothnessD = factor;
} else /*if (currentRenderedItemId == 45068)*/ { // Ender Pearl
smoothnessG = 1.0;
highlightMult = 2.0;
smoothnessD = 1.0;
}
} else {
if (currentRenderedItemId == 45072) { // Eye of Ender
smoothnessG = 1.0;
highlightMult = 2.0;
smoothnessD = 1.0;
emission = max0(color.g - color.b * 0.25);
color.rgb = pow(color.rgb, vec3(1.0 - 0.75 * emission));
} else /*if (currentRenderedItemId == 45076)*/ { // Clock
if (
CheckForColor(color.rgb, vec3(255, 255, 0)) ||
CheckForColor(color.rgb, vec3(204, 204, 0)) ||
CheckForColor(color.rgb, vec3(73, 104, 216)) ||
CheckForColor(color.rgb, vec3(58, 83, 172)) ||
CheckForColor(color.rgb, vec3(108, 108, 137)) ||
CheckForColor(color.rgb, vec3(86, 86, 109))
) {
emission = 1.0;
color.rgb += vec3(0.1);
}
#include "/lib/materials/specificMaterials/terrain/goldBlock.glsl"
}
}
} else {
if (currentRenderedItemId < 45088) {
if (currentRenderedItemId == 45080) { // Compass
if (color.r - 0.1 > color.b + color.g) {
emission = color.r * 1.5;
}
#include "/lib/materials/specificMaterials/terrain/ironBlock.glsl"
} else /*if (currentRenderedItemId == 45084)*/ { // Echo Shard, Recovery Compass, Music Disc 5
emission = max0(color.b + color.g - color.r * 2.0);
#include "/lib/materials/specificMaterials/terrain/ironBlock.glsl"
}
} else {
if (currentRenderedItemId == 45088) { // Nether Star
emission = pow2(color.r + color.g) * 0.5;
} else /*if (currentRenderedItemId == 45092)*/ { // End Crystal
if (color.g < color.r) {
emission = 3.0;
color.r *= 1.1;
}
}
}
}
} else {
if (currentRenderedItemId < 45112) {
if (currentRenderedItemId < 45104) {
if (currentRenderedItemId == 45096) { // Glow Berries
// iris needs to add support
} else /*if (currentRenderedItemId == 45100)*/ { // Glowstone Dust
emission = dot(color.rgb, color.rgb) * 0.5 + 1.0;
}
} else {
if (currentRenderedItemId == 45104) { // Prismarine Crystals
emission = pow1_5(color.r) * 2.5 + 0.2;
} else /*if (currentRenderedItemId == 45108)*/ { // Totem of Undying
#include "/lib/materials/specificMaterials/terrain/goldBlock.glsl"
}
}
} else {
if (currentRenderedItemId < 45120) {
if (currentRenderedItemId == 45112) { // Trial Key, Ominous Trial Key
emission = abs(color.r - color.b) * 3.0;
color.rgb = pow(color.rgb, vec3(1.0 + 0.5 * sqrt(emission)));
} else /*if (currentRenderedItemId == 45116)*/ { //
}
} else {
if (currentRenderedItemId == 45120) { //
} else /*if (currentRenderedItemId == 45124)*/ { //
}
}
}
}
}

View File

@ -0,0 +1,140 @@
if (mat < 32008) {
if (mat < 30016) {
if (mat < 30008) {
if (mat == 30000) { //
} else if (mat == 30004) { //
}
} else {
if (mat == 30008) { // Tinted Glass
#ifdef CONNECTED_GLASS_EFFECT
uint voxelID = uint(254);
bool isPane = false;
DoConnectedGlass(colorP, color, noGeneratedNormals, playerPos, worldGeoNormal, voxelID, isPane);
#endif
color.a = pow(color.a, 1.0 - fresnel * 0.65);
reflectMult = 0.75;
} else /*if (mat == 30012)*/ { // Slime Block
translucentMultCalculated = true;
reflectMult = 0.7;
translucentMult.rgb = pow2(color.rgb) * 0.2;
smoothnessG = color.g * 0.7;
highlightMult = 2.5;
}
}
} else {
if (mat < 32000) {
if (mat < 31000) {
if (mat == 30016) { // Honey Block
translucentMultCalculated = true;
reflectMult = 1.0;
translucentMult.rgb = pow2(color.rgb) * 0.2;
smoothnessG = color.r * 0.7;
highlightMult = 2.5;
} else /*if (mat == 30020)*/ { // Nether Portal
#ifdef SPECIAL_PORTAL_EFFECTS
#include "/lib/materials/specificMaterials/translucents/netherPortal.glsl"
#endif
}
} else { // (31XXX)
if (mat % 2 == 0) { // Stained Glass
#ifdef CONNECTED_GLASS_EFFECT
uint voxelID = uint(200 + (mat - 31000) / 2);
bool isPane = false;
DoConnectedGlass(colorP, color, noGeneratedNormals, playerPos, worldGeoNormal, voxelID, isPane);
#endif
#include "/lib/materials/specificMaterials/translucents/stainedGlass.glsl"
} else /*if (mat % 2 == 1)*/ { // Stained Glass Pane
#ifdef CONNECTED_GLASS_EFFECT
uint voxelID = uint(200 + (mat - 31000) / 2);
bool isPane = true;
DoConnectedGlass(colorP, color, noGeneratedNormals, playerPos, worldGeoNormal, voxelID, isPane);
#endif
#include "/lib/materials/specificMaterials/translucents/stainedGlass.glsl"
noSmoothLighting = true;
}
}
} else {
if (mat == 32000) { // Water
#include "/lib/materials/specificMaterials/translucents/water.glsl"
} else /*if (mat == 32004)*/ { // Ice
smoothnessG = pow2(color.g) * color.g;
highlightMult = pow2(min1(pow2(color.g) * 1.5)) * 3.5;
reflectMult = 0.7;
}
}
}
} else {
if (mat < 32024) {
if (mat < 32016) {
if (mat == 32008) { // Glass
#ifdef CONNECTED_GLASS_EFFECT
uint voxelID = uint(217);
bool isPane = false;
DoConnectedGlass(colorP, color, noGeneratedNormals, playerPos, worldGeoNormal, voxelID, isPane);
#endif
#include "/lib/materials/specificMaterials/translucents/glass.glsl"
} else /*if (mat == 32012)*/ { // Glass Pane
#ifdef CONNECTED_GLASS_EFFECT
uint voxelID = uint(218);
bool isPane = true;
DoConnectedGlass(colorP, color, noGeneratedNormals, playerPos, worldGeoNormal, voxelID, isPane);
#endif
if (color.a < 0.001 && abs(NdotU) > 0.95) discard; // Fixing artifacts on CTM/Opti connected glass panes
#include "/lib/materials/specificMaterials/translucents/glass.glsl"
noSmoothLighting = true;
}
} else {
if (mat == 32016) { // Beacon
lmCoordM.x = 0.88;
translucentMultCalculated = true;
translucentMult = vec4(0.0, 0.0, 0.0, 1.0);
if (color.b > 0.5) {
if (color.g - color.b < 0.01 && color.g < 0.99) {
#include "/lib/materials/specificMaterials/translucents/glass.glsl"
} else { // Beacon:Center
lmCoordM = vec2(0.0);
noDirectionalShading = true;
float lColor = length(color.rgb);
vec3 baseColor = vec3(0.1, 1.0, 0.92);
if (lColor > 1.5) color.rgb = baseColor + 0.22;
else if (lColor > 1.3) color.rgb = baseColor + 0.15;
else if (lColor > 1.15) color.rgb = baseColor + 0.09;
else color.rgb = baseColor + 0.05;
emission = 4.0;
}
} else { // Beacon:Obsidian
float factor = color.r * 1.5;
smoothnessG = factor;
highlightMult = 2.0 + min1(smoothnessG * 2.0) * 1.5;
smoothnessG = min1(smoothnessG);
}
} else /*if (mat == 32020)*/ { //
}
}
} else {
if (mat < 32032) {
if (mat == 32024) { //
} else /*if (mat == 32028)*/ { //
}
} else {
if (mat == 32032) { //
} else /*if (mat == 32036)*/ { //
}
}
}
}

View File

@ -0,0 +1,69 @@
/*
This file is specifically licensed with Mozilla Public License Version 2.0.
You can get a copy from https://www.mozilla.org/MPL/2.0/
*/
float manualDeterminant(mat2 matrix) {
return matrix[0].x * matrix[1].y - matrix[0].y * matrix[1].x;
}
mat2 inverseM(mat2 m) {
#if MC_VERSION >= 11700
return inverse(m);
#else
mat2 adj;
adj[0][0] = m[1][1];
adj[0][1] = -m[0][1];
adj[1][0] = -m[1][0];
adj[1][1] = m[0][0];
return adj / manualDeterminant(m);
#endif
}
vec4 textureAF(sampler2D texSampler, vec2 uv) {
vec2 spriteDimensions = vec2(spriteBounds.z - spriteBounds.x, spriteBounds.w - spriteBounds.y);
mat2 J = inverseM(mat2(dFdx(uv), dFdy(uv)));
J = transpose(J)*J;
float d = manualDeterminant(J), t = J[0][0]+J[1][1],
D = sqrt(abs(t*t-4.001*d)), // using 4.001 instead of 4.0 fixes a rare texture glitch with square texture atlas
V = (t-D)/2.0, v = (t+D)/2.0,
M = 1.0/sqrt(V), m = 1./sqrt(v);
vec2 A = M * normalize(vec2(-J[0][1], J[0][0]-V));
float lod = 0.0;
#if ANISOTROPIC_FILTER >= 8 && defined GBUFFERS_TERRAIN
// Fix257062 - Checking if absMidCoordPos is fine or else miplevel will be broken. This can be an issue for flowing lava.
if (absMidCoordPos.x > 0.0001 && absMidCoordPos.y > 0.0001)
// Excluding cutout blocks for better looks
if (texture2DLod(texSampler, uv, 10000.0).a == 1.0)
lod = miplevel * 0.4;
#endif
float samplesDiv2 = ANISOTROPIC_FILTER / 2.0;
vec2 ADivSamples = A / ANISOTROPIC_FILTER;
vec4 filteredColor = vec4(0.0);
float totalModifiedAlpha = 0.0;
vec4 spriteBoundsM = mix(spriteBounds, vec4(midCoord, midCoord), 0.0001); // Fixes some mods causing issues with cutout blocks
for (float i = -samplesDiv2 + 0.5; i < samplesDiv2; i++) {
vec2 sampleUV = uv + ADivSamples * i;
sampleUV = clamp(sampleUV, spriteBoundsM.xy, spriteBoundsM.zw);
vec4 colorSample = texture2DLod(texSampler, sampleUV, lod);
#if !defined POM || !defined POM_ALLOW_CUTOUT
float modifiedAlpha = colorSample.a;
#else
// To avoid NaNs because we don't discard low alpha if POM_ALLOW_CUTOUT is enabled (see 6WIR4HT23)
float modifiedAlpha = max(colorSample.a, 0.00001);
#endif
totalModifiedAlpha += modifiedAlpha;
filteredColor.rgb += colorSample.rgb * modifiedAlpha;
filteredColor.a += colorSample.a;
}
filteredColor.rgb /= totalModifiedAlpha;
filteredColor.a /= ANISOTROPIC_FILTER;
return filteredColor;
}

View File

@ -0,0 +1,30 @@
const float packSizeNT = 64.0;
void CoatTextures(inout vec3 color, float noiseFactor, vec3 playerPos, bool doTileRandomisation) {
#ifndef ENTITY_GN_AND_CT
#if defined GBUFFERS_ENTITIES || defined GBUFFERS_HAND
return;
#endif
#endif
#ifndef SAFER_GENERATED_NORMALS
vec2 noiseCoord = floor(midCoordPos / 16.0 * packSizeNT * atlasSizeM) / packSizeNT / 3.0;
#else
vec2 offsetR = max(absMidCoordPos.x, absMidCoordPos.y) * vec2(float(atlasSizeM.y) / float(atlasSizeM.x), 1.0);
vec2 noiseCoord = floor(midCoordPos / 2.0 * packSizeNT / offsetR) / packSizeNT / 3.0;
#endif
if (doTileRandomisation) {
vec3 floorWorldPos = floor(playerPos + cameraPosition + 0.001);
noiseCoord += 0.84 * (floorWorldPos.xz + floorWorldPos.y);
}
float noiseTexture = texture2D(noisetex, noiseCoord).r;
noiseTexture = noiseTexture + 0.6;
float colorBrightness = dot(color, color) * 0.3;
#define COATED_TEXTURE_MULT_M COATED_TEXTURE_MULT * 0.0027
noiseFactor *= COATED_TEXTURE_MULT_M * max0(1.0 - colorBrightness);
noiseFactor *= max(1.0 - miplevel * 0.25, 0.0);
noiseTexture = pow(noiseTexture, noiseFactor);
color *= noiseTexture;
}

View File

@ -0,0 +1,115 @@
ivec3[6] glassOffsets = ivec3[](
ivec3( 1, 0, 0),
ivec3(-1, 0, 0),
ivec3( 0, 1, 0),
ivec3( 0,-1, 0),
ivec3( 0, 0, 1),
ivec3( 0, 0,-1)
);
ivec3[12] glassCornerOffsets = ivec3[](
ivec3( 1, 1, 0),
ivec3( 1,-1, 0),
ivec3(-1, 1, 0),
ivec3(-1,-1, 0),
ivec3( 0, 1, 1),
ivec3( 0, 1,-1),
ivec3( 0,-1, 1),
ivec3( 0,-1,-1),
ivec3( 1, 0, 1),
ivec3( 1, 0,-1),
ivec3(-1, 0, 1),
ivec3(-1, 0,-1)
);
vec2 GetModifiedMidCoord() {
float epsilon1 = 0.00001;
vec2 midCoord = texCoord - signMidCoordPos * absMidCoordPos;
return midCoord - epsilon1;
}
void DoSimpleConnectedGlass(inout vec4 color) {
color = texture2DLod(tex, GetModifiedMidCoord(), 0);
}
#ifdef GBUFFERS_WATER
void DoConnectedGlass(inout vec4 colorP, inout vec4 color, inout bool noGeneratedNormals, vec3 playerPos, vec3 worldGeoNormal, uint voxelID, bool isPane) {
vec3 worldGeoNormalM = vec3( // Fixes Iris 1.8 normal precision issues causing the coordinates to be imperfect
round(worldGeoNormal.x),
round(worldGeoNormal.y),
round(worldGeoNormal.z)
);
vec3 playerPosM = playerPos - worldGeoNormalM * 0.25;
vec3 voxelPos = SceneToVoxel(playerPosM);
if (CheckInsideVoxelVolume(voxelPos)) {
#if IRIS_VERSION >= 10800
float epsilon2 = 0.0;
#else
float epsilon2 = 0.001;
#endif
float pixelOffset = 0.5 / (absMidCoordPos.y * atlasSize.y);
float pixelOffsetPlus = pixelOffset + epsilon2;
float pixelOffsetMinus = pixelOffset - epsilon2;
colorP = texture2DLod(tex, texCoord, 0);
vec4 colorPvanilla = colorP;
vec2 midCoordM = GetModifiedMidCoord();
vec3 worldPos = playerPosM + cameraPositionBestFract;
vec3 floorWorldPos = floor(worldPos);
// Remove edges
for (int i = 0; i < 6; i++) {
uint voxel = texelFetch(voxel_sampler, ivec3(voxelPos) + glassOffsets[i], 0).r;
if (voxel == voxelID) {
if (floor(worldPos + glassOffsets[i] * pixelOffsetPlus) != floorWorldPos) {
colorP = texture2DLod(tex, midCoordM, 0);
}
#ifdef GENERATED_NORMALS
if (floor(worldPos + glassOffsets[i] * pixelOffsetPlus * 1.25) != floorWorldPos) {
noGeneratedNormals = true;
}
#endif
}
}
// Fixes the connections by restoring the edges that aren't connected
for (int i = 0; i < 6; i++) {
uint voxel = texelFetch(voxel_sampler, ivec3(voxelPos) + glassOffsets[i], 0).r;
if (voxel != voxelID) {
//if (floor(worldPos + glassOffsets[i] * 0.0625) != floorWorldPos) {
if (floor(worldPos + glassOffsets[i] * pixelOffsetMinus) != floorWorldPos) {
colorP = colorPvanilla;
}
}
}
if (isPane) {
// Fixes lines between layers of glass panes
if (NdotU > 0.9) {
uint voxel = texelFetch(voxel_sampler, ivec3(voxelPos) + ivec3(0, 1, 0), 0).r;
if (voxel == voxelID) discard;
}
if (NdotU < -0.9) {
uint voxel = texelFetch(voxel_sampler, ivec3(voxelPos) - ivec3(0, 1, 0), 0).r;
if (voxel == voxelID) discard;
}
}
#ifdef CONNECTED_GLASS_CORNER_FIX
// Restores corners
for (int i = 0; i < 12; i++) {
uint voxel = texelFetch(voxel_sampler, ivec3(voxelPos) + glassCornerOffsets[i], 0).r;
if ((voxel != voxelID) && (!isPane || voxel > 0u)) {
if (floor((worldPos - glassCornerOffsets[i] * (1.0 - pixelOffsetMinus))) == floorWorldPos) {
colorP = colorPvanilla;
}
}
}
#endif
color = colorP * vec4(glColor.rgb, 1.0);
}
}
#endif

View File

@ -0,0 +1,35 @@
#ifndef INCLUDE_CUSTOM_EMISSION
#define INCLUDE_CUSTOM_EMISSION
float GetCustomEmission(vec4 specularMap, vec2 texCoordM) {
#if CUSTOM_EMISSION_INTENSITY > 0
#if RP_MODE == 2 || RP_MODE == 1 && IPBR_EMISSIVE_MODE == 2 // seuspbr
float emission = specularMap.b;
#elif RP_MODE == 3 || RP_MODE == 1 && IPBR_EMISSIVE_MODE == 3 // labPBR
float emission = specularMap.a < 1.0 ? specularMap.a : 0.0;
vec4 specularMapL0 = texture2DLod(specular, texCoordM, 0);
float emissionL0 = specularMapL0.a < 1.0 ? specularMapL0.a : 0.0;
emission = min(emission, emissionL0); // Fixes issues caused by mipmaps
#endif
return emission * 0.03 * CUSTOM_EMISSION_INTENSITY;
#else
return 0.0;
#endif
}
#ifdef IPBR
float GetCustomEmissionForIPBR(inout vec4 color, float emission) {
vec4 specularMapCheck = texture2DLod(specular, texCoord, 1000.0);
if (specularMapCheck.a == 0.0) return emission;
color = texture2D(tex, texCoord);
vec4 specularMap = texture2D(specular, texCoord);
float customEmission = GetCustomEmission(specularMap, texCoord);
return customEmission;
}
#endif
#endif //INCLUDE_CUSTOM_EMISSION

View File

@ -0,0 +1,85 @@
const float normalThreshold = 0.05;
const float normalClamp = 0.2;
const float packSizeGN = 128.0;
#ifndef GBUFFERS_HAND
const float normalMult = GENERATED_NORMAL_MULT * 0.025;
#else
const float normalMult = GENERATED_NORMAL_MULT * 0.015;
#endif
float GetDif(float lOriginalAlbedo, vec2 offsetCoord) {
#ifndef GBUFFERS_WATER
float lNearbyAlbedo = length(texture2D(tex, offsetCoord).rgb);
#else
vec4 textureSample = texture2D(tex, offsetCoord);
float lNearbyAlbedo = length(textureSample.rgb * textureSample.a * 1.5);
#endif
#ifdef GBUFFERS_ENTITIES
lOriginalAlbedo = abs(lOriginalAlbedo - 1.0);
lNearbyAlbedo = abs(lNearbyAlbedo - 1.0);
#endif
float dif = lOriginalAlbedo - lNearbyAlbedo;
#ifdef GBUFFERS_ENTITIES
dif = -dif;
#endif
#ifndef GBUFFERS_WATER
if (dif > 0.0) dif = max(dif - normalThreshold, 0.0);
else dif = min(dif + normalThreshold, 0.0);
#endif
return clamp(dif, -normalClamp, normalClamp);
}
void GenerateNormals(inout vec3 normalM, vec3 color) {
#ifndef ENTITY_GN_AND_CT
#if defined GBUFFERS_ENTITIES || defined GBUFFERS_HAND
return;
#endif
#endif
vec2 absMidCoordPos2 = absMidCoordPos * 2.0;
float lOriginalAlbedo = length(color.rgb);
float normalMult = max0(1.0 - mipDelta) * normalMult;
#ifndef SAFER_GENERATED_NORMALS
vec2 offsetR = 16.0 / atlasSizeM;
#else
vec2 offsetR = max(absMidCoordPos2.x, absMidCoordPos2.y) * vec2(float(atlasSizeM.y) / float(atlasSizeM.x), 1.0);
#endif
offsetR /= packSizeGN;
vec2 midCoord = texCoord - midCoordPos;
vec2 maxOffsetCoord = midCoord + absMidCoordPos;
vec2 minOffsetCoord = midCoord - absMidCoordPos;
if (normalMult > 0.0) {
vec3 normalMap = vec3(0.0, 0.0, 1.0);
vec2 offsetCoord = texCoord + vec2( 0.0, offsetR.y);
if (offsetCoord.y < maxOffsetCoord.y)
normalMap.y += GetDif(lOriginalAlbedo, offsetCoord);
offsetCoord = texCoord + vec2( offsetR.x, 0.0);
if (offsetCoord.x < maxOffsetCoord.x)
normalMap.x += GetDif(lOriginalAlbedo, offsetCoord);
offsetCoord = texCoord + vec2( 0.0,-offsetR.y);
if (offsetCoord.y > minOffsetCoord.y)
normalMap.y -= GetDif(lOriginalAlbedo, offsetCoord);
offsetCoord = texCoord + vec2(-offsetR.x, 0.0);
if (offsetCoord.x > minOffsetCoord.x)
normalMap.x -= GetDif(lOriginalAlbedo, offsetCoord);
normalMap.xy *= normalMult;
normalMap.xy = clamp(normalMap.xy, vec2(-1.0), vec2(1.0));
if (normalMap.xy != vec2(0.0, 0.0))
normalM = clamp(normalize(normalMap * tbnMatrix), vec3(-1.0), vec3(1.0));
}
}

View File

@ -0,0 +1,121 @@
#include "/lib/util/dither.glsl"
vec2 vTexCoord = signMidCoordPos * 0.5 + 0.5;
#include "/lib/util/dFdxdFdy.glsl"
vec4 ReadNormal(vec2 coord) {
coord = fract(coord) * vTexCoordAM.pq + vTexCoordAM.st;
return textureGrad(normals, coord, dcdx, dcdy);
}
vec2 GetParallaxCoord(float parallaxFade, float dither, inout vec2 newCoord, inout float texDepth, inout vec3 traceCoordDepth) {
float invParallaxQuality = 1.0 / POM_QUALITY;
vec4 normalMap = ReadNormal(vTexCoord.st);
vec2 normalMapM = normalMap.xy * 2.0 - 1.0;
float normalCheck = normalMapM.x + normalMapM.y;
float minHeight = 1.0 - invParallaxQuality;
if (viewVector.z >= 0.0 || normalMap.a >= minHeight || normalCheck <= -1.999) return vTexCoord.st;
vec2 interval = viewVector.xy * 0.25 * (1.0 - parallaxFade) * POM_DEPTH / (-viewVector.z * POM_QUALITY);
float i = 0.0;
vec2 localCoord;
#if defined GBUFFERS_TERRAIN || defined GBUFFERS_BLOCK
if (texDepth <= 1.0 - i * invParallaxQuality) {
localCoord = vTexCoord.st + i * interval;
texDepth = ReadNormal(localCoord).a;
i = dither;
}
#endif
for (; i < POM_QUALITY && texDepth <= 1.0 - i * invParallaxQuality; i++) {
localCoord = vTexCoord.st + i * interval;
texDepth = ReadNormal(localCoord).a;
}
float pI = float(max(i - 1, 0));
traceCoordDepth.xy -= pI * interval;
traceCoordDepth.z -= pI * invParallaxQuality;
localCoord = fract(vTexCoord.st + pI * interval);
newCoord = localCoord * vTexCoordAM.pq + vTexCoordAM.st;
return localCoord;
}
float GetParallaxShadow(float parallaxFade, float dither, float height, vec2 coord, vec3 lightVec, mat3 tbn) {
float parallaxshadow = 1.0;
vec3 parallaxdir = tbn * lightVec;
parallaxdir.xy *= 1.0 * POM_DEPTH; // Angle
for (int i = 0; i < 4 && parallaxshadow >= 0.01; i++) {
float stepLC = 0.025 * (i + dither);
float currentHeight = height + parallaxdir.z * stepLC;
vec2 parallaxCoord = fract(coord + parallaxdir.xy * stepLC) * vTexCoordAM.pq + vTexCoordAM.st;
float offsetHeight = textureGrad(normals, parallaxCoord, dcdx, dcdy).a;
parallaxshadow *= clamp(1.0 - (offsetHeight - currentHeight) * 4.0, 0.0, 1.0);
}
return mix(parallaxshadow, 1.0, parallaxFade);
}
// Big thanks to null511 for slope normals
vec3 GetParallaxSlopeNormal(vec2 texCoord, float traceDepth, vec3 viewDir) {
vec2 atlasPixelSize = 1.0 / atlasSize;
float atlasAspect = atlasSize.x / atlasSize.y;
vec2 atlasCoord = fract(texCoord) * vTexCoordAM.pq + vTexCoordAM.st;
vec2 tileSize = atlasSize * vTexCoordAM.pq;
vec2 tilePixelSize = 1.0 / tileSize;
vec2 tex_snapped = floor(atlasCoord * atlasSize) * atlasPixelSize;
vec2 tex_offset = atlasCoord - (tex_snapped + 0.5 * atlasPixelSize);
vec2 stepSign = sign(tex_offset);
vec2 viewSign = sign(viewDir.xy);
bool dir = abs(tex_offset.x * atlasAspect) < abs(tex_offset.y);
vec2 tex_x, tex_y;
if (dir) {
tex_x = texCoord - vec2(tilePixelSize.x * viewSign.x, 0.0);
tex_y = texCoord + vec2(0.0, stepSign.y * tilePixelSize.y);
}
else {
tex_x = texCoord + vec2(tilePixelSize.x * stepSign.x, 0.0);
tex_y = texCoord - vec2(0.0, viewSign.y * tilePixelSize.y);
}
float height_x = ReadNormal(tex_x).a;
float height_y = ReadNormal(tex_y).a;
if (dir) {
if (!(traceDepth > height_y && viewSign.y != stepSign.y)) {
if (traceDepth > height_x) return vec3(-viewSign.x, 0.0, 0.0);
if (abs(viewDir.y) > abs(viewDir.x))
return vec3(0.0, -viewSign.y, 0.0);
else
return vec3(-viewSign.x, 0.0, 0.0);
}
return vec3(0.0, -viewSign.y, 0.0);
}
else {
if (!(traceDepth > height_x && viewSign.x != stepSign.x)) {
if (traceDepth > height_y) return vec3(0.0, -viewSign.y, 0.0);
if (abs(viewDir.y) > abs(viewDir.x))
return vec3(0.0, -viewSign.y, 0.0);
else
return vec3(-viewSign.x, 0.0, 0.0);
}
return vec3(-viewSign.x, 0.0, 0.0);
}
}

View File

@ -0,0 +1,245 @@
#ifdef OVERWORLD
#include "/lib/atmospherics/sky.glsl"
#endif
#if defined END && defined DEFERRED1
#include "/lib/atmospherics/enderBeams.glsl"
#endif
#ifdef ATM_COLOR_MULTS
#include "/lib/colors/colorMultipliers.glsl"
#endif
#ifdef MOON_PHASE_INF_ATMOSPHERE
#include "/lib/colors/moonPhaseInfluence.glsl"
#endif
vec3 nvec3(vec4 pos) {
return pos.xyz/pos.w;
}
vec3 refPos = vec3(0.0);
vec4 GetReflection(vec3 normalM, vec3 viewPos, vec3 nViewPos, vec3 playerPos, float lViewPos, float z0,
sampler2D depthtex, float dither, float skyLightFactor, float fresnel,
float smoothness, vec3 geoNormal, vec3 color, vec3 shadowMult, float highlightMult) {
// ============================== Step 1: Prepare ============================== //
vec2 rEdge = vec2(0.6, 0.55);
vec3 normalMR = normalM;
#if defined GBUFFERS_WATER && WATER_STYLE == 1 && defined GENERATED_NORMALS
normalMR = normalize(mix(geoNormal, normalM, 0.05));
#endif
vec3 nViewPosR = normalize(reflect(nViewPos, normalMR));
float RVdotU = dot(nViewPosR, upVec);
float RVdotS = dot(nViewPosR, sunVec);
#if defined GBUFFERS_WATER && WATER_STYLE >= 2
normalMR = normalize(mix(geoNormal, normalM, 0.8));
#endif
// ============================== End of Step 1 ============================== //
// ============================== Step 2: Calculate Terrain Reflection and Alpha ============================== //
vec4 reflection = vec4(0.0);
#if defined DEFERRED1 || WATER_REFLECT_QUALITY >= 1
#if defined DEFERRED1 || WATER_REFLECT_QUALITY >= 2 && !defined DH_WATER
// Method 1: Ray Marched Reflection //
// Ray Marching
vec3 start = viewPos + normalMR * (lViewPos * 0.025 * (1.0 - fresnel) + 0.05);
#if defined GBUFFERS_WATER && WATER_STYLE >= 2
vec3 vector = normalize(reflect(nViewPos, normalMR)); // Not using nViewPosR because normalMR changed
#else
vec3 vector = nViewPosR;
#endif
//vector = normalize(vector - 0.5 * (1.0 - smoothness) * (1.0 - fresnel) * normalMR); // reflection anisotropy test
//vector = normalize(vector - 0.075 * dither * (1.0 - pow2(pow2(fresnel))) * normalMR);
vector *= 0.5;
vec3 viewPosRT = viewPos + vector;
vec3 tvector = vector;
int sr = 0;
float dist = 0.0;
vec3 rfragpos = vec3(0.0);
for (int i = 0; i < 30; i++) {
refPos = nvec3(gbufferProjection * vec4(viewPosRT, 1.0)) * 0.5 + 0.5;
if (abs(refPos.x - 0.5) > rEdge.x || abs(refPos.y - 0.5) > rEdge.y) break;
rfragpos = vec3(refPos.xy, texture2D(depthtex, refPos.xy).r);
rfragpos = nvec3(gbufferProjectionInverse * vec4(rfragpos * 2.0 - 1.0, 1.0));
dist = length(start - rfragpos);
float err = length(viewPosRT - rfragpos);
if (err < length(vector) * 3.0) {
sr++;
if (sr >= 6) break;
tvector -= vector;
vector *= 0.1;
}
vector *= 2.0;
tvector += vector * (0.95 + 0.1 * dither);
viewPosRT = start + tvector;
}
// Finalizing Terrain Reflection and Alpha
if (refPos.z < 0.99997) {
vec2 absPos = abs(refPos.xy - 0.5);
vec2 cdist = absPos / rEdge;
float border = clamp(1.0 - pow(max(cdist.x, cdist.y), 50.0), 0.0, 1.0);
reflection.a = border;
float lViewPosRT = length(rfragpos);
if (reflection.a > 0.001) {
vec2 edgeFactor = pow2(pow2(pow2(cdist)));
refPos.y += (dither - 0.5) * (0.05 * (edgeFactor.x + edgeFactor.y));
#ifdef DEFERRED1
float smoothnessDM = pow2(smoothness);
float lodFactor = 1.0 - exp(-0.125 * (1.0 - smoothnessDM) * dist);
float lod = log2(viewHeight / 8.0 * (1.0 - smoothnessDM) * lodFactor) * 0.45;
if (z0 <= 0.56) lod *= 2.22; // Using more lod to compensate for less roughness noise on held items
lod = max(lod - 1.0, 0.0);
reflection.rgb = texture2DLod(colortex0, refPos.xy, lod).rgb;
#else
reflection = texture2D(gaux2, refPos.xy);
reflection.rgb = pow2(reflection.rgb + 1.0);
#endif
float skyFade = 0.0;
DoFog(reflection.rgb, skyFade, lViewPosRT, ViewToPlayer(rfragpos.xyz), RVdotU, RVdotS, dither);
edgeFactor.x = pow2(edgeFactor.x);
edgeFactor = 1.0 - edgeFactor;
reflection.a *= pow(edgeFactor.x * edgeFactor.y, 2.0 + 3.0 * GetLuminance(reflection.rgb));
}
float posDif = lViewPosRT - lViewPos;
reflection.a *= clamp(posDif + 3.0, 0.0, 1.0);
}
#if defined DEFERRED1 && defined TEMPORAL_FILTER
else refPos.z = 1.0;
#endif
#if !defined DEFERRED1 && defined DISTANT_HORIZONS
else
#endif
#endif
#if !defined DEFERRED1 && (WATER_REFLECT_QUALITY < 2 || defined DISTANT_HORIZONS) || defined DH_WATER
{ // Method 2: Mirorred Image Reflection //
#if WATER_REFLECT_QUALITY < 2
float verticalStretch = 0.013; // for potato quality reflections
#else
float verticalStretch = 0.0025; // for distant horizons reflections
#endif
vec4 clipPosR = gbufferProjection * vec4(nViewPosR + verticalStretch * viewPos, 1.0);
vec3 screenPosR = clipPosR.xyz / clipPosR.w * 0.5 + 0.5;
vec2 screenPosRM = abs(screenPosR.xy - 0.5);
if (screenPosRM.x < rEdge.x && screenPosRM.y < rEdge.y) {
vec2 edgeFactor = pow2(pow2(pow2(screenPosRM / rEdge)));
screenPosR.y += (dither - 0.5) * (0.03 * (edgeFactor.x + edgeFactor.y) + 0.004);
screenPosR.z = texture2D(depthtex1, screenPosR.xy).x;
vec3 viewPosR = ScreenToView(screenPosR);
if (lViewPos <= 2.0 + length(viewPosR)) {
reflection = texture2D(gaux2, screenPosR.xy);
reflection.rgb = pow2(reflection.rgb + 1.0);
}
edgeFactor.x = pow2(edgeFactor.x);
edgeFactor = 1.0 - edgeFactor;
reflection.a *= edgeFactor.x * edgeFactor.y;
}
reflection.a *= reflection.a;
reflection.a *= clamp01((dot(nViewPos, nViewPosR) - 0.45) * 10.0); // Fixes perpendicular ref
}
#endif
#endif
// ============================== End of Step 2 ============================== //
// ============================== Step 3: Add Sky Reflection ============================== //
#if defined DEFERRED1 || WATER_REFLECT_QUALITY >= 1
if (reflection.a < 1.0)
#endif
{
#ifdef OVERWORLD
#if defined DEFERRED1 || WATER_REFLECT_QUALITY >= 2
vec3 skyReflection = GetSky(RVdotU, RVdotS, dither, true, true);
#else
vec3 skyReflection = GetLowQualitySky(RVdotU, RVdotS, dither, true, true);
#endif
#ifdef ATM_COLOR_MULTS
skyReflection *= atmColorMult;
#endif
#ifdef MOON_PHASE_INF_ATMOSPHERE
skyReflection *= moonPhaseInfluence;
#endif
#ifdef DEFERRED1
skyReflection *= skyLightFactor;
#else
float specularHighlight = GGX(normalM, nViewPos, lightVec, max(dot(normalM, lightVec), 0.0), smoothness);
skyReflection += specularHighlight * highlightColor * shadowMult * highlightMult * invRainFactor;
#if WATER_REFLECT_QUALITY >= 1
#ifdef SKY_EFFECT_REFLECTION
float cloudLinearDepth = 1.0;
float skyFade = 1.0;
vec3 auroraBorealis = vec3(0.0);
vec3 nightNebula = vec3(0.0);
#if AURORA_STYLE > 0
auroraBorealis = GetAuroraBorealis(nViewPosR, RVdotU, dither);
skyReflection += auroraBorealis;
#endif
#ifdef NIGHT_NEBULA
nightNebula += GetNightNebula(nViewPosR, RVdotU, RVdotS);
skyReflection += nightNebula;
#endif
vec2 starCoord = GetStarCoord(nViewPosR, 0.5);
skyReflection += GetStars(starCoord, RVdotU, RVdotS);
#ifdef VL_CLOUDS_ACTIVE
vec3 worldNormalMR = normalize(mat3(gbufferModelViewInverse) * normalMR);
vec3 RCameraPos = cameraPosition + 2.0 * worldNormalMR * dot(playerPos, worldNormalMR);
vec3 RPlayerPos = normalize(mat3(gbufferModelViewInverse) * nViewPosR);
float RlViewPos = 100000.0;
vec4 clouds = GetClouds(cloudLinearDepth, skyFade, RCameraPos, RPlayerPos,
RlViewPos, RVdotS, RVdotU, dither, auroraBorealis, nightNebula);
skyReflection = mix(skyReflection, clouds.rgb, clouds.a);
#endif
#endif
skyReflection = mix(color * 0.5, skyReflection, skyLightFactor);
#else
skyReflection = mix(color, skyReflection, skyLightFactor * 0.5);
#endif
#endif
#elif defined END
#ifdef DEFERRED1
vec3 skyReflection = (endSkyColor + 0.4 * DrawEnderBeams(RVdotU, playerPos)) * skyLightFactor;
#else
vec3 skyReflection = endSkyColor * shadowMult;
#endif
#ifdef ATM_COLOR_MULTS
skyReflection *= atmColorMult;
#endif
#else
vec3 skyReflection = vec3(0.0);
#endif
reflection.rgb = mix(skyReflection, reflection.rgb, reflection.a);
}
// ============================== End of Step 3 ============================== //
return reflection;
}

View File

@ -0,0 +1,42 @@
float GetApproxDistance(float depth) {
return near * far / (far - depth * far);
}
void DoRefraction(inout vec3 color, inout float z0, inout float z1, vec3 viewPos, float lViewPos) {
// Prep
if (int(texelFetch(colortex6, texelCoord, 0).g * 255.1) != 241) return;
float fovScale = gbufferProjection[1][1];
vec3 playerPos = ViewToPlayer(viewPos.xyz);
vec3 worldPos = playerPos.xyz + cameraPosition.xyz;
vec2 worldPosRM = worldPos.xz * 0.02 + worldPos.y * 0.01 + 0.01 * frameTimeCounter;
vec2 refractNoise = texture2D(noisetex, worldPosRM).rb - vec2(0.5);
refractNoise *= WATER_REFRACTION_INTENSITY * fovScale / (3.0 + lViewPos);
#if WATER_STYLE < 3
refractNoise *= 0.015;
#else
refractNoise *= 0.02;
#endif
// Check
float approxDif = GetApproxDistance(z1) - GetApproxDistance(z0);
refractNoise *= clamp(approxDif, 0.0, 1.0);
vec2 refractCoord = texCoord.xy + refractNoise;
if (int(texture2D(colortex6, refractCoord).g * 255.1) != 241) return;
float z0check = texture2D(depthtex0, refractCoord).r;
float z1check = texture2D(depthtex1, refractCoord).r;
float approxDifCheck = GetApproxDistance(z1check) - GetApproxDistance(z0check);
refractNoise *= clamp(approxDifCheck, 0.0, 1.0);
// Sample
refractCoord = texCoord.xy + refractNoise;
color = texture2D(colortex0, refractCoord).rgb;
z0 = texture2D(depthtex0, refractCoord).r;
z1 = texture2D(depthtex1, refractCoord).r;
}

View File

@ -0,0 +1,19 @@
const float packSizeSW = 16.0;
void DoSnowyWorld(inout vec4 color, inout float smoothnessG, inout float highlightMult, inout float smoothnessD, inout float emission,
vec3 playerPos, vec2 lmCoord, float snowFactor, float snowMinNdotU, float NdotU, int subsurfaceMode) {
float snowFactorM = snowFactor * 1000.0 * max(NdotU - 0.9, snowMinNdotU) * max0(lmCoord.y - 0.9) * (0.9 - clamp(lmCoord.x, 0.8, 0.9));
if (snowFactorM <= 0.0001) return;
vec3 worldPos = playerPos + cameraPosition;
vec2 noiseCoord = floor(packSizeSW * worldPos.xz + 0.001) / packSizeSW;
noiseCoord += floor(packSizeSW * worldPos.y + 0.001) / packSizeSW;
float noiseTexture = dot(vec2(0.25, 0.75), texture2D(noisetex, noiseCoord * 0.45).rg);
vec3 snowColor = mix(vec3(0.65, 0.8, 0.85), vec3(1.0, 1.0, 1.0), noiseTexture * 0.75 + 0.125);
color.rgb = mix(color.rgb, snowColor + color.rgb * emission * 0.2, snowFactorM);
smoothnessG = mix(smoothnessG, 0.25 + 0.25 * noiseTexture, snowFactorM);
highlightMult = mix(highlightMult, 2.0 - subsurfaceMode * 0.666, snowFactorM);
smoothnessD = mix(smoothnessD, 0.0, snowFactorM);
emission *= 1.0 - snowFactorM * 0.85;
}

View File

@ -0,0 +1,186 @@
#if COLORED_LIGHTING_INTERNAL > 0
#include "/lib/misc/voxelization.glsl"
#endif
vec3 GetRawWave(in vec3 pos, float wind) {
float magnitude = sin(wind * 0.0027 + pos.z + pos.y) * 0.04 + 0.04;
float d0 = sin(wind * 0.0127);
float d1 = sin(wind * 0.0089);
float d2 = sin(wind * 0.0114);
vec3 wave;
wave.x = sin(wind*0.0063 + d0 + d1 - pos.x + pos.z + pos.y) * magnitude;
wave.z = sin(wind*0.0224 + d1 + d2 + pos.x - pos.z + pos.y) * magnitude;
wave.y = sin(wind*0.0015 + d2 + d0 + pos.z + pos.y - pos.y) * magnitude;
return wave;
}
vec3 GetWave(in vec3 pos, float waveSpeed) {
float wind = frameTimeCounter * waveSpeed * WAVING_SPEED;
vec3 wave = GetRawWave(pos, wind);
#define WAVING_I_RAIN_MULT_M WAVING_I_RAIN_MULT * 0.01
#if WAVING_I_RAIN_MULT > 100
float windRain = frameTimeCounter * waveSpeed * WAVING_I_RAIN_MULT_M * WAVING_SPEED;
vec3 waveRain = GetRawWave(pos, windRain);
wave = mix(wave, waveRain, rainFactor);
#endif
#ifdef NO_WAVING_INDOORS
wave *= clamp(lmCoord.y - 0.87, 0.0, 0.1);
#else
wave *= 0.1;
#endif
float wavingIntensity = WAVING_I * mix(1.0, WAVING_I_RAIN_MULT_M, rainFactor);
return wave * wavingIntensity;
}
void DoWave_Foliage(inout vec3 playerPos, vec3 worldPos, float waveMult) {
worldPos.y *= 0.5;
vec3 wave = GetWave(worldPos, 170.0);
wave.x = wave.x * 8.0 + wave.y * 4.0;
wave.y = 0.0;
wave.z = wave.z * 3.0;
playerPos.xyz += wave * waveMult;
}
void DoWave_Leaves(inout vec3 playerPos, vec3 worldPos, float waveMult) {
worldPos *= vec3(0.75, 0.375, 0.75);
vec3 wave = GetWave(worldPos, 170.0);
wave *= vec3(8.0, 3.0, 4.0);
wave *= 1.0 - inSnowy; // Leaves with snow on top look wrong
playerPos.xyz += wave * waveMult;
}
void DoWave_Water(inout vec3 playerPos, vec3 worldPos) {
float waterWaveTime = frameTimeCounter * 6.0 * WAVING_SPEED;
worldPos.xz *= 14.0;
float wave = sin(waterWaveTime * 0.7 + worldPos.x * 0.14 + worldPos.z * 0.07);
wave += sin(waterWaveTime * 0.5 + worldPos.x * 0.10 + worldPos.z * 0.05);
#ifdef NO_WAVING_INDOORS
wave *= clamp(lmCoord.y - 0.87, 0.0, 0.1);
#else
wave *= 0.1;
#endif
playerPos.y += wave * 0.125 - 0.05;
#if defined GBUFFERS_WATER && WATER_STYLE == 1
normal = mix(normal, tangent, wave * 0.01);
#endif
}
void DoWave_Lava(inout vec3 playerPos, vec3 worldPos) {
if (fract(worldPos.y + 0.005) > 0.06) {
float lavaWaveTime = frameTimeCounter * 3.0 * WAVING_SPEED;
worldPos.xz *= 14.0;
float wave = sin(lavaWaveTime * 0.7 + worldPos.x * 0.14 + worldPos.z * 0.07);
wave += sin(lavaWaveTime * 0.5 + worldPos.x * 0.05 + worldPos.z * 0.10);
playerPos.y += wave * 0.0125;
}
}
void DoWave(inout vec3 playerPos, int mat) {
vec3 worldPos = playerPos.xyz + cameraPosition.xyz;
#if defined GBUFFERS_TERRAIN || defined SHADOW
#ifdef WAVING_FOLIAGE
if (mat == 10005
#ifdef DO_MORE_FOLIAGE_WAVING
|| mat == 10769
|| mat == 10924
|| mat == 10972
#endif
) { // Grounded Waving Foliage
if (gl_MultiTexCoord0.t < mc_midTexCoord.t || fract(worldPos.y + 0.21) > 0.26)
DoWave_Foliage(playerPos.xyz, worldPos, 1.0);
}
else if (mat == 10021) { // Upper Layer Waving Foliage
DoWave_Foliage(playerPos.xyz, worldPos, 1.0);
}
#if defined WAVING_LEAVES || defined WAVING_LAVA || defined WAVING_LILY_PAD
else
#endif
#endif
#ifdef WAVING_LEAVES
if (mat == 10009) { // Leaves
DoWave_Leaves(playerPos.xyz, worldPos, 1.0);
} else if (mat == 10013) { // Vine
// Reduced waving on vines to prevent clipping through blocks
DoWave_Leaves(playerPos.xyz, worldPos, 0.75);
}
#if defined NETHER || defined DO_NETHER_VINE_WAVING_OUTSIDE_NETHER
else if (mat == 10884 || mat == 10885) { // Weeping Vines, Twisting Vines
float waveMult = 1.0;
#if COLORED_LIGHTING_INTERNAL > 0
vec3 playerPosP = playerPos + vec3(0.0, 0.1, 0.0);
vec3 voxelPosP = SceneToVoxel(playerPosP);
vec3 playerPosN = playerPos - vec3(0.0, 0.1, 0.0);
vec3 voxelPosN = SceneToVoxel(playerPosN);
if (CheckInsideVoxelVolume(voxelPosP)) {
int voxelP = int(texelFetch(voxel_sampler, ivec3(voxelPosP), 0).r);
int voxelN = int(texelFetch(voxel_sampler, ivec3(voxelPosN), 0).r);
if (voxelP != 0 && voxelP != 65 || voxelN != 0 && voxelN != 65) // not air, not weeping vines
waveMult = 0.0;
}
#endif
DoWave_Foliage(playerPos.xyz, worldPos, waveMult);
}
#endif
#if defined WAVING_LAVA || defined WAVING_LILY_PAD
else
#endif
#endif
#ifdef WAVING_LAVA
if (mat == 10068) { // Lava
DoWave_Lava(playerPos.xyz, worldPos);
#ifdef GBUFFERS_TERRAIN
// G8FL735 Fixes Optifine-Iris parity. Optifine has 0.9 gl_Color.rgb on a lot of versions
glColorRaw.rgb = min(glColorRaw.rgb, vec3(0.9));
#endif
}
#ifdef WAVING_LILY_PAD
else
#endif
#endif
#ifdef WAVING_LILY_PAD
if (mat == 10489) { // Lily Pad
DoWave_Water(playerPos.xyz, worldPos);
}
#endif
#endif
#if defined GBUFFERS_WATER || defined SHADOW
#ifdef WAVING_WATER_VERTEX
#if defined WAVING_ANYTHING_TERRAIN && defined SHADOW
else
#endif
if (mat == 32000) { // Water
if (fract(worldPos.y + 0.005) > 0.06)
DoWave_Water(playerPos.xyz, worldPos);
}
#endif
#endif
}

View File

@ -0,0 +1 @@
#include "/lib/materials/specificMaterials/entities/itemFrame.glsl"

View File

@ -0,0 +1,6 @@
color = vec4(1.0, 1.1, 1.4, 1.0);
lmCoordM = vec2(0.0);
shadowMult = vec3(0.0);
emission = 0.5;

View File

@ -0,0 +1,101 @@
// End Portal fix by fayer3#2332 (Modified)
vec3[8] colors = vec3[](
vec3(0.3472479, 0.6559956, 0.7387838) * 1.5,
vec3(0.6010780, 0.7153565, 1.060625 ),
vec3(0.4221090, 0.8135094, 0.9026056),
vec3(0.3492291, 1.0241201, 1.8612821),
vec3(0.7543085, 0.8238697, 0.6803233),
vec3(0.4144472, 0.5648165, 0.8037 ),
vec3(0.508905 , 0.6719649, 0.9982805),
vec3(0.5361914, 0.4476583, 0.8008522));
color.rgb = vec3(0.421, 0.7, 1.6) * 0.14;
float dither = Bayer64(gl_FragCoord.xy);
#ifdef TAA
dither = fract(dither + goldenRatio * mod(float(frameCounter), 3600.0));
int repeat = 4;
#else
int repeat = 8;
#endif
float dismult = 0.5;
for (int j = 0; j < repeat; j++) {
float add = float(j + dither) * 0.0625 / float(repeat);
for (int i = 1; i <= 8; i++) {
float colormult = 0.9/(30.0+i);
float rotation = (i - 0.1 * i + 0.71 * i - 11 * i + 21) * 0.01 + i * 0.01;
float Cos = cos(radians(rotation));
float Sin = sin(radians(rotation));
vec2 offset = vec2(0.0, 1.0/(3600.0/24.0)) * pow(16.0 - i, 2.0) * 0.004;
vec3 wpos = normalize((gbufferModelViewInverse * vec4(viewPos * (i * dismult + 1), 1.0)).xyz);
if (abs(NdotU) > 0.9) {
wpos.xz /= wpos.y;
wpos.xz *= 0.06 * sign(- playerPos.y);
wpos.xz *= abs(playerPos.y) + i * dismult + add;
wpos.xz -= cameraPosition.xz * 0.05;
} else {
vec3 absPos = abs(playerPos);
if (abs(dot(normal, eastVec)) > 0.9) {
wpos.xz = wpos.yz / wpos.x;
wpos.xz *= 0.06 * sign(- playerPos.x);
wpos.xz *= abs(playerPos.x) + i * dismult + add;
wpos.xz -= cameraPosition.yz * 0.05;
} else {
wpos.xz = wpos.yx / wpos.z;
wpos.xz *= 0.06 * sign(- playerPos.z);
wpos.xz *= abs(playerPos.z) + i * dismult + add;
wpos.xz -= cameraPosition.yx * 0.05;
}
}
vec2 pos = wpos.xz;
vec2 wind = fract((frameTimeCounter + 984.0) * (i + 8) * 0.125 * offset);
vec2 coord = mat2(Cos, Sin, -Sin, Cos) * pos + wind;
if (mod(float(i), 4) < 1.5) coord = coord.yx + vec2(-1.0, 1.0) * wind.y;
vec3 psample = pow(texture2D(tex, coord).rgb, vec3(0.85)) * colors[i-1] * colormult;
color.rgb += psample * length(psample.rgb) * (3000.0 / repeat);
}
}
color.rgb *= vec3(0.09, 0.086, 0.06) * 0.9;
emission = 10.0;
noDirectionalShading = true;
#ifdef COATED_TEXTURES
noiseFactor = 0.0;
#endif
#ifdef PORTAL_EDGE_EFFECT
//vec3 voxelPos = SceneToVoxel(mix(playerPos, vec3(0.0), -0.02)); // Fixes weird parallax offset
vec3 voxelPos = SceneToVoxel(playerPos);
if (CheckInsideVoxelVolume(voxelPos)) {
float portalOffset = 0.08333 * dither;
vec3[4] portalOffsets = vec3[](
vec3( portalOffset, 0, portalOffset),
vec3( portalOffset, 0,-portalOffset),
vec3(-portalOffset, 0, portalOffset),
vec3(-portalOffset, 0,-portalOffset)
);
float edge = 0.0;
for (int i = 0; i < 4; i++) {
int voxel = int(texelFetch(voxel_sampler, ivec3(voxelPos + portalOffsets[i]), 0).r);
if (voxel == 58 || voxel == 255) { // End Portal Frame or Bedrock
edge = 1.0; break;
}
}
#ifdef END
// No edge effect in the middle of the return fountain
vec2 var1 = abs(playerPos.xz + cameraPosition.xz - 0.5);
float var2 = max(var1.x, var1.y);
if (var2 > 1.0)
#endif
{
vec4 edgeColor = vec4(vec3(0.18, 0.5, 0.45), 1.0);
color = mix(color, edgeColor, edge);
emission = mix(emission, 5.0, edge);
}
}
#endif

View File

@ -0,0 +1,15 @@
normalM = upVec;
highlightMult = 0.0;
shadowMult = vec3(0.0);
#if MC_VERSION >= 11700
if (lmCoord.x > 0.99) { // Glowing Sign Text
lmCoordM = vec2(0.0);
emission = 1.0;
color.rgb *= length(color.rgb) + 0.5;
} else // Normal Sign Text
#endif
color.rgb *= 5.0;

View File

@ -0,0 +1,4 @@
smoothnessG = color.g;
smoothnessD = color.g;
emission = min(max0(dot(color.rgb, color.rgb) - 1.0) * 6.0, 1.0);

View File

@ -0,0 +1,6 @@
smoothnessG = pow2(pow2(color.r)) * 0.65;
smoothnessD = smoothnessG;
#ifdef COATED_TEXTURES
noiseFactor = 0.5;
#endif

View File

@ -0,0 +1,3 @@
smoothnessG = color.r * 0.4;
smoothnessD = color.r * 0.3;

View File

@ -0,0 +1,6 @@
smoothnessG = pow2(pow2(color.g)) * 0.75;
smoothnessD = smoothnessG;
#ifdef COATED_TEXTURES
noiseFactor = 0.66;
#endif

View File

@ -0,0 +1,6 @@
smoothnessG = pow2(pow2(color.g)) * 0.7;
smoothnessD = smoothnessG;
#ifdef COATED_TEXTURES
noiseFactor = 0.66;
#endif

View File

@ -0,0 +1,6 @@
smoothnessG = pow2(color.r) * 0.7;
smoothnessD = smoothnessG;
#ifdef COATED_TEXTURES
noiseFactor = 0.77;
#endif

View File

@ -0,0 +1,6 @@
smoothnessG = color.r * 0.7;
smoothnessD = smoothnessG;
#ifdef COATED_TEXTURES
noiseFactor = 0.66;
#endif

View File

@ -0,0 +1,7 @@
smoothnessG = pow2(pow2(pow2(color.g))) * 12.0;
smoothnessG = min1(smoothnessG);
smoothnessD = smoothnessG;
#ifdef COATED_TEXTURES
noiseFactor = 0.66;
#endif

View File

@ -0,0 +1,3 @@
smoothnessG = pow2(color.r) * 0.7;
smoothnessG = min1(smoothnessG);
smoothnessD = smoothnessG;

View File

@ -0,0 +1,7 @@
smoothnessG = pow2(pow2(pow2(color.g))) * 12.0;
smoothnessG = min1(smoothnessG);
smoothnessD = smoothnessG;
#ifdef COATED_TEXTURES
noiseFactor = 0.77;
#endif

View File

@ -0,0 +1,6 @@
smoothnessG = pow2(color.g) * 0.25;
smoothnessD = smoothnessG;
#ifdef COATED_TEXTURES
noiseFactor = 0.66;
#endif

View File

@ -0,0 +1,7 @@
smoothnessG = pow2(pow2(color.g)) * 8.0;
smoothnessG = min1(smoothnessG);
smoothnessD = smoothnessG;
#ifdef COATED_TEXTURES
noiseFactor = 0.66;
#endif

View File

@ -0,0 +1,6 @@
smoothnessG = pow2(color.g) * 0.7;
smoothnessD = smoothnessG;
#ifdef COATED_TEXTURES
noiseFactor = 0.77;
#endif

View File

@ -0,0 +1,6 @@
smoothnessG = color.r;
smoothnessD = color.r;
#ifdef COATED_TEXTURES
noiseFactor = 0.33;
#endif

View File

@ -0,0 +1,2 @@
smoothnessG = color.r;
smoothnessD = color.r * 0.65;

View File

@ -0,0 +1,7 @@
noSmoothLighting = true;
color.rgb *= 1.0 + 0.7 * pow2(max(-signMidCoordPos.y + 0.6, float(NdotU > 0.9) * 1.6));
#ifdef SNOWY_WORLD
snowFactor = 0.0;
#endif

View File

@ -0,0 +1,4 @@
smoothnessG = pow2(pow2(color.g)) * 1.5;
smoothnessG = min1(smoothnessG);
smoothnessD = smoothnessG;
smoothnessG = max(smoothnessG, 0.3 * color.g * float(color.g > color.b * 1.5));

View File

@ -0,0 +1,10 @@
materialMask = OSIEBCA * 2.0; // Copper Fresnel
smoothnessG = pow2(pow2(color.r)) + pow2(max0(color.g - color.r * 0.5)) * 0.3;
smoothnessG = min1(smoothnessG);
smoothnessD = smoothnessG;
color.rgb *= 0.6 + 0.7 * GetLuminance(color.rgb);
#ifdef COATED_TEXTURES
noiseFactor = 0.5;
#endif

View File

@ -0,0 +1,20 @@
noSmoothLighting = true;
vec3 hsvColor = rgb2hsv(color.rgb);
if (abs(hsvColor.r - 0.09722) < 0.04305 && hsvColor.b > 0.7) { // Active Light Part
smoothnessG = 0.75;
smoothnessD = 0.35;
float blockRes = absMidCoordPos.x * atlasSize.x;
vec2 signMidCoordPosM = (floor((signMidCoordPos + 1.0) * blockRes) + 0.5) / blockRes - 1.0;
float dotsignMidCoordPos = dot(signMidCoordPosM, signMidCoordPosM);
float lBlockPosM = pow2(max0(1.0 - 1.7 * pow2(pow2(dotsignMidCoordPos))));
emission = pow2(lmCoordM.x) + 0.3 * color.r;
emission *= (0.7 + 2.0 * pow2(lBlockPosM));
} else if (color.r > 2.5 * (color.g + color.b)) { // Middle Redstone Part
emission = 4.0;
color.rgb *= color.rgb;
} else { // Copper Base
#include "/lib/materials/specificMaterials/terrain/copperBlock.glsl"
}

View File

@ -0,0 +1,7 @@
float lColor = length(color.rgb);
smoothnessG = lColor * 0.2;
smoothnessD = lColor * 0.15;
#ifdef COATED_TEXTURES
noiseFactor = 0.66;
#endif

View File

@ -0,0 +1,11 @@
#include "/lib/materials/specificMaterials/terrain/obsidian.glsl"
highlightMult *= 0.5;
float factor0 = sqrt2(max0(color.b - color.g * 6.0));
float factor1 = pow2(color.b);
emission = 1.35 + pow2(pow2(factor1)) * 7.5;
emission *= factor0;
color.r *= 1.15;
maRecolor = vec3(factor0 * min(max0(factor1 * 0.7 - 0.1) * 1.3, 0.5));

View File

@ -0,0 +1,5 @@
smoothnessG = pow2(color.g);
smoothnessG = smoothnessG;
smoothnessD = smoothnessG;
materialMask = OSIEBCA; // Intense Fresnel

View File

@ -0,0 +1,25 @@
materialMask = OSIEBCA; // Intense Fresnel
float factor = max(color.g, 0.8);
float factor2 = pow2(factor);
#ifdef GBUFFERS_TERRAIN
float factor4 = pow2(factor2);
#else
float factor4 = factor2;
#endif
smoothnessG = factor - pow2(pow2(color.g)) * 0.4;
highlightMult = 3.0 * max(pow2(factor4), 0.2);
smoothnessD = factor4 * 0.75;
#if MC_VERSION < 11300
highlightMult *= 2.0;
smoothnessD /= 0.75;
#endif
color.rgb *= 0.7 + 0.4 * GetLuminance(color.rgb);
#ifdef COATED_TEXTURES
noiseFactor = 0.5;
#endif

View File

@ -0,0 +1,14 @@
materialMask = OSIEBCA; // Intense Fresnel
float factor = pow2(sqrt2(GetLuminance(color.rgb)));
float factor2 = pow2(factor);
float factor4 = pow2(factor2);
smoothnessG = factor - factor4 * 0.4;
highlightMult = 3.0 * factor4;
smoothnessD = factor4 * 0.75;
#ifdef COATED_TEXTURES
noiseFactor = 0.5;
#endif

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