diff --git a/ForDevelopers.EN.md b/ForDevelopers.EN.md index afe395e5..e942c2c0 100644 --- a/ForDevelopers.EN.md +++ b/ForDevelopers.EN.md @@ -59,15 +59,15 @@ The shaders used for any other unspecified dimension are direct descendants of t Buffers are used and assigned in the following way: - - noisetex: Stores the water normals in two channels, with the third component being calculated at runtime. (RG8) - - colortex0: Bluenoise (not loaded). (R8) - - colortex1: Main buffer. When DOF is active, it is four channels, with the fourth channel storing the scene depth for antialiasing and to avoid sudden focus changes due to camera shake. (Without DOF: R11F_G11F_B10F, with DOF: RGBA16) - - colortex2: Stores the "blocky" cloud map. (R8) - - colortex3: Stores the history used for temporal sampling. When DOF is active, it is four channels, with the fourth channel storing the scene depth for antialiasing and to avoid sudden focus changes due to camera shake. (Without DOF: R11F_G11F_B10F, with DOF: RGBA16) - - gaux1: Stores a version of the scene that will be used for screen-space reflections and refractions. After it is used for that, it is used as an auxiliary to store the scene's bloom. (R11F_G11F_B10F) - - gaux2: Stores the cloud map in "natural" format. (R8) - - gaux3: Stores the historical value of the scene's auto-exposure. The auto-exposure value is obtained by doing a weighted average with the value of this channel and the calculated one in the current scene to create a gradual transition of auto-exposure over time. Yes, it is excessive to use an entire buffer to store a single floating-point value, but it is what it is. It is only used if the default auto-exposure method is used. (R16F) - - gaux4: Stores the color of the sky (without clouds or other objects) to give the color that should be used in the fog (yes, the fog is always the color of the "sky"). This way, objects are blurred and blended with the sky in the distance. +- noisetex: Stores the water normals in two channels, with the third component being calculated at runtime. (RG8) +- colortex0: Bloom auxiliar. (R11F_G11F_B10F) +- colortex1: Main buffer. When DOF is active, it is four channels, with the fourth channel storing the scene depth for antialiasing and to avoid sudden focus changes due to camera shake. (Without DOF: R11F_G11F_B10F, with DOF: RGBA16) +- colortex2: Unused. (R8) +- colortex3: Stores the history used for temporal sampling. When DOF is active, it is four channels, with the fourth channel storing the scene depth for antialiasing and to avoid sudden focus changes due to camera shake. (Without DOF: R11F_G11F_B10F, with DOF: RGBA16) +- gaux1: Stores a version of the scene that will be used for screen-space reflections and refractions. After it is used for that, it is used as an auxiliary to store the scene's bloom. (R11F_G11F_B10F) +- gaux2: Stores the cloud map. (R8) +- gaux3: Stores the historical value of the scene's auto-exposure. The auto-exposure value is obtained by doing a weighted average with the value of this channel and the calculated one in the current scene to create a gradual transition of auto-exposure over time. Yes, it is excessive to use an entire buffer to store a single floating-point value, but it is what it is. It is only used if the default auto-exposure method is used. (R16F) +- gaux4: Stores the color of the sky (without clouds or other objects) to give the color that should be used in the fog (yes, the fog is always the color of the "sky"). This way, objects are blurred and blended with the sky in the distance. ----- diff --git a/ParaDesarrolladores.ES.md b/ParaDesarrolladores.ES.md index 7776f45b..42e52b67 100644 --- a/ParaDesarrolladores.ES.md +++ b/ParaDesarrolladores.ES.md @@ -26,7 +26,7 @@ Los archivos de traducción. Le dan nombre a las opciones en las pantallas de co ### shaders/lib -Aquí se encuentran archivos con rutinas o declaraciones específicas que son empleadas en diversos lugares de las rutinas principales. +Aquí se encuentran archivos con rutinas o declaraciones específicas que son empleadas en diversos lugares de las rutinas principales. Los archivos que se encuentran en este directorio son tomados como "bibliotecas", y son llamados FUERA de la función principal del shader que los solicita (es decir, que no se insertan dentro de la función main del shader en cuestión). Usualmente porque declaran funciones o valores empleados por quien los solicita. @@ -61,12 +61,12 @@ Los shaders que se emplean para cualquier otra dimensión no especificada son de Los buffers son utilizados y asignados de la siguiente manera: - noisetex: Almacena las normales del agua en dos canales, el tercer componente es calculado al momento. (RG8) -- colortex0: Ruido azul (no cargado). (R8) +- colortex0: Auxixialr para bloom. (R11F_G11F_B10F) - colortex1: Buffer principal. Cuando está actvo el DOF, es de cuatro canales, donde el cuarto canal almacena la profundidad de la escena para ser también suavizada por el antialias, y así evitar problemas en cambios de enfoque súbitos por la sacudida de la cámara. (Sin DOF: R11F_G11F_B10F, con DOF: RGBA16) -- colortex2: Almacena el mapa para las nubes en formato "blocky". (R8) -- colortex3: Aquí se almacena el historial empleado por el muestreo temporal. Cuando está actvo el DOF, es de cuatro canales, donde el cuarto canal almacena la profundidad de la escena para ser también suavizada por el antialias, y así evitar problemas en cambios de enfoque súbitos por la sacudida de la cámara. (Sin DOF: R11F_G11F_B10F, con DOF: RGBA16) +- colortex2: No usado. (R8) +- colortex3: Aquí se almacena el historial empleado por el muestreo temporal. Cuando está actvo el DOF, es de cuatro canales, donde el cuarto canal almacena la profundidad de la escena para ser también suavizada por el antialias, y así evitar problemas en cambios de enfoque súbitos por la sacudida de la cámara. (Sin DOF: R11F_G11F_B10F, con DOF: RGBA16) - gaux1: Aquí se almacena una versión de la escena que será empleada en los reflejos y refracciones de espacio de pantalla. Después de ser empleado para ello, se utiliza como auxiliar para almacenar el bloom de la escena. (R11F_G11F_B10F) -- gaux2: Almacena el mapa para las nubes en formato "natural". (R8) +- gaux2: Almacena el mapa para las nubes. (R8) - gaux3: Almacena el valor histórico de autoexposición de la escena. El valor de autoexposición se obtiene haciendo un promedio ponderado con el valor de este canal y el calculado en la escena actual, a fin de hacer una transición de autoexposición gradual en el tiempo. Sí, es un exceso usar un buffer entero para guardar un único valor flotante, pero es lo que hay. Sólo es usado si se usa el método de autoexposición predeterminado. (R16F) - gaux4: Almacena el color del cielo (sin nubes ni otros objetos), para otorgar el color que deberá emplearse en la niebla (sí, la niebla siempre es del color del "cielo"). De esta forma, los objetos se difuminan y confunden con el cielo a la distancia. @@ -95,14 +95,14 @@ El resultado se escribirá en: 6. En Composite se calcula el nivel de autoexposure del cuadro actual, y se pondera con el valor histórico guardado en gaux3. Se calcula también la luz volumétrica, y se prepara el bloom. El auto exposure no toma en cuenta ninguno de estos últimos efectos ni los posteriores. "Preparar el bloom", significa guardar una versión de la escena actual con el nivel de exposición aplicado, en: gaux1. -Se guarda también el valor calculado de la autoexposición en: gaux3. +Se guarda también el valor calculado de la autoexposición en: gaux3. -7. En Composite1 se calcula el DOF, y se aplica el Bloom. Para aplicar el Bloom se lee un nivel de mipmap del buffer gaux3 calculado en el paso anterior. El resutado se escribe en: colortex1 +7. En Composite1 se calcula el DOF, y se aplica el Bloom. Para aplicar el Bloom se lee un nivel de mipmap del buffer gaux3 calculado en el paso anterior. El resultado se escribe en: colortex1 8. En Composite2 se calcula el AA y el motion blur. El resultado se escribe en: colortex0. Si el supermuestreo temporal está activo, se escribe el histórico en colortex3. 9. En Final, se aplican efectos de postprocesado, como aberración cromática, la autoexposición, el mapa de tonos, y ayudas para ceguera al color. -Para terminar, la imagen es enviada a la pantalla. +Para terminar, la imagen es enviada a la pantalla. ----- diff --git a/README.md b/README.md index 70b12e42..864c6a8b 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ -# MakeUp - Code +# MakeUp Ultra Fast High performance Minecraft shader (Java). -## Version: 9.0 +## Version: 9.5a ### This version works in Optifine and Iris 1.5.1 or higher. @@ -21,15 +21,14 @@ High performance Minecraft shader (Java). * FAST! ## Tested on: -* Minecraft 1.12.+ - 1.21.x -* Nvidia and Intel +* Minecraft 1.12.+ - 26.1.x +* Nvidia, AMD, Intel * Windows and Linux ## You can: * You can use the shader without restrictions. * You can fork the shader from: [https://github.com/javiergcim/MakeUpUltraFast](https://github.com/javiergcim/MakeUpUltraFast) * You can modify this shader for any purpose. -* If you modify or use the shader please add a credit, and the official URLs if possible: [https://www.planetminecraft.com/mod/makeup-ultra-fast-shader/](https://www.planetminecraft.com/mod/makeup-ultra-fast-shader/), [https://www.curseforge.com/minecraft/customization/makeup-ultra-fast-shader](https://www.curseforge.com/minecraft/customization/makeup-ultra-fast-shader) and/or [https://github.com/javiergcim/MakeUpUltraFast](https://github.com/javiergcim/MakeUpUltraFast) +* If you modify or use the shader please add a credit, and the official URLs if possible: [https://modrinth.com/shader/makeup-ultra-fast-shaders](https://modrinth.com/shader/makeup-ultra-fast-shaders), [https://www.planetminecraft.com/mod/makeup-ultra-fast-shader/](https://www.planetminecraft.com/mod/makeup-ultra-fast-shader/), [https://www.curseforge.com/minecraft/customization/makeup-ultra-fast-shader](https://www.curseforge.com/minecraft/customization/makeup-ultra-fast-shader) and/or [https://github.com/javiergcim/MakeUpUltraFast](https://github.com/javiergcim/MakeUpUltraFast) Notification is not required, but would be appreciated. - diff --git a/shaders/block.properties b/shaders/block.properties index 1e24e8bf..6a8e9730 100644 --- a/shaders/block.properties +++ b/shaders/block.properties @@ -3,56 +3,71 @@ #if MC_VERSION >= 11300 # GRASS LIKE ENTITIES - block.10031 = minecraft:cherry_sapling minecraft:torchflower minecraft:short_grass minecraft:grass minecraft:fern minecraft:seagrass biomesoplenty:dune_grass biomesoplenty:dead_grass biomesoplenty:desert_grass biomesoplenty:sprout biomesoplenty:bush environmental:mycelium_sprouts upgrade_aquatic:blue_pickerelweed upgrade_aquatic:purple_pickerelweed byg:beach_grass byg:clover_patch byg:flower_patch byg:horseweed byg:leaf_pile byg:prairie_grass byg:reeds byg:short_beach_grass byg:short_grass byg:tall_prairie_grass byg:weed_grass byg:wilted_grass byg:winter_grass ecotones:clover ecotones:reeds ecotones:sandy_grass ecotones:short_grass terrestria:cattail terrestria:dead_grass terrestria:sakura_leaf_pile terrestria:tall_cattail wildworld:acacia_leaf_pile wildworld:birch_leaf_pile wildworld:dark_oak_leaf_pile wildworld:jungle_leaf_pile wildworld:oak_leaf_pile wildworld:spruce_leaf_pile biomesoplenty:bush minecraft:nether_sprouts minecraft:warped_roots minecraft:crimson_roots projectvibrantjourneys:beach_grass projectvibrantjourneys:short_grass minecraft:oak_sapling minecraft:spruce_sapling minecraft:birch_sapling minecraft:jungle_sapling minecraft:acacia_sapling minecraft:dark_oak_sapling minecraft:dead_bush minecraft:dandelion minecraft:poppy minecraft:blue_orchid minecraft:allium minecraft:azure_bluet minecraft:red_tulip minecraft:orange_tulip minecraft:white_tulip minecraft:pink_tulip minecraft:oxeye_daisy minecraft:cornflower minecraft:lily_of_the_valley minecraft:wither_rose minecraft:sweet_berry_bush biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom atmospheric:rosewood_sapling atmospheric:morado_sapling atmospheric:yucca_sapling atmospheric:kousa_sapling atmospheric:aspen_sapling atmospheric:grimwood_sapling atmospheric:warm_monkey_brush atmospheric:hot_monkey_brush atmospheric:scalding_monkey_brush atmospheric:yucca_flower atmospheric:gilia autumnity:red_maple_sapling autumnity:orange_maple_sapling autumnity:yellow_maple_sapling autumnity:maple_sapling autumnity:autumn_crocus earthmobsmod:buttercup environmental:willow_sapling environmental:cherry_sapling environmental:pink_wisteria_sapling environmental:blue_wisteria_sapling environmental:purple_wisteria_sapling environmental:white_wisteria_sapling farmersdelight:wild_cabbages farmersdelight:wild_onions farmersdelight:wild_tomatoes farmersdelight:wild_carrots farmersdelight:wild_potatoes farmersdelight:wild_beetroots neapolitan:small_banana_frond neapolitan:banana_frond neapolitan:large_banana_frond upgrade_aquatic:river_sapling upgrade_aquatic:beachgrass upgrade_aquatic:white_searocket upgrade_aquatic:pink_searocket environmental:cattail environmental:cartwheel environmental:bluebell environmental:violet environmental:dianthus environmental:red_lotus_flower environmental:white_lotus_flower environmental:yellow_hibiscus environmental:orange_hibiscus environmental:red_hibiscus environmental:pink_hibiscus environmental:magenta_hibiscus environmental:purple_hibiscus buzzier_bees:buttercup buzzier_bees:white_clover buzzier_bees:pink_clover neapolitan:strawberry_pips biomesoplenty:origin_sapling biomesoplenty:flowering_oak_sapling biomesoplenty:rainbow_birch_sapling biomesoplenty:yellow_autumn_sapling biomesoplenty:orange_autumn_sapling biomesoplenty:maple_sapling biomesoplenty:fir_sapling biomesoplenty:redwood_sapling biomesoplenty:white_cherry_sapling biomesoplenty:pink_cherry_sapling biomesoplenty:mahogany_sapling biomesoplenty:jacaranda_sapling biomesoplenty:palm_sapling biomesoplenty:willow_sapling biomesoplenty:dead_sapling biomesoplenty:magic_sapling biomesoplenty:umbran_sapling biomesoplenty:hellbark_sapling astralsorcery:glow_flower botania:white_mystical_flower botania:gray_mystical_flower botania:orange_mystical_flower botania:magenta_mystical_flower botania:light_blue_mystical_flower botania:light_gray_mystical_flower botania:yellow_mystical_flower botania:lime_mystical_flower botania:pink_mystical_flower botania:cyan_mystical_flower botania:purple_mystical_flower botania:blue_mystical_flower botania:brown_mystical_flower botania:green_mystical_flower botania:red_mystical_flower botania:black_mystical_flower botania:white_mushroom botania:orange_mushroom botania:magenta_mushroom botania:light_blue_mushroom botania:yellow_mushroom botania:lime_mushroom botania:pink_mushroom botania:gray_mushroom botania:light_gray_mushroom botania:cyan_mushroom botania:purple_mushroom botania:blue_mushroom botania:brown_mushroom botania:green_mushroom botania:red_mushroom botania:black_mushroom botania:hydroangeas botania:manastar botania:pure_daisy botania:endoflame botania:thermalily botania:rosa_arcana botania:munchdew botania:entropinnyum botania:kekimurus botania:gourmaryllis botania:narslimmus botania:spectrolus botania:dandelifeon botania:rafflowsia botania:shulk_me_not botania:bellethorn botania:bellethorn_chibi botania:bergamute botania:dreadthorn botania:heisei_dream botania:tigerseye botania:jaded_amaranthus botania:orechid botania:fallen_kanade botania:exoflame botania:agricarnation botania:agricarnation_chibi botania:hopperhock botania:hopperhock_chibi botania:tangleberrie botania:jiyuulia botania:rannuncarpus botania:rannuncarpus_chibi botania:hyacidus botania:pollidisiac botania:clayconia botania:clayconia_chibi botania:loonium botania:daffomill botania:vinculotus botania:spectranthemum botania:medumone botania:marimorphosis botania:marimorphosis_chibi botania:bubbell botania:bubbell_chibi botania:solegnolia botania:solegnolia_chibi botania:orechid_ignem terrestria:tiny_cactus pamhc2trees:apple_sapling pamhc2trees:avocado_sapling pamhc2trees:candlenut_sapling pamhc2trees:cherry_sapling pamhc2trees:chestnut_sapling pamhc2trees:gooseberry_sapling pamhc2trees:lemon_sapling pamhc2trees:nutmeg_sapling pamhc2trees:orange_sapling pamhc2trees:peach_sapling pamhc2trees:pear_sapling pamhc2trees:plum_sapling pamhc2trees:walnut_sapling pamhc2trees:spiderweb_sapling pamhc2trees:hazelnut_sapling pamhc2trees:pawpaw_sapling pamhc2trees:soursop_sapling pamhc2trees:almond_sapling pamhc2trees:apricot_sapling pamhc2trees:banana_sapling pamhc2trees:cashew_sapling pamhc2trees:cinnamon_sapling pamhc2trees:coconut_sapling pamhc2trees:date_sapling pamhc2trees:dragonfruit_sapling pamhc2trees:durian_sapling pamhc2trees:fig_sapling pamhc2trees:grapefruit_sapling pamhc2trees:lime_sapling pamhc2trees:mango_sapling pamhc2trees:olive_sapling pamhc2trees:papaya_sapling pamhc2trees:paperbark_sapling pamhc2trees:pecan_sapling pamhc2trees:peppercorn_sapling pamhc2trees:persimmon_sapling pamhc2trees:pistachio_sapling pamhc2trees:pomegranate_sapling pamhc2trees:starfruit_sapling pamhc2trees:vanillabean_sapling pamhc2trees:breadfruit_sapling pamhc2trees:guava_sapling pamhc2trees:jackfruit_sapling pamhc2trees:lychee_sapling pamhc2trees:passionfruit_sapling pamhc2trees:rambutan_sapling pamhc2trees:tamarind_sapling pamhc2trees:maple_sapling pamhc2trees:pinenut_sapling byg:purple_bulbis_anomaly byg:blue_bulbis_anomaly byg:embur_wart byg:cryptic_bramble biomesoplenty:glowshroom biomesoplenty:toadstool biomesoplenty:rose biomesoplenty:violet biomesoplenty:lavender biomesoplenty:wildflower biomesoplenty:orange_cosmos biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:glowflower biomesoplenty:wilted_lily biomesoplenty:burning_blossom biomesoplenty:mangrove_root biomesoplenty:reed biomesoplenty:sprout biomesoplenty:bush pamhc2crops:aridgarden pamhc2crops:frostgarden pamhc2crops:shadedgarden pamhc2crops:soggygarden pamhc2crops:tropicalgarden pamhc2crops:windygarden pamhc2crops:pamamaranthcrop pamhc2crops:pambarleycrop pamhc2crops:pambeancrop pamhc2crops:pamchickpeacrop pamhc2crops:pamcorncrop pamhc2crops:pamlentilcrop pamhc2crops:pammilletcrop pamhc2crops:pamoatcrop pamhc2crops:pamquinoacrop pamhc2crops:pamricecrop pamhc2crops:pamryecrop pamhc2crops:pamsoybeancrops pamhc2crops:pamcottoncrop pamhc2crops:pamflaxcrop pamhc2crops:pamkenafcrop pamhc2crops:pamjutecrop pamhc2crops:pamsisalcrop pamhc2crops:pamartichokecrop pamhc2crops:pamasparaguscrop pamhc2crops:pambellpeppercrop pamhc2crops:pambroccolicrop pamhc2crops:pambrusselsproutcrop pamhc2crops:pamcabbagecrop pamhc2crops:pamcauliflowercrop pamhc2crops:pamcelerycrop pamhc2crops:pamchilipeppercrop pamhc2crops:pamcucumbercrop pamhc2crops:pameggplantcrop pamhc2crops:pamkalecrops pamhc2crops:pamlettucecrop pamhc2crops:pamokracrop pamhc2crops:pampeascrop pamhc2crops:pamspinachcrop pamhc2crops:pamtomatillocrop pamhc2crops:pamtomatocrop pamhc2crops:pamwintersquashcrop pamhc2crops:pamzucchinicrop pamhc2crops:pamarrowrootcrop pamhc2crops:pamcassavacrop pamhc2crops:pamgarliccrop pamhc2crops:pamjicamacrop pamhc2crops:pamleekcrop pamhc2crops:pamkohlrabicrop pamhc2crops:pamonioncrop pamhc2crops:pamparsnipcrop pamhc2crops:pampeanutcrop pamhc2crops:pamradishcrop pamhc2crops:pamrhubarbcrop pamhc2crops:pamrutabagacrop pamhc2crops:pamscallioncrop pamhc2crops:pamsweetpotatocrop pamhc2crops:pamtarocrop pamhc2crops:pamturnipcrop pamhc2crops:pamwaterchestnutcrop pamhc2crops:pamblackberrycrop pamhc2crops:pamblueberrycrop pamhc2crops:pamcactusfruitcrop pamhc2crops:pamcandleberrycrop pamhc2crops:pamcantaloupecrop pamhc2crops:pamcranberrycrop pamhc2crops:pamelderberrycrop pamhc2crops:pamgrapecrop pamhc2crops:pamgreengrapecrop pamhc2crops:pamhuckleberrycrop pamhc2crops:pamjuniperberrycrop pamhc2crops:pamkiwicrop pamhc2crops:pammullberrycrop pamhc2crops:pampineapplecrop pamhc2crops:pamraspberrycrop pamhc2crops:pamstrawberrycrop pamhc2crops:pamcoffeebeancrop pamhc2crops:pamtealeafcrop pamhc2crops:pamagavecrop pamhc2crops:pamwhitemushroomcrop pamhc2crops:pamgingercrop pamhc2crops:pamsesamecrop pamhc2crops:pamspiceleafcrop pamhc2crops:pammustardcrop byg:lament_sprouts byg:synthian_fungus byg:blue_glowcane byg:pink_glowcane byg:purple_glowcane byg:red_glowcane byg:warped_bush byg:blue_glowshroom byg:purple_glowshroom byg:scorched_bush byg:soul_shroom byg:soul_shroom_spore_end byg:death_cap byg:weeping_roots byg:nether_bristle byg:synthian_sprout byg:synthian_roots byg:hanging_synthian_roots byg:embur_sprouts byg:embur_roots byg:ivis_roots byg:ivis_sprout byg:bulbis_sprouts byg:ether_bush byg:thereal_bellflower byg:nightshade_sprouts byg:nightshade_roots byg:oddity_bush byg:shulkren_fungus byg:vermillion_sculk_tendrils byg:vermillion_sculk_growth byg:green_mushroom byg:weeping_milkcap byg:wood_blewit byg:black_puff byg:crimson_berry_bush byg:blueberry_bush byg:nightshade_berry_bush byg:winter_succulent byg:allium_flower_bush byg:alpine_bellflower byg:amaranth byg:angelica byg:begonia byg:bistort byg:black_rose byg:blue_sage byg:california_poppy byg:crocus byg:cyan_amaranth byg:cyan_rose byg:cyan_tulip byg:daffodil byg:fairy_slipper byg:firecracker_flower_bush byg:green_tulip byg:guzmania byg:incan_lily byg:iris byg:kovan_flower byg:lazarus_bellflower byg:lolipop_flower byg:magenta_amaranth byg:magenta_tulip byg:orange_amaranth byg:orange_daisy byg:osiria_rose byg:peach_leather_flower byg:pink_allium byg:pink_allium_flower_bush byg:pink_anemone byg:pink_daffodil byg:pink_orchid byg:protea_flower byg:purple_amaranth byg:purple_orchid byg:purple_sage byg:purple_tulip byg:red_cornflower byg:red_orchid byg:richea byg:rose byg:snowdrops byg:silver_vase_flower byg:torch_ginger byg:violet_leather_flower byg:white_anemone byg:white_sage byg:white_cyclamen byg:winter_rose byg:winter_scilla byg:yellow_daffodil byg:yellow_tulip byg:horseweed byg:winter_cyclamen cutecore:cherry_leaf_litter cutecore:cherry_wood_sapling cutecore:wisteria_sapling cutecore:wisteria_leaf_litter cutecore:lemon_leaf_litter cutecore:lemon_sapling cutecore:hyacinth cutecore:lotus_flower cutecore:violets cutecore:pink_rose cutecore:white_rose cutecore:rose cutecore:forget_me_nots cutecore:pink_carnation cutecore:red_carnation cutecore:white_carnation forbidden_arcanus:yellow_orchid forbidden_arcanus:golden_orchid immersiveengineering:hemp:growth=bottom0 immersiveengineering:hemp:growth=bottom1 immersiveengineering:hemp:growth=bottom2 immersiveengineering:hemp:growth=bottom3 simplefarming:apple_sapling simplefarming:apricot_sapling simplefarming:banana_sapling simplefarming:cherry_sapling simplefarming:mango_sapling simplefarming:olive_sapling simplefarming:orange_sapling simplefarming:pear_sapling simplefarming:plum_sapling simplefarming:barley_crop simplefarming:cassava_crop simplefarming:corn_crop simplefarming:cotton_crop simplefarming:cross_crop simplefarming:cucumber_crop simplefarming:cumin_plant simplefarming:eggplant_crop simplefarming:ginger_crop simplefarming:honeydew_crop simplefarming:kenaf_crop simplefarming:lettuce_crop simplefarming:oat_crop simplefarming:onion_crop simplefarming:pea_crop simplefarming:peanut_crop simplefarming:pepper_crop simplefarming:quinoa_plant simplefarming:radish_crop simplefarming:rice_crop simplefarming:rye_crop simplefarming:scrop simplefarming:hcrop simplefarming:marshmallow_crop simplefarming:sunflower_plant simplefarming:sorghum_crop simplefarming:soybean_crop simplefarming:spinach_crop simplefarming:sweet_potato_crop simplefarming:tomato_crop simplefarming:turnip_crop simplefarming:wild_crop simplefarming:yam_crop simplefarming:zucchini_crop byg:aspen_sapling byg:baobab_sapling byg:blue_enchanted_sapling byg:green_enchanted_sapling byg:pink_cherry_sapling byg:white_cherry_sapling byg:cika_sapling byg:cypress_sapling byg:ebony_sapling byg:ether_sapling byg:fir_sapling byg:aspen_sapling byg:holly_berry_sapling byg:holly_sapling byg:jacaranda_sapling byg:flowering_jacaranda_sapling byg:indigo_jacaranda_sapling byg:indigo_flowering_jacaranda_sapling byg:lament_sapling byg:mahogany_sapling byg:mangrove_sapling byg:maple_sapling byg:red_maple_sapling byg:silver_maple_sapling byg:nightshade_sapling byg:flowering_nightshade_sapling byg:palm_sapling byg:palo_verde_sapling byg:flowering_palo_verde_sapling byg:pine_sapling byg:rainbow_eucalyptus_sapling byg:redwood_sapling byg:pine_sapling byg:skyris_sapling byg:green_apple_skyris_sapling byg:willow_sapling byg:witch_hazel_sapling byg:blooming_witch_hazel_sapling byg:zelkova_sapling byg:withering_oak_sapling byg:araucaria_sapling byg:blue_spruce_sapling byg:brown_birch_sapling byg:brown_oak_sapling byg:zelkova_sapling byg:brown_zelkova_sapling byg:joshua_sapling byg:ripe_joshua_sapling byg:orange_birch_sapling byg:orange_oak_sapling byg:orange_spruce_sapling byg:orchard_sapling byg:flowering_orchard_sapling byg:ripe_orchard_sapling byg:red_birch_sapling byg:red_oak_sapling byg:red_spruce_sapling byg:yellow_birch_sapling byg:yellow_spruce_sapling byg:green_mushroom occultism:otherworld_sapling_natural occultism:otherworld_sapling integrateddynamics:menril_sapling projectvibrantjourneys:glowcap projectvibrantjourneys:crimson_nettle projectvibrantjourneys:warped_nettle twilightforest:mayapple + block.10031 = ars_nouveau:blue_archwood_sapling ars_nouveau:green_archwood_sapling ars_nouveau:potted_blue_archwood_sapling ars_nouveau:potted_green_archwood_sapling ars_nouveau:potted_purple_archwood_sapling ars_nouveau:potted_red_archwood_sapling ars_nouveau:purple_archwood_sapling ars_nouveau:red_archwood_sapling ars_nouveau:sourceberry_bush astralsorcery:glow_flower atmospheric:aspen_sapling atmospheric:gilia atmospheric:grimwood_sapling atmospheric:hot_monkey_brush atmospheric:kousa_sapling atmospheric:morado_sapling atmospheric:rosewood_sapling atmospheric:scalding_monkey_brush atmospheric:warm_monkey_brush atmospheric:yucca_flower atmospheric:yucca_sapling autumnity:autumn_crocus autumnity:maple_sapling autumnity:orange_maple_sapling autumnity:red_maple_sapling autumnity:yellow_maple_sapling biomesoplenty:burning_blossom biomesoplenty:bush biomesoplenty:dead_grass biomesoplenty:dead_sapling biomesoplenty:desert_grass biomesoplenty:dune_grass biomesoplenty:fir_sapling biomesoplenty:flowering_oak_sapling biomesoplenty:glowflower biomesoplenty:glowshroom biomesoplenty:hellbark_sapling biomesoplenty:jacaranda_sapling biomesoplenty:lavender biomesoplenty:magic_sapling biomesoplenty:mahogany_sapling biomesoplenty:mangrove_root biomesoplenty:maple_sapling biomesoplenty:orange_autumn_sapling biomesoplenty:orange_cosmos biomesoplenty:origin_sapling biomesoplenty:palm_sapling biomesoplenty:pink_cherry_sapling biomesoplenty:pink_daffodil biomesoplenty:pink_hibiscus biomesoplenty:rainbow_birch_sapling biomesoplenty:redwood_sapling biomesoplenty:reed biomesoplenty:rose biomesoplenty:sprout biomesoplenty:toadstool biomesoplenty:umbran_sapling biomesoplenty:violet biomesoplenty:white_cherry_sapling biomesoplenty:wildflower biomesoplenty:willow_sapling biomesoplenty:wilted_lily biomesoplenty:yellow_autumn_sapling botania:agricarnation botania:agricarnation_chibi botania:bellethorn botania:bellethorn_chibi botania:bergamute botania:black_mushroom botania:black_mystical_flower botania:blue_mushroom botania:blue_mystical_flower botania:brown_mushroom botania:brown_mystical_flower botania:bubbell botania:bubbell_chibi botania:clayconia botania:clayconia_chibi botania:cyan_mushroom botania:cyan_mystical_flower botania:daffomill botania:dandelifeon botania:dreadthorn botania:endoflame botania:entropinnyum botania:exoflame botania:fallen_kanade botania:gourmaryllis botania:gray_mushroom botania:gray_mystical_flower botania:green_mushroom botania:green_mystical_flower botania:heisei_dream botania:hopperhock botania:hopperhock_chibi botania:hyacidus botania:hydroangeas botania:jaded_amaranthus botania:jiyuulia botania:kekimurus botania:light_blue_mushroom botania:light_blue_mystical_flower botania:light_gray_mushroom botania:light_gray_mystical_flower botania:lime_mushroom botania:lime_mystical_flower botania:loonium botania:magenta_mushroom botania:magenta_mystical_flower botania:manastar botania:marimorphosis botania:marimorphosis_chibi botania:medumone botania:munchdew botania:narslimmus botania:orange_mushroom botania:orange_mystical_flower botania:orechid botania:orechid_ignem botania:pink_mushroom botania:pink_mystical_flower botania:pollidisiac botania:pure_daisy botania:purple_mushroom botania:purple_mystical_flower botania:rafflowsia botania:rannuncarpus botania:rannuncarpus_chibi botania:red_mushroom botania:red_mystical_flower botania:rosa_arcana botania:shulk_me_not botania:solegnolia botania:solegnolia_chibi botania:spectranthemum botania:spectrolus botania:tangleberrie botania:thermalily botania:tigerseye botania:vinculotus botania:white_mushroom botania:white_mystical_flower botania:yellow_mushroom botania:yellow_mystical_flower buzzier_bees:buttercup buzzier_bees:pink_clover buzzier_bees:white_clover byg:allium_flower_bush byg:alpine_bellflower byg:amaranth byg:angelica byg:araucaria_sapling byg:aspen_sapling byg:baobab_sapling byg:beach_grass byg:begonia byg:bistort byg:black_puff byg:black_rose byg:blooming_witch_hazel_sapling byg:blue_bulbis_anomaly byg:blue_enchanted_sapling byg:blue_glowcane byg:blue_glowshroom byg:blue_sage byg:blue_spruce_sapling byg:blueberry_bush byg:brown_birch_sapling byg:brown_oak_sapling byg:brown_zelkova_sapling byg:bulbis_sprouts byg:california_poppy byg:cika_sapling byg:clover_patch byg:crimson_berry_bush byg:crocus byg:cryptic_bramble byg:cyan_amaranth byg:cyan_rose byg:cyan_tulip byg:cypress_sapling byg:daffodil byg:death_cap byg:ebony_sapling byg:embur_roots byg:embur_sprouts byg:embur_wart byg:ether_bush byg:ether_sapling byg:fairy_slipper byg:fir_sapling byg:firecracker_flower_bush byg:flower_patch byg:flowering_jacaranda_sapling byg:flowering_nightshade_sapling byg:flowering_orchard_sapling byg:flowering_palo_verde_sapling byg:green_apple_skyris_sapling byg:green_enchanted_sapling byg:green_mushroom byg:green_tulip byg:guzmania byg:hanging_synthian_roots byg:holly_berry_sapling byg:holly_sapling byg:horseweed byg:incan_lily byg:indigo_flowering_jacaranda_sapling byg:indigo_jacaranda_sapling byg:iris byg:ivis_roots byg:ivis_sprout byg:jacaranda_sapling byg:joshua_sapling byg:kovan_flower byg:lament_sapling byg:lament_sprouts byg:lazarus_bellflower byg:leaf_pile byg:lolipop_flower byg:magenta_amaranth byg:magenta_tulip byg:mahogany_sapling byg:mangrove_sapling byg:maple_sapling byg:nether_bristle byg:nightshade_berry_bush byg:nightshade_roots byg:nightshade_sapling byg:nightshade_sprouts byg:oddity_bush byg:orange_amaranth byg:orange_birch_sapling byg:orange_daisy byg:orange_oak_sapling byg:orange_spruce_sapling byg:orchard_sapling byg:osiria_rose byg:palm_sapling byg:palo_verde_sapling byg:peach_leather_flower byg:pine_sapling byg:pink_allium byg:pink_allium_flower_bush byg:pink_anemone byg:pink_cherry_sapling byg:pink_daffodil byg:pink_glowcane byg:pink_orchid byg:prairie_grass byg:protea_flower byg:purple_amaranth byg:purple_bulbis_anomaly byg:purple_glowcane byg:purple_glowshroom byg:purple_orchid byg:purple_sage byg:purple_tulip byg:rainbow_eucalyptus_sapling byg:red_birch_sapling byg:red_cornflower byg:red_glowcane byg:red_maple_sapling byg:red_oak_sapling byg:red_orchid byg:red_spruce_sapling byg:redwood_sapling byg:reeds byg:richea byg:ripe_joshua_sapling byg:ripe_orchard_sapling byg:rose byg:scorched_bush byg:short_beach_grass byg:short_grass byg:shulkren_fungus byg:silver_maple_sapling byg:silver_vase_flower byg:skyris_sapling byg:snowdrops byg:soul byg:soul_shroom byg:synthian_fungus byg:synthian_roots byg:synthian_sprout byg:tall_prairie_grass byg:thereal_bellflower byg:torch_ginger byg:vermillion_sculk_growth byg:vermillion_sculk_tendrils byg:violet_leather_flower byg:warped_bush byg:weed_grass byg:weeping_milkcap byg:weeping_roots byg:white_anemone byg:white_cherry_sapling byg:white_cyclamen byg:white_sage byg:willow_sapling byg:wilted_grass byg:winter_cyclamen byg:winter_grass byg:winter_rose byg:winter_scilla byg:winter_succulent byg:witch_hazel_sapling byg:withering_oak_sapling byg:wood_blewit byg:yellow_birch_sapling byg:yellow_daffodil byg:yellow_spruce_sapling byg:yellow_tulip byg:zelkova_sapling create_dd:rubber_sapling cutecore:cherry_leaf_litter cutecore:cherry_wood_sapling cutecore:forget_me_nots cutecore:hyacinth cutecore:lemon_leaf_litter cutecore:lemon_sapling cutecore:lotus_flower cutecore:pink_carnation cutecore:pink_rose cutecore:red_carnation cutecore:rose cutecore:violets cutecore:white_carnation cutecore:white_rose cutecore:wisteria_leaf_litter cutecore:wisteria_sapling deeperdarker:echo_sapling dense_dynamictrees:dense_acacia_sapling dense_dynamictrees:dense_apple_oak_sapling dense_dynamictrees:dense_azalea_sapling dense_dynamictrees:dense_birch_sapling dense_dynamictrees:dense_cherry_sapling dense_dynamictrees:dense_cocoa_sapling dense_dynamictrees:dense_crimson_sapling dense_dynamictrees:dense_dark_oak_sapling dense_dynamictrees:dense_jungle_sapling dense_dynamictrees:dense_mangrove_sapling dense_dynamictrees:dense_oak_sapling dense_dynamictrees:dense_spruce_sapling dense_dynamictrees:dense_swamp_oak_sapling dense_dynamictrees:dense_tall_birch_sapling dense_dynamictrees:dense_warped_sapling dtarsnouveau:blue_archwood_sapling dtarsnouveau:green_archwood_sapling dtarsnouveau:purple_archwood_sapling dtarsnouveau:red_archwood_sapling dtarsnouveau:yellow_archwood_sapling dtquark:ancient_sapling dtquark:fiery_blossom_sapling dtquark:frosty_blossom_sapling dtquark:glow_shroom_sapling dtquark:serene_blossom_sapling dtquark:sunny_blossom_sapling dtquark:warm_blossom_sapling dtterralith:acacia_bush_leaves dtterralith:amethyst_sapling dtterralith:ancient_sapling dtterralith:azalea_bush_leaves dtterralith:birch_pine_sapling dtterralith:black_poplar_sapling dtterralith:blue_pine_sapling dtterralith:cedar_sapling dtterralith:cherry_bush_leaves dtterralith:dark_oak_sakura_bush_leaves dtterralith:dwarf_pine_sapling dtterralith:dwarf_spruce_sapling dtterralith:ebony_sapling dtterralith:giga_spruce_sapling dtterralith:jacaranda_sapling dtterralith:kapok_sapling dtterralith:larch_sapling dtterralith:large_swamp_oak_sapling dtterralith:lush_acacia_sapling dtterralith:maple_sapling dtterralith:mega_ancient_sapling dtterralith:mega_blue_pine_sapling dtterralith:mega_larch_sapling dtterralith:mega_mirage_sapling dtterralith:mega_oasis_sapling dtterralith:mega_orange_pine_sapling dtterralith:mega_red_pine_sapling dtterralith:mirage_sapling dtterralith:moonlight_pine_sapling dtterralith:moonlight_spruce_sapling dtterralith:oasis_sapling dtterralith:orange_pine_sapling dtterralith:poplar_sapling dtterralith:red_pine_sapling dtterralith:sakura_sapling dtterralith:silverleaf_poplar_sapling dtterralith:spruce_bush_leaves dtterralith:swamp_birch_sapling dynamictrees:acacia_sapling dynamictrees:apple_oak_sapling dynamictrees:azalea_sapling dynamictrees:birch_sapling dynamictrees:cherry_sapling dynamictrees:cocoa_sapling dynamictrees:crimson_sapling dynamictrees:dark_oak_sapling dynamictrees:jungle_sapling dynamictrees:mangrove_sapling dynamictrees:mega_crimson_sapling dynamictrees:mega_jungle_sapling dynamictrees:mega_spruce_sapling dynamictrees:mega_warped_sapling dynamictrees:oak_sapling dynamictrees:potted_sapling dynamictrees:spruce_sapling dynamictrees:swamp_oak_sapling dynamictrees:tall_birch_sapling dynamictrees:warped_sapling dynamictreesplus:brown_mushroom_sapling dynamictreesplus:pillar_cactus_sapling dynamictreesplus:pipe_cactus_sapling dynamictreesplus:red_mushroom_sapling dynamictreesplus:saguaro_cactus_sapling earthmobsmod:buttercup ecotones:clover ecotones:reeds ecotones:sandy_grass ecotones:short_grass environmental:blue_wisteria_sapling environmental:bluebell environmental:cartwheel environmental:cattail environmental:cherry_sapling environmental:dianthus environmental:magenta_hibiscus environmental:mycelium_sprouts environmental:orange_hibiscus environmental:pink_hibiscus environmental:pink_wisteria_sapling environmental:purple_hibiscus environmental:purple_wisteria_sapling environmental:red_hibiscus environmental:red_lotus_flower environmental:violet environmental:white_lotus_flower environmental:white_wisteria_sapling environmental:willow_sapling environmental:yellow_hibiscus farmersdelight:wild_beetroots farmersdelight:wild_cabbages farmersdelight:wild_carrots farmersdelight:wild_onions farmersdelight:wild_potatoes farmersdelight:wild_tomatoes forbidden_arcanus:golden_orchid forbidden_arcanus:yellow_orchid immersiveengineering:hemp:growth=bottom0 immersiveengineering:hemp:growth=bottom1 immersiveengineering:hemp:growth=bottom2 immersiveengineering:hemp:growth=bottom3 integrateddynamics:menril_sapling minecraft:acacia_sapling minecraft:allium minecraft:azure_bluet minecraft:birch_sapling minecraft:blue_orchid minecraft:bush minecraft:cactus_flower minecraft:cherry_sapling minecraft:cornflower minecraft:crimson_roots minecraft:dandelion minecraft:dark_oak_sapling minecraft:dead_bush minecraft:fern minecraft:firefly_bush minecraft:golden_dandelion minecraft:grass minecraft:jungle_sapling minecraft:lily_of_the_valley minecraft:nether_sprouts minecraft:oak_sapling minecraft:orange_tulip minecraft:oxeye_daisy minecraft:pink_tulip minecraft:poppy minecraft:red_tulip minecraft:seagrass minecraft:short_dry_grass minecraft:short_grass minecraft:spruce_sapling minecraft:sweet_berry_bush minecraft:tall_dry_grass minecraft:torchflower minecraft:warped_roots minecraft:white_tulip minecraft:wither_rose nat_shroom_spore_end natures_spirit:purple_heather natures_spirit:red_heather natures_spirit:white_heather neapolitan:banana_frond neapolitan:large_banana_frond neapolitan:small_banana_frond neapolitan:strawberry_pips occultism:otherworld_sapling occultism:otherworld_sapling_natural pamhc2crops:aridgarden pamhc2crops:frostgarden pamhc2crops:pamagavecrop pamhc2crops:pamamaranthcrop pamhc2crops:pamarrowrootcrop pamhc2crops:pamartichokecrop pamhc2crops:pamasparaguscrop pamhc2crops:pambarleycrop pamhc2crops:pambeancrop pamhc2crops:pambellpeppercrop pamhc2crops:pamblackberrycrop pamhc2crops:pamblueberrycrop pamhc2crops:pambroccolicrop pamhc2crops:pambrusselsproutcrop pamhc2crops:pamcabbagecrop pamhc2crops:pamcactusfruitcrop pamhc2crops:pamcandleberrycrop pamhc2crops:pamcantaloupecrop pamhc2crops:pamcassavacrop pamhc2crops:pamcauliflowercrop pamhc2crops:pamcelerycrop pamhc2crops:pamchickpeacrop pamhc2crops:pamchilipeppercrop pamhc2crops:pamcoffeebeancrop pamhc2crops:pamcorncrop pamhc2crops:pamcottoncrop pamhc2crops:pamcranberrycrop pamhc2crops:pamcucumbercrop pamhc2crops:pameggplantcrop pamhc2crops:pamelderberrycrop pamhc2crops:pamflaxcrop pamhc2crops:pamgarliccrop pamhc2crops:pamgingercrop pamhc2crops:pamgrapecrop pamhc2crops:pamgreengrapecrop pamhc2crops:pamhuckleberrycrop pamhc2crops:pamjicamacrop pamhc2crops:pamjuniperberrycrop pamhc2crops:pamjutecrop pamhc2crops:pamkalecrops pamhc2crops:pamkenafcrop pamhc2crops:pamkiwicrop pamhc2crops:pamkohlrabicrop pamhc2crops:pamleekcrop pamhc2crops:pamlentilcrop pamhc2crops:pamlettucecrop pamhc2crops:pammilletcrop pamhc2crops:pammullberrycrop pamhc2crops:pammustardcrop pamhc2crops:pamoatcrop pamhc2crops:pamokracrop pamhc2crops:pamonioncrop pamhc2crops:pamparsnipcrop pamhc2crops:pampeanutcrop pamhc2crops:pampeascrop pamhc2crops:pampineapplecrop pamhc2crops:pamquinoacrop pamhc2crops:pamradishcrop pamhc2crops:pamraspberrycrop pamhc2crops:pamrhubarbcrop pamhc2crops:pamricecrop pamhc2crops:pamrutabagacrop pamhc2crops:pamryecrop pamhc2crops:pamscallioncrop pamhc2crops:pamsesamecrop pamhc2crops:pamsisalcrop pamhc2crops:pamsoybeancrops pamhc2crops:pamspiceleafcrop pamhc2crops:pamspinachcrop pamhc2crops:pamstrawberrycrop pamhc2crops:pamsweetpotatocrop pamhc2crops:pamtarocrop pamhc2crops:pamtealeafcrop pamhc2crops:pamtomatillocrop pamhc2crops:pamtomatocrop pamhc2crops:pamturnipcrop pamhc2crops:pamwaterchestnutcrop pamhc2crops:pamwhitemushroomcrop pamhc2crops:pamwintersquashcrop pamhc2crops:pamzucchinicrop pamhc2crops:shadedgarden pamhc2crops:soggygarden pamhc2crops:tropicalgarden pamhc2crops:windygarden pamhc2trees:almond_sapling pamhc2trees:apple_sapling pamhc2trees:apricot_sapling pamhc2trees:avocado_sapling pamhc2trees:banana_sapling pamhc2trees:breadfruit_sapling pamhc2trees:candlenut_sapling pamhc2trees:cashew_sapling pamhc2trees:cherry_sapling pamhc2trees:chestnut_sapling pamhc2trees:cinnamon_sapling pamhc2trees:coconut_sapling pamhc2trees:date_sapling pamhc2trees:dragonfruit_sapling pamhc2trees:durian_sapling pamhc2trees:fig_sapling pamhc2trees:gooseberry_sapling pamhc2trees:grapefruit_sapling pamhc2trees:guava_sapling pamhc2trees:hazelnut_sapling pamhc2trees:jackfruit_sapling pamhc2trees:lemon_sapling pamhc2trees:lime_sapling pamhc2trees:lychee_sapling pamhc2trees:mango_sapling pamhc2trees:maple_sapling pamhc2trees:nutmeg_sapling pamhc2trees:olive_sapling pamhc2trees:orange_sapling pamhc2trees:papaya_sapling pamhc2trees:paperbark_sapling pamhc2trees:passionfruit_sapling pamhc2trees:pawpaw_sapling pamhc2trees:peach_sapling pamhc2trees:pear_sapling pamhc2trees:pecan_sapling pamhc2trees:peppercorn_sapling pamhc2trees:persimmon_sapling pamhc2trees:pinenut_sapling pamhc2trees:pistachio_sapling pamhc2trees:plum_sapling pamhc2trees:pomegranate_sapling pamhc2trees:rambutan_sapling pamhc2trees:soursop_sapling pamhc2trees:spiderweb_sapling pamhc2trees:starfruit_sapling pamhc2trees:tamarind_sapling pamhc2trees:vanillabean_sapling pamhc2trees:walnut_sapling projectvibrantjourneys:beach_grass projectvibrantjourneys:crimson_nettle projectvibrantjourneys:glowcap projectvibrantjourneys:short_grass projectvibrantjourneys:warped_nettle simplefarming:apple_sapling simplefarming:apricot_sapling simplefarming:banana_sapling simplefarming:barley_crop simplefarming:cassava_crop simplefarming:cherry_sapling simplefarming:corn_crop simplefarming:cotton_crop simplefarming:cross_crop simplefarming:cucumber_crop simplefarming:cumin_plant simplefarming:eggplant_crop simplefarming:ginger_crop simplefarming:hcrop simplefarming:honeydew_crop simplefarming:kenaf_crop simplefarming:lettuce_crop simplefarming:mango_sapling simplefarming:marshmallow_crop simplefarming:oat_crop simplefarming:olive_sapling simplefarming:onion_crop simplefarming:orange_sapling simplefarming:pea_crop simplefarming:peanut_crop simplefarming:pear_sapling simplefarming:pepper_crop simplefarming:plum_sapling simplefarming:quinoa_plant simplefarming:radish_crop simplefarming:rice_crop simplefarming:rye_crop simplefarming:scrop simplefarming:sorghum_crop simplefarming:soybean_crop simplefarming:spinach_crop simplefarming:sunflower_plant simplefarming:sweet_potato_crop simplefarming:tomato_crop simplefarming:turnip_crop simplefarming:wild_crop simplefarming:yam_crop simplefarming:zucchini_crop terrestria:cattail terrestria:dead_grass terrestria:sakura_leaf_pile terrestria:tall_cattail terrestria:tiny_cactus tfc:plant/allium tfc:plant/anthurium tfc:plant/arrowhead tfc:plant/artist_conk twilightforest:mayapple upgrade_aquatic:beachgrass upgrade_aquatic:blue_pickerelweed upgrade_aquatic:pink_searocket upgrade_aquatic:purple_pickerelweed upgrade_aquatic:river_sapling upgrade_aquatic:white_searocket vegandelight:wild_soybean wildworld:acacia_leaf_pile wildworld:birch_leaf_pile wildworld:dark_oak_leaf_pile wildworld:jungle_leaf_pile wildworld:oak_leaf_pile wildworld:spruce_leaf_pile # CROPS LIKE ENTITIES - block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots + block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots farmersdelight:cabbages farmersdelight:budding_tomatoes farmersdelight:onions vegandelight:soybean_crop tfc:crop/carrot tfc:crop/tomato farmersrespite:small_tea_bush # LOWER-HALF ENTITIES - block.10175 = minecraft:pitcher_plant:half=lower minecraft:sunflower:half=lower minecraft:lilac:half=lower minecraft:tall_grass:half=lower minecraft:large_fern:half=lower minecraft:rose_bush:half=lower minecraft:peony:half=lower minecraft:tall_seagrass:half=lower atmospheric:water_hyacinth:half=lower atmospheric:tall_yucca_flower:half=lower environmental:tall_cattail:half=lower environmental:pink_delphinium:half=lower environmental:blue_delphinium:half=lower environmental:purple_delphinium:half=lower environmental:white_delphinium:half=lower environmental:bird_of_paradise:half=lower environmental:giant_tall_grass:half=lower farmersdelight:wild_rice:half=lower upgrade_aquatic:flowering_rush:half=lower upgrade_aquatic:tall_beachgrass:half=lower upgrade_aquatic:tall_blue_pickerelweed:half=lower upgrade_aquatic:tall_purple_pickerelweed:half=lower biomesoplenty:barley:half=lower biomesoplenty:goldenrod:half=lower biomesoplenty:blue_hydrangea:half=lower biomesoplenty:watergrass:half=lower botania:white_double_flower:half=lower botania:orange_double_flower:half=lower botania:magenta_double_flower:half=lower botania:light_blue_double_flower:half=lower botania:yellow_double_flower:half=lower botania:lime_double_flower:half=lower botania:pink_double_flower:half=lower botania:gray_double_flower:half=lower botania:light_gray_double_flower:half=lower botania:cyan_double_flower:half=lower botania:purple_double_flower:half=lower botania:blue_double_flower:half=lower botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=lower biomesoplenty:reed:half=lower biomesoplenty:cattail:half=lower byg:tall_crimson_roots:half=lower byg:tall_ether_grass:half=lower byg:reeds:half=lower byg:tall_prairie_grass:half=lower byg:tall_allium:half=lower byg:azalea:half=lower byg:tall_pink_allium:half=lower moreflowerbushes:purple_hibiscus:half=lower moreflowerbushes:mountain_laurel:half=lower moreflowerbushes:larkspur:half=lower moreflowerbushes:golden_shower:half=lower moreflowerbushes:fuchsia:half=lower moreflowerbushes:butterfly_weed:half=lower moreflowerbushes:blue_sage:half=lower moreflowerbushes:blue_hortensia:half=lower byg:japanese_orchid:half=lower byg:delphinium:half=lower byg:foxglove:half=lower cutecore:pink_rosebush:half=lower cutecore:white_rosebush:half=lower cutecore:pink_hydrangeas:half=lower cutecore:blue_hydrangeas:half=lower cutecore:purple_hydrangeas:half=lower + block.10175 = minecraft:pitcher_plant:half=lower minecraft:sunflower:half=lower minecraft:lilac:half=lower minecraft:tall_grass:half=lower minecraft:large_fern:half=lower minecraft:rose_bush:half=lower minecraft:peony:half=lower minecraft:tall_seagrass:half=lower atmospheric:water_hyacinth:half=lower atmospheric:tall_yucca_flower:half=lower environmental:tall_cattail:half=lower environmental:pink_delphinium:half=lower environmental:blue_delphinium:half=lower environmental:purple_delphinium:half=lower environmental:white_delphinium:half=lower environmental:bird_of_paradise:half=lower environmental:giant_tall_grass:half=lower farmersdelight:wild_rice:half=lower upgrade_aquatic:flowering_rush:half=lower upgrade_aquatic:tall_beachgrass:half=lower upgrade_aquatic:tall_blue_pickerelweed:half=lower upgrade_aquatic:tall_purple_pickerelweed:half=lower biomesoplenty:barley:half=lower biomesoplenty:goldenrod:half=lower biomesoplenty:blue_hydrangea:half=lower biomesoplenty:watergrass:half=lower botania:white_double_flower:half=lower botania:orange_double_flower:half=lower botania:magenta_double_flower:half=lower botania:light_blue_double_flower:half=lower botania:yellow_double_flower:half=lower botania:lime_double_flower:half=lower botania:pink_double_flower:half=lower botania:gray_double_flower:half=lower botania:light_gray_double_flower:half=lower botania:cyan_double_flower:half=lower botania:purple_double_flower:half=lower botania:blue_double_flower:half=lower botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=lower biomesoplenty:reed:half=lower biomesoplenty:cattail:half=lower byg:tall_crimson_roots:half=lower byg:tall_ether_grass:half=lower byg:reeds:half=lower byg:tall_prairie_grass:half=lower byg:tall_allium:half=lower byg:azalea:half=lower byg:tall_pink_allium:half=lower moreflowerbushes:purple_hibiscus:half=lower moreflowerbushes:mountain_laurel:half=lower moreflowerbushes:larkspur:half=lower moreflowerbushes:golden_shower:half=lower moreflowerbushes:fuchsia:half=lower moreflowerbushes:butterfly_weed:half=lower moreflowerbushes:blue_sage:half=lower moreflowerbushes:blue_hortensia:half=lower byg:japanese_orchid:half=lower byg:delphinium:half=lower byg:foxglove:half=lower cutecore:pink_rosebush:half=lower cutecore:white_rosebush:half=lower cutecore:pink_hydrangeas:half=lower cutecore:blue_hydrangeas:half=lower cutecore:purple_hydrangeas:half=lower farmersdelight:rice create_bic_bit:sunflowerstem:half=lower tfc:plant/badderlocks:half=lower # UPPER-HALF ENTITIES - block.10176 = minecraft:pitcher_plant:half=upper minecraft:sunflower:half=upper minecraft:lilac:half=upper minecraft:tall_grass:half=upper minecraft:large_fern:half=upper minecraft:rose_bush:half=upper minecraft:peony:half=upper minecraft:tall_seagrass:half=upper atmospheric:water_hyacinth:half=upper atmospheric:tall_yucca_flower:half=upper environmental:tall_cattail:half=upper environmental:pink_delphinium:half=upper environmental:blue_delphinium:half=upper environmental:purple_delphinium:half=upper environmental:white_delphinium:half=upper environmental:bird_of_paradise:half=upper environmental:giant_tall_grass:half=upper farmersdelight:wild_rice:half=upper upgrade_aquatic:flowering_rush:half=upper upgrade_aquatic:tall_beachgrass:half=upper upgrade_aquatic:tall_blue_pickerelweed:half=upper upgrade_aquatic:tall_purple_pickerelweed:half=upper biomesoplenty:barley:half=upper biomesoplenty:goldenrod:half=upper biomesoplenty:blue_hydrangea:half=upper biomesoplenty:watergrass:half=upper botania:white_double_flower:half=upper botania:orange_double_flower:half=upper botania:magenta_double_flower:half=upper botania:light_blue_double_flower:half=upper botania:yellow_double_flower:half=upper botania:lime_double_flower:half=upper botania:pink_double_flower:half=upper botania:gray_double_flower:half=upper botania:light_gray_double_flower:half=upper botania:cyan_double_flower:half=upper botania:purple_double_flower:half=upper botania:blue_double_flower:half=upper botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=upper biomesoplenty:reed:half=upper biomesoplenty:cattail:half=upper byg:tall_crimson_roots:half=upper byg:tall_ether_grass:half=upper byg:reeds:half=upper byg:tall_prairie_grass:half=upper byg:tall_allium:half=upper byg:azalea:half=upper byg:tall_pink_allium:half=upper moreflowerbushes:purple_hibiscus:half=upper moreflowerbushes:mountain_laurel:half=upper moreflowerbushes:larkspur:half=upper moreflowerbushes:golden_shower:half=upper moreflowerbushes:fuchsia:half=upper moreflowerbushes:butterfly_weed:half=upper moreflowerbushes:blue_sage:half=upper moreflowerbushes:blue_hortensia:half=upper byg:japanese_orchid:half=upper byg:delphinium:half=upper byg:foxglove:half=upper cutecore:pink_rosebush:half=upper cutecore:white_rosebush:half=upper cutecore:pink_hydrangeas:half=upper cutecore:blue_hydrangeas:half=upper cutecore:purple_hydrangeas:half=upper + block.10176 = minecraft:pitcher_plant:half=upper minecraft:sunflower:half=upper minecraft:lilac:half=upper minecraft:tall_grass:half=upper minecraft:large_fern:half=upper minecraft:rose_bush:half=upper minecraft:peony:half=upper minecraft:tall_seagrass:half=upper atmospheric:water_hyacinth:half=upper atmospheric:tall_yucca_flower:half=upper environmental:tall_cattail:half=upper environmental:pink_delphinium:half=upper environmental:blue_delphinium:half=upper environmental:purple_delphinium:half=upper environmental:white_delphinium:half=upper environmental:bird_of_paradise:half=upper environmental:giant_tall_grass:half=upper farmersdelight:wild_rice:half=upper upgrade_aquatic:flowering_rush:half=upper upgrade_aquatic:tall_beachgrass:half=upper upgrade_aquatic:tall_blue_pickerelweed:half=upper upgrade_aquatic:tall_purple_pickerelweed:half=upper biomesoplenty:barley:half=upper biomesoplenty:goldenrod:half=upper biomesoplenty:blue_hydrangea:half=upper biomesoplenty:watergrass:half=upper botania:white_double_flower:half=upper botania:orange_double_flower:half=upper botania:magenta_double_flower:half=upper botania:light_blue_double_flower:half=upper botania:yellow_double_flower:half=upper botania:lime_double_flower:half=upper botania:pink_double_flower:half=upper botania:gray_double_flower:half=upper botania:light_gray_double_flower:half=upper botania:cyan_double_flower:half=upper botania:purple_double_flower:half=upper botania:blue_double_flower:half=upper botania:brown_double_flower:half=upper botania:green_double_flower:half=upper botania:red_double_flower:half=upper botania:black_double_flower:half=upper biomesoplenty:reed:half=upper biomesoplenty:cattail:half=upper byg:tall_crimson_roots:half=upper byg:tall_ether_grass:half=upper byg:reeds:half=upper byg:tall_prairie_grass:half=upper byg:tall_allium:half=upper byg:azalea:half=upper byg:tall_pink_allium:half=upper moreflowerbushes:purple_hibiscus:half=upper moreflowerbushes:mountain_laurel:half=upper moreflowerbushes:larkspur:half=upper moreflowerbushes:golden_shower:half=upper moreflowerbushes:fuchsia:half=upper moreflowerbushes:butterfly_weed:half=upper moreflowerbushes:blue_sage:half=upper moreflowerbushes:blue_hortensia:half=upper byg:japanese_orchid:half=upper byg:delphinium:half=upper byg:foxglove:half=upper cutecore:pink_rosebush:half=upper cutecore:white_rosebush:half=upper cutecore:pink_hydrangeas:half=upper cutecore:blue_hydrangeas:half=upper cutecore:purple_hydrangeas:half=upper farmersdelight:rice_panicles create_bic_bit:sunflowerstem:half=upper tfc:plant/badderlocks:half=upper # LEAVES - block.10018 = minecraft:cherry_leaves minecraft:oak_leaves minecraft:spruce_leaves minecraft:birch_leaves minecraft:jungle_leaves minecraft:acacia_leaves minecraft:dark_oak_leaves minecraft:azalea_leaves minecraft:azalea_leaves_flowers minecraft:flowering_azalea_leaves minecraft:mangrove_leaves biomesoplenty:origin_leaves biomesoplenty:flowering_oak_leaves biomesoplenty:rainbow_birch_leaves biomesoplenty:yellow_autumn_leaves biomesoplenty:orange_autumn_leaves biomesoplenty:maple_leaves biomesoplenty:fir_leaves biomesoplenty:redwood_leaves biomesoplenty:mahogany_leaves biomesoplenty:palm_leaves biomesoplenty:willow_leaves biomesoplenty:dead_leaves biomesoplenty:magic_leaves biomesoplenty:umbran_leaves biomesoplenty:hellbark_leaves biomesoplenty:pink_cherry_leaves biomesoplenty:white_cherry_leaves biomesoplenty:jacaranda_leaves quark:blue_blossom_leaves quark:lavender_blossom_leaves quark:orange_blossom_leaves quark:pink_blossom_leaves quark:yellow_blossom_leaves atmospheric:rosewood_leaves atmospheric:morado_leaves atmospheric:flowering_morado_leaves atmospheric:yucca_leaves atmospheric:kousa_leaves atmospheric:aspen_leaves atmospheric:grimwood_leaves autumnity:red_maple_leaves autumnity:orange_maple_leaves autumnity:yellow_maple_leaves autumnity:maple_leaves environmental:willow_leaves environmental:cherry_leaves environmental:pink_wisteria_leaves environmental:blue_wisteria_leaves environmental:purple_wisteria_leaves environmental:white_wisteria_leaves environmental:pink_hanging_wisteria_leaves environmental:blue_hanging_wisteria_leaves environmental:purple_hanging_wisteria_leaves environmental:white_hanging_wisteria_leaves environmental:hanging_willow_leaves upgrade_aquatic:river_leaves byg:aspen_leaves byg:araucaria_leaves byg:baobab_leaves byg:blooming_witch_hazel_leaves byg:blue_enchanted_leaves byg:blue_spruce_leaves byg:brown_birch_leaves byg:brown_oak_leaves byg:brown_zelkova_leaves byg:cika_leaves byg:cypress_leaves byg:ebony_leaves byg:fir_leaves byg:flowering_orchard_leaves byg:flowering_nightshade_leaves byg:flowering_palo_verde_leaves byg:green_apple_skyris_leaves byg:green_enchanted_leaves byg:holly_berry_leaves byg:holly_leaves byg:indigo_jacaranda_leaves byg:jacaranda_leaves byg:joshua_leaves byg:mahogany_leaves byg:mangrove_leaves byg:maple_leaves byg:orange_birch_leaves byg:orange_oak_leaves byg:orange_spruce_leaves byg:orchard_leaves byg:palo_verde_leaves byg:pine_leaves byg:pink_cherry_leaves byg:rainbow_eucalyptus_leaves byg:red_birch_leaves byg:red_maple_leaves byg:red_oak_leaves byg:red_spruce_leaves byg:redwood_leaves byg:ripe_joshua_leaves byg:ripe_orchard_leaves byg:silver_maple_leaves byg:skyris_leaves byg:white_cherry_leaves byg:willow_leaves byg:witch_hazel_leaves byg:yellow_birch_leaves byg:yellow_spruce_leaves byg:zelkova_leaves ecotones:hazel_leaves sakurarosea:alt_sakura_leaves sakurarosea:sakura_leaves sakurarosea:white_sakura_leaves terrestria:cypress_leaves terrestria:dark_japanese_maple_leaves terrestria:hemlock_leaves terrestria:japanese_maple_leaves terrestria:japanese_maple_shrub_leaves terrestria:jungle_palm_leaves terrestria:rainbow_eucalyptus_leaves terrestria:redwood_leaves terrestria:rubber_leaves terrestria:sakura_leaves terrestria:willow_leaves terrestria:yucca_palm_leaves traverse:brown_autumnal_leaves traverse:fir_leaves traverse:orange_autumnal_leaves traverse:red_autumnal_leaves traverse:yellow_autumnal_leaves vanillaenhanced:redwood_leaves wild_explorer:autumn_oak_leaves wild_explorer:autumn_birch_leaves wild_explorer:pink_cherry_oak_leaves wild_explorer:white_cherry_oak_leaves wild_explorer:palm_leaves cutecore:cherry_wood_leaves cutecore:cherry_wood_leaves_fruit cutecore:wisteria_leaves cutecore:lemon_leaves cutecore:lemon_leaves_fruiting dynamictrees:jungle_leaves dynamictrees:oak_leaves dynamictrees:spruce_leaves dynamictrees:dark_oak_leaves dynamictrees:acacia_leaves dynamictrees:birch_leaves simplefarming:apple_leaves simplefarming:apricot_leaves simplefarming:banana_leaves simplefarming:cherry_leaves simplefarming:mango_leaves simplefarming:olive_leaves simplefarming:orange_leaves simplefarming:pear_leaves simplefarming:plum_leaves mythicbotany:dreamwood_leaves undergarden:smogstem_leaves undergarden:wigglewood_leaves occultism:otherworld_leaves occultism:otherworld_leaves_natural integrateddynamics:menril_leaves extlights:xmas_leaves extlights:xmas_leaves_bulb extlights:xmas_leaves_bulb_red extlights:xmas_leaves_bulb_green extlights:xmas_leaves_bulb_blue extlights:xmas_leaves_bulb_blinking_redgreen extlights:xmas_leaves_bulb_blinking_redblue extlights:xmas_leaves_bulb_blinking_greenblue extlights:xmas_leaves_bulb_blinking_rgb extlights:xmas_leaves_bulb_smooth_redgreen extlights:xmas_leaves_bulb_smooth_redblue extlights:xmas_leaves_bulb_smooth_greenblue extlights:xmas_leaves_bulb_smooth_rgb techreborn:rubber_leaves blockus:legacy_leaves blockus:white_oak_leaves architects_palette:twisted_leaves twilightforest:twilight_oak_leaves twilightforest:canopy_leaves twilightforest:mangrove_leaves twilightforest:dark_leaves twilightforest:time_leaves twilightforest:transformation_leaves twilightforest:mining_leaves twilightforest:sorting_leaves twilightforest:giant_leaves twilightforest:thorn_leaves + block.10018 = architects_palette:twisted_leaves ars_nouveau:blue_archwood_leaves ars_nouveau:green_archwood_leaves ars_nouveau:purple_archwood_leaves ars_nouveau:red_archwood_leaves atmospheric:aspen_leaves atmospheric:flowering_morado_leaves atmospheric:grimwood_leaves atmospheric:kousa_leaves atmospheric:morado_leaves atmospheric:rosewood_leaves atmospheric:yucca_leaves autumnity:maple_leaves autumnity:orange_maple_leaves autumnity:red_maple_leaves autumnity:yellow_maple_leaves betterend:dragon_tree_leaves betterend:glowing_pillar_leaves betterend:helix_tree_leaves betterend:lacugrove_leaves betterend:lucernia_leaves betterend:lucernia_outer_leaves betterend:pythadendron_leaves betterend:tenanea_leaves betterend:umbrella_tree_leaves betternether:anchor_tree_leaves betternether:nether_sakura_leaves betternether:rubeus_leaves betternether:willow_leaves biomesoplenty:dead_leaves biomesoplenty:fir_leaves biomesoplenty:flowering_oak_leaves biomesoplenty:hellbark_leaves biomesoplenty:jacaranda_leaves biomesoplenty:magic_leaves biomesoplenty:mahogany_leaves biomesoplenty:maple_leaves biomesoplenty:orange_autumn_leaves biomesoplenty:origin_leaves biomesoplenty:palm_leaves biomesoplenty:pink_cherry_leaves biomesoplenty:rainbow_birch_leaves biomesoplenty:redwood_leaves biomesoplenty:umbran_leaves biomesoplenty:white_cherry_leaves biomesoplenty:willow_leaves biomesoplenty:yellow_autumn_leaves blockus:legacy_leaves blockus:white_oak_leaves blossom:flowering_oak_leaves byg:araucaria_leaves byg:aspen_leaves byg:baobab_leaves byg:blooming_witch_hazel_leaves byg:blue_enchanted_leaves byg:blue_spruce_leaves byg:brown_birch_leaves byg:brown_oak_leaves byg:brown_zelkova_leaves byg:cika_leaves byg:cypress_leaves byg:ebony_leaves byg:fir_leaves byg:flowering_nightshade_leaves byg:flowering_orchard_leaves byg:flowering_palo_verde_leaves byg:green_apple_skyris_leaves byg:green_enchanted_leaves byg:holly_berry_leaves byg:holly_leaves byg:indigo_jacaranda_leaves byg:jacaranda_leaves byg:joshua_leaves byg:mahogany_leaves byg:mangrove_leaves byg:maple_leaves byg:orange_birch_leaves byg:orange_oak_leaves byg:orange_spruce_leaves byg:orchard_leaves byg:palo_verde_leaves byg:pine_leaves byg:pink_cherry_leaves byg:rainbow_eucalyptus_leaves byg:red_birch_leaves byg:red_maple_leaves byg:red_oak_leaves byg:red_spruce_leaves byg:redwood_leaves byg:ripe_joshua_leaves byg:ripe_orchard_leaves byg:silver_maple_leaves byg:skyris_leaves byg:white_cherry_leaves byg:willow_leaves byg:witch_hazel_leaves byg:yellow_birch_leaves byg:yellow_spruce_leaves byg:zelkova_leaves create_dd:rubber_leaves cutecore:cherry_wood_leaves cutecore:cherry_wood_leaves_fruit cutecore:lemon_leaves cutecore:lemon_leaves_fruiting cutecore:wisteria_leaves deeperdarker:echo_leaves dense_dynamictrees:dense_acacia_leaves dense_dynamictrees:dense_azalea_leaves dense_dynamictrees:dense_birch_leaves dense_dynamictrees:dense_cherry_leaves dense_dynamictrees:dense_cocoa_leaves dense_dynamictrees:dense_dark_oak_leaves dense_dynamictrees:dense_flowering_azalea_leaves dense_dynamictrees:dense_jungle_leaves dense_dynamictrees:dense_mangrove_leaves dense_dynamictrees:dense_oak_leaves dense_dynamictrees:dense_spruce_leaves dtarsnouveau:blue_archwood_leaves dtarsnouveau:green_archwood_leaves dtarsnouveau:purple_archwood_leaves dtarsnouveau:red_archwood_leaves dtarsnouveau:yellow_archwood_leaves dtquark:ancient_leaves dtquark:azalea_leaves dtquark:fiery_blossom_leaves dtquark:flowering_azalea_leaves dtquark:frosty_blossom_leaves dtquark:serene_blossom_leaves dtquark:sunny_blossom_leaves dtquark:warm_blossom_leaves dtterralith:acacia_amethyst_leaves dtterralith:acacia_bush_leaves dtterralith:acacia_conifer_leaves dtterralith:acacia_deciduous_leaves dtterralith:acacia_kapok_leaves dtterralith:acacia_poplar_leaves dtterralith:acacia_sparse_leaves dtterralith:acacia_twiglet_leaves dtterralith:acacia_windswept_leaves dtterralith:azalea_bush_leaves dtterralith:azalea_canopy_leaves dtterralith:azalea_ebony_leaves dtterralith:azalea_mahogany_leaves dtterralith:azalea_mangrove_leaves dtterralith:azalea_oasis_leaves dtterralith:birch_conifer_leaves dtterralith:birch_poplar_leaves dtterralith:birch_scruffy_conifer_leaves dtterralith:birch_scruffy_leaves dtterralith:birch_short_conifer_leaves dtterralith:birch_sparse_leaves dtterralith:birch_twilight_leaves dtterralith:birch_windswept_leaves dtterralith:cherry_bush_leaves dtterralith:dark_oak_ancient_leaves dtterralith:dark_oak_ancient_mirage_leaves dtterralith:dark_oak_blue_conifer_leaves dtterralith:dark_oak_canopy_leaves dtterralith:dark_oak_canopy_mirage_leaves dtterralith:dark_oak_jacaranda_leaves dtterralith:dark_oak_maple_leaves dtterralith:dark_oak_orange_conifer_leaves dtterralith:dark_oak_red_azalea_leaves dtterralith:dark_oak_red_conifer_leaves dtterralith:dark_oak_red_maple_leaves dtterralith:dark_oak_sakura_bush_leaves dtterralith:dark_oak_sakura_leaves dtterralith:dark_oak_wide_leaves dtterralith:flowering_azalea_canopy_leaves dtterralith:flowering_azalea_mahogany_leaves dtterralith:flowering_azalea_mangrove_leaves dtterralith:flowering_azalea_oasis_leaves dtterralith:jungle_jacaranda_leaves dtterralith:jungle_sakura_leaves dtterralith:jungle_sparse_leaves dtterralith:jungle_windswept_leaves dtterralith:mangrove_scruffy_leaves dtterralith:mangrove_sparse_leaves dtterralith:oak_conifer_leaves dtterralith:oak_kapok_leaves dtterralith:oak_scruffy_leaves dtterralith:oak_scruffy_tall_conifer_leaves dtterralith:oak_sparse_leaves dtterralith:oak_tall_conifer_leaves dtterralith:oak_twiglet_leaves dtterralith:oak_twilight_leaves dtterralith:oak_yellow_conifer_leaves dtterralith:spruce_bush_leaves dtterralith:spruce_moonlight_leaves dtterralith:spruce_poplar_leaves dtterralith:spruce_round_leaves dtterralith:spruce_short_conifer_leaves dtterralith:spruce_sparse_leaves dtterralith:spruce_tall_conifer_leaves dtterralith:spruce_twiglet_leaves dtterralith:tall_dark_oak_leaves dynamictrees:acacia_leaves dynamictrees:azalea_leaves dynamictrees:birch_leaves dynamictrees:cherry_leaves dynamictrees:dark_oak_leaves dynamictrees:flowering_azalea_leaves dynamictrees:jungle_leaves dynamictrees:jungle_undergrowth_leaves dynamictrees:mangrove_leaves dynamictrees:oak_leaves dynamictrees:oak_undergrowth_leaves dynamictrees:spruce_leaves ecotones:hazel_leaves environmental:blue_hanging_wisteria_leaves environmental:blue_wisteria_leaves environmental:cherry_leaves environmental:hanging_willow_leaves environmental:pink_hanging_wisteria_leaves environmental:pink_wisteria_leaves environmental:purple_hanging_wisteria_leaves environmental:purple_wisteria_leaves environmental:white_hanging_wisteria_leaves environmental:white_wisteria_leaves environmental:willow_leaves extlights:xmas_leaves extlights:xmas_leaves_bulb extlights:xmas_leaves_bulb_blinking_greenblue extlights:xmas_leaves_bulb_blinking_redblue extlights:xmas_leaves_bulb_blinking_redgreen extlights:xmas_leaves_bulb_blinking_rgb extlights:xmas_leaves_bulb_blue extlights:xmas_leaves_bulb_green extlights:xmas_leaves_bulb_red extlights:xmas_leaves_bulb_smooth_greenblue extlights:xmas_leaves_bulb_smooth_redblue extlights:xmas_leaves_bulb_smooth_redgreen extlights:xmas_leaves_bulb_smooth_rgb integrateddynamics:menril_leaves minecraft:acacia_leaves minecraft:azalea_leaves minecraft:azalea_leaves_flowers minecraft:birch_leaves minecraft:cherry_leaves minecraft:dark_oak_leaves minecraft:flowering_azalea_leaves minecraft:jungle_leaves minecraft:mangrove_leaves minecraft:oak_leaves minecraft:pale_oak_leaves minecraft:spruce_leaves mythicbotany:dreamwood_leaves natures_spirit:aspen_leaves natures_spirit:blue_wisteria_leaves natures_spirit:cedar_leaves natures_spirit:coconut_leaves natures_spirit:cypress_leaves natures_spirit:fir_leaves natures_spirit:frosty_fir_leaves natures_spirit:frosty_redwood_leaves natures_spirit:ghaf_leaves natures_spirit:joshua_leaves natures_spirit:larch_leaves natures_spirit:mahogany_leaves natures_spirit:olive_leaves natures_spirit:orange_marple_leaves natures_spirit:palo_verde_leaves natures_spirit:part_blue_wisteria_leaves natures_spirit:part_pink_wisteria_leaves natures_spirit:part_purple_wisteria_leaves natures_spirit:part_white_wisteria_leaves natures_spirit:pink_wisteria_leaves natures_spirit:purple_wisteria_leaves natures_spirit:redwood_leaves natures_spirit:saxaul_leaves natures_spirit:sugi_leaves natures_spirit:white_wisteria_leaves natures_spirit:willow_leaves natures_spirit:wisteria_leaves natures_spirit:yellow_larch_leaves natures_spirit:yellow_marple_leaves occultism:otherworld_leaves occultism:otherworld_leaves_natural quark:blue_blossom_leaves quark:lavender_blossom_leaves quark:orange_blossom_leaves quark:pink_blossom_leaves quark:yellow_blossom_leaves sakurarosea:alt_sakura_leaves sakurarosea:sakura_leaves sakurarosea:white_sakura_leaves simplefarming:apple_leaves simplefarming:apricot_leaves simplefarming:banana_leaves simplefarming:cherry_leaves simplefarming:mango_leaves simplefarming:olive_leaves simplefarming:orange_leaves simplefarming:pear_leaves simplefarming:plum_leaves techreborn:rubber_leaves terrestria:cypress_leaves terrestria:dark_japanese_maple_leaves terrestria:hemlock_leaves terrestria:japanese_maple_leaves terrestria:japanese_maple_shrub_leaves terrestria:jungle_palm_leaves terrestria:rainbow_eucalyptus_leaves terrestria:redwood_leaves terrestria:rubber_leaves terrestria:sakura_leaves terrestria:willow_leaves terrestria:yucca_palm_leaves tfc:plant/cherry_leaves tfc:plant/green_apple_leaves tfc:plant/lemon_leaves tfc:plant/olive_leaves tfc:plant/orange_leaves tfc:plant/peach_leaves tfc:plant/plum_leaves tfc:plant/red_apple_leaves tfc:wood/leaves/acacia tfc:wood/leaves/ash tfc:wood/leaves/aspen tfc:wood/leaves/birch tfc:wood/leaves/blackwood tfc:wood/leaves/chestnut tfc:wood/leaves/douglas_fir tfc:wood/leaves/hickory tfc:wood/leaves/kapok tfc:wood/leaves/mangrove tfc:wood/leaves/maple tfc:wood/leaves/oak tfc:wood/leaves/palm tfc:wood/leaves/pine tfc:wood/leaves/rosewood tfc:wood/leaves/sequoia tfc:wood/leaves/spruce tfc:wood/leaves/sycamore tfc:wood/leaves/white_cedar tfc:wood/leaves/willow traverse:brown_autumnal_leaves traverse:fir_leaves traverse:orange_autumnal_leaves traverse:red_autumnal_leaves traverse:yellow_autumnal_leaves twilightforest:canopy_leaves twilightforest:dark_leaves twilightforest:giant_leaves twilightforest:mangrove_leaves twilightforest:mining_leaves twilightforest:sorting_leaves twilightforest:thorn_leaves twilightforest:time_leaves twilightforest:transformation_leaves twilightforest:twilight_oak_leaves undergarden:smogstem_leaves undergarden:wigglewood_leaves upgrade_aquatic:river_leaves vanillaenhanced:redwood_leaves wild_explorer:autumn_birch_leaves wild_explorer:autumn_oak_leaves wild_explorer:palm_leaves wild_explorer:pink_cherry_oak_leaves wild_explorer:white_cherry_oak_leaves + + # NO-WAVEABLE SMALL ELEMENTS - block.10032 = sugar_cane tube_coral brain_coral fire_coral bubble_coral horn_coral dead_tube_coral dead_brain_coral dead_fire_coral dead_bubble_coral dead_horn_coral tube_coral_fan brain_coral_fan fire_coral_fan bubble_coral_fan horn_coral_fan dead_tube_coral_fan dead_brain_coral_fan dead_fire_coral_fan dead_bubble_coral_fan dead_horn_coral_fan nether_wart + block.10032 = sugar_cane tube_coral brain_coral fire_coral bubble_coral horn_coral dead_tube_coral dead_brain_coral dead_fire_coral dead_bubble_coral dead_horn_coral tube_coral_fan brain_coral_fan fire_coral_fan bubble_coral_fan horn_coral_fan dead_tube_coral_fan dead_brain_coral_fan dead_fire_coral_fan dead_bubble_coral_fan dead_horn_coral_fan nether_wart tfc:plant/athyrium_fern tfc:plant/canna tfc:plant/goldenrod tfc:plant/pampas_grass tfc:plant/perovskia tfc:plant/rose tfc:plant/beachgrass tfc:plant/bluegrass tfc:plant/bromegrass tfc:plant/fountain_grass tfc:plant/manatee_grass tfc:plant/orchard_grass tfc:plant/ryegrass tfc:plant/scutch_grass tfc:plant/star_grass tfc:plant/timothy_grass tfc:plant/raddia_grass tfc:plant/allium tfc:plant/anthurium tfc:plant/arrowhead tfc:plant/badderlocks tfc:plant/barrel_cactus tfc:plant/blood_lily tfc:plant/blue_ginger tfc:plant/blue_orchid tfc:plant/bur_reed tfc:plant/butterfly_milkweed tfc:plant/black_orchid tfc:plant/calendula tfc:plant/cattail tfc:plant/cobblestone_lichen tfc:plant/coontail tfc:plant/cordgrass tfc:plant/dandelion tfc:plant/dead_bush tfc:plant/desert_flame tfc:plant/duckweed tfc:plant/eel_grass tfc:plant/field_horsetail tfc:plant/foxglove tfc:plant/grape_hyacinth tfc:plant/green_algae tfc:plant/gutweed tfc:plant/guzmania tfc:plant/heliconia tfc:plant/heather tfc:plant/hibiscus tfc:plant/houstonia tfc:plant/kangaroo_paw tfc:plant/king_fern tfc:plant/labrador_tea tfc:plant/lady_fern tfc:plant/laminaria tfc:plant/licorice_fern tfc:plant/artists_conk tfc:plant/lily_of_the_valley tfc:plant/lilac tfc:plant/lotus tfc:plant/maiden_pink tfc:plant/marigold tfc:plant/meads_milkweed tfc:plant/milfoil tfc:plant/morning_glory tfc:plant/philodendron tfc:plant/moss tfc:plant/nasturtium tfc:plant/ostrich_fern tfc:plant/oxeye_daisy tfc:plant/phragmite tfc:plant/pickerelweed tfc:plant/pistia tfc:plant/poppy tfc:plant/primrose tfc:plant/pulsatilla tfc:plant/red_algae tfc:plant/reindeer_lichen tfc:plant/red_sealing_wax_palm tfc:plant/sacred_datura tfc:plant/sagebrush tfc:plant/sago tfc:plant/saguaro_fruit tfc:plant/sapphire_tower tfc:plant/sargassum tfc:plant/sea_lavender tfc:plant/sea_palm tfc:plant/silver_spurflower tfc:plant/snapdragon_pink tfc:plant/snapdragon_red tfc:plant/snapdragon_white tfc:plant/snapdragon_yellow tfc:plant/strelitzia tfc:plant/switchgrass tfc:plant/sword_fern tfc:plant/tall_fescue_grass tfc:plant/toquilla_palm tfc:plant/trillium tfc:plant/tropical_milkweed tfc:plant/tulip_orange tfc:plant/tulip_pink tfc:plant/tulip_red tfc:plant/tulip_white tfc:plant/turtle_grass tfc:plant/vriesea tfc:plant/water_canna tfc:plant/white_water_lily tfc:plant/purple_water_lily tfc:plant/yellow_water_lily tfc:plant/water_taro tfc:plant/yucca tfc:plant/hanging_vines_plant tfc:plant/hanging_vines tfc:plant/spanish_moss_plant tfc:plant/spanish_moss tfc:plant/liana_plant tfc:plant/liana tfc:plant/tree_fern_plant tfc:plant/tree_fern tfc:plant/arundo_plant tfc:plant/arundo tfc:plant/dry_phragmite_plant tfc:plant/dry_phragmite tfc:plant/winged_kelp_plant tfc:plant/winged_kelp tfc:plant/leafy_kelp_plant tfc:plant/leafy_kelp tfc:plant/giant_kelp_plant tfc:plant/giant_kelp_flower tfc:plant/ivy tfc:plant/jungle_vines tfc:plant/saguaro_plant tfc:plant/saguaro tfc:plant/golden_bamboo tfc:plant/golden_bamboo_sapling tfc:wild_crop/barley tfc:wild_crop/oat tfc:wild_crop/rye tfc:wild_crop/maize tfc:wild_crop/wheat tfc:wild_crop/rice tfc:wild_crop/beet tfc:wild_crop/cabbage tfc:wild_crop/carrot tfc:wild_crop/garlic tfc:wild_crop/green_bean tfc:wild_crop/potato tfc:wild_crop/onion tfc:wild_crop/soybean tfc:wild_crop/squash tfc:wild_crop/sugarcane tfc:wild_crop/tomato tfc:wild_crop/jute tfc:wild_crop/papyrus tfc:wild_crop/pumpkin tfc:wild_crop/melon tfc:wild_crop/red_bell_pepper tfc:wild_crop/yellow_bell_pepper tfc:plant/snowberry_bush tfc:plant/bunchberry_bush tfc:plant/gooseberry_bush tfc:plant/cloudberry_bush tfc:plant/strawberry_bush tfc:plant/wintergreen_berry_bush tfc:plant/cranberry_bush + + # WATER LIKE + block.10008 = minecraft:water minecraft:flowing_water subwild:water_puddle tfc:fluid/finite_fresh_water tfc:fluid/fresh_water tfc:fluid/finite_salt_water tfc:fluid/salt_water tfc:fluid/finite_river_water tfc:fluid/river_water tfc:fluid/spring_water tfc:fluid/finite_spring_water # REFLECTIVE - block.10008 = minecraft:water minecraft:flowing_water subwild:water_puddle - block.10079 = ice slime_block white_stained_glass orange_stained_glass magenta_stained_glass light_blue_stained_glass yellow_stained_glass lime_stained_glass pink_stained_glass gray_stained_glass light_gray_stained_glass cyan_stained_glass purple_stained_glass blue_stained_glass brown_stained_glass green_stained_glass red_stained_glass black_stained_glass white_stained_glass_pane orange_stained_glass_pane magenta_stained_glass_pane light_blue_stained_glass_pane yellow_stained_glass_pane lime_stained_glass_pane pink_stained_glass_pane gray_stained_glass_pane light_gray_stained_glass_pane cyan_stained_glass_pane purple_stained_glass_pane blue_stained_glass_pane brown_stained_glass_pane green_stained_glass_pane red_stained_glass_pane black_stained_glass_pane tinted_glass + block.10079 = ice slime_block white_stained_glass orange_stained_glass magenta_stained_glass light_blue_stained_glass yellow_stained_glass lime_stained_glass pink_stained_glass gray_stained_glass light_gray_stained_glass cyan_stained_glass purple_stained_glass blue_stained_glass brown_stained_glass green_stained_glass red_stained_glass black_stained_glass white_stained_glass_pane orange_stained_glass_pane magenta_stained_glass_pane light_blue_stained_glass_pane yellow_stained_glass_pane lime_stained_glass_pane pink_stained_glass_pane gray_stained_glass_pane light_gray_stained_glass_pane cyan_stained_glass_pane purple_stained_glass_pane blue_stained_glass_pane brown_stained_glass_pane green_stained_glass_pane red_stained_glass_pane black_stained_glass_pane tinted_glass deeperdarker:soundproof_glass naturalist:crimson_froglass naturalist:verdant_froglass naturalist:azure_froglass naturalist:crimson_froglass_pane naturalist:verdant_froglass_pane naturalist:azure_froglass_pane createframed:white_stained_framed_glass_door createframed:white_stained_framed_glass_trapdoor createframed:white_stained_tiled_glass createframed:white_stained_tiled_glass_pane createframed:white_stained_framed_glass createframed:white_stained_framed_glass_pane createframed:horizontal_white_stained_framed_glass createframed:horizontal_white_stained_framed_glass_pane createframed:vertical_white_stained_framed_glass createframed:vertical_white_stained_framed_glass_pane createframed:light_gray_stained_framed_glass_door createframed:light_gray_stained_framed_glass_trapdoor createframed:light_gray_stained_tiled_glass createframed:light_gray_stained_tiled_glass_pane createframed:light_gray_stained_framed_glass createframed:light_gray_stained_framed_glass_pane createframed:horizontal_light_gray_stained_framed_glass createframed:horizontal_light_gray_stained_framed_glass_pane createframed:vertical_light_gray_stained_framed_glass createframed:vertical_light_gray_stained_framed_glass_pane createframed:gray_stained_framed_glass_door createframed:gray_stained_framed_glass_trapdoor createframed:gray_stained_tiled_glass createframed:gray_stained_tiled_glass_pane createframed:gray_stained_framed_glass createframed:gray_stained_framed_glass_pane createframed:horizontal_gray_stained_framed_glass createframed:horizontal_gray_stained_framed_glass_pane createframed:vertical_gray_stained_framed_glass createframed:vertical_gray_stained_framed_glass_pane createframed:black_stained_framed_glass_door createframed:black_stained_framed_glass_trapdoor createframed:black_stained_tiled_glass createframed:black_stained_tiled_glass_pane createframed:black_stained_framed_glass createframed:black_stained_framed_glass_pane createframed:horizontal_black_stained_framed_glass createframed:horizontal_black_stained_framed_glass_pane createframed:vertical_black_stained_framed_glass createframed:vertical_black_stained_framed_glass_pane createframed:brown_stained_framed_glass_door createframed:brown_stained_framed_glass_trapdoor createframed:brown_stained_tiled_glass createframed:brown_stained_tiled_glass_pane createframed:brown_stained_framed_glass createframed:brown_stained_framed_glass_pane createframed:horizontal_brown_stained_framed_glass createframed:horizontal_brown_stained_framed_glass_pane createframed:vertical_brown_stained_framed_glass createframed:vertical_brown_stained_framed_glass_pane createframed:red_stained_framed_glass_door createframed:red_stained_framed_glass_trapdoor createframed:red_stained_tiled_glass createframed:red_stained_tiled_glass_pane createframed:red_stained_framed_glass createframed:red_stained_framed_glass_pane createframed:horizontal_red_stained_framed_glass createframed:horizontal_red_stained_framed_glass_pane createframed:vertical_red_stained_framed_glass createframed:vertical_red_stained_framed_glass_pane createframed:orange_stained_framed_glass_door createframed:orange_stained_framed_glass_trapdoor createframed:orange_stained_tiled_glass createframed:orange_stained_tiled_glass_pane createframed:orange_stained_framed_glass createframed:orange_stained_framed_glass_pane createframed:horizontal_orange_stained_framed_glass createframed:horizontal_orange_stained_framed_glass_pane createframed:vertical_orange_stained_framed_glass createframed:vertical_orange_stained_framed_glass_pane createframed:yellow_stained_framed_glass_door createframed:yellow_stained_framed_glass_trapdoor createframed:yellow_stained_tiled_glass createframed:yellow_stained_tiled_glass_pane createframed:yellow_stained_framed_glass createframed:yellow_stained_framed_glass_pane createframed:horizontal_yellow_stained_framed_glass createframed:horizontal_yellow_stained_framed_glass_pane createframed:vertical_yellow_stained_framed_glass createframed:vertical_yellow_stained_framed_glass_pane createframed:lime_stained_framed_glass_door createframed:lime_stained_framed_glass_trapdoor createframed:lime_stained_tiled_glass createframed:lime_stained_tiled_glass_pane createframed:lime_stained_framed_glass createframed:lime_stained_framed_glass_pane createframed:horizontal_lime_stained_framed_glass createframed:horizontal_lime_stained_framed_glass_pane createframed:vertical_lime_stained_framed_glass createframed:vertical_lime_stained_framed_glass_pane createframed:green_stained_framed_glass_door createframed:green_stained_framed_glass_trapdoor createframed:green_stained_tiled_glass createframed:green_stained_tiled_glass_pane createframed:green_stained_framed_glass createframed:green_stained_framed_glass_pane createframed:horizontal_green_stained_framed_glass createframed:horizontal_green_stained_framed_glass_pane createframed:vertical_green_stained_framed_glass createframed:vertical_green_stained_framed_glass_pane createframed:cyan_stained_framed_glass_door createframed:cyan_stained_framed_glass_trapdoor createframed:cyan_stained_tiled_glass createframed:cyan_stained_tiled_glass_pane createframed:cyan_stained_framed_glass createframed:cyan_stained_framed_glass_pane createframed:horizontal_cyan_stained_framed_glass createframed:horizontal_cyan_stained_framed_glass_pane createframed:vertical_cyan_stained_framed_glass createframed:vertical_cyan_stained_framed_glass_pane createframed:light_blue_stained_framed_glass_door createframed:light_blue_stained_framed_glass_trapdoor createframed:light_blue_stained_tiled_glass createframed:light_blue_stained_tiled_glass_pane createframed:light_blue_stained_framed_glass createframed:light_blue_stained_framed_glass_pane createframed:horizontal_light_blue_stained_framed_glass createframed:horizontal_light_blue_stained_framed_glass_pane createframed:vertical_light_blue_stained_framed_glass createframed:vertical_light_blue_stained_framed_glass_pane createframed:blue_stained_framed_glass_door createframed:blue_stained_framed_glass_trapdoor createframed:blue_stained_tiled_glass createframed:blue_stained_tiled_glass_pane createframed:blue_stained_framed_glass createframed:blue_stained_framed_glass_pane createframed:horizontal_blue_stained_framed_glass createframed:horizontal_blue_stained_framed_glass_pane createframed:vertical_blue_stained_framed_glass createframed:vertical_blue_stained_framed_glass_pane createframed:purple_stained_framed_glass_door createframed:purple_stained_framed_glass_trapdoor createframed:purple_stained_tiled_glass createframed:purple_stained_tiled_glass_pane createframed:purple_stained_framed_glass createframed:purple_stained_framed_glass_pane createframed:horizontal_purple_stained_framed_glass createframed:horizontal_purple_stained_framed_glass_pane createframed:vertical_purple_stained_framed_glass createframed:vertical_purple_stained_framed_glass_pane createframed:magenta_stained_framed_glass_door createframed:magenta_stained_framed_glass_trapdoor createframed:magenta_stained_tiled_glass createframed:magenta_stained_tiled_glass_pane createframed:magenta_stained_framed_glass createframed:magenta_stained_framed_glass_pane createframed:horizontal_magenta_stained_framed_glass createframed:horizontal_magenta_stained_framed_glass_pane createframed:vertical_magenta_stained_framed_glass createframed:vertical_magenta_stained_framed_glass_pane createframed:pink_stained_framed_glass_door createframed:pink_stained_framed_glass_trapdoor createframed:pink_stained_tiled_glass createframed:pink_stained_tiled_glass_pane createframed:pink_stained_framed_glass createframed:pink_stained_framed_glass_pane createframed:horizontal_pink_stained_framed_glass createframed:horizontal_pink_stained_framed_glass_pane createframed:vertical_pink_stained_framed_glass createframed:vertical_pink_stained_framed_glass_pane # EMMISIVE (LIKE GLOWSTONE) - block.10089 = glowstone shroomlight torch wall_torch redstone_torch redstone_wall_torch jack_o_lantern redstone_lamp lantern sea_lantern soul_lantern soul_torch soul_wall_torch + block.10089 = ochre_froglight verdant_froglight pearlescent_froglight glowstone shroomlight torch wall_torch redstone_torch redstone_wall_torch jack_o_lantern redstone_lamp lantern sea_lantern soul_lantern soul_torch soul_wall_torch copper_lantern exposed_copper_lantern weathered_copper_lantern oxidized_copper_lantern waxed_copper_lantern waxed_exposed_copper_lantern waxed_weathered_copper_lantern waxed_oxidized_copper_lantern cataclysm:void_lantern_block deeperdarker:sculk_gleam auroraslanterns:amethyst_lantern auroraslanterns:redstone_lantern # NEW EMMISIVE block.10090 = magma_block end_root campfire:lit=true soul_campfire:lit=true beacon betterendforge:mossy_glowshroom_hymenophore betterendforge:mossy_glowshroom_fur betterendforge:blue_vine_lantern betterendforge:blue_vine_fur betterendforge::lumecorn:shape=light_top_middle betterendforge::lumecorn:shape=light_middle betterendforge::lumecorn:shape=light_bottom betterendforge::purple_polypore betterendforge::bulb_vine:shape=bottom # FAKE EMMISORS - block.10213 = soul_fire + block.10213 = minecraft:soul_fire + + # No SHADOW FIRE + block.10214 = minecraft:fire # METAL-LIKE - block.10400 = iron_block iron_trapdoor gold_block emerald_block lapis_block diamond_block copper_block exposed_copper weathered_copper oxidized_copper cut_copper exposed_cut_copper weathered_cut_copper oxidized_cut_copper cut_copper_stairs exposed_cut_copper_stairs weathered_cut_copper_stairs oxidized_cut_copper_stairs cut_copper_slab exposed_cut_copper_slab weathered_cut_copper_slab oxidized_cut_copper_slab waxed_cut_copper_slab waxed_weathered_cut_copper_slab waxed_weathered_copper waxed_exposed_copper waxed_copper_block waxed_oxidized_cut_copper_slab waxed_weathered_cut_copper_slab waxed_exposed_cut_copper_slab waxed_cuyt_copper_slab waxed_oxidized_copper waxed_cut_copper waxed_exposed_cut_copper waxed_weathered_cut_copper waxed_oxidized_cut_copper waxed_cut_copper_stairs waxed_exposed_cut_copper_stairs waxed_weathered_cut_copper_stairs waxed_oxidized_cut_copper_stairs heavy_weighted_pressure_plate light_weighted_pressure_plate + block.10400 = iron_block iron_trapdoor gold_block emerald_block lapis_block diamond_block copper_block exposed_copper weathered_copper oxidized_copper cut_copper exposed_cut_copper weathered_cut_copper oxidized_cut_copper cut_copper_stairs exposed_cut_copper_stairs weathered_cut_copper_stairs oxidized_cut_copper_stairs cut_copper_slab exposed_cut_copper_slab weathered_cut_copper_slab oxidized_cut_copper_slab waxed_cut_copper_slab waxed_weathered_cut_copper_slab waxed_weathered_copper waxed_exposed_copper waxed_copper_block waxed_oxidized_cut_copper_slab waxed_weathered_cut_copper_slab waxed_exposed_cut_copper_slab waxed_cuyt_copper_slab waxed_oxidized_copper waxed_cut_copper waxed_exposed_cut_copper waxed_weathered_cut_copper waxed_oxidized_cut_copper waxed_cut_copper_stairs waxed_exposed_cut_copper_stairs waxed_weathered_cut_copper_stairs waxed_oxidized_cut_copper_stairs heavy_weighted_pressure_plate light_weighted_pressure_plate iron_bars copper_bars exposed_copper_bars weathered_copper_bars oxidized_copper_bars waxed_copper_bars waxed_exposed_copper_bars waxed_weathered_copper_bars waxed_oxidized_copper_bars chain copper_chain exposed_copper_chain weathered_copper_chain oxidized_copper_chain waxed_copper_chain waxed_exposed_copper_chain waxed_weathered_copper_chain waxed_oxidized_copper_chain copper_golem_statue exposed_copper_golem_statue weathered_copper_golem_statue oxidized_copper_golem_statue waxed_copper_golem_statue waxed_exposed_copper_golem_statue waxed_weathered_copper_golem_statue waxed_oxidized_copper_golem_statue tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top tfc:metal/anvil/bismuth_bronze tfc:metal/block/bismuth_bronze tfc:metal/bars/bismuth_bronze tfc:metal/trapdoor/bismuth_bronze tfc:metal/block/bismuth_bronze_stairs tfc:block/metal/block/bismuth_bronze_slab tfc:block/metal/block/bismuth_bronze_slab_top tfc:metal/anvil/black_bronze tfc:metal/block/black_bronze tfc:metal/bars/black_bronze tfc:metal/trapdoor/black_bronze tfc:metal/block/black_bronze_stairs tfc:block/metal/block/black_bronze_slab tfc:block/metal/block/black_bronze_slab_top tfc:metal/anvil/bronze tfc:metal/block/bronze tfc:metal/bars/bronze tfc:metal/trapdoor/bronze tfc:metal/block/bronze_stairs tfc:block/metal/block/bronze_slab tfc:block/metal/block/bronze_slab_top tfc:metal/anvil/brass tfc:metal/block/brass tfc:metal/bars/brass tfc:metal/trapdoor/brass tfc:metal/block/brass_stairs tfc:block/metal/block/brass_slab tfc:block/metal/block/brass_slab_top tfc:metal/anvil/copper tfc:metal/block/copper tfc:metal/bars/copper tfc:metal/trapdoor/copper tfc:metal/block/copper_stairs tfc:block/metal/block/copper_slab tfc:block/metal/block/copper_slab_top tfc:metal/anvil/gold tfc:metal/block/gold tfc:metal/bars/gold tfc:metal/trapdoor/gold tfc:metal/block/gold_stairs tfc:block/metal/block/gold_slab tfc:block/metal/block/gold_slab_top tfc:metal/anvil/nickel tfc:metal/block/nickel tfc:metal/bars/nickel tfc:metal/trapdoor/nickel tfc:metal/block/nickel_stairs tfc:block/metal/block/nickel_slab tfc:block/metal/block/nickel_slab_top tfc:metal/anvil/rose_gold tfc:metal/block/rose_gold tfc:metal/bars/rose_gold tfc:metal/trapdoor/rose_gold tfc:metal/block/rose_gold_stairs tfc:block/metal/block/rose_gold_slab tfc:block/metal/block/rose_gold_slab_top tfc:metal/anvil/silver tfc:metal/block/silver tfc:metal/bars/silver tfc:metal/trapdoor/silver tfc:metal/block/silver_stairs tfc:block/metal/block/silver_slab tfc:block/metal/block/silver_slab_top tfc:metal/anvil/tin tfc:metal/block/tin tfc:metal/bars/tin tfc:metal/trapdoor/tin tfc:metal/block/tin_stairs tfc:block/metal/block/tin_slab tfc:block/metal/block/tin_slab_top tfc:metal/anvil/zinc tfc:metal/block/zinc tfc:metal/bars/zinc tfc:metal/trapdoor/zinc tfc:metal/block/zinc_stairs tfc:block/metal/block/zinc_slab tfc:block/metal/block/zinc_slab_top tfc:metal/anvil/sterling_silver tfc:metal/block/sterling_silver tfc:metal/bars/sterling_silver tfc:metal/trapdoor/sterling_silver tfc:metal/block/sterling_silver_stairs tfc:block/metal/block/sterling_silver_slab tfc:block/metal/block/sterling_silver_slab_top tfc:metal/anvil/wrought_iron tfc:metal/block/wrought_iron tfc:metal/bars/wrought_iron tfc:metal/trapdoor/wrought_iron tfc:metal/block/wrought_iron_stairs tfc:block/metal/block/wrought_iron_slab tfc:block/metal/block/wrought_iron_slab_top tfc:metal/anvil/cast_iron tfc:metal/block/cast_iron tfc:metal/bars/cast_iron tfc:metal/trapdoor/cast_iron tfc:metal/block/cast_iron_stairs tfc:block/metal/block/cast_iron_slab tfc:block/metal/block/cast_iron_slab_top tfc:metal/anvil/pig_iron tfc:metal/block/pig_iron tfc:metal/bars/pig_iron tfc:metal/trapdoor/pig_iron tfc:metal/block/pig_iron_stairs tfc:block/metal/block/pig_iron_slab tfc:block/metal/block/pig_iron_slab_top tfc:metal/anvil/steel tfc:metal/block/steel tfc:metal/bars/steel tfc:metal/trapdoor/steel tfc:metal/block/steel_stairs tfc:block/metal/block/steel_slab tfc:block/metal/block/steel_slab_top tfc:metal/anvil/black_steel tfc:metal/block/black_steel tfc:metal/bars/black_steel tfc:metal/trapdoor/black_steel tfc:metal/block/black_steel_stairs tfc:block/metal/block/black_steel_slab tfc:block/metal/block/black_steel_slab_top tfc:metal/anvil/blue_steel tfc:metal/block/blue_steel tfc:metal/bars/blue_steel tfc:metal/trapdoor/blue_steel tfc:metal/block/blue_steel_stairs tfc:block/metal/block/blue_steel_slab tfc:block/metal/block/blue_steel_slab_top tfc:metal/anvil/red_steel tfc:metal/block/red_steel tfc:metal/bars/red_steel tfc:metal/trapdoor/red_steel tfc:metal/block/red_steel_stairs tfc:block/metal/block/red_steel_slab tfc:block/metal/block/red_steel_slab_top tfc:metal/anvil/weak_steel tfc:metal/block/weak_steel tfc:metal/bars/weak_steel tfc:metal/trapdoor/weak_steel tfc:metal/block/weak_steel_stairs tfc:block/metal/block/weak_steel_slab tfc:block/metal/block/weak_steel_slab_top tfc:metal/anvil/weak_blue_steel tfc:metal/block/weak_blue_steel tfc:metal/bars/weak_blue_steel tfc:metal/trapdoor/weak_blue_steel tfc:metal/block/weak_blue_steel_stairs tfc:block/metal/block/weak_blue_steel_slab tfc:block/metal/block/weak_blue_steel_slab_top tfc:metal/anvil/weak_red_steel tfc:metal/block/weak_red_steel tfc:metal/bars/weak_red_steel tfc:metal/trapdoor/weak_red_steel tfc:metal/block/weak_red_steel_stairs tfc:block/metal/block/weak_red_steel_slab tfc:block/metal/block/weak_red_steel_slab_top tfc:metal/anvil/high_carbon_steel tfc:metal/block/high_carbon_steel tfc:metal/bars/high_carbon_steel tfc:metal/trapdoor/high_carbon_steel tfc:metal/block/high_carbon_steel_stairs tfc:block/metal/block/high_carbon_steel_slab tfc:block/metal/block/high_carbon_steel_slab_top tfc:metal/anvil/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel tfc:metal/bars/high_carbon_black_steel tfc:metal/trapdoor/high_carbon_black_steel tfc:metal/block/high_carbon_black_steel_stairs tfc:block/metal/block/high_carbon_black_steel_slab tfc:block/metal/block/high_carbon_black_steel_slab_top tfc:metal/anvil/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel tfc:metal/bars/high_carbon_blue_steel tfc:metal/trapdoor/high_carbon_blue_steel tfc:metal/block/high_carbon_blue_steel_stairs tfc:block/metal/block/high_carbon_blue_steel_slab tfc:block/metal/block/high_carbon_blue_steel_slab_top tfc:metal/anvil/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel tfc:metal/bars/high_carbon_red_steel tfc:metal/trapdoor/high_carbon_red_steel tfc:metal/block/high_carbon_red_steel_stairs tfc:block/metal/block/high_carbon_red_steel_slab tfc:block/metal/block/high_carbon_red_steel_slab_top tfc:metal/anvil/bismuth tfc:metal/block/bismuth tfc:metal/bars/bismuth tfc:metal/trapdoor/bismuth tfc:metal/block/bismuth_stairs tfc:block/metal/block/bismuth_slab tfc:block/metal/block/bismuth_slab_top create:copper_ladder create:brass_ladder create:copper_scaffolding create:brass_scaffolding create:brass_block create:copper_bars create:brass_bars create:smart_chute create:fluid_tank create:steam_whistle create:steam_engine create:spout create:hose_pulley create:item_drain create:train_casing create:smart_fluid_pipe create:fluid_pipe create:mechanical_pump create:copper_valve_handle create:fluid_valve create:mechanical_crafter create:sequenced_gearshift create:flywheel create:rotation_speed_controller create:mechanical_arm create:railway_casing create:controls create:brass_funnel create:brass_tunnel create:content_observer create:stockpile_switch create:redstone_link create:pulse_repeater create:pulse_extender create:peculiar_bell create_jetpack:jetpack create_enchantment_industry:printer create_enchantment_industry:disenchanter cataclysm:ancient_metal_block cataclysm:cursium_block cataclysm:enderite_block cataclysm:witherite_block cataclysm:ignitium_block cataclysm:mechanical_fusion_anvil cataclysm:emp cataclysm:black_steel_block create_dd:furnace_engine create_dd:bore_block create_dd:industrial_fan create_dd:hydraulic_press create_dd:item_stockpile create_dd:fluid_reservoir create_dd:dark_metal_block create_dd:dark_metal_plating create_dd:dark_metal_block_slab create_dd:dark_metal_block_stairs create_dd:dark_metal_bricks create_dd:dark_metal_brick_slab create_dd:dark_metal_brick_stairs create:zinc_block create:industrial_iron_block create:train_door create:chute create:item_vault create:haunted_bell minecraft:netherite_block create_jetpack:netherite_jetpack createutilities:void_steel_block createutilities:void_steel_scaffolding createutilities:void_casing createutilities:void_steel_bars createutilities:void_steel_ladder createutilities:void_motor createutilities:void_chest createutilities:void_tank createutilities:void_battery railways:smokestack_caboosestyle railways:smokestack_long railways:smokestack_coalburner railways:smokestack_oilburner railways:smokestack_streamlined railways:smokestack_woodburner railways:fuel_tank railways:portable_fuel_interface create_power_loader:empty_brass_chunk_loader create_power_loader:brass_chunk_loader create_connected:empty_fan_catalyst create_connected:fan_blasting_catalyst create_connected:fan_smoking_catalyst create_connected:fan_splashing_catalyst create_connected:fan_haunting_catalyst create_connected:sequenced_pulse_generator create_connected:item_silo create_things_and_misc:card_reader create_things_and_misc:card_press create_things_and_misc:sprinkler create_things_and_misc:brass_tiles create_things_and_misc:brass_tiles_slab create_things_and_misc:brass_tiles_stair create_things_and_misc:brass_bricks create_things_and_misc:brass_brick_slab create_things_and_misc:brass_brick_stairs vintageimprovements:vanadium_block createcasing:brass_shaft createcasing:creative_casing create_dd:stargaze_singularity_scaffolding create_dd:stargaze_singularity_block create_dd:stargaze_singularity_casing create_dd:mithril_scaffolding create_dd:mithril_block create_dd:mithril_casing create_dd:bronze_scaffolding create_dd:bronze_block create_dd:bronze_casing create_dd:steel_scaffolding create_dd:steel_block create_dd:steel_casing create_dd:industrial_iron_block create_dd:industrial_casing create_dd:tin_scaffolding create_dd:tin_block create_dd:chromatic_block create_dd:refined_radiance_scaffolding create_dd:refined_radiance_block create_dd:refined_radiance_casing create_dd:shadow_steel_scaffolding create_dd:shadow_steel_block create_dd:shadow_steel_casing create_dd:blaze_gold_scaffolding create_dd:blaze_gold_block create_dd:blaze_gold_casing create_dd:hydraulic_scaffolding create_dd:hydraulic_casing create_dd:overburden_scaffolding create_dd:overburden_casing create_dd:train_scaffolding create_dd:zinc_scaffolding create_dd:industrial_scaffolding create_dd:netherite_scaffolding create_dd:bronze_saw create_dd:bronze_drill createbigcannons:big_cartridge createbigcannons:cast_iron_block createbigcannons:nethersteel_block createbigcannons:basin_foundry_lid createbigcannons:wrought_iron_drop_mortar_end createbigcannons:wrought_iron_cannon_end createbigcannons:wrought_iron_cannon_chamber create_dd:flywheel railways:slashed_locometal railways:riveted_locometal railways:locometal_pillar railways:locometal_smokebox railways:plated_locometal railways:flat_slashed_locometal railways:flat_riveted_locometal railways:brass_wrapped_locometal railways:copper_wrapped_locometal railways:iron_wrapped_locometal railways:locometal_boiler railways:brass_wrapped_locometal_boiler railways:copper_wrapped_locometal_boiler railways:iron_wrapped_locometal_boiler railways:white_slashed_locometal railways:white_riveted_locometal railways:white_locometal_pillar railways:white_locometal_smokebox railways:white_plated_locometal railways:white_flat_slashed_locometal railways:white_flat_riveted_locometal railways:white_brass_wrapped_locometal railways:white_copper_wrapped_locometal railways:white_iron_wrapped_locometal railways:white_locometal_boiler railways:white_brass_wrapped_locometal_boiler railways:white_copper_wrapped_locometal_boiler railways:white_iron_wrapped_locometal_boiler railways:light_gray_slashed_locometal railways:light_gray_riveted_locometal railways:light_gray_locometal_pillar railways:light_gray_locometal_smokebox railways:light_gray_plated_locometal railways:light_gray_flat_slashed_locometal railways:light_gray_flat_riveted_locometal railways:light_gray_brass_wrapped_locometal railways:light_gray_copper_wrapped_locometal railways:light_gray_iron_wrapped_locometal railways:light_gray_locometal_boiler railways:light_gray_brass_wrapped_locometal_boiler railways:light_gray_copper_wrapped_locometal_boiler railways:light_gray_iron_wrapped_locometal_boiler railways:gray_slashed_locometal railways:gray_riveted_locometal railways:gray_locometal_pillar railways:gray_locometal_smokebox railways:gray_plated_locometal railways:gray_flat_slashed_locometal railways:gray_flat_riveted_locometal railways:gray_brass_wrapped_locometal railways:gray_copper_wrapped_locometal railways:gray_iron_wrapped_locometal railways:gray_locometal_boiler railways:gray_brass_wrapped_locometal_boiler railways:gray_copper_wrapped_locometal_boiler railways:gray_iron_wrapped_locometal_boiler railways:black_slashed_locometal railways:black_riveted_locometal railways:black_locometal_pillar railways:black_locometal_smokebox railways:black_plated_locometal railways:black_flat_slashed_locometal railways:black_flat_riveted_locometal railways:black_brass_wrapped_locometal railways:black_copper_wrapped_locometal railways:black_iron_wrapped_locometal railways:black_locometal_boiler railways:black_brass_wrapped_locometal_boiler railways:black_copper_wrapped_locometal_boiler railways:black_iron_wrapped_locometal_boiler railways:brown_slashed_locometal railways:brown_riveted_locometal railways:brown_locometal_pillar railways:brown_locometal_smokebox railways:brown_plated_locometal railways:brown_flat_slashed_locometal railways:brown_flat_riveted_locometal railways:brown_brass_wrapped_locometal railways:brown_copper_wrapped_locometal railways:brown_iron_wrapped_locometal railways:brown_locometal_boiler railways:brown_brass_wrapped_locometal_boiler railways:brown_copper_wrapped_locometal_boiler railways:brown_iron_wrapped_locometal_boiler railways:red_slashed_locometal railways:red_riveted_locometal railways:red_locometal_pillar railways:red_locometal_smokebox railways:red_plated_locometal railways:red_flat_slashed_locometal railways:red_flat_riveted_locometal railways:red_brass_wrapped_locometal railways:red_copper_wrapped_locometal railways:red_iron_wrapped_locometal railways:red_locometal_boiler railways:red_brass_wrapped_locometal_boiler railways:red_copper_wrapped_locometal_boiler railways:red_iron_wrapped_locometal_boiler railways:orange_slashed_locometal railways:orange_riveted_locometal railways:orange_locometal_pillar railways:orange_locometal_smokebox railways:orange_plated_locometal railways:orange_flat_slashed_locometal railways:orange_flat_riveted_locometal railways:orange_brass_wrapped_locometal railways:orange_copper_wrapped_locometal railways:orange_iron_wrapped_locometal railways:orange_locometal_boiler railways:orange_brass_wrapped_locometal_boiler railways:orange_copper_wrapped_locometal_boiler railways:orange_iron_wrapped_locometal_boiler railways:yellow_slashed_locometal railways:yellow_riveted_locometal railways:yellow_locometal_pillar railways:yellow_locometal_smokebox railways:yellow_plated_locometal railways:yellow_flat_slashed_locometal railways:yellow_flat_riveted_locometal railways:yellow_brass_wrapped_locometal railways:yellow_copper_wrapped_locometal railways:yellow_iron_wrapped_locometal railways:yellow_locometal_boiler railways:yellow_brass_wrapped_locometal_boiler railways:yellow_copper_wrapped_locometal_boiler railways:yellow_iron_wrapped_locometal_boiler railways:lime_slashed_locometal railways:lime_riveted_locometal railways:lime_locometal_pillar railways:lime_locometal_smokebox railways:lime_plated_locometal railways:lime_flat_slashed_locometal railways:lime_flat_riveted_locometal railways:lime_brass_wrapped_locometal railways:lime_copper_wrapped_locometal railways:lime_iron_wrapped_locometal railways:lime_locometal_boiler railways:lime_brass_wrapped_locometal_boiler railways:lime_copper_wrapped_locometal_boiler railways:lime_iron_wrapped_locometal_boiler railways:green_slashed_locometal railways:green_riveted_locometal railways:green_locometal_pillar railways:green_locometal_smokebox railways:green_plated_locometal railways:green_flat_slashed_locometal railways:green_flat_riveted_locometal railways:green_brass_wrapped_locometal railways:green_copper_wrapped_locometal railways:green_iron_wrapped_locometal railways:green_locometal_boiler railways:green_brass_wrapped_locometal_boiler railways:green_copper_wrapped_locometal_boiler railways:green_iron_wrapped_locometal_boiler railways:cyan_slashed_locometal railways:cyan_riveted_locometal railways:cyan_locometal_pillar railways:cyan_locometal_smokebox railways:cyan_plated_locometal railways:cyan_flat_slashed_locometal railways:cyan_flat_riveted_locometal railways:cyan_brass_wrapped_locometal railways:cyan_copper_wrapped_locometal railways:cyan_iron_wrapped_locometal railways:cyan_locometal_boiler railways:cyan_brass_wrapped_locometal_boiler railways:cyan_copper_wrapped_locometal_boiler railways:cyan_iron_wrapped_locometal_boiler railways:light_blue_slashed_locometal railways:light_blue_riveted_locometal railways:light_blue_locometal_pillar railways:light_blue_locometal_smokebox railways:light_blue_plated_locometal railways:light_blue_flat_slashed_locometal railways:light_blue_flat_riveted_locometal railways:light_blue_brass_wrapped_locometal railways:light_blue_copper_wrapped_locometal railways:light_blue_iron_wrapped_locometal railways:light_blue_locometal_boiler railways:light_blue_brass_wrapped_locometal_boiler railways:light_blue_copper_wrapped_locometal_boiler railways:light_blue_iron_wrapped_locometal_boiler railways:blue_slashed_locometal railways:blue_riveted_locometal railways:blue_locometal_pillar railways:blue_locometal_smokebox railways:blue_plated_locometal railways:blue_flat_slashed_locometal railways:blue_flat_riveted_locometal railways:blue_brass_wrapped_locometal railways:blue_copper_wrapped_locometal railways:blue_iron_wrapped_locometal railways:blue_locometal_boiler railways:blue_brass_wrapped_locometal_boiler railways:blue_copper_wrapped_locometal_boiler railways:blue_iron_wrapped_locometal_boiler railways:purple_slashed_locometal railways:purple_riveted_locometal railways:purple_locometal_pillar railways:purple_locometal_smokebox railways:purple_plated_locometal railways:purple_flat_slashed_locometal railways:purple_flat_riveted_locometal railways:purple_brass_wrapped_locometal railways:purple_copper_wrapped_locometal railways:purple_iron_wrapped_locometal railways:purple_locometal_boiler railways:purple_brass_wrapped_locometal_boiler railways:purple_copper_wrapped_locometal_boiler railways:purple_iron_wrapped_locometal_boiler railways:magenta_slashed_locometal railways:magenta_riveted_locometal railways:magenta_locometal_pillar railways:magenta_locometal_smokebox railways:magenta_plated_locometal railways:magenta_flat_slashed_locometal railways:magenta_flat_riveted_locometal railways:magenta_brass_wrapped_locometal railways:magenta_copper_wrapped_locometal railways:magenta_iron_wrapped_locometal railways:magenta_locometal_boiler railways:magenta_brass_wrapped_locometal_boiler railways:magenta_copper_wrapped_locometal_boiler railways:magenta_iron_wrapped_locometal_boiler railways:pink_slashed_locometal railways:pink_riveted_locometal railways:pink_locometal_pillar railways:pink_locometal_smokebox railways:pink_plated_locometal railways:pink_flat_slashed_locometal railways:pink_flat_riveted_locometal railways:pink_brass_wrapped_locometal railways:pink_copper_wrapped_locometal railways:pink_iron_wrapped_locometal railways:pink_locometal_boiler railways:pink_brass_wrapped_locometal_boiler railways:pink_copper_wrapped_locometal_boiler railways:pink_iron_wrapped_locometal_boiler create:copper_shingles create:copper_shingle_stairs create:copper_shingle_slab create:waxed_copper_shingles create:waxed_copper_shingle_stairs create:waxed_copper_shingle_slab create:exposed_copper_shingles create:exposed_copper_shingle_stairs create:exposed_copper_shingle_slab create:waxed_exposed_copper_shingles create:waxed_exposed_copper_shingle_stairs create:waxed_exposed_copper_shingle_slab create:weathered_copper_shingles create:weathered_copper_shingle_stairs create:weathered_copper_shingle_slab create:waxed_weathered_copper_shingles create:waxed_weathered_copper_shingle_stairs create:waxed_weathered_copper_shingle_slab create:oxidized_copper_shingles create:oxidized_copper_shingle_stairs create:oxidized_copper_shingle_slab create:waxed_oxidized_copper_shingles create:waxed_oxidized_copper_shingle_stairs create:waxed_oxidized_copper_shingle_slab create:copper_tiles create:copper_tile_stairs create:copper_tile_slab create:waxed_copper_tiles create:waxed_copper_tile_stairs create:waxed_copper_tile_slab create:exposed_copper_tiles create:exposed_copper_tile_stairs create:exposed_copper_tile_slab create:waxed_exposed_copper_tiles create:waxed_exposed_copper_tile_stairs create:waxed_exposed_copper_tile_slab create:weathered_copper_tiles create:weathered_copper_tile_stairs create:weathered_copper_tile_slab create:waxed_weathered_copper_tiles create:waxed_weathered_copper_tile_stairs create:waxed_weathered_copper_tile_slab create:oxidized_copper_tiles create:oxidized_copper_tile_stairs create:oxidized_copper_tile_slab create:waxed_oxidized_copper_tiles create:waxed_oxidized_copper_tile_stairs create:waxed_oxidized_copper_tile_slab create_dd:steel_polished_block create_dd:steel_polished_stairs create_dd:steel_polished_slab create_dd:steel_tiled_block create_dd:steel_tiled_stairs create_dd:steel_tiled_slab create_dd:zinc_polished_block create_dd:zinc_polished_stairs create_dd:zinc_polished_slab create_dd:zinc_tiled_block create_dd:zinc_tiled_stairs create_dd:zinc_tiled_slab create_dd:bronze_polished_block create_dd:bronze_polished_stairs create_dd:bronze_polished_slab create_dd:bronze_tiled_block create_dd:bronze_tiled_stairs create_dd:bronze_tiled_slab createbigcannons:cast_iron_sliding_breech createbigcannons:unbored_cast_iron_sliding_breech createbigcannons:incomplete_cast_iron_sliding_breech createbigcannons:cast_iron_quickfiring_breech createbigcannons:cast_iron_screw_breech createbigcannons:unbored_cast_iron_screw_breech createbigcannons:incomplete_cast_iron_screw_breech createbigcannons:cast_iron_cannon_end createbigcannons:cast_iron_autocannon_breech createbigcannons:unbored_cast_iron_autocannon_breech createbigcannons:incomplete_cast_iron_autocannon_breech createbigcannons:cast_iron_autocannon_recoil_spring createbigcannons:unbored_cast_iron_autocannon_recoil_spring createbigcannons:incomplete_cast_iron_autocannon_recoil_spring createbigcannons:cast_iron_autocannon_barrel createbigcannons:unbored_cast_iron_autocannon_barrel createbigcannons:very_small_cast_iron_cannon_layer createbigcannons:small_cast_iron_cannon_layer createbigcannons:medium_cast_iron_cannon_layer createbigcannons:large_cast_iron_cannon_layer createbigcannons:very_large_cast_iron_cannon_layer createbigcannons:unbored_very_small_cast_iron_cannon_layer createbigcannons:unbored_small_cast_iron_cannon_layer createbigcannons:unbored_medium_cast_iron_cannon_layer createbigcannons:unbored_large_cast_iron_cannon_layer createbigcannons:unbored_very_large_cast_iron_cannon_layer createbigcannons:cast_iron_cannon_barrel createbigcannons:built_up_cast_iron_cannon_barrel createbigcannons:cast_iron_cannon_chamber createbigcannons:built_up_cast_iron_cannon_chamber createbigcannons:thick_cast_iron_cannon_chamber createbigcannons:bronze_sliding_breech createbigcannons:unbored_bronze_sliding_breech createbigcannons:incomplete_bronze_sliding_breech createbigcannons:bronze_quickfiring_breech createbigcannons:bronze_screw_breech createbigcannons:unbored_bronze_screw_breech createbigcannons:incomplete_bronze_screw_breech createbigcannons:bronze_cannon_end createbigcannons:bronze_autocannon_breech createbigcannons:unbored_bronze_autocannon_breech createbigcannons:incomplete_bronze_autocannon_breech createbigcannons:bronze_autocannon_recoil_spring createbigcannons:unbored_bronze_autocannon_recoil_spring createbigcannons:incomplete_bronze_autocannon_recoil_spring createbigcannons:bronze_autocannon_barrel createbigcannons:unbored_bronze_autocannon_barrel createbigcannons:very_small_bronze_cannon_layer createbigcannons:small_bronze_cannon_layer createbigcannons:medium_bronze_cannon_layer createbigcannons:large_bronze_cannon_layer createbigcannons:very_large_bronze_cannon_layer createbigcannons:unbored_very_small_bronze_cannon_layer createbigcannons:unbored_small_bronze_cannon_layer createbigcannons:unbored_medium_bronze_cannon_layer createbigcannons:unbored_large_bronze_cannon_layer createbigcannons:unbored_very_large_bronze_cannon_layer createbigcannons:bronze_cannon_barrel createbigcannons:built_up_bronze_cannon_barrel createbigcannons:bronze_cannon_chamber createbigcannons:built_up_bronze_cannon_chamber createbigcannons:thick_bronze_cannon_chamber createbigcannons:steel_sliding_breech createbigcannons:unbored_steel_sliding_breech createbigcannons:incomplete_steel_sliding_breech createbigcannons:steel_quickfiring_breech createbigcannons:steel_screw_breech createbigcannons:unbored_steel_screw_breech createbigcannons:incomplete_steel_screw_breech createbigcannons:steel_cannon_end createbigcannons:steel_autocannon_breech createbigcannons:unbored_steel_autocannon_breech createbigcannons:incomplete_steel_autocannon_breech createbigcannons:steel_autocannon_recoil_spring createbigcannons:unbored_steel_autocannon_recoil_spring createbigcannons:incomplete_steel_autocannon_recoil_spring createbigcannons:steel_autocannon_barrel createbigcannons:unbored_steel_autocannon_barrel createbigcannons:very_small_steel_cannon_layer createbigcannons:small_steel_cannon_layer createbigcannons:medium_steel_cannon_layer createbigcannons:large_steel_cannon_layer createbigcannons:very_large_steel_cannon_layer createbigcannons:unbored_very_small_steel_cannon_layer createbigcannons:unbored_small_steel_cannon_layer createbigcannons:unbored_medium_steel_cannon_layer createbigcannons:unbored_large_steel_cannon_layer createbigcannons:unbored_very_large_steel_cannon_layer createbigcannons:steel_cannon_barrel createbigcannons:built_up_steel_cannon_barrel createbigcannons:steel_cannon_chamber createbigcannons:built_up_steel_cannon_chamber createbigcannons:thick_steel_cannon_chamber createbigcannons:nethersteel_sliding_breech createbigcannons:unbored_nethersteel_sliding_breech createbigcannons:incomplete_nethersteel_sliding_breech createbigcannons:nethersteel_quickfiring_breech createbigcannons:nethersteel_screw_breech createbigcannons:unbored_nethersteel_screw_breech createbigcannons:incomplete_nethersteel_screw_breech createbigcannons:nethersteel_cannon_end createbigcannons:nethersteel_autocannon_breech createbigcannons:unbored_nethersteel_autocannon_breech createbigcannons:incomplete_nethersteel_autocannon_breech createbigcannons:nethersteel_autocannon_recoil_spring createbigcannons:unbored_nethersteel_autocannon_recoil_spring createbigcannons:incomplete_nethersteel_autocannon_recoil_spring createbigcannons:nethersteel_autocannon_barrel createbigcannons:unbored_nethersteel_autocannon_barrel createbigcannons:very_small_nethersteel_cannon_layer createbigcannons:small_nethersteel_cannon_layer createbigcannons:medium_nethersteel_cannon_layer createbigcannons:large_nethersteel_cannon_layer createbigcannons:very_large_nethersteel_cannon_layer createbigcannons:unbored_very_small_nethersteel_cannon_layer createbigcannons:unbored_small_nethersteel_cannon_layer createbigcannons:unbored_medium_nethersteel_cannon_layer createbigcannons:unbored_large_nethersteel_cannon_layer createbigcannons:unbored_very_large_nethersteel_cannon_layer createbigcannons:nethersteel_cannon_barrel createbigcannons:built_up_nethersteel_cannon_barrel createbigcannons:nethersteel_cannon_chamber createbigcannons:built_up_nethersteel_cannon_chamber createbigcannons:thick_nethersteel_cannon_chamber createcasing:brass_mixer createcasing:brass_press createcasing:brass_depot createcasing:copper_mixer createcasing:copper_press createcasing:copper_depot createcasing:railway_gearbox createcasing:railway_encased_chain_drive createcasing:railway_adjustable_chain_gearshift createcasing:railway_mixer createcasing:railway_press createcasing:railway_depot createcasing:creative_gearbox createcasing:creative_encased_chain_drive createcasing:creative_adjustable_chain_gearshift createcasing:creative_mixer createcasing:creative_press createcasing:creative_depot createcasing:industrial_iron_gearbox createcasing:industrial_iron_encased_chain_drive createcasing:industrial_iron_adjustable_chain_gearshift createcasing:industrial_iron_mixer createcasing:industrial_iron_press createcasing:industrial_iron_depot createdeco:brass_coinstack createdeco:brass_bars createdeco:brass_bars_overlay createdeco:brass_mesh_fence createdeco:brass_hull createdeco:brass_catwalk createdeco:brass_catwalk_stairs createdeco:brass_catwalk_railing createdeco:brass_support_wedge createdeco:brass_support createdeco:brass_sheet_metal createdeco:brass_door createdeco:locked_brass_door createdeco:brass_trapdoor createdeco:red_brass_lamp createdeco:green_brass_lamp createdeco:blue_brass_lamp createdeco:yellow_brass_lamp createdeco:iron_coinstack createdeco:iron_bars createdeco:iron_bars_overlay createdeco:iron_mesh_fence createdeco:iron_hull createdeco:iron_catwalk createdeco:iron_catwalk_stairs createdeco:iron_catwalk_railing createdeco:iron_support_wedge createdeco:iron_support createdeco:iron_sheet_metal createdeco:iron_door createdeco:locked_iron_door createdeco:iron_trapdoor createdeco:red_iron_lamp createdeco:green_iron_lamp createdeco:blue_iron_lamp createdeco:yellow_iron_lamp createdeco:copper_coinstack createdeco:copper_bars createdeco:copper_bars_overlay createdeco:copper_mesh_fence createdeco:copper_hull createdeco:copper_catwalk createdeco:copper_catwalk_stairs createdeco:copper_catwalk_railing createdeco:copper_support_wedge createdeco:copper_support createdeco:copper_sheet_metal createdeco:copper_door createdeco:locked_copper_door createdeco:copper_trapdoor createdeco:red_copper_lamp createdeco:green_copper_lamp createdeco:blue_copper_lamp createdeco:yellow_copper_lamp createdeco:industrial_iron_coinstack createdeco:industrial_iron_bars createdeco:industrial_iron_bars_overlay createdeco:industrial_iron_mesh_fence createdeco:industrial_iron_hull createdeco:industrial_iron_catwalk createdeco:industrial_iron_catwalk_stairs createdeco:industrial_iron_catwalk_railing createdeco:industrial_iron_support_wedge createdeco:industrial_iron_support createdeco:industrial_iron_sheet_metal createdeco:industrial_iron_door createdeco:locked_industrial_iron_door createdeco:industrial_iron_trapdoor createdeco:red_industrial_iron_lamp createdeco:green_industrial_iron_lamp createdeco:blue_industrial_iron_lamp createdeco:yellow_industrial_iron_lamp createdeco:zinc_coinstack createdeco:zinc_bars createdeco:zinc_bars_overlay createdeco:zinc_mesh_fence createdeco:zinc_hull createdeco:zinc_catwalk createdeco:zinc_catwalk_stairs createdeco:zinc_catwalk_railing createdeco:zinc_support_wedge createdeco:zinc_support createdeco:zinc_sheet_metal createdeco:zinc_door createdeco:locked_zinc_door createdeco:zinc_trapdoor createdeco:red_zinc_lamp createdeco:green_zinc_lamp createdeco:blue_zinc_lamp createdeco:yellow_zinc_lamp # SAND-LIKE - block.10410 = sand red_sand dirt_path + block.10410 = sand red_sand dirt_path gravel suspicious_gravel suspicious_sand white_concrete_powder light_gray_concrete_powder gray_concrete_powder black_concrete_powder brown_concrete_powder red_concrete_powder orange_concrete_powder yellow_concrete_powder lime_concrete_powder green_concrete_powder cyan_concrete_powder light_blue_concrete_powder blue_concrete_powder purple_concrete_powder magenta_concrete_powder pink_concrete_powder coarse_dirt # FABRIC-LIKE - block.10440 = white_carpet orange_carpet magenta_carpet light_blue_carpet yellow_carpet lime_carpet pink_carpet gray_carpet light_gray_carpet cyan_carpet purple_carpet blue_carpet brown_carpet green_carpet red_carpet black_carpet white_wool orange_wool magenta_wool light_blue_wool yellow_wool lime_wool pink_wool gray_wool light_gray_wool cyan_wool purple_wool blue_wool brown_wool green_wool red_wool black_wool + block.10440 = white_carpet orange_carpet magenta_carpet light_blue_carpet yellow_carpet lime_carpet pink_carpet gray_carpet light_gray_carpet cyan_carpet purple_carpet blue_carpet brown_carpet green_carpet red_carpet black_carpet white_wool orange_wool magenta_wool light_blue_wool yellow_wool lime_wool pink_wool gray_wool light_gray_wool cyan_wool purple_wool blue_wool brown_wool green_wool red_wool black_wool estrogen:moth_wool estrogen:quilted_moth_wool estrogen:moth_wool_carpet estrogen:quilted_moth_wool_carpet farmersdelight:canvas_rug farmersdelight:full_tatami_mat farmersdelight:half_tatami_mat farmersdelight:tatami sophisticated_backpacks:backpack create_dd:blueprint_block create_dd:blueprint_carpet create_dd:mysterious_blueprint_carpet handcrafted:acacia_couch handcrafted:birch_couch handcrafted:bamboo_couch handcrafted:cherry_couch handcrafted:crimson_couch handcrafted:dark_oak_couch handcrafted:jungle_couch handcrafted:mangrove_couch handcrafted:oak_couch handcrafted:spruce_couch handcrafted:warped_couch handcrafted:acacia_fancy_bed handcrafted:birch_fancy_bed handcrafted:bamboo_fancy_bed handcrafted:cherry_fancy_bed handcrafted:crimson_fancy_bed handcrafted:dark_oak_fancy_bed handcrafted:jungle_fancy_bed handcrafted:mangrove_fancy_bed handcrafted:oak_fancy_bed handcrafted:spruce_fancy_bed handcrafted:warped_fancy_bed create:white_seat interiors:white_chair interiors:white_floor_chair create:light_gray_seat interiors:light_gray_chair interiors:light_gray_floor_chair create:gray_seat interiors:gray_chair interiors:gray_floor_chair create:black_seat interiors:black_chair interiors:black_floor_chair create:brown_seat interiors:brown_chair interiors:brown_floor_chair create:red_seat interiors:red_chair interiors:red_floor_chair create:orange_seat interiors:orange_chair interiors:orange_floor_chair create:yellow_seat interiors:yellow_chair interiors:yellow_floor_chair create:lime_seat interiors:lime_chair interiors:lime_floor_chair create:green_seat interiors:green_chair interiors:green_floor_chair create:cyan_seat interiors:cyan_chair interiors:cyan_floor_chair create:light_blue_seat interiors:light_blue_chair interiors:light_blue_floor_chair create:blue_seat interiors:blue_chair interiors:blue_floor_chair create:purple_seat interiors:purple_chair interiors:purple_floor_chair create:magenta_seat interiors:magenta_chair interiors:magenta_floor_chair create:pink_seat interiors:pink_chair interiors:pink_floor_chair #else - # WAVING ENTITIES - block.10031 = minecraft:tallgrass biomesoplenty:plant_0 biomesoplenty:plant_1 atum:oasis_grass atum:dead_grass atum:shrub atum:weed thebetweenlands:blue_eyed_grass thebetweenlands:bottle_brush_grass thebetweenlands:cave_grass thebetweenlands:swamp_tallgrass thebetweenlands:pale_grass xlfoodmod:grass midnight:fingered_grass midnight:tall_midnight_grass tconstruct:slime_grass_tall pvj:short_grass pvj:chickenweed pvj:clovers pvj:crabgrass pvj:beach_grass biomesoplenty:coral coralreef:coral biomesoplenty:seaweed - block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots pvj:wild_wheat pvj:wild_potato pvj:wild_beetroot pvj:wild_carrot - block.10175 = minecraft:double_plant:half=lower thebetweenlands:swamp_double_tallgrass:half=lower thebetweenlands:tall_cattail:half=lower midnight:double_midnight_grass:half=lower zawa:eucalyptus_bottom botania:doubleflower1:half=lower botania:doubleflower2:half=lower zawa:karvy_bottom - block.10176 = minecraft:double_plant:half=upper thebetweenlands:swamp_double_tallgrass:half=upper thebetweenlands:tall_cattail:half=upper midnight:double_midnight_grass:half=upper zawa:eucalyptus_top botania:doubleflower1:half=upper botania:doubleflower2:half=upper zawa:karvy_top - + # GRASS LIKE ENTITIES + block.10031 = minecraft:tallgrass biomesoplenty:plant_0 biomesoplenty:plant_1 atum:oasis_grass atum:dead_grass atum:shrub atum:weed thebetweenlands:blue_eyed_grass thebetweenlands:bottle_brush_grass thebetweenlands:cave_grass thebetweenlands:swamp_tallgrass thebetweenlands:pale_grass xlfoodmod:grass midnight:fingered_grass midnight:tall_midnight_grass tconstruct:slime_grass_tall pvj:short_grass pvj:chickenweed pvj:clovers pvj:crabgrass pvj:beach_grass biomesoplenty:coral coralreef:coral biomesoplenty:seaweed tfc:plant/allium tfc:plant/anthurium tfc:plant/arrowhead tfc:plant/artist_conk tfc:plant/tulip_white + + # CROPS LIKE + block.10059 = minecraft:wheat minecraft:carrots minecraft:potatoes minecraft:beetroots pvj:wild_wheat pvj:wild_potato pvj:wild_beetroot pvj:wild_carrot tfc:crop/carrot tfc:crop/tomato + + # LOWER-HALF ENTITIES + block.10175 = minecraft:double_plant:half=lower thebetweenlands:swamp_double_tallgrass:half=lower thebetweenlands:tall_cattail:half=lower midnight:double_midnight_grass:half=lower zawa:eucalyptus_bottom botania:doubleflower1:half=lower botania:doubleflower2:half=lower zawa:karvy_bottom tfc:plant/badderlocks:half=LOWER + + # UPPER-HALF ENTITIES + block.10176 = minecraft:double_plant:half=upper thebetweenlands:swamp_double_tallgrass:half=upper thebetweenlands:tall_cattail:half=upper midnight:double_midnight_grass:half=upper zawa:eucalyptus_top botania:doubleflower1:half=upper botania:doubleflower2:half=upper zawa:karvy_top tfc:plant/badderlocks:half=upper + block.10018 = minecraft:leaves minecraft:leaves2 biomesoplenty:leaves_0 biomesoplenty:leaves_1 biomesoplenty:leaves_2 biomesoplenty:leaves_3 biomesoplenty:leaves_4 biomesoplenty:leaves_5 atum:palm_leaves atum:deadwood_leaves quark:variant_leaves twilightforest:twilight_leaves twilightforest:magic_leaves twilightforest:twilight_leaves_3 twilightforest:dark_leaves twilightforest:giant_leaves midnight:shadowroot_leaves midnight:dark_willow_leaves aether_legacy:aether_leaves aether_legacy:crystal_leaves dynamictrees:leaves0 dynamictrees:leaves1 betterwithmods:blood_leaves rustic:leaves thebetweenlands:leaves_weedwood_tree thebetweenlands:leaves_sap_tree thebetweenlands:leaves_rubber_tree thebetweenlands:leaves_hearthgrove_tree thebetweenlands:leaves_nibbletwig_tree thebetweenlands:leaves_spirit_tree_top thebetweenlands:leaves_spirit_tree_middle thebetweenlands:leaves_spirit_tree_bottom ic2:leaves tconstruct:slime_leaves forestry:leaves pvj:leaves_willow pvj:leaves_mangrove pvj:leaves_palm pvj:leaves_redwood pvj:leaves_fir pvj:leaves_pine pvj:leaves_aspen pvj:leaves_red_maple pvj:leaves_orange_maple pvj:leaves_baobab pvj:leaves_cottonwood pvj:leaves_juniper pvj:leaves_juniper_berried pvj:leaves_white_cherry_blossom pvj:leaves_pink_cherry_blossom pvj:leaves_jacaranda extrabiomesxl:leaf_autumn_brown extrabiomesxl:leaf_autumn_orange extrabiomesxl:leaf_autumn_red extrabiomesxl:leaf_autumn_yellow extrabiomesxl:leaf_cypress_bald extrabiomesxl:leaf_cypress_regular extrabiomesxl:leaf_fir extrabiomesxl:leaf_japanese_maple_regular extrabiomesxl:leaf_japanese_maple_shrub extrabiomesxl:leaf_rainbow_eucalyptus extrabiomesxl:leaf_redwood extrabiomesxl:leaf_sakura extrautils2:ironwood_leaves musiccraft:mleaves thaumcraft:leaves_greatwood thaumcraft:leaves_silverwood + # WATER LIKE + block.10008 = minecraft:water minecraft:flowing_water 113_water_mechanics:downwards_bubble_column 113_water_mechanics:upwards_bubble_column bubble_elevator:bubble_column magma_bubble_column:magma_bubble_column subwild:water_puddle tfc:fluid/finite_fresh_water tfc:fluid/fresh_water tfc:fluid/finite_salt_water tfc:fluid/salt_water tfc:fluid/finite_river_water tfc:fluid/river_water tfc:fluid/spring_water tfc:fluid/finite_spring_water + # REFLECTIVE - block.10008 = minecraft:water minecraft:flowing_water 113_water_mechanics:downwards_bubble_column 113_water_mechanics:upwards_bubble_column bubble_elevator:bubble_column magma_bubble_column:magma_bubble_column block.10079 = ice slime stained_glass stained_glass_pane # EMMISIVE (LIKE GLOWSTONE) @@ -60,16 +75,19 @@ # NO-WAVEABLE block.10032 = reeds sugar_cane tube_coral brain_coral fire_coral bubble_coral horn_coral dead_tube_coral dead_brain_coral dead_fire_coral dead_bubble_coral dead_horn_coral tube_coral_fan brain_coral_fan fire_coral_fan bubble_coral_fan horn_coral_fan dead_tube_coral_fan dead_brain_coral_fan dead_fire_coral_fan dead_bubble_coral_fan dead_horn_coral_fan sapling nether_wart - + # NEW EMMISIVE - block.10090 = magma soul_fire fire flowing_lava lava end_root campfire:lit=true soul_campfire:lit=true beacon betterendforge:mossy_glowshroom_hymenophore betterendforge:mossy_glowshroom_fur betterendforge:blue_vine_lantern betterendforge:blue_vine_fur betterendforge::lumecorn:shape=light_top_middle betterendforge::lumecorn:shape=light_middle betterendforge::lumecorn:shape=light_bottom betterendforge::purple_polypore betterendforge::bulb_vine:shape=bottom - + block.10090 = magma flowing_lava lava end_root beacon betterendforge:mossy_glowshroom_hymenophore betterendforge:mossy_glowshroom_fur betterendforge:blue_vine_lantern betterendforge:blue_vine_fur betterendforge::lumecorn:shape=light_top_middle betterendforge::lumecorn:shape=light_middle betterendforge::lumecorn:shape=light_bottom betterendforge::purple_polypore betterendforge::bulb_vine:shape=bottom + # FAKE EMMISORS - block.10213 = soul_fire + block.10213 = minecraft:soul_fire + + # No SHADOW FIRE + block.10214 = fire # METAL-LIKE - block.10400 = iron_block gold_block emerald_block lapis_block diamond_block copper_block exposed_copper weathered_copper oxidized_copper cut_copper exposed_cut_copper weathered_cut_copper oxidized_cut_copper cut_copper_stairs exposed_cut_copper_stairs weathered_cut_copper_stairs oxidized_cut_copper_stairs cut_copper_slab exposed_cut_copper_slab weathered_cut_copper_slab oxidized_cut_copper_slab waxed_cut_copper_slab waxed_weathered_cut_copper_slab waxed_weathered_copper waxed_exposed_copper waxed_copper_block waxed_oxidized_cut_copper_slab waxed_weathered_cut_copper_slab waxed_exposed_cut_copper_slab waxed_cuyt_copper_slab waxed_oxidized_copper waxed_cut_copper waxed_exposed_cut_copper waxed_weathered_cut_copper waxed_oxidized_cut_copper waxed_cut_copper_stairs waxed_exposed_cut_copper_stairs waxed_weathered_cut_copper_stairs waxed_oxidized_cut_copper_stairs - + block.10400 = iron_block gold_block emerald_block lapis_block diamond_block + # SAND-LIKE block.10410 = sand red_sand dirt_path diff --git a/shaders/common/basic_blocks_fragment.glsl b/shaders/common/basic_blocks_fragment.glsl index e95de96b..932c1322 100644 --- a/shaders/common/basic_blocks_fragment.glsl +++ b/shaders/common/basic_blocks_fragment.glsl @@ -1,14 +1,15 @@ #include "/lib/config.glsl" -/* Config, uniforms, ins, outs */ -varying vec4 tint_color; +/* Uniforms, ins, outs */ +varying vec4 tintColor; varying vec2 texcoord; -varying vec3 basic_light; +varying vec3 basicLight; -void main() { - vec4 block_color = tint_color; +// MAIN FUNCTION ------------------ - block_color.rgb *= basic_light; +void main() { + vec4 blockColor = tintColor; + blockColor.rgb *= basicLight; - #include "/src/writebuffers.glsl" + #include "/src/writebuffers.glsl" } diff --git a/shaders/common/basic_blocks_vertex.glsl b/shaders/common/basic_blocks_vertex.glsl index e695394a..795a785e 100644 --- a/shaders/common/basic_blocks_vertex.glsl +++ b/shaders/common/basic_blocks_vertex.glsl @@ -1,62 +1,54 @@ #include "/lib/config.glsl" +/* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif +/* Uniforms */ + uniform float rainStrength; uniform mat4 gbufferProjectionInverse; #if defined SHADOW_CASTING && !defined NETHER - uniform mat4 gbufferModelViewInverse; + uniform mat4 gbufferModelViewInverse; #endif -varying vec4 tint_color; +/* Ins / Outs */ + +varying vec4 tintColor; varying vec2 texcoord; -varying vec3 basic_light; +varying vec3 basicLight; + +/* Utility functions */ #include "/lib/luma.glsl" #include "/lib/basic_utils.glsl" #if AA_TYPE > 0 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif +// MAIN FUNCTION ------------------ + void main() { - #include "/src/basiccoords_vertex.glsl" - #include "/src/position_vertex.glsl" - tint_color = gl_Color; - - // vec2 lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy * 1.0323886639676114; - - // vec2 basic_light_2 = (max(lmcoord, vec2(0.065)) - vec2(0.065)) * 1.06951871657754; - - basic_light = day_blend( - LIGHT_SUNSET_COLOR, - LIGHT_DAY_COLOR, - LIGHT_NIGHT_COLOR - ); - - basic_light = mix( - basic_light, - ZENITH_SKY_RAIN_COLOR * luma(basic_light), - rainStrength - ); - - vec2 illumination = clamp(abs(lmcoord), 0.0, 1.0); // Fix lines without correct illumination data - illumination.y = (max(illumination.y, 0.065) - 0.065) * 1.06951871657754; - - #if defined UNKNOWN_DIM - vec3 candle_color = - CANDLE_BASELIGHT * ((illumination.x * illumination.x) + pow(illumination.x * 1.205, 6.0)) * 2.75; - #else - vec3 candle_color = - CANDLE_BASELIGHT * ((illumination.x * illumination.x) + pow(illumination.x * 1.165, 6.0)); - #endif - - basic_light += candle_color; + #include "/src/basiccoords_vertex.glsl" + #include "/src/position_vertex.glsl" + tintColor = gl_Color; + + basicLight = dayBlend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); + basicLight = mix(basicLight, ZENITH_SKY_RAIN_COLOR * luma(basicLight), rainStrength); + + vec2 illumination = clamp(abs(lmcoord), 0.0, 1.0); // Fix lines without correct illumination data + illumination.y = (max(illumination.y, 0.065) - 0.065) * 1.06951871657754; + + vec3 candleColor = + CANDLE_BASELIGHT * ((illumination.x * illumination.x) + pow(illumination.x * 1.165, 6.0)); + + basicLight += candleColor; } diff --git a/shaders/common/clouds_blocks_fragment.glsl b/shaders/common/clouds_blocks_fragment.glsl index 25b3e617..5ca07aa7 100644 --- a/shaders/common/clouds_blocks_fragment.glsl +++ b/shaders/common/clouds_blocks_fragment.glsl @@ -1,34 +1,38 @@ #include "/lib/config.glsl" -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform sampler2D tex; uniform float far; uniform float blindness; #if MC_VERSION >= 11900 - uniform float darknessFactor; - uniform float darknessLightFactor; + uniform float darknessFactor; + uniform float darknessLightFactor; #endif #if V_CLOUDS == 0 || defined UNKNOWN_DIM - uniform float pixel_size_x; - uniform float pixel_size_y; - uniform sampler2D gaux4; + uniform float pixelSizeX; + uniform float pixelSizeY; + uniform sampler2D gaux4; #endif -// Varyings (per thread shared variables) +/* Ins / Outs */ + #if V_CLOUDS == 0 || defined UNKNOWN_DIM - varying vec2 texcoord; - varying vec4 tint_color; + varying vec2 texcoord; + varying vec4 tintColor; #endif +// Main function --------- + void main() { - #if V_CLOUDS == 0 || defined UNKNOWN_DIM - vec4 block_color = texture2D(tex, texcoord) * tint_color; - #include "/src/cloudfinalcolor.glsl" - #include "/src/writebuffers.glsl" - #elif MC_VERSION <= 11300 - vec4 block_color = vec4(0.0); - #include "/src/writebuffers.glsl" - #endif + #if V_CLOUDS == 0 || defined UNKNOWN_DIM + vec4 blockColor = texture2D(tex, texcoord) * tintColor; + #include "/src/cloudfinalcolor.glsl" + #include "/src/writebuffers.glsl" + #elif MC_VERSION <= 11300 + vec4 blockColor = vec4(0.0); + #include "/src/writebuffers.glsl" + #endif } diff --git a/shaders/common/clouds_blocks_vertex.glsl b/shaders/common/clouds_blocks_vertex.glsl index 1758924f..60ae18f9 100644 --- a/shaders/common/clouds_blocks_vertex.glsl +++ b/shaders/common/clouds_blocks_vertex.glsl @@ -1,33 +1,40 @@ #include "/lib/config.glsl" -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform mat4 gbufferProjectionInverse; #if V_CLOUDS == 0 || defined UNKNOWN_DIM - uniform float rainStrength; + uniform float rainStrength; #endif #if defined SHADOW_CASTING && !defined NETHER - uniform mat4 gbufferModelViewInverse; + uniform mat4 gbufferModelViewInverse; #endif +/* Ins / Outs */ + #if V_CLOUDS == 0 || defined UNKNOWN_DIM - varying vec2 texcoord; - varying vec4 tint_color; + varying vec2 texcoord; + varying vec4 tintColor; #endif +/* Utility functions */ + #if AA_TYPE > 0 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif #if V_CLOUDS == 0 || defined UNKNOWN_DIM - #include "/lib/luma.glsl" + #include "/lib/luma.glsl" #endif +// MAIN FUNCTION ------------------ + void main() { - #if V_CLOUDS == 0 || defined UNKNOWN_DIM - texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; - tint_color = gl_Color; - #endif - #include "/src/position_vertex.glsl" + #if V_CLOUDS == 0 || defined UNKNOWN_DIM + texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + tintColor = gl_Color; + #endif + #include "/src/position_vertex.glsl" } diff --git a/shaders/common/composite1_fragment.glsl b/shaders/common/composite1_fragment.glsl index e8c25f98..0b6cd571 100644 --- a/shaders/common/composite1_fragment.glsl +++ b/shaders/common/composite1_fragment.glsl @@ -1,66 +1,73 @@ -/* Config, uniforms, ins, outs */ #include "/lib/config.glsl" +#ifdef DOF + const bool colortex1MipmapEnabled = true; +#endif + +#ifdef BLOOM + const bool colortex0MipmapEnabled = true; +#endif + +/* Uniforms */ + uniform sampler2D colortex1; -uniform sampler2D gaux1; -uniform float inv_aspect_ratio; +uniform sampler2D colortex0; +uniform float aspectRatioInverse; #ifdef DOF - uniform float centerDepthSmooth; - uniform float pixel_size_x; - uniform float pixel_size_y; - uniform float viewWidth; - uniform float viewHeight; - uniform float fov_y_inv; + uniform float centerDepthSmooth; + uniform float pixelSizeX; + uniform float pixelSizeY; + uniform float viewWidth; + uniform float viewHeight; + uniform float fovYInverse; #endif -#ifdef DOF - const bool colortex1MipmapEnabled = true; +#ifdef BLOOM + uniform float softLod; #endif -// Varyings (per thread shared variables) +/* Ins / Outs */ + varying vec2 texcoord; -#include "/lib/bloom.glsl" +#ifdef BLOOM + #include "/lib/bloom.glsl" +#endif + +/* Utility functions */ #if defined BLOOM || defined DOF - #include "/lib/dither.glsl" + #include "/lib/dither.glsl" #endif #ifdef DOF - #include "/lib/blur.glsl" + #include "/lib/blur.glsl" #endif -#ifdef BLOOM - const bool gaux1MipmapEnabled = true; -#endif +// MAIN FUNCTION ------------------ void main() { - vec4 block_color = texture2D(colortex1, texcoord); + vec4 blockColor = texture2DLod(colortex1, texcoord, 0); - #if defined BLOOM || defined DOF - #if AA_TYPE > 0 - float dither = shifted_eclectic_makeup_dither(gl_FragCoord.xy); - #else - float dither = semiblue(gl_FragCoord.xy); + #if defined BLOOM || defined DOF + #if AA_TYPE > 0 + float dither = shiftedSemiblue(gl_FragCoord.xy); + #else + float dither = semiblue(gl_FragCoord.xy); + #endif #endif - #endif - - #ifdef DOF - block_color.rgb = noised_blur( - block_color, - colortex1, - texcoord, - DOF_STRENGTH, - dither - ); - #endif - - #ifdef BLOOM - vec3 bloom = mipmap_bloom(gaux1, texcoord, dither); - block_color.rgb += bloom; - #endif - - /* DRAWBUFFERS:1 */ - gl_FragData[0] = block_color; + + #ifdef DOF + blockColor.rgb = noisedBlur(blockColor, colortex1, texcoord, DOF_STRENGTH, dither); + #endif + + #ifdef BLOOM + vec3 bloom = mipmap_bloom(colortex0, texcoord, dither); + blockColor.rgb += bloom; + #endif + + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); + /* DRAWBUFFERS:1 */ + gl_FragData[0] = blockColor; } diff --git a/shaders/common/composite1_vertex.glsl b/shaders/common/composite1_vertex.glsl index 7b2940f9..6fadd410 100644 --- a/shaders/common/composite1_vertex.glsl +++ b/shaders/common/composite1_vertex.glsl @@ -1,9 +1,12 @@ #include "/lib/config.glsl" -/* Config, uniforms, ins, outs */ +/* Ins / Outs */ + varying vec2 texcoord; +// MAIN FUNCTION ------------------ + void main() { - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - texcoord = gl_MultiTexCoord0.xy; + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + texcoord = gl_MultiTexCoord0.xy; } diff --git a/shaders/common/composite2_fragment.glsl b/shaders/common/composite2_fragment.glsl index bfd844b3..0fff2795 100644 --- a/shaders/common/composite2_fragment.glsl +++ b/shaders/common/composite2_fragment.glsl @@ -1,100 +1,113 @@ -#if MC_VERSION < 11300 - const bool colortex0Clear = false; - const bool colortex1Clear = false; - const bool colortex2Clear = false; - const bool colortex3Clear = false; - const bool gaux1Clear = false; - const bool gaux2Clear = false; - const bool gaux3Clear = false; - const bool gaux4Clear = false; -#endif - -/* Config, uniforms, ins, outs */ #include "/lib/config.glsl" -// 'Global' constants from system -uniform sampler2D colortex1; +const bool colortex0Clear = false; +const bool colortex1Clear = false; +const bool colortex2Clear = false; +const bool colortex3Clear = false; +const bool gaux1Clear = false; +const bool gaux2Clear = false; +const bool gaux3Clear = false; +const bool gaux4Clear = false; +/* Uniforms */ + +uniform sampler2D colortex1; #if AA_TYPE > 0 || defined MOTION_BLUR - uniform sampler2D colortex3; // TAA past averages - uniform float pixel_size_x; - uniform float pixel_size_y; - uniform mat4 gbufferProjectionInverse; - uniform mat4 gbufferProjection; - uniform mat4 gbufferModelViewInverse; - uniform vec3 cameraPosition; - uniform vec3 previousCameraPosition; - uniform mat4 gbufferPreviousProjection; - uniform mat4 gbufferPreviousModelView; - uniform sampler2D depthtex0; - uniform float frameTime; + uniform sampler2D colortex3; // TAA past averages + uniform float pixelSizeX; + uniform float pixelSizeY; + uniform mat4 gbufferProjectionInverse; + uniform mat4 gbufferProjection; + uniform mat4 gbufferModelViewInverse; + uniform vec3 cameraPosition; + uniform vec3 previousCameraPosition; + uniform mat4 gbufferPreviousProjection; + uniform mat4 gbufferPreviousModelView; + uniform sampler2D depthtex1; + uniform float frameTime; #endif -// Varyings (per thread shared variables) +/* Ins / Outs */ + varying vec2 texcoord; +/* Utility functions */ + #if AA_TYPE > 0 || defined MOTION_BLUR - #include "/lib/projection_utils.glsl" - #include "/lib/past_projection_utils.glsl" + #include "/lib/projection_utils.glsl" #endif #ifdef MOTION_BLUR - #include "/lib/dither.glsl" - #include "/lib/motion_blur.glsl" + #include "/lib/dither.glsl" + #include "/lib/motion_blur.glsl" #endif #if AA_TYPE > 0 - #include "/lib/luma.glsl" - #include "/lib/fast_taa.glsl" + #include "/lib/luma.glsl" + #include "/lib/color_conversion.glsl" + #include "/lib/fast_taa.glsl" #endif +// MAIN FUNCTION ------------------ + void main() { - vec4 block_color = texture2D(colortex1, texcoord); - - // Precalc past position and velocity - #if AA_TYPE > 0 || defined MOTION_BLUR - // Reproyección del cuadro anterior - float z_depth = texture2D(depthtex0, texcoord).r; - vec2 texcoord_past; - vec3 curr_view_pos; - vec3 curr_feet_player_pos; - vec3 prev_feet_player_pos; - vec3 prev_view_pos; - vec2 final_pos; - - if (z_depth < 0.56) { - texcoord_past = texcoord; - } else { - curr_view_pos = vec3(vec2(gbufferProjectionInverse[0].x, gbufferProjectionInverse[1].y) * (texcoord * 2.0 - 1.0) + gbufferProjectionInverse[3].xy, gbufferProjectionInverse[3].z); - curr_view_pos /= (gbufferProjectionInverse[2].w * (z_depth * 2.0 - 1.0) + gbufferProjectionInverse[3].w); - curr_feet_player_pos = mat3(gbufferModelViewInverse) * curr_view_pos + gbufferModelViewInverse[3].xyz; - - prev_feet_player_pos = z_depth > 0.56 ? curr_feet_player_pos + cameraPosition - previousCameraPosition : curr_feet_player_pos; - prev_view_pos = mat3(gbufferPreviousModelView) * prev_feet_player_pos + gbufferPreviousModelView[3].xyz; - final_pos = vec2(gbufferPreviousProjection[0].x, gbufferPreviousProjection[1].y) * prev_view_pos.xy + gbufferPreviousProjection[3].xy; - texcoord_past = (final_pos / -prev_view_pos.z) * 0.5 + 0.5; - } - - #endif - - #ifdef MOTION_BLUR - // "Velocidad" - vec2 velocity = texcoord - texcoord_past; - block_color.rgb = motion_blur(block_color.rgb, z_depth, velocity, colortex1); - #endif - - #if AA_TYPE > 0 - #ifdef DOF - block_color = fast_taa_depth(block_color, texcoord_past); + vec4 blockColor = texture2DLod(colortex1, texcoord, 0); + + // Precalc past position and velocity + #if AA_TYPE > 0 || defined MOTION_BLUR + // Retrojection of previous frame + float z_depth = texture2DLod(depthtex1, texcoord, 0).r; + vec2 texcoordPast; + vec3 curr_view_pos; + vec3 curr_feet_player_pos; + vec3 prev_feet_player_pos; + vec3 prev_view_pos; + vec2 final_pos; + + if(z_depth < 0.56) { + texcoordPast = texcoord; + } else { + curr_view_pos = + vec3(vec2(gbufferProjectionInverse[0].x, gbufferProjectionInverse[1].y) * (texcoord * 2.0 - 1.0) + gbufferProjectionInverse[3].xy, gbufferProjectionInverse[3].z); + curr_view_pos /= (gbufferProjectionInverse[2].w * (z_depth * 2.0 - 1.0) + gbufferProjectionInverse[3].w); + curr_feet_player_pos = mat3(gbufferModelViewInverse) * curr_view_pos + gbufferModelViewInverse[3].xyz; + + prev_feet_player_pos = + z_depth > 0.56 ? curr_feet_player_pos + cameraPosition - previousCameraPosition : curr_feet_player_pos; + prev_view_pos = mat3(gbufferPreviousModelView) * prev_feet_player_pos + gbufferPreviousModelView[3].xyz; + final_pos = + vec2(gbufferPreviousProjection[0].x, gbufferPreviousProjection[1].y) * prev_view_pos.xy + gbufferPreviousProjection[3].xy; + texcoordPast = (final_pos / -prev_view_pos.z) * 0.5 + 0.5; + } + + #endif + + #ifdef MOTION_BLUR + #if AA_TYPE > 0 + float dither = shiftedDitherMakeup(gl_FragCoord.xy); + #else + float dither = ditherMakeup(gl_FragCoord.xy); + #endif + // "Speed" + vec2 velocity = texcoord - texcoordPast; + blockColor.rgb = motionBlur(blockColor.rgb, z_depth, velocity, dither, colortex1); + #endif + + #if AA_TYPE > 0 + #ifdef DOF + blockColor = fastTaaDepth(blockColor, texcoordPast); + #else + blockColor.rgb = fastTaa(blockColor.rgb, texcoordPast); + #endif + + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); + /* DRAWBUFFERS:13 */ + gl_FragData[0] = blockColor; // colortex1 + gl_FragData[1] = blockColor; // To TAA averages #else - block_color.rgb = fast_taa(block_color.rgb, texcoord_past); + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); + /* DRAWBUFFERS:1 */ + gl_FragData[0] = blockColor; // colortex1 #endif - /* DRAWBUFFERS:13 */ - gl_FragData[0] = block_color; // colortex1 - gl_FragData[1] = block_color; // To TAA averages - #else - /* DRAWBUFFERS:1 */ - gl_FragData[0] = block_color; // colortex1 - #endif } diff --git a/shaders/common/composite2_vertex.glsl b/shaders/common/composite2_vertex.glsl index ff00cd37..5266c0be 100644 --- a/shaders/common/composite2_vertex.glsl +++ b/shaders/common/composite2_vertex.glsl @@ -1,9 +1,12 @@ #include "/lib/config.glsl" -/* Config, uniforms, ins, outs */ +/* Ins / Outs */ + varying vec2 texcoord; +// MAIN FUNCTION ------------------ + void main() { - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - texcoord = gl_MultiTexCoord0.xy; + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + texcoord = gl_MultiTexCoord0.xy; } \ No newline at end of file diff --git a/shaders/common/composite_fragment.glsl b/shaders/common/composite_fragment.glsl index d7c9df3f..78c88d57 100644 --- a/shaders/common/composite_fragment.glsl +++ b/shaders/common/composite_fragment.glsl @@ -1,14 +1,18 @@ -/* Config, uniforms, ins, outs */ #include "/lib/config.glsl" +const bool colortex1MipmapEnabled = true; + +/* Color utils */ #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif +/* Uniforms */ + uniform sampler2D colortex1; uniform float far; uniform float near; @@ -19,270 +23,220 @@ uniform int isEyeInWater; uniform ivec2 eyeBrightnessSmooth; #if MC_VERSION >= 11900 - uniform float darknessFactor; + uniform float darknessFactor; #endif #if VOL_LIGHT == 1 && !defined NETHER - uniform sampler2D depthtex1; - uniform vec3 sunPosition; - uniform vec3 moonPosition; - uniform float light_mix; - uniform mat4 gbufferProjectionInverse; - uniform mat4 gbufferModelViewInverse; - uniform mat4 gbufferModelView; - uniform float vol_mixer; + uniform sampler2D depthtex1; + uniform vec3 sunPosition; + uniform vec3 moonPosition; + uniform float dayNightMix; + uniform mat4 gbufferProjectionInverse; + uniform mat4 gbufferModelViewInverse; + uniform mat4 gbufferModelView; + uniform float volumetricDayMixer; #endif #if VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER - uniform float light_mix; - uniform mat4 gbufferProjectionInverse; - uniform mat4 gbufferModelViewInverse; - uniform mat4 gbufferModelView; - uniform float vol_mixer; - uniform vec3 shadowLightPosition; - uniform mat4 shadowModelView; - uniform mat4 shadowProjection; - uniform sampler2DShadow shadowtex1; - - #if defined COLORED_SHADOW - uniform sampler2DShadow shadowtex0; - uniform sampler2D shadowcolor0; - #endif + uniform float dayNightMix; + uniform mat4 gbufferProjectionInverse; + uniform mat4 gbufferModelViewInverse; + uniform mat4 gbufferModelView; + uniform float volumetricDayMixer; + uniform vec3 shadowLightPosition; + uniform mat4 shadowModelView; + uniform mat4 shadowProjection; + uniform sampler2DShadow shadowtex1; + + #if defined COLORED_SHADOW + uniform sampler2DShadow shadowtex0; + uniform sampler2D shadowcolor0; + #endif #endif +/* Ins / Outs */ + varying vec2 texcoord; -varying vec3 direct_light_color; +varying vec3 directLightColor; varying float exposure; #if VOL_LIGHT == 1 && !defined NETHER - varying vec3 vol_light_color; - varying vec2 lightpos; - varying vec3 astro_pos; + varying vec3 volumetricLightColor; + varying vec2 lightpos; + varying vec3 astroLightPos; #endif #if VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER - varying vec3 vol_light_color; + varying vec3 volumetricLightColor; #endif #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - varying mat4 modeli_times_projectioni; + varying mat4 modeli_times_projectioni; #endif +/* Utility functions */ + #include "/lib/basic_utils.glsl" #include "/lib/depth.glsl" #ifdef BLOOM - #include "/lib/luma.glsl" + #include "/lib/luma.glsl" #endif #if VOL_LIGHT == 1 && !defined NETHER - #include "/lib/dither.glsl" - #include "/lib/volumetric_light.glsl" + #include "/lib/dither.glsl" + #include "/lib/volumetric_light.glsl" #endif #if VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER - #include "/lib/dither.glsl" - #include "/lib/volumetric_light.glsl" + #include "/lib/dither.glsl" + #include "/lib/volumetric_light.glsl" #endif -#if !defined SIMPLE_AUTOEXP - const bool colortex1MipmapEnabled = true; -#endif +// MAIN FUNCTION ------------------ void main() { - vec4 block_color = texture2D(colortex1, texcoord); - float d = texture2D(depthtex0, texcoord).r; - float linear_d = ld(d); - - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - - // Depth to distance - float screen_distance = - 2.0 * near * far / (far + near - (2.0 * d - 1.0) * (far - near)); - - // "Niebla" submarina - if (isEyeInWater == 1) { - float water_absorption = (1.0 / -((screen_distance * WATER_ABSORPTION) + 1.0)) + 1.0; - - block_color.rgb = mix( - block_color.rgb, - WATER_COLOR * direct_light_color * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), - water_absorption); - - } else if (isEyeInWater == 2) { - block_color = mix( - block_color, - vec4(1.0, .1, 0.0, 1.0), - clamp(sqrt(linear_d * far * 0.125), 0.0, 1.0) - ); - } - - #if MC_VERSION >= 11900 - if ((blindness > .01 || darknessFactor > .01) && linear_d > 0.999) { - block_color.rgb = vec3(0.0); - } - #else - if (blindness > .01 && linear_d > 0.999) { - block_color.rgb = vec3(0.0); - } - #endif + vec4 blockColor = texture2DLod(colortex1, texcoord, 0); + float d = texture2DLod(depthtex0, texcoord, 0).r; + float linearDepth = ld(d); - #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - #if AA_TYPE > 0 - float dither = shifted_eclectic_makeup_dither(gl_FragCoord.xy); - #else - float dither = semiblue(gl_FragCoord.xy); - #endif - #endif - - #if VOL_LIGHT == 1 && !defined NETHER - #if defined THE_END - float vol_light = 0.1; - if (d > 0.9999) { - vol_light = 0.5; - } - #else - float vol_light = ss_godrays(dither); - #endif + vec2 eyeBrightSmoothFloat = vec2(eyeBrightnessSmooth); - vec4 center_world_pos = - modeli_times_projectioni * (vec4(0.5, 0.5, 1.0, 1.0) * 2.0 - 1.0); - vec3 center_view_vector = normalize(center_world_pos.xyz); - - vec4 world_pos = - modeli_times_projectioni * (vec4(texcoord, 1.0, 1.0) * 2.0 - 1.0); - vec3 view_vector = normalize(world_pos.xyz); - - #if defined THE_END - // Fixed light source position in sky for intensity calculation - vec3 intermediate_vector = normalize((gbufferModelViewInverse * gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz); - float vol_intensity = clamp( - dot( - center_view_vector, - intermediate_vector - ), - 0.0, - 1.0 - ); - - vol_intensity *= clamp( - dot( - view_vector, - intermediate_vector - ), - 0.0, - 1.0 - ); - - vol_intensity *= 0.666; - - block_color.rgb += (vol_light_color * vol_light * vol_intensity * 2.0); - #else - // Light source position for intensity calculation - vec3 intermediate_vector = normalize((gbufferModelViewInverse * vec4(astro_pos, 0.0)).xyz); - float vol_intensity = clamp(dot(center_view_vector, intermediate_vector), 0.0, 1.0); - clamp(dot(center_view_vector, intermediate_vector), 0.0, 1.0); - vol_intensity *= dot( - view_vector, - intermediate_vector - ); - vol_intensity = - pow(clamp(vol_intensity, 0.0, 1.0), vol_mixer) * 0.5 * abs(light_mix * 2.0 - 1.0); - - block_color.rgb = - mix(block_color.rgb, vol_light_color * vol_light, vol_intensity * (vol_light * 0.5 + 0.5) * (1.0 - rainStrength)); - #endif - #endif + // Depth to distance + float screen_distance = linearDepth * far * 0.5; - #if VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER - #if defined COLORED_SHADOW - vec3 vol_light = get_volumetric_color_light(dither, screen_distance, modeli_times_projectioni); - #else - float vol_light = get_volumetric_light(dither, screen_distance, modeli_times_projectioni); - #endif + // Underwater fog + if(isEyeInWater == 1) { + float waterAbsorption = clamp(1.0 - pow(1.001 - linearDepth, 5.0 + (4.0 * WATER_ABSORPTION)), 0.0, 1.0); - // Ajuste de intensidad + blockColor.rgb = + mix(blockColor.rgb, WATER_COLOR * directLightColor * ((eyeBrightSmoothFloat.y * .8 + 48) * 0.004166666666666667), waterAbsorption); - vec4 world_pos = - modeli_times_projectioni * (vec4(texcoord, 1.0, 1.0) * 2.0 - 1.0); - vec3 view_vector = normalize(world_pos.xyz); + } else if(isEyeInWater == 2) { + blockColor = mix(blockColor, vec4(1.0, .1, 0.0, 1.0), clamp(sqrt(linearDepth * far * 0.125), 0.0, 1.0)); + } - #if defined THE_END - // Fixed light source position in sky for intensity calculation - float vol_intensity = - dot( - view_vector, - normalize((gbufferModelViewInverse * gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz) - ); + #if MC_VERSION >= 11900 + // if((blindness > .01 || darknessFactor > .01) && linearDepth > 0.999) { + if((blindness > .01 || darknessFactor > .01) && linearDepth > 0.9) { + blockColor.rgb = vec3(0.0); + } #else - // Light source position for intensity calculation - float vol_intensity = - dot( - view_vector, - normalize((gbufferModelViewInverse * vec4(shadowLightPosition, 0.0)).xyz) - ); + if(blindness > .01 && linearDepth > 0.999) { + blockColor.rgb = vec3(0.0); + } #endif - #if defined THE_END - vol_intensity = - ((square_pow(clamp((vol_intensity + .666667) * 0.6, 0.0, 1.0)) * 0.5)); - block_color.rgb += (vol_light_color * vol_light * vol_intensity * 2.0); - #else - vol_intensity = - pow(clamp((vol_intensity + 0.5) * 0.666666666666666, 0.0, 1.0), vol_mixer) * 0.6 * abs(light_mix * 2.0 - 1.0); + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + #if AA_TYPE > 0 + float dither = shiftedDither17(gl_FragCoord.xy); + #else + float dither = rDither(gl_FragCoord.xy); + #endif + #endif - block_color.rgb = - mix(block_color.rgb, vol_light_color * vol_light, vol_intensity * (vol_light * 0.5 + 0.5) * (1.0 - rainStrength)); + #if VOL_LIGHT == 1 && !defined NETHER + #if defined THE_END + float volumetricLight = 0.1; + if(d > 0.9999) { + volumetricLight = 0.5; + } + #else + float volumetricLight = ssGodrays(dither); + #endif + + vec4 centerFarPlanePos = modeli_times_projectioni * (vec4(0.5, 0.5, 1.0, 1.0) * 2.0 - 1.0); + vec3 centerEyeDirection = normalize(centerFarPlanePos.xyz); + + vec4 farPlaneClipPos = modeli_times_projectioni * (vec4(texcoord, 1.0, 1.0) * 2.0 - 1.0); + vec3 eyeDirection = normalize(farPlaneClipPos.xyz); + + #if defined THE_END + // Fixed light source position in sky for intensity calculation + vec3 auxVector = + normalize((gbufferModelViewInverse * gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz); + float volumetricIntensity = + clamp(dot(centerEyeDirection, auxVector), 0.0, 1.0); + + volumetricIntensity *= clamp(dot(eyeDirection, auxVector), 0.0, 1.0); + + volumetricIntensity *= 0.666; + + blockColor.rgb += (volumetricLightColor * volumetricLight * volumetricIntensity * 2.0); + #else + // Light source position for depth based godrays intensity calculation + vec3 auxVector = + normalize((gbufferModelViewInverse * vec4(astroLightPos, 0.0)).xyz); + float volumetricIntensity = + clamp(dot(centerEyeDirection, auxVector), 0.0, 1.0); + volumetricIntensity *= dot(eyeDirection, auxVector); + volumetricIntensity = + pow(clamp(volumetricIntensity, 0.0, 1.0), volumetricDayMixer) * 0.5 * abs(dayNightMix * 2.0 - 1.0); + + blockColor.rgb = + mix(blockColor.rgb, volumetricLightColor * volumetricLight, volumetricIntensity * (volumetricLight * 0.5 + 0.5) * (1.0 - rainStrength)); + #endif #endif - #endif - - // Dentro de la nieve - #ifdef BLOOM - if (isEyeInWater == 3) { - block_color.rgb = mix( - block_color.rgb, - vec3(0.7, 0.8, 1.0) / exposure, - clamp(screen_distance * .5, 0.0, 1.0) - ); - } - #else - if (isEyeInWater == 3) { - block_color.rgb = mix( - block_color.rgb, - vec3(0.85, 0.9, 0.6), - clamp(screen_distance * .5, 0.0, 1.0) - ); - } - #endif - #ifdef BLOOM - // Bloom source - #ifdef SIMPLE_AUTOEXP - float bloom_luma = - smoothstep(0.825, 1.0, luma(block_color.rgb * exposure)) * 0.4; - #else - float bloom_luma = - smoothstep(0.85, 1.0, luma(block_color.rgb * exposure)) * 0.5; + #if VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER + #if defined COLORED_SHADOW + vec3 volumetricLight = get_volumetric_color_light(dither, screen_distance, modeli_times_projectioni); + #else + float volumetricLight = get_volumetric_light(dither, screen_distance, modeli_times_projectioni); + #endif + + // Volumetric intensity adjustments + + vec4 farPlaneClipPos = modeli_times_projectioni * (vec4(texcoord, 1.0, 1.0) * 2.0 - 1.0); + vec3 eyeDirection = normalize(farPlaneClipPos.xyz); + + #if defined THE_END + // Fixed light source position in sky for volumetrics intensity calculation (The End) + float volumetricIntensity = dot(eyeDirection, normalize((gbufferModelViewInverse * gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz)); + #else + // Light source position for volumetrics intensity calculation + float volumetricIntensity = dot(eyeDirection, normalize((gbufferModelViewInverse * vec4(shadowLightPosition, 0.0)).xyz)); + #endif + + #if defined THE_END + volumetricIntensity = + ((squarePow(clamp((volumetricIntensity + .666667) * 0.6, 0.0, 1.0)) * 0.5)); + blockColor.rgb += (volumetricLightColor * volumetricLight * volumetricIntensity * 2.0); + #else + volumetricIntensity = + pow(clamp((volumetricIntensity + 0.5) * 0.666666666666666, 0.0, 1.0), volumetricDayMixer) * 0.6 * abs(dayNightMix * 2.0 - 1.0); + + blockColor.rgb = + mix(blockColor.rgb, volumetricLightColor * volumetricLight, volumetricIntensity * (volumetricLight * 0.5 + 0.5) * (1.0 - rainStrength)); + #endif #endif - #if defined SIMPLE_AUTOEXP - /* DRAWBUFFERS:14 */ - gl_FragData[0] = block_color; - gl_FragData[1] = block_color * bloom_luma; + // Dentro de la nieve + #ifdef BLOOM + if(isEyeInWater == 3) { + blockColor.rgb = + mix(blockColor.rgb, vec3(0.7, 0.8, 1.0) / exposure, clamp(screen_distance, 0.0, 1.0)); + } #else - /* DRAWBUFFERS:146 */ - gl_FragData[0] = block_color; - gl_FragData[1] = block_color * bloom_luma; - gl_FragData[2] = vec4(exposure, 0.0, 0.0, 0.0); + if(isEyeInWater == 3) { + blockColor.rgb = + mix(blockColor.rgb, vec3(0.85, 0.9, 0.6), clamp(screen_distance, 0.0, 1.0)); + } #endif - #else - #if defined SIMPLE_AUTOEXP - /* DRAWBUFFERS:1 */ - gl_FragData[0] = block_color; + + #ifdef BLOOM + // Bloom source + float bloom_luma = smoothstep(0.85, 1.0, luma(blockColor.rgb * exposure)) * 0.5; + + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); + /* DRAWBUFFERS:016 */ + gl_FragData[0] = blockColor * bloom_luma; + gl_FragData[1] = blockColor; + gl_FragData[2] = vec4(exposure, 0.0, 0.0, 0.0); #else - /* DRAWBUFFERS:16 */ - gl_FragData[0] = block_color; - gl_FragData[1] = vec4(exposure, 0.0, 0.0, 0.0); + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); + /* DRAWBUFFERS:16 */ + gl_FragData[0] = blockColor; + gl_FragData[1] = vec4(exposure, 0.0, 0.0, 0.0); #endif - #endif -} \ No newline at end of file +} diff --git a/shaders/common/composite_vertex.glsl b/shaders/common/composite_vertex.glsl index 6e3962fa..63825265 100644 --- a/shaders/common/composite_vertex.glsl +++ b/shaders/common/composite_vertex.glsl @@ -1,139 +1,111 @@ -/* Config, uniforms, ins, outs */ #include "/lib/config.glsl" +/* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif +/* Uniforms */ + uniform float rainStrength; uniform ivec2 eyeBrightnessSmooth; #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - uniform int isEyeInWater; + uniform int isEyeInWater; #endif - #if VOL_LIGHT == 1 && !defined NETHER - uniform float light_mix; - uniform vec3 sunPosition; - uniform vec3 moonPosition; - uniform mat4 gbufferProjection; + uniform float dayNightMix; + uniform vec3 sunPosition; + uniform vec3 moonPosition; + uniform mat4 gbufferProjection; #endif #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - uniform mat4 gbufferModelViewInverse; - uniform mat4 gbufferProjectionInverse; + uniform mat4 gbufferModelViewInverse; + uniform mat4 gbufferProjectionInverse; #endif -#if !defined SIMPLE_AUTOEXP - uniform sampler2D colortex1; - uniform sampler2D gaux3; - uniform float viewWidth; - uniform float viewHeight; - uniform float frameTime; -#endif +uniform sampler2D colortex1; +uniform sampler2D gaux3; +uniform float viewWidth; +uniform float viewHeight; +uniform float frameTime; + +/* Ins / Outs */ varying vec2 texcoord; -varying vec3 direct_light_color; +varying vec3 directLightColor; #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - varying vec3 vol_light_color; // Flat + varying vec3 volumetricLightColor; // Flat #endif varying float exposure; // Flat #if VOL_LIGHT == 1 && !defined NETHER - varying vec2 lightpos; // Flat - varying vec3 astro_pos; // Flat + varying vec2 lightpos; // Flat + varying vec3 astroLightPos; // Flat #endif #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - varying mat4 modeli_times_projectioni; + varying mat4 modeli_times_projectioni; #endif +/* Utility functions */ + #include "/lib/luma.glsl" -void main() { - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - texcoord = gl_MultiTexCoord0.xy; +// MAIN FUNCTION ------------------ - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); +void main() { + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + texcoord = gl_MultiTexCoord0.xy; - direct_light_color = day_blend( - LIGHT_SUNSET_COLOR, - LIGHT_DAY_COLOR, - LIGHT_NIGHT_COLOR - ); + vec2 eyeBrightSmoothFloat = vec2(eyeBrightnessSmooth); - direct_light_color = mix( - direct_light_color, - ZENITH_SKY_RAIN_COLOR * luma(direct_light_color), - rainStrength - ); + directLightColor = dayBlend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); + directLightColor = mix(directLightColor, ZENITH_SKY_RAIN_COLOR * luma(directLightColor), rainStrength); - // Exposure - #if !defined UNKNOWN_DIM - #if defined SIMPLE_AUTOEXP + // Exposure + float mipmap_level = log2(min(viewWidth, viewHeight)) - 1.0; - float exposure_coef = day_blend_float( - EXPOSURE_SUNSET, - EXPOSURE_DAY, - EXPOSURE_NIGHT - ); + vec3 exposure_col = texture2DLod(colortex1, vec2(0.5), mipmap_level).rgb; + exposure_col += texture2DLod(colortex1, vec2(0.25), mipmap_level).rgb; + exposure_col += texture2DLod(colortex1, vec2(0.75), mipmap_level).rgb; + exposure_col += texture2DLod(colortex1, vec2(0.25, 0.75), mipmap_level).rgb; + exposure_col += texture2DLod(colortex1, vec2(0.75, 0.25), mipmap_level).rgb; - float candle_bright = eye_bright_smooth.x * 0.0003125; // (0.004166666666666667 * 0.075) + exposure = clamp(luma(exposure_col), 0.0005, 100.0); - exposure = - ((eye_bright_smooth.y * 0.004166666666666667) * exposure_coef) + candle_bright; + float prev_exposure = texture2D(gaux3, vec2(0.5)).r; - // Map from 1.0 - 0.0 to 1.0 - 3.4 - exposure = (exposure * -2.4) + 3.4; - #else - float mipmap_level = log2(min(viewWidth, viewHeight)) - 1.0; + exposure = (exp(-exposure) * 3.03) + 0.6; + exposure = mix(exposure, prev_exposure, exp(-frameTime * 1.25)); - vec3 exposure_col = texture2DLod(colortex1, vec2(0.5), mipmap_level).rgb; - exposure_col += texture2DLod(colortex1, vec2(0.25), mipmap_level).rgb; - exposure_col += texture2DLod(colortex1, vec2(0.75), mipmap_level).rgb; - exposure_col += texture2DLod(colortex1, vec2(0.25, 0.75), mipmap_level).rgb; - exposure_col += texture2DLod(colortex1, vec2(0.75, 0.25), mipmap_level).rgb; + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + float vol_attenuation; + if(isEyeInWater == 0) { + vol_attenuation = 1.0; + } else { + vol_attenuation = 0.1 + (eyeBrightSmoothFloat.y * 0.002); + } - exposure = clamp(luma(exposure_col), 0.0005, 100.0); + volumetricLightColor = dayBlend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR) * 1.2 * vol_attenuation; + #endif - float prev_exposure = texture2D(gaux3, vec2(0.5)).r; + #if VOL_LIGHT == 1 && !defined NETHER + astroLightPos = sunPosition * step(0.5, dayNightMix) * 2.0 + moonPosition; + vec4 tpos = vec4(astroLightPos, 1.0) * gbufferProjection; + tpos = vec4(tpos.xyz / tpos.w, 1.0); + vec2 pos1 = tpos.xy / tpos.z; + lightpos = pos1 * 0.5 + 0.5; + #endif - exposure = (exp(-exposure) * 3.03) + 0.6; - exposure = mix(exposure, prev_exposure, exp(-frameTime * 1.25)); + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + modeli_times_projectioni = gbufferModelViewInverse * gbufferProjectionInverse; #endif - #else - exposure = 1.0; - #endif - - #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - float vol_attenuation; - if (isEyeInWater == 0) { - vol_attenuation = 1.0; - } else { - vol_attenuation = 0.1 + (eye_bright_smooth.y * 0.002); - } - - vol_light_color = day_blend( - LIGHT_SUNSET_COLOR, - LIGHT_DAY_COLOR, - LIGHT_NIGHT_COLOR - ) * 1.2 * vol_attenuation; - #endif - - #if VOL_LIGHT == 1 && !defined NETHER - astro_pos = sunPosition * step(0.5, light_mix) * 2.0 + moonPosition; - vec4 tpos = vec4(astro_pos, 1.0) * gbufferProjection; - tpos = vec4(tpos.xyz / tpos.w, 1.0); - vec2 pos1 = tpos.xy / tpos.z; - lightpos = pos1 * 0.5 + 0.5; - #endif - - #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - modeli_times_projectioni = gbufferModelViewInverse * gbufferProjectionInverse; - #endif } diff --git a/shaders/common/damage_fragment.glsl b/shaders/common/damage_fragment.glsl index f11f3f40..1d6f3f4d 100644 --- a/shaders/common/damage_fragment.glsl +++ b/shaders/common/damage_fragment.glsl @@ -1,14 +1,17 @@ -/* Exits */ #include "/lib/config.glsl" -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform sampler2D tex; +/* Ins / Outs */ + varying vec2 texcoord; +// MAIN FUNCTION ------------------ + void main() { - // Toma el color puro del bloque - vec4 block_color = texture2D(tex, texcoord); + vec4 blockColor = texture2D(tex, texcoord); - #include "/src/writebuffers.glsl" + #include "/src/writebuffers.glsl" } diff --git a/shaders/common/damage_vertex.glsl b/shaders/common/damage_vertex.glsl index c236a6a6..a3cbbfc4 100644 --- a/shaders/common/damage_vertex.glsl +++ b/shaders/common/damage_vertex.glsl @@ -1,20 +1,26 @@ #include "/lib/config.glsl" +/* Uniforms */ + uniform mat4 gbufferProjectionInverse; +/* Ins / Outs */ + varying vec2 texcoord; -varying float var_fog_frag_coord; + +/* Utility functions */ #if AA_TYPE > 0 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif +// MAIN FUNCTION ------------------ + void main() { - texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - vec3 viewPos = gl_Position.xyz / gl_Position.w; - vec4 homopos = gbufferProjectionInverse * vec4(viewPos, 1.0); - viewPos = homopos.xyz / homopos.w; - gl_FogFragCoord = length(viewPos.xyz); + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + vec4 homopos = gbufferProjectionInverse * vec4(gl_Position.xyz / gl_Position.w, 1.0); + vec3 viewPos = homopos.xyz / homopos.w; + gl_FogFragCoord = length(viewPos.xyz); } \ No newline at end of file diff --git a/shaders/common/deferred_fragment.glsl b/shaders/common/deferred_fragment.glsl index 7e8328af..0b492b92 100644 --- a/shaders/common/deferred_fragment.glsl +++ b/shaders/common/deferred_fragment.glsl @@ -1,14 +1,17 @@ -/* Config, uniforms, ins, outs */ #include "/lib/config.glsl" +/* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif +/* Uniforms */ + uniform sampler2D colortex1; uniform ivec2 eyeBrightnessSmooth; uniform int isEyeInWater; @@ -18,200 +21,180 @@ uniform float near; uniform float blindness; uniform float rainStrength; uniform sampler2D gaux3; +uniform int frameCounter; -#if CLOUD_VOL_STYLE == 1 && V_CLOUDS != 0 - uniform sampler2D colortex2; -#elif V_CLOUDS != 0 - uniform sampler2D gaux2; +#if V_CLOUDS != 0 + uniform sampler2D gaux2; #endif #ifdef NETHER - uniform vec3 fogColor; + uniform vec3 fogColor; #endif #if AO == 1 - uniform float inv_aspect_ratio; - uniform float fov_y_inv; + uniform float aspectRatioInverse; + uniform float fovYInverse; #endif #if V_CLOUDS != 0 && !defined UNKNOWN_DIM - uniform sampler2D noisetex; - uniform vec3 cameraPosition; - uniform vec3 sunPosition; - - #if defined DISTANT_HORIZONS - uniform sampler2D dhDepthTex0; - uniform float dhNearPlane; - uniform float dhFarPlane; - uniform float viewWidth; - uniform float viewHeight; - #endif + uniform sampler2D noisetex; + uniform vec3 cameraPosition; + uniform vec3 sunPosition; + + #if defined DISTANT_HORIZONS + uniform sampler2D dhDepthTex0; + uniform float dhNearPlane; + uniform float dhFarPlane; + uniform float viewWidth; + uniform float viewHeight; + #endif #endif uniform mat4 gbufferModelViewInverse; uniform mat4 gbufferProjectionInverse; -uniform float pixel_size_x; -uniform float pixel_size_y; +uniform float pixelSizeX; +uniform float pixelSizeY; #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) - uniform mat4 gbufferProjection; - uniform float frameTimeCounter; + uniform mat4 gbufferProjection; + uniform float frameTimeCounter; + uniform sampler2D colortex2; #endif +/* Ins / Outs */ + varying vec2 texcoord; -varying vec3 up_vec; // Flat +varying vec3 upVector; // Flat #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY - varying float umbral; - varying vec3 cloud_color; - varying vec3 dark_cloud_color; + varying float umbral; + varying vec3 cloudColor; + varying vec3 darkCloudColor; #endif #if AO == 1 - varying float fog_density_coeff; + varying float fogDensityCoeff; #endif +/* Utility functions */ + #include "/lib/depth.glsl" #include "/lib/luma.glsl" #ifdef DISTANT_HORIZONS - #include "/lib/depth_dh.glsl" + #include "/lib/depth_dh.glsl" #endif #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) - #include "/lib/dither.glsl" + #include "/lib/dither.glsl" #endif #if AO == 1 - #include "/lib/ao.glsl" + #include "/lib/ao.glsl" #endif #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) - #include "/lib/projection_utils.glsl" - - #ifdef THE_END - #include "/lib/volumetric_clouds_end.glsl" - #else - #include "/lib/volumetric_clouds.glsl" - #endif - + #include "/lib/projection_utils.glsl" + + #ifdef THE_END + #include "/lib/volumetric_clouds_end.glsl" + #else + #include "/lib/volumetric_clouds.glsl" + #endif #endif +// MAIN FUNCTION ------------------ + void main() { - vec4 block_color = texture2D(colortex1, texcoord); - float d = texture2D(depthtex0, texcoord).r; - float linear_d = ld(d); + vec4 blockColor = texture2DLod(colortex1, texcoord, 0); + float depth = texture2DLod(depthtex0, texcoord, 0).r; + float linearDepth = ld(depth); - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); + vec2 eyeBrightSmoothFloat = vec2(eyeBrightnessSmooth); - vec3 view_vector = vec3(1.0); + vec3 eyeDirection = vec3(1.0); + + #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) + #if AA_TYPE > 0 + float dither = shiftedSemiblue(gl_FragCoord.xy); + #else + float dither = semiblue(gl_FragCoord.xy); + #endif + #endif + + #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY + if(linearDepth > 0.9999) { // Only sky + vec4 farPlaneClipPos = gbufferModelViewInverse * gbufferProjectionInverse * (vec4(texcoord, 1.0, 1.0) * 2.0 - 1.0); + eyeDirection = normalize(farPlaneClipPos.xyz); + + #ifdef THE_END + float bright = dot(eyeDirection, vec3(0.0, 0.89442719, 0.4472136)); + bright = clamp((bright * 2.0) - 1.0, 0.0, 1.0); + bright *= bright * bright * bright; + #else + float bright = dot(eyeDirection, normalize((gbufferModelViewInverse * vec4(sunPosition, 0.0)).xyz)); + bright = clamp(bright * bright * bright, 0.0, 1.0); + #endif + + #ifdef THE_END + #ifdef END_CLOUDS + blockColor.rgb = get_end_cloud(eyeDirection, blockColor.rgb, bright, dither, cameraPosition, CLOUD_STEPS_AVG); + #endif + #else + blockColor.rgb = get_cloud(eyeDirection, blockColor.rgb, bright, dither, cameraPosition, CLOUD_STEPS_AVG, umbral, cloudColor, darkCloudColor); + #endif + } - #if AO == 1 || (V_CLOUDS != 0 && !defined UNKNOWN_DIM) - #if AA_TYPE > 0 - float dither = shifted_eclectic_makeup_dither(gl_FragCoord.xy); #else - float dither = semiblue(gl_FragCoord.xy); + #if defined NETHER + #if !defined DISTANT_HORIZONS + if(linearDepth > 0.9999) { // Only sky + blockColor = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); + } + #endif + #elif !defined NETHER && !defined THE_END + if(linearDepth > 0.9999 && isEyeInWater == 1) { // Only sky and water + vec4 screen_pos = vec4(gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), gl_FragCoord.z, 1.0); + vec4 fragposition = gbufferProjectionInverse * (screen_pos * 2.0 - 1.0); + + vec4 farPlaneClipPos = gbufferModelViewInverse * vec4(fragposition.xyz, 0.0); + eyeDirection = normalize(farPlaneClipPos.xyz); + } + #endif #endif - #endif - - #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY - if (linear_d > 0.9999) { // Only sky - vec4 world_pos = - gbufferModelViewInverse * gbufferProjectionInverse * (vec4(texcoord, 1.0, 1.0) * 2.0 - 1.0); - view_vector = normalize(world_pos.xyz); - - #ifdef THE_END - float bright = - dot(view_vector, vec3(0.0, 0.89442719, 0.4472136)); - bright = clamp((bright * 2.0) - 1.0, 0.0, 1.0); - bright *= bright * bright * bright; - #else - float bright = - dot( - view_vector, - normalize((gbufferModelViewInverse * vec4(sunPosition, 0.0)).xyz) - ); - bright = clamp(bright * bright * bright, 0.0, 1.0); - #endif - - #ifdef THE_END - #ifdef END_CLOUDS - // block_color = vec4(ZENITH_DAY_COLOR, 1.0); - block_color.rgb = - get_end_cloud(view_vector, block_color.rgb, bright, dither, cameraPosition, CLOUD_STEPS_AVG); + + #if AO == 1 + // AO distance attenuation + #if defined NETHER + if(NETHER_FOG_DISTANCE == 0) { + linearDepth = sqrt(linearDepth); + } else { + float screen_distance = 2.0 * near * far / (far + near - (2.0 * depth - 1.0) * (far - near)); + linearDepth = screen_distance / NETHER_SIGHT; + } #endif - #else - block_color.rgb = - get_cloud(view_vector, block_color.rgb, bright, dither, cameraPosition, CLOUD_STEPS_AVG, umbral, cloud_color, dark_cloud_color); - #endif - } + float ao_att = + pow(clamp(linearDepth * 1.6, 0.0, 1.0), mix(fogDensityCoeff, 1.0, rainStrength)); - #else - #if defined THE_END - if (linear_d > 0.9999) { // Only sky - // block_color = vec4(ZENITH_DAY_COLOR, 1.0); - } - #elif defined NETHER - #if !defined DISTANT_HORIZONS - if (linear_d > 0.9999) { // Only sky - block_color = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); - } - #endif - #elif !defined NETHER - if (linear_d > 0.9999 && isEyeInWater == 1) { // Only sky and water - vec4 screen_pos = - vec4( - gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), - gl_FragCoord.z, - 1.0 - ); - vec4 fragposition = gbufferProjectionInverse * (screen_pos * 2.0 - 1.0); - - vec4 world_pos = gbufferModelViewInverse * vec4(fragposition.xyz, 0.0); - view_vector = normalize(world_pos.xyz); - } - #endif - #endif - - #if AO == 1 - // AO distance attenuation - #if defined NETHER - if (NETHER_FOG_DISTANCE == 0) { - linear_d = sqrt(linear_d); - } else { - float screen_distance = 2.0 * near * far / (far + near - (2.0 * d - 1.0) * (far - near)); - linear_d = screen_distance / NETHER_SIGHT; - } + float final_ao = mix(dbao(dither), 1.0, ao_att); + blockColor.rgb *= final_ao; #endif - float ao_att = pow( - clamp(linear_d * 1.6, 0.0, 1.0), - mix(fog_density_coeff, 1.0, rainStrength) - ); - - float final_ao = mix(dbao(dither), 1.0, ao_att); - block_color.rgb *= final_ao; - // block_color = vec4(vec3(final_ao), 1.0); - // block_color = vec4(vec3(linear_d), 1.0); - #endif - - #if defined THE_END || defined NETHER - #define NIGHT_CORRECTION 1.0 - #else - #define NIGHT_CORRECTION day_blend_float(1.0, 1.0, 0.1) - #endif - - // Cielo bajo el agua - if (isEyeInWater == 1) { - if (linear_d > 0.9999) { - block_color.rgb = mix( - NIGHT_CORRECTION * WATER_COLOR * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667), - block_color.rgb, - max(clamp(view_vector.y - 0.1, 0.0, 1.0), rainStrength) - ); + + #if defined THE_END || defined NETHER + #define NIGHT_CORRECTION 1.0 + #else + #define NIGHT_CORRECTION dayBlendFloat(1.0, 1.0, 0.1) + #endif + + // Underwater sky + if(isEyeInWater == 1) { + if(linearDepth > 0.9999) { + blockColor.rgb = mix(NIGHT_CORRECTION * WATER_COLOR * ((eyeBrightSmoothFloat.y * .8 + 48) * 0.004166666666666667), blockColor.rgb, max(clamp(eyeDirection.y - 0.1, 0.0, 1.0), rainStrength)); + } } - } - /* DRAWBUFFERS:14 */ - gl_FragData[0] = vec4(block_color.rgb, d); - gl_FragData[1] = block_color; -} \ No newline at end of file + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); + /* DRAWBUFFERS:14 */ + gl_FragData[0] = vec4(blockColor.rgb, depth); + gl_FragData[1] = blockColor; +} diff --git a/shaders/common/deferred_vertex.glsl b/shaders/common/deferred_vertex.glsl index dc92661c..67bfcfe8 100644 --- a/shaders/common/deferred_vertex.glsl +++ b/shaders/common/deferred_vertex.glsl @@ -1,55 +1,59 @@ -/* Config, uniforms, ins, outs */ #include "/lib/config.glsl" +/* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif +/* Uniforms */ uniform mat4 gbufferModelView; #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY - uniform float rainStrength; + uniform float rainStrength; #endif +/* Ins / Outs */ + varying vec2 texcoord; -varying vec3 up_vec; +varying vec3 upVector; #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY - varying float umbral; - varying vec3 cloud_color; - varying vec3 dark_cloud_color; + varying float umbral; + varying vec3 cloudColor; + varying vec3 darkCloudColor; #endif #if AO == 1 - varying float fog_density_coeff; + varying float fogDensityCoeff; #endif +/* Utility functions */ + #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY - #include "/lib/luma.glsl" + #include "/lib/luma.glsl" #endif + // MAIN FUNCTION ------------------ + void main() { - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - texcoord = gl_MultiTexCoord0.xy; - up_vec = normalize(gbufferModelView[1].xyz); - - #if AO == 1 - #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - fog_density_coeff = FOG_DENSITY * FOG_ADJUST; - #else - fog_density_coeff = day_blend_float( - FOG_SUNSET, - FOG_DAY, - FOG_NIGHT - ) * FOG_ADJUST; + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + texcoord = gl_MultiTexCoord0.xy; + upVector = normalize(gbufferModelView[1].xyz); + + #if AO == 1 + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + fogDensityCoeff = FOG_DENSITY * FOG_ADJUST; + #else + fogDensityCoeff = dayBlendFloat(FOG_SUNSET, FOG_DAY, FOG_NIGHT) * FOG_ADJUST; + #endif #endif - #endif - #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY - #include "/lib/volumetric_clouds_vertex.glsl" - #endif + #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY + #include "/lib/volumetric_clouds_vertex.glsl" + #endif } \ No newline at end of file diff --git a/shaders/common/final_fragment.glsl b/shaders/common/final_fragment.glsl index 20dac26c..08a826e4 100644 --- a/shaders/common/final_fragment.glsl +++ b/shaders/common/final_fragment.glsl @@ -1,21 +1,20 @@ -/* Config, uniforms, ins, outs */ #include "/lib/config.glsl" // Do not remove comments. It works! /* noisetex - Water normals -colortex0 - Blue noise +colortex0 - Bloom auxiliar colortex1 - Antialiasing auxiliar -colortex2 - Clouds texture 2 +colortex2 - Unused colortex3 - TAA Averages history -gaux1 - Screen-Space-Reflection / Bloom auxiliar -gaux2 - Clouds texture 1 +gaux1 - Screen-Space-Reflection +gaux2 - Clouds texture gaux3 - Exposure auxiliar gaux4 - Fog auxiliar const int noisetexFormat = RG8; -const int colortex0Format = R8; +const int colortex0Format = R11F_G11F_B10F; */ #ifdef DOF /* @@ -57,12 +56,12 @@ const bool gaux2Clear = false; const bool gaux3Clear = false; const bool gaux4Clear = false; -// 'Global' constants from system +/* Uniforms */ #ifdef DEBUG_MODE - uniform sampler2D shadowtex1; - uniform sampler2D shadowcolor0; - uniform sampler2D colortex3; + uniform sampler2D shadowtex1; + uniform sampler2D shadowcolor0; + uniform sampler2D colortex3; #endif uniform sampler2D gaux3; @@ -70,77 +69,81 @@ uniform sampler2D colortex1; uniform float viewWidth; #if AA_TYPE == 3 - uniform float pixel_size_x; - uniform float pixel_size_y; + uniform float pixelSizeX; + uniform float pixelSizeY; #endif -// Varyings (per thread shared variables) +/* Ins / Outs */ + varying vec2 texcoord; varying float exposure; +/* Utility functions */ + #if AA_TYPE == 3 - #include "/lib/post.glsl" + // #include "/lib/post.glsl" + #include "/lib/luma.glsl" + #include "/lib/fxaa.glsl" #endif #include "/lib/basic_utils.glsl" #include "/lib/tone_maps.glsl" #ifdef COLOR_BLINDNESS - #include "/lib/color_blindness.glsl" + #include "/lib/color_blindness.glsl" #endif #if CHROMA_ABER == 1 - #include "/lib/aberration.glsl" + #include "/lib/aberration.glsl" #endif + + +// MAIN FUNCTION ------------------ + void main() { - #if CHROMA_ABER == 1 - vec3 block_color = color_aberration(); - #else - vec3 block_color = texture2D(colortex1, texcoord).rgb; - #if AA_TYPE == 3 - block_color = sharpen(colortex1, block_color, texcoord); + #if CHROMA_ABER == 1 + vec3 blockColor = color_aberration(); + #else + vec3 blockColor = texture2D(colortex1, texcoord).rgb; + #if AA_TYPE == 3 && !defined DOF + blockColor = fxaa311(blockColor, 5); + #endif + #endif + + // Exposure correction + blockColor *= vec3(exposure); + blockColor = custom_sigmoid(blockColor); + + // Color-grading ----- + // DEVELOPER: If your post processing effect only involves the current pixel, + // it can be placed here. For example: + + // Saturation: + // float actual_luma = luma(blockColor); + // blockColor = mix(vec3(actual_luma), blockColor, 1.5); + + // Color-blindness correction + #ifdef COLOR_BLINDNESS + blockColor = color_blindness(blockColor); + #endif + + #ifdef DEBUG_MODE + if(texcoord.x < 0.5 && texcoord.y < 0.5) { + blockColor = texture2D(shadowtex1, texcoord * 2.0).rrr; + } else if(texcoord.x >= 0.5 && texcoord.y >= 0.5) { + blockColor = vec3(texture2D(gaux3, vec2(0.5)).r * 0.25); + } else if(texcoord.x < 0.5 && texcoord.y >= 0.5) { + blockColor = texture2D(colortex1, ((texcoord - vec2(0.0, 0.5)) * 2.0)).rgb; + } else if(texcoord.x >= 0.5 && texcoord.y < 0.5) { + blockColor = texture2D(shadowcolor0, ((texcoord - vec2(0.5, 0.0)) * 2.0)).rgb; + } else { + blockColor = vec3(0.5); + } + + gl_FragData[0] = vec4(blockColor, 1.0); + + #else + gl_FragData[0] = vec4(blockColor, 1.0); #endif - #endif - - block_color *= vec3(exposure); - - #if defined UNKNOWN_DIM - block_color = custom_sigmoid_alt(block_color); - #else - block_color = custom_sigmoid(block_color); - #endif - - // Color-grading --- - // DEVELOPER: If your post processing effect only involves the current pixel, - // it can be placed here. For example, Saturation: - - // Saturation - // float actual_luma = luma(block_color); - // block_color = mix(vec3(actual_luma), block_color, 1.5); - - // Color-blindness correction - #ifdef COLOR_BLINDNESS - block_color = color_blindness(block_color); - #endif - - #ifdef DEBUG_MODE - // vec3 block_color; - if (texcoord.x < 0.5 && texcoord.y < 0.5) { - block_color = texture2D(shadowtex1, texcoord * 2.0).rrr; - } else if (texcoord.x >= 0.5 && texcoord.y >= 0.5) { - block_color = vec3(texture2D(gaux3, vec2(0.5)).r * 0.25); - } else if (texcoord.x < 0.5 && texcoord.y >= 0.5) { - block_color = texture2D(colortex1, ((texcoord - vec2(0.0, 0.5)) * 2.0)).rgb; - } else if (texcoord.x >= 0.5 && texcoord.y < 0.5) { - block_color = texture2D(shadowcolor0, ((texcoord - vec2(0.5, 0.0)) * 2.0)).rgb; - } else { - block_color = vec3(0.5); - } - - gl_FragColor = vec4(block_color, 1.0); - - #else - gl_FragColor = vec4(block_color, 1.0); - #endif } \ No newline at end of file diff --git a/shaders/common/final_vertex.glsl b/shaders/common/final_vertex.glsl index 43e38399..7e215e50 100644 --- a/shaders/common/final_vertex.glsl +++ b/shaders/common/final_vertex.glsl @@ -1,55 +1,29 @@ -/* Config, uniforms, ins, outs */ #include "/lib/config.glsl" -/* Config, uniforms, ins, outs */ +/* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif -uniform ivec2 eyeBrightnessSmooth; +/* Uniforms */ -#if !defined SIMPLE_AUTOEXP - uniform sampler2D gaux3; - uniform float viewWidth; -#endif +uniform sampler2D gaux3; + +/* Ins / Outs */ varying vec2 texcoord; varying float exposure; - #include "/lib/luma.glsl" +#include "/lib/luma.glsl" void main() { - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - texcoord = gl_MultiTexCoord0.xy; - - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - - // Tonemaping --- - // x: Block, y: Sky --- - #if !defined UNKNOWN_DIM - #if defined SIMPLE_AUTOEXP - - float exposure_coef = day_blend_float( - EXPOSURE_SUNSET, - EXPOSURE_DAY, - EXPOSURE_NIGHT - ); - - float candle_bright = eye_bright_smooth.x * 0.0003125; // (0.004166666666666667 * 0.075) - - exposure = - ((eye_bright_smooth.y * 0.004166666666666667) * exposure_coef) + candle_bright; - - // Map from 1.0 - 0.0 to 1.0 - 3.4 - exposure = (exposure * -2.4) + 3.4; - #else - exposure = texture2D(gaux3, vec2(0.5)).r; - #endif - #else - exposure = 1.0; - #endif + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + texcoord = gl_MultiTexCoord0.xy; + + exposure = texture2D(gaux3, vec2(0.5)).r; } diff --git a/shaders/common/glint_blocks_fragment.glsl b/shaders/common/glint_blocks_fragment.glsl index 26cafce3..dcf6555b 100644 --- a/shaders/common/glint_blocks_fragment.glsl +++ b/shaders/common/glint_blocks_fragment.glsl @@ -1,14 +1,20 @@ #include "/lib/config.glsl" -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform sampler2D tex; +/* Ins / Outs */ + varying vec2 texcoord; -varying vec4 tint_color; +varying vec4 tintColor; +varying float exposure; + +// MAIN FUNCTION ------------------ void main() { - // Toma el color puro del bloque - vec4 block_color = texture2D(tex, texcoord) * tint_color * 0.5; + // Toma el color puro del bloque + vec4 blockColor = texture2D(tex, texcoord) * tintColor / max(0.001, exposure); - #include "/src/writebuffers.glsl" + #include "/src/writebuffers.glsl" } \ No newline at end of file diff --git a/shaders/common/glint_blocks_vertex.glsl b/shaders/common/glint_blocks_vertex.glsl index 9feaf4f0..80606ebf 100644 --- a/shaders/common/glint_blocks_vertex.glsl +++ b/shaders/common/glint_blocks_vertex.glsl @@ -1,19 +1,28 @@ #include "/lib/config.glsl" -/* Config, uniforms, ins, outs */ +/* Uniforms */ + +uniform sampler2D gaux3; uniform mat4 gbufferModelViewInverse; uniform mat4 gbufferProjectionInverse; +/* Ins / Outs */ + varying vec2 texcoord; -varying vec4 tint_color; +varying vec4 tintColor; +varying float exposure; #if AA_TYPE > 0 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif +// MAIN FUNCTION ------------------ + void main() { - #include "/src/basiccoords_vertex.glsl" - #include "/src/position_vertex.glsl" + #include "/src/basiccoords_vertex.glsl" + #include "/src/position_vertex.glsl" + + exposure = texture2D(gaux3, vec2(0.5)).r; - tint_color = gl_Color; + tintColor = gl_Color; } diff --git a/shaders/common/line_blocks_fragment.glsl b/shaders/common/line_blocks_fragment.glsl index f6db7822..8f7378eb 100644 --- a/shaders/common/line_blocks_fragment.glsl +++ b/shaders/common/line_blocks_fragment.glsl @@ -1,12 +1,13 @@ -/* Config, uniforms, ins, outs */ -#define NO_SHADOWS +/* Utility functions */ #include "/lib/config.glsl" -varying vec4 tint_color; +/* Ins / Outs */ + +varying vec4 tintColor; void main() { - vec4 block_color = tint_color; + vec4 blockColor = tintColor; - #include "/src/writebuffers.glsl" + #include "/src/writebuffers.glsl" } diff --git a/shaders/common/line_blocks_vertex.glsl b/shaders/common/line_blocks_vertex.glsl index 54a619c6..0cc489d1 100644 --- a/shaders/common/line_blocks_vertex.glsl +++ b/shaders/common/line_blocks_vertex.glsl @@ -1,38 +1,29 @@ #include "/lib/config.glsl" +/* Uniforms */ + uniform float viewHeight; uniform float viewWidth; -varying vec4 tint_color; +/* Ins / Outs */ + +varying vec4 tintColor; + +/* Utility functions */ #if AA_TYPE > 1 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif -vec4 mu_ftransform() -{ - float lineWidth = 1.75; - vec2 screenSize = vec2(viewWidth, viewHeight); - mat4 VIEW_SCALE = mat4(mat3(1.0 - 0.00390625)); - mat4 tempmat = gl_ProjectionMatrix * VIEW_SCALE * gl_ModelViewMatrix; - vec4 linePosStart = tempmat * gl_Vertex; - vec4 linePosEnd = tempmat * vec4(gl_Vertex.xyz + gl_Normal, 1.0); - vec3 ndc1 = linePosStart.xyz / linePosStart.w; - vec3 ndc2 = linePosEnd.xyz / linePosEnd.w; - vec2 lineScreenDirection = normalize((ndc2.xy - ndc1.xy) * screenSize); - vec2 lineOffset = vec2(-lineScreenDirection.y, lineScreenDirection.x) * lineWidth / screenSize; - if (lineOffset.x < 0.0) - lineOffset *= -1.0; - if (gl_VertexID % 2 == 0) - return vec4((ndc1 + vec3(lineOffset, 0.0)) * linePosStart.w, linePosStart.w); - else - return vec4((ndc1 - vec3(lineOffset, 0.0)) * linePosStart.w, linePosStart.w); -} +#include "/lib/mu_ftransform.glsl" + +// MAIN FUNCTION ------------------ void main() { - tint_color = gl_Color; - gl_Position = mu_ftransform(); - #if AA_TYPE > 1 - gl_Position.xy += taa_offset * gl_Position.w; - #endif + tintColor = gl_Color; + gl_Position = muFtransform(); + + #if AA_TYPE > 1 + gl_Position.xy += taaOffset * gl_Position.w; + #endif } diff --git a/shaders/common/prepare_fragment.glsl b/shaders/common/prepare_fragment.glsl index 552699dd..4a84f04f 100644 --- a/shaders/common/prepare_fragment.glsl +++ b/shaders/common/prepare_fragment.glsl @@ -1,56 +1,57 @@ -/* Config, uniforms, ins, outs */ #include "/lib/config.glsl" +/* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform mat4 gbufferProjectionInverse; -uniform float pixel_size_x; -uniform float pixel_size_y; +uniform float pixelSizeX; +uniform float pixelSizeY; uniform float rainStrength; -varying vec3 up_vec; -varying vec3 hi_sky_color; -varying vec3 low_sky_color; +/* Ins / Outs */ + +varying vec3 upVector; +varying vec3 zenithSkyColor; +varying vec3 horizonSkyColor; + +/* Utility functions */ #include "/lib/dither.glsl" -void main() { - #if defined THE_END || defined NETHER - vec3 block_color = ZENITH_DAY_COLOR; - #else +// MAIN FUNCTION ------------------ - #if AA_TYPE > 0 - float dither = shifted_dither13(gl_FragCoord.xy); +void main() { + #if defined THE_END || defined NETHER + vec3 blockColor = ZENITH_DAY_COLOR; #else - float dither = dither13(gl_FragCoord.xy); - #endif - dither = (dither - .5) * 0.0625; - - vec4 fragpos = gbufferProjectionInverse * - ( - vec4( - gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), - gl_FragCoord.z, - 1.0 - ) * 2.0 - 1.0 - ); - vec3 nfragpos = normalize(fragpos.xyz); - float n_u = clamp(dot(nfragpos, up_vec) + dither, 0.0, 1.0); - vec3 block_color = mix( - low_sky_color, - hi_sky_color, - sqrt(n_u) - ); - - #endif - - #include "/src/writebuffers.glsl" + #if AA_TYPE > 0 + float dither = shiftedRDither(gl_FragCoord.xy); + #else + float dither = dither13(gl_FragCoord.xy); + #endif + + dither = (dither - .5) * 0.0625; + + vec4 fragpos = + gbufferProjectionInverse * + (vec4(gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), gl_FragCoord.z, 1.0) * 2.0 - 1.0); + vec3 nfragpos = normalize(fragpos.xyz); + float n_u = clamp(dot(nfragpos, upVector) + dither, 0.0, 1.0); + vec3 blockColor = + mix(horizonSkyColor, zenithSkyColor, smoothstep(0.0, 1.0, pow(n_u, 0.333))); + + blockColor = xyzToRgb(blockColor); + #endif + + #include "/src/writebuffers.glsl" } \ No newline at end of file diff --git a/shaders/common/prepare_vertex.glsl b/shaders/common/prepare_vertex.glsl index e9ffaa66..d30a9665 100644 --- a/shaders/common/prepare_vertex.glsl +++ b/shaders/common/prepare_vertex.glsl @@ -1,28 +1,37 @@ -/* Config, uniforms, ins, outs */ #include "/lib/config.glsl" +/* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform mat4 gbufferModelView; uniform float rainStrength; -varying vec3 up_vec; -varying vec3 hi_sky_color; -varying vec3 low_sky_color; +/* Ins / Outs */ + +varying vec3 upVector; +varying vec3 zenithSkyColor; +varying vec3 horizonSkyColor; + +/* Utility functions */ #include "/lib/luma.glsl" +// MAIN FUNCTION ------------------ + void main() { - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + + #include "/src/hi_sky.glsl" + #include "/src/low_sky.glsl" - #include "/src/sky_color_vertex.glsl" - - up_vec = normalize(gbufferModelView[1].xyz); + upVector = normalize(gbufferModelView[1].xyz); } diff --git a/shaders/common/shadow_fragment.glsl b/shaders/common/shadow_fragment.glsl index ee692e55..38496bd9 100644 --- a/shaders/common/shadow_fragment.glsl +++ b/shaders/common/shadow_fragment.glsl @@ -1,20 +1,32 @@ #include "/lib/config.glsl" +/* Uniforms */ + uniform sampler2D tex; +/* Ins / Outs */ + varying vec2 texcoord; +varying float is_noshadow; #ifdef COLORED_SHADOW - varying float is_water; + varying float is_water; #endif +// MAIN FUNCTION ------------------ + void main() { - #ifdef COLORED_SHADOW - if (is_water > 0.98) discard; // Is water - #endif + #ifdef COLORED_SHADOW + if(is_water > 0.98) // Water do not project shadows + discard; + #endif + + if (is_noshadow > 0.98) { // Objects without shadow projection + discard; + } - vec4 block_color = texture2D(tex, texcoord); + vec4 blockColor = texture2D(tex, texcoord); - /* DRAWBUFFERS:0 */ - gl_FragData[0] = block_color; + /* DRAWBUFFERS:0 */ + gl_FragData[0] = blockColor; } diff --git a/shaders/common/shadow_vertex.glsl b/shaders/common/shadow_vertex.glsl index 3ef69cc0..793e449e 100644 --- a/shaders/common/shadow_vertex.glsl +++ b/shaders/common/shadow_vertex.glsl @@ -1,35 +1,47 @@ #include "/lib/config.glsl" +/* Uniforms */ + uniform mat4 shadowProjection; uniform mat4 shadowProjectionInverse; uniform mat4 shadowModelView; uniform mat4 shadowModelViewInverse; +/* Ins / Outs */ + varying vec2 texcoord; +varying float is_noshadow; #ifdef COLORED_SHADOW - varying float is_water; + varying float is_water; #endif attribute vec4 mc_Entity; +// MAIN FUNCTION ------------------ + void main() { - texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; - vec4 position = shadowModelViewInverse * shadowProjectionInverse * gl_ModelViewProjectionMatrix * gl_Vertex; - gl_Position = shadowProjection * shadowModelView * position; + vec4 position = shadowModelViewInverse * shadowProjectionInverse * gl_ModelViewProjectionMatrix * gl_Vertex; + gl_Position = shadowProjection * shadowModelView * position; - float dist = length(gl_Position.xy); - float distortFactor = dist * SHADOW_DIST + (1.0 - SHADOW_DIST); - - gl_Position.xy *= 1.0 / distortFactor; - gl_Position.z = gl_Position.z * 0.2; + float dist = length(gl_Position.xy); + float distortFactor = dist * SHADOW_DIST + (1.0 - SHADOW_DIST); - #ifdef COLORED_SHADOW - is_water = 0.0; + gl_Position.xy *= 1.0 / distortFactor; + gl_Position.z = gl_Position.z * 0.2; - if (mc_Entity.x == ENTITY_WATER) { - is_water = 1.0; + is_noshadow = 0.0; + if (mc_Entity.x == ENTITY_NO_SHADOW_FIRE || mc_Entity.x == ENTITY_F_EMMISIVE) { + is_noshadow = 1.0; } - #endif + + #ifdef COLORED_SHADOW + is_water = 0.0; + + if(mc_Entity.x == ENTITY_WATER) { + is_water = 1.0; + } + #endif } diff --git a/shaders/common/skybasic_fragment.glsl b/shaders/common/skybasic_fragment.glsl index 01d1a68d..c498db91 100644 --- a/shaders/common/skybasic_fragment.glsl +++ b/shaders/common/skybasic_fragment.glsl @@ -1,93 +1,96 @@ #include "/lib/config.glsl" +/* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform sampler2D gaux4; -uniform float pixel_size_x; -uniform float pixel_size_y; +uniform float pixelSizeX; +uniform float pixelSizeY; #ifdef NETHER - uniform vec3 fogColor; + uniform vec3 fogColor; #endif #if MC_VERSION < 11604 - uniform mat4 gbufferProjectionInverse; - uniform float viewWidth; - uniform float viewHeight; - uniform float rainStrength; -#endif + uniform mat4 gbufferProjectionInverse; + uniform float viewWidth; + uniform float viewHeight; + uniform float rainStrength; +#endif + +/* Ins / Outs */ #if MC_VERSION < 11604 - varying vec3 up_vec; - varying vec3 hi_sky_color; - varying vec3 low_sky_color; + varying vec3 upVector; + varying vec3 zenithSkyColor; + varying vec3 horizonSkyColor; #endif varying vec4 star_data; +/* Utility functions */ + #if MC_VERSION < 11604 - #include "/lib/dither.glsl" + #include "/lib/dither.glsl" #endif +// MAIN FUNCTION ------------------ + void main() { - #if defined THE_END - #if MC_VERSION < 11604 - vec4 background_color = vec4(ZENITH_DAY_COLOR, 1.0); - #endif - vec4 block_color = vec4(0.0, 0.0, 0.0, 1.0); - #elif defined NETHER // Unused - #if MC_VERSION < 11604 - vec4 background_color = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); - #endif - vec4 block_color = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); - #else - #if MC_VERSION < 11604 - #if AA_TYPE > 0 - float dither = shifted_dither13(gl_FragCoord.xy); - #else - float dither = dither13(gl_FragCoord.xy); - #endif - - dither = (dither - .5) * 0.0625; - - vec4 fragpos = gbufferProjectionInverse * - ( - vec4( - gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y), - gl_FragCoord.z, - 1.0 - ) * 2.0 - 1.0 - ); - vec3 nfragpos = normalize(fragpos.xyz); - float n_u = clamp(dot(nfragpos, up_vec) + dither, 0.0, 1.0); - vec4 background_color = vec4( - mix( - low_sky_color, - hi_sky_color, - sqrt(n_u) - ), - 1.0); + #if defined THE_END + #if MC_VERSION < 11604 + vec4 background_color = vec4(ZENITH_DAY_COLOR, 1.0); + #endif + vec4 blockColor = vec4(0.0, 0.0, 0.0, 1.0); + #elif defined NETHER // Unused + #if MC_VERSION < 11604 + vec4 background_color = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); + #endif + vec4 blockColor = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); #else + #if MC_VERSION < 11604 + #if AA_TYPE > 0 + float dither = shiftedRDither(gl_FragCoord.xy); + #else + float dither = dither13(gl_FragCoord.xy); + #endif - // Toma el color puro del bloque - vec4 background_color = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)); - #endif + dither = (dither - .5) * 0.03125; + + vec4 fragpos = + gbufferProjectionInverse * + (vec4(gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), gl_FragCoord.z, 1.0) * 2.0 - 1.0); + vec3 nfragpos = normalize(fragpos.xyz); + float n_u = clamp(dot(nfragpos, upVector) + dither, 0.0, 1.0); + vec4 background_color = vec4(mix(horizonSkyColor, zenithSkyColor, smoothstep(0.0, 1.0, pow(n_u, 0.333))), 1.0); + background_color.rgb = xyzToRgb(background_color.rgb); + #else - vec4 block_color = star_data; + // Toma el color puro del bloque + vec4 background_color = texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), 0); + #endif - block_color = mix(background_color, block_color, block_color); + vec4 blockColor = star_data; + + blockColor = mix(background_color, blockColor, blockColor); + + #if MC_VERSION >= 11604 + // blockColor.a = star_data.a; + #endif + #endif #if MC_VERSION >= 11604 - block_color.a = star_data.a; + blockColor.rgba = vec4(texture2D(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY)).rgb, clamp(star_data.a * 2.0, 0.0, 1.0)); #endif - #endif - #include "/src/writebuffers.glsl" + #include "/src/writebuffers.glsl" } diff --git a/shaders/common/skybasic_vertex.glsl b/shaders/common/skybasic_vertex.glsl index a41bb9ff..714d5a62 100644 --- a/shaders/common/skybasic_vertex.glsl +++ b/shaders/common/skybasic_vertex.glsl @@ -1,57 +1,68 @@ #include "/lib/config.glsl" +/* Color utils */ + #if MC_VERSION < 11604 - #ifdef THE_END - #include "/lib/color_utils_end.glsl" - #elif defined NETHER - #include "/lib/color_utils_nether.glsl" - #else - #include "/lib/color_utils.glsl" - #endif + #ifdef THE_END + #include "/lib/color_utils_end.glsl" + #elif defined NETHER + #include "/lib/color_utils_nether.glsl" + #else + #include "/lib/color_utils.glsl" + #endif #endif -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform mat4 gbufferModelView; #if MC_VERSION < 11604 - uniform float rainStrength; + uniform float rainStrength; #endif +/* Ins / Outs */ + #if MC_VERSION < 11604 - varying vec3 up_vec; - varying vec3 hi_sky_color; - varying vec3 low_sky_color; + varying vec3 upVector; + varying vec3 zenithSkyColor; + varying vec3 horizonSkyColor; #endif varying vec4 star_data; +/* Utility functions */ + #if AA_TYPE > 0 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif #if MC_VERSION < 11604 - #include "/lib/luma.glsl" + #include "/lib/luma.glsl" #endif +// MAIN FUNCTION ------------------ + void main() { - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - - #if AA_TYPE > 0 - gl_Position.xy += taa_offset * gl_Position.w; - #endif - - star_data = - vec4( - float( - gl_Color.r == gl_Color.g && - gl_Color.g == gl_Color.b && - gl_Color.r > 0.0 - ) * gl_Color.r - ); - - #if MC_VERSION < 11604 - up_vec = normalize(gbufferModelView[1].xyz); - - #include "/src/sky_color_vertex.glsl" - #endif + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + + #if AA_TYPE > 0 + gl_Position.xy += taaOffset * gl_Position.w; + #endif + + #if !defined THE_END + star_data = vec4( + float(gl_Color.r == gl_Color.g && + gl_Color.g == gl_Color.b && + gl_Color.r > 0.0) * gl_Color.r + ); + #else + star_data = vec4(0.0); + #endif + + #if MC_VERSION < 11604 + upVector = normalize(gbufferModelView[1].xyz); + + #include "/src/hi_sky.glsl" + #include "/src/low_sky.glsl" + #endif } diff --git a/shaders/common/skytextured_fragment.glsl b/shaders/common/skytextured_fragment.glsl index 5e5b2288..dc3536c6 100644 --- a/shaders/common/skytextured_fragment.glsl +++ b/shaders/common/skytextured_fragment.glsl @@ -1,39 +1,48 @@ #include "/lib/config.glsl" +/* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif -// 'Global' constants from system +/* Uniforms */ + uniform sampler2D tex; #ifdef NETHER - uniform vec3 fogColor; + uniform vec3 fogColor; #endif -// Varyings (per thread shared variables) +/* Ins / Outs */ + varying vec2 texcoord; -varying vec4 tint_color; +varying vec4 tintColor; varying float sky_luma_correction; // Flat +// MAIN FUNCTION ------------------ + void main() { - #if defined THE_END - vec4 block_color = vec4(ZENITH_DAY_COLOR, 1.0); - vec3 background_color = ZENITH_DAY_COLOR; - #elif defined NETHER // Unused - vec4 background_color_full = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); - vec3 background_color = background_color_full.rgb; - vec4 block_color = vec4(background_color, 1.0); - #else - // Toma el color puro del bloque - vec4 block_color = texture2D(tex, texcoord) * tint_color; - - block_color.rgb *= sky_luma_correction; - #endif - - #include "/src/writebuffers.glsl" + #if defined THE_END + #if MC_VERSION >= 12109 + vec4 blockColor = vec4(ZENITH_DAY_COLOR, 0.0); // End Flashes Fix + #else + vec4 blockColor = vec4(ZENITH_DAY_COLOR, 1.0); + #endif + #elif defined NETHER // Unused + vec4 background_color_full = vec4(mix(fogColor * 0.1, vec3(1.0), 0.04), 1.0); + vec3 background_color = background_color_full.rgb; + vec4 blockColor = vec4(background_color, 1.0); + #else + // Toma el color puro del bloque + vec4 blockColor = texture2D(tex, texcoord) * tintColor; + + blockColor.rgb *= sky_luma_correction; + #endif + + #include "/src/writebuffers.glsl" } diff --git a/shaders/common/skytextured_vertex.glsl b/shaders/common/skytextured_vertex.glsl index 4292d303..d234dd3c 100644 --- a/shaders/common/skytextured_vertex.glsl +++ b/shaders/common/skytextured_vertex.glsl @@ -1,42 +1,50 @@ #include "/lib/config.glsl" +/* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif +/* Ins / Outs */ + varying vec2 texcoord; -varying vec4 tint_color; +varying vec4 tintColor; varying float sky_luma_correction; #if AA_TYPE > 0 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif +/* Utility functions */ + #include "/lib/luma.glsl" +// MAIN FUNCTION ------------------ + void main() { - texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; - tint_color = gl_Color; - - sky_luma_correction = luma(day_blend( - LIGHT_SUNSET_COLOR, - LIGHT_DAY_COLOR, - LIGHT_NIGHT_COLOR - )); - - #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - sky_luma_correction = 3.5 / ((sky_luma_correction * -2.5) + 3.5); - #else - sky_luma_correction = 1.5 / ((sky_luma_correction * -2.5) + 3.5); - #endif - - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - - #if AA_TYPE > 0 - gl_Position.xy += taa_offset * gl_Position.w; - #endif + texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + tintColor = gl_Color; + + sky_luma_correction = luma(dayBlend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR)); + + #if defined UNKNOWN_DIM + sky_luma_correction = 1.0; + #else + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + sky_luma_correction = 3.5 / ((sky_luma_correction * -2.5) + 3.5); + #else + sky_luma_correction = 1.5 / ((sky_luma_correction * -2.5) + 3.5); + #endif + #endif + + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + + #if AA_TYPE > 0 + gl_Position.xy += taaOffset * gl_Position.w; + #endif } diff --git a/shaders/common/solid_blocks_fragment.glsl b/shaders/common/solid_blocks_fragment.glsl index 4c5190e7..0f81e011 100644 --- a/shaders/common/solid_blocks_fragment.glsl +++ b/shaders/common/solid_blocks_fragment.glsl @@ -1,234 +1,282 @@ #include "/lib/config.glsl" -uniform float viewWidth; -uniform float viewHeight; -uniform int frameCounter; +// MAIN FUNCTION ------------------ #if defined THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #endif -/* Config, uniforms, ins, outs */ +/* Uniforms */ + +uniform float viewWidth; +uniform float viewHeight; +uniform int frameCounter; uniform sampler2D tex; uniform int isEyeInWater; uniform float nightVision; uniform float rainStrength; -uniform float light_mix; -uniform float pixel_size_x; -uniform float pixel_size_y; +uniform float dayNightMix; +uniform float pixelSizeX; +uniform float pixelSizeY; uniform sampler2D gaux4; - #if defined DISTANT_HORIZONS - uniform float dhNearPlane; - uniform float far; + uniform float dhNearPlane; + uniform float far; #endif #if defined GBUFFER_ENTITIES - uniform int entityId; - uniform vec4 entityColor; + uniform int entityId; + uniform vec4 entityColor; #endif #ifdef NETHER - uniform vec3 fogColor; + uniform vec3 fogColor; #endif #if defined SHADOW_CASTING - uniform sampler2DShadow shadowtex1; - #if defined COLORED_SHADOW - uniform sampler2DShadow shadowtex0; - uniform sampler2D shadowcolor0; - #endif + uniform sampler2DShadow shadowtex1; + #if defined COLORED_SHADOW + uniform sampler2DShadow shadowtex0; + uniform sampler2D shadowcolor0; + #endif #endif uniform float blindness; #if MC_VERSION >= 11900 - uniform float darknessFactor; - uniform float darknessLightFactor; + uniform float darknessFactor; + uniform float darknessLightFactor; #endif #ifdef MATERIAL_GLOSS - // Optifine menu bug workaround. Don't remove + // Don't remove #endif #if defined MATERIAL_GLOSS && !defined NETHER - uniform int worldTime; - uniform vec3 moonPosition; - uniform vec3 sunPosition; - #if defined THE_END + uniform int worldTime; + uniform vec3 moonPosition; + uniform vec3 sunPosition; +#endif + +#if SHADOW_LOCK > 0 && defined SHADOW_CASTING + uniform vec3 cameraPosition; + uniform mat4 shadowModelView; + uniform mat4 shadowProjection; + uniform vec3 shadowLightPosition; +#endif + +#if defined THE_END || (SHADOW_LOCK > 0 && defined SHADOW_CASTING && !defined NETHER) uniform mat4 gbufferModelView; - #endif #endif +/* Ins / Outs */ + varying vec2 texcoord; -varying vec4 tint_color; -varying float frog_adjust; -varying vec3 direct_light_color; -varying vec3 candle_color; -varying float direct_light_strength; -varying vec3 omni_light; +varying vec4 tintColor; +varying float frogAdjust; +varying vec3 directLightColor; +varying vec3 candleColor; +varying float directLightStrength; +varying vec3 omniLight; + +#if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER + varying vec3 vWorldPos; + varying vec3 vNormal; + varying vec3 vBias; +#endif -#if defined GBUFFER_TERRAIN || defined GBUFFER_HAND - varying float emmisive_type; +#if defined GBUFFER_TERRAIN || defined GBUFFER_HAND || defined GBUFFER_ENTITIES + varying float isEmissiveEntity; #endif #ifdef FOLIAGE_V - varying float is_foliage; + varying float isFoliage; #endif #if defined SHADOW_CASTING && !defined NETHER - varying vec3 shadow_pos; - varying float shadow_diffuse; + varying vec3 shadowPos; + varying float shadowDiffuse; #endif #if defined MATERIAL_GLOSS && !defined NETHER - varying vec3 flat_normal; - varying vec3 sub_position3; - varying vec2 lmcoord_alt; - varying float gloss_factor; - varying float gloss_power; - varying float luma_factor; - varying float luma_power; + varying vec3 flatNormal; + varying vec3 viewPositionNormalized; + varying vec2 lmcoordAlt; + varying float glossFactor; + varying float glossPower; + varying float lumaFactor; + varying float lumaPower; #endif +/* Utility functions */ + #if (defined SHADOW_CASTING && !defined NETHER) || defined DISTANT_HORIZONS - #include "/lib/dither.glsl" + #include "/lib/dither.glsl" #endif #if defined SHADOW_CASTING && !defined NETHER - #include "/lib/shadow_frag.glsl" + #include "/lib/shadow_frag.glsl" #endif #include "/lib/luma.glsl" #if defined MATERIAL_GLOSS && !defined NETHER - #include "/lib/material_gloss_fragment.glsl" + #include "/lib/material_gloss_fragment.glsl" +#endif + +#if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER + #include "/lib/shadow_vertex.glsl" #endif void main() { - #if (defined SHADOW_CASTING && !defined NETHER) || defined DISTANT_HORIZONS - #if AA_TYPE > 0 - float dither = shifted_makeup_dither(gl_FragCoord.xy); - #else - float dither = r_dither(gl_FragCoord.xy); + #if (defined SHADOW_CASTING && !defined NETHER) || defined DISTANT_HORIZONS + #if AA_TYPE > 0 + float dither = shiftedDither13(gl_FragCoord.xy); + #else + float dither = dither17(gl_FragCoord.xy); + #endif #endif - #endif - // Avoid render in DH transition - #ifdef DISTANT_HORIZONS - float t = far - dhNearPlane; - float sup = t * TRANSITION_SUP; - float inf = t * TRANSITION_INF; - float umbral = (gl_FogFragCoord - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); - if (umbral > dither) { - discard; - return; - } - #endif - - // Toma el color puro del bloque - #if defined GBUFFER_ENTITIES - #if BLACK_ENTITY_FIX == 1 - vec4 block_color = texture2D(tex, texcoord); - if (block_color.a < 0.1 && entityId != 10101) { // Black entities bug workaround - discard; - } - block_color *= tint_color; - #else - vec4 block_color = texture2D(tex, texcoord) * tint_color; + // Avoid render in DH transition + #if defined DISTANT_HORIZONS && !defined GBUFFER_BEACONBEAM + float t = far - dhNearPlane; + float sup = t * TRANSITION_DH_SUP; + float inf = t * TRANSITION_DH_INF; + float umbral = (gl_FogFragCoord - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); + if(umbral > dither) { + discard; + return; + } #endif - #else - vec4 block_color = texture2D(tex, texcoord) * tint_color; - #endif - - float block_luma = luma(block_color.rgb); - - vec3 final_candle_color = candle_color; - #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND - if (emmisive_type > 0.5) { - final_candle_color *= block_luma * 1.5; - } - #endif - - #ifdef GBUFFER_WEATHER - block_color.a *= .5; - #endif - - #if defined GBUFFER_ENTITIES - // Thunderbolt render - if (entityId == 10101){ - block_color.a = 1.0; - } - #endif - - #if defined SHADOW_CASTING && !defined NETHER - #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_pos, dither); - shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); + + // Toma el color puro del bloque + #if defined GBUFFER_ENTITIES && BLACK_ENTITY_FIX == 1 + vec4 blockColor = texture2D(tex, texcoord); + if(blockColor.a < 0.1 && entityId != 10101) { // Black entities bug workaround + discard; + } + blockColor *= tintColor; #else - float shadow_c = get_shadow(shadow_pos, dither); - shadow_c = mix(shadow_c, 1.0, shadow_diffuse); + vec4 blockColor = texture2D(tex, texcoord) * tintColor; + #endif + + #if defined GBUFFER_ENTITIES + vec4 originalEntityColor = blockColor; + #endif + + float block_luma = luma(blockColor.rgb); + + float isEmissiveEntityLocal = 0.0; + #if defined GBUFFER_ENTITIES + if (isEmissiveEntity > 0.5 || entityId == 10202) { // Custom lanterns + isEmissiveEntityLocal = 1.0; + } + #endif + + vec3 finalCandleColor = candleColor; + #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND || defined GBUFFER_ENTITIES + if(isEmissiveEntityLocal > 0.5) { + finalCandleColor *= block_luma * 1.5; + } #endif - #else - float shadow_c = abs((light_mix * 2.0) - 1.0); - #endif - - #if defined GBUFFER_BEACONBEAM - block_color.rgb *= 1.5; - #elif defined GBUFFER_ENTITY_GLOW - block_color.rgb = clamp(vec3(luma(block_color.rgb)) * vec3(0.75, 0.75, 1.5), vec3(0.3), vec3(1.0)); - #else - #if defined MATERIAL_GLOSS && !defined NETHER - float final_gloss_power = gloss_power; - block_luma *= luma_factor; - - if (luma_power < 0.0) { // Metallic - final_gloss_power -= (block_luma * 73.334); - } else { - block_luma = pow(block_luma, luma_power); - } - - float material_gloss_factor = - material_gloss( - reflect(normalize(sub_position3), flat_normal), - lmcoord_alt, - final_gloss_power, - flat_normal - ) * gloss_factor; - - float material = material_gloss_factor * block_luma; - vec3 real_light = - omni_light + - (shadow_c * ((direct_light_color * direct_light_strength) + (direct_light_color * material))) * (1.0 - (rainStrength * 0.75)) + - final_candle_color; + + #ifdef GBUFFER_WEATHER + blockColor.a *= .5; + #endif + + #if defined GBUFFER_ENTITIES + // Thunderbolt render + if(entityId == 10101) { + blockColor.a = 1.0; + } + #endif + + #if defined SHADOW_CASTING && !defined NETHER + #if SHADOW_LOCK > 0 + vec3 offsetVector = vNormal * 0.002; + vec3 preSnapPos = vWorldPos + offsetVector; + float texelSize = SHADOW_LOCK; + vec3 absPos = preSnapPos + cameraPosition; + // Redondeo al bloque + vec3 snappedAbsolute = floor(absPos * texelSize) / texelSize; + snappedAbsolute += 0.5 / texelSize; // Centrar en el texel + vec3 final_world_pos = (snappedAbsolute - cameraPosition) + vBias; + vec3 shadow_real_pos = get_shadow_pos(final_world_pos); + #else + vec3 shadow_real_pos = shadowPos; + #endif + + #if defined COLORED_SHADOW + vec3 shadowValue = get_colored_shadow(shadow_real_pos, dither); + shadowValue = mix(shadowValue, vec3(1.0), shadowDiffuse); + #else + float shadowValue = get_shadow(shadow_real_pos, dither); + shadowValue = mix(shadowValue, 1.0, shadowDiffuse); + #endif #else - vec3 real_light = - omni_light + - (shadow_c * direct_light_color * direct_light_strength) * (1.0 - (rainStrength * 0.75)) + - final_candle_color; + float shadowValue = abs((dayNightMix * 2.0) - 1.0); #endif - block_color.rgb *= mix(real_light, vec3(1.0), nightVision * 0.125); - block_color.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); - #endif + #if defined GBUFFER_BEACONBEAM + blockColor.rgb *= 1.5; + #elif defined GBUFFER_ENTITY_GLOW + blockColor.rgb = + clamp(vec3(luma(blockColor.rgb)) * vec3(0.75, 0.75, 1.5), vec3(0.3), vec3(1.0)); + vec3 realLight = omniLight + + (shadowValue * directLightColor * directLightStrength) * (1.0 - (rainStrength * 0.75)) + + finalCandleColor; + #else + #if defined MATERIAL_GLOSS && !defined NETHER + float final_gloss_power = glossPower; + block_luma *= lumaFactor; + + if(lumaPower < 0.0) { // Metallic + final_gloss_power -= (block_luma * 73.334); + } else { + block_luma = pow(block_luma, lumaPower); + } + + float material_gloss_factor = materialGloss(reflect(viewPositionNormalized, flatNormal), lmcoordAlt, final_gloss_power, flatNormal) * glossFactor; + + float material = material_gloss_factor * block_luma; + vec3 realLight = omniLight + + (shadowValue * ((directLightColor * directLightStrength) + (directLightColor * material))) * (1.0 - (rainStrength * 0.75)) + + finalCandleColor; + #else + vec3 realLight = omniLight + + (shadowValue * directLightColor * directLightStrength) * (1.0 - (rainStrength * 0.75)) + + finalCandleColor; + #endif + + blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * 0.125); + blockColor.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); + + // DEBUG + // blockColor = vec4(vec3(directLightStrength), 1.0); + #endif - #if defined GBUFFER_ENTITIES - if (entityId == 10101) { - // Thunderbolt render - block_color = vec4(1.0, 1.0, 1.0, 0.5); - } else { - block_color.rgb = mix(block_color.rgb, entityColor.rgb, entityColor.a * .75); - } - #endif + #if defined GBUFFER_ENTITIES + if(entityId == 10101) { // Thunderbolt render + blockColor = vec4(1.0, 1.0, 1.0, 0.5); + } else if (entityId == 10201) { // Flame entity + blockColor = originalEntityColor; + blockColor.rgb = blockColor.rgb * blockColor.rgb; + } else { + float entity_poderation = luma(realLight); // Red damage bright ponderation + blockColor.rgb = mix(blockColor.rgb, entityColor.rgb, entityColor.a * entity_poderation * 3.0); + } + #endif - #if MC_VERSION < 11300 && defined GBUFFER_TEXTURED - block_color.rgb *= 1.5; - #endif + #if MC_VERSION < 11300 && defined GBUFFER_TEXTURED + blockColor.rgb *= 1.5; + #endif - block_color.rgba = clamp(block_color, vec4(0.0), vec4(100.0)); + // DEBUG + // blockColor = vec4(omniLight, 1.0); + // blockColor = vec4(vec3(directLightStrength), 1.0); - #include "/src/finalcolor.glsl" - #include "/src/writebuffers.glsl" + #include "/src/finalcolor.glsl" + #include "/src/writebuffers.glsl" } diff --git a/shaders/common/solid_blocks_vertex.glsl b/shaders/common/solid_blocks_vertex.glsl index e1d91dc2..f0794860 100644 --- a/shaders/common/solid_blocks_vertex.glsl +++ b/shaders/common/solid_blocks_vertex.glsl @@ -1,170 +1,206 @@ #include "/lib/config.glsl" -// uniform int worldTime; -// uniform int frameCounter; -uniform float viewWidth; -uniform float viewHeight; +/* Color utils */ #if defined THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif -/* Config, uniforms, ins, outs */ +/* Uniforms */ + +uniform float viewWidth; +uniform float viewHeight; uniform vec3 sunPosition; uniform int isEyeInWater; -uniform float light_mix; +uniform float dayNightMix; uniform float far; uniform float rainStrength; uniform ivec2 eyeBrightnessSmooth; uniform mat4 gbufferProjectionInverse; #ifdef DISTANT_HORIZONS - uniform int dhRenderDistance; + uniform int dhRenderDistance; +#endif + +#ifdef VOXY + uniform int vxRenderDistance; #endif #ifdef DYN_HAND_LIGHT - uniform int heldItemId; - uniform int heldItemId2; + uniform int heldItemId; + uniform int heldItemId2; #endif #ifdef UNKNOWN_DIM - uniform sampler2D lightmap; + uniform sampler2D lightmap; #endif #if defined FOLIAGE_V || defined THE_END || defined NETHER - uniform mat4 gbufferModelView; + uniform mat4 gbufferModelView; #endif #if defined FOLIAGE_V || defined SHADOW_CASTING || (defined MATERIAL_GLOSS && !defined NETHER) - uniform mat4 gbufferModelViewInverse; + uniform mat4 gbufferModelViewInverse; #endif #if defined MATERIAL_GLOSS && !defined NETHER - uniform int worldTime; - uniform vec3 moonPosition; + uniform int worldTime; + uniform vec3 moonPosition; #endif #if defined SHADOW_CASTING && !defined NETHER - uniform mat4 shadowModelView; - uniform mat4 shadowProjection; - uniform vec3 shadowLightPosition; + uniform mat4 shadowModelView; + uniform mat4 shadowProjection; + uniform vec3 shadowLightPosition; #endif #if WAVING == 1 - uniform vec3 cameraPosition; - uniform float frameTimeCounter; + uniform vec3 cameraPosition; + uniform float frameTimeCounter; #endif +#if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 + uniform float endFlashIntensity; +#endif + +#if defined GBUFFER_ENTITIES + uniform int entityId; +#endif + +/* Ins / Outs */ + varying vec2 texcoord; -varying vec4 tint_color; -varying float frog_adjust; -varying vec3 direct_light_color; -varying vec3 candle_color; -varying float direct_light_strength; -varying vec3 omni_light; +varying vec4 tintColor; +varying float frogAdjust; +varying vec3 directLightColor; +varying vec3 candleColor; +varying float directLightStrength; +varying vec3 omniLight; + +#if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER + varying vec3 vWorldPos; + varying vec3 vNormal; + varying vec3 vBias; +#endif -#if defined GBUFFER_TERRAIN || defined GBUFFER_HAND - varying float emmisive_type; +#if defined GBUFFER_TERRAIN || defined GBUFFER_HAND || defined GBUFFER_ENTITIES + varying float isEmissiveEntity; #endif #ifdef FOLIAGE_V - varying float is_foliage; + varying float isFoliage; #endif #if defined SHADOW_CASTING && !defined NETHER - varying vec3 shadow_pos; - varying float shadow_diffuse; + varying vec3 shadowPos; + varying float shadowDiffuse; #endif #if defined MATERIAL_GLOSS && !defined NETHER - varying vec3 flat_normal; - varying vec3 sub_position3; - varying vec2 lmcoord_alt; - varying float gloss_factor; - varying float gloss_power; - varying float luma_factor; - varying float luma_power; + varying vec3 flatNormal; + varying vec3 viewPositionNormalized; + varying vec2 lmcoordAlt; + varying float glossFactor; + varying float glossPower; + varying float lumaFactor; + varying float lumaPower; #endif -#if defined FOLIAGE_V || defined GBUFFER_TERRAIN || defined GBUFFER_HAND || (defined MATERIAL_GLOSS && !defined NETHER) - attribute vec4 mc_Entity; -#endif +attribute vec4 mc_Entity; #if WAVING == 1 - attribute vec2 mc_midTexCoord; + attribute vec2 mc_midTexCoord; #endif +/* Utility functions */ + #if AA_TYPE > 0 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif #include "/lib/basic_utils.glsl" #if defined SHADOW_CASTING && !defined NETHER - #include "/lib/shadow_vertex.glsl" + #include "/lib/shadow_vertex.glsl" #endif #if WAVING == 1 - #include "/lib/vector_utils.glsl" + #include "/lib/vector_utils.glsl" #endif #include "/lib/luma.glsl" +// MAIN FUNCTION ------------------ + void main() { - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - - #include "/src/basiccoords_vertex.glsl" - #include "/src/position_vertex.glsl" - #include "/src/light_vertex.glsl" - #include "/src/fog_vertex.glsl" - - #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND - emmisive_type = 0.0; - if (mc_Entity.x == ENTITY_EMMISIVE || mc_Entity.x == ENTITY_S_EMMISIVE) { - emmisive_type = 1.0; - } - #endif - - #if defined SHADOW_CASTING && !defined NETHER - #include "/src/shadow_src_vertex.glsl" - #endif - - #if defined FOLIAGE_V && !defined NETHER - #ifdef SHADOW_CASTING - if (is_foliage > .2) { - direct_light_strength = mix(direct_light_strength, original_direct_light_strength, clamp((gl_Position.z / SHADOW_LIMIT) * 2.0 - 0.5, 0.0, 1.0)); - } + vec2 eyeBrightSmoothFloat = vec2(eyeBrightnessSmooth); + vec3 zenithSkyColor; + float visibleSky; + + #include "/src/basiccoords_vertex.glsl" + #include "/src/position_vertex.glsl" + #include "/src/hi_sky.glsl" + #include "/src/light_vertex.glsl" + #include "/src/fog_vertex.glsl" + + // Glowing blocks + #if defined GBUFFER_TERRAIN || defined GBUFFER_HAND || defined GBUFFER_ENTITIES + isEmissiveEntity = 0.0; + if(mc_Entity.x == ENTITY_NO_SHADOW_FIRE || mc_Entity.x == ENTITY_EMMISIVE || mc_Entity.x == ENTITY_S_EMMISIVE) { + isEmissiveEntity = 1.0; + } + #endif + + #if defined SHADOW_CASTING && !defined NETHER + #include "/src/shadow_src_vertex.glsl" + #endif + + #if defined FOLIAGE_V && !defined NETHER + #ifdef SHADOW_CASTING + if (isFoliage > .2) { + directLightStrength = + mix( + directLightStrength, + farDirectLightStrength, + clamp((gl_Position.z / SHADOW_LIMIT) * 2.0 - 0.5, 0.0, 1.0) + ); + } + #endif + #endif + + #if defined MATERIAL_GLOSS && !defined NETHER + lumaFactor = 1.0; + lumaPower = 2.0; + glossPower = 6.0; + glossFactor = 1.05; + + if(mc_Entity.x == ENTITY_SAND) { // Sand-like block + lumaPower = 4.0; + } else if(mc_Entity.x == ENTITY_METAL) { // Metal-like block + lumaFactor = 1.35; + lumaPower = -1.0; // Metallic + glossPower = 100.0; + } else if(mc_Entity.x == ENTITY_FABRIC) { // Fabric-like blocks + glossPower = 3.0; + glossFactor = 0.1; + } + + flatNormal = normal; + viewPositionNormalized = normalize(viewPosition.xyz); + + lmcoordAlt = lmcoord; + #endif + + #if defined GBUFFER_ENTITY_GLOW + gl_Position.z *= 0.01; + #endif + + #if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER + vNormal = shadowWorldNormal; + vBias = bias; #endif - #endif - - #if defined MATERIAL_GLOSS && !defined NETHER - luma_factor = 1.0; - luma_power = 2.0; - gloss_power = 6.0; - gloss_factor = 1.05; - - if (mc_Entity.x == ENTITY_SAND) { // Sand-like block - luma_power = 4.0; - } else if (mc_Entity.x == ENTITY_METAL) { // Metal-like block - luma_factor = 1.35; - luma_power = -1.0; // Metallic - gloss_power = 100.0; - } else if (mc_Entity.x == ENTITY_FABRIC) { // Fabric-like blocks - gloss_power = 3.0; - gloss_factor = 0.1; - } - - flat_normal = normal; - sub_position3 = sub_position.xyz; - - lmcoord_alt = lmcoord; - #endif - - #if defined GBUFFER_ENTITY_GLOW - gl_Position.z *= 0.01; - #endif } diff --git a/shaders/common/solid_dh_blocks_fragment.glsl b/shaders/common/solid_dh_blocks_fragment.glsl index 606a3c5f..c7d1cb79 100644 --- a/shaders/common/solid_dh_blocks_fragment.glsl +++ b/shaders/common/solid_dh_blocks_fragment.glsl @@ -1,10 +1,12 @@ #include "/lib/config.glsl" -uniform float light_mix; +/* Uniforms */ + +uniform float dayNightMix; uniform float nightVision; uniform float rainStrength; -uniform float pixel_size_x; -uniform float pixel_size_y; +uniform float pixelSizeX; +uniform float pixelSizeY; uniform sampler2D gaux4; uniform float dhNearPlane; uniform float dhFarPlane; @@ -13,64 +15,68 @@ uniform vec3 cameraPosition; uniform int dhRenderDistance; #ifdef NETHER - uniform vec3 fogColor; + uniform vec3 fogColor; #endif +/* Ins / Outs */ + varying vec2 texcoord; -varying vec4 tint_color; -varying vec3 direct_light_color; -varying vec3 candle_color; -varying float direct_light_strength; -varying vec3 omni_light; +varying vec4 tintColor; +varying vec3 directLightColor; +varying vec3 candleColor; +varying float directLightStrength; +varying vec3 omniLight; varying vec4 position; -varying float frog_adjust; +varying float frogAdjust; + +/* Utility functions */ #include "/lib/luma.glsl" #include "/lib/dither.glsl" +// MAIN FUNCTION ------------------ + void main() { - #if AA_TYPE > 0 - float dither = shifted_makeup_dither(gl_FragCoord.xy); - #else - float dither = r_dither(gl_FragCoord.xy); - #endif - - // Avoid render in DH transition - float t = far - dhNearPlane; - float sup = t * TRANSITION_DH_SUP; - float inf = t * TRANSITION_DH_INF; - float view_dist = length(position.xyz); - float umbral = (view_dist - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); - if (umbral < dither || view_dist > dhRenderDistance) { - discard; - return; - } - - vec4 block_color = tint_color; - - // Synthetic pseudo-texture - vec3 synth_pos = (position.xyz + cameraPosition) * 6.0; - synth_pos = floor(synth_pos + 0.01); - float synth_noise = (hash13(synth_pos) - 0.5) * 0.1; - block_color.rgb += vec3(synth_noise); - block_color.rgb = clamp(block_color.rgb, vec3(0.0), vec3(1.0)); - - float block_luma = luma(tint_color.rgb); - - vec3 final_candle_color = candle_color; - - float shadow_c = abs((light_mix * 2.0) - 1.0); - - vec3 real_light = - omni_light + - (shadow_c * direct_light_color * direct_light_strength) * (1.0 - (rainStrength * 0.75)) + - final_candle_color; - - block_color.rgb *= mix(real_light, vec3(1.0), nightVision * 0.125); - block_color.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); - - block_color.rgba = clamp(block_color, vec4(0.0), vec4(100.0)); - - #include "/src/finalcolor_dh.glsl" - #include "/src/writebuffers.glsl" + #if AA_TYPE > 0 + float dither = shiftedRDither(gl_FragCoord.xy); + #else + float dither = rDither(gl_FragCoord.xy); + #endif + + // Avoid render unnecessary DH + float t = far - dhNearPlane; + float inf = t * TRANSITION_DH_INF; + float visibleDistance = length(position.xyz); + if(visibleDistance < dhNearPlane + inf) { + discard; + return; + } + + vec4 blockColor = tintColor; + + // Synthetic pseudo-texture + vec3 synthesisPosition = (position.xyz + cameraPosition) * 6.0; + synthesisPosition = floor(synthesisPosition + 0.01); + float syntheticNoise = (hash13(synthesisPosition) - 0.5) * 0.1; + blockColor.rgb += vec3(syntheticNoise); + blockColor.rgb = clamp(blockColor.rgb, vec3(0.0), vec3(1.0)); + + float block_luma = luma(tintColor.rgb); + + vec3 finalCandleColor = candleColor; + + float shadowValue = abs((dayNightMix * 2.0) - 1.0); + + vec3 realLight = + omniLight + + (shadowValue * directLightColor * directLightStrength) * (1.0 - (rainStrength * 0.75)) + + finalCandleColor; + + blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * 0.125); + blockColor.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); + + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); + + #include "/src/finalcolor_dh.glsl" + #include "/src/writebuffers.glsl" } diff --git a/shaders/common/solid_dh_blocks_vertex.glsl b/shaders/common/solid_dh_blocks_vertex.glsl index db9d866b..9fd4023f 100644 --- a/shaders/common/solid_dh_blocks_vertex.glsl +++ b/shaders/common/solid_dh_blocks_vertex.glsl @@ -1,56 +1,70 @@ #include "/lib/config.glsl" +/* Color utils */ + #if defined THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform ivec2 eyeBrightnessSmooth; uniform mat4 dhProjection; uniform mat4 gbufferModelView; uniform mat4 gbufferModelViewInverse; uniform vec3 sunPosition; uniform int isEyeInWater; -uniform float light_mix; +uniform float dayNightMix; uniform float far; uniform float rainStrength; uniform mat4 gbufferProjectionInverse; #ifdef DISTANT_HORIZONS - uniform int dhRenderDistance; + uniform int dhRenderDistance; #endif #ifdef UNKNOWN_DIM - uniform sampler2D lightmap; + uniform sampler2D lightmap; +#endif + +#if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 + uniform float endFlashIntensity; #endif +/* Ins / Outs */ + varying vec2 texcoord; -varying vec4 tint_color; -varying vec3 direct_light_color; -varying vec3 candle_color; -varying float direct_light_strength; -varying vec3 omni_light; +varying vec4 tintColor; +varying vec3 directLightColor; +varying vec3 candleColor; +varying float directLightStrength; +varying vec3 omniLight; varying vec4 position; -varying float frog_adjust; +varying float frogAdjust; + +/* Utility functions */ #if AA_TYPE > 0 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif #include "/lib/basic_utils.glsl" #include "/lib/luma.glsl" +// MAIN FUNCTION ------------------ + void main() { - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - vec3 hi_sky_color; - vec3 low_sky_color; - - #include "/src/basiccoords_vertex_dh.glsl" - #include "/src/position_vertex_dh.glsl" - #include "/src/sky_color_vertex.glsl" - #include "/src/light_vertex_dh.glsl" + vec2 eyeBrightSmoothFloat = vec2(eyeBrightnessSmooth); + float visibleSky; + vec3 zenithSkyColor; + + #include "/src/basiccoords_vertex_dh.glsl" + #include "/src/position_vertex_dh.glsl" + #include "/src/hi_sky.glsl" + #include "/src/light_vertex_dh.glsl" + #include "/src/fog_vertex_dh.glsl" } diff --git a/shaders/common/solid_dh_water_fragment.glsl b/shaders/common/solid_dh_water_fragment.glsl index 12b1c9ed..c00401d7 100644 --- a/shaders/common/solid_dh_water_fragment.glsl +++ b/shaders/common/solid_dh_water_fragment.glsl @@ -1,17 +1,20 @@ #include "/lib/config.glsl" +/* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform sampler2D tex; -uniform float pixel_size_x; -uniform float pixel_size_y; +uniform float pixelSizeX; +uniform float pixelSizeY; uniform float near; uniform float far; uniform sampler2D gaux1; @@ -28,7 +31,7 @@ uniform vec3 moonPosition; uniform int worldTime; uniform float nightVision; uniform float rainStrength; -uniform float light_mix; +uniform float dayNightMix; uniform ivec2 eyeBrightnessSmooth; uniform float viewWidth; uniform float viewHeight; @@ -37,49 +40,51 @@ uniform float dhFarPlane; uniform vec3 cameraPosition; uniform int dhRenderDistance; -#if CLOUD_VOL_STYLE == 1 && V_CLOUDS != 0 - uniform sampler2D colortex2; -#elif V_CLOUDS != 0 - uniform sampler2D gaux2; +#if V_CLOUDS != 0 + uniform sampler2D gaux2; #endif #ifdef NETHER - uniform vec3 fogColor; + uniform vec3 fogColor; #endif #if defined SHADOW_CASTING && !defined NETHER - uniform sampler2DShadow shadowtex1; - #if defined COLORED_SHADOW - uniform sampler2DShadow shadowtex0; - uniform sampler2D shadowcolor0; - #endif + uniform sampler2DShadow shadowtex1; + #if defined COLORED_SHADOW + uniform sampler2DShadow shadowtex0; + uniform sampler2D shadowcolor0; + #endif #endif uniform float blindness; #if MC_VERSION >= 11900 - uniform float darknessFactor; - uniform float darknessLightFactor; + uniform float darknessFactor; + uniform float darknessLightFactor; #endif +/* Ins / Outs */ + varying vec2 texcoord; -varying vec4 tint_color; -varying vec3 direct_light_color; -varying vec3 candle_color; -varying float direct_light_strength; -varying vec3 omni_light; +varying vec4 tintColor; +varying vec3 directLightColor; +varying vec3 candleColor; +varying float directLightStrength; +varying vec3 omniLight; varying vec4 position; varying vec3 fragposition; varying vec3 tangent; varying vec3 binormal; -varying vec3 water_normal; -varying vec3 hi_sky_color; -varying vec3 low_sky_color; -varying vec3 up_vec; -varying float visible_sky; +varying vec3 waterNormal; +varying vec3 zenithSkyColor; +varying vec3 horizonSkyColor; +varying vec3 upVector; +varying float visibleSky; varying vec2 lmcoord; -varying float block_type; -varying float frog_adjust; +varying float blockType; +varying float frogAdjust; + +/* Utility functions */ #include "/lib/projection_utils.glsl" #include "/lib/basic_utils.glsl" @@ -89,170 +94,138 @@ varying float frog_adjust; #include "/lib/luma.glsl" void main() { - #if AA_TYPE > 0 - float dither = shifted_makeup_dither(gl_FragCoord.xy); - #else - float dither = r_dither(gl_FragCoord.xy); - #endif - // Avoid render in DH transition - float t = far - dhNearPlane; - float sup = t * TRANSITION_DH_SUP; - float inf = t * TRANSITION_DH_INF; - float view_dist = length(position.xyz); - float umbral = (view_dist - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); - - float d = texture2D(depthtex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight)).r; - float linear_d = ld(d); - - if (umbral < dither || linear_d < 0.9999 || view_dist > dhRenderDistance) { - discard; - return; - } - - #if defined VANILLA_WATER || WATER_TEXTURE == 1 - vec4 block_color = vec4(0.1); - // Synthetic water texture - vec3 synth_pos = (position.xyz + cameraPosition) * 2.0; - synth_pos = floor(synth_pos + 0.01); - float synth_noise = (hash13(synth_pos) * 0.2) + 0.4; - block_color.rgb += vec3(synth_noise); - #else - vec4 block_color; - #endif - - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - - vec3 real_light; - - #ifdef VANILLA_WATER - vec3 water_normal_base = vec3(0.0, 0.0, 1.0); - #else - vec3 world_pos = position.xyz + cameraPosition; - vec3 water_normal_base = normal_waves_dh(world_pos.xzy); - #endif - - vec3 surface_normal; - if (block_type < DH_BLOCK_WATER + 0.5 && block_type > DH_BLOCK_WATER - 0.5) { // Water - surface_normal = get_normals(water_normal_base, fragposition); - } else { - surface_normal = get_normals(vec3(0.0, 0.0, 1.0), fragposition); - } - - float normal_dot_eye = dot(surface_normal, normalize(fragposition)); - float fresnel = square_pow(1.0 + normal_dot_eye); - - vec3 reflect_water_vec = reflect(fragposition, surface_normal); - vec3 norm_reflect_water_vec = normalize(reflect_water_vec); - - vec3 sky_color_reflect; - if (isEyeInWater == 0 || isEyeInWater == 2) { - sky_color_reflect = mix( - low_sky_color, - hi_sky_color, - sqrt(clamp(dot(norm_reflect_water_vec, up_vec), 0.0001, 1.0)) - ); - } else { - sky_color_reflect = - hi_sky_color * .5 * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667); - } - - if (block_type < DH_BLOCK_WATER + 0.5 && block_type > DH_BLOCK_WATER - 0.5) { // Water + vec2 eyeBrightSmoothFloat = vec2(eyeBrightnessSmooth); + vec3 realLight; + + #if AA_TYPE > 0 + float dither = shiftedRDither(gl_FragCoord.xy); + #else + float dither = rDither(gl_FragCoord.xy); + // dither = 1.0; + #endif + + // Avoid render unnecessary DH + float t = far - dhNearPlane; + float inf = t * TRANSITION_DH_INF; + float visibleDistance = length(position.xyz); + float d = texture2DLod(depthtex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight), 0.0).r; + float linearDepth = ld(d); + + if(linearDepth < 0.9999 || visibleDistance < dhNearPlane + inf) { + discard; + return; + } + #ifdef VANILLA_WATER - float shadow_c = abs((light_mix * 2.0) - 1.0); + vec3 waterNormalBase = vec3(0.0, 0.0, 1.0); + #else + vec3 mapPos = position.xyz + cameraPosition; + vec3 waterNormalBase = normal_waves_dh(mapPos.xzy); + #endif - float fresnel_tex = luma(block_color.rgb); + vec3 surfaceNormal; + if(blockType < DH_BLOCK_WATER + 0.5 && blockType > DH_BLOCK_WATER - 0.5) { // Water + surfaceNormal = get_normals(waterNormalBase, fragposition); + } else { + surfaceNormal = get_normals(vec3(0.0, 0.0, 1.0), fragposition); + } + + float normalDotEye = dot(surfaceNormal, normalize(fragposition)); + float fresnel = squarePow(1.0 + normalDotEye); + + vec3 reflectWaterVector = reflect(fragposition, surfaceNormal); + vec3 normalizedReflectWaterVector = normalize(reflectWaterVector); + + vec3 skyColorReflect; + if(isEyeInWater == 0 || isEyeInWater == 2) { + skyColorReflect = mix(horizonSkyColor, zenithSkyColor, smoothstep(0.0, 1.0, pow(clamp(dot(normalizedReflectWaterVector, upVector), 0.0001, 1.0), 0.333))); + } else { + skyColorReflect = zenithSkyColor * .5 * ((eyeBrightSmoothFloat.y * .8 + 48) * 0.004166666666666667); + } + + skyColorReflect = xyzToRgb(skyColorReflect); + + #if !defined VANILLA_WATER && WATER_TEXTURE == 1 + vec4 blockColor = vec4(0.1); + // Synthetic water texture + vec3 synthesisPosition = (position.xyz + cameraPosition) * 8.0; + synthesisPosition = floor(synthesisPosition + 0.01); + float noise = hash13(synthesisPosition); + noise *= noise; + noise *= noise; + noise *= noise; + float syntheticNoise = (noise * 0.3) + 0.5; + blockColor.rgb += vec3(syntheticNoise); + #elif defined VANILLA_WATER + // Synthetic water texture + vec3 synthesisPosition = (position.xyz + cameraPosition) * 8.0; + synthesisPosition = floor(synthesisPosition + 0.01); + float noise = hash13(synthesisPosition); + noise *= noise; + noise *= noise; + float syntheticNoise = (noise * 0.227) + 0.773; + vec4 blockColor = vec4(vec3(syntheticNoise), tintColor.a); + #else + vec4 blockColor; + #endif + + if(blockType < DH_BLOCK_WATER + 0.5 && blockType > DH_BLOCK_WATER - 0.5) { // Water + #ifdef VANILLA_WATER + float shadowValue = abs((dayNightMix * 2.0) - 1.0); - real_light = - omni_light + - (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + - candle_color; + float fresnelTex = luma(blockColor.rgb); - real_light *= (fresnel_tex * 2.0) - 0.25; + realLight = omniLight + + (directLightStrength * shadowValue * directLightColor) * (1.0 - rainStrength * 0.75) + + candleColor; - block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tint_color.rgb; + realLight *= (fresnelTex * 2.0) - 0.25; - block_color.rgb = water_shader_dh( - fragposition, - surface_normal, - block_color.rgb, - sky_color_reflect, - norm_reflect_water_vec, - fresnel, - visible_sky, - dither, - direct_light_color - ); + blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * .125) * tintColor.rgb; - block_color.a = sqrt(block_color.a); + blockColor.rgb = water_shader_dh(fragposition, surfaceNormal, blockColor.rgb, skyColorReflect, normalizedReflectWaterVector, fresnel, visibleSky, dither, directLightColor); + blockColor.a = sqrt(blockColor.a); #else + #if WATER_TEXTURE == 1 + float waterTexture = luma(blockColor.rgb); + #else + float waterTexture = 1.0; + #endif - #if WATER_TEXTURE == 1 - float water_texture = luma(block_color.rgb); - #else - float water_texture = 1.0; - #endif - - real_light = - omni_light + - (direct_light_strength * direct_light_color) * (1.0 - rainStrength * 0.75) + - candle_color; + realLight = omniLight + + (directLightStrength * visibleSky * directLightColor) * (1.0 - rainStrength * 0.75) + + candleColor; - #if defined NETHER || defined THE_END #if WATER_COLOR_SOURCE == 0 - block_color.rgb = water_texture * real_light * WATER_COLOR; + blockColor.rgb = waterTexture * realLight * WATER_COLOR; #elif WATER_COLOR_SOURCE == 1 - block_color.rgb = 0.3 * water_texture * real_light * tint_color.rgb; + blockColor.rgb = 0.3 * waterTexture * realLight * tintColor.rgb; #endif - #else - #if WATER_COLOR_SOURCE == 0 - block_color.rgb = water_texture * real_light * visible_sky * WATER_COLOR; - #elif WATER_COLOR_SOURCE == 1 - block_color.rgb = 0.3 * water_texture * real_light * visible_sky * tint_color.rgb; + + blockColor = vec4(refraction(fragposition, blockColor.rgb, waterNormalBase), 1.0); + + #if WATER_TEXTURE == 1 + fresnel = clamp(fresnel * (waterTexture * waterTexture + 0.5), 0.0, 1.0); #endif - #endif - - block_color = vec4( - refraction( - fragposition, - block_color.rgb, - water_normal_base - ), - 1.0 - ); - - #if WATER_TEXTURE == 1 - fresnel = clamp(fresnel * (water_texture * water_texture + 0.5), 0.0, 1.0); - #endif - - block_color.rgb = water_shader_dh( - fragposition, - surface_normal, - block_color.rgb, - sky_color_reflect, - norm_reflect_water_vec, - fresnel, - visible_sky, - dither, - direct_light_color - ); + + blockColor.rgb = water_shader_dh(fragposition, surfaceNormal, blockColor.rgb, skyColorReflect, normalizedReflectWaterVector, fresnel, visibleSky, dither, directLightColor); #endif - } else { // Otros translúcidos + } else { // Otros translúcidos - block_color *= tint_color; + blockColor = tintColor; - float shadow_c = abs((light_mix * 2.0) - 1.0); + float shadowValue = abs((dayNightMix * 2.0) - 1.0); - real_light = - omni_light + - (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + - candle_color; + realLight = omniLight + + (directLightStrength * shadowValue * directLightColor) * (1.0 - rainStrength * 0.75) + + candleColor; - block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125); - } + blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * .125); + } - #include "/src/finalcolor_dh.glsl" - #include "/src/writebuffers.glsl" + #include "/src/finalcolor_dh.glsl" + #include "/src/writebuffers.glsl" } diff --git a/shaders/common/solid_dh_water_vertex.glsl b/shaders/common/solid_dh_water_vertex.glsl index 5b6eb514..b04d627d 100644 --- a/shaders/common/solid_dh_water_vertex.glsl +++ b/shaders/common/solid_dh_water_vertex.glsl @@ -1,76 +1,92 @@ #include "/lib/config.glsl" +/* Color utils */ + #if defined THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform ivec2 eyeBrightnessSmooth; uniform mat4 dhProjection; uniform mat4 gbufferModelView; uniform mat4 gbufferModelViewInverse; uniform vec3 sunPosition; uniform int isEyeInWater; -uniform float light_mix; +uniform float dayNightMix; uniform float far; uniform float rainStrength; uniform mat4 gbufferProjectionInverse; #ifdef DISTANT_HORIZONS - uniform int dhRenderDistance; + uniform int dhRenderDistance; #endif #ifdef UNKNOWN_DIM - uniform sampler2D lightmap; + uniform sampler2D lightmap; +#endif + +#if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 + uniform float endFlashIntensity; #endif +/* Ins / Outs */ + varying vec2 texcoord; -varying vec4 tint_color; -varying vec3 direct_light_color; -varying vec3 candle_color; -varying float direct_light_strength; -varying vec3 omni_light; +varying vec4 tintColor; +varying vec3 directLightColor; +varying vec3 candleColor; +varying float directLightStrength; +varying vec3 omniLight; varying vec4 position; varying vec3 fragposition; varying vec3 tangent; varying vec3 binormal; -varying vec3 water_normal; -varying vec3 hi_sky_color; -varying vec3 low_sky_color; -varying vec3 up_vec; -varying float visible_sky; +varying vec3 waterNormal; +varying vec3 zenithSkyColor; +varying vec3 horizonSkyColor; +varying vec3 upVector; +varying float visibleSky; varying vec2 lmcoord; -varying float block_type; -varying float frog_adjust; +varying float blockType; +varying float frogAdjust; + +/* Utility functions */ #if AA_TYPE > 0 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif #include "/lib/basic_utils.glsl" #include "/lib/luma.glsl" +// MAIN FUNCTION ------------------ + void main() { - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - #include "/src/basiccoords_vertex_dh.glsl" - #include "/src/position_vertex_dh.glsl" - #include "/src/sky_color_vertex.glsl" - #include "/src/light_vertex_dh.glsl" - - vec4 position2 = gl_ModelViewMatrix * gl_Vertex; - fragposition = position2.xyz; - - binormal = normalize(gbufferModelView[2].xyz); - tangent = normalize(gbufferModelView[0].xyz); - water_normal = normal; - - up_vec = normalize(gbufferModelView[1].xyz); - - if (dhMaterialId == DH_BLOCK_WATER) { // Water - block_type = float(DH_BLOCK_WATER); - } + vec2 eyeBrightSmoothFloat = vec2(eyeBrightnessSmooth); + + #include "/src/basiccoords_vertex_dh.glsl" + #include "/src/position_vertex_dh.glsl" + #include "/src/hi_sky.glsl" + #include "/src/low_sky.glsl" + #include "/src/light_vertex_dh.glsl" + #include "/src/fog_vertex_dh.glsl" + + vec4 viewSpacePos4D = gl_ModelViewMatrix * gl_Vertex; + fragposition = viewSpacePos4D.xyz; + + binormal = normalize(gbufferModelView[2].xyz); + tangent = normalize(gbufferModelView[0].xyz); + waterNormal = normal; + + upVector = normalize(gbufferModelView[1].xyz); + + if(dhMaterialId == DH_BLOCK_WATER) { // Water + blockType = float(DH_BLOCK_WATER); + } } diff --git a/shaders/common/solid_voxy_blocks_fragment.glsl b/shaders/common/solid_voxy_blocks_fragment.glsl new file mode 100644 index 00000000..267e8172 --- /dev/null +++ b/shaders/common/solid_voxy_blocks_fragment.glsl @@ -0,0 +1,220 @@ +#include "/lib/config.glsl" +#include "/lib/basic_utils.glsl" +#include "/lib/luma.glsl" +#include "/lib/dither.glsl" + +/* Color utils */ + +#if defined THE_END + #include "/lib/color_utils_end.glsl" +#elif defined NETHER + #include "/lib/color_utils_nether.glsl" +#else + #include "/lib/color_utils.glsl" +#endif + +#if defined MATERIAL_GLOSS && !defined NETHER + #include "/lib/material_gloss_fragment_voxy.glsl" +#endif + +layout(location = 0) out vec4 gbufferData0; +layout(location = 1) out vec4 gbufferData1; + +/* +struct VoxyFragmentParameters { + vec4 sampledColour; + vec2 tile; + vec2 uv; + uint face; + uint modelId; + vec2 lightMap; + vec4 tinting; + uint customId; +}; +*/ + +void voxy_emitFragment(VoxyFragmentParameters parameters) { + // Includes + + #include "/src/voxy_uniforms_replace.glsl" + #include "/src/hi_sky_voxy.glsl" + + // Banderas especiales + + bool isFoliageEntity = ( + customId == ENTITY_LOWERGRASS || + customId == ENTITY_UPPERGRASS || + customId == ENTITY_SMALLGRASS || + customId == ENTITY_SMALLENTS || + customId == ENTITY_LEAVES || + customId == ENTITY_SMALLENTS_NW + ); + + #include "/src/voxy_position_light.glsl" + + float farDirectLightStrength = clamp(directLightStrength, 0.0, 1.0); + if (isFoliageEntity) { // It's foliage, light is atenuated by angle + if (customId != ENTITY_LEAVES) { + farDirectLightStrength = farDirectLightStrength * 0.75 + 0.25; + } + + #ifdef SHADOW_CASTING + directLightStrength = sqrt(abs(directLightStrength)); + #else + directLightStrength = (clamp(directLightStrength, 0.0, 1.0) * 0.5 + 0.5) * 0.75; + #endif + omniStrength = 1.0; + } else { + directLightStrength = clamp(directLightStrength, 0.0, 1.0); + } + + #if defined THE_END || defined NETHER + vec3 omniLight = LIGHT_DAY_COLOR * omniStrength; + #else + directLightColor = mix(directLightColor, ZENITH_SKY_RAIN_COLOR * luma(directLightColor) * 0.4, rainStrength); + + // Minimal light + vec3 omniColor = mix(ZenithSkyColorRGB, directLightColor * 0.45, OMNI_TINT); + float omniColorLuma = colorAverage(omniColor); + // --- OPTIMIZACIÓN #3: Prevenir división por cero --- + float lumaRatio = AVOID_DARK_LEVEL / max(omniColorLuma, 0.0001); + vec3 omniColorMin = omniColor * lumaRatio; + omniColor = max(omniColor, omniColorMin); + + vec3 omniLight = mix(omniColorMin, omniColor, visibleSky) * omniStrength; + #endif + + #if !defined THE_END && !defined NETHER + #ifndef SHADOW_CASTING + // Fake shadows + if (isEyeInWater == 0) { + // Reemplazar pow(x, 10.0) con multiplicaciones --- + float visSky2 = visibleSky * visibleSky; + float visSky4 = visSky2 * visSky2; + float visSky8 = visSky4 * visSky4; + directLightStrength = mix(0.0, directLightStrength, visSky8 * visSky2); + } else { + directLightStrength = mix(0.0, directLightStrength, visibleSky); + } + #else + directLightStrength = mix(0.0, directLightStrength, visibleSky); + #endif + #endif + + // if (customId == ENTITY_EMMISIVE) { + // directLightStrength = 10.0; + // } else if (customId == ENTITY_S_EMMISIVE) { + // directLightStrength = 1.0; + // } + + // Fog Vertex + + // 1. Reconstruir posición en clip space + vec2 ndc = (gl_FragCoord.xy / vec2(viewWidth, viewHeight)) * 2.0 - 1.0; + float depth = gl_FragCoord.z * 2.0 - 1.0; + vec4 clipPos = vec4(ndc, depth, 1.0); + + // 2. Pasar a world space + vec4 worldPos = vxViewProjInv * clipPos; + worldPos /= worldPos.w; + + // 3. La distancia desde la cámara (equivalente a gl_FogFragCoord) + float fogFragCoord = length(worldPos.xyz); + + vec2 eyeBrightSmoothFloat = vec2(eyeBrightnessSmooth); + + #if !defined THE_END && !defined NETHER + float fogIntensityCoeff = max(eyeBrightSmoothFloat.y * 0.004166666666666667, visibleSky); + float frogAdjust = pow( + clamp(fogFragCoord / float(vxRenderDistance * 16), 0.0, 1.0) * fogIntensityCoeff, + mix(fogDensityCoeff * 0.15, 0.5, rainStrength) + ); + #else + float frogAdjust = sqrt(clamp(fogFragCoord / float(vxRenderDistance * 16), 0.0, 1.0)); + #endif + + #if !defined NETHER + #ifdef SHADOW_CASTING + if (isFoliageEntity) { + directLightStrength = farDirectLightStrength; // Shortcut + } + #endif + #endif + + #if defined MATERIAL_GLOSS && !defined NETHER + float lumaFactor = 1.0; + float lumaPower = 2.0; + float glossPower = 6.0; + float glossFactor = 1.05; + + if(customId == ENTITY_SAND) { // Sand-like block + lumaPower = 4.0; + } else if(customId == ENTITY_METAL) { // Metal-like block + lumaFactor = 1.35; + lumaPower = -1.0; // Metallic + glossPower = 100.0; + } else if(customId == ENTITY_FABRIC) { // Fabric-like blocks + glossPower = 3.0; + glossFactor = 0.1; + } + + vec4 viewPosition = vxProjInv * clipPos; + viewPosition /= viewPosition.w; + vec3 viewPositionNormalized = normalize(viewPosition.xyz); + #endif + + // ---- Original Fragment Logic + + #if AA_TYPE > 0 + float dither = shiftedRDither(gl_FragCoord.xy); + #else + float dither = rDither(gl_FragCoord.xy); + #endif + + vec4 blockColor = parameters.sampledColour * tintColor; + + float block_luma = luma(blockColor.rgb); + + vec3 finalCandleColor = candleColor; + if (customId == ENTITY_EMMISIVE) { + finalCandleColor *= block_luma * 1.5; + } + + float shadowValue = abs((dayNightMix * 2.0) - 1.0); + + #if defined MATERIAL_GLOSS && !defined NETHER + block_luma *= lumaFactor; + + if(lumaPower < 0.0) { // Metallic + glossPower -= (block_luma * 73.334); + } else { + block_luma = pow(block_luma, lumaPower); + } + + float material_gloss_factor = materialGloss(reflect(viewPositionNormalized, normal), lmcoord, glossPower, normal) * glossFactor; + + float material = material_gloss_factor * block_luma; + vec3 realLight = omniLight + + (shadowValue * ((directLightColor * directLightStrength) + (directLightColor * material))) * (1.0 - (rainStrength * 0.75)) + + finalCandleColor; + #else + vec3 realLight = omniLight + + (shadowValue * directLightColor * directLightStrength) * (1.0 - (rainStrength * 0.75)) + + finalCandleColor; + #endif + + blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * 0.125); + blockColor.rgb *= mix(vec3(1.0, 1.0, 1.0), vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B), nightVision); + + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); + + #include "/src/finalcolor_voxy.glsl" + + if (blindness > .01) { + blockColor.rgb = vec3(0.0); + } + + // Real color + gbufferData0 = blockColor; + gbufferData1 = blockColor; +} \ No newline at end of file diff --git a/shaders/common/spidereyes_blocks_fragment.glsl b/shaders/common/spidereyes_blocks_fragment.glsl index d6182155..1adba7cd 100644 --- a/shaders/common/spidereyes_blocks_fragment.glsl +++ b/shaders/common/spidereyes_blocks_fragment.glsl @@ -1,13 +1,18 @@ #include "/lib/config.glsl" -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform sampler2D tex; +/* Ins / Outs */ + varying vec2 texcoord; +// MAIN FUNCTION ------------------ + void main() { - // Toma el color puro del bloque - vec4 block_color = texture2D(tex, texcoord); + // Toma el color puro del bloque + vec4 blockColor = texture2D(tex, texcoord); - #include "/src/writebuffers.glsl" + #include "/src/writebuffers.glsl" } diff --git a/shaders/common/spidereyes_blocks_vertex.glsl b/shaders/common/spidereyes_blocks_vertex.glsl index f9d064b9..e7961447 100644 --- a/shaders/common/spidereyes_blocks_vertex.glsl +++ b/shaders/common/spidereyes_blocks_vertex.glsl @@ -1,20 +1,27 @@ #include "/lib/config.glsl" -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform mat4 gbufferProjectionInverse; #if defined SHADOW_CASTING && !defined NETHER - uniform mat4 gbufferModelViewInverse; + uniform mat4 gbufferModelViewInverse; #endif +/* Ins / Outs */ + varying vec2 texcoord; +/* Utility functions */ + #if AA_TYPE > 0 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif +// MAIN FUNCTION ------------------ + void main() { - texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; + texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; - #include "/src/position_vertex.glsl" + #include "/src/position_vertex.glsl" } \ No newline at end of file diff --git a/shaders/common/voxy.json b/shaders/common/voxy.json new file mode 100644 index 00000000..9b7df942 --- /dev/null +++ b/shaders/common/voxy.json @@ -0,0 +1,37 @@ +{ + "version": 1, + "uniforms": [ + "endFlashIntensity", + "worldTime", + "sunPosition", + "moonPosition", + "dayNightMix", + "rainStrength", + "skyColor", + "fogColor", + "isEyeInWater", + "eyeBrightnessSmooth", + "vxViewProjInv", + "vxProj", + "vxProjInv", + "vxModelViewInv", + "vxModelView", + "viewWidth", + "viewHeight", + "vxRenderDistance", + "nightVision", + "pixelSizeX", + "pixelSizeY", + "blindness", + "frameTimeCounter", + "cameraPosition" + ], + "samplers": { + "gaux1": "sampler2D", + "gaux4": "sampler2D", + "noisetex": "sampler2D", + "vxDepthTexTrans": "sampler2D" + }, + "opaqueDrawBuffers": [1, 4], + "translucentDrawBuffers": [1] +} \ No newline at end of file diff --git a/shaders/common/water_blocks_fragment.glsl b/shaders/common/water_blocks_fragment.glsl index f4d3b5e1..ea638148 100644 --- a/shaders/common/water_blocks_fragment.glsl +++ b/shaders/common/water_blocks_fragment.glsl @@ -1,17 +1,20 @@ #include "/lib/config.glsl" +/* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform sampler2D tex; -uniform float pixel_size_x; -uniform float pixel_size_y; +uniform float pixelSizeX; +uniform float pixelSizeY; uniform float near; uniform float far; uniform sampler2D gaux1; @@ -27,299 +30,278 @@ uniform vec3 moonPosition; uniform int worldTime; uniform float nightVision; uniform float rainStrength; -uniform float light_mix; +uniform float dayNightMix; uniform ivec2 eyeBrightnessSmooth; uniform sampler2D gaux4; +uniform vec3 cameraPosition; #if defined DISTANT_HORIZONS - uniform float dhNearPlane; - uniform float dhFarPlane; - uniform sampler2D dhDepthTex1; + uniform float dhNearPlane; + uniform float dhFarPlane; + uniform sampler2D dhDepthTex1; #endif -#if CLOUD_VOL_STYLE == 1 && V_CLOUDS != 0 - uniform sampler2D colortex2; -#elif V_CLOUDS != 0 - uniform sampler2D gaux2; +#if V_CLOUDS != 0 + uniform sampler2D gaux2; #endif #ifdef NETHER - uniform vec3 fogColor; + uniform vec3 fogColor; #endif #if defined SHADOW_CASTING && !defined NETHER - uniform sampler2DShadow shadowtex1; - #if defined COLORED_SHADOW - uniform sampler2DShadow shadowtex0; - uniform sampler2D shadowcolor0; - #endif + uniform sampler2DShadow shadowtex1; + #if defined COLORED_SHADOW + uniform sampler2DShadow shadowtex0; + uniform sampler2D shadowcolor0; + #endif #endif #ifdef CLOUD_REFLECTION - // Don't remove (Optifine bug?) + // Don't remove #endif #if defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER - uniform vec3 cameraPosition; - uniform mat4 gbufferModelViewInverse; + uniform mat4 gbufferModelViewInverse; #endif uniform float blindness; #if MC_VERSION >= 11900 - uniform float darknessFactor; - uniform float darknessLightFactor; + uniform float darknessFactor; + uniform float darknessLightFactor; +#endif + +#if SHADOW_LOCK > 0 && defined SHADOW_CASTING + uniform mat4 shadowModelView; + uniform mat4 shadowProjection; + uniform vec3 shadowLightPosition; #endif +#if defined THE_END || (SHADOW_LOCK > 0 && defined SHADOW_CASTING && !defined NETHER) + uniform mat4 gbufferModelView; +#endif + +/* Ins / Outs */ + varying vec2 texcoord; varying vec2 lmcoord; -varying vec4 tint_color; -varying float frog_adjust; -varying vec3 water_normal; -varying float block_type; +varying vec4 tintColor; +varying float frogAdjust; +varying vec3 waterNormal; +varying float blockType; varying vec4 worldposition; varying vec3 fragposition; varying vec3 tangent; varying vec3 binormal; -varying vec3 direct_light_color; -varying vec3 candle_color; -varying float direct_light_strength; -varying vec3 omni_light; -varying float visible_sky; -varying vec3 up_vec; -varying vec3 hi_sky_color; -varying vec3 low_sky_color; +varying vec3 directLightColor; +varying vec3 candleColor; +varying float directLightStrength; +varying vec3 omniLight; +varying float visibleSky; +varying vec3 upVector; +varying vec3 zenithSkyColor; +varying vec3 horizonSkyColor; #if defined SHADOW_CASTING && !defined NETHER - varying vec3 shadow_pos; - varying float shadow_diffuse; + varying vec3 shadowPos; + varying float shadowDiffuse; +#endif + +#if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER + varying vec3 vWorldPos; + varying vec3 vNormal; + varying vec3 vBias; #endif #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY - varying float umbral; - varying vec3 cloud_color; - varying vec3 dark_cloud_color; + varying float umbral; + varying vec3 cloudColor; + varying vec3 darkCloudColor; #endif +/* Utility functions */ + #include "/lib/projection_utils.glsl" #include "/lib/basic_utils.glsl" #include "/lib/dither.glsl" #include "/lib/water.glsl" #if defined SHADOW_CASTING && !defined NETHER - #include "/lib/shadow_frag.glsl" + #include "/lib/shadow_frag.glsl" #endif #include "/lib/luma.glsl" #if defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER - #include "/lib/volumetric_clouds.glsl" + #include "/lib/volumetric_clouds.glsl" +#endif + +#if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER + #include "/lib/shadow_vertex.glsl" #endif +// MAIN FUNCTION ------------------ + void main() { - #if SHADOW_TYPE == 1 || defined DISTANT_HORIZONS || (defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER) || SSR_TYPE > 0 - #if AA_TYPE > 0 - float dither = shifted_r_dither(gl_FragCoord.xy); - #else - float dither = r_dither(gl_FragCoord.xy); - #endif - #else - float dither = 1.0; - #endif - - vec4 block_color = texture2D(tex, texcoord); - - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - - vec3 real_light; - - #ifdef VANILLA_WATER - vec3 water_normal_base = vec3(0.0, 0.0, 1.0); - #else - vec3 water_normal_base = normal_waves(worldposition.xzy); - #endif - - vec3 surface_normal; - if (block_type > 2.5) { // Water - surface_normal = get_normals(water_normal_base, fragposition); - } else { - surface_normal = get_normals(vec3(0.0, 0.0, 1.0), fragposition); - } - - float normal_dot_eye = dot(surface_normal, normalize(fragposition)); - float fresnel = square_pow(1.0 + normal_dot_eye); - - vec3 reflect_water_vec = reflect(fragposition, surface_normal); - vec3 norm_reflect_water_vec = normalize(reflect_water_vec); - - vec3 sky_color_reflect; - if (isEyeInWater == 0 || isEyeInWater == 2) { - sky_color_reflect = mix( - low_sky_color, - hi_sky_color, - sqrt(clamp(dot(norm_reflect_water_vec, up_vec), 0.0001, 1.0)) - ); - } else { - sky_color_reflect = - hi_sky_color * .5 * ((eye_bright_smooth.y * .8 + 48) * 0.004166666666666667); - } - - #if defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER - sky_color_reflect = get_cloud( - normalize((gbufferModelViewInverse * vec4(reflect_water_vec * far, 1.0)).xyz), - sky_color_reflect, - 0.0, - dither, - worldposition.xyz, - int(CLOUD_STEPS_AVG * 0.5), - umbral, - cloud_color, - dark_cloud_color - ); - #endif - - if (block_type > 2.5) { // Water - #ifdef VANILLA_WATER - #if defined SHADOW_CASTING && !defined NETHER - #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_pos, dither); - shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); + vec2 eyeBrightSmoothFloat = vec2(eyeBrightnessSmooth); + + #if SHADOW_TYPE == 1 || defined DISTANT_HORIZONS || (defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER) || SSR_TYPE > 0 + #if AA_TYPE > 0 + float dither = shiftedRDither(gl_FragCoord.xy); #else - float shadow_c = get_shadow(shadow_pos, dither); - shadow_c = mix(shadow_c, 1.0, shadow_diffuse); + float dither = rDither(gl_FragCoord.xy); #endif - #else - float shadow_c = abs((light_mix * 2.0) - 1.0); - #endif + #else + float dither = 1.0; + #endif - float fresnel_tex = luma(block_color.rgb); + vec4 blockColor; + vec3 realLight; - real_light = - omni_light + - (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + - candle_color; + #ifdef VANILLA_WATER + vec3 waterNormalBase = vec3(0.0, 0.0, 1.0); + #else + vec3 waterNormalBase = normal_waves(worldposition.xzy); + #endif + + vec3 surfaceNormal; + if(blockType > 2.5) { // Water + surfaceNormal = get_normals(waterNormalBase, fragposition); + } else { + surfaceNormal = get_normals(vec3(0.0, 0.0, 1.0), fragposition); + } - real_light *= (fresnel_tex * 2.0) - 0.25; + float normalDotEye = dot(surfaceNormal, normalize(fragposition)); + float fresnel = squarePow(1.0 + normalDotEye); - block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125) * tint_color.rgb; + vec3 reflectWaterVector = reflect(fragposition, surfaceNormal); + vec3 normalizedReflectWaterVector = normalize(reflectWaterVector); - block_color.rgb = water_shader( - fragposition, - surface_normal, - block_color.rgb, - sky_color_reflect, - norm_reflect_water_vec, - fresnel, - visible_sky, - dither, - direct_light_color - ); + vec3 skyColorReflect; + if(isEyeInWater == 0 || isEyeInWater == 2) { + skyColorReflect = mix(horizonSkyColor, zenithSkyColor, smoothstep(0.0, 1.0, pow(clamp(dot(normalizedReflectWaterVector, upVector), 0.0001, 1.0), 0.333))); + } else { + skyColorReflect = zenithSkyColor * .5 * ((eyeBrightSmoothFloat.y * .8 + 48) * 0.004166666666666667); + } - block_color.a = sqrt(block_color.a); + skyColorReflect = xyzToRgb(skyColorReflect); - #else + #if defined CLOUD_REFLECTION && (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NETHER + skyColorReflect = get_cloud(normalize((gbufferModelViewInverse * vec4(reflectWaterVector * far, 1.0)).xyz), skyColorReflect, 0.0, dither, worldposition.xyz, int(CLOUD_STEPS_AVG * 0.5), umbral, cloudColor, darkCloudColor); + #endif + if(blockType > 2.5) { // Water + #ifdef VANILLA_WATER + blockColor = texture2D(tex, texcoord); + #if defined SHADOW_CASTING && !defined NETHER + #if SHADOW_LOCK > 0 + vec3 offsetVector = vNormal * 0.002; + vec3 preSnapPos = vWorldPos + offsetVector; + float texelSize = SHADOW_LOCK; + vec3 absPos = preSnapPos + cameraPosition; + // Redondeo al bloque + vec3 snappedAbsolute = floor(absPos * texelSize) / texelSize; + snappedAbsolute += 0.5 / texelSize; // Centrar en el texel + vec3 final_world_pos = (snappedAbsolute - cameraPosition) + vBias; + vec3 shadow_real_pos = get_shadow_pos(final_world_pos); + #else + vec3 shadow_real_pos = shadowPos; + #endif + #if defined COLORED_SHADOW + vec3 shadowValue = get_colored_shadow(shadow_real_pos, dither); + shadowValue = mix(shadowValue, vec3(1.0), shadowDiffuse); + #else + float shadowValue = get_shadow(shadow_real_pos, dither); + shadowValue = mix(shadowValue, 1.0, shadowDiffuse); + #endif + #else + float shadowValue = abs((dayNightMix * 2.0) - 1.0); + #endif + + float fresnelTex = luma(blockColor.rgb); + + realLight = omniLight + + (directLightStrength * shadowValue * directLightColor) * (1.0 - rainStrength * 0.75) + + candleColor; + + realLight *= (fresnelTex * 2.0) - 0.25; + + blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * .125) * tintColor.rgb; + + blockColor.rgb = water_shader(fragposition, surfaceNormal, blockColor.rgb, skyColorReflect, normalizedReflectWaterVector, fresnel, visibleSky, dither, directLightColor); + + blockColor.a = sqrt(blockColor.a); + #else + #if WATER_TEXTURE == 1 + blockColor = texture2D(tex, texcoord); + float waterTexture = luma(blockColor.rgb); + #else + float waterTexture = 1.0; + #endif + + realLight = omniLight + + (directLightStrength * visibleSky * directLightColor) * (1.0 - rainStrength * 0.75) + + candleColor; + + #if WATER_COLOR_SOURCE == 0 + blockColor.rgb = waterTexture * realLight * WATER_COLOR; + #elif WATER_COLOR_SOURCE == 1 + blockColor.rgb = 0.3 * waterTexture * realLight * tintColor.rgb; + #endif + + blockColor = vec4(refraction(fragposition, blockColor.rgb, waterNormalBase), 1.0); + + #if WATER_TEXTURE == 1 + waterTexture += 0.25; + waterTexture *= waterTexture; + waterTexture *= waterTexture; + fresnel = clamp(fresnel * (waterTexture), 0.0, 1.0); + #endif + + blockColor.rgb = water_shader(fragposition, surfaceNormal, blockColor.rgb, skyColorReflect, normalizedReflectWaterVector, fresnel, visibleSky, dither, directLightColor); - #if WATER_TEXTURE == 1 - float water_texture = luma(block_color.rgb); - #else - float water_texture = 1.0; - #endif - - real_light = - omni_light + - (direct_light_strength * direct_light_color) * (1.0 - rainStrength * 0.75) + - candle_color; - - #if defined NETHER || defined THE_END - #if WATER_COLOR_SOURCE == 0 - block_color.rgb = water_texture * real_light * WATER_COLOR; - #elif WATER_COLOR_SOURCE == 1 - block_color.rgb = 0.3 * water_texture * real_light * tint_color.rgb; - #endif - #else - #if WATER_COLOR_SOURCE == 0 - block_color.rgb = water_texture * real_light * visible_sky * WATER_COLOR; - #elif WATER_COLOR_SOURCE == 1 - block_color.rgb = 0.3 * water_texture * real_light * visible_sky * tint_color.rgb; #endif - #endif - - block_color = vec4( - refraction( - fragposition, - block_color.rgb, - water_normal_base - ), - 1.0 - ); - - #if WATER_TEXTURE == 1 - fresnel = clamp(fresnel * (water_texture * water_texture + 0.5), 0.0, 1.0); - #endif - - block_color.rgb = water_shader( - fragposition, - surface_normal, - block_color.rgb, - sky_color_reflect, - norm_reflect_water_vec, - fresnel, - visible_sky, - dither, - direct_light_color - ); - #endif + } else { // Otros translúcidos + blockColor = texture2D(tex, texcoord); - } else { // Otros translúcidos + blockColor *= tintColor; - block_color *= tint_color; + #if defined SHADOW_CASTING && !defined NETHER + #if defined COLORED_SHADOW + vec3 shadowValue = get_colored_shadow(shadowPos, dither); + shadowValue = mix(shadowValue, vec3(1.0), shadowDiffuse); + #else + float shadowValue = get_shadow(shadowPos, dither); + shadowValue = mix(shadowValue, 1.0, shadowDiffuse); + #endif + #else + float shadowValue = abs((dayNightMix * 2.0) - 1.0); + #endif - #if defined SHADOW_CASTING && !defined NETHER - #if defined COLORED_SHADOW - vec3 shadow_c = get_colored_shadow(shadow_pos, dither); - shadow_c = mix(shadow_c, vec3(1.0), shadow_diffuse); - #else - float shadow_c = get_shadow(shadow_pos, dither); - shadow_c = mix(shadow_c, 1.0, shadow_diffuse); - #endif - #else - float shadow_c = abs((light_mix * 2.0) - 1.0); - #endif + realLight = omniLight + + (directLightStrength * shadowValue * directLightColor) * (1.0 - rainStrength * 0.75) + + candleColor; - real_light = - omni_light + - (direct_light_strength * shadow_c * direct_light_color) * (1.0 - rainStrength * 0.75) + - candle_color; - - block_color.rgb *= mix(real_light, vec3(1.0), nightVision * .125); - - if (block_type > 1.5) { // Glass - block_color = cristal_shader( - fragposition, - water_normal, - block_color, - sky_color_reflect, - fresnel * fresnel, - visible_sky, - dither, - direct_light_color - ); - } - } - - // Avoid render in DH transition - #ifdef DISTANT_HORIZONS - float t = far - dhNearPlane; - float sup = t * TRANSITION_WATER_SUP; - float inf = t * TRANSITION_WATER_INF; - float draw_umbral = (gl_FogFragCoord - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); - if (draw_umbral > dither) { - discard; - return; + blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * .125); + + if(blockType > 1.5) { // Glass + blockColor = cristal_shader(fragposition, waterNormal, blockColor, skyColorReflect, fresnel * fresnel, visibleSky, dither, directLightColor); + } } - #endif - #include "/src/finalcolor.glsl" - #include "/src/writebuffers.glsl" + // Avoid render in DH transition + #ifdef DISTANT_HORIZONS + float t = far - dhNearPlane; + float sup = t * TRANSITION_DH_SUP; + float inf = t * TRANSITION_DH_INF; + float draw_umbral = (gl_FogFragCoord - (dhNearPlane + inf)) / (far - sup - inf - dhNearPlane); + if(draw_umbral > dither) { + discard; + return; + } + #endif + + #include "/src/finalcolor.glsl" + #include "/src/writebuffers.glsl" } diff --git a/shaders/common/water_blocks_vertex.glsl b/shaders/common/water_blocks_vertex.glsl index 04f974af..2bc58c79 100644 --- a/shaders/common/water_blocks_vertex.glsl +++ b/shaders/common/water_blocks_vertex.glsl @@ -1,17 +1,20 @@ #include "/lib/config.glsl" +/* Color utils */ + #ifdef THE_END - #include "/lib/color_utils_end.glsl" + #include "/lib/color_utils_end.glsl" #elif defined NETHER - #include "/lib/color_utils_nether.glsl" + #include "/lib/color_utils_nether.glsl" #else - #include "/lib/color_utils.glsl" + #include "/lib/color_utils.glsl" #endif -/* Config, uniforms, ins, outs */ +/* Uniforms */ + uniform vec3 sunPosition; uniform int isEyeInWater; -uniform float light_mix; +uniform float dayNightMix; uniform float far; uniform float nightVision; uniform ivec2 eyeBrightnessSmooth; @@ -22,115 +25,130 @@ uniform float rainStrength; uniform mat4 gbufferProjectionInverse; #ifdef DISTANT_HORIZONS - uniform int dhRenderDistance; + uniform int dhRenderDistance; +#endif + +#ifdef VOXY + uniform int vxRenderDistance; #endif #ifdef DYN_HAND_LIGHT - uniform int heldItemId; - uniform int heldItemId2; + uniform int heldItemId; + uniform int heldItemId2; #endif #ifdef UNKNOWN_DIM - uniform sampler2D lightmap; + uniform sampler2D lightmap; #endif #if defined SHADOW_CASTING && !defined NETHER - uniform mat4 shadowModelView; - uniform mat4 shadowProjection; - uniform vec3 shadowLightPosition; + uniform mat4 shadowModelView; + uniform mat4 shadowProjection; + uniform vec3 shadowLightPosition; +#endif + +#if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 + uniform float endFlashIntensity; #endif +/* Ins / Outs */ + varying vec2 texcoord; varying vec2 lmcoord; -varying vec4 tint_color; -varying float frog_adjust; -varying vec3 water_normal; -varying float block_type; +varying vec4 tintColor; +varying float frogAdjust; +varying vec3 waterNormal; +varying float blockType; varying vec4 worldposition; varying vec3 fragposition; varying vec3 tangent; varying vec3 binormal; -varying vec3 direct_light_color; -varying vec3 candle_color; -varying float direct_light_strength; -varying vec3 omni_light; -varying float visible_sky; -varying vec3 up_vec; -varying vec3 hi_sky_color; -varying vec3 low_sky_color; +varying vec3 directLightColor; +varying vec3 candleColor; +varying float directLightStrength; +varying vec3 omniLight; +varying float visibleSky; +varying vec3 upVector; +varying vec3 zenithSkyColor; +varying vec3 horizonSkyColor; + +#if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER + varying vec3 vWorldPos; + varying vec3 vNormal; + varying vec3 vBias; +#endif #if defined SHADOW_CASTING && !defined NETHER - varying vec3 shadow_pos; - varying float shadow_diffuse; + varying vec3 shadowPos; + varying float shadowDiffuse; #endif #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY - varying float umbral; - varying vec3 cloud_color; - varying vec3 dark_cloud_color; + varying float umbral; + varying vec3 cloudColor; + varying vec3 darkCloudColor; #endif attribute vec4 mc_Entity; attribute vec4 at_tangent; +/* Utility functions */ + #if AA_TYPE > 1 - #include "/src/taa_offset.glsl" + #include "/src/taa_offset.glsl" #endif #include "/lib/basic_utils.glsl" #if defined SHADOW_CASTING && !defined NETHER - #include "/lib/shadow_vertex.glsl" + #include "/lib/shadow_vertex.glsl" #endif +/* Utility functions */ + #include "/lib/luma.glsl" +// MAIN FUNCTION ------------------ + void main() { - vec2 eye_bright_smooth = vec2(eyeBrightnessSmooth); - - #include "/src/basiccoords_vertex.glsl" + vec2 eyeBrightSmoothFloat = vec2(eyeBrightnessSmooth); - vec4 position2 = gl_ModelViewMatrix * gl_Vertex; - fragposition = position2.xyz; - vec4 position = gbufferModelViewInverse * position2; - worldposition = position + vec4(cameraPosition.xyz, 0.0); - gl_Position = gl_ProjectionMatrix * gbufferModelView * position; + #include "/src/basiccoords_vertex.glsl" + #include "/src/position_vertex_water.glsl" - #if AA_TYPE > 1 - gl_Position.xy += taa_offset * gl_Position.w; - #endif + // Sky color calculation + #include "/src/hi_sky.glsl" + #include "/src/low_sky.glsl" - vec3 viewPos = gl_Position.xyz / gl_Position.w; - vec4 homopos = gbufferProjectionInverse * vec4(viewPos, 1.0); - viewPos = homopos.xyz / homopos.w; - gl_FogFragCoord = length(viewPos.xyz); + #include "/src/light_vertex.glsl" - // Reflected sky color calculation - #include "/src/sky_color_vertex.glsl" + waterNormal = normal; - #include "/src/light_vertex.glsl" - water_normal = normal; + tangent = normalize(gl_NormalMatrix * at_tangent.xyz); + binormal = normalize(gl_NormalMatrix * -cross(gl_Normal, at_tangent.xyz)); - tangent = normalize(gl_NormalMatrix * at_tangent.xyz); - binormal = normalize(gl_NormalMatrix * -cross(gl_Normal, at_tangent.xyz)); + // Special entities + blockType = 0.0; // 3 - Water, 2 - Glass, ? - Other + if(mc_Entity.x == ENTITY_WATER) { // Water + blockType = 3.0; + } else if(mc_Entity.x == ENTITY_STAINED) { // Glass + blockType = 2.0; + } - // Special entities - block_type = 0.0; // 3 - Water, 2 - Glass, ? - Other - if (mc_Entity.x == ENTITY_WATER) { // Water - block_type = 3.0; - } else if (mc_Entity.x == ENTITY_STAINED) { // Glass - block_type = 2.0; - } + upVector = normalize(gbufferModelView[1].xyz); - up_vec = normalize(gbufferModelView[1].xyz); + #include "/src/fog_vertex.glsl" - #include "/src/fog_vertex.glsl" + #if defined SHADOW_CASTING && !defined NETHER + #include "/src/shadow_src_vertex.glsl" + #endif - #if defined SHADOW_CASTING && !defined NETHER - #include "/src/shadow_src_vertex.glsl" - #endif + #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY + #include "/lib/volumetric_clouds_vertex.glsl" + #endif - #if (V_CLOUDS != 0 && !defined UNKNOWN_DIM) && !defined NO_CLOUDY_SKY - #include "/lib/volumetric_clouds_vertex.glsl" - #endif + #if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER + vNormal = shadowWorldNormal; + vBias = bias; + #endif } diff --git a/shaders/common/water_voxy_blocks_fragment.glsl b/shaders/common/water_voxy_blocks_fragment.glsl new file mode 100644 index 00000000..39d81759 --- /dev/null +++ b/shaders/common/water_voxy_blocks_fragment.glsl @@ -0,0 +1,223 @@ +#include "/lib/config.glsl" +#include "/lib/basic_utils.glsl" +#include "/lib/luma.glsl" +#include "/lib/dither.glsl" + +/* Color utils */ + +#if defined THE_END + #include "/lib/color_utils_end.glsl" +#elif defined NETHER + #include "/lib/color_utils_nether.glsl" +#else + #include "/lib/color_utils.glsl" +#endif + +#include "/lib/projection_utils_voxy.glsl" +#include "/lib/water_voxy.glsl" + +layout(location = 0) out vec4 gbufferData0; + +/* +struct VoxyFragmentParameters { + vec4 sampledColour; + vec2 tile; + vec2 uv; + uint face; + uint modelId; + vec2 lightMap; + vec4 tinting; + uint customId; +}; +*/ + +void voxy_emitFragment(VoxyFragmentParameters parameters) { + // Includes + #include "/src/voxy_uniforms_replace.glsl" + #include "/src/hi_sky_voxy.glsl" + #include "/src/low_sky_voxy.glsl" + + #include "/src/voxy_position_light.glsl" + + directLightStrength = clamp(directLightStrength, 0.0, 1.0); + + #if defined THE_END || defined NETHER + vec3 omniLight = LIGHT_DAY_COLOR * omniStrength; + #else + directLightColor = mix(directLightColor, ZENITH_SKY_RAIN_COLOR * luma(directLightColor) * 0.4, rainStrength); + + // Minimal light + vec3 omniColor = mix(ZenithSkyColorRGB, directLightColor * 0.45, OMNI_TINT); + float omniColorLuma = colorAverage(omniColor); + // --- OPTIMIZACIÓN #3: Prevenir división por cero --- + float lumaRatio = AVOID_DARK_LEVEL / max(omniColorLuma, 0.0001); + vec3 omniColorMin = omniColor * lumaRatio; + omniColor = max(omniColor, omniColorMin); + + vec3 omniLight = mix(omniColorMin, omniColor, visibleSky) * omniStrength; + #endif + + #if !defined THE_END && !defined NETHER + #ifndef SHADOW_CASTING + // Fake shadows + if (isEyeInWater == 0) { + // Reemplazar pow(x, 10.0) con multiplicaciones --- + float visSky2 = visibleSky * visibleSky; + float visSky4 = visSky2 * visSky2; + float visSky8 = visSky4 * visSky4; + directLightStrength = mix(0.0, directLightStrength, visSky8 * visSky2); + } else { + directLightStrength = mix(0.0, directLightStrength, visibleSky); + } + #else + directLightStrength = mix(0.0, directLightStrength, visibleSky); + #endif + #endif + + if (customId == ENTITY_EMMISIVE) { + directLightStrength = 10.0; + } else if (customId == ENTITY_S_EMMISIVE) { + directLightStrength = 1.0; + } + + vec3 binormal = normalize(vxModelView[2].xyz); + vec3 tangent = normalize(vxModelView[0].xyz); + vec3 upVector = normalize(vxModelView[1].xyz); + + // Fog Vertex + + // 1. Reconstruir clip space (base común) + vec2 ndc = (gl_FragCoord.xy / vec2(viewWidth, viewHeight)) * 2.0 - 1.0; + float depth = gl_FragCoord.z * 2.0 - 1.0; + vec4 clipPos = vec4(ndc, depth, 1.0); + + // 2. View space + vec4 viewSpacePos4D = vxProjInv * clipPos; + viewSpacePos4D /= viewSpacePos4D.w; + vec3 fragposition = viewSpacePos4D.xyz; + + // 3. World space derivado directamente de fragposition + vec4 worldPos = vxModelViewInv * viewSpacePos4D; + vec4 worldposition = worldPos + vec4(cameraPosition, 0.0); + + // 3. La distancia desde la cámara (equivalente a gl_FogFragCoord) + float fogFragCoord = length(worldPos.xyz); + + vec2 eyeBrightSmoothFloat = vec2(eyeBrightnessSmooth); + + #if !defined THE_END && !defined NETHER + float fogIntensityCoeff = max(eyeBrightSmoothFloat.y * 0.004166666666666667, visibleSky); + float frogAdjust = pow( + clamp(fogFragCoord / float(vxRenderDistance * 16), 0.0, 1.0) * fogIntensityCoeff, + mix(fogDensityCoeff * 0.15, 0.5, rainStrength) + ); + #else + float frogAdjust = sqrt(clamp(fogFragCoord / 48000.0, 0.0, 1.0)); + #endif + + // ---- Original Fragment Logic + + vec4 blockColor; + vec3 realLight; + + #ifdef VANILLA_WATER + vec3 waterNormalBase = vec3(0.0, 0.0, 1.0); + #else + vec3 waterNormalBase = normal_waves_voxy(worldposition.xzy); + #endif + + vec3 surfaceNormal; + if(customId == ENTITY_WATER) { // Water + surfaceNormal = get_normals_voxy(waterNormalBase, fragposition, tangent, binormal, normal); + } else { + surfaceNormal = get_normals_voxy(vec3(0.0, 0.0, 1.0), fragposition, tangent, binormal, normal); + } + + float normalDotEye = dot(surfaceNormal, normalize(fragposition)); + float fresnel = squarePow(1.0 + normalDotEye); + + vec3 reflectWaterVector = reflect(fragposition, surfaceNormal); + vec3 normalizedReflectWaterVector = normalize(reflectWaterVector); + + vec3 skyColorReflect; + if(isEyeInWater == 0 || isEyeInWater == 2) { + skyColorReflect = mix(horizonSkyColor, zenithSkyColor, smoothstep(0.0, 1.0, pow(clamp(dot(normalizedReflectWaterVector, upVector), 0.0001, 1.0), 0.333))); + } else { + skyColorReflect = zenithSkyColor * .5 * ((eyeBrightSmoothFloat.y * .8 + 48) * 0.004166666666666667); + } + + skyColorReflect = xyzToRgb(skyColorReflect); + + if(customId == ENTITY_WATER) { // Water + #ifdef VANILLA_WATER + blockColor = parameters.sampledColour; + + float shadowValue = abs((dayNightMix * 2.0) - 1.0); + float fresnelTex = luma(blockColor.rgb); + + realLight = omniLight + + (directLightStrength * shadowValue * directLightColor) * (1.0 - rainStrength * 0.75) + + candleColor; + + realLight *= (fresnelTex * 2.0) - 0.25; + + blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * .125) * tintColor.rgb; + + blockColor.rgb = water_shader_voxy(fragposition, surfaceNormal, blockColor.rgb, skyColorReflect, normalizedReflectWaterVector, fresnel, visibleSky, directLightColor, lmcoord); + + blockColor.a = sqrt(blockColor.a); + #else + #if WATER_TEXTURE == 1 + blockColor = parameters.sampledColour; + float waterTexture = luma(blockColor.rgb); + #else + float waterTexture = 1.0; + #endif + + realLight = omniLight + + (directLightStrength * visibleSky * directLightColor) * (1.0 - rainStrength * 0.75) + + candleColor; + + #if WATER_COLOR_SOURCE == 0 + blockColor.rgb = waterTexture * realLight * WATER_COLOR; + #elif WATER_COLOR_SOURCE == 1 + blockColor.rgb = 0.3 * waterTexture * realLight * tintColor.rgb; + #endif + + blockColor = vec4(refraction_voxy(fragposition, blockColor.rgb, waterNormalBase), 1.0); + + #if WATER_TEXTURE == 1 + waterTexture += 0.25; + waterTexture *= waterTexture; + waterTexture *= waterTexture; + fresnel = clamp(fresnel * (waterTexture), 0.0, 1.0); + #endif + + blockColor.rgb = water_shader_voxy(fragposition, surfaceNormal, blockColor.rgb, skyColorReflect, normalizedReflectWaterVector, fresnel, visibleSky, directLightColor, lmcoord); + #endif + } else { // Otros translúcidos + blockColor = parameters.sampledColour; + + blockColor *= tintColor; + + float shadowValue = abs((dayNightMix * 2.0) - 1.0); + + realLight = omniLight + + (directLightStrength * shadowValue * directLightColor) * (1.0 - rainStrength * 0.75) + + candleColor; + + blockColor.rgb *= mix(realLight, vec3(1.0), nightVision * .125); + + if(customId == ENTITY_STAINED) { // Glass + blockColor = cristal_shader_voxy(fragposition, normal, blockColor, skyColorReflect, fresnel * fresnel, visibleSky, directLightColor, lmcoord); + } + } + + #include "/src/finalcolor_voxy.glsl" + + if (blindness > .01) { + blockColor.rgb = vec3(0.0); + } + + gbufferData0 = blockColor; +} \ No newline at end of file diff --git a/shaders/composite.fsh b/shaders/composite.fsh index fbe86901..5520d828 100644 --- a/shaders/composite.fsh +++ b/shaders/composite.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite.fsh Render: Bloom and volumetric light @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define COMPOSITE_SHADER diff --git a/shaders/composite.vsh b/shaders/composite.vsh index 40f546fb..0bed7b4d 100644 --- a/shaders/composite.vsh +++ b/shaders/composite.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite.fsh Render: Bloom and volumetric light @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define COMPOSITE_SHADER diff --git a/shaders/composite1.fsh b/shaders/composite1.fsh index f7b151dc..e63a3c96 100644 --- a/shaders/composite1.fsh +++ b/shaders/composite1.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Bloom and DoF @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define COMPOSITE1_SHADER diff --git a/shaders/composite1.vsh b/shaders/composite1.vsh index bc89242b..e390adbd 100644 --- a/shaders/composite1.vsh +++ b/shaders/composite1.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Bloom and DoF @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define COMPOSITE1_SHADER diff --git a/shaders/composite2.fsh b/shaders/composite2.fsh index 3f4b5b00..e4bde726 100644 --- a/shaders/composite2.fsh +++ b/shaders/composite2.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Antialiasing and motion blur @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define COMPOSITE2_SHADER #define NO_SHADOWS diff --git a/shaders/composite2.vsh b/shaders/composite2.vsh index 96fbef44..610eedae 100644 --- a/shaders/composite2.vsh +++ b/shaders/composite2.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Antialiasing and motion blur @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define COMPOSITE2_SHADER diff --git a/shaders/deferred.fsh b/shaders/deferred.fsh index 3c7beee5..b035733d 100644 --- a/shaders/deferred.fsh +++ b/shaders/deferred.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - deferred.fsh Render: Ambient occlusion, volumetric clouds @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define DEFERRED_SHADER #define NO_SHADOWS diff --git a/shaders/deferred.vsh b/shaders/deferred.vsh index 9c131830..909bf106 100644 --- a/shaders/deferred.vsh +++ b/shaders/deferred.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - deferred.vsh Render: Ambient occlusion, volumetric clouds @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define DEFERRED_SHADER diff --git a/shaders/dimension.properties b/shaders/dimension.properties new file mode 100644 index 00000000..dc9ca2bb --- /dev/null +++ b/shaders/dimension.properties @@ -0,0 +1,3 @@ +dimension.world0 = minecraft:overworld +dimension.world-1 = minecraft:the_nether +dimension.world1 = minecraft:the_end \ No newline at end of file diff --git a/shaders/entity.properties b/shaders/entity.properties index 5fe704f1..0dd4af87 100644 --- a/shaders/entity.properties +++ b/shaders/entity.properties @@ -1,3 +1,10 @@ # MakeUp - entity.properties +# Lightning bolt entity.10101=minecraft:lightning_bolt + +# Entity flames (Iris) +entity.10201=minecraft:entity_flame + +# Entity glowing +entity.10202=auroraslanterns:wall_lantern diff --git a/shaders/final.fsh b/shaders/final.fsh index 4b245af4..c9429b76 100644 --- a/shaders/final.fsh +++ b/shaders/final.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - final.fsh Render: Final renderer @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define FINAL_SHADER #define NO_SHADOWS diff --git a/shaders/final.vsh b/shaders/final.vsh index fc7974e7..f1616fc3 100644 --- a/shaders/final.vsh +++ b/shaders/final.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - final.fsh Render: Final renderer @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define FINAL_SHADER diff --git a/shaders/gbuffers_armor_glint.fsh b/shaders/gbuffers_armor_glint.fsh index 245c4540..6017452a 100644 --- a/shaders/gbuffers_armor_glint.fsh +++ b/shaders/gbuffers_armor_glint.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_armor_glint.fsh Render: Glow objects @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_ARMOR_GLINT #define SHADER_BASIC diff --git a/shaders/gbuffers_armor_glint.vsh b/shaders/gbuffers_armor_glint.vsh index 86410e3b..ff10d45d 100644 --- a/shaders/gbuffers_armor_glint.vsh +++ b/shaders/gbuffers_armor_glint.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_armor_glint.vsh Render: Glow objects @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_ARMOR_GLINT #define ENTITY_GLINT diff --git a/shaders/gbuffers_basic.fsh b/shaders/gbuffers_basic.fsh index 10a7840b..039583a6 100644 --- a/shaders/gbuffers_basic.fsh +++ b/shaders/gbuffers_basic.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_basic.fsh Render: Basic elements - lines @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_BASIC #define NO_SHADOWS diff --git a/shaders/gbuffers_basic.vsh b/shaders/gbuffers_basic.vsh index 582d7761..f86486b3 100644 --- a/shaders/gbuffers_basic.vsh +++ b/shaders/gbuffers_basic.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_basic.vsh Render: Basic elements - lines @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_BASIC #define NO_SHADOWS diff --git a/shaders/gbuffers_beaconbeam.fsh b/shaders/gbuffers_beaconbeam.fsh index c7fd75db..9aac426b 100644 --- a/shaders/gbuffers_beaconbeam.fsh +++ b/shaders/gbuffers_beaconbeam.fsh @@ -1,6 +1,7 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_beaconbeam.fsh -Render: BEacon beam +Render: Beacon beam Javier Garduño - GNU Lesser General Public License v3.0 */ @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_BEACONBEAM diff --git a/shaders/gbuffers_beaconbeam.vsh b/shaders/gbuffers_beaconbeam.vsh index 6947c5af..3ec8273a 100644 --- a/shaders/gbuffers_beaconbeam.vsh +++ b/shaders/gbuffers_beaconbeam.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_beaconbeam.vsh Render: Beacon beam @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_BEACONBEAM diff --git a/shaders/gbuffers_block.fsh b/shaders/gbuffers_block.fsh index 9e533e47..84eed4f7 100644 --- a/shaders/gbuffers_block.fsh +++ b/shaders/gbuffers_block.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_block.fsh Render: Generic blocks @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_BLOCK diff --git a/shaders/gbuffers_block.vsh b/shaders/gbuffers_block.vsh index de8299eb..e0ef4437 100644 --- a/shaders/gbuffers_block.vsh +++ b/shaders/gbuffers_block.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_block.vsh Render: Generic block @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_BLOCK diff --git a/shaders/gbuffers_clouds.fsh b/shaders/gbuffers_clouds.fsh index a874673d..ccbcf446 100644 --- a/shaders/gbuffers_clouds.fsh +++ b/shaders/gbuffers_clouds.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_clouds.fsh Render: sky, clouds @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_CLOUDS #define NO_SHADOWS diff --git a/shaders/gbuffers_clouds.vsh b/shaders/gbuffers_clouds.vsh index 2f762d55..e5222e52 100644 --- a/shaders/gbuffers_clouds.vsh +++ b/shaders/gbuffers_clouds.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_clouds.vsh Render: sky, clouds @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_CLOUDS #define NO_SHADOWS diff --git a/shaders/gbuffers_damagedblock.fsh b/shaders/gbuffers_damagedblock.fsh index 9c5cf170..ea3edbfd 100644 --- a/shaders/gbuffers_damagedblock.fsh +++ b/shaders/gbuffers_damagedblock.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_damagedblock.fsh Render: Damaged block effect @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define NO_SHADOWS #define GBUFFER_DAMAGE diff --git a/shaders/gbuffers_damagedblock.vsh b/shaders/gbuffers_damagedblock.vsh index dbad621c..82538de1 100644 --- a/shaders/gbuffers_damagedblock.vsh +++ b/shaders/gbuffers_damagedblock.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_damagedblock.vsh Render: Damaged block effect @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define NO_SHADOWS #define GBUFFER_DAMAGE diff --git a/shaders/gbuffers_entities.fsh b/shaders/gbuffers_entities.fsh index 9af03dc1..54c01524 100644 --- a/shaders/gbuffers_entities.fsh +++ b/shaders/gbuffers_entities.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities.fsh Render: Droped objects, mobs and things like that @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_ENTITIES diff --git a/shaders/gbuffers_entities.vsh b/shaders/gbuffers_entities.vsh index 79155c49..5f3cf0ee 100644 --- a/shaders/gbuffers_entities.vsh +++ b/shaders/gbuffers_entities.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities.vsh Render: Droped objects, mobs and things like that @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_ENTITIES #define CAVEENTITY_V diff --git a/shaders/gbuffers_entities_glowing.fsh b/shaders/gbuffers_entities_glowing.fsh index 91f336e2..e20f60eb 100644 --- a/shaders/gbuffers_entities_glowing.fsh +++ b/shaders/gbuffers_entities_glowing.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities_glowing.fsh Render: Droped objects, mobs and things like that... glowing @@ -6,7 +7,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_ENTITIES #define GBUFFER_ENTITY_GLOW diff --git a/shaders/gbuffers_entities_glowing.vsh b/shaders/gbuffers_entities_glowing.vsh index 8e8d1bfe..48c4b313 100644 --- a/shaders/gbuffers_entities_glowing.vsh +++ b/shaders/gbuffers_entities_glowing.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities_glowing.vsh Render: Droped objects, mobs and things like that... glowing @@ -6,7 +7,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_ENTITIES #define GBUFFER_ENTITY_GLOW diff --git a/shaders/gbuffers_hand.fsh b/shaders/gbuffers_hand.fsh index 9ec041b9..77c0f0a9 100644 --- a/shaders/gbuffers_hand.fsh +++ b/shaders/gbuffers_hand.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand.fsh Render: Hand opaque objects @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_HAND diff --git a/shaders/gbuffers_hand.vsh b/shaders/gbuffers_hand.vsh index e900b443..ade09107 100644 --- a/shaders/gbuffers_hand.vsh +++ b/shaders/gbuffers_hand.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand.vsh Render: Hand opaque objects @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_HAND diff --git a/shaders/gbuffers_hand_water.fsh b/shaders/gbuffers_hand_water.fsh index 5caec050..4806eeef 100644 --- a/shaders/gbuffers_hand_water.fsh +++ b/shaders/gbuffers_hand_water.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand_water.fsh Render: Translucent hand objects @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_HAND_WATER #define SPECIAL_TRANS diff --git a/shaders/gbuffers_hand_water.vsh b/shaders/gbuffers_hand_water.vsh index 573a3f9d..a528be39 100644 --- a/shaders/gbuffers_hand_water.vsh +++ b/shaders/gbuffers_hand_water.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand_water.vsh Render: Translucent hand objects @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_HAND_WATER diff --git a/shaders/gbuffers_line.fsh b/shaders/gbuffers_line.fsh index 81a3e982..8c1245c5 100644 --- a/shaders/gbuffers_line.fsh +++ b/shaders/gbuffers_line.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_line.vsh Render: Render lines @@ -8,8 +9,9 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_LINE +#define NO_SHADOWS #include "/common/line_blocks_fragment.glsl" diff --git a/shaders/gbuffers_line.vsh b/shaders/gbuffers_line.vsh index b0c18b86..f74ffce2 100644 --- a/shaders/gbuffers_line.vsh +++ b/shaders/gbuffers_line.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_line.vsh Render: Render lines @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_LINE #define NO_SHADOWS diff --git a/shaders/gbuffers_skybasic.fsh b/shaders/gbuffers_skybasic.fsh index 1abe909d..4aeea27f 100644 --- a/shaders/gbuffers_skybasic.fsh +++ b/shaders/gbuffers_skybasic.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skybasic.fsh Render: Sky @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_SKYBASIC #define NO_SHADOWS diff --git a/shaders/gbuffers_skybasic.vsh b/shaders/gbuffers_skybasic.vsh index ca4e0e32..bfbd9fee 100644 --- a/shaders/gbuffers_skybasic.vsh +++ b/shaders/gbuffers_skybasic.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skybasic.vsh Render: Sky @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_SKYBASIC #define NO_SHADOWS diff --git a/shaders/gbuffers_skytextured.fsh b/shaders/gbuffers_skytextured.fsh index 155f17ce..5fa4d6c1 100644 --- a/shaders/gbuffers_skytextured.fsh +++ b/shaders/gbuffers_skytextured.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skytextured.fsh Render: sun, moon @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_SKYTEXTURED #define NO_SHADOWS diff --git a/shaders/gbuffers_skytextured.vsh b/shaders/gbuffers_skytextured.vsh index 65757049..6f5ffc33 100644 --- a/shaders/gbuffers_skytextured.vsh +++ b/shaders/gbuffers_skytextured.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skytextured.vsh Render: sun, moon @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_SKYTEXTURED #define NO_SHADOWS diff --git a/shaders/gbuffers_spidereyes.fsh b/shaders/gbuffers_spidereyes.fsh index 603bd28f..4de29fb8 100644 --- a/shaders/gbuffers_spidereyes.fsh +++ b/shaders/gbuffers_spidereyes.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_spidereyes.fsh Render: Some creatures eyes (like spider) @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_SPIDEREYES #define NO_SHADOWS diff --git a/shaders/gbuffers_spidereyes.vsh b/shaders/gbuffers_spidereyes.vsh index c4d068af..263839e5 100644 --- a/shaders/gbuffers_spidereyes.vsh +++ b/shaders/gbuffers_spidereyes.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_spidereyes.vsh Render: Some creatures eyes (like spider) @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_SPIDEREYES #define NO_SHADOWS diff --git a/shaders/gbuffers_terrain.fsh b/shaders/gbuffers_terrain.fsh index 6996931b..b382244a 100644 --- a/shaders/gbuffers_terrain.fsh +++ b/shaders/gbuffers_terrain.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_terrain.fsh Render: Almost everything @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_TERRAIN #define FOLIAGE_V diff --git a/shaders/gbuffers_terrain.vsh b/shaders/gbuffers_terrain.vsh index f1a889ac..50a4a01b 100644 --- a/shaders/gbuffers_terrain.vsh +++ b/shaders/gbuffers_terrain.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_terrain.vsh Render: Almost everything @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_TERRAIN #define FOLIAGE_V diff --git a/shaders/gbuffers_textured.fsh b/shaders/gbuffers_textured.fsh index 7cf5759f..56512ab9 100644 --- a/shaders/gbuffers_textured.fsh +++ b/shaders/gbuffers_textured.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_textured.fsh Render: Particles @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_TEXTURED diff --git a/shaders/gbuffers_textured.vsh b/shaders/gbuffers_textured.vsh index 29891ce9..4b460492 100644 --- a/shaders/gbuffers_textured.vsh +++ b/shaders/gbuffers_textured.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_textured.vsh Render: Particles @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_TEXTURED diff --git a/shaders/gbuffers_water.fsh b/shaders/gbuffers_water.fsh index 4573db19..e14e6079 100644 --- a/shaders/gbuffers_water.fsh +++ b/shaders/gbuffers_water.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_water.fsh Render: Water and translucent blocks @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_WATER #define WATER_F diff --git a/shaders/gbuffers_water.vsh b/shaders/gbuffers_water.vsh index c5a6b0c7..1271f9c9 100644 --- a/shaders/gbuffers_water.vsh +++ b/shaders/gbuffers_water.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_water.vsh Render: Water and translucent blocks @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define WATER_F diff --git a/shaders/gbuffers_weather.fsh b/shaders/gbuffers_weather.fsh index 50424838..a2ac5035 100644 --- a/shaders/gbuffers_weather.fsh +++ b/shaders/gbuffers_weather.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_weather.fsh Render: Weather @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_WEATHER #define SPECIAL_TRANS diff --git a/shaders/gbuffers_weather.vsh b/shaders/gbuffers_weather.vsh index e0ed9221..9d09cb2d 100644 --- a/shaders/gbuffers_weather.vsh +++ b/shaders/gbuffers_weather.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_weather.vsh Render: Weather @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define GBUFFER_WEATHER diff --git a/shaders/item.properties b/shaders/item.properties index 87041215..e8688351 100644 --- a/shaders/item.properties +++ b/shaders/item.properties @@ -1,5 +1,5 @@ # Normal light -item.11001=minecraft:glowstone minecraft:sea_lantern minecraft:shroomlight minecraft:jack_o_lantern minecraft:beacon minecraft:end_rod minecraft:lantern minecraft:soul_lantern minecraft:torch minecraft:soul_torch minecraft:campfire minecraft:soul_campfire minecraft:lava_bucket +item.11001=minecraft:glowstone minecraft:sea_lantern minecraft:shroomlight minecraft:jack_o_lantern minecraft:beacon minecraft:end_rod minecraft:lantern minecraft:soul_lantern minecraft:torch minecraft:soul_torch minecraft:campfire minecraft:soul_campfire minecraft:lava_bucket minecraft:copper_lantern minecraft:exposed_copper_lantern minecraft:weathered_copper_lantern minecraft:oxidized_copper_lantern minecraft:waxed_copper_lantern minecraft:waxed_exposed_copper_lantern minecraft:waxed_weathered_copper_lantern minecraft:waxed_oxidized_copper_lantern additionallanterns:andesite_chain additionallanterns:andesite_lantern additionallanterns:basalt_chain additionallanterns:basalt_lantern additionallanterns:black_andesite_lantern additionallanterns:black_basalt_lantern additionallanterns:black_blackstone_lantern additionallanterns:black_bone_lantern additionallanterns:black_bricks_lantern additionallanterns:black_cobblestone_lantern additionallanterns:black_crimson_lantern additionallanterns:black_dark_prismarine_lantern additionallanterns:black_diamond_lantern additionallanterns:black_diorite_lantern additionallanterns:black_emerald_lantern additionallanterns:black_end_stone_lantern additionallanterns:black_gold_lantern additionallanterns:black_granite_lantern additionallanterns:black_iron_lantern additionallanterns:black_mossy_cobblestone_lantern additionallanterns:black_netherite_lantern additionallanterns:black_normal_lantern additionallanterns:black_normal_nether_bricks_lantern additionallanterns:black_normal_sandstone_lantern additionallanterns:black_obsidian_lantern additionallanterns:black_prismarine_lantern additionallanterns:black_purpur_lantern additionallanterns:black_quartz_lantern additionallanterns:black_red_nether_bricks_lantern additionallanterns:black_red_sandstone_lantern additionallanterns:black_smooth_stone_lantern additionallanterns:black_stone_bricks_lantern additionallanterns:black_stone_lantern additionallanterns:black_warped_lantern additionallanterns:blackstone_chain additionallanterns:blackstone_lantern additionallanterns:blue_andesite_lantern additionallanterns:blue_basalt_lantern additionallanterns:blue_blackstone_lantern additionallanterns:blue_bone_lantern additionallanterns:blue_bricks_lantern additionallanterns:blue_cobblestone_lantern additionallanterns:blue_crimson_lantern additionallanterns:blue_dark_prismarine_lantern additionallanterns:blue_diamond_lantern additionallanterns:blue_diorite_lantern additionallanterns:blue_emerald_lantern additionallanterns:blue_end_stone_lantern additionallanterns:blue_gold_lantern additionallanterns:blue_granite_lantern additionallanterns:blue_iron_lantern additionallanterns:blue_mossy_cobblestone_lantern additionallanterns:blue_netherite_lantern additionallanterns:blue_normal_lantern additionallanterns:blue_normal_nether_bricks_lantern additionallanterns:blue_normal_sandstone_lantern additionallanterns:blue_obsidian_lantern additionallanterns:blue_prismarine_lantern additionallanterns:blue_purpur_lantern additionallanterns:blue_quartz_lantern additionallanterns:blue_red_nether_bricks_lantern additionallanterns:blue_red_sandstone_lantern additionallanterns:blue_smooth_stone_lantern additionallanterns:blue_stone_bricks_lantern additionallanterns:blue_stone_lantern additionallanterns:blue_warped_lantern additionallanterns:bone_chain additionallanterns:bone_lantern additionallanterns:bricks_chain additionallanterns:bricks_lantern additionallanterns:brown_andesite_lantern additionallanterns:brown_basalt_lantern additionallanterns:brown_blackstone_lantern additionallanterns:brown_bone_lantern additionallanterns:brown_bricks_lantern additionallanterns:brown_cobblestone_lantern additionallanterns:brown_crimson_lantern additionallanterns:brown_dark_prismarine_lantern additionallanterns:brown_diamond_lantern additionallanterns:brown_diorite_lantern additionallanterns:brown_emerald_lantern additionallanterns:brown_end_stone_lantern additionallanterns:brown_gold_lantern additionallanterns:brown_granite_lantern additionallanterns:brown_iron_lantern additionallanterns:brown_mossy_cobblestone_lantern additionallanterns:brown_netherite_lantern additionallanterns:brown_normal_lantern additionallanterns:brown_normal_nether_bricks_lantern additionallanterns:brown_normal_sandstone_lantern additionallanterns:brown_obsidian_lantern additionallanterns:brown_prismarine_lantern additionallanterns:brown_purpur_lantern additionallanterns:brown_quartz_lantern additionallanterns:brown_red_nether_bricks_lantern additionallanterns:brown_red_sandstone_lantern additionallanterns:brown_smooth_stone_lantern additionallanterns:brown_stone_bricks_lantern additionallanterns:brown_stone_lantern additionallanterns:brown_warped_lantern additionallanterns:cobblestone_chain additionallanterns:cobblestone_lantern additionallanterns:crimson_chain additionallanterns:crimson_lantern additionallanterns:cyan_andesite_lantern additionallanterns:cyan_basalt_lantern additionallanterns:cyan_blackstone_lantern additionallanterns:cyan_bone_lantern additionallanterns:cyan_bricks_lantern additionallanterns:cyan_cobblestone_lantern additionallanterns:cyan_crimson_lantern additionallanterns:cyan_dark_prismarine_lantern additionallanterns:cyan_diamond_lantern additionallanterns:cyan_diorite_lantern additionallanterns:cyan_emerald_lantern additionallanterns:cyan_end_stone_lantern additionallanterns:cyan_gold_lantern additionallanterns:cyan_granite_lantern additionallanterns:cyan_iron_lantern additionallanterns:cyan_mossy_cobblestone_lantern additionallanterns:cyan_netherite_lantern additionallanterns:cyan_normal_lantern additionallanterns:cyan_normal_nether_bricks_lantern additionallanterns:cyan_normal_sandstone_lantern additionallanterns:cyan_obsidian_lantern additionallanterns:cyan_prismarine_lantern additionallanterns:cyan_purpur_lantern additionallanterns:cyan_quartz_lantern additionallanterns:cyan_red_nether_bricks_lantern additionallanterns:cyan_red_sandstone_lantern additionallanterns:cyan_smooth_stone_lantern additionallanterns:cyan_stone_bricks_lantern additionallanterns:cyan_stone_lantern additionallanterns:cyan_warped_lantern additionallanterns:dark_prismarine_chain additionallanterns:dark_prismarine_lantern additionallanterns:diamond_chain additionallanterns:diamond_lantern additionallanterns:diorite_chain additionallanterns:diorite_lantern additionallanterns:emerald_chain additionallanterns:emerald_lantern additionallanterns:end_stone_chain additionallanterns:end_stone_lantern additionallanterns:gold_chain additionallanterns:gold_lantern additionallanterns:granite_chain additionallanterns:granite_lantern additionallanterns:gray_andesite_lantern additionallanterns:gray_basalt_lantern additionallanterns:gray_blackstone_lantern additionallanterns:gray_bone_lantern additionallanterns:gray_bricks_lantern additionallanterns:gray_cobblestone_lantern additionallanterns:gray_crimson_lantern additionallanterns:gray_dark_prismarine_lantern additionallanterns:gray_diamond_lantern additionallanterns:gray_diorite_lantern additionallanterns:gray_emerald_lantern additionallanterns:gray_end_stone_lantern additionallanterns:gray_gold_lantern additionallanterns:gray_granite_lantern additionallanterns:gray_iron_lantern additionallanterns:gray_mossy_cobblestone_lantern additionallanterns:gray_netherite_lantern additionallanterns:gray_normal_lantern additionallanterns:gray_normal_nether_bricks_lantern additionallanterns:gray_normal_sandstone_lantern additionallanterns:gray_obsidian_lantern additionallanterns:gray_prismarine_lantern additionallanterns:gray_purpur_lantern additionallanterns:gray_quartz_lantern additionallanterns:gray_red_nether_bricks_lantern additionallanterns:gray_red_sandstone_lantern additionallanterns:gray_smooth_stone_lantern additionallanterns:gray_stone_bricks_lantern additionallanterns:gray_stone_lantern additionallanterns:gray_warped_lantern additionallanterns:green_andesite_lantern additionallanterns:green_basalt_lantern additionallanterns:green_blackstone_lantern additionallanterns:green_bone_lantern additionallanterns:green_bricks_lantern additionallanterns:green_cobblestone_lantern additionallanterns:green_crimson_lantern additionallanterns:green_dark_prismarine_lantern additionallanterns:green_diamond_lantern additionallanterns:green_diorite_lantern additionallanterns:green_emerald_lantern additionallanterns:green_end_stone_lantern additionallanterns:green_gold_lantern additionallanterns:green_granite_lantern additionallanterns:green_iron_lantern additionallanterns:green_mossy_cobblestone_lantern additionallanterns:green_netherite_lantern additionallanterns:green_normal_lantern additionallanterns:green_normal_nether_bricks_lantern additionallanterns:green_normal_sandstone_lantern additionallanterns:green_obsidian_lantern additionallanterns:green_prismarine_lantern additionallanterns:green_purpur_lantern additionallanterns:green_quartz_lantern additionallanterns:green_red_nether_bricks_lantern additionallanterns:green_red_sandstone_lantern additionallanterns:green_smooth_stone_lantern additionallanterns:green_stone_bricks_lantern additionallanterns:green_stone_lantern additionallanterns:green_warped_lantern additionallanterns:iron_lantern additionallanterns:light_blue_andesite_lantern additionallanterns:light_blue_basalt_lantern additionallanterns:light_blue_blackstone_lantern additionallanterns:light_blue_bone_lantern additionallanterns:light_blue_bricks_lantern additionallanterns:light_blue_cobblestone_lantern additionallanterns:light_blue_crimson_lantern additionallanterns:light_blue_dark_prismarine_lantern additionallanterns:light_blue_diamond_lantern additionallanterns:light_blue_diorite_lantern additionallanterns:light_blue_emerald_lantern additionallanterns:light_blue_end_stone_lantern additionallanterns:light_blue_gold_lantern additionallanterns:light_blue_granite_lantern additionallanterns:light_blue_iron_lantern additionallanterns:light_blue_mossy_cobblestone_lantern additionallanterns:light_blue_netherite_lantern additionallanterns:light_blue_normal_lantern additionallanterns:light_blue_normal_nether_bricks_lantern additionallanterns:light_blue_normal_sandstone_lantern additionallanterns:light_blue_obsidian_lantern additionallanterns:light_blue_prismarine_lantern additionallanterns:light_blue_purpur_lantern additionallanterns:light_blue_quartz_lantern additionallanterns:light_blue_red_nether_bricks_lantern additionallanterns:light_blue_red_sandstone_lantern additionallanterns:light_blue_smooth_stone_lantern additionallanterns:light_blue_stone_bricks_lantern additionallanterns:light_blue_stone_lantern additionallanterns:light_blue_warped_lantern additionallanterns:light_gray_andesite_lantern additionallanterns:light_gray_basalt_lantern additionallanterns:light_gray_blackstone_lantern additionallanterns:light_gray_bone_lantern additionallanterns:light_gray_bricks_lantern additionallanterns:light_gray_cobblestone_lantern additionallanterns:light_gray_crimson_lantern additionallanterns:light_gray_dark_prismarine_lantern additionallanterns:light_gray_diamond_lantern additionallanterns:light_gray_diorite_lantern additionallanterns:light_gray_emerald_lantern additionallanterns:light_gray_end_stone_lantern additionallanterns:light_gray_gold_lantern additionallanterns:light_gray_granite_lantern additionallanterns:light_gray_iron_lantern additionallanterns:light_gray_mossy_cobblestone_lantern additionallanterns:light_gray_netherite_lantern additionallanterns:light_gray_normal_lantern additionallanterns:light_gray_normal_nether_bricks_lantern additionallanterns:light_gray_normal_sandstone_lantern additionallanterns:light_gray_obsidian_lantern additionallanterns:light_gray_prismarine_lantern additionallanterns:light_gray_purpur_lantern additionallanterns:light_gray_quartz_lantern additionallanterns:light_gray_red_nether_bricks_lantern additionallanterns:light_gray_red_sandstone_lantern additionallanterns:light_gray_smooth_stone_lantern additionallanterns:light_gray_stone_bricks_lantern additionallanterns:light_gray_stone_lantern additionallanterns:light_gray_warped_lantern additionallanterns:lime_andesite_lantern additionallanterns:lime_basalt_lantern additionallanterns:lime_blackstone_lantern additionallanterns:lime_bone_lantern additionallanterns:lime_bricks_lantern additionallanterns:lime_cobblestone_lantern additionallanterns:lime_crimson_lantern additionallanterns:lime_dark_prismarine_lantern additionallanterns:lime_diamond_lantern additionallanterns:lime_diorite_lantern additionallanterns:lime_emerald_lantern additionallanterns:lime_end_stone_lantern additionallanterns:lime_gold_lantern additionallanterns:lime_granite_lantern additionallanterns:lime_iron_lantern additionallanterns:lime_mossy_cobblestone_lantern additionallanterns:lime_netherite_lantern additionallanterns:lime_normal_lantern additionallanterns:lime_normal_nether_bricks_lantern additionallanterns:lime_normal_sandstone_lantern additionallanterns:lime_obsidian_lantern additionallanterns:lime_prismarine_lantern additionallanterns:lime_purpur_lantern additionallanterns:lime_quartz_lantern additionallanterns:lime_red_nether_bricks_lantern additionallanterns:lime_red_sandstone_lantern additionallanterns:lime_smooth_stone_lantern additionallanterns:lime_stone_bricks_lantern additionallanterns:lime_stone_lantern additionallanterns:lime_warped_lantern additionallanterns:magenta_andesite_lantern additionallanterns:magenta_basalt_lantern additionallanterns:magenta_blackstone_lantern additionallanterns:magenta_bone_lantern additionallanterns:magenta_bricks_lantern additionallanterns:magenta_cobblestone_lantern additionallanterns:magenta_crimson_lantern additionallanterns:magenta_dark_prismarine_lantern additionallanterns:magenta_diamond_lantern additionallanterns:magenta_diorite_lantern additionallanterns:magenta_emerald_lantern additionallanterns:magenta_end_stone_lantern additionallanterns:magenta_gold_lantern additionallanterns:magenta_granite_lantern additionallanterns:magenta_iron_lantern additionallanterns:magenta_mossy_cobblestone_lantern additionallanterns:magenta_netherite_lantern additionallanterns:magenta_normal_lantern additionallanterns:magenta_normal_nether_bricks_lantern additionallanterns:magenta_normal_sandstone_lantern additionallanterns:magenta_obsidian_lantern additionallanterns:magenta_prismarine_lantern additionallanterns:magenta_purpur_lantern additionallanterns:magenta_quartz_lantern additionallanterns:magenta_red_nether_bricks_lantern additionallanterns:magenta_red_sandstone_lantern additionallanterns:magenta_smooth_stone_lantern additionallanterns:magenta_stone_bricks_lantern additionallanterns:magenta_stone_lantern additionallanterns:magenta_warped_lantern additionallanterns:mossy_cobblestone_chain additionallanterns:mossy_cobblestone_lantern additionallanterns:netherite_chain additionallanterns:netherite_lantern additionallanterns:normal_nether_bricks_chain additionallanterns:normal_nether_bricks_lantern additionallanterns:normal_sandstone_chain additionallanterns:normal_sandstone_lantern additionallanterns:obsidian_chain additionallanterns:obsidian_lantern additionallanterns:orange_andesite_lantern additionallanterns:orange_basalt_lantern additionallanterns:orange_blackstone_lantern additionallanterns:orange_bone_lantern additionallanterns:orange_bricks_lantern additionallanterns:orange_cobblestone_lantern additionallanterns:orange_crimson_lantern additionallanterns:orange_dark_prismarine_lantern additionallanterns:orange_diamond_lantern additionallanterns:orange_diorite_lantern additionallanterns:orange_emerald_lantern additionallanterns:orange_end_stone_lantern additionallanterns:orange_gold_lantern additionallanterns:orange_granite_lantern additionallanterns:orange_iron_lantern additionallanterns:orange_mossy_cobblestone_lantern additionallanterns:orange_netherite_lantern additionallanterns:orange_normal_lantern additionallanterns:orange_normal_nether_bricks_lantern additionallanterns:orange_normal_sandstone_lantern additionallanterns:orange_obsidian_lantern additionallanterns:orange_prismarine_lantern additionallanterns:orange_purpur_lantern additionallanterns:orange_quartz_lantern additionallanterns:orange_red_nether_bricks_lantern additionallanterns:orange_red_sandstone_lantern additionallanterns:orange_smooth_stone_lantern additionallanterns:orange_stone_bricks_lantern additionallanterns:orange_stone_lantern additionallanterns:orange_warped_lantern additionallanterns:pink_andesite_lantern additionallanterns:pink_basalt_lantern additionallanterns:pink_blackstone_lantern additionallanterns:pink_bone_lantern additionallanterns:pink_bricks_lantern additionallanterns:pink_cobblestone_lantern additionallanterns:pink_crimson_lantern additionallanterns:pink_dark_prismarine_lantern additionallanterns:pink_diamond_lantern additionallanterns:pink_diorite_lantern additionallanterns:pink_emerald_lantern additionallanterns:pink_end_stone_lantern additionallanterns:pink_gold_lantern additionallanterns:pink_granite_lantern additionallanterns:pink_iron_lantern additionallanterns:pink_mossy_cobblestone_lantern additionallanterns:pink_netherite_lantern additionallanterns:pink_normal_lantern additionallanterns:pink_normal_nether_bricks_lantern additionallanterns:pink_normal_sandstone_lantern additionallanterns:pink_obsidian_lantern additionallanterns:pink_prismarine_lantern additionallanterns:pink_purpur_lantern additionallanterns:pink_quartz_lantern additionallanterns:pink_red_nether_bricks_lantern additionallanterns:pink_red_sandstone_lantern additionallanterns:pink_smooth_stone_lantern additionallanterns:pink_stone_bricks_lantern additionallanterns:pink_stone_lantern additionallanterns:pink_warped_lantern additionallanterns:prismarine_chain additionallanterns:prismarine_lantern additionallanterns:purple_andesite_lantern additionallanterns:purple_basalt_lantern additionallanterns:purple_blackstone_lantern additionallanterns:purple_bone_lantern additionallanterns:purple_bricks_lantern additionallanterns:purple_cobblestone_lantern additionallanterns:purple_crimson_lantern additionallanterns:purple_dark_prismarine_lantern additionallanterns:purple_diamond_lantern additionallanterns:purple_diorite_lantern additionallanterns:purple_emerald_lantern additionallanterns:purple_end_stone_lantern additionallanterns:purple_gold_lantern additionallanterns:purple_granite_lantern additionallanterns:purple_iron_lantern additionallanterns:purple_mossy_cobblestone_lantern additionallanterns:purple_netherite_lantern additionallanterns:purple_normal_lantern additionallanterns:purple_normal_nether_bricks_lantern additionallanterns:purple_normal_sandstone_lantern additionallanterns:purple_obsidian_lantern additionallanterns:purple_prismarine_lantern additionallanterns:purple_purpur_lantern additionallanterns:purple_quartz_lantern additionallanterns:purple_red_nether_bricks_lantern additionallanterns:purple_red_sandstone_lantern additionallanterns:purple_smooth_stone_lantern additionallanterns:purple_stone_bricks_lantern additionallanterns:purple_stone_lantern additionallanterns:purple_warped_lantern additionallanterns:purpur_chain additionallanterns:purpur_lantern additionallanterns:quartz_chain additionallanterns:quartz_lantern additionallanterns:red_andesite_lantern additionallanterns:red_basalt_lantern additionallanterns:red_blackstone_lantern additionallanterns:red_bone_lantern additionallanterns:red_bricks_lantern additionallanterns:red_cobblestone_lantern additionallanterns:red_crimson_lantern additionallanterns:red_dark_prismarine_lantern additionallanterns:red_diamond_lantern additionallanterns:red_diorite_lantern additionallanterns:red_emerald_lantern additionallanterns:red_end_stone_lantern additionallanterns:red_gold_lantern additionallanterns:red_granite_lantern additionallanterns:red_iron_lantern additionallanterns:red_mossy_cobblestone_lantern additionallanterns:red_nether_bricks_chain additionallanterns:red_nether_bricks_lantern additionallanterns:red_netherite_lantern additionallanterns:red_normal_lantern additionallanterns:red_normal_nether_bricks_lantern additionallanterns:red_normal_sandstone_lantern additionallanterns:red_obsidian_lantern additionallanterns:red_prismarine_lantern additionallanterns:red_purpur_lantern additionallanterns:red_quartz_lantern additionallanterns:red_red_nether_bricks_lantern additionallanterns:red_red_sandstone_lantern additionallanterns:red_sandstone_chain additionallanterns:red_sandstone_lantern additionallanterns:red_smooth_stone_lantern additionallanterns:red_stone_bricks_lantern additionallanterns:red_stone_lantern additionallanterns:red_warped_lantern additionallanterns:smooth_stone_chain additionallanterns:smooth_stone_lantern additionallanterns:stone_bricks_chain additionallanterns:stone_bricks_lantern additionallanterns:stone_chain additionallanterns:stone_lantern additionallanterns:warped_chain additionallanterns:warped_lantern additionallanterns:white_andesite_lantern additionallanterns:white_basalt_lantern additionallanterns:white_blackstone_lantern additionallanterns:white_bone_lantern additionallanterns:white_bricks_lantern additionallanterns:white_cobblestone_lantern additionallanterns:white_crimson_lantern additionallanterns:white_dark_prismarine_lantern additionallanterns:white_diamond_lantern additionallanterns:white_diorite_lantern additionallanterns:white_emerald_lantern additionallanterns:white_end_stone_lantern additionallanterns:white_gold_lantern additionallanterns:white_granite_lantern additionallanterns:white_iron_lantern additionallanterns:white_mossy_cobblestone_lantern additionallanterns:white_netherite_lantern additionallanterns:white_normal_lantern additionallanterns:white_normal_nether_bricks_lantern additionallanterns:white_normal_sandstone_lantern additionallanterns:white_obsidian_lantern additionallanterns:white_prismarine_lantern additionallanterns:white_purpur_lantern additionallanterns:white_quartz_lantern additionallanterns:white_red_nether_bricks_lantern additionallanterns:white_red_sandstone_lantern additionallanterns:white_smooth_stone_lantern additionallanterns:white_stone_bricks_lantern additionallanterns:white_stone_lantern additionallanterns:white_warped_lantern additionallanterns:yellow_andesite_lantern additionallanterns:yellow_basalt_lantern additionallanterns:yellow_blackstone_lantern additionallanterns:yellow_bone_lantern additionallanterns:yellow_bricks_lantern additionallanterns:yellow_cobblestone_lantern additionallanterns:yellow_crimson_lantern additionallanterns:yellow_dark_prismarine_lantern additionallanterns:yellow_diamond_lantern additionallanterns:yellow_diorite_lantern additionallanterns:yellow_emerald_lantern additionallanterns:yellow_end_stone_lantern additionallanterns:yellow_gold_lantern additionallanterns:yellow_granite_lantern additionallanterns:yellow_iron_lantern additionallanterns:yellow_mossy_cobblestone_lantern additionallanterns:yellow_netherite_lantern additionallanterns:yellow_normal_lantern additionallanterns:yellow_normal_nether_bricks_lantern additionallanterns:yellow_normal_sandstone_lantern additionallanterns:yellow_obsidian_lantern additionallanterns:yellow_prismarine_lantern additionallanterns:yellow_purpur_lantern additionallanterns:yellow_quartz_lantern additionallanterns:yellow_red_nether_bricks_lantern additionallanterns:yellow_red_sandstone_lantern additionallanterns:yellow_smooth_stone_lantern additionallanterns:yellow_stone_bricks_lantern additionallanterns:yellow_stone_lantern additionallanterns:yellow_warped_lantern # Low light item.11002=minecraft:redstone_torch minecraft:crying_obsidian minecraft:respawn_anchor minecraft:nether_star minecraft:magma_cream minecraft:blaze_powder minecraft:blaze_rod minecraft:prismarine_crystals minecraft:glowstone_dust minecraft:glow_item_frame minecraft:glow_berries minecraft:glow_lichen minecraft:glow_ink_sac \ No newline at end of file diff --git a/shaders/lang/en_US.lang b/shaders/lang/en_US.lang index 6fa7059b..ad1b8481 100644 --- a/shaders/lang/en_US.lang +++ b/shaders/lang/en_US.lang @@ -7,8 +7,7 @@ profile.shadowless_high=Shadowless High profile.low=Low profile.medium=Medium profile.high=High -profile.extreme=Extreme -profile.extremeplus=Extreme+ +profile.extremeplus=High (DoF) profile.comment=The "shadowless" profiles are designed for low-performance machines, disregarding the shadows. Traditional profiles slowly add higher quality shadows and more advanced heavy effects. Please experiment with the available options and find the best combination for you. @@ -16,7 +15,7 @@ profile.comment=The "shadowless" profiles are designed for low-performance machi ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Thanks for using this shader! :). Set Optifine native quality controls on normal or default values for better quality. -value.ACERCADE.0=v.9.0 +value.ACERCADE.0=v.9.5b #Options ############################# @@ -69,7 +68,7 @@ option.AA_TYPE=Temporal sampling value.AA_TYPE.0=Off value.AA_TYPE.1=Denoise value.AA_TYPE.2=TAA -value.AA_TYPE.3=Sharp TAA +value.AA_TYPE.3=TAA+ option.MOTION_BLUR=Motion blur option.MOTION_BLUR_STRENGTH=Motion blur strength @@ -129,6 +128,7 @@ value.COLOR_SCHEME.3=Legacy value.COLOR_SCHEME.4=Captain value.COLOR_SCHEME.5=Psychedelic value.COLOR_SCHEME.6=Cocoa +value.COLOR_SCHEME.7=Testigo value.COLOR_SCHEME.99=Custom option.LIGHT_SUNSET_COLOR_R=Sunset light R @@ -243,8 +243,6 @@ option.USE_BASIC_SH=Custom dimensions basic shader option.MATERIAL_GLOSS=Material gloss -option.SIMPLE_AUTOEXP=Simpler exposure - option.DYN_HAND_LIGHT=Fake dynamic light #Screens @@ -257,6 +255,14 @@ screen.COMPATIBILITY_SCREEN.comment=Set compatibility options screen.SHADOWS_SCREEN=Shadows screen.SHADOWS_SCREEN.comment=Set shadows options +option.SHADOW_LOCK=Pixel locked shadows +value.SHADOW_LOCK.0=Disabled +value.SHADOW_LOCK.16=16x16 +value.SHADOW_LOCK.32=32x32 +value.SHADOW_LOCK.64=64x64 +value.SHADOW_LOCK.128=128x128 +value.SHADOW_LOCK.256=256x256 + screen.DOF_SCREEN=Depth of field screen.DOF_SCREEN.comment=Set depth of field options diff --git a/shaders/lang/es_AR.lang b/shaders/lang/es_AR.lang new file mode 100644 index 00000000..60a42e86 --- /dev/null +++ b/shaders/lang/es_AR.lang @@ -0,0 +1,299 @@ +# Perfiles +############################ +profile.no_effects=Sin efectos +profile.shadowless_low=Sin sombras - Bajo +profile.shadowless_medium=Sin sombras - Medio +profile.shadowless_high=Sin sombras - Alto +profile.low=Bajo +profile.medium=Medio +profile.high=Alto +profile.extremeplus=Alto (DoF) + +profile.comment=Los perfiles "sin sombras" están pensados para máquinas de bajo rendimiento, sin considerar las sombras. Los perfiles tradicionales van agregando sombras de mejor calidad y efectos más avanzados y pesados. Probá las opciones disponibles y encontrá la combinación que mejor te funcione. + +# Acerca de +############################# +option.ACERCADE=MakeUp +option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. +value.ACERCADE.0=v.9.5b + +# Opciones +############################# +option.SHADOW_CASTING=Sombras + +option.SHADOW_DISTANCE_SLIDER=Distancia de sombra +value.SHADOW_DISTANCE_SLIDER.0=Corta +value.SHADOW_DISTANCE_SLIDER.1=Media +value.SHADOW_DISTANCE_SLIDER.2=Larga + +option.SHADOW_QTY_SLIDER=Calidad de sombras +value.SHADOW_QTY_SLIDER.0=Ninguna +value.SHADOW_QTY_SLIDER.1=Baja +value.SHADOW_QTY_SLIDER.2=Media +value.SHADOW_QTY_SLIDER.3=Alta + +option.REFLECTION_SLIDER=Reflejo +value.REFLECTION_SLIDER.0=Desactivado +value.REFLECTION_SLIDER.1=Imagen invertida +value.REFLECTION_SLIDER.2=Raymarching + +option.SHADOW_TYPE=Tipo de sombra +value.SHADOW_TYPE.0=Simple +value.SHADOW_TYPE.1=Filtrada + +option.SHADOW_BLUR=Intensidad del desenfoque de sombra + +option.COLORED_SHADOW=Sombras coloreadas + +option.VOL_LIGHT=Rayos de luz +value.VOL_LIGHT.0=Desactivado +value.VOL_LIGHT.1=Basado en profundidad +value.VOL_LIGHT.2=Volumétrico + +option.DOF=Profundidad de campo + +option.DOF_STRENGTH=Intensidad de DoF + +option.DOF_SAMPLES_FACTOR=Factor de muestras de DoF + +option.AO=Oclusión ambiental +value.AO.0=Desactivado +value.AO.1=Activado + +option.AOSTEPS=Pares de muestras de AO + +option.AO_STRENGTH=Intensidad de AO + +option.AA_TYPE=Muestreo temporal +value.AA_TYPE.0=Desactivado +value.AA_TYPE.1=Quitar ruido +value.AA_TYPE.2=TAA +value.AA_TYPE.3=TAA+ + +option.MOTION_BLUR=Desenfoque de movimiento +option.MOTION_BLUR_STRENGTH=Intensidad del desenfoque +option.MOTION_BLUR_SAMPLES=Muestras de desenfoque + +option.VANILLA_WATER=Agua estilo Vanilla + +option.WATER_TEXTURE=Textura de agua +value.WATER_TEXTURE.0=No +value.WATER_TEXTURE.1=Sí + +option.WATER_COLOR_SOURCE=Color del agua +value.WATER_COLOR_SOURCE.0=Esquema del shader +value.WATER_COLOR_SOURCE.1=Resource Pack + +option.REFLECTION=Reflejos +value.REFLECTION.0=Desactivado +value.REFLECTION.1=Activado + +option.REFRACTION=Refracción +value.REFRACTION.0=Desactivado +value.REFRACTION.1=Activado + +option.SSR_TYPE=Tipo de reflejo +value.SSR_TYPE.0=Imagen invertida +value.SSR_TYPE.1=Raymarching + +option.SUN_REFLECTION=Reflejo solar +value.SUN_REFLECTION.0=Desactivado +value.SUN_REFLECTION.1=Activado + +option.CLOUD_REFLECTION=Reflejo de nubes volumétricas + +option.WAVING=Movimiento de plantas +value.WAVING.0=No +value.WAVING.1=Sí + +option.CHROMA_ABER=Aberración cromática +value.CHROMA_ABER.0=No +value.CHROMA_ABER.1=Sí + +option.CHROMA_ABER_STRENGTH=Intensidad de aberración cromática + +option.WATER_ABSORPTION=Índice de absorción del agua + +option.WATER_TURBULENCE=Intensidad de las olas +value.WATER_TURBULENCE.7.0=Muy baja +value.WATER_TURBULENCE.1.75=Baja +value.WATER_TURBULENCE.0.9=Media +value.WATER_TURBULENCE.0.5=Alta + +option.COLOR_SCHEME=Esquema de color +value.COLOR_SCHEME.0=Etéreo +value.COLOR_SCHEME.1=New Shoka +value.COLOR_SCHEME.2=Shoka +value.COLOR_SCHEME.3=Clásico +value.COLOR_SCHEME.4=Captain +value.COLOR_SCHEME.5=Psicodélico +value.COLOR_SCHEME.6=Cacao +value.COLOR_SCHEME.7=Testigo +value.COLOR_SCHEME.99=Personalizado + +option.LIGHT_SUNSET_COLOR_R=Color de luz al atardecer R +option.LIGHT_SUNSET_COLOR_G=Color de luz al atardecer G +option.LIGHT_SUNSET_COLOR_B=Color de luz al atardecer B + +option.LIGHT_DAY_COLOR_R=Color de luz diurna R +option.LIGHT_DAY_COLOR_G=Color de luz diurna G +option.LIGHT_DAY_COLOR_B=Color de luz diurna B + +option.LIGHT_NIGHT_COLOR_R=Color de luz nocturna R +option.LIGHT_NIGHT_COLOR_G=Color de luz nocturna G +option.LIGHT_NIGHT_COLOR_B=Color de luz nocturna B + +option.ZENITH_SUNSET_COLOR_R=Color del cénit al atardecer R +option.ZENITH_SUNSET_COLOR_G=Color del cénit al atardecer G +option.ZENITH_SUNSET_COLOR_B=Color del cénit al atardecer B + +option.ZENITH_DAY_COLOR_R=Color del cénit diurno R +option.ZENITH_DAY_COLOR_G=Color del cénit diurno G +option.ZENITH_DAY_COLOR_B=Color del cénit diurno B + +option.ZENITH_NIGHT_COLOR_R=Color del cénit nocturno R +option.ZENITH_NIGHT_COLOR_G=Color del cénit nocturno G +option.ZENITH_NIGHT_COLOR_B=Color del cénit nocturno B + +option.HORIZON_SUNSET_COLOR_R=Color del horizonte al atardecer R +option.HORIZON_SUNSET_COLOR_G=Color del horizonte al atardecer G +option.HORIZON_SUNSET_COLOR_B=Color del horizonte al atardecer B + +option.HORIZON_DAY_COLOR_R=Color del horizonte diurno R +option.HORIZON_DAY_COLOR_G=Color del horizonte diurno G +option.HORIZON_DAY_COLOR_B=Color del horizonte diurno B + +option.HORIZON_NIGHT_COLOR_R=Color del horizonte nocturno R +option.HORIZON_NIGHT_COLOR_G=Color del horizonte nocturno G +option.HORIZON_NIGHT_COLOR_B=Color del horizonte nocturno B + +option.WATER_COLOR_R=Color del agua R +option.WATER_COLOR_G=Color del agua G +option.WATER_COLOR_B=Color del agua B + +option.NV_COLOR_R=Multiplicador de visión nocturna R +option.NV_COLOR_G=Multiplicador de visión nocturna G +option.NV_COLOR_B=Multiplicador de visión nocturna B + +option.OMNI_TINT_CUSTOM=Matiz personalizado Omni + +option.AVOID_DARK_LEVEL=Brillo en cuevas + +option.NIGHT_BRIGHT=Brillo nocturno + +option.V_CLOUDS=Nubes +value.V_CLOUDS.0=Vanilla +value.V_CLOUDS.1=Volumétricas estáticas +value.V_CLOUDS.2=Volumétricas dinámicas + +option.CLOUD_VOL_STYLE=Estilo de nube volumétrica +value.CLOUD_VOL_STYLE.0=Natural +value.CLOUD_VOL_STYLE.1=Cúbico + +option.CLOUD_SPEED=Velocidad de nubes +value.CLOUD_SPEED.0=Normal +value.CLOUD_SPEED.1=Time lapse 1 +value.CLOUD_SPEED.2=Time lapse 2 + +option.END_CLOUDS=Nubes en El End + +option.CLOUD_STEPS_AVG=Muestras de nubes + +option.BLOOM=Brillo (bloom) + +option.COLOR_BLINDNESS=Daltonismo + +option.COLOR_BLIND_MODE=Tipo de daltonismo +value.COLOR_BLIND_MODE.0=Protanopía +value.COLOR_BLIND_MODE.1=Deuteranopía +value.COLOR_BLIND_MODE.2=Tritanopía + +option.DEBUG_MODE=Modo de depuración + +option.BLOOM_SAMPLES=Pares de muestras para bloom + +option.BLACK_ENTITY_FIX=Arreglo de entidades negras +value.BLACK_ENTITY_FIX.0=Desactivado +value.BLACK_ENTITY_FIX.1=Activado + +option.FOG_ACTIVE=Niebla activada + +option.FOG_ADJUST=Intensidad de la niebla +value.FOG_ADJUST.20.0=Sin niebla +value.FOG_ADJUST.10.0=Ultrabaja +value.FOG_ADJUST.8.0=Muy baja +value.FOG_ADJUST.4.0=Baja +value.FOG_ADJUST.2.0=Media +value.FOG_ADJUST.1.0=Alta + +option.NETHER_FOG_DISTANCE=Distancia de niebla en el Nether +value.NETHER_FOG_DISTANCE.0=Distancia de renderizado +value.NETHER_FOG_DISTANCE.1=Vanilla + +option.BLOCKLIGHT_TEMP=Temperatura de la luz de bloque +value.BLOCKLIGHT_TEMP.0=Más cálida +value.BLOCKLIGHT_TEMP.1=Cálida +value.BLOCKLIGHT_TEMP.2=Amarilla +value.BLOCKLIGHT_TEMP.3=Amarillo pálido +value.BLOCKLIGHT_TEMP.4=Luz blanca + +option.sunPathRotation=Ángulo del sol + +option.USE_BASIC_SH=Shader básico para dimensiones personalizadas + +option.MATERIAL_GLOSS=Brillo del material + +option.DYN_HAND_LIGHT=Luz dinámica falsa + +# Pantallas +screen.ADVANCED_SCREEN=Opciones avanzadas +screen.ADVANCED_SCREEN.comment=Configurar opciones avanzadas + +screen.COMPATIBILITY_SCREEN=Compatibilidad +screen.COMPATIBILITY_SCREEN.comment=Configurar opciones de compatibilidad + +screen.SHADOWS_SCREEN=Sombras +screen.SHADOWS_SCREEN.comment=Configurar opciones de sombras + +option.SHADOW_LOCK=Sombras pixeladas +value.SHADOW_LOCK.0=Deshabilitado +value.SHADOW_LOCK.16=16x16 +value.SHADOW_LOCK.32=32x32 +value.SHADOW_LOCK.64=64x64 +value.SHADOW_LOCK.128=128x128 +value.SHADOW_LOCK.256=256x256 + +screen.DOF_SCREEN=Profundidad de campo +screen.DOF_SCREEN.comment=Configurar opciones de profundidad de campo + +screen.AO_SCREEN=Oclusión ambiental +screen.AO_SCREEN.comment=Configurar oclusión ambiental + +screen.WATER_SCREEN=Agua +screen.WATER_SCREEN.comment=Configurar opciones del agua + +screen.POST_SCREEN=Efectos posteriores +screen.POST_SCREEN.comment=Configurar efectos posteriores + +screen.LIGHT_SCREEN=Luz +screen.LIGHT_SCREEN.comment=Configurar opciones de luz + +screen.CLOUDS_SCREEN=Sol y nubes +screen.CLOUDS_SCREEN.comment=Configurar sol y nubes + +screen.FOG_SCREEN=Niebla +screen.FOG_SCREEN.comment=Configurar opciones de niebla + +screen.MOTION_BLUR_SCREEN=Desenfoque de movimiento +screen.MOTION_BLUR_SCREEN.comment=Configurar desenfoque de movimiento + +screen.ACCESIBILITY_SCREEN=Accesibilidad +screen.ACCESIBILITY_SCREEN.comment=Configurar opciones de accesibilidad + +screen.CUSTOM_COLORS_SCREEN=Colores personalizados +screen.CUSTOM_COLORS_SCREEN.comment=Configurar colores personalizados +screen.CUSTOM_COLORS_DAY=Colores personalizados de día +screen.CUSTOM_COLORS_SUNSET=Colores personalizados de atardecer/amanecer +screen.CUSTOM_COLORS_NIGHT=Colores personalizados de noche +screen.CUSTOM_COLORS_WATER=Color personalizado del agua +screen.CUSTOM_COLORS_NV=Color personalizado para visión nocturna diff --git a/shaders/lang/es_ES.lang b/shaders/lang/es_ES.lang new file mode 100644 index 00000000..60a42e86 --- /dev/null +++ b/shaders/lang/es_ES.lang @@ -0,0 +1,299 @@ +# Perfiles +############################ +profile.no_effects=Sin efectos +profile.shadowless_low=Sin sombras - Bajo +profile.shadowless_medium=Sin sombras - Medio +profile.shadowless_high=Sin sombras - Alto +profile.low=Bajo +profile.medium=Medio +profile.high=Alto +profile.extremeplus=Alto (DoF) + +profile.comment=Los perfiles "sin sombras" están pensados para máquinas de bajo rendimiento, sin considerar las sombras. Los perfiles tradicionales van agregando sombras de mejor calidad y efectos más avanzados y pesados. Probá las opciones disponibles y encontrá la combinación que mejor te funcione. + +# Acerca de +############################# +option.ACERCADE=MakeUp +option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. +value.ACERCADE.0=v.9.5b + +# Opciones +############################# +option.SHADOW_CASTING=Sombras + +option.SHADOW_DISTANCE_SLIDER=Distancia de sombra +value.SHADOW_DISTANCE_SLIDER.0=Corta +value.SHADOW_DISTANCE_SLIDER.1=Media +value.SHADOW_DISTANCE_SLIDER.2=Larga + +option.SHADOW_QTY_SLIDER=Calidad de sombras +value.SHADOW_QTY_SLIDER.0=Ninguna +value.SHADOW_QTY_SLIDER.1=Baja +value.SHADOW_QTY_SLIDER.2=Media +value.SHADOW_QTY_SLIDER.3=Alta + +option.REFLECTION_SLIDER=Reflejo +value.REFLECTION_SLIDER.0=Desactivado +value.REFLECTION_SLIDER.1=Imagen invertida +value.REFLECTION_SLIDER.2=Raymarching + +option.SHADOW_TYPE=Tipo de sombra +value.SHADOW_TYPE.0=Simple +value.SHADOW_TYPE.1=Filtrada + +option.SHADOW_BLUR=Intensidad del desenfoque de sombra + +option.COLORED_SHADOW=Sombras coloreadas + +option.VOL_LIGHT=Rayos de luz +value.VOL_LIGHT.0=Desactivado +value.VOL_LIGHT.1=Basado en profundidad +value.VOL_LIGHT.2=Volumétrico + +option.DOF=Profundidad de campo + +option.DOF_STRENGTH=Intensidad de DoF + +option.DOF_SAMPLES_FACTOR=Factor de muestras de DoF + +option.AO=Oclusión ambiental +value.AO.0=Desactivado +value.AO.1=Activado + +option.AOSTEPS=Pares de muestras de AO + +option.AO_STRENGTH=Intensidad de AO + +option.AA_TYPE=Muestreo temporal +value.AA_TYPE.0=Desactivado +value.AA_TYPE.1=Quitar ruido +value.AA_TYPE.2=TAA +value.AA_TYPE.3=TAA+ + +option.MOTION_BLUR=Desenfoque de movimiento +option.MOTION_BLUR_STRENGTH=Intensidad del desenfoque +option.MOTION_BLUR_SAMPLES=Muestras de desenfoque + +option.VANILLA_WATER=Agua estilo Vanilla + +option.WATER_TEXTURE=Textura de agua +value.WATER_TEXTURE.0=No +value.WATER_TEXTURE.1=Sí + +option.WATER_COLOR_SOURCE=Color del agua +value.WATER_COLOR_SOURCE.0=Esquema del shader +value.WATER_COLOR_SOURCE.1=Resource Pack + +option.REFLECTION=Reflejos +value.REFLECTION.0=Desactivado +value.REFLECTION.1=Activado + +option.REFRACTION=Refracción +value.REFRACTION.0=Desactivado +value.REFRACTION.1=Activado + +option.SSR_TYPE=Tipo de reflejo +value.SSR_TYPE.0=Imagen invertida +value.SSR_TYPE.1=Raymarching + +option.SUN_REFLECTION=Reflejo solar +value.SUN_REFLECTION.0=Desactivado +value.SUN_REFLECTION.1=Activado + +option.CLOUD_REFLECTION=Reflejo de nubes volumétricas + +option.WAVING=Movimiento de plantas +value.WAVING.0=No +value.WAVING.1=Sí + +option.CHROMA_ABER=Aberración cromática +value.CHROMA_ABER.0=No +value.CHROMA_ABER.1=Sí + +option.CHROMA_ABER_STRENGTH=Intensidad de aberración cromática + +option.WATER_ABSORPTION=Índice de absorción del agua + +option.WATER_TURBULENCE=Intensidad de las olas +value.WATER_TURBULENCE.7.0=Muy baja +value.WATER_TURBULENCE.1.75=Baja +value.WATER_TURBULENCE.0.9=Media +value.WATER_TURBULENCE.0.5=Alta + +option.COLOR_SCHEME=Esquema de color +value.COLOR_SCHEME.0=Etéreo +value.COLOR_SCHEME.1=New Shoka +value.COLOR_SCHEME.2=Shoka +value.COLOR_SCHEME.3=Clásico +value.COLOR_SCHEME.4=Captain +value.COLOR_SCHEME.5=Psicodélico +value.COLOR_SCHEME.6=Cacao +value.COLOR_SCHEME.7=Testigo +value.COLOR_SCHEME.99=Personalizado + +option.LIGHT_SUNSET_COLOR_R=Color de luz al atardecer R +option.LIGHT_SUNSET_COLOR_G=Color de luz al atardecer G +option.LIGHT_SUNSET_COLOR_B=Color de luz al atardecer B + +option.LIGHT_DAY_COLOR_R=Color de luz diurna R +option.LIGHT_DAY_COLOR_G=Color de luz diurna G +option.LIGHT_DAY_COLOR_B=Color de luz diurna B + +option.LIGHT_NIGHT_COLOR_R=Color de luz nocturna R +option.LIGHT_NIGHT_COLOR_G=Color de luz nocturna G +option.LIGHT_NIGHT_COLOR_B=Color de luz nocturna B + +option.ZENITH_SUNSET_COLOR_R=Color del cénit al atardecer R +option.ZENITH_SUNSET_COLOR_G=Color del cénit al atardecer G +option.ZENITH_SUNSET_COLOR_B=Color del cénit al atardecer B + +option.ZENITH_DAY_COLOR_R=Color del cénit diurno R +option.ZENITH_DAY_COLOR_G=Color del cénit diurno G +option.ZENITH_DAY_COLOR_B=Color del cénit diurno B + +option.ZENITH_NIGHT_COLOR_R=Color del cénit nocturno R +option.ZENITH_NIGHT_COLOR_G=Color del cénit nocturno G +option.ZENITH_NIGHT_COLOR_B=Color del cénit nocturno B + +option.HORIZON_SUNSET_COLOR_R=Color del horizonte al atardecer R +option.HORIZON_SUNSET_COLOR_G=Color del horizonte al atardecer G +option.HORIZON_SUNSET_COLOR_B=Color del horizonte al atardecer B + +option.HORIZON_DAY_COLOR_R=Color del horizonte diurno R +option.HORIZON_DAY_COLOR_G=Color del horizonte diurno G +option.HORIZON_DAY_COLOR_B=Color del horizonte diurno B + +option.HORIZON_NIGHT_COLOR_R=Color del horizonte nocturno R +option.HORIZON_NIGHT_COLOR_G=Color del horizonte nocturno G +option.HORIZON_NIGHT_COLOR_B=Color del horizonte nocturno B + +option.WATER_COLOR_R=Color del agua R +option.WATER_COLOR_G=Color del agua G +option.WATER_COLOR_B=Color del agua B + +option.NV_COLOR_R=Multiplicador de visión nocturna R +option.NV_COLOR_G=Multiplicador de visión nocturna G +option.NV_COLOR_B=Multiplicador de visión nocturna B + +option.OMNI_TINT_CUSTOM=Matiz personalizado Omni + +option.AVOID_DARK_LEVEL=Brillo en cuevas + +option.NIGHT_BRIGHT=Brillo nocturno + +option.V_CLOUDS=Nubes +value.V_CLOUDS.0=Vanilla +value.V_CLOUDS.1=Volumétricas estáticas +value.V_CLOUDS.2=Volumétricas dinámicas + +option.CLOUD_VOL_STYLE=Estilo de nube volumétrica +value.CLOUD_VOL_STYLE.0=Natural +value.CLOUD_VOL_STYLE.1=Cúbico + +option.CLOUD_SPEED=Velocidad de nubes +value.CLOUD_SPEED.0=Normal +value.CLOUD_SPEED.1=Time lapse 1 +value.CLOUD_SPEED.2=Time lapse 2 + +option.END_CLOUDS=Nubes en El End + +option.CLOUD_STEPS_AVG=Muestras de nubes + +option.BLOOM=Brillo (bloom) + +option.COLOR_BLINDNESS=Daltonismo + +option.COLOR_BLIND_MODE=Tipo de daltonismo +value.COLOR_BLIND_MODE.0=Protanopía +value.COLOR_BLIND_MODE.1=Deuteranopía +value.COLOR_BLIND_MODE.2=Tritanopía + +option.DEBUG_MODE=Modo de depuración + +option.BLOOM_SAMPLES=Pares de muestras para bloom + +option.BLACK_ENTITY_FIX=Arreglo de entidades negras +value.BLACK_ENTITY_FIX.0=Desactivado +value.BLACK_ENTITY_FIX.1=Activado + +option.FOG_ACTIVE=Niebla activada + +option.FOG_ADJUST=Intensidad de la niebla +value.FOG_ADJUST.20.0=Sin niebla +value.FOG_ADJUST.10.0=Ultrabaja +value.FOG_ADJUST.8.0=Muy baja +value.FOG_ADJUST.4.0=Baja +value.FOG_ADJUST.2.0=Media +value.FOG_ADJUST.1.0=Alta + +option.NETHER_FOG_DISTANCE=Distancia de niebla en el Nether +value.NETHER_FOG_DISTANCE.0=Distancia de renderizado +value.NETHER_FOG_DISTANCE.1=Vanilla + +option.BLOCKLIGHT_TEMP=Temperatura de la luz de bloque +value.BLOCKLIGHT_TEMP.0=Más cálida +value.BLOCKLIGHT_TEMP.1=Cálida +value.BLOCKLIGHT_TEMP.2=Amarilla +value.BLOCKLIGHT_TEMP.3=Amarillo pálido +value.BLOCKLIGHT_TEMP.4=Luz blanca + +option.sunPathRotation=Ángulo del sol + +option.USE_BASIC_SH=Shader básico para dimensiones personalizadas + +option.MATERIAL_GLOSS=Brillo del material + +option.DYN_HAND_LIGHT=Luz dinámica falsa + +# Pantallas +screen.ADVANCED_SCREEN=Opciones avanzadas +screen.ADVANCED_SCREEN.comment=Configurar opciones avanzadas + +screen.COMPATIBILITY_SCREEN=Compatibilidad +screen.COMPATIBILITY_SCREEN.comment=Configurar opciones de compatibilidad + +screen.SHADOWS_SCREEN=Sombras +screen.SHADOWS_SCREEN.comment=Configurar opciones de sombras + +option.SHADOW_LOCK=Sombras pixeladas +value.SHADOW_LOCK.0=Deshabilitado +value.SHADOW_LOCK.16=16x16 +value.SHADOW_LOCK.32=32x32 +value.SHADOW_LOCK.64=64x64 +value.SHADOW_LOCK.128=128x128 +value.SHADOW_LOCK.256=256x256 + +screen.DOF_SCREEN=Profundidad de campo +screen.DOF_SCREEN.comment=Configurar opciones de profundidad de campo + +screen.AO_SCREEN=Oclusión ambiental +screen.AO_SCREEN.comment=Configurar oclusión ambiental + +screen.WATER_SCREEN=Agua +screen.WATER_SCREEN.comment=Configurar opciones del agua + +screen.POST_SCREEN=Efectos posteriores +screen.POST_SCREEN.comment=Configurar efectos posteriores + +screen.LIGHT_SCREEN=Luz +screen.LIGHT_SCREEN.comment=Configurar opciones de luz + +screen.CLOUDS_SCREEN=Sol y nubes +screen.CLOUDS_SCREEN.comment=Configurar sol y nubes + +screen.FOG_SCREEN=Niebla +screen.FOG_SCREEN.comment=Configurar opciones de niebla + +screen.MOTION_BLUR_SCREEN=Desenfoque de movimiento +screen.MOTION_BLUR_SCREEN.comment=Configurar desenfoque de movimiento + +screen.ACCESIBILITY_SCREEN=Accesibilidad +screen.ACCESIBILITY_SCREEN.comment=Configurar opciones de accesibilidad + +screen.CUSTOM_COLORS_SCREEN=Colores personalizados +screen.CUSTOM_COLORS_SCREEN.comment=Configurar colores personalizados +screen.CUSTOM_COLORS_DAY=Colores personalizados de día +screen.CUSTOM_COLORS_SUNSET=Colores personalizados de atardecer/amanecer +screen.CUSTOM_COLORS_NIGHT=Colores personalizados de noche +screen.CUSTOM_COLORS_WATER=Color personalizado del agua +screen.CUSTOM_COLORS_NV=Color personalizado para visión nocturna diff --git a/shaders/lang/es_MX.lang b/shaders/lang/es_MX.lang new file mode 100644 index 00000000..60a42e86 --- /dev/null +++ b/shaders/lang/es_MX.lang @@ -0,0 +1,299 @@ +# Perfiles +############################ +profile.no_effects=Sin efectos +profile.shadowless_low=Sin sombras - Bajo +profile.shadowless_medium=Sin sombras - Medio +profile.shadowless_high=Sin sombras - Alto +profile.low=Bajo +profile.medium=Medio +profile.high=Alto +profile.extremeplus=Alto (DoF) + +profile.comment=Los perfiles "sin sombras" están pensados para máquinas de bajo rendimiento, sin considerar las sombras. Los perfiles tradicionales van agregando sombras de mejor calidad y efectos más avanzados y pesados. Probá las opciones disponibles y encontrá la combinación que mejor te funcione. + +# Acerca de +############################# +option.ACERCADE=MakeUp +option.ACERCADE.comment=¡Gracias por usar este shader! :). Configurá los controles de calidad nativos de Optifine en valores normales o predeterminados para mejor calidad. +value.ACERCADE.0=v.9.5b + +# Opciones +############################# +option.SHADOW_CASTING=Sombras + +option.SHADOW_DISTANCE_SLIDER=Distancia de sombra +value.SHADOW_DISTANCE_SLIDER.0=Corta +value.SHADOW_DISTANCE_SLIDER.1=Media +value.SHADOW_DISTANCE_SLIDER.2=Larga + +option.SHADOW_QTY_SLIDER=Calidad de sombras +value.SHADOW_QTY_SLIDER.0=Ninguna +value.SHADOW_QTY_SLIDER.1=Baja +value.SHADOW_QTY_SLIDER.2=Media +value.SHADOW_QTY_SLIDER.3=Alta + +option.REFLECTION_SLIDER=Reflejo +value.REFLECTION_SLIDER.0=Desactivado +value.REFLECTION_SLIDER.1=Imagen invertida +value.REFLECTION_SLIDER.2=Raymarching + +option.SHADOW_TYPE=Tipo de sombra +value.SHADOW_TYPE.0=Simple +value.SHADOW_TYPE.1=Filtrada + +option.SHADOW_BLUR=Intensidad del desenfoque de sombra + +option.COLORED_SHADOW=Sombras coloreadas + +option.VOL_LIGHT=Rayos de luz +value.VOL_LIGHT.0=Desactivado +value.VOL_LIGHT.1=Basado en profundidad +value.VOL_LIGHT.2=Volumétrico + +option.DOF=Profundidad de campo + +option.DOF_STRENGTH=Intensidad de DoF + +option.DOF_SAMPLES_FACTOR=Factor de muestras de DoF + +option.AO=Oclusión ambiental +value.AO.0=Desactivado +value.AO.1=Activado + +option.AOSTEPS=Pares de muestras de AO + +option.AO_STRENGTH=Intensidad de AO + +option.AA_TYPE=Muestreo temporal +value.AA_TYPE.0=Desactivado +value.AA_TYPE.1=Quitar ruido +value.AA_TYPE.2=TAA +value.AA_TYPE.3=TAA+ + +option.MOTION_BLUR=Desenfoque de movimiento +option.MOTION_BLUR_STRENGTH=Intensidad del desenfoque +option.MOTION_BLUR_SAMPLES=Muestras de desenfoque + +option.VANILLA_WATER=Agua estilo Vanilla + +option.WATER_TEXTURE=Textura de agua +value.WATER_TEXTURE.0=No +value.WATER_TEXTURE.1=Sí + +option.WATER_COLOR_SOURCE=Color del agua +value.WATER_COLOR_SOURCE.0=Esquema del shader +value.WATER_COLOR_SOURCE.1=Resource Pack + +option.REFLECTION=Reflejos +value.REFLECTION.0=Desactivado +value.REFLECTION.1=Activado + +option.REFRACTION=Refracción +value.REFRACTION.0=Desactivado +value.REFRACTION.1=Activado + +option.SSR_TYPE=Tipo de reflejo +value.SSR_TYPE.0=Imagen invertida +value.SSR_TYPE.1=Raymarching + +option.SUN_REFLECTION=Reflejo solar +value.SUN_REFLECTION.0=Desactivado +value.SUN_REFLECTION.1=Activado + +option.CLOUD_REFLECTION=Reflejo de nubes volumétricas + +option.WAVING=Movimiento de plantas +value.WAVING.0=No +value.WAVING.1=Sí + +option.CHROMA_ABER=Aberración cromática +value.CHROMA_ABER.0=No +value.CHROMA_ABER.1=Sí + +option.CHROMA_ABER_STRENGTH=Intensidad de aberración cromática + +option.WATER_ABSORPTION=Índice de absorción del agua + +option.WATER_TURBULENCE=Intensidad de las olas +value.WATER_TURBULENCE.7.0=Muy baja +value.WATER_TURBULENCE.1.75=Baja +value.WATER_TURBULENCE.0.9=Media +value.WATER_TURBULENCE.0.5=Alta + +option.COLOR_SCHEME=Esquema de color +value.COLOR_SCHEME.0=Etéreo +value.COLOR_SCHEME.1=New Shoka +value.COLOR_SCHEME.2=Shoka +value.COLOR_SCHEME.3=Clásico +value.COLOR_SCHEME.4=Captain +value.COLOR_SCHEME.5=Psicodélico +value.COLOR_SCHEME.6=Cacao +value.COLOR_SCHEME.7=Testigo +value.COLOR_SCHEME.99=Personalizado + +option.LIGHT_SUNSET_COLOR_R=Color de luz al atardecer R +option.LIGHT_SUNSET_COLOR_G=Color de luz al atardecer G +option.LIGHT_SUNSET_COLOR_B=Color de luz al atardecer B + +option.LIGHT_DAY_COLOR_R=Color de luz diurna R +option.LIGHT_DAY_COLOR_G=Color de luz diurna G +option.LIGHT_DAY_COLOR_B=Color de luz diurna B + +option.LIGHT_NIGHT_COLOR_R=Color de luz nocturna R +option.LIGHT_NIGHT_COLOR_G=Color de luz nocturna G +option.LIGHT_NIGHT_COLOR_B=Color de luz nocturna B + +option.ZENITH_SUNSET_COLOR_R=Color del cénit al atardecer R +option.ZENITH_SUNSET_COLOR_G=Color del cénit al atardecer G +option.ZENITH_SUNSET_COLOR_B=Color del cénit al atardecer B + +option.ZENITH_DAY_COLOR_R=Color del cénit diurno R +option.ZENITH_DAY_COLOR_G=Color del cénit diurno G +option.ZENITH_DAY_COLOR_B=Color del cénit diurno B + +option.ZENITH_NIGHT_COLOR_R=Color del cénit nocturno R +option.ZENITH_NIGHT_COLOR_G=Color del cénit nocturno G +option.ZENITH_NIGHT_COLOR_B=Color del cénit nocturno B + +option.HORIZON_SUNSET_COLOR_R=Color del horizonte al atardecer R +option.HORIZON_SUNSET_COLOR_G=Color del horizonte al atardecer G +option.HORIZON_SUNSET_COLOR_B=Color del horizonte al atardecer B + +option.HORIZON_DAY_COLOR_R=Color del horizonte diurno R +option.HORIZON_DAY_COLOR_G=Color del horizonte diurno G +option.HORIZON_DAY_COLOR_B=Color del horizonte diurno B + +option.HORIZON_NIGHT_COLOR_R=Color del horizonte nocturno R +option.HORIZON_NIGHT_COLOR_G=Color del horizonte nocturno G +option.HORIZON_NIGHT_COLOR_B=Color del horizonte nocturno B + +option.WATER_COLOR_R=Color del agua R +option.WATER_COLOR_G=Color del agua G +option.WATER_COLOR_B=Color del agua B + +option.NV_COLOR_R=Multiplicador de visión nocturna R +option.NV_COLOR_G=Multiplicador de visión nocturna G +option.NV_COLOR_B=Multiplicador de visión nocturna B + +option.OMNI_TINT_CUSTOM=Matiz personalizado Omni + +option.AVOID_DARK_LEVEL=Brillo en cuevas + +option.NIGHT_BRIGHT=Brillo nocturno + +option.V_CLOUDS=Nubes +value.V_CLOUDS.0=Vanilla +value.V_CLOUDS.1=Volumétricas estáticas +value.V_CLOUDS.2=Volumétricas dinámicas + +option.CLOUD_VOL_STYLE=Estilo de nube volumétrica +value.CLOUD_VOL_STYLE.0=Natural +value.CLOUD_VOL_STYLE.1=Cúbico + +option.CLOUD_SPEED=Velocidad de nubes +value.CLOUD_SPEED.0=Normal +value.CLOUD_SPEED.1=Time lapse 1 +value.CLOUD_SPEED.2=Time lapse 2 + +option.END_CLOUDS=Nubes en El End + +option.CLOUD_STEPS_AVG=Muestras de nubes + +option.BLOOM=Brillo (bloom) + +option.COLOR_BLINDNESS=Daltonismo + +option.COLOR_BLIND_MODE=Tipo de daltonismo +value.COLOR_BLIND_MODE.0=Protanopía +value.COLOR_BLIND_MODE.1=Deuteranopía +value.COLOR_BLIND_MODE.2=Tritanopía + +option.DEBUG_MODE=Modo de depuración + +option.BLOOM_SAMPLES=Pares de muestras para bloom + +option.BLACK_ENTITY_FIX=Arreglo de entidades negras +value.BLACK_ENTITY_FIX.0=Desactivado +value.BLACK_ENTITY_FIX.1=Activado + +option.FOG_ACTIVE=Niebla activada + +option.FOG_ADJUST=Intensidad de la niebla +value.FOG_ADJUST.20.0=Sin niebla +value.FOG_ADJUST.10.0=Ultrabaja +value.FOG_ADJUST.8.0=Muy baja +value.FOG_ADJUST.4.0=Baja +value.FOG_ADJUST.2.0=Media +value.FOG_ADJUST.1.0=Alta + +option.NETHER_FOG_DISTANCE=Distancia de niebla en el Nether +value.NETHER_FOG_DISTANCE.0=Distancia de renderizado +value.NETHER_FOG_DISTANCE.1=Vanilla + +option.BLOCKLIGHT_TEMP=Temperatura de la luz de bloque +value.BLOCKLIGHT_TEMP.0=Más cálida +value.BLOCKLIGHT_TEMP.1=Cálida +value.BLOCKLIGHT_TEMP.2=Amarilla +value.BLOCKLIGHT_TEMP.3=Amarillo pálido +value.BLOCKLIGHT_TEMP.4=Luz blanca + +option.sunPathRotation=Ángulo del sol + +option.USE_BASIC_SH=Shader básico para dimensiones personalizadas + +option.MATERIAL_GLOSS=Brillo del material + +option.DYN_HAND_LIGHT=Luz dinámica falsa + +# Pantallas +screen.ADVANCED_SCREEN=Opciones avanzadas +screen.ADVANCED_SCREEN.comment=Configurar opciones avanzadas + +screen.COMPATIBILITY_SCREEN=Compatibilidad +screen.COMPATIBILITY_SCREEN.comment=Configurar opciones de compatibilidad + +screen.SHADOWS_SCREEN=Sombras +screen.SHADOWS_SCREEN.comment=Configurar opciones de sombras + +option.SHADOW_LOCK=Sombras pixeladas +value.SHADOW_LOCK.0=Deshabilitado +value.SHADOW_LOCK.16=16x16 +value.SHADOW_LOCK.32=32x32 +value.SHADOW_LOCK.64=64x64 +value.SHADOW_LOCK.128=128x128 +value.SHADOW_LOCK.256=256x256 + +screen.DOF_SCREEN=Profundidad de campo +screen.DOF_SCREEN.comment=Configurar opciones de profundidad de campo + +screen.AO_SCREEN=Oclusión ambiental +screen.AO_SCREEN.comment=Configurar oclusión ambiental + +screen.WATER_SCREEN=Agua +screen.WATER_SCREEN.comment=Configurar opciones del agua + +screen.POST_SCREEN=Efectos posteriores +screen.POST_SCREEN.comment=Configurar efectos posteriores + +screen.LIGHT_SCREEN=Luz +screen.LIGHT_SCREEN.comment=Configurar opciones de luz + +screen.CLOUDS_SCREEN=Sol y nubes +screen.CLOUDS_SCREEN.comment=Configurar sol y nubes + +screen.FOG_SCREEN=Niebla +screen.FOG_SCREEN.comment=Configurar opciones de niebla + +screen.MOTION_BLUR_SCREEN=Desenfoque de movimiento +screen.MOTION_BLUR_SCREEN.comment=Configurar desenfoque de movimiento + +screen.ACCESIBILITY_SCREEN=Accesibilidad +screen.ACCESIBILITY_SCREEN.comment=Configurar opciones de accesibilidad + +screen.CUSTOM_COLORS_SCREEN=Colores personalizados +screen.CUSTOM_COLORS_SCREEN.comment=Configurar colores personalizados +screen.CUSTOM_COLORS_DAY=Colores personalizados de día +screen.CUSTOM_COLORS_SUNSET=Colores personalizados de atardecer/amanecer +screen.CUSTOM_COLORS_NIGHT=Colores personalizados de noche +screen.CUSTOM_COLORS_WATER=Color personalizado del agua +screen.CUSTOM_COLORS_NV=Color personalizado para visión nocturna diff --git a/shaders/lang/ko_KR.lang b/shaders/lang/ko_KR.lang new file mode 100644 index 00000000..0b164ac4 --- /dev/null +++ b/shaders/lang/ko_KR.lang @@ -0,0 +1,298 @@ +#프로필 +############################ +profile.no_effects=효과 없음 +profile.shadowless_low=그림자 없음 낮음 +profile.shadowless_medium=그림자 없음 중간 +profile.shadowless_high=그림자 없음 높음 +profile.low=낮음 +profile.medium=중간 +profile.high=높음 +profile.extremeplus=높음 (깊이 감지) + +profile.comment="그림자 없음" 프로필은 저성능 기계를 위해 설계되었으며, 그림자를 무시합니다. 전통적인 프로필은 천천히 더 높은 품질의 그림자와 더 고급스러운 무거운 효과를 추가합니다. 사용 가능한 옵션을 실험해보고 가장 적합한 조합을 찾으십시오. + +#정보 +############################# +option.ACERCADE=MakeUp +option.ACERCADE.comment=이 셰이더를 사용해주셔서 감사합니다! :) 더 나은 품질을 위해 Optifine 기본 품질 컨트롤을 보통 또는 기본 값으로 설정하세요. +value.ACERCADE.0=v.9.5b + +#옵션 +############################# +option.SHADOW_CASTING=그림자 생성 + +option.SHADOW_DISTANCE_SLIDER=그림자 거리 +value.SHADOW_DISTANCE_SLIDER.0=짧음 +value.SHADOW_DISTANCE_SLIDER.1=중간 +value.SHADOW_DISTANCE_SLIDER.2=김 + +option.SHADOW_QTY_SLIDER=그림자 품질 +value.SHADOW_QTY_SLIDER.0=없음 +value.SHADOW_QTY_SLIDER.1=낮음 +value.SHADOW_QTY_SLIDER.2=중간 +value.SHADOW_QTY_SLIDER.3=높음 + +option.REFLECTION_SLIDER=반사 +value.REFLECTION_SLIDER.0=끔 +value.REFLECTION_SLIDER.1=반전 이미지 +value.REFLECTION_SLIDER.2=Raymarching + +option.SHADOW_TYPE=그림자 유형 +value.SHADOW_TYPE.0=단순 +value.SHADOW_TYPE.1=필터 적용 + +option.SHADOW_BLUR=그림자 블러 강도 + +option.COLORED_SHADOW=컬러 그림자 + +option.VOL_LIGHT=빛 기둥 +value.VOL_LIGHT.0=비활성화 +value.VOL_LIGHT.1=깊이 기반 +value.VOL_LIGHT.2=부피 효과 + +option.DOF=깊이 감지 + +option.DOF_STRENGTH=깊이 감지 강도 + +option.DOF_SAMPLES_FACTOR=깊이 감지 샘플 수 + +option.AO=환경 폐색 +value.AO.0=끔 +value.AO.1=켬 + +option.AOSTEPS=환경 폐색 샘플 쌍 + +option.AO_STRENGTH=환경 폐색 강도 + +option.AA_TYPE=시간적 샘플링 +value.AA_TYPE.0=끔 +value.AA_TYPE.1=노이즈 제거 +value.AA_TYPE.2=TAA +value.AA_TYPE.3=TAA+ + +option.MOTION_BLUR=모션 블러 +option.MOTION_BLUR_STRENGTH=모션 블러 강도 +option.MOTION_BLUR_SAMPLES=모션 블러 샘플 수 + +option.VANILLA_WATER=바닐라 같은 물 + +option.WATER_TEXTURE=물 텍스처 +value.WATER_TEXTURE.0=아니요 +value.WATER_TEXTURE.1=예 + +option.WATER_COLOR_SOURCE=물 색상 +value.WATER_COLOR_SOURCE.0=셰이더 방식 +value.WATER_COLOR_SOURCE.1=리소스 팩 + +option.REFLECTION=반사 +value.REFLECTION.0=끔 +value.REFLECTION.1=켬 + +option.REFRACTION=굴절 +value.REFRACTION.0=끔 +value.REFRACTION.1=켬 + +option.SSR_TYPE=반사 유형 +value.SSR_TYPE.0=반전 이미지 +value.SSR_TYPE.1=Raymarching + +option.SUN_REFLECTION=태양 반사 +value.SUN_REFLECTION.0=끔 +value.SUN_REFLECTION.1=켬 + +option.CLOUD_REFLECTION=부피 구름 반사 + +option.WAVING=흔들리는 식물 +value.WAVING.0=아니요 +value.WAVING.1=예 + +option.CHROMA_ABER=색수차 +value.CHROMA_ABER.0=아니요 +value.CHROMA_ABER.1=예 + +option.CHROMA_ABER_STRENGTH=색수차 강도 + +option.WATER_ABSORPTION=물 흡수 지수 + +option.WATER_TURBULENCE=파도 강도 +value.WATER_TURBULENCE.7.0=매우 낮음 +value.WATER_TURBULENCE.1.75=낮음 +value.WATER_TURBULENCE.0.9=중간 +value.WATER_TURBULENCE.0.5=높음 + +option.COLOR_SCHEME=색상 체계 +value.COLOR_SCHEME.0=에테르 +value.COLOR_SCHEME.1=새로운 쇼카 +value.COLOR_SCHEME.2=쇼카 +value.COLOR_SCHEME.3=레거시 +value.COLOR_SCHEME.4=캡틴 +value.COLOR_SCHEME.5=환각적 +value.COLOR_SCHEME.6=코코아 +value.COLOR_SCHEME.99=사용자 지정 + +option.LIGHT_SUNSET_COLOR_R=일몰 빛 R +option.LIGHT_SUNSET_COLOR_G=일몰 빛 G +option.LIGHT_SUNSET_COLOR_B=일몰 빛 B + +option.LIGHT_DAY_COLOR_R=낮 빛 R +option.LIGHT_DAY_COLOR_G=낮 빛 G +option.LIGHT_DAY_COLOR_B=낮 빛 B + +option.LIGHT_NIGHT_COLOR_R=밤 빛 R +option.LIGHT_NIGHT_COLOR_G=밤 빛 G +option.LIGHT_NIGHT_COLOR_B=밤 빛 B + +option.ZENITH_SUNSET_COLOR_R=정점 일몰 R +option.ZENITH_SUNSET_COLOR_G=정점 일몰 G +option.ZENITH_SUNSET_COLOR_B=정점 일몰 B + +option.ZENITH_DAY_COLOR_R=정점 낮 R +option.ZENITH_DAY_COLOR_G=정점 낮 G +option.ZENITH_DAY_COLOR_B=정점 낮 B + +option.ZENITH_NIGHT_COLOR_R=정점 밤 R +option.ZENITH_NIGHT_COLOR_G=정점 밤 G +option.ZENITH_NIGHT_COLOR_B=정점 밤 B + +option.HORIZON_SUNSET_COLOR_R=지평선 일몰 R +option.HORIZON_SUNSET_COLOR_G=지평선 일몰 G +option.HORIZON_SUNSET_COLOR_B=지평선 일몰 B + +option.HORIZON_DAY_COLOR_R=지평선 낮 R +option.HORIZON_DAY_COLOR_G=지평선 낮 G +option.HORIZON_DAY_COLOR_B=지평선 낮 B + +option.HORIZON_NIGHT_COLOR_R=지평선 밤 R +option.HORIZON_NIGHT_COLOR_G=지평선 밤 G +option.HORIZON_NIGHT_COLOR_B=지평선 밤 B + +option.WATER_COLOR_R=물 R +option.WATER_COLOR_G=물 G +option.WATER_COLOR_B=물 B + +option.NV_COLOR_R=야간 투시 R 배수 +option.NV_COLOR_G=야간 투시 G 배수 +option.NV_COLOR_B=야간 투시 B 배수 + +option.OMNI_TINT_CUSTOM=Omni 색조 + +option.AVOID_DARK_LEVEL=동굴 밝기 + +option.NIGHT_BRIGHT=밤 밝기 + +option.V_CLOUDS=구름 +value.V_CLOUDS.0=바닐라 +value.V_CLOUDS.1=부피 정적 +value.V_CLOUDS.2=부피 동적 + +option.CLOUD_VOL_STYLE=부피 구름 스타일 +value.CLOUD_VOL_STYLE.0=자연스러운 +value.CLOUD_VOL_STYLE.1=박스형 + +option.CLOUD_SPEED=구름 속도 +value.CLOUD_SPEED.0=보통 +value.CLOUD_SPEED.1=타임랩스 1 +value.CLOUD_SPEED.2=타임랩스 2 + +option.END_CLOUDS=엔드의 구름 + +option.CLOUD_STEPS_AVG=구름 샘플 수 + +option.BLOOM=블룸 + +option.COLOR_BLINDNESS=색맹 + +option.COLOR_BLIND_MODE=색맹 유형 +value.COLOR_BLIND_MODE.0=적색맥 +value.COLOR_BLIND_MODE.1=녹색맹 +value.COLOR_BLIND_MODE.2=청색맹 + +option.DEBUG_MODE=디버그 모드 + +option.BLOOM_SAMPLES=블룸 샘플 쌍 + +option.BLACK_ENTITY_FIX=검은 개체 버그 수정 +value.BLACK_ENTITY_FIX.0=끔 +value.BLACK_ENTITY_FIX.1=켬 + +option.FOG_ACTIVE=안개 활성화 + +option.FOG_ADJUST=안개 강도 +value.FOG_ADJUST.20.0=안개 없음 +value.FOG_ADJUST.10.0=극저 +value.FOG_ADJUST.8.0=매우 낮음 +value.FOG_ADJUST.4.0=낮음 +value.FOG_ADJUST.2.0=중간 +value.FOG_ADJUST.1.0=높음 + +option.NETHER_FOG_DISTANCE=네더 안개 거리 +value.NETHER_FOG_DISTANCE.0=렌더 거리 +value.NETHER_FOG_DISTANCE.1=바닐라 + +option.BLOCKLIGHT_TEMP=블록 조명 온도 +value.BLOCKLIGHT_TEMP.0=더 따뜻함 +value.BLOCKLIGHT_TEMP.1=따뜻함 +value.BLOCKLIGHT_TEMP.2=노란색 +value.BLOCKLIGHT_TEMP.3=옅은 노란색 +value.BLOCKLIGHT_TEMP.4=흰색 빛 + +option.sunPathRotation=태양 각도 + +option.USE_BASIC_SH=커스텀 차원 기본 셰이더 사용 + +option.MATERIAL_GLOSS=재료 광택 + +option.DYN_HAND_LIGHT=가짜 동적 빛 + +#화면 +screen.ADVANCED_SCREEN=고급 옵션 +screen.ADVANCED_SCREEN.comment=고급 옵션 설정 + +screen.COMPATIBILITY_SCREEN=호환성 +screen.COMPATIBILITY_SCREEN.comment=호환성 옵션 설정 + +screen.SHADOWS_SCREEN=그림자 +screen.SHADOWS_SCREEN.comment=그림자 옵션 설정 + +option.SHADOW_LOCK=Pixel locked shadows +value.SHADOW_LOCK.0=Disabled +value.SHADOW_LOCK.16=16x16 +value.SHADOW_LOCK.32=32x32 +value.SHADOW_LOCK.64=64x64 +value.SHADOW_LOCK.128=128x128 +value.SHADOW_LOCK.256=256x256 + +screen.DOF_SCREEN=깊이 감지 +screen.DOF_SCREEN.comment=깊이 감지 옵션 설정 + +screen.AO_SCREEN=환경 폐색 +screen.AO_SCREEN.comment=환경 폐색 옵션 설정 + +screen.WATER_SCREEN=물 +screen.WATER_SCREEN.comment=물 옵션 설정 + +screen.POST_SCREEN=후처리 효과 +screen.POST_SCREEN.comment=후처리 효과 옵션 설정 + +screen.LIGHT_SCREEN=빛 +screen.LIGHT_SCREEN.comment=빛 옵션 설정 + +screen.CLOUDS_SCREEN=태양 & 구름 +screen.CLOUDS_SCREEN.comment=태양과 구름 옵션 설정 + +screen.FOG_SCREEN=안개 +screen.FOG_SCREEN.comment=안개 옵션 설정 + +screen.MOTION_BLUR_SCREEN=모션 블러 +screen.MOTION_BLUR_SCREEN.comment=모션 블러 옵션 설정 + +screen.ACCESIBILITY_SCREEN=접근성 +screen.ACCESIBILITY_SCREEN.comment=접근성 옵션 설정 + +screen.CUSTOM_COLORS_SCREEN=커스텀 색상 +screen.CUSTOM_COLORS_SCREEN.comment=커스텀 색상 설정 +screen.CUSTOM_COLORS_DAY=낮 커스텀 색상 +screen.CUSTOM_COLORS_SUNSET=일몰/새벽 커스텀 색상 +screen.CUSTOM_COLORS_NIGHT=밤 커스텀 색상 +screen.CUSTOM_COLORS_WATER=물 커스텀 색상 +screen.CUSTOM_COLORS_NV=야간 투시 커스텀 색상 diff --git a/shaders/lang/sv_SE.lang b/shaders/lang/sv_SE.lang index 8ae30399..d99731dd 100644 --- a/shaders/lang/sv_SE.lang +++ b/shaders/lang/sv_SE.lang @@ -7,8 +7,7 @@ profile.shadowless_high=Hög (skugglös) profile.low=Låg profile.medium=Medium profile.high=Hög -profile.extreme=Extrem -profile.extremeplus=Extrem+ +profile.extremeplus=Hög (Skärpedjup) profile.comment=De "skugglösa" profilerna är designade för datorer med låg prestanda, vilket inaktiverar skuggor. Traditionella profiler lägger långsamt till skuggor med högre kvalitet och mer avancerade tunga effekter. Var god experimentera med de tillgängliga alternativen och hitta den bästa kombinationen för dig. @@ -16,7 +15,7 @@ profile.comment=De "skugglösa" profilerna är designade för datorer med låg p ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Tack för att du använder denna shader! :). Ändra Optifines inbyggda kvalitetsalternativ till normala värden eller dess standardvärden för bättre kvalitet. -value.ACERCADE.0=v.9.0 +value.ACERCADE.0=v.9.5b #Options ############################# @@ -69,7 +68,7 @@ option.AA_TYPE=Tidsbestämd sampling value.AA_TYPE.0=AV value.AA_TYPE.1=Denoise value.AA_TYPE.2=TAA -value.AA_TYPE.3=Sharp TAA +value.AA_TYPE.3=TAA+ option.MOTION_BLUR=Rörelseoskärpa option.MOTION_BLUR_STRENGTH=Styrka för rörelseoskärpa @@ -129,6 +128,7 @@ value.COLOR_SCHEME.3=Legacy value.COLOR_SCHEME.4=Captain value.COLOR_SCHEME.5=Psychedelic value.COLOR_SCHEME.6=Cocoa +value.COLOR_SCHEME.7=Testigo value.COLOR_SCHEME.99=Beställnings option.LIGHT_SUNSET_COLOR_R=Solnedgångsljus R @@ -242,8 +242,6 @@ option.USE_BASIC_SH=Enkel shader för anpassade dimensioner option.MATERIAL_GLOSS=Materialglans -option.SIMPLE_AUTOEXP=Enklare exponering - option.DYN_HAND_LIGHT=Konstgjort dynamiskt ljus #Screens @@ -256,6 +254,14 @@ screen.COMPATIBILITY_SCREEN.comment=Ställ in kompatibilitetsalternativ screen.SHADOWS_SCREEN=Skuggor screen.SHADOWS_SCREEN.comment=Ändra skuggalternativ +option.SHADOW_LOCK=Pixel locked shadows +value.SHADOW_LOCK.0=Disabled +value.SHADOW_LOCK.16=16x16 +value.SHADOW_LOCK.32=32x32 +value.SHADOW_LOCK.64=64x64 +value.SHADOW_LOCK.128=128x128 +value.SHADOW_LOCK.256=256x256 + screen.DOF_SCREEN=Skärpedjup screen.DOF_SCREEN.comment=Ändra skärpedjupsalternativ diff --git a/shaders/lang/tr_TR.lang b/shaders/lang/tr_TR.lang index dfc2af2e..e62c3120 100644 --- a/shaders/lang/tr_TR.lang +++ b/shaders/lang/tr_TR.lang @@ -7,8 +7,7 @@ profile.shadowless_high=Gölgesiz Yüksek profile.low=Düşük profile.medium=Orta profile.high=Yüksek -profile.extreme=Olağanüstü -profile.extremeplus=Olağanüstü+ +profile.extremeplus=Yüksek (AD) profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük performanslı makineler için tasarlanmıştır. Geleneksel profiller yavaş yavaş daha kaliteli gölgeler ve daha gelişmiş ağır efektler ekler. Lütfen mevcut seçenekleri deneyin ve sizin için en iyi kombinasyonu bulun. @@ -16,7 +15,7 @@ profile.comment="Gölgesiz" profiller, gölgeler göz ardı edilerek düşük pe ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=Bu shaderı kullandığınız için teşekkür ederiz! :). Daha iyi kalite için Optifine yerel kalite kontrollerini normal veya varsayılan değerlere ayarlayın. -value.ACERCADE.0=v.9.0 +value.ACERCADE.0=v.9.5b #Options ############################# @@ -69,7 +68,7 @@ option.AA_TYPE=Geçici örnekleme value.AA_TYPE.0=Kapalı value.AA_TYPE.1=Gürültü giderme value.AA_TYPE.2=TAA -value.AA_TYPE.3=Keskin TAA +value.AA_TYPE.3=TAA+ option.MOTION_BLUR=Hareket bulanıklığı option.MOTION_BLUR_STRENGTH=Hareket bulanıklığı gücü @@ -239,8 +238,6 @@ option.USE_BASIC_SH=Özel boyutsal basit shader option.MATERIAL_GLOSS=Malzeme parlaklığı -option.SIMPLE_AUTOEXP=Daha basit pozlama - option.DYN_HAND_LIGHT=Sahte dinamik ışık #Screens @@ -253,6 +250,14 @@ screen.COMPATIBILITY_SCREEN.comment=Uyumluluk seçeneklerini ayarlayın. screen.SHADOWS_SCREEN=Gölgeler screen.SHADOWS_SCREEN.comment=Gölge seçeneklerini ayarlayın. +option.SHADOW_LOCK=Pixel locked shadows +value.SHADOW_LOCK.0=Disabled +value.SHADOW_LOCK.16=16x16 +value.SHADOW_LOCK.32=32x32 +value.SHADOW_LOCK.64=64x64 +value.SHADOW_LOCK.128=128x128 +value.SHADOW_LOCK.256=256x256 + screen.DOF_SCREEN=Alan derinliği screen.DOF_SCREEN.comment=Alan derinliği (AD) seçeneklerini ayarlayın. diff --git a/shaders/lang/zh_CN.lang b/shaders/lang/zh_CN.lang index fdda2ee2..88455518 100644 --- a/shaders/lang/zh_CN.lang +++ b/shaders/lang/zh_CN.lang @@ -7,8 +7,7 @@ profile.shadowless_high=无阴影-高 profile.low=低 profile.medium=中 profile.high=高 -profile.extreme=极致 -profile.extremeplus=极致+ +profile.extremeplus=高 (景深) profile.comment=“无阴影”配置文件是为低性能电脑设计的,不渲染阴影。 常规的配置文件会逐渐添加更高质量的阴影、更多高级的重量级效果。 请体验现有的选项,找到最适合你的配置组合。 @@ -16,7 +15,7 @@ profile.comment=“无阴影”配置文件是为低性能电脑设计的,不 ############################# option.ACERCADE=MakeUp option.ACERCADE.comment=感谢你使用这款着色器! :). 将高清修复的原生画质选项设为正常值/默认值,可获得更好的画质。 -value.ACERCADE.0=v.9.0 +value.ACERCADE.0=v.9.5b #Options ############################# @@ -68,8 +67,8 @@ option.AO_STRENGTH=环境光遮蔽强度 option.AA_TYPE=时间采样 value.AA_TYPE.0=关闭 value.AA_TYPE.1=降噪 -value.AA_TYPE.2=时间抗锯齿 (TAA) -value.AA_TYPE.3=时间抗锯齿-锐化 +value.AA_TYPE.2=TAA +value.AA_TYPE.3=TAA+ option.MOTION_BLUR=动态模糊 option.MOTION_BLUR_STRENGTH=动态模糊强度 @@ -129,6 +128,7 @@ value.COLOR_SCHEME.3=Legacy (遗产) value.COLOR_SCHEME.4=Captain value.COLOR_SCHEME.5=Psychedelic (迷幻) value.COLOR_SCHEME.6=Cocoa (可可) +value.COLOR_SCHEME.7=Testigo value.COLOR_SCHEME.99=自定义 option.LIGHT_SUNSET_COLOR_R=光照 - 日落 - 红 @@ -243,8 +243,6 @@ option.USE_BASIC_SH=自定义维度基础着色器 option.MATERIAL_GLOSS=材质光泽 -option.SIMPLE_AUTOEXP=简单曝光 - option.DYN_HAND_LIGHT=伪动态光源 #Screens @@ -257,6 +255,14 @@ screen.COMPATIBILITY_SCREEN.comment=设置兼容性选项 screen.SHADOWS_SCREEN=阴影 screen.SHADOWS_SCREEN.comment=设置阴影选项 +option.SHADOW_LOCK=Pixel locked shadows +value.SHADOW_LOCK.0=Disabled +value.SHADOW_LOCK.16=16x16 +value.SHADOW_LOCK.32=32x32 +value.SHADOW_LOCK.64=64x64 +value.SHADOW_LOCK.128=128x128 +value.SHADOW_LOCK.256=256x256 + screen.DOF_SCREEN=景深 screen.DOF_SCREEN.comment=设置景深选项 diff --git a/shaders/lib/aberration.glsl b/shaders/lib/aberration.glsl index 21c081bb..956fa830 100644 --- a/shaders/lib/aberration.glsl +++ b/shaders/lib/aberration.glsl @@ -3,15 +3,15 @@ Color aberration effect. */ vec3 color_aberration() { - vec2 offset = texcoord - 0.5; + vec2 offset = texcoord - 0.5; - offset *= vec2(0.125) * CHROMA_ABER_STRENGTH; + offset *= vec2(0.125) * CHROMA_ABER_STRENGTH; - vec3 aberrated_color = vec3(0.0); + vec3 aberratedColor = vec3(0.0); - aberrated_color.r = texture2D(colortex1, texcoord - offset).r; - aberrated_color.g = texture2D(colortex1, texcoord - (offset * 0.5)).g; - aberrated_color.b = texture2D(colortex1, texcoord).b; + aberratedColor.r = texture2DLod(colortex1, texcoord - offset, 0.0).r; + aberratedColor.g = texture2DLod(colortex1, texcoord - (offset * 0.5), 0.0).g; + aberratedColor.b = texture2DLod(colortex1, texcoord, 0.0).b; - return aberrated_color; + return aberratedColor; } diff --git a/shaders/lib/ao.glsl b/shaders/lib/ao.glsl index 8295cbd5..aff047e8 100644 --- a/shaders/lib/ao.glsl +++ b/shaders/lib/ao.glsl @@ -1,45 +1,46 @@ -/* MakeUp - ao.glsl -Based on Capt Tatsu's ambient occlusion functions. +/* MakeUp - ambientOcclusion.glsl +Based on old Capt Tatsu's ambient occlusion functions. */ float dbao(float dither) { - float ao = 0.0; - - float inv_steps = 1.0 / AOSTEPS; - vec2 offset; - float n; - float dither_x; - - float d = texture2D(depthtex0, texcoord.xy).r; - float hand_check = d < 0.56 ? 1024.0 : 1.0; - d = ld(d); - - float sd = 0.0; - float angle = 0.0; - float dist = 0.0; - float far_double = 2.0 * far; - vec2 scale = vec2(inv_aspect_ratio, 1.0) * (fov_y_inv / (d * far)); - float sample_d; - - for (int i = 0; i < AOSTEPS; i++) { - dither_x = (i + dither); - n = fract(dither_x * 1.6180339887) * 3.141592653589793; - offset = vec2(cos(n), sin(n)) * dither_x * scale * inv_steps; - - sd = ld(texture2D(depthtex0, texcoord.xy + offset).r); - sample_d = (d - sd) * far_double * hand_check; - angle = clamp(0.5 - sample_d, 0.0, 1.0); - dist = clamp(0.25 * sample_d - 1.0, 0.0, 1.0); - - sd = ld(texture2D(depthtex0, texcoord.xy - offset).r); - sample_d = (d - sd) * far_double * hand_check; - angle += clamp(0.5 - sample_d, 0.0, 1.0); - dist += clamp(0.25 * sample_d - 1.0, 0.0, 1.0); - - ao += clamp(angle + dist, 0.0, 1.0); - } - ao /= AOSTEPS; - - return sqrt((ao * AO_STRENGTH) + (1.0 - AO_STRENGTH)); + float ambientOcclusion = 0.0; + + float stepsInverse = 1.0 / AOSTEPS; + vec2 offset; + float n; + float ditherSample; + + float linearDepth = texture2DLod(depthtex0, texcoord.xy, 0.0).r; + float handCheck = linearDepth < 0.56 ? 1024.0 : 1.0; + linearDepth = ld(linearDepth); + + float sampleLinearDepth = 0.0; + float angle = 0.0; + float dist = 0.0; + float farAndCheck = handCheck * 2.0 * far; + vec2 scale = vec2(aspectRatioInverse, 1.0) * (fovYInverse / (linearDepth * far)); + vec2 scaleFactor = scale * stepsInverse; + float checkDepth; + + for (int i = 0; i < AOSTEPS; i++) { + ditherSample = (i + dither); + n = fract(ditherSample * 1.6180339887) * 3.141592653589793; + offset = vec2(cos(n), sin(n)) * ditherSample * scaleFactor; + + sampleLinearDepth = ld(texture2DLod(depthtex0, texcoord.xy + offset, 0.0).r); + checkDepth = (linearDepth - sampleLinearDepth) * farAndCheck; + angle = clamp(0.5 - checkDepth, 0.0, 1.0); + dist = clamp(0.25 * checkDepth - 1.0, 0.0, 1.0); + + sampleLinearDepth = ld(texture2DLod(depthtex0, texcoord.xy - offset, 0.0).r); + checkDepth = (linearDepth - sampleLinearDepth) * farAndCheck; + angle += clamp(0.5 - checkDepth, 0.0, 1.0); + dist += clamp(0.25 * checkDepth - 1.0, 0.0, 1.0); + + ambientOcclusion += clamp(angle + dist, 0.0, 1.0); + } + ambientOcclusion /= AOSTEPS; + + return sqrt((ambientOcclusion * AO_STRENGTH) + (1.0 - AO_STRENGTH)); } diff --git a/shaders/lib/basic_utils.glsl b/shaders/lib/basic_utils.glsl index 678ba9ad..06481422 100644 --- a/shaders/lib/basic_utils.glsl +++ b/shaders/lib/basic_utils.glsl @@ -4,70 +4,70 @@ Misc utilities. Javier Garduño - GNU Lesser General Public License v3.0 */ -float square_pow(float x) { - return x * x; +float squarePow(float x) { + return x * x; } -float cube_pow(float x) { - return x * x * x; +float cubePow(float x) { + return x * x * x; } -float fourth_pow(float x) { - float temp_2 = x * x; - return temp_2 * temp_2; +float fourthPow(float x) { + float temp2 = x * x; + return temp2 * temp2; } -float fifth_pow(float x) { - float temp_2 = x * x; - return temp_2 * temp_2 * x; +float fifthPow(float x) { + float temp2 = x * x; + return temp2 * temp2 * x; } -float sixth_pow(float x) { - float temp_2 = x * x; - return temp_2 * temp_2 * temp_2; +float sixthPow(float x) { + float temp2 = x * x; + return temp2 * temp2 * temp2; } -vec3 vec3_square_pow(vec3 x) { - return x * x; +vec3 SquarePowVec3(vec3 x) { + return x * x; } -vec3 vec3_cube_pow(vec3 x) { - return x * x * x; +vec3 cubePowVec3(vec3 x) { + return x * x * x; } -vec3 vec3_fourth_pow(vec3 x) { - vec3 temp_2 = x * x; - return temp_2 * temp_2; +vec3 fourthPowVec3(vec3 x) { + vec3 temp2 = x * x; + return temp2 * temp2; } -vec3 vec3_fifth_pow(vec3 x) { - vec3 temp_2 = x * x; - return temp_2 * temp_2 * x; +vec3 fifthPowVec3(vec3 x) { + vec3 temp2 = x * x; + return temp2 * temp2 * x; } -vec3 vec3_sixth_pow(vec3 x) { - vec3 temp_2 = x * x; - return temp_2 * temp_2 * temp_2; +vec3 sixthPowVec3(vec3 x) { + vec3 temp2 = x * x; + return temp2 * temp2 * temp2; } -vec4 vec4_square_pow(vec4 x) { - return x * x; +vec4 squarePowVec4(vec4 x) { + return x * x; } -vec4 vec4_cube_pow(vec4 x) { - return x * x * x; +vec4 cubePowVec4(vec4 x) { + return x * x * x; } -vec4 vec4_fourth_pow(vec4 x) { - return x * x * x * x; +vec4 fourthPowVec4(vec4 x) { + return x * x * x * x; } -vec4 vec3_fifth_pow(vec4 x) { - vec4 temp_2 = x * x; - return temp_2 * temp_2 * x; +vec4 fifthPowVec4(vec4 x) { + vec4 temp2 = x * x; + return temp2 * temp2 * x; } -vec4 vec3_sixth_pow(vec4 x) { - vec4 temp_2 = x * x; - return temp_2 * temp_2 * temp_2; +vec4 sixthPowVec4(vec4 x) { + vec4 temp2 = x * x; + return temp2 * temp2 * temp2; } diff --git a/shaders/lib/bloom.glsl b/shaders/lib/bloom.glsl index 52f887dd..ba016161 100644 --- a/shaders/lib/bloom.glsl +++ b/shaders/lib/bloom.glsl @@ -5,26 +5,30 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ vec3 mipmap_bloom(sampler2D image, vec2 coords, float dither) { - vec3 blur_sample = vec3(0.0); - vec2 blur_radius_vec = vec2(0.1 * inv_aspect_ratio, 0.1); + vec3 blurSample = vec3(0.0); + vec2 blurRadiusVec = vec2(0.1 * aspectRatioInverse, 0.1); - int sample_c = int(BLOOM_SAMPLES); + int samplesQuantity = int(BLOOM_SAMPLES); - float inv_steps = 1.0 / BLOOM_SAMPLES; - float n; - vec2 offset; - float dither_x; + vec2 blurRadiusFactor = blurRadiusVec * (1.0 / BLOOM_SAMPLES); + float n; + vec2 offset; + vec2 offset2; + float ditherShifted; - for(int i = 0; i < sample_c; i++) { - dither_x = (i + dither); - n = fract(dither_x * 1.6180339887) * 3.141592653589793; - offset = vec2(cos(n), sin(n)) * dither_x * blur_radius_vec * inv_steps; + for(int i = 0; i < samplesQuantity; i++) { + ditherShifted = i + dither; + n = fract(ditherShifted * 1.6180339887) * 6.283185307179586; + offset = vec2(cos(n), sin(n)) * ditherShifted * blurRadiusFactor; + offset2 = vec2(-offset.y * 1.25, offset.x * 1.25); - blur_sample += texture2D(image, coords + offset, -1.0).rgb; - blur_sample += texture2D(image, coords - offset, -1.0).rgb; - } + blurSample += texture2DLod(image, coords + offset, softLod).rgb; + blurSample += texture2DLod(image, coords - offset, softLod).rgb; + blurSample += texture2DLod(image, coords + offset2, softLod).rgb; + blurSample += texture2DLod(image, coords - offset2, softLod).rgb; + } - blur_sample /= (BLOOM_SAMPLES * 2.0); + blurSample /= (BLOOM_SAMPLES * 4.0); - return blur_sample; + return blurSample; } diff --git a/shaders/lib/blur.glsl b/shaders/lib/blur.glsl index 0c8b9a25..609da133 100644 --- a/shaders/lib/blur.glsl +++ b/shaders/lib/blur.glsl @@ -4,33 +4,33 @@ Blur functions. Javier Garduño - GNU Lesser General Public License v3.0 */ -vec3 noised_blur(vec4 color_depth, sampler2D image, vec2 coords, float force, float dither) { - vec3 block_color = color_depth.rgb; - float the_depth = color_depth.a; - float blur_radius = 0.0; +vec3 noisedBlur(vec4 colorAndDepth, sampler2D image, vec2 coords, float force, float dither) { + vec3 blockColor = colorAndDepth.rgb; + float depthAlone = colorAndDepth.a; + float blurRadius = 0.0; - if (the_depth > 0.56) { // Manos no - blur_radius = - max(abs(the_depth - centerDepthSmooth) - 0.000075, 0.0) * fov_y_inv; - blur_radius = blur_radius * inversesqrt(0.1 + blur_radius * blur_radius) * force; - blur_radius = min(blur_radius, 0.1); - } + if (depthAlone > 0.56) { // Manos no + blurRadius = + max(abs(depthAlone - centerDepthSmooth) - 0.000075, 0.0) * fovYInverse; + blurRadius = blurRadius * inversesqrt(0.1 + blurRadius * blurRadius) * force; + blurRadius = min(blurRadius, 0.1); + } - if (blur_radius > min(pixel_size_x, pixel_size_y)) { - vec3 blur_sample = vec3(0.0); - vec2 blur_radius_vec = vec2(blur_radius * inv_aspect_ratio, blur_radius); + if (blurRadius > min(pixelSizeX, pixelSizeY)) { + vec3 blurSample = vec3(0.0); + vec2 blurRadiusVec = vec2(blurRadius * aspectRatioInverse, blurRadius); - float dither_base = dither; - dither *= 6.283185307179586; + float dither_base = dither; + dither *= 6.283185307179586; - float current_radius = (0.25 + dither_base); - vec2 offset = vec2(cos(dither), sin(dither)) * blur_radius_vec * current_radius; + float current_radius = (0.25 + dither_base); + vec2 offset = vec2(cos(dither), sin(dither)) * blurRadiusVec * current_radius; - blur_sample += texture2D(image, coords + offset, -2.0).rgb; - blur_sample += texture2D(image, coords - offset, -2.0).rgb; + blurSample += texture2D(image, coords + offset, -2.0).rgb; + blurSample += texture2D(image, coords - offset, -2.0).rgb; - block_color = blur_sample * 0.5; - } + blockColor = blurSample * 0.5; + } - return block_color; + return blockColor; } diff --git a/shaders/lib/color_blindness.glsl b/shaders/lib/color_blindness.glsl index 9a433e06..c1693f18 100644 --- a/shaders/lib/color_blindness.glsl +++ b/shaders/lib/color_blindness.glsl @@ -5,36 +5,36 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ vec3 color_blindness(vec3 color) { - float L = (17.8824 * color.r) + (43.5161 * color.g) + (4.11935 * color.b); - float M = (3.45565 * color.r) + (27.1554 * color.g) + (3.86714 * color.b); - float S = (0.0299566 * color.r) + (0.184309 * color.g) + (1.46709 * color.b); + float L = (17.8824 * color.r) + (43.5161 * color.g) + (4.11935 * color.b); + float M = (3.45565 * color.r) + (27.1554 * color.g) + (3.86714 * color.b); + float S = (0.0299566 * color.r) + (0.184309 * color.g) + (1.46709 * color.b); - float l, m, s; - #if COLOR_BLIND_MODE == 0 // Protanopia - l = 0.0 * L + 2.02344 * M + -2.52581 * S; - m = 0.0 * L + 1.0 * M + 0.0 * S; - s = 0.0 * L + 0.0 * M + 1.0 * S; - #elif COLOR_BLIND_MODE == 1 // Deutranopia - l = 1.0 * L + 0.0 * M + 0.0 * S; - m = 0.494207 * L + 0.0 * M + 1.24827 * S; - s = 0.0 * L + 0.0 * M + 1.0 * S; - #elif COLOR_BLIND_MODE == 2 // Tritanopia - l = 1.0 * L + 0.0 * M + 0.0 * S; - m = 0.0 * L + 1.0 * M + 0.0 * S; - s = -0.395913 * L + 0.801109 * M + 0.0 * S; - #endif + float l, m, s; + #if COLOR_BLIND_MODE == 0 // Protanopia + l = 0.0 * L + 2.02344 * M + -2.52581 * S; + m = 0.0 * L + 1.0 * M + 0.0 * S; + s = 0.0 * L + 0.0 * M + 1.0 * S; + #elif COLOR_BLIND_MODE == 1 // Deutranopia + l = 1.0 * L + 0.0 * M + 0.0 * S; + m = 0.494207 * L + 0.0 * M + 1.24827 * S; + s = 0.0 * L + 0.0 * M + 1.0 * S; + #elif COLOR_BLIND_MODE == 2 // Tritanopia + l = 1.0 * L + 0.0 * M + 0.0 * S; + m = 0.0 * L + 1.0 * M + 0.0 * S; + s = -0.395913 * L + 0.801109 * M + 0.0 * S; + #endif - vec3 error; - error.r = (0.0809444479 * l) + (-0.130504409 * m) + (0.116721066 * s); - error.g = (-0.0102485335 * l) + (0.0540193266 * m) + (-0.113614708 * s); - error.b = (-0.000365296938 * l) + (-0.00412161469 * m) + (0.693511405 * s); + vec3 error; + error.r = (0.0809444479 * l) + (-0.130504409 * m) + (0.116721066 * s); + error.g = (-0.0102485335 * l) + (0.0540193266 * m) + (-0.113614708 * s); + error.b = (-0.000365296938 * l) + (-0.00412161469 * m) + (0.693511405 * s); - vec3 diff = color - error; - vec3 correction; - correction.r = 0.0; - correction.g = (diff.r * 0.7) + (diff.g * 1.0); - correction.b = (diff.r * 0.7) + (diff.b * 1.0); - correction = color + correction; + vec3 diff = color - error; + vec3 correction; + correction.r = 0.0; + correction.g = (diff.r * 0.7) + (diff.g * 1.0); + correction.b = (diff.r * 0.7) + (diff.b * 1.0); + correction = color + correction; - return correction; + return correction; } \ No newline at end of file diff --git a/shaders/lib/color_conversion.glsl b/shaders/lib/color_conversion.glsl new file mode 100644 index 00000000..a453a2ce --- /dev/null +++ b/shaders/lib/color_conversion.glsl @@ -0,0 +1,156 @@ +vec3 rgbToXyz(vec3 rgb) { + vec3 xyz; + vec3 rgb2 = rgb; + vec3 mask = vec3(greaterThan(rgb, vec3(0.04045))); + rgb2 = mix(rgb2 / 12.92, pow((rgb2 + 0.055) / 1.055, vec3(2.4)), mask); + + const mat3 rgbToXyzMatrix = mat3( + 0.4124564, 0.3575761, 0.1804375, + 0.2126729, 0.7151522, 0.0721750, + 0.0193339, 0.1191920, 0.9503041 + ); + + xyz = rgbToXyzMatrix * rgb2; + return xyz; +} + +vec3 xyzToLab(vec3 xyz) { + vec3 xyz2 = xyz / vec3(0.95047, 1.0, 1.08883); + vec3 mask = vec3(greaterThan(xyz2, vec3(0.008856))); + xyz2 = mix(7.787 * xyz2 + 16.0 / 116.0, pow(xyz2, vec3(1.0 / 3.0)), mask); + + float L = 116.0 * xyz2.y - 16.0; + float a = 500.0 * (xyz2.x - xyz2.y); + float b = 200.0 * (xyz2.y - xyz2.z); + + return vec3(L, a, b); +} + +vec3 labToXyz(vec3 lab) { + float L = lab.x; + float a = lab.y; + float b = lab.z; + + float y = (L + 16.0) / 116.0; + float x = a / 500.0 + y; + float z = y - b / 200.0; + + vec3 xyz = vec3(x, y, z); + vec3 mask = vec3(greaterThan(xyz, vec3(0.2068966))); + xyz = mix((xyz - 16.0 / 116.0) / 7.787, xyz * xyz * xyz, mask); + + return xyz * vec3(0.95047, 1.0, 1.08883); +} + +vec3 xyzToRgb(vec3 xyz) { + const mat3 xyzToRgbMatrix = mat3( + 3.2404542, -1.5371385, -0.4985314, + -0.9692660, 1.8760108, 0.0415560, + 0.0556434, -0.2040259, 1.0572252 + ); + + vec3 rgb = xyzToRgbMatrix * xyz; + vec3 mask = vec3(greaterThan(rgb, vec3(0.0031308))); + rgb = mix(12.92 * rgb, 1.055 * pow(rgb, vec3(1.0 / 2.4)) - 0.055, mask); + + return clamp(rgb, 0.0, 1.0); +} + +vec3 rgbToHsv(vec3 c) { + vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); + vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); +} + +vec3 hsvToRgb(vec3 c) { + vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} + +/* ----------- */ + +// Funciones auxiliares para la corrección gamma (sRGB <-> Lineal) +// Convierte un canal de sRGB a RGB lineal +float srgbToLinear(float c) { + if (c <= 0.04045) { + return c / 12.92; + } else { + return pow((c + 0.055) / 1.055, 2.4); + } +} + +// Convierte un vector de sRGB a RGB lineal +vec3 srgbToLinear(vec3 c) { + return vec3( + srgbToLinear(c.r), + srgbToLinear(c.g), + srgbToLinear(c.b) + ); +} + +// Convierte un canal de RGB lineal a sRGB +float linearToSrgb(float c) { + if (c <= 0.0031308) { + return c * 12.92; + } else { + return 1.055 * pow(c, 1.0 / 2.4) - 0.055; + } +} + +// Convierte un vector de RGB lineal a sRGB +vec3 linearToSrgb(vec3 c) { + return vec3( + linearToSrgb(c.r), + linearToSrgb(c.g), + linearToSrgb(c.b) + ); +} + +// Matrices de transformación para Oklab +const mat3 M1 = mat3( + 0.412453, 0.357576, 0.180438, + 0.212671, 0.715160, 0.072169, + 0.019334, 0.119192, 0.950304 +); + +const mat3 M2 = mat3( + 0.2104542553, 0.7936177850, -0.0040720468, + 1.9779984951, -2.4285922050, 0.4505937099, + 0.0259040371, 0.7827717662, -0.8086757660 +); + +const mat3 INV_M1 = mat3( + 3.2404542, -1.5371385, -0.4985314, + -0.9692660, 1.8760108, 0.0415560, + 0.0556434, -0.2040259, 1.0572252 +); + +const mat3 INV_M2 = mat3( + 1.0, 0.3963377774, 0.2158037573, + 1.0, -0.1055613458, -0.0638541728, + 1.0, -0.0894841775, -1.2914855480 +); + + +// ----- FUNCIÓN PRINCIPAL DE CONVERSIÓN RGB -> OKLAB ----- +vec3 rgbToOklab(vec3 c) { + // 1. Convertir de sRGB a RGB lineal + vec3 linearRgb = srgbToLinear(c); + vec3 lms = M1 * linearRgb; + vec3 lmsCubed = pow(lms, vec3(1.0/3.0)); + return M2 * lmsCubed; +} + + +// ----- FUNCIÓN PRINCIPAL DE CONVERSIÓN OKLAB -> RGB ----- +vec3 oklabToRgb(vec3 c) { + vec3 lmsCubed = INV_M2 * c; + vec3 lms = pow(lmsCubed, vec3(3.0)); + vec3 linearRgb = INV_M1 * lms; + + return linearToSrgb(linearRgb); +} diff --git a/shaders/lib/color_utils.glsl b/shaders/lib/color_utils.glsl index 0a35d2bd..e6ba77ed 100644 --- a/shaders/lib/color_utils.glsl +++ b/shaders/lib/color_utils.glsl @@ -4,193 +4,178 @@ Usefull data for color manipulation. Javier Garduño - GNU Lesser General Public License v3.0 */ -uniform float day_moment; -uniform float day_mixer; -uniform float night_mixer; +uniform float dayMoment; +uniform float dayMixer; +uniform float nightMixer; uniform int moonPhase; #ifdef UNKNOWN_DIM - uniform vec3 fogColor; - uniform vec3 skyColor; + uniform vec3 fogColor; + uniform vec3 skyColor; #endif #define NIGHT_BRIGHT_PHASE (NIGHT_BRIGHT + (NIGHT_BRIGHT * (abs(4.0 - moonPhase) * 0.25))) #if COLOR_SCHEME == 0 // Ethereal - #define OMNI_TINT 0.4 - #define LIGHT_SUNSET_COLOR vec3(0.887528, 0.443394, 0.301044) - #define LIGHT_DAY_COLOR vec3(0.90, 0.84, 0.79) - #define LIGHT_NIGHT_COLOR vec3(0.0317353, 0.0467353, 0.0637353) * NIGHT_BRIGHT_PHASE + #define OMNI_TINT 0.4 + #define LIGHT_SUNSET_COLOR vec3(0.887528, 0.443394, 0.301044) + #define LIGHT_DAY_COLOR vec3(0.90, 0.84, 0.79) + #define LIGHT_NIGHT_COLOR vec3(0.0317353, 0.0467353, 0.0637353) * NIGHT_BRIGHT_PHASE - #define ZENITH_SUNSET_COLOR vec3(0.2617647, 0.33529412, 0.52352941) - #define ZENITH_DAY_COLOR vec3(0.0785098, 0.24352941, 0.54901961) - #define ZENITH_NIGHT_COLOR vec3(0.0168, 0.0228, 0.03) * NIGHT_BRIGHT_PHASE + #define ZENITH_SUNSET_COLOR vec3(0.2617647, 0.33529412, 0.52352941) + #define ZENITH_DAY_COLOR vec3(0.0785098, 0.24352941, 0.54901961) + #define ZENITH_NIGHT_COLOR vec3(0.0168, 0.0228, 0.03) * NIGHT_BRIGHT_PHASE - #define HORIZON_SUNSET_COLOR vec3(1.0, 0.6, 0.394) - #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) - #define HORIZON_NIGHT_COLOR vec3(0.02556, 0.03772, 0.05244) * NIGHT_BRIGHT_PHASE + #define HORIZON_SUNSET_COLOR vec3(1.0, 0.6, 0.394) + #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) + #define HORIZON_NIGHT_COLOR vec3(0.02556, 0.03772, 0.05244) * NIGHT_BRIGHT_PHASE - #define WATER_COLOR vec3(0.05, 0.1, 0.11) + #define WATER_COLOR vec3(0.05, 0.1, 0.11) #elif COLOR_SCHEME == 1 // New shoka - #define OMNI_TINT 0.25 - #define LIGHT_SUNSET_COLOR vec3(1.0, 0.588, 0.3555) - #define LIGHT_DAY_COLOR vec3(0.90, 0.84, 0.79) - #define LIGHT_NIGHT_COLOR vec3(0.04786874, 0.05175001, 0.06112969) * NIGHT_BRIGHT_PHASE + #define OMNI_TINT 0.25 + #define LIGHT_SUNSET_COLOR vec3(1.0, 0.588, 0.3555) + #define LIGHT_DAY_COLOR vec3(0.90, 0.84, 0.79) + #define LIGHT_NIGHT_COLOR vec3(0.04786874, 0.05175001, 0.06112969) * NIGHT_BRIGHT_PHASE - #define ZENITH_SUNSET_COLOR vec3(0.143, 0.24394118, 0.36450981) - #define ZENITH_DAY_COLOR vec3(0.143, 0.24394118, 0.36450981) - #define ZENITH_NIGHT_COLOR vec3(0.014, 0.019, 0.025) * NIGHT_BRIGHT_PHASE + #define ZENITH_SUNSET_COLOR vec3(0.143, 0.24394118, 0.36450981) + #define ZENITH_DAY_COLOR vec3(0.143, 0.24394118, 0.36450981) + #define ZENITH_NIGHT_COLOR vec3(0.014, 0.019, 0.025) * NIGHT_BRIGHT_PHASE - #define HORIZON_SUNSET_COLOR vec3(1.0, 0.648, 0.37824) - #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) - #define HORIZON_NIGHT_COLOR vec3(0.0213, 0.0306, 0.0387) * NIGHT_BRIGHT_PHASE + #define HORIZON_SUNSET_COLOR vec3(1.0, 0.648, 0.37824) + #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) + #define HORIZON_NIGHT_COLOR vec3(0.0213, 0.0306, 0.0387) * NIGHT_BRIGHT_PHASE - #define WATER_COLOR vec3(0.05, 0.1, 0.11) + #define WATER_COLOR vec3(0.05, 0.1, 0.11) #elif COLOR_SCHEME == 2 // Shoka - #define OMNI_TINT 0.5 - #define LIGHT_SUNSET_COLOR vec3(0.70656, 0.44436, 0.2898) - #define LIGHT_DAY_COLOR vec3(0.91640625, 0.91640625, 0.635375) - #define LIGHT_NIGHT_COLOR vec3(0.04786874, 0.05175001, 0.06112969) * NIGHT_BRIGHT_PHASE + #define OMNI_TINT 0.5 + #define LIGHT_SUNSET_COLOR vec3(0.70656, 0.44436, 0.2898) + #define LIGHT_DAY_COLOR vec3(0.91640625, 0.91640625, 0.635375) + #define LIGHT_NIGHT_COLOR vec3(0.04786874, 0.05175001, 0.06112969) * NIGHT_BRIGHT_PHASE - #define ZENITH_SUNSET_COLOR vec3(0.104, 0.17741177, 0.26509804) - #define ZENITH_DAY_COLOR vec3(0.13, 0.22176471, 0.33137255) - #define ZENITH_NIGHT_COLOR vec3(0.014, 0.019, 0.025) * NIGHT_BRIGHT_PHASE + #define ZENITH_SUNSET_COLOR vec3(0.104, 0.17741177, 0.26509804) + #define ZENITH_DAY_COLOR vec3(0.13, 0.22176471, 0.33137255) + #define ZENITH_NIGHT_COLOR vec3(0.014, 0.019, 0.025) * NIGHT_BRIGHT_PHASE - #define HORIZON_SUNSET_COLOR vec3(0.715 , 0.5499, 0.416) - #define HORIZON_DAY_COLOR vec3(0.364 , 0.6825, 0.91) - #define HORIZON_NIGHT_COLOR vec3(0.0213, 0.0306, 0.0387) * NIGHT_BRIGHT_PHASE + #define HORIZON_SUNSET_COLOR vec3(0.715 , 0.5499, 0.416) + #define HORIZON_DAY_COLOR vec3(0.364 , 0.6825, 0.91) + #define HORIZON_NIGHT_COLOR vec3(0.0213, 0.0306, 0.0387) * NIGHT_BRIGHT_PHASE - #define WATER_COLOR vec3(0.01647059, 0.13882353, 0.16470588) + #define WATER_COLOR vec3(0.01647059, 0.13882353, 0.16470588) #elif COLOR_SCHEME == 3 // Legacy - #define OMNI_TINT 0.5 - #define LIGHT_SUNSET_COLOR vec3(0.96876, 0.4356254, 0.26002448) - #define LIGHT_DAY_COLOR vec3(0.88504, 0.88504, 0.8372) - #define LIGHT_NIGHT_COLOR vec3(0.04693014, 0.0507353 , 0.05993107) * NIGHT_BRIGHT_PHASE + #define OMNI_TINT 0.5 + #define LIGHT_SUNSET_COLOR vec3(0.96876, 0.4356254, 0.26002448) + #define LIGHT_DAY_COLOR vec3(0.88504, 0.88504, 0.8372) + #define LIGHT_NIGHT_COLOR vec3(0.04693014, 0.0507353 , 0.05993107) * NIGHT_BRIGHT_PHASE - #define ZENITH_SUNSET_COLOR vec3(0.09410295, 0.20145588, 0.34905882) - #define ZENITH_DAY_COLOR vec3(0.182, 0.351, 0.754) - #define ZENITH_NIGHT_COLOR vec3(0.00841175, 0.01651763, 0.025) * NIGHT_BRIGHT_PHASE + #define ZENITH_SUNSET_COLOR vec3(0.09410295, 0.20145588, 0.34905882) + #define ZENITH_DAY_COLOR vec3(0.182, 0.351, 0.754) + #define ZENITH_NIGHT_COLOR vec3(0.00841175, 0.01651763, 0.025) * NIGHT_BRIGHT_PHASE - #define HORIZON_SUNSET_COLOR vec3(0.81, 0.44165647, 0.25293529) - #define HORIZON_DAY_COLOR vec3(0.572, 1.014, 1.248) - #define HORIZON_NIGHT_COLOR vec3(0.01078431, 0.02317647, 0.035) * NIGHT_BRIGHT_PHASE - - #define WATER_COLOR vec3(0.01647059, 0.13882353, 0.16470588) + #define HORIZON_SUNSET_COLOR vec3(0.81, 0.44165647, 0.25293529) + #define HORIZON_DAY_COLOR vec3(0.572, 1.014, 1.248) + #define HORIZON_NIGHT_COLOR vec3(0.01078431, 0.02317647, 0.035) * NIGHT_BRIGHT_PHASE + #define WATER_COLOR vec3(0.01647059, 0.13882353, 0.16470588) #elif COLOR_SCHEME == 4 // Captain - #define OMNI_TINT 0.5 - #define LIGHT_SUNSET_COLOR vec3(0.84456, 0.52992, 0.26496001) - #define LIGHT_DAY_COLOR vec3(0.83064961, 0.93448079, 1.1032065) - #define LIGHT_NIGHT_COLOR vec3(0.02597646, 0.05195295, 0.069) * NIGHT_BRIGHT_PHASE + #define OMNI_TINT 0.5 + #define LIGHT_SUNSET_COLOR vec3(0.84456, 0.52992, 0.26496001) + #define LIGHT_DAY_COLOR vec3(0.83064961, 0.93448079, 1.1032065) + #define LIGHT_NIGHT_COLOR vec3(0.02597646, 0.05195295, 0.069) * NIGHT_BRIGHT_PHASE - #define ZENITH_SUNSET_COLOR vec3(0.18135 , 0.230256, 0.332592) - #define ZENITH_DAY_COLOR vec3(0.104, 0.26, 0.507) - #define ZENITH_NIGHT_COLOR vec3(0.004 ,0.01, 0.0195) * NIGHT_BRIGHT_PHASE + #define ZENITH_SUNSET_COLOR vec3(0.18135 , 0.230256, 0.332592) + #define ZENITH_DAY_COLOR vec3(0.104, 0.26, 0.507) + #define ZENITH_NIGHT_COLOR vec3(0.004 ,0.01, 0.0195) * NIGHT_BRIGHT_PHASE - #define HORIZON_SUNSET_COLOR vec3(1.3, 0.8632, 0.3952) - #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) - #define HORIZON_NIGHT_COLOR vec3(0.025, 0.035, 0.05) * NIGHT_BRIGHT_PHASE + #define HORIZON_SUNSET_COLOR vec3(1.3, 0.8632, 0.3952) + #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) + #define HORIZON_NIGHT_COLOR vec3(0.025, 0.035, 0.05) * NIGHT_BRIGHT_PHASE - #define WATER_COLOR vec3(0.05, 0.1, 0.11) + #define WATER_COLOR vec3(0.05, 0.1, 0.11) #elif COLOR_SCHEME == 5 // Psychedelic - #define OMNI_TINT 0.45 - #define LIGHT_SUNSET_COLOR vec3(0.85 , 0.47058824, 0.17921569) - #define LIGHT_DAY_COLOR vec3(0.91021875, 0.95771875, 0.6) - #define LIGHT_NIGHT_COLOR vec3(0.04223712, 0.04566177, 0.05393796) * NIGHT_BRIGHT_PHASE + #define OMNI_TINT 0.45 + #define LIGHT_SUNSET_COLOR vec3(0.85 , 0.47058824, 0.17921569) + #define LIGHT_DAY_COLOR vec3(0.91021875, 0.95771875, 0.6) + #define LIGHT_NIGHT_COLOR vec3(0.04223712, 0.04566177, 0.05393796) * NIGHT_BRIGHT_PHASE - #define ZENITH_SUNSET_COLOR vec3(0.18135 , 0.230256, 0.332592) - #define ZENITH_DAY_COLOR vec3(0.104, 0.26, 0.507) - #define ZENITH_NIGHT_COLOR vec3(0.004 ,0.01, 0.0195) * NIGHT_BRIGHT_PHASE + #define ZENITH_SUNSET_COLOR vec3(0.18135 , 0.230256, 0.332592) + #define ZENITH_DAY_COLOR vec3(0.104, 0.26, 0.507) + #define ZENITH_NIGHT_COLOR vec3(0.004 ,0.01, 0.0195) * NIGHT_BRIGHT_PHASE - #define HORIZON_SUNSET_COLOR vec3(1.3, 0.8632, 0.3952) - #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) - #define HORIZON_NIGHT_COLOR vec3(0.025, 0.035, 0.05) * NIGHT_BRIGHT_PHASE + #define HORIZON_SUNSET_COLOR vec3(1.3, 0.8632, 0.3952) + #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) + #define HORIZON_NIGHT_COLOR vec3(0.025, 0.035, 0.05) * NIGHT_BRIGHT_PHASE - #define WATER_COLOR vec3(0.018, 0.12 , 0.18) + #define WATER_COLOR vec3(0.018, 0.12 , 0.18) #elif COLOR_SCHEME == 6 // Cocoa - #define OMNI_TINT 0.4 - #define LIGHT_SUNSET_COLOR vec3(0.918528, 0.5941728, 0.2712528) - #define LIGHT_DAY_COLOR vec3(0.897, 0.897, 0.5718375) - #define LIGHT_NIGHT_COLOR vec3(0.04693014, 0.0507353, 0.05993107) * NIGHT_BRIGHT_PHASE - - #define ZENITH_SUNSET_COLOR vec3(0.117, 0.26, 0.494) - #define ZENITH_DAY_COLOR vec3(0.234, 0.403, 0.676) - #define ZENITH_NIGHT_COLOR vec3(0.014, 0.019, 0.031) * NIGHT_BRIGHT_PHASE - - #define HORIZON_SUNSET_COLOR vec3(1.183, 0.858, 0.611) - #define HORIZON_DAY_COLOR vec3(0.52, 0.975, 1.3) - #define HORIZON_NIGHT_COLOR vec3(0.022, 0.029, 0.049) * NIGHT_BRIGHT_PHASE - - #define WATER_COLOR vec3(0.018, 0.12 , 0.18) + #define OMNI_TINT 0.4 + #define LIGHT_SUNSET_COLOR vec3(0.918528, 0.5941728, 0.2712528) + #define LIGHT_DAY_COLOR vec3(0.897, 0.897, 0.5718375) + #define LIGHT_NIGHT_COLOR vec3(0.04693014, 0.0507353, 0.05993107) * NIGHT_BRIGHT_PHASE + + #define ZENITH_SUNSET_COLOR vec3(0.117, 0.26, 0.494) + #define ZENITH_DAY_COLOR vec3(0.234, 0.403, 0.676) + #define ZENITH_NIGHT_COLOR vec3(0.014, 0.019, 0.031) * NIGHT_BRIGHT_PHASE + + #define HORIZON_SUNSET_COLOR vec3(1.183, 0.858, 0.611) + #define HORIZON_DAY_COLOR vec3(0.52, 0.975, 1.3) + #define HORIZON_NIGHT_COLOR vec3(0.022, 0.029, 0.049) * NIGHT_BRIGHT_PHASE + + #define WATER_COLOR vec3(0.0196, 0.1804, 0.3216) +#elif COLOR_SCHEME == 7 // Testigo + #define OMNI_TINT 0.65 + #define LIGHT_SUNSET_COLOR vec3(0.70656, 0.44436, 0.2898) + #define LIGHT_DAY_COLOR vec3(0.88504, 0.88504, 0.8372) + #define LIGHT_NIGHT_COLOR vec3(0.04786874, 0.05175001, 0.06112969) * NIGHT_BRIGHT_PHASE + + #define ZENITH_SUNSET_COLOR vec3(0.104, 0.17741177, 0.26509804) + #define ZENITH_DAY_COLOR vec3(0.05098, 0.25990, 0.44313) + #define ZENITH_NIGHT_COLOR vec3(0.004 ,0.01, 0.0195) * NIGHT_BRIGHT_PHASE + + #define HORIZON_SUNSET_COLOR vec3(0.715 , 0.5499, 0.416) + #define HORIZON_DAY_COLOR vec3(0.65, 0.91, 1.3) + #define HORIZON_NIGHT_COLOR vec3(0.025, 0.035, 0.05) * NIGHT_BRIGHT_PHASE + + #define WATER_COLOR vec3(0.0118, 0.1098, 0.1922) #elif COLOR_SCHEME == 99 // Custom - #define OMNI_TINT OMNI_TINT_CUSTOM - #define LIGHT_SUNSET_COLOR vec3(LIGHT_SUNSET_COLOR_R, LIGHT_SUNSET_COLOR_G, LIGHT_SUNSET_COLOR_B) - #define LIGHT_DAY_COLOR vec3(LIGHT_DAY_COLOR_R, LIGHT_DAY_COLOR_G, LIGHT_DAY_COLOR_B) - #define LIGHT_NIGHT_COLOR vec3(LIGHT_NIGHT_COLOR_R, LIGHT_NIGHT_COLOR_G, LIGHT_NIGHT_COLOR_B) * NIGHT_BRIGHT_PHASE + #define OMNI_TINT OMNI_TINT_CUSTOM + #define LIGHT_SUNSET_COLOR vec3(LIGHT_SUNSET_COLOR_R, LIGHT_SUNSET_COLOR_G, LIGHT_SUNSET_COLOR_B) + #define LIGHT_DAY_COLOR vec3(LIGHT_DAY_COLOR_R, LIGHT_DAY_COLOR_G, LIGHT_DAY_COLOR_B) + #define LIGHT_NIGHT_COLOR vec3(LIGHT_NIGHT_COLOR_R, LIGHT_NIGHT_COLOR_G, LIGHT_NIGHT_COLOR_B) * NIGHT_BRIGHT_PHASE - #define ZENITH_SUNSET_COLOR vec3(ZENITH_SUNSET_COLOR_R, ZENITH_SUNSET_COLOR_G, ZENITH_SUNSET_COLOR_B) - #define ZENITH_DAY_COLOR vec3(ZENITH_DAY_COLOR_R, ZENITH_DAY_COLOR_G, ZENITH_DAY_COLOR_B) - #define ZENITH_NIGHT_COLOR vec3(ZENITH_NIGHT_COLOR_R, ZENITH_NIGHT_COLOR_G, ZENITH_NIGHT_COLOR_B) * NIGHT_BRIGHT_PHASE + #define ZENITH_SUNSET_COLOR vec3(ZENITH_SUNSET_COLOR_R, ZENITH_SUNSET_COLOR_G, ZENITH_SUNSET_COLOR_B) + #define ZENITH_DAY_COLOR vec3(ZENITH_DAY_COLOR_R, ZENITH_DAY_COLOR_G, ZENITH_DAY_COLOR_B) + #define ZENITH_NIGHT_COLOR vec3(ZENITH_NIGHT_COLOR_R, ZENITH_NIGHT_COLOR_G, ZENITH_NIGHT_COLOR_B) * NIGHT_BRIGHT_PHASE - #define HORIZON_SUNSET_COLOR vec3(HORIZON_SUNSET_COLOR_R, HORIZON_SUNSET_COLOR_G, HORIZON_SUNSET_COLOR_B) - #define HORIZON_DAY_COLOR vec3(HORIZON_DAY_COLOR_R, HORIZON_DAY_COLOR_G, HORIZON_DAY_COLOR_B) - #define HORIZON_NIGHT_COLOR vec3(HORIZON_NIGHT_COLOR_R, HORIZON_NIGHT_COLOR_G, HORIZON_NIGHT_COLOR_B) * NIGHT_BRIGHT_PHASE + #define HORIZON_SUNSET_COLOR vec3(HORIZON_SUNSET_COLOR_R, HORIZON_SUNSET_COLOR_G, HORIZON_SUNSET_COLOR_B) + #define HORIZON_DAY_COLOR vec3(HORIZON_DAY_COLOR_R, HORIZON_DAY_COLOR_G, HORIZON_DAY_COLOR_B) + #define HORIZON_NIGHT_COLOR vec3(HORIZON_NIGHT_COLOR_R, HORIZON_NIGHT_COLOR_G, HORIZON_NIGHT_COLOR_B) * NIGHT_BRIGHT_PHASE - #define WATER_COLOR vec3(WATER_COLOR_R, WATER_COLOR_G, WATER_COLOR_B) + #define WATER_COLOR vec3(WATER_COLOR_R, WATER_COLOR_G, WATER_COLOR_B) #endif #define NV_COLOR vec3(NV_COLOR_R, NV_COLOR_G, NV_COLOR_B) #if BLOCKLIGHT_TEMP == 0 - #define CANDLE_BASELIGHT vec3(0.29975, 0.15392353, 0.0799) + #define CANDLE_BASELIGHT vec3(0.29975, 0.15392353, 0.0799) #elif BLOCKLIGHT_TEMP == 1 - #define CANDLE_BASELIGHT vec3(0.27475, 0.17392353, 0.0899) + #define CANDLE_BASELIGHT vec3(0.27475, 0.17392353, 0.0899) #elif BLOCKLIGHT_TEMP == 2 - #define CANDLE_BASELIGHT vec3(0.24975, 0.19392353, 0.0999) + #define CANDLE_BASELIGHT vec3(0.24975, 0.19392353, 0.0999) #elif BLOCKLIGHT_TEMP == 3 - #define CANDLE_BASELIGHT vec3(0.22, 0.19, 0.14) + #define CANDLE_BASELIGHT vec3(0.22, 0.19, 0.14) #else - #define CANDLE_BASELIGHT vec3(0.19, 0.19, 0.19) + #define CANDLE_BASELIGHT vec3(0.19, 0.19, 0.19) #endif -vec3 day_blend(vec3 sunset, vec3 day, vec3 night) { - // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) - // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) - - vec3 day_color = mix(sunset, day, day_mixer); - vec3 night_color = mix(sunset, night, night_mixer); - - return mix(day_color, night_color, step(0.5, day_moment)); -} - -float day_blend_float(float sunset, float day, float night) { - // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) - // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) - - float day_value = mix(sunset, day, day_mixer); - float night_value = mix(sunset, night, night_mixer); - - return mix(day_value, night_value, step(0.5, day_moment)); -} - -#if defined SIMPLE_AUTOEXP - // Ambient color luma per hour in exposure calculation - #if !defined UNKNOWN_DIM - #define EXPOSURE_DAY 1.0 - #define EXPOSURE_SUNSET 1.0 - #define EXPOSURE_NIGHT 0.01 - #else - #define EXPOSURE_DAY 1.0 - #define EXPOSURE_SUNSET 1.0 - #define EXPOSURE_NIGHT 1.0 - #endif -#endif +#include "/lib/day_blend.glsl" // Fog parameter per hour #if VOL_LIGHT == 1 || (VOL_LIGHT == 2 && defined SHADOW_CASTING) || defined UNKNOWN_DIM #define FOG_DENSITY 3.0 #else - #define FOG_DAY 3.0 - #define FOG_SUNSET 2.0 - #define FOG_NIGHT 3.0 + #define FOG_DAY 3.0 + #define FOG_SUNSET 2.0 + #define FOG_NIGHT 3.0 #endif + +#include "/lib/color_conversion.glsl" diff --git a/shaders/lib/color_utils_end.glsl b/shaders/lib/color_utils_end.glsl index 57d434d8..2d4310c0 100644 --- a/shaders/lib/color_utils_end.glsl +++ b/shaders/lib/color_utils_end.glsl @@ -4,9 +4,9 @@ Usefull data for color manipulation. Javier Garduño - GNU Lesser General Public License v3.0 */ -uniform float day_moment; -uniform float day_mixer; -uniform float night_mixer; +uniform float dayMoment; +uniform float dayMixer; +uniform float nightMixer; #define OMNI_TINT 0.5 #define LIGHT_SUNSET_COLOR vec3(0.1023825, 0.082467, 0.1023825) @@ -24,49 +24,26 @@ uniform float night_mixer; #define WATER_COLOR vec3(0.01647059, 0.13882353, 0.16470588) #if BLOCKLIGHT_TEMP == 0 - #define CANDLE_BASELIGHT vec3(0.29975, 0.15392353, 0.0799) + #define CANDLE_BASELIGHT vec3(0.29975, 0.15392353, 0.0799) #elif BLOCKLIGHT_TEMP == 1 - #define CANDLE_BASELIGHT vec3(0.27475, 0.17392353, 0.0899) + #define CANDLE_BASELIGHT vec3(0.27475, 0.17392353, 0.0899) #elif BLOCKLIGHT_TEMP == 2 - #define CANDLE_BASELIGHT vec3(0.24975, 0.19392353, 0.0999) + #define CANDLE_BASELIGHT vec3(0.24975, 0.19392353, 0.0999) #elif BLOCKLIGHT_TEMP == 3 - #define CANDLE_BASELIGHT vec3(0.22, 0.19, 0.14) + #define CANDLE_BASELIGHT vec3(0.22, 0.19, 0.14) #else - #define CANDLE_BASELIGHT vec3(0.19, 0.19, 0.19) + #define CANDLE_BASELIGHT vec3(0.19, 0.19, 0.19) #endif -vec3 day_blend(vec3 sunset, vec3 day, vec3 night) { - // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) - // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) - - vec3 day_color = mix(sunset, day, day_mixer); - vec3 night_color = mix(sunset, night, night_mixer); - - return mix(day_color, night_color, step(0.5, day_moment)); -} - -float day_blend_float(float sunset, float day, float night) { - // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) - // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) - - float day_value = mix(sunset, day, day_mixer); - float night_value = mix(sunset, night, night_mixer); - - return mix(day_value, night_value, step(0.5, day_moment)); -} - -#if defined SIMPLE_AUTOEXP - // Ambient color luma per hour in exposure calculation - #define EXPOSURE_DAY 1.0 - #define EXPOSURE_SUNSET 1.0 - #define EXPOSURE_NIGHT 1.0 -#endif +#include "/lib/day_blend.glsl" // Fog parameter per hour #if VOL_LIGHT == 1 || (VOL_LIGHT == 2 && defined SHADOW_CASTING) #define FOG_DENSITY 1.0 #else - #define FOG_DAY 1.0 - #define FOG_SUNSET 1.0 - #define FOG_NIGHT 1.0 + #define FOG_DAY 1.0 + #define FOG_SUNSET 1.0 + #define FOG_NIGHT 1.0 #endif + +#include "/lib/color_conversion.glsl" \ No newline at end of file diff --git a/shaders/lib/color_utils_nether.glsl b/shaders/lib/color_utils_nether.glsl index 7958ed34..992fec60 100644 --- a/shaders/lib/color_utils_nether.glsl +++ b/shaders/lib/color_utils_nether.glsl @@ -4,9 +4,9 @@ Usefull data for color manipulation. Javier Garduño - GNU Lesser General Public License v3.0 */ -uniform float day_moment; -uniform float day_mixer; -uniform float night_mixer; +uniform float dayMoment; +uniform float dayMixer; +uniform float nightMixer; #define OMNI_TINT 0.5 #define LIGHT_SUNSET_COLOR vec3(0.06885294, 0.06297058, 0.04879411) @@ -24,45 +24,22 @@ uniform float night_mixer; #define WATER_COLOR vec3(0.01647059, 0.13882353, 0.16470588) #if BLOCKLIGHT_TEMP == 0 - #define CANDLE_BASELIGHT vec3(0.29975, 0.15392353, 0.0799) + #define CANDLE_BASELIGHT vec3(0.29975, 0.15392353, 0.0799) #elif BLOCKLIGHT_TEMP == 1 - #define CANDLE_BASELIGHT vec3(0.27475, 0.17392353, 0.0899) + #define CANDLE_BASELIGHT vec3(0.27475, 0.17392353, 0.0899) #elif BLOCKLIGHT_TEMP == 2 - #define CANDLE_BASELIGHT vec3(0.24975, 0.19392353, 0.0999) + #define CANDLE_BASELIGHT vec3(0.24975, 0.19392353, 0.0999) #elif BLOCKLIGHT_TEMP == 3 - #define CANDLE_BASELIGHT vec3(0.22, 0.19, 0.14) + #define CANDLE_BASELIGHT vec3(0.22, 0.19, 0.14) #else - #define CANDLE_BASELIGHT vec3(0.19, 0.19, 0.19) + #define CANDLE_BASELIGHT vec3(0.19, 0.19, 0.19) #endif -vec3 day_blend(vec3 sunset, vec3 day, vec3 night) { - // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) - // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) - - vec3 day_color = mix(sunset, day, day_mixer); - vec3 night_color = mix(sunset, night, night_mixer); - - return mix(day_color, night_color, step(0.5, day_moment)); -} - -float day_blend_float(float sunset, float day, float night) { - // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) - // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) - - float day_value = mix(sunset, day, day_mixer); - float night_value = mix(sunset, night, night_mixer); - - return mix(day_value, night_value, step(0.5, day_moment)); -} - -#if defined SIMPLE_AUTOEXP - // Ambient color luma per hour in exposure calculation - #define EXPOSURE_DAY 1.0 - #define EXPOSURE_SUNSET 1.0 - #define EXPOSURE_NIGHT 1.0 -#endif +#include "/lib/day_blend.glsl" // Fog parameter per hour #define FOG_DAY 1.0 #define FOG_SUNSET 1.0 #define FOG_NIGHT 1.0 + +#include "/lib/color_conversion.glsl" diff --git a/shaders/lib/config.glsl b/shaders/lib/config.glsl index c8dc7f2b..22fe2e0b 100644 --- a/shaders/lib/config.glsl +++ b/shaders/lib/config.glsl @@ -5,22 +5,23 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ // Useful entities -#define ENTITY_SMALLGRASS 10031.0 // Normal grass like entities -#define ENTITY_LOWERGRASS 10175.0 // Lower half only -#define ENTITY_UPPERGRASS 10176.0 // Upper half only -#define ENTITY_SMALLENTS 10059.0 // Crops like entities -#define ENTITY_SMALLENTS_NW 10032.0 // No waveable small ents -#define ENTITY_LEAVES 10018.0 // Leaves -#define ENTITY_VINES 10106.0 // Vines -#define ENTITY_EMMISIVE 10089.0 // Emissors -#define ENTITY_S_EMMISIVE 10090.0 // Emissors -#define ENTITY_F_EMMISIVE 10213.0 // Fake emissors -#define ENTITY_WATER 10008.0 // Water -#define ENTITY_PORTAL 10090.0 // Portal -#define ENTITY_STAINED 10079.0 // Glass -#define ENTITY_METAL 10400.0 // Metal-like glossy blocks -#define ENTITY_SAND 10410.0 // Sand-like glossy blocks -#define ENTITY_FABRIC 10440.0 // Fabric-like glossy blocks +#define ENTITY_SMALLGRASS 10031.0 // Normal grass like entities +#define ENTITY_LOWERGRASS 10175.0 // Lower half only +#define ENTITY_UPPERGRASS 10176.0 // Upper half only +#define ENTITY_SMALLENTS 10059.0 // Crops like entities +#define ENTITY_SMALLENTS_NW 10032.0 // No waveable small ents +#define ENTITY_LEAVES 10018.0 // Leaves +#define ENTITY_VINES 10106.0 // Vines +#define ENTITY_EMMISIVE 10089.0 // Emissors +#define ENTITY_S_EMMISIVE 10090.0 // Emissors +#define ENTITY_F_EMMISIVE 10213.0 // Fake emissors +#define ENTITY_NO_SHADOW_FIRE 10214.0 // Fire (no shadow) +#define ENTITY_WATER 10008.0 // Water +#define ENTITY_PORTAL 10090.0 // Portal +#define ENTITY_STAINED 10079.0 // Glass +#define ENTITY_METAL 10400.0 // Metal-like glossy blocks +#define ENTITY_SAND 10410.0 // Sand-like glossy blocks +#define ENTITY_FABRIC 10440.0 // Fabric-like glossy blocks // Other constants #define ZENITH_SKY_RAIN_COLOR vec3(.7, .85, 1.0) @@ -30,21 +31,21 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define REFLECTION_SLIDER 2 // [0 1 2] Reflection quality. - Flipped image: Inaccurate but quick reflection. - Raymarching: Raytraced Screen Space Reflection. #if REFLECTION_SLIDER == 0 - #define REFLECTION 0 - #define SSR_TYPE 0 - #define REFLEX_INDEX 0.45 + #define REFLECTION 0 + #define SSR_TYPE 0 + #define REFLEX_INDEX 0.45 #elif REFLECTION_SLIDER == 1 - #define REFLECTION 1 - #define SSR_TYPE 0 - #define REFLEX_INDEX 0.7 + #define REFLECTION 1 + #define SSR_TYPE 0 + #define REFLEX_INDEX 0.7 #elif REFLECTION_SLIDER == 2 - #define REFLECTION 1 - #define SSR_TYPE 1 - #define REFLEX_INDEX 0.7 + #define REFLECTION 1 + #define SSR_TYPE 1 + #define REFLEX_INDEX 0.7 #endif #define FOG_ACTIVE // Toggle fog -#define NETHER_FOG_DISTANCE 0 // [0 1] // Sets Nether fog distance to half of the render distance (maximum of 96 blocks) +#define NETHER_FOG_DISTANCE 1 // [0 1] // Sets Nether fog distance to half of the render distance (maximum of 96 blocks) #define ACERCADE 0 // [0] #define WAVING 1 // [0 1] Makes objects like leaves or grass move in the wind #define TINTED_WATER 1 // [0 1] Use the resource pack color for water. @@ -52,9 +53,9 @@ Javier Garduño - GNU Lesser General Public License v3.0 // #define DOF // Enables depth of field (high performance cost). #define DOF_STRENGTH 0.09 // [0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13] Depth of field strength. #define AO 1 // [0 1] Turn on for enhanced ambient occlusion (medium performance cost). -#define AOSTEPS 4 // [4 5 6 7 8 9 10 11] How many samples are taken for AO (high performance cost). +#define AOSTEPS 5 // [2 3 4 5 6 7 8 9 10 11] How many samples are taken for AO (high performance cost). #define AO_STRENGTH 0.70 // [0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.66 0.70 0.75 0.80 0.85] Ambient occlusion strength (strength NOT affect performance). -#define AA_TYPE 2 // [0 1 2 3] No: Disable antialiasing (not recommended). Denoise only: Supersampling is only used to eliminate noise. TAA: Enable antialiasing (Recommended). Sharp TAA: A subtle sharpening effect is used on the TAA. +#define AA_TYPE 2 // [0 1 2 3] No: Disable antialiasing (not recommended). Denoise only: Supersampling is only used to eliminate noise. TAA: Enable antialiasing. TAA+: Use FXAA to improve the result of TAA. It does not apply if chromatic aberration or DoF is being used. //#define MOTION_BLUR // Turn on motion blur #define MOTION_BLUR_STRENGTH 1.0 // [0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0] Set Motion blur strength. Lower framerate -> Lower strength and vice versa is recommended. #define MOTION_BLUR_SAMPLES 4 // [3 4 5 6 7 8] Motion blur samples @@ -62,22 +63,22 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define SHADOW_TYPE 1 // [0 1] Sets the shadow type #define SHADOW_BLUR 2.0 // [0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0] Shadow blur intensity -// #define COLORED_SHADOW // Attempts to tint the shadow of translucent objects, as well as the associated volumetric light (if active). -#define WATER_ABSORPTION 0.10 // [0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.20 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.30 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38] Sets how much light the water absorbs. Low levels make the water more transparent. High levels make it more opaque. -#define COLOR_SCHEME 1 // [0 1 2 3 4 5 6 99] Ethereal: Old default theme. New shoka: Reinterpretation of a classic. Shoka: The classic. Legacy: Very old default. Captain: A cold preset of stylish colors. Psycodelic: Remaster of old vivid scheme. Cocoa: Warm theme. Custom: Choose your colors in advanced options. +#define COLORED_SHADOW // Attempts to tint the shadow of translucent objects, as well as the associated volumetric light (if active). +#define WATER_ABSORPTION 0.10 // [0.02 0.04 0.06 0.08 0.10 0.12 0.14 0.16 0.18 0.20 0.22 0.24 0.26 0.28 0.30 0.32 0.34 0.36 0.38 0.40 0.42 0.44 0.46 0.48 0.50 0.52 0.54 0.56 0.58 0.60 0.62 0.64 0.66 0.68 0.70 0.72 0.74 0.76 0.78 0.80] Sets how much light the water absorbs. Low levels make the water more transparent. High levels make it more opaque. +#define COLOR_SCHEME 1 // [0 1 2 3 4 5 6 7 99] Ethereal: Old default theme. New shoka: Reinterpretation of a classic. Shoka: The classic. Legacy: Very old default. Captain: A cold preset of stylish colors. Psycodelic: Remaster of old vivid scheme. Cocoa: Warm theme. Testigo: Fantasy and cute scheme. Custom: Choose your colors in advanced options. #define WATER_TEXTURE 0 // [0 1] Enable or disable resource pack water texture. It does not work properly in 1.12. In that case the default value is recommended. -#define AVOID_DARK_LEVEL 0.09 // [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.18 0.19 0.20] Minimal omni light intensity in caves (percentaje). -#define NIGHT_BRIGHT 0.6 // [0.4 0.5 0.6 0.7 0.8 0.9 1.0] Adjusts the brightness of the night light in exteriors. +#define AVOID_DARK_LEVEL 0.030 // [0.000 0.005 0.010 0.015 0.020 0.025 0.030 0.035 0.040 0.045 0.050 0.055 0.060] Minimal omni light intensity in caves. +#define NIGHT_BRIGHT 0.60 // [0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70] Adjusts the brightness of the night light in exteriors. #define V_CLOUDS 1 // [0 1 2] Volumetric static: The clouds move, but they keep their shape. Volumetric dynamic: Clouds change shape over time, a different cloud landscape every time (medium performance hit). Vanilla: Original vanilla clouds. #define CLOUD_VOL_STYLE 0 // [0 1] Set the volumetric cloud style. #define CLOUD_REFLECTION // Set off-screen volumetric clouds reflection (volumetric clouds must be active). #define END_CLOUDS // Activates drawing of clouds in the end (only works if volumetric clouds are active) #define BLACK_ENTITY_FIX 0 // [0 1] Removes black entity bug in old video drivers (activate ONLY if you have problems with black entities) #define BLOOM // Enable or disable bloom effect -#define BLOOM_SAMPLES 4.0 // [4.0 5.0 6.0 7.0 8.0 9.0 10.0] Bloom sample pairs. +#define BLOOM_SAMPLES 3.0 // [2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0] Bloom sample pairs. #define CHROMA_ABER 0 // [0 1] Enable chroma aberration. #define CHROMA_ABER_STRENGTH 0.04 // [0.04 0.05 0.06] Chroma aberration strength. -#define VOL_LIGHT 1 // [0 1 2] Depth based: Turn on depth based godrays, they are a bit slow, but can work better than volumetric light for very short shadow distances. Volumetric: It activates the volumetric light, more accurate and faster, but it needs the shadows enabled to work. +#define VOL_LIGHT 1 // [0 1 2] Depth based: Turn on depth based godrays, faster and can work better than volumetric light for very short shadow distances. Volumetric: It activates the volumetric light, more accurate and faster, but it needs the shadows enabled to work. // #define VANILLA_WATER // Establishes the appearance of water as vanilla. #define WATER_COLOR_SOURCE 0 // [0 1] Select the water color source. It does not work properly in 1.12. In that case the default value is recommended. #define WATER_TURBULENCE 0.9 // [7.0 1.75 0.9 0.5] Set the water waves strength. @@ -85,7 +86,6 @@ Javier Garduño - GNU Lesser General Public License v3.0 // #define DEBUG_MODE // Set debug mode. #define BLOCKLIGHT_TEMP 1 // [0 1 2 3 4] Set blocklight temperature #define MATERIAL_GLOSS // A very subtle effect that adds some ability to reflect direct light on some blocks. It is most noticeable on metals and luminous objects. -// #define SIMPLE_AUTOEXP // Toggle between advanced and simple auto-exposure. The advanced version may work strangely on some GPUs. If the brightness of the scene changes very abruptly, use the simplest. #define DYN_HAND_LIGHT // Toggle the fake dynamic light // Custom colors @@ -135,18 +135,14 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define OMNI_TINT_CUSTOM 0.3 // [0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.0 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5] -#ifdef SIMPLE_AUTOEXP - // Don't remove -#endif - #ifdef FOG_ACTIVE - // Don't remove + // Don't remove #endif #if NETHER_FOG_DISTANCE == 1 - #define NETHER_SIGHT min(far / 2, 96) + #define NETHER_SIGHT min(far / 2, 96) #else - #define NETHER_SIGHT far + #define NETHER_SIGHT far #endif // Reflection parameters @@ -154,40 +150,40 @@ Javier Garduño - GNU Lesser General Public License v3.0 // Cloud parameters #if CLOUD_VOL_STYLE == 1 - #define CLOUD_PLANE_SUP 380.0 - #define CLOUD_PLANE_CENTER 335.0 - #define CLOUD_PLANE 319.0 + #define CLOUD_PLANE_SUP 380.0 + #define CLOUD_PLANE_CENTER 335.0 + #define CLOUD_PLANE 319.0 #else - #define CLOUD_PLANE_SUP 590.0 - #define CLOUD_PLANE_CENTER 375.0 - #define CLOUD_PLANE 319.0 + #define CLOUD_PLANE_SUP 590.0 + #define CLOUD_PLANE_CENTER 375.0 + #define CLOUD_PLANE 319.0 #endif -#define CLOUD_STEPS_AVG 7 // [7 8 9 10 11 12 13 14 15 16] Samples per pixel (high performance impact). -#define CLOUD_SPEED 0 // [0 1 2] Change the speed of clouds for display purposes. +#define CLOUD_STEPS_AVG 10 // [7 8 9 10 11 12 13 14 15 16] Samples per pixel (high performance impact). +#define CLOUD_SPEED 0 // [0 1 2] Change the speed of clouds for demo purposes. #if CLOUD_VOL_STYLE == 1 - #if CLOUD_SPEED == 0 - #define CLOUD_HI_FACTOR 0.001388888888888889 - #define CLOUD_LOW_FACTOR 0.0002777777777777778 - #elif CLOUD_SPEED == 1 - #define CLOUD_HI_FACTOR 0.01388888888888889 - #define CLOUD_LOW_FACTOR 0.002777777777777778 - #elif CLOUD_SPEED == 2 - #define CLOUD_HI_FACTOR 0.1388888888888889 - #define CLOUD_LOW_FACTOR 0.02777777777777778 - #endif + #if CLOUD_SPEED == 0 + #define CLOUD_HI_FACTOR 0.001388888888888889 + #define CLOUD_LOW_FACTOR 0.0002777777777777778 + #elif CLOUD_SPEED == 1 + #define CLOUD_HI_FACTOR 0.01388888888888889 + #define CLOUD_LOW_FACTOR 0.002777777777777778 + #elif CLOUD_SPEED == 2 + #define CLOUD_HI_FACTOR 0.1388888888888889 + #define CLOUD_LOW_FACTOR 0.02777777777777778 + #endif #else - #if CLOUD_SPEED == 0 - #define CLOUD_HI_FACTOR 0.0016666666666666666 - #define CLOUD_LOW_FACTOR 0.0002777777777777778 - #elif CLOUD_SPEED == 1 - #define CLOUD_HI_FACTOR 0.016666666666666666 - #define CLOUD_LOW_FACTOR 0.002777777777777778 - #elif CLOUD_SPEED == 2 - #define CLOUD_HI_FACTOR 0.16666666666666666 - #define CLOUD_LOW_FACTOR 0.02777777777777778 - #endif + #if CLOUD_SPEED == 0 + #define CLOUD_HI_FACTOR 0.0016666666666666666 + #define CLOUD_LOW_FACTOR 0.0002777777777777778 + #elif CLOUD_SPEED == 1 + #define CLOUD_HI_FACTOR 0.016666666666666666 + #define CLOUD_LOW_FACTOR 0.002777777777777778 + #elif CLOUD_SPEED == 2 + #define CLOUD_HI_FACTOR 0.16666666666666666 + #define CLOUD_LOW_FACTOR 0.02777777777777778 + #endif #endif // Godrays @@ -203,128 +199,127 @@ const float sunPathRotation = -25.0; // [-40.0 -35.0 -30.0 -25.0 -20.0 -15.0 -10 #define SHADOW_DISTANCE_SLIDER 1 // [0 1 2] #define SHADOW_QTY_SLIDER 2 // [1 2 3] +#define SHADOW_LOCK 0 // [0 16 32 64 128 256] #define SHADOW_CASTING // Enable or disable shadows. Configure quality in advanced options. #ifdef SHADOW_CASTING - // Shadow parameters - const float shadowIntervalSize = 3.0; - - const bool shadowtex0Mipmap = false; - const bool shadowtex1Mipmap = false; - const bool shadowColor0Mipmap = false; - const bool shadowColor1Mipmap = false; - - const bool shadowtex0Clear = false; - const bool shadowtex1Clear = false; - const bool shadowcolor0Clear = false; - const bool shadowcolor1Clear = false; - - #ifndef NO_SHADOWS - #if SHADOW_DISTANCE_SLIDER == 0 - #if SHADOW_QTY_SLIDER == 1 - #define SHADOW_LIMIT 75.0 - const int shadowMapResolution = 300; - const float shadowDistance = 75.0; - #define SHADOW_FIX_FACTOR 0.3 - #define SHADOW_DIST 0.75 - - #elif SHADOW_QTY_SLIDER == 2 - #define SHADOW_LIMIT 75.0 - const int shadowMapResolution = 600; - const float shadowDistance = 75.0; - #define SHADOW_FIX_FACTOR 0.15 - #define SHADOW_DIST 0.81 - - #elif SHADOW_QTY_SLIDER == 3 - #define SHADOW_LIMIT 75.0 - const int shadowMapResolution = 1200; - const float shadowDistance = 75.0; - #define SHADOW_FIX_FACTOR 0.05 - #define SHADOW_DIST 0.81 - - #endif - - #elif SHADOW_DISTANCE_SLIDER == 1 - #if SHADOW_QTY_SLIDER == 1 - #define SHADOW_LIMIT 105.0 - const int shadowMapResolution = 420; - const float shadowDistance = 105.0; - #define SHADOW_FIX_FACTOR 0.28 - #define SHADOW_DIST 0.75 - - #elif SHADOW_QTY_SLIDER == 2 - #define SHADOW_LIMIT 105.0 - const int shadowMapResolution = 840; - const float shadowDistance = 105.0; - #define SHADOW_FIX_FACTOR 0.07 - #define SHADOW_DIST 0.83 - - #elif SHADOW_QTY_SLIDER == 3 - #define SHADOW_LIMIT 105.0 - const int shadowMapResolution = 1680; - const float shadowDistance = 105.0; - #define SHADOW_FIX_FACTOR 0.03 - #define SHADOW_DIST 0.83 - - #endif - - #elif SHADOW_DISTANCE_SLIDER == 2 - #if SHADOW_QTY_SLIDER == 1 - #define SHADOW_LIMIT 255.0 - const int shadowMapResolution = 1020; - const float shadowDistance = 255.0; - #define SHADOW_FIX_FACTOR 0.12 - #define SHADOW_DIST 0.8 - - #elif SHADOW_QTY_SLIDER == 2 - #define SHADOW_LIMIT 255.0 - const int shadowMapResolution = 2040; - const float shadowDistance = 255.0; - #define SHADOW_FIX_FACTOR 0.03 - #define SHADOW_DIST 0.85 - - #elif SHADOW_QTY_SLIDER == 3 - #define SHADOW_LIMIT 255.0 - const int shadowMapResolution = 4080; - const float shadowDistance = 255.0; - #define SHADOW_FIX_FACTOR 0.015 - #define SHADOW_DIST 0.87 - - #endif - #endif - - #if VOL_LIGHT == 2 - const float shadowDistanceRenderMul = -1.0; - #else - const float shadowDistanceRenderMul = 1.0; - #endif + // Shadow parameters + const float shadowIntervalSize = 3.0; + + const bool shadowtex0Mipmap = false; + const bool shadowtex1Mipmap = false; + const bool shadowColor0Mipmap = false; + const bool shadowColor1Mipmap = false; + + const bool shadowtex0Clear = false; + const bool shadowtex1Clear = false; + const bool shadowcolor0Clear = false; + const bool shadowcolor1Clear = false; - const bool shadowHardwareFiltering = true; - const bool shadowtex1Nearest = false; - #endif + #ifndef NO_SHADOWS + #if SHADOW_DISTANCE_SLIDER == 0 + #if SHADOW_QTY_SLIDER == 1 + #define SHADOW_LIMIT 75.0 + const int shadowMapResolution = 300; + const float shadowDistance = 75.0; + #define SHADOW_FIX_FACTOR 0.3 + #define SHADOW_DIST 0.75 + + #elif SHADOW_QTY_SLIDER == 2 + #define SHADOW_LIMIT 75.0 + const int shadowMapResolution = 600; + const float shadowDistance = 75.0; + #define SHADOW_FIX_FACTOR 0.15 + #define SHADOW_DIST 0.81 + + #elif SHADOW_QTY_SLIDER == 3 + #define SHADOW_LIMIT 75.0 + const int shadowMapResolution = 1200; + const float shadowDistance = 75.0; + #define SHADOW_FIX_FACTOR 0.05 + #define SHADOW_DIST 0.81 + + #endif + + #elif SHADOW_DISTANCE_SLIDER == 1 + #if SHADOW_QTY_SLIDER == 1 + #define SHADOW_LIMIT 105.0 + const int shadowMapResolution = 420; + const float shadowDistance = 105.0; + #define SHADOW_FIX_FACTOR 0.28 + #define SHADOW_DIST 0.75 + + #elif SHADOW_QTY_SLIDER == 2 + #define SHADOW_LIMIT 105.0 + const int shadowMapResolution = 840; + const float shadowDistance = 105.0; + #define SHADOW_FIX_FACTOR 0.07 + #define SHADOW_DIST 0.83 + + #elif SHADOW_QTY_SLIDER == 3 + #define SHADOW_LIMIT 105.0 + const int shadowMapResolution = 1680; + const float shadowDistance = 105.0; + #define SHADOW_FIX_FACTOR 0.03 + #define SHADOW_DIST 0.83 + + #endif + + #elif SHADOW_DISTANCE_SLIDER == 2 + #if SHADOW_QTY_SLIDER == 1 + #define SHADOW_LIMIT 255.0 + const int shadowMapResolution = 1020; + const float shadowDistance = 255.0; + #define SHADOW_FIX_FACTOR 0.12 + #define SHADOW_DIST 0.8 + + #elif SHADOW_QTY_SLIDER == 2 + #define SHADOW_LIMIT 255.0 + const int shadowMapResolution = 2040; + const float shadowDistance = 255.0; + #define SHADOW_FIX_FACTOR 0.03 + #define SHADOW_DIST 0.85 + + #elif SHADOW_QTY_SLIDER == 3 + #define SHADOW_LIMIT 255.0 + const int shadowMapResolution = 4080; + const float shadowDistance = 255.0; + #define SHADOW_FIX_FACTOR 0.015 + #define SHADOW_DIST 0.87 + + #endif + #endif + + #if VOL_LIGHT == 2 + const float shadowDistanceRenderMul = -1.0; + #else + const float shadowDistanceRenderMul = 1.0; + #endif + + const bool shadowHardwareFiltering = true; + const bool shadowtex1Nearest = false; + #endif #else - #define SHADOW_DIST 0.0 - #define SHADOW_RES 0 - const int shadowMapResolution = 100; - const float shadowDistance = 60.0; + #define SHADOW_DIST 0.0 + #define SHADOW_RES 0 + const int shadowMapResolution = 100; + const float shadowDistance = 60.0; #endif // Redefined constants #if AO == 0 - const float ambientOcclusionLevel = 0.7; + const float ambientOcclusionLevel = 0.7; #else - const float ambientOcclusionLevel = 0.0; + const float ambientOcclusionLevel = 0.0; #endif -const float eyeBrightnessHalflife = 6.0; +const float eyeBrightnessHalflife = 3.0; const float centerDepthHalflife = 0.66; // DH exclusive -#define TRANSITION_SUP 0.00 -#define TRANSITION_INF 0.95 -#define TRANSITION_WATER_SUP 0.00 -#define TRANSITION_WATER_INF 0.65 -#define TRANSITION_DH_SUP 0.35 -#define TRANSITION_DH_INF 0.50 \ No newline at end of file +#if defined DISTANT_HORIZONS + #define TRANSITION_DH_SUP 0.05 + #define TRANSITION_DH_INF 0.90 +#endif \ No newline at end of file diff --git a/shaders/lib/day_blend.glsl b/shaders/lib/day_blend.glsl new file mode 100644 index 00000000..b99afa4a --- /dev/null +++ b/shaders/lib/day_blend.glsl @@ -0,0 +1,41 @@ +vec3 dayBlend(vec3 sunset, vec3 day, vec3 night) { + // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) + // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) + + vec3 dayColor = mix(sunset, day, dayMixer); + vec3 nightColor = mix(sunset, night, nightMixer); + + return mix(dayColor, nightColor, step(0.5, dayMoment)); +} + +float dayBlendFloat(float sunset, float day, float night) { + // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) + // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) + + float dayValue = mix(sunset, day, dayMixer); + float nightValue = mix(sunset, night, nightMixer); + + return mix(dayValue, nightValue, step(0.5, dayMoment)); +} + +// Voxy + +vec3 dayBlendVoxy(vec3 sunset, vec3 day, vec3 night, float dayMixerV, float nightMixerV, float dayMomentV) { + // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) + // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) + + vec3 dayColor = mix(sunset, day, dayMixerV); + vec3 nightColor = mix(sunset, night, nightMixerV); + + return mix(dayColor, nightColor, step(0.5, dayMomentV)); +} + +float dayBlendFloatVoxy(float sunset, float day, float night, float dayMixerV, float nightMixerV, float dayMomentV) { + // f(x) = min(-((x-.25)^2)∙20 + 1.25, 1) + // g(x) = min(-((x-.75)^2)∙50 + 3.125, 1) + + float dayValue = mix(sunset, day, dayMixer); + float nightValue = mix(sunset, night, nightMixer); + + return mix(dayValue, nightValue, step(0.5, dayMoment)); +} \ No newline at end of file diff --git a/shaders/lib/depth.glsl b/shaders/lib/depth.glsl index 1dec042a..dbaf4789 100644 --- a/shaders/lib/depth.glsl +++ b/shaders/lib/depth.glsl @@ -1,9 +1,9 @@ -/* MakeUp - depth_dh.glsl +/* MakeUp - depth.glsl Depth utilities. Javier Garduño - GNU Lesser General Public License v3.0 */ float ld(float depth) { - return (2.0 * near) / (far + near - depth * (far - near)); + return (2.0 * near) / (far + near - depth * (far - near)); } diff --git a/shaders/lib/depth_dh.glsl b/shaders/lib/depth_dh.glsl index 29f1b015..be6f28cc 100644 --- a/shaders/lib/depth_dh.glsl +++ b/shaders/lib/depth_dh.glsl @@ -1,9 +1,9 @@ -/* MakeUp - depth_hd.glsl -Depth utilities. +/* MakeUp - depth_dh.glsl +Depth utilities (dh). Javier Garduño - GNU Lesser General Public License v3.0 */ float ld_dh(float depth) { - return (2.0 * dhNearPlane) / (dhFarPlane + dhNearPlane - depth * (dhFarPlane - dhNearPlane)); + return (2.0 * dhNearPlane) / (dhFarPlane + dhNearPlane - depth * (dhFarPlane - dhNearPlane)); } diff --git a/shaders/lib/dither.glsl b/shaders/lib/dither.glsl index 4d4cf42e..165421c1 100644 --- a/shaders/lib/dither.glsl +++ b/shaders/lib/dither.glsl @@ -5,7 +5,7 @@ There are a multitude of dithers in MakeUp, with different variants. There are fixed ones (that do not change over time) as well as those that change when temporal sampling is active. Of the latter, there are two versions: -one that uses dither_shift (Minecraft 1.13+) and another that uses frame_mod +one that uses ditherShift (Minecraft 1.13+) and another that uses frameMod to rotate the dither values. There are several variants because each one performs better or worse @@ -28,302 +28,208 @@ but there is no such texture currently. */ + +uniform int frameMod; + #if MC_VERSION >= 11300 - uniform float dither_shift; + uniform float ditherShift; #else - uniform int frame_mod; + float ditherShift = frameMod * 0.1875; #endif -float hash12(vec2 v) +float hash12(vec2 point) { - v = 0.0002314814814814815 * v + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - return fract(state * state * 7142.0); + point = 0.0002314814814814815 * point + vec2(0.25, 0.0); + float state = fract(dot(point * point, vec2(3571.0))); + return fract(state * state * 7142.0); } -float hash13(vec3 v) +float hash13(vec3 point) { - v = fract(v * .1031); - v += dot(v, v.zyx + 31.32); - return fract((v.x + v.y) * v.z); + point = fract(point * .1031); + point += dot(point, point.zyx + 31.32); + return fract((point.x + point.y) * point.z); } -vec2 hash22(vec2 p) -{ - vec3 p3 = fract(vec3(p.xyx) * vec3(.1031, .1030, .0973)); - p3 += dot(p3, p3.yzx+33.33); - return fract((p3.xx+p3.yz)*p3.zy); -} +// vec2 hash22(vec2 point) +// { +// vec3 p3 = fract(vec3(point.xyx) * vec3(.1031, .1030, .0973)); +// p3 += dot(p3, p3.yzx + 33.33); +// return fract((p3.xx + p3.yz) * p3.zy); +// } -float r_dither(vec2 frag) { - return fract(dot(frag, vec2(0.75487766624669276, 0.569840290998))); +float rDither(vec2 point) { + return fract(dot(point, vec2(0.75487766624669276, 0.569840290998))); } -float eclectic_r_dither(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; +// float eclecticRDither(vec2 point) { +// vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); +// float state = fract(dot(rPoint * rPoint, vec2(3571.0))); +// float p4 = fract(state * state * 7142.0) * 0.075; - return fract(p4 + dot(frag, vec2(0.75487766624669276, 0.569840290998))); -} +// return fract(dot(point, vec2(0.75487766624669276, 0.569840290998)) + p4); +// } -float dither_plastic(vec2 frag) -{ - return 2.0 * abs(fract(dot(frag, vec2(0.75487766624669276, 0.569840290998))) - 0.5); +float dither13(vec2 point) { + return fract(dot(point, vec2(0.3076923076923077, 0.5384615384615384))); } -float eclectic_dither_plastic(vec2 frag) -{ - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; +// float eclecticDither13(vec2 point) { +// vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); +// float state = fract(dot(rPoint * rPoint, vec2(3571.0))); +// float p4 = fract(state * state * 7142.0) * 0.075; - return fract(p4 + (2.0 * abs(fract(dot(frag, vec2(0.75487766624669276, 0.569840290998))) - 0.5))); -} +// return fract(dot(point, vec2(0.3076923076923077, 0.5384615384615384)) + p4); +// } -float dither13(vec2 pos) -{ - return fract(dot(pos, vec2(0.3076923076923077, 0.5384615384615384))); +float dither17(vec2 point) { + return fract(dot(point, vec2(0.11764705882352941, 0.4117647058823529))); } -float eclectic_dither13(vec2 pos) -{ - vec2 v = 0.0002314814814814815 * pos + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; +// float eclecticDither17(vec2 point) { +// vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); +// float state = fract(dot(rPoint * rPoint, vec2(3571.0))); +// float p4 = fract(state * state * 7142.0) * 0.15; - return fract(p4 + dot(pos, vec2(0.3076923076923077, 0.5384615384615384))); -} +// return fract(p4 + dot(point, vec2(0.11764705882352941, 0.4117647058823529))); +// } -float dither17(vec2 pos) { - return fract(dot(pos, vec2(0.11764705882352941, 0.4117647058823529))); -} +// float ditherGradNoise(vec2 point) { +// return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), point))); +// } -float eclectic_dither17(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; +// float eclecticDitherGradNoise(vec2 point) { +// vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); +// float state = fract(dot(rPoint * rPoint, vec2(3571.0))); +// float p4 = fract(state * state * 7142.0) * 0.075; - return fract(p4 + dot(frag, vec2(0.11764705882352941, 0.4117647058823529))); -} +// return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), point)) + p4); +// } -float dither_grad_noise(vec2 frag) { - return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag))); -} +// float textureNoise64(vec2 point, sampler2D noise) { +// return texture2DLod(noise, point * 0.015625, 0).r; +// } -float eclectic_dither_grad_noise(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; +float semiblue(vec2 point) { + vec2 tile = floor(point * 0.25); + float flip = mod(tile.x + tile.y, 2.0); + point = mix(point, point.yx, flip); - return fract(p4 + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))); + return fract(dot(vec2(0.75487766624669276, 0.569840290998), point) + hash12(tile)); } -float texture_noise_64(vec2 p, sampler2D noise) { - return texture2D(noise, p * 0.015625).r; +float ditherMakeup(vec2 point) { + vec2 tile = floor(point * 0.125); + float flip = mod(tile.x + tile.y, 2.0); + vec2 rPoint = mix(point, point.yx, flip); + + return fract( + dot(vec2(0.24512233375330728, 0.4301597090019468), rPoint) + + dot(vec2(0.735151469707489, 0.737424373626709), tile) + ); } -float semiblue(vec2 xy) { - vec2 tile = floor(xy * 0.25); - float flip = mod(tile.x + tile.y, 2.0); - xy = mix(xy, xy.yx, flip); +// float valveRed(vec2 point) { +// float vDither = dot(vec2( 171.0, 231.0 ), point ); +// return fract(vDither / 103.0); // (103.0, 71. 97.0 ) +// } - return fract(dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); -} -float makeup_dither(vec2 frag) { - return fract(dot(frag, vec2(0.8085512046226566, 0.5562305898749054))); +// float shiftedHash12(vec2 point) +// { +// point = 0.0002314814814814815 * point + vec2(0.25, 0.0); +// float state = fract(dot(point * point, vec2(3571.0))); +// return fract(ditherShift + (state * state * 7142.0)); +// } + +// float shiftedHash13(vec3 point) +// { +// point = fract(point * .1031); +// point += dot(point, point.zyx + 31.32); +// return fract(ditherShift + ((point.x + point.y) * point.z)); +// } + +float shiftedRDither(vec2 point) { + return fract(ditherShift + dot(point, vec2(0.75487766624669276, 0.569840290998))); } -float eclectic_makeup_dither(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; +// float shiftedEclecticRDither(vec2 point) { +// vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); +// float state = fract(dot(rPoint * rPoint, vec2(3571.0))); +// float p4 = fract(state * state * 7142.0) * 0.075; + +// return fract(dot(point, vec2(0.75487766624669276, 0.569840290998)) + ditherShift + p4); +// } - return fract(p4 + dot(frag, vec2(0.8085512046226566, 0.5562305898749054))); +float shiftedDither13(vec2 point) +{ + return fract(ditherShift + dot(point, vec2(0.3076923076923077, 0.5384615384615384))); } -#if MC_VERSION >= 11300 +// float shiftedEclecticDither13(vec2 point) +// { +// vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); +// float state = fract(dot(rPoint * rPoint, vec2(3571.0))); +// float p4 = fract(state * state * 7142.0) * 0.075; - float shifted_hash12(vec2 v) - { - v = 0.0002314814814814815 * v + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - return fract(dither_shift + (state * state * 7142.0)); - } - - float shifted_hash13(vec3 v) - { - v = fract(v * .1031); - v += dot(v, v.zyx + 31.32); - return fract(dither_shift + ((v.x + v.y) * v.z)); - } - - float shifted_r_dither(vec2 frag) { - return fract(dither_shift + dot(frag, vec2(0.75487766624669276, 0.569840290998))); - } - - float shifted_eclectic_r_dither(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; - - return fract(dither_shift + p4 + dot(frag, vec2(0.75487766624669276, 0.569840290998))); - } - - float shifted_dither_plastic(vec2 frag) - { - return fract(dither_shift + (2.0 * abs(fract(dot(frag, vec2(0.75487766624669276, 0.569840290998))) - 0.5))); - } - - float shifted_dither13(vec2 pos) - { - return fract(dither_shift + dot(pos, vec2(0.3076923076923077, 0.5384615384615384))); - } - - float shifted_dither17(vec2 frag) { - return fract(dither_shift + dot(frag, vec2(0.5882352941176471, 0.8823529411764706))); - } - - float shifted_eclectic_dither13(vec2 pos) - { - vec2 v = 0.0002314814814814815 * pos + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; - - return fract(dither_shift + p4 + dot(pos, vec2(0.3076923076923077, 0.5384615384615384))); - } - - float shifted_eclectic_dither17(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; - - return fract(dither_shift + p4 + dot(frag, vec2(0.11764705882352941, 0.4117647058823529))); - } - - float shifted_dither_grad_noise(vec2 frag) { - return fract(dither_shift + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))); - } - - float shifted_eclectic_dither_grad_noise(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; - - return fract(dither_shift + p4 + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))); - } - - float shifted_texture_noise_64(vec2 p, sampler2D noise) { - float dither = texture2D(noise, p * 0.015625).r; - return fract(dither_shift + dither); - } - - float shifted_semiblue(vec2 xy) { - vec2 tile = floor(xy * 0.25); - float flip = mod(tile.x + tile.y, 2.0); - xy = mix(xy, xy.yx, flip); +// return fract(dot(point, vec2(0.3076923076923077, 0.5384615384615384)) + ditherShift + p4); +// } + +float shiftedDither17(vec2 point) { + return fract(ditherShift + dot(point, vec2(0.11764705882352941, 0.4117647058823529))); +} - return fract(dither_shift + dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); - } +// float shiftedEclecticDither17(vec2 point) { +// vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); +// float state = fract(dot(rPoint * rPoint, vec2(3571.0))); +// float p4 = fract(state * state * 7142.0) * 0.15; - float shifted_makeup_dither(vec2 frag) { - return fract(dither_shift + dot(frag, vec2(0.8085512046226566, 0.5562305898749054))); - } +// return fract(ditherShift + p4 + dot(point, vec2(0.11764705882352941, 0.4117647058823529))); +// } - float shifted_eclectic_makeup_dither(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; +// float shiftedDitherGradNoise(vec2 point) { +// return fract(ditherShift + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), point)))); +// } - return fract(dither_shift + p4 + dot(frag, vec2(0.8085512046226566, 0.5562305898749054))); - } +// float shiftedEclecticDitherGradNoise(vec2 point) { +// vec2 rPoint = 0.0002314814814814815 * point + vec2(0.25, 0.0); +// float state = fract(dot(rPoint * rPoint, vec2(3571.0))); +// float p4 = fract(state * state * 7142.0) * 0.075; -#else +// return fract(52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), point)) + ditherShift + p4); +// } - float shifted_hash12(vec2 v) - { - v = 0.0002314814814814815 * v + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - return fract((frame_mod * 0.4) + (state * state * 7142.0)); - } - - float shifted_hash13(vec3 v) - { - v = fract(v * .1031); - v += dot(v, v.zyx + 31.32); - return fract((frame_mod * 0.4) + ((v.x + v.y) * v.z)); - } - - float shifted_r_dither(vec2 frag) { - return fract((frame_mod * 0.4) + dot(frag, vec2(0.75487766624669276, 0.569840290998))); - } - - float shifted_eclectic_r_dither(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; - - return fract((frame_mod * 0.4) + p4 + dot(frag, vec2(0.75487766624669276, 0.569840290998))); - } - - float shifted_dither_plastic(vec2 frag) - { - return fract((frame_mod * 0.4) + (2.0 * abs(fract(dot(frag, vec2(0.75487766624669276, 0.569840290998))) - 0.5))); - } - - float shifted_dither13(vec2 pos) - { - return fract((frame_mod * 0.4) + dot(pos, vec2(0.3076923076923077, 0.5384615384615384))); - } - - float shifted_dither17(vec2 frag) { - return fract((frame_mod * 0.4) + dot(frag, vec2(0.5882352941176471, 0.8823529411764706))); - } - - float shifted_eclectic_dither17(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; - - return fract((frame_mod * 0.4) + p4 + dot(frag, vec2(0.11764705882352941, 0.4117647058823529))); - } - - float shifted_dither_grad_noise(vec2 frag) { - return fract((frame_mod * 0.4) + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))); - } - - float shifted_eclectic_dither_grad_noise(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; - - return fract((frame_mod * 0.4) + p4 + (52.9829189 * fract(dot(vec2(0.06711056, 0.00583715), frag)))); - } - - float shifted_texture_noise_64(vec2 p, sampler2D noise) { - float dither = texture2D(noise, p * 0.015625).r; - return fract((frame_mod * 0.4) + dither); - } - - float shifted_semiblue(vec2 xy) { - vec2 tile = floor(xy * 0.25); +// float shiftedTextureNoise64(vec2 point, sampler2D noise) { +// float dither = texture2DLod(noise, point * 0.015625, 0).r; +// return fract(ditherShift + dither); +// } + +float shiftedSemiblue(vec2 point) { + point = point + vec2(frameMod * 5.0, frameMod * 15.0); + vec2 tile = floor(point * 0.25); float flip = mod(tile.x + tile.y, 2.0); - xy = mix(xy, xy.yx, flip); + point = mix(point, point.yx, flip); + + return fract(ditherShift + dot(vec2(0.75487766624669276, 0.569840290998), point) + hash12(tile)); +} - return fract((frame_mod * 0.4) + dot(vec2(0.75487766624669276, 0.569840290998), xy) + hash12(tile)); - } +float shiftedDitherMakeup(vec2 point) { + point = point + vec2(frameMod * 9.0, frameMod * 15.0); + vec2 tile = floor(point * 0.125); + float flip = mod(tile.x + tile.y, 2.0); + vec2 zw = mix(point, point.yx, flip); - float shifted_makeup_dither(vec2 frag) { - return fract((frame_mod * 0.4) + dot(frag, vec2(0.8085512046226566, 0.5562305898749054))); - } + return fract( + ditherShift + + dot(vec2(0.24512233375330728, 0.4301597090019468), zw) + + dot(vec2(0.9996657054871321, 0.9998746076598763), tile) + ); +} - float shifted_eclectic_makeup_dither(vec2 frag) { - vec2 v = 0.0002314814814814815 * frag + vec2(0.25, 0.0); - float state = fract(dot(v * v, vec2(3571.0))); - float p4 = fract(state * state * 7142.0) * 0.15; +// float shiftedValveRed(vec2 point) { +// float vDither = dot(vec2(171.0, 231.0), point ); +// vDither = fract(vDither / 103.0); // (103.0, 71. 97.0 ) - return fract((frame_mod * 0.4) + p4 + dot(frag, vec2(0.8085512046226566, 0.5562305898749054))); - } +// return fract(ditherShift + vDither); +// } -#endif diff --git a/shaders/lib/fast_taa.glsl b/shaders/lib/fast_taa.glsl index d6a3dd53..935c00ba 100644 --- a/shaders/lib/fast_taa.glsl +++ b/shaders/lib/fast_taa.glsl @@ -4,95 +4,182 @@ Temporal antialiasing functions. Javier Garduño - GNU Lesser General Public License v3.0 */ -vec3 fast_taa(vec3 current_color, vec2 texcoord_past) { - // Verificamos si proyección queda fuera de la pantalla actual - if (clamp(texcoord_past, 0.0, 1.0) != texcoord_past) { - return current_color; - } else { - // Previous color - vec3 previous = texture2D(colortex3, texcoord_past).rgb; - - // Apply clamping on the history color. - vec3 near_color0 = texture2D(colortex1, texcoord + vec2(-pixel_size_x, 0.0)).rgb; - vec3 near_color1 = texture2D(colortex1, texcoord + vec2(pixel_size_x, 0.0)).rgb; - vec3 near_color2 = texture2D(colortex1, texcoord + vec2(0.0, -pixel_size_y)).rgb; - vec3 near_color3 = texture2D(colortex1, texcoord + vec2(0.0, pixel_size_y)).rgb; - - vec3 nmin = min(current_color, min(near_color0, min(near_color1, min(near_color2, near_color3)))); - vec3 nmax = max(current_color, max(near_color0, max(near_color1, max(near_color2, near_color3)))); - - // Edge detection - vec3 edge_color = -near_color0; - edge_color -= near_color1; - edge_color += current_color * 4.0; - edge_color -= near_color2; - edge_color -= near_color3; +vec4 convexHull( + vec3 c, vec3 previous, vec3 up, vec3 down, vec3 left, vec3 right, + vec3 ul, vec3 ur, vec3 dl, vec3 dr) { + + // Cálculo de varianza + vec3 sum = c + up + down + left + right + ul + ur + dl + dr; + vec3 sum_sq = + c * c + + up * up + + down * down + + left * left + + right * right + + ul * ul + + ur * ur + + dl * dl + + dr * dr; + + vec3 mean = sum * 0.1111111111111111; // 1 / 9 + vec3 variance = abs(sum_sq * 0.1111111111111111 - mean * mean); // Varianza = E[x^2] - E[x]^2 + + vec3 stdDev = sqrt(variance); + vec3 minValid = mean - stdDev; + vec3 maxValid = mean + stdDev; + + return vec4(clamp(previous, minValid, maxValid), distance(minValid, maxValid)); +} - float edge = clamp(length(edge_color) * 0.5773502691896258, 0.0, 1.0); // 1/sqrt(3) +// float edge_detector( +// vec3 c, vec3 up, vec3 down, vec3 left, vec3 right, +// vec3 ul, vec3 ur, vec3 dl, vec3 dr) { +// // --- Parámetros de Control Relativos --- +// const float epsilon = 0.0001; +// const float relative_threshold = 0.4; +// const float smoothness = 0.5; + +// // --- Conversión a Luminancia --- +// float l_c = luma(c); +// float l_up = luma(up); +// float l_down = luma(down); +// float l_left = luma(left); +// float l_right = luma(right); +// float l_ul = luma(ul); +// float l_ur = luma(ur); +// float l_dl = luma(dl); +// float l_dr = luma(dr); + +// // --- Optimización: Calcular diferencias de luminancia una sola vez --- +// float d_up = abs(l_c - l_up); +// float d_down = abs(l_c - l_down); +// float d_left = abs(l_c - l_left); +// float d_right = abs(l_c - l_right); +// float d_ul = abs(l_c - l_ul); +// float d_ur = abs(l_c - l_ur); +// float d_dl = abs(l_c - l_dl); +// float d_dr = abs(l_c - l_dr); + +// // --- Optimización: Pre-calcular el inverso para los cálculos de consistencia --- +// // Esto reemplaza 4 divisiones por 1 división y 4 multiplicaciones. +// float inv_l_c = 1.0 / (l_c + epsilon); - // nmax = current_color + (edge * 0.7 + 0.3) * (nmax - current_color); - // nmin = current_color + (edge * 0.7 + 0.3) * (nmin - current_color); +// // --- Cálculo de "Linealidad" Relativa de forma eficiente --- - // Clip - // previous = clamp(previous, nmin, nmax); +// // 1. Línea Horizontal +// // ridge_h utiliza las diferencias perpendiculares (arriba, abajo). +// // La consistencia se mide con las diferencias paralelas (izquierda, derecha). +// float ridge_h = d_up / (l_up + epsilon) + d_down / (l_down + epsilon); +// float lineness_h = ridge_h - (d_left + d_right) * inv_l_c; - vec3 center = (nmin + nmax) * 0.5; - float radio = length(nmax - center); +// // 2. Línea Vertical +// float ridge_v = d_left / (l_left + epsilon) + d_right / (l_right + epsilon); +// float lineness_v = ridge_v - (d_up + d_down) * inv_l_c; - vec3 color_vector = previous - center; - float color_dist = length(color_vector); +// // 3. Línea Diagonal (Top-Left a Bottom-Right) +// float ridge_d1 = d_ur / (l_ur + epsilon) + d_dl / (l_dl + epsilon); +// float lineness_d1 = ridge_d1 - (d_ul + d_dr) * inv_l_c; - float factor = 1.0; - if (color_dist > radio) { - factor = radio / color_dist; +// // 4. Línea Diagonal (Top-Right a Bottom-Left) +// float ridge_d2 = d_ul / (l_ul + epsilon) + d_dr / (l_dr + epsilon); +// float lineness_d2 = ridge_d2 - (d_ur + d_dl) * inv_l_c; + +// // --- Puntuación final y color de salida (sin cambios) --- + +// // Se toma la máxima puntuación de las 4 direcciones (asegurando que no sea negativa). +// float max_lineness = max(0.0, max(lineness_h, max(lineness_v, max(lineness_d1, lineness_d2)))); + +// // `smoothstep` ahora usa los umbrales relativos. +// return smoothstep(relative_threshold, relative_threshold + smoothness, max_lineness); +// } + +vec3 fastTaa(vec3 currentColor, vec2 texcoordPast) { + // Verificamos si proyección queda fuera de la pantalla actual + if (clamp(texcoordPast, 0.0, 1.0) != texcoordPast) { + return currentColor; + } else { + // Previous color + vec3 previous = texture2DLod(colortex3, texcoordPast, 0.0).rgb; + + vec3 left = texture2DLod(colortex1, texcoord + vec2(-pixelSizeX, 0.0), 0.0).rgb; + vec3 right = texture2DLod(colortex1, texcoord + vec2(pixelSizeX, 0.0), 0.0).rgb; + vec3 down = texture2DLod(colortex1, texcoord + vec2(0.0, -pixelSizeY), 0.0).rgb; + vec3 up = texture2DLod(colortex1, texcoord + vec2(0.0, pixelSizeY), 0.0).rgb; + vec3 ul = texture2DLod(colortex1, texcoord + vec2(-pixelSizeX, pixelSizeY), 0.0).rgb; + vec3 ur = texture2DLod(colortex1, texcoord + vec2(pixelSizeX, pixelSizeY), 0.0).rgb; + vec3 dl = texture2DLod(colortex1, texcoord + vec2(-pixelSizeX, -pixelSizeY), 0.0).rgb; + vec3 dr = texture2DLod(colortex1, texcoord + vec2(pixelSizeX, -pixelSizeY), 0.0).rgb; + + vec3 colorMax = max(max(max(left, right), down),max(up, max(ul, max(ur, max(dl, max(dr, currentColor)))))); + vec3 colorMin = min(min(min(left, right), down),min(up, min(ul, min(ur, min(dl, min(dr, currentColor)))))); + + // Clip 3 + vec4 previousClipped = convexHull( + currentColor, + previous, + up, + down, + left, + right, + ul, + ur, + dl, + dr + ); + + float ponderation = clamp((distance(colorMax, colorMin) - previousClipped.a) / previousClipped.a, 0.0, 1.0); + + #ifdef MOTION_BLUR + float velocity = length(texcoord - texcoordPast) * 10.0; + return mix(currentColor, previousClipped.rgb, clamp(0.99 - velocity - (smoothstep(0.0, 1.0, ponderation) * 0.33), 0.0, 1.0)); + #else + return mix(currentColor, previousClipped.rgb, 0.99 - (smoothstep(0.0, 1.0, ponderation) * 0.33)); + #endif + // return mix(currentColor, previousClipped.rgb, 0.01); } - - previous = center + (color_vector * factor); - - - return mix(current_color, previous, 0.8 + (edge * 0.19)); - } } -vec4 fast_taa_depth(vec4 current_color, vec2 texcoord_past) { - // Verificamos si proyección queda fuera de la pantalla actual - if (clamp(texcoord_past, 0.0, 1.0) != texcoord_past) { - return current_color; - } else { - // Muestra del pasado - vec4 previous = texture2D(colortex3, texcoord_past); - - vec4 near_color0 = texture2D(colortex1, texcoord + vec2(-pixel_size_x, 0.0)); - vec4 near_color1 = texture2D(colortex1, texcoord + vec2(pixel_size_x, 0.0)); - vec4 near_color2 = texture2D(colortex1, texcoord + vec2(0.0, -pixel_size_y)); - vec4 near_color3 = texture2D(colortex1, texcoord + vec2(0.0, pixel_size_y)); - - vec4 nmin = min(current_color, min(near_color0, min(near_color1, min(near_color2, near_color3)))); - vec4 nmax = max(current_color, max(near_color0, max(near_color1, max(near_color2, near_color3)))); - - // Clip - vec3 center = (nmin.rgb + nmax.rgb) * 0.5; - float radio = length(nmax.rgb - center); - - vec3 color_vector = previous.rgb - center; - float color_dist = length(color_vector); - - float factor = 1.0; - if (color_dist > radio) { - factor = radio / color_dist; +vec4 fastTaaDepth(vec4 currentColor, vec2 texcoordPast) { + // Verificamos si proyección queda fuera de la pantalla actual + if (clamp(texcoordPast, 0.0, 1.0) != texcoordPast) { + return currentColor; + } else { + // Muestra del pasado + vec4 previous = texture2DLod(colortex3, texcoordPast, 0.0); + + vec4 left = texture2DLod(colortex1, texcoord + vec2(-pixelSizeX, 0.0), 0.0); + vec4 right = texture2DLod(colortex1, texcoord + vec2(pixelSizeX, 0.0), 0.0); + vec4 down = texture2DLod(colortex1, texcoord + vec2(0.0, -pixelSizeY), 0.0); + vec4 up = texture2DLod(colortex1, texcoord + vec2(0.0, pixelSizeY), 0.0); + vec4 ul = texture2DLod(colortex1, texcoord + vec2(-pixelSizeX, pixelSizeY), 0.0); + vec4 ur = texture2DLod(colortex1, texcoord + vec2(pixelSizeX, pixelSizeY), 0.0); + vec4 dl = texture2DLod(colortex1, texcoord + vec2(-pixelSizeX, -pixelSizeY), 0.0); + vec4 dr = texture2DLod(colortex1, texcoord + vec2(pixelSizeX, -pixelSizeY), 0.0); + + vec3 colorMax = max(max(max(left.rgb, right.rgb), down.rgb),max(up.rgb, max(ul.rgb, max(ur.rgb, max(dl.rgb, max(dr.rgb, currentColor.rgb)))))); + vec3 colorMin = min(min(min(left.rgb, right.rgb), down.rgb),min(up.rgb, min(ul.rgb, min(ur.rgb, min(dl.rgb, min(dr.rgb, currentColor.rgb)))))); + + // Clip 3 + vec4 previousClipped = convexHull( + currentColor.rgb, + previous.rgb, + up.rgb, + down.rgb, + left.rgb, + right.rgb, + ul.rgb, + ur.rgb, + dl.rgb, + dr.rgb + ); + + float ponderation = clamp((distance(colorMax, colorMin) - previousClipped.a) / previousClipped.a, 0.0, 1.0); + + #ifdef MOTION_BLUR + float velocity = length(texcoord - texcoordPast) * 10.0; + return mix(currentColor, vec4(previousClipped.rgb, previous.a), clamp(0.99 - velocity - (smoothstep(0.0, 1.0, ponderation) * 0.33), 0.0, 1.0)); + #else + return mix(currentColor, vec4(previousClipped.rgb, previous.a), 0.99 - (smoothstep(0.0, 1.0, ponderation) * 0.33)); + #endif } - - previous = vec4(center + (color_vector * factor), previous.a); - - // Edge detection - vec3 edge_color = -near_color0.rgb; - edge_color -= near_color1.rgb; - edge_color += current_color.rgb * 4.0; - edge_color -= near_color2.rgb; - edge_color -= near_color3.rgb; - - float edge = clamp(length(edge_color) * 0.5773502691896258, 0.0, 1.0); // 1/sqrt(3) - - return mix(current_color, previous, 0.8 + (edge * 0.19)); - } } diff --git a/shaders/lib/fxaa.glsl b/shaders/lib/fxaa.glsl new file mode 100644 index 00000000..aec7a9c1 --- /dev/null +++ b/shaders/lib/fxaa.glsl @@ -0,0 +1,204 @@ +/* MakeUp Ultra Fast - fxaa.glsl +FXAA 3.11 from Simon Rodriguez +http://blog.simonrodriguez.fr/articles/30-07-2016_implementing_fxaa.html + +*/ + +const float quality[12] = float[12] (1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.5f, 2.0f, 2.0f, 2.0f, 2.0f, 4.0f, 8.0f); + +vec3 fxaa311(vec3 color, int iterations){ + vec3 aa = color; + + float edgeThresholdMin = 0.03125f; + float edgeThresholdMax = 0.0625f; + float subpixelQuality = 0.75f; + + // Luma at the current fragment + float lumaCenter = luma(color); + // Luma at the four direct neighbours of the current fragment. + float lumaDown = luma(texture2DLod(colortex1, texcoord.xy + vec2(0.0,-pixelSizeY), 0.0).rgb); + float lumaUp = luma(texture2DLod(colortex1, texcoord.xy + vec2(0.0,pixelSizeY), 0.0).rgb); + float lumaLeft = luma(texture2DLod(colortex1, texcoord.xy + vec2(-pixelSizeX, 0.0), 0.0).rgb); + float lumaRight = luma(texture2DLod(colortex1, texcoord.xy + vec2(pixelSizeX, 0.0), 0.0).rgb); + + // Find the maximum and minimum luma around the current fragment. + float lumaMin = min(lumaCenter, min(min(lumaDown, lumaUp), min(lumaLeft, lumaRight))); + float lumaMax = max(lumaCenter, max(max(lumaDown, lumaUp), max(lumaLeft, lumaRight))); + + // Compute the delta. + float lumaRange = lumaMax - lumaMin; + + // If the luma variation is lower that a threshold (or if we are in a really dark area), we are not on an edge, don't perform any FXAA. + if (lumaRange > max(edgeThresholdMin, lumaMax * edgeThresholdMax)) { + // Query the 4 remaining corners lumas. + float lumaDownLeft = luma(texture2DLod(colortex1, texcoord.xy + vec2(-pixelSizeX, -pixelSizeY), 0.0).rgb); + float lumaUpRight = luma(texture2DLod(colortex1, texcoord.xy + vec2(pixelSizeX, pixelSizeY), 0.0).rgb); + float lumaUpLeft = luma(texture2DLod(colortex1, texcoord.xy + vec2(-pixelSizeX, pixelSizeY), 0.0).rgb); + float lumaDownRight = luma(texture2DLod(colortex1, texcoord.xy + vec2(pixelSizeX, -pixelSizeY), 0.0).rgb); + + // Combine the four edges lumas (using intermediary variables for future computations with the same values). + float lumaDownUp = lumaDown + lumaUp; + float lumaLeftRight = lumaLeft + lumaRight; + + // Same for corners + float lumaLeftCorners = lumaDownLeft + lumaUpLeft; + float lumaDownCorners = lumaDownLeft + lumaDownRight; + float lumaRightCorners = lumaDownRight + lumaUpRight; + float lumaUpCorners = lumaUpRight + lumaUpLeft; + + // Compute an estimation of the gradient along the horizontal and vertical axis. + float edgeHorizontal = abs(-2.0f * lumaLeft + lumaLeftCorners) + abs(-2.0f * lumaCenter + lumaDownUp ) * 2.0f + abs(-2.0f * lumaRight + lumaRightCorners); + float edgeVertical = abs(-2.0f * lumaUp + lumaUpCorners) + abs(-2.0f * lumaCenter + lumaLeftRight) * 2.0f + abs(-2.0f * lumaDown + lumaDownCorners); + + // Is the local edge horizontal or vertical ? + bool isHorizontal = (edgeHorizontal >= edgeVertical); + + // Select the two neighboring texels lumas in the opposite direction to the local edge. + float luma1 = isHorizontal ? lumaDown : lumaLeft; + float luma2 = isHorizontal ? lumaUp : lumaRight; + // Compute gradients in this direction. + float gradient1 = luma1 - lumaCenter; + float gradient2 = luma2 - lumaCenter; + + // Which direction is the steepest ? + bool is1Steepest = abs(gradient1) >= abs(gradient2); + // Gradient in the corresponding direction, normalized. + float gradientScaled = 0.25f*max(abs(gradient1), abs(gradient2)); + + // Choose the step size (one pixel) according to the edge direction. + float stepLength = isHorizontal ? pixelSizeY : pixelSizeX; + + // Average luma in the correct direction. + float lumaLocalAverage = 0.0; + + if (is1Steepest){ + // Switch the direction + stepLength = - stepLength; + lumaLocalAverage = 0.5f*(luma1 + lumaCenter); + } else { + lumaLocalAverage = 0.5f*(luma2 + lumaCenter); + } + + // Shift UV in the correct direction by half a pixel. + vec2 currentUv = texcoord.xy; + if (isHorizontal){ + currentUv.y += stepLength * 0.5f; + } else { + currentUv.x += stepLength * 0.5f; + } + + // Compute offset (for each iteration step) in the right direction. + vec2 offset = isHorizontal ? vec2(pixelSizeX, 0.0) : vec2(0.0, pixelSizeY); + + // Compute UVs to explore on each side of the edge, orthogonally. The QUALITY allows us to step faster. + vec2 uv1 = currentUv - offset; + vec2 uv2 = currentUv + offset; + + // Read the lumas at both current extremities of the exploration segment, and compute the delta wrt to the local average luma. + float lumaEnd1 = luma(texture2DLod(colortex1, uv1, 0.0).rgb); + float lumaEnd2 = luma(texture2DLod(colortex1, uv2, 0.0).rgb); + lumaEnd1 -= lumaLocalAverage; + lumaEnd2 -= lumaLocalAverage; + + // If the luma deltas at the current extremities are larger than the local gradient, we have reached the side of the edge. + bool reached1 = abs(lumaEnd1) >= gradientScaled; + bool reached2 = abs(lumaEnd2) >= gradientScaled; + bool reachedBoth = reached1 && reached2; + + // If the side is not reached, we continue to explore in this direction. + if (!reached1){ + uv1 -= offset; + } + if (!reached2){ + uv2 += offset; + } + + // If both sides have not been reached, continue to explore. + if (!reachedBoth) { + for(int i = 2; i < iterations; i++) { + // If needed, read luma in 1st direction, compute delta. + if (!reached1) { + lumaEnd1 = luma(texture2DLod(colortex1, uv1, 0.0).rgb); + lumaEnd1 = lumaEnd1 - lumaLocalAverage; + } + // If needed, read luma in opposite direction, compute delta. + if (!reached2) { + lumaEnd2 = luma(texture2DLod(colortex1, uv2, 0.0).rgb); + lumaEnd2 = lumaEnd2 - lumaLocalAverage; + } + + // If the luma deltas at the current extremities is larger than the + // local gradient, we have reached the side of the edge. + reached1 = abs(lumaEnd1) >= gradientScaled; + reached2 = abs(lumaEnd2) >= gradientScaled; + reachedBoth = reached1 && reached2; + + // If the side is not reached, we continue to explore in this direction, + // with a variable quality. + if (!reached1) { + uv1 -= offset * quality[i]; + } + if (!reached2) { + uv2 += offset * quality[i]; + } + + // If both sides have been reached, stop the exploration. + if (reachedBoth) { + break; + } + } + } + + // Compute the distances to each extremity of the edge. + float distance1 = isHorizontal ? (texcoord.x - uv1.x) : (texcoord.y - uv1.y); + float distance2 = isHorizontal ? (uv2.x - texcoord.x) : (uv2.y - texcoord.y); + + // In which direction is the extremity of the edge closer ? + bool isDirection1 = distance1 < distance2; + float distanceFinal = min(distance1, distance2); + + // Length of the edge. + float edgeThickness = (distance1 + distance2); + + // UV offset: read in the direction of the closest side of the edge. + float pixelOffset = - distanceFinal / edgeThickness + 0.5f; + + + // Is the luma at center smaller than the local average ? + bool isLumaCenterSmaller = lumaCenter < lumaLocalAverage; + + // If the luma at center is smaller than at its neighbour, the delta luma at + // each end should be positive (same variation). + // (in the direction of the closer side of the edge.) + bool correctVariation = ((isDirection1 ? lumaEnd1 : lumaEnd2) < 0.0) != isLumaCenterSmaller; + + // If the luma variation is incorrect, do not offset. + float finalOffset = correctVariation ? pixelOffset : 0.0f; + + // Sub-pixel shifting + // Full weighted average of the luma over the 3x3 neighborhood. + float lumaAverage = (1.0f/12.0f) * (2.0f * (lumaDownUp + lumaLeftRight) + lumaLeftCorners + lumaRightCorners); + // Ratio of the delta between the global average and the center luma, over + // the luma range in the 3x3 neighborhood. + float subPixelOffset1 = clamp(abs(lumaAverage - lumaCenter)/lumaRange,0.0f,1.0f); + float subPixelOffset2 = (-2.0f * subPixelOffset1 + 3.0f) * subPixelOffset1 * subPixelOffset1; + // Compute a sub-pixel offset based on this delta. + float subPixelOffsetFinal = subPixelOffset2 * subPixelOffset2 * subpixelQuality; + + // Pick the biggest of the two offsets. + finalOffset = max(finalOffset, subPixelOffsetFinal); + + // Compute the final UV coordinates. + vec2 finalUv = texcoord.xy; + if (isHorizontal){ + finalUv.y += finalOffset * stepLength; + } else { + finalUv.x += finalOffset * stepLength; + } + + // Read the color at the new UV coordinates, and use it. + aa = texture2DLod(colortex1, finalUv, 0.0).rgb; + } + + return aa; +} \ No newline at end of file diff --git a/shaders/lib/luma.glsl b/shaders/lib/luma.glsl index dcd91772..4c56d588 100644 --- a/shaders/lib/luma.glsl +++ b/shaders/lib/luma.glsl @@ -5,9 +5,9 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ float luma(vec3 color) { - return dot(color, vec3(0.299, 0.587, 0.114)); + return dot(color, vec3(0.2126, 0.7152, 0.0722)); } -float color_average(vec3 color) { - return (color.r + color.g + color.b) * 0.3333333333; +float colorAverage(vec3 color) { + return (color.r + color.g + color.b) * 0.3333333333; } diff --git a/shaders/lib/material_gloss_fragment.glsl b/shaders/lib/material_gloss_fragment.glsl index 79b8a719..ad5d9a7c 100644 --- a/shaders/lib/material_gloss_fragment.glsl +++ b/shaders/lib/material_gloss_fragment.glsl @@ -1,32 +1,28 @@ #if defined THE_END - float material_gloss(vec3 reflected_vector, vec2 lmcoord_alt, float gloss_power, vec3 flat_normal) { - vec3 astro_pos = (gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; - float astro_vector = - max(dot(normalize(reflected_vector), normalize(astro_pos)), 0.0) * - step(0.0001, dot(astro_pos, flat_normal)); - - return clamp( - mix(0.0, 1.0, pow(clamp(astro_vector * 2.0 - 1.0, 0.0, 1.0), gloss_power)), - 0.0, - 1.0 - ); - } + float materialGloss(vec3 reflectedVector, vec2 lmcoordAlt, float glossPower, vec3 flatNormal) { + vec3 astroLightPos = (gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; + float astroAlignment = + max(dot(normalize(reflectedVector), normalize(astroLightPos)), 0.0) * step(0.0001, dot(astroLightPos, flatNormal)); + return clamp( + mix(0.0, 1.0, pow(clamp(astroAlignment * 2.0 - 1.0, 0.0, 1.0), glossPower)), + 0.0, + 1.0 + ); + } #else + float materialGloss(vec3 reflectedVector, vec2 lmcoordAlt, float glossPower, vec3 flatNormal) { + vec3 astroLightPos = mix(-sunPosition, sunPosition, dayNightMix); + float astroAlignment = + max(dot(normalize(reflectedVector), normalize(astroLightPos)), 0.0) * + step(0.0001, dot(astroLightPos, flatNormal)); - float material_gloss(vec3 reflected_vector, vec2 lmcoord_alt, float gloss_power, vec3 flat_normal) { - vec3 astro_pos = mix(-sunPosition, sunPosition, light_mix); - float astro_vector = - max(dot(normalize(reflected_vector), normalize(astro_pos)), 0.0) * - step(0.0001, dot(astro_pos, flat_normal)); - - return clamp( - mix(0.0, 1.0, pow(clamp(astro_vector * 2.0 - 1.0, 0.0, 1.0), gloss_power)) * - clamp(lmcoord_alt.y, 0.0, 1.0) * - (1.0 - rainStrength), - 0.0, - 1.0 - ) * abs(mix(1.0, -1.0, light_mix)); - } - + return clamp( + mix(0.0, 1.0, pow(clamp(astroAlignment * 2.0 - 1.0, 0.0, 1.0), glossPower)) * + clamp(lmcoordAlt.y, 0.0, 1.0) * + (1.0 - rainStrength), + 0.0, + 1.0 + ) * abs(mix(1.0, -1.0, dayNightMix)); + } #endif \ No newline at end of file diff --git a/shaders/lib/material_gloss_fragment_voxy.glsl b/shaders/lib/material_gloss_fragment_voxy.glsl new file mode 100644 index 00000000..f26dd6d6 --- /dev/null +++ b/shaders/lib/material_gloss_fragment_voxy.glsl @@ -0,0 +1,28 @@ +#if defined THE_END + float materialGloss(vec3 reflectedVector, vec2 lmcoordAlt, float glossPower, vec3 flatNormal) { + vec3 astroLightPos = (vxModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; + float astroAlignment = + max(dot(normalize(reflectedVector), normalize(astroLightPos)), 0.0) * step(0.0001, dot(astroLightPos, flatNormal)); + + return clamp( + mix(0.0, 1.0, pow(clamp(astroAlignment * 2.0 - 1.0, 0.0, 1.0), glossPower)), + 0.0, + 1.0 + ); + } +#else + float materialGloss(vec3 reflectedVector, vec2 lmcoordAlt, float glossPower, vec3 flatNormal) { + vec3 astroLightPos = mix(-sunPosition, sunPosition, dayNightMix); + float astroAlignment = + max(dot(normalize(reflectedVector), normalize(astroLightPos)), 0.0) * + step(0.0001, dot(astroLightPos, flatNormal)); + + return clamp( + mix(0.0, 1.0, pow(clamp(astroAlignment * 2.0 - 1.0, 0.0, 1.0), glossPower)) * + clamp(lmcoordAlt.y, 0.0, 1.0) * + (1.0 - rainStrength), + 0.0, + 1.0 + ) * abs(mix(1.0, -1.0, dayNightMix)); + } +#endif \ No newline at end of file diff --git a/shaders/lib/motion_blur.glsl b/shaders/lib/motion_blur.glsl index 7e6bcfb3..ccce7ab8 100644 --- a/shaders/lib/motion_blur.glsl +++ b/shaders/lib/motion_blur.glsl @@ -4,37 +4,31 @@ Motion blur functions. Javier Garduño - GNU Lesser General Public License v3.0 */ -vec3 motion_blur(vec3 color, float the_depth, vec2 blur_velocity, sampler2D image) { - if (the_depth > 0.7) { // Mano no - vec2 double_pixels = 2.0 * vec2(pixel_size_x, pixel_size_y); - vec3 m_blur = vec3(0.0); +vec3 motionBlur(vec3 color, float depthAlone, vec2 blur_velocity, float dither, sampler2D image) { + if (depthAlone > 0.7) { // No hand + vec2 double_pixels = 2.0 * vec2(pixelSizeX, pixelSizeY); + vec3 m_blur = vec3(0.0); - blur_velocity = - (MOTION_BLUR_STRENGTH * blur_velocity) / ((1.0 + length(blur_velocity)) * (frameTime * 500.0)) ; + blur_velocity = + (MOTION_BLUR_STRENGTH * blur_velocity) / ((1.0 + length(blur_velocity)) * (frameTime * 500.0)) ; - #if AA_TYPE > 0 - vec2 coord = - texcoord - blur_velocity * (1.5 + shifted_r_dither(gl_FragCoord.xy)); - #else - vec2 coord = - texcoord - blur_velocity * (1.5 + eclectic_r_dither(gl_FragCoord.xy)); - #endif + vec2 coord = + texcoord - blur_velocity * (1.5 + dither); - float weight = 0.0; - float mask; - vec2 sample_coord; - vec3 b_sample; - for(int i = 0; i < MOTION_BLUR_SAMPLES; i++, coord += blur_velocity) { - sample_coord = clamp(coord, double_pixels, 1.0 - double_pixels); - // b_sample = texture2D(image, sample_coord, -3.0).rgb; - b_sample = texture2DLod(image, sample_coord, 0.0).rgb; - m_blur += b_sample; - weight++; - } - m_blur /= max(weight, 1.0); + float weight = 0.0; + float mask; + vec2 sample_coord; + vec3 b_sample; + for(int i = 0; i < MOTION_BLUR_SAMPLES; i++, coord += blur_velocity) { + sample_coord = clamp(coord, double_pixels, 1.0 - double_pixels); + b_sample = texture2DLod(image, sample_coord, 0.0).rgb; + m_blur += b_sample; + weight++; + } + m_blur /= max(weight, 1.0); - return m_blur; - } else { - return color.rgb; - } + return m_blur; + } else { + return color.rgb; + } } diff --git a/shaders/lib/mu_ftransform.glsl b/shaders/lib/mu_ftransform.glsl new file mode 100644 index 00000000..a4489094 --- /dev/null +++ b/shaders/lib/mu_ftransform.glsl @@ -0,0 +1,18 @@ +vec4 muFtransform() { + float lineWidth = 2.0; + vec2 screenSize = vec2(viewWidth, viewHeight); + mat4 VIEW_SCALE = mat4(mat3(1.0 - 0.00390625)); + mat4 tempmat = gl_ProjectionMatrix * VIEW_SCALE * gl_ModelViewMatrix; + vec4 linePosStart = tempmat * gl_Vertex; + vec4 linePosEnd = tempmat * vec4(gl_Vertex.xyz + gl_Normal, 1.0); + vec3 ndc1 = linePosStart.xyz / linePosStart.w; + vec3 ndc2 = linePosEnd.xyz / linePosEnd.w; + vec2 lineScreenDirection = normalize((ndc2.xy - ndc1.xy) * screenSize); + vec2 lineOffset = vec2(-lineScreenDirection.y, lineScreenDirection.x) * lineWidth / screenSize; + if(lineOffset.x < 0.0) + lineOffset *= -1.0; + if(gl_VertexID % 2 == 0) + return vec4((ndc1 + vec3(lineOffset, 0.0)) * linePosStart.w, linePosStart.w); + else + return vec4((ndc1 - vec3(lineOffset, 0.0)) * linePosStart.w, linePosStart.w); +} \ No newline at end of file diff --git a/shaders/lib/past_projection_utils.glsl b/shaders/lib/past_projection_utils.glsl deleted file mode 100644 index a6ac3ce2..00000000 --- a/shaders/lib/past_projection_utils.glsl +++ /dev/null @@ -1,9 +0,0 @@ -/* MakeUp - past_projection_utils.glsl -Projection functions from past frame. - -Javier Garduño - GNU Lesser General Public License v3.0 -*/ - -vec3 to_clip_space(vec3 view_space_pos) { - return projMAD(gbufferPreviousProjection, view_space_pos) / -view_space_pos.z * 0.5 + 0.5; -} diff --git a/shaders/lib/post.glsl b/shaders/lib/post.glsl index 04160d61..0625fa0f 100644 --- a/shaders/lib/post.glsl +++ b/shaders/lib/post.glsl @@ -1,19 +1,9 @@ vec3 sharpen(sampler2D image, vec3 color, vec2 coords) { - vec3 sum = -texture2D(image, coords + vec2(-pixel_size_x, 0.0)).rgb; - sum -= texture2D(image, coords + vec2(0.0, -pixel_size_y)).rgb; - sum += 11.0 * color; - sum -= texture2D(image, coords + vec2(0.0, pixel_size_y)).rgb; - sum -= texture2D(image, coords + vec2(pixel_size_x, 0.0)).rgb; + vec3 sum = -texture2DLod(image, coords + vec2(-pixelSizeX, 0.0), 0.0).rgb; + sum -= texture2DLod(image, coords + vec2(0.0, -pixelSizeY), 0.0).rgb; + sum += 11.0 * color; + sum -= texture2DLod(image, coords + vec2(0.0, pixelSizeY), 0.0).rgb; + sum -= texture2DLod(image, coords + vec2(pixelSizeX, 0.0), 0.0).rgb; - return sum * 0.14285714285714285; -} - -vec3 edge_detect(sampler2D image, vec3 color, vec2 coords) { - vec3 sum = -texture2D(image, coords + vec2(-pixel_size_x, -pixel_size_y)).rgb; - sum -= texture2D(image, coords + vec2(pixel_size_x, -pixel_size_y)).rgb; - sum += 4.0 * color; - sum -= texture2D(image, coords + vec2(-pixel_size_x, pixel_size_y)).rgb; - sum -= texture2D(image, coords + vec2(pixel_size_x, pixel_size_y)).rgb; - - return vec3(length(sum)) * 0.5773502691896258; + return sum * 0.14285714285714285; } diff --git a/shaders/lib/projection_utils.glsl b/shaders/lib/projection_utils.glsl index 312c20e9..a3c41e38 100644 --- a/shaders/lib/projection_utils.glsl +++ b/shaders/lib/projection_utils.glsl @@ -7,28 +7,9 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define diagonal3(m) vec3((m)[0].x, (m)[1].y, m[2].z) #define projMAD(m, v) (diagonal3(m) * (v) + (m)[3].xyz) -vec3 to_screen_space(vec3 p) { - vec4 i_proj_diag = - vec4( - gbufferProjectionInverse[0].x, - gbufferProjectionInverse[1].y, - gbufferProjectionInverse[2].zw - ); - vec3 p3 = p * 2.0 - 1.0; - vec4 fragposition = i_proj_diag * p3.xyzz + gbufferProjectionInverse[3]; - return fragposition.xyz / fragposition.w; -} - -vec3 camera_to_world(vec3 fragpos) { - vec4 pos = gbufferProjectionInverse * vec4(fragpos, 1.0); - pos /= pos.w; - - return pos.xyz; -} - vec3 camera_to_screen(vec3 fragpos) { - vec4 pos = gbufferProjection * vec4(fragpos, 1.0); - pos /= pos.w; + vec4 pos = gbufferProjection * vec4(fragpos, 1.0); + pos /= pos.w; - return pos.xyz * 0.5 + 0.5; + return pos.xyz * 0.5 + 0.5; } diff --git a/shaders/lib/projection_utils_voxy.glsl b/shaders/lib/projection_utils_voxy.glsl new file mode 100644 index 00000000..c90b2f0f --- /dev/null +++ b/shaders/lib/projection_utils_voxy.glsl @@ -0,0 +1,15 @@ +/* MakeUp - projection_utils.glsl +Projection generic functions. + +Javier Garduño - GNU Lesser General Public License v3.0 +*/ + +#define diagonal3(m) vec3((m)[0].x, (m)[1].y, m[2].z) +#define projMAD(m, v) (diagonal3(m) * (v) + (m)[3].xyz) + +vec3 camera_to_screen_voxy(vec3 fragpos) { + vec4 pos = vxProj * vec4(fragpos, 1.0); + pos /= pos.w; + + return pos.xyz * 0.5 + 0.5; +} diff --git a/shaders/lib/shadow_frag.glsl b/shaders/lib/shadow_frag.glsl index a55c1966..c3547577 100644 --- a/shaders/lib/shadow_frag.glsl +++ b/shaders/lib/shadow_frag.glsl @@ -5,110 +5,150 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ float get_shadow(vec3 the_shadow_pos, float dither) { - float shadow_sample = 1.0; + float shadow_sample = 1.0; - #if SHADOW_TYPE == 0 // Pixelated - shadow_sample = shadow2D(shadowtex1, the_shadow_pos).r; - #elif SHADOW_TYPE == 1 // Soft - float current_radius = dither; - dither *= 6.283185307179586; + #if SHADOW_TYPE == 0 // Pixelated + shadow_sample = shadow2D(shadowtex1, the_shadow_pos).r; + #elif SHADOW_TYPE == 1 // Soft + float current_radius = dither; + dither *= 6.283185307179586; + float dither_2 = dither + 1.5707963267948966; - shadow_sample = 0.0; + shadow_sample = 0.0; - vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; + vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; + vec2 offset2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; - float z_bias = dither * 0.00002; + float z_bias = dither * 0.00002; - shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; - shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; + shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; + shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; + shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset2, the_shadow_pos.z - z_bias)).r; + shadow_sample += shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset2, the_shadow_pos.z - z_bias)).r; - shadow_sample *= 0.5; - - #endif + // shadow_sample *= 0.5; + shadow_sample *= 0.25; + #endif - return shadow_sample; + return shadow_sample; } #if defined COLORED_SHADOW - vec3 get_colored_shadow(vec3 the_shadow_pos, float dither) { - - #if SHADOW_TYPE == 0 // Pixelated - float shadow_detector = 1.0; - float shadow_black = 1.0; - vec4 shadow_color = vec4(1.0); - - float alpha_complement; - - shadow_detector = shadow2D(shadowtex0, vec3(the_shadow_pos.xy, the_shadow_pos.z)).r; - if (shadow_detector < 1.0) { - shadow_black = shadow2D(shadowtex1, vec3(the_shadow_pos.xy, the_shadow_pos.z)).r; - if (shadow_black != shadow_detector) { - shadow_color = texture2D(shadowcolor0, the_shadow_pos.xy); - alpha_complement = 1.0 - shadow_color.a; - shadow_color.rgb = mix(shadow_color.rgb, vec3(1.0), alpha_complement); - shadow_color.rgb *= alpha_complement; - } - } - - shadow_color *= shadow_black; - shadow_color.rgb = clamp(shadow_color.rgb * (1.0 - shadow_detector) + shadow_detector, vec3(0.0), vec3(1.0)); - - return shadow_color.rgb; - - #elif SHADOW_TYPE == 1 // Soft - float shadow_detector_a = 1.0; - float shadow_black_a = 1.0; - vec4 shadow_color_a = vec4(1.0); - - float shadow_detector_b = 1.0; - float shadow_black_b = 1.0; - vec4 shadow_color_b = vec4(1.0); - - float alpha_complement; - - float current_radius = dither; - dither *= 6.283185307179586; - - vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; - float z_bias = dither * 0.00002; - - shadow_detector_a = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; - shadow_detector_b = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; - - if (shadow_detector_a < 1.0) { - shadow_black_a = shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; - if (shadow_black_a != shadow_detector_a) { - shadow_color_a = texture2D(shadowcolor0, the_shadow_pos.xy + offset); - alpha_complement = 1.0 - shadow_color_a.a; - shadow_color_a.rgb = mix(shadow_color_a.rgb, vec3(1.0), alpha_complement); - shadow_color_a.rgb *= alpha_complement; - } - } - - shadow_color_a *= shadow_black_a; - - if (shadow_detector_b < 1.0) { - shadow_black_b = shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; - if (shadow_black_b != shadow_detector_b) { - shadow_color_b = texture2D(shadowcolor0, the_shadow_pos.xy - offset); - alpha_complement = 1.0 - shadow_color_b.a; - shadow_color_b.rgb = mix(shadow_color_b.rgb, vec3(1.0), alpha_complement); - shadow_color_b.rgb *= alpha_complement; - } - } - - shadow_color_b *= shadow_black_b; - - shadow_detector_a = (shadow_detector_a + shadow_detector_b); - shadow_detector_a *= 0.5; - - shadow_color_a.rgb = (shadow_color_a.rgb + shadow_color_b.rgb) * 0.5; - shadow_color_a.rgb = mix(shadow_color_a.rgb, vec3(1.0), shadow_detector_a); - - return shadow_color_a.rgb; - #endif - - } + vec3 get_colored_shadow(vec3 the_shadow_pos, float dither) { + #if SHADOW_TYPE == 0 // Pixelated + float shadow_detector = 1.0; + float shadow_black = 1.0; + vec4 shadowColor = vec4(1.0); + + float alpha_complement; + + shadow_detector = shadow2D(shadowtex0, vec3(the_shadow_pos.xy, the_shadow_pos.z)).r; + if (shadow_detector < 1.0) { + shadow_black = shadow2D(shadowtex1, vec3(the_shadow_pos.xy, the_shadow_pos.z)).r; + if (shadow_black != shadow_detector) { + shadowColor = texture2D(shadowcolor0, the_shadow_pos.xy); + alpha_complement = 1.0 - shadowColor.a; + shadowColor.rgb = mix(shadowColor.rgb, vec3(1.0), alpha_complement); + shadowColor.rgb *= alpha_complement; + } + } + + shadowColor *= shadow_black; + shadowColor.rgb = clamp(shadowColor.rgb * (1.0 - shadow_detector) + shadow_detector, vec3(0.0), vec3(1.0)); + + return shadowColor.rgb; + + #elif SHADOW_TYPE == 1 // Soft + float shadow_detector_a = 1.0; + float shadow_black_a = 1.0; + vec4 shadow_color_a = vec4(1.0); + + float shadow_detector_b = 1.0; + float shadow_black_b = 1.0; + vec4 shadow_color_b = vec4(1.0); + + float shadow_detector_c = 1.0; + float shadow_black_c = 1.0; + vec4 shadow_color_c = vec4(1.0); + + float shadow_detector_d = 1.0; + float shadow_black_d = 1.0; + vec4 shadow_color_d = vec4(1.0); + + float alpha_complement; + + float current_radius = dither; + dither *= 6.283185307179586; + float dither_2 = dither + 1.5707963267948966; + + vec2 offset = (vec2(cos(dither), sin(dither)) * current_radius * SHADOW_BLUR) / shadowMapResolution; + vec2 offset2 = (vec2(cos(dither_2), sin(dither_2)) * (1.0 - current_radius) * SHADOW_BLUR) / shadowMapResolution; + // vec2 offset2 = vec2(-offset.y, offset.x); + + float z_bias = dither * 0.00002; + + shadow_detector_a = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; + shadow_detector_b = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; + shadow_detector_c = shadow2D(shadowtex0, vec3(the_shadow_pos.xy + offset2, the_shadow_pos.z - z_bias)).r; + shadow_detector_d = shadow2D(shadowtex0, vec3(the_shadow_pos.xy - offset2, the_shadow_pos.z - z_bias)).r; + + if (shadow_detector_a < 1.0) { + shadow_black_a = shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset, the_shadow_pos.z - z_bias)).r; + if (shadow_black_a != shadow_detector_a) { + shadow_color_a = texture2D(shadowcolor0, the_shadow_pos.xy + offset); + alpha_complement = 1.0 - shadow_color_a.a; + shadow_color_a.rgb = mix(shadow_color_a.rgb, vec3(1.0), alpha_complement); + shadow_color_a.rgb *= alpha_complement; + } + } + + shadow_color_a *= shadow_black_a; + + if (shadow_detector_b < 1.0) { + shadow_black_b = shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset, the_shadow_pos.z - z_bias)).r; + if (shadow_black_b != shadow_detector_b) { + shadow_color_b = texture2D(shadowcolor0, the_shadow_pos.xy - offset); + alpha_complement = 1.0 - shadow_color_b.a; + shadow_color_b.rgb = mix(shadow_color_b.rgb, vec3(1.0), alpha_complement); + shadow_color_b.rgb *= alpha_complement; + } + } + + shadow_color_b *= shadow_black_b; + + if (shadow_detector_c < 1.0) { + shadow_black_c = shadow2D(shadowtex1, vec3(the_shadow_pos.xy + offset2, the_shadow_pos.z - z_bias)).r; + if (shadow_black_c != shadow_detector_c) { + shadow_color_c = texture2D(shadowcolor0, the_shadow_pos.xy + offset2); + alpha_complement = 1.0 - shadow_color_c.a; + shadow_color_c.rgb = mix(shadow_color_c.rgb, vec3(1.0), alpha_complement); + shadow_color_c.rgb *= alpha_complement; + } + } + + shadow_color_c *= shadow_black_c; + + if (shadow_detector_d < 1.0) { + shadow_black_d = shadow2D(shadowtex1, vec3(the_shadow_pos.xy - offset2, the_shadow_pos.z - z_bias)).r; + if (shadow_black_d != shadow_detector_d) { + shadow_color_d = texture2D(shadowcolor0, the_shadow_pos.xy - offset2); + alpha_complement = 1.0 - shadow_color_d.a; + shadow_color_d.rgb = mix(shadow_color_d.rgb, vec3(1.0), alpha_complement); + shadow_color_d.rgb *= alpha_complement; + } + } + + shadow_color_d *= shadow_black_d; + + shadow_detector_a = (shadow_detector_a + shadow_detector_b + shadow_detector_c + shadow_detector_d); + shadow_detector_a *= 0.25; + + shadow_color_a.rgb = (shadow_color_a.rgb + shadow_color_b.rgb + shadow_color_c.rgb + shadow_color_d.rgb) * 0.25; + shadow_color_a.rgb = mix(shadow_color_a.rgb, vec3(1.0), shadow_detector_a); + + return shadow_color_a.rgb; + #endif + } #endif diff --git a/shaders/lib/shadow_vertex.glsl b/shaders/lib/shadow_vertex.glsl index ea4b320f..8c0969a7 100644 --- a/shaders/lib/shadow_vertex.glsl +++ b/shaders/lib/shadow_vertex.glsl @@ -6,15 +6,15 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define diagonal3(m) vec3((m)[0].x, (m)[1].y, m[2].z) -vec3 get_shadow_pos(vec3 shadow_pos) { - shadow_pos = mat3(shadowModelView) * shadow_pos + shadowModelView[3].xyz; - shadow_pos = diagonal3(shadowProjection) * shadow_pos + shadowProjection[3].xyz; +vec3 get_shadow_pos(vec3 shadowPos) { + shadowPos = mat3(shadowModelView) * shadowPos + shadowModelView[3].xyz; + shadowPos = diagonal3(shadowProjection) * shadowPos + shadowProjection[3].xyz; - float distb = length(shadow_pos.xy); - float distortion = distb * SHADOW_DIST + (1.0 - SHADOW_DIST); + float distb = length(shadowPos.xy); + float distortion = distb * SHADOW_DIST + (1.0 - SHADOW_DIST); - shadow_pos.xy /= distortion; - shadow_pos.z *= 0.2; - - return shadow_pos * 0.5 + 0.5; + shadowPos.xy /= distortion; + shadowPos.z *= 0.2; + + return shadowPos * 0.5 + 0.5; } diff --git a/shaders/lib/tone_maps.glsl b/shaders/lib/tone_maps.glsl index 4ab41993..6eff90f0 100644 --- a/shaders/lib/tone_maps.glsl +++ b/shaders/lib/tone_maps.glsl @@ -4,24 +4,16 @@ Tonemap functions. Javier Garduño - GNU Lesser General Public License v3.0 */ -vec3 custom_sigmoid(vec3 color) { - color = 1.4 * color; - color = color / pow(pow(color, vec3(3.0)) + 1.0, vec3(0.3333333333333)); - - return pow(color, vec3(1.15)); -} - // vec3 custom_sigmoid(vec3 color) { -// // ((1.4 ∙ x) / ((1.4 ∙ x)^2.5 + 1)^0.4)^1.1 // color = 1.4 * color; -// color = color / pow(pow(color, vec3(2.5)) + 1.0, vec3(0.4)); +// color = color / pow(pow(color, vec3(3.0)) + 1.0, vec3(0.3333333333333)); -// return pow(color, vec3(1.1)); +// return pow(color, vec3(1.15)); // } -vec3 custom_sigmoid_alt(vec3 color) { +vec3 custom_sigmoid(vec3 color) { color = 1.4 * color; - color = color / pow(pow(color, vec3(3.05)) + 1.0, vec3(0.3278688524590164)); + color = color / pow(pow(color, vec3(2.5)) + 1.0, vec3(0.4)); return pow(color, vec3(1.15)); } \ No newline at end of file diff --git a/shaders/lib/vector_utils.glsl b/shaders/lib/vector_utils.glsl index a86aea25..da78a702 100644 --- a/shaders/lib/vector_utils.glsl +++ b/shaders/lib/vector_utils.glsl @@ -5,13 +5,13 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ vec3 wave_move(vec3 pos) { - float timer = (frameTimeCounter) * 3.141592653589793; - pos = mod(pos, 157.07963267948966); // PI * 25 - vec2 wave_x = vec2(timer * 0.5, timer) + pos.xy; - vec2 wave_z = vec2(timer, timer * 1.5) + pos.xy; - vec2 wave_y = vec2(timer * 0.5, timer * 0.25) - pos.zx; + float timer = (frameTimeCounter) * 3.141592653589793; + pos = mod(pos, 157.07963267948966); // PI * 25 + vec2 wave_x = vec2(timer * 0.5, timer) + pos.xy; + vec2 wave_z = vec2(timer, timer * 1.5) + pos.xy; + vec2 wave_y = vec2(timer * 0.5, timer * 0.25) - pos.zx; - wave_x = sin(wave_x + wave_y); - wave_z = cos(wave_z + wave_y); - return vec3(wave_x.x + wave_x.y, 0.0, wave_z.x + wave_z.y); + wave_x = sin(wave_x + wave_y); + wave_z = cos(wave_z + wave_y); + return vec3(wave_x.x + wave_x.y, 0.0, wave_z.x + wave_z.y); } diff --git a/shaders/lib/volumetric_clouds.glsl b/shaders/lib/volumetric_clouds.glsl index 1bf55afa..f4c32d40 100644 --- a/shaders/lib/volumetric_clouds.glsl +++ b/shaders/lib/volumetric_clouds.glsl @@ -2,155 +2,105 @@ Fast volumetric clouds - MakeUp implementation */ -vec3 get_cloud(vec3 view_vector, vec3 block_color, float bright, float dither, vec3 base_pos, int samples, float umbral, vec3 cloud_color, vec3 dark_cloud_color) { - float plane_distance; - float cloud_value; - float density; - vec3 intersection_pos; - vec3 intersection_pos_sup; - float dif_inf; - float dif_sup; - float dist_aux_coeff; - float current_value; - float surface_inf; - float surface_sup; - bool first_contact = true; - float opacity_dist; - vec3 increment; - float increment_dist; - int real_steps; - float view_y_inv = 1.0 / view_vector.y; - float distance_aux; - float cloud_value_aux; - float dist_aux_coeff_blur; - - #if VOL_LIGHT == 0 - block_color.rgb *= - clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; - #endif - - #if defined DISTANT_HORIZONS && defined DEFERRED_SHADER - float d_dh = texture2D(dhDepthTex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight)).r; - float linear_d_dh = ld_dh(d_dh); - if (linear_d_dh < 0.9999) { - return block_color; - } - #endif - - if (view_vector.y > 0.0) { // Vista sobre el horizonte - - plane_distance = (CLOUD_PLANE - base_pos.y) * view_y_inv; - intersection_pos = (view_vector * plane_distance) + base_pos; - - plane_distance = (CLOUD_PLANE_SUP - base_pos.y) * view_y_inv; - intersection_pos_sup = (view_vector * plane_distance) + base_pos; - - dif_sup = CLOUD_PLANE_SUP - CLOUD_PLANE_CENTER; - dif_inf = CLOUD_PLANE_CENTER - CLOUD_PLANE; - dist_aux_coeff = (CLOUD_PLANE_SUP - CLOUD_PLANE) * 0.075; - dist_aux_coeff_blur = dist_aux_coeff * 0.3; - - opacity_dist = dist_aux_coeff * 2.0 * view_y_inv; - - increment = (intersection_pos_sup - intersection_pos) / samples; - increment_dist = length(increment); - - cloud_value = 0.0; - - intersection_pos += (increment * dither); - - for (int i = 0; i < samples; i++) { - #if CLOUD_VOL_STYLE == 0 - current_value = - texture2D( - gaux2, - (intersection_pos.xz * 0.0002777777777777778) + (frameTimeCounter * CLOUD_HI_FACTOR) - ).r; - - #else - current_value = - texture2D( - colortex2, - (intersection_pos.xz * 0.0002777777777777778) + (frameTimeCounter * CLOUD_HI_FACTOR) - ).g; - #endif - - #if V_CLOUDS == 2 && CLOUD_VOL_STYLE == 0 - current_value += - texture2D( - gaux2, - (intersection_pos.zx * 0.0002777777777777778) + (frameTimeCounter * CLOUD_LOW_FACTOR) - ).r; - - current_value *= 0.5; - current_value = smoothstep(0.05, 0.95, current_value); - - #endif - - // Ajuste por umbral - current_value = (current_value - umbral) / (1.0 - umbral); - - // Superficies inferior y superior de nubes - surface_inf = CLOUD_PLANE_CENTER - (current_value * dif_inf); - surface_sup = CLOUD_PLANE_CENTER + (current_value * dif_sup); - - if ( // Dentro de la nube - intersection_pos.y > surface_inf && - intersection_pos.y < surface_sup - ) { - cloud_value += min(increment_dist, surface_sup - surface_inf); - - if (first_contact) { - first_contact = false; - density = - (surface_sup - intersection_pos.y) / - (CLOUD_PLANE_SUP - CLOUD_PLANE); - } - } - else if (surface_inf < surface_sup && i > 0) { // Fuera de la nube - distance_aux = min( - abs(intersection_pos.y - surface_inf), - abs(intersection_pos.y - surface_sup) - ); - - if (distance_aux < dist_aux_coeff_blur) { - cloud_value += min( - (clamp(dist_aux_coeff_blur - distance_aux, 0.0, dist_aux_coeff_blur) / dist_aux_coeff_blur) * increment_dist, - surface_sup - surface_inf - ); - - if (first_contact) { - first_contact = false; - density = - (surface_sup - intersection_pos.y) / - (CLOUD_PLANE_SUP - CLOUD_PLANE); - } +vec3 get_cloud(vec3 eyeDirection, vec3 blockColor, float bright, float dither, vec3 base_pos, int samples, float umbral, vec3 cloudColor, vec3 darkCloudColor) { + #if VOL_LIGHT == 0 + blockColor.rgb *= clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; + #endif + + #if defined DISTANT_HORIZONS && defined DEFERRED_SHADER + float d_dh = texture2D(dhDepthTex0, gl_FragCoord.xy / vec2(viewWidth, viewHeight)).r; + float linear_d_dh = ld_dh(d_dh); + if (linear_d_dh < 0.9999) { + return blockColor; } - } + #endif - intersection_pos += increment; - } + if (eyeDirection.y > 0.0) { // Over horizon + float view_y_inv = 1.0 / eyeDirection.y; - cloud_value = clamp(cloud_value / opacity_dist, 0.0, 1.0); - density = clamp(density, 0.0001, 1.0); + float plane_distance_inf = (CLOUD_PLANE - base_pos.y) * view_y_inv; + vec3 intersection_pos = (eyeDirection * plane_distance_inf) + base_pos; - float att_factor = mix(1.0, 0.75, bright * (1.0 - rainStrength)); + float plane_distance_sup = (CLOUD_PLANE_SUP - base_pos.y) * view_y_inv; + vec3 intersection_pos_sup = (eyeDirection * plane_distance_sup) + base_pos; - #if CLOUD_VOL_STYLE == 1 - cloud_color = mix(cloud_color * att_factor, dark_cloud_color * att_factor, pow(density, 0.3) * 0.85); - #else - cloud_color = mix(cloud_color * att_factor, dark_cloud_color * att_factor, pow(density, 0.4)); - #endif + float dif_sup = CLOUD_PLANE_SUP - CLOUD_PLANE_CENTER; + float dif_inf = CLOUD_PLANE_CENTER - CLOUD_PLANE; + + vec3 increment = (intersection_pos_sup - intersection_pos) / samples; + + float increment_dist = length(increment); + + float dist_aux_coeff = (CLOUD_PLANE_SUP - CLOUD_PLANE) * 0.075; + float dist_aux_coeff_blur = dist_aux_coeff * 0.3; + float opacity_dist = dist_aux_coeff * 2.0 * view_y_inv; + + float cloud_value = 0.0; + float density = 0.0; // Inicializar + bool first_contact = true; + + intersection_pos += (increment * dither); + + for (int i = 0; i < samples; i++) { + float current_value = texture2D(gaux2, (intersection_pos.xz * 0.0002777777777777778) + (frameTimeCounter * CLOUD_HI_FACTOR)).r; + + #if V_CLOUDS == 2 && CLOUD_VOL_STYLE == 0 + current_value += texture2D(gaux2, (intersection_pos.zx * 0.0002777777777777778) + (frameTimeCounter * CLOUD_LOW_FACTOR)).r; + current_value = smoothstep(0.05, 0.95, current_value * 0.5); + #endif - // Halo brillante de contra al sol - cloud_color = mix(cloud_color, cloud_color * 13.0, (1.0 - pow(cloud_value, 0.2)) * bright * bright * (1.0 - rainStrength)); + current_value = (current_value - umbral) / (1.0 - umbral); - block_color = mix( - block_color, - cloud_color, - cloud_value * clamp((view_vector.y - 0.06) * 5.0, 0.0, 1.0) - ); - } + float surface_inf = CLOUD_PLANE_CENTER - (current_value * dif_inf); + float surface_sup = CLOUD_PLANE_CENTER + (current_value * dif_sup); + + float current_opacity = 0.0; + float cloud_thickness = surface_sup - surface_inf; + + if (intersection_pos.y > surface_inf && intersection_pos.y < surface_sup) { + // Dentro de la nube + current_opacity = min(increment_dist, cloud_thickness); + } + else if (cloud_thickness > 0.0 && i > 0) { + // Cerca del borde de la nube (desenfoque) + float distance_aux = min(abs(intersection_pos.y - surface_inf), abs(intersection_pos.y - surface_sup)); + if (distance_aux < dist_aux_coeff_blur) { + float blur_factor = 1.0 - (distance_aux / dist_aux_coeff_blur); + current_opacity = min(blur_factor * increment_dist, cloud_thickness); + } + } + + if (current_opacity > 0.0) { + cloud_value += current_opacity; + if (first_contact) { + first_contact = false; + density = (surface_sup - intersection_pos.y) / (CLOUD_PLANE_SUP - CLOUD_PLANE); + } + } + + intersection_pos += increment; + } + + cloud_value = clamp(cloud_value / opacity_dist, 0.0, 1.0); + density = clamp(density, 0.0001, 1.0); + + float att_factor = mix(1.0, 0.75, bright * (1.0 - rainStrength)); + + // --- OPTIMIZACIÓN: Reemplazar pow() por aproximaciones con sqrt() --- + // pow(x, 0.25) es mucho más rápido y visualmente casi idéntico a pow(x, 0.3) o pow(x, 0.4) + float density_approx = sqrt(sqrt(density)); // x^0.25 + + #if CLOUD_VOL_STYLE == 1 + cloudColor = mix(cloudColor * att_factor, darkCloudColor * att_factor, density_approx * 0.85); + #else + cloudColor = mix(cloudColor * att_factor, darkCloudColor * att_factor, sqrt(density)); + #endif + + float cloud_value_approx = sqrt(sqrt(cloud_value)); + cloudColor = mix(cloudColor, cloudColor * 13.0, (1.0 - cloud_value_approx) * bright * bright * (1.0 - rainStrength)); + + blockColor = mix(blockColor, cloudColor, cloud_value * clamp((eyeDirection.y - 0.06) * 5.0, 0.0, 1.0)); + } - return block_color; + return blockColor; } diff --git a/shaders/lib/volumetric_clouds_end.glsl b/shaders/lib/volumetric_clouds_end.glsl index ddbe578e..dc72f777 100644 --- a/shaders/lib/volumetric_clouds_end.glsl +++ b/shaders/lib/volumetric_clouds_end.glsl @@ -2,153 +2,97 @@ Fast volumetric clouds (for The End) - MakeUp implementation */ -vec3 get_end_cloud(vec3 view_vector, vec3 block_color, float bright, float dither, vec3 base_pos, int samples) { - float plane_distance; - float cloud_value; - float umbral; - float density; - vec3 intersection_pos; - vec3 intersection_pos_sup; - float dif_inf; - float dif_sup; - float dist_aux_coeff; - float current_value; - float surface_inf; - float surface_sup; - bool first_contact = true; - float opacity_dist; - vec3 increment; - float increment_dist; - int real_steps; - float view_y_inv = 1.0 / view_vector.y; - float distance_aux; - vec3 cloud_color_aux; - float cloud_value_aux; - float dist_aux_coeff_blur; - - block_color.rgb *= - clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; - - #if defined DISTANT_HORIZONS && defined DEFERRED_SHADER - float d_dh = texture2D(dhDepthTex0, vec2(gl_FragCoord.x / viewWidth, gl_FragCoord.y / viewHeight)).r; - float linear_d_dh = ld_dh(d_dh); - if (linear_d_dh < 0.9999) { - return block_color; - } - #endif - - if (view_vector.y > 0.0) { // Vista sobre el horizonte - umbral = 0.25; - - vec3 cloud_color = block_color * 1.75; - vec3 dark_cloud_color = block_color * 0.9; - - plane_distance = (CLOUD_PLANE - base_pos.y) * view_y_inv; - intersection_pos = (view_vector * plane_distance) + base_pos; - - plane_distance = (CLOUD_PLANE_SUP - base_pos.y) * view_y_inv; - intersection_pos_sup = (view_vector * plane_distance) + base_pos; - - dif_sup = CLOUD_PLANE_SUP - CLOUD_PLANE_CENTER; - dif_inf = CLOUD_PLANE_CENTER - CLOUD_PLANE; - dist_aux_coeff = (CLOUD_PLANE_SUP - CLOUD_PLANE) * 0.075; - dist_aux_coeff_blur = dist_aux_coeff * 0.4; - - opacity_dist = dist_aux_coeff * 2.5 * view_y_inv; - - increment = (intersection_pos_sup - intersection_pos) / samples; - increment_dist = length(increment); - - cloud_value = 0.0; - - intersection_pos += (increment * dither); - - for (int i = 0; i < samples; i++) { - #if CLOUD_VOL_STYLE == 0 - current_value = - texture2D( - gaux2, - (intersection_pos.xz * .0008) + (frameTimeCounter * CLOUD_HI_FACTOR * 3.0) - ).r; - #else - current_value = - texture2D( - colortex2, - (intersection_pos.xz * .0008) + (frameTimeCounter * CLOUD_HI_FACTOR * 3.0) - ).r; - #endif - - #if V_CLOUDS == 2 && CLOUD_VOL_STYLE == 0 - current_value += - texture2D( - gaux2, - (intersection_pos.zx * .0008) + (frameTimeCounter * CLOUD_LOW_FACTOR * 3.0) - ).r; - current_value *= 0.5; - current_value = smoothstep(0.05, 0.95, current_value); - #endif - - // Ajuste por umbral - current_value = (current_value - umbral) / (1.0 - umbral); - - // Superficies inferior y superior de nubes - surface_inf = CLOUD_PLANE_CENTER - (current_value * dif_inf); - surface_sup = CLOUD_PLANE_CENTER + (current_value * dif_sup); - - if ( // Dentro de la nube - intersection_pos.y > surface_inf && - intersection_pos.y < surface_sup - ) { - cloud_value += min(increment_dist, surface_sup - surface_inf); - - if (first_contact) { - first_contact = false; - density = - (surface_sup - intersection_pos.y) / - (CLOUD_PLANE_SUP - CLOUD_PLANE); - } - } - else if (surface_inf < surface_sup && i > 0) { // Fuera de la nube - distance_aux = min( - abs(intersection_pos.y - surface_inf), - abs(intersection_pos.y - surface_sup) - ); - - if (distance_aux < dist_aux_coeff_blur) { - cloud_value += min( - (clamp(dist_aux_coeff_blur - distance_aux, 0.0, dist_aux_coeff_blur) / dist_aux_coeff_blur) * increment_dist, - surface_sup - surface_inf - ); - - if (first_contact) { - first_contact = false; - density = - (surface_sup - intersection_pos.y) / - (CLOUD_PLANE_SUP - CLOUD_PLANE); - } +vec3 get_end_cloud(vec3 eyeDirection, vec3 blockColor, float bright, float dither, vec3 base_pos, int samples) { + blockColor.rgb *= clamp(bright + ((dither - .5) * .1), 0.0, 1.0) * .3 + 1.0; + + #if defined DISTANT_HORIZONS && defined DEFERRED_SHADER + float d_dh = texture2DLod(dhDepthTex0, gl_FragCoord.xy / vec2(viewWidth, viewHeight), 0.0).r; + float linear_d_dh = ld_dh(d_dh); + if (linear_d_dh < 0.9999) { + return blockColor; + } + #endif + + if (eyeDirection.y > 0.0) { // Vista sobre el horizonte + float umbral = 0.25; + vec3 cloudColor = blockColor * 1.75; + vec3 darkCloudColor = blockColor * 0.9; + + float view_y_inv = 1.0 / eyeDirection.y; + + float plane_distance_inf = (CLOUD_PLANE - base_pos.y) * view_y_inv; + vec3 intersection_pos = (eyeDirection * plane_distance_inf) + base_pos; + + float plane_distance_sup = (CLOUD_PLANE_SUP - base_pos.y) * view_y_inv; + vec3 intersection_pos_sup = (eyeDirection * plane_distance_sup) + base_pos; + + vec3 increment = (intersection_pos_sup - intersection_pos) / samples; + float increment_dist = length(increment); + + float dif_sup = CLOUD_PLANE_SUP - CLOUD_PLANE_CENTER; + float dif_inf = CLOUD_PLANE_CENTER - CLOUD_PLANE; + float dist_aux_coeff = (CLOUD_PLANE_SUP - CLOUD_PLANE) * 0.075; + float dist_aux_coeff_blur = dist_aux_coeff * 0.4; + float opacity_dist = dist_aux_coeff * 2.5 * view_y_inv; + + float cloud_value = 0.0; + float density = 0.0; // Inicializar + bool first_contact = true; + + intersection_pos += (increment * dither); + + for (int i = 0; i < samples; i++) { + float current_value = texture2D(gaux2, (intersection_pos.xz * .0008) + (frameTimeCounter * CLOUD_HI_FACTOR * 3.0)).r; + + #if V_CLOUDS == 2 && CLOUD_VOL_STYLE == 0 + current_value += texture2D(gaux2, (intersection_pos.zx * .0008) + (frameTimeCounter * CLOUD_LOW_FACTOR * 3.0)).r; + current_value = smoothstep(0.05, 0.95, current_value * 0.5); + #endif + + current_value = (current_value - umbral) / (1.0 - umbral); + + float surface_inf = CLOUD_PLANE_CENTER - (current_value * dif_inf); + float surface_sup = CLOUD_PLANE_CENTER + (current_value * dif_sup); + + // --- OPTIMIZACIÓN: Reestructurar la lógica del bucle --- + float current_opacity = 0.0; + float cloud_thickness = surface_sup - surface_inf; + + if (intersection_pos.y > surface_inf && intersection_pos.y < surface_sup) { + // Dentro de la nube + current_opacity = min(increment_dist, cloud_thickness); + } + else if (cloud_thickness > 0.0 && i > 0) { + // Cerca del borde de la nube (desenfoque) + float distance_aux = min(abs(intersection_pos.y - surface_inf), abs(intersection_pos.y - surface_sup)); + if (distance_aux < dist_aux_coeff_blur) { + // El cálculo original se simplifica a esto, que es más rápido. + float blur_factor = 1.0 - (distance_aux / dist_aux_coeff_blur); + current_opacity = min(blur_factor * increment_dist, cloud_thickness); + } + } + + // La lógica de acumulación y primer contacto se gestiona UNA SOLA VEZ. + if (current_opacity > 0.0) { + cloud_value += current_opacity; + if (first_contact) { + first_contact = false; + density = (surface_sup - intersection_pos.y) / (CLOUD_PLANE_SUP - CLOUD_PLANE); + } + } + + intersection_pos += increment; } - } - - intersection_pos += increment; - } - - cloud_value = clamp(cloud_value / opacity_dist, 0.0, 1.0); - density = clamp(density, 0.0001, 1.0); - cloud_color = mix(cloud_color, dark_cloud_color, sqrt(density)); + cloud_value = clamp(cloud_value / opacity_dist, 0.0, 1.0); + density = clamp(density, 0.0001, 1.0); - // Halo brillante de contra al sol - cloud_color = mix(cloud_color, cloud_color * 2.0, (1.0 - cloud_value) * bright); + cloudColor = mix(cloudColor, darkCloudColor, sqrt(density)); + cloudColor = mix(cloudColor, cloudColor * 2.0, (1.0 - cloud_value) * bright); - block_color = mix( - block_color, - cloud_color, - cloud_value * clamp((view_vector.y - 0.06) * 5.0, 0.0, 1.0) - ); - - block_color = - mix(block_color, vec3(1.0), clamp(bright * .04, 0.0, 1.0)); - } + blockColor = mix(blockColor, cloudColor, cloud_value * clamp((eyeDirection.y - 0.06) * 5.0, 0.0, 1.0)); + blockColor = mix(blockColor, vec3(1.0), clamp(bright * .04, 0.0, 1.0)); + } - return block_color; + return blockColor; } \ No newline at end of file diff --git a/shaders/lib/volumetric_clouds_vertex.glsl b/shaders/lib/volumetric_clouds_vertex.glsl index cc0edb19..f38170bd 100644 --- a/shaders/lib/volumetric_clouds_vertex.glsl +++ b/shaders/lib/volumetric_clouds_vertex.glsl @@ -1,51 +1,51 @@ #if MC_VERSION >= 11300 - umbral = (smoothstep(1.0, 0.0, rainStrength) * .3) + .25; + umbral = (smoothstep(1.0, 0.0, rainStrength) * .3) + .25; #else - umbral = (smoothstep(1.0, 0.0, rainStrength) * .3) + .55; + umbral = (smoothstep(1.0, 0.0, rainStrength) * .3) + .55; #endif -dark_cloud_color = day_blend( - ZENITH_SUNSET_COLOR, - ZENITH_DAY_COLOR, - ZENITH_NIGHT_COLOR +darkCloudColor = dayBlend( + ZENITH_SUNSET_COLOR, + ZENITH_DAY_COLOR, + ZENITH_NIGHT_COLOR ); -dark_cloud_color = mix( - dark_cloud_color, - ZENITH_SKY_RAIN_COLOR * color_average(dark_cloud_color), - rainStrength +darkCloudColor = mix( + darkCloudColor, + ZENITH_SKY_RAIN_COLOR * colorAverage(darkCloudColor), + rainStrength ); -vec3 cloud_color_aux = mix( -day_blend( - LIGHT_SUNSET_COLOR, - LIGHT_DAY_COLOR, - LIGHT_NIGHT_COLOR * vec3(0.5, 0.6, 0.75) -), -ZENITH_SKY_RAIN_COLOR * color_average(dark_cloud_color), -rainStrength +vec3 cloudColor_aux = mix( + dayBlend( + LIGHT_SUNSET_COLOR, + LIGHT_DAY_COLOR, + LIGHT_NIGHT_COLOR * vec3(0.5, 0.6, 0.75) + ), + ZENITH_SKY_RAIN_COLOR * colorAverage(darkCloudColor), + rainStrength ); -cloud_color = mix( - clamp(mix(vec3(luma(cloud_color_aux)), cloud_color_aux, 0.5) * vec3(1.5), 0.0, 1.4), - day_blend( - HORIZON_SUNSET_COLOR, - HORIZON_DAY_COLOR, - HORIZON_NIGHT_COLOR - ), - 0.3 +cloudColor = mix( + clamp(mix(vec3(luma(cloudColor_aux)), cloudColor_aux, 0.5) * vec3(1.5), 0.0, 1.4), + dayBlend( + HORIZON_SUNSET_COLOR, + HORIZON_DAY_COLOR, + HORIZON_NIGHT_COLOR + ), + 0.3 ); -cloud_color = mix(cloud_color, HORIZON_SKY_RAIN_COLOR * luma(cloud_color_aux) * 5.0, rainStrength); +cloudColor = mix(cloudColor, HORIZON_SKY_RAIN_COLOR * luma(cloudColor_aux) * 5.0, rainStrength); -dark_cloud_color = mix(dark_cloud_color, cloud_color, 0.22); +darkCloudColor = mix(darkCloudColor, cloudColor, 0.22); -dark_cloud_color = mix( -dark_cloud_color, -day_blend( - cloud_color_aux, - dark_cloud_color, - dark_cloud_color -), -0.4 +darkCloudColor = mix( + darkCloudColor, + dayBlend( + cloudColor_aux, + darkCloudColor, + darkCloudColor + ), + 0.4 ); \ No newline at end of file diff --git a/shaders/lib/volumetric_light.glsl b/shaders/lib/volumetric_light.glsl index 5feda6fc..15f3bb97 100644 --- a/shaders/lib/volumetric_light.glsl +++ b/shaders/lib/volumetric_light.glsl @@ -4,129 +4,114 @@ Volumetric light - MakeUp implementation #if VOL_LIGHT == 2 - #define diagonal3(m) vec3((m)[0].x, (m)[1].y, m[2].z) - - vec3 get_volumetric_pos(vec3 shadow_pos) { - shadow_pos = mat3(shadowModelView) * shadow_pos + shadowModelView[3].xyz; - shadow_pos = diagonal3(shadowProjection) * shadow_pos + shadowProjection[3].xyz; - float distb = length(shadow_pos.xy); - float distortion = distb * SHADOW_DIST + (1.0 - SHADOW_DIST); - - shadow_pos.xy /= distortion; - shadow_pos.z *= 0.2; - - return shadow_pos * 0.5 + 0.5; - } + #define diagonal3(m) vec3((m)[0].x, (m)[1].y, m[2].z) - float get_volumetric_light(float dither, float view_distance, mat4 modeli_times_projectioni) { - float light = 0.0; + vec3 get_volumetric_pos(vec3 shadowPos) { + shadowPos = mat3(shadowModelView) * shadowPos + shadowModelView[3].xyz; + shadowPos = diagonal3(shadowProjection) * shadowPos + shadowProjection[3].xyz; + float distb = length(shadowPos.xy); + float distortion = distb * SHADOW_DIST + (1.0 - SHADOW_DIST); - float current_depth; - vec3 view_pos; - vec4 pos; - vec3 shadow_pos; + shadowPos.xy /= distortion; + shadowPos.z *= 0.2; + + return shadowPos * 0.5 + 0.5; + } - for (int i = 0; i < GODRAY_STEPS; i++) { - // Exponentialy spaced shadow samples - current_depth = exp2(i + dither) - 0.6; - if (current_depth > view_distance) { - break; - } + float get_volumetric_light(float dither, float visibleDistance, mat4 modeli_times_projectioni) { + float light = 0.0; - // Distance to depth - current_depth = (far * (current_depth - near)) / (current_depth * (far - near)); + float currentDistance; + vec3 viewPos; + vec4 pos; + vec3 shadowPos; - view_pos = vec3(texcoord, current_depth); + for (int i = 0; i < GODRAY_STEPS; i++) { + // Exponentialy spaced shadow samples + currentDistance = exp2(i + dither) - 0.6; + if (currentDistance > visibleDistance) { + break; + } - // Clip to world - pos = modeli_times_projectioni * (vec4(view_pos, 1.0) * 2.0 - 1.0); - view_pos = (pos.xyz /= pos.w).xyz; + // Distance to depth + currentDistance = (far * (currentDistance - near)) / (currentDistance * (far - near)); - shadow_pos = get_volumetric_pos(view_pos); + viewPos = vec3(texcoord, currentDistance); - light += shadow2D(shadowtex1, shadow_pos).r; - } + // Clip to world + pos = modeli_times_projectioni * (vec4(viewPos, 1.0) * 2.0 - 1.0); + viewPos = (pos.xyz /= pos.w).xyz; - light /= GODRAY_STEPS; + shadowPos = get_volumetric_pos(viewPos); + light += shadow2D(shadowtex1, shadowPos).r; + } - return light * light; - } + light /= GODRAY_STEPS; + + return light * light; + } - #if defined COLORED_SHADOW + #if defined COLORED_SHADOW - vec3 get_volumetric_color_light(float dither, float view_distance, mat4 modeli_times_projectioni) { - float light = 0.0; + vec3 get_volumetric_color_light(float dither, float visibleDistance, mat4 modeli_times_projectioni) { + float light = 0.0; - float current_depth; - vec3 view_pos; - vec4 pos; - vec3 shadow_pos; + float currentDistance; + vec3 viewPos; + vec4 pos; + vec3 shadowPos; - float shadow_detector = 1.0; - float shadow_black = 1.0; - vec4 shadow_color = vec4(1.0); - vec3 light_color = vec3(0.0); + float shadow_detector = 1.0; + float shadow_black = 1.0; + vec4 shadowColor = vec4(1.0); - float alpha_complement; + float alpha_complement; - for (int i = 0; i < GODRAY_STEPS; i++) { - // Exponentialy spaced shadow samples - current_depth = exp2(i + dither) - 0.96; // 0.96 avoids points behind near plane - if (current_depth > view_distance) { - break; - } + for (int i = 0; i < GODRAY_STEPS; i++) { + // Exponentialy spaced shadow samples + currentDistance = exp2(i + dither) - 0.6; + if (currentDistance > visibleDistance) { + break; + } - // Distance to depth - current_depth = (far * (current_depth - near)) / (current_depth * (far - near)); + // Distance to depth + currentDistance = (far * (currentDistance - near)) / (currentDistance * (far - near)); - view_pos = vec3(texcoord, current_depth); + viewPos = vec3(texcoord, currentDistance); - // Clip to world - pos = modeli_times_projectioni * (vec4(view_pos, 1.0) * 2.0 - 1.0); - view_pos = (pos.xyz /= pos.w).xyz; + // Clip to world + pos = modeli_times_projectioni * (vec4(viewPos, 1.0) * 2.0 - 1.0); + viewPos = (pos.xyz /= pos.w).xyz; + shadowPos = get_volumetric_pos(viewPos); + + light += shadow2D(shadowtex0, shadowPos).r; + } - shadow_pos = get_volumetric_pos(view_pos); + light /= GODRAY_STEPS; - shadow_detector = shadow2D(shadowtex0, vec3(shadow_pos.xy, shadow_pos.z - 0.001)).r; - if (shadow_detector < 1.0) { - shadow_black = shadow2D(shadowtex1, vec3(shadow_pos.xy, shadow_pos.z - 0.001)).r; - if (shadow_black != shadow_detector) { - shadow_color = texture2D(shadowcolor0, shadow_pos.xy); - alpha_complement = 1.0 - shadow_color.a; - shadow_color.rgb *= alpha_complement; - shadow_color.rgb = mix(shadow_color.rgb, vec3(1.0), alpha_complement); - } + return vec3(light); } - shadow_color *= shadow_black; - light_color += clamp(shadow_color.rgb * (1.0 - shadow_detector) + shadow_detector, vec3(0.0), vec3(1.0)); - } - - light_color /= GODRAY_STEPS; - - return light_color; - } - - #endif + #endif #elif VOL_LIGHT == 1 - float ss_godrays(float dither) { - float light = 0.0; - float comp = 1.0 - (near / (far * far)); + float ssGodrays(float dither) { + float light = 0.0; + float comp = 1.0 - (near / (far * far)); - vec2 ray_step = vec2(lightpos - texcoord) * 0.2; - vec2 dither2d = texcoord + (ray_step * dither); + vec2 ray_step = vec2(lightpos - texcoord) * 0.2; + vec2 dither2d = texcoord + (ray_step * dither); - float depth; + float depth; - for (int i = 0; i < CHEAP_GODRAY_SAMPLES; i++) { - depth = texture2D(depthtex1, dither2d).x; - dither2d += ray_step; - light += step(comp, depth); - } + for (int i = 0; i < CHEAP_GODRAY_SAMPLES; i++) { + depth = texture2D(depthtex1, dither2d).x; + dither2d += ray_step; + light += step(comp, depth); + } - return light / CHEAP_GODRAY_SAMPLES; + return light / CHEAP_GODRAY_SAMPLES; } #endif diff --git a/shaders/lib/water.glsl b/shaders/lib/water.glsl index fcb80019..ebde953e 100644 --- a/shaders/lib/water.glsl +++ b/shaders/lib/water.glsl @@ -2,324 +2,324 @@ Water reflection and refraction related functions. */ -vec3 fast_raymarch(vec3 direction, vec3 hit_coord, inout float infinite, float dither) { - vec3 dir_increment; - vec3 current_march = hit_coord; - vec3 old_current_march; - float screen_depth; - float depth_diff = 1.0; - vec3 march_pos = camera_to_screen(hit_coord); - float prev_screen_depth = march_pos.z; - bool search_flag = false; - bool hidden_flag = false; - bool first_hidden = true; - bool out_flag = false; - bool to_far = false; - vec3 last_march_pos; - - int no_hidden_steps = 0; - bool hiddens = false; - - // Ray marching - for (int i = 0; i < RAYMARCH_STEPS; i++) { - if (search_flag) { - dir_increment *= 0.5; - current_march += dir_increment * sign(depth_diff); - } else { - old_current_march = current_march; - current_march = hit_coord + ((direction * exp2(i + dither)) - direction); - dir_increment = current_march - old_current_march; - } - - last_march_pos = march_pos; - march_pos = camera_to_screen(current_march); - - if ( // Is outside screen space - march_pos.x < 0.0 || - march_pos.x > 1.0 || - march_pos.y < 0.0 || - march_pos.y > 1.0 || - march_pos.z < 0.0 - ) { - out_flag = true; - } - - if (march_pos.z > 0.9999) { - to_far = true; - } - - screen_depth = texture2D(depthtex1, march_pos.xy).x; - depth_diff = screen_depth - march_pos.z; - - if (depth_diff < 0.0 && abs(screen_depth - prev_screen_depth) > abs(march_pos.z - last_march_pos.z)) { - hidden_flag = true; - hiddens = true; - if (first_hidden) { - first_hidden = false; - } - } else if (depth_diff > 0.0) { - hidden_flag = false; - if (!hiddens) { - no_hidden_steps++; - } - } +float linearizeDepth(float depth) { + return gbufferProjection[3][2] / (gbufferProjection[2][2] + 2.0 * depth - 1.0); +} - if (search_flag == false && depth_diff < 0.0 && hidden_flag == false) { - search_flag = true; +vec3 fastRaymarch(vec3 direction, vec3 hitPoint, inout float infinite, float dither) { + vec3 pathIncrement; + vec3 currentMarchPoint = hitPoint; + vec3 oldMarchPoint; + float screenDepth; + float depthDifference = 1.0; + vec3 screenMarchPos = camera_to_screen(hitPoint); + float prevScreenDepth = screenMarchPos.z; + float hitPointDepth = screenMarchPos.z; + bool searchFlag = false; + bool hiddenFlag = false; + bool firstHidden = true; + bool outOfEyeFlag = false; + bool toFar = false; + vec3 lastScreenMarchPos; + + int no_hidden_steps = 0; + bool hiddens = false; + + // Ray marching + for (int i = 0; i < RAYMARCH_STEPS; i++) { + if (searchFlag) { + pathIncrement *= 0.5; + currentMarchPoint += pathIncrement * sign(depthDifference); + } else { + oldMarchPoint = currentMarchPoint; + currentMarchPoint = hitPoint + ((direction * exp2(i + dither)) - direction); + pathIncrement = currentMarchPoint - oldMarchPoint; + } + + lastScreenMarchPos = screenMarchPos; + screenMarchPos = camera_to_screen(currentMarchPoint); + + if ( // Is outside screen space + screenMarchPos.x < 0.0 || + screenMarchPos.x > 1.0 || + screenMarchPos.y < 0.0 || + screenMarchPos.y > 1.0 || + screenMarchPos.z < 0.0 + ) { + outOfEyeFlag = true; + } + + if (screenMarchPos.z > 0.9999) { + toFar = true; + } + + screenDepth = texture2D(depthtex1, screenMarchPos.xy).x; + depthDifference = screenDepth - screenMarchPos.z; + + if (depthDifference < 0.0 && abs(screenDepth - prevScreenDepth) > abs(screenMarchPos.z - lastScreenMarchPos.z)) { + hiddenFlag = true; + hiddens = true; + if (firstHidden) { + firstHidden = false; + } + } else if (depthDifference > 0.0) { + hiddenFlag = false; + if (!hiddens) { + no_hidden_steps++; + } + } + + if (searchFlag == false && depthDifference < 0.0 && hiddenFlag == false) { + searchFlag = true; + } + + prevScreenDepth = screenDepth; } - prev_screen_depth = screen_depth; - } - - infinite = float(screen_depth > 0.9999); - - if (out_flag) { - infinite = 1.0; - return march_pos; - } else if (to_far) { - if (screen_depth > 0.9999) { - infinite = 1.0; - return march_pos; - } else if (no_hidden_steps < 3) { - return march_pos; + infinite = float(screenDepth > 0.9999); + + if (outOfEyeFlag) { + infinite = 1.0; + return screenMarchPos; + } else if (toFar) { + if (screenDepth > 0.9999) { + infinite = 1.0; + return screenMarchPos; + } else if (no_hidden_steps < 3 || screenDepth > hitPointDepth) { + return screenMarchPos; + } else { + infinite = 1.0; + return vec3(1.0); + } } else { - infinite = 1.0; - return vec3(1.0); + return screenMarchPos; } - } else { - return march_pos; - } } #if SUN_REFLECTION == 1 - #if !defined NETHER && !defined THE_END - float sun_reflection(vec3 fragpos) { - vec3 astro_pos = worldTime > 12900 ? moonPosition : sunPosition; - float astro_vector = - max(dot(normalize(fragpos), normalize(astro_pos)), 0.0); - - return smoothstep(0.995, 1.0, astro_vector) * - clamp(lmcoord.y, 0.0, 1.0) * - (1.0 - rainStrength) * 3.0; - } - - #endif + #if !defined NETHER && !defined THE_END + float sun_reflection(vec3 fragpos) { + vec3 astroLightPos = worldTime > 12900 ? moonPosition : sunPosition; + float astroAlignment = + max(dot(normalize(fragpos), normalize(astroLightPos)), 0.0); + + return smoothstep(0.995, 1.0, astroAlignment) * + clamp(lmcoord.y, 0.0, 1.0) * + (1.0 - rainStrength) * 3.0; + } + #endif #endif vec3 normal_waves(vec3 pos) { - float speed = frameTimeCounter * .025; - vec2 wave_1 = - texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.05) + vec2(speed, speed)).rg; - wave_1 = wave_1 - .5; - vec2 wave_2 = - texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.03125) - speed).rg; - wave_2 = wave_2 - .5; - vec2 wave_3 = - texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.125) + vec2(speed, -speed)).rg; - wave_3 = wave_3 - .5; - wave_3 *= 0.66; - - vec2 partial_wave = wave_1 + wave_2 + wave_3; - - vec3 final_wave = vec3(partial_wave, WATER_TURBULENCE - (rainStrength * 0.6 * WATER_TURBULENCE * visible_sky)); - - return normalize(final_wave); + float speed = frameTimeCounter * .025; + vec2 wave_1 = + texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.05) + vec2(speed, speed)).rg; + wave_1 = wave_1 - .5; + vec2 wave_2 = + texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.03125) - speed).rg; + wave_2 = wave_2 - .5; + vec2 wave_3 = + texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.125) + vec2(speed, -speed)).rg; + wave_3 = wave_3 - .5; + wave_3 *= 0.66; + + vec2 partialWave = wave_1 + wave_2 + wave_3; + vec3 finalWave = vec3(partialWave, WATER_TURBULENCE - (rainStrength * 0.6 * WATER_TURBULENCE * visibleSky)); + + return normalize(finalWave); } vec3 refraction(vec3 fragpos, vec3 color, vec3 refraction) { - vec2 pos = gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y); - - #if REFRACTION == 1 - // 0.06 is the pseudorefraction strength - pos = pos + refraction.xy * (0.075 / (1.0 + length(fragpos) * 0.4)); - #endif - - float water_absortion; - if (isEyeInWater == 0) { - float water_distance = - 2.0 * near * far / (far + near - (2.0 * gl_FragCoord.z - 1.0) * (far - near)); - - float earth_distance = texture2D(depthtex1, pos.xy).r; - earth_distance = - 2.0 * near * far / (far + near - (2.0 * earth_distance - 1.0) * (far - near)); - - #if defined DISTANT_HORIZONS - float earth_distance_dh = texture2D(dhDepthTex1, pos.xy).r; - earth_distance_dh = - 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * earth_distance_dh - 1.0) * (dhFarPlane - dhNearPlane)); - earth_distance = min(earth_distance, earth_distance_dh); + vec2 pos = gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY); + + #if REFRACTION == 1 + pos = pos + refraction.xy * (0.075 / (1.0 + length(fragpos) * 0.4)); #endif - water_absortion = earth_distance - water_distance; - water_absortion *= water_absortion; - water_absortion = (1.0 / -((water_absortion * WATER_ABSORPTION) + 1.125)) + 1.0; - } else { - water_absortion = 0.0; - } + float water_absortion; + if (isEyeInWater == 0) { + float water_distance = linearizeDepth(gl_FragCoord.z); + float earth_depth = texture2D(depthtex1, pos.xy).r; + float earth_distance = linearizeDepth(earth_depth); + + #if defined DISTANT_HORIZONS + float earth_distance_dh = texture2D(dhDepthTex1, pos.xy).r; + earth_distance_dh = + 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * earth_distance_dh - 1.0) * (dhFarPlane - dhNearPlane)); + earth_distance = min(earth_distance, earth_distance_dh); + #endif + + water_absortion = earth_distance - water_distance; + water_absortion *= water_absortion; + water_absortion = (1.0 / -((water_absortion * WATER_ABSORPTION) + 1.125)) + 1.0; + } else { + water_absortion = 0.0; + } - return mix(texture2D(gaux1, pos.xy).rgb, color, water_absortion); + return mix(texture2D(gaux1, pos.xy).rgb, color, water_absortion); } vec3 get_normals(vec3 bump, vec3 fragpos) { - float NdotE = abs(dot(water_normal, normalize(fragpos))); + float NdotE = abs(dot(waterNormal, normalize(fragpos))); - bump *= vec3(NdotE) + vec3(0.0, 0.0, 1.0 - NdotE); + bump *= vec3(NdotE) + vec3(0.0, 0.0, 1.0 - NdotE); - mat3 tbn_matrix = mat3( - tangent.x, binormal.x, water_normal.x, - tangent.y, binormal.y, water_normal.y, - tangent.z, binormal.z, water_normal.z + mat3 tbn_matrix = mat3( + tangent.x, binormal.x, waterNormal.x, + tangent.y, binormal.y, waterNormal.y, + tangent.z, binormal.z, waterNormal.z ); - return normalize(bump * tbn_matrix); + return normalize(bump * tbn_matrix); } vec4 reflection_calc(vec3 fragpos, vec3 normal, vec3 reflected, inout float infinite, float dither) { - #if SSR_TYPE == 0 // Flipped image - #if defined DISTANT_HORIZONS - vec3 pos = camera_to_screen(fragpos + reflected * 768.0); - #else - vec3 pos = camera_to_screen(fragpos + reflected * 76.0); + #if SSR_TYPE == 0 // Flipped image + #if defined DISTANT_HORIZONS || defined VOXY + vec3 pos = camera_to_screen(fragpos + reflected * 768.0); + #else + vec3 pos = camera_to_screen(fragpos + reflected * 76.0); + #endif + #else // Raymarch + vec3 pos = fastRaymarch(reflected, fragpos, infinite, dither); #endif - #else // Raymarch - vec3 pos = fast_raymarch(reflected, fragpos, infinite, dither); - #endif - float border = - clamp((1.0 - (max(0.0, abs(pos.y - 0.5)) * 2.0)) * 50.0, 0.0, 1.0); + float border = + clamp((1.0 - (max(0.0, abs(pos.y - 0.5)) * 2.0)) * 50.0, 0.0, 1.0); - border = clamp(border - pow(pos.y, 10.0), 0.0, 1.0); + border = clamp(border - pow(pos.y, 10.0), 0.0, 1.0); - pos.x = abs(pos.x); - if (pos.x > 1.0) { - pos.x = 1.0 - (pos.x - 1.0); - } + pos.x = abs(pos.x); + if (pos.x > 1.0) { + pos.x = 1.0 - (pos.x - 1.0); + } - return vec4(texture2D(gaux1, pos.xy).rgb, border); + return vec4(texture2D(gaux1, pos.xy).rgb, border); } vec3 water_shader( - vec3 fragpos, - vec3 normal, - vec3 color, - vec3 sky_reflect, - vec3 reflected, - float fresnel, - float visible_sky, - float dither, - vec3 light_color) { - vec4 reflection = vec4(0.0); - float infinite = 1.0; - - #if REFLECTION == 1 - reflection = reflection_calc(fragpos, normal, reflected, infinite, dither); - #endif - - reflection.rgb = mix( - sky_reflect * visible_sky, - reflection.rgb, - reflection.a - ); - - #ifdef VANILLA_WATER - fresnel *= 0.8; - #endif - - #if SUN_REFLECTION == 1 - #ifndef NETHER - #ifndef THE_END - return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + - vec3(sun_reflection(reflect(normalize(fragpos), normal))) * light_color * infinite * visible_sky; - #else - return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); - #endif + vec3 fragpos, + vec3 normal, + vec3 color, + vec3 sky_reflect, + vec3 reflected, + float fresnel, + float visibleSky, + float dither, + vec3 lightColor +) { + vec4 reflection = vec4(0.0); + float infinite = 1.0; + + #if REFLECTION == 1 + reflection = + reflection_calc(fragpos, normal, reflected, infinite, dither); + #endif + + reflection.rgb = mix( + sky_reflect * visibleSky, + reflection.rgb, + reflection.a + ); + + #ifdef VANILLA_WATER + fresnel *= 0.8; + #endif + + #if SUN_REFLECTION == 1 + #ifndef NETHER + #ifndef THE_END + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + + vec3(sun_reflection(reflect(normalize(fragpos), normal))) * lightColor * infinite * visibleSky; + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif #else - return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); #endif - #else - return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); - #endif } // GLASS vec4 cristal_reflection_calc(vec3 fragpos, vec3 normal, inout float infinite, float dither) { - #if SSR_TYPE == 0 - #if defined DISTANT_HORIZONS - vec3 reflected_vector = reflect(normalize(fragpos), normal) * 768.0; + #if SSR_TYPE == 0 + #if defined DISTANT_HORIZONS || defined VOXY + vec3 reflectedVector = reflect(normalize(fragpos), normal) * 768.0; + #else + vec3 reflectedVector = reflect(normalize(fragpos), normal) * 76.0; + #endif + vec3 pos = camera_to_screen(fragpos + reflectedVector); #else - vec3 reflected_vector = reflect(normalize(fragpos), normal) * 76.0; - #endif - vec3 pos = camera_to_screen(fragpos + reflected_vector); - #else - vec3 reflected_vector = reflect(normalize(fragpos), normal); - vec3 pos = fast_raymarch(reflected_vector, fragpos, infinite, dither); - - if (pos.x > 99.0) { // Fallback - #if defined DISTANT_HORIZONS - pos = camera_to_screen(fragpos + reflected_vector * 768.0); - #else - pos = camera_to_screen(fragpos + reflected_vector * 76.0); + vec3 reflectedVector = reflect(normalize(fragpos), normal); + vec3 pos = fastRaymarch(reflectedVector, fragpos, infinite, dither); + + if (pos.x > 99.0) { // Fallback + #if defined DISTANT_HORIZONS + pos = camera_to_screen(fragpos + reflectedVector * 768.0); + #else + pos = camera_to_screen(fragpos + reflectedVector * 76.0); + #endif + } #endif - } - #endif - float border_x = max(-fourth_pow(abs(2.0 * pos.x - 1.0)) + 1.0, 0.0); - float border_y = max(-fourth_pow(abs(2.0 * pos.y - 1.0)) + 1.0, 0.0); - float border = min(border_x, border_y); + float border_x = max(-fourthPow(abs(2.0 * pos.x - 1.0)) + 1.0, 0.0); + float border_y = max(-fourthPow(abs(2.0 * pos.y - 1.0)) + 1.0, 0.0); + float border = min(border_x, border_y); - return vec4(texture2D(gaux1, pos.xy, 0.0).rgb, border); + return vec4(texture2D(gaux1, pos.xy, 0.0).rgb, border); } vec4 cristal_shader( - vec3 fragpos, - vec3 normal, - vec4 color, - vec3 sky_reflection, - float fresnel, - float visible_sky, - float dither, - vec3 light_color) -{ - vec4 reflection = vec4(0.0); - float infinite = 0.0; - - #if REFLECTION == 1 - reflection = cristal_reflection_calc(fragpos, normal, infinite, dither); - #endif - - sky_reflection = mix(color.rgb, sky_reflection, visible_sky * visible_sky); - - reflection.rgb = mix( - sky_reflection, - reflection.rgb, - reflection.a - ); - - color.rgb = mix(color.rgb, sky_reflection, fresnel); - color.rgb = mix(color.rgb, reflection.rgb, fresnel); - - color.a = mix(color.a, 1.0, fresnel * .9); - - #if SUN_REFLECTION == 1 - #ifndef NETHER - #ifndef THE_END - return color + - vec4( - mix( - vec3(sun_reflection(reflect(normalize(fragpos), normal)) * light_color * infinite * visible_sky), - vec3(0.0), - reflection.a - ), - 0.0 - ); - #else - return color; - #endif + vec3 fragpos, + vec3 normal, + vec4 color, + vec3 skyReflectionColor, + float fresnel, + float visibleSky, + float dither, + vec3 lightColor +) { + vec4 reflection = vec4(0.0); + float infinite = 0.0; + + #if REFLECTION == 1 + reflection = cristal_reflection_calc(fragpos, normal, infinite, dither); + #endif + + skyReflectionColor = mix(color.rgb, skyReflectionColor, visibleSky * visibleSky); + + reflection.rgb = mix( + skyReflectionColor, + reflection.rgb, + reflection.a + ); + + color.rgb = mix(color.rgb, skyReflectionColor, fresnel); + color.rgb = mix(color.rgb, reflection.rgb, fresnel); + + color.a = mix(color.a, 1.0, fresnel * .9); + + #if SUN_REFLECTION == 1 + #ifndef NETHER + #ifndef THE_END + return color + vec4( + mix( + vec3(sun_reflection(reflect(normalize(fragpos), normal)) * lightColor * infinite * visibleSky), + vec3(0.0), + reflection.a + ), + 0.0 + ); + #else + return color; + #endif + #else + return color; + #endif #else - return color; + return color; #endif - #else - return color; - #endif } diff --git a/shaders/lib/water_dh.glsl b/shaders/lib/water_dh.glsl index f26dbdb4..bed0732f 100644 --- a/shaders/lib/water_dh.glsl +++ b/shaders/lib/water_dh.glsl @@ -1,136 +1,135 @@ -/* MakeUp - water.glsl -Water reflection and refraction related functions. +/* MakeUp - water_dh.glsl +Water reflection and refraction related functions (dh). */ #if SUN_REFLECTION == 1 - #if !defined NETHER && !defined THE_END - float sun_reflection(vec3 fragpos) { - vec3 astro_pos = worldTime > 12900 ? moonPosition : sunPosition; - float astro_vector = - max(dot(normalize(fragpos), normalize(astro_pos)), 0.0); - - return smoothstep(0.995, 1.0, astro_vector) * - clamp(lmcoord.y, 0.0, 1.0) * - (1.0 - rainStrength) * 3.0; - } + #if !defined NETHER && !defined THE_END + float sun_reflection(vec3 fragpos) { + vec3 astroLightPos = worldTime > 12900 ? moonPosition : sunPosition; + float astroAlignment = + max(dot(normalize(fragpos), normalize(astroLightPos)), 0.0); + + return smoothstep(0.995, 1.0, astroAlignment) * + clamp(lmcoord.y, 0.0, 1.0) * + (1.0 - rainStrength) * 3.0; + } - #endif + #endif #endif vec3 normal_waves_dh(vec3 pos) { - vec2 wave_2 = - texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.03125) - (frameTimeCounter * .025)).rg; - wave_2 = wave_2 - .5; + vec2 wave_2 = + texture2D(noisetex, ((pos.xy - pos.z * 0.2) * 0.03125) - (frameTimeCounter * .025)).rg; + wave_2 = wave_2 - .5; + vec2 partialWave = wave_2; + vec3 finalWave = vec3(partialWave, WATER_TURBULENCE); - vec2 partial_wave = wave_2; - - vec3 final_wave = vec3(partial_wave, WATER_TURBULENCE); - - return normalize(final_wave); + return normalize(finalWave); } vec3 refraction(vec3 fragpos, vec3 color, vec3 refraction) { - vec2 pos = gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y); - - #if REFRACTION == 1 - // 0.06 is the pseudorefraction strength - pos = pos + refraction.xy * (0.075 / (1.0 + length(fragpos) * 0.4)); - #endif - - float water_absortion; - if (isEyeInWater == 0) { - float water_distance = - 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * gl_FragCoord.z - 1.0) * (dhFarPlane - dhNearPlane)); - - float earth_distance = texture2D(dhDepthTex1, pos.xy).r; - earth_distance = - 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * earth_distance - 1.0) * (dhFarPlane - dhNearPlane)); - - water_absortion = (earth_distance - water_distance) * 0.5; - water_absortion *= water_absortion; - water_absortion = (1.0 / -((water_absortion * WATER_ABSORPTION) + 1.125)) + 1.0; - } else { - water_absortion = 0.0; - } - - return mix(texture2D(gaux1, pos.xy).rgb, color, water_absortion); + vec2 pos = gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY); + + #if REFRACTION == 1 + pos = pos + refraction.xy * (0.075 / (1.0 + length(fragpos) * 0.4)); + #endif + + float water_absortion; + if (isEyeInWater == 0) { + float water_distance = + 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * gl_FragCoord.z - 1.0) * (dhFarPlane - dhNearPlane)); + + float earth_distance = texture2D(dhDepthTex1, pos.xy).r; + earth_distance = + 2.0 * dhNearPlane * dhFarPlane / (dhFarPlane + dhNearPlane - (2.0 * earth_distance - 1.0) * (dhFarPlane - dhNearPlane)); + + water_absortion = (earth_distance - water_distance) * 0.5; + water_absortion *= water_absortion; + water_absortion = (1.0 / -((water_absortion * WATER_ABSORPTION) + 1.125)) + 1.0; + } else { + water_absortion = 0.0; + } + + return mix(texture2D(gaux1, pos.xy).rgb, color, water_absortion); } vec3 get_normals(vec3 bump, vec3 fragpos) { - float NdotE = abs(dot(water_normal, normalize(fragpos))); + float NdotE = abs(dot(waterNormal, normalize(fragpos))); - bump *= vec3(NdotE) + vec3(0.0, 0.0, 1.0 - NdotE); + bump *= vec3(NdotE) + vec3(0.0, 0.0, 1.0 - NdotE); - mat3 tbn_matrix = mat3( - tangent.x, binormal.x, water_normal.x, - tangent.y, binormal.y, water_normal.y, - tangent.z, binormal.z, water_normal.z + mat3 tbn_matrix = mat3( + tangent.x, binormal.x, waterNormal.x, + tangent.y, binormal.y, waterNormal.y, + tangent.z, binormal.z, waterNormal.z ); - return normalize(bump * tbn_matrix); + return normalize(bump * tbn_matrix); } vec4 reflection_calc_dh(vec3 fragpos, vec3 normal, vec3 reflected, vec3 infinite_color, float dither) { - vec3 pos = camera_to_screen(fragpos + reflected * 768.0); + vec3 pos = camera_to_screen(fragpos + reflected * 768.0); - float border = - clamp((1.0 - (max(0.0, abs(pos.y - 0.5)) * 2.0)) * 50.0, 0.0, 1.0); + float border = + clamp((1.0 - (max(0.0, abs(pos.y - 0.5)) * 2.0)) * 50.0, 0.0, 1.0); - border = clamp(border - pow(pos.y, 10.0), 0.0, 1.0); + border = clamp(border - pow(pos.y, 10.0), 0.0, 1.0); - pos.x = abs(pos.x); - if (pos.x > 1.0) { - pos.x = 1.0 - (pos.x - 1.0); - } + pos.x = abs(pos.x); + if (pos.x > 1.0) { + pos.x = 1.0 - (pos.x - 1.0); + } - vec4 final_reflex; - if (texture2D(depthtex0, pos.xy).r < 0.999) { - final_reflex = vec4(infinite_color, border); - } else { - final_reflex = vec4(texture2D(gaux1, pos.xy).rgb, border); - } - return final_reflex; + vec4 final_reflex; + if (texture2D(depthtex0, pos.xy).r < 0.999) { + final_reflex = vec4(infinite_color, border); + } else { + final_reflex = vec4(texture2D(gaux1, pos.xy).rgb, border); + } + return final_reflex; } vec3 water_shader_dh( - vec3 fragpos, - vec3 normal, - vec3 color, - vec3 sky_reflect, - vec3 reflected, - float fresnel, - float visible_sky, - float dither, - vec3 light_color) { - vec4 reflection = vec4(0.0); - float infinite = 1.0; - - #if REFLECTION == 1 - reflection = reflection_calc_dh(fragpos, normal, reflected, sky_reflect, dither); - #endif - - reflection.rgb = mix( - sky_reflect * visible_sky, - reflection.rgb, - reflection.a - ); - - #ifdef VANILLA_WATER - fresnel *= 0.8; - #endif - - #if SUN_REFLECTION == 1 - #ifndef NETHER - #ifndef THE_END - return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + - vec3(sun_reflection(reflect(normalize(fragpos), normal))) * light_color * infinite * visible_sky; - #else - return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); - #endif + vec3 fragpos, + vec3 normal, + vec3 color, + vec3 sky_reflect, + vec3 reflected, + float fresnel, + float visibleSky, + float dither, + vec3 lightColor +) { + vec4 reflection = vec4(0.0); + float infinite = 1.0; + + #if REFLECTION == 1 + reflection = + reflection_calc_dh(fragpos, normal, reflected, sky_reflect, dither); + #endif + + reflection.rgb = mix( + sky_reflect * visibleSky, + reflection.rgb, + reflection.a + ); + + #ifdef VANILLA_WATER + fresnel *= 0.8; + #endif + + #if SUN_REFLECTION == 1 + #ifndef NETHER + #ifndef THE_END + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + + vec3(sun_reflection(reflect(normalize(fragpos), normal))) * lightColor * infinite * visibleSky; + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif #else - return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); #endif - #else - return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); - #endif } diff --git a/shaders/lib/water_voxy.glsl b/shaders/lib/water_voxy.glsl new file mode 100644 index 00000000..5a65fd01 --- /dev/null +++ b/shaders/lib/water_voxy.glsl @@ -0,0 +1,198 @@ +/* MakeUp - water_voxy.glsl +Water reflection and refraction related functions (voxy). +*/ + +#if SUN_REFLECTION == 1 + #if !defined NETHER && !defined THE_END + float sun_reflection(vec3 fragpos, vec2 lmcoord) { + vec3 astroLightPos = worldTime > 12900 ? moonPosition : sunPosition; + float astroAlignment = + max(dot(normalize(fragpos), normalize(astroLightPos)), 0.0); + + return smoothstep(0.995, 1.0, astroAlignment) * + clamp(lmcoord.y, 0.0, 1.0) * + (1.0 - rainStrength) * 3.0; + } + + #endif +#endif + +vec3 normal_waves_voxy(vec3 pos) { + vec2 wave_2 = + texture(noisetex, ((pos.xy - pos.z * 0.2) * 0.03125) - (frameTimeCounter * .025)).rg; + wave_2 = wave_2 - .5; + vec2 partialWave = wave_2; + vec3 finalWave = vec3(partialWave, WATER_TURBULENCE); + + return normalize(finalWave); +} + +vec3 refraction_voxy(vec3 fragpos, vec3 color, vec3 refraction) { + vec2 pos = gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY); + + #if REFRACTION == 1 + pos = pos + refraction.xy * (0.075 / (1.0 + length(fragpos) * 0.4)); + #endif + + const float vxNear = 16.0; // Must be 16.0, but 8.0 for fast non-linearity compensation in water-earth distance calculation + const float vxFar = 48000.0; // 16 * 3000 Documented farplane + + float water_absortion; + + if (isEyeInWater == 0) { + + float water_distance = + 2.0 * vxNear * vxFar / (vxFar + vxNear - (2.0 * gl_FragCoord.z - 1.0) * (vxFar - vxNear)); + + float earth_depth = texture(vxDepthTexTrans, pos.xy).r; + float earth_distance = + 2.0 * vxNear * vxFar / (vxFar + vxNear - (2.0 * earth_depth - 1.0) * (vxFar - vxNear)); + + water_absortion = (earth_distance - water_distance) * 0.5; + water_absortion *= water_absortion; + water_absortion = (1.0 / -((water_absortion * WATER_ABSORPTION) + 1.125)) + 1.0; + + } else { + water_absortion = 0.0; + } + + return mix(texture(gaux1, pos.xy).rgb, color, water_absortion); +} + +vec3 get_normals_voxy(vec3 bump, vec3 fragpos, vec3 tangent, vec3 binormal, vec3 waterNormal) { + float NdotE = abs(dot(waterNormal, normalize(fragpos))); + + bump *= vec3(NdotE) + vec3(0.0, 0.0, 1.0 - NdotE); + + mat3 tbn_matrix = mat3( + tangent.x, binormal.x, waterNormal.x, + tangent.y, binormal.y, waterNormal.y, + tangent.z, binormal.z, waterNormal.z + ); + + return normalize(bump * tbn_matrix); +} + +vec4 reflection_calc_voxy(vec3 fragpos, vec3 normal, vec3 reflected) { + vec3 pos = camera_to_screen_voxy(fragpos + reflected * 768.0); + + float border = + clamp((1.0 - (max(0.0, abs(pos.y - 0.5)) * 2.0)) * 50.0, 0.0, 1.0); + + border = clamp(border - pow(pos.y, 10.0), 0.0, 1.0); + + pos.x = abs(pos.x); + if (pos.x > 1.0) { + pos.x = 1.0 - (pos.x - 1.0); + } + + return vec4(texture(gaux1, pos.xy).rgb, border); +} + +vec3 water_shader_voxy( + vec3 fragpos, + vec3 normal, + vec3 color, + vec3 sky_reflect, + vec3 reflected, + float fresnel, + float visibleSky, + vec3 lightColor, + vec2 lmcoord +) { + vec4 reflection = vec4(0.0); + float infinite = 1.0; + + #if REFLECTION == 1 + reflection = + reflection_calc_voxy(fragpos, normal, reflected); + #endif + + reflection.rgb = mix( + sky_reflect * visibleSky, + reflection.rgb, + reflection.a + ); + + #ifdef VANILLA_WATER + fresnel *= 0.8; + #endif + + #if SUN_REFLECTION == 1 + #ifndef NETHER + #ifndef THE_END + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX) + + vec3(sun_reflection(reflect(normalize(fragpos), normal), lmcoord)) * lightColor * infinite * visibleSky; + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif + #else + return mix(color, reflection.rgb, fresnel * REFLEX_INDEX); + #endif +} + +vec4 cristal_reflection_calc_voxy(vec3 fragpos, vec3 normal) { + vec3 reflectedVector = reflect(normalize(fragpos), normal) * 768.0; + vec3 pos = camera_to_screen_voxy(fragpos + reflectedVector); + + float border_x = max(-fourthPow(abs(2.0 * pos.x - 1.0)) + 1.0, 0.0); + float border_y = max(-fourthPow(abs(2.0 * pos.y - 1.0)) + 1.0, 0.0); + float border = min(border_x, border_y); + + return vec4(texture(gaux1, pos.xy, 0.0).rgb, border); +} + +vec4 cristal_shader_voxy( + vec3 fragpos, + vec3 normal, + vec4 color, + vec3 skyReflectionColor, + float fresnel, + float visibleSky, + vec3 lightColor, + vec2 lmcoord +) { + vec4 reflection = vec4(0.0); + float infinite = 0.0; + + #if REFLECTION == 1 + reflection = cristal_reflection_calc_voxy(fragpos, normal); + #endif + + skyReflectionColor = mix(color.rgb, skyReflectionColor, visibleSky * visibleSky); + + reflection.rgb = mix( + skyReflectionColor, + reflection.rgb, + reflection.a + ); + + color.rgb = mix(color.rgb, skyReflectionColor, fresnel); + color.rgb = mix(color.rgb, reflection.rgb, fresnel); + + color.a = mix(color.a, 1.0, fresnel * .9); + + #if SUN_REFLECTION == 1 + #ifndef NETHER + #ifndef THE_END + return color + vec4( + mix( + vec3(sun_reflection(reflect(normalize(fragpos), normal), lmcoord) * lightColor * infinite * visibleSky), + vec3(0.0), + reflection.a + ), + 0.0 + ); + #else + return color; + #endif + #else + return color; + #endif + #else + return color; + #endif +} diff --git a/shaders/prepare.fsh b/shaders/prepare.fsh index e9a23593..f81c6e95 100644 --- a/shaders/prepare.fsh +++ b/shaders/prepare.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - prepare.fsh Render: Sky @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define PREPARE_SHADER diff --git a/shaders/prepare.vsh b/shaders/prepare.vsh index 89d77827..d374c4ba 100644 --- a/shaders/prepare.vsh +++ b/shaders/prepare.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - prepare.vsh Render: Sky @@ -8,7 +9,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define USE_BASIC_SH // Sets the use of a "basic" or "generic" shader for custom dimensions, instead of the default overworld shader. This can solve some rendering issues as the shader is closer to vanilla rendering. #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define PREPARE_SHADER diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 254fd4fd..bfd23922 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -1,15 +1,14 @@ # MakeUp - shader.properties #Profiles -profile.no_effects= SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=0 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=0 SUN_REFLECTION=0 WAVING=0 V_CLOUDS=0 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS -profile.shadowless_low= SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS -profile.shadowless_medium= SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.shadowless_high= !SIMPLE_AUTOEXP !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.low= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.medium= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.high= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.extreme= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS -profile.extremeplus= !SIMPLE_AUTOEXP SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=4 AO_STRENGTH=0.70 AA_TYPE=2 MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=7 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=4.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.no_effects= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=0 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=5 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=0 SUN_REFLECTION=0 WAVING=0 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS +profile.shadowless_low= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=0 AOSTEPS=5 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=0 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 !MATERIAL_GLOSS +profile.shadowless_medium= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=1 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=5 AO_STRENGTH=0.70 AA_TYPE=0 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 !BLOOM CHROMA_ABER=0 VOL_LIGHT=0 !CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.shadowless_high= !SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=5 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.low= SHADOW_CASTING SHADOW_QTY_SLIDER=1 SHADOW_DISTANCE_SLIDER=0 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=5 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 !COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.medium= SHADOW_CASTING SHADOW_QTY_SLIDER=2 SHADOW_DISTANCE_SLIDER=1 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=5 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.high= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 !DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=5 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS +profile.extremeplus= SHADOW_CASTING SHADOW_QTY_SLIDER=3 SHADOW_DISTANCE_SLIDER=2 REFLECTION_SLIDER=2 DOF DOF_STRENGTH=0.09 AO=1 AOSTEPS=5 AO_STRENGTH=0.70 AA_TYPE=2 !MOTION_BLUR REFRACTION=1 SUN_REFLECTION=1 WAVING=1 V_CLOUDS=1 CLOUD_STEPS_AVG=10 CLOUD_VOL_STYLE=0 BLOOM_SAMPLES=3.0 BLOOM CHROMA_ABER=0 VOL_LIGHT=1 CLOUD_REFLECTION WATER_ABSORPTION=0.10 COLOR_SCHEME=1 !VANILLA_WATER WATER_COLOR_SOURCE=0 COLORED_SHADOW MOTION_BLUR_SAMPLES=4 MATERIAL_GLOSS # Default forced options vignette = false @@ -25,17 +24,22 @@ shadow.culling = true particles.before.deferred = true #if V_CLOUDS > 0 - clouds = off -#else - clouds = fancy + clouds = off #endif texture.gbuffers.noisetex = textures/water_256_RG_8bit.png -texture.gbuffers.colortex2 = textures/clouds_blocky_512_R_8bit.png -texture.gbuffers.gaux2 = textures/clouds_natural_512_R_8bit.png -# texture.deferred.colortex0 = textures/bluenoise_64.png -texture.deferred.colortex2 = textures/clouds_blocky_512_R_8bit.png -texture.deferred.gaux2 = textures/clouds_natural_512_R_8bit.png +# texture.gbuffers.colortex2 = textures/bluenoise_64.png +# texture.deferred.colortex2 = textures/bluenoise_64.png +# texture.composite.colortex2 = textures/bluenoise_64.png + +#if CLOUD_VOL_STYLE == 0 + texture.gbuffers.gaux2 = textures/clouds_natural_512_R_8bit.png + texture.deferred.gaux2 = textures/clouds_natural_512_R_8bit.png +#else + texture.gbuffers.gaux2 = textures/clouds_blocky_512_R_8bit.png + texture.deferred.gaux2 = textures/clouds_blocky_512_R_8bit.png +#endif + program.shadow.enabled=SHADOW_CASTING program.world0/shadow.enabled=SHADOW_CASTING @@ -44,14 +48,14 @@ program.world-1/shadow.enabled=SHADOW_CASTING # Config main screen screen.columns = 3 -screen = ACERCADE WAVING COLOR_SCHEME BLOOM REFLECTION_SLIDER AO SUN_REFLECTION SHADOW_CASTING V_CLOUDS CLOUD_REFLECTION COLORED_SHADOW AA_TYPE REFRACTION VOL_LIGHT DOF MATERIAL_GLOSS CHROMA_ABER SIMPLE_AUTOEXP MOTION_BLUR [ADVANCED_SCREEN] +screen = ACERCADE WAVING COLOR_SCHEME BLOOM REFLECTION_SLIDER AO SUN_REFLECTION SHADOW_CASTING V_CLOUDS CLOUD_REFLECTION COLORED_SHADOW AA_TYPE REFRACTION SHADOW_LOCK DOF MATERIAL_GLOSS VOL_LIGHT CHROMA_ABER MOTION_BLUR [ADVANCED_SCREEN] # Sub-screens: screen.ADVANCED_SCREEN.columns=3 screen.ADVANCED_SCREEN = [COMPATIBILITY_SCREEN] [ACCESIBILITY_SCREEN] [CUSTOM_COLORS_SCREEN] [SHADOWS_SCREEN] [DOF_SCREEN] [AO_SCREEN] [WATER_SCREEN] [POST_SCREEN] [CLOUDS_SCREEN] [LIGHT_SCREEN] [FOG_SCREEN] [MOTION_BLUR_SCREEN] screen.COMPATIBILITY_SCREEN = USE_BASIC_SH BLACK_ENTITY_FIX DEBUG_MODE -screen.SHADOWS_SCREEN = SHADOW_TYPE SHADOW_BLUR SHADOW_DISTANCE_SLIDER SHADOW_QTY_SLIDER +screen.SHADOWS_SCREEN = SHADOW_TYPE SHADOW_BLUR SHADOW_DISTANCE_SLIDER SHADOW_QTY_SLIDER SHADOW_LOCK screen.DOF_SCREEN = DOF_STRENGTH screen.AO_SCREEN = AOSTEPS AO_STRENGTH screen.WATER_SCREEN = WATER_ABSORPTION WATER_TEXTURE VANILLA_WATER WATER_COLOR_SOURCE WATER_TURBULENCE @@ -80,20 +84,20 @@ screen.CUSTOM_COLORS_NV = NV_COLOR_R NV_COLOR_G NV_COLOR_B screen.CUSTOM_COLORS_SCREEN.columns=1 screen.CUSTOM_COLORS_SCREEN = [CUSTOM_COLORS_DAY] [CUSTOM_COLORS_SUNSET] [CUSTOM_COLORS_NIGHT] [CUSTOM_COLORS_WATER] [CUSTOM_COLORS_NV] OMNI_TINT_CUSTOM -sliders = SHADOW_DISTANCE_SLIDER SHADOW_QTY_SLIDER REFLECTION_SLIDER SHADOW_BLUR DOF_STRENGTH AOSTEPS AO_STRENGTH MOTION_BLUR_STRENGTH WATER_ABSORPTION CHROMA_ABER_STRENGTH BLOOM_SAMPLES CLOUD_STEPS_AVG sunPathRotation NIGHT_BRIGHT AVOID_DARK_LEVEL WATER_TURBULENCE FOG_ADJUST MOTION_BLUR_SAMPLES BLOCKLIGHT_TEMP LIGHT_DAY_COLOR_R LIGHT_DAY_COLOR_G LIGHT_DAY_COLOR_B ZENITH_DAY_COLOR_R ZENITH_DAY_COLOR_G ZENITH_DAY_COLOR_B HORIZON_DAY_COLOR_R HORIZON_DAY_COLOR_G HORIZON_DAY_COLOR_B LIGHT_SUNSET_COLOR_R LIGHT_SUNSET_COLOR_G LIGHT_SUNSET_COLOR_B ZENITH_SUNSET_COLOR_R ZENITH_SUNSET_COLOR_G ZENITH_SUNSET_COLOR_B HORIZON_SUNSET_COLOR_R HORIZON_SUNSET_COLOR_G HORIZON_SUNSET_COLOR_B LIGHT_NIGHT_COLOR_R LIGHT_NIGHT_COLOR_G LIGHT_NIGHT_COLOR_B ZENITH_NIGHT_COLOR_R ZENITH_NIGHT_COLOR_G ZENITH_NIGHT_COLOR_B HORIZON_NIGHT_COLOR_R HORIZON_NIGHT_COLOR_G HORIZON_NIGHT_COLOR_B WATER_COLOR_R WATER_COLOR_G WATER_COLOR_B NV_COLOR_R NV_COLOR_G NV_COLOR_B OMNI_TINT_CUSTOM +sliders = SHADOW_DISTANCE_SLIDER SHADOW_QTY_SLIDER REFLECTION_SLIDER SHADOW_BLUR DOF_STRENGTH AOSTEPS AO_STRENGTH MOTION_BLUR_STRENGTH WATER_ABSORPTION CHROMA_ABER_STRENGTH BLOOM_SAMPLES CLOUD_STEPS_AVG sunPathRotation NIGHT_BRIGHT AVOID_DARK_LEVEL WATER_TURBULENCE FOG_ADJUST MOTION_BLUR_SAMPLES BLOCKLIGHT_TEMP LIGHT_DAY_COLOR_R LIGHT_DAY_COLOR_G LIGHT_DAY_COLOR_B ZENITH_DAY_COLOR_R ZENITH_DAY_COLOR_G ZENITH_DAY_COLOR_B HORIZON_DAY_COLOR_R HORIZON_DAY_COLOR_G HORIZON_DAY_COLOR_B LIGHT_SUNSET_COLOR_R LIGHT_SUNSET_COLOR_G LIGHT_SUNSET_COLOR_B ZENITH_SUNSET_COLOR_R ZENITH_SUNSET_COLOR_G ZENITH_SUNSET_COLOR_B HORIZON_SUNSET_COLOR_R HORIZON_SUNSET_COLOR_G HORIZON_SUNSET_COLOR_B LIGHT_NIGHT_COLOR_R LIGHT_NIGHT_COLOR_G LIGHT_NIGHT_COLOR_B ZENITH_NIGHT_COLOR_R ZENITH_NIGHT_COLOR_G ZENITH_NIGHT_COLOR_B HORIZON_NIGHT_COLOR_R HORIZON_NIGHT_COLOR_G HORIZON_NIGHT_COLOR_B WATER_COLOR_R WATER_COLOR_G WATER_COLOR_B NV_COLOR_R NV_COLOR_G NV_COLOR_B OMNI_TINT_CUSTOM SHADOW_LOCK # Custom uniforms ----- # Many values are precalculated to avoid their later or repetitive calculation. # Pixel size -uniform.float.pixel_size_x = 1.0 / viewWidth -uniform.float.pixel_size_y = 1.0 / viewHeight -uniform.float.inv_aspect_ratio = 1.0 / aspectRatio +uniform.float.pixelSizeX = 1.0 / viewWidth +uniform.float.pixelSizeY = 1.0 / viewHeight +uniform.float.aspectRatioInverse = 1.0 / aspectRatio # Time constants variable.float.hour_world = worldTime * 0.001 -uniform.float.day_moment = hour_world * 0.04166666666666667 +uniform.float.dayMoment = hour_world * 0.04166666666666667 # Day color mixer (for shadows) - This formula allows graphing the function that is calculated later. # It allows setting values depending on the time of day. Particularly interesting are the transitions @@ -102,26 +106,26 @@ uniform.float.day_moment = hour_world * 0.04166666666666667 # f(x) = min(−((x−.25)^2)∙20 + 1.25, 1) # g(x) = min(−((x−.75)^2)∙50 + 3.125, 1) -variable.float.moment_aux = day_moment - 0.25 +variable.float.moment_aux = dayMoment - 0.25 variable.float.moment_aux_2 = moment_aux * moment_aux -uniform.float.day_mixer = clamp(-moment_aux_2 * 20.0 + 1.25, 0.0, 1.0) +uniform.float.dayMixer = clamp(-moment_aux_2 * 20.0 + 1.25, 0.0, 1.0) -variable.float.moment_aux_3 = day_moment - 0.75 +variable.float.moment_aux_3 = dayMoment - 0.75 variable.float.moment_aux_4 = moment_aux_3 * moment_aux_3 -uniform.float.night_mixer = clamp(-moment_aux_4 * 50.0 + 3.125, 0.0, 1.0) +uniform.float.nightMixer = clamp(-moment_aux_4 * 50.0 + 3.125, 0.0, 1.0) # Day color mixer (for volumetric light) - "Similar to the previous case, but applied to values # dependent on the time of day for volumetric lighting. -variable.float.moment_aux_5 = (day_moment * 4.0) - 1.0 +variable.float.moment_aux_5 = (dayMoment * 4.0) - 1.0 variable.float.moment_aux_6 = moment_aux_5 * moment_aux_5 * moment_aux_5 * moment_aux_5 variable.float.day_vol_mixer = clamp(((-moment_aux_6 + 1.0) * 7.0) + 1.0, 1.0, 8.0) -variable.float.moment_aux_7 = (day_moment * 4.0) - 3.0 +variable.float.moment_aux_7 = (dayMoment * 4.0) - 3.0 variable.float.moment_aux_8 = moment_aux_7 * moment_aux_7 * moment_aux_7 * moment_aux_7 variable.float.night_vol_mixer = clamp(((-moment_aux_8 + 1.0) * 7.0) + 1.0, 1.0, 8.0) -uniform.float.vol_mixer = max(day_vol_mixer, night_vol_mixer) +uniform.float.volumetricDayMixer = max(day_vol_mixer, night_vol_mixer) # Light mix - Similar to the previous cases, a value that depends on the time of day # to adjust various different parameters. @@ -131,10 +135,10 @@ variable.float.light_mix_c = 0.0 variable.float.light_mix_d = if(worldTime >= 22915 && worldTime < 23515, (worldTime - 22915) * 0.0016666666666666668, 0.0) variable.float.light_mix_e = max(light_mix_a, light_mix_b) variable.float.light_mix_f = max(light_mix_c, light_mix_d) -uniform.float.light_mix = max(light_mix_e, light_mix_f) +uniform.float.dayNightMix = max(light_mix_e, light_mix_f) # Frame modulus -uniform.int.frame_mod = fmod(frameCounter, 10) +uniform.int.frameMod = fmod(frameCounter, 16) # TAA OFFSET - The offset for TAA is precalculated here. # It is based on a pentagon (repeated twice as it is a multiple of the 10-frame module.) @@ -144,62 +148,81 @@ uniform.int.frame_mod = fmod(frameCounter, 10) # so fast that it is "absorbed" and better masked by the TAA history. #if AA_TYPE > 0 - # Pentagon - uniform.vec2.taa_offset = vec2((if( \ - frame_mod == 0, 0.7071067811865476, \ - frame_mod == 1, -0.5720614028176843, \ - frame_mod == 2, 0.2185080122244104, \ - frame_mod == 3, 0.21850801222441057, \ - frame_mod == 4, -0.5720614028176845, \ - frame_mod == 5, 0.7071067811865476, \ - frame_mod == 6, -0.5720614028176843, \ - frame_mod == 7, 0.2185080122244104, \ - frame_mod == 8, 0.21850801222441057, \ - frame_mod == 9, -0.5720614028176845, \ - 0.0)) * pixel_size_x, \ + uniform.vec2.taaOffset = vec2((if( \ + frameMod == 0, 0.5, \ + frameMod == 1, -0.5, \ + frameMod == 2, -0.5, \ + frameMod == 3, 0.5, \ + frameMod == 4, 0.5, \ + frameMod == 5, -0.5, \ + frameMod == 6, -0.5, \ + frameMod == 7, 0.5, \ + frameMod == 8, 0.5, \ + frameMod == 9, -0.5, \ + frameMod == 10, -0.5, \ + frameMod == 11, 0.5, \ + frameMod == 12, 0.5, \ + frameMod == 13, -0.5, \ + frameMod == 14, -0.5, \ + frameMod == 15, 0.5, \ + 0.0)) * pixelSizeX, \ (if( \ - frame_mod == 0, 0.0, \ - frame_mod == 1, 0.4156269377774535, \ - frame_mod == 2, -0.6724985119639574, \ - frame_mod == 3, 0.6724985119639574, \ - frame_mod == 4, -0.4156269377774534, \ - frame_mod == 5, 0.0, \ - frame_mod == 6, 0.4156269377774535, \ - frame_mod == 7, -0.6724985119639574, \ - frame_mod == 8, 0.6724985119639574, \ - frame_mod == 9, -0.4156269377774534, \ - 0.0)) * pixel_size_y) - - # Dither shift - When Temporal sampling is active, dithering patterns change over time, - # but not randomly. The dithering pattern remains fixed, but the assigned - # value to each point changes by adding a value defined here, so that they - # "rotate" in a controlled manner within the range of 0 to 1. - # When the sum exceeds 1.0, only the mantissa is taken. The changes are not completely random. - # They are incremental, but not by a fixed amount, but rather a fixed amount - # that was slightly altered by randomness. This only works in recent versions - # of Minecraft/Optifine. For older versions, a mechanism that depends on the - # uniform "frame_mod" is used to calculate the increment. - uniform.float.dither_shift = if( \ - frame_mod == 0, 0.0, \ - frame_mod == 1, 0.3264030514570224, \ - frame_mod == 2, 0.5978843761620217, \ - frame_mod == 3, 0.881799481995884, \ - frame_mod == 4, 0.22336905198854695, \ - frame_mod == 5, 0.5245207896967208, \ - frame_mod == 6, 0.7563679947882336, \ - frame_mod == 7, 0.08526513298080163, \ - frame_mod == 8, 0.39176966992085394, \ - frame_mod == 9, 0.6919630956391005, \ - 0.0) + frameMod == 0, 0.5, \ + frameMod == 1, -0.5, \ + frameMod == 2, 0.5, \ + frameMod == 3, -0.5, \ + frameMod == 4, 0.5, \ + frameMod == 5, -0.5, \ + frameMod == 6, 0.5, \ + frameMod == 7, -0.5, \ + frameMod == 8, 0.5, \ + frameMod == 9, -0.5, \ + frameMod == 10, 0.5, \ + frameMod == 11, -0.5, \ + frameMod == 12, 0.5, \ + frameMod == 13, -0.5, \ + frameMod == 14, 0.5, \ + frameMod == 15, -0.5, \ + 0.0)) * pixelSizeY) + + # Dither shift - When Temporal sampling is active, dithering patterns change over time. + # This only works in recent versions of Minecraft/Optifine/Iris. + # For older versions, a mechanism that depends on the + # uniform "frameMod" is used to calculate the increment. + + uniform.float.ditherShift = if( \ + frameMod == 0, 0.0625, \ + frameMod == 1, 0.4375, \ + frameMod == 2, 0.875, \ + frameMod == 3, 0.625, \ + frameMod == 4, 0.25, \ + frameMod == 5, 0.8125, \ + frameMod == 6, 0.125, \ + frameMod == 7, 0.9375, \ + frameMod == 8, 0.3125, \ + frameMod == 9, 0.5, \ + frameMod == 10, 0.375, \ + frameMod == 11, 0.5625, \ + frameMod == 12, 0.75, \ + frameMod == 13, 0.6875, \ + frameMod == 14, 0.1875, \ + frameMod == 15, 0.0, \ + 0.0) #endif # FOV - A precalculated value related to FOV -uniform.float.fov_y_inv = 1.0 / atan(1.0 / gbufferProjection.1.1) * 0.5 +uniform.float.fovYInverse = 1.0 / atan(1.0 / gbufferProjection.1.1) * 0.5 # float horizontalFOV = atan(1.0 / gbufferProjection[0].x); -# float verticalFOV = atan(1.0 / gbufferProjection[1].y); <-- fov_y_inv +# float verticalFOV = atan(1.0 / gbufferProjection[1].y); <-- fovYInverse #ifdef DISTANT_HORIZONS dhShadow.enabled = false blend.dh_water=SRC_ALPHA ONE_MINUS_SRC_ALPHA ONE ONE_MINUS_SRC_ALPHA -#endif \ No newline at end of file +#endif + +# BLOOM Mipmap level calculation +variable.float.softBaseSize = 128.0 +variable.float.softLodScale = max(1.0, viewHeight / softBaseSize) +# Optifine use 'log'. Divide with ln(2) (0.69314718) +uniform.float.softLod = max(0.0, log(softLodScale) / 0.69314718) \ No newline at end of file diff --git a/shaders/shadow.fsh b/shaders/shadow.fsh index bf49c99d..3baf476d 100644 --- a/shaders/shadow.fsh +++ b/shaders/shadow.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - shadow.fsh Render: Shadowmap @@ -6,7 +7,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define SHADOW_SHADER diff --git a/shaders/shadow.vsh b/shaders/shadow.vsh index 762cbbf9..9c2ef33d 100644 --- a/shaders/shadow.vsh +++ b/shaders/shadow.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - shadow.fsh Render: Shadowmap @@ -6,7 +7,7 @@ Javier Garduño - GNU Lesser General Public License v3.0 */ #ifdef USE_BASIC_SH - #define UNKNOWN_DIM + #define UNKNOWN_DIM #endif #define SHADOW_SHADER diff --git a/shaders/src/basiccoords_vertex.glsl b/shaders/src/basiccoords_vertex.glsl index eaf73b9d..6d438720 100644 --- a/shaders/src/basiccoords_vertex.glsl +++ b/shaders/src/basiccoords_vertex.glsl @@ -1,9 +1,9 @@ texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; #ifndef SHADER_BASIC - #ifdef WATER_F - lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy * 1.0323886639676114; - #else - vec2 lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy * 1.0323886639676114; - #endif + #ifdef WATER_F + lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy * 1.0323886639676114; + #else + vec2 lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy * 1.0323886639676114; + #endif #endif diff --git a/shaders/src/basiccoords_vertex_dh.glsl b/shaders/src/basiccoords_vertex_dh.glsl index 1158678c..3a4479fb 100644 --- a/shaders/src/basiccoords_vertex_dh.glsl +++ b/shaders/src/basiccoords_vertex_dh.glsl @@ -1,7 +1,7 @@ texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; #ifdef DH_WATER - lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy * 1.0323886639676114; + lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy * 1.0323886639676114; #else - vec2 lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy * 1.0323886639676114; + vec2 lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy * 1.0323886639676114; #endif diff --git a/shaders/src/cloudfinalcolor.glsl b/shaders/src/cloudfinalcolor.glsl index 9aff4506..865e5d4f 100644 --- a/shaders/src/cloudfinalcolor.glsl +++ b/shaders/src/cloudfinalcolor.glsl @@ -1,6 +1,16 @@ -block_color.rgb = - mix( - block_color.rgb, - texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb, - clamp(pow(gl_FogFragCoord / (far * 1.66), 1.5), 0.0, 1.0) - ); + +#if MC_VERSION < 12106 + blockColor.rgb = + mix( + blockColor.rgb, + texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), 0.0).rgb, + clamp(pow(gl_FogFragCoord / (far * 1.66), 1.5), 0.0, 1.0) + ); +#else + blockColor.rgb = + mix( + blockColor.rgb, + texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), 0.0).rgb, + clamp(pow(gl_FogFragCoord / (2000.0), 1.5), 0.0, 1.0) + ); +#endif diff --git a/shaders/src/finalcolor.glsl b/shaders/src/finalcolor.glsl index 0be66fae..a9df714c 100644 --- a/shaders/src/finalcolor.glsl +++ b/shaders/src/finalcolor.glsl @@ -1,63 +1,44 @@ #if defined THE_END - if (isEyeInWater == 0 && FOG_ADJUST < 15.0) { // In the air - block_color.rgb = - mix( - block_color.rgb, - ZENITH_DAY_COLOR, - frog_adjust - ); - } + if(isEyeInWater == 0 && FOG_ADJUST < 15.0) { // In the air + blockColor.rgb = mix(blockColor.rgb, ZENITH_DAY_COLOR, frogAdjust); + } #elif defined NETHER - if (isEyeInWater == 0 && FOG_ADJUST < 15.0) { // In the air - block_color.rgb = - mix( - block_color.rgb, - mix(fogColor * 0.1, vec3(1.0), 0.04), - frog_adjust - ); - } + if(isEyeInWater == 0 && FOG_ADJUST < 15.0) { // In the air + blockColor.rgb = mix(blockColor.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frogAdjust); + } #else - #ifdef FOG_ACTIVE // Fog active - #if MC_VERSION >= 11900 - vec3 fog_texture; - if (darknessFactor > .01) { - fog_texture = vec3(0.0); - } else { - fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; - } - #else - vec3 fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; + #ifdef FOG_ACTIVE // Fog active + #if MC_VERSION >= 11900 + vec3 fog_texture; + if(darknessFactor > .01) { + fog_texture = vec3(0.0); + } else { + fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY)).rgb; + } + #else + vec3 fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY)).rgb; + #endif + #if defined GBUFFER_ENTITIES + if(isEyeInWater == 0 && entityId != 10101 && FOG_ADJUST < 15.0) { // In the air + blockColor.rgb = mix(blockColor.rgb, fog_texture, frogAdjust); + // blockColor.rgb = mix(blockColor.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frogAdjust); + } + #else + if(isEyeInWater == 0) { // In the air + blockColor.rgb = mix(blockColor.rgb, fog_texture, frogAdjust); + // DEBUG + // /blockColor.rgb = mix(blockColor.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frogAdjust); + } + #endif #endif - #if defined GBUFFER_ENTITIES - if (isEyeInWater == 0 && entityId != 10101 && FOG_ADJUST < 15.0) { // In the air - block_color.rgb = - mix( - block_color.rgb, - fog_texture, - frog_adjust - ); - } - #else - if (isEyeInWater == 0) { // In the air - block_color.rgb = - mix( - block_color.rgb, - fog_texture, - frog_adjust - ); - } - #endif - #endif #endif #if MC_VERSION >= 11900 - if (blindness > .01 || darknessFactor > .01) { - block_color.rgb = - mix(block_color.rgb, vec3(0.0), max(blindness, darknessLightFactor) * gl_FogFragCoord * 0.24); - } + if(blindness > .01 || darknessFactor > .01) { + blockColor.rgb = mix(blockColor.rgb, vec3(0.0), max(blindness, darknessLightFactor) * gl_FogFragCoord * 0.24); + } #else - if (blindness > .01) { - block_color.rgb = - mix(block_color.rgb, vec3(0.0), blindness * gl_FogFragCoord * 0.24); - } + if(blindness > .01) { + blockColor.rgb = mix(blockColor.rgb, vec3(0.0), blindness * gl_FogFragCoord * 0.24); + } #endif \ No newline at end of file diff --git a/shaders/src/finalcolor_dh.glsl b/shaders/src/finalcolor_dh.glsl index 14f9a8a7..eb35e66b 100644 --- a/shaders/src/finalcolor_dh.glsl +++ b/shaders/src/finalcolor_dh.glsl @@ -1,26 +1,17 @@ -#if defined DH_WATER - if (isEyeInWater == 0) { - vec3 fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; - block_color.rgb = - mix( - block_color.rgb, - fog_texture, - frog_adjust - ); - } -#elif defined NETHER - block_color.rgb = - mix( - block_color.rgb, - mix(fogColor * 0.1, vec3(1.0), 0.04), - frog_adjust - ); -#else - vec3 fog_texture = texture2D(gaux4, gl_FragCoord.xy * vec2(pixel_size_x, pixel_size_y)).rgb; - block_color.rgb = - mix( - block_color.rgb, - fog_texture, - frog_adjust - ); +#ifdef FOG_ACTIVE // Fog active + #if defined DH_WATER + if(isEyeInWater == 0) { + vec3 fog_texture = texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), 0.0).rgb; + blockColor.rgb = mix(blockColor.rgb, fog_texture, frogAdjust); + } + #elif defined NETHER + #if NETHER_FOG_DISTANCE == 1 + blockColor.rgb = mix(fogColor * 0.1, vec3(1.0), 0.04); + #else + blockColor.rgb = mix(blockColor.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frogAdjust); + #endif + #else + vec3 fog_texture = texture2DLod(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), 0.0).rgb; + blockColor.rgb = mix(blockColor.rgb, fog_texture, frogAdjust); + #endif #endif \ No newline at end of file diff --git a/shaders/src/finalcolor_voxy.glsl b/shaders/src/finalcolor_voxy.glsl new file mode 100644 index 00000000..cdfc78a3 --- /dev/null +++ b/shaders/src/finalcolor_voxy.glsl @@ -0,0 +1,17 @@ +#ifdef FOG_ACTIVE // Fog active + #if defined VOXY_WATER + if(isEyeInWater == 0) { + vec3 fog_texture = textureLod(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), 0.0).rgb; + blockColor.rgb = mix(blockColor.rgb, fog_texture, frogAdjust); + } + #elif defined NETHER + #if NETHER_FOG_DISTANCE == 1 + blockColor.rgb = mix(fogColor * 0.1, vec3(1.0), 0.04); + #else + blockColor.rgb = mix(blockColor.rgb, mix(fogColor * 0.1, vec3(1.0), 0.04), frogAdjust); + #endif + #else + vec3 fog_texture = textureLod(gaux4, gl_FragCoord.xy * vec2(pixelSizeX, pixelSizeY), 0.0).rgb; + blockColor.rgb = mix(blockColor.rgb, fog_texture, frogAdjust); + #endif +#endif \ No newline at end of file diff --git a/shaders/src/fog_vertex.glsl b/shaders/src/fog_vertex.glsl index 567bdca8..aadc47cc 100644 --- a/shaders/src/fog_vertex.glsl +++ b/shaders/src/fog_vertex.glsl @@ -1,47 +1,56 @@ #if !defined THE_END && !defined NETHER - // Fog intensity calculation - #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - float fog_density_coeff = FOG_DENSITY * FOG_ADJUST; - #else - float fog_density_coeff = day_blend_float( - FOG_SUNSET, - FOG_DAY, - FOG_NIGHT - ) * FOG_ADJUST; - #endif - - float fog_intensity_coeff = eye_bright_smooth.y * 0.004166666666666667; + // Fog intensity calculation + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + float fogDensityCoeff = FOG_DENSITY * FOG_ADJUST; + #else + float fogDensityCoeff = dayBlendFloat( + FOG_SUNSET, + FOG_DAY, + FOG_NIGHT + ) * FOG_ADJUST; + #endif - #ifdef DISTANT_HORIZONS - frog_adjust = pow( - clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fog_intensity_coeff, - mix(fog_density_coeff * 0.2, 0.5, rainStrength) - ); - #else - frog_adjust = pow( - clamp(gl_FogFragCoord / far, 0.0, 1.0) * fog_intensity_coeff, - mix(fog_density_coeff, 1.0, rainStrength) - ); - #endif + float fogIntensityCoeff = max(eyeBrightSmoothFloat.y * 0.004166666666666667, visibleSky); -#else - #if defined NETHER - #if NETHER_FOG_DISTANCE == 1 - float sight = NETHER_SIGHT; + #ifdef DISTANT_HORIZONS + frogAdjust = pow( + clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fogIntensityCoeff, + mix(fogDensityCoeff * 0.15, 0.5, rainStrength) + ); + #elif defined VOXY + frogAdjust = pow( + clamp(gl_FogFragCoord / (vxRenderDistance * 16), 0.0, 1.0) * fogIntensityCoeff, + mix(fogDensityCoeff * 0.15, 0.5, rainStrength) + ); #else - #if defined DISTANT_HORIZONS - float sight = dhRenderDistance; - #else - float sight = NETHER_SIGHT; - #endif + frogAdjust = pow( + clamp(gl_FogFragCoord / far, 0.0, 1.0) * fogIntensityCoeff, + mix(fogDensityCoeff, 1.0, rainStrength) + ); #endif - #else - #if defined DISTANT_HORIZONS - float sight = dhRenderDistance; + +#else + #if defined NETHER + #if NETHER_FOG_DISTANCE == 1 + float sight = NETHER_SIGHT; + #else + #if defined DISTANT_HORIZONS + float sight = dhRenderDistance; + #elif defined VOXY + float sight = (vxRenderDistance * 16); + #else + float sight = NETHER_SIGHT; + #endif + #endif #else - float sight = far; + #if defined DISTANT_HORIZONS + float sight = dhRenderDistance; + #elif defined VOXY + float sight = (vxRenderDistance * 16); + #else + float sight = far; + #endif #endif - #endif - frog_adjust = sqrt(clamp(gl_FogFragCoord / sight, 0.0, 1.0)); + frogAdjust = sqrt(clamp(gl_FogFragCoord / sight, 0.0, 1.0)); #endif diff --git a/shaders/src/fog_vertex_dh.glsl b/shaders/src/fog_vertex_dh.glsl new file mode 100644 index 00000000..3ea3d9c6 --- /dev/null +++ b/shaders/src/fog_vertex_dh.glsl @@ -0,0 +1,9 @@ +#if !defined THE_END && !defined NETHER + float fogIntensityCoeff = max(eyeBrightSmoothFloat.y * 0.004166666666666667, visibleSky); + frogAdjust = pow( + clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fogIntensityCoeff, + mix(fogDensityCoeff * 0.15, 0.5, rainStrength) + ); +#else + frogAdjust = sqrt(clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0)); +#endif \ No newline at end of file diff --git a/shaders/src/hi_sky.glsl b/shaders/src/hi_sky.glsl new file mode 100644 index 00000000..9c3c9944 --- /dev/null +++ b/shaders/src/hi_sky.glsl @@ -0,0 +1,18 @@ +#ifdef UNKNOWN_DIM + vec3 ZenithSkyColorRGB = skyColor; + zenithSkyColor = rgbToXyz(ZenithSkyColorRGB); +#else + vec3 ZenithSkyColorRGB = dayBlend( + ZENITH_SUNSET_COLOR, + ZENITH_DAY_COLOR, + ZENITH_NIGHT_COLOR + ); + + ZenithSkyColorRGB = mix( + ZenithSkyColorRGB, + ZENITH_SKY_RAIN_COLOR * luma(ZenithSkyColorRGB), + rainStrength + ); + + zenithSkyColor = rgbToXyz(ZenithSkyColorRGB); +#endif \ No newline at end of file diff --git a/shaders/src/hi_sky_voxy.glsl b/shaders/src/hi_sky_voxy.glsl new file mode 100644 index 00000000..7428c494 --- /dev/null +++ b/shaders/src/hi_sky_voxy.glsl @@ -0,0 +1,21 @@ +#ifdef UNKNOWN_DIM + vec3 ZenithSkyColorRGB = skyColor; + vec3 zenithSkyColor = rgbToXyz(ZenithSkyColorRGB); +#else + vec3 ZenithSkyColorRGB = dayBlendVoxy( + ZENITH_SUNSET_COLOR, + ZENITH_DAY_COLOR, + ZENITH_NIGHT_COLOR, + dayMixerV, + nightMixerV, + dayMomentV + ); + + ZenithSkyColorRGB = mix( + ZenithSkyColorRGB, + ZENITH_SKY_RAIN_COLOR * luma(ZenithSkyColorRGB), + rainStrength + ); + + vec3 zenithSkyColor = rgbToXyz(ZenithSkyColorRGB); +#endif \ No newline at end of file diff --git a/shaders/src/light_vertex.glsl b/shaders/src/light_vertex.glsl index 01fe7cf6..6fdb4207 100644 --- a/shaders/src/light_vertex.glsl +++ b/shaders/src/light_vertex.glsl @@ -1,179 +1,136 @@ -tint_color = gl_Color; +tintColor = gl_Color; -// Luz nativa (lmcoord.x: candela, lmcoord.y: cielo) ---- +// Native light (lmcoord.x: candel, lmcoord.y: sky) ---- vec2 illumination = lmcoord; -illumination.y = (max(illumination.y, 0.065) - 0.065) * 1.06951871657754; +illumination.y = max(illumination.y - 0.065, 0.0) * 1.06951871657754; +visibleSky = clamp(illumination.y, 0.0, 1.0); -// Visibilidad del cielo -#ifdef WATER_F - visible_sky = illumination.y; -#else - float visible_sky = illumination.y; -#endif -visible_sky = clamp(visible_sky, 0.0, 1.0); - -// Ajuste de intensidad luminosa bajo el agua +// Underwater light adjust if (isEyeInWater == 1) { - visible_sky = (visible_sky * .95) + .05; + visibleSky = (visibleSky * .95) + .05; } #if defined UNKNOWN_DIM - visible_sky = (visible_sky * 0.6) + 0.4; + visibleSky = (visibleSky * 0.99) + 0.01; #endif -// Intensidad y color de luz de candelas -#if defined UNKNOWN_DIM - candle_color = - CANDLE_BASELIGHT * ((illumination.x * illumination.x) + sixth_pow(illumination.x * 1.205)) * 2.75; -#else - candle_color = - CANDLE_BASELIGHT * (pow(illumination.x, 1.5) + sixth_pow(illumination.x * 1.17)); -#endif +// Candels color and intensity +candleColor = CANDLE_BASELIGHT * (illumination.x * sqrt(illumination.x) + sixthPow(illumination.x * 1.17)); #ifdef DYN_HAND_LIGHT - float dist_factor; - float hand_dist; - vec3 hand_light; - - if (heldItemId == 11001 || heldItemId2 == 11001) { // Normal light - hand_dist = (1.0 - clamp((gl_FogFragCoord * 0.06666666666666667), 0.0, 1.0)); - hand_light = CANDLE_BASELIGHT * (pow(hand_dist, 1.5) + sixth_pow(hand_dist * 1.17)); - candle_color = max(candle_color, hand_light); - } else if (heldItemId == 11002 || heldItemId2 == 11002) { - hand_dist = (1.0 - clamp((gl_FogFragCoord * 0.06666666666666667) + 0.5, 0.0, 1.0)); - hand_light = CANDLE_BASELIGHT * (pow(hand_dist, 1.5) + sixth_pow(hand_dist * 1.17)); - candle_color = max(candle_color, hand_light); - } + if (heldItemId == 11001 || heldItemId2 == 11001 || heldItemId == 11002 || heldItemId2 == 11002) { + float distanceOffset = (heldItemId == 11001 || heldItemId2 == 11001) ? 0.0 : 0.5; + float handDistance = (1.0 - clamp((gl_FogFragCoord * 0.06666666666666667) + distanceOffset, 0.0, 1.0)); + vec3 handLight = CANDLE_BASELIGHT * (handDistance * sqrt(handDistance) + sixthPow(handDistance * 1.17)); + candleColor = max(candleColor, handLight); + } #endif -candle_color = clamp(candle_color, vec3(0.0), vec3(4.0)); +candleColor = clamp(candleColor, vec3(0.0), vec3(4.0)); -// Atenuación por dirección de luz directa =================================== +// Atenuation by light angle =================================== #if defined THE_END || defined NETHER - vec3 sun_vec = - normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; + vec3 astroVector = normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; #else - vec3 sun_vec = normalize(sunPosition); + vec3 astroVector = normalize(sunPosition); #endif vec3 normal = gl_NormalMatrix * gl_Normal; -float sun_light_strength; -if (length(normal) != 0.0) { // Workaround for undefined normals - normal = normalize(normal); - sun_light_strength = dot(normal, sun_vec); +float astroLightStrength; +if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals + normal = normalize(normal); + astroLightStrength = dot(normal, astroVector); } else { - normal = vec3(0.0, 1.0, 0.0); - sun_light_strength = 1.0; + normal = vec3(0.0, 1.0, 0.0); + astroLightStrength = 1.0; } #if defined THE_END || defined NETHER - direct_light_strength = sun_light_strength; + directLightStrength = astroLightStrength; #else - direct_light_strength = - mix(-sun_light_strength, sun_light_strength, light_mix); + directLightStrength = mix(-astroLightStrength, astroLightStrength, dayNightMix); #endif -// Intensidad por dirección -float omni_strength = (direct_light_strength * .125) + 1.0; - -// Calculamos color de luz directa +// Direct light color #ifdef UNKNOWN_DIM - direct_light_color = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; + directLightColor = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; #else - direct_light_color = day_blend( - LIGHT_SUNSET_COLOR, - LIGHT_DAY_COLOR, - LIGHT_NIGHT_COLOR - ); + directLightColor = dayBlend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); + #if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 + directLightColor += (endFlashIntensity * endFlashIntensity * 0.1); + #endif #endif -#ifdef FOLIAGE_V // Puede haber plantas en este shader - float original_direct_light_strength = clamp(direct_light_strength, 0.0, 1.0) * 0.9 + 0.1; - if (is_foliage > .2) { // Es "planta" y se atenúa luz por dirección - #ifdef SHADOW_CASTING - direct_light_strength = sqrt(abs(direct_light_strength)); - #else - direct_light_strength = (clamp(direct_light_strength, 0.0, 1.0) * 0.5 + 0.5) * 0.75; - #endif +// Omni light intensity changes by angle +float omniStrength = ((directLightStrength + 1.0) * 0.25) + 0.75; - omni_strength = 1.0; - } else { - direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); - } +// Direct light strenght -- +#ifdef FOLIAGE_V // This shader has foliage + // --- CORRECCIÓN: La variable se declara y calcula aquí, fuera del if/else --- + // Esto asegura que 'farDirectLightStrength' esté siempre disponible después de este bloque. + float farDirectLightStrength = clamp(directLightStrength, 0.0, 1.0); + if (mc_Entity.x != ENTITY_LEAVES) { + farDirectLightStrength = farDirectLightStrength * 0.75 + 0.25; + } + + // Ahora, la lógica del if/else solo modifica 'directLightStrength' y 'omniStrength'. + if (isFoliage > .2) { // It's foliage, light is atenuated by angle + #ifdef SHADOW_CASTING + directLightStrength = sqrt(abs(directLightStrength)); + #else + directLightStrength = (clamp(directLightStrength, 0.0, 1.0) * 0.5 + 0.5) * 0.75; + #endif + omniStrength = 1.0; + } else { + directLightStrength = clamp(directLightStrength, 0.0, 1.0); + } #else - direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); + directLightStrength = clamp(directLightStrength, 0.0, 1.0); #endif +// Omni light color #if defined THE_END || defined NETHER - omni_light = LIGHT_DAY_COLOR; + omniLight = LIGHT_DAY_COLOR * omniStrength; #else - // Calculamos color de luz ambiental - - vec3 hi_sky_color = day_blend( - ZENITH_SUNSET_COLOR, - ZENITH_DAY_COLOR, - ZENITH_NIGHT_COLOR - ); - - vec3 sky_rain_color = ZENITH_SKY_RAIN_COLOR * luma(hi_sky_color); - - #ifdef SIMPLE_AUTOEXP - direct_light_color = mix( - direct_light_color, - ZENITH_SKY_RAIN_COLOR * luma(direct_light_color), - rainStrength - ); - #else - direct_light_color = mix( - direct_light_color, - ZENITH_SKY_RAIN_COLOR * luma(direct_light_color) * 0.4, - rainStrength - ); - #endif - - hi_sky_color = mix( - hi_sky_color, - sky_rain_color, - rainStrength - ); - - float sky_day_pseudoluma = color_average(ZENITH_DAY_COLOR); - float current_sky_pseudoluma = color_average(hi_sky_color); - - float luma_ratio = sky_day_pseudoluma / current_sky_pseudoluma; - - // Luz mínima - float omni_minimal = AVOID_DARK_LEVEL * luma_ratio; - float visible_avoid_dark = (pow(visible_sky, 1.5) * (1.0 - omni_minimal)) + omni_minimal; - - omni_light = visible_avoid_dark * omni_strength * - mix(hi_sky_color, direct_light_color * 0.75, OMNI_TINT); + directLightColor = mix(directLightColor, ZENITH_SKY_RAIN_COLOR * luma(directLightColor) * 0.4, rainStrength); + + // Minimal light + vec3 omniColor = mix(ZenithSkyColorRGB, directLightColor * 0.45, OMNI_TINT); + float omniColorLuma = colorAverage(omniColor); + // --- OPTIMIZACIÓN #3: Prevenir división por cero --- + float lumaRatio = AVOID_DARK_LEVEL / max(omniColorLuma, 0.0001); + vec3 omniColorMin = omniColor * lumaRatio; + omniColor = max(omniColor, omniColorMin); + omniLight = mix(omniColorMin, omniColor, visibleSky) * omniStrength; #endif +// Avoid flat illumination in caves for entities #ifdef CAVEENTITY_V - // Avoid flat illumination in caves for entities - float candle_cave_strength = (direct_light_strength * .5) + .5; - candle_cave_strength = - mix(candle_cave_strength, 1.0, visible_sky); - candle_color *= candle_cave_strength; + float candleCaveStrength = (directLightStrength * .5) + .5; + candleCaveStrength = mix(candleCaveStrength, 1.0, visibleSky); + candleColor *= candleCaveStrength; #endif #if !defined THE_END && !defined NETHER - #ifndef SHADOW_CASTING - // Fake shadows - if (isEyeInWater == 0) { - direct_light_strength = mix(0.0, direct_light_strength, pow(visible_sky, 10.0)); - } else { - direct_light_strength = mix(0.0, direct_light_strength, visible_sky); - } - #else - direct_light_strength = mix(0.0, direct_light_strength, visible_sky); - #endif + #ifndef SHADOW_CASTING + // Fake shadows + if (isEyeInWater == 0) { + // Reemplazar pow(x, 10.0) con multiplicaciones --- + float visSky2 = visibleSky * visibleSky; + float visSky4 = visSky2 * visSky2; + float visSky8 = visSky4 * visSky4; + directLightStrength = mix(0.0, directLightStrength, visSky8 * visSky2); + } else { + directLightStrength = mix(0.0, directLightStrength, visibleSky); + } + #else + directLightStrength = mix(0.0, directLightStrength, visibleSky); + #endif #endif #ifdef EMMISIVE_V - if (is_fake_emmisor > 0.5) { - direct_light_strength = 10.0; - } + if (isFakeEmmisor > 0.5) { + omniLight = vec3(0.45); + } #endif \ No newline at end of file diff --git a/shaders/src/light_vertex_dh.glsl b/shaders/src/light_vertex_dh.glsl index f9e06a42..79919764 100644 --- a/shaders/src/light_vertex_dh.glsl +++ b/shaders/src/light_vertex_dh.glsl @@ -1,132 +1,96 @@ -tint_color = gl_Color; +tintColor = gl_Color; // Luz nativa (lmcoord.x: candela, lmcoord.y: cielo) ---- #if defined THE_END || defined NETHER - vec2 illumination = vec2(lmcoord.x, 1.0); + vec2 illumination = vec2(lmcoord.x, 1.0); #else - vec2 illumination = lmcoord; + vec2 illumination = lmcoord; #endif -illumination.y = (max(illumination.y, 0.065) - 0.065) * 1.06951871657754; -// Visibilidad del cielo -#if defined WATER_F || defined DH_WATER - visible_sky = illumination.y; -#else - float visible_sky = illumination.y; -#endif -visible_sky = clamp(visible_sky, 0.0, 1.0); +illumination.y = max(illumination.y - 0.065, 0.0) * 1.06951871657754; +visibleSky = clamp(illumination.y, 0.0, 1.0); #if defined UNKNOWN_DIM - visible_sky = (visible_sky * 0.6) + 0.4; + visibleSky = (visibleSky * 0.6) + 0.4; #endif // Intensidad y color de luz de candelas -#if defined UNKNOWN_DIM - candle_color = - CANDLE_BASELIGHT * ((illumination.x * illumination.x) + sixth_pow(illumination.x * 1.205)) * 2.75; -#else - candle_color = - CANDLE_BASELIGHT * (pow(illumination.x, 1.5) + sixth_pow(illumination.x * 1.17)); -#endif - -candle_color = clamp(candle_color, vec3(0.0), vec3(4.0)); +float candle_luma = illumination.x * sqrt(illumination.x); +candleColor = CANDLE_BASELIGHT * (candle_luma + sixthPow(illumination.x * 1.17)); +candleColor = clamp(candleColor, vec3(0.0), vec3(4.0)); // Atenuación por dirección de luz directa =================================== #if defined THE_END || defined NETHER - vec3 sun_vec = - normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; + vec3 astroVector = normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; #else - vec3 sun_vec = normalize(sunPosition); + vec3 astroVector = normalize(sunPosition); #endif vec3 normal = gl_NormalMatrix * gl_Normal; -float sun_light_strength; -if (length(normal) != 0.0) { // Workaround for undefined normals - normal = normalize(normal); - sun_light_strength = dot(normal, sun_vec); +float astroLightStrength; + +// Comprobar la longitud al cuadrado (dot product) es mucho más rápido que la longitud (sqrt). +if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals + normal = normalize(normal); + astroLightStrength = dot(normal, astroVector); } else { - normal = vec3(0.0, 1.0, 0.0); - sun_light_strength = 1.0; + normal = vec3(0.0, 1.0, 0.0); + astroLightStrength = 1.0; } #if defined THE_END || defined NETHER - direct_light_strength = sun_light_strength; + directLightStrength = astroLightStrength; #else - direct_light_strength = - mix(-sun_light_strength, sun_light_strength, light_mix); + directLightStrength = mix(-astroLightStrength, astroLightStrength, dayNightMix); #endif -// Intensidad por dirección -float omni_strength = (direct_light_strength * .125) + 1.0; +// Omni light intensity changes by angle +float omniStrength = ((directLightStrength + 1.0) * 0.25) + 0.75; // Calculamos color de luz directa #ifdef UNKNOWN_DIM - direct_light_color = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; + directLightColor = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; #else - direct_light_color = day_blend( - LIGHT_SUNSET_COLOR, - LIGHT_DAY_COLOR, - LIGHT_NIGHT_COLOR - ); + directLightColor = dayBlend(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR); + #if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 + directLightColor += (endFlashIntensity * endFlashIntensity * 0.1); + #endif #endif -direct_light_strength = clamp(direct_light_strength, 0.0, 1.0); +directLightStrength = clamp(directLightStrength, 0.0, 1.0); #if defined THE_END || defined NETHER - omni_light = LIGHT_DAY_COLOR; + omniLight = LIGHT_DAY_COLOR; #else - // Calculamos color de luz ambiental - - // vec3 hi_sky_color = day_blend( - // ZENITH_SUNSET_COLOR, - // ZENITH_DAY_COLOR, - // ZENITH_NIGHT_COLOR - // ); - - vec3 sky_rain_color = ZENITH_SKY_RAIN_COLOR * luma(hi_sky_color); - - #ifdef SIMPLE_AUTOEXP - direct_light_color = mix( - direct_light_color, - ZENITH_SKY_RAIN_COLOR * luma(direct_light_color), - rainStrength - ); - #else - direct_light_color = mix( - direct_light_color, - ZENITH_SKY_RAIN_COLOR * luma(direct_light_color) * 0.4, - rainStrength - ); - #endif - - hi_sky_color = mix( - hi_sky_color, - sky_rain_color, - rainStrength - ); - - float sky_day_pseudoluma = color_average(ZENITH_DAY_COLOR); - float current_sky_pseudoluma = color_average(hi_sky_color); - - float luma_ratio = sky_day_pseudoluma / current_sky_pseudoluma; - - // Luz mínima - float omni_minimal = AVOID_DARK_LEVEL * luma_ratio; - float visible_avoid_dark = (pow(visible_sky, 1.5) * (1.0 - omni_minimal)) + omni_minimal; - - omni_light = visible_avoid_dark * omni_strength * - mix(hi_sky_color, direct_light_color * 0.75, OMNI_TINT); - + directLightColor = mix(directLightColor, ZENITH_SKY_RAIN_COLOR * luma(directLightColor) * 0.4, rainStrength); + + // Minimal light + vec3 omniColor = mix(ZenithSkyColorRGB, directLightColor * 0.45, OMNI_TINT); + float omniColorLuma = colorAverage(omniColor); + + // --- OPTIMIZACIÓN #3: Prevenir división por cero --- + float lumaRatio = AVOID_DARK_LEVEL / max(omniColorLuma, 0.0001); + + vec3 omniColorMin = omniColor * lumaRatio; + omniColor = max(omniColor, omniColorMin); + + omniLight = mix(omniColorMin, omniColor, visibleSky) * omniStrength; #endif if (isEyeInWater == 0) { - direct_light_strength = mix(0.0, direct_light_strength, pow(visible_sky, 10.0)); + // Reemplazar pow(x, 10.0) con multiplicaciones --- + // Esto es órdenes de magnitud más rápido. x^10 = (x^2)^2 * x^2 + float visSky2 = visibleSky * visibleSky; // x^2 + float visSky4 = visSky2 * visSky2; // x^4 + float visSky8 = visSky4 * visSky4; // x^8 + float vis_sky_10 = visSky8 * visSky2; // x^10 + directLightStrength = mix(0.0, directLightStrength, vis_sky_10); } else { - direct_light_strength = mix(0.0, direct_light_strength, visible_sky); + directLightStrength = mix(0.0, directLightStrength, visibleSky); } if (dhMaterialId == DH_BLOCK_ILLUMINATED) { - direct_light_strength = 10.0; + directLightStrength = 10.0; } else if (dhMaterialId == DH_BLOCK_LAVA) { - direct_light_strength = 1.0; + directLightStrength = 1.0; } diff --git a/shaders/src/low_sky.glsl b/shaders/src/low_sky.glsl new file mode 100644 index 00000000..38d7cced --- /dev/null +++ b/shaders/src/low_sky.glsl @@ -0,0 +1,18 @@ +#ifdef UNKNOWN_DIM + vec3 horizonSkyColorRGB = fogColor; + horizonSkyColor = rgbToXyz(horizonSkyColorRGB); +#else + vec3 horizonSkyColorRGB = dayBlend( + HORIZON_SUNSET_COLOR, + HORIZON_DAY_COLOR, + HORIZON_NIGHT_COLOR + ); + + horizonSkyColorRGB = mix( + horizonSkyColorRGB, + HORIZON_SKY_RAIN_COLOR * luma(horizonSkyColorRGB), + rainStrength + ); + + horizonSkyColor = rgbToXyz(horizonSkyColorRGB); +#endif \ No newline at end of file diff --git a/shaders/src/low_sky_voxy.glsl b/shaders/src/low_sky_voxy.glsl new file mode 100644 index 00000000..d3708ecf --- /dev/null +++ b/shaders/src/low_sky_voxy.glsl @@ -0,0 +1,21 @@ +#ifdef UNKNOWN_DIM + vec3 horizonSkyColorRGB = fogColor; + vec3 horizonSkyColor = rgbToXyz(horizonSkyColorRGB); +#else + vec3 horizonSkyColorRGB = dayBlendVoxy( + HORIZON_SUNSET_COLOR, + HORIZON_DAY_COLOR, + HORIZON_NIGHT_COLOR, + dayMixerV, + nightMixerV, + dayMomentV + ); + + horizonSkyColorRGB = mix( + horizonSkyColorRGB, + HORIZON_SKY_RAIN_COLOR * luma(horizonSkyColorRGB), + rainStrength + ); + + vec3 horizonSkyColor = rgbToXyz(horizonSkyColorRGB); +#endif \ No newline at end of file diff --git a/shaders/src/position_vertex.glsl b/shaders/src/position_vertex.glsl index 2f910e51..816c9008 100644 --- a/shaders/src/position_vertex.glsl +++ b/shaders/src/position_vertex.glsl @@ -1,90 +1,81 @@ -// Waving plants calculation -#ifdef FOLIAGE_V - #if WAVING == 1 - vec4 sub_position = gl_ModelViewMatrix * gl_Vertex; - vec4 position = - gbufferModelViewInverse * sub_position; +gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - vec3 worldpos = position.xyz + cameraPosition; +#ifdef FOLIAGE_V // Lógica optimizada para follaje y bloques generales + + isFoliage = 0.0; - is_foliage = 0.0; - - if ( + // Comprobamos si la entidad actual es un tipo de follaje. + bool isFoliageEntity = ( mc_Entity.x == ENTITY_LOWERGRASS || mc_Entity.x == ENTITY_UPPERGRASS || mc_Entity.x == ENTITY_SMALLGRASS || mc_Entity.x == ENTITY_SMALLENTS || - mc_Entity.x == ENTITY_LEAVES) - { - is_foliage = .4; - - float weight = float(gl_MultiTexCoord0.t < mc_midTexCoord.t); - - if (mc_Entity.x == ENTITY_UPPERGRASS) { - weight += 1.0; - } else if (mc_Entity.x == ENTITY_LEAVES) { - weight = .3; - } else if (mc_Entity.x == ENTITY_SMALLENTS && (weight > 0.9 || fract(worldpos.y + 0.0675) > 0.01)) { - weight = 1.0; - } - - weight *= lmcoord.y * lmcoord.y; // Evitamos movimiento en cuevas - position.xyz += wave_move(worldpos.xzy) * weight * (0.03 + (rainStrength * .05)); + mc_Entity.x == ENTITY_LEAVES || + mc_Entity.x == ENTITY_SMALLENTS_NW + ); + + vec4 viewPosition = gl_ModelViewMatrix * gl_Vertex; + vec4 position = gbufferModelViewInverse * viewPosition; + + if (isFoliageEntity) { + isFoliage = 0.4; + + #if WAVING == 1 + if (mc_Entity.x != ENTITY_SMALLENTS_NW) { + vec3 worldpos = position.xyz + cameraPosition; + + // Lógica original para calcular el peso del movimiento + float weight = float(gl_MultiTexCoord0.t < mc_midTexCoord.t); + + if (mc_Entity.x == ENTITY_UPPERGRASS) { + weight += 1.0; + } else if (mc_Entity.x == ENTITY_LEAVES) { + weight = .3; + } else if (mc_Entity.x == ENTITY_SMALLENTS && (weight > 0.9 || fract(worldpos.y + 0.0675) > 0.01)) { + weight = 1.0; + } + + weight *= lmcoord.y * lmcoord.y; + + // Calculamos el DESPLAZAMIENTO y lo añadimos a la posición base ya calculada. + vec3 waveOffsetWorld = wave_move(worldpos.xzy) * weight * (0.03 + (rainStrength * .05)); + vec4 waveOffsetClip = gl_ModelViewProjectionMatrix * vec4(waveOffsetWorld, 0.0); + + gl_Position += waveOffsetClip; + } + #endif } - gl_Position = gl_ProjectionMatrix * gbufferModelView * position; - - #else // Normal position - is_foliage = 0.0; - if (mc_Entity.x == ENTITY_LOWERGRASS || - mc_Entity.x == ENTITY_UPPERGRASS || - mc_Entity.x == ENTITY_SMALLGRASS || - mc_Entity.x == ENTITY_SMALLENTS || - mc_Entity.x == ENTITY_LEAVES) - { - is_foliage = .4; - } +#else // Lógica para cuando no es un shader con follaje (p. ej. entidades) - vec4 sub_position = gl_ModelViewMatrix * gl_Vertex; - vec4 position = - gbufferModelViewInverse * sub_position; - - gl_Position = gl_ProjectionMatrix * gbufferModelView * position; - - #endif - -#else - vec4 sub_position = gl_ModelViewMatrix * gl_Vertex; - #ifndef NO_SHADOWS - #ifdef SHADOW_CASTING - vec4 position = - gbufferModelViewInverse * sub_position; + vec4 viewPosition = gl_ModelViewMatrix * gl_Vertex; + #ifndef NO_SHADOWS + #ifdef SHADOW_CASTING + vec4 position = gbufferModelViewInverse * viewPosition; + #endif #endif - #endif - - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - + #endif #ifdef EMMISIVE_V - float is_fake_emmisor = 0.0; - if (mc_Entity.x == ENTITY_F_EMMISIVE) - { - is_fake_emmisor = 1.0; - } + float isFakeEmmisor = float(mc_Entity.x == ENTITY_F_EMMISIVE); #endif #if AA_TYPE > 1 - gl_Position.xy += taa_offset * gl_Position.w; + gl_Position.xy += taaOffset * gl_Position.w; #endif #ifndef SHADER_BASIC - vec3 viewPos = gl_Position.xyz / gl_Position.w; - vec4 homopos = gbufferProjectionInverse * vec4(viewPos, 1.0); - viewPos = homopos.xyz / homopos.w; - #if defined GBUFFER_CLOUDS - gl_FogFragCoord = length(viewPos.xz); - #else - gl_FogFragCoord = length(viewPos.xyz); - #endif + vec4 homopos = gbufferProjectionInverse * vec4(gl_Position.xyz / gl_Position.w, 1.0); + vec3 viewPos = homopos.xyz / homopos.w; + + #if defined GBUFFER_CLOUDS + gl_FogFragCoord = length(viewPos.xz); + #else + gl_FogFragCoord = length(viewPos.xyz); + #endif #endif + +#if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER && !defined GBUFFER_BASIC && !defined GBUFFER_CLOUDS && !defined GBUFFER_ARMOR_GLINT && !defined GBUFFER_SPIDEREYES + vWorldPos = position.xyz; +#endif \ No newline at end of file diff --git a/shaders/src/position_vertex_dh.glsl b/shaders/src/position_vertex_dh.glsl index db216c7d..436db233 100644 --- a/shaders/src/position_vertex_dh.glsl +++ b/shaders/src/position_vertex_dh.glsl @@ -1,31 +1,24 @@ position = gbufferModelViewInverse * gl_ModelViewMatrix * gl_Vertex; + +if(dhMaterialId == DH_BLOCK_WATER) { // Water + position.y -= 0.125; +} + gl_Position = dhProjection * gbufferModelView * position; #if AA_TYPE > 1 - gl_Position.xy += taa_offset * gl_Position.w; + gl_Position.xy += taaOffset * gl_Position.w; #endif // Fog intensity calculation - -float fog_intensity_coeff = eye_bright_smooth.y * 0.004166666666666667; #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) - float fog_density_coeff = FOG_DENSITY * FOG_ADJUST; + float fogDensityCoeff = FOG_DENSITY * FOG_ADJUST; #else - float fog_density_coeff = day_blend_float( - FOG_SUNSET, - FOG_DAY, - FOG_NIGHT - ) * FOG_ADJUST; + float fogDensityCoeff = dayBlendFloat( + FOG_SUNSET, + FOG_DAY, + FOG_NIGHT + ) * FOG_ADJUST; #endif gl_FogFragCoord = length(position.xyz); - -#if !defined THE_END && !defined NETHER -frog_adjust = pow( - clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0) * fog_intensity_coeff, - mix(fog_density_coeff * 0.2, 0.5, rainStrength) -); -#else - frog_adjust = sqrt(clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0)); - // frog_adjust = clamp(gl_FogFragCoord / dhRenderDistance, 0.0, 1.0); -#endif diff --git a/shaders/src/position_vertex_water.glsl b/shaders/src/position_vertex_water.glsl new file mode 100644 index 00000000..085f746c --- /dev/null +++ b/shaders/src/position_vertex_water.glsl @@ -0,0 +1,15 @@ +vec4 viewSpacePos4D = gl_ModelViewMatrix * gl_Vertex; +fragposition = viewSpacePos4D.xyz; +vec4 position = gbufferModelViewInverse * viewSpacePos4D; +worldposition = position + vec4(cameraPosition.xyz, 0.0); +gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +gl_FogFragCoord = length(viewSpacePos4D.xyz); + + +#if AA_TYPE > 1 + gl_Position.xy += taaOffset * gl_Position.w; +#endif + +#if defined SHADOW_CASTING && SHADOW_LOCK > 0 && !defined NETHER + vWorldPos = position.xyz; +#endif diff --git a/shaders/src/shadow_src_vertex.glsl b/shaders/src/shadow_src_vertex.glsl index e26a737c..8ef07baf 100644 --- a/shaders/src/shadow_src_vertex.glsl +++ b/shaders/src/shadow_src_vertex.glsl @@ -1,70 +1,38 @@ +vec3 light_direction; +#ifdef THE_END + light_direction = normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; +#else + light_direction = normalize(shadowLightPosition); +#endif + +float dot_product = dot(normal, light_direction); +float NdotL; + #ifdef FOLIAGE_V - float NdotL; - if (is_foliage > .2) { - #ifdef THE_END - vec3 custom_light_pos = normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; - NdotL = clamp( - abs(dot(normal, custom_light_pos)), - 0.0, - 1.0 - ); - #else - vec3 normal_light_pos = normalize(shadowLightPosition); - NdotL = clamp( - abs(dot(normal, normal_light_pos)), - 0.0, - 1.0 - ); - #endif - } else { - #ifdef THE_END - NdotL = clamp( - dot( - normal, - normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz - ), - 0.0, - 1.0 - ); - #else - NdotL = clamp( - dot( - normal, - normalize(shadowLightPosition) - ), - 0.0, - 1.0 - ); - #endif - } + float foliage_factor = step(0.2, isFoliage); + NdotL = mix(dot_product, abs(dot_product), foliage_factor); #else - #ifdef THE_END - float NdotL = clamp( - dot( - normal, - normalize(gbufferModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz - ), - 0.0, - 1.0 - ); - #else - float NdotL = clamp( - dot( - normal, - normalize(shadowLightPosition) - ), - 0.0, - 1.0 - ); - #endif + NdotL = dot_product; #endif -vec3 shadow_world_normal = normalize(mat3(gbufferModelViewInverse) * (normal * 1024.0) + gbufferModelViewInverse[3].xyz); -vec3 bias = shadow_world_normal * min(SHADOW_FIX_FACTOR + length(position.xyz) * 0.005, 0.5) * (2.0 - max(NdotL, 0.0)); -vec3 shadow_world = position.xyz + bias; +NdotL = clamp(NdotL, 0.0, 1.0); + +vec3 shadowWorldNormal = normalize(mat3(gbufferModelViewInverse) * normal); + +vec3 bias = shadowWorldNormal * min(SHADOW_FIX_FACTOR + length(position.xyz) * 0.005, 0.5) * (2.0 - max(NdotL, 0.0)); +vec3 shadowWorld = position.xyz + bias; + + +shadowPos = get_shadow_pos(shadowWorld); + +// --- OPTIMIZACIÓN: Reemplazar sqrt() y el costoso pow() --- +vec2 shadow_diffuse_aux = shadowPos.xy * 2.0 - 1.0; +float diffuse = length(shadow_diffuse_aux); -shadow_pos = get_shadow_pos(shadow_world); +// Reemplazo ultra-rápido de pow(diffuse, 10.0) +float diffuse2 = diffuse * diffuse; +float diffuse4 = diffuse2 * diffuse2; +float diffuse8 = diffuse4 * diffuse4; +shadowDiffuse = diffuse8 * diffuse2; -vec2 shadow_diffuse_aux = (shadow_pos.xy - 0.5) * 2.0; -shadow_diffuse = sqrt(shadow_diffuse_aux.x * shadow_diffuse_aux.x + shadow_diffuse_aux.y * shadow_diffuse_aux.y); -shadow_diffuse = clamp(pow(shadow_diffuse, 10.0), 0.0, 1.0); +shadowDiffuse = clamp(shadowDiffuse, 0.0, 1.0); \ No newline at end of file diff --git a/shaders/src/sky_color_vertex.glsl b/shaders/src/sky_color_vertex.glsl deleted file mode 100644 index aa20d1a6..00000000 --- a/shaders/src/sky_color_vertex.glsl +++ /dev/null @@ -1,28 +0,0 @@ -#ifdef UNKNOWN_DIM - hi_sky_color = skyColor; - low_sky_color = fogColor; -#else - hi_sky_color = day_blend( - ZENITH_SUNSET_COLOR, - ZENITH_DAY_COLOR, - ZENITH_NIGHT_COLOR - ); - - hi_sky_color = mix( - hi_sky_color, - ZENITH_SKY_RAIN_COLOR * luma(hi_sky_color), - rainStrength - ); - - low_sky_color = day_blend( - HORIZON_SUNSET_COLOR, - HORIZON_DAY_COLOR, - HORIZON_NIGHT_COLOR - ); - - low_sky_color = mix( - low_sky_color, - HORIZON_SKY_RAIN_COLOR * luma(low_sky_color), - rainStrength - ); -#endif \ No newline at end of file diff --git a/shaders/src/taa_offset.glsl b/shaders/src/taa_offset.glsl index 0def9390..87939425 100644 --- a/shaders/src/taa_offset.glsl +++ b/shaders/src/taa_offset.glsl @@ -1,22 +1,28 @@ #if MC_VERSION >= 11300 - uniform vec2 taa_offset; + uniform vec2 taaOffset; #else - uniform int frame_mod; - uniform float pixel_size_x; - uniform float pixel_size_y; + uniform int frameMod; + uniform float pixelSizeX; + uniform float pixelSizeY; - vec2[10] offset_array = vec2[10] ( - vec2(0.7071067811865476, 0.0), - vec2(-0.5720614028176843, 0.4156269377774535), - vec2(0.2185080122244104, -0.6724985119639574), - vec2(0.21850801222441057, 0.6724985119639574), - vec2(-0.5720614028176845, -0.4156269377774534), - vec2(0.7071067811865476, 0.0), - vec2(-0.5720614028176843, 0.4156269377774535), - vec2(0.2185080122244104, -0.6724985119639574), - vec2(0.21850801222441057, 0.6724985119639574), - vec2(-0.5720614028176845, -0.4156269377774534) - ); + vec2[16] offsetArray = vec2[16] ( + vec2(0.5, 0.5), + vec2(-0.5, -0.5), + vec2(-0.5, 0.5), + vec2(0.5, -0.5), + vec2(0.5, 0.5), + vec2(-0.5, -0.5), + vec2(-0.5, 0.5), + vec2(0.5, -0.5), + vec2(0.5, 0.5), + vec2(-0.5, -0.5), + vec2(-0.5, 0.5), + vec2(0.5, -0.5), + vec2(0.5, 0.5), + vec2(-0.5, -0.5), + vec2(-0.5, 0.5), + vec2(0.5, -0.5) + ); - vec2 taa_offset = offset_array[frame_mod] * vec2(pixel_size_x, pixel_size_y); + vec2 taaOffset = offsetArray[frameMod] * vec2(pixelSizeX, pixelSizeY); #endif diff --git a/shaders/src/voxy_position_light.glsl b/shaders/src/voxy_position_light.glsl new file mode 100644 index 00000000..0c2fcaeb --- /dev/null +++ b/shaders/src/voxy_position_light.glsl @@ -0,0 +1,74 @@ +// -- Position Vertex + + #if (VOL_LIGHT == 1 && !defined NETHER) || (VOL_LIGHT == 2 && defined SHADOW_CASTING && !defined NETHER) + float fogDensityCoeff = FOG_DENSITY * FOG_ADJUST; + #else + float fogDensityCoeff = dayBlendFloatVoxy( + FOG_SUNSET, + FOG_DAY, + FOG_NIGHT, + dayMixerV, + nightMixerV, + dayMomentV + ) * FOG_ADJUST; + #endif + + // ---- Original Light Vertex Logic + + // Luz nativa (lmcoord.x: candela, lmcoord.y: cielo) ---- + #if defined THE_END || defined NETHER + vec2 illumination = vec2(lmcoord.x, 1.0); + #else + vec2 illumination = lmcoord; + #endif + + illumination.y *= 1.06951871657754; + float visibleSky = clamp(illumination.y, 0.0, 1.0); + + #if defined UNKNOWN_DIM + visibleSky = (visibleSky * 0.6) + 0.4; + #endif + + // Intensidad y color de luz de candelas + float candle_luma = illumination.x * sqrt(illumination.x); + vec3 candleColor = CANDLE_BASELIGHT * (candle_luma + sixthPow(illumination.x * 1.17)); + candleColor = clamp(candleColor, vec3(0.0), vec3(4.0)); + + // Atenuación por dirección de luz directa =================================== + #if defined THE_END || defined NETHER + vec3 astroVector = normalize(vxModelView * vec4(0.0, 0.89442719, 0.4472136, 0.0)).xyz; + #else + vec3 astroVector = normalize(sunPosition); + #endif + + vec3 normal = vec3(uint((face>>1)==2), uint((face>>1)==0), uint((face>>1)==1)) * (float(int(face)&1)*2-1); + normal = mat3(vxModelView) * normal; + float astroLightStrength; + + // Comprobar la longitud al cuadrado (dot product) es mucho más rápido que la longitud (sqrt). + if (dot(normal, normal) > 0.0001) { // Workaround for undefined normals + normal = normalize(normal); + astroLightStrength = dot(normal, astroVector); + } else { + normal = vec3(0.0, 1.0, 0.0); + astroLightStrength = 1.0; + } + + #if defined THE_END || defined NETHER + float directLightStrength = astroLightStrength; + #else + float directLightStrength = mix(-astroLightStrength, astroLightStrength, dayNightMix); + #endif + + // Omni light intensity changes by angle + float omniStrength = ((directLightStrength + 1.0) * 0.25) + 0.75; + + // Calculamos color de luz directa + #if defined UNKNOWN_DIM + vec3 directLightColor = texture2D(lightmap, vec2(0.0, lmcoord.y)).rgb; + #else + vec3 directLightColor = dayBlendVoxy(LIGHT_SUNSET_COLOR, LIGHT_DAY_COLOR, LIGHT_NIGHT_COLOR, dayMixerV, nightMixerV, dayMomentV); + #if defined IS_IRIS && defined THE_END && MC_VERSION >= 12109 + directLightColor += (endFlashIntensity * endFlashIntensity * 0.1); + #endif + #endif \ No newline at end of file diff --git a/shaders/src/voxy_uniforms_replace.glsl b/shaders/src/voxy_uniforms_replace.glsl new file mode 100644 index 00000000..e7135811 --- /dev/null +++ b/shaders/src/voxy_uniforms_replace.glsl @@ -0,0 +1,18 @@ +// "Uniforms" Voxy no recalcula en cada frame algunos uniforms + float hour_world = worldTime * 0.001; + float dayMomentV = hour_world * 0.04166666666666667; + + float moment_aux = dayMomentV - 0.25; + float moment_aux_2 = moment_aux * moment_aux; + float dayMixerV = clamp(-moment_aux_2 * 20.0 + 1.25, 0.0, 1.0); + + float moment_aux_3 = dayMomentV - 0.75; + float moment_aux_4 = moment_aux_3 * moment_aux_3; + float nightMixerV = clamp(-moment_aux_4 * 50.0 + 3.125, 0.0, 1.0); + + // Re-assign + + uint face = parameters.face; + uint customId = parameters.customId; + vec4 tintColor = parameters.tinting; + vec2 lmcoord = parameters.lightMap; \ No newline at end of file diff --git a/shaders/src/writebuffers.glsl b/shaders/src/writebuffers.glsl index 143f2e11..0c993e12 100644 --- a/shaders/src/writebuffers.glsl +++ b/shaders/src/writebuffers.glsl @@ -1,20 +1,31 @@ #ifdef WATER_F - /* DRAWBUFFERS:1 */ - gl_FragData[0] = block_color; + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); + /* DRAWBUFFERS:1 */ + gl_FragData[0] = blockColor; #elif (defined SPECIAL_TRANS && MC_VERSION >= 11300) || defined GBUFFER_HAND_WATER - /* DRAWBUFFERS:1 */ - gl_FragData[0] = block_color; -#else - #if defined SET_FOG_COLOR - /* DRAWBUFFERS:17 */ - gl_FragData[0] = vec4(block_color, 1.0); - gl_FragData[1] = vec4(block_color, 1.0); - #elif MC_VERSION < 11604 && defined GBUFFER_SKYBASIC - /* DRAWBUFFERS:17 */ - gl_FragData[0] = block_color; - gl_FragData[1] = block_color; - #else /* DRAWBUFFERS:1 */ - gl_FragData[0] = block_color; - #endif + gl_FragData[0] = blockColor; +#else + #if defined SET_FOG_COLOR + blockColor = clamp(blockColor, vec3(0.0), vec3(50.0)); + /* DRAWBUFFERS:17 */ + gl_FragData[0] = vec4(blockColor, 1.0); + gl_FragData[1] = vec4(blockColor, 1.0); + #elif MC_VERSION < 11604 && defined GBUFFER_SKYBASIC + /* DRAWBUFFERS:17 */ + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); + gl_FragData[0] = blockColor; + gl_FragData[1] = blockColor; + #else + #if defined GBUFFER_ENTITIES && MC_VERSION >= 260000 // Invisible skin behind water fix + /* DRAWBUFFERS:14 */ + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); + gl_FragData[0] = blockColor; + gl_FragData[1] = blockColor; + #else + /* DRAWBUFFERS:1 */ + blockColor = clamp(blockColor, vec4(0.0), vec4(vec3(50.0), 1.0)); + gl_FragData[0] = blockColor; + #endif + #endif #endif diff --git a/shaders/textures/bluenoise_64.png b/shaders/textures/bluenoise_64.png deleted file mode 100644 index f26e93bc..00000000 Binary files a/shaders/textures/bluenoise_64.png and /dev/null differ diff --git a/shaders/textures/bluenoise_64.png.mcmeta b/shaders/textures/bluenoise_64.png.mcmeta deleted file mode 100644 index 193e38ee..00000000 --- a/shaders/textures/bluenoise_64.png.mcmeta +++ /dev/null @@ -1,7 +0,0 @@ -{ - "texture": - { - "blur": false, - "clamp": false - } -} diff --git a/shaders/voxy.json b/shaders/voxy.json new file mode 100644 index 00000000..bacb35a8 --- /dev/null +++ b/shaders/voxy.json @@ -0,0 +1 @@ +#include "/common/voxy.json" \ No newline at end of file diff --git a/shaders/voxy_opaque.glsl b/shaders/voxy_opaque.glsl new file mode 100644 index 00000000..5cbc431c --- /dev/null +++ b/shaders/voxy_opaque.glsl @@ -0,0 +1,4 @@ +#define VOXY_BLOCK +#define UNKNOWN_DIM + +#include "/common/solid_voxy_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaders/voxy_translucent.glsl b/shaders/voxy_translucent.glsl new file mode 100644 index 00000000..f3e548ae --- /dev/null +++ b/shaders/voxy_translucent.glsl @@ -0,0 +1,4 @@ +#define VOXY_WATER +#define UNKNOWN_DIM + +#include "/common/water_voxy_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaders/world-1/composite.fsh b/shaders/world-1/composite.fsh index 955fbe21..b4d93dda 100644 --- a/shaders/world-1/composite.fsh +++ b/shaders/world-1/composite.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite.fsh Render: Bloom and volumetric light diff --git a/shaders/world-1/composite.vsh b/shaders/world-1/composite.vsh index 666b0419..13e2cc6e 100644 --- a/shaders/world-1/composite.vsh +++ b/shaders/world-1/composite.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite.fsh Render: Bloom and volumetric light diff --git a/shaders/world-1/composite1.fsh b/shaders/world-1/composite1.fsh index 44af527b..e122b4cc 100644 --- a/shaders/world-1/composite1.fsh +++ b/shaders/world-1/composite1.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Bloom and DoF diff --git a/shaders/world-1/composite1.vsh b/shaders/world-1/composite1.vsh index 18bd55e6..fbfbd77c 100644 --- a/shaders/world-1/composite1.vsh +++ b/shaders/world-1/composite1.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Bloom and DoF diff --git a/shaders/world-1/composite2.fsh b/shaders/world-1/composite2.fsh index f5520553..3fffb1e8 100644 --- a/shaders/world-1/composite2.fsh +++ b/shaders/world-1/composite2.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Antialiasing and motion blur diff --git a/shaders/world-1/composite2.vsh b/shaders/world-1/composite2.vsh index 360939f5..18561c21 100644 --- a/shaders/world-1/composite2.vsh +++ b/shaders/world-1/composite2.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Antialiasing and motion blur diff --git a/shaders/world-1/deferred.fsh b/shaders/world-1/deferred.fsh index 40a0b025..fef65058 100644 --- a/shaders/world-1/deferred.fsh +++ b/shaders/world-1/deferred.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - deferred.fsh Render: Ambient occlusion, volumetric clouds diff --git a/shaders/world-1/deferred.vsh b/shaders/world-1/deferred.vsh index faeb30a5..930e626e 100644 --- a/shaders/world-1/deferred.vsh +++ b/shaders/world-1/deferred.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - deferred.vsh Render: Ambient occlusion, volumetric clouds diff --git a/shaders/world-1/dh_terrain.fsh b/shaders/world-1/dh_terrain.fsh index 1fcd15b1..22a7afc9 100644 --- a/shaders/world-1/dh_terrain.fsh +++ b/shaders/world-1/dh_terrain.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_terrain.fsh Render: DH Terrain diff --git a/shaders/world-1/dh_terrain.vsh b/shaders/world-1/dh_terrain.vsh index 2d86c184..96f1adb5 100644 --- a/shaders/world-1/dh_terrain.vsh +++ b/shaders/world-1/dh_terrain.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_terrain.vsh Render: DH Terrain diff --git a/shaders/world-1/dh_water.fsh b/shaders/world-1/dh_water.fsh index 4596d981..a70c0620 100644 --- a/shaders/world-1/dh_water.fsh +++ b/shaders/world-1/dh_water.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_water.fsh Render: DH Water diff --git a/shaders/world-1/dh_water.vsh b/shaders/world-1/dh_water.vsh index 62efbf34..cbe3a486 100644 --- a/shaders/world-1/dh_water.vsh +++ b/shaders/world-1/dh_water.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_water.vsh Render: DH Water diff --git a/shaders/world-1/final.fsh b/shaders/world-1/final.fsh index 1f43aa5d..8b8250c8 100644 --- a/shaders/world-1/final.fsh +++ b/shaders/world-1/final.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - final.fsh Render: Final renderer diff --git a/shaders/world-1/final.vsh b/shaders/world-1/final.vsh index c1b4b368..037c2b89 100644 --- a/shaders/world-1/final.vsh +++ b/shaders/world-1/final.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - final.fsh Render: Final renderer diff --git a/shaders/world-1/gbuffers_armor_glint.fsh b/shaders/world-1/gbuffers_armor_glint.fsh index c178fc21..4ae21ba1 100644 --- a/shaders/world-1/gbuffers_armor_glint.fsh +++ b/shaders/world-1/gbuffers_armor_glint.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_armor_glint.fsh Render: Glow objects diff --git a/shaders/world-1/gbuffers_armor_glint.vsh b/shaders/world-1/gbuffers_armor_glint.vsh index 33201d99..2429463c 100644 --- a/shaders/world-1/gbuffers_armor_glint.vsh +++ b/shaders/world-1/gbuffers_armor_glint.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_armor_glint.vsh Render: Glow objects diff --git a/shaders/world-1/gbuffers_basic.fsh b/shaders/world-1/gbuffers_basic.fsh index 866cef2b..83786eb5 100644 --- a/shaders/world-1/gbuffers_basic.fsh +++ b/shaders/world-1/gbuffers_basic.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_basic.fsh Render: Basic elements - lines diff --git a/shaders/world-1/gbuffers_basic.vsh b/shaders/world-1/gbuffers_basic.vsh index 5ca642d4..b33a6ea3 100644 --- a/shaders/world-1/gbuffers_basic.vsh +++ b/shaders/world-1/gbuffers_basic.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_basic.vsh Render: Basic elements - lines diff --git a/shaders/world-1/gbuffers_beaconbeam.fsh b/shaders/world-1/gbuffers_beaconbeam.fsh index 7259b15d..405700fc 100644 --- a/shaders/world-1/gbuffers_beaconbeam.fsh +++ b/shaders/world-1/gbuffers_beaconbeam.fsh @@ -1,6 +1,7 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_beaconbeam.fsh -Render: BEacon beam +Render: Beacon beam Javier Garduño - GNU Lesser General Public License v3.0 */ diff --git a/shaders/world-1/gbuffers_beaconbeam.vsh b/shaders/world-1/gbuffers_beaconbeam.vsh index 13184e86..cc98a440 100644 --- a/shaders/world-1/gbuffers_beaconbeam.vsh +++ b/shaders/world-1/gbuffers_beaconbeam.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_beaconbeam.vsh Render: Beacon beam diff --git a/shaders/world-1/gbuffers_block.fsh b/shaders/world-1/gbuffers_block.fsh index b96bf411..90ba7b4f 100644 --- a/shaders/world-1/gbuffers_block.fsh +++ b/shaders/world-1/gbuffers_block.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_beaconbeam.fsh Render: Beacon beam diff --git a/shaders/world-1/gbuffers_block.vsh b/shaders/world-1/gbuffers_block.vsh index 200c44fd..7710351c 100644 --- a/shaders/world-1/gbuffers_block.vsh +++ b/shaders/world-1/gbuffers_block.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_block.vsh Render: Beacon beam diff --git a/shaders/world-1/gbuffers_clouds.fsh b/shaders/world-1/gbuffers_clouds.fsh index 3deb4554..875bf217 100644 --- a/shaders/world-1/gbuffers_clouds.fsh +++ b/shaders/world-1/gbuffers_clouds.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_clouds.fsh Render: sky, clouds diff --git a/shaders/world-1/gbuffers_clouds.vsh b/shaders/world-1/gbuffers_clouds.vsh index fa953168..32492435 100644 --- a/shaders/world-1/gbuffers_clouds.vsh +++ b/shaders/world-1/gbuffers_clouds.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_clouds.vsh Render: sky, clouds diff --git a/shaders/world-1/gbuffers_damagedblock.fsh b/shaders/world-1/gbuffers_damagedblock.fsh index 2bf4d69e..0dbaa35d 100644 --- a/shaders/world-1/gbuffers_damagedblock.fsh +++ b/shaders/world-1/gbuffers_damagedblock.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_damagedblock.fsh Render: Damaged block effect diff --git a/shaders/world-1/gbuffers_damagedblock.vsh b/shaders/world-1/gbuffers_damagedblock.vsh index b1bfd220..8b913e68 100644 --- a/shaders/world-1/gbuffers_damagedblock.vsh +++ b/shaders/world-1/gbuffers_damagedblock.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_damagedblock.vsh Render: Damaged block effect diff --git a/shaders/world-1/gbuffers_entities.fsh b/shaders/world-1/gbuffers_entities.fsh index 0397b00a..0f81027d 100644 --- a/shaders/world-1/gbuffers_entities.fsh +++ b/shaders/world-1/gbuffers_entities.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities.fsh Render: Droped objects, mobs and things like that diff --git a/shaders/world-1/gbuffers_entities.vsh b/shaders/world-1/gbuffers_entities.vsh index f4be9694..04b288ed 100644 --- a/shaders/world-1/gbuffers_entities.vsh +++ b/shaders/world-1/gbuffers_entities.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities.vsh Render: Droped objects, mobs and things like that diff --git a/shaders/world-1/gbuffers_entities_glowing.fsh b/shaders/world-1/gbuffers_entities_glowing.fsh index fef251a9..d3bdb71e 100644 --- a/shaders/world-1/gbuffers_entities_glowing.fsh +++ b/shaders/world-1/gbuffers_entities_glowing.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities_glowing.fsh Render: Droped objects, mobs and things like that... glowing diff --git a/shaders/world-1/gbuffers_entities_glowing.vsh b/shaders/world-1/gbuffers_entities_glowing.vsh index 32306c9e..22a556b7 100644 --- a/shaders/world-1/gbuffers_entities_glowing.vsh +++ b/shaders/world-1/gbuffers_entities_glowing.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities_glowing.vsh Render: Droped objects, mobs and things like that... glowing diff --git a/shaders/world-1/gbuffers_hand.fsh b/shaders/world-1/gbuffers_hand.fsh index 39dedf95..7762de69 100644 --- a/shaders/world-1/gbuffers_hand.fsh +++ b/shaders/world-1/gbuffers_hand.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand.fsh Render: Hand opaque objects diff --git a/shaders/world-1/gbuffers_hand.vsh b/shaders/world-1/gbuffers_hand.vsh index 56d6c3af..b178af45 100644 --- a/shaders/world-1/gbuffers_hand.vsh +++ b/shaders/world-1/gbuffers_hand.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand.vsh Render: Hand opaque objects diff --git a/shaders/world-1/gbuffers_hand_water.fsh b/shaders/world-1/gbuffers_hand_water.fsh index 701574eb..3e21b428 100644 --- a/shaders/world-1/gbuffers_hand_water.fsh +++ b/shaders/world-1/gbuffers_hand_water.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand_water.fsh Render: Translucent hand objects diff --git a/shaders/world-1/gbuffers_hand_water.vsh b/shaders/world-1/gbuffers_hand_water.vsh index 1eb176af..0deb4d90 100644 --- a/shaders/world-1/gbuffers_hand_water.vsh +++ b/shaders/world-1/gbuffers_hand_water.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand_water.vsh Render: Translucent hand objects diff --git a/shaders/world-1/gbuffers_line.fsh b/shaders/world-1/gbuffers_line.fsh index 8ee82ed3..3c220e17 100644 --- a/shaders/world-1/gbuffers_line.fsh +++ b/shaders/world-1/gbuffers_line.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_line.vsh Render: Render lines diff --git a/shaders/world-1/gbuffers_line.vsh b/shaders/world-1/gbuffers_line.vsh index 2d9ff4ac..3f2325a1 100644 --- a/shaders/world-1/gbuffers_line.vsh +++ b/shaders/world-1/gbuffers_line.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_line.vsh Render: Render lines diff --git a/shaders/world-1/gbuffers_skybasic.fsh b/shaders/world-1/gbuffers_skybasic.fsh index 3679a1d0..eee76899 100644 --- a/shaders/world-1/gbuffers_skybasic.fsh +++ b/shaders/world-1/gbuffers_skybasic.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skybasic.fsh Render: Sky diff --git a/shaders/world-1/gbuffers_skybasic.vsh b/shaders/world-1/gbuffers_skybasic.vsh index d595de70..17a8f811 100644 --- a/shaders/world-1/gbuffers_skybasic.vsh +++ b/shaders/world-1/gbuffers_skybasic.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skybasic.vsh Render: Sky diff --git a/shaders/world-1/gbuffers_skytextured.fsh b/shaders/world-1/gbuffers_skytextured.fsh index 844594ae..127b6130 100644 --- a/shaders/world-1/gbuffers_skytextured.fsh +++ b/shaders/world-1/gbuffers_skytextured.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skytextured.fsh Render: sun, moon diff --git a/shaders/world-1/gbuffers_skytextured.vsh b/shaders/world-1/gbuffers_skytextured.vsh index a433f70c..a4c6a553 100644 --- a/shaders/world-1/gbuffers_skytextured.vsh +++ b/shaders/world-1/gbuffers_skytextured.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skytextured.vsh Render: sun, moon diff --git a/shaders/world-1/gbuffers_spidereyes.fsh b/shaders/world-1/gbuffers_spidereyes.fsh index e44cf17d..bdd7cf0b 100644 --- a/shaders/world-1/gbuffers_spidereyes.fsh +++ b/shaders/world-1/gbuffers_spidereyes.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_spidereyes.fsh Render: Some creatures eyes (like spider) diff --git a/shaders/world-1/gbuffers_spidereyes.vsh b/shaders/world-1/gbuffers_spidereyes.vsh index 58ad2aea..ea1cbb01 100644 --- a/shaders/world-1/gbuffers_spidereyes.vsh +++ b/shaders/world-1/gbuffers_spidereyes.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_spidereyes.vsh Render: Some creatures eyes (like spider) diff --git a/shaders/world-1/gbuffers_terrain.fsh b/shaders/world-1/gbuffers_terrain.fsh index 8fc1507f..107df70b 100644 --- a/shaders/world-1/gbuffers_terrain.fsh +++ b/shaders/world-1/gbuffers_terrain.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_terrain.fsh Render: Almost everything diff --git a/shaders/world-1/gbuffers_terrain.vsh b/shaders/world-1/gbuffers_terrain.vsh index 403ba65b..3ecbc59e 100644 --- a/shaders/world-1/gbuffers_terrain.vsh +++ b/shaders/world-1/gbuffers_terrain.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_terrain.vsh Render: Almost everything diff --git a/shaders/world-1/gbuffers_textured.fsh b/shaders/world-1/gbuffers_textured.fsh index fe9fc1a0..7c4d9e00 100644 --- a/shaders/world-1/gbuffers_textured.fsh +++ b/shaders/world-1/gbuffers_textured.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_textured.fsh Render: Particles diff --git a/shaders/world-1/gbuffers_textured.vsh b/shaders/world-1/gbuffers_textured.vsh index b46b3a50..e3dbb636 100644 --- a/shaders/world-1/gbuffers_textured.vsh +++ b/shaders/world-1/gbuffers_textured.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_textured.vsh Render: Particles diff --git a/shaders/world-1/gbuffers_water.fsh b/shaders/world-1/gbuffers_water.fsh index e555d733..3f1124c1 100644 --- a/shaders/world-1/gbuffers_water.fsh +++ b/shaders/world-1/gbuffers_water.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_water.fsh Render: Water and translucent blocks diff --git a/shaders/world-1/gbuffers_water.vsh b/shaders/world-1/gbuffers_water.vsh index 975eb137..63b128f8 100644 --- a/shaders/world-1/gbuffers_water.vsh +++ b/shaders/world-1/gbuffers_water.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_water.vsh Render: Water and translucent blocks diff --git a/shaders/world-1/gbuffers_weather.fsh b/shaders/world-1/gbuffers_weather.fsh index 376dbfaa..e3fc0bd9 100644 --- a/shaders/world-1/gbuffers_weather.fsh +++ b/shaders/world-1/gbuffers_weather.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_weather.fsh Render: Weather diff --git a/shaders/world-1/gbuffers_weather.vsh b/shaders/world-1/gbuffers_weather.vsh index bed40bf5..146cb231 100644 --- a/shaders/world-1/gbuffers_weather.vsh +++ b/shaders/world-1/gbuffers_weather.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_weather.vsh Render: Weather diff --git a/shaders/world-1/prepare.fsh b/shaders/world-1/prepare.fsh index 5f85191f..0e65c003 100644 --- a/shaders/world-1/prepare.fsh +++ b/shaders/world-1/prepare.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - prepare.fsh Render: Sky diff --git a/shaders/world-1/prepare.vsh b/shaders/world-1/prepare.vsh index f7e65057..381dc8cb 100644 --- a/shaders/world-1/prepare.vsh +++ b/shaders/world-1/prepare.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - prepare.vsh Render: Sky diff --git a/shaders/world-1/voxy.json b/shaders/world-1/voxy.json new file mode 100644 index 00000000..bacb35a8 --- /dev/null +++ b/shaders/world-1/voxy.json @@ -0,0 +1 @@ +#include "/common/voxy.json" \ No newline at end of file diff --git a/shaders/world-1/voxy_opaque.glsl b/shaders/world-1/voxy_opaque.glsl new file mode 100644 index 00000000..1e615974 --- /dev/null +++ b/shaders/world-1/voxy_opaque.glsl @@ -0,0 +1,4 @@ +#define VOXY_BLOCK +#define NETHER + +#include "/common/solid_voxy_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaders/world-1/voxy_translucent.glsl b/shaders/world-1/voxy_translucent.glsl new file mode 100644 index 00000000..4a1b6d51 --- /dev/null +++ b/shaders/world-1/voxy_translucent.glsl @@ -0,0 +1,4 @@ +#define VOXY_WATER +#define NETHER + +#include "/common/water_voxy_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaders/world0/composite.fsh b/shaders/world0/composite.fsh index 53b9fe5b..9502052f 100644 --- a/shaders/world0/composite.fsh +++ b/shaders/world0/composite.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite.fsh Render: Bloom and volumetric light diff --git a/shaders/world0/composite.vsh b/shaders/world0/composite.vsh index dfc66e66..ed279edb 100644 --- a/shaders/world0/composite.vsh +++ b/shaders/world0/composite.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite.fsh Render: Bloom and volumetric light diff --git a/shaders/world0/composite1.fsh b/shaders/world0/composite1.fsh index 41715a0c..3c3f2b93 100644 --- a/shaders/world0/composite1.fsh +++ b/shaders/world0/composite1.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Bloom and DoF diff --git a/shaders/world0/composite1.vsh b/shaders/world0/composite1.vsh index 0a392f7b..58ea1d5a 100644 --- a/shaders/world0/composite1.vsh +++ b/shaders/world0/composite1.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Bloom and DoF diff --git a/shaders/world0/composite2.fsh b/shaders/world0/composite2.fsh index 4c1094b4..c0ba765d 100644 --- a/shaders/world0/composite2.fsh +++ b/shaders/world0/composite2.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Antialiasing and motion blur diff --git a/shaders/world0/composite2.vsh b/shaders/world0/composite2.vsh index 61350503..c5fd9f58 100644 --- a/shaders/world0/composite2.vsh +++ b/shaders/world0/composite2.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Antialiasing and motion blur diff --git a/shaders/world0/deferred.fsh b/shaders/world0/deferred.fsh index c5ddf4b0..2e2a4dff 100644 --- a/shaders/world0/deferred.fsh +++ b/shaders/world0/deferred.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - deferred.fsh Render: Ambient occlusion, volumetric clouds diff --git a/shaders/world0/deferred.vsh b/shaders/world0/deferred.vsh index ff7d4355..d74bd30f 100644 --- a/shaders/world0/deferred.vsh +++ b/shaders/world0/deferred.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - deferred.vsh Render: Ambient occlusion, volumetric clouds diff --git a/shaders/world0/dh_terrain.fsh b/shaders/world0/dh_terrain.fsh index f6b476a9..4b91dcbf 100644 --- a/shaders/world0/dh_terrain.fsh +++ b/shaders/world0/dh_terrain.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_terrain.fsh Render: DH Terrain diff --git a/shaders/world0/dh_terrain.vsh b/shaders/world0/dh_terrain.vsh index 873038ae..9cbd8a0f 100644 --- a/shaders/world0/dh_terrain.vsh +++ b/shaders/world0/dh_terrain.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_terrain.vsh Render: DH Terrain diff --git a/shaders/world0/dh_water.fsh b/shaders/world0/dh_water.fsh index c5eb4113..3ce3761f 100644 --- a/shaders/world0/dh_water.fsh +++ b/shaders/world0/dh_water.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_water.fsh Render: DH Water diff --git a/shaders/world0/dh_water.vsh b/shaders/world0/dh_water.vsh index 46cc8080..8f2ccc9f 100644 --- a/shaders/world0/dh_water.vsh +++ b/shaders/world0/dh_water.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_water.vsh Render: DH Water diff --git a/shaders/world0/final.fsh b/shaders/world0/final.fsh index da8787ac..c4e73c37 100644 --- a/shaders/world0/final.fsh +++ b/shaders/world0/final.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - final.fsh Render: Final renderer diff --git a/shaders/world0/final.vsh b/shaders/world0/final.vsh index a350d8a6..c206105f 100644 --- a/shaders/world0/final.vsh +++ b/shaders/world0/final.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - final.fsh Render: Final renderer @@ -7,5 +8,4 @@ Javier Garduño - GNU Lesser General Public License v3.0 #define FINAL_SHADER -/* Config, uniforms, ins, outs */ #include "/common/final_vertex.glsl" diff --git a/shaders/world0/gbuffers_armor_glint.fsh b/shaders/world0/gbuffers_armor_glint.fsh index 329b44d5..9f55cfdd 100644 --- a/shaders/world0/gbuffers_armor_glint.fsh +++ b/shaders/world0/gbuffers_armor_glint.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_armor_glint.fsh Render: Glow objects diff --git a/shaders/world0/gbuffers_armor_glint.vsh b/shaders/world0/gbuffers_armor_glint.vsh index f057d3de..528f0b9e 100644 --- a/shaders/world0/gbuffers_armor_glint.vsh +++ b/shaders/world0/gbuffers_armor_glint.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_armor_glint.vsh Render: Glow objects diff --git a/shaders/world0/gbuffers_basic.fsh b/shaders/world0/gbuffers_basic.fsh index e2006ba4..5d2efcd9 100644 --- a/shaders/world0/gbuffers_basic.fsh +++ b/shaders/world0/gbuffers_basic.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_basic.fsh Render: Basic elements - lines diff --git a/shaders/world0/gbuffers_basic.vsh b/shaders/world0/gbuffers_basic.vsh index 328c4b4f..77c449dc 100644 --- a/shaders/world0/gbuffers_basic.vsh +++ b/shaders/world0/gbuffers_basic.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_basic.vsh Render: Basic elements - lines diff --git a/shaders/world0/gbuffers_beaconbeam.fsh b/shaders/world0/gbuffers_beaconbeam.fsh index f4ccbfab..c7dbcef6 100644 --- a/shaders/world0/gbuffers_beaconbeam.fsh +++ b/shaders/world0/gbuffers_beaconbeam.fsh @@ -1,6 +1,7 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_beaconbeam.fsh -Render: BEacon beam +Render: Beacon beam Javier Garduño - GNU Lesser General Public License v3.0 */ diff --git a/shaders/world0/gbuffers_beaconbeam.vsh b/shaders/world0/gbuffers_beaconbeam.vsh index afeffc1e..c3a5a829 100644 --- a/shaders/world0/gbuffers_beaconbeam.vsh +++ b/shaders/world0/gbuffers_beaconbeam.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_beaconbeam.vsh Render: Beacon beam diff --git a/shaders/world0/gbuffers_block.fsh b/shaders/world0/gbuffers_block.fsh index 536381d0..d06b9a59 100644 --- a/shaders/world0/gbuffers_block.fsh +++ b/shaders/world0/gbuffers_block.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_beaconbeam.fsh Render: Beacon beam diff --git a/shaders/world0/gbuffers_block.vsh b/shaders/world0/gbuffers_block.vsh index 27dfc3ee..4933ca80 100644 --- a/shaders/world0/gbuffers_block.vsh +++ b/shaders/world0/gbuffers_block.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_block.vsh Render: Beacon beam diff --git a/shaders/world0/gbuffers_clouds.fsh b/shaders/world0/gbuffers_clouds.fsh index cf24d1a4..8f92a929 100644 --- a/shaders/world0/gbuffers_clouds.fsh +++ b/shaders/world0/gbuffers_clouds.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_clouds.fsh Render: sky, clouds diff --git a/shaders/world0/gbuffers_clouds.vsh b/shaders/world0/gbuffers_clouds.vsh index a9623a76..863caa57 100644 --- a/shaders/world0/gbuffers_clouds.vsh +++ b/shaders/world0/gbuffers_clouds.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_clouds.vsh Render: sky, clouds diff --git a/shaders/world0/gbuffers_damagedblock.fsh b/shaders/world0/gbuffers_damagedblock.fsh index f87c153d..ccb716f9 100644 --- a/shaders/world0/gbuffers_damagedblock.fsh +++ b/shaders/world0/gbuffers_damagedblock.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_damagedblock.fsh Render: Damaged block effect diff --git a/shaders/world0/gbuffers_damagedblock.vsh b/shaders/world0/gbuffers_damagedblock.vsh index 44ffa676..e7014f3e 100644 --- a/shaders/world0/gbuffers_damagedblock.vsh +++ b/shaders/world0/gbuffers_damagedblock.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_damagedblock.vsh Render: Damaged block effect diff --git a/shaders/world0/gbuffers_entities.fsh b/shaders/world0/gbuffers_entities.fsh index 298b55ab..544b3fb8 100644 --- a/shaders/world0/gbuffers_entities.fsh +++ b/shaders/world0/gbuffers_entities.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities.fsh Render: Droped objects, mobs and things like that diff --git a/shaders/world0/gbuffers_entities.vsh b/shaders/world0/gbuffers_entities.vsh index 832f59c3..7489c1be 100644 --- a/shaders/world0/gbuffers_entities.vsh +++ b/shaders/world0/gbuffers_entities.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities.vsh Render: Droped objects, mobs and things like that diff --git a/shaders/world0/gbuffers_entities_glowing.fsh b/shaders/world0/gbuffers_entities_glowing.fsh index a6d30fb4..cf0640d6 100644 --- a/shaders/world0/gbuffers_entities_glowing.fsh +++ b/shaders/world0/gbuffers_entities_glowing.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities_glowing.fsh Render: Droped objects, mobs and things like that... glowing diff --git a/shaders/world0/gbuffers_entities_glowing.vsh b/shaders/world0/gbuffers_entities_glowing.vsh index db083706..826dcae9 100644 --- a/shaders/world0/gbuffers_entities_glowing.vsh +++ b/shaders/world0/gbuffers_entities_glowing.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities_glowing.vsh Render: Droped objects, mobs and things like that... glowing diff --git a/shaders/world0/gbuffers_hand.fsh b/shaders/world0/gbuffers_hand.fsh index 17cf5717..842231e2 100644 --- a/shaders/world0/gbuffers_hand.fsh +++ b/shaders/world0/gbuffers_hand.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand.fsh Render: Hand opaque objects diff --git a/shaders/world0/gbuffers_hand.vsh b/shaders/world0/gbuffers_hand.vsh index 8e74712e..d5af61b8 100644 --- a/shaders/world0/gbuffers_hand.vsh +++ b/shaders/world0/gbuffers_hand.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand.vsh Render: Hand opaque objects diff --git a/shaders/world0/gbuffers_hand_water.fsh b/shaders/world0/gbuffers_hand_water.fsh index 1b3e0f1d..1965121e 100644 --- a/shaders/world0/gbuffers_hand_water.fsh +++ b/shaders/world0/gbuffers_hand_water.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand_water.fsh Render: Translucent hand objects diff --git a/shaders/world0/gbuffers_hand_water.vsh b/shaders/world0/gbuffers_hand_water.vsh index 04f23a5d..76eadb19 100644 --- a/shaders/world0/gbuffers_hand_water.vsh +++ b/shaders/world0/gbuffers_hand_water.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand_water.vsh Render: Translucent hand objects diff --git a/shaders/world0/gbuffers_line.fsh b/shaders/world0/gbuffers_line.fsh index 81badcc6..b15d73d8 100644 --- a/shaders/world0/gbuffers_line.fsh +++ b/shaders/world0/gbuffers_line.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_line.vsh Render: Render lines diff --git a/shaders/world0/gbuffers_line.vsh b/shaders/world0/gbuffers_line.vsh index 2c349660..539931eb 100644 --- a/shaders/world0/gbuffers_line.vsh +++ b/shaders/world0/gbuffers_line.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_line.vsh Render: Render lines diff --git a/shaders/world0/gbuffers_skybasic.fsh b/shaders/world0/gbuffers_skybasic.fsh index 0e0980df..a0010611 100644 --- a/shaders/world0/gbuffers_skybasic.fsh +++ b/shaders/world0/gbuffers_skybasic.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skybasic.fsh Render: Sky diff --git a/shaders/world0/gbuffers_skybasic.vsh b/shaders/world0/gbuffers_skybasic.vsh index ba2b7c4f..0f6cff96 100644 --- a/shaders/world0/gbuffers_skybasic.vsh +++ b/shaders/world0/gbuffers_skybasic.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skybasic.vsh Render: Sky diff --git a/shaders/world0/gbuffers_skytextured.fsh b/shaders/world0/gbuffers_skytextured.fsh index cb5916a7..d665a01d 100644 --- a/shaders/world0/gbuffers_skytextured.fsh +++ b/shaders/world0/gbuffers_skytextured.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skytextured.fsh Render: sun, moon diff --git a/shaders/world0/gbuffers_skytextured.vsh b/shaders/world0/gbuffers_skytextured.vsh index 0ce77fdf..368af4ac 100644 --- a/shaders/world0/gbuffers_skytextured.vsh +++ b/shaders/world0/gbuffers_skytextured.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skytextured.vsh Render: sun, moon diff --git a/shaders/world0/gbuffers_spidereyes.fsh b/shaders/world0/gbuffers_spidereyes.fsh index 7ed68b6c..32cab37b 100644 --- a/shaders/world0/gbuffers_spidereyes.fsh +++ b/shaders/world0/gbuffers_spidereyes.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_spidereyes.fsh Render: Some creatures eyes (like spider) diff --git a/shaders/world0/gbuffers_spidereyes.vsh b/shaders/world0/gbuffers_spidereyes.vsh index b608dc8c..e61ebbc8 100644 --- a/shaders/world0/gbuffers_spidereyes.vsh +++ b/shaders/world0/gbuffers_spidereyes.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_spidereyes.vsh Render: Some creatures eyes (like spider) diff --git a/shaders/world0/gbuffers_terrain.fsh b/shaders/world0/gbuffers_terrain.fsh index 8ddb378e..ccf3deec 100644 --- a/shaders/world0/gbuffers_terrain.fsh +++ b/shaders/world0/gbuffers_terrain.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_terrain.fsh Render: Almost everything diff --git a/shaders/world0/gbuffers_terrain.vsh b/shaders/world0/gbuffers_terrain.vsh index f1d9866b..065cccd4 100644 --- a/shaders/world0/gbuffers_terrain.vsh +++ b/shaders/world0/gbuffers_terrain.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_terrain.vsh Render: Almost everything diff --git a/shaders/world0/gbuffers_textured.fsh b/shaders/world0/gbuffers_textured.fsh index fc6e9ce0..07b7e2c7 100644 --- a/shaders/world0/gbuffers_textured.fsh +++ b/shaders/world0/gbuffers_textured.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_textured.fsh Render: Particles diff --git a/shaders/world0/gbuffers_textured.vsh b/shaders/world0/gbuffers_textured.vsh index 0ae14be7..c732f8b3 100644 --- a/shaders/world0/gbuffers_textured.vsh +++ b/shaders/world0/gbuffers_textured.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_textured.vsh Render: Particles diff --git a/shaders/world0/gbuffers_water.fsh b/shaders/world0/gbuffers_water.fsh index 7cd318f0..ec17b994 100644 --- a/shaders/world0/gbuffers_water.fsh +++ b/shaders/world0/gbuffers_water.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_water.fsh Render: Water and translucent blocks diff --git a/shaders/world0/gbuffers_water.vsh b/shaders/world0/gbuffers_water.vsh index 83994320..ac8f8846 100644 --- a/shaders/world0/gbuffers_water.vsh +++ b/shaders/world0/gbuffers_water.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_water.vsh Render: Water and translucent blocks diff --git a/shaders/world0/gbuffers_weather.fsh b/shaders/world0/gbuffers_weather.fsh index 86237cfd..dc2c16d9 100644 --- a/shaders/world0/gbuffers_weather.fsh +++ b/shaders/world0/gbuffers_weather.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_weather.fsh Render: Weather diff --git a/shaders/world0/gbuffers_weather.vsh b/shaders/world0/gbuffers_weather.vsh index 886ce8b7..5c61e9d7 100644 --- a/shaders/world0/gbuffers_weather.vsh +++ b/shaders/world0/gbuffers_weather.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_weather.vsh Render: Weather diff --git a/shaders/world0/prepare.fsh b/shaders/world0/prepare.fsh index c9e8a24a..56fe114e 100644 --- a/shaders/world0/prepare.fsh +++ b/shaders/world0/prepare.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - prepare.fsh Render: Sky diff --git a/shaders/world0/prepare.vsh b/shaders/world0/prepare.vsh index 02dceeba..379b9c20 100644 --- a/shaders/world0/prepare.vsh +++ b/shaders/world0/prepare.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - prepare.vsh Render: Sky diff --git a/shaders/world0/shadow.fsh b/shaders/world0/shadow.fsh index 13474207..36438f20 100644 --- a/shaders/world0/shadow.fsh +++ b/shaders/world0/shadow.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - shadow.fsh Render: Shadowmap diff --git a/shaders/world0/shadow.vsh b/shaders/world0/shadow.vsh index 59bf4539..b0ff4ca6 100644 --- a/shaders/world0/shadow.vsh +++ b/shaders/world0/shadow.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - shadow.fsh Render: Shadowmap diff --git a/shaders/world0/voxy.json b/shaders/world0/voxy.json new file mode 100644 index 00000000..bacb35a8 --- /dev/null +++ b/shaders/world0/voxy.json @@ -0,0 +1 @@ +#include "/common/voxy.json" \ No newline at end of file diff --git a/shaders/world0/voxy_opaque.glsl b/shaders/world0/voxy_opaque.glsl new file mode 100644 index 00000000..bee5ff95 --- /dev/null +++ b/shaders/world0/voxy_opaque.glsl @@ -0,0 +1,3 @@ +#define VOXY_BLOCK + +#include "/common/solid_voxy_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaders/world0/voxy_translucent.glsl b/shaders/world0/voxy_translucent.glsl new file mode 100644 index 00000000..455b8756 --- /dev/null +++ b/shaders/world0/voxy_translucent.glsl @@ -0,0 +1,3 @@ +#define VOXY_WATER + +#include "/common/water_voxy_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaders/world1/composite.fsh b/shaders/world1/composite.fsh index 1ec3b167..f9312957 100644 --- a/shaders/world1/composite.fsh +++ b/shaders/world1/composite.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite.fsh Render: Bloom and volumetric light diff --git a/shaders/world1/composite.vsh b/shaders/world1/composite.vsh index 5dbe8864..0c6491ce 100644 --- a/shaders/world1/composite.vsh +++ b/shaders/world1/composite.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite.fsh Render: Bloom and volumetric light diff --git a/shaders/world1/composite1.fsh b/shaders/world1/composite1.fsh index 99965971..9275d292 100644 --- a/shaders/world1/composite1.fsh +++ b/shaders/world1/composite1.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Bloom and DoF diff --git a/shaders/world1/composite1.vsh b/shaders/world1/composite1.vsh index ed556719..7c432b84 100644 --- a/shaders/world1/composite1.vsh +++ b/shaders/world1/composite1.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Bloom and DoF diff --git a/shaders/world1/composite2.fsh b/shaders/world1/composite2.fsh index 52798148..c45d5f5c 100644 --- a/shaders/world1/composite2.fsh +++ b/shaders/world1/composite2.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Antialiasing and motion blur diff --git a/shaders/world1/composite2.vsh b/shaders/world1/composite2.vsh index af31fa3c..40b85a35 100644 --- a/shaders/world1/composite2.vsh +++ b/shaders/world1/composite2.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - composite1.fsh Render: Antialiasing and motion blur diff --git a/shaders/world1/deferred.fsh b/shaders/world1/deferred.fsh index 665c8610..f3ff6197 100644 --- a/shaders/world1/deferred.fsh +++ b/shaders/world1/deferred.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - deferred.fsh Render: Ambient occlusion, volumetric clouds diff --git a/shaders/world1/deferred.vsh b/shaders/world1/deferred.vsh index d1135ae0..87674335 100644 --- a/shaders/world1/deferred.vsh +++ b/shaders/world1/deferred.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - deferred.vsh Render: Ambient occlusion, volumetric clouds diff --git a/shaders/world1/dh_terrain.fsh b/shaders/world1/dh_terrain.fsh index a13a699d..1d033ae6 100644 --- a/shaders/world1/dh_terrain.fsh +++ b/shaders/world1/dh_terrain.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_terrain.fsh Render: DH Terrain diff --git a/shaders/world1/dh_terrain.vsh b/shaders/world1/dh_terrain.vsh index 7b614452..be0bc50d 100644 --- a/shaders/world1/dh_terrain.vsh +++ b/shaders/world1/dh_terrain.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_terrain.vsh Render: DH Terrain diff --git a/shaders/world1/dh_water.fsh b/shaders/world1/dh_water.fsh index f50919c0..94c0d042 100644 --- a/shaders/world1/dh_water.fsh +++ b/shaders/world1/dh_water.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_water.fsh Render: DH Water diff --git a/shaders/world1/dh_water.vsh b/shaders/world1/dh_water.vsh index 5292f932..caeadc11 100644 --- a/shaders/world1/dh_water.vsh +++ b/shaders/world1/dh_water.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - dh_water.vsh Render: DH Water diff --git a/shaders/world1/final.fsh b/shaders/world1/final.fsh index c48125c8..6e3b378a 100644 --- a/shaders/world1/final.fsh +++ b/shaders/world1/final.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - final.fsh Render: Final renderer diff --git a/shaders/world1/final.vsh b/shaders/world1/final.vsh index 0a451fe8..7b4a322f 100644 --- a/shaders/world1/final.vsh +++ b/shaders/world1/final.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - final.fsh Render: Final renderer diff --git a/shaders/world1/gbuffers_armor_glint.fsh b/shaders/world1/gbuffers_armor_glint.fsh index 52e54b3a..27c4c7c3 100644 --- a/shaders/world1/gbuffers_armor_glint.fsh +++ b/shaders/world1/gbuffers_armor_glint.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_armor_glint.fsh Render: Glow objects diff --git a/shaders/world1/gbuffers_armor_glint.vsh b/shaders/world1/gbuffers_armor_glint.vsh index 85704c3f..dd726678 100644 --- a/shaders/world1/gbuffers_armor_glint.vsh +++ b/shaders/world1/gbuffers_armor_glint.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_armor_glint.vsh Render: Glow objects diff --git a/shaders/world1/gbuffers_basic.fsh b/shaders/world1/gbuffers_basic.fsh index 5b041989..7daffa01 100644 --- a/shaders/world1/gbuffers_basic.fsh +++ b/shaders/world1/gbuffers_basic.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_basic.fsh Render: Basic elements - lines diff --git a/shaders/world1/gbuffers_basic.vsh b/shaders/world1/gbuffers_basic.vsh index 5fdffa66..928c846a 100644 --- a/shaders/world1/gbuffers_basic.vsh +++ b/shaders/world1/gbuffers_basic.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_basic.vsh Render: Basic elements - lines diff --git a/shaders/world1/gbuffers_beaconbeam.fsh b/shaders/world1/gbuffers_beaconbeam.fsh index 1d84dbbb..001e78a1 100644 --- a/shaders/world1/gbuffers_beaconbeam.fsh +++ b/shaders/world1/gbuffers_beaconbeam.fsh @@ -1,6 +1,7 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_beaconbeam.fsh -Render: BEacon beam +Render: Beacon beam Javier Garduño - GNU Lesser General Public License v3.0 */ diff --git a/shaders/world1/gbuffers_beaconbeam.vsh b/shaders/world1/gbuffers_beaconbeam.vsh index cd6c5b2f..091334a0 100644 --- a/shaders/world1/gbuffers_beaconbeam.vsh +++ b/shaders/world1/gbuffers_beaconbeam.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_beaconbeam.vsh Render: Beacon beam diff --git a/shaders/world1/gbuffers_block.fsh b/shaders/world1/gbuffers_block.fsh index 33ef5e3d..6e1bb4e9 100644 --- a/shaders/world1/gbuffers_block.fsh +++ b/shaders/world1/gbuffers_block.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_beaconbeam.fsh Render: Beacon beam diff --git a/shaders/world1/gbuffers_block.vsh b/shaders/world1/gbuffers_block.vsh index 979bb97d..bc040298 100644 --- a/shaders/world1/gbuffers_block.vsh +++ b/shaders/world1/gbuffers_block.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_block.vsh Render: Beacon beam diff --git a/shaders/world1/gbuffers_clouds.fsh b/shaders/world1/gbuffers_clouds.fsh index 8e8e77ac..caab5380 100644 --- a/shaders/world1/gbuffers_clouds.fsh +++ b/shaders/world1/gbuffers_clouds.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_clouds.fsh Render: sky, clouds diff --git a/shaders/world1/gbuffers_clouds.vsh b/shaders/world1/gbuffers_clouds.vsh index 9f77342e..660a5c1e 100644 --- a/shaders/world1/gbuffers_clouds.vsh +++ b/shaders/world1/gbuffers_clouds.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_clouds.vsh Render: sky, clouds diff --git a/shaders/world1/gbuffers_damagedblock.fsh b/shaders/world1/gbuffers_damagedblock.fsh index eb3be40e..6ae54ba8 100644 --- a/shaders/world1/gbuffers_damagedblock.fsh +++ b/shaders/world1/gbuffers_damagedblock.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_damagedblock.fsh Render: Damaged block effect diff --git a/shaders/world1/gbuffers_damagedblock.vsh b/shaders/world1/gbuffers_damagedblock.vsh index edc4d24b..6dd4daed 100644 --- a/shaders/world1/gbuffers_damagedblock.vsh +++ b/shaders/world1/gbuffers_damagedblock.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_damagedblock.vsh Render: Damaged block effect diff --git a/shaders/world1/gbuffers_entities.fsh b/shaders/world1/gbuffers_entities.fsh index a6026c13..d5736693 100644 --- a/shaders/world1/gbuffers_entities.fsh +++ b/shaders/world1/gbuffers_entities.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities.fsh Render: Droped objects, mobs and things like that diff --git a/shaders/world1/gbuffers_entities.vsh b/shaders/world1/gbuffers_entities.vsh index 1e8bfc4e..05204a9b 100644 --- a/shaders/world1/gbuffers_entities.vsh +++ b/shaders/world1/gbuffers_entities.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities.vsh Render: Droped objects, mobs and things like that diff --git a/shaders/world1/gbuffers_entities_glowing.fsh b/shaders/world1/gbuffers_entities_glowing.fsh index c4b616aa..9044bdf0 100644 --- a/shaders/world1/gbuffers_entities_glowing.fsh +++ b/shaders/world1/gbuffers_entities_glowing.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities_glowing.fsh Render: Droped objects, mobs and things like that... glowing diff --git a/shaders/world1/gbuffers_entities_glowing.vsh b/shaders/world1/gbuffers_entities_glowing.vsh index ec9e91d7..28c7eb56 100644 --- a/shaders/world1/gbuffers_entities_glowing.vsh +++ b/shaders/world1/gbuffers_entities_glowing.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_entities_glowing.vsh Render: Droped objects, mobs and things like that... glowing diff --git a/shaders/world1/gbuffers_hand.fsh b/shaders/world1/gbuffers_hand.fsh index 9168a9ec..399077f4 100644 --- a/shaders/world1/gbuffers_hand.fsh +++ b/shaders/world1/gbuffers_hand.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand.fsh Render: Hand opaque objects diff --git a/shaders/world1/gbuffers_hand.vsh b/shaders/world1/gbuffers_hand.vsh index 8e041a55..08666613 100644 --- a/shaders/world1/gbuffers_hand.vsh +++ b/shaders/world1/gbuffers_hand.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand.vsh Render: Hand opaque objects diff --git a/shaders/world1/gbuffers_hand_water.fsh b/shaders/world1/gbuffers_hand_water.fsh index 740aec1b..7a67c2a8 100644 --- a/shaders/world1/gbuffers_hand_water.fsh +++ b/shaders/world1/gbuffers_hand_water.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand_water.fsh Render: Translucent hand objects diff --git a/shaders/world1/gbuffers_hand_water.vsh b/shaders/world1/gbuffers_hand_water.vsh index 0feebc48..ffc2010e 100644 --- a/shaders/world1/gbuffers_hand_water.vsh +++ b/shaders/world1/gbuffers_hand_water.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_hand_water.vsh Render: Translucent hand objects diff --git a/shaders/world1/gbuffers_line.fsh b/shaders/world1/gbuffers_line.fsh index 22c4cc2d..deb446c0 100644 --- a/shaders/world1/gbuffers_line.fsh +++ b/shaders/world1/gbuffers_line.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_line.vsh Render: Render lines diff --git a/shaders/world1/gbuffers_line.vsh b/shaders/world1/gbuffers_line.vsh index c63a7eb0..b41ca134 100644 --- a/shaders/world1/gbuffers_line.vsh +++ b/shaders/world1/gbuffers_line.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_line.vsh Render: Render lines diff --git a/shaders/world1/gbuffers_skybasic.fsh b/shaders/world1/gbuffers_skybasic.fsh index 5888a84a..799b744b 100644 --- a/shaders/world1/gbuffers_skybasic.fsh +++ b/shaders/world1/gbuffers_skybasic.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skybasic.fsh Render: Sky diff --git a/shaders/world1/gbuffers_skybasic.vsh b/shaders/world1/gbuffers_skybasic.vsh index 92c319cd..73d9a982 100644 --- a/shaders/world1/gbuffers_skybasic.vsh +++ b/shaders/world1/gbuffers_skybasic.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skybasic.vsh Render: Sky diff --git a/shaders/world1/gbuffers_skytextured.fsh b/shaders/world1/gbuffers_skytextured.fsh index 6bf44d65..5a0513ae 100644 --- a/shaders/world1/gbuffers_skytextured.fsh +++ b/shaders/world1/gbuffers_skytextured.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skytextured.fsh Render: sun, moon diff --git a/shaders/world1/gbuffers_skytextured.vsh b/shaders/world1/gbuffers_skytextured.vsh index e96fe864..281acf87 100644 --- a/shaders/world1/gbuffers_skytextured.vsh +++ b/shaders/world1/gbuffers_skytextured.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_skytextured.vsh Render: sun, moon diff --git a/shaders/world1/gbuffers_spidereyes.fsh b/shaders/world1/gbuffers_spidereyes.fsh index 9c6088ef..a033bca5 100644 --- a/shaders/world1/gbuffers_spidereyes.fsh +++ b/shaders/world1/gbuffers_spidereyes.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_spidereyes.fsh Render: Some creatures eyes (like spider) diff --git a/shaders/world1/gbuffers_spidereyes.vsh b/shaders/world1/gbuffers_spidereyes.vsh index 24657f36..aabbb611 100644 --- a/shaders/world1/gbuffers_spidereyes.vsh +++ b/shaders/world1/gbuffers_spidereyes.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_spidereyes.vsh Render: Some creatures eyes (like spider) diff --git a/shaders/world1/gbuffers_terrain.fsh b/shaders/world1/gbuffers_terrain.fsh index c3367884..33a01349 100644 --- a/shaders/world1/gbuffers_terrain.fsh +++ b/shaders/world1/gbuffers_terrain.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_terrain.fsh Render: Almost everything diff --git a/shaders/world1/gbuffers_terrain.vsh b/shaders/world1/gbuffers_terrain.vsh index 8d5069f9..3ac37425 100644 --- a/shaders/world1/gbuffers_terrain.vsh +++ b/shaders/world1/gbuffers_terrain.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_terrain.vsh Render: Almost everything diff --git a/shaders/world1/gbuffers_textured.fsh b/shaders/world1/gbuffers_textured.fsh index 29de1e09..6142e9bb 100644 --- a/shaders/world1/gbuffers_textured.fsh +++ b/shaders/world1/gbuffers_textured.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_textured.fsh Render: Particles diff --git a/shaders/world1/gbuffers_textured.vsh b/shaders/world1/gbuffers_textured.vsh index 997c60d2..b136d006 100644 --- a/shaders/world1/gbuffers_textured.vsh +++ b/shaders/world1/gbuffers_textured.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_textured.vsh Render: Particles diff --git a/shaders/world1/gbuffers_water.fsh b/shaders/world1/gbuffers_water.fsh index c9f1d95b..89672a2f 100644 --- a/shaders/world1/gbuffers_water.fsh +++ b/shaders/world1/gbuffers_water.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_water.fsh Render: Water and translucent blocks diff --git a/shaders/world1/gbuffers_water.vsh b/shaders/world1/gbuffers_water.vsh index a3e1909a..4aa55443 100644 --- a/shaders/world1/gbuffers_water.vsh +++ b/shaders/world1/gbuffers_water.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_water.vsh Render: Water and translucent blocks diff --git a/shaders/world1/gbuffers_weather.fsh b/shaders/world1/gbuffers_weather.fsh index a53585ab..b7474a34 100644 --- a/shaders/world1/gbuffers_weather.fsh +++ b/shaders/world1/gbuffers_weather.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_weather.fsh Render: Weather diff --git a/shaders/world1/gbuffers_weather.vsh b/shaders/world1/gbuffers_weather.vsh index ce007fad..5055297c 100644 --- a/shaders/world1/gbuffers_weather.vsh +++ b/shaders/world1/gbuffers_weather.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - gbuffers_weather.vsh Render: Weather diff --git a/shaders/world1/prepare.fsh b/shaders/world1/prepare.fsh index e04e1693..46cd46e2 100644 --- a/shaders/world1/prepare.fsh +++ b/shaders/world1/prepare.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - prepare.fsh Render: Sky diff --git a/shaders/world1/prepare.vsh b/shaders/world1/prepare.vsh index f3f1ffa0..0f3a4565 100644 --- a/shaders/world1/prepare.vsh +++ b/shaders/world1/prepare.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - prepare.vsh Render: Sky diff --git a/shaders/world1/shadow.fsh b/shaders/world1/shadow.fsh index eac13cd5..b96099da 100644 --- a/shaders/world1/shadow.fsh +++ b/shaders/world1/shadow.fsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - shadow.fsh Render: Shadowmap diff --git a/shaders/world1/shadow.vsh b/shaders/world1/shadow.vsh index cba65780..b986b3dd 100644 --- a/shaders/world1/shadow.vsh +++ b/shaders/world1/shadow.vsh @@ -1,4 +1,5 @@ #version 120 +#extension GL_ARB_shader_texture_lod : enable /* MakeUp - shadow.fsh Render: Shadowmap diff --git a/shaders/world1/voxy.json b/shaders/world1/voxy.json new file mode 100644 index 00000000..bacb35a8 --- /dev/null +++ b/shaders/world1/voxy.json @@ -0,0 +1 @@ +#include "/common/voxy.json" \ No newline at end of file diff --git a/shaders/world1/voxy_opaque.glsl b/shaders/world1/voxy_opaque.glsl new file mode 100644 index 00000000..2eaa5cb2 --- /dev/null +++ b/shaders/world1/voxy_opaque.glsl @@ -0,0 +1,4 @@ +#define VOXY_BLOCK +#define THE_END + +#include "/common/solid_voxy_blocks_fragment.glsl" \ No newline at end of file diff --git a/shaders/world1/voxy_translucent.glsl b/shaders/world1/voxy_translucent.glsl new file mode 100644 index 00000000..8a577f6d --- /dev/null +++ b/shaders/world1/voxy_translucent.glsl @@ -0,0 +1,4 @@ +#define VOXY_WATER +#define THE_END + +#include "/common/water_voxy_blocks_fragment.glsl" \ No newline at end of file