diff --git a/shaders/block.properties b/shaders/block.properties index fbfe263..6672540 100644 --- a/shaders/block.properties +++ b/shaders/block.properties @@ -130,10 +130,13 @@ block.56=minecraft:pale_hanging_moss minecraft:azalea_leaves minecraft:flowering ####### ----- blocks with SSS ----- ####### ## strong sss -block.80=minecraft:pink_petals minecraft:wildflowers minecraft:kelp_plant minecraft:peony minecraft:rose_bush minecraft:lilac minecraft:packed_ice minecraft:blue_ice minecraft:attached_melon_stem minecraft:attached_pumpkin_stem \ +block.79=minecraft:packed_ice minecraft:blue_ice + + ## strong sss and floodfill ignore +block.80=minecraft:pink_petals minecraft:wildflowers minecraft:kelp_plant minecraft:peony minecraft:rose_bush minecraft:lilac minecraft:attached_melon_stem minecraft:attached_pumpkin_stem \ aquamirae:elodea \ beachparty:lounge_chair beachparty:chair beachparty:table beachparty:beach_chair beachparty:deck_chair beachparty:hammock beachparty:tiki_chair beachparty:beach_towel \ - biomesoplenty:high_grass_plant biomesoplenty:lumaloop_plant biomesoplenty:white_petals biomesoplenty:wildflower biomesoplenty:purple_wildflowers biomesoplenty:red_maple_leaf_pile biomesoplenty:orange_maple_leaf_pile biomesoplenty:yellow_maple_leaf_pile biomesoplenty:clover biomesoplenty:flesh biomesoplenty:porous_flesh biomesoplenty:flesh_tendons biomesoplenty:pus_bubble biomesoplenty:willow_vine \ + biomesoplenty:lumaloop_plant biomesoplenty:white_petals biomesoplenty:wildflower biomesoplenty:purple_wildflowers biomesoplenty:red_maple_leaf_pile biomesoplenty:orange_maple_leaf_pile biomesoplenty:yellow_maple_leaf_pile biomesoplenty:clover biomesoplenty:flesh biomesoplenty:porous_flesh biomesoplenty:flesh_tendons biomesoplenty:pus_bubble biomesoplenty:willow_vine \ conquest:duckweed conquest:big_water_lilies conquest:white_water_lilies conquest:upward_pine_branches conquest:upward_pine_twigs conquest:diagonal_upward_pine_branches conquest:cypress_leaves conquest:cypress_leaves_slab conquest:cypress_leaves_stump conquest:cypress_leaves_top conquest:cypress_leaves_vertical_quarter conquest:cypress_leaves_vertical_slab conquest:dead_cypress_leaves conquest:dead_cypress_leaves_slab conquest:dead_cypress_leaves_stump conquest:dead_cypress_leaves_top conquest:dead_cypress_leaves_vertical_quarter conquest:dead_cypress_leaves_vertical_slab conquest:half_dead_cypress_leaves conquest:half_dead_cypress_leaves_stump conquest:half_dead_light_cypress_leaves conquest:half_dead_light_cypress_leaves_stump conquest:light_cypress_leaves conquest:light_cypress_leaves_slab conquest:light_cypress_leaves_stump conquest:light_cypress_leaves_top conquest:light_cypress_leaves_vertical_quarter conquest:light_cypress_leaves_vertical_slab conquest:quarter_dead_cypress_leaves conquest:quarter_dead_cypress_leaves_stump conquest:quarter_dead_light_cypress_leaves conquest:quarter_dead_light_cypress_leaves_stump conquest:bean_pole conquest:moss_vines \ fd:wallpapers fd:wallpaper_1 fd:wallposterfacesf fd:wallposterfacesc fd:wallposterfacesb fd:ffdwallposterfaces_1 fd:ffdwallposterfaces_2 fd:ffdwallposterfaces_3 fd:fnaf_2postertoychica fd:fnaf_2postertoybonnie fd:fnaf_2postertoyfreddy fd:fnaf_2celebrateposter fd:fnaf_2posterfourfaces fd:paperpalclassic fd:paperpalfreddy fd:paperpalbonnie fd:switchon fd:switchoff \ flying_stuff:glaciated_leaves flying_stuff:ice_spikes \ @@ -151,15 +154,15 @@ block.80=minecraft:pink_petals minecraft:wildflowers minecraft:kelp_plant minecr #else #define snow_layers_5_8_entry snow:layers=5 snow:layers=6 snow:layers=7 snow:layers=8 #endif - ## weak sss -block.81= minecraft:moss_block minecraft:bee_nest minecraft:amethyst_block minecraft:budding_amethyst minecraft:small_amethyst_bud minecraft:pitcher_plant minecraft:grass_block:snowy=true snow_layers_5_8_entry minecraft:snow_block powder_snow cobweb red_mushroom_block brown_mushroom_block weeping_vines_plant twisting_vines_plant tube_coral tube_coral_block tube_coral_fan tube_coral_wall_fan horn_coral horn_coral_block horn_coral_fan horn_coral_wall_fan fire_coral fire_coral_block fire_coral_fan fire_coral_wall_fan dead_brain_coral dead_brain_coral_block dead_brain_coral_fan dead_brain_coral_wall_fan dead_bubble_coral dead_bubble_coral_block dead_bubble_coral_fan dead_bubble_coral_wall_fan dead_fire_coral dead_fire_coral_block dead_fire_coral_fan dead_fire_coral_wall_fan dead_horn_coral dead_horn_coral_block dead_horn_coral_fan dead_horn_coral_wall_fan dead_tube_coral dead_tube_coral_block dead_tube_coral_fan dead_tube_coral_wall_fan bubble_coral bubble_coral_block bubble_coral_fan bubble_coral_wall_fan brain_coral brain_coral_block brain_coral_fan brain_coral_wall_fan minecraft:spore_blossom minecraft:cave_vines_plant:berries=false minecraft:melon minecraft:pumpkin minecraft:carved_pumpkin minecraft:big_dripleaf_stem minecraft:cactus minecraft:hay_block minecraft:brown_mushroom minecraft:red_mushroom minecraft:mushroom_stem minecraft:sugar_cane minecraft:crimson_fungus minecraft:sea_pickle:waterlogged=false minecraft:honeycomb_block \ + ## weak sss and floodfill ignore +block.81=minecraft:small_amethyst_bud minecraft:pitcher_plant minecraft:grass_block:snowy=true snow_layers_5_8_entry cobweb weeping_vines_plant twisting_vines_plant tube_coral tube_coral_block tube_coral_fan tube_coral_wall_fan horn_coral horn_coral_block horn_coral_fan horn_coral_wall_fan fire_coral fire_coral_block fire_coral_fan fire_coral_wall_fan dead_brain_coral dead_brain_coral_block dead_brain_coral_fan dead_brain_coral_wall_fan dead_bubble_coral dead_bubble_coral_block dead_bubble_coral_fan dead_bubble_coral_wall_fan dead_fire_coral dead_fire_coral_block dead_fire_coral_fan dead_fire_coral_wall_fan dead_horn_coral dead_horn_coral_block dead_horn_coral_fan dead_horn_coral_wall_fan dead_tube_coral dead_tube_coral_block dead_tube_coral_fan dead_tube_coral_wall_fan bubble_coral bubble_coral_block bubble_coral_fan bubble_coral_wall_fan brain_coral brain_coral_block brain_coral_fan brain_coral_wall_fan minecraft:spore_blossom minecraft:cave_vines_plant:berries=false minecraft:big_dripleaf_stem minecraft:cactus minecraft:brown_mushroom minecraft:red_mushroom minecraft:mushroom_stem minecraft:sugar_cane minecraft:crimson_fungus minecraft:sea_pickle:waterlogged=false \ aquamirae:painting_anglerfish aquamirae:painting_oxygelium aquamirae:painting_tortured_soul aquamirae:painting_aurora \ beachparty:seashell_block beachparty:beach_parasol \ - biomesoplenty:toadstool biomesoplenty:cyan_flower_petal_block biomesoplenty:yellow_flower_petal_block biomesoplenty:green_flower_petal_block biomesoplenty:lime_flower_petal_block biomesoplenty:orange_flower_petal_block biomesoplenty:red_flower_petal_block biomesoplenty:black_flower_petal_block biomesoplenty:pink_flower_petal_block biomesoplenty:white_flower_petal_block biomesoplenty:purple_flower_petal_block biomesoplenty:magenta_flower_petal_block biomesoplenty:light_gray_flower_petal_block biomesoplenty:gray_flower_petal_block biomesoplenty:brown_flower_petal_block biomesoplenty:light_blue_flower_petal_block biomesoplenty:blue_flower_petal_block \ + biomesoplenty:high_grass_plant biomesoplenty:toadstool \ create:white_sail create:light_gray_sail create:gray_sail create:black_sail create:brown_sail create:red_sail create:orange_sail create:lime_sail create:yellow_sail create:green_sail create:cyan_sail create:light_blue_sail create:blue_sail create:purple_sail create:magenta_sail create:pink_sail \ conquest:hanging_roots conquest:prickly_pear_cacti conquest:small_cacti conquest:dark_bamboo conquest:golden_bamboo conquest:cactus conquest:thick_ivy conquest:lianas conquest:morel_mushrooms conquest:brittlegill_mushrooms conquest:red_mushroom conquest:brown_mushroom conquest:moss_on_the_ground conquest:alpine_bearberry conquest:open_book_and_inkwell conquest:birds_nest conquest:small_birds_nest conquest:dried_tobacco_rack conquest:brown_hanging_rabbit conquest:white_hanging_rabbit conquest:hanging_rabbit conquest:hanging_sausages conquest:hanging_salami conquest:hanging_fish conquest:hanging_sockeye_salmon conquest:hanging_beef_shank conquest:hanging_mentula_fish conquest:dark_green_sphagnum_moss conquest:green_sphagnum_moss conquest:red_sphagnum_moss conquest:yellow_sphagnum_moss conquest:yellow_mounted_pipe conquest:purple_stained_glass_pane conquest:sieve conquest:reindeer_lichen conquest:wolf_lichen conquest:elegant_sunburst_lichen conquest:maritime_sunburst_lichen conquest:big_bread conquest:arrow_bundle conquest:sacks conquest:quill_and_parchment conquest:pile_of_paper_on_the_ground conquest:net_on_the_ground conquest:fish_trap conquest:rope_on_the_ground conquest:rigging_pane conquest:rope_ladder conquest:hanging_rope conquest:noose conquest:climbing_rope conquest:silver_rope conquest:silver_rope_ladder conquest:yellow_and_red_buntings conquest:blue_and_green_buntings conquest:fishing_net conquest:hanging_net conquest:hanging_clownfish conquest:apples conquest:hanging_onions conquest:hanging_carrots conquest:clothes_line conquest:wall_of_rope_pane \ ends_delight:chorus_fruit_pie ends_delight:dragon_leg_with_sauce_block ends_delight:dragon_meat_stew_block ends_delight:steamed_dragon_egg_block ends_delight:grilled_shulker_block \ - farmersdelight:brown_mushroom_colony farmersdelight:red_mushroom_colony farmersdelight:rice_roll_medley_block farmersdelight:shepherds_pie_block farmersdelight:honey_glazed_ham_block farmersdelight:stuffed_pumpkin_block farmersdelight:roast_chicken_block \ + farmersdelight:rope farmersdelight:brown_mushroom_colony farmersdelight:red_mushroom_colony farmersdelight:rice_roll_medley_block farmersdelight:shepherds_pie_block farmersdelight:honey_glazed_ham_block farmersdelight:stuffed_pumpkin_block farmersdelight:roast_chicken_block \ fd:birthday_cake \ flying_stuff:sky_cactus flying_stuff:sky_cactus_branch flying_stuff:sky_cactus_top flying_stuff:pale_celestium_antenna:lit=false flying_stuff:float_grape_plant flying_stuff:small_sky_cactus flying_stuff:tall_glaciated_grass flying_stuff:glaciated_tree_sapling flying_stuff:short_glaciated_grass flying_stuff:glaciated_fern \ herbalbrews:milk_coffee_block herbalbrews:tea_leaf_crate herbalbrews:green_tea_leaf_block herbalbrews:dried_green_tea_leaf_block herbalbrews:dried_out_green_tea_leaf_block herbalbrews:mixed_tea_leaf_block herbalbrews:oolong_tea_leaf_block herbalbrews:black_tea_leaf_block \ @@ -168,12 +171,14 @@ block.81= minecraft:moss_block minecraft:bee_nest minecraft:amethyst_block minec savethehotbar:sack savethehotbar:skeleton_head_grave savethehotbar:zombie_head_grave ## weak sss -block.82=minecraft:white_wool minecraft:orange_wool minecraft:magenta_wool minecraft:light_blue_wool minecraft:yellow_wool minecraft:lime_wool minecraft:pink_wool minecraft:gray_wool minecraft:light_gray_wool minecraft:cyan_wool minecraft:purple_wool minecraft:blue_wool minecraft:brown_wool minecraft:green_wool minecraft:red_wool minecraft:black_wool \ +block.82=minecraft:honeycomb_block minecraft:melon minecraft:pumpkin minecraft:carved_pumpkin minecraft:hay_block red_mushroom_block brown_mushroom_block powder_snow minecraft:snow_block minecraft:moss_block minecraft:bee_nest minecraft:budding_amethyst minecraft:amethyst_block minecraft:white_wool minecraft:orange_wool minecraft:magenta_wool minecraft:light_blue_wool minecraft:yellow_wool minecraft:lime_wool minecraft:pink_wool minecraft:gray_wool minecraft:light_gray_wool minecraft:cyan_wool minecraft:purple_wool minecraft:blue_wool minecraft:brown_wool minecraft:green_wool minecraft:red_wool minecraft:black_wool \ conquest:bread_plate conquest:hanging_sardines conquest:scarecrow_head conquest:hanging_bear_skin conquest:hanging_herbs conquest:hook_with_rope conquest:hanging_pasque_flowers conquest:hanging_dandelions conquest:berber_pillow conquest:red_cushion conquest:blue_cushion conquest:cyan_cushion conquest:celtic_pillow conquest:kazakh_rug conquest:kazakh_rug_cover conquest:kazakh_rug_stairs conquest:kazakh_rug_slab conquest:kazakh_rug_corner_slab conquest:kazakh_rug_quarter_slab conquest:kazakh_rug_eighth_slab conquest:kazakh_rug_vertical_corner conquest:kazakh_rug_vertical_quarter conquest:kazakh_rug_vertical_slab conquest:kazakh_rug_vertical_corner_slab conquest:black_persian_rug conquest:black_persian_rug_cover conquest:black_persian_rug_stairs conquest:black_persian_rug_slab conquest:black_persian_rug_corner_slab conquest:black_persian_rug_quarter_slab conquest:black_persian_rug_eighth_slab conquest:black_persian_rug_vertical_corner conquest:black_persian_rug_vertical_quarter conquest:black_persian_rug_vertical_slab conquest:black_persian_rug_vertical_corner_slab conquest:berber_rug conquest:berber_rug_cover conquest:berber_rug_stairs conquest:berber_rug_slab conquest:berber_rug_corner_slab conquest:berber_rug_quarter_slab conquest:berber_rug_eighth_slab conquest:berber_rug_vertical_corner conquest:berber_rug_vertical_quarter conquest:berber_rug_vertical_slab conquest:berber_rug_vertical_corner_slab conquest:yellow_red_persian_rug conquest:yellow_red_persian_rug_cover conquest:yellow_red_persian_rug_stairs conquest:yellow_red_persian_rug_slab conquest:yellow_red_persian_rug_corner_slab conquest:yellow_red_persian_rug_quarter_slab conquest:yellow_red_persian_rug_eighth_slab conquest:yellow_red_persian_rug_vertical_corner conquest:yellow_red_persian_rug_vertical_quarter conquest:yellow_red_persian_rug_vertical_slab conquest:yellow_red_persian_rug_vertical_corner_slab conquest:red_pazyryk_rug conquest:red_pazyryk_rug_cover conquest:red_pazyryk_rug_stairs conquest:red_pazyryk_rug_slab conquest:red_pazyryk_rug_corner_slab conquest:red_pazyryk_rug_quarter_slab conquest:red_pazyryk_rug_eighth_slab conquest:red_pazyryk_rug_vertical_corner conquest:red_pazyryk_rug_vertical_quarter conquest:red_pazyryk_rug_vertical_slab conquest:red_pazyryk_rug_vertical_corner_slab conquest:nahavand_rug conquest:nahavand_rug_cover conquest:nahavand_rug_stairs conquest:nahavand_rug_slab conquest:nahavand_rug_corner_slab conquest:nahavand_rug_quarter_slab conquest:nahavand_rug_eighth_slab conquest:nahavand_rug_vertical_corner conquest:nahavand_rug_vertical_quarter conquest:nahavand_rug_vertical_slab conquest:nahavand_rug_vertical_corner_slab conquest:red_and_blue_sarouk_rug conquest:red_and_blue_sarouk_rug_cover conquest:red_and_blue_sarouk_rug_stairs conquest:red_and_blue_sarouk_rug_slab conquest:red_and_blue_sarouk_rug_corner_slab conquest:red_and_blue_sarouk_rug_quarter_slab conquest:red_and_blue_sarouk_rug_eighth_slab conquest:red_and_blue_sarouk_rug_vertical_corner conquest:red_and_blue_sarouk_rug_vertical_quarter conquest:red_and_blue_sarouk_rug_vertical_slab conquest:red_and_blue_sarouk_rug_vertical_corner_slab conquest:kilim_rug conquest:kilim_rug_cover conquest:kilim_rug_stairs conquest:kilim_rug_slab conquest:kilim_rug_corner_slab conquest:kilim_rug_quarter_slab conquest:kilim_rug_eighth_slab conquest:kilim_rug_vertical_corner conquest:kilim_rug_vertical_quarter conquest:kilim_rug_vertical_slab conquest:kilim_rug_vertical_corner_slab conquest:celtic_knot_rug conquest:celtic_knot_rug_cover conquest:celtic_knot_rug_stairs conquest:celtic_knot_rug_slab conquest:celtic_knot_rug_corner_slab conquest:celtic_knot_rug_quarter_slab conquest:celtic_knot_rug_eighth_slab conquest:celtic_knot_rug_vertical_corner conquest:celtic_knot_rug_vertical_quarter conquest:celtic_knot_rug_vertical_slab conquest:celtic_knot_rug_vertical_corner_slab conquest:william_morris_rug conquest:william_morris_rug_cover conquest:william_morris_rug_stairs conquest:william_morris_rug_slab conquest:william_morris_rug_corner_slab conquest:william_morris_rug_quarter_slab conquest:william_morris_rug_eighth_slab conquest:william_morris_rug_vertical_corner conquest:william_morris_rug_vertical_quarter conquest:william_morris_rug_vertical_slab conquest:william_morris_rug_vertical_corner_slab conquest:shirishabad_rug conquest:shirishabad_rug_cover conquest:shirishabad_rug_stairs conquest:shirishabad_rug_slab conquest:shirishabad_rug_corner_slab conquest:shirishabad_rug_quarter_slab conquest:shirishabad_rug_eighth_slab conquest:shirishabad_rug_vertical_corner conquest:shirishabad_rug_vertical_quarter conquest:shirishabad_rug_vertical_slab conquest:shirishabad_rug_vertical_corner_slab conquest:baotuo_rug conquest:baotuo_rug_cover conquest:baotuo_rug_stairs conquest:baotuo_rug_slab conquest:baotuo_rug_corner_slab conquest:baotuo_rug_quarter_slab conquest:baotuo_rug_eighth_slab conquest:baotuo_rug_vertical_corner conquest:baotuo_rug_vertical_quarter conquest:baotuo_rug_vertical_slab conquest:baotuo_rug_vertical_corner_slab conquest:blue_nain_rug conquest:blue_nain_rug_cover conquest:blue_nain_rug_stairs conquest:blue_nain_rug_slab conquest:blue_nain_rug_corner_slab conquest:blue_nain_rug_quarter_slab conquest:blue_nain_rug_eighth_slab conquest:blue_nain_rug_vertical_corner conquest:blue_nain_rug_vertical_quarter conquest:blue_nain_rug_vertical_slab conquest:blue_nain_rug_vertical_corner_slab conquest:kashmiri_carpet conquest:kashmiri_carpet_cover conquest:kashmiri_carpet_stairs conquest:kashmiri_carpet_slab conquest:kashmiri_carpet_corner_slab conquest:kashmiri_carpet_quarter_slab conquest:kashmiri_carpet_eighth_slab conquest:kashmiri_carpet_vertical_corner conquest:kashmiri_carpet_vertical_quarter conquest:kashmiri_carpet_vertical_slab conquest:kashmiri_carpet_vertical_corner_slab conquest:brown_oriental_carpet conquest:brown_oriental_carpet_cover conquest:brown_oriental_carpet_stairs conquest:brown_oriental_carpet_slab conquest:brown_oriental_carpet_corner_slab conquest:brown_oriental_carpet_quarter_slab conquest:brown_oriental_carpet_eighth_slab conquest:brown_oriental_carpet_vertical_corner conquest:brown_oriental_carpet_vertical_quarter conquest:brown_oriental_carpet_vertical_slab conquest:brown_oriental_carpet_vertical_corner_slab conquest:red_oriental_carpet conquest:red_oriental_carpet_cover conquest:red_oriental_carpet_stairs conquest:red_oriental_carpet_slab conquest:red_oriental_carpet_corner_slab conquest:red_oriental_carpet_quarter_slab conquest:red_oriental_carpet_eighth_slab conquest:red_oriental_carpet_vertical_corner conquest:red_oriental_carpet_vertical_quarter conquest:red_oriental_carpet_vertical_slab conquest:red_oriental_carpet_vertical_corner_slab conquest:burlap conquest:burlap_cover conquest:burlap_stairs conquest:burlap_slab conquest:burlap_corner_slab conquest:burlap_quarter_slab conquest:burlap_eighth_slab conquest:burlap_vertical_corner conquest:burlap_vertical_quarter conquest:burlap_vertical_slab conquest:old_red_6_way_flange conquest:burlap_vertical_corner_slab conquest:brown_patterned_silk conquest:brown_patterned_silk_cover conquest:brown_patterned_silk_stairs conquest:brown_patterned_silk_slab conquest:brown_patterned_silk_corner_slab conquest:brown_patterned_silk_quarter_slab conquest:brown_patterned_silk_eighth_slab conquest:brown_patterned_silk_vertical_corner conquest:brown_patterned_silk_vertical_quarter conquest:brown_patterned_silk_vertical_slab conquest:brown_patterned_silk_vertical_corner_slab conquest:white_silk conquest:white_silk_cover conquest:white_silk_stairs conquest:white_silk_slab conquest:white_silk_corner_slab conquest:white_silk_quarter_slab conquest:white_silk_eighth_slab conquest:white_silk_vertical_corner conquest:white_silk_vertical_quarter conquest:white_silk_vertical_slab conquest:white_silk_vertical_corner_slab conquest:light_gray_silk conquest:light_gray_silk_cover conquest:light_gray_silk_stairs conquest:light_gray_silk_slab conquest:light_gray_silk_corner_slab conquest:light_gray_silk_quarter_slab conquest:light_gray_silk_eighth_slab conquest:light_gray_silk_vertical_corner conquest:light_gray_silk_vertical_quarter conquest:light_gray_silk_vertical_slab conquest:light_gray_silk_vertical_corner_slab conquest:gray_silk conquest:gray_silk_cover conquest:gray_silk_stairs conquest:gray_silk_slab conquest:gray_silk_corner_slab conquest:gray_silk_quarter_slab conquest:gray_silk_eighth_slab conquest:gray_silk_vertical_corner conquest:gray_silk_vertical_quarter conquest:gray_silk_vertical_slab conquest:gray_silk_vertical_corner_slab conquest:black_floral_patterned_silk conquest:black_floral_patterned_silk_cover conquest:black_floral_patterned_silk_stairs conquest:black_floral_patterned_silk_slab conquest:black_floral_patterned_silk_corner_slab conquest:black_floral_patterned_silk_quarter_slab conquest:black_floral_patterned_silk_eighth_slab conquest:black_floral_patterned_silk_vertical_corner conquest:black_floral_patterned_silk_vertical_quarter conquest:black_floral_patterned_silk_vertical_slab conquest:black_floral_patterned_silk_vertical_corner_slab conquest:black_starry_patterned_silk conquest:black_starry_patterned_silk_cover conquest:black_starry_patterned_silk_stairs conquest:black_starry_patterned_silk_slab conquest:black_starry_patterned_silk_corner_slab conquest:black_starry_patterned_silk_quarter_slab conquest:black_starry_patterned_silk_eighth_slab conquest:black_starry_patterned_silk_vertical_corner conquest:black_starry_patterned_silk_vertical_quarter conquest:black_starry_patterned_silk_vertical_slab conquest:black_starry_patterned_silk_vertical_corner_slab conquest:purple_silk conquest:purple_silk_cover conquest:purple_silk_stairs conquest:purple_silk_slab conquest:purple_silk_corner_slab conquest:purple_silk_quarter_slab conquest:purple_silk_eighth_slab conquest:purple_silk_vertical_corner conquest:purple_silk_vertical_quarter conquest:purple_silk_vertical_slab conquest:purple_silk_vertical_corner_slab conquest:pink_silk conquest:pink_silk_cover conquest:pink_silk_stairs conquest:pink_silk_slab conquest:pink_silk_corner_slab conquest:pink_silk_quarter_slab conquest:pink_silk_eighth_slab conquest:pink_silk_vertical_corner conquest:pink_silk_vertical_quarter conquest:pink_silk_vertical_slab conquest:pink_silk_vertical_corner_slab conquest:red_silk conquest:red_silk_cover conquest:red_silk_stairs conquest:red_silk_slab conquest:red_silk_corner_slab conquest:red_silk_quarter_slab conquest:red_silk_eighth_slab conquest:red_silk_vertical_corner conquest:red_silk_vertical_quarter conquest:red_silk_vertical_slab conquest:red_silk_vertical_corner_slab conquest:red_patterned_silk conquest:red_patterned_silk_cover conquest:red_patterned_silk_stairs conquest:red_patterned_silk_slab conquest:red_patterned_silk_corner_slab conquest:red_patterned_silk_quarter_slab conquest:red_patterned_silk_eighth_slab conquest:red_patterned_silk_vertical_corner conquest:red_patterned_silk_vertical_quarter conquest:red_patterned_silk_vertical_slab conquest:red_patterned_silk_vertical_corner_slab conquest:orange_silk conquest:orange_silk_cover conquest:orange_silk_stairs conquest:orange_silk_slab conquest:orange_silk_corner_slab conquest:orange_silk_quarter_slab conquest:orange_silk_eighth_slab conquest:orange_silk_vertical_corner conquest:orange_silk_vertical_quarter conquest:orange_silk_vertical_slab conquest:orange_silk_vertical_corner_slab conquest:yellow_silk conquest:yellow_silk_cover conquest:yellow_silk_stairs conquest:yellow_silk_slab conquest:yellow_silk_corner_slab conquest:yellow_silk_quarter_slab conquest:yellow_silk_eighth_slab conquest:yellow_silk_vertical_corner conquest:yellow_silk_vertical_quarter conquest:yellow_silk_vertical_slab conquest:yellow_silk_vertical_corner_slab conquest:gold_silk conquest:gold_silk_cover conquest:gold_silk_stairs conquest:gold_silk_slab conquest:gold_silk_corner_slab conquest:gold_silk_quarter_slab conquest:gold_silk_eighth_slab conquest:gold_silk_vertical_corner conquest:gold_silk_vertical_quarter conquest:gold_silk_vertical_slab conquest:gold_silk_vertical_corner_slab conquest:gold_patterned_silk conquest:gold_patterned_silk_cover conquest:gold_patterned_silk_stairs conquest:gold_patterned_silk_slab conquest:gold_patterned_silk_corner_slab conquest:gold_patterned_silk_quarter_slab conquest:gold_patterned_silk_eighth_slab conquest:gold_patterned_silk_vertical_corner conquest:gold_patterned_silk_vertical_quarter conquest:gold_patterned_silk_vertical_slab conquest:gold_patterned_silk_vertical_corner_slab conquest:green_patterned_silk conquest:green_patterned_silk_cover conquest:green_patterned_silk_stairs conquest:green_patterned_silk_slab conquest:green_patterned_silk_corner_slab conquest:green_patterned_silk_quarter_slab conquest:green_patterned_silk_eighth_slab conquest:green_patterned_silk_vertical_corner conquest:green_patterned_silk_vertical_quarter conquest:green_patterned_silk_vertical_slab conquest:green_patterned_silk_vertical_corner_slab conquest:cyan_patterned_silk conquest:cyan_patterned_silk_cover conquest:cyan_patterned_silk_stairs conquest:cyan_patterned_silk_slab conquest:cyan_patterned_silk_corner_slab conquest:cyan_patterned_silk_quarter_slab conquest:cyan_patterned_silk_eighth_slab conquest:cyan_patterned_silk_vertical_corner conquest:cyan_patterned_silk_vertical_quarter conquest:cyan_patterned_silk_vertical_slab conquest:cyan_patterned_silk_vertical_corner_slab conquest:blue_floral_patterned_silk conquest:blue_floral_patterned_silk_cover conquest:blue_floral_patterned_silk_stairs conquest:blue_floral_patterned_silk_slab conquest:blue_floral_patterned_silk_corner_slab conquest:blue_floral_patterned_silk_quarter_slab conquest:blue_floral_patterned_silk_eighth_slab conquest:blue_floral_patterned_silk_vertical_corner conquest:blue_floral_patterned_silk_vertical_quarter conquest:blue_floral_patterned_silk_vertical_slab conquest:blue_floral_patterned_silk_vertical_corner_slab conquest:blue_starry_patterned_silk conquest:blue_starry_patterned_silk_cover conquest:blue_starry_patterned_silk_stairs conquest:blue_starry_patterned_silk_slab conquest:blue_starry_patterned_silk_corner_slab conquest:blue_starry_patterned_silk_quarter_slab conquest:blue_starry_patterned_silk_eighth_slab conquest:blue_starry_patterned_silk_vertical_corner conquest:blue_starry_patterned_silk_vertical_quarter conquest:blue_starry_patterned_silk_vertical_slab conquest:blue_starry_patterned_silk_vertical_corner_slab conquest:brown_carpet conquest:brown_carpet_stairs conquest:brown_carpet_slab conquest:brown_carpet_corner_slab conquest:brown_carpet_quarter_slab conquest:brown_carpet_eighth_slab conquest:brown_carpet_vertical_corner conquest:brown_carpet_vertical_quarter conquest:brown_carpet_vertical_slab conquest:brown_carpet_vertical_corner_slab conquest:white_carpet conquest:white_carpet_stairs conquest:white_carpet_slab conquest:white_carpet_corner_slab conquest:white_carpet_quarter_slab conquest:white_carpet_eighth_slab conquest:white_carpet_vertical_corner conquest:white_carpet_vertical_quarter conquest:white_carpet_vertical_slab conquest:white_carpet_vertical_corner_slab conquest:light_gray_carpet conquest:light_gray_carpet_stairs conquest:light_gray_carpet_slab conquest:light_gray_carpet_corner_slab conquest:light_gray_carpet_quarter_slab conquest:light_gray_carpet_eighth_slab conquest:light_gray_carpet_vertical_corner conquest:light_gray_carpet_vertical_quarter conquest:light_gray_carpet_vertical_slab conquest:light_gray_carpet_vertical_corner_slab conquest:gray_carpet conquest:gray_carpet_stairs conquest:gray_carpet_slab conquest:gray_carpet_corner_slab conquest:gray_carpet_quarter_slab conquest:gray_carpet_eighth_slab conquest:gray_carpet_vertical_corner conquest:gray_carpet_vertical_quarter conquest:gray_carpet_vertical_slab conquest:gray_carpet_vertical_corner_slab conquest:black_carpet conquest:black_carpet_stairs conquest:black_carpet_slab conquest:black_carpet_corner_slab conquest:black_carpet_quarter_slab conquest:black_carpet_eighth_slab conquest:black_carpet_vertical_corner conquest:black_carpet_vertical_quarter conquest:black_carpet_vertical_slab conquest:black_carpet_vertical_corner_slab conquest:purple_carpet conquest:purple_carpet_stairs conquest:purple_carpet_slab conquest:purple_carpet_corner_slab conquest:purple_carpet_quarter_slab conquest:purple_carpet_eighth_slab conquest:purple_carpet_vertical_corner conquest:purple_carpet_vertical_quarter conquest:purple_carpet_vertical_slab conquest:purple_carpet_vertical_corner_slab conquest:pink_carpet conquest:pink_carpet_stairs conquest:pink_carpet_slab conquest:pink_carpet_corner_slab conquest:pink_carpet_quarter_slab conquest:pink_carpet_eighth_slab conquest:pink_carpet_vertical_corner conquest:pink_carpet_vertical_quarter conquest:pink_carpet_vertical_slab conquest:pink_carpet_vertical_corner_slab conquest:red_carpet conquest:red_carpet_stairs conquest:red_carpet_slab conquest:red_carpet_corner_slab conquest:red_carpet_quarter_slab conquest:red_carpet_eighth_slab conquest:red_carpet_vertical_corner conquest:red_carpet_vertical_quarter conquest:red_carpet_vertical_slab conquest:red_carpet_vertical_corner_slab conquest:magenta_carpet conquest:magenta_carpet_stairs conquest:magenta_carpet_slab conquest:magenta_carpet_corner_slab conquest:magenta_carpet_quarter_slab conquest:magenta_carpet_eighth_slab conquest:magenta_carpet_vertical_corner conquest:magenta_carpet_vertical_quarter conquest:magenta_carpet_vertical_slab conquest:magenta_carpet_vertical_corner_slab conquest:orange_carpet conquest:orange_carpet_stairs conquest:orange_carpet_slab conquest:orange_carpet_corner_slab conquest:orange_carpet_quarter_slab conquest:orange_carpet_eighth_slab conquest:orange_carpet_vertical_corner conquest:orange_carpet_vertical_quarter conquest:orange_carpet_vertical_slab conquest:orange_carpet_vertical_corner_slab conquest:yellow_carpet conquest:yellow_carpet_stairs conquest:yellow_carpet_slab conquest:yellow_carpet_corner_slab conquest:yellow_carpet_quarter_slab conquest:yellow_carpet_eighth_slab conquest:yellow_carpet_vertical_corner conquest:yellow_carpet_vertical_quarter conquest:yellow_carpet_vertical_slab conquest:yellow_carpet_vertical_corner_slab conquest:lime_carpet conquest:lime_carpet_stairs conquest:lime_carpet_slab conquest:lime_carpet_corner_slab conquest:lime_carpet_quarter_slab conquest:lime_carpet_eighth_slab conquest:lime_carpet_vertical_corner conquest:lime_carpet_vertical_quarter conquest:lime_carpet_vertical_slab conquest:lime_carpet_vertical_corner_slab conquest:green_carpet conquest:green_carpet_stairs conquest:green_carpet_slab conquest:green_carpet_corner_slab conquest:green_carpet_quarter_slab conquest:green_carpet_eighth_slab conquest:green_carpet_vertical_corner conquest:green_carpet_vertical_quarter conquest:green_carpet_vertical_slab conquest:green_carpet_vertical_corner_slab conquest:cyan_carpet conquest:cyan_carpet_stairs conquest:cyan_carpet_slab conquest:cyan_carpet_corner_slab conquest:cyan_carpet_quarter_slab conquest:cyan_carpet_eighth_slab conquest:cyan_carpet_vertical_corner conquest:cyan_carpet_vertical_quarter conquest:cyan_carpet_vertical_slab conquest:cyan_carpet_vertical_corner_slab conquest:light_blue_carpet conquest:light_blue_carpet_stairs conquest:light_blue_carpet_slab conquest:light_blue_carpet_corner_slab conquest:light_blue_carpet_quarter_slab conquest:light_blue_carpet_eighth_slab conquest:light_blue_carpet_vertical_corner conquest:light_blue_carpet_vertical_quarter conquest:light_blue_carpet_vertical_slab conquest:light_blue_carpet_vertical_corner_slab conquest:blue_carpet conquest:blue_carpet_stairs conquest:blue_carpet_slab conquest:blue_carpet_corner_slab conquest:blue_carpet_quarter_slab conquest:blue_carpet_eighth_slab conquest:blue_carpet_vertical_corner conquest:blue_carpet_vertical_quarter conquest:blue_carpet_vertical_slab conquest:blue_carpet_vertical_corner_slab conquest:brown_wool_stairs conquest:brown_wool_slab conquest:brown_wool_corner_slab conquest:brown_wool_quarter_slab conquest:brown_wool_eighth_slab conquest:brown_wool_vertical_corner conquest:brown_wool_vertical_quarter conquest:brown_wool_vertical_slab conquest:brown_wool_vertical_corner_slab conquest:white_wool_stairs conquest:white_wool_slab conquest:white_wool_corner_slab conquest:white_wool_quarter_slab conquest:white_wool_eighth_slab conquest:white_wool_vertical_corner conquest:white_wool_vertical_quarter conquest:white_wool_vertical_slab conquest:white_wool_vertical_corner_slab conquest:light_gray_wool_stairs conquest:light_gray_wool_slab conquest:light_gray_wool_corner_slab conquest:light_gray_wool_quarter_slab conquest:light_gray_wool_eighth_slab conquest:light_gray_wool_vertical_corner conquest:light_gray_wool_vertical_quarter conquest:light_gray_wool_vertical_slab conquest:light_gray_wool_vertical_corner_slab conquest:gray_wool_stairs conquest:gray_wool_slab conquest:gray_wool_corner_slab conquest:gray_wool_quarter_slab conquest:gray_wool_eighth_slab conquest:gray_wool_vertical_corner conquest:gray_wool_vertical_quarter conquest:gray_wool_vertical_slab conquest:gray_wool_vertical_corner_slab conquest:black_wool_stairs conquest:black_wool_slab conquest:black_wool_corner_slab conquest:black_wool_quarter_slab conquest:black_wool_eighth_slab conquest:black_wool_vertical_corner conquest:black_wool_vertical_quarter conquest:black_wool_vertical_slab conquest:black_wool_vertical_corner_slab conquest:purple_wool_stairs conquest:purple_wool_slab conquest:purple_wool_corner_slab conquest:purple_wool_quarter_slab conquest:purple_wool_eighth_slab conquest:purple_wool_vertical_corner conquest:purple_wool_vertical_quarter conquest:purple_wool_vertical_slab conquest:purple_wool_vertical_corner_slab conquest:pink_wool_stairs conquest:pink_wool_slab conquest:pink_wool_corner_slab conquest:pink_wool_quarter_slab conquest:pink_wool_eighth_slab conquest:pink_wool_vertical_corner conquest:pink_wool_vertical_quarter conquest:pink_wool_vertical_slab conquest:pink_wool_vertical_corner_slab conquest:red_wool_stairs conquest:red_wool_slab conquest:red_wool_corner_slab conquest:red_wool_quarter_slab conquest:red_wool_eighth_slab conquest:red_wool_vertical_corner conquest:red_wool_vertical_quarter conquest:red_wool_vertical_slab conquest:red_wool_vertical_corner_slab conquest:magenta_wool_stairs conquest:magenta_wool_slab conquest:magenta_wool_corner_slab conquest:magenta_wool_quarter_slab conquest:magenta_wool_eighth_slab conquest:magenta_wool_vertical_corner conquest:magenta_wool_vertical_quarter conquest:magenta_wool_vertical_slab conquest:magenta_wool_vertical_corner_slab conquest:orange_wool_stairs conquest:orange_wool_slab conquest:orange_wool_corner_slab conquest:orange_wool_quarter_slab conquest:orange_wool_eighth_slab conquest:orange_wool_vertical_corner conquest:orange_wool_vertical_quarter conquest:orange_wool_vertical_slab conquest:orange_wool_vertical_corner_slab conquest:yellow_wool_stairs conquest:yellow_wool_slab conquest:yellow_wool_corner_slab conquest:yellow_wool_quarter_slab conquest:yellow_wool_eighth_slab conquest:yellow_wool_vertical_corner conquest:yellow_wool_vertical_quarter conquest:yellow_wool_vertical_slab conquest:yellow_wool_vertical_corner_slab conquest:lime_wool_stairs conquest:lime_wool_slab conquest:lime_wool_corner_slab conquest:lime_wool_quarter_slab conquest:lime_wool_eighth_slab conquest:lime_wool_vertical_corner conquest:lime_wool_vertical_quarter conquest:lime_wool_vertical_slab conquest:lime_wool_vertical_corner_slab conquest:green_wool_stairs conquest:green_wool_slab conquest:green_wool_corner_slab conquest:green_wool_quarter_slab conquest:green_wool_eighth_slab conquest:green_wool_vertical_corner conquest:green_wool_vertical_quarter conquest:green_wool_vertical_slab conquest:green_wool_vertical_corner_slab conquest:cyan_wool_stairs conquest:cyan_wool_slab conquest:cyan_wool_corner_slab conquest:cyan_wool_quarter_slab conquest:cyan_wool_eighth_slab conquest:cyan_wool_vertical_corner conquest:cyan_wool_vertical_quarter conquest:cyan_wool_vertical_slab conquest:cyan_wool_vertical_corner_slab conquest:light_blue_wool_stairs conquest:light_blue_wool_slab conquest:light_blue_wool_corner_slab conquest:light_blue_wool_quarter_slab conquest:light_blue_wool_eighth_slab conquest:light_blue_wool_vertical_corner conquest:light_blue_wool_vertical_quarter conquest:light_blue_wool_vertical_slab conquest:light_blue_wool_vertical_corner_slab conquest:blue_wool_stairs conquest:blue_wool_slab conquest:blue_wool_corner_slab conquest:blue_wool_quarter_slab conquest:blue_wool_eighth_slab conquest:blue_wool_vertical_corner conquest:blue_wool_vertical_quarter conquest:blue_wool_vertical_slab conquest:blue_wool_vertical_corner_slab conquest:brown_canvas conquest:brown_canvas_cover conquest:brown_canvas_stairs conquest:brown_canvas_slab conquest:brown_canvas_corner_slab conquest:brown_canvas_quarter_slab conquest:brown_canvas_eighth_slab conquest:brown_canvas_vertical_corner conquest:brown_canvas_vertical_quarter conquest:brown_canvas_vertical_slab conquest:brown_canvas_vertical_corner_slab conquest:white_canvas conquest:white_canvas_cover conquest:white_canvas_stairs conquest:white_canvas_slab conquest:white_canvas_corner_slab conquest:white_canvas_quarter_slab conquest:white_canvas_eighth_slab conquest:white_canvas_vertical_corner conquest:white_canvas_vertical_quarter conquest:white_canvas_vertical_slab conquest:white_canvas_vertical_corner_slab conquest:light_gray_canvas conquest:light_gray_canvas_cover conquest:light_gray_canvas_stairs conquest:light_gray_canvas_slab conquest:light_gray_canvas_corner_slab conquest:light_gray_canvas_quarter_slab conquest:light_gray_canvas_eighth_slab conquest:light_gray_canvas_vertical_corner conquest:light_gray_canvas_vertical_quarter conquest:light_gray_canvas_vertical_slab conquest:light_gray_canvas_vertical_corner_slab conquest:gray_canvas conquest:gray_canvas_cover conquest:gray_canvas_stairs conquest:gray_canvas_slab conquest:gray_canvas_corner_slab conquest:gray_canvas_quarter_slab conquest:gray_canvas_eighth_slab conquest:gray_canvas_vertical_corner conquest:gray_canvas_vertical_quarter conquest:gray_canvas_vertical_slab conquest:gray_canvas_vertical_corner_slab conquest:black_canvas conquest:black_canvas_cover conquest:black_canvas_stairs conquest:black_canvas_slab conquest:black_canvas_corner_slab conquest:black_canvas_quarter_slab conquest:black_canvas_eighth_slab conquest:black_canvas_vertical_corner conquest:black_canvas_vertical_quarter conquest:black_canvas_vertical_slab conquest:black_canvas_vertical_corner_slab conquest:purple_canvas conquest:purple_canvas_cover conquest:purple_canvas_stairs conquest:purple_canvas_slab conquest:purple_canvas_corner_slab conquest:purple_canvas_quarter_slab conquest:purple_canvas_eighth_slab conquest:purple_canvas_vertical_corner conquest:purple_canvas_vertical_quarter conquest:purple_canvas_vertical_slab conquest:purple_canvas_vertical_corner_slab conquest:pink_canvas conquest:pink_canvas_cover conquest:pink_canvas_stairs conquest:pink_canvas_slab conquest:pink_canvas_corner_slab conquest:pink_canvas_quarter_slab conquest:pink_canvas_eighth_slab conquest:pink_canvas_vertical_corner conquest:pink_canvas_vertical_quarter conquest:pink_canvas_vertical_slab conquest:pink_canvas_vertical_corner_slab conquest:red_canvas conquest:red_canvas_cover conquest:red_canvas_stairs conquest:red_canvas_slab conquest:red_canvas_corner_slab conquest:red_canvas_quarter_slab conquest:red_canvas_eighth_slab conquest:red_canvas_vertical_corner conquest:red_canvas_vertical_quarter conquest:red_canvas_vertical_slab conquest:red_canvas_vertical_corner_slab conquest:magenta_canvas conquest:magenta_canvas_cover conquest:magenta_canvas_stairs conquest:magenta_canvas_slab conquest:magenta_canvas_corner_slab conquest:magenta_canvas_quarter_slab conquest:magenta_canvas_eighth_slab conquest:magenta_canvas_vertical_corner conquest:magenta_canvas_vertical_quarter conquest:magenta_canvas_vertical_slab conquest:magenta_canvas_vertical_corner_slab conquest:orange_canvas conquest:orange_canvas_cover conquest:orange_canvas_stairs conquest:orange_canvas_slab conquest:orange_canvas_corner_slab conquest:orange_canvas_quarter_slab conquest:orange_canvas_eighth_slab conquest:orange_canvas_vertical_corner conquest:orange_canvas_vertical_quarter conquest:orange_canvas_vertical_slab conquest:orange_canvas_vertical_corner_slab conquest:yellow_canvas conquest:yellow_canvas_cover conquest:yellow_canvas_stairs conquest:yellow_canvas_slab conquest:yellow_canvas_corner_slab conquest:yellow_canvas_quarter_slab conquest:yellow_canvas_eighth_slab conquest:yellow_canvas_vertical_corner conquest:yellow_canvas_vertical_quarter conquest:yellow_canvas_vertical_slab conquest:yellow_canvas_vertical_corner_slab conquest:lime_canvas conquest:lime_canvas_cover conquest:lime_canvas_stairs conquest:lime_canvas_slab conquest:lime_canvas_corner_slab conquest:lime_canvas_quarter_slab conquest:lime_canvas_eighth_slab conquest:lime_canvas_vertical_corner conquest:lime_canvas_vertical_quarter conquest:lime_canvas_vertical_slab conquest:lime_canvas_vertical_corner_slab conquest:green_canvas conquest:green_canvas_cover conquest:green_canvas_stairs conquest:green_canvas_slab conquest:green_canvas_corner_slab conquest:green_canvas_quarter_slab conquest:green_canvas_eighth_slab conquest:green_canvas_vertical_corner conquest:green_canvas_vertical_quarter conquest:green_canvas_vertical_slab conquest:green_canvas_vertical_corner_slab conquest:cyan_canvas conquest:cyan_canvas_cover conquest:cyan_canvas_stairs conquest:cyan_canvas_slab conquest:cyan_canvas_corner_slab conquest:cyan_canvas_quarter_slab conquest:cyan_canvas_eighth_slab conquest:cyan_canvas_vertical_corner conquest:cyan_canvas_vertical_quarter conquest:cyan_canvas_vertical_slab conquest:cyan_canvas_vertical_corner_slab conquest:light_blue_canvas conquest:light_blue_canvas_cover conquest:light_blue_canvas_stairs conquest:light_blue_canvas_slab conquest:light_blue_canvas_corner_slab conquest:light_blue_canvas_quarter_slab conquest:light_blue_canvas_eighth_slab conquest:light_blue_canvas_vertical_corner conquest:light_blue_canvas_vertical_quarter conquest:light_blue_canvas_vertical_slab conquest:light_blue_canvas_vertical_corner_slab conquest:blue_canvas conquest:blue_canvas_cover conquest:blue_canvas_stairs conquest:blue_canvas_slab conquest:blue_canvas_corner_slab conquest:blue_canvas_quarter_slab conquest:blue_canvas_eighth_slab conquest:blue_canvas_vertical_corner conquest:blue_canvas_vertical_quarter conquest:blue_canvas_vertical_slab conquest:blue_canvas_vertical_corner_slab \ meadow:warped_wool meadow:flecked_wool meadow:highland_wool meadow:inky_wool meadow:patched_wool meadow:rocky_wool meadow:umbra_wool \ - westerosblocks:clothesline westerosblocks:smoke westerosblocks:brown_mushroom_1 westerosblocks:brown_mushroom_2 westerosblocks:brown_mushroom_3 westerosblocks:brown_mushroom_4 westerosblocks:brown_mushroom_5 westerosblocks:brown_mushroom_6 westerosblocks:brown_mushroom_7 westerosblocks:brown_mushroom_8 westerosblocks:brown_mushroom_9 westerosblocks:brown_mushroom_10 westerosblocks:brown_mushroom_11 westerosblocks:brown_mushroom_12 westerosblocks:brown_mushroom_13 westerosblocks:red_mushroom_1 westerosblocks:red_mushroom_2 westerosblocks:red_mushroom_3 westerosblocks:red_mushroom_4 westerosblocks:red_mushroom_5 westerosblocks:red_mushroom_6 westerosblocks:red_mushroom_7 westerosblocks:red_mushroom_8 westerosblocks:red_mushroom_9 westerosblocks:white_wool_slab westerosblocks:orange_wool_slab westerosblocks:light_brown_wool_slab westerosblocks:light_blue_wool_slab westerosblocks:yellow_wool_slab westerosblocks:dirty_white_wool_slab westerosblocks:pink_wool_slab westerosblocks:grey_wool_slab westerosblocks:light_grey_wool_slab westerosblocks:cyan_wool_slab westerosblocks:purple_wool_slab westerosblocks:blue_wool_slab westerosblocks:brown_wool_slab westerosblocks:green_wool_slab westerosblocks:red_wool_slab westerosblocks:black_wool_slab westerosblocks:white_wool_carpet westerosblocks:orange_wool_carpet westerosblocks:light_brown_wool_carpet westerosblocks:light_blue_wool_carpet westerosblocks:yellow_wool_carpet westerosblocks:dirty_white_wool_carpet westerosblocks:pink_wool_carpet westerosblocks:grey_wool_carpet westerosblocks:light_grey_wool_carpet westerosblocks:cyan_wool_carpet westerosblocks:purple_wool_carpet westerosblocks:blue_wool_carpet westerosblocks:brown_wool_carpet westerosblocks:green_wool_carpet westerosblocks:red_wool_carpet westerosblocks:black_wool_carpet westerosblocks:thatch_light_fur_carpet westerosblocks:thatch_dark_fur_carpet + westerosblocks:clothesline westerosblocks:smoke westerosblocks:brown_mushroom_1 westerosblocks:brown_mushroom_2 westerosblocks:brown_mushroom_3 westerosblocks:brown_mushroom_4 westerosblocks:brown_mushroom_5 westerosblocks:brown_mushroom_6 westerosblocks:brown_mushroom_7 westerosblocks:brown_mushroom_8 westerosblocks:brown_mushroom_9 westerosblocks:brown_mushroom_10 westerosblocks:brown_mushroom_11 westerosblocks:brown_mushroom_12 westerosblocks:brown_mushroom_13 westerosblocks:red_mushroom_1 westerosblocks:red_mushroom_2 westerosblocks:red_mushroom_3 westerosblocks:red_mushroom_4 westerosblocks:red_mushroom_5 westerosblocks:red_mushroom_6 westerosblocks:red_mushroom_7 westerosblocks:red_mushroom_8 westerosblocks:red_mushroom_9 westerosblocks:white_wool_slab westerosblocks:orange_wool_slab westerosblocks:light_brown_wool_slab westerosblocks:light_blue_wool_slab westerosblocks:yellow_wool_slab westerosblocks:dirty_white_wool_slab westerosblocks:pink_wool_slab westerosblocks:grey_wool_slab westerosblocks:light_grey_wool_slab westerosblocks:cyan_wool_slab westerosblocks:purple_wool_slab westerosblocks:blue_wool_slab westerosblocks:brown_wool_slab westerosblocks:green_wool_slab westerosblocks:red_wool_slab westerosblocks:black_wool_slab westerosblocks:white_wool_carpet westerosblocks:orange_wool_carpet westerosblocks:light_brown_wool_carpet westerosblocks:light_blue_wool_carpet westerosblocks:yellow_wool_carpet westerosblocks:dirty_white_wool_carpet westerosblocks:pink_wool_carpet westerosblocks:grey_wool_carpet westerosblocks:light_grey_wool_carpet westerosblocks:cyan_wool_carpet westerosblocks:purple_wool_carpet westerosblocks:blue_wool_carpet westerosblocks:brown_wool_carpet westerosblocks:green_wool_carpet westerosblocks:red_wool_carpet westerosblocks:black_wool_carpet westerosblocks:thatch_light_fur_carpet westerosblocks:thatch_dark_fur_carpet \ + farmersdelight:rice_bale \ + biomesoplenty:cyan_flower_petal_block biomesoplenty:yellow_flower_petal_block biomesoplenty:green_flower_petal_block biomesoplenty:lime_flower_petal_block biomesoplenty:orange_flower_petal_block biomesoplenty:red_flower_petal_block biomesoplenty:black_flower_petal_block biomesoplenty:pink_flower_petal_block biomesoplenty:white_flower_petal_block biomesoplenty:purple_flower_petal_block biomesoplenty:magenta_flower_petal_block biomesoplenty:light_gray_flower_petal_block biomesoplenty:gray_flower_petal_block biomesoplenty:brown_flower_petal_block biomesoplenty:light_blue_flower_petal_block biomesoplenty:blue_flower_petal_block biomesoplenty:toadstool_block - ## weak sss + ## weak sss blockentities block.83=minecraft:white_wall_banner minecraft:orange_wall_banner minecraft:magenta_wall_banner minecraft:light_blue_wall_banner minecraft:yellow_wall_banner minecraft:lime_wall_banner minecraft:pink_wall_banner minecraft:gray_wall_banner minecraft:light_gray_wall_banner minecraft:cyan_wall_banner minecraft:purple_wall_banner minecraft:blue_wall_banner minecraft:brown_wall_banner minecraft:green_wall_banner minecraft:red_wall_banner minecraft:black_wall_banner minecraft:white_banner minecraft:orange_banner minecraft:magenta_banner minecraft:light_blue_banner minecraft:yellow_banner minecraft:lime_banner minecraft:pink_banner minecraft:gray_banner minecraft:light_gray_banner minecraft:cyan_banner minecraft:purple_banner minecraft:blue_banner minecraft:brown_banner minecraft:green_banner minecraft:red_banner minecraft:black_banner \ westerosblocks:renly_banner westerosblocks:redwyne_banner westerosblocks:grafton_banner westerosblocks:grey_banner westerosblocks:red_banner westerosblocks:black_banner westerosblocks:the_faith_of_the_seven_banner westerosblocks:cream_banner westerosblocks:blue_banner westerosblocks:brown_banner westerosblocks:cyan_banner westerosblocks:green_banner westerosblocks:orange_banner westerosblocks:pink_banner westerosblocks:purple_banner westerosblocks:lord_of_light_rhllor_banner westerosblocks:yellow_banner westerosblocks:arryn_banner westerosblocks:baratheon_banner westerosblocks:bolton_banner westerosblocks:dayne_banner westerosblocks:frey_banner westerosblocks:greyjoy_banner westerosblocks:hightower_banner westerosblocks:lannister_banner westerosblocks:manderly_banner westerosblocks:martell_banner westerosblocks:stannis_banner westerosblocks:stark_banner westerosblocks:targaryen_banner westerosblocks:tarly_banner westerosblocks:tully_banner westerosblocks:tyrell_banner diff --git a/shaders/dimensions/DH_translucent.fsh b/shaders/dimensions/DH_translucent.fsh index 40e5672..754b7d2 100644 --- a/shaders/dimensions/DH_translucent.fsh +++ b/shaders/dimensions/DH_translucent.fsh @@ -26,6 +26,7 @@ uniform sampler2D dhDepthTex1; uniform sampler2D depthtex0; uniform sampler2D depthtex1; +uniform sampler2D colortex11; uniform sampler2D colortex12; // uniform sampler2D colortex7; uniform sampler2D colortex4; @@ -285,7 +286,7 @@ vec3 applyBump(mat3 tbnMatrix, vec3 bump, float puddle_values){ #ifdef FORWARD_ROUGH_REFLECTION #endif -/* RENDERTARGETS:2,7,14 */ +/* RENDERTARGETS:2,7,11,14 */ void main() { if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 ) { @@ -342,7 +343,7 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 ) gl_FragData[0] = gcolor; - // float UnchangedAlpha = gl_FragData[0].a; + float UnchangedAlpha = gl_FragData[0].a; #ifdef WhiteWorld gl_FragData[0].rgb = vec3(0.5); @@ -462,12 +463,12 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 ) #ifdef FORWARD_BACKGROUND_REFLECTION BackgroundReflection = skyCloudsFromTex(mat3(gbufferModelViewInverse) * reflectedVector, colortex4).rgb / 1200.0; #endif - #ifdef WATER_SUN_SPECULAR - SunReflection = (DirectLightColor * Shadows) * GGX(normalize(normals), -normalize(viewPos), normalize(WsunVec2), roughness, f0) * (1.0-Reflections.a); + #if defined OVERWORLD_SHADER && SUN_SPECULAR_MULT > 0 + SunReflection = SUN_SPECULAR_MULT * DirectLightColor * Shadows * GGX(normalize(normals), -normalize(viewPos), normalize(WsunVec2), roughness, f0) * (1.0-Reflections.a); #endif Reflections_Final = mix(FinalColor, mix(BackgroundReflection*SSR_HIT_SKY_MASK, Reflections.rgb, Reflections.a), fresnel); - Reflections_Final += SunReflection*indoors; + Reflections_Final += SunReflection*SSR_HIT_SKY_MASK; gl_FragData[0].a = gl_FragData[0].a + (1.0-gl_FragData[0].a) * fresnel; @@ -495,7 +496,21 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 ) gl_FragData[1] = vec4(Albedo, material); - gl_FragData[2] = vec4(1, 1, encodeVec2(lightmapCoords.x, lightmapCoords.y), 1); + vec4 GLASS_TINT_COLORS = vec4(Albedo, UnchangedAlpha); + + #ifdef BIOME_TINT_WATER + if (isWater) GLASS_TINT_COLORS.rgb = toLinear(gcolor.rgb); + #endif + + vec4 blockBreak = texelFetch(colortex11, ivec2(gl_FragCoord.xy), 0); + + if(blockBreak.a > 0.99) { + gl_FragData[2] = blockBreak; + } else { + gl_FragData[2] = vec4(encodeVec2(vec2(0.5)), encodeVec2(GLASS_TINT_COLORS.rg), encodeVec2(GLASS_TINT_COLORS.ba), 0.0); + } + + gl_FragData[3] = vec4(1, 1, encodeVec2(lightmapCoords.x, lightmapCoords.y), 1); } diff --git a/shaders/dimensions/all_particles.fsh b/shaders/dimensions/all_particles.fsh index ba57a21..a72d9ed 100644 --- a/shaders/dimensions/all_particles.fsh +++ b/shaders/dimensions/all_particles.fsh @@ -393,13 +393,10 @@ void main() { #endif #if !defined DAMAGE_BLOCK_EFFECT - #ifdef LINES - bool selectionBox = renderStage == MC_RENDER_STAGE_OUTLINE; - #endif - gl_FragData[2] = vec4(0.0); #ifdef LINES + bool selectionBox = renderStage == MC_RENDER_STAGE_OUTLINE; #ifndef SELECT_BOX if(selectionBox) discard; #endif @@ -455,7 +452,7 @@ void main() { #ifdef FLASHLIGHT vec4 flashLightSpecularData = vec4(0.0); - Indirect_lighting += calculateFlashlight(gl_FragCoord.xy*texelSize/RENDER_SCALE, viewPos, vec3(0.0), -normalize(feetPlayerPos), flashLightSpecularData, false); + Indirect_lighting += 0.3*calculateFlashlight(gl_FragCoord.xy*texelSize/RENDER_SCALE, viewPos, vec3(0.0), -normalize(feetPlayerPos), flashLightSpecularData, false); #endif TEXTURE.rgb *= Indirect_lighting + averageSkyCol_CloudsSSBO / 360.0; @@ -557,7 +554,6 @@ void main() { gl_FragData[0].rgb = (Indirect_lighting + Direct_lighting) * toLinear(color.rgb); #if RAINBOW_SELECT_BOX > 0 - #if RAINBOW_SELECT_BOX == 1 float selectBoxHue = length(sin(mod(1.4*worldPos, 3.14159))); #else @@ -588,9 +584,9 @@ void main() { float BN = blueNoise(); // distance fade targeting the world border... - float distaneFade = clamp(2.5 - length(feetPlayerPos) / (0.1*min(far, 225.0)),0.0,1.0); + float distanceFade = clamp(2.5 - length(feetPlayerPos) / (0.1*min(far, 225.0)),0.0,1.0); - if(distaneFade < BN) discard; + if(distanceFade < BN) discard; } #endif diff --git a/shaders/dimensions/all_particles.vsh b/shaders/dimensions/all_particles.vsh index 9aba05d..f428c9f 100644 --- a/shaders/dimensions/all_particles.vsh +++ b/shaders/dimensions/all_particles.vsh @@ -59,6 +59,44 @@ vec4 toClipSpace3(vec3 viewSpacePosition) { in vec4 at_tangent; #endif +#ifdef LINES + uniform int currentSelectedBlockId; + uniform int renderStage; + uniform vec3 currentSelectedBlockPos; + + #include "/lib/blocks.glsl" + + const float PI48 = 150.796447372*WAVY_SPEED; + float pi2wt = PI48*frameTimeCounter; + + vec2 calcWave(in vec3 pos) { + + float magnitude = abs(sin(dot(vec4(frameTimeCounter, pos),vec4(1.0,0.005,0.005,0.005)))*0.5+0.72)*0.013; + vec2 ret = (sin(pi2wt*vec2(0.0063,0.0015)*4. - pos.xz + pos.y*0.05)+0.1)*magnitude; + + return ret; + } + + vec3 calcMovePlants(in vec3 pos) { + vec2 move1 = calcWave(pos ); + float move1y = -length(move1); + return vec3(move1.x,move1y,move1.y)*5.*WAVY_STRENGTH; + } + + vec3 calcWaveLeaves(in vec3 pos) { + + float magnitude = abs(sin(dot(vec4(frameTimeCounter, pos),vec4(1.0,0.005,0.005,0.005)))*0.5+0.72)*0.013; + vec3 ret = (sin(pi2wt*vec3(0.0063,0.0224,0.0015)*1.5 - pos))*magnitude; + + return ret; + } + + vec3 calcMoveLeaves(in vec3 pos, in vec3 amp1) { + vec3 move1 = calcWaveLeaves(pos) * amp1; + return move1*5.*WAVY_STRENGTH; + } +#endif + //////////////////////////////VOID MAIN////////////////////////////// //////////////////////////////VOID MAIN////////////////////////////// //////////////////////////////VOID MAIN////////////////////////////// @@ -98,9 +136,19 @@ void main() { } #endif - #if defined LINES && defined PLANET_CURVATURE + #ifdef LINES + #ifdef PLANET_CURVATURE float curvature = length(worldpos) / (16*8); worldpos.y -= curvature*curvature * CURVATURE_AMOUNT; + #endif + + #if defined WAVY_PLANTS + bool selectionBox = renderStage == MC_RENDER_STAGE_OUTLINE; + if(currentSelectedBlockId == BLOCK_AIR_WAVING && abs(position.z) < 64.0 && selectionBox){ + // apply displacement for waving leaf blocks specifically, overwriting the other waving mode. these wave off of the air. they wave uniformly + worldpos += calcMoveLeaves(worldpos + cameraPosition, vec3(1.0,0.2,1.0))*clamp(eyeBrightnessSmooth.y/240.0,0,1); + } + #endif #endif position = mat3(gbufferModelView) * worldpos + gbufferModelView[3].xyz; diff --git a/shaders/dimensions/all_solid.fsh b/shaders/dimensions/all_solid.fsh index 85653d2..c582917 100644 --- a/shaders/dimensions/all_solid.fsh +++ b/shaders/dimensions/all_solid.fsh @@ -523,8 +523,9 @@ void main() { vec2 lmcoord = data_in.lmtexcoord.zw; + vec4 Color = data_in.color; + #ifndef COLORWHEEL - vec4 Color = data_in.color; float vanillaAO = 1.0 - clamp(Color.a,0,1); // don't fix vanilla ao on some custom block models. @@ -580,7 +581,7 @@ void main() { #endif #if (defined BLOCKENTITIES || defined ENTITIES || defined HAND) && !defined TRANSLUCENT_ENTITIES && defined TRANSLUCENT_ENTITIES_DITHER_FALLBACK - float entityAlbedo = clamp((Albedo.a - 0.1) * 10.0 / 9.0, 0.0, 1.0); + float entityAlbedo = clamp((Albedo.a*Color.a - 0.1) * 10.0 / 9.0, 0.0, 1.0); #ifdef TAA if(entityAlbedo < BN) discard; #else @@ -788,7 +789,7 @@ void main() { /////// ----- SSS ON BLOCKS ----- /////// // strong if ( - data_in.blockID == BLOCK_SSS_STRONG || data_in.blockID == BLOCK_AIR_WAVING + data_in.blockID == BLOCK_SSS_STRONG || data_in.blockID == BLOCK_AIR_WAVING || data_in.blockID == BLOCK_SSS_STRONG_2 ) { SSSAMOUNT = 1.0; } diff --git a/shaders/dimensions/all_solid.vsh b/shaders/dimensions/all_solid.vsh index 045878a..850eea9 100644 --- a/shaders/dimensions/all_solid.vsh +++ b/shaders/dimensions/all_solid.vsh @@ -168,6 +168,7 @@ vec3 calcMoveLeaves(in vec3 pos, in vec3 amp1) { vec3 move1 = calcWaveLeaves(pos) * amp1; return move1*5.*WAVY_STRENGTH; } + vec3 srgbToLinear2(vec3 srgb){ return mix( srgb / 12.92, @@ -291,7 +292,7 @@ void main() { } #endif - #if PUDDLE_MODE > 0 || ShaderSnow > 0 + #if (PUDDLE_MODE > 0 || ShaderSnow > 0) && !defined CUTOUT if(data_out.blockID == 215) data_out.lmtexcoord.w = 0.0; #endif #endif diff --git a/shaders/dimensions/all_translucent.fsh b/shaders/dimensions/all_translucent.fsh index 7ffa681..c40de11 100644 --- a/shaders/dimensions/all_translucent.fsh +++ b/shaders/dimensions/all_translucent.fsh @@ -14,6 +14,10 @@ #undef FLASHLIGHT_BOUNCED_INDIRECT +#if MC_VERSION >= 12110 +#define MAIN_SHADOW_PASS +#endif + // #if defined END_SHADER || defined NETHER_SHADER // #undef IS_LPV_ENABLED // #endif @@ -66,8 +70,9 @@ uniform vec4 entityColor; #endif uniform sampler2D noisetex; -uniform sampler2D depthtex1; uniform sampler2D depthtex0; +uniform sampler2D depthtex1; +uniform sampler2D depthtex2; #ifdef DISTANT_HORIZONS uniform sampler2D dhDepthTex1; @@ -80,6 +85,7 @@ uniform sampler2D depthtex0; #endif uniform sampler2D colortex7; +uniform sampler2D colortex11; uniform sampler2D colortex12; uniform sampler2D colortex13; uniform sampler2D colortex14; @@ -127,6 +133,7 @@ uniform vec3 nsunColor; uniform int heldItemId; uniform int heldItemId2; +uniform bool firstPersonCamera; uniform float waterEnteredAltitude; @@ -465,6 +472,12 @@ void convertHandDepth(inout float depth) { depth = ndcDepth * 0.5 + 0.5; } +vec2 decodeVec2(float a){ + const vec2 constant1 = 65535. / vec2( 256., 65536.); + const float constant2 = 256. / 255.; + return fract( a * constant1 ) * constant2 ; +} + void Emission( inout vec3 Lighting, vec3 Albedo, @@ -482,6 +495,67 @@ float bias(){ #endif } +#if defined FLASHLIGHT_SHADOWS && defined FLASHLIGHT && defined MAIN_SHADOW_PASS +float SSRT_FlashLight_Shadows(vec3 viewPos, bool depthCheck, vec3 lightDir, float noise, vec3 normals, bool hand){ + + if(hand || !firstPersonCamera) return 1.0; + + vec3 WlightDir = normalize((gbufferModelViewInverse*vec4(lightDir, 1.0)).xyz); + + float NdotL = dot(normals, WlightDir); + NdotL = smoothstep(0.0, 0.2, abs(NdotL)); + + float shadows = 1.0; + float samples = 16.0; + + float _near = near; float _far = far*4.0; + + if (depthCheck) { + _near = dhVoxyNearPlane; + _far = dhVoxyFarPlane; + } + + vec3 position = toClipSpace3_DH(viewPos, depthCheck) ; + + //prevents the ray from going behind the camera + float rayLength = ((viewPos.z + lightDir.z * _far * sqrt(3.)) > -_near) ? (-_near - viewPos.z) / lightDir.z : _far * sqrt(3.); + + vec3 direction = toClipSpace3_DH(viewPos + lightDir*rayLength, depthCheck) - position; + direction.xyz = direction.xyz / max(max(abs(direction.x)/0.0005, abs(direction.y)/0.0005),400.0); //fixed step size + direction *= 6.0; + + position.xy *= RENDER_SCALE; + direction.xy *= RENDER_SCALE; + + vec3 newPos = position + direction*noise; + // literally shadow bias to fight shadow acne due to precision problems when comparing sampled depth and marched position + //newPos += direction*0.3; + + + for (int i = 0; i < int(samples); i++) { + float samplePos; + + #if defined DISTANT_HORIZONS || defined VOXY + if(depthCheck) { + samplePos = texelFetch(dhVoxyDepthTex1, ivec2(newPos.xy/texelSize),0).x; + } else + #endif + { + samplePos = texelFetch(depthtex2, ivec2(newPos.xy/texelSize),0).x,hand; + } + + if(samplePos < newPos.z && samplePos > 0.0){// && (samplePos <= max(minZ,maxZ) && samplePos >= min(minZ,maxZ))){ + shadows = 0.0; + break; + } + + newPos += direction; + } + + return clamp(shadows*NdotL, 1.0-FLASHLIGHT_SHADOWS_STRENGTH, 1.0); +} +#endif + //////////////////////////////VOID MAIN////////////////////////////// //////////////////////////////VOID MAIN////////////////////////////// //////////////////////////////VOID MAIN////////////////////////////// @@ -783,13 +857,22 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 ) if (isWater) TangentNormal = mix(NormalTex.xy, normalize(wave.normal).xz, smoothstep(0.0, 0.1, physics_localWaviness)); #endif - float nameTagMask = 0.0; + gl_FragData[2].r = encodeVec2(TangentNormal*0.5+0.5); - #if defined ENTITIES && defined IS_IRIS - if(NAMETAG > 0) nameTagMask = 0.1; - #endif + vec4 blockBreak = texelFetch(colortex11, ivec2(gl_FragCoord.xy), 0); - gl_FragData[2] = vec4(encodeVec2(TangentNormal*0.5+0.5), encodeVec2(GLASS_TINT_COLORS.rg), encodeVec2(GLASS_TINT_COLORS.ba), encodeVec2(0.0, nameTagMask)); + if(blockBreak.a > 0.99) { + gl_FragData[2].gba = blockBreak.gba; + } else { + #if defined ENTITIES && defined IS_IRIS + float nameTagMask = 0.0; + if(NAMETAG > 0) nameTagMask = 1.0; + #else + const float nameTagMask = 0.0; + #endif + + gl_FragData[2].gba = vec3(encodeVec2(GLASS_TINT_COLORS.rg), encodeVec2(GLASS_TINT_COLORS.ba), nameTagMask); + } //////////////////////////////////////////////////////////////////////////////// //////////////////////////////// SPECULARS ///////////////////////////////////// @@ -947,11 +1030,21 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 ) vec3 lightColor = vec3(TORCH_R,TORCH_G,TORCH_B); #endif - Indirect_lighting += doBlockLightLighting(lightColor, lightmap.x, feetPlayerPos, lpvPos); + #ifdef MAIN_SHADOW_PASS + Indirect_lighting += doBlockLightLighting(lightColor, lightmap.x, feetPlayerPos, lpvPos, viewPos, false, BN, worldSpaceNormal, false); + #else + Indirect_lighting += doBlockLightLighting(lightColor, lightmap.x, feetPlayerPos, lpvPos); + #endif vec4 flashLightSpecularData = vec4(0.0); #ifdef FLASHLIGHT - Indirect_lighting += calculateFlashlight(FragCoord.xy*texelSize/RENDER_SCALE, viewPos, vec3(0.0), worldSpaceNormal, flashLightSpecularData, false); + #if defined FLASHLIGHT_SHADOWS && defined MAIN_SHADOW_PASS && !defined HAND && defined MAIN_SHADOW_PASS + vec3 newViewPos = viewPos + vec3(-0.25, 0.2, 0.0); + float flashlightshadows = SSRT_FlashLight_Shadows(viewPos, false, -newViewPos, BN, worldSpaceNormal, false); + #else + const float flashlightshadows = 1.0; + #endif + Indirect_lighting += flashlightshadows * calculateFlashlight(FragCoord.xy*texelSize/RENDER_SCALE, viewPos, vec3(0.0), worldSpaceNormal, flashLightSpecularData, false); #endif vec3 FinalColor = (Indirect_lighting + Direct_lighting) * Albedo; @@ -1029,14 +1122,14 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 ) } #endif - #if defined DISTANT_HORIZONS && defined DH_OVERDRAW_PREVENTION && !defined HAND + #if defined DISTANT_HORIZONS && defined DH_OVERDRAW_PREVENTION && !defined HAND && !defined NETHER_SHADER #if OVERDRAW_MAX_DISTANCE == 0 float maxOverdrawDistance = far; #else float maxOverdrawDistance = OVERDRAW_MAX_DISTANCE; #endif - bool WATER = texture(colortex7, gl_FragCoord.xy*texelSize).a > 0.0 && length(feetPlayerPos) > clamp(far-16.0*4.0, 16.0, maxOverdrawDistance) && texelFetch(depthtex1, ivec2(gl_FragCoord.xy), 0).x >= 1.0; + bool WATER = texelFetch(colortex7, ivec2(gl_FragCoord.xy), 0).a > 0.0 && length(feetPlayerPos) > clamp(far-16.0*4.0, 16.0, maxOverdrawDistance) && texelFetch(depthtex1, ivec2(gl_FragCoord.xy), 0).x >= 1.0; if(WATER && isWater) { gl_FragData[0].a = 0.0; diff --git a/shaders/dimensions/all_translucent.vsh b/shaders/dimensions/all_translucent.vsh index 836ed86..25a7001 100644 --- a/shaders/dimensions/all_translucent.vsh +++ b/shaders/dimensions/all_translucent.vsh @@ -186,9 +186,10 @@ void main() { chunkFade = abs(mc_chunkFade); #endif - #if defined PLANET_CURVATURE || (defined IRIS_FEATURE_FADE_VARIABLE && VANILLA_CHUNK_FADING > 1 && !defined HAND) - vec3 worldpos = mat3(gbufferModelViewInverse) * position + gbufferModelViewInverse[3].xyz; + // keep this OUT of the #if block... otherwise there will be z-fighting when using some overlay textures for some random ass reason..... + vec3 worldpos = mat3(gbufferModelViewInverse) * position + gbufferModelViewInverse[3].xyz; + #if defined PLANET_CURVATURE || (defined IRIS_FEATURE_FADE_VARIABLE && VANILLA_CHUNK_FADING > 1 && !defined HAND) #if defined IRIS_FEATURE_FADE_VARIABLE && VANILLA_CHUNK_FADING > 1 && !defined HAND worldpos.y += -45.0*(1.0-chunkFade)*(1.0-caveDetection)*smoothstep(25.0, far, length(worldpos)); #endif @@ -197,9 +198,9 @@ void main() { float curvature = length(worldpos) / (16*8); worldpos.y -= curvature*curvature * CURVATURE_AMOUNT; #endif - - position = mat3(gbufferModelView) * worldpos + gbufferModelView[3].xyz; #endif + + position = mat3(gbufferModelView) * worldpos + gbufferModelView[3].xyz; #if !defined ENTITIES && !defined HAND gl_Position = toClipSpace3(position); diff --git a/shaders/dimensions/composite.fsh b/shaders/dimensions/composite.fsh index 4a5832a..cb41890 100644 --- a/shaders/dimensions/composite.fsh +++ b/shaders/dimensions/composite.fsh @@ -14,6 +14,7 @@ in DATA { uniform sampler2D depthtex0; uniform sampler2D depthtex1; +uniform sampler2D depthtex2; #ifdef DISTANT_HORIZONS uniform sampler2D dhDepthTex; @@ -274,7 +275,14 @@ float convertHandDepth_2(in float depth, bool hand) { vec4 viewPos = vec4(0.0); vec3 feetPlayerPos = vec3(0.0); - float depth = convertHandDepth_2(texelFetch(depthtex1, samplecoord, 0).x, hand); + float depth; + + if(hand) { + depth = texelFetch(depthtex1, samplecoord, 0).x; + convertHandDepth(depth); + } else { + depth = texelFetch(depthtex2, samplecoord, 0).x; + } if (depth < 1.0) { feetPlayerPos = vec3(texcoord, depth) * 2.0 - 1.0; @@ -326,7 +334,14 @@ vec2 SSAO( #if defined DISTANT_HORIZONS || defined VOXY vec3 offsetViewPos = toScreenSpace_DH_SSAO((offsetUV*texelSize - jitterOffsets) * (1.0/RENDER_SCALE), offsetUV, hand); #else - float sampleDepth = convertHandDepth_2(texelFetch(depthtex1, offsetUV, 0).x, hand); + float sampleDepth; + if(hand) { + sampleDepth = texelFetch(depthtex1, offsetUV, 0).x; + convertHandDepth(sampleDepth); + } else { + sampleDepth = texelFetch(depthtex2, offsetUV, 0).x; + } + vec3 offsetViewPos = toScreenSpace(vec3((offsetUV*texelSize - jitterOffsets) * (1.0/RENDER_SCALE), sampleDepth)); #endif @@ -411,10 +426,14 @@ void main() { float z0 = texelFetch(depthtex0,ivec2(gl_FragCoord.xy),0).x; #if defined DISTANT_HORIZONS || defined VOXY - float DH_depth1 = texelFetch(dhVoxyDepthTex1,ivec2(gl_FragCoord.xy),0).x; - float DH_depth0 = texelFetch(dhVoxyDepthTex,ivec2(gl_FragCoord.xy),0).x; - - float swappedDepth = z >= 1.0 ? DH_depth1 : z; + float DH_depth1 = 1.0; + float swappedDepth; + if(z >= 1.0) { + DH_depth1 = texelFetch(dhVoxyDepthTex1,ivec2(gl_FragCoord.xy),0).x; + swappedDepth = DH_depth1; + } else { + swappedDepth = z; + } #else float DH_depth1 = 1.0; float swappedDepth = z; @@ -442,7 +461,7 @@ void main() { _far = far*4.0; if (depth0 >= 1.0) { - depth0 = DH_depth0; + depth0 = texelFetch(dhVoxyDepthTex,ivec2(gl_FragCoord.xy),0).x; _near = dhVoxyNearPlane; _far = dhVoxyFarPlane; } diff --git a/shaders/dimensions/composite1.fsh b/shaders/dimensions/composite1.fsh index 0c460cf..f7b907e 100644 --- a/shaders/dimensions/composite1.fsh +++ b/shaders/dimensions/composite1.fsh @@ -490,8 +490,13 @@ vec2 SSRT_Shadows(vec3 viewPos, bool depthCheck, vec3 lightDir, float noise, boo sampleDepth = texelFetch(dhVoxyDepthTex1, ivec2(newPos.xy/texelSize),0).x; } else #endif - { - sampleDepth = convertHandDepth_2(texelFetch(depthtex1, ivec2(newPos.xy/texelSize),0).x,hand); + { + if(hand) { + sampleDepth = texelFetch(depthtex1, ivec2(newPos.xy/texelSize),0).x; + convertHandDepth(sampleDepth); + } else { + sampleDepth = texelFetch(depthtex2, ivec2(newPos.xy/texelSize),0).x; + } } if(sampleDepth < newPos.z){ @@ -737,10 +742,10 @@ vec3 ComputeShadowMap_COLOR(in vec3 projectedShadowPosition, float distortFactor #ifdef debug_SHADOWMAP shadowDebug = texture(shadow, projectedShadowPosition).x; #endif - #ifdef TRANSLUCENT_COLORED_SHADOWS - // directLightColor *= mix(vec3(1.0), translucentTint.rgb / samples, maxDistFade); - tintedSunlight *= translucentTint.rgb / samples; - #endif + // #ifdef TRANSLUCENT_COLORED_SHADOWS + // // directLightColor *= mix(vec3(1.0), translucentTint.rgb / samples, maxDistFade); + // tintedSunlight *= translucentTint.rgb / samples; + // #endif return shadowColor.rgb / samples; // return mix(directLightColor, shadowColor.rgb / samples, maxDistFade); @@ -956,13 +961,12 @@ void main() { float z = texelFetch(depthtex1, ivec2(gl_FragCoord.xy), 0).x; float swappedDepth = z; - - - bool isDHrange = z >= 1.0; - #if defined DISTANT_HORIZONS || defined VOXY + bool isDHrange = z >= 1.0; + float DH_mixedLinearZ = sqrt(texelFetch(colortex12,ivec2(gl_FragCoord.xy), 0).z/65000.0); - float DH_depth0 = texelFetch(dhVoxyDepthTex,ivec2(gl_FragCoord.xy), 0).x; + float DH_depth0 = 0.0; + if(isDHrange) DH_depth0 = texelFetch(dhVoxyDepthTex,ivec2(gl_FragCoord.xy), 0).x; float DH_depth1 = texelFetch(dhVoxyDepthTex1,ivec2(gl_FragCoord.xy), 0).x; float depthOpaque = z; @@ -971,13 +975,14 @@ void main() { float dhDepthOpaque = DH_depth1; float dhDepthOpaqueL = linearizeDepthFast(dhDepthOpaque, dhVoxyNearPlane, dhVoxyFarPlane); - if (depthOpaque >= 1.0 || (dhDepthOpaqueL < depthOpaqueL && dhDepthOpaque > 0.0)){ + if (isDHrange || (dhDepthOpaqueL < depthOpaqueL && dhDepthOpaque > 0.0)){ depthOpaque = dhDepthOpaque; depthOpaqueL = dhDepthOpaqueL; } swappedDepth = depthOpaque; #else + bool isDHrange = false; float DH_depth0 = 0.0; float DH_depth1 = 0.0; #endif @@ -1141,7 +1146,7 @@ void main() { #endif { vec3 lightningColor = vec3(2.0, 4.5, 6.6) * lightningFlash; - DirectLightColor += lightningColor * smoothstep(500.0, 0.0, length(feetPlayerPos-lightningBoltPosition.xyz)); + DirectLightColor += 0.5 * lightningColor * smoothstep(300.0, 0.0, length(feetPlayerPos-lightningBoltPosition.xyz)); } #endif @@ -1324,6 +1329,7 @@ void main() { float ShadowAlpha = 0.0; // this is for subsurface scattering later. vec3 tintedSunlight = DirectLightColor; // this is for subsurface scattering later. + // nobody cares, it makes zero difference #if defined END_ISLAND_LIGHT && defined END_SHADER // make light fade out @@ -1372,11 +1378,11 @@ void main() { #endif - #ifdef TRANSLUCENT_COLORED_SHADOWS - SSSColor = tintedSunlight; - #else - SSSColor = DirectLightColor; - #endif + // #ifdef TRANSLUCENT_COLORED_SHADOWS + // SSSColor = tintedSunlight; + // #else + // SSSColor = DirectLightColor; + // #endif // TODO CHECK IF *= OR = // *= looks better idk diff --git a/shaders/dimensions/composite2.fsh b/shaders/dimensions/composite2.fsh index a4cb353..11357dd 100644 --- a/shaders/dimensions/composite2.fsh +++ b/shaders/dimensions/composite2.fsh @@ -97,94 +97,6 @@ float linearizeDepthFast(const in float depth, const in float near, const in flo return (near * far) / (depth * (near - far) + far); } -#define IS_LPV_ENABLED - -#if defined LPV_VL_FOG_ILLUMINATION && defined IS_LPV_ENABLED - #ifdef IS_LPV_ENABLED - #extension GL_ARB_shader_image_load_store: enable - #extension GL_ARB_shading_language_packing: enable - #endif - - #ifdef IS_LPV_ENABLED - uniform usampler1D texBlockData; - uniform sampler3D texLpv1; - uniform sampler3D texLpv2; - #endif - - // #ifdef IS_LPV_ENABLED - // uniform int heldItemId; - // uniform int heldItemId2; - // #endif - - #ifdef IS_LPV_ENABLED - #include "/lib/hsv.glsl" - #include "/lib/lpv_common.glsl" - #include "/lib/lpv_render.glsl" - #endif - - vec4 raymarchLPV( - in vec3 viewPos, - in float dither - ){ - #if !defined LPV_VL_FOG_ILLUMINATION - return vec3(0.0); - #endif - - const int SAMPLECOUNT = 8; - const float density = 0.0001; - const float fadeLength = 10.0; // in blocks - - vec3 playerPos = mat3(gbufferModelViewInverse) * viewPos + gbufferModelViewInverse[3].xyz; - vec3 LPVrayStartPos = playerPos - gbufferModelViewInverse[3].xyz; - - // ensure the max marching distance is the voxel distance, or the render distance if the voxels go farther than it - float LPVRayLength = length(LPVrayStartPos); - #if LPV_SIZE == 8 - LPVrayStartPos *= min(LPVRayLength, min(256.0,far))/LPVRayLength; - #elif LPV_SIZE == 7 - LPVrayStartPos *= min(LPVRayLength, min(128.0,far))/LPVRayLength; - #elif LPV_SIZE == 6 - LPVrayStartPos *= min(LPVRayLength, min(64.0,far))/LPVRayLength; - #endif - LPVRayLength = length(LPVrayStartPos); - - vec3 LPVrayProgress = vec3(0.0); - vec4 color = vec4(0.0,0.0,0.0,1.0); - const float expFactor = 11.0; - - for (int i = 0; i < SAMPLECOUNT; i++) { - float d = (pow(expFactor, float(i+dither)/float(SAMPLECOUNT))/expFactor - 1.0/expFactor)/(1.0-1.0/expFactor); - float dd = pow(expFactor, float(i+dither)/float(SAMPLECOUNT)) * log(expFactor) / float(SAMPLECOUNT)/(expFactor-1.0); - - LPVrayProgress = gbufferModelViewInverse[3].xyz + d*LPVrayStartPos; - - vec3 lpvPos = GetLpvPosition(LPVrayProgress); - - vec3 cubicRadius = clamp( min(((LpvSize3-1.0) - lpvPos)/fadeLength, lpvPos/fadeLength) ,0.0,1.0); - float LpvFadeF = cubicRadius.x*cubicRadius.y*cubicRadius.z; - - if(LpvFadeF < 0.01) break; - - vec3 sampleColor = SampleLpvLinear(lpvPos).rgb; - #ifdef VANILLA_LIGHTMAP_MASK - vec3 lighting = sampleColor * LPV_VL_FOG_ILLUMINATION_BRIGHTNESS * 25. * exp(-10 * (1.0-luma(sampleColor))); - #else - vec3 lighting = sampleColor * LPV_VL_FOG_ILLUMINATION_BRIGHTNESS * 25. * exp(-5 * (1.0-luma(sampleColor))); - #endif - - float volumeCoeff = exp(-dd*density*LPVRayLength); - - color.rgb += (lighting - lighting * volumeCoeff) * color.a; - color.a *= volumeCoeff; - } - return color; - } - -#endif -float invLinZ (float lindepth){ - return -((2.0*near/lindepth)-far-near)/(far-near); -} - uniform float nightVision; #ifdef OVERWORLD_SHADER @@ -201,8 +113,6 @@ uniform float nightVision; #include "/lib/scene_controller.glsl" - - // uniform int dhRenderDistance; #define TIMEOFDAYFOG #include "/lib/lightning_stuff.glsl" @@ -220,7 +130,172 @@ uniform sampler2D colortex4; #include "/lib/end_fog.glsl" #endif -#define fsign(a) (clamp((a)*1e35,0.,1.)*2.-1.) +#define IS_LPV_ENABLED + +#if defined LPV_VL_FOG_ILLUMINATION && defined IS_LPV_ENABLED + #extension GL_ARB_shader_image_load_store: enable + #extension GL_ARB_shading_language_packing: enable + + uniform usampler1D texBlockData; + uniform sampler3D texLpv1; + uniform sampler3D texLpv2; + + #include "/lib/hsv.glsl" + #include "/lib/lpv_common.glsl" + #include "/lib/lpv_render.glsl" + + #if defined LPV_VL_FOG_ILLUMINATION_HANDHELD_WATER || defined LPV_VL_FOG_ILLUMINATION_HANDHELD + uniform int heldItemId; + uniform int heldItemId2; + + #include "/lib/util.glsl" + #include "/lib/diffuse_lighting.glsl" + #endif + #ifdef LPV_VL_FOG_ILLUMINATION_HANDHELD + #endif +#endif + +bool eyeInWater = isEyeInWater == 1; + +vec4 raymarchLPV( + in vec3 viewPos, + in float dither +){ + #if (!defined LPV_VL_FOG_ILLUMINATION || !defined IS_LPV_ENABLED) && (!defined FLASHLIGHT_FOG_ILLUMINATION || !defined FLASHLIGHT) + return vec3(0.0); + #endif + + const int SAMPLECOUNT = 8; + float minimumDensity = 0.000025; + if(eyeInWater) minimumDensity = 0.00006; + const float fadeLength = 10.0; // in blocks + + vec3 LPVrayStartPos = mat3(gbufferModelViewInverse) * viewPos; + + // ensure the max marching distance is the voxel distance, or the render distance if the voxels go farther than it + float LPVRayLength = length(LPVrayStartPos); + #if LPV_SIZE == 8 + LPVrayStartPos *= min(LPVRayLength, min(256.0,far))/LPVRayLength; + #elif LPV_SIZE == 7 + LPVrayStartPos *= min(LPVRayLength, min(128.0,far))/LPVRayLength; + #elif LPV_SIZE == 6 + LPVrayStartPos *= min(LPVRayLength, min(64.0,far))/LPVRayLength; + #endif + LPVRayLength = length(LPVrayStartPos); + + vec3 rayProgress = vec3(0.0); + vec4 color = vec4(0.0,0.0,0.0,1.0); + const float expFactor = 11.0; + + for (int i = 0; i < SAMPLECOUNT; i++) { + float d = (pow(expFactor, float(i+dither)/float(SAMPLECOUNT))/expFactor - 1.0/expFactor)/(1.0-1.0/expFactor); + float dd = pow(expFactor, float(i+dither)/float(SAMPLECOUNT)) * log(expFactor) / float(SAMPLECOUNT)/(expFactor-1.0); + + rayProgress = gbufferModelViewInverse[3].xyz + d*LPVrayStartPos; + + float density; + float _minimumDensity = minimumDensity; + + #ifdef OVERWORLD_SHADER + if(caveDetection < 0.9999) density = cloudVol(rayProgress + cameraPosition, 0.0) * (1.0 - caveDetection); + + _minimumDensity += caveDetection * minimumDensity; + #elif defined NETHER_SHADER + vec3 progressW = rayProgress + cameraPosition; + density = cloudVol(progressW); + + float dist = length(rayProgress); + float clearArea = 1.0 - min(max(1.0 - dist / 24.0,0.0),1.0); + + float plumeDensity = min(density * pow(min(max(100.0-progressW.y,0.0)/30.0,1.0),4.0), pow(clamp(1.0 - dist/far,0.0,1.0),5.0)); + plumeDensity *= NETHER_PLUME_DENSITY; + + float ceilingSmokeDensity = 0.001 * pow(min(max(progressW.y-40.0,0.0)/50.0,1.0),3.0); + ceilingSmokeDensity *= NETHER_CEILING_SMOKE_DENSITY; + + density = plumeDensity + ceilingSmokeDensity; + #elif defined END_SHADER + float volumeDensity = fogShape(rayProgress + cameraPosition); + float clearArea = 1.0-min(max(1.0 - length(rayProgress) / 100,0.0),1.0); + density = min(volumeDensity, clearArea*clearArea * END_STORM_DENSTIY); + #endif + + density = max(density/1000.0, _minimumDensity); + + // density = 0.0001; + + float volumeCoeff = exp(-dd*density*LPVRayLength); + + #ifdef IS_LPV_ENABLED + vec3 lpvPos = GetLpvPosition(rayProgress); + + vec3 cubicRadius = clamp(min(((LpvSize3-1.0) - lpvPos)/fadeLength, lpvPos/fadeLength), 0.0, 1.0); + float LpvFadeF = cubicRadius.x*cubicRadius.y*cubicRadius.z; + + if(LpvFadeF < 0.01) break; + + vec3 sampleColor = SampleLpvLinear(lpvPos).rgb; + #ifdef VANILLA_LIGHTMAP_MASK + vec3 lighting = sampleColor * LPV_VL_FOG_ILLUMINATION_BRIGHTNESS * 25. * exp(-10 * (1.0-luma(sampleColor))); + #else + vec3 lighting = sampleColor * LPV_VL_FOG_ILLUMINATION_BRIGHTNESS * 25. * exp(-5 * (1.0-luma(sampleColor))); + #endif + + if(eyeInWater) lighting *= 2.5; + + #if defined LPV_VL_FOG_ILLUMINATION && defined IS_LPV_ENABLED && defined LPV_VL_FOG_ILLUMINATION_HANDHELD + float lightRange = 0.0; + vec3 handLightCol = GetHandLight(heldItemId, rayProgress, lightRange); + + vec3 handLightCol2 = GetHandLight(heldItemId2, rayProgress, lightRange); + + lighting += (handLightCol + handLightCol2) * TORCH_AMOUNT * LPV_VL_FOG_ILLUMINATION_BRIGHTNESS * 0.04; + #endif + + color.rgb += (lighting - lighting * volumeCoeff) * color.a; + #endif + + #if defined FLASHLIGHT && defined FLASHLIGHT_FOG_ILLUMINATION + // vec3 shiftedViewPos = mat3(gbufferModelView)*(progressW-cameraPosition) + vec3(-0.25, 0.2, 0.0); + // vec3 shiftedPlayerPos = mat3(gbufferModelViewInverse) * shiftedViewPos; + vec3 shiftedViewPos; + vec3 shiftedPlayerPos; + float forwardOffset; + + #ifdef VIVECRAFT + if (vivecraftIsVR) { + forwardOffset = 0.0; + shiftedPlayerPos = (rayProgress) + ( vivecraftRelativeMainHandPos); + shiftedViewPos = shiftedPlayerPos * mat3(vivecraftRelativeMainHandRot); + } else + #endif + { + forwardOffset = 0.5; + shiftedViewPos = mat3(gbufferModelView)*(rayProgress) + vec3(-0.25, 0.2, 0.0); + shiftedPlayerPos = mat3(gbufferModelViewInverse) * shiftedViewPos; + } + + vec2 scaledViewPos = shiftedViewPos.xy / max(-shiftedViewPos.z - forwardOffset, 1e-7); + float linearDistance = length(shiftedPlayerPos); + float shiftedLinearDistance = length(scaledViewPos); + + float lightFalloff = 1.0 - clamp(1.0-linearDistance/FLASHLIGHT_RANGE, -0.999,1.0); + lightFalloff = max(exp(-10.0 * FLASHLIGHT_BRIGHTNESS_FALLOFF_MULT * lightFalloff),0.0); + float projectedCircle = clamp(1.0 - shiftedLinearDistance*FLASHLIGHT_SIZE,0.0,1.0); + + vec3 flashlightGlow = 25.0 * vec3(FLASHLIGHT_R,FLASHLIGHT_G,FLASHLIGHT_B) * lightFalloff * projectedCircle * FLASHLIGHT_BRIGHTNESS_MULT; + + color.rgb += (flashlightGlow - flashlightGlow * volumeCoeff) * color.a; + #endif + + color.a *= volumeCoeff; + } + return color; +} + +float invLinZ (float lindepth){ + return -((2.0*near/lindepth)-far-near)/(far-near); +} /* from https://blog.demofox.org/2022/01/01/interleaved-gradient-noise-a-different-kind-of-low-discrepancy-sequence/ @@ -257,56 +332,11 @@ float R2_dither(){ return fract(alpha.x * coord.x + alpha.y * coord.y ) ; } -void waterVolumetrics_notoverworld(inout vec3 inColor, vec3 rayStart, vec3 rayEnd, float estEndDepth, float estSunDepth, float rayLength, float dither, vec3 waterCoefs, vec3 scatterCoef, vec3 ambient){ - inColor *= exp(-rayLength * waterCoefs); //No need to take the integrated value - - int spCount = rayMarchSampleCount; - vec3 start = toShadowSpaceProjected(rayStart); - vec3 end = toShadowSpaceProjected(rayEnd); - vec3 dV = (end-start); - //limit ray length at 32 blocks for performance and reducing integration error - //you can't see above this anyway - float maxZ = min(rayLength,12.0)/(1e-8+rayLength); - dV *= maxZ; - - - rayLength *= maxZ; - - float dY = normalize(mat3(gbufferModelViewInverse) * rayEnd).y * rayLength; - estEndDepth *= maxZ; - estSunDepth *= maxZ; - - vec3 wpos = mat3(gbufferModelViewInverse) * rayStart + gbufferModelViewInverse[3].xyz; - vec3 dVWorld = (wpos-gbufferModelViewInverse[3].xyz); - - vec3 absorbance = vec3(1.0); - vec3 vL = vec3(0.0); - - float expFactor = 11.0; - for (int i=0;i 1e-5)*2.0 - 1.0; vec4 waterVolumetrics(vec3 rayStart, vec3 rayEnd, float rayLength, vec2 dither, vec3 waterCoefs, vec3 scatterCoef, vec3 ambient, vec3 lightSource, float VdotL, vec3 LPV){ - int spCount = 8; + const int spCount = 8; vec3 start = toShadowSpaceProjected(rayStart); vec3 end = toShadowSpaceProjected(rayEnd); @@ -325,11 +355,9 @@ vec4 waterVolumetrics(vec3 rayStart, vec3 rayEnd, float rayLength, vec2 dither, vec3 vL = vec3(0.0); #ifdef OVERWORLD_SHADER - float lowlightlevel = clamp(eyeBrightnessSmooth.y/240.0,0.1,1.0); float phase = fogPhase(VdotL) * 5.0; #else - float lowlightlevel = 1.0; - float phase = 0.0; + const float phase = 0.0; #endif float thing = -normalize(dVWorld).y; @@ -342,7 +370,8 @@ vec4 waterVolumetrics(vec3 rayStart, vec3 rayEnd, float rayLength, vec2 dither, float d = (pow(expFactor, float(i+dither.x)/float(spCount))/expFactor - 1.0/expFactor)/(1-1.0/expFactor); // exponential step position (0-1) float dd = pow(expFactor, float(i+dither.y)/float(spCount)) * log(expFactor) / float(spCount)/(expFactor-1.0); //step length (derivative) - vec3 progressW = gbufferModelViewInverse[3].xyz+cameraPosition + d*dVWorld; + vec3 progressP = gbufferModelViewInverse[3].xyz + d*dVWorld; + vec3 progressW = progressP + cameraPosition; float distanceFromWaterSurface = max(-(progressW.y - waterEnteredAltitude),0.0); @@ -351,7 +380,7 @@ vec4 waterVolumetrics(vec3 rayStart, vec3 rayEnd, float rayLength, vec2 dither, vec3 spPos = start.xyz + dV*d; //project into biased shadowmap space - #ifdef DISTORT_SHADOWMAP && defined OVERWORLD_SHADER + #if defined DISTORT_SHADOWMAP && defined OVERWORLD_SHADER float distortFactor = calcDistort(spPos.xy); #else float distortFactor = 1.0; @@ -386,7 +415,27 @@ vec4 waterVolumetrics(vec3 rayStart, vec3 rayEnd, float rayLength, vec2 dither, vec3 WaterAbsorbance = exp(-waterCoefs * (distanceFromWaterSurface + thing)); vec3 Directlight = lightSource * sh * phase * caustics * sunAbsorbance; - vec3 Indirectlight = ambient * WaterAbsorbance; + + vec3 _ambient = ambient; + + #ifdef OVERWORLD_SHADER + float horizontalDist = length((progressP.xz) - lightningBoltPosition.xz); + if (horizontalDist < 250.0 && lightningBoltPosition.w > 0.0) { + float lightningIntensity = exp(-horizontalDist * 0.02) * lightningFlash; + _ambient = mix(_ambient, vec3(1.3,1.5,3.0) * sh, lightningIntensity); + } + #endif + + vec3 Indirectlight = _ambient * WaterAbsorbance; + + #if defined LPV_VL_FOG_ILLUMINATION && defined IS_LPV_ENABLED && defined LPV_VL_FOG_ILLUMINATION_HANDHELD_WATER + float lightRange = 0.0; + vec3 handLightCol = GetHandLight(heldItemId, progressP, lightRange); + + vec3 handLightCol2 = GetHandLight(heldItemId2, progressP, lightRange); + + Indirectlight += (handLightCol + handLightCol2) * TORCH_AMOUNT * (LPV_VL_FOG_ILLUMINATION_BRIGHTNESS / 100.0) * 0.2 * exp(-waterCoefs * (length(progressP) + 0.05 * thing)); + #endif vec3 light = (Indirectlight + Directlight + LPV) * scatterCoef; @@ -531,13 +580,13 @@ vec4 waterVolumetrics_alt( vec3 rayStart, vec3 rayEnd, float estEndDepth, float estEndDepth *= maxZ; estSunDepth *= maxZ; - vec3 wpos = mat3(gbufferModelViewInverse) * rayStart + gbufferModelViewInverse[3].xyz; - vec3 dVWorld = (wpos - gbufferModelViewInverse[3].xyz); + vec3 dVWorld = mat3(gbufferModelViewInverse) * rayStart; + vec3 wpos = dVWorld + gbufferModelViewInverse[3].xyz; #ifdef OVERWORLD_SHADER float phase = fogPhase(VdotL) * 5.0; #else - float phase = 1.0; + const float phase = 1.0; #endif vec3 absorbance = vec3(1.0); @@ -560,9 +609,9 @@ vec4 waterVolumetrics_alt( vec3 rayStart, vec3 rayEnd, float estEndDepth, float float d = (pow(expFactor, float(i+dither)/float(spCount))/expFactor - 1.0/expFactor)/(1-1.0/expFactor); float dd = pow(expFactor, float(i+dither)/float(spCount)) * log(expFactor) / float(spCount)/(expFactor-1.0); - // progressW = gbufferModelViewInverse[3].xyz+cameraPosition + d*dVWorld; - - vec3 progressW = gbufferModelViewInverse[3].xyz + cameraPosition + d*dVWorld; + #if defined OVERWORLD_SHADER || (defined LPV_VL_FOG_ILLUMINATION && defined IS_LPV_ENABLED && defined LPV_VL_FOG_ILLUMINATION_HANDHELD_WATER) + vec3 progressP = gbufferModelViewInverse[3].xyz + d*dVWorld + dVWorld; + #endif vec3 sh2 = sh; @@ -598,7 +647,27 @@ vec4 waterVolumetrics_alt( vec3 rayStart, vec3 rayEnd, float estEndDepth, float vec3 ambientAbsorbance = exp(-waterCoefs * (estEndDepth * d + thing)); vec3 Directlight = lightSource * sh2 * phase * sunAbsorbance; - vec3 Indirectlight = ambient * ambientAbsorbance; + + vec3 _ambient = ambient; + + #ifdef OVERWORLD_SHADER + float horizontalDist = length(progressP.xz - lightningBoltPosition.xz); + if (horizontalDist < 250.0 && lightningBoltPosition.w > 0.0) { + float lightningIntensity = exp(-horizontalDist * 0.02) * lightningFlash; + _ambient = mix(_ambient, vec3(1.3,1.5,3.0) * sh2, lightningIntensity); + } + #endif + + #if defined LPV_VL_FOG_ILLUMINATION && defined IS_LPV_ENABLED && defined LPV_VL_FOG_ILLUMINATION_HANDHELD_WATER + float lightRange = 0.0; + vec3 handLightCol = GetHandLight(heldItemId, progressP, lightRange); + + vec3 handLightCol2 = GetHandLight(heldItemId2, progressP, lightRange); + + _ambient += (handLightCol + handLightCol2) * TORCH_AMOUNT * 0.225 * (LPV_VL_FOG_ILLUMINATION_BRIGHTNESS / 100.0); + #endif + + vec3 Indirectlight = _ambient * ambientAbsorbance; vec3 light = (Indirectlight + Directlight) * scatterCoef; @@ -656,7 +725,9 @@ void main() { // z0 = depth < 0.56 ? convertHandDepth(depth) : depth; #if defined DISTANT_HORIZONS || defined VOXY - float DH_z0 = texelFetch(dhVoxyDepthTex, texcoord,0).x; + float DH_z0 = 0.0; + + if (z0 >= 1.0) DH_z0 = texelFetch(dhVoxyDepthTex, texcoord,0).x; #else float DH_z0 = 0.0; #endif @@ -692,7 +763,7 @@ void main() { // float godrays = 1.0; // #endif - #if defined LPV_VL_FOG_ILLUMINATION && defined IS_LPV_ENABLED + #if (defined LPV_VL_FOG_ILLUMINATION && defined IS_LPV_ENABLED) || (defined FLASHLIGHT && defined FLASHLIGHT_FOG_ILLUMINATION) vec4 LPV_ILLUMINATION = raymarchLPV(viewPos0, BN.y); #else vec4 LPV_ILLUMINATION = vec4(0.0,0.0,0.0,1.0); @@ -713,8 +784,6 @@ void main() { #ifdef OVERWORLD_SHADER vec4 VolumetricClouds; #endif - - bool eyeInWater = isEyeInWater == 1; if (eyeInWater){ vec4 underWaterFog = waterVolumetrics(vec3(0.0), viewPos0, length(viewPos0), vec2(noise_1, BN.y), totEpsilon, scatterCoef, indirectLightColor_dynamic, directLightColor, dot(normalize(viewPos0), normalize(sunVec * lightSourceCheck)), LPV_ILLUMINATION.rgb); @@ -728,14 +797,14 @@ void main() { #endif #ifdef CAVE_FOG - #if CAVE_DETECTION == 0.0 || CAVE_DETECTION == 1.0 - #if CAVE_DETECTION == 1.0 - float caveFactor = 1.0-smoothstep(60.0, 63.0, cameraPosition.y); + #if CAVE_DETECTION < 2 + #if CAVE_DETECTION == 1 + float caveFactor = 1.0 - smoothstep(60.0, 63.0, cameraPosition.y); #else - float caveFactor = 1.0; + const float caveFactor = 1.0; #endif #else - float caveFactor = 0.0; + const float caveFactor = 0.0; #endif float skyhole = pow(clamp(1.0-pow(max(playerPos_normalized.y - 0.6,0.0)*5.0,2.0),0.0,1.0),2)* caveDetection * caveFactor; @@ -746,7 +815,7 @@ void main() { // vec3 sceneColor = texelFetch(colortex3,texcoord,0).rgb * VolumetricClouds.a + VolumetricClouds.rgb; VolumetricFog = GetVolumetricFog(viewPos0, WsunVec, BN, directLightColor, indirectLight_fog, indirectLightColor_dynamic, cloudPlaneDistance); - #if defined LPV_VL_FOG_ILLUMINATION && defined IS_LPV_ENABLED + #if (defined LPV_VL_FOG_ILLUMINATION && defined IS_LPV_ENABLED) || (defined FLASHLIGHT && defined FLASHLIGHT_FOG_ILLUMINATION) VolumetricFog.a *= LPV_ILLUMINATION.a; VolumetricFog.rgb = VolumetricFog.rgb * LPV_ILLUMINATION.a + LPV_ILLUMINATION.rgb; #endif @@ -760,7 +829,7 @@ void main() { #if defined NETHER_SHADER || defined END_SHADER VolumetricFog = GetVolumetricFog(viewPos0, noise_1, noise_1); - #if defined LPV_VL_FOG_ILLUMINATION && defined IS_LPV_ENABLED + #if (defined LPV_VL_FOG_ILLUMINATION && defined IS_LPV_ENABLED) || (defined FLASHLIGHT && defined FLASHLIGHT_FOG_ILLUMINATION) VolumetricFog.a *= LPV_ILLUMINATION.a; VolumetricFog.rgb = VolumetricFog.rgb * LPV_ILLUMINATION.a + LPV_ILLUMINATION.rgb; #endif @@ -792,7 +861,8 @@ void main() { float z1 = texelFetch(depthtex1, texcoord,0).x; #if defined DISTANT_HORIZONS || defined VOXY - float DH_z1 = texelFetch(dhVoxyDepthTex1, texcoord,0).x; + float DH_z1 = 0.0; + if (z1 >= 1.0) DH_z1 = texelFetch(dhVoxyDepthTex1, texcoord,0).x; #else float DH_z1 = 0.0; #endif @@ -811,7 +881,7 @@ void main() { float estimatedDepth = Vdiff * abs(playerPos_normalized.y); float estimatedSunDepth = Vdiff / abs(WsunVec.y); //assuming water plane - float lightleakfix = clamp(lightmap.y + (1-caveDetection),0.0,1.0); + float lightleakfix = clamp(lightmap.y + (1.0-caveDetection),0.0,1.0); directLightColor *= lightleakfix; @@ -836,5 +906,4 @@ void main() { gl_FragData[1] = clamp(VolumetricFog, 0.0, 65000.0); } - } \ No newline at end of file diff --git a/shaders/dimensions/composite3.fsh b/shaders/dimensions/composite3.fsh index c0b6c02..6d996a4 100644 --- a/shaders/dimensions/composite3.fsh +++ b/shaders/dimensions/composite3.fsh @@ -448,8 +448,6 @@ vec4 VLTemporalFiltering(vec3 viewPos, in float referenceDepth, sampler2D depth, uniform float waterEnteredAltitude; -#define CAVE_FOG_DARKEN_SKY - void blendAllFogTypes( inout vec3 color, inout float bloomyFogMult, vec4 volumetrics, float linearDistance, vec3 playerPos, vec3 cameraPosition, bool isSky, bool isLightning){ // blend cave fog @@ -461,14 +459,14 @@ void blendAllFogTypes( inout vec3 color, inout float bloomyFogMult, vec4 volumet float skyhole = pow(clamp(1.0-pow(max(playerPos.y - 0.6,0.0)*5.0,2.0),0.0,1.0),2); - #if (CAVE_DETECTION == 0.0) || (CAVE_DETECTION == 1.0) - #if (CAVE_DETECTION == 1.0) - float caveFactor = 1-smoothstep(60.0, 63.0, cameraPosition.y); + #if CAVE_DETECTION < 2 + #if CAVE_DETECTION == 1 + float caveFactor = 1.0 - smoothstep(60.0, 63.0, cameraPosition.y); #else - float caveFactor = 1.0; + const float caveFactor = 1.0; #endif #else - float caveFactor = 0.0; + const float caveFactor = 0.0; #endif color.rgb = mix(color.rgb + cavefogCol * caveDetection, cavefogCol, isSky ? skyhole * caveDetection * caveFactor: 0.0); @@ -552,29 +550,17 @@ void main() { float frDepth = linearize(z); - float swappedDepth = z; - #if defined DISTANT_HORIZONS || defined VOXY - float DH_depth0 = texelFetch(dhVoxyDepthTex, ivec2(gl_FragCoord.xy),0).x; - - float depthOpaque = z; - float depthOpaqueL = linearizeDepthFast(depthOpaque, near, farPlane); - - float dhDepthOpaque = DH_depth0; - float dhDepthOpaqueL = linearizeDepthFast(dhDepthOpaque, dhVoxyNearPlane, dhVoxyFarPlane); - if (depthOpaque >= 1.0 || (dhDepthOpaqueL < depthOpaqueL && dhDepthOpaque > 0.0)){ - depthOpaque = dhDepthOpaque; - depthOpaqueL = dhDepthOpaqueL; - } - - swappedDepth = depthOpaque; + float DH_depth0 = 0.0; + bool isDHrange = z >= 1.0; + if(isDHrange) DH_depth0 = texelFetch(dhVoxyDepthTex, ivec2(gl_FragCoord.xy),0).x; + bool isSky = DH_depth0 >= 1.0; #else - float DH_depth0 = 0.0; + bool isSky = z >= 1.0; + float DH_depth0 = 1.0; #endif - bool isSky = swappedDepth >= 1.0; - #if !defined DISTANT_HORIZONS && !defined VOXY || (AURORA_LOCATION > 0 && defined OVERWORLD_SHADER) float z2 = texelFetch(depthtex1, ivec2(gl_FragCoord.xy),0).x; #endif @@ -611,12 +597,12 @@ void main() { ////// --------------- UNPACK TRANSLUCENT GBUFFERS --------------- ////// vec4 data = texelFetch(colortex11,ivec2(texcoord/texelSize),0).rgba; vec4 unpack0 = vec4(decodeVec2(data.r),decodeVec2(data.g)) ; - vec4 unpack1 = vec4(decodeVec2(data.b),decodeVec2(data.a)) ; + vec2 unpack1 = decodeVec2(data.b); - vec4 albedo = vec4(unpack0.ba,unpack1.rg); + vec4 albedo = vec4(unpack0.ba,unpack1); vec2 tangentNormals = unpack0.xy*2.0-1.0; - bool nameTagMask = abs(unpack1.a - 0.1) < 0.01; + bool nameTagMask = abs(data.a - 0.1) < 0.01; float nametagbackground = nameTagMask ? 0.25 : 1.0; if(albedo.a < 0.01) tangentNormals = vec2(0.0); @@ -648,7 +634,16 @@ void main() { ////// --------------- distort texcoords as a refraction effect vec2 refractedCoord = texcoord; #if FAKE_REFRACTION_AMOUNT > 0 - vec3 color = doRefractionEffect(refractedCoord, tangentNormals.xy, linearDistance, isReflectiveEntity, isWater && isEyeInWater == 1); + vec3 color; + #if defined DISTANT_HORIZONS || defined VOXY + if(isDHrange || hand) { + color = texture(colortex3, texcoord).rgb; + } + else + #endif + { + color = doRefractionEffect(refractedCoord, tangentNormals.xy, linearDistance, isReflectiveEntity, isWater && isEyeInWater == 1); + } #else vec3 color = texture(colortex3, texcoord).rgb; #endif @@ -673,12 +668,6 @@ void main() { float z0 = depth < 0.56 ? convertHandDepth(depth) : depth; - #if defined DISTANT_HORIZONS || defined VOXY - float DH_z0 = DH_depth0; - #else - float DH_z0 = 1.0; - #endif - float uvScalar = 3.0 * CUSTOM_LIGHTNING_SCALE; vec3 normLightningpos = normalize(lightningpos); @@ -806,7 +795,7 @@ void main() { ////// --------------- START BLENDING FOGS AND FORWARD RENDERED COLOR vec4 TranslucentShader = texelFetch(colortex2, ivec2(gl_FragCoord.xy), 0); - bool translucentCheck = TranslucentShader.a > 0.0 && TranslucentShader.a < 1.0; + bool translucentCheck = TranslucentShader.a > 0.0 && TranslucentShader.a < 1.0; ////// --------------- AURORA @@ -847,18 +836,19 @@ void main() { borderFog.a = borderFogDensity; #if !defined DISTANT_HORIZONS && !defined VOXY - if(!isWater) color = mix(color, borderFog.rgb, getBorderFogDensity(linearDistance_cylinder_alt, normalize(playerPos_alt), z2 >= 1.0 || TranslucentShader.a <= 0)); + if(!isWater) color = mix(color, borderFog.rgb, getBorderFogDensity(linearDistance_cylinder_alt, normalize(playerPos_alt), z2 >= 1.0 || !translucentCheck)); #endif #else vec4 borderFog = vec4(0.0); #endif // apply block breaking effect. - if(albedo.a > 0.01 && !isWater && TranslucentShader.a <= 0.0 && !isEntity) color = mix(color*6.0, color, luma(albedo.rgb)) * albedo.rgb; + bool isBlockBreaking = data.a > 0.99; + if(albedo.a > 0.01 && !isWater && !isEntity && isBlockBreaking && !hand) color = mix(color*6.0, color, luma(albedo.rgb)) * albedo.rgb; // apply multiplicative color blend for glass n stuff #ifdef Glass_Tint - if(!isWater) color *= mix(normalize(albedo.rgb+1e-7), vec3(1.0), max(borderFog.a, min(max(0.1-albedo.a,0.0) * 10.0,1.0))) ; + if(!isWater && translucentCheck && !isBlockBreaking) color *= mix(normalize(albedo.rgb+1e-7), vec3(1.0), max(borderFog.a, min(max(0.1-albedo.a,0.0) * 10.0,1.0))) ; #endif // blend forward rendered programs onto the color. diff --git a/shaders/dimensions/prepare.csh b/shaders/dimensions/prepare.csh index 217f4e3..a913ae8 100644 --- a/shaders/dimensions/prepare.csh +++ b/shaders/dimensions/prepare.csh @@ -25,9 +25,29 @@ uint GetVoxelBlock(const in ivec3 voxelPos) { uniform bool is_sneaking; uniform float frameTimeCounter; +uniform float frameTime; + +#if IRIS_VERSION >= 11004 + uniform bool onWaterSurface; + uniform int vehicleId; + uniform bool vehicleInWater; + uniform bool feetInWater; + uniform vec3 relativeVehiclePosition; + uniform bool isRiding; +#endif vec2 getPlayerMovementOffset() { - vec2 currentPos = cameraPosition.xz-relativeEyePosition.xz; + vec2 currentPos = cameraPosition.xz; + + #if IRIS_VERSION >= 11004 + if(isRiding) { + currentPos -= relativeVehiclePosition.xz; + } else + #endif + { + currentPos -= relativeEyePosition.xz; + } + vec2 previousPos = previousCameraPositionWave2.xz; vec2 movement = currentPos - previousPos; #if WATER_SIM_SCALE == 0 @@ -40,46 +60,48 @@ vec2 getPlayerMovementOffset() { void main() { #if WATER_INTERACTION == 2 if (abs(frameTimeCounter - lastFrameTimeCount) > WATER_SIM_FRAMETIME) { - float playerTallness = 1.5; - if(is_sneaking) playerTallness = 1.2; - #if !defined IS_LPV_ENABLED && !defined SHADER_GRASS - vec3 rayStart = vec3(0.0); - #else - vec3 rayStart = vec3(-relativeEyePosition); - #endif - vec3 LPVpos = GetLpvPosition(rayStart); - uint BlockID1 = GetVoxelBlock(ivec3(LPVpos)); - uint BlockID2 = GetVoxelBlock(ivec3(LPVpos.x, LPVpos.y - 0.5*playerTallness, LPVpos.z)); - uint BlockID3 = GetVoxelBlock(ivec3(LPVpos.x, LPVpos.y - playerTallness, LPVpos.z)); - - - // Big shenanigans lol, don't ask, it just works - if(noSimOngoingCheck) { - noSimOngoing = true; - } else { - noSimOngoing = false; - } + noSimOngoing = noSimOngoingCheck; noSimOngoingCheck = true; - inShip = false; - onWaterSurface = false; - inBoat = false; - bool inBoat2Frames = inBoatLastFrame; - inBoatLastFrame = inBoatCurrentFrame; - inBoatCurrentFrame = false; - bool inShip2Frames = inShipLastFrame; - inShipLastFrame = inShipCurrentFrame; - inShipCurrentFrame = false; + #if IRIS_VERSION >= 11004 + bool inBoat = vehicleId == ENTITY_BOAT; - if(BlockID1 == BLOCK_WATER || BlockID2 == BLOCK_WATER || BlockID3 == BLOCK_WATER) onWaterSurface = true; + bool inShip = false; + #else + float playerTallness = 1.5; + if(is_sneaking) playerTallness = 1.2; + #if !defined IS_LPV_ENABLED && !defined SHADER_GRASS + vec3 rayStart = vec3(0.0); + #else + vec3 rayStart = vec3(-relativeEyePosition); + #endif + vec3 LPVpos = GetLpvPosition(rayStart); + uint BlockID1 = GetVoxelBlock(ivec3(LPVpos)); + uint BlockID2 = GetVoxelBlock(ivec3(LPVpos.x, LPVpos.y - 0.5*playerTallness, LPVpos.z)); + uint BlockID3 = GetVoxelBlock(ivec3(LPVpos.x, LPVpos.y - playerTallness, LPVpos.z)); - if(BlockID1 == ENTITY_BOAT || BlockID2 == ENTITY_BOAT || BlockID3 == ENTITY_BOAT) inBoatCurrentFrame = true; + // Big shenanigans lol, don't ask, it just works + bool inShip = false; + onWaterSurface = false; + bool inBoat = false; + bool inBoat2Frames = inBoatLastFrame; + inBoatLastFrame = inBoatCurrentFrame; + inBoatCurrentFrame = false; - if(BlockID1 == ENTITY_SMALLSHIPS || BlockID2 == ENTITY_SMALLSHIPS || BlockID3 == ENTITY_SMALLSHIPS) inShipCurrentFrame = true; + bool inShip2Frames = inShipLastFrame; + inShipLastFrame = inShipCurrentFrame; + inShipCurrentFrame = false; - if(inBoatCurrentFrame || inBoatLastFrame || inBoat2Frames) inBoat = true; + if(BlockID1 == BLOCK_WATER || BlockID2 == BLOCK_WATER || BlockID3 == BLOCK_WATER) onWaterSurface = true; - if(inShipCurrentFrame || inShipLastFrame || inShip2Frames) inShip = true; + if(BlockID1 == ENTITY_BOAT || BlockID2 == ENTITY_BOAT || BlockID3 == ENTITY_BOAT) inBoatCurrentFrame = true; + + if(BlockID1 == ENTITY_SMALLSHIPS || BlockID2 == ENTITY_SMALLSHIPS || BlockID3 == ENTITY_SMALLSHIPS) inShipCurrentFrame = true; + + if(inBoatCurrentFrame || inBoatLastFrame || inBoat2Frames) inBoat = true; + + if(inShipCurrentFrame || inShipLastFrame || inShip2Frames) inShip = true; + #endif vec2 playerMovement = getPlayerMovementOffset(); water_move_compensation_counter_SSBO += playerMovement; @@ -90,6 +112,53 @@ void main() { water_move_compensationSSBO = offset; water_move_compensation_counter_SSBO -= vec2(offset); } + + if (onWaterSurface) { + vec3 position = cameraPosition-previousCameraPositionWave; + #if IRIS_VERSION >= 11004 + if(isRiding) { + position -= relativeVehiclePosition; + } else + #endif + { + position -= relativeEyePosition; + } + + vec3 velocity = position/frameTime; + velocity.y *= 1.2; + float speed = length(velocity); + + float size = 10.0; + #if IRIS_VERSION >= 11004 + if(inBoat) { + size += 23.0; + } else if (inShip) { + size += 61.0 * smoothstep(0.0, 10.0, speed); + } else { + size += 10.0 * smoothstep(0.1, 13.0, speed); + } + #else + if(inBoat) { + size += 26.0 * smoothstep(0.0, 10.0, speed); + } else if (inShip) { + size += 61.0 * smoothstep(0.0, 10.0, speed); + } else { + size += 10.0 * smoothstep(0.1, 13.0, speed); + } + #endif + + #if WATER_SIM_SCALE == 0 + size *= 0.5; + #else + size *= WATER_SIM_SCALE; + #endif + + #if IRIS_VERSION >= 11004 + if(speed < 0.15 && isRiding) size = 0.01; + #endif + + waterRoundSize = size; + } } #endif } \ No newline at end of file diff --git a/shaders/dimensions/prepare1.csh b/shaders/dimensions/prepare1.csh index 0cbfd7d..a19122f 100644 --- a/shaders/dimensions/prepare1.csh +++ b/shaders/dimensions/prepare1.csh @@ -43,11 +43,7 @@ layout (rgba16f) uniform image2D waveSim2; const ivec2 resolution = ivec2(workGroups.x * 32, workGroups.y * 32); uniform int frameCounter; -uniform float frameTime; uniform float frameTimeCounter; -uniform vec3 cameraPosition; -uniform vec3 previousCameraPosition; -uniform vec3 relativeEyePosition; #include "/lib/SSBOs.glsl" @@ -61,10 +57,19 @@ uniform vec3 relativeEyePosition; const float delta = 1.4; #endif +#if IRIS_VERSION >= 11004 + uniform bool onWaterSurface; + uniform vec3 vehicleLookVector; + uniform bool isRiding; + uniform int vehicleId; + + #include "/lib/entities.glsl" +#endif + void main() { #if WATER_INTERACTION == 2 if (abs(frameTimeCounter - lastFrameTimeCount) > WATER_SIM_FRAMETIME && (!noSimOngoing || onWaterSurface)) { - if (frameCounter == 0) return; + // if (frameCounter == 0) return; ivec2 imgCoord = ivec2(gl_GlobalInvocationID.xy); float dist = length(imgCoord-0.5*resolution); if (dist >= resolution.x) return; @@ -80,9 +85,9 @@ void main() { float pVel = oldState.y; #if WATER_SIM_FRAMERATE == 30 - int offset = 2; + const int offset = 2; #else - int offset = 1; + const int offset = 1; #endif float p_down = imageLoad(waveSim2, clamp(sampledCoord + ivec2(0, -offset), ivec2(offset), resolution - ivec2(offset))).r; @@ -109,35 +114,33 @@ void main() { pVel -= 0.0014 * delta * pressure; // Velocity damping so things eventually calm down - pVel *= 1.0 - 0.003 * delta; + pVel *= 1.0 - 0.006 * delta; // Pressure damping to prevent it from building up forever. - float distFade = smoothstep(0.49*resolution.x, 0.4*resolution.x, dist); + float distFade = smoothstep(0.49*resolution.x, 0.25*resolution.x, dist); pressure *= 0.985 * distFade; pVel *= distFade; if (onWaterSurface) { - vec3 velocity = (cameraPosition-relativeEyePosition-previousCameraPositionWave)/frameTime; - velocity.y *= 1.15; - float speed = length(velocity); + #if IRIS_VERSION >= 11004 + if(isRiding && vehicleId == ENTITY_BOAT) { + vec2 p = imgCoord - 0.5 * resolution; + vec2 f = normalize(vehicleLookVector.xz); - float size = 10.0; - if(inBoat) { - size += 26.0 * smoothstep(0.0, 10.0, speed); - } else if (inShip) { - size += 61.0 * smoothstep(0.0, 10.0, speed); - } else { - size += 10.0 * smoothstep(0.1, 13.0, speed); - } - #if WATER_SIM_SCALE == 0 - size *= 0.5; - #else - size *= WATER_SIM_SCALE; + float t = dot(p, f); + + t = clamp(t, -waterRoundSize * 0.73, waterRoundSize * 0.73); + + float dist = length(p - f * t); + + float shape = smoothstep(waterRoundSize, 0.7 * waterRoundSize, dist); + + pressure += shape * (smoothstep(-waterRoundSize * 0.75, waterRoundSize * 0.75, t)* 2.0 - 1.0); + } else #endif - - float upOrDown = step(-0.1, cameraPosition.y-relativeEyePosition.y-previousCameraPositionWave.y)*2.0-1.0; - - pressure += smoothstep(size, 0.7*size, dist) * upOrDown; + { + pressure += smoothstep(waterRoundSize, 0.7*waterRoundSize, dist); + } } if(abs(pressure) > 0.0) noSimOngoingCheck = false; diff --git a/shaders/dimensions/prepare2.csh b/shaders/dimensions/prepare2.csh index 298da62..235ed5a 100644 --- a/shaders/dimensions/prepare2.csh +++ b/shaders/dimensions/prepare2.csh @@ -43,11 +43,8 @@ layout (rgba16f) uniform image2D waveSim2; const ivec2 resolution = ivec2(workGroups.x * 32, workGroups.y * 32); uniform int frameCounter; -uniform float frameTime; uniform float frameTimeCounter; -uniform vec3 cameraPosition; -uniform vec3 previousCameraPosition; -uniform vec3 relativeEyePosition; + #include "/lib/SSBOs.glsl" @@ -61,10 +58,19 @@ uniform vec3 relativeEyePosition; const float delta = 1.4; #endif +#if IRIS_VERSION >= 11004 + uniform bool onWaterSurface; + uniform vec3 vehicleLookVector; + uniform bool isRiding; + uniform int vehicleId; + + #include "/lib/entities.glsl" +#endif + void main() { #if WATER_INTERACTION == 2 if (abs(frameTimeCounter - lastFrameTimeCount) > WATER_SIM_FRAMETIME && (!noSimOngoing || onWaterSurface)) { - if (frameCounter == 0) return; + // if (frameCounter == 0) return; ivec2 imgCoord = ivec2(gl_GlobalInvocationID.xy); float dist = length(imgCoord-0.5*resolution); if (dist >= resolution.x) return; @@ -78,9 +84,9 @@ void main() { float pVel = oldState.y; #if WATER_SIM_FRAMERATE == 30 - int offset = 2; + const int offset = 2; #else - int offset = 1; + const int offset = 1; #endif float p_down = imageLoad(waveSim, clamp(sampledCoord + ivec2(0, -offset), ivec2(offset), resolution - ivec2(offset))).r; @@ -107,35 +113,33 @@ void main() { pVel -= 0.0014 * delta * pressure; // Velocity damping so things eventually calm down - pVel *= 1.0 - 0.003 * delta; + pVel *= 1.0 - 0.006 * delta; // Pressure damping to prevent it from building up forever. - float distFade = smoothstep(0.49*resolution.x, 0.4*resolution.x, dist); + float distFade = smoothstep(0.49*resolution.x, 0.25*resolution.x, dist); pressure *= 0.985 * distFade; pVel *= distFade; if (onWaterSurface) { - vec3 velocity = (cameraPosition-relativeEyePosition-previousCameraPositionWave)/frameTime; - velocity.y *= 1.15; - float speed = length(velocity); + #if IRIS_VERSION >= 11004 + if(isRiding && vehicleId == ENTITY_BOAT) { + vec2 p = imgCoord - 0.5 * resolution; + vec2 f = normalize(vehicleLookVector.xz); - float size = 10.0; - if(inBoat) { - size += 26.0 * smoothstep(0.0, 10.0, speed); - } else if (inShip) { - size += 61.0 * smoothstep(0.0, 10.0, speed); - } else { - size += 10.0 * smoothstep(0.1, 13.0, speed); - } - #if WATER_SIM_SCALE == 0 - size *= 0.5; - #else - size *= WATER_SIM_SCALE; + float t = dot(p, f); + + t = clamp(t, -waterRoundSize * 0.73, waterRoundSize * 0.73); + + float dist = length(p - f * t); + + float shape = smoothstep(waterRoundSize, 0.7 * waterRoundSize, dist); + + pressure += shape * (smoothstep(-waterRoundSize * 0.75, waterRoundSize * 0.75, t)* 2.0 - 1.0); + } else #endif - - float upOrDown = step(-0.1, cameraPosition.y-relativeEyePosition.y-previousCameraPositionWave.y)*2.0-1.0; - - pressure += smoothstep(size, 0.7*size, dist) * upOrDown; + { + pressure += smoothstep(waterRoundSize, 0.7*waterRoundSize, dist); + } } imageStore(waveSim2, imgCoord, vec4(pressure, pVel, (p_right - p_left) / 2.0, (p_up - p_down) / 2.0)); diff --git a/shaders/dimensions/prepare3.csh b/shaders/dimensions/prepare3.csh index 8fa129f..d7f0866 100644 --- a/shaders/dimensions/prepare3.csh +++ b/shaders/dimensions/prepare3.csh @@ -9,13 +9,33 @@ uniform float frameTimeCounter; uniform vec3 cameraPosition; uniform vec3 relativeEyePosition; +#if IRIS_VERSION >= 11004 + uniform vec3 relativeVehiclePosition; + uniform bool isRiding; +#endif + void main() { #if WATER_INTERACTION == 2 - if (abs(frameTimeCounter - lastFrameTimeCount) > WATER_SIM_FRAMETIME) { - lastFrameTimeCount = frameTimeCounter; - previousCameraPositionWave2 = cameraPosition-relativeEyePosition; - } + if (abs(frameTimeCounter - lastFrameTimeCount) > WATER_SIM_FRAMETIME) { + lastFrameTimeCount = frameTimeCounter; + + #if IRIS_VERSION >= 11004 + if(isRiding) { + previousCameraPositionWave2 = cameraPosition - relativeVehiclePosition; + } else + #endif + { + previousCameraPositionWave2 = cameraPosition - relativeEyePosition; + } + } - previousCameraPositionWave = cameraPosition-relativeEyePosition; + #if IRIS_VERSION >= 11004 + if(isRiding) { + previousCameraPositionWave = cameraPosition - relativeVehiclePosition; + } else + #endif + { + previousCameraPositionWave = cameraPosition - relativeEyePosition; + } #endif } \ No newline at end of file diff --git a/shaders/dimensions/setup.csh b/shaders/dimensions/setup.csh index f322b59..1351949 100644 --- a/shaders/dimensions/setup.csh +++ b/shaders/dimensions/setup.csh @@ -531,8 +531,8 @@ void main() { } if (blockId == BLOCK_FURNACE_LIT) { - lightColor = vec3(0.8, 0.7, 0.1); - lightRange = 13.0; + lightColor = vec3(0.85, 0.6, 0.12); + lightRange = 12.0; } if (blockId == BLOCK_GLOW_LICHEN || blockId == ITEM_GLOW_LICHEN) { diff --git a/shaders/dimensions/shadowcomp.csh b/shaders/dimensions/shadowcomp.csh index fc1e187..b7960c2 100644 --- a/shaders/dimensions/shadowcomp.csh +++ b/shaders/dimensions/shadowcomp.csh @@ -24,6 +24,7 @@ layout (local_size_x = 8, local_size_y = 8, local_size_z = 8) in; #include "/lib/hsv.glsl" #include "/lib/util.glsl" #include "/lib/blocks.glsl" + #include "/lib/entities.glsl" #include "/lib/lpv_common.glsl" #include "/lib/lpv_blocks.glsl" #include "/lib/lpv_buffer.glsl" @@ -56,6 +57,10 @@ layout (local_size_x = 8, local_size_y = 8, local_size_z = 8) in; uint blockId = imageLoad(imgVoxelMask, voxelPos).r; blockId = blockId % 2000u; + + #if IRIS_VERSION < 11004 + if (blockId == ENTITY_BOAT || blockId == ENTITY_SMALLSHIPS) return BLOCK_EMPTY; + #endif return blockId; } diff --git a/shaders/dimensions/voxy.json b/shaders/dimensions/voxy.json index cf31cf5..085eb8d 100644 --- a/shaders/dimensions/voxy.json +++ b/shaders/dimensions/voxy.json @@ -6,7 +6,7 @@ "version": 1, "opaqueDrawBuffers": [1, 8, 15], "excludeLodsFromVanillaDepth": true, - "translucentDrawBuffers": [2, 7, 14], + "translucentDrawBuffers": [2, 7, 11, 14], #ifdef TAA "taaOffset": "{ const vec2[4] offsets = vec2[4]( @@ -21,7 +21,7 @@ #ifdef TAA_UPSCALING "renderScale": [SCALE_FACTOR, SCALE_FACTOR], #endif - "blending": {-1:"SRC_ALPHA ONE_MINUS_SRC_ALPHA ONE_MINUS_DST_ALPHA ONE"}, + "blending": {-1:"SRC_ALPHA ONE_MINUS_SRC_ALPHA ONE_MINUS_DST_ALPHA ONE", 2:"off"}, "ssbos": {0:"{ mat4 customShadowMatrixSSBO; @@ -33,19 +33,19 @@ vec3 customSunVecSSBO; + #if IRIS_VERSION < 11004 bool onWaterSurface; - bool inBoat; - bool inBoatCurrentFrame; bool inBoatLastFrame; - bool inShip; - bool inShipCurrentFrame; bool inShipLastFrame; + #endif + + float waterRoundSize; float lastFrameTimeCount; @@ -96,6 +96,8 @@ }"}, "useViewportDims": true, "uniforms": [ + "nightVision", + "cloudTime", "noPuddleAreas", "dhVoxyRenderDistance", "worldDay", @@ -146,9 +148,6 @@ "noisetex", "colortex4", "colortex5", - "colortex7", - "colortex8", - "colortex12", "depthtex0", "depthtex1" ] diff --git a/shaders/dimensions/voxy_solid.glsl b/shaders/dimensions/voxy_solid.glsl index f5c5508..17b4015 100644 --- a/shaders/dimensions/voxy_solid.glsl +++ b/shaders/dimensions/voxy_solid.glsl @@ -61,7 +61,7 @@ void voxy_emitFragment(VoxyFragmentParameters parameters) { /////// ----- SSS ON BLOCKS ----- /////// // strong if ( - blockID == BLOCK_SSS_STRONG || blockID == BLOCK_AIR_WAVING + blockID == BLOCK_SSS_STRONG || blockID == BLOCK_AIR_WAVING || blockID == BLOCK_SSS_STRONG_2 ) { SSSAMOUNT = 1.0; } diff --git a/shaders/dimensions/voxy_translucent.glsl b/shaders/dimensions/voxy_translucent.glsl index b1f93ef..8e0d1a8 100644 --- a/shaders/dimensions/voxy_translucent.glsl +++ b/shaders/dimensions/voxy_translucent.glsl @@ -3,6 +3,7 @@ layout (location = 0) out vec4 gbuffer_data_0; layout (location = 1) out vec4 gbuffer_data_1; layout (location = 2) out vec4 gbuffer_data_2; +layout (location = 3) out vec4 gbuffer_data_3; #include "/lib/settings.glsl" #include "/lib/blocks.glsl" @@ -10,6 +11,9 @@ layout (location = 2) out vec4 gbuffer_data_2; #include "/lib/res_params.glsl" #include "/lib/TAA_jitter.glsl" +#undef IS_LPV_ENABLED +#include "/lib/diffuse_lighting.glsl" + #ifdef OVERWORLD_SHADER #include "/lib/scene_controller.glsl" #define CLOUDSHADOWSONLY @@ -121,7 +125,7 @@ float DH_ld(float dist) { vec3 rayTrace(vec3 dir, vec3 position, float dither, float fresnel) { - const float biasAmount = 0.000015; + const float biasAmount = 0.00015; float quality = float(FORWARD_SSR_QUALITY); vec3 clipPosition = DH_toClipSpace3(position); @@ -150,11 +154,15 @@ vec3 rayTrace(vec3 dir, vec3 position, float dither, float fresnel) { if(spos.x < 0 || spos.x > 1 || spos.y < 0 || spos.y > 1) return vec3(1.1); #endif - float sp = texelFetch(vxDepthTexOpaque, ivec2(spos.xy / texelSize), 0).r; - - if (sp < max(minZ, maxZ) && sp > min(minZ, maxZ)) { - return vec3(spos.xy / RENDER_SCALE, sp); - } + float vanillaDepth = texelFetch(depthtex0, ivec2(spos.xy / texelSize), 0).r; + + if(vanillaDepth >= 1.0) { + float sp = texelFetch(vxDepthTexOpaque, ivec2(spos.xy / texelSize), 0).r; + + if (sp < max(minZ, maxZ) && sp > min(minZ, maxZ)) { + return vec3(spos.xy / RENDER_SCALE, sp); + } + } minZ = maxZ - biasAmount / DH_ld(spos.z); maxZ += stepv.z; @@ -248,8 +256,16 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 ) vec3 AmbientLightColor = vec3(0.5); #endif - Indirect_lighting = AmbientLightColor; + vec3 MinimumLightColor = vec3(1.0); + Indirect_lighting = doIndirectLighting(AmbientLightColor, MinimumLightColor, parameters.lightMap.y); + + float indoors = min(max(parameters.lightMap.y-0.5,0.0)/0.4,1.0); + + vec3 lightColor = vec3(TORCH_R,TORCH_G,TORCH_B); + const vec3 lpvPos = vec3(0.0); + Indirect_lighting += doBlockLightLighting(lightColor, parameters.lightMap.x * 0.8, feetPlayerPos, lpvPos); + vec3 FinalColor = (Indirect_lighting + Direct_lighting*indoors) * Albedo; #ifndef VANILLA_LIKE_WATER @@ -305,12 +321,12 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 ) #if defined FORWARD_BACKGROUND_REFLECTION BackgroundReflection = skyCloudsFromTex(mat3(gbufferModelViewInverse) * reflectedVector, colortex4).rgb / 1200.0; #endif - #ifdef WATER_SUN_SPECULAR - SunReflection = (DirectLightColor * Shadows) * GGX(normalize(normals), -normalize(viewPos), normalize(WsunVec2), roughness, f0) * (1.0-Reflections.a); + #if defined OVERWORLD_SHADER && SUN_SPECULAR_MULT > 0 + SunReflection = SUN_SPECULAR_MULT * DirectLightColor * Shadows * GGX(normalize(normals), -normalize(viewPos), normalize(WsunVec2), roughness, f0) * (1.0-Reflections.a); #endif Reflections_Final = mix(FinalColor, mix(BackgroundReflection*SSR_HIT_SKY_MASK, Reflections.rgb, Reflections.a), fresnel); - Reflections_Final += SunReflection*indoors; + Reflections_Final += SunReflection*SSR_HIT_SKY_MASK; gbuffer_data_0.a = gbuffer_data_0.a + (1.0-gbuffer_data_0.a) * fresnel; @@ -328,7 +344,15 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 ) gbuffer_data_1 = vec4(Albedo, material); - gbuffer_data_2 = vec4(1, 1, encodeVec2(parameters.lightMap), 1); + vec4 GLASS_TINT_COLORS = vec4(Albedo, UnchangedAlpha); + + #ifdef BIOME_TINT_WATER + if (isWater) GLASS_TINT_COLORS.rgb = toLinear(parameters.tinting.rgb); + #endif + + gbuffer_data_2 = vec4(encodeVec2(vec2(0.5)), encodeVec2(GLASS_TINT_COLORS.rg), encodeVec2(GLASS_TINT_COLORS.ba), 0.0); + + gbuffer_data_3 = vec4(1, 1, encodeVec2(parameters.lightMap), 1); } } \ No newline at end of file diff --git a/shaders/lang/en_us.lang b/shaders/lang/en_us.lang index 3ac1001..ad26e16 100644 --- a/shaders/lang/en_us.lang +++ b/shaders/lang/en_us.lang @@ -1,6 +1,6 @@ option.SHADER_VERSION_LABEL = §d§lECLIPSE§r - A Bliss Edit prefix.SHADER_VERSION_LABEL = V - value.SHADER_VERSION_LABEL.482 = 5.10.2 + value.SHADER_VERSION_LABEL.482 = 6.0.0 # if you're here to translate, this is not a joke, these do what they say profile.POTATO=§4Potato @@ -17,9 +17,9 @@ profile.ULTRA=§dUltra option.OLD_LIGHTLEAK_FIX = Old Lightleak Fix option.CAVE_DETECTION = Cave detection - value.CAVE_DETECTION.0.0 = ON - value.CAVE_DETECTION.1.0 = Y < 62.0 - value.CAVE_DETECTION.2.0 = OFF + value.CAVE_DETECTION.0 = ON + value.CAVE_DETECTION.1 = Y < 62.0 + value.CAVE_DETECTION.2 = OFF option.sunPathRotation = Sun Angle suffix.sunPathRotation = ° option.sun_illuminance = Sun Brightness @@ -246,6 +246,7 @@ screen.Direct_Light = Direct Light value.LPV_VL_FOG_ILLUMINATION.2 = On option.LPV_VL_FOG_ILLUMINATION_BRIGHTNESS = Fog Light Propagation Brightness suffix.LPV_VL_FOG_ILLUMINATION_BRIGHTNESS=% + option.LPV_VL_FOG_ILLUMINATION_HANDHELD_WATER = Water Fog Handheld Light Propagation option.VANILLA_LIGHTMAP_MASK = Vanilla Lightmap Mask option.LPV_HANDHELD_SHADOWS = Handheld Shadows option.LPV_HANDHELD_SHADOWS_STRENGTH = Handheld Shadows Strength @@ -276,6 +277,7 @@ screen.Ambient_light = Ambient Light option.RAY_COUNT.comment = Helps reduce visual noise of SSRT. §aPERFORMANCE COST:§r High option.RAY_STEPS = Ray Steps option.HANDHELD_LIGHT_RANGE = Handheld Light Range + option.GTAO_SLICES = GTAO Quality screen.SSRT_SETTINGS = SSRT Settings @@ -639,6 +641,14 @@ screen.Climate = Climate Settings option.DARKFOREST_R = Red Amount option.DARKFOREST_G = Green Amount option.DARKFOREST_B = Blue Amount + + screen.PALE_GARDEN = Dark Forest + option.PALE_GARDEN_ENV = Pale Garden Environment + option.PALE_GARDEN_UNIFORM_DENSITY = Uniform Fog Density + option.PALE_GARDEN_CLOUDY_DENSITY = Cloudy Fog Density + option.PALE_GARDEN_R = Red Amount + option.PALE_GARDEN_G = Green Amount + option.PALE_GARDEN_B = Blue Amount screen.World = World screen.Sky_coefficients = Sky Coefficients @@ -1159,6 +1169,9 @@ screen.Climate.comment = Configure settings related to the climate, like seasona screen.DARKFOREST.comment = Configure the environment in this biome type. option.DARKFOREST_ENV.comment = Toggle the environment only for this biome type. The other biome environments remain active even if this one is disabled. + screen.PALE_GARDEN.comment = Configure the environment in this biome type. + option.PALE_GARDEN_ENV.comment = Toggle the environment only for this biome type. The other biome environments remain active even if this one is disabled. + screen.Foliage.comment = Configure settings related to foliage. option.WAVY_PLANTS.comment = Toggle waving plants. §aPERFORMANCE COST:§r very low diff --git a/shaders/lang/zh_cn.lang b/shaders/lang/zh_cn.lang index c1f1629..f1299d5 100644 --- a/shaders/lang/zh_cn.lang +++ b/shaders/lang/zh_cn.lang @@ -1,6 +1,6 @@ option.SHADER_VERSION_LABEL = §d§lECLIPSE§r - Bliss 编辑版 prefix.SHADER_VERSION_LABEL = 版本 - value.SHADER_VERSION_LABEL.482 = 5.10.2 + value.SHADER_VERSION_LABEL.482 = 6.0.0 # 如果你是来翻译的,这不是玩笑,这些选项的功能正如其名 profile.POTATO=§4土豆 (极低配置) @@ -17,9 +17,9 @@ profile.ULTRA=§d极致 option.OLD_LIGHTLEAK_FIX = 旧版漏光修复 option.CAVE_DETECTION = 洞穴检测 - value.CAVE_DETECTION.0.0 = 开启 - value.CAVE_DETECTION.1.0 = Y < 62.0 - value.CAVE_DETECTION.2.0 = 关闭 + value.CAVE_DETECTION.0 = 开启 + value.CAVE_DETECTION.1 = Y < 62.0 + value.CAVE_DETECTION.2 = 关闭 option.sunPathRotation = 太阳角度 suffix.sunPathRotation = ° option.sun_illuminance = 太阳亮度 diff --git a/shaders/lib/PhotonGTAO.glsl b/shaders/lib/PhotonGTAO.glsl index 9b69d0a..f46c6ec 100644 --- a/shaders/lib/PhotonGTAO.glsl +++ b/shaders/lib/PhotonGTAO.glsl @@ -96,7 +96,7 @@ vec3 view_to_screen_space(vec3 view_pos, bool handle_jitter) { // ambient occlusion // --------------------- -#define GTAO_SLICES 2 +#define GTAO_SLICES 2 // [1 2 3 4 5 6 7 8 9 10] #define GTAO_HORIZON_STEPS 3 #define GTAO_RADIUS 2.0 #define GTAO_FALLOFF_START 0.75 @@ -122,7 +122,7 @@ float calculate_maximum_horizon_angle( for (int i = 0; i < GTAO_HORIZON_STEPS; ++i, ray_pos += ray_step) { - float depth = texelFetch(depthtex1, ivec2(clamp(ray_pos,0.0,1.0) * view_res * taau_render_scale - 0.5), 0).x; + float depth = texelFetch(depthtex2, ivec2(clamp(ray_pos,0.0,1.0) * view_res * taau_render_scale - 0.5), 0).x; if (depth == 1.0 || depth < hand_depth || depth == screen_pos.z) continue; diff --git a/shaders/lib/SSBOs.glsl b/shaders/lib/SSBOs.glsl index 7c60a43..d48792a 100644 --- a/shaders/lib/SSBOs.glsl +++ b/shaders/lib/SSBOs.glsl @@ -9,19 +9,19 @@ layout(binding = 0) buffer SSBO1 { vec3 customSunVecSSBO; // 12 bytes + #if IRIS_VERSION < 11004 bool onWaterSurface; // 1 byte - bool inBoat; // 1 byte - bool inBoatCurrentFrame; // 1 byte bool inBoatLastFrame; // 1 byte - bool inShip; // 1 byte - bool inShipCurrentFrame; // 1 byte bool inShipLastFrame; // 1 byte + #endif + + float waterRoundSize; float lastFrameTimeCount; // 4 bytes diff --git a/shaders/lib/blocks.glsl b/shaders/lib/blocks.glsl index 9647119..099220e 100644 --- a/shaders/lib/blocks.glsl +++ b/shaders/lib/blocks.glsl @@ -13,6 +13,7 @@ #define BLOCK_GROUND_WAVING 54 #define BLOCK_GROUND_WAVING_VERTICAL 55 #define BLOCK_AIR_WAVING 56 +#define BLOCK_SSS_STRONG_2 79 #define BLOCK_SSS_STRONG 80 #define BLOCK_SSS_WEAK 81 #define BLOCK_SSS_WEAK_2 82 diff --git a/shaders/lib/climate_settings.glsl b/shaders/lib/climate_settings.glsl index fb049d3..7133914 100644 --- a/shaders/lib/climate_settings.glsl +++ b/shaders/lib/climate_settings.glsl @@ -126,47 +126,23 @@ uniform float isJungles; uniform float isSwamps; uniform float isDarkForests; + uniform float isPaleGarden; uniform float sandStorm; uniform float snowStorm; #endif #ifdef PER_BIOME_ENVIRONMENT - - void BiomeFogColor( - inout vec3 FinalFogColor - ){ - - - // this is a little complicated? lmao - vec3 BiomeColors = vec3(0.0); - BiomeColors.r = isSwamps*SWAMP_R + isJungles*JUNGLE_R + isDarkForests*DARKFOREST_R + sandStorm*1.0 + snowStorm*0.6; - BiomeColors.g = isSwamps*SWAMP_G + isJungles*JUNGLE_G + isDarkForests*DARKFOREST_G + sandStorm*0.5 + snowStorm*0.8; - BiomeColors.b = isSwamps*SWAMP_B + isJungles*JUNGLE_B + isDarkForests*DARKFOREST_B + sandStorm*0.3 + snowStorm*1.0; - - // insure the biome colors are locked to the fog shape and lighting, but not its orignal color. - BiomeColors *= max(dot(FinalFogColor,vec3(0.33333)), MIN_LIGHT_AMOUNT*0.025); - - // these range 0.0-1.0. they will never overlap. - float Inbiome = isJungles+isSwamps+isDarkForests+sandStorm+snowStorm; - - // interpoloate between normal fog colors and biome colors. the transition speeds are conrolled by the biome uniforms. - FinalFogColor = mix(FinalFogColor, BiomeColors, Inbiome); - } - void BiomeFogDensity( inout vec4 UniformDensity, inout vec4 CloudyDensity, float maxDistance ){ - // these range 0.0-1.0. they will never overlap. - float Inbiome = isJungles+isSwamps+isDarkForests+sandStorm+snowStorm; + float Inbiome = clamp(isPaleGarden+isJungles+isSwamps+isDarkForests+sandStorm+snowStorm, 0.0, 1.0); vec2 BiomeFogDensity = vec2(0.0); // x = uniform || y = cloudy - // BiomeFogDensity.x = isSwamps*SWAMP_UNIFORM_DENSITY + isJungles*JUNGLE_UNIFORM_DENSITY + isDarkForests*DARKFOREST_UNIFORM_DENSITY + sandStorm*15 + snowStorm*150; - // BiomeFogDensity.y = isSwamps*SWAMP_CLOUDY_DENSITY + isJungles*JUNGLE_CLOUDY_DENSITY + isDarkForests*DARKFOREST_CLOUDY_DENSITY + sandStorm*255 + snowStorm*255; BiomeFogDensity.x = isSwamps*SWAMP_UNIFORM_DENSITY + isJungles*JUNGLE_UNIFORM_DENSITY + isDarkForests*DARKFOREST_UNIFORM_DENSITY + sandStorm*0.0 + snowStorm*0.01; - BiomeFogDensity.y = isSwamps*SWAMP_CLOUDY_DENSITY + isJungles*JUNGLE_CLOUDY_DENSITY + isDarkForests*DARKFOREST_CLOUDY_DENSITY + sandStorm*0.5 + snowStorm*0.5; + BiomeFogDensity.y = isPaleGarden*PALE_GARDEN_CLOUDY_DENSITY + isSwamps*SWAMP_CLOUDY_DENSITY + isJungles*JUNGLE_CLOUDY_DENSITY + isDarkForests*DARKFOREST_CLOUDY_DENSITY + sandStorm*0.5 + snowStorm*0.5; UniformDensity = mix(UniformDensity, vec4(BiomeFogDensity.x), Inbiome*maxDistance); CloudyDensity = mix(CloudyDensity, vec4(BiomeFogDensity.y), Inbiome*maxDistance); @@ -176,23 +152,17 @@ // this is a little complicated? lmao vec3 BiomeColors = vec3(0.0); - BiomeColors.r = isSwamps*SWAMP_R + isJungles*JUNGLE_R + isDarkForests*DARKFOREST_R + sandStorm*1.0 + snowStorm*0.6; - BiomeColors.g = isSwamps*SWAMP_G + isJungles*JUNGLE_G + isDarkForests*DARKFOREST_G + sandStorm*0.3 + snowStorm*0.8; - BiomeColors.b = isSwamps*SWAMP_B + isJungles*JUNGLE_B + isDarkForests*DARKFOREST_B + sandStorm*0.1 + snowStorm*1.0; - - // insure the biome colors are locked to the fog shape and lighting, but not its orignal color. - // DirectLightCol = BiomeColors * max(dot(DirectLightCol,vec3(0.33333)), MIN_LIGHT_AMOUNT*0.025 + nightVision*0.2); - // IndirectLightCol = BiomeColors * max(dot(IndirectLightCol,vec3(0.33333)), MIN_LIGHT_AMOUNT*0.025 + nightVision*0.2); + BiomeColors.r = isPaleGarden*PALE_GARDEN_R + isSwamps*SWAMP_R + isJungles*JUNGLE_R + isDarkForests*DARKFOREST_R + sandStorm*1.0 + snowStorm*0.6; + BiomeColors.g = isPaleGarden*PALE_GARDEN_G + isSwamps*SWAMP_G + isJungles*JUNGLE_G + isDarkForests*DARKFOREST_G + sandStorm*0.3 + snowStorm*0.8; + BiomeColors.b = isPaleGarden*PALE_GARDEN_B + isSwamps*SWAMP_B + isJungles*JUNGLE_B + isDarkForests*DARKFOREST_B + sandStorm*0.1 + snowStorm*1.0; - DirectLightCol = BiomeColors * max(dot(DirectLightCol,vec3(0.33333)), MIN_LIGHT_AMOUNT*0.025 ); - IndirectLightCol = BiomeColors * max(dot(IndirectLightCol,vec3(0.33333)), MIN_LIGHT_AMOUNT*0.025 ); + DirectLightCol *= BiomeColors; + IndirectLightCol *= BiomeColors; - // these range 0.0-1.0. they will never overlap. - float Inbiome = isJungles+isSwamps+isDarkForests+sandStorm+snowStorm; + float Inbiome = clamp(isPaleGarden+isJungles+isSwamps+isDarkForests+sandStorm+snowStorm, 0.0, 1.0); return Inbiome; } - #endif /////////////////////////////////////////////////////////////////////////////// @@ -200,9 +170,8 @@ /////////////////////////////////////////////////////////////////////////////// #ifdef TIMEOFDAYFOG - // uniform int worldTime; void FogDensities( - inout float Uniform, inout float Cloudy, inout float Rainy, float maxDistance, float DailyWeather_UniformFogDensity, float DailyWeather_CloudyFogDensity + inout float Uniform, inout float Cloudy, float maxDistance, float DailyWeather_UniformFogDensity, float DailyWeather_CloudyFogDensity ) { float Time = worldTime%24000; @@ -217,8 +186,6 @@ vec4 UniformDensity = TOD_Fog_mult * vec4(Morning_Uniform_Fog, Noon_Uniform_Fog, Evening_Uniform_Fog, Night_Uniform_Fog); vec4 CloudyDensity = TOD_Fog_mult * vec4(Morning_Cloudy_Fog, Noon_Cloudy_Fog, Evening_Cloudy_Fog, Night_Cloudy_Fog); - Rainy = Rainy*RainFog_amount; - #ifdef Daily_Weather // let daily weather influence fog densities. UniformDensity = max(UniformDensity, DailyWeather_UniformFogDensity); diff --git a/shaders/lib/diffuse_lighting.glsl b/shaders/lib/diffuse_lighting.glsl index 0ea56de..a9174e0 100644 --- a/shaders/lib/diffuse_lighting.glsl +++ b/shaders/lib/diffuse_lighting.glsl @@ -55,7 +55,7 @@ } else #endif { - samplePos = texelFetch(depthtex2, ivec2(newPos.xy/texelSize),0).x,hand; + samplePos = texelFetch(depthtex2, ivec2(newPos.xy/texelSize),0).x; } if(samplePos < newPos.z && samplePos > 0.0){// && (samplePos <= max(minZ,maxZ) && samplePos >= min(minZ,maxZ))){ @@ -119,7 +119,7 @@ vec3 doBlockLightLighting( // create a smooth falloff at the edges of the voxel volume. float fadeLength = 10.0; // in meters - vec3 cubicRadius = clamp( min(((LpvSize3-1.0) - lpvPos)/fadeLength, lpvPos/fadeLength) ,0.0,1.0); + vec3 cubicRadius = clamp(min(((LpvSize3-1.0) - lpvPos)/fadeLength, lpvPos/fadeLength), 0.0, 1.0); float voxelRangeFalloff = cubicRadius.x*cubicRadius.y*cubicRadius.z; voxelRangeFalloff = 1.0 - pow(1.0-pow(voxelRangeFalloff,1.5),3.0); @@ -137,6 +137,10 @@ vec3 doBlockLightLighting( if (lightRange > 0.0 && firstPersonCamera) handLightCol *= SSRT_Handlight_Shadows(viewPos, depthCheck, -(viewPos + vec3(-0.25, 0.2, 0.0)), noise, normals, hand); #endif + #ifdef WEATHER + handLightCol *= 0.5; + #endif + blockLight += handLightCol; } @@ -149,6 +153,10 @@ vec3 doBlockLightLighting( if (lightRange2 > 0.0 && firstPersonCamera) handLightCol2 *= SSRT_Handlight_Shadows(viewPos, depthCheck, -(viewPos + vec3(0.25, 0.2, 0.0)), noise, normals, hand); #endif + #ifdef WEATHER + handLightCol2 *= 0.5; + #endif + blockLight += handLightCol2; } #endif @@ -173,6 +181,7 @@ vec3 doIndirectLighting( return indirectLight; } +#ifndef VOXY_PROGRAM uniform float centerDepthSmooth; #if defined VIVECRAFT @@ -245,3 +254,4 @@ vec3 calculateFlashlight(in vec2 texcoord, in vec3 viewPos, in vec3 albedo, in v return flashlightDiffuse * vec3(FLASHLIGHT_R,FLASHLIGHT_G,FLASHLIGHT_B); } +#endif diff --git a/shaders/lib/end_fog.glsl b/shaders/lib/end_fog.glsl index de17e00..7155781 100644 --- a/shaders/lib/end_fog.glsl +++ b/shaders/lib/end_fog.glsl @@ -314,23 +314,6 @@ vec4 GetVolumetricFog( float hazeDensity = 0.001 * END_HAZE_DENSTIY; vec3 hazeLighting = vec3(0.37,0.32,0.75) * skyPhase * 0.5; color += (hazeLighting - hazeLighting*exp(-hazeDensity*dd*dL)) * absorbance; - - - #if defined FLASHLIGHT && defined FLASHLIGHT_FOG_ILLUMINATION - vec3 shiftedViewPos = mat3(gbufferModelView)*progressP + vec3(-0.25, 0.2, 0.0); - vec3 shiftedPlayerPos = mat3(gbufferModelViewInverse) * shiftedViewPos; - vec2 scaledViewPos = shiftedViewPos.xy / max(-shiftedViewPos.z - 0.5, 1e-7); - float linearDistance = length(shiftedPlayerPos); - float shiftedLinearDistance = length(scaledViewPos); - - float lightFalloff = 1.0 - clamp(1.0-linearDistance/FLASHLIGHT_RANGE, -0.999,1.0); - lightFalloff = max(exp(-10.0 * FLASHLIGHT_BRIGHTNESS_FALLOFF_MULT * lightFalloff),0.0); - float projectedCircle = clamp(1.0 - shiftedLinearDistance*FLASHLIGHT_SIZE,0.0,1.0); - - vec3 flashlightGlow = vec3(FLASHLIGHT_R,FLASHLIGHT_G,FLASHLIGHT_B) * lightFalloff * projectedCircle * 0.5; - - color += (flashlightGlow - flashlightGlow * exp(-max(stormDensity,0.005)*dd*dL)) * absorbance; - #endif } return vec4(color, absorbance); } diff --git a/shaders/lib/indirect_lighting_effects.glsl b/shaders/lib/indirect_lighting_effects.glsl index ef313c8..b30398c 100644 --- a/shaders/lib/indirect_lighting_effects.glsl +++ b/shaders/lib/indirect_lighting_effects.glsl @@ -266,7 +266,7 @@ vec3 ApplySSRT( #endif #else #ifdef OVERWORLD_SHADER - skycontribution = unchangedIndirect * (max(rayDir.y,pow(1.0-lightmap,2))*0.95+0.05); + skycontribution = unchangedIndirect * (max(rayDir.y,pow(1.0-lightmap,2))*0.95+0.05) * 1.25; #endif #endif diff --git a/shaders/lib/lightning_stuff.glsl b/shaders/lib/lightning_stuff.glsl index d5eb830..2c69f7d 100644 --- a/shaders/lib/lightning_stuff.glsl +++ b/shaders/lib/lightning_stuff.glsl @@ -51,7 +51,7 @@ if(lightningBoltPosition.w > 0.0){ float lightningLight = max(1.0 - length(LightningPos) / 50, 0.0); lightningLight = exp((1.0 - lightningLight) * -15.0) ; #else - float lightDistance = 300.0; + float lightDistance = 150.0; float lightningLight = max(1.0 - length(LightningPos) / lightDistance, 0.0) ; lightningLight = exp((1.0 - lightningLight) * -15.0) ; diff --git a/shaders/lib/nether_fog.glsl b/shaders/lib/nether_fog.glsl index 8e4c6e2..6afd797 100644 --- a/shaders/lib/nether_fog.glsl +++ b/shaders/lib/nether_fog.glsl @@ -119,23 +119,6 @@ vec4 GetVolumetricFog( color += (ceilingSmoke - ceilingSmoke*ceilingSmokeVolumeCoeff) * (absorbance*0.5+0.5); absorbance *= ceilingSmokeVolumeCoeff; - - #if defined FLASHLIGHT && defined FLASHLIGHT_FOG_ILLUMINATION - vec3 shiftedViewPos = mat3(gbufferModelView)*(dist3) + vec3(-0.25, 0.2, 0.0); - vec3 shiftedPlayerPos = mat3(gbufferModelViewInverse) * shiftedViewPos; - vec2 scaledViewPos = shiftedViewPos.xy / max(-shiftedViewPos.z - 0.5, 1e-7); - float linearDistance = length(shiftedPlayerPos); - float shiftedLinearDistance = length(scaledViewPos); - - float lightFalloff = 1.0 - clamp(1.0-linearDistance/FLASHLIGHT_RANGE, -0.999,1.0); - lightFalloff = max(exp(-10.0 * FLASHLIGHT_BRIGHTNESS_FALLOFF_MULT * lightFalloff),0.0); - float projectedCircle = clamp(1.0 - shiftedLinearDistance*FLASHLIGHT_SIZE,0.0,1.0); - - vec3 flashlightGlow = vec3(FLASHLIGHT_R,FLASHLIGHT_G,FLASHLIGHT_B) * lightFalloff * projectedCircle * 0.5; - - color += (flashlightGlow - flashlightGlow * exp(-max(plumeDensity,0.005)*dd*dL)) * absorbance; - #endif - } return vec4(color, absorbance); } \ No newline at end of file diff --git a/shaders/lib/overworld_fog.glsl b/shaders/lib/overworld_fog.glsl index c0e07ba..8eea734 100644 --- a/shaders/lib/overworld_fog.glsl +++ b/shaders/lib/overworld_fog.glsl @@ -15,15 +15,15 @@ float densityAtPosFog(in vec3 pos){ float cloudVol(in vec3 pos, float maxDistance ){ - float fogYstart = FOG_START_HEIGHT+3; + float fogYstart = FOG_START_HEIGHT + 3.0; vec3 samplePos = pos*vec3(1.0,1./24.,1.0); vec3 samplePos2 = pos*vec3(1.0,1./48.,1.0); float uniformFog = 0.0; - float low_gradientFog = exp2(-0.3 * max(pos.y - fogYstart,0.0)); - float medium_gradientFog = exp2(-0.15 * max(pos.y - fogYstart,0.0)); - float high_gradientFog = exp2(-0.06 * max(pos.y - fogYstart,0.0)); + float low_gradientFog = exp2(-0.15 * max(pos.y - fogYstart,0.0)); + float medium_gradientFog = exp2(-0.06 * max(pos.y - fogYstart,0.0)); + float high_gradientFog = exp2(-0.001 * max(pos.y - fogYstart,0.0)); float fog_shape = 0.0; float fog_erosion = 0.0; @@ -33,18 +33,22 @@ float cloudVol(in vec3 pos, float maxDistance ){ } float cloudyFog = max(min(max(fog_shape - 0.6 ,0.0) * 2.0 ,1.0) - fog_erosion * 0.4 , 0.0) * exp(-0.05 * max(pos.y - (fogYstart+20),0.0)); - float rainyFog = (exp2(-0.008 * max(pos.y - fogYstart-500,0.0)) * 0.03 + high_gradientFog) * rainStrength * noPuddleAreas * (1.0 + thunderStrength); + float rainyFog = (high_gradientFog * 0.0085 + medium_gradientFog) * rainStrength * noPuddleAreas * (1.0 + thunderStrength) * RainFog_amount; + + #ifdef PER_BIOME_ENVIRONMENT + rainyFog += high_gradientFog * isPaleGarden * PALE_GARDEN_UNIFORM_DENSITY; + #endif if(sandStorm > 0.0 || snowStorm > 0.0){ - float IntenseFogs = pow(1.0 - densityAtPosFog( (samplePos2 - vec3(frameTimeCounter,0,frameTimeCounter)*15.0) * 100.0),2.0) * mix(1.0, high_gradientFog, snowStorm); + float IntenseFogs = pow(1.0 - densityAtPosFog( (samplePos2 - vec3(frameTimeCounter,0,frameTimeCounter)*15.0) * 100.0),2.0) * mix(1.0, medium_gradientFog, snowStorm); cloudyFog = mix(cloudyFog, IntenseFogs, sandStorm+snowStorm); - medium_gradientFog = mix(medium_gradientFog, 1.0, sandStorm+snowStorm); + low_gradientFog = mix(low_gradientFog, 1.0, sandStorm+snowStorm); } - FogDensities(medium_gradientFog, cloudyFog, rainyFog, maxDistance, SC_fog.x, SC_fog.y); + FogDensities(low_gradientFog, cloudyFog, maxDistance, SC_fog.x, SC_fog.y); - return uniformFog + medium_gradientFog + cloudyFog + rainyFog; + return uniformFog + low_gradientFog + cloudyFog + rainyFog; } float phaseRayleigh(float cosTheta) { @@ -63,10 +67,7 @@ float fogPhase(float lightPoint){ return exponential; } -float phaseCloudFog(float x, float g){ - float gg = g * g; - return (gg * -0.25 + 0.25) * pow(-2.0 * (g * x) + (gg + 1.0), -1.5) / 3.14; -} + uniform ivec2 eyeBrightness; vec4 GetVolumetricFog( @@ -85,7 +86,8 @@ vec4 GetVolumetricFog( int SAMPLECOUNT = VL_SAMPLES; //project pixel position into projected shadowmap space - vec3 playerPos = mat3(gbufferModelViewInverse) * viewPosition + gbufferModelViewInverse[3].xyz; + vec3 dVWorld = mat3(gbufferModelViewInverse) * viewPosition; + vec3 playerPos = dVWorld + gbufferModelViewInverse[3].xyz; // vec3 rayStartPos = playerPos - gbufferModelViewInverse[3].xyz; #ifdef CUSTOM_MOON_ROTATION vec3 fragposition = mat3(customShadowMatrixSSBO) * playerPos + customShadowMatrixSSBO[3].xyz; @@ -101,7 +103,6 @@ vec4 GetVolumetricFog( //we can use a projected vector because its orthographic projection //however we still have to send it to curved shadow map space every step vec3 dV = fragposition - start; - vec3 dVWorld = playerPos - gbufferModelViewInverse[3].xyz; // vec3 nPlayerPos = normalize(playerPos); @@ -132,12 +133,11 @@ vec4 GetVolumetricFog( // float atmosphereAbsorbance = 1.0; vec3 atmosphereAbsorbance = vec3(1.0); - float SdotV = dot(sunVector, normalize(viewPosition)); + float SdotV = dot(sunVector, normalize(playerPos)); ///// ----- fog lighting //Mie phase + somewhat simulates multiple scattering (Horizon zero down cloud approx) - float sunPhase = fogPhase(SdotV)*5.0;// phaseCloudFog(SdotV, 0.9) + phaseCloudFog(SdotV, 0.85) + phaseCloudFog(SdotV, 0.5) * 5.0; - // float sunPhase2 = (phaseCloudFog(SdotV, 0.85) + phaseCloudFog(SdotV, 0.5)) * 5.0; + float sunPhase = fogPhase(SdotV)*5.0; float skyPhase = 0.5 + pow(1.0-pow(1.0-clamp(normalize(playerPos).y*0.5+0.5,0.0,1.0),2.0),5.0)*2.0; float rayL = phaseRayleigh(SdotV); @@ -216,15 +216,14 @@ vec4 GetVolumetricFog( #ifdef PER_BIOME_ENVIRONMENT float maxDistance = inBiome * min(max(1.0 - length(d*dVWorld.xz)/(32*8),0.0)*2.0,1.0); - float densityVol = cloudVol(progressW, maxDistance) * inACave; + float fogDensity = cloudVol(progressW, maxDistance) * inACave; #else - float densityVol = cloudVol(progressW, 0.0) * inACave; + float fogDensity = cloudVol(progressW, 0.0) * inACave; #endif //------------------------------------ //------ MAIN FOG EFFECT //------------------------------------ - float fogDensity = densityVol; float fogVolumeCoeff = exp(-fogDensity*dd*dL); // this is like beer-lambert law or something #ifdef PER_BIOME_ENVIRONMENT @@ -240,39 +239,6 @@ vec4 GetVolumetricFog( color += (lighting - lighting * fogVolumeCoeff) * totalAbsorbance; - #if defined FLASHLIGHT && defined FLASHLIGHT_FOG_ILLUMINATION && !defined VL_CLOUDS_DEFERRED - // vec3 shiftedViewPos = mat3(gbufferModelView)*(progressW-cameraPosition) + vec3(-0.25, 0.2, 0.0); - // vec3 shiftedPlayerPos = mat3(gbufferModelViewInverse) * shiftedViewPos; - vec3 shiftedViewPos; - vec3 shiftedPlayerPos; - float forwardOffset; - - #ifdef VIVECRAFT - if (vivecraftIsVR) { - forwardOffset = 0.0; - shiftedPlayerPos = (progressP) + ( vivecraftRelativeMainHandPos); - shiftedViewPos = shiftedPlayerPos * mat3(vivecraftRelativeMainHandRot); - } else - #endif - { - forwardOffset = 0.5; - shiftedViewPos = mat3(gbufferModelView)*(progressP) + vec3(-0.25, 0.2, 0.0); - shiftedPlayerPos = mat3(gbufferModelViewInverse) * shiftedViewPos; - } - - vec2 scaledViewPos = shiftedViewPos.xy / max(-shiftedViewPos.z - forwardOffset, 1e-7); - float linearDistance = length(shiftedPlayerPos); - float shiftedLinearDistance = length(scaledViewPos); - - float lightFalloff = 1.0 - clamp(1.0-linearDistance/FLASHLIGHT_RANGE, -0.999,1.0); - lightFalloff = max(exp(-10.0 * FLASHLIGHT_BRIGHTNESS_FALLOFF_MULT * lightFalloff),0.0); - float projectedCircle = clamp(1.0 - shiftedLinearDistance*FLASHLIGHT_SIZE,0.0,1.0); - - vec3 flashlightGlow = vec3(FLASHLIGHT_R,FLASHLIGHT_G,FLASHLIGHT_B) * lightFalloff * projectedCircle * 0.5; - - color += (flashlightGlow - flashlightGlow * exp(-max(fogDensity,0.005)*dd*dL)) * totalAbsorbance; - #endif - // kill fog absorbance when in caves. totalAbsorbance *= mix(1.0, fogVolumeCoeff, lightLevelZero); if(totalAbsorbance < 0.01) break; @@ -289,7 +255,7 @@ vec4 GetVolumetricFog( // Pbr for air, yolo mix between mie and rayleigh for water droplets vec3 rL = rC*airCoef.x; - vec3 m = mC*(airCoef.y+densityVol*300.0); + vec3 m = mC*(airCoef.y+fogDensity*300.0); // calculate the atmosphere haze seperately and purely additive to color, do not contribute to absorbtion. vec3 atmosphereVolumeCoeff = exp(-(rL+m)*dd*dL); diff --git a/shaders/lib/settings.glsl b/shaders/lib/settings.glsl index 75e672d..e3f1cde 100644 --- a/shaders/lib/settings.glsl +++ b/shaders/lib/settings.glsl @@ -212,7 +212,7 @@ const float entityShadowDistanceMul = 0.25; // [0.01 0.02 0.03 0.04 0.05 0.10 0. #define RainFog_amount 0.15 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] -#define BLOOMY_FOG 1.0 // [0.0 0.25 0.5 0.75 1.0 1.25 1.5 1.75 2.0 3.0 4.0 6.0 10.0 15.0 20.0] +#define BLOOMY_FOG 0.5 // [0.0 0.25 0.5 0.75 1.0 1.25 1.5 1.75 2.0 3.0 4.0 6.0 10.0 15.0 20.0] #define UNDERWATER_BLOOMY_FOG 1.0 // [0.0 0.25 0.5 0.75 1.0 1.25 1.5 1.75 2.0 3.0 4.0 6.0 10.0 15.0 20.0] #define BLOOM_STRENGTH 1.0 // [0.0 0.25 0.5 0.75 1.0 1.25 1.5 1.75 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 15.0 20.0 25.0 50.0 75.0 100.0] @@ -254,18 +254,25 @@ const float entityShadowDistanceMul = 0.25; // [0.01 0.02 0.03 0.04 0.05 0.10 0. #define JUNGLE_ENV #define JUNGLE_UNIFORM_DENSITY 0.1 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] -#define JUNGLE_CLOUDY_DENSITY 0.2 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] +#define JUNGLE_CLOUDY_DENSITY 0.02 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] #define JUNGLE_R 0.5 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] #define JUNGLE_G 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] -#define JUNGLE_B 0.5 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] +#define JUNGLE_B 0.8 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] #define DARKFOREST_ENV #define DARKFOREST_UNIFORM_DENSITY 0.1 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] -#define DARKFOREST_CLOUDY_DENSITY 0 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] +#define DARKFOREST_CLOUDY_DENSITY 0.05 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] #define DARKFOREST_R 0.3 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] #define DARKFOREST_G 0.4 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] #define DARKFOREST_B 1.0 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] +#define PALE_GARDEN_ENV +#define PALE_GARDEN_UNIFORM_DENSITY 0.13 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] +#define PALE_GARDEN_CLOUDY_DENSITY 0.4 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] +#define PALE_GARDEN_R 0.4 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] +#define PALE_GARDEN_G 0.4 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] +#define PALE_GARDEN_B 0.6 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0] + #define SNOW_STORMS #define SAND_STORMS @@ -276,6 +283,8 @@ const float entityShadowDistanceMul = 0.25; // [0.01 0.02 0.03 0.04 0.05 0.10 0. #endif #ifdef DARKFOREST_ENV #endif +#ifdef PALE_GARDEN_ENV +#endif #ifdef SNOW_STORMS #endif #ifdef SAND_STORMS @@ -464,7 +473,7 @@ uniform vec3 unsigned_WmoonVecSmooth; #define HQ_CLOUD_UPSAMPLE #define CLOUD_MOVEMENT_TYPE 0 // [0 1] -#define Cloud_Speed 2.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0] +#define Cloud_Speed 1.2 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0] #ifdef VOLUMETRIC_CLOUDS #ifndef AMBIENT_LIGHT_ONLY @@ -989,7 +998,7 @@ const vec3 aerochrome_color = mix(vec3(1.0, 0.0, 0.0), vec3(0.715, 0.303, 0.631) #define SELECT_BOX_COL_B 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0] #define OLD_CAVE_DETECTION -#define CAVE_DETECTION 1.0 // [0.0 1.0 2.0] +#define CAVE_DETECTION 1 // [0 1 2] #define FORCE_TRANSLUCENT_GLASS #define ENCHANT_GLINT_BRIGHTNESS 1.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 4.0 5.0] @@ -1074,7 +1083,9 @@ const vec3 aerochrome_color = mix(vec3(1.0, 0.0, 0.0), vec3(0.715, 0.303, 0.631) #define LPV_REDSTONE_LIGHTS //#define LPV_COLORED_CANDLES #define LPV_VL_FOG_ILLUMINATION -#define LPV_VL_FOG_ILLUMINATION_BRIGHTNESS 60 // [0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175 180 185 190 195 200]] +#define LPV_VL_FOG_ILLUMINATION_BRIGHTNESS 50 // [0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175 180 185 190 195 200]] +#define LPV_VL_FOG_ILLUMINATION_HANDHELD_WATER +// #define LPV_VL_FOG_ILLUMINATION_HANDHELD // Fix for making nether/end work until next Iris release to fix shadow matrices //#define LPV_NOSHADOW_HACK @@ -1174,6 +1185,8 @@ const vec3 aerochrome_color = mix(vec3(1.0, 0.0, 0.0), vec3(0.715, 0.303, 0.631) #endif #ifdef RENDER_PLAYER_SHADOWS #endif +#ifdef LPV_VL_FOG_ILLUMINATION_HANDHELD_WATER +#endif #ifdef LPV_VL_FOG_ILLUMINATION #endif #ifdef LPV_VL_FOG_ILLUMINATION_NETHER diff --git a/shaders/lib/specular.glsl b/shaders/lib/specular.glsl index 39d03b4..ae61b9c 100644 --- a/shaders/lib/specular.glsl +++ b/shaders/lib/specular.glsl @@ -112,7 +112,7 @@ float invertLinearizeDepthFast(const in float z) { vec3 rayTraceSpeculars(vec3 dir, vec3 position, float dither, float quality, bool hand, inout float reflectionLength, inout bool depthCheck){ - const float biasAmount = 0.00003; + const float biasAmount = 0.0001; float _near = near; float _far = far; @@ -146,7 +146,7 @@ vec3 rayTraceSpeculars(vec3 dir, vec3 position, float dither, float quality, boo #if (defined VOXY && defined VOXY_REFLECTIONS) || (defined DISTANT_HORIZONS && defined DH_SCREENSPACE_REFLECTIONS) - const float biasAmount2 = 0.000015; + const float biasAmount2 = 0.00005; _near = dhVoxyNearPlane; @@ -293,7 +293,7 @@ vec4 screenSpaceReflections( vec3 raytracePos = rayTraceSpeculars(reflectedVector, viewPos, noise, quality, isHand, reflectionLength, depthCheck); // if (raytracePos.z > 1.001 || distance(gl_FragCoord.xy*texelSize, raytracePos.xy) < 0.002) return reflection; - if (raytracePos.z > 1.001) return reflection; + if (raytracePos.z > 1.00001) return reflection; // use higher LOD as the reflection goes on, to blur it. this helps denoise a little. @@ -486,12 +486,10 @@ vec3 specularReflections( float reflectionVisibilty = getReflectionVisibility(f0, roughness); vec4 enviornmentReflection = vec4(0.0); + float backgroundReflectMask = lightmap; #if (defined DEFERRED_BACKGROUND_REFLECTION || defined FORWARD_BACKGROUND_REFLECTION) || (DEFERRED_SSR_QUALITY > 0 || FORWARD_SSR_QUALITY > 0) if(reflectionVisibilty < 1.0){ - - float backgroundReflectMask = lightmap; - #if defined DEFERRED_BACKGROUND_REFLECTION || defined FORWARD_BACKGROUND_REFLECTION #if !defined OVERWORLD_SHADER vec3 backgroundReflection = volumetricsFromTex(reflectedVector_L, colortex4, roughness).rgb / 1200.0; @@ -531,12 +529,12 @@ vec3 specularReflections( } #endif - #if defined OVERWORLD_SHADER || SUN_SPECULAR_MULT > 0 - vec3 lightSourceReflection = SUN_SPECULAR_MULT * lightColor * GGX(normal, -playerPos, lightPos, roughness, reflectance, metalAlbedoTint); + #if defined OVERWORLD_SHADER && SUN_SPECULAR_MULT > 0 + vec3 lightSourceReflection = backgroundReflectMask*SUN_SPECULAR_MULT * lightColor * GGX(normal, -playerPos, lightPos, roughness, reflectance, metalAlbedoTint); #if DEFERRED_SSR_QUALITY > 0 || FORWARD_SSR_QUALITY > 0 specularReflections += mix(lightSourceReflection, vec3(0.0), enviornmentReflection.a); #else - specularReflections += lightSourceReflection; + specularReflections += lightSourceReflection*backgroundReflectMask; #endif #endif diff --git a/shaders/lib/texture_filtering.glsl b/shaders/lib/texture_filtering.glsl index 60baf2b..3041753 100644 --- a/shaders/lib/texture_filtering.glsl +++ b/shaders/lib/texture_filtering.glsl @@ -44,10 +44,6 @@ vec4 sampleRGSS(sampler2D source, vec2 uv, vec2 pixelSize) { float mipLevelExact = max(0.0, log2(effectiveDerivative / minPixelSize)); - float mipLevelLow = floor(mipLevelExact); - float mipLevelHigh = mipLevelLow + 1.0; - float mipBlend = fract(mipLevelExact); - const vec2 offsets[4] = vec2[]( vec2(0.125, 0.375), vec2(-0.125, -0.375), @@ -55,17 +51,12 @@ vec4 sampleRGSS(sampler2D source, vec2 uv, vec2 pixelSize) { vec2(-0.375, 0.125) ); - vec4 rgssColorLow = vec4(0.0); - vec4 rgssColorHigh = vec4(0.0); + vec4 rgssColor = vec4(0.0); for (int i = 0; i < 4; ++i) { vec2 sampleUV = uv + offsets[i] * pixelSize; - rgssColorLow += textureLod(source, sampleUV, mipLevelLow); - rgssColorHigh += textureLod(source, sampleUV, mipLevelHigh); + rgssColor += textureLod(source, sampleUV, mipLevelExact); } - rgssColorLow *= 0.25; - rgssColorHigh *= 0.25; - - vec4 rgssColor = mix(rgssColorLow, rgssColorHigh, mipBlend); + rgssColor *= 0.25; vec4 nearestColor = sampleNearest(source, uv, pixelSize, du, dv, texelScreenSize); diff --git a/shaders/lib/volumetricClouds.glsl b/shaders/lib/volumetricClouds.glsl index 9571481..fdf62dd 100644 --- a/shaders/lib/volumetricClouds.glsl +++ b/shaders/lib/volumetricClouds.glsl @@ -10,13 +10,14 @@ uniform int worldDay; uniform int worldTime; uniform float moonElevation; uniform float worldTimeSmooth; +uniform float cloudTime; #endif #if CLOUD_MOVEMENT_TYPE == 0 float cloud_movement = (worldTimeSmooth + mod(worldDay,100)*24000.0) / 24.0 * Cloud_Speed; #else - float cloud_movement = frameTimeCounter * Cloud_Speed; + float cloud_movement = cloudTime * Cloud_Speed; #endif float lightningFlashTimer = floor(frameTimeCounter * 11.0); @@ -910,7 +911,7 @@ vec4 raymarchCloud( // normal lightning strikes float horizontalDist = length((newPos.xz) - lightningBoltPosition.xz); if (horizontalDist < 7500.0 && lightningBoltPosition.w > 0.0) { - lightningIntensity = exp(-horizontalDist * 0.006) * density * smoothstep(0.0, 0.02, fract(frameTimeCounter)) * lightningFlash; + lightningIntensity = exp(-horizontalDist * 0.006) * density * lightningFlash; lighting = mix(lighting, vec3(1.3,1.5,3.0), lightningIntensity); } diff --git a/shaders/lib/voxel_write.glsl b/shaders/lib/voxel_write.glsl index da4d5bc..206a3c3 100644 --- a/shaders/lib/voxel_write.glsl +++ b/shaders/lib/voxel_write.glsl @@ -91,7 +91,7 @@ void PopulateShadowVoxel(const in vec3 playerPos) { } #endif - #if WATER_INTERACTION == 2 && !defined COLORWHEEL + #if WATER_INTERACTION == 2 && !defined COLORWHEEL && IRIS_VERSION < 11004 if ( ((renderStage == MC_RENDER_STAGE_ENTITIES && (currentRenderedItemId > 0 || entityId > 0)) || renderStage == MC_RENDER_STAGE_BLOCK_ENTITIES) ) { diff --git a/shaders/shaders.properties b/shaders/shaders.properties index e211ebf..970bf71 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -26,6 +26,8 @@ oldLighting=false separateAo = true rain.depth = false beacon.beam.depth = true +sky = false +stars = false iris.features.optional = ENTITY_TRANSLUCENT REVERSED_CULLING COMPUTE_SHADERS CUSTOM_IMAGES BLOCK_EMISSION_ATTRIBUTE SSBO TESSELLATION_SHADERS FADE_VARIABLE TEXTURE_FILTERING @@ -130,6 +132,7 @@ program.world1/gbuffers_block_translucent.enabled = TRANSLUCENT_ENTITIES && IS_I blend.dh_terrain = off blend.dh_water = SRC_ALPHA ONE_MINUS_SRC_ALPHA ONE_MINUS_DST_ALPHA ONE + blend.dh_water.colortex11 = off #else dhShadow.enabled = false program.world0/dh_terrain.enabled = false @@ -181,6 +184,7 @@ blend.gbuffers_beaconbeam = off blend.gbuffers_water.colortex11 = off blend.gbuffers_hand_water.colortex11 = off blend.gbuffers_basic.colortex11 = off +blend.gbuffers_lightning.colortex11 = off blend.gbuffers_entities_translucent.colortex11 = off # blend.colortex4 = off @@ -200,7 +204,7 @@ alphaTest.gbuffers_beaconbeam = off alphaTest.gbuffers_armor_glint = off alphaTest.gbuffers_damagedblock = off -sliders = RAIN_BRIGHTNESS RAIN_MODE UNDERWATER_BLOOMY_FOG ENCHANT_GLINT_BRIGHTNESS EMISSIVE_TRIMS_STRENGTH RAY_STEPS FISHEYE_STRENGTH SCREENSPACE_CONTACT_SHADOWS PIXELIZATION_STRENGTH MAX_COLORS_PER_CHANNEL RAINBOW_SELECT_BOX CLOUD_SAMPLES AmbientLightThunder_R AmbientLightThunder_G AmbientLightThunder_B GRASS_RANDOMNESS GRASS_WAVY_STRENGTH GRASS_RANGE GRASS_QUALITY GRASS_DENSITY REPLACE_SHORT_GRASS GRASS_THICKNESS_FALLOFF SHORT_GRASS_HEIGHT BASE_GRASS_HEIGHT GRASS_BASE_THICKNESS FILM_GRAIN_STRENGTH PUDDLE_MODE FLASHLIGHT_SHADOWS_STRENGTH LPV_HANDHELD_SHADOWS_STRENGTH AURORA_R AURORA_G AURORA_B AURORA_LOCATION AURORA_MOON AURORA_BRIGHTNESS AURORA_CHANCE WATER_SIM_STRENGTH WATER_SIM_FRAMERATE WATER_SIM_SCALE WATER_SIM_DISTANCE dayStartTick nightStartTick daySpeed nightSpeed FAKE_REFRACTION_AMOUNT FAKE_DISPERSION_AMOUNT REFRACTION_SMUDGE_AMOUNT NORMAL_MAP_MULT DEFERRED_SSR_QUALITY FORWARD_SSR_QUALITY RAINBOW_TIME RAINBOW RAINBOW_DISTANCE RAINBOW_BRIGHTNESS VORTEX_LIGHT_COL_R VORTEX_LIGHT_COL_G VORTEX_LIGHT_COL_B END_LIGHTNING_COL_R END_LIGHTNING_COL_G END_LIGHTNING_COL_B END_HAZE_DENSTIY NETHER_CEILING_SMOKE_DENSITY NETHER_HAZE_DENSITY Max_Filter_Depth_END Min_Shadow_Filter_Radius_END MOON_TIME_OFFSET EARTH_ROTATION_TILT CUSTOM_SHADOWS_QUALITY MOON_LATITUDE MOON_SIZE_SETTING MONTH_LENGTH LIGHTNING_SHADOWS WHITE_BALANCE STARS_BRIGHTNESS STARS_AMOUNT AmbientLightEnd_R AmbientLightEnd_G AmbientLightEnd_B CloudLayer0_distance CloudLayer1_distance CloudLayer2_distance CloudLayer3_distance BLEND_FACTOR_DURING_MOVEMENT CloudLayer0_detail CloudLayer1_detail MIN_LIGHT_AMOUNT_INSIDE CUMULONIMBUS_FADE_TIME CUMULONIMBUS NOISE_RESOLUTION NOISE_INTENSITY NOISE_DROPOFF WAVE_DETAIL DH_CHUNK_FADING CLOUD_MOVEMENT_TYPE LIGHTLEAKFIX_MODE EMISSIVE_ORES_STRENGTH RIPPLE_STRENGTH RIPPLE_INTENSITY CUSTOM_LIGHTNING_SCALE CUSTOM_LIGHTNING_R CUSTOM_LIGHTNING_G CUSTOM_LIGHTNING_B CUSTOM_LIGHTNING_TEX CUSTOM_LIGHTNING_POS_X CUSTOM_LIGHTNING_POS_Y CUSTOM_LIGHTNING_POS_Z CUMULONIMBUS_LIGHTNING_BRIGHTNESS CUMULONIMBUS_LIGHTNING_DELAY ShaderSnow ShaderSnowStrength BorderFogIntensity CAVE_DETECTION ON_FIRE_DISTORT_EFFECT_STRENGTH USE_CUSTOM_SKY_GROUND_LIGHTING_COLORS DIRECTLIGHT_DIFFUSE_R DIRECTLIGHT_DIFFUSE_G DIRECTLIGHT_DIFFUSE_B INDIRECTLIGHT_DIFFUSE_R INDIRECTLIGHT_DIFFUSE_G INDIRECTLIGHT_DIFFUSE_B DIRECTLIGHT_CLOUDS_R DIRECTLIGHT_CLOUDS_G DIRECTLIGHT_CLOUDS_B INDIRECTLIGHT_CLOUDS_R INDIRECTLIGHT_CLOUDS_G INDIRECTLIGHT_CLOUDS_B DIRECTLIGHT_FOG_R DIRECTLIGHT_FOG_G DIRECTLIGHT_FOG_B INDIRECTLIGHT_FOG_R INDIRECTLIGHT_FOG_G INDIRECTLIGHT_FOG_B SKY_GROUND_R SKY_GROUND_G SKY_GROUND_B DOF_DISPERSION_MULT FLASHLIGHT_BRIGHTNESS_MULT FLASHLIGHT_BRIGHTNESS_FALLOFF_MULT FLASHLIGHT_RANGE FLASHLIGHT_SIZE FLASHLIGHT_R FLASHLIGHT_G FLASHLIGHT_B LOW_HEALTH_EFFECT_START CRITICALLY_LOW_HEALTH_EFFECT_START CloudLayer2_scale CloudLayer0_scale CloudLayer1_scale CloudLayer3_scale CloudLayer0_tallness CloudLayer1_tallness EXPOSURE_DARKENING EXPOSURE_BRIGHTENING VIGNETTE_STRENGTH CURVATURE_AMOUNT MINIMUM_WATER_ABSORBANCE CHROMATIC_ABERRATION_STRENGTH SELECT_BOX_COL_R SELECT_BOX_COL_G SELECT_BOX_COL_B LPV_VL_FOG_ILLUMINATION_BRIGHTNESS minRayMarchSteps MOTION_BLUR_STRENGTH OVERDRAW_MAX_DISTANCE DAY0_l3_coverage DAY0_l3_density DAY1_l3_coverage DAY1_l3_density DAY2_l3_coverage DAY2_l3_density DAY3_l3_coverage DAY3_l3_density DAY4_l3_coverage DAY4_l3_density DAY5_l3_coverage DAY5_l3_density DAY6_l3_coverage DAY6_l3_density DAY7_l3_coverage DAY7_l3_density DAY8_l3_coverage DAY8_l3_density DAY9_l3_coverage DAY9_l3_density DAY0_l0_coverage DAY0_l1_coverage DAY0_l2_coverage DAY0_ufog_density DAY0_l0_density DAY0_l1_density DAY0_l2_density DAY0_cfog_density DAY1_l0_coverage DAY1_l1_coverage DAY1_l2_coverage DAY1_ufog_density DAY1_l0_density DAY1_l1_density DAY1_l2_density DAY1_cfog_density DAY2_l0_coverage DAY2_l1_coverage DAY2_l2_coverage DAY2_ufog_density DAY2_l0_density DAY2_l1_density DAY2_l2_density DAY2_cfog_density DAY3_l0_coverage DAY3_l1_coverage DAY3_l2_coverage DAY3_ufog_density DAY3_l0_density DAY3_l1_density DAY3_l2_density DAY3_cfog_density DAY4_l0_coverage DAY4_l1_coverage DAY4_l2_coverage DAY4_ufog_density DAY4_l0_density DAY4_l1_density DAY4_l2_density DAY4_cfog_density DAY5_l0_coverage DAY5_l1_coverage DAY5_l2_coverage DAY5_ufog_density DAY5_l0_density DAY5_l1_density DAY5_l2_density DAY5_cfog_density DAY6_l0_coverage DAY6_l1_coverage DAY6_l2_coverage DAY6_ufog_density DAY6_l0_density DAY6_l1_density DAY6_l2_density DAY6_cfog_density DAY7_l0_coverage DAY7_l1_coverage DAY7_l2_coverage DAY7_ufog_density DAY7_l0_density DAY7_l1_density DAY7_l2_density DAY7_cfog_density DAY8_l0_coverage DAY8_l1_coverage DAY8_l2_coverage DAY8_ufog_density DAY8_l0_density DAY8_l1_density DAY8_l2_density DAY8_cfog_density DAY9_l0_coverage DAY9_l1_coverage DAY9_l2_coverage DAY9_ufog_density DAY9_l0_density DAY9_l1_density DAY9_l2_density DAY9_cfog_density sss_density_multiplier sss_absorbance_multiplier MOTION_AMOUNT TONEMAP WATER_WAVE_SPEED WATER_CAUSTICS_BRIGHTNESS WATER_CAUSTICS_POWER DEBUG_VIEW entityShadowDistanceMul HANDHELD_LIGHT_RANGE CLOUD_SHADOW_AMOUNT CloudLayer0_coverage CloudLayer0_density CloudLayer0_height CloudLayer1_coverage CloudLayer1_density CloudLayer1_height CloudLayer2_coverage CloudLayer2_density CloudLayer2_height CloudLayer3_coverage CloudLayer3_density CloudLayer3_height PLANET_GROUND_BRIGHTNESS FOG_START_HEIGHT WATER_WAVE_STRENGTH SWAMP_UNIFORM_DENSITY SWAMP_CLOUDY_DENSITY SWAMP_R SWAMP_G SWAMP_B JUNGLE_UNIFORM_DENSITY JUNGLE_CLOUDY_DENSITY JUNGLE_R JUNGLE_G JUNGLE_B DARKFOREST_UNIFORM_DENSITY DARKFOREST_CLOUDY_DENSITY DARKFOREST_R DARKFOREST_G DARKFOREST_B NETHER_PLUME_DENSITY END_STORM_DENSTIY LIT_PARTICLE_BRIGHTNESS UPPER_CURVE LOWER_CURVE EMISSIVE_TYPE SCALE_FACTOR ambientsss_brightness SSS_TYPE Cloud_Speed Cloud_Speed_Rain Cloud_Speed_Thunder ORB_ColMult ORB_X ORB_Y ORB_Z ORB_R ORB_G ORB_B TOD_Fog_mult Morning_Uniform_Fog Noon_Uniform_Fog Evening_Uniform_Fog Night_Uniform_Fog Morning_Cloudy_Fog Noon_Cloudy_Fog Evening_Cloudy_Fog Night_Cloudy_Fog Summer_Leaf_R Summer_Leaf_G Summer_Leaf_B Fall_Leaf_R Fall_Leaf_G Fall_Leaf_B Winter_Leaf_R Winter_Leaf_G Winter_Leaf_B Spring_Leaf_R Spring_Leaf_G Spring_Leaf_B Summer_R Summer_G Summer_B Fall_R Fall_G Fall_B Winter_R Winter_G Winter_B Spring_R Spring_G Spring_B Season_Length CaveFogFallOff CaveFogColor_R CaveFogColor_G CaveFogColor_B indirect_effect GI_Strength ambient_brightness AmbientLightRain_R AmbientLightRain_G AmbientLightRain_B AmbientLight_R AmbientLight_G AmbientLight_B Rain_coverage Thunder_coverage Moon_temp Haze_amount RainFog_amount Sun_temp Puddle_Size Puddle_Reflection_Sharpness LabSSS_Curve Emissive_Curve Emissive_Brightness AO_Strength BLOOMY_FOG WAVY_SPEED WAVY_STRENGTH BLOOM_STRENGTH shadowDistance Sky_Brightness fog_coefficientMieR fog_coefficientMieG fog_coefficientMieB sun_illuminance sunColorG sunColorB sunColorR sky_mieg sky_coefficientMieB sky_coefficientMieG sky_coefficientMieR sky_coefficientRayleighB sky_coefficientRayleighG sky_coefficientRayleighR CLOUDS_QUALITY EXPOSURE_MULTIPLIER MIN_LIGHT_AMOUNT TORCH_R TORCH_G TORCH_B TORCH_AMOUNT shadowMapResolution sunPathRotation BLEND_FACTOR VL_SAMPLES Exposure_Speed POM_DEPTH MAX_ITERATIONS MAX_DIST ambientOcclusionLevel SEA_LEVEL moon_illuminance moonColorR moonColorG moonColorB fog_coefficientRayleighR fog_coefficientRayleighG SATURATION Manual_exposure_value focal fstop MANUAL_FOCUS SHADOW_FILTER_SAMPLE_COUNT Max_Filter_Depth VPS_Search_Samples Min_Shadow_Filter_Radius Max_Shadow_Filter_Radius Water_Top_Layer fog_coefficientRayleighB SHARPENING rayMarchSampleCount Dirt_Amount Dirt_Scatter_R Dirt_Scatter_G Dirt_Scatter_B Dirt_Absorb_R Dirt_Absorb_G Dirt_Absorb_B Water_Absorb_R Water_Absorb_G Water_Absorb_B Purkinje_strength Purkinje_strength Purkinje_R Purkinje_G Purkinje_B DoF_Adaptation_Speed Purkinje_Multiplier CROSSTALK VL_RENDER_SCALE BLOOM_QUALITY VL_RENDER_SCALE RAY_COUNT STEPS STEP_LENGTH cloud_LevelOfDetail cloud_ShadowLevelOfDetail cloud_LevelOfDetailLQ cloud_ShadowLevelOfDetailLQ minRayMarchSteps maxRayMarchSteps minRayMarchStepsLQ maxRayMarchStepsLQ fbmAmount fbmPower1 fbmPower2 ROUGHNESS_THRESHOLD SUN_SPECULAR_MULT reflection_quality DOF_QUALITY DOF_ANAMORPHIC_RATIO AEROCHROME_PINKNESS DOF_JITTER_FOCUS JITTER_STRENGTH SHADOWS_GRADE_R MIDS_GRADE_R HIGHLIGHTS_GRADE_R SHADOWS_GRADE_G MIDS_GRADE_G HIGHLIGHTS_GRADE_G SHADOWS_GRADE_B MIDS_GRADE_B HIGHLIGHTS_GRADE_B SHADOWS_GRADE_MUL MIDS_GRADE_MUL HIGHLIGHTS_GRADE_MUL LPV_SATURATION LPV_TINT_SATURATION LPV_NORMAL_STRENGTH +sliders = PALE_GARDEN_UNIFORM_DENSITY PALE_GARDEN_CLOUDY_DENSITY PALE_GARDEN_R PALE_GARDEN_G PALE_GARDEN_B GTAO_SLICES RAIN_BRIGHTNESS RAIN_MODE UNDERWATER_BLOOMY_FOG ENCHANT_GLINT_BRIGHTNESS EMISSIVE_TRIMS_STRENGTH RAY_STEPS FISHEYE_STRENGTH SCREENSPACE_CONTACT_SHADOWS PIXELIZATION_STRENGTH MAX_COLORS_PER_CHANNEL RAINBOW_SELECT_BOX CLOUD_SAMPLES AmbientLightThunder_R AmbientLightThunder_G AmbientLightThunder_B GRASS_RANDOMNESS GRASS_WAVY_STRENGTH GRASS_RANGE GRASS_QUALITY GRASS_DENSITY REPLACE_SHORT_GRASS GRASS_THICKNESS_FALLOFF SHORT_GRASS_HEIGHT BASE_GRASS_HEIGHT GRASS_BASE_THICKNESS FILM_GRAIN_STRENGTH PUDDLE_MODE FLASHLIGHT_SHADOWS_STRENGTH LPV_HANDHELD_SHADOWS_STRENGTH AURORA_R AURORA_G AURORA_B AURORA_LOCATION AURORA_MOON AURORA_BRIGHTNESS AURORA_CHANCE WATER_SIM_STRENGTH WATER_SIM_FRAMERATE WATER_SIM_SCALE WATER_SIM_DISTANCE dayStartTick nightStartTick daySpeed nightSpeed FAKE_REFRACTION_AMOUNT FAKE_DISPERSION_AMOUNT REFRACTION_SMUDGE_AMOUNT NORMAL_MAP_MULT DEFERRED_SSR_QUALITY FORWARD_SSR_QUALITY RAINBOW_TIME RAINBOW RAINBOW_DISTANCE RAINBOW_BRIGHTNESS VORTEX_LIGHT_COL_R VORTEX_LIGHT_COL_G VORTEX_LIGHT_COL_B END_LIGHTNING_COL_R END_LIGHTNING_COL_G END_LIGHTNING_COL_B END_HAZE_DENSTIY NETHER_CEILING_SMOKE_DENSITY NETHER_HAZE_DENSITY Max_Filter_Depth_END Min_Shadow_Filter_Radius_END MOON_TIME_OFFSET EARTH_ROTATION_TILT CUSTOM_SHADOWS_QUALITY MOON_LATITUDE MOON_SIZE_SETTING MONTH_LENGTH LIGHTNING_SHADOWS WHITE_BALANCE STARS_BRIGHTNESS STARS_AMOUNT AmbientLightEnd_R AmbientLightEnd_G AmbientLightEnd_B CloudLayer0_distance CloudLayer1_distance CloudLayer2_distance CloudLayer3_distance BLEND_FACTOR_DURING_MOVEMENT CloudLayer0_detail CloudLayer1_detail MIN_LIGHT_AMOUNT_INSIDE CUMULONIMBUS_FADE_TIME CUMULONIMBUS NOISE_RESOLUTION NOISE_INTENSITY NOISE_DROPOFF WAVE_DETAIL DH_CHUNK_FADING CLOUD_MOVEMENT_TYPE LIGHTLEAKFIX_MODE EMISSIVE_ORES_STRENGTH RIPPLE_STRENGTH RIPPLE_INTENSITY CUSTOM_LIGHTNING_SCALE CUSTOM_LIGHTNING_R CUSTOM_LIGHTNING_G CUSTOM_LIGHTNING_B CUSTOM_LIGHTNING_TEX CUSTOM_LIGHTNING_POS_X CUSTOM_LIGHTNING_POS_Y CUSTOM_LIGHTNING_POS_Z CUMULONIMBUS_LIGHTNING_BRIGHTNESS CUMULONIMBUS_LIGHTNING_DELAY ShaderSnow ShaderSnowStrength BorderFogIntensity CAVE_DETECTION ON_FIRE_DISTORT_EFFECT_STRENGTH USE_CUSTOM_SKY_GROUND_LIGHTING_COLORS DIRECTLIGHT_DIFFUSE_R DIRECTLIGHT_DIFFUSE_G DIRECTLIGHT_DIFFUSE_B INDIRECTLIGHT_DIFFUSE_R INDIRECTLIGHT_DIFFUSE_G INDIRECTLIGHT_DIFFUSE_B DIRECTLIGHT_CLOUDS_R DIRECTLIGHT_CLOUDS_G DIRECTLIGHT_CLOUDS_B INDIRECTLIGHT_CLOUDS_R INDIRECTLIGHT_CLOUDS_G INDIRECTLIGHT_CLOUDS_B DIRECTLIGHT_FOG_R DIRECTLIGHT_FOG_G DIRECTLIGHT_FOG_B INDIRECTLIGHT_FOG_R INDIRECTLIGHT_FOG_G INDIRECTLIGHT_FOG_B SKY_GROUND_R SKY_GROUND_G SKY_GROUND_B DOF_DISPERSION_MULT FLASHLIGHT_BRIGHTNESS_MULT FLASHLIGHT_BRIGHTNESS_FALLOFF_MULT FLASHLIGHT_RANGE FLASHLIGHT_SIZE FLASHLIGHT_R FLASHLIGHT_G FLASHLIGHT_B LOW_HEALTH_EFFECT_START CRITICALLY_LOW_HEALTH_EFFECT_START CloudLayer2_scale CloudLayer0_scale CloudLayer1_scale CloudLayer3_scale CloudLayer0_tallness CloudLayer1_tallness EXPOSURE_DARKENING EXPOSURE_BRIGHTENING VIGNETTE_STRENGTH CURVATURE_AMOUNT MINIMUM_WATER_ABSORBANCE CHROMATIC_ABERRATION_STRENGTH SELECT_BOX_COL_R SELECT_BOX_COL_G SELECT_BOX_COL_B LPV_VL_FOG_ILLUMINATION_BRIGHTNESS minRayMarchSteps MOTION_BLUR_STRENGTH OVERDRAW_MAX_DISTANCE DAY0_l3_coverage DAY0_l3_density DAY1_l3_coverage DAY1_l3_density DAY2_l3_coverage DAY2_l3_density DAY3_l3_coverage DAY3_l3_density DAY4_l3_coverage DAY4_l3_density DAY5_l3_coverage DAY5_l3_density DAY6_l3_coverage DAY6_l3_density DAY7_l3_coverage DAY7_l3_density DAY8_l3_coverage DAY8_l3_density DAY9_l3_coverage DAY9_l3_density DAY0_l0_coverage DAY0_l1_coverage DAY0_l2_coverage DAY0_ufog_density DAY0_l0_density DAY0_l1_density DAY0_l2_density DAY0_cfog_density DAY1_l0_coverage DAY1_l1_coverage DAY1_l2_coverage DAY1_ufog_density DAY1_l0_density DAY1_l1_density DAY1_l2_density DAY1_cfog_density DAY2_l0_coverage DAY2_l1_coverage DAY2_l2_coverage DAY2_ufog_density DAY2_l0_density DAY2_l1_density DAY2_l2_density DAY2_cfog_density DAY3_l0_coverage DAY3_l1_coverage DAY3_l2_coverage DAY3_ufog_density DAY3_l0_density DAY3_l1_density DAY3_l2_density DAY3_cfog_density DAY4_l0_coverage DAY4_l1_coverage DAY4_l2_coverage DAY4_ufog_density DAY4_l0_density DAY4_l1_density DAY4_l2_density DAY4_cfog_density DAY5_l0_coverage DAY5_l1_coverage DAY5_l2_coverage DAY5_ufog_density DAY5_l0_density DAY5_l1_density DAY5_l2_density DAY5_cfog_density DAY6_l0_coverage DAY6_l1_coverage DAY6_l2_coverage DAY6_ufog_density DAY6_l0_density DAY6_l1_density DAY6_l2_density DAY6_cfog_density DAY7_l0_coverage DAY7_l1_coverage DAY7_l2_coverage DAY7_ufog_density DAY7_l0_density DAY7_l1_density DAY7_l2_density DAY7_cfog_density DAY8_l0_coverage DAY8_l1_coverage DAY8_l2_coverage DAY8_ufog_density DAY8_l0_density DAY8_l1_density DAY8_l2_density DAY8_cfog_density DAY9_l0_coverage DAY9_l1_coverage DAY9_l2_coverage DAY9_ufog_density DAY9_l0_density DAY9_l1_density DAY9_l2_density DAY9_cfog_density sss_density_multiplier sss_absorbance_multiplier MOTION_AMOUNT TONEMAP WATER_WAVE_SPEED WATER_CAUSTICS_BRIGHTNESS WATER_CAUSTICS_POWER DEBUG_VIEW entityShadowDistanceMul HANDHELD_LIGHT_RANGE CLOUD_SHADOW_AMOUNT CloudLayer0_coverage CloudLayer0_density CloudLayer0_height CloudLayer1_coverage CloudLayer1_density CloudLayer1_height CloudLayer2_coverage CloudLayer2_density CloudLayer2_height CloudLayer3_coverage CloudLayer3_density CloudLayer3_height PLANET_GROUND_BRIGHTNESS FOG_START_HEIGHT WATER_WAVE_STRENGTH SWAMP_UNIFORM_DENSITY SWAMP_CLOUDY_DENSITY SWAMP_R SWAMP_G SWAMP_B JUNGLE_UNIFORM_DENSITY JUNGLE_CLOUDY_DENSITY JUNGLE_R JUNGLE_G JUNGLE_B DARKFOREST_UNIFORM_DENSITY DARKFOREST_CLOUDY_DENSITY DARKFOREST_R DARKFOREST_G DARKFOREST_B NETHER_PLUME_DENSITY END_STORM_DENSTIY LIT_PARTICLE_BRIGHTNESS UPPER_CURVE LOWER_CURVE EMISSIVE_TYPE SCALE_FACTOR ambientsss_brightness SSS_TYPE Cloud_Speed Cloud_Speed_Rain Cloud_Speed_Thunder ORB_ColMult ORB_X ORB_Y ORB_Z ORB_R ORB_G ORB_B TOD_Fog_mult Morning_Uniform_Fog Noon_Uniform_Fog Evening_Uniform_Fog Night_Uniform_Fog Morning_Cloudy_Fog Noon_Cloudy_Fog Evening_Cloudy_Fog Night_Cloudy_Fog Summer_Leaf_R Summer_Leaf_G Summer_Leaf_B Fall_Leaf_R Fall_Leaf_G Fall_Leaf_B Winter_Leaf_R Winter_Leaf_G Winter_Leaf_B Spring_Leaf_R Spring_Leaf_G Spring_Leaf_B Summer_R Summer_G Summer_B Fall_R Fall_G Fall_B Winter_R Winter_G Winter_B Spring_R Spring_G Spring_B Season_Length CaveFogFallOff CaveFogColor_R CaveFogColor_G CaveFogColor_B indirect_effect GI_Strength ambient_brightness AmbientLightRain_R AmbientLightRain_G AmbientLightRain_B AmbientLight_R AmbientLight_G AmbientLight_B Rain_coverage Thunder_coverage Moon_temp Haze_amount RainFog_amount Sun_temp Puddle_Size Puddle_Reflection_Sharpness LabSSS_Curve Emissive_Curve Emissive_Brightness AO_Strength BLOOMY_FOG WAVY_SPEED WAVY_STRENGTH BLOOM_STRENGTH shadowDistance Sky_Brightness fog_coefficientMieR fog_coefficientMieG fog_coefficientMieB sun_illuminance sunColorG sunColorB sunColorR sky_mieg sky_coefficientMieB sky_coefficientMieG sky_coefficientMieR sky_coefficientRayleighB sky_coefficientRayleighG sky_coefficientRayleighR CLOUDS_QUALITY EXPOSURE_MULTIPLIER MIN_LIGHT_AMOUNT TORCH_R TORCH_G TORCH_B TORCH_AMOUNT shadowMapResolution sunPathRotation BLEND_FACTOR VL_SAMPLES Exposure_Speed POM_DEPTH MAX_ITERATIONS MAX_DIST ambientOcclusionLevel SEA_LEVEL moon_illuminance moonColorR moonColorG moonColorB fog_coefficientRayleighR fog_coefficientRayleighG SATURATION Manual_exposure_value focal fstop MANUAL_FOCUS SHADOW_FILTER_SAMPLE_COUNT Max_Filter_Depth VPS_Search_Samples Min_Shadow_Filter_Radius Max_Shadow_Filter_Radius Water_Top_Layer fog_coefficientRayleighB SHARPENING rayMarchSampleCount Dirt_Amount Dirt_Scatter_R Dirt_Scatter_G Dirt_Scatter_B Dirt_Absorb_R Dirt_Absorb_G Dirt_Absorb_B Water_Absorb_R Water_Absorb_G Water_Absorb_B Purkinje_strength Purkinje_strength Purkinje_R Purkinje_G Purkinje_B DoF_Adaptation_Speed Purkinje_Multiplier CROSSTALK VL_RENDER_SCALE BLOOM_QUALITY VL_RENDER_SCALE RAY_COUNT STEPS STEP_LENGTH cloud_LevelOfDetail cloud_ShadowLevelOfDetail cloud_LevelOfDetailLQ cloud_ShadowLevelOfDetailLQ minRayMarchSteps maxRayMarchSteps minRayMarchStepsLQ maxRayMarchStepsLQ fbmAmount fbmPower1 fbmPower2 ROUGHNESS_THRESHOLD SUN_SPECULAR_MULT reflection_quality DOF_QUALITY DOF_ANAMORPHIC_RATIO AEROCHROME_PINKNESS DOF_JITTER_FOCUS JITTER_STRENGTH SHADOWS_GRADE_R MIDS_GRADE_R HIGHLIGHTS_GRADE_R SHADOWS_GRADE_G MIDS_GRADE_G HIGHLIGHTS_GRADE_G SHADOWS_GRADE_B MIDS_GRADE_B HIGHLIGHTS_GRADE_B SHADOWS_GRADE_MUL MIDS_GRADE_MUL HIGHLIGHTS_GRADE_MUL LPV_SATURATION LPV_TINT_SATURATION LPV_NORMAL_STRENGTH screen.columns=2 screen = \ @@ -255,6 +259,7 @@ SHADER_VERSION_LABEL \ [Ambient_Colors] \ \ indirect_effect [SSRT_SETTINGS] \ + GTAO_SLICES \ AO_in_sunlight AO_Strength \ ambientOcclusionLevel Hand_Held_lights \ HANDHELD_LIGHT_RANGE \ @@ -303,6 +308,7 @@ SHADER_VERSION_LABEL \ LPV_NORMAL_STRENGTH LPV_ENTITY_LIGHTS \ LPV_NOSHADOW_HACK \ LPV_VL_FOG_ILLUMINATION LPV_VL_FOG_ILLUMINATION_BRIGHTNESS \ + LPV_VL_FOG_ILLUMINATION_HANDHELD_WATER \ VANILLA_LIGHTMAP_MASK \ LPV_HANDHELD_SHADOWS LPV_HANDHELD_SHADOWS_STRENGTH \ LPV_HANDHELD_SHADOWS_QUALITY @@ -334,7 +340,7 @@ SHADER_VERSION_LABEL \ screen.Rainbow_Settings = RAINBOW RAINBOW_BRIGHTNESS RAINBOW_DISTANCE RAINBOW_TIME RAINBOW_ONLY_BELOW_CLOUDS ######## CLIMATE screen.Climate.columns=1 - screen.Climate = [Seasons] PER_BIOME_ENVIRONMENT [SWAMP] [JUNGLE] [DARKFOREST] SNOW_STORMS SAND_STORMS + screen.Climate = [Seasons] PER_BIOME_ENVIRONMENT [SWAMP] [JUNGLE] [DARKFOREST] [PALE_GARDEN] SNOW_STORMS SAND_STORMS ## BIOME SPECIFICS screen.SWAMP.columns=1 @@ -346,6 +352,10 @@ SHADER_VERSION_LABEL \ screen.DARKFOREST.columns=1 screen.DARKFOREST = DARKFOREST_ENV DARKFOREST_UNIFORM_DENSITY DARKFOREST_CLOUDY_DENSITY DARKFOREST_R DARKFOREST_G DARKFOREST_B + screen.PALE_GARDEN.columns=1 + screen.PALE_GARDEN = PALE_GARDEN_ENV PALE_GARDEN_UNIFORM_DENSITY PALE_GARDEN_CLOUDY_DENSITY PALE_GARDEN_R PALE_GARDEN_G PALE_GARDEN_B + + ## SEASONS screen.Seasons.columns=1 screen.Seasons = Seasons Season_Length Start_Season [Summer_colors] [Fall_colors] [Winter_colors] [Spring_colors] @@ -515,7 +525,7 @@ SHADER_VERSION_LABEL \ screen.Misc_Settings = [EXPERIMENTAL_STUFF] [DEBUG_STUFF] [LEGACY_STUFF] TRANSLUCENT_ENTITIES [selection_box_outline] [scene_controller] AEROCHROME_MODE AEROCHROME_PINKNESS AEROCHROME_WOOL_ENABLED screen.EXPERIMENTAL_STUFF.columns = 2 - screen.EXPERIMENTAL_STUFF = BLOOMY_PARTICLES BIOME_TINT_WATER HYPER_DETAILED_WAVES LIT_PARTICLE_BRIGHTNESS WATER_CAUSTICS_BRIGHTNESS WATER_CAUSTICS_POWER FORCE_TRANSLUCENT_GLASS LARGE_WAVE_DISPLACEMENT VANILLA_LIKE_WATER INCLUDE_UNLISTED_ENTITIES PIXELATED PIXELIZATION_STRENGTH MAX_COLORS_PER_CHANNEL HARDCODED_EMISSIVES_APPROX TRANSLUCENT_ENTITIES_DITHER_FALLBACK ENCHANT_GLINT_BRIGHTNESS + screen.EXPERIMENTAL_STUFF = BLOOMY_PARTICLES BIOME_TINT_WATER HYPER_DETAILED_WAVES LIT_PARTICLE_BRIGHTNESS WATER_CAUSTICS_BRIGHTNESS WATER_CAUSTICS_POWER FORCE_TRANSLUCENT_GLASS LARGE_WAVE_DISPLACEMENT VANILLA_LIKE_WATER INCLUDE_UNLISTED_ENTITIES PIXELATED PIXELIZATION_STRENGTH MAX_COLORS_PER_CHANNEL HARDCODED_EMISSIVES_APPROX TRANSLUCENT_ENTITIES_DITHER_FALLBACK ENCHANT_GLINT_BRIGHTNESS LPV_VL_FOG_ILLUMINATION_HANDHELD screen.DEBUG_STUFF.columns = 2 screen.DEBUG_STUFF = [the_end_orb] DEBUG_VIEW display_LUT WhiteWorld SSS_view AMBIENT_LIGHT_ONLY LIGHTNING_FLASH DISABLE_ENCHANT_GLINT DISABLE_VANILLA_EMISSIVES PARTICLE_RENDERING_FIX ISOLATE_RESOURCEPACK_SKY CAVE_DETECTION @@ -614,6 +624,12 @@ variable.int.BiomeTransitionTime = 60 uniform.float.isDarkForests = 0.0 #endif +#if defined PALE_GARDEN_ENV && MC_VERSION >= 12104 + uniform.float.isPaleGarden = smooth(if(in(biome, BIOME_PALE_GARDEN), 1,0), 2.0 * BiomeTransitionTime, 0.5 * BiomeTransitionTime) +#else + uniform.float.isPaleGarden = 0.0 +#endif + #ifdef SNOW_STORMS uniform.float.snowStorm = smooth(if(in(biome_category, CAT_ICY), rainStrength, 0), 15, 30) #else @@ -630,7 +646,7 @@ variable.int.BiomeTransitionTime = 60 uniform.float.sandStorm = 0.0; #endif -uniform.float.noPuddleAreas = smooth(if(biome_precipitation != 1, 0,1), 15,15) +uniform.float.noPuddleAreas = smooth(if(biome_precipitation != 1, 0,1), 15, 15) ############################ ####### RANDOM STUFF ####### @@ -739,7 +755,7 @@ uniform.bool.isInHotArea = temperature > 1.0 # using the smooth() function to interpolate to the newest value of eyeAltitude over time, i can make it take a very long time to interpolate. essentially freezing/unfreezing the value in place at any time i need to. # force water surface level to a fixed height if you entered the water from an area in low light levels (caves). if youre above the hardcoded y level, allow it use the current height -variable.float.waterEnteredLowLight = if(eyeBrightness.y < 0.004, max(eyeAltitude, SEA_LEVEL), eyeAltitude) +variable.float.waterEnteredLowLight = if(eyeBrightness.y < 0.004 || frameCounter < 2, max(eyeAltitude, SEA_LEVEL), eyeAltitude) variable.float.freezeTranstion = if(isEyeInWater == 1, 100000000000000.0, 0.0) uniform.float.waterEnteredAltitude = smooth(waterEnteredLowLight, freezeTranstion, freezeTranstion) @@ -898,7 +914,7 @@ variable.float.WsmoothMoonZ = smooth(wMoonZ, smoothTimeFade, smoothTimeFade) uniform.vec3.unsigned_WmoonVecSmooth = vec3(WsmoothMoonX, WsmoothMoonY, WsmoothMoonZ) -variable.float.worldDayTime = fmod(worldDay, 100)*24000 +variable.float.worldDayTime = fmod(worldDay, 100)*24000.0 uniform.float.worldTimeSmooth2 = smooth(worldTime+worldDayTime, smoothTimeFade, smoothTimeFade)-worldDayTime @@ -983,57 +999,61 @@ bufferObject.0 = 1024 program.world1/prepare3.enabled = false program.world0/prepare3.enabled = false -#endif - -#if WATER_SIM_SCALE == 0 - #if WATER_SIM_DISTANCE == 1 - image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 512 512 - image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 512 512 - #endif - #if WATER_SIM_DISTANCE == 2 - image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 1024 1024 - image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 1024 1024 - #endif - #if WATER_SIM_DISTANCE == 3 - image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 1536 1536 - image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 1536 1536 - #endif - #if WATER_SIM_DISTANCE == 4 - image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 2048 2048 - image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 2048 2048 - #endif -#elif WATER_SIM_SCALE == 1 - #if WATER_SIM_DISTANCE == 1 - image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 1024 1024 - image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 1024 1024 - #endif - #if WATER_SIM_DISTANCE == 2 - image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 2048 2048 - image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 2048 2048 - #endif - #if WATER_SIM_DISTANCE == 3 - image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 3072 3072 - image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 3072 3072 - #endif - #if WATER_SIM_DISTANCE == 4 - image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 4096 4096 - image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 4096 4096 - #endif #else - #if WATER_SIM_DISTANCE == 1 - image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 2048 2048 - image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 2048 2048 + #if IRIS_VERSION >= 11004 + uniform.bool.onWaterSurface = vehicleInWater || feetInWater #endif - #if WATER_SIM_DISTANCE == 2 - image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 4096 4096 - image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 4096 4096 - #endif - #if WATER_SIM_DISTANCE == 3 - image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 6144 6144 - image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 6144 6144 - #endif - #if WATER_SIM_DISTANCE == 4 - image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 8192 8192 - image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 8192 8192 + + #if WATER_SIM_SCALE == 0 + #if WATER_SIM_DISTANCE == 1 + image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 512 512 + image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 512 512 + #endif + #if WATER_SIM_DISTANCE == 2 + image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 1024 1024 + image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 1024 1024 + #endif + #if WATER_SIM_DISTANCE == 3 + image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 1536 1536 + image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 1536 1536 + #endif + #if WATER_SIM_DISTANCE == 4 + image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 2048 2048 + image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 2048 2048 + #endif + #elif WATER_SIM_SCALE == 1 + #if WATER_SIM_DISTANCE == 1 + image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 1024 1024 + image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 1024 1024 + #endif + #if WATER_SIM_DISTANCE == 2 + image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 2048 2048 + image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 2048 2048 + #endif + #if WATER_SIM_DISTANCE == 3 + image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 3072 3072 + image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 3072 3072 + #endif + #if WATER_SIM_DISTANCE == 4 + image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 4096 4096 + image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 4096 4096 + #endif + #else + #if WATER_SIM_DISTANCE == 1 + image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 2048 2048 + image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 2048 2048 + #endif + #if WATER_SIM_DISTANCE == 2 + image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 4096 4096 + image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 4096 4096 + #endif + #if WATER_SIM_DISTANCE == 3 + image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 6144 6144 + image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 6144 6144 + #endif + #if WATER_SIM_DISTANCE == 4 + image.waveSim = waveSimSampler RG RG16F HALF_FLOAT false false 8192 8192 + image.waveSim2 = waveSim2Sampler RGBA RGBA16F HALF_FLOAT false false 8192 8192 + #endif #endif #endif \ No newline at end of file diff --git a/shaders/world0_with_aether_flag/clrwl_gbuffers.fsh b/shaders/world0_with_aether_flag/clrwl_gbuffers.fsh new file mode 100644 index 0000000..d0dfe79 --- /dev/null +++ b/shaders/world0_with_aether_flag/clrwl_gbuffers.fsh @@ -0,0 +1,12 @@ +#version 430 compatibility + +#define OVERWORLD_SHADER +#define AETHER_FLAG + +#define WORLD + +#define COLORWHEEL +#define ENTITIES +#define BLOCKENTITIES + +#include "/dimensions/all_solid.fsh" \ No newline at end of file diff --git a/shaders/world0_with_aether_flag/clrwl_gbuffers.vsh b/shaders/world0_with_aether_flag/clrwl_gbuffers.vsh new file mode 100644 index 0000000..e6e130e --- /dev/null +++ b/shaders/world0_with_aether_flag/clrwl_gbuffers.vsh @@ -0,0 +1,13 @@ +#version 430 compatibility + + +#define OVERWORLD_SHADER +#define AETHER_FLAG + +#define WORLD + +#define COLORWHEEL +#define ENTITIES +#define BLOCKENTITIES + +#include "/dimensions/all_solid.vsh" \ No newline at end of file diff --git a/shaders/world0_with_aether_flag/clrwl_gbuffers_damagedblock.fsh b/shaders/world0_with_aether_flag/clrwl_gbuffers_damagedblock.fsh new file mode 100644 index 0000000..e214a20 --- /dev/null +++ b/shaders/world0_with_aether_flag/clrwl_gbuffers_damagedblock.fsh @@ -0,0 +1,10 @@ + +#version 430 compatibility + +#define OVERWORLD_SHADER +#define AETHER_FLAG + +#define DAMAGE_BLOCK_EFFECT +#define COLORWHEEL + +#include "/dimensions/all_particles.fsh" \ No newline at end of file diff --git a/shaders/world0_with_aether_flag/clrwl_gbuffers_damagedblock.vsh b/shaders/world0_with_aether_flag/clrwl_gbuffers_damagedblock.vsh new file mode 100644 index 0000000..e471371 --- /dev/null +++ b/shaders/world0_with_aether_flag/clrwl_gbuffers_damagedblock.vsh @@ -0,0 +1,10 @@ + +#version 430 compatibility + +#define OVERWORLD_SHADER +#define AETHER_FLAG + +#define DAMAGE_BLOCK_EFFECT +#define COLORWHEEL + +#include "/dimensions/all_particles.vsh" \ No newline at end of file diff --git a/shaders/world0_with_aether_flag/clrwl_gbuffers_glint.fsh b/shaders/world0_with_aether_flag/clrwl_gbuffers_glint.fsh new file mode 100644 index 0000000..da590cb --- /dev/null +++ b/shaders/world0_with_aether_flag/clrwl_gbuffers_glint.fsh @@ -0,0 +1,10 @@ + +#version 430 compatibility + +#define OVERWORLD_SHADER +#define AETHER_FLAG + +#define ENCHANT_GLINT +#define COLORWHEEL + +#include "/dimensions/all_vanilla_emissives.fsh" \ No newline at end of file diff --git a/shaders/world0_with_aether_flag/clrwl_gbuffers_glint.vsh b/shaders/world0_with_aether_flag/clrwl_gbuffers_glint.vsh new file mode 100644 index 0000000..709b1e2 --- /dev/null +++ b/shaders/world0_with_aether_flag/clrwl_gbuffers_glint.vsh @@ -0,0 +1,10 @@ + +#version 430 compatibility + +#define OVERWORLD_SHADER +#define AETHER_FLAG + +#define ENCHANT_GLINT +#define COLORWHEEL + +#include "/dimensions/all_vanilla_emissives.vsh" \ No newline at end of file diff --git a/shaders/world0_with_aether_flag/clrwl_gbuffers_translucent.fsh b/shaders/world0_with_aether_flag/clrwl_gbuffers_translucent.fsh new file mode 100644 index 0000000..9689a14 --- /dev/null +++ b/shaders/world0_with_aether_flag/clrwl_gbuffers_translucent.fsh @@ -0,0 +1,13 @@ + +#version 430 compatibility + +#define OVERWORLD_SHADER +#define AETHER_FLAG + +#define WORLD + +#define COLORWHEEL +#define ENTITIES +#define BLOCKENTITIES + +#include "/dimensions/all_translucent.fsh" \ No newline at end of file diff --git a/shaders/world0_with_aether_flag/clrwl_gbuffers_translucent.vsh b/shaders/world0_with_aether_flag/clrwl_gbuffers_translucent.vsh new file mode 100644 index 0000000..484b6ac --- /dev/null +++ b/shaders/world0_with_aether_flag/clrwl_gbuffers_translucent.vsh @@ -0,0 +1,12 @@ +#version 430 compatibility + +#define OVERWORLD_SHADER +#define AETHER_FLAG + +#define WORLD + +#define COLORWHEEL +#define ENTITIES +#define BLOCKENTITIES + +#include "/dimensions/all_translucent.vsh" \ No newline at end of file diff --git a/shaders/world0_with_aether_flag/clrwl_shadow.fsh b/shaders/world0_with_aether_flag/clrwl_shadow.fsh new file mode 100644 index 0000000..cbe0b51 --- /dev/null +++ b/shaders/world0_with_aether_flag/clrwl_shadow.fsh @@ -0,0 +1,37 @@ +#version 430 compatibility + +#include "/lib/settings.glsl" + +in vec4 color; + +in vec2 texcoord; +uniform sampler2D gtexture; +uniform sampler2D noisetex; + +//////////////////////////////VOID MAIN////////////////////////////// +//////////////////////////////VOID MAIN////////////////////////////// +//////////////////////////////VOID MAIN////////////////////////////// +//////////////////////////////VOID MAIN////////////////////////////// +//////////////////////////////VOID MAIN////////////////////////////// + +float blueNoise(){ + return fract(texelFetch(noisetex, ivec2(gl_FragCoord.xy)%512, 0).a + 1.0/1.6180339887 ); +} + +/* RENDERTARGETS: 0 */ + +void main() { + vec4 color = texture(gtexture,texcoord.xy); + vec2 lmcoord; + float ao; + vec4 overlayColor; + + clrwl_computeFragment(color, color, lmcoord, ao, overlayColor); + color.rgb = mix(color.rgb, overlayColor.rgb, overlayColor.a); + + gl_FragData[0] = color; + + #ifdef Stochastic_Transparent_Shadows + if(gl_FragData[0].a < blueNoise()) { discard; return;} + #endif +} diff --git a/shaders/world0_with_aether_flag/clrwl_shadow.vsh b/shaders/world0_with_aether_flag/clrwl_shadow.vsh new file mode 100644 index 0000000..b2a67ab --- /dev/null +++ b/shaders/world0_with_aether_flag/clrwl_shadow.vsh @@ -0,0 +1,296 @@ +#version 430 compatibility + +#if defined IS_LPV_ENABLED + #extension GL_ARB_explicit_attrib_location: enable + #extension GL_ARB_shader_image_load_store: enable +#endif + +#define RENDER_SHADOW + +#define COLORWHEEL + +#include "/lib/SSBOs.glsl" + +#include "/lib/settings.glsl" + +/* +!! DO NOT REMOVE !! +This code is from Chocapic13' shaders +Read the terms of modification and sharing before changing something below please ! +!! DO NOT REMOVE !! +*/ + +out vec2 texcoord; +out vec4 color; + +in vec4 mc_midTexCoord; +in vec4 mc_Entity; + +#define SHADOW_MAP_BIAS 0.5 +const float PI = 3.1415927; + +uniform mat4 shadowProjectionInverse; +uniform mat4 shadowProjection; +uniform mat4 shadowModelViewInverse; +uniform mat4 shadowModelView; +uniform mat4 gbufferModelView; +uniform mat4 gbufferModelViewInverse; +uniform mat4 gbufferProjection; +uniform mat4 gbufferProjectionInverse; +uniform int hideGUI; +uniform vec3 cameraPosition; +uniform vec3 relativeEyePosition; +uniform float frameTimeCounter; +uniform int frameCounter; +uniform float screenBrightness; +uniform vec3 sunVec; +uniform float aspectRatio; +uniform float sunElevation; +uniform vec3 sunPosition; +uniform float lightSign; +uniform float cosFov; +uniform vec3 shadowViewDir; +uniform vec3 shadowCamera; +uniform vec3 shadowLightVec; +uniform float shadowMaxProj; + +uniform int blockEntityId; +uniform int entityId; + +#include "/lib/Shadow_Params.glsl" +#include "/lib/bokeh.glsl" +#include "/lib/blocks.glsl" +#include "/lib/entities.glsl" + +#if defined IS_LPV_ENABLED + #ifdef IRIS_FEATURE_BLOCK_EMISSION_ATTRIBUTE + in vec4 at_midBlock; + #else + in vec3 at_midBlock; + #endif + uniform int currentRenderedItemId; + uniform int renderStage; + + #include "/lib/voxel_common.glsl" + #include "/lib/voxel_write.glsl" +#endif + +const float PI48 = 150.796447372*WAVY_SPEED; +float pi2wt = PI48*frameTimeCounter; + +out float LIGHTNING; + +vec2 calcWave(in vec3 pos) { + + float magnitude = abs(sin(dot(vec4(frameTimeCounter, pos),vec4(1.0,0.005,0.005,0.005)))*0.5+0.72)*0.013; + vec2 ret = (sin(pi2wt*vec2(0.0063,0.0015)*4. - pos.xz + pos.y*0.05)+0.1)*magnitude; + + return ret; +} + +vec3 calcMovePlants(in vec3 pos) { + vec2 move1 = calcWave(pos ); + float move1y = -length(move1); + return vec3(move1.x,move1y,move1.y)*5.*WAVY_STRENGTH/255.0; +} + +vec3 calcWaveLeaves(in vec3 pos, in float fm, in float mm, in float ma, in float f0, in float f1, in float f2, in float f3, in float f4, in float f5) { + + float magnitude = abs(sin(dot(vec4(frameTimeCounter, pos),vec4(1.0,0.005,0.005,0.005)))*0.5+0.72)*0.013; + vec3 ret = (sin(pi2wt*vec3(0.0063,0.0224,0.0015)*1.5 - pos))*magnitude; + + return ret; +} + +vec3 calcMoveLeaves(in vec3 pos, in float f0, in float f1, in float f2, in float f3, in float f4, in float f5, in vec3 amp1, in vec3 amp2) { + vec3 move1 = calcWaveLeaves(pos , 0.0054, 0.0400, 0.0400, 0.0127, 0.0089, 0.0114, 0.0063, 0.0224, 0.0015) * amp1; + return move1*5.*WAVY_STRENGTH/255.; +} +bool intersectCone(float coneHalfAngle, vec3 coneTip , vec3 coneAxis, vec3 rayOrig, vec3 rayDir, float maxZ) +{ + vec3 co = rayOrig - coneTip; + float prod = dot(normalize(co),coneAxis); + if (prod <= -coneHalfAngle) return true; //In view frustrum + + float a = dot(rayDir,coneAxis)*dot(rayDir,coneAxis) - coneHalfAngle*coneHalfAngle; + float b = 2. * (dot(rayDir,coneAxis)*dot(co,coneAxis) - dot(rayDir,co)*coneHalfAngle*coneHalfAngle); + float c = dot(co,coneAxis)*dot(co,coneAxis) - dot(co,co)*coneHalfAngle*coneHalfAngle; + + float det = b*b - 4.*a*c; + if (det < 0.) return false; // No intersection with either forward cone and backward cone + + det = sqrt(det); + float t2 = (-b + det) / (2. * a); + if (t2 <= 0.0 || t2 >= maxZ) return false; //Idk why it works + + return true; +} +#define diagonal3(m) vec3((m)[0].x, (m)[1].y, m[2].z) +#define projMAD(m, v) (diagonal3(m) * (v) + (m)[3].xyz) + + + +// uniform float far; +uniform float dhVoxyFarPlane; + +#include "/lib/DistantHorizons_projections.glsl" + +vec4 toClipSpace3(vec3 viewSpacePosition) { + + // mat4 projection = DH_shadowProjectionTweak(gl_ProjectionMatrix); + + return vec4(projMAD(gl_ProjectionMatrix, viewSpacePosition),1.0); +} +vec3 viewToWorld(vec3 viewPos) { + vec4 pos; + pos.xyz = viewPos; + pos.w = 0.0; + pos = shadowModelViewInverse * pos; + return pos.xyz; +} + +// uniform int renderStage; + +// uniform mat4 gbufferModelViewInverse; +void main() { + texcoord.xy = gl_MultiTexCoord0.xy; + color = gl_Color; + + vec3 position = mat3(gl_ModelViewMatrix) * vec3(gl_Vertex) + gl_ModelViewMatrix[3].xyz; + + + // playerpos = vec4(0.0); + // playerpos = gbufferModelViewInverse * (gl_ModelViewMatrix * gl_Vertex); + + // mat4 Custom_ViewMatrix = BuildShadowViewMatrix(LightDir); + // mat4 Custom_ProjectionMatrix = BuildShadowProjectionMatrix(); + + // position = gl_Vertex.xyz; + + // if((renderStage == 10 || renderStage == 12) && mc_Entity.x != 3000) { + // position = (shadowModelViewInverse * vec4(gl_Vertex.xyz,1.0)).xyz; + // } + + // position = mat3(Custom_ViewMatrix) * position + Custom_ViewMatrix[3].xyz; + + // HHHHHHHHH ITS THE JITTER DOF HERE TO SAY HELLO + // It turns out 'position' above is just viewPos lmao + // #ifdef DOF_JITTER_SHADOW + // // CLIP SPACE + // vec2 jitter = clamp(jitter_offsets[frameCounter % 64], -1.0, 1.0); + // jitter = rotate(radians(float(frameCounter))) * jitter; + // jitter.y *= aspectRatio; + // jitter.x *= DOF_ANAMORPHIC_RATIO; + + // vec4 clipPos = gbufferProjection * vec4(position, 1.0); + + // // CLIP SPACE -> VIEW SPACE + // vec3 viewPos = (gbufferProjectionInverse * clipPos).xyz; + + // // Focus distance + // #if DOF_JITTER_FOCUS < 0 + // float focusMul = clipPos.z - mix(pow(512.0, screenBrightness), 512.0 * screenBrightness, 0.25); + // #else + // float focusMul = clipPos.z - DOF_JITTER_FOCUS; + // #endif + + // // CLIP SPACE -> SHADOW CLIP SPACE + // vec3 jitterViewPos = (gbufferProjectionInverse * vec4(jitter, 1.0, 1.0)).xyz; + // // vec3 jitterFeetPos = (gbufferModelViewInverse * vec4(jitterViewPos, 1.0)).xyz; + // // vec3 jitterShadowViewPos = (shadowModelView * vec4(jitterFeetPos, 1.0)).xyz; + // // vec4 jitterShadowClipPos = gl_ProjectionMatrix * vec4(jitterShadowViewPos, 1.0); + + // // vec4 totalOffset = jitterShadowClipPos * JITTER_STRENGTH * focusMul * 1e-2; + + // position += jitterViewPos * focusMul * 1e-2; + // if(focusMul < 10.0) { + // gl_Position = vec4(-1.0); + // return; + // } + // #endif + + // #if defined IS_LPV_ENABLED || defined WAVY_PLANTS || !defined PLANET_CURVATURE + vec3 playerpos = mat3(shadowModelViewInverse) * position + shadowModelViewInverse[3].xyz; + // #endif + + #if defined IS_LPV_ENABLED && defined MC_GL_ARB_shader_image_load_store + PopulateShadowVoxel(playerpos); + #endif + + // #ifdef WAVY_PLANTS + // bool istopv = gl_MultiTexCoord0.t < mc_midTexCoord.t; + // if ( + // ( + // blockId == BLOCK_GROUND_WAVING || blockId == BLOCK_GROUND_WAVING_VERTICAL || + // blockId == BLOCK_GRASS_SHORT || (blockId == BLOCK_GRASS_TALL_UPPER && istopv) || + // blockId == BLOCK_SAPLING + // ) && length(position.xy) < 24.0 + // ) { + // playerpos += calcMovePlants(playerpos + cameraPosition)*gl_MultiTexCoord1.y; + // position = mat3(shadowModelView) * playerpos + shadowModelView[3].xyz; + // } + + // if (blockId == BLOCK_AIR_WAVING && length(position.xy) < 24.0) { + // playerpos += calcMoveLeaves(playerpos + cameraPosition, 0.0040, 0.0064, 0.0043, 0.0035, 0.0037, 0.0041, vec3(1.0,0.2,1.0), vec3(0.5,0.1,0.5))*gl_MultiTexCoord1.y; + // position = mat3(shadowModelView) * playerpos + shadowModelView[3].xyz; + // } + // #endif + + int blockId = int(mc_Entity.x + 0.5); + + vec3 worldpos = playerpos; + #ifdef WAVY_PLANTS + // also use normal, so up/down facing geometry does not get detatched from its model parts. + bool InterpolateFromBase = gl_MultiTexCoord0.t < max(mc_midTexCoord.t, abs(viewToWorld(normalize(gl_NormalMatrix * gl_Normal)).y)); + + if( + ( + // these wave off of the ground. the area connected to the ground does not wave. + (InterpolateFromBase && (blockId == BLOCK_GRASS_TALL_LOWER || blockId == BLOCK_GROUND_WAVING || blockId == BLOCK_GRASS_SHORT || blockId == BLOCK_SAPLING || blockId == BLOCK_GROUND_WAVING_VERTICAL)) + + // these wave off of the ceiling. the area connected to the ceiling does not wave. + || (!InterpolateFromBase && (blockId == BLOCK_VINE_OTHER)) + + // these wave off of the air. they wave uniformly + || (blockId == BLOCK_GRASS_TALL_UPPER || blockId == BLOCK_AIR_WAVING) + + ) && length(position.xy) < 24.0 + ){ + // apply displacement for waving leaf blocks specifically, overwriting the other waving mode. these wave off of the air. they wave uniformly + if(blockId == BLOCK_AIR_WAVING) { + worldpos += calcMoveLeaves(playerpos + cameraPosition, 0.0040, 0.0064, 0.0043, 0.0035, 0.0037, 0.0041, vec3(1.0,0.2,1.0), vec3(0.5,0.1,0.5))*gl_MultiTexCoord1.y; + } else { + // apply displacement for waving plant blocks + worldpos += calcMovePlants(playerpos + cameraPosition) * max(gl_MultiTexCoord1.y,0.5); + } + } + #endif + + LIGHTNING = 0.0; + if (entityId == ENTITY_LIGHTNING) LIGHTNING = 1.0; + + #ifdef PLANET_CURVATURE + float curvature = length(worldpos) / (16*8); + worldpos.y -= curvature*curvature * CURVATURE_AMOUNT; + #endif + + #ifdef CUSTOM_MOON_ROTATION + position = mat3(customShadowMatrixSSBO) * worldpos + customShadowMatrixSSBO[3].xyz; + #else + position = mat3(shadowModelView) * worldpos + shadowModelView[3].xyz; + #endif + + #ifdef DISTORT_SHADOWMAP + if (entityId == ENTITY_SSS_MEDIUM || entityId == ENTITY_SLIME) + position.xyz = position.xyz - normalize(gl_NormalMatrix * gl_Normal) * 0.25; + + gl_Position = BiasShadowProjection(toClipSpace3(position)); + #else + gl_Position = toClipSpace3(position); + #endif + + + if (blockId == BLOCK_WATER) gl_Position.w = -1.0; + + gl_Position.z /= 6.0; +} \ No newline at end of file diff --git a/shaders/world0_with_aether_flag/voxy.json b/shaders/world0_with_aether_flag/voxy.json new file mode 100644 index 0000000..6e2c405 --- /dev/null +++ b/shaders/world0_with_aether_flag/voxy.json @@ -0,0 +1 @@ +#include "/dimensions/voxy.json" \ No newline at end of file diff --git a/shaders/world0_with_aether_flag/voxy_opaque.glsl b/shaders/world0_with_aether_flag/voxy_opaque.glsl new file mode 100644 index 0000000..799bbf7 --- /dev/null +++ b/shaders/world0_with_aether_flag/voxy_opaque.glsl @@ -0,0 +1,3 @@ +#define OVERWORLD_SHADER +#define AETHER_FLAG +#include "/dimensions/voxy_solid.glsl" \ No newline at end of file diff --git a/shaders/world0_with_aether_flag/voxy_translucent.glsl b/shaders/world0_with_aether_flag/voxy_translucent.glsl new file mode 100644 index 0000000..eb48971 --- /dev/null +++ b/shaders/world0_with_aether_flag/voxy_translucent.glsl @@ -0,0 +1,3 @@ +#define OVERWORLD_SHADER +#define AETHER_FLAG +#include "/dimensions/voxy_translucent.glsl" \ No newline at end of file diff --git a/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers.fsh b/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers.fsh new file mode 100644 index 0000000..ecb5af9 --- /dev/null +++ b/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers.fsh @@ -0,0 +1,12 @@ +#version 430 compatibility + +#define OVERWORLD_SHADER +#define TWILIGHT_FOREST_FLAG + +#define WORLD + +#define COLORWHEEL +#define ENTITIES +#define BLOCKENTITIES + +#include "/dimensions/all_solid.fsh" \ No newline at end of file diff --git a/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers.vsh b/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers.vsh new file mode 100644 index 0000000..62334e8 --- /dev/null +++ b/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers.vsh @@ -0,0 +1,13 @@ +#version 430 compatibility + + +#define OVERWORLD_SHADER +#define TWILIGHT_FOREST_FLAG + +#define WORLD + +#define COLORWHEEL +#define ENTITIES +#define BLOCKENTITIES + +#include "/dimensions/all_solid.vsh" \ No newline at end of file diff --git a/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers_damagedblock.fsh b/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers_damagedblock.fsh new file mode 100644 index 0000000..30e885c --- /dev/null +++ b/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers_damagedblock.fsh @@ -0,0 +1,10 @@ + +#version 430 compatibility + +#define OVERWORLD_SHADER +#define TWILIGHT_FOREST_FLAG + +#define DAMAGE_BLOCK_EFFECT +#define COLORWHEEL + +#include "/dimensions/all_particles.fsh" \ No newline at end of file diff --git a/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers_damagedblock.vsh b/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers_damagedblock.vsh new file mode 100644 index 0000000..1621681 --- /dev/null +++ b/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers_damagedblock.vsh @@ -0,0 +1,10 @@ + +#version 430 compatibility + +#define OVERWORLD_SHADER +#define TWILIGHT_FOREST_FLAG + +#define DAMAGE_BLOCK_EFFECT +#define COLORWHEEL + +#include "/dimensions/all_particles.vsh" \ No newline at end of file diff --git a/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers_glint.fsh b/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers_glint.fsh new file mode 100644 index 0000000..99b7608 --- /dev/null +++ b/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers_glint.fsh @@ -0,0 +1,10 @@ + +#version 430 compatibility + +#define OVERWORLD_SHADER +#define TWILIGHT_FOREST_FLAG + +#define ENCHANT_GLINT +#define COLORWHEEL + +#include "/dimensions/all_vanilla_emissives.fsh" \ No newline at end of file diff --git a/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers_glint.vsh b/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers_glint.vsh new file mode 100644 index 0000000..e2eb063 --- /dev/null +++ b/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers_glint.vsh @@ -0,0 +1,10 @@ + +#version 430 compatibility + +#define OVERWORLD_SHADER +#define TWILIGHT_FOREST_FLAG + +#define ENCHANT_GLINT +#define COLORWHEEL + +#include "/dimensions/all_vanilla_emissives.vsh" \ No newline at end of file diff --git a/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers_translucent.fsh b/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers_translucent.fsh new file mode 100644 index 0000000..8aaea69 --- /dev/null +++ b/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers_translucent.fsh @@ -0,0 +1,13 @@ + +#version 430 compatibility + +#define OVERWORLD_SHADER +#define TWILIGHT_FOREST_FLAG + +#define WORLD + +#define COLORWHEEL +#define ENTITIES +#define BLOCKENTITIES + +#include "/dimensions/all_translucent.fsh" \ No newline at end of file diff --git a/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers_translucent.vsh b/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers_translucent.vsh new file mode 100644 index 0000000..76e9624 --- /dev/null +++ b/shaders/world0_with_twilight_forest_flag/clrwl_gbuffers_translucent.vsh @@ -0,0 +1,12 @@ +#version 430 compatibility + +#define OVERWORLD_SHADER +#define TWILIGHT_FOREST_FLAG + +#define WORLD + +#define COLORWHEEL +#define ENTITIES +#define BLOCKENTITIES + +#include "/dimensions/all_translucent.vsh" \ No newline at end of file diff --git a/shaders/world0_with_twilight_forest_flag/clrwl_shadow.fsh b/shaders/world0_with_twilight_forest_flag/clrwl_shadow.fsh new file mode 100644 index 0000000..cbe0b51 --- /dev/null +++ b/shaders/world0_with_twilight_forest_flag/clrwl_shadow.fsh @@ -0,0 +1,37 @@ +#version 430 compatibility + +#include "/lib/settings.glsl" + +in vec4 color; + +in vec2 texcoord; +uniform sampler2D gtexture; +uniform sampler2D noisetex; + +//////////////////////////////VOID MAIN////////////////////////////// +//////////////////////////////VOID MAIN////////////////////////////// +//////////////////////////////VOID MAIN////////////////////////////// +//////////////////////////////VOID MAIN////////////////////////////// +//////////////////////////////VOID MAIN////////////////////////////// + +float blueNoise(){ + return fract(texelFetch(noisetex, ivec2(gl_FragCoord.xy)%512, 0).a + 1.0/1.6180339887 ); +} + +/* RENDERTARGETS: 0 */ + +void main() { + vec4 color = texture(gtexture,texcoord.xy); + vec2 lmcoord; + float ao; + vec4 overlayColor; + + clrwl_computeFragment(color, color, lmcoord, ao, overlayColor); + color.rgb = mix(color.rgb, overlayColor.rgb, overlayColor.a); + + gl_FragData[0] = color; + + #ifdef Stochastic_Transparent_Shadows + if(gl_FragData[0].a < blueNoise()) { discard; return;} + #endif +} diff --git a/shaders/world0_with_twilight_forest_flag/clrwl_shadow.vsh b/shaders/world0_with_twilight_forest_flag/clrwl_shadow.vsh new file mode 100644 index 0000000..b2a67ab --- /dev/null +++ b/shaders/world0_with_twilight_forest_flag/clrwl_shadow.vsh @@ -0,0 +1,296 @@ +#version 430 compatibility + +#if defined IS_LPV_ENABLED + #extension GL_ARB_explicit_attrib_location: enable + #extension GL_ARB_shader_image_load_store: enable +#endif + +#define RENDER_SHADOW + +#define COLORWHEEL + +#include "/lib/SSBOs.glsl" + +#include "/lib/settings.glsl" + +/* +!! DO NOT REMOVE !! +This code is from Chocapic13' shaders +Read the terms of modification and sharing before changing something below please ! +!! DO NOT REMOVE !! +*/ + +out vec2 texcoord; +out vec4 color; + +in vec4 mc_midTexCoord; +in vec4 mc_Entity; + +#define SHADOW_MAP_BIAS 0.5 +const float PI = 3.1415927; + +uniform mat4 shadowProjectionInverse; +uniform mat4 shadowProjection; +uniform mat4 shadowModelViewInverse; +uniform mat4 shadowModelView; +uniform mat4 gbufferModelView; +uniform mat4 gbufferModelViewInverse; +uniform mat4 gbufferProjection; +uniform mat4 gbufferProjectionInverse; +uniform int hideGUI; +uniform vec3 cameraPosition; +uniform vec3 relativeEyePosition; +uniform float frameTimeCounter; +uniform int frameCounter; +uniform float screenBrightness; +uniform vec3 sunVec; +uniform float aspectRatio; +uniform float sunElevation; +uniform vec3 sunPosition; +uniform float lightSign; +uniform float cosFov; +uniform vec3 shadowViewDir; +uniform vec3 shadowCamera; +uniform vec3 shadowLightVec; +uniform float shadowMaxProj; + +uniform int blockEntityId; +uniform int entityId; + +#include "/lib/Shadow_Params.glsl" +#include "/lib/bokeh.glsl" +#include "/lib/blocks.glsl" +#include "/lib/entities.glsl" + +#if defined IS_LPV_ENABLED + #ifdef IRIS_FEATURE_BLOCK_EMISSION_ATTRIBUTE + in vec4 at_midBlock; + #else + in vec3 at_midBlock; + #endif + uniform int currentRenderedItemId; + uniform int renderStage; + + #include "/lib/voxel_common.glsl" + #include "/lib/voxel_write.glsl" +#endif + +const float PI48 = 150.796447372*WAVY_SPEED; +float pi2wt = PI48*frameTimeCounter; + +out float LIGHTNING; + +vec2 calcWave(in vec3 pos) { + + float magnitude = abs(sin(dot(vec4(frameTimeCounter, pos),vec4(1.0,0.005,0.005,0.005)))*0.5+0.72)*0.013; + vec2 ret = (sin(pi2wt*vec2(0.0063,0.0015)*4. - pos.xz + pos.y*0.05)+0.1)*magnitude; + + return ret; +} + +vec3 calcMovePlants(in vec3 pos) { + vec2 move1 = calcWave(pos ); + float move1y = -length(move1); + return vec3(move1.x,move1y,move1.y)*5.*WAVY_STRENGTH/255.0; +} + +vec3 calcWaveLeaves(in vec3 pos, in float fm, in float mm, in float ma, in float f0, in float f1, in float f2, in float f3, in float f4, in float f5) { + + float magnitude = abs(sin(dot(vec4(frameTimeCounter, pos),vec4(1.0,0.005,0.005,0.005)))*0.5+0.72)*0.013; + vec3 ret = (sin(pi2wt*vec3(0.0063,0.0224,0.0015)*1.5 - pos))*magnitude; + + return ret; +} + +vec3 calcMoveLeaves(in vec3 pos, in float f0, in float f1, in float f2, in float f3, in float f4, in float f5, in vec3 amp1, in vec3 amp2) { + vec3 move1 = calcWaveLeaves(pos , 0.0054, 0.0400, 0.0400, 0.0127, 0.0089, 0.0114, 0.0063, 0.0224, 0.0015) * amp1; + return move1*5.*WAVY_STRENGTH/255.; +} +bool intersectCone(float coneHalfAngle, vec3 coneTip , vec3 coneAxis, vec3 rayOrig, vec3 rayDir, float maxZ) +{ + vec3 co = rayOrig - coneTip; + float prod = dot(normalize(co),coneAxis); + if (prod <= -coneHalfAngle) return true; //In view frustrum + + float a = dot(rayDir,coneAxis)*dot(rayDir,coneAxis) - coneHalfAngle*coneHalfAngle; + float b = 2. * (dot(rayDir,coneAxis)*dot(co,coneAxis) - dot(rayDir,co)*coneHalfAngle*coneHalfAngle); + float c = dot(co,coneAxis)*dot(co,coneAxis) - dot(co,co)*coneHalfAngle*coneHalfAngle; + + float det = b*b - 4.*a*c; + if (det < 0.) return false; // No intersection with either forward cone and backward cone + + det = sqrt(det); + float t2 = (-b + det) / (2. * a); + if (t2 <= 0.0 || t2 >= maxZ) return false; //Idk why it works + + return true; +} +#define diagonal3(m) vec3((m)[0].x, (m)[1].y, m[2].z) +#define projMAD(m, v) (diagonal3(m) * (v) + (m)[3].xyz) + + + +// uniform float far; +uniform float dhVoxyFarPlane; + +#include "/lib/DistantHorizons_projections.glsl" + +vec4 toClipSpace3(vec3 viewSpacePosition) { + + // mat4 projection = DH_shadowProjectionTweak(gl_ProjectionMatrix); + + return vec4(projMAD(gl_ProjectionMatrix, viewSpacePosition),1.0); +} +vec3 viewToWorld(vec3 viewPos) { + vec4 pos; + pos.xyz = viewPos; + pos.w = 0.0; + pos = shadowModelViewInverse * pos; + return pos.xyz; +} + +// uniform int renderStage; + +// uniform mat4 gbufferModelViewInverse; +void main() { + texcoord.xy = gl_MultiTexCoord0.xy; + color = gl_Color; + + vec3 position = mat3(gl_ModelViewMatrix) * vec3(gl_Vertex) + gl_ModelViewMatrix[3].xyz; + + + // playerpos = vec4(0.0); + // playerpos = gbufferModelViewInverse * (gl_ModelViewMatrix * gl_Vertex); + + // mat4 Custom_ViewMatrix = BuildShadowViewMatrix(LightDir); + // mat4 Custom_ProjectionMatrix = BuildShadowProjectionMatrix(); + + // position = gl_Vertex.xyz; + + // if((renderStage == 10 || renderStage == 12) && mc_Entity.x != 3000) { + // position = (shadowModelViewInverse * vec4(gl_Vertex.xyz,1.0)).xyz; + // } + + // position = mat3(Custom_ViewMatrix) * position + Custom_ViewMatrix[3].xyz; + + // HHHHHHHHH ITS THE JITTER DOF HERE TO SAY HELLO + // It turns out 'position' above is just viewPos lmao + // #ifdef DOF_JITTER_SHADOW + // // CLIP SPACE + // vec2 jitter = clamp(jitter_offsets[frameCounter % 64], -1.0, 1.0); + // jitter = rotate(radians(float(frameCounter))) * jitter; + // jitter.y *= aspectRatio; + // jitter.x *= DOF_ANAMORPHIC_RATIO; + + // vec4 clipPos = gbufferProjection * vec4(position, 1.0); + + // // CLIP SPACE -> VIEW SPACE + // vec3 viewPos = (gbufferProjectionInverse * clipPos).xyz; + + // // Focus distance + // #if DOF_JITTER_FOCUS < 0 + // float focusMul = clipPos.z - mix(pow(512.0, screenBrightness), 512.0 * screenBrightness, 0.25); + // #else + // float focusMul = clipPos.z - DOF_JITTER_FOCUS; + // #endif + + // // CLIP SPACE -> SHADOW CLIP SPACE + // vec3 jitterViewPos = (gbufferProjectionInverse * vec4(jitter, 1.0, 1.0)).xyz; + // // vec3 jitterFeetPos = (gbufferModelViewInverse * vec4(jitterViewPos, 1.0)).xyz; + // // vec3 jitterShadowViewPos = (shadowModelView * vec4(jitterFeetPos, 1.0)).xyz; + // // vec4 jitterShadowClipPos = gl_ProjectionMatrix * vec4(jitterShadowViewPos, 1.0); + + // // vec4 totalOffset = jitterShadowClipPos * JITTER_STRENGTH * focusMul * 1e-2; + + // position += jitterViewPos * focusMul * 1e-2; + // if(focusMul < 10.0) { + // gl_Position = vec4(-1.0); + // return; + // } + // #endif + + // #if defined IS_LPV_ENABLED || defined WAVY_PLANTS || !defined PLANET_CURVATURE + vec3 playerpos = mat3(shadowModelViewInverse) * position + shadowModelViewInverse[3].xyz; + // #endif + + #if defined IS_LPV_ENABLED && defined MC_GL_ARB_shader_image_load_store + PopulateShadowVoxel(playerpos); + #endif + + // #ifdef WAVY_PLANTS + // bool istopv = gl_MultiTexCoord0.t < mc_midTexCoord.t; + // if ( + // ( + // blockId == BLOCK_GROUND_WAVING || blockId == BLOCK_GROUND_WAVING_VERTICAL || + // blockId == BLOCK_GRASS_SHORT || (blockId == BLOCK_GRASS_TALL_UPPER && istopv) || + // blockId == BLOCK_SAPLING + // ) && length(position.xy) < 24.0 + // ) { + // playerpos += calcMovePlants(playerpos + cameraPosition)*gl_MultiTexCoord1.y; + // position = mat3(shadowModelView) * playerpos + shadowModelView[3].xyz; + // } + + // if (blockId == BLOCK_AIR_WAVING && length(position.xy) < 24.0) { + // playerpos += calcMoveLeaves(playerpos + cameraPosition, 0.0040, 0.0064, 0.0043, 0.0035, 0.0037, 0.0041, vec3(1.0,0.2,1.0), vec3(0.5,0.1,0.5))*gl_MultiTexCoord1.y; + // position = mat3(shadowModelView) * playerpos + shadowModelView[3].xyz; + // } + // #endif + + int blockId = int(mc_Entity.x + 0.5); + + vec3 worldpos = playerpos; + #ifdef WAVY_PLANTS + // also use normal, so up/down facing geometry does not get detatched from its model parts. + bool InterpolateFromBase = gl_MultiTexCoord0.t < max(mc_midTexCoord.t, abs(viewToWorld(normalize(gl_NormalMatrix * gl_Normal)).y)); + + if( + ( + // these wave off of the ground. the area connected to the ground does not wave. + (InterpolateFromBase && (blockId == BLOCK_GRASS_TALL_LOWER || blockId == BLOCK_GROUND_WAVING || blockId == BLOCK_GRASS_SHORT || blockId == BLOCK_SAPLING || blockId == BLOCK_GROUND_WAVING_VERTICAL)) + + // these wave off of the ceiling. the area connected to the ceiling does not wave. + || (!InterpolateFromBase && (blockId == BLOCK_VINE_OTHER)) + + // these wave off of the air. they wave uniformly + || (blockId == BLOCK_GRASS_TALL_UPPER || blockId == BLOCK_AIR_WAVING) + + ) && length(position.xy) < 24.0 + ){ + // apply displacement for waving leaf blocks specifically, overwriting the other waving mode. these wave off of the air. they wave uniformly + if(blockId == BLOCK_AIR_WAVING) { + worldpos += calcMoveLeaves(playerpos + cameraPosition, 0.0040, 0.0064, 0.0043, 0.0035, 0.0037, 0.0041, vec3(1.0,0.2,1.0), vec3(0.5,0.1,0.5))*gl_MultiTexCoord1.y; + } else { + // apply displacement for waving plant blocks + worldpos += calcMovePlants(playerpos + cameraPosition) * max(gl_MultiTexCoord1.y,0.5); + } + } + #endif + + LIGHTNING = 0.0; + if (entityId == ENTITY_LIGHTNING) LIGHTNING = 1.0; + + #ifdef PLANET_CURVATURE + float curvature = length(worldpos) / (16*8); + worldpos.y -= curvature*curvature * CURVATURE_AMOUNT; + #endif + + #ifdef CUSTOM_MOON_ROTATION + position = mat3(customShadowMatrixSSBO) * worldpos + customShadowMatrixSSBO[3].xyz; + #else + position = mat3(shadowModelView) * worldpos + shadowModelView[3].xyz; + #endif + + #ifdef DISTORT_SHADOWMAP + if (entityId == ENTITY_SSS_MEDIUM || entityId == ENTITY_SLIME) + position.xyz = position.xyz - normalize(gl_NormalMatrix * gl_Normal) * 0.25; + + gl_Position = BiasShadowProjection(toClipSpace3(position)); + #else + gl_Position = toClipSpace3(position); + #endif + + + if (blockId == BLOCK_WATER) gl_Position.w = -1.0; + + gl_Position.z /= 6.0; +} \ No newline at end of file diff --git a/shaders/world0_with_twilight_forest_flag/voxy.json b/shaders/world0_with_twilight_forest_flag/voxy.json new file mode 100644 index 0000000..6e2c405 --- /dev/null +++ b/shaders/world0_with_twilight_forest_flag/voxy.json @@ -0,0 +1 @@ +#include "/dimensions/voxy.json" \ No newline at end of file diff --git a/shaders/world0_with_twilight_forest_flag/voxy_opaque.glsl b/shaders/world0_with_twilight_forest_flag/voxy_opaque.glsl new file mode 100644 index 0000000..97df3b7 --- /dev/null +++ b/shaders/world0_with_twilight_forest_flag/voxy_opaque.glsl @@ -0,0 +1,3 @@ +#define OVERWORLD_SHADER +#define TWILIGHT_FOREST_FLAG +#include "/dimensions/voxy_solid.glsl" \ No newline at end of file diff --git a/shaders/world0_with_twilight_forest_flag/voxy_translucent.glsl b/shaders/world0_with_twilight_forest_flag/voxy_translucent.glsl new file mode 100644 index 0000000..c1c1d02 --- /dev/null +++ b/shaders/world0_with_twilight_forest_flag/voxy_translucent.glsl @@ -0,0 +1,3 @@ +#define OVERWORLD_SHADER +#define TWILIGHT_FOREST_FLAG +#include "/dimensions/voxy_translucent.glsl" \ No newline at end of file