Merge branch 'main' of https://patterns.place/admin/FearFactory
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@ -44,3 +44,5 @@ devtools/.sandbox-home/.pki/nssdb/pkcs11.txt
|
|||||||
devtools/.sandbox-home/.local/share/recently-used.xbel
|
devtools/.sandbox-home/.local/share/recently-used.xbel
|
||||||
devtools/.sandbox-home/.local/share/PrismLauncher/metacache
|
devtools/.sandbox-home/.local/share/PrismLauncher/metacache
|
||||||
1.20.1-FearFactoryTest/minecraft/libEffekseerNativeForJava.so
|
1.20.1-FearFactoryTest/minecraft/libEffekseerNativeForJava.so
|
||||||
|
/1.20.1-FearFactoryTest/minecraft/shaderpacks/Spooklementary_1.1
|
||||||
|
/1.20.1-FearFactoryTest/minecraft/config/chunky/tasks
|
||||||
|
@ -8,9 +8,9 @@
|
|||||||
"Boss rarity" = 1.0
|
"Boss rarity" = 1.0
|
||||||
#This controls whether the stalker bosses (spider moth, scorpioid bloodluster, draconic voidlasher, tormentor) are included in general. Set to false if you only want the other mobs, and the bosses will become unable to be spawned in any way.
|
#This controls whether the stalker bosses (spider moth, scorpioid bloodluster, draconic voidlasher, tormentor) are included in general. Set to false if you only want the other mobs, and the bosses will become unable to be spawned in any way.
|
||||||
"Boss inclusion" = true
|
"Boss inclusion" = true
|
||||||
#Controls the spawnrate of ALL non-boss mobs in this mod, including minibosses and all regular arthropods. Default multiplier value is 5. You could more than double the ArPhEx spawnrates by setting it to 2 or 1. Lower values = more spawns (minimum value is 1). No maximum rarity. Avoid decimal and negative numbers.
|
#Controls the vanilla biome-specific spawnrates of ALL non-boss mobs in this mod, including minibosses and all regular arthropods. Default multiplier value is 5. You could more than double the ArPhEx spawnrates by setting it to 2 or 1. Lower values = more spawns (minimum value is 1). No maximum rarity. Avoid decimal and negative numbers.
|
||||||
"Non-boss global spawnrates" = 2.0
|
"Non-boss global spawnrates" = 2.0
|
||||||
#ArPhEx has an additional spawning system that gives a 1 in (10) chance to spawn a random ArPhEx mob each time the natural spawn triggers. This system allows ArPhEx mobs to spawn in non-vanilla overworld biomes, while still accounting for mob rarity. Default number is 10, meaning it has a 1 in 10 chance to spawn each time. Setting it to 0 disables the additional spawning system entirely. Avoid decimal and negative numbers.
|
#ArPhEx has an additional spawning system that gives a 1 in (10) chance to spawn a random ArPhEx mob each time the natural spawn triggers. This system allows ArPhEx mobs to spawn in any non-vanilla overworld biomes, while still accounting for mob rarity. Default number is 10, meaning it has a 1 in 10 chance to spawn each time. Setting it to 0 disables the additional spawning system entirely. Avoid decimal and negative numbers.
|
||||||
"Random-system spawn rates" = 10.0
|
"Random-system spawn rates" = 10.0
|
||||||
"All entities enabled/disabled" = true
|
"All entities enabled/disabled" = true
|
||||||
#Maximum colony tamed ants per player (furthest ants despawn, 20 default)
|
#Maximum colony tamed ants per player (furthest ants despawn, 20 default)
|
||||||
@ -19,12 +19,14 @@
|
|||||||
"Crawling-restrict all mobs" = false
|
"Crawling-restrict all mobs" = false
|
||||||
#Specifically disables the Tormentor boss entirely. It will be unable to be spawned in any form if this is enabled.
|
#Specifically disables the Tormentor boss entirely. It will be unable to be spawned in any form if this is enabled.
|
||||||
"Disable Tormentor" = false
|
"Disable Tormentor" = false
|
||||||
#Disabled by default. If enabled, most mobs will become able to spawn in any dimension, including dimensions from other mods - may cause issues with some mod dimensions.
|
#Disabled by default. If enabled, most mobs will become able to spawn in any dimension, including dimensions from other mods - may cause issues with some mod dimensions. Note, however, that the mobs will have a low spawn weight in other dimensions.
|
||||||
"Spawn in other dimensions" = true
|
"Spawn in other dimensions" = true
|
||||||
#By default, the Tormentor can spawn naturally once you defeat the first three bosses. At this point, you probably won't be ready yet to fight it, and so will be forced to seal it and locate a crawling portal (all intentional). Set to false to prevent this, and ensure the Tormentor can only spawn from being summoned. The earlier - Boss natural spawning - config option has the same effect, but also controls other bosses.
|
#By default, the Tormentor can spawn naturally once you defeat the first three bosses. At this point, you probably won't be ready yet to fight it, and so will be forced to seal it and locate a crawling portal (all intentional). Set to false to prevent this, and ensure the Tormentor can only spawn from being summoned. The earlier - Boss natural spawning - config option has the same effect, but also controls other bosses.
|
||||||
"Tormentor initial natural spawning" = true
|
"Tormentor initial natural spawning" = true
|
||||||
#Do you want to massively amplify all ArPhEx spawns futher on top of the existing spawns? Enabling this will drastically amplfy random-system overworld spawns from the mod, and even add crawling dimension mobs like the spider ambusher into the overworld. Even the non-overworld bosses will spawn rarely in the overworld, except for the Tormentor (this must be summoned manually). Minibosses will spawn commonly. Perfect for fast-paced, intense gameplay!
|
#Do you want to massively amplify all ArPhEx spawns futher on top of the existing spawns? Enabling this will drastically amplfy random-system overworld spawns from the mod, and even add crawling dimension mobs like the spider ambusher into the overworld. Even the non-overworld bosses will spawn rarely in the overworld, except for the Tormentor (this must be summoned manually). Minibosses will spawn commonly. Perfect for fast-paced, intense gameplay!
|
||||||
"Insanity Mode" = true
|
"Insanity Mode" = true
|
||||||
|
#List IDs of any mobs you'd like to disable from the mod, separated by commas. You can find a mob's ID with the /summon command, but note that the arphex: part is not needed, and that this disables mobs completely from being spawned in any way, including existing mobs on world reload. Works on virtually all types of entities from the mod
|
||||||
|
"Disable Specific Mobs" = ["mob_id", "mob_id", "mob_id (add as many as needed, e.g. spider_snatcher)"]
|
||||||
|
|
||||||
[Difficulty]
|
[Difficulty]
|
||||||
#By default, the stalker bosses have hundreds of health points. Choose true to decrease their maximum to just 60 health. Avoid decimal and negative numbers.
|
#By default, the stalker bosses have hundreds of health points. Choose true to decrease their maximum to just 60 health. Avoid decimal and negative numbers.
|
||||||
@ -37,7 +39,7 @@
|
|||||||
"Tormentor Max Health" = 1024.0
|
"Tormentor Max Health" = 1024.0
|
||||||
#Value is in ticks. Since 20 ticks equate to a second, the default 25 ticks gives the Tormentor 1.25 seconds of immunity after each time it takes damage.
|
#Value is in ticks. Since 20 ticks equate to a second, the default 25 ticks gives the Tormentor 1.25 seconds of immunity after each time it takes damage.
|
||||||
"Tormentor Damage Speed Limit" = 20.0
|
"Tormentor Damage Speed Limit" = 20.0
|
||||||
#With this mode enabled, all mobs from the mod become unable to target players for attack! For more peaceful gameplay, this is valuable. Full bosses such as the Tormentor and Voidlasher may not work fully, so you may want to disable them if using this setting
|
#With this mode enabled, all mobs from the mod become unable to target players for attack! For more peaceful gameplay, this is valuable. Full bosses such as the Tormentor and Voidlasher may not follow this setting entirely, so you may want to disable them if using this setting
|
||||||
"Friendly Mode" = false
|
"Friendly Mode" = false
|
||||||
|
|
||||||
[Other]
|
[Other]
|
||||||
@ -59,4 +61,6 @@
|
|||||||
"Tormentor Particles" = true
|
"Tormentor Particles" = true
|
||||||
#Enable Tormentor's ability to add blurring and desaturation shaders when Tormenting
|
#Enable Tormentor's ability to add blurring and desaturation shaders when Tormenting
|
||||||
"Tormentor Shaders" = true
|
"Tormentor Shaders" = true
|
||||||
|
#Set to false to disable mobs like locusts from breaking crops, and minibosses/bosses from breaking leaves. Does not affect tamed ant commands, or the Tormentor's attacks, however - you can disable that boss if necessary.
|
||||||
|
"ArPhEx Griefing" = true
|
||||||
|
|
||||||
|
BIN
1.20.1-FearFactoryTest/minecraft/config/Terralith_1.20.x_v2.5.4.jar
(Stored with Git LFS)
Normal file
BIN
1.20.1-FearFactoryTest/minecraft/config/Terralith_1.20.x_v2.5.4.jar
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"debug": false,
|
"debug": false,
|
||||||
"trim_registry_mismatch_message": "<EFBFBD>b[All The Trims] <EFBFBD>cTrim Registry Mismatch. <EFBFBD>rPlease ensure that the client and server have the same mods with the same versions."
|
"trim_registry_mismatch_message": "§b[All The Trims] §cTrim Registry Mismatch. §rPlease ensure that the client and server have the same mods with the same versions."
|
||||||
}
|
}
|
@ -99,17 +99,6 @@
|
|||||||
"value": 1000
|
"value": 1000
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"forge:entity_gravity": {
|
|
||||||
"enabled": false,
|
|
||||||
"min": {
|
|
||||||
"default": -8,
|
|
||||||
"value": -8
|
|
||||||
},
|
|
||||||
"max": {
|
|
||||||
"default": 8,
|
|
||||||
"value": 8
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"obscure_api:resilience": {
|
"obscure_api:resilience": {
|
||||||
"enabled": false,
|
"enabled": false,
|
||||||
"min": {
|
"min": {
|
||||||
@ -121,6 +110,17 @@
|
|||||||
"value": 100
|
"value": 100
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"forge:entity_gravity": {
|
||||||
|
"enabled": false,
|
||||||
|
"min": {
|
||||||
|
"default": -8,
|
||||||
|
"value": -8
|
||||||
|
},
|
||||||
|
"max": {
|
||||||
|
"default": 8,
|
||||||
|
"value": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
"attributeslib:armor_pierce": {
|
"attributeslib:armor_pierce": {
|
||||||
"enabled": false,
|
"enabled": false,
|
||||||
"min": {
|
"min": {
|
||||||
@ -198,17 +198,6 @@
|
|||||||
"value": 4
|
"value": 4
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"forge:entity_reach": {
|
|
||||||
"enabled": false,
|
|
||||||
"min": {
|
|
||||||
"default": 0,
|
|
||||||
"value": 0
|
|
||||||
},
|
|
||||||
"max": {
|
|
||||||
"default": 1024,
|
|
||||||
"value": 1024
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"obscure_api:magic_resistance": {
|
"obscure_api:magic_resistance": {
|
||||||
"enabled": false,
|
"enabled": false,
|
||||||
"min": {
|
"min": {
|
||||||
@ -220,6 +209,17 @@
|
|||||||
"value": 100
|
"value": 100
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"forge:entity_reach": {
|
||||||
|
"enabled": false,
|
||||||
|
"min": {
|
||||||
|
"default": 0,
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"max": {
|
||||||
|
"default": 1024,
|
||||||
|
"value": 1024
|
||||||
|
}
|
||||||
|
},
|
||||||
"ars_nouveau:ars_nouveau.perk.saturation": {
|
"ars_nouveau:ars_nouveau.perk.saturation": {
|
||||||
"enabled": false,
|
"enabled": false,
|
||||||
"min": {
|
"min": {
|
||||||
@ -286,17 +286,6 @@
|
|||||||
"value": 1
|
"value": 1
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"hexcasting:scry_sight": {
|
|
||||||
"enabled": false,
|
|
||||||
"min": {
|
|
||||||
"default": 0,
|
|
||||||
"value": 0
|
|
||||||
},
|
|
||||||
"max": {
|
|
||||||
"default": 1,
|
|
||||||
"value": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"not_enough_glyphs:not_enough_glyphs.perk.mana_discount": {
|
"not_enough_glyphs:not_enough_glyphs.perk.mana_discount": {
|
||||||
"enabled": false,
|
"enabled": false,
|
||||||
"min": {
|
"min": {
|
||||||
@ -308,6 +297,17 @@
|
|||||||
"value": 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
"value": 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"hexcasting:scry_sight": {
|
||||||
|
"enabled": false,
|
||||||
|
"min": {
|
||||||
|
"default": 0,
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"max": {
|
||||||
|
"default": 1,
|
||||||
|
"value": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
"minecraft:zombie.spawn_reinforcements": {
|
"minecraft:zombie.spawn_reinforcements": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"min": {
|
"min": {
|
||||||
@ -363,7 +363,7 @@
|
|||||||
"value": 2048
|
"value": 2048
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"forge:swim_speed": {
|
"ars_nouveau:ars_nouveau.perk.wixie": {
|
||||||
"enabled": false,
|
"enabled": false,
|
||||||
"min": {
|
"min": {
|
||||||
"default": 0,
|
"default": 0,
|
||||||
@ -374,7 +374,7 @@
|
|||||||
"value": 1024
|
"value": 1024
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ars_nouveau:ars_nouveau.perk.wixie": {
|
"forge:swim_speed": {
|
||||||
"enabled": false,
|
"enabled": false,
|
||||||
"min": {
|
"min": {
|
||||||
"default": 0,
|
"default": 0,
|
||||||
@ -396,17 +396,6 @@
|
|||||||
"value": 1000000
|
"value": 1000000
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ars_nouveau:ars_elemental.perk.summon_power": {
|
|
||||||
"enabled": false,
|
|
||||||
"min": {
|
|
||||||
"default": 0,
|
|
||||||
"value": 0
|
|
||||||
},
|
|
||||||
"max": {
|
|
||||||
"default": 10000,
|
|
||||||
"value": 10000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"obscure_api:accuracy": {
|
"obscure_api:accuracy": {
|
||||||
"enabled": false,
|
"enabled": false,
|
||||||
"min": {
|
"min": {
|
||||||
@ -418,6 +407,17 @@
|
|||||||
"value": 100
|
"value": 100
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"ars_nouveau:ars_elemental.perk.summon_power": {
|
||||||
|
"enabled": false,
|
||||||
|
"min": {
|
||||||
|
"default": 0,
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"max": {
|
||||||
|
"default": 10000,
|
||||||
|
"value": 10000
|
||||||
|
}
|
||||||
|
},
|
||||||
"attributeslib:crit_damage": {
|
"attributeslib:crit_damage": {
|
||||||
"enabled": false,
|
"enabled": false,
|
||||||
"min": {
|
"min": {
|
||||||
|
@ -272,5 +272,142 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"biomesoplenty": {
|
||||||
|
"withered_abyss": {
|
||||||
|
"spawn": {
|
||||||
|
"ambient": {
|
||||||
|
"betternether": {
|
||||||
|
"firefly": {
|
||||||
|
"weight [default: 5]": 5,
|
||||||
|
"minGroupSize [default: 1]": 1,
|
||||||
|
"maxGroupSize [default: 3]": 3
|
||||||
|
},
|
||||||
|
"hydrogen_jellyfish": {
|
||||||
|
"weight [default: 5]": 5,
|
||||||
|
"minGroupSize [default: 2]": 2,
|
||||||
|
"maxGroupSize [default: 6]": 6
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"monster": {
|
||||||
|
"betternether": {
|
||||||
|
"naga": {
|
||||||
|
"weight [default: 8]": 8,
|
||||||
|
"minGroupSize [default: 3]": 3,
|
||||||
|
"maxGroupSize [default: 5]": 5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"undergrowth": {
|
||||||
|
"spawn": {
|
||||||
|
"ambient": {
|
||||||
|
"betternether": {
|
||||||
|
"firefly": {
|
||||||
|
"weight [default: 5]": 5,
|
||||||
|
"minGroupSize [default: 1]": 1,
|
||||||
|
"maxGroupSize [default: 3]": 3
|
||||||
|
},
|
||||||
|
"hydrogen_jellyfish": {
|
||||||
|
"weight [default: 5]": 5,
|
||||||
|
"minGroupSize [default: 2]": 2,
|
||||||
|
"maxGroupSize [default: 6]": 6
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"monster": {
|
||||||
|
"betternether": {
|
||||||
|
"naga": {
|
||||||
|
"weight [default: 8]": 8,
|
||||||
|
"minGroupSize [default: 3]": 3,
|
||||||
|
"maxGroupSize [default: 5]": 5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"erupting_inferno": {
|
||||||
|
"spawn": {
|
||||||
|
"ambient": {
|
||||||
|
"betternether": {
|
||||||
|
"firefly": {
|
||||||
|
"weight [default: 5]": 5,
|
||||||
|
"minGroupSize [default: 1]": 1,
|
||||||
|
"maxGroupSize [default: 3]": 3
|
||||||
|
},
|
||||||
|
"hydrogen_jellyfish": {
|
||||||
|
"weight [default: 5]": 5,
|
||||||
|
"minGroupSize [default: 2]": 2,
|
||||||
|
"maxGroupSize [default: 6]": 6
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"monster": {
|
||||||
|
"betternether": {
|
||||||
|
"naga": {
|
||||||
|
"weight [default: 8]": 8,
|
||||||
|
"minGroupSize [default: 3]": 3,
|
||||||
|
"maxGroupSize [default: 5]": 5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"crystalline_chasm": {
|
||||||
|
"spawn": {
|
||||||
|
"ambient": {
|
||||||
|
"betternether": {
|
||||||
|
"firefly": {
|
||||||
|
"weight [default: 5]": 5,
|
||||||
|
"minGroupSize [default: 1]": 1,
|
||||||
|
"maxGroupSize [default: 3]": 3
|
||||||
|
},
|
||||||
|
"hydrogen_jellyfish": {
|
||||||
|
"weight [default: 5]": 5,
|
||||||
|
"minGroupSize [default: 2]": 2,
|
||||||
|
"maxGroupSize [default: 6]": 6
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"monster": {
|
||||||
|
"betternether": {
|
||||||
|
"naga": {
|
||||||
|
"weight [default: 8]": 8,
|
||||||
|
"minGroupSize [default: 3]": 3,
|
||||||
|
"maxGroupSize [default: 5]": 5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"visceral_heap": {
|
||||||
|
"spawn": {
|
||||||
|
"ambient": {
|
||||||
|
"betternether": {
|
||||||
|
"firefly": {
|
||||||
|
"weight [default: 5]": 5,
|
||||||
|
"minGroupSize [default: 1]": 1,
|
||||||
|
"maxGroupSize [default: 3]": 3
|
||||||
|
},
|
||||||
|
"hydrogen_jellyfish": {
|
||||||
|
"weight [default: 5]": 5,
|
||||||
|
"minGroupSize [default: 2]": 2,
|
||||||
|
"maxGroupSize [default: 6]": 6
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"monster": {
|
||||||
|
"betternether": {
|
||||||
|
"naga": {
|
||||||
|
"weight [default: 8]": 8,
|
||||||
|
"minGroupSize [default: 3]": 3,
|
||||||
|
"maxGroupSize [default: 5]": 5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,68 @@
|
|||||||
|
{
|
||||||
|
"aspen_glade_enabled": true,
|
||||||
|
"auroral_garden_enabled": true,
|
||||||
|
"bayou_enabled": true,
|
||||||
|
"bog_enabled": true,
|
||||||
|
"cold_desert_enabled": true,
|
||||||
|
"coniferous_forest_enabled": true,
|
||||||
|
"crag_enabled": true,
|
||||||
|
"crystalline_chasm_enabled": true,
|
||||||
|
"dead_forest_enabled": true,
|
||||||
|
"dryland_enabled": true,
|
||||||
|
"dune_beach_enabled": true,
|
||||||
|
"erupting_inferno_enabled": true,
|
||||||
|
"field_enabled": true,
|
||||||
|
"fir_clearing_enabled": true,
|
||||||
|
"floodplain_enabled": true,
|
||||||
|
"forested_field_enabled": true,
|
||||||
|
"fungal_jungle_enabled": true,
|
||||||
|
"glowing_grotto_enabled": true,
|
||||||
|
"grassland_enabled": true,
|
||||||
|
"gravel_beach_enabled": true,
|
||||||
|
"highland_enabled": true,
|
||||||
|
"hot_springs_enabled": true,
|
||||||
|
"jacaranda_glade_enabled": true,
|
||||||
|
"jade_cliffs_enabled": true,
|
||||||
|
"lavender_field_enabled": true,
|
||||||
|
"lush_desert_enabled": true,
|
||||||
|
"lush_savanna_enabled": true,
|
||||||
|
"maple_woods_enabled": true,
|
||||||
|
"marsh_enabled": true,
|
||||||
|
"mediterranean_forest_enabled": true,
|
||||||
|
"moor_enabled": true,
|
||||||
|
"muskeg_enabled": true,
|
||||||
|
"mystic_grove_enabled": true,
|
||||||
|
"old_growth_dead_forest_enabled": true,
|
||||||
|
"old_growth_woodland_enabled": true,
|
||||||
|
"ominous_woods_enabled": true,
|
||||||
|
"orchard_enabled": true,
|
||||||
|
"origin_valley_enabled": true,
|
||||||
|
"overgrown_greens_enabled": true,
|
||||||
|
"pasture_enabled": true,
|
||||||
|
"prairie_enabled": true,
|
||||||
|
"pumpkin_patch_enabled": true,
|
||||||
|
"rainforest_enabled": true,
|
||||||
|
"redwood_forest_enabled": true,
|
||||||
|
"rocky_rainforest_enabled": true,
|
||||||
|
"rocky_shrubland_enabled": true,
|
||||||
|
"scrubland_enabled": true,
|
||||||
|
"seasonal_forest_enabled": true,
|
||||||
|
"shrubland_enabled": true,
|
||||||
|
"snowblossom_grove_enabled": true,
|
||||||
|
"snowy_coniferous_forest_enabled": true,
|
||||||
|
"snowy_fir_clearing_enabled": true,
|
||||||
|
"snowy_maple_woods_enabled": true,
|
||||||
|
"spider_nest_enabled": true,
|
||||||
|
"tropics_enabled": true,
|
||||||
|
"tundra_enabled": true,
|
||||||
|
"undergrowth_enabled": true,
|
||||||
|
"visceral_heap_enabled": true,
|
||||||
|
"volcanic_plains_enabled": true,
|
||||||
|
"volcano_enabled": true,
|
||||||
|
"wasteland_enabled": true,
|
||||||
|
"wasteland_steppe_enabled": true,
|
||||||
|
"wetland_enabled": true,
|
||||||
|
"wintry_origin_valley_enabled": true,
|
||||||
|
"withered_abyss_enabled": true,
|
||||||
|
"woodland_enabled": true
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
[general]
|
||||||
|
#Add various BOP resources to the Wandering Trader trade pool.
|
||||||
|
wandering_trader_trades = true
|
||||||
|
|
@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
[nether]
|
||||||
|
#The weighting of bop biome regions in the nether.
|
||||||
|
bop_nether_region_weight = 13
|
||||||
|
#The weighting of rare bop biome regions in the nether.
|
||||||
|
bop_nether_rare_region_weight = 2
|
||||||
|
|
||||||
|
[overworld]
|
||||||
|
#The weighting of primary bop biome regions in the overworld.
|
||||||
|
bop_primary_overworld_region_weight = 10
|
||||||
|
#The weighting of rare bop biome regions in the overworld.
|
||||||
|
bop_overworld_rare_region_weight = 2
|
||||||
|
#The weighting of secondary bop biome regions in the overworld.
|
||||||
|
bop_secondary_overworld_region_weight = 8
|
||||||
|
|
152
1.20.1-FearFactoryTest/minecraft/config/c2me.toml
Normal file
152
1.20.1-FearFactoryTest/minecraft/config/c2me.toml
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
version = 3
|
||||||
|
# (Default:
|
||||||
|
# max(
|
||||||
|
# 1,
|
||||||
|
# min(
|
||||||
|
# if( is_windows,
|
||||||
|
# (cpus / 1.6 - 2),
|
||||||
|
# (cpus / 1.2 - 2)
|
||||||
|
# ),
|
||||||
|
# if( is_j9vm,
|
||||||
|
# ( ( mem_gb - (if(is_client, 0.6, 0.2)) ) / 0.5 ),
|
||||||
|
# ( ( mem_gb - (if(is_client, 1.2, 0.6)) ) / 1.2 )
|
||||||
|
# )
|
||||||
|
# ) - if(is_client, 2, 0)
|
||||||
|
# )
|
||||||
|
# )
|
||||||
|
# The expression for the default value of global executor parallelism.
|
||||||
|
# This is used when the parallelism isn't overridden.
|
||||||
|
# Available variables: is_windows, is_j9vm, is_client, cpus, mem_gb
|
||||||
|
#
|
||||||
|
defaultGlobalExecutorParallelismExpression = "default"
|
||||||
|
# (Default: 5) Configures the parallelism of global executor
|
||||||
|
globalExecutorParallelism = "default"
|
||||||
|
|
||||||
|
[generalOptimizations]
|
||||||
|
# (Default: 100000) The task interval of mid-tick chunk tasks in nanoseconds (-1 to disable)
|
||||||
|
# Mid-tick chunk tasks is to execute chunk tasks during server tick loop
|
||||||
|
# to speed up chunk loading and generation
|
||||||
|
# This helps chunks loading and generating under high MSPT but may raise
|
||||||
|
# MSPT when chunks are loading or generating
|
||||||
|
#
|
||||||
|
# It is generally not recommended to adjust this value unless you know
|
||||||
|
# what you are doing
|
||||||
|
#
|
||||||
|
# Incompatible with Dimensional Threading (dimthread)
|
||||||
|
#
|
||||||
|
midTickChunkTasksInterval = "default"
|
||||||
|
# (Default: true) Whether to let async chunk request no longer block server thread
|
||||||
|
# (may cause incompatibility with other mods)
|
||||||
|
optimizeAsyncChunkRequest = "default"
|
||||||
|
|
||||||
|
[generalOptimizations.autoSave]
|
||||||
|
# (Default: ENHANCED) Defines how auto save should be handled
|
||||||
|
# VANILLA: Use vanilla auto-save behavior (auto-save performed every tick during ticking)
|
||||||
|
# ENHANCED: Use C2ME enhanced auto-save (auto-save performed when the server have spare time after ticking)
|
||||||
|
# PERIODIC: Use pre-1.18 vanilla auto-save behavior (auto-save performed every 6000 ticks during ticking)
|
||||||
|
#
|
||||||
|
# Please preserve quotes so this config don't break
|
||||||
|
#
|
||||||
|
mode = "default"
|
||||||
|
# (Default: 20000) Defines the delay in milliseconds between performing auto-save for a chunk
|
||||||
|
# This is only used when mode is set to ENHANCED
|
||||||
|
#
|
||||||
|
delay = "default"
|
||||||
|
|
||||||
|
[fixes]
|
||||||
|
# (Default: true)
|
||||||
|
# Whether to disable the shutdown hook of log4j2 on dedicated servers.
|
||||||
|
# Enabling this also makes the JVM exit when the dedicated server is considered fully shut down.
|
||||||
|
# This option have no effect on client-side.
|
||||||
|
# We has historically been doing this, and this config option allows you to disable this behavior.
|
||||||
|
#
|
||||||
|
disableLoggingShutdownHook = "default"
|
||||||
|
# (Default: true) Enforces safe world random access.
|
||||||
|
# This feature detects unsafe off-thread world random access, helping to find the causes
|
||||||
|
# of mysterious "Accessing LegacyRandomSource from multiple threads" crash.
|
||||||
|
# The default behavior is to fail hard when such bad things happens.
|
||||||
|
# Disabling this option will replace this behavior with a warning.
|
||||||
|
#
|
||||||
|
# It is generally not recommended to disable this settings unless you know what you are doing
|
||||||
|
#
|
||||||
|
#
|
||||||
|
enforceSafeWorldRandomAccess = "default"
|
||||||
|
|
||||||
|
[threadedWorldGen]
|
||||||
|
# (Default: true) Whether to enable this feature
|
||||||
|
enabled = "default"
|
||||||
|
# (Default: true) Whether to allow feature generation (world decorations like trees, ores and etc.) run in parallel
|
||||||
|
# (may cause incompatibility with other mods)
|
||||||
|
allowThreadedFeatures = "default"
|
||||||
|
# (Default: true) Whether to allow reducing lock radius
|
||||||
|
# (may cause incompatibility with other mods)
|
||||||
|
reduceLockRadius = "default"
|
||||||
|
# (Default: true) Whether to enable async and parallel scheduling
|
||||||
|
# This will reduce server thread load
|
||||||
|
# (may cause incompatibility with other mods)
|
||||||
|
#
|
||||||
|
asyncScheduling = "default"
|
||||||
|
|
||||||
|
[ioSystem]
|
||||||
|
# (Default: true) Whether to use the optimized implementation of IO system
|
||||||
|
replaceImpl = "default"
|
||||||
|
# (Default: true) Whether to use async chunk loading & unloading
|
||||||
|
async = "default"
|
||||||
|
# (Default: false) EXPERIMENTAL FEATURE
|
||||||
|
# This replaces the way your chunks are saved.
|
||||||
|
# Please keep regular backups of your world if you are using this feature,
|
||||||
|
# and report any world issues you encounter with this feature to our GitHub.
|
||||||
|
#
|
||||||
|
# Whether to use the fast reduced allocation chunk serializer
|
||||||
|
# (may cause incompatibility with other mods)
|
||||||
|
#
|
||||||
|
# Set to false for the following reasons:
|
||||||
|
# Incompatible with architectury@9.2.14 (*) (defined in c2me)
|
||||||
|
gcFreeChunkSerializer = "default"
|
||||||
|
# (Default: 8192) Soft limit for io worker nbt cache
|
||||||
|
chunkDataCacheSoftLimit = "default"
|
||||||
|
# (Default: 32678) Hard limit for io worker nbt cache
|
||||||
|
chunkDataCacheLimit = "default"
|
||||||
|
# (Default: -1) Defines which chunk compression should be used
|
||||||
|
# -1 for Vanilla default
|
||||||
|
# 1 for GZip (RFC1952) (Vanilla compatible)
|
||||||
|
# 2 for Zlib (RFC1950) (Vanilla default) (Vanilla compatible)
|
||||||
|
# 3 for Uncompressed (Fastest, but higher disk usage) (Vanilla compatible)
|
||||||
|
#
|
||||||
|
# Original chunk data will still readable after modifying this option
|
||||||
|
# as this option only affects newly stored chunks
|
||||||
|
# Invalid values will fall back to vanilla default
|
||||||
|
#
|
||||||
|
chunkStreamVersion = "default"
|
||||||
|
|
||||||
|
[noTickViewDistance]
|
||||||
|
# (Default: true) Whether to enable no-tick view distance
|
||||||
|
enabled = "default"
|
||||||
|
# (Default: 6) No-tick view distance max concurrent chunk loads
|
||||||
|
# Lower this for a better latency and higher this for a faster loading
|
||||||
|
maxConcurrentChunkLoads = "default"
|
||||||
|
# (Default: true) Whether to use compatibility mode to send chunks
|
||||||
|
# This may fix some mod compatibility issues
|
||||||
|
compatibilityMode = "default"
|
||||||
|
# (Default: false) Whether to ensure correct chunks within normal render distance
|
||||||
|
# This will send chunks twice increasing network load
|
||||||
|
ensureChunkCorrectness = "default"
|
||||||
|
|
||||||
|
[clientSideConfig]
|
||||||
|
|
||||||
|
[clientSideConfig.modifyMaxVDConfig]
|
||||||
|
# (Default: true) Whether to modify maximum view distance
|
||||||
|
enabled = "default"
|
||||||
|
# (Default: 60) Max render distance allowed in game options
|
||||||
|
maxViewDistance = "default"
|
||||||
|
|
||||||
|
[vanillaWorldGenOptimizations]
|
||||||
|
# (Default: true) Whether to enable aquifer optimizations to accelerate overworld worldgen
|
||||||
|
# (may cause incompatibility with other mods)
|
||||||
|
optimizeAquifer = "default"
|
||||||
|
# (Default: true) Whether to enable End Biome Cache to accelerate The End worldgen
|
||||||
|
# This is no longer included in lithium-fabric
|
||||||
|
# (may cause incompatibility with other mods)
|
||||||
|
#
|
||||||
|
useEndBiomeCache = "default"
|
||||||
|
|
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
/* This has 2 acceptable values: [CHAT, WIDGET]
|
||||||
|
* CHAT - Will post a message within 5 minutes to a user's chat once they've been in game for 5 minutes. Will no longer show after the user presses dismiss.
|
||||||
|
* WIDGET - Displays a widget on screen with the announcement on all screens until the widget is dismissed.
|
||||||
|
*/
|
||||||
|
"announcement_delivery": "WIDGET"
|
||||||
|
}
|
@ -1 +1 @@
|
|||||||
{"v":1,"s":"56611012faf982866dd74c206f5f6f508180c27af5e78270c02b4c53bb832c0bb960dd7659da92993205245134d2166690da716b08c5dc8d02c23ff08fd1e22d","u":"32ef8a6f821aff9459e277605f4bbff675e246427b195d1759b07d124c487193211916e5625cde497d3abb4ba1855a2e19506b42fac8ad10641a1ee7f8a7f7e5","p":"40eb1a8a07c80c6cfc490ddaca6d03de1f5466cee6fe772f0f964f34c084172c83a6283c26ed7e882905e008c6ce18e163af4fa3c7f8a8ee800cc90b3287e59b","t":1747542042}
|
{"v":1,"s":"ad9cded51ce8d06bbe05fa47233e1b61365cd6dcb6a17919dc129de1b9d5f15119e3ea92a6f95c81450a58dc73220ac1820a99604e2fedcef038a662d5d76870","u":"2c8d9f6d02fc60fa907ad7a42865dedcfc7fc86436a6fc1c6e49097a9813a312b87d4aa225f7f0f2bae0865c1b5e4436f431b22fd95c700ff7d347738c009ac0","p":"0544a70c267000580a5187b0b3f8d58d3e6fec4f21f7e8c9dd05750b173b19f68a2f89b04e9da22f8104d960e1cc5e22def1071b5990d1d83780a5cb9d39183b","t":1748042975}
|
@ -25,6 +25,6 @@
|
|||||||
"notifications": {
|
"notifications": {
|
||||||
"force_disable_donation_prompts": false,
|
"force_disable_donation_prompts": false,
|
||||||
"has_cleared_donation_button": false,
|
"has_cleared_donation_button": false,
|
||||||
"has_seen_donation_prompt": true
|
"has_seen_donation_prompt": false
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -3,7 +3,7 @@ backend = "DEFAULT"
|
|||||||
#Enable or disable instance update limiting with distance.
|
#Enable or disable instance update limiting with distance.
|
||||||
limitUpdates = true
|
limitUpdates = true
|
||||||
#The number of worker threads to use. Set to -1 to let Flywheel decide. Set to 0 to disable parallelism. Requires a game restart to take effect.
|
#The number of worker threads to use. Set to -1 to let Flywheel decide. Set to 0 to disable parallelism. Requires a game restart to take effect.
|
||||||
#Range: -1 ~ 16
|
#Range: -1 ~ 12
|
||||||
workerThreads = -1
|
workerThreads = -1
|
||||||
|
|
||||||
#Config options for Flywheel's built-in backends.
|
#Config options for Flywheel's built-in backends.
|
||||||
|
BIN
1.20.1-FearFactoryTest/minecraft/icon.png
(Stored with Git LFS)
BIN
1.20.1-FearFactoryTest/minecraft/icon.png
(Stored with Git LFS)
Binary file not shown.
BIN
1.20.1-FearFactoryTest/minecraft/mods/ArPhEx-4.5.1b-forge-1.20.1.jar
(Stored with Git LFS)
BIN
1.20.1-FearFactoryTest/minecraft/mods/ArPhEx-4.5.1b-forge-1.20.1.jar
(Stored with Git LFS)
Binary file not shown.
BIN
1.20.1-FearFactoryTest/minecraft/mods/ArPhEx-4.5.2d-forge-1.20.1.jar
(Stored with Git LFS)
Normal file
BIN
1.20.1-FearFactoryTest/minecraft/mods/ArPhEx-4.5.2d-forge-1.20.1.jar
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
1.20.1-FearFactoryTest/minecraft/mods/BiomesOPlenty-forge-1.20.1-19.0.0.96.jar
(Stored with Git LFS)
Normal file
BIN
1.20.1-FearFactoryTest/minecraft/mods/BiomesOPlenty-forge-1.20.1-19.0.0.96.jar
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
1.20.1-FearFactoryTest/minecraft/mods/Terralith_1.20.x_v2.5.4.jar
(Stored with Git LFS)
Normal file
BIN
1.20.1-FearFactoryTest/minecraft/mods/Terralith_1.20.x_v2.5.4.jar
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
1.20.1-FearFactoryTest/minecraft/mods/c2me-fabric-mc1.20.1-0.2.0+alpha.11.16.jar
(Stored with Git LFS)
Normal file
BIN
1.20.1-FearFactoryTest/minecraft/mods/c2me-fabric-mc1.20.1-0.2.0+alpha.11.16.jar
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
1.20.1-FearFactoryTest/minecraft/mods/fasterrandom-5.1.0.jar
(Stored with Git LFS)
Normal file
BIN
1.20.1-FearFactoryTest/minecraft/mods/fasterrandom-5.1.0.jar
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -1,13 +1,15 @@
|
|||||||
#---------------------------------------------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------------------------------------------
|
||||||
#---------------------------------------------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
dimension.world0=minecraft:overworld
|
dimension.world0=minecraft:overworld mythicbotany:alfheim dimdoors:personal_pockets
|
||||||
|
|
||||||
dimension.world-1=minecraft:the_nether
|
dimension.world-1=minecraft:the_nether dimdoors:public_pockets undergarden:undergarden
|
||||||
|
|
||||||
dimension.world1=minecraft:the_end
|
dimension.world1=minecraft:the_end
|
||||||
|
|
||||||
dimension.world2=theabyss:frost_world
|
dimension.world2=theabyss:frost_world
|
||||||
|
|
||||||
|
dimension.worldflesh=ihfr:the_carnage dimdoors:limbo dimdoors:dungeon_pockets
|
||||||
|
|
||||||
dimension.stop= *
|
dimension.stop= *
|
||||||
|
|
||||||
|
@ -97,27 +97,33 @@
|
|||||||
program.world-1/composite2.enabled=MOTION_BLURRING
|
program.world-1/composite2.enabled=MOTION_BLURRING
|
||||||
program.world1/composite2.enabled=MOTION_BLURRING
|
program.world1/composite2.enabled=MOTION_BLURRING
|
||||||
program.world2/composite2.enabled=MOTION_BLURRING
|
program.world2/composite2.enabled=MOTION_BLURRING
|
||||||
|
program.worldflesh/composite2.enabled=MOTION_BLURRING
|
||||||
program.world0/composite4.enabled=BLOOM
|
program.world0/composite4.enabled=BLOOM
|
||||||
program.world-1/composite4.enabled=BLOOM
|
program.world-1/composite4.enabled=BLOOM
|
||||||
program.world1/composite4.enabled=BLOOM
|
program.world1/composite4.enabled=BLOOM
|
||||||
program.world2/composite4.enabled=BLOOM
|
program.world2/composite4.enabled=BLOOM
|
||||||
|
program.worldflesh/composite4.enabled=BLOOM
|
||||||
#if SHADOW_QUALITY == -1
|
#if SHADOW_QUALITY == -1
|
||||||
program.world0/shadow.enabled=false
|
program.world0/shadow.enabled=false
|
||||||
program.world-1/shadow.enabled=false
|
program.world-1/shadow.enabled=false
|
||||||
program.world1/shadow.enabled=false
|
program.world1/shadow.enabled=false
|
||||||
program.world2/shadow.enabled=false
|
program.world2/shadow.enabled=false
|
||||||
|
program.worldflesh/shadow.enabled=false
|
||||||
#endif
|
#endif
|
||||||
#if FXAA_DEFINE == -1
|
#if FXAA_DEFINE == -1
|
||||||
program.world0/composite7.enabled=FXAA
|
program.world0/composite7.enabled=FXAA
|
||||||
program.world-1/composite7.enabled=FXAA
|
program.world-1/composite7.enabled=FXAA
|
||||||
program.world1/composite7.enabled=FXAA
|
program.world1/composite7.enabled=FXAA
|
||||||
program.world2/composite7.enabled=FXAA
|
program.world2/composite7.enabled=FXAA
|
||||||
|
program.worldflesh/composite7.enabled=FXAA
|
||||||
#endif
|
#endif
|
||||||
#if COLORED_LIGHTING == 0
|
#if COLORED_LIGHTING == 0
|
||||||
program.world0/shadowcomp.enabled=false
|
program.world0/shadowcomp.enabled=false
|
||||||
program.world-1/shadowcomp.enabled=false
|
program.world-1/shadowcomp.enabled=false
|
||||||
program.world1/shadowcomp.enabled=false
|
program.world1/shadowcomp.enabled=false
|
||||||
program.world2/shadowcomp.enabled=false
|
program.world2/shadowcomp.enabled=false
|
||||||
|
program.worldflesh/shadowcomp.enabled=false
|
||||||
|
worldflesh
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# Miscellaneous
|
# Miscellaneous
|
||||||
|
@ -0,0 +1,891 @@
|
|||||||
|
#shaders/lang/en_us.lang
|
||||||
|
|
||||||
|
#Profiles
|
||||||
|
profile.POTATO=§4Potato
|
||||||
|
profile.VERYLOW=§6Very Low
|
||||||
|
profile.LOW=§eLow
|
||||||
|
profile.MEDIUM=§aMedium
|
||||||
|
profile.HIGH=§bHigh (Default)
|
||||||
|
profile.VERYHIGH=§9Very High
|
||||||
|
profile.ULTRA=§dUltra
|
||||||
|
profile.comment=Shader profiles change performance settings with the most optimised visual fidelity to performance ratio. §e[*]§r It's recommended to use one of these profiles for your settings unless you know what you are doing. §e[*]§r All affected settings can all be found in the "Performance Settings" menu.
|
||||||
|
|
||||||
|
#Information
|
||||||
|
screen.INFORMATION=Information
|
||||||
|
screen.INFORMATION.comment=This section contains buttons that only exist to provide information.
|
||||||
|
|
||||||
|
option.info0=§bHover your mouse on a button
|
||||||
|
value.info0.0=
|
||||||
|
option.info0.comment=This section contains buttons that only exist to provide information.
|
||||||
|
|
||||||
|
option.info1=How to get more performance
|
||||||
|
value.info1.0=
|
||||||
|
option.info1.comment=Performance is a complex topic in Minecraft because it gets affected by so many things, but you can try these:. Reduce your render distance, ideally it should be between 6 and 16 for almost every device. Reduce the "Profile" shader setting, these have been carefully tested for the best visual/performance ratio. More information will be added later.
|
||||||
|
|
||||||
|
option.info2=What are the best settings
|
||||||
|
value.info2.0=
|
||||||
|
option.info2.comment=Best settings are subjective, but using the default settings will be the near-best for most people. The default settings have been shaped by years of community evaluations and feedback, while paying a lot of attention to the visual/performance ratio. But you should still feel free to tweak around and have fun doing so!
|
||||||
|
|
||||||
|
option.info3=What is Profile or Visual Style
|
||||||
|
value.info3.0=
|
||||||
|
option.info3.comment="Profile" setting changes the setting founds in the "Performance Settings" menu, while not affecting any preference-based settings. "Visual Style" changes the "Default Style" values that exist on many preference-based settings, but it does not impact performance by an important amount.
|
||||||
|
|
||||||
|
option.info4=What is RP Support
|
||||||
|
value.info4.0=
|
||||||
|
option.info4.comment=RP Support option determines how the shader pack treats the different blocks of Minecraft. For example, §bIntegratedPBR+§r treats gold blocks as reflective things, while §elabPBR§r or §eseuspbr§r require you to install a resource pack to tell that to the shader. Setting RP Support to §aBasic§r will make it so that no block is "special" other than a couple exceptions like water.
|
||||||
|
|
||||||
|
option.info5=How to fix mod issues
|
||||||
|
value.info5.0=
|
||||||
|
option.info5.comment=Mod incompatibilities are inevitable with shader packs because of the way they work, but you can check out this information page about mod issues with Complementary to view a bunch of known fixes. www.complementary.dev/mod-issues
|
||||||
|
|
||||||
|
option.info6=
|
||||||
|
value.info6.0=
|
||||||
|
option.info6.comment=
|
||||||
|
|
||||||
|
option.info7=
|
||||||
|
value.info7.0=
|
||||||
|
option.info7.comment=
|
||||||
|
|
||||||
|
option.info8=How to join the community
|
||||||
|
value.info8.0=
|
||||||
|
option.info8.comment=You can join the Complementary Discord server to join our friendly community, and be able to contact developers or experienced community members. www.complementary.dev/discord
|
||||||
|
|
||||||
|
option.info9=How to support Complementary
|
||||||
|
value.info9.0=
|
||||||
|
option.info9.comment=Best way to support the development of Complementary is to share it with your friends or social media, but you can also directly support the developer on Patreon. www.patreon.com/emingt
|
||||||
|
|
||||||
|
option.info10=Credits
|
||||||
|
value.info10.0=
|
||||||
|
option.info10.comment=EminGT: The main developer of Complementary. Capt Tatsu: Developer of BSL Shaders, his generosity is what made Complementary possible in the first place. Special Thanks: IMS212, sp614x, Chocapic13, Robobo1221, SixthSurge, null511, fayer3, catlikecoding, Builderb0y, Jessie, SpacEagle17, isuewo, flytrap
|
||||||
|
|
||||||
|
#Style
|
||||||
|
option.SHADER_STYLE=Visual Style
|
||||||
|
option.SHADER_STYLE.comment=Determines the default visual style of the shader pack. §bReimagined§r: Complementing Minecraft while preserving its unique visual elements. §dUnbound§r: Reworking the visuals of Minecraft with a semi-realistic fantasy style. §e[*]§r Affected settings: Water Style, Cloud Style, Sun/Moon Style, Sun/Moon Angle, Aurora Style.
|
||||||
|
value.SHADER_STYLE.1=§bReimagined
|
||||||
|
value.SHADER_STYLE.4=§dUnbound
|
||||||
|
|
||||||
|
#Screens
|
||||||
|
screen.PERFORMANCE_SETTINGS=§ePerformance Settings§r
|
||||||
|
screen.PERFORMANCE_SETTINGS.comment=Settings that directly relate to the performance, and get changed by the different shader profiles.
|
||||||
|
|
||||||
|
screen.ATMOSPHERE_SETTINGS=Atmosphere
|
||||||
|
screen.ATMOSPHERE_SETTINGS.comment=Settings that relate to the atmosphere.
|
||||||
|
|
||||||
|
screen.ATM_COLOR_SETTINGS=Atmosphere Color Multipliers
|
||||||
|
screen.ATM_COLOR_SETTINGS.comment=Enables customization of atmosphere colors that are mostly seen in the sky and fog.
|
||||||
|
|
||||||
|
screen.MORNING_ATM_MULTS=Sunrise/Sunset Time
|
||||||
|
screen.NOON_ATM_MULTS=Noon Time
|
||||||
|
screen.NIGHT_ATM_MULTS=Night Time
|
||||||
|
screen.RAIN_ATM_MULTS=Rainy/Snowy Weather
|
||||||
|
screen.NETHER_ATM_MULTS=The Nether Dimension
|
||||||
|
screen.END_ATM_MULTS=The End Dimension
|
||||||
|
|
||||||
|
screen.CLOUD_SETTINGS=Clouds
|
||||||
|
screen.CLOUD_SETTINGS.comment=Settings that relate to the clouds.
|
||||||
|
|
||||||
|
screen.CLOUD_UNBOUND_SETTINGS=Unbound Cloud Settings
|
||||||
|
screen.CLOUD_REIMAGINED_SETTINGS=Reimagined Cloud Settings
|
||||||
|
|
||||||
|
screen.FOG_SETTINGS=Fog
|
||||||
|
screen.FOG_SETTINGS.comment=Settings that relate to the various types of fog.
|
||||||
|
|
||||||
|
screen.NETHER_SETTINGS=The Nether Dimension
|
||||||
|
screen.NETHER_SETTINGS.comment=Settings that relate to the Nether dimension.
|
||||||
|
|
||||||
|
screen.CAMERA_SETTINGS=Camera
|
||||||
|
screen.CAMERA_SETTINGS.comment=Settings that relate to the view/camera.
|
||||||
|
|
||||||
|
screen.TONEMAP_SETTINGS=Color Balance
|
||||||
|
screen.TONEMAP_SETTINGS.comment=Settings that determine the color balance of the visuals.
|
||||||
|
|
||||||
|
screen.COLORGRADING_SETTINGS=Color Grading
|
||||||
|
screen.COLORGRADING_SETTINGS.comment=Settings to mix up the final color channels.
|
||||||
|
|
||||||
|
screen.WORLD_BLUR_SETTINGS=World Blur
|
||||||
|
screen.WORLD_BLUR_SETTINGS.comment=Settings that relate to fancy world blurring effects.
|
||||||
|
|
||||||
|
screen.MATERIAL_SETTINGS=Materials
|
||||||
|
screen.MATERIAL_SETTINGS.comment=Settings that are related to the materials of Minecraft.
|
||||||
|
|
||||||
|
screen.IPBR_SETTINGS=Integrated Materials
|
||||||
|
screen.IPBR_SETTINGS.comment=Settings that are related to the features of IntegratedPBR+.
|
||||||
|
|
||||||
|
screen.GLOWING_ORE_SETTINGS=Glowing Ores
|
||||||
|
screen.GLOWING_ORE_SETTINGS.comment=Settings to adjust emission of ore blocks.
|
||||||
|
|
||||||
|
screen.GLOWING_STUFF_SETTINGS=Glowing Stuff
|
||||||
|
screen.GLOWING_STUFF_SETTINGS.comment=Settings to adjust emission of miscellaneous blocks.
|
||||||
|
|
||||||
|
screen.OTHER_IPBR_SETTINGS=Other
|
||||||
|
screen.OTHER_IPBR_SETTINGS.comment=Miscellaneous IntegratedPBR+ settings.
|
||||||
|
|
||||||
|
screen.CUSTOM_PBR_SETTINGS=labPBR/seuspbr Materials
|
||||||
|
screen.CUSTOM_PBR_SETTINGS.comment=Settings that are related to the features of labPBR/seuspbr.
|
||||||
|
|
||||||
|
screen.LIGHTING_SETTINGS=Lighting
|
||||||
|
screen.LIGHTING_SETTINGS.comment=Settings that are related to lighting.
|
||||||
|
|
||||||
|
screen.LIGHT_COLOR_SETTINGS=Lighting Color Multipliers
|
||||||
|
screen.LIGHT_COLOR_SETTINGS.comment=Enables customization of lighting colors that are seen on all surfaces.
|
||||||
|
|
||||||
|
screen.MORNING_LIGHT_MULTS=Sunrise/Sunset Time
|
||||||
|
screen.NOON_LIGHT_MULTS=Noon Time
|
||||||
|
screen.NIGHT_LIGHT_MULTS=Night Time
|
||||||
|
screen.RAIN_LIGHT_MULTS=Rainy/Snowy Weather
|
||||||
|
screen.NETHER_LIGHT_MULTS=The Nether Dimension
|
||||||
|
screen.END_LIGHT_MULTS=The End Dimension
|
||||||
|
|
||||||
|
screen.BLOCKLIGHT_COLOR_SETTINGS=Blocklight Color
|
||||||
|
screen.BLOCKLIGHT_COLOR_SETTINGS.comment=Settings to adjust the color emited from light source blocks.
|
||||||
|
|
||||||
|
screen.MOON_PHASE_INF_SETTINGS=Moon Phase Influence
|
||||||
|
screen.MOON_PHASE_INF_SETTINGS.comment=Settings to determine how different moon phases affect the night lighting.
|
||||||
|
|
||||||
|
screen.WATER_SETTINGS=Water
|
||||||
|
screen.WATER_SETTINGS.comment=Settings that are about water.
|
||||||
|
|
||||||
|
screen.WATER_COLOR_SETTINGS=Water Surface Color
|
||||||
|
screen.UNDERWATER_COLOR_SETTINGS=Underwater Color
|
||||||
|
|
||||||
|
screen.WATER_WAVE_SETTINGS=Waving Water Normals §e[*]§r
|
||||||
|
screen.WATER_WAVE_SETTINGS.comment=Settings to customise the surface-direction waves (normals) seen on water. §e[*]§r These settings only work when the Water Style is set to "Reimagined + Waves" or "Unbound".
|
||||||
|
|
||||||
|
screen.WAVING_SETTINGS=Waving Textures
|
||||||
|
screen.WAVING_SETTINGS.comment=Settings that are about waving textures.
|
||||||
|
|
||||||
|
screen.OTHER_SETTINGS=Other
|
||||||
|
screen.OTHER_SETTINGS.comment=Settings that don't fit into any other category.
|
||||||
|
|
||||||
|
screen.SELECT_OUTLINE_SETTINGS=Selection Outline
|
||||||
|
screen.SELECT_OUTLINE_SETTINGS.comment=Settings that change the block selection outline.
|
||||||
|
|
||||||
|
screen.WORLD_OUTLINE_SETTINGS=World Outline
|
||||||
|
screen.WORLD_OUTLINE_SETTINGS.comment=Settings that are about optional outline effects.
|
||||||
|
|
||||||
|
screen.SPOOKY_SETTINGS=Spooklementary Settings
|
||||||
|
screen.EYES_SETTINGS=Eyes Settings
|
||||||
|
screen.BLOOD_MOON_SETTINGS=Blood Moon Settings
|
||||||
|
|
||||||
|
#Settings
|
||||||
|
option.RP_MODE=RP Support
|
||||||
|
option.RP_MODE.comment=Changes many internal calculations to determine how different blocks and materials will be rendered. §bIntegrated PBR+§r: Calculated PBR and extra effects, highly recommended for most use cases. §aBasic§r: No PBR or extra effects. §elabPBR/seuspbr§r: Materials using the required PBR resource packs.
|
||||||
|
value.RP_MODE.0=§aBasic
|
||||||
|
value.RP_MODE.1=§bIntegrated PBR+
|
||||||
|
value.RP_MODE.2=§eseuspbr (RP Required)
|
||||||
|
value.RP_MODE.3=§elabPBR (RP Required)
|
||||||
|
|
||||||
|
option.WATER_QUALITY=Water Material Quality
|
||||||
|
option.WATER_QUALITY.comment=Adjusts the visual quality of water. §bHigh§r: Enables water refraction and allows for more detail on wavy water styles. §aMedium§r: Default. §eLow§r: No edge foaming, no fancy alpha, no varying color intensity, no surface shadows, and no wave parallax.
|
||||||
|
value.WATER_QUALITY.1=§eLow
|
||||||
|
value.WATER_QUALITY.2=§aMedium
|
||||||
|
value.WATER_QUALITY.3=§bHigh
|
||||||
|
|
||||||
|
option.WATER_REFLECT_QUALITY=Water Reflection Quality
|
||||||
|
option.WATER_REFLECT_QUALITY.comment=Adjusts the visual quality of reflections that appear on translucents. §aMedium§r: Screenspace ray-traced reflections on water and translucents. §4Potato§r: Replaces water and translucent reflections with a faster method, may look incorrect in some situations. §cOFF§r: No reflections.
|
||||||
|
value.WATER_REFLECT_QUALITY.0=§cOFF
|
||||||
|
value.WATER_REFLECT_QUALITY.1=§4Potato
|
||||||
|
value.WATER_REFLECT_QUALITY.2=§aMedium
|
||||||
|
|
||||||
|
option.BLOCK_REFLECT_QUALITY=Block Reflection Quality §e[*]§r
|
||||||
|
option.BLOCK_REFLECT_QUALITY.comment=Adjusts the visual quality of reflections that appear on solid materials. §bHigh§r: Sun/moon highlights + smoother specular reflections using a temporal filter. §aMedium§r: Sun/moon highlights + specular reflections. §eLow§r: Sun/moon highlights only. §e[*]§r RP Support option must be set to anything but Basic for any specular reflections to appear.
|
||||||
|
value.BLOCK_REFLECT_QUALITY.0=§cOFF
|
||||||
|
value.BLOCK_REFLECT_QUALITY.1=§eLow
|
||||||
|
value.BLOCK_REFLECT_QUALITY.2=§aMedium
|
||||||
|
value.BLOCK_REFLECT_QUALITY.3=§bHigh
|
||||||
|
|
||||||
|
option.REALTIME_SHADOWS=Real-Time Shadows
|
||||||
|
option.REALTIME_SHADOWS.comment=Enables traditional shadows that move depending on the terrain and sun/moon angle. §e[*]§r Disabling this option will cause Light Shafts to not work, and will stop other shadow options from doing anything
|
||||||
|
value.REALTIME_SHADOWS.true=§bON
|
||||||
|
value.REALTIME_SHADOWS.false=§cOFF
|
||||||
|
|
||||||
|
option.SHADOW_QUALITY=Shadow Sample Quality
|
||||||
|
option.SHADOW_QUALITY.comment=Adjusts the quality of shadows. Every tier further reduces the shadow noise artifacts, and options lower than §bHigh§r enable optimised shadows on leaves; meanwhile the §6Very Low§r option significantly downgrades shadows in multiple ways.
|
||||||
|
value.SHADOW_QUALITY.0=§6Very Low
|
||||||
|
value.SHADOW_QUALITY.1=§eLow
|
||||||
|
value.SHADOW_QUALITY.2=§aMedium
|
||||||
|
value.SHADOW_QUALITY.3=§bHigh
|
||||||
|
value.SHADOW_QUALITY.4=§9Very High
|
||||||
|
value.SHADOW_QUALITY.5=§dUltra
|
||||||
|
|
||||||
|
option.LIGHTSHAFT_QUALI_DEFINE=Light Shaft Quality
|
||||||
|
option.LIGHTSHAFT_QUALI_DEFINE.comment=Adjusts the quality of light shafts. Every tier further reduces the light shaft noise artifacts.
|
||||||
|
value.LIGHTSHAFT_QUALI_DEFINE.0=§cOFF
|
||||||
|
value.LIGHTSHAFT_QUALI_DEFINE.1=§eLow
|
||||||
|
value.LIGHTSHAFT_QUALI_DEFINE.2=§aMedium
|
||||||
|
value.LIGHTSHAFT_QUALI_DEFINE.3=§bHigh
|
||||||
|
value.LIGHTSHAFT_QUALI_DEFINE.4=§9Very High
|
||||||
|
|
||||||
|
option.shadowDistance=Shadow Distance
|
||||||
|
option.shadowDistance.comment=Adjusts the distance from the player which real-time shadows are rendered. §e[*]§r The value is internally capped at Render Distance. §c[-]§r Lower values may cause excessive Light Shaft leaking.
|
||||||
|
value.shadowDistance.64.0=§e4 Chunks §c[-]
|
||||||
|
value.shadowDistance.80.0=§e5 Chunks §c[-]
|
||||||
|
value.shadowDistance.96.0=§e6 Chunks §c[-]
|
||||||
|
value.shadowDistance.112.0=§e7 Chunks §c[-]
|
||||||
|
value.shadowDistance.128.0=§a8 Chunks
|
||||||
|
value.shadowDistance.160.0=§a10 Chunks
|
||||||
|
value.shadowDistance.192.0=§b12 Chunks
|
||||||
|
value.shadowDistance.224.0=§b14 Chunks
|
||||||
|
value.shadowDistance.256.0=§b16 Chunks
|
||||||
|
value.shadowDistance.320.0=§d20 Chunks
|
||||||
|
value.shadowDistance.384.0=§d24 Chunks
|
||||||
|
value.shadowDistance.512.0=§d32 Chunks
|
||||||
|
value.shadowDistance.768.0=§d48 Chunks
|
||||||
|
value.shadowDistance.1024.0=§d64 Chunks
|
||||||
|
|
||||||
|
option.ENTITY_SHADOWS=Entity Shadows
|
||||||
|
option.ENTITY_SHADOWS.comment=Enables the ability for entities and block entities to cast shadows.
|
||||||
|
value.ENTITY_SHADOWS.true=§dON
|
||||||
|
value.ENTITY_SHADOWS.false=§eOFF
|
||||||
|
|
||||||
|
option.DETAIL_QUALITY=Detail Quality
|
||||||
|
option.DETAIL_QUALITY.comment=Adjusts several small things that affect performance. Adjust the quality of: TAA, lighting tweaks, Night Nebula, Nether Storm, Ender Beams.
|
||||||
|
value.DETAIL_QUALITY.0=§4Potato
|
||||||
|
value.DETAIL_QUALITY.2=§aMedium
|
||||||
|
value.DETAIL_QUALITY.3=§bHigh
|
||||||
|
|
||||||
|
option.CLOUD_QUALITY=Cloud Quality
|
||||||
|
option.CLOUD_QUALITY.comment=Adjusts the lighting, detail, and sample quality of Reimagined/Unbound cloud styles. §e[*]§r This setting only works with the "Reimagined" or "Unbound" Cloud Styles.
|
||||||
|
value.CLOUD_QUALITY.0=§cOFF
|
||||||
|
value.CLOUD_QUALITY.1=§eLow
|
||||||
|
value.CLOUD_QUALITY.2=§aMedium
|
||||||
|
value.CLOUD_QUALITY.3=§bHigh
|
||||||
|
|
||||||
|
option.SSAO_QUALI_DEFINE=Edge Shadow (SSAO) Quality
|
||||||
|
option.SSAO_QUALI_DEFINE.comment=Adjusts the quality of Screen-Space Ambient Occlusion (SSAO) which adds extra ambient shadowing to the edges of the scene. Every tier further reduces the ssao noise artifacts.
|
||||||
|
value.SSAO_QUALI_DEFINE.0=§cOFF
|
||||||
|
value.SSAO_QUALI_DEFINE.2=§aMedium
|
||||||
|
value.SSAO_QUALI_DEFINE.3=§bHigh
|
||||||
|
value.SSAO_QUALI_DEFINE.5=§dUltra
|
||||||
|
|
||||||
|
option.SSAO_I=Edge Shadow Intensity (SSAO)
|
||||||
|
option.SSAO_I.comment=Determines the strength of Screen-Space Ambient Occlusion (SSAO) which adds extra ambient shadowing to the edges of the scene. §e[*]§r This setting won't work if SSAO is disabled in "Performance Settings".
|
||||||
|
value.SSAO_I.0=§cOFF
|
||||||
|
|
||||||
|
option.VANILLAAO_I=Edge Shadow Intensity (Vanilla)
|
||||||
|
option.VANILLAAO_I.comment=Determines the strength of Minecraft's ambient occlusion which adds extra ambient shadowing to the edges of the scene.
|
||||||
|
value.VANILLAAO_I.0=§cOFF
|
||||||
|
|
||||||
|
option.BORDER_FOG=Border Fog
|
||||||
|
option.BORDER_FOG.comment=Intense fog on the edges of the loaded world to hide chunk borders. §e[*]§r It's recommended to disable Border Fog when playing with less than 8 chunks of render distance.
|
||||||
|
|
||||||
|
option.ATM_FOG_MULT=Atmospheric Fog
|
||||||
|
option.ATM_FOG_MULT.comment=Adjusts the intensity of altitude-based fog.
|
||||||
|
value.ATM_FOG_MULT.0.50=Very Subtle
|
||||||
|
value.ATM_FOG_MULT.0.65=Subtle
|
||||||
|
value.ATM_FOG_MULT.0.80=Normal
|
||||||
|
value.ATM_FOG_MULT.0.95=Intense
|
||||||
|
|
||||||
|
option.ATM_FOG_DISTANCE=Atmospheric Fog Distance
|
||||||
|
option.ATM_FOG_DISTANCE.comment=Adjusts the distance from the camera that the atmospheric fog starts to appear. §e[*]§r Note that the fog distance also gets automatically adjusted by the Render Distance setting in Video Settings.
|
||||||
|
|
||||||
|
option.ATM_FOG_ALTITUDE=Atmospheric Fog Altitude
|
||||||
|
option.ATM_FOG_ALTITUDE.comment=Determines the altitude that the atmospheric fog appears the most prominently.
|
||||||
|
|
||||||
|
option.CAVE_FOG=Cave Fog
|
||||||
|
option.CAVE_FOG.comment=Enables extra fog in deep underground areas.
|
||||||
|
|
||||||
|
option.LIGHTSHAFT_BEHAVIOUR=Light Shaft Mode
|
||||||
|
option.LIGHTSHAFT_BEHAVIOUR.comment=Determines the behaviour of light shafts. §a[+]§r Scene Aware Light Shafts automatically transition between regular and extreme modes to provide the best results. §c[-]§r Extreme mode is not recommended for general gameplay, and it can severely impact performance.
|
||||||
|
value.LIGHTSHAFT_BEHAVIOUR.0=§cOFF
|
||||||
|
value.LIGHTSHAFT_BEHAVIOUR.1=Scene Aware §a[+]
|
||||||
|
value.LIGHTSHAFT_BEHAVIOUR.2=Regular
|
||||||
|
value.LIGHTSHAFT_BEHAVIOUR.3=Extreme §c[-]
|
||||||
|
|
||||||
|
option.LIGHTSHAFT_DAY_I=Light Shaft Day Multiplier
|
||||||
|
option.LIGHTSHAFT_NIGHT_I=Light Shaft Night Multiplier
|
||||||
|
option.LIGHTSHAFT_RAIN_I=Light Shaft Rain Multiplier
|
||||||
|
|
||||||
|
option.CLOUD_STYLE_DEFINE=Cloud Style
|
||||||
|
option.CLOUD_STYLE_DEFINE.comment=Determines the style of clouds. §e[*]§r "Default Style" means that the setting will be automatically determined by the "Visual Style" setting in the main menu of Shader Options. §e[*]§r The "Vanilla" style requires clouds to be enabled in Video Settings.
|
||||||
|
value.CLOUD_STYLE_DEFINE.-1=Default Style
|
||||||
|
value.CLOUD_STYLE_DEFINE.0=§cOFF
|
||||||
|
value.CLOUD_STYLE_DEFINE.1=Reimagined
|
||||||
|
value.CLOUD_STYLE_DEFINE.3=Unbound
|
||||||
|
value.CLOUD_STYLE_DEFINE.50=Vanilla §e[*]
|
||||||
|
|
||||||
|
option.CLOUD_SHADOWS=Cloud Shadows
|
||||||
|
option.CLOUD_SHADOWS.comment=Enables shadows that are cast from the clouds. §e[*]§r This setting only works with the "Reimagined" or "Unbound" Cloud Styles. §e[*]§r Cloud shadows will be randomly generated if Cloud Style is set to "Unbound", because of the extra complexity of Unbound clouds.
|
||||||
|
|
||||||
|
option.CLOUD_CLOSED_AREA_CHECK=Prevent Clouds in Interiors
|
||||||
|
option.CLOUD_CLOSED_AREA_CHECK.comment=Does additional checks to remove clouds in closed areas. §e[*]§r This setting only works with the "Reimagined" or "Unbound" Cloud Styles. §e[*]§r This setting will be treated as disabled if "Real-Time Shadows" are also disabled.
|
||||||
|
|
||||||
|
option.CLOUD_ALT1=Cloud Altitude
|
||||||
|
option.CLOUD_ALT1.comment=Determines the world height which the clouds will appear at. §e[*]§r This setting only works with the "Reimagined" or "Unbound" Cloud Styles.
|
||||||
|
|
||||||
|
option.CLOUD_SPEED_MULT=Cloud Speed
|
||||||
|
option.CLOUD_SPEED_MULT.comment=Determines how fast the clouds are going to move. "Synced to World Time" setting uses Minecraft world time to advance the cloud positions; this allows for clouds to appear the same between players in the same server. §e[*]§r This setting only works with the "Reimagined" or "Unbound" Cloud Styles.
|
||||||
|
value.CLOUD_SPEED_MULT.100=Synced to World Time
|
||||||
|
|
||||||
|
option.CLOUD_UNBOUND_AMOUNT=Cloud Amount
|
||||||
|
option.CLOUD_UNBOUND_AMOUNT.comment=Adjusts the amount of Unbound clouds.
|
||||||
|
|
||||||
|
option.CLOUD_UNBOUND_SIZE_MULT=Cloud Size
|
||||||
|
option.CLOUD_UNBOUND_SIZE_MULT.comment=Adjusts the size of Unbound clouds. Higher values produce smaller clouds.
|
||||||
|
|
||||||
|
option.DOUBLE_REIM_CLOUDS=Double Reimagined Clouds
|
||||||
|
option.DOUBLE_REIM_CLOUDS.comment=Enables a secondary Reimagined cloud layer. §e[*]§r This setting only works with the "Reimagined" Cloud Style.
|
||||||
|
|
||||||
|
option.CLOUD_ALT2=Cloud Layer 2 Altitude
|
||||||
|
option.CLOUD_ALT2.comment=Determines the world height which the second layer clouds will appear at. §e[*]§r This setting only works when the "Double Reimagined Clouds" option is enabled with the "Reimagined" Cloud Style.
|
||||||
|
|
||||||
|
option.NETHER_STORM=Nether Storm
|
||||||
|
option.NETHER_STORM.comment=Adds a smoke-like volumetric effect to the Nether dimension. §c[-]§r This effect can impact performance.
|
||||||
|
|
||||||
|
option.NETHER_STORM_I=Nether Storm Opacity
|
||||||
|
option.NETHER_STORM_I.comment=Adjusts the opacity of the Nether Storm.
|
||||||
|
|
||||||
|
option.NETHER_STORM_LOWER_ALT=Nether Storm Lower Altitude
|
||||||
|
option.NETHER_STORM_LOWER_ALT.comment=Determines the lower starting point of the Nether Storm. The Nether Storm won't appear below this altitude, and it will look the most bright right above this altitude.
|
||||||
|
|
||||||
|
option.NETHER_STORM_HEIGHT=Nether Storm Height
|
||||||
|
option.NETHER_STORM_HEIGHT.comment=Determines how tall the Nether Storm will form. Decrasing this value will result in the Nether Storm gathering near the "Nether Storm Lower Altitude".
|
||||||
|
|
||||||
|
option.NETHER_COLOR_MODE=Color Mode
|
||||||
|
option.NETHER_COLOR_MODE.comment=Determines how the ambience colors will be handled in the Nether. Constant: Colors won't change between biomes. Biome Based: Colors will change depending on the biome. Biome Based (Modified): Biome based, but the colors have been rebalanced to better suit the default visual direction of Complementary.
|
||||||
|
value.NETHER_COLOR_MODE.3=Biome Based (Modified)
|
||||||
|
value.NETHER_COLOR_MODE.2=Biome Based
|
||||||
|
value.NETHER_COLOR_MODE.0=Constant
|
||||||
|
|
||||||
|
option.T_EXPOSURE=General Brightness
|
||||||
|
option.T_EXPOSURE.comment=Also known as "Tonemap Exposure". Adjusts the overall brightness of the whole image.
|
||||||
|
|
||||||
|
option.TM_WHITE_CURVE=White Brightness
|
||||||
|
option.TM_WHITE_CURVE.comment=Also known as "Tonemap White Curve". Adjusts how easily the colors reach to full white.
|
||||||
|
|
||||||
|
option.T_UPPER_CURVE=Contrast of Brighter Colors
|
||||||
|
option.T_UPPER_CURVE.comment=Also known as "Tonemap Upper Curve". Adjusts contrast of brighter colors.
|
||||||
|
|
||||||
|
option.T_LOWER_CURVE=Contrast of Darker Colors
|
||||||
|
option.T_LOWER_CURVE.comment=Also known as "Tonemap Lower Curve". Adjusts contrast of darker colors.
|
||||||
|
|
||||||
|
option.T_SATURATION=Saturation
|
||||||
|
option.T_SATURATION.comment=Adjusts overall colorfulness of the image.
|
||||||
|
|
||||||
|
option.T_VIBRANCE=Saturation of Paler Colors
|
||||||
|
option.T_VIBRANCE.comment=Also known as "Vibrance". Adjusts the colorfulness of the image, but already colorful pixels are less affected.
|
||||||
|
|
||||||
|
option.COLORGRADING=§eColor Grading
|
||||||
|
option.COLORGRADING.comment=Enables settings to freely mix up the final color channels.
|
||||||
|
option.GR_RR=Red to Red
|
||||||
|
option.GR_RG=Red to Green
|
||||||
|
option.GR_RB=Red to Blue
|
||||||
|
option.GR_RC=Red Curve
|
||||||
|
option.GR_GR=Green to Red
|
||||||
|
option.GR_GG=Green to Green
|
||||||
|
option.GR_GB=Green to Blue
|
||||||
|
option.GR_GC=Green Curve
|
||||||
|
option.GR_BR=Blue to Red
|
||||||
|
option.GR_BG=Blue to Green
|
||||||
|
option.GR_BB=Blue to Blue
|
||||||
|
option.GR_BC=Blue Curve
|
||||||
|
|
||||||
|
option.WATER_STYLE_DEFINE=Water Style
|
||||||
|
option.WATER_STYLE_DEFINE.comment=Determines the style of water. §e[*]§r "Default Style" means that the setting will be automatically determined by the "Visual Style" setting in the main menu of Shader Options.
|
||||||
|
value.WATER_STYLE_DEFINE.-1=Default Style
|
||||||
|
value.WATER_STYLE_DEFINE.1=Reimagined
|
||||||
|
value.WATER_STYLE_DEFINE.2=Reimagined + Waves
|
||||||
|
value.WATER_STYLE_DEFINE.3=Unbound
|
||||||
|
|
||||||
|
option.WATER_CAUSTIC_STYLE_DEFINE=Water Caustic Style
|
||||||
|
option.WATER_CAUSTIC_STYLE_DEFINE.comment=Determines the style of water shadows, also known as water caustics.
|
||||||
|
value.WATER_CAUSTIC_STYLE_DEFINE.-1=Same as Water
|
||||||
|
value.WATER_CAUSTIC_STYLE_DEFINE.1=Reimagined
|
||||||
|
value.WATER_CAUSTIC_STYLE_DEFINE.3=Unbound
|
||||||
|
|
||||||
|
option.WATER_REFRACTION_INTENSITY=Water Refraction Intensity §e[*]§r
|
||||||
|
option.WATER_REFRACTION_INTENSITY.comment=Adjusts the intensity of water refraction and underwater distortion. §e[*]§r This setting only fully works when the Water Quality is set to "High" or above, or else it will only affect the subtle underwater distortion.
|
||||||
|
|
||||||
|
option.WATER_FOAM_I=Water Foam Intensity
|
||||||
|
option.WATER_FOAM_I.comment=Determines the opacity of foam seen on water edges. §e[*]§r This setting only works when the Water Material Quality is set to Medium or above.
|
||||||
|
|
||||||
|
option.WATER_ALPHA_MULT=Water Opacity Factor
|
||||||
|
option.WATER_ALPHA_MULT.comment=Adjusts how opaque the water looks. §c[-]§r Extreme values will break the balance of water lighting.
|
||||||
|
|
||||||
|
option.WATER_FOG_MULT=Water Fog Factor
|
||||||
|
option.WATER_FOG_MULT.comment=Adjusts how close the water fog looks. Higher values provide closer fog. §c[-]§r Extreme values will break the balance of water lighting.
|
||||||
|
|
||||||
|
option.WATERCOLOR_R=Water Surface Red Multiplier
|
||||||
|
option.WATERCOLOR_G=Water Surface Green Multiplier
|
||||||
|
option.WATERCOLOR_B=Water Surface Blue Multiplier
|
||||||
|
|
||||||
|
option.WATERCOLOR_MODE=Color Mode
|
||||||
|
option.WATERCOLOR_MODE.comment=Determines how the water color will be handled. Constant: Water colors won't change between biomes. Biome Based: Color will change depending on the biome. Biome Based (Clamped): Biome based, but prevents the surface color from getting weird in certain biomes. §e[*]§r This setting won't work correctly on Minecraft versions below 1.13.
|
||||||
|
value.WATERCOLOR_MODE.3=Biome Based (Clamped)
|
||||||
|
value.WATERCOLOR_MODE.2=Biome Based
|
||||||
|
value.WATERCOLOR_MODE.0=Constant
|
||||||
|
|
||||||
|
option.BRIGHT_CAVE_WATER=Brighter Shallow/Cave Water
|
||||||
|
option.BRIGHT_CAVE_WATER.comment=Makes shallow water or water in closed areas brighter to improve visibility in caves, and add some color detail to the shallow parts of oceans. §e[*]§r This effect won't work if Water Opacity Factor is set higher than 199 for technical reasons.
|
||||||
|
|
||||||
|
option.UNDERWATERCOLOR_R=Underwater Red Multiplier
|
||||||
|
option.UNDERWATERCOLOR_G=Underwater Green Multiplier
|
||||||
|
option.UNDERWATERCOLOR_B=Underwater Blue Multiplier
|
||||||
|
|
||||||
|
option.WATER_BUMPINESS=Wave Strength
|
||||||
|
option.WATER_BUMPINESS.comment=Adjusts the intensity of surface-direction waves (normals) seen on water.
|
||||||
|
|
||||||
|
option.WATER_BUMP_SMALL=Wave Strength - Small Waves
|
||||||
|
option.WATER_BUMP_SMALL.comment=Adjusts the intensity of waves that are smaller than others.
|
||||||
|
|
||||||
|
option.WATER_BUMP_MED=Wave Strength - Medium Waves
|
||||||
|
option.WATER_BUMP_MED.comment=Adjusts the intensity of waves that are average-sized compared to others.
|
||||||
|
|
||||||
|
option.WATER_BUMP_BIG=Wave Strength - Large Waves
|
||||||
|
option.WATER_BUMP_BIG.comment=Adjusts the intensity of waves that are larger than others.
|
||||||
|
|
||||||
|
option.WATER_SPEED_MULT=Wave Speed
|
||||||
|
option.WATER_SPEED_MULT.comment=Adjusts the movement speed of surface-direction waves (normals) seen on water.
|
||||||
|
|
||||||
|
option.WATER_SIZE_MULT=Wave Size
|
||||||
|
option.WATER_SIZE_MULT.comment=Adjusts how big the surface-direction waves (normals) look on water.
|
||||||
|
|
||||||
|
option.SUN_ANGLE=Sun/Moon Angle
|
||||||
|
option.SUN_ANGLE.comment=Adjusts the angle of sun/moon relative to the world during noon. §a[+]§r Reimagined's lighting model is specially designed to make the "0" sun angle work just as well as others.
|
||||||
|
value.SUN_ANGLE.-1=Default Style
|
||||||
|
value.SUN_ANGLE.0=0 §r(§bReimagined§r)
|
||||||
|
value.SUN_ANGLE.-40=-40 §r(§dUnbound§r)
|
||||||
|
|
||||||
|
option.SUN_MOON_STYLE_DEFINE=Sun/Moon Style
|
||||||
|
option.SUN_MOON_STYLE_DEFINE.comment=Determines the style of sun/moon. §e[*]§r This setting might interact incorrectly with some resource packs due to the limitations of sun/moon/skybox differentiation.
|
||||||
|
value.SUN_MOON_STYLE_DEFINE.-1=Default Style
|
||||||
|
value.SUN_MOON_STYLE_DEFINE.1=Reimagined
|
||||||
|
value.SUN_MOON_STYLE_DEFINE.2=Unbound
|
||||||
|
value.SUN_MOON_STYLE_DEFINE.3=Unbound - Smaller
|
||||||
|
|
||||||
|
option.SUN_MOON_HORIZON=Sun/Moon Horizon
|
||||||
|
option.SUN_MOON_HORIZON.comment=Prevents the sun/moon from appearing below the horizon line.
|
||||||
|
|
||||||
|
option.NIGHT_STAR_AMOUNT=Night Star Amount
|
||||||
|
option.NIGHT_STAR_AMOUNT.comment=Determines the amount of stars in the night sky.
|
||||||
|
value.NIGHT_STAR_AMOUNT.2=Medium
|
||||||
|
value.NIGHT_STAR_AMOUNT.3=High
|
||||||
|
|
||||||
|
option.AURORA_STYLE_DEFINE=Aurora Borealis Style
|
||||||
|
option.AURORA_STYLE_DEFINE.comment=Determines the style of northern lights that appear in the night sky.
|
||||||
|
value.AURORA_STYLE_DEFINE.-1=Default Style
|
||||||
|
value.AURORA_STYLE_DEFINE.0=§cOFF
|
||||||
|
value.AURORA_STYLE_DEFINE.1=Reimagined
|
||||||
|
value.AURORA_STYLE_DEFINE.2=Unbound
|
||||||
|
|
||||||
|
option.AURORA_CONDITION=Aurora
|
||||||
|
option.AURORA_CONDITION.comment=Determines the condition(s) for the Aurora Borealis to appear. §e[*]§r Aurora Borealis will only appear during night regardless of this setting
|
||||||
|
value.AURORA_CONDITION.0=Every Night
|
||||||
|
value.AURORA_CONDITION.1=Full Moon
|
||||||
|
value.AURORA_CONDITION.2=Snowy Biome
|
||||||
|
value.AURORA_CONDITION.3=Full Moon in Snowy Biome
|
||||||
|
value.AURORA_CONDITION.4=Full Moon or Snowy Biome
|
||||||
|
|
||||||
|
option.NIGHT_NEBULA=Night Nebulae
|
||||||
|
option.NIGHT_NEBULA.comment=Adds galaxy-style nebulae to the night sky. The nebulae are procedurally generated, and they will look different every night. §c[-]§r This effect can impact performance. §e[*]§r "Nebulae" isn't a typo, it's the plural of Nebula =D
|
||||||
|
|
||||||
|
option.NIGHT_NEBULA_I=Night Nebula Brightness
|
||||||
|
option.NIGHT_NEBULA_I.comment=Adjusts the brightness of Night Nebulae.
|
||||||
|
|
||||||
|
option.WEATHER_TEX_OPACITY=Weather Texture Opacity
|
||||||
|
option.WEATHER_TEX_OPACITY.comment=Adjusts the opacity of the rainfall/snowfall weather textures.
|
||||||
|
|
||||||
|
option.PIXEL_SHADOW=Pixelated Shadows
|
||||||
|
option.PIXEL_SHADOW.comment=Modifies the world coordinates on a grid to make shadows pixelated. §e[*]§r This setting does not affect performance.
|
||||||
|
value.PIXEL_SHADOW.0=OFF
|
||||||
|
value.PIXEL_SHADOW.8=8x8 §e[*]
|
||||||
|
value.PIXEL_SHADOW.16=16x16 §e[*]
|
||||||
|
value.PIXEL_SHADOW.32=32x32 §e[*]
|
||||||
|
value.PIXEL_SHADOW.64=64x64 §e[*]
|
||||||
|
value.PIXEL_SHADOW.128=128x128 §e[*]
|
||||||
|
|
||||||
|
option.BLOOM=Bloom
|
||||||
|
option.BLOOM.comment=Enables blurry glow from bright objects and humidity.
|
||||||
|
|
||||||
|
option.BLOOM_STRENGTH=Bloom Strength
|
||||||
|
option.BLOOM_STRENGTH.comment=Determines the intensity of glow on bright things, and the bloom from rain/cave humidity. §c[-]§r Too much bloom will cause the image to get blurrier and brighter than intended, especially in humid conditions.
|
||||||
|
value.BLOOM_STRENGTH.0.027=15%
|
||||||
|
value.BLOOM_STRENGTH.0.036=20%
|
||||||
|
value.BLOOM_STRENGTH.0.045=25%
|
||||||
|
value.BLOOM_STRENGTH.0.054=30%
|
||||||
|
value.BLOOM_STRENGTH.0.063=35%
|
||||||
|
value.BLOOM_STRENGTH.0.072=40%
|
||||||
|
value.BLOOM_STRENGTH.0.081=45%
|
||||||
|
value.BLOOM_STRENGTH.0.09=50%
|
||||||
|
value.BLOOM_STRENGTH.0.10=55%
|
||||||
|
value.BLOOM_STRENGTH.0.11=60%
|
||||||
|
value.BLOOM_STRENGTH.0.12=65%
|
||||||
|
value.BLOOM_STRENGTH.0.13=70%
|
||||||
|
value.BLOOM_STRENGTH.0.14=75%
|
||||||
|
value.BLOOM_STRENGTH.0.15=80% §c[-]
|
||||||
|
value.BLOOM_STRENGTH.0.16=85% §c[-]
|
||||||
|
value.BLOOM_STRENGTH.0.17=90% §c[-]
|
||||||
|
value.BLOOM_STRENGTH.0.18=95% §c[-]
|
||||||
|
value.BLOOM_STRENGTH.0.19=100% §c[-]
|
||||||
|
value.BLOOM_STRENGTH.0.21=110% §c[-]
|
||||||
|
value.BLOOM_STRENGTH.0.23=120% §c[-]
|
||||||
|
value.BLOOM_STRENGTH.0.25=130% §c[-]
|
||||||
|
value.BLOOM_STRENGTH.0.28=150% §c[-]
|
||||||
|
value.BLOOM_STRENGTH.0.32=180% §c[-]
|
||||||
|
value.BLOOM_STRENGTH.10.00=§cInsane
|
||||||
|
|
||||||
|
option.FXAA=Anti-Aliasing (FXAA)
|
||||||
|
option.FXAA.comment=Enables Fast Approximate Anti-Aliasing (FXAA), which is basically an effect that produces smoother image.
|
||||||
|
value.FXAA.true=§aON
|
||||||
|
value.FXAA.false=§eOFF
|
||||||
|
|
||||||
|
option.IMAGE_SHARPENING=Image Sharpening
|
||||||
|
option.IMAGE_SHARPENING.comment=Makes the image sharper using a filter. §c[-]§r Too much sharpening might cause visual artifacts like aliasing, flickering, noise, and subtle brightness changes.
|
||||||
|
value.IMAGE_SHARPENING.6=6 §c[-]
|
||||||
|
value.IMAGE_SHARPENING.7=7 §c[-]
|
||||||
|
value.IMAGE_SHARPENING.8=8 §c[-]
|
||||||
|
value.IMAGE_SHARPENING.9=9 §c[-]
|
||||||
|
value.IMAGE_SHARPENING.10=10 §c[-]
|
||||||
|
|
||||||
|
option.LENSFLARE=Lens Flare
|
||||||
|
option.LENSFLARE.comment=Adds camera lens reflection effect when towards the sun or moon. §c[-]§r This effect can severely impact performance.
|
||||||
|
|
||||||
|
option.LENSFLARE_I=Lens Flare Intensity
|
||||||
|
option.LENSFLARE_I.comment=Adjusts the strength of the Lens Flare effect.
|
||||||
|
|
||||||
|
option.MOTION_BLURRING=Motion Blur
|
||||||
|
option.MOTION_BLURRING.comment=Applies blur to the image when moving the camera.
|
||||||
|
|
||||||
|
option.MOTION_BLURRING_STRENGTH=Motion Blur Strength
|
||||||
|
option.MOTION_BLURRING_STRENGTH.comment=Adjusts the intensity of motion blur.
|
||||||
|
|
||||||
|
option.WORLD_BLUR=§eWorld Blur
|
||||||
|
option.WORLD_BLUR.comment=Enables world blurring. Distance Blur: Blur gets applied like fog, depending on the distance from the camera. Depth of Field: Blurring happens depending on the focus point of the camera. §c[-]§r This effect can severely impact performance.
|
||||||
|
value.WORLD_BLUR.0=OFF
|
||||||
|
value.WORLD_BLUR.1=Distance Blur
|
||||||
|
value.WORLD_BLUR.2=Depth of Field
|
||||||
|
|
||||||
|
option.WB_FOV_SCALED=FOV Scaled Blur
|
||||||
|
option.WB_FOV_SCALED.comment=Scales World Blur to the camera Field of View. World Blur will get more intense if you zoom in with this enabled.
|
||||||
|
|
||||||
|
option.WB_CHROMATIC=Chromatic Blur
|
||||||
|
option.WB_CHROMATIC.comment=Applies chromatic aberration to the blurry areas, separating different colors in blurred areas.
|
||||||
|
|
||||||
|
option.WB_ANAMORPHIC=Anamorphic Blur
|
||||||
|
option.WB_ANAMORPHIC.comment=Stretches the blur in one direction. §c[-]§r This option can reduce the quality of the World Blur
|
||||||
|
|
||||||
|
option.WB_DOF_I=Depth of Field Strength
|
||||||
|
option.WB_DOF_FOCUS=Depth of Field Focus
|
||||||
|
option.WB_DOF_FOCUS.comment=Determines the focus distance of the camera. Automatic: The focus point will be adjusted according to the center point of the screen. Brightness: The focus point will be determined by the "Brightness" slider in Video Settings.
|
||||||
|
value.WB_DOF_FOCUS.-1=Brightness §e[*]
|
||||||
|
value.WB_DOF_FOCUS.0=Automatic
|
||||||
|
|
||||||
|
option.WB_DB_DAY_I=Dis. Blur - Day
|
||||||
|
option.WB_DB_NIGHT_I=Dis. Blur - Night & Interiors
|
||||||
|
option.WB_DB_RAIN_I=Dis. Blur - Rain & Snow
|
||||||
|
option.WB_DB_WATER_I=Dis. Blur - Underwater
|
||||||
|
option.WB_DB_NETHER_I=Dis. Blur - The Nether
|
||||||
|
option.WB_DB_END_I=Dis. Blur - The End
|
||||||
|
|
||||||
|
option.VIGNETTE_R=Vignette
|
||||||
|
option.VIGNETTE_R.comment=Applies darkening around the edges of the screen.
|
||||||
|
|
||||||
|
option.CHROMA_ABERRATION=Chromatic Aberration
|
||||||
|
option.CHROMA_ABERRATION.comment=Separates different colors towards the edges of the screen. §c[-] Chromatic Aberration can cause the image to feel blurry; high values aren't recommended for gameplay.
|
||||||
|
value.CHROMA_ABERRATION.4=4 §c[-]
|
||||||
|
value.CHROMA_ABERRATION.5=5 §c[-]
|
||||||
|
value.CHROMA_ABERRATION.6=6 §c[-]
|
||||||
|
value.CHROMA_ABERRATION.7=7 §c[-]
|
||||||
|
value.CHROMA_ABERRATION.8=8 §c[-]
|
||||||
|
|
||||||
|
option.FANCY_GLASS=Improved Glass
|
||||||
|
option.FANCY_GLASS.comment=Improves the regular glass by adding a translucent layer to it. §c[-]§r Does not work on Iris because of a Sodium bug. §e[*]§r RP Support option must be set to Integrated PBR+.
|
||||||
|
|
||||||
|
option.GREEN_SCREEN_LIME=Green Screen Lime Blocks
|
||||||
|
option.GREEN_SCREEN_LIME.comment=Turns "Lime Concrete", "Lime Wool", and "Lime Carpet" into green screens for video editing. Tip 1: Turn off "Bloom" option to improve separation. Tip 2: Put lights under lime carpets for lighting. Tip 3: You can turn off Anti-Aliasing (FXAA) and set Detail Quality to Potato in Performance Settings to disable all filtering and get pixel-perfect separation.
|
||||||
|
|
||||||
|
option.HAND_SWAYING=Hand Sway
|
||||||
|
option.HAND_SWAYING.comment=Adds slow movement to the player hand to simulate a breathing animation.
|
||||||
|
value.HAND_SWAYING.0=OFF
|
||||||
|
value.HAND_SWAYING.1=Subtle
|
||||||
|
value.HAND_SWAYING.2=Normal
|
||||||
|
value.HAND_SWAYING.3=Intense
|
||||||
|
|
||||||
|
option.LESS_LAVA_FOG=Better Visibility Inside Lava
|
||||||
|
option.LESS_LAVA_FOG.comment=Reduces the lava fog to improve visibility inside lava.
|
||||||
|
|
||||||
|
option.REDUCE_CLOSE_PARTICLES=Reduce Close-up Particles
|
||||||
|
option.REDUCE_CLOSE_PARTICLES.comment=Reduces the opacity of particles that are close to the camera to improve visibility.
|
||||||
|
|
||||||
|
option.SNOWY_WORLD=Snowy World
|
||||||
|
option.SNOWY_WORLD.comment=Makes the entire world covered with snow.
|
||||||
|
|
||||||
|
option.SHOW_LIGHT_LEVEL=Show Light Levels
|
||||||
|
option.SHOW_LIGHT_LEVEL.comment=In Overworld: Yellow means mobs can spawn during night time, red means mobs can spawn anytime. In Nether or End: Yellow means some mobs can spawn, red means all mobs can spawn. §e[*]§r Disable Smooth Lighting for precise results.
|
||||||
|
value.SHOW_LIGHT_LEVEL.0=OFF
|
||||||
|
value.SHOW_LIGHT_LEVEL.1=Hold Spider Eye
|
||||||
|
value.SHOW_LIGHT_LEVEL.2=Hold Light Source
|
||||||
|
value.SHOW_LIGHT_LEVEL.3=Always ON
|
||||||
|
|
||||||
|
option.COLOR_CODED_PROGRAMS=Color Coded Programs §c[-]§r
|
||||||
|
option.COLOR_CODED_PROGRAMS.comment=Shows which shader programs are being used to render geometry. §c[-]§r This option is only for development purposes and shouldn't be used for gameplay. §e[*]§r Color values can be found in the shader pack files: shaders/lib/misc/colorCodedPrograms.glsl
|
||||||
|
|
||||||
|
option.MINIMUM_LIGHT_MODE=Cave Lighting
|
||||||
|
option.MINIMUM_LIGHT_MODE.comment=Adds extra lighting to areas that don't have skylight. §a[+]§r "Default" option determines the lighting according to the "Brightness" slider in Video Settings.
|
||||||
|
value.MINIMUM_LIGHT_MODE.0=Very Dark
|
||||||
|
value.MINIMUM_LIGHT_MODE.1=Dark
|
||||||
|
value.MINIMUM_LIGHT_MODE.2=Default §a[+]
|
||||||
|
value.MINIMUM_LIGHT_MODE.3=Bright
|
||||||
|
value.MINIMUM_LIGHT_MODE.4=Very Bright
|
||||||
|
|
||||||
|
option.AMBIENT_MULT=Shadow Light Multiplier
|
||||||
|
option.AMBIENT_MULT.comment=Determines the amount of ambient lighting seen in shadows. §c[-]§r Drastically changing this setting can break the lighting balance.
|
||||||
|
|
||||||
|
option.GENERATED_NORMALS=Generated Normals
|
||||||
|
option.GENERATED_NORMALS.comment=Adds auto-generated bumpy details to surfaces. §e[*]§r RP Support option must be set to Integrated PBR+.
|
||||||
|
|
||||||
|
option.COATED_TEXTURES=Coated Textures
|
||||||
|
option.COATED_TEXTURES.comment=Adds auto-generated dusty details to textures. §e[*]§r RP Support option must be set to Integrated PBR+.
|
||||||
|
|
||||||
|
option.ENTITY_GN_AND_CT=Allow GN and CT on Entities
|
||||||
|
option.ENTITY_GN_AND_CT.comment=Decides if Generated Normals and Coated Textures can appear on entities. §e[*]§r This won't enable GN or CT on entities if the main GN or CT options are disabled.
|
||||||
|
|
||||||
|
option.GENERATED_NORMAL_MULT=Generated Normal Strength
|
||||||
|
option.GENERATED_NORMAL_MULT.comment=Adjusts the strength of auto-generated bumpy details on surfaces.
|
||||||
|
|
||||||
|
option.COATED_TEXTURE_MULT=Coated Texture Strength
|
||||||
|
option.COATED_TEXTURE_MULT.comment=Adjusts the strength of auto-generated dusty details on textures.
|
||||||
|
|
||||||
|
option.GLOWING_ORE_MASTER=§eEnable Glowing Ores
|
||||||
|
option.GLOWING_ORE_MASTER.comment=Enables the functionality of glowing ores. §e[*]§r Choosing "Default" will only enable glowing ores if the "Visual Style" is set to "Unbound". §e[*]§r The settings below won't work if this option isn't enabled.
|
||||||
|
value.GLOWING_ORE_MASTER.0=§cOFF
|
||||||
|
value.GLOWING_ORE_MASTER.1=Default [*]
|
||||||
|
value.GLOWING_ORE_MASTER.2=§aON
|
||||||
|
|
||||||
|
option.GLOWING_ORE_MULT=Ore Glow Strength
|
||||||
|
option.GLOWING_ORE_MULT.comment=Determines the emission strength of glowing ores.
|
||||||
|
|
||||||
|
option.GLOWING_ORE_IRON=Glowing Iron Ore
|
||||||
|
option.GLOWING_ORE_GOLD=Glowing Gold Ore
|
||||||
|
option.GLOWING_ORE_COPPER=Glowing Copper Ore
|
||||||
|
option.GLOWING_ORE_REDSTONE=Glowing Redstone Ore §e[*]§r
|
||||||
|
option.GLOWING_ORE_REDSTONE.comment=§e[*]§r All redstone ores will still glow if they are "activated" regardless of this setting.
|
||||||
|
option.GLOWING_ORE_LAPIS=Glowing Lapis Lazuli Ore
|
||||||
|
option.GLOWING_ORE_EMERALD=Glowing Emerald Ore
|
||||||
|
option.GLOWING_ORE_DIAMOND=Glowing Diamond Ore
|
||||||
|
option.GLOWING_ORE_NETHERQUARTZ=Glowing Nether Quartz Ore
|
||||||
|
option.GLOWING_ORE_NETHERGOLD=Glowing Nether Gold Ore
|
||||||
|
option.GLOWING_ORE_GILDEDBLACKSTONE=Glowing Gilded Blackstone
|
||||||
|
option.GLOWING_ORE_ANCIENTDEBRIS=Glowing Ancient Debris
|
||||||
|
option.GLOWING_ORE_MODDED=Glowing Modded Ores §e[*]§r
|
||||||
|
option.GLOWING_ORE_MODDED.comment=§e[*]§r You can add modded ore IDs to "Complementary-->shaders-->block.properties" file in order to make them glow. You can open block.properties using any text editor like notepad, and then add modded ore block IDs next to "block.10024=".
|
||||||
|
|
||||||
|
option.GLOWING_AMETHYST=Glowing Amethyst
|
||||||
|
value.GLOWING_AMETHYST.0=§cOFF
|
||||||
|
value.GLOWING_AMETHYST.1=Crystal
|
||||||
|
value.GLOWING_AMETHYST.2=Crystal & Block
|
||||||
|
|
||||||
|
option.GLOWING_LICHEN=Glowing Glow Lichen
|
||||||
|
value.GLOWING_LICHEN.0=§cOFF
|
||||||
|
value.GLOWING_LICHEN.1=In Closed Areas
|
||||||
|
value.GLOWING_LICHEN.2=Always
|
||||||
|
|
||||||
|
option.EMISSIVE_REDSTONE_BLOCK=Glowing Redstone Block
|
||||||
|
|
||||||
|
option.EMISSIVE_LAPIS_BLOCK=Glowing Lapis Lazuli Block
|
||||||
|
|
||||||
|
option.GLOWING_ARMOR_TRIM=Glowing Armor Trim §e[*]§r
|
||||||
|
option.GLOWING_ARMOR_TRIM.comment=Makes armor trims emissive. §e[*]§r This feature only works on Iris, as Optifine doesn't support armor trim detection.
|
||||||
|
|
||||||
|
option.NORMAL_MAP_STRENGTH=Normal Map Strength
|
||||||
|
option.NORMAL_MAP_STRENGTH.comment=Adjusts the strength of bumpy details on surfaces. §e[*]§r RP Support option must be set to labPBR/seuspbr, and a compatible resource pack must be used.
|
||||||
|
|
||||||
|
option.CUSTOM_EMISSION_INTENSITY=Custom Emission Intensity
|
||||||
|
option.CUSTOM_EMISSION_INTENSITY.comment=Adjusts the intensity of glowing surfaces. §e[*]§r RP Support option must be set to labPBR/seuspbr, and a compatible resource pack must be used.
|
||||||
|
|
||||||
|
option.POM=Parallax Occlusion Mapping
|
||||||
|
option.POM.comment=Enables 3D effect on surfaces. §c[-]§r This effect can severely impact performance. §e[*]§r RP Support option must be set to labPBR/seuspbr, and a compatible resource pack must be used.
|
||||||
|
value.POM.false=OFF
|
||||||
|
value.POM.true=ON §c[-]
|
||||||
|
|
||||||
|
option.POM_DEPTH=POM Depth
|
||||||
|
option.POM_DEPTH.comment=Adjusts the depth of parallax occlusion mapping. §e[*]§r RP Support option must be set to labPBR/seuspbr, and a compatible resource pack must be used.
|
||||||
|
|
||||||
|
option.POM_QUALITY=POM Quality
|
||||||
|
option.POM_QUALITY.comment=Adjusts the sharpness/accuracy of parallax occlusion mapping. §c[-]§r Values higher than 200 can severely impact performance. §e[*]§r Values lower than 100 will force "POM Lighting Mode" to "Smooth". §e[*]§r RP Support option must be set to labPBR/seuspbr, and a compatible resource pack must be used.
|
||||||
|
value.POM_QUALITY.16=16 §e[*]
|
||||||
|
value.POM_QUALITY.32=32 §e[*]
|
||||||
|
value.POM_QUALITY.64=64 §e[*]
|
||||||
|
value.POM_QUALITY.256=256 §c[-]
|
||||||
|
value.POM_QUALITY.512=512 §c[-]
|
||||||
|
|
||||||
|
option.POM_DISTANCE=POM Distance
|
||||||
|
option.POM_DISTANCE.comment=Adjusts how far parallax occlusion mapping is calculated. §e[*]§r It's recommended to keep this value below 50 to get a small performance gain. §e[*]§r RP Support option must be set to labPBR/seuspbr, and a compatible resource pack must be used.
|
||||||
|
value.POM_DISTANCE.64=64 §e[*]
|
||||||
|
value.POM_DISTANCE.128=128 §e[*]
|
||||||
|
value.POM_DISTANCE.256=256 §e[*]
|
||||||
|
value.POM_DISTANCE.512=512 §e[*]
|
||||||
|
value.POM_DISTANCE.1024=1024 §e[*]
|
||||||
|
|
||||||
|
option.POM_LIGHTING_MODE=POM Lighting Mode
|
||||||
|
option.POM_LIGHTING_MODE.comment=Adjusts the lighting style for POM-affected surfaces. Sharp: POM walls won't get light if they aren't facing towards the light. Smooth: POM walls will still get light as if they are not walls. §e[*]§r This option will be forced to "Smooth" if POM Quality is set lower than 100.
|
||||||
|
value.POM_LIGHTING_MODE.1=Smooth
|
||||||
|
value.POM_LIGHTING_MODE.2=Sharp
|
||||||
|
|
||||||
|
option.POM_ALLOW_CUTOUT=POM on Cutout Surfaces §c[-]§r
|
||||||
|
option.POM_ALLOW_CUTOUT.comment=Makes POM be able to work on cutout block sections (like gaps of leaves). §c[-]§r This effect can severely impact performance.
|
||||||
|
|
||||||
|
option.DIRECTIONAL_BLOCKLIGHT=Directional Blocklight
|
||||||
|
option.DIRECTIONAL_BLOCKLIGHT.comment=Adds depth to blocklight depending on the surface normal. §c[-]§r May cause visual artifacts in some situations. §c[-]§r This effect can impact performance. §e[*]§r RP Support option must be set to labPBR/seuspbr, and a compatible resource pack must be used.
|
||||||
|
value.DIRECTIONAL_BLOCKLIGHT.0=OFF
|
||||||
|
value.DIRECTIONAL_BLOCKLIGHT.3=Subtle §c[-]
|
||||||
|
value.DIRECTIONAL_BLOCKLIGHT.7=Normal §c[-]
|
||||||
|
value.DIRECTIONAL_BLOCKLIGHT.11=Intense §c[-]
|
||||||
|
|
||||||
|
option.HELD_LIGHTING_MODE=Dynamic Handheld Lighting
|
||||||
|
option.HELD_LIGHTING_MODE.comment=Allows handheld light sources to cast light onto the scene.
|
||||||
|
value.HELD_LIGHTING_MODE.0=§cOFF
|
||||||
|
value.HELD_LIGHTING_MODE.1=Subtle
|
||||||
|
value.HELD_LIGHTING_MODE.2=Normal
|
||||||
|
|
||||||
|
option.WAVING_SPEED=Waving Speed
|
||||||
|
option.WAVING_SPEED.comment=Adjusts how quickly the waving effects happen.
|
||||||
|
|
||||||
|
option.WAVING_I=Waving Intensity
|
||||||
|
option.WAVING_I.comment=Adjusts how much the blocks move when waving. §c[-]§r Too much waving intensity can cause waving blocks to clip in and out of other blocks.
|
||||||
|
value.WAVING_I.1.25=1.25 §c[-]
|
||||||
|
value.WAVING_I.1.50=1.50 §c[-]
|
||||||
|
value.WAVING_I.1.75=1.75 §c[-]
|
||||||
|
value.WAVING_I.2.00=2.00 §c[-]
|
||||||
|
value.WAVING_I.50.0=§cInsane
|
||||||
|
|
||||||
|
option.NO_WAVING_INDOORS=No Waving in Closed Areas
|
||||||
|
option.NO_WAVING_INDOORS.comment=Prevents blocks from waving in closed areas using skylight. §c[-]§r This setting being enabled can cause problems with some resource packs or mods.
|
||||||
|
|
||||||
|
option.WAVING_FOLIAGE=Waving Foliage
|
||||||
|
option.WAVING_FOLIAGE.comment=Adds movement to foliage to simulate wind.
|
||||||
|
|
||||||
|
option.WAVING_LEAVES=Waving Leaves
|
||||||
|
option.WAVING_LEAVES.comment=Adds movement to leaves to simulate wind.
|
||||||
|
|
||||||
|
option.WAVING_LAVA=Waving Lava Texture
|
||||||
|
option.WAVING_LAVA.comment=Adds constant movement to lava. §e[*]§r Lava waving in particular is not affected by the "No Waving in Closed Areas" setting.
|
||||||
|
|
||||||
|
option.WAVING_WATER_VERTEX=Waving Water Texture
|
||||||
|
option.WAVING_WATER_VERTEX.comment=Adds movement to water position to simulate wind. §e[*]§r This option is not related to the "Water Wave Strength" setting.
|
||||||
|
|
||||||
|
option.WAVING_RAIN=Waving Rain/Snow Texture
|
||||||
|
option.WAVING_RAIN.comment=Adds movement to falling rain and snow textures to make it look more dynamic.
|
||||||
|
|
||||||
|
option.WORLD_OUTLINE=World Outline
|
||||||
|
option.WORLD_OUTLINE.comment=Adds bright outlines around blocks. §c[-]§r This effect can impact performance.
|
||||||
|
|
||||||
|
option.WORLD_OUTLINE_THICKNESS=World Outline Thickness
|
||||||
|
option.WORLD_OUTLINE_THICKNESS.comment=Determines the thickness of the World Outline effect. §c[-]§r Increasing this setting can impact performance.
|
||||||
|
|
||||||
|
option.WORLD_OUTLINE_I=World Outline Brightness
|
||||||
|
option.WORLD_OUTLINE_I.comment=Determines how intense the World Outline effect will be.
|
||||||
|
|
||||||
|
option.DARK_OUTLINE=Dark Outline
|
||||||
|
option.DARK_OUTLINE.comment=Adds dark outlines around blocks. §c[-]§r This effect can impact performance.
|
||||||
|
|
||||||
|
option.DARK_OUTLINE_THICKNESS=Dark Outline Thickness
|
||||||
|
option.DARK_OUTLINE_THICKNESS.comment=Determines the thickness of the Dark Outline effect. §c[-]§r Increasing this setting can impact performance.
|
||||||
|
|
||||||
|
option.RAIN_PUDDLES=Rain Puddles
|
||||||
|
option.RAIN_PUDDLES.comment=Adds water puddles to the terrain during rain. §e[*]§r RP Support option must be set to anything but Basic, and Block Reflection Quality must be set to Medium or above. §c[-]§r Rain puddles can severely impact performance.
|
||||||
|
value.RAIN_PUDDLES.0=OFF
|
||||||
|
value.RAIN_PUDDLES.1=§aON - Puddles
|
||||||
|
value.RAIN_PUDDLES.2=§aON - Full Coverage
|
||||||
|
value.RAIN_PUDDLES.3=§aON - §cAlways§a Puddles
|
||||||
|
value.RAIN_PUDDLES.4=§aON - §cAlways§a Full
|
||||||
|
|
||||||
|
option.UNDERWATER_DISTORTION=Underwater Distortion
|
||||||
|
option.UNDERWATER_DISTORTION.comment=Adds subtle refraction to the screen when the camera is inside water.
|
||||||
|
|
||||||
|
option.SELECT_OUTLINE=Selection Outline
|
||||||
|
option.SELECT_OUTLINE.comment=Determines the color of the block selection outline.
|
||||||
|
value.SELECT_OUTLINE.0=§cOFF
|
||||||
|
value.SELECT_OUTLINE.1=Default
|
||||||
|
value.SELECT_OUTLINE.2=Rainbow
|
||||||
|
value.SELECT_OUTLINE.3=Select Color
|
||||||
|
value.SELECT_OUTLINE.4=Versatile
|
||||||
|
|
||||||
|
option.SELECT_OUTLINE_I=SO Brightness
|
||||||
|
option.SELECT_OUTLINE_R=SO Red
|
||||||
|
option.SELECT_OUTLINE_G=SO Green
|
||||||
|
option.SELECT_OUTLINE_B=SO Blue
|
||||||
|
|
||||||
|
option.MOON_PHASE_INF_LIGHT=Moon Phased Night Lighting
|
||||||
|
option.MOON_PHASE_INF_LIGHT.comment=Enables different moon phases to change the night lighting brightness.
|
||||||
|
|
||||||
|
option.MOON_PHASE_INF_REFLECTION=Moon Phased Moon Reflection
|
||||||
|
option.MOON_PHASE_INF_REFLECTION.comment=Enables different moon phases to change the brightness of moon reflections.
|
||||||
|
|
||||||
|
option.MOON_PHASE_FULL=Full Moon Intensity
|
||||||
|
option.MOON_PHASE_FULL.comment=Adjusts the moon phase influence during the Full Moon phase (brightest phase).
|
||||||
|
|
||||||
|
option.MOON_PHASE_PARTIAL=Partial Moon Intensity
|
||||||
|
option.MOON_PHASE_PARTIAL.comment=Adjusts the moon phase influence during all moon phases between Full Moon and Dark Moon. This is the phase you will see the most in Minecraft.
|
||||||
|
|
||||||
|
option.MOON_PHASE_DARK=Dark Moon Intensity
|
||||||
|
option.MOON_PHASE_DARK.comment=Adjusts the moon phase influence during New Moon (darkest phase).
|
||||||
|
|
||||||
|
option.LIGHT_COLOR_MULTS=§eLighting Color Multipliers
|
||||||
|
option.LIGHT_COLOR_MULTS.comment=Enables customization of lighting colors that are seen on all surfaces.
|
||||||
|
|
||||||
|
option.ATM_COLOR_MULTS=§eAtmosphere Color Multipliers
|
||||||
|
option.ATM_COLOR_MULTS.comment=Enables customization of atmosphere colors that are mostly seen in the sky and fog.
|
||||||
|
|
||||||
|
option.LIGHT_MORNING_R=Lighting Red Multiplier
|
||||||
|
option.LIGHT_MORNING_G=Lighting Green Multiplier
|
||||||
|
option.LIGHT_MORNING_B=Lighting Blue Multiplier
|
||||||
|
option.LIGHT_MORNING_I=Lighting Intensity Multiplier
|
||||||
|
option.ATM_MORNING_R=Atmosphere Red Multiplier
|
||||||
|
option.ATM_MORNING_G=Atmosphere Green Multiplier
|
||||||
|
option.ATM_MORNING_B=Atmosphere Blue Multiplier
|
||||||
|
option.ATM_MORNING_I=Atmosphere Intensity Multiplier
|
||||||
|
option.LIGHT_NOON_R=Lighting Red Multiplier
|
||||||
|
option.LIGHT_NOON_G=Lighting Green Multiplier
|
||||||
|
option.LIGHT_NOON_B=Lighting Blue Multiplier
|
||||||
|
option.LIGHT_NOON_I=Lighting Intensity Multiplier
|
||||||
|
option.ATM_NOON_R=Atmosphere Red Multiplier
|
||||||
|
option.ATM_NOON_G=Atmosphere Green Multiplier
|
||||||
|
option.ATM_NOON_B=Atmosphere Blue Multiplier
|
||||||
|
option.ATM_NOON_I=Atmosphere Intensity Multiplier
|
||||||
|
option.LIGHT_NIGHT_R=Lighting Red Multiplier
|
||||||
|
option.LIGHT_NIGHT_G=Lighting Green Multiplier
|
||||||
|
option.LIGHT_NIGHT_B=Lighting Blue Multiplier
|
||||||
|
option.LIGHT_NIGHT_I=Lighting Intensity Multiplier
|
||||||
|
option.ATM_NIGHT_R=Atmosphere Red Multiplier
|
||||||
|
option.ATM_NIGHT_G=Atmosphere Green Multiplier
|
||||||
|
option.ATM_NIGHT_B=Atmosphere Blue Multiplier
|
||||||
|
option.ATM_NIGHT_I=Atmosphere Intensity Multiplier
|
||||||
|
option.LIGHT_RAIN_R=Lighting Red Multiplier
|
||||||
|
option.LIGHT_RAIN_G=Lighting Green Multiplier
|
||||||
|
option.LIGHT_RAIN_B=Lighting Blue Multiplier
|
||||||
|
option.LIGHT_RAIN_I=Lighting Intensity Multiplier
|
||||||
|
option.ATM_RAIN_R=Atmosphere Red Multiplier
|
||||||
|
option.ATM_RAIN_G=Atmosphere Green Multiplier
|
||||||
|
option.ATM_RAIN_B=Atmosphere Blue Multiplier
|
||||||
|
option.ATM_RAIN_I=Atmosphere Intensity Multiplier
|
||||||
|
option.LIGHT_NETHER_R=Lighting Red Multiplier
|
||||||
|
option.LIGHT_NETHER_G=Lighting Green Multiplier
|
||||||
|
option.LIGHT_NETHER_B=Lighting Blue Multiplier
|
||||||
|
option.LIGHT_NETHER_I=Lighting Intensity Multiplier
|
||||||
|
option.ATM_NETHER_R=Atmosphere Red Multiplier
|
||||||
|
option.ATM_NETHER_G=Atmosphere Green Multiplier
|
||||||
|
option.ATM_NETHER_B=Atmosphere Blue Multiplier
|
||||||
|
option.ATM_NETHER_I=Atmosphere Intensity Multiplier
|
||||||
|
option.LIGHT_END_R=Lighting Red Multiplier
|
||||||
|
option.LIGHT_END_G=Lighting Green Multiplier
|
||||||
|
option.LIGHT_END_B=Lighting Blue Multiplier
|
||||||
|
option.LIGHT_END_I=Lighting Intensity Multiplier
|
||||||
|
option.ATM_END_R=Atmosphere Red Multiplier
|
||||||
|
option.ATM_END_G=Atmosphere Green Multiplier
|
||||||
|
option.ATM_END_B=Atmosphere Blue Multiplier
|
||||||
|
option.ATM_END_I=Atmosphere Intensity Multiplier
|
||||||
|
|
||||||
|
option.XLIGHT_R=Blocklight Red Multiplier
|
||||||
|
option.XLIGHT_G=Blocklight Green Multiplier
|
||||||
|
option.XLIGHT_B=Blocklight Blue Multiplier
|
||||||
|
|
||||||
|
option.EYES=Eyes
|
||||||
|
option.EYE_FREQUENCY=Eye Frequency
|
||||||
|
option.EYE_SPEED=Eye Speed
|
||||||
|
option.EYE_RED_PROBABILITY=Red Eyes Probability
|
||||||
|
option.BLOOD_MOON=Blood Mood
|
||||||
|
value.BLOOD_MOON.0=Off
|
||||||
|
value.BLOOD_MOON.1=On - Full Moon
|
||||||
|
value.BLOOD_MOON.2=On - Every Night
|
||||||
|
option.EMISSIVE_BLOOD_MOON_FLOWERS=Emissive Blood Moon Flowers
|
@ -0,0 +1,183 @@
|
|||||||
|
//FXAA 3.11 from http://blog.simonrodriguez.fr/articles/30-07-2016_implementing_fxaa.html
|
||||||
|
float quality[12] = float[12] (1.0, 1.0, 1.0, 1.0, 1.0, 1.5, 2.0, 2.0, 2.0, 2.0, 4.0, 8.0);
|
||||||
|
|
||||||
|
void FXAA311(inout vec3 color) {
|
||||||
|
float edgeThresholdMin = 0.03125;
|
||||||
|
float edgeThresholdMax = 0.0625;
|
||||||
|
float subpixelQuality = 0.75;
|
||||||
|
int iterations = 12;
|
||||||
|
|
||||||
|
vec2 view = 1.0 / vec2(viewWidth, viewHeight);
|
||||||
|
|
||||||
|
float lumaCenter = GetLuminance(color);
|
||||||
|
#ifndef LIGHT_COLORING
|
||||||
|
float lumaDown = GetLuminance(texelFetch(colortex3, texelCoord + ivec2( 0, -1), 0).rgb);
|
||||||
|
float lumaUp = GetLuminance(texelFetch(colortex3, texelCoord + ivec2( 0, 1), 0).rgb);
|
||||||
|
float lumaLeft = GetLuminance(texelFetch(colortex3, texelCoord + ivec2(-1, 0), 0).rgb);
|
||||||
|
float lumaRight = GetLuminance(texelFetch(colortex3, texelCoord + ivec2( 1, 0), 0).rgb);
|
||||||
|
#else
|
||||||
|
float lumaDown = GetLuminance(texelFetch(colortex8, texelCoord + ivec2( 0, -1), 0).rgb);
|
||||||
|
float lumaUp = GetLuminance(texelFetch(colortex8, texelCoord + ivec2( 0, 1), 0).rgb);
|
||||||
|
float lumaLeft = GetLuminance(texelFetch(colortex8, texelCoord + ivec2(-1, 0), 0).rgb);
|
||||||
|
float lumaRight = GetLuminance(texelFetch(colortex8, texelCoord + ivec2( 1, 0), 0).rgb);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
float lumaMin = min(lumaCenter, min(min(lumaDown, lumaUp), min(lumaLeft, lumaRight)));
|
||||||
|
float lumaMax = max(lumaCenter, max(max(lumaDown, lumaUp), max(lumaLeft, lumaRight)));
|
||||||
|
|
||||||
|
float lumaRange = lumaMax - lumaMin;
|
||||||
|
|
||||||
|
if (lumaRange > max(edgeThresholdMin, lumaMax * edgeThresholdMax)) {
|
||||||
|
#ifndef LIGHT_COLORING
|
||||||
|
float lumaDownLeft = GetLuminance(texelFetch(colortex3, texelCoord + ivec2(-1, -1), 0).rgb);
|
||||||
|
float lumaUpRight = GetLuminance(texelFetch(colortex3, texelCoord + ivec2( 1, 1), 0).rgb);
|
||||||
|
float lumaUpLeft = GetLuminance(texelFetch(colortex3, texelCoord + ivec2(-1, 1), 0).rgb);
|
||||||
|
float lumaDownRight = GetLuminance(texelFetch(colortex3, texelCoord + ivec2( 1, -1), 0).rgb);
|
||||||
|
#else
|
||||||
|
float lumaDownLeft = GetLuminance(texelFetch(colortex8, texelCoord + ivec2(-1, -1), 0).rgb);
|
||||||
|
float lumaUpRight = GetLuminance(texelFetch(colortex8, texelCoord + ivec2( 1, 1), 0).rgb);
|
||||||
|
float lumaUpLeft = GetLuminance(texelFetch(colortex8, texelCoord + ivec2(-1, 1), 0).rgb);
|
||||||
|
float lumaDownRight = GetLuminance(texelFetch(colortex8, texelCoord + ivec2( 1, -1), 0).rgb);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
float lumaDownUp = lumaDown + lumaUp;
|
||||||
|
float lumaLeftRight = lumaLeft + lumaRight;
|
||||||
|
|
||||||
|
float lumaLeftCorners = lumaDownLeft + lumaUpLeft;
|
||||||
|
float lumaDownCorners = lumaDownLeft + lumaDownRight;
|
||||||
|
float lumaRightCorners = lumaDownRight + lumaUpRight;
|
||||||
|
float lumaUpCorners = lumaUpRight + lumaUpLeft;
|
||||||
|
|
||||||
|
float edgeHorizontal = abs(-2.0 * lumaLeft + lumaLeftCorners ) +
|
||||||
|
abs(-2.0 * lumaCenter + lumaDownUp ) * 2.0 +
|
||||||
|
abs(-2.0 * lumaRight + lumaRightCorners);
|
||||||
|
float edgeVertical = abs(-2.0 * lumaUp + lumaUpCorners ) +
|
||||||
|
abs(-2.0 * lumaCenter + lumaLeftRight ) * 2.0 +
|
||||||
|
abs(-2.0 * lumaDown + lumaDownCorners );
|
||||||
|
|
||||||
|
bool isHorizontal = (edgeHorizontal >= edgeVertical);
|
||||||
|
|
||||||
|
float luma1 = isHorizontal ? lumaDown : lumaLeft;
|
||||||
|
float luma2 = isHorizontal ? lumaUp : lumaRight;
|
||||||
|
float gradient1 = luma1 - lumaCenter;
|
||||||
|
float gradient2 = luma2 - lumaCenter;
|
||||||
|
|
||||||
|
bool is1Steepest = abs(gradient1) >= abs(gradient2);
|
||||||
|
float gradientScaled = 0.25 * max(abs(gradient1), abs(gradient2));
|
||||||
|
|
||||||
|
float stepLength = isHorizontal ? view.y : view.x;
|
||||||
|
|
||||||
|
float lumaLocalAverage = 0.0;
|
||||||
|
|
||||||
|
if (is1Steepest) {
|
||||||
|
stepLength = - stepLength;
|
||||||
|
lumaLocalAverage = 0.5 * (luma1 + lumaCenter);
|
||||||
|
} else {
|
||||||
|
lumaLocalAverage = 0.5 * (luma2 + lumaCenter);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec2 currentUv = texCoord;
|
||||||
|
if (isHorizontal) {
|
||||||
|
currentUv.y += stepLength * 0.5;
|
||||||
|
} else {
|
||||||
|
currentUv.x += stepLength * 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec2 offset = isHorizontal ? vec2(view.x, 0.0) : vec2(0.0, view.y);
|
||||||
|
|
||||||
|
vec2 uv1 = currentUv - offset;
|
||||||
|
vec2 uv2 = currentUv + offset;
|
||||||
|
|
||||||
|
#ifndef LIGHT_COLORING
|
||||||
|
float lumaEnd1 = GetLuminance(texture2D(colortex3, uv1).rgb);
|
||||||
|
float lumaEnd2 = GetLuminance(texture2D(colortex3, uv2).rgb);
|
||||||
|
#else
|
||||||
|
float lumaEnd1 = GetLuminance(texture2D(colortex8, uv1).rgb);
|
||||||
|
float lumaEnd2 = GetLuminance(texture2D(colortex8, uv2).rgb);
|
||||||
|
#endif
|
||||||
|
lumaEnd1 -= lumaLocalAverage;
|
||||||
|
lumaEnd2 -= lumaLocalAverage;
|
||||||
|
|
||||||
|
bool reached1 = abs(lumaEnd1) >= gradientScaled;
|
||||||
|
bool reached2 = abs(lumaEnd2) >= gradientScaled;
|
||||||
|
bool reachedBoth = reached1 && reached2;
|
||||||
|
|
||||||
|
if (!reached1) {
|
||||||
|
uv1 -= offset;
|
||||||
|
}
|
||||||
|
if (!reached2) {
|
||||||
|
uv2 += offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!reachedBoth) {
|
||||||
|
for (int i = 2; i < iterations; i++) {
|
||||||
|
if (!reached1) {
|
||||||
|
#ifndef LIGHT_COLORING
|
||||||
|
lumaEnd1 = GetLuminance(texture2D(colortex3, uv1).rgb);
|
||||||
|
#else
|
||||||
|
lumaEnd1 = GetLuminance(texture2D(colortex8, uv1).rgb);
|
||||||
|
#endif
|
||||||
|
lumaEnd1 = lumaEnd1 - lumaLocalAverage;
|
||||||
|
}
|
||||||
|
if (!reached2) {
|
||||||
|
#ifndef LIGHT_COLORING
|
||||||
|
lumaEnd2 = GetLuminance(texture2D(colortex3, uv2).rgb);
|
||||||
|
#else
|
||||||
|
lumaEnd2 = GetLuminance(texture2D(colortex8, uv2).rgb);
|
||||||
|
#endif
|
||||||
|
lumaEnd2 = lumaEnd2 - lumaLocalAverage;
|
||||||
|
}
|
||||||
|
|
||||||
|
reached1 = abs(lumaEnd1) >= gradientScaled;
|
||||||
|
reached2 = abs(lumaEnd2) >= gradientScaled;
|
||||||
|
reachedBoth = reached1 && reached2;
|
||||||
|
|
||||||
|
if (!reached1) {
|
||||||
|
uv1 -= offset * quality[i];
|
||||||
|
}
|
||||||
|
if (!reached2) {
|
||||||
|
uv2 += offset * quality[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reachedBoth) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float distance1 = isHorizontal ? (texCoord.x - uv1.x) : (texCoord.y - uv1.y);
|
||||||
|
float distance2 = isHorizontal ? (uv2.x - texCoord.x) : (uv2.y - texCoord.y);
|
||||||
|
|
||||||
|
bool isDirection1 = distance1 < distance2;
|
||||||
|
float distanceFinal = min(distance1, distance2);
|
||||||
|
|
||||||
|
float edgeThickness = (distance1 + distance2);
|
||||||
|
|
||||||
|
float pixelOffset = - distanceFinal / edgeThickness + 0.5;
|
||||||
|
|
||||||
|
bool isLumaCenterSmaller = lumaCenter < lumaLocalAverage;
|
||||||
|
|
||||||
|
bool correctVariation = ((isDirection1 ? lumaEnd1 : lumaEnd2) < 0.0) != isLumaCenterSmaller;
|
||||||
|
|
||||||
|
float finalOffset = correctVariation ? pixelOffset : 0.0;
|
||||||
|
|
||||||
|
float lumaAverage = (1.0 / 12.0) * (2.0 * (lumaDownUp + lumaLeftRight) + lumaLeftCorners + lumaRightCorners);
|
||||||
|
float subPixelOffset1 = clamp(abs(lumaAverage - lumaCenter) / lumaRange, 0.0, 1.0);
|
||||||
|
float subPixelOffset2 = (-2.0 * subPixelOffset1 + 3.0) * subPixelOffset1 * subPixelOffset1;
|
||||||
|
float subPixelOffsetFinal = subPixelOffset2 * subPixelOffset2 * subpixelQuality;
|
||||||
|
|
||||||
|
finalOffset = max(finalOffset, subPixelOffsetFinal);
|
||||||
|
|
||||||
|
// Compute the final UV coordinates.
|
||||||
|
vec2 finalUv = texCoord;
|
||||||
|
if (isHorizontal) {
|
||||||
|
finalUv.y += finalOffset * stepLength;
|
||||||
|
} else {
|
||||||
|
finalUv.x += finalOffset * stepLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef LIGHT_COLORING
|
||||||
|
color = texture2D(colortex3, finalUv).rgb;
|
||||||
|
#else
|
||||||
|
color = texture2D(colortex8, finalUv).rgb;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,146 @@
|
|||||||
|
const float regularEdge = 20.0;
|
||||||
|
const float extraEdgeMult = 3.0;
|
||||||
|
|
||||||
|
// Previous frame reprojection from Chocapic13
|
||||||
|
vec2 Reprojection(vec3 pos, vec3 cameraOffset) {
|
||||||
|
pos = pos * 2.0 - 1.0;
|
||||||
|
|
||||||
|
vec4 viewPosPrev = gbufferProjectionInverse * vec4(pos, 1.0);
|
||||||
|
viewPosPrev /= viewPosPrev.w;
|
||||||
|
viewPosPrev = gbufferModelViewInverse * viewPosPrev;
|
||||||
|
|
||||||
|
vec4 previousPosition = viewPosPrev + vec4(cameraOffset, 0.0);
|
||||||
|
previousPosition = gbufferPreviousModelView * previousPosition;
|
||||||
|
previousPosition = gbufferPreviousProjection * previousPosition;
|
||||||
|
return previousPosition.xy / previousPosition.w * 0.5 + 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 RGBToYCoCg(vec3 col) {
|
||||||
|
return vec3(
|
||||||
|
col.r * 0.25 + col.g * 0.5 + col.b * 0.25,
|
||||||
|
col.r * 0.5 - col.b * 0.5,
|
||||||
|
col.r * -0.25 + col.g * 0.5 + col.b * -0.25
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 YCoCgToRGB(vec3 col) {
|
||||||
|
float n = col.r - col.b;
|
||||||
|
return vec3(n + col.g, col.r + col.b, n - col.g);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 ClipAABB(vec3 q,vec3 aabb_min, vec3 aabb_max){
|
||||||
|
vec3 p_clip = 0.5 * (aabb_max + aabb_min);
|
||||||
|
vec3 e_clip = 0.5 * (aabb_max - aabb_min) + 0.00000001;
|
||||||
|
|
||||||
|
vec3 v_clip = q - vec3(p_clip);
|
||||||
|
vec3 v_unit = v_clip.xyz / e_clip;
|
||||||
|
vec3 a_unit = abs(v_unit);
|
||||||
|
float ma_unit = max(a_unit.x, max(a_unit.y, a_unit.z));
|
||||||
|
|
||||||
|
if (ma_unit > 1.0)
|
||||||
|
return vec3(p_clip) + v_clip / ma_unit;
|
||||||
|
else
|
||||||
|
return q;
|
||||||
|
}
|
||||||
|
|
||||||
|
ivec2 neighbourhoodOffsets[8] = ivec2[8](
|
||||||
|
ivec2( 1, 1),
|
||||||
|
ivec2( 1,-1),
|
||||||
|
ivec2(-1, 1),
|
||||||
|
ivec2(-1,-1),
|
||||||
|
ivec2( 1, 0),
|
||||||
|
ivec2( 0, 1),
|
||||||
|
ivec2(-1, 0),
|
||||||
|
ivec2( 0,-1)
|
||||||
|
);
|
||||||
|
|
||||||
|
void NeighbourhoodClamping(vec3 color, inout vec3 tempColor, float depth, inout float edge) {
|
||||||
|
vec3 minclr = RGBToYCoCg(color);
|
||||||
|
vec3 maxclr = minclr;
|
||||||
|
|
||||||
|
for (int i = 0; i < 8; i++) {
|
||||||
|
ivec2 texelCoordM = texelCoord + neighbourhoodOffsets[i];
|
||||||
|
|
||||||
|
float depthCheck = texelFetch(depthtex1, texelCoordM, 0).r;
|
||||||
|
if (abs(GetLinearDepth(depthCheck) - GetLinearDepth(depth)) > 0.09) {
|
||||||
|
edge = regularEdge;
|
||||||
|
|
||||||
|
if (int(texelFetch(colortex1, texelCoordM, 0).g * 255.1) == 253) // Reduced Edge TAA
|
||||||
|
edge *= extraEdgeMult;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef LIGHT_COLORING
|
||||||
|
vec3 clr = texelFetch(colortex3, texelCoordM, 0).rgb;
|
||||||
|
#else
|
||||||
|
vec3 clr = texelFetch(colortex8, texelCoordM, 0).rgb;
|
||||||
|
#endif
|
||||||
|
clr = RGBToYCoCg(clr);
|
||||||
|
minclr = min(minclr, clr); maxclr = max(maxclr, clr);
|
||||||
|
}
|
||||||
|
|
||||||
|
tempColor = RGBToYCoCg(tempColor);
|
||||||
|
tempColor = ClipAABB(tempColor, minclr, maxclr);
|
||||||
|
tempColor = YCoCgToRGB(tempColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoTAA(inout vec3 color, inout vec3 temp, float depth) {
|
||||||
|
int materialMask = int(texelFetch(colortex1, texelCoord, 0).g * 255.1);
|
||||||
|
|
||||||
|
if (materialMask == 254) { // No SSAO, No TAA
|
||||||
|
int i = 0;
|
||||||
|
while (i < 4) {
|
||||||
|
int mms = int(texelFetch(colortex1, texelCoord + neighbourhoodOffsets[i], 0).g * 255.1);
|
||||||
|
if (mms != materialMask) break;
|
||||||
|
i++;
|
||||||
|
} // Checking edge-pixels prevents flickering
|
||||||
|
if (i == 4) return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef TEMPORAL_FILTER
|
||||||
|
depth = texelFetch(depthtex1, texelCoord, 0).r;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined CUSTOM_PBR || defined IPBR && defined IS_IRIS
|
||||||
|
if (depth <= 0.56) return; // materialMask might be occupied, so we do the check manually
|
||||||
|
#endif
|
||||||
|
|
||||||
|
vec3 coord = vec3(texCoord, depth);
|
||||||
|
vec3 cameraOffset = cameraPosition - previousCameraPosition;
|
||||||
|
vec2 prvCoord = Reprojection(coord, cameraOffset);
|
||||||
|
|
||||||
|
vec2 view = vec2(viewWidth, viewHeight);
|
||||||
|
vec3 tempColor = texture2D(colortex2, prvCoord).rgb;
|
||||||
|
if (tempColor == vec3(0.0)) { // Fixes the first frame
|
||||||
|
temp = color;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
float edge = 0.0;
|
||||||
|
NeighbourhoodClamping(color, tempColor, depth, edge);
|
||||||
|
|
||||||
|
if (materialMask == 253) // Reduced Edge TAA
|
||||||
|
edge *= extraEdgeMult;
|
||||||
|
|
||||||
|
vec2 velocity = (texCoord - prvCoord.xy) * view;
|
||||||
|
float blendFactor = float(prvCoord.x > 0.0 && prvCoord.x < 1.0 &&
|
||||||
|
prvCoord.y > 0.0 && prvCoord.y < 1.0);
|
||||||
|
//float blendMinimum = 0.6;
|
||||||
|
//float blendVariable = 0.5;
|
||||||
|
//float blendConstant = 0.4;
|
||||||
|
float blendMinimum = 0.3;
|
||||||
|
float blendVariable = 0.2;
|
||||||
|
float blendConstant = 0.7;
|
||||||
|
float velocityFactor = dot(velocity, velocity) * 10.0;
|
||||||
|
blendFactor *= max(exp(-velocityFactor) * blendVariable + blendConstant - length(cameraOffset) * edge, blendMinimum);
|
||||||
|
|
||||||
|
#ifdef IS_IRIS
|
||||||
|
if (lightning > 0.0) blendFactor = 0.0;
|
||||||
|
#else
|
||||||
|
if (lightningFlashOptifine > 0.0) blendFactor = 0.0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
color = mix(color, tempColor, blendFactor);
|
||||||
|
temp = color;
|
||||||
|
|
||||||
|
//if (edge > 0.05) color.rgb = vec3(1.0, 0.0, 1.0);
|
||||||
|
}
|
@ -0,0 +1,65 @@
|
|||||||
|
vec3 GetAuroraBorealis(vec3 viewPos, float VdotU, float dither) {
|
||||||
|
float visibility = sqrt1(clamp01(VdotU * 1.5 - 0.225)) - sunVisibility;
|
||||||
|
visibility -= mix(0.0, rainFactor, heightRelativeToCloud);
|
||||||
|
visibility *= 1.0 - VdotU * 0.9;
|
||||||
|
|
||||||
|
#if AURORA_CONDITION == 1 || AURORA_CONDITION == 3
|
||||||
|
visibility -= moonPhase;
|
||||||
|
#endif
|
||||||
|
#if AURORA_CONDITION == 2 || AURORA_CONDITION == 3
|
||||||
|
visibility *= inSnowy;
|
||||||
|
#endif
|
||||||
|
#if AURORA_CONDITION == 4
|
||||||
|
visibility = max(visibility * inSnowy, visibility - moonPhase);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (visibility > 0.0) {
|
||||||
|
if (max(blindness, darknessFactor) > 0.1) return vec3(0.0);
|
||||||
|
|
||||||
|
vec3 aurora = vec3(0.0);
|
||||||
|
|
||||||
|
vec3 wpos = (gbufferModelViewInverse * vec4(viewPos, 1.0)).xyz;
|
||||||
|
wpos.xz /= wpos.y;
|
||||||
|
vec2 cameraPositionM = cameraPosition.xz * 0.0075;
|
||||||
|
cameraPositionM.x += syncedTime * 0.04;
|
||||||
|
|
||||||
|
int sampleCount = 25;
|
||||||
|
int sampleCountP = sampleCount + 5;
|
||||||
|
float ditherM = dither + 5.0;
|
||||||
|
float auroraAnimate = frameTimeCounter * 0.001;
|
||||||
|
for (int i = 0; i < sampleCount; i++) {
|
||||||
|
float current = pow2((i + ditherM) / sampleCountP);
|
||||||
|
|
||||||
|
vec2 planePos = wpos.xz * (0.8 + current) * 11.0 + cameraPositionM;
|
||||||
|
#if AURORA_STYLE == 1
|
||||||
|
planePos = floor(planePos) * 0.0007;
|
||||||
|
|
||||||
|
float noise = texture2D(noisetex, planePos).b;
|
||||||
|
noise = pow2(pow2(pow2(pow2(1.0 - 2.0 * abs(noise - 0.5)))));
|
||||||
|
|
||||||
|
noise *= pow1_5(texture2D(noisetex, planePos * 100.0 + auroraAnimate).b);
|
||||||
|
#else
|
||||||
|
planePos *= 0.0007;
|
||||||
|
|
||||||
|
float noise = texture2D(noisetex, planePos).r;
|
||||||
|
noise = pow2(pow2(pow2(pow2(1.0 - 2.0 * abs(noise - 0.5)))));
|
||||||
|
|
||||||
|
noise *= texture2D(noisetex, planePos * 3.0 + auroraAnimate).b;
|
||||||
|
noise *= texture2D(noisetex, planePos * 5.0 - auroraAnimate).b;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
float currentM = 1.0 - current;
|
||||||
|
aurora += noise * currentM * mix(vec3(0.0, 7.0, 7.0), vec3(20.0, 0.0, 0.0), pow2(pow2(currentM)));
|
||||||
|
}
|
||||||
|
|
||||||
|
#if AURORA_STYLE == 1
|
||||||
|
aurora *= 1.3;
|
||||||
|
#else
|
||||||
|
aurora *= 1.8;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return aurora * visibility / sampleCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
return vec3(0.0);
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
const float cloudNarrowness = 0.05;
|
||||||
|
|
||||||
|
#ifdef DEFERRED1
|
||||||
|
const float cloudRoundness = 0.125; // for clouds
|
||||||
|
#else
|
||||||
|
const float cloudRoundness = 0.35; // for cloud shadows
|
||||||
|
#endif
|
||||||
|
|
||||||
|
vec2 GetRoundedCloudCoord(vec2 pos) { // Thanks to SixthSurge
|
||||||
|
vec2 coord = pos.xy + 0.5;
|
||||||
|
vec2 signCoord = sign(coord);
|
||||||
|
coord = abs(coord) + 1.0;
|
||||||
|
vec2 i, f = modf(coord, i);
|
||||||
|
f = smoothstep(0.5 - cloudRoundness, 0.5 + cloudRoundness, f);
|
||||||
|
coord = i + f;
|
||||||
|
return (coord - 0.5) * signCoord / 256.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 ModifyTracePos(vec3 tracePos, int cloudAltitude) {
|
||||||
|
#if CLOUD_SPEED_MULT == 100
|
||||||
|
float wind = syncedTime;
|
||||||
|
#else
|
||||||
|
#define CLOUD_SPEED_MULT_M CLOUD_SPEED_MULT * 0.01
|
||||||
|
float wind = frameTimeCounter * CLOUD_SPEED_MULT_M;
|
||||||
|
#endif
|
||||||
|
tracePos.x += wind;
|
||||||
|
tracePos.z += cloudAltitude * 64.0;
|
||||||
|
tracePos.xz *= cloudNarrowness;
|
||||||
|
return tracePos.xyz;
|
||||||
|
}
|
@ -0,0 +1,90 @@
|
|||||||
|
#include "/spookylib/colors/lightAndAmbientColors.glsl"
|
||||||
|
#include "/spookylib/colors/cloudColors.glsl"
|
||||||
|
#include "/spookylib/atmospherics/sky.glsl"
|
||||||
|
|
||||||
|
float InterleavedGradientNoise() {
|
||||||
|
float n = 52.9829189 * fract(0.06711056 * gl_FragCoord.x + 0.00583715 * gl_FragCoord.y);
|
||||||
|
#ifdef TAA
|
||||||
|
return fract(n + 1.61803398875 * mod(float(frameCounter), 3600.0));
|
||||||
|
#else
|
||||||
|
return fract(n);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef REALTIME_SHADOWS
|
||||||
|
vec3 GetShadowOnCloudPosition(vec3 tracePos) {
|
||||||
|
vec3 wpos = PlayerToShadow(tracePos - cameraPosition);
|
||||||
|
float distb = sqrt(wpos.x * wpos.x + wpos.y * wpos.y);
|
||||||
|
float distortFactor = 1.0 - shadowMapBias + distb * shadowMapBias;
|
||||||
|
vec3 shadowPosition = vec3(vec2(wpos.xy / distortFactor), wpos.z * 0.2);
|
||||||
|
return shadowPosition * 0.5 + 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GetShadowOnCloud(vec3 tracePos, int cloudAltitude, float lowerPlaneAltitude, float higherPlaneAltitude) {
|
||||||
|
const float cloudShadowOffset = 0.5;
|
||||||
|
|
||||||
|
vec3 shadowPosition0 = GetShadowOnCloudPosition(tracePos);
|
||||||
|
if (length(shadowPosition0.xy * 2.0 - 1.0) < 1.0) {
|
||||||
|
float shadowsample0 = shadow2D(shadowtex0, shadowPosition0).z;
|
||||||
|
|
||||||
|
if (shadowsample0 == 0.0) return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CLOUDS_REIMAGINED
|
||||||
|
#include "/spookylib/atmospherics/clouds/reimaginedClouds.glsl"
|
||||||
|
#endif
|
||||||
|
#ifdef CLOUDS_UNBOUND
|
||||||
|
#include "/spookylib/atmospherics/clouds/unboundClouds.glsl"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
vec4 GetClouds(inout float cloudLinearDepth, float skyFade, vec3 playerPos, vec3 viewPos, float lViewPos, float VdotS, float VdotU, float dither) {
|
||||||
|
vec4 clouds = vec4(0.0);
|
||||||
|
|
||||||
|
vec3 nPlayerPos = normalize(playerPos);
|
||||||
|
float lViewPosM = lViewPos < far * 1.5 ? lViewPos - 1.0 : 1000000000.0;
|
||||||
|
float skyMult0 = pow2(skyFade * 3.333333 - 2.333333);
|
||||||
|
#if BLOOD_MOON > 0
|
||||||
|
cloudAmbientColor *= mix(vec3(1.0), vec3(1.0, 0.0, 0.0) * 20.0, getBloodMoon(moonPhase, sunVisibility));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CLOUDS_REIMAGINED
|
||||||
|
cloudAmbientColor *= 1.0 - 0.25 * rainFactor;
|
||||||
|
|
||||||
|
const float threshold1 = 1000.0;
|
||||||
|
const float threshold2 = 1000.0;
|
||||||
|
|
||||||
|
#ifndef DOUBLE_REIM_CLOUDS
|
||||||
|
clouds =
|
||||||
|
GetVolumetricClouds(cloudAlt1i, threshold1, cloudLinearDepth, skyFade, skyMult0, nPlayerPos, lViewPosM, VdotS, VdotU, dither);
|
||||||
|
#else
|
||||||
|
int maxCloudAlt = max(cloudAlt1i, cloudAlt2i);
|
||||||
|
int minCloudAlt = min(cloudAlt1i, cloudAlt2i);
|
||||||
|
|
||||||
|
if (abs(cameraPosition.y - minCloudAlt) < abs(cameraPosition.y - maxCloudAlt)) {
|
||||||
|
clouds =
|
||||||
|
GetVolumetricClouds(minCloudAlt, threshold1, cloudLinearDepth, skyFade, skyMult0, nPlayerPos, lViewPosM, VdotS, VdotU, dither);
|
||||||
|
if (clouds.a == 0.0) clouds =
|
||||||
|
GetVolumetricClouds(maxCloudAlt, threshold2, cloudLinearDepth, skyFade, skyMult0, nPlayerPos, lViewPosM, VdotS, VdotU, dither);
|
||||||
|
} else {
|
||||||
|
clouds =
|
||||||
|
GetVolumetricClouds(maxCloudAlt, threshold2, cloudLinearDepth, skyFade, skyMult0, nPlayerPos, lViewPosM, VdotS, VdotU, dither);
|
||||||
|
if (clouds.a == 0.0) clouds =
|
||||||
|
GetVolumetricClouds(minCloudAlt, threshold1, cloudLinearDepth, skyFade, skyMult0, nPlayerPos, lViewPosM, VdotS, VdotU, dither);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CLOUDS_UNBOUND
|
||||||
|
float thresholdMix = pow2(clamp01(VdotU * 5.0));
|
||||||
|
float thresholdF = mix(far, 1000.0, thresholdMix * 0.5 + 0.5);
|
||||||
|
|
||||||
|
clouds =
|
||||||
|
GetVolumetricClouds(cloudAlt1i, thresholdF, cloudLinearDepth, skyFade, skyMult0, nPlayerPos, lViewPosM, VdotS, VdotU, dither);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return clouds;
|
||||||
|
}
|
@ -0,0 +1,117 @@
|
|||||||
|
#include "/spookylib/atmospherics/clouds/cloudCoord.glsl"
|
||||||
|
|
||||||
|
const float cloudStretch = 5.5;
|
||||||
|
const float cloudHeightShader = cloudStretch * 2.0;
|
||||||
|
|
||||||
|
bool GetCloudNoise(vec3 tracePos, inout vec3 tracePosM, int cloudAltitude) {
|
||||||
|
tracePosM = ModifyTracePos(tracePos, cloudAltitude);
|
||||||
|
vec2 coord = GetRoundedCloudCoord(tracePosM.xz);
|
||||||
|
float noise = texture2D(colortex3, coord).b;
|
||||||
|
|
||||||
|
float threshold = clamp(abs(cloudAltitude - tracePos.y) / cloudStretch, 0.001, 0.999);
|
||||||
|
threshold = pow2(pow2(pow2(threshold)));
|
||||||
|
return noise > threshold * 0.5 + 0.25;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 GetVolumetricClouds(int cloudAltitude, float distanceThreshold, inout float cloudLinearDepth, float skyFade, float skyMult0, vec3 nPlayerPos, float lViewPosM, float VdotS, float VdotU, float dither) {
|
||||||
|
vec4 volumetricClouds = vec4(0.0);
|
||||||
|
|
||||||
|
float higherPlaneAltitude = cloudAltitude + cloudStretch;
|
||||||
|
float lowerPlaneAltitude = cloudAltitude - cloudStretch;
|
||||||
|
|
||||||
|
float lowerPlaneDistance = (lowerPlaneAltitude - cameraPosition.y) / nPlayerPos.y;
|
||||||
|
float higherPlaneDistance = (higherPlaneAltitude - cameraPosition.y) / nPlayerPos.y;
|
||||||
|
float minPlaneDistance = min(lowerPlaneDistance, higherPlaneDistance);
|
||||||
|
minPlaneDistance = max(minPlaneDistance, 0.0);
|
||||||
|
float maxPlaneDistance = max(lowerPlaneDistance, higherPlaneDistance);
|
||||||
|
if (maxPlaneDistance < 0.0) return vec4(0.0);
|
||||||
|
float planeDistanceDif = maxPlaneDistance - minPlaneDistance;
|
||||||
|
|
||||||
|
#if CLOUD_QUALITY == 1
|
||||||
|
int sampleCount = max(int(planeDistanceDif) / 16, 6);
|
||||||
|
#elif CLOUD_QUALITY == 2
|
||||||
|
int sampleCount = max(int(planeDistanceDif) / 8, 12);
|
||||||
|
#elif CLOUD_QUALITY == 3
|
||||||
|
int sampleCount = max(int(planeDistanceDif), 12);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
float stepMult = planeDistanceDif / sampleCount;
|
||||||
|
vec3 traceAdd = nPlayerPos * stepMult;
|
||||||
|
vec3 tracePos = cameraPosition + minPlaneDistance * nPlayerPos;
|
||||||
|
tracePos += traceAdd * dither;
|
||||||
|
tracePos.y -= traceAdd.y;
|
||||||
|
|
||||||
|
for (int i = 0; i < sampleCount; i++) {
|
||||||
|
tracePos += traceAdd;
|
||||||
|
|
||||||
|
vec3 cloudPlayerPos = tracePos - cameraPosition;
|
||||||
|
float lTracePos = length(cloudPlayerPos);
|
||||||
|
float lTracePosXZ = length(cloudPlayerPos.xz);
|
||||||
|
float cloudMult = 1.0;
|
||||||
|
if (lTracePosXZ > distanceThreshold) break;
|
||||||
|
if (lTracePos > lViewPosM) {
|
||||||
|
if (skyFade < 0.7) continue;
|
||||||
|
else cloudMult = skyMult0;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 tracePosM;
|
||||||
|
if (GetCloudNoise(tracePos, tracePosM, cloudAltitude)) {
|
||||||
|
float lightMult = 1.0;
|
||||||
|
|
||||||
|
#ifdef REALTIME_SHADOWS
|
||||||
|
if (GetShadowOnCloud(tracePos, cloudAltitude, lowerPlaneAltitude, higherPlaneAltitude)) {
|
||||||
|
#ifdef CLOUD_CLOSED_AREA_CHECK
|
||||||
|
if (eyeBrightness.y != 240) continue;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
lightMult = 0.25;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
float cloudShading = 1.0 - (higherPlaneAltitude - tracePos.y) / cloudHeightShader;
|
||||||
|
float VdotSM1 = max0(sunVisibility > 0.5 ? VdotS : - VdotS);
|
||||||
|
|
||||||
|
#if CLOUD_QUALITY >= 2
|
||||||
|
float cloudShadingM = 1.0 - pow2(cloudShading);
|
||||||
|
|
||||||
|
float gradientNoise = InterleavedGradientNoise();
|
||||||
|
|
||||||
|
vec3 cLightPos = tracePosM;
|
||||||
|
vec3 cLightPosAdd = normalize(ViewToPlayer(lightVec * 1000000000.0)) * vec3(0.08);
|
||||||
|
cLightPosAdd *= shadowTime;
|
||||||
|
|
||||||
|
float light = 2.0;
|
||||||
|
cLightPos += (1.0 + gradientNoise) * cLightPosAdd;
|
||||||
|
light -= texture2D(colortex3, GetRoundedCloudCoord(cLightPos.xz)).b * cloudShadingM;
|
||||||
|
cLightPos += gradientNoise * cLightPosAdd;
|
||||||
|
light -= texture2D(colortex3, GetRoundedCloudCoord(cLightPos.xz)).b * cloudShadingM;
|
||||||
|
|
||||||
|
float VdotSM2 = VdotSM1 * shadowTime * 0.25;
|
||||||
|
VdotSM2 += 0.5 * cloudShading + 0.08;
|
||||||
|
cloudShading = VdotSM2 * light * lightMult;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
vec3 colorSample = cloudAmbientColor + cloudLightColor * (0.07 + cloudShading);
|
||||||
|
#ifdef IS_IRIS
|
||||||
|
vec2 lightningAdd = lightningFlashEffect(tracePos - cameraPosition, lightningBoltPosition.xyz, vec3(1.0), 450.0) * lightningBoltPosition.w * 10.0;
|
||||||
|
colorSample += lightningAdd.y;
|
||||||
|
#else
|
||||||
|
vec2 lightningAdd = lightningFlashEffect(tracePos - cameraPosition, vec3(0.0, exp(1.0) - 1000.0, 0.0), vec3(1.0), 450.0) * lightningFlashOptifine * 10.0;
|
||||||
|
colorSample += lightningAdd.y;
|
||||||
|
#endif
|
||||||
|
vec3 cloudSkyColor = GetSky(VdotU, VdotS, dither, true, false);
|
||||||
|
float cloudFogFactor = clamp((distanceThreshold - lTracePosXZ) / distanceThreshold, 0.0, 0.75);
|
||||||
|
float skyMult1 = 1.0 - 0.2 * (1.0 - skyFade) * max(sunVisibility2, nightFactor);
|
||||||
|
float skyMult2 = 1.0 - 0.33333 * skyFade;
|
||||||
|
colorSample = mix(cloudSkyColor, colorSample * skyMult1, cloudFogFactor * skyMult2);
|
||||||
|
colorSample *= pow2(1.0 - max(blindness, darknessFactor));
|
||||||
|
|
||||||
|
cloudLinearDepth = sqrt(lTracePos / far);
|
||||||
|
volumetricClouds.a = pow(cloudFogFactor * 1.33333, 0.5 + 10.0 * pow(abs(VdotSM1), 90.0)) * cloudMult;
|
||||||
|
volumetricClouds.rgb = colorSample;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return volumetricClouds;
|
||||||
|
}
|
@ -0,0 +1,191 @@
|
|||||||
|
#if CLOUD_UNBOUND_SIZE_MULT != 100
|
||||||
|
#define CLOUD_UNBOUND_SIZE_MULT_M CLOUD_UNBOUND_SIZE_MULT * 0.01
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if CLOUD_QUALITY == 1
|
||||||
|
const float cloudStretchRaw = 11.0;
|
||||||
|
#elif CLOUD_QUALITY == 2
|
||||||
|
const float cloudStretchRaw = 16.0;
|
||||||
|
#elif CLOUD_QUALITY == 3
|
||||||
|
const float cloudStretchRaw = 18.0;
|
||||||
|
#endif
|
||||||
|
#if CLOUD_UNBOUND_SIZE_MULT <= 100
|
||||||
|
const float cloudStretch = cloudStretchRaw;
|
||||||
|
#else
|
||||||
|
const float cloudStretch = cloudStretchRaw / float(CLOUD_UNBOUND_SIZE_MULT_M);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const float cloudHeightShader = cloudStretch * 2.0;
|
||||||
|
|
||||||
|
float Noise3D(vec3 p) {
|
||||||
|
p.z = fract(p.z) * 128.0;
|
||||||
|
float iz = floor(p.z);
|
||||||
|
float fz = fract(p.z);
|
||||||
|
vec2 a_off = vec2(23.0, 29.0) * (iz) / 128.0;
|
||||||
|
vec2 b_off = vec2(23.0, 29.0) * (iz + 1.0) / 128.0;
|
||||||
|
float a = texture2D(noisetex, p.xy + a_off).r;
|
||||||
|
float b = texture2D(noisetex, p.xy + b_off).r;
|
||||||
|
return mix(a, b, fz);
|
||||||
|
}
|
||||||
|
|
||||||
|
float GetCloudNoise(vec3 tracePos, int cloudAltitude, float lTracePosXZ, float cloudPlayerPosY) {
|
||||||
|
vec3 tracePosM = tracePos.xyz * 0.00016;
|
||||||
|
float wind = 0.0006;
|
||||||
|
float noise = 0.0;
|
||||||
|
float currentPersist = 1.0;
|
||||||
|
float total = 0.0;
|
||||||
|
|
||||||
|
#if CLOUD_SPEED_MULT == 100
|
||||||
|
#define CLOUD_SPEED_MULT_M CLOUD_SPEED_MULT * 0.01
|
||||||
|
wind *= syncedTime;
|
||||||
|
#else
|
||||||
|
#define CLOUD_SPEED_MULT_M CLOUD_SPEED_MULT * 0.01
|
||||||
|
wind *= frameTimeCounter * CLOUD_SPEED_MULT_M;
|
||||||
|
#endif
|
||||||
|
#if CLOUD_UNBOUND_SIZE_MULT != 100
|
||||||
|
tracePosM *= CLOUD_UNBOUND_SIZE_MULT_M;
|
||||||
|
wind *= CLOUD_UNBOUND_SIZE_MULT_M;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if CLOUD_QUALITY == 1
|
||||||
|
int sampleCount = 2;
|
||||||
|
float persistance = 0.6;
|
||||||
|
float noiseMult = 0.95;
|
||||||
|
tracePosM *= 0.5; wind *= 0.5;
|
||||||
|
#elif CLOUD_QUALITY == 2
|
||||||
|
int sampleCount = 4;
|
||||||
|
float persistance = 0.5;
|
||||||
|
float noiseMult = 1.07;
|
||||||
|
#elif CLOUD_QUALITY == 3
|
||||||
|
int sampleCount = 4;
|
||||||
|
float persistance = 0.5;
|
||||||
|
float noiseMult = 1.0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (int i = 0; i < sampleCount; i++) {
|
||||||
|
#if CLOUD_QUALITY >= 2
|
||||||
|
noise += Noise3D(tracePosM + vec3(wind, 0.0, 0.0)) * currentPersist;
|
||||||
|
#else
|
||||||
|
noise += texture2D(noisetex, tracePosM.xz + vec2(wind, 0.0)).b * currentPersist;
|
||||||
|
#endif
|
||||||
|
total += currentPersist;
|
||||||
|
|
||||||
|
tracePosM *= 3.0;
|
||||||
|
wind *= 0.5;
|
||||||
|
currentPersist *= persistance;
|
||||||
|
}
|
||||||
|
noise = pow2(noise / total);
|
||||||
|
noiseMult *= 0.65 + 0.01 * sqrt(lTracePosXZ + 10.0) // more clouds far away
|
||||||
|
+ 0.1 * clamp01(-cloudPlayerPosY / cloudHeightShader) // more clouds when camera is above them
|
||||||
|
+ 0.4 * rainFactor + 0.5 ; // more clouds during rain
|
||||||
|
noise *= noiseMult * CLOUD_UNBOUND_AMOUNT;
|
||||||
|
|
||||||
|
float threshold = clamp(abs(cloudAltitude - tracePos.y) / cloudStretch, 0.001, 0.999);
|
||||||
|
threshold = pow2(pow2(pow2(threshold)));
|
||||||
|
return noise - (threshold * 0.2 + 0.25);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 GetVolumetricClouds(int cloudAltitude, float distanceThreshold, inout float cloudLinearDepth, float skyFade, float skyMult0, vec3 nPlayerPos, float lViewPosM, float VdotS, float VdotU, float dither) {
|
||||||
|
vec4 volumetricClouds = vec4(0.0);
|
||||||
|
|
||||||
|
float higherPlaneAltitude = cloudAltitude + cloudStretch;
|
||||||
|
float lowerPlaneAltitude = cloudAltitude - cloudStretch;
|
||||||
|
|
||||||
|
float lowerPlaneDistance = (lowerPlaneAltitude - cameraPosition.y) / nPlayerPos.y;
|
||||||
|
float higherPlaneDistance = (higherPlaneAltitude - cameraPosition.y) / nPlayerPos.y;
|
||||||
|
float minPlaneDistance = min(lowerPlaneDistance, higherPlaneDistance);
|
||||||
|
minPlaneDistance = max(minPlaneDistance, 0.0);
|
||||||
|
float maxPlaneDistance = max(lowerPlaneDistance, higherPlaneDistance);
|
||||||
|
if (maxPlaneDistance < 0.0) return vec4(0.0);
|
||||||
|
float planeDistanceDif = maxPlaneDistance - minPlaneDistance;
|
||||||
|
|
||||||
|
#if CLOUD_QUALITY == 1
|
||||||
|
float stepMult = 16.0;
|
||||||
|
#elif CLOUD_QUALITY == 2
|
||||||
|
float stepMult = 24.0;
|
||||||
|
#elif CLOUD_QUALITY == 3
|
||||||
|
float stepMult = 16.0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if CLOUD_UNBOUND_SIZE_MULT > 100
|
||||||
|
stepMult = stepMult / sqrt(float(CLOUD_UNBOUND_SIZE_MULT_M));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int sampleCount = int(planeDistanceDif / stepMult + dither + 1);
|
||||||
|
vec3 traceAdd = nPlayerPos * stepMult;
|
||||||
|
vec3 tracePos = cameraPosition + minPlaneDistance * nPlayerPos;
|
||||||
|
tracePos += traceAdd * dither;
|
||||||
|
tracePos.y -= traceAdd.y;
|
||||||
|
|
||||||
|
float firstHitPos = 0.0;
|
||||||
|
float VdotSM1 = max0(sunVisibility > 0.5 ? VdotS : - VdotS);
|
||||||
|
float VdotSM1M = VdotSM1 * invRainFactor;
|
||||||
|
float VdotSM2 = pow2(VdotSM1) * abs(sunVisibility - 0.5) * 2.0;
|
||||||
|
float VdotSM3 = VdotSM2 * (2.5 + rainFactor) + 1.5 * rainFactor;
|
||||||
|
|
||||||
|
for (int i = 0; i < sampleCount; i++) {
|
||||||
|
tracePos += traceAdd;
|
||||||
|
|
||||||
|
if (abs(tracePos.y - cloudAltitude) > cloudStretch) break;
|
||||||
|
|
||||||
|
vec3 cloudPlayerPos = tracePos - cameraPosition;
|
||||||
|
float lTracePos = length(cloudPlayerPos);
|
||||||
|
float lTracePosXZ = length(cloudPlayerPos.xz);
|
||||||
|
float cloudMult = 1.0;
|
||||||
|
if (lTracePosXZ > distanceThreshold) break;
|
||||||
|
if (lTracePos > lViewPosM) {
|
||||||
|
if (skyFade < 0.7) continue;
|
||||||
|
else cloudMult = skyMult0;
|
||||||
|
}
|
||||||
|
|
||||||
|
float cloudNoise = GetCloudNoise(tracePos, cloudAltitude, lTracePosXZ, cloudPlayerPos.y);
|
||||||
|
|
||||||
|
if (cloudNoise > 0.00001) {
|
||||||
|
#if defined CLOUD_CLOSED_AREA_CHECK && defined REALTIME_SHADOWS
|
||||||
|
if (GetShadowOnCloud(tracePos, cloudAltitude, lowerPlaneAltitude, higherPlaneAltitude)) {
|
||||||
|
if (eyeBrightness.y != 240) continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (firstHitPos < 1.0) {
|
||||||
|
firstHitPos = lTracePos;
|
||||||
|
#if CLOUD_QUALITY == 1
|
||||||
|
tracePos.y += 4.0 * (texture2D(noisetex, tracePos.xz * 0.001).r - 0.5);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
float opacityFactor = min1(cloudNoise * 8.0);
|
||||||
|
|
||||||
|
float cloudShading = 1.0 - (higherPlaneAltitude - tracePos.y) / cloudHeightShader;
|
||||||
|
cloudShading *= 1.0 + 0.75 * VdotSM3 * (1.0 - opacityFactor);
|
||||||
|
|
||||||
|
vec3 colorSample = cloudAmbientColor * (0.7 + 0.3 * cloudShading) + cloudLightColor * cloudShading;
|
||||||
|
//vec3 colorSample = 2.5 * cloudLightColor * pow2(cloudShading); // <-- Used this to take the Unbound logo
|
||||||
|
#ifdef IS_IRIS
|
||||||
|
vec2 lightningAdd = lightningFlashEffect(tracePos - cameraPosition, lightningBoltPosition.xyz, vec3(1.0), 400.0) * lightningBoltPosition.w * 10.0;
|
||||||
|
colorSample += lightningAdd.y;
|
||||||
|
#else
|
||||||
|
vec2 lightningAdd = lightningFlashEffect(tracePos - cameraPosition, vec3(0.0, exp(1.0) - 1000.0, 0.0), vec3(1.0), 400.0) * lightningFlashOptifine * 10.0;
|
||||||
|
colorSample += lightningAdd.y;
|
||||||
|
#endif
|
||||||
|
vec3 cloudSkyColor = GetSky(VdotU, VdotS, dither, true, false);
|
||||||
|
float cloudFogFactor = clamp((distanceThreshold - lTracePosXZ) / distanceThreshold, 0.0, 0.8) * 1.25;
|
||||||
|
float skyMult1 = 1.0 - 0.2 * (1.0 - skyFade) * max(sunVisibility2, nightFactor);
|
||||||
|
float skyMult2 = 1.0 - 0.33333 * skyFade;
|
||||||
|
colorSample = mix(cloudSkyColor, colorSample * skyMult1, cloudFogFactor * skyMult2 * 0.72);
|
||||||
|
colorSample *= pow2(1.0 - max(blindness, darknessFactor));
|
||||||
|
|
||||||
|
volumetricClouds.rgb = mix(volumetricClouds.rgb, colorSample, 1.0 - min1(volumetricClouds.a));
|
||||||
|
volumetricClouds.a += opacityFactor * pow(cloudFogFactor, 0.5 + 10.0 * pow(abs(VdotSM1M), 90.0)) * cloudMult;
|
||||||
|
|
||||||
|
if (volumetricClouds.a > 0.9) {
|
||||||
|
volumetricClouds.a = 1.0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volumetricClouds.a > 0.5) cloudLinearDepth = sqrt(firstHitPos / far);
|
||||||
|
|
||||||
|
return volumetricClouds;
|
||||||
|
}
|
@ -0,0 +1,63 @@
|
|||||||
|
#ifndef INCLUDE_ENDERBEAMS
|
||||||
|
#define INCLUDE_ENDERBEAMS
|
||||||
|
|
||||||
|
#include "/spookylib/colors/lightAndAmbientColors.glsl"
|
||||||
|
|
||||||
|
vec3 endOrangeCol = vec3(1.0, 0.3, 0.0);
|
||||||
|
vec3 beamPurple = normalize(ambientColor * ambientColor * ambientColor) * (2.5 - 1.0 * vlFactor);
|
||||||
|
vec3 beamOrange = endOrangeCol * (300.0 + 700.0 * vlFactor);
|
||||||
|
|
||||||
|
vec2 wind = vec2(syncedTime * 0.00);
|
||||||
|
|
||||||
|
float BeamNoise(vec2 planeCoord, vec2 wind) {
|
||||||
|
float noise = texture2D(noisetex, planeCoord * 0.175 - wind * 0.0625).b;
|
||||||
|
noise+= texture2D(noisetex, planeCoord * 0.04375 + wind * 0.0375).b * 5.0;
|
||||||
|
|
||||||
|
return noise;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 DrawEnderBeams(float VdotU, vec3 playerPos) {
|
||||||
|
int sampleCount = 8;
|
||||||
|
|
||||||
|
float VdotUM = 1.0 - VdotU * VdotU;
|
||||||
|
float VdotUM2 = VdotUM + smoothstep1(pow2(pow2(1.0 - abs(VdotU)))) * 0.2;
|
||||||
|
|
||||||
|
vec4 beams = vec4(0.0);
|
||||||
|
float gradientMix = 1.0;
|
||||||
|
for(int i = 0; i < sampleCount; i++) {
|
||||||
|
vec2 planeCoord = playerPos.xz + cameraPosition.xz;
|
||||||
|
planeCoord *= (1.0 + i * 6.0 / sampleCount) * 0.0014;
|
||||||
|
|
||||||
|
float noise = BeamNoise(planeCoord, wind);
|
||||||
|
noise = max(0.75 - 1.0 / abs(noise - (4.0 + VdotUM * 2.0)), 0.0) * 3.0;
|
||||||
|
|
||||||
|
if (noise > 0.0) {
|
||||||
|
noise *= 0.65;
|
||||||
|
float fireNoise = texture2D(noisetex, abs(planeCoord * 0.2) - wind).b;
|
||||||
|
noise *= 0.5 * fireNoise + 0.75;
|
||||||
|
noise = noise * noise * 3.0 / sampleCount;
|
||||||
|
noise *= VdotUM2;
|
||||||
|
|
||||||
|
vec3 beamColor = beamPurple;
|
||||||
|
beamColor += beamOrange * pow2(pow2(fireNoise - 0.5));
|
||||||
|
beamColor *= gradientMix / sampleCount;
|
||||||
|
|
||||||
|
noise *= exp2(-6.0 * i / float(sampleCount));
|
||||||
|
beams += vec4(noise * beamColor, noise);
|
||||||
|
}
|
||||||
|
gradientMix += 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef IS_IRIS
|
||||||
|
beams.rgb += 0.2 * lightningBoltPosition.w;
|
||||||
|
#else
|
||||||
|
beams.rgb += 0.3 * lightningFlashOptifine;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
beams.rgb *= beams.a * beams.a * beams.a * 3.5;
|
||||||
|
beams.rgb = sqrt(beams.rgb);
|
||||||
|
|
||||||
|
return beams.rgb;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,29 @@
|
|||||||
|
float GetEnderStarNoise(vec2 pos) {
|
||||||
|
return fract(sin(dot(pos, vec2(12.9898, 4.1414))) * 43758.54953);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 GetEnderStars(vec3 viewPos, float VdotU) {
|
||||||
|
vec3 wpos = normalize((gbufferModelViewInverse * vec4(viewPos * 1000.0, 1.0)).xyz);
|
||||||
|
|
||||||
|
vec3 starCoord = 0.65 * wpos / (abs(wpos.y) + length(wpos.xz));
|
||||||
|
vec2 starCoord2 = starCoord.xz * 0.5;
|
||||||
|
if (VdotU < 0.0) starCoord2 += 100.0;
|
||||||
|
float starFactor = 1024.0;
|
||||||
|
starCoord2 = floor(starCoord2 * starFactor) / starFactor;
|
||||||
|
|
||||||
|
float star = 1.0;
|
||||||
|
star *= GetEnderStarNoise(starCoord2.xy);
|
||||||
|
star *= GetEnderStarNoise(starCoord2.xy+0.1);
|
||||||
|
star *= GetEnderStarNoise(starCoord2.xy+0.23);
|
||||||
|
star = max(star - 0.7, 0.0);
|
||||||
|
star *= star;
|
||||||
|
|
||||||
|
vec3 enderStars = star * endSkyColor * 3000.0;
|
||||||
|
|
||||||
|
float VdotUM1 = abs(VdotU);
|
||||||
|
float VdotUM2 = pow2(1.0 - VdotUM1);
|
||||||
|
enderStars *= VdotUM1 * VdotUM1 * (VdotUM2 + 0.015) + 0.015;
|
||||||
|
//if (gl_FragCoord.x > 960.0) enderStars = vec3(VdotUM1); else enderStars = vec3(VdotUM2);
|
||||||
|
|
||||||
|
return enderStars;
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
#ifdef CAVE_FOG
|
||||||
|
#include "/spookylib/atmospherics/fog/caveFactor.glsl"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const float rainBloomAdd = 8.0;
|
||||||
|
const float nightBloomAdd = 3.0;
|
||||||
|
const float caveBloomAdd = 10.0;
|
||||||
|
const float waterBloomAdd = 14.0;
|
||||||
|
|
||||||
|
#ifdef BORDER_FOG
|
||||||
|
const float netherBloomAdd = 14.0;
|
||||||
|
#else
|
||||||
|
const float netherBloomAdd = 3.0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
float GetBloomFog(float lViewPos) {
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
float bloomFog = pow2(pow2(1.0 - exp(- lViewPos * (0.02 + 0.04 * float(isEyeInWater == 1)))));
|
||||||
|
|
||||||
|
float bloomFogMult;
|
||||||
|
if (isEyeInWater != 1) {
|
||||||
|
bloomFogMult = (rainFactor2 * rainBloomAdd + nightBloomAdd * (1.0 - sunFactor)) * eyeBrightnessM;
|
||||||
|
#ifdef CAVE_FOG
|
||||||
|
bloomFogMult += GetCaveFactor() * caveBloomAdd;
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
bloomFogMult = waterBloomAdd;
|
||||||
|
}
|
||||||
|
#elif defined NETHER
|
||||||
|
float bloomFog = lViewPos / clamp(far, 128.0, 256.0); // consistency9023HFUE85JG
|
||||||
|
bloomFog *= bloomFog * bloomFog;
|
||||||
|
bloomFog = 1.0 - exp(-8.0 * bloomFog);
|
||||||
|
bloomFog *= float(isEyeInWater == 0);
|
||||||
|
|
||||||
|
float bloomFogMult = netherBloomAdd;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bloomFogMult *= BLOOM_STRENGTH * 8.33333;
|
||||||
|
|
||||||
|
return 1.0 + bloomFog * bloomFogMult;
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
#ifndef INCLUDE_CAVE_FACTOR
|
||||||
|
#define INCLUDE_CAVE_FACTOR
|
||||||
|
float GetCaveFactor() {
|
||||||
|
return clamp(1.0 - cameraPosition.y / oceanAltitude, 0.0, 1.0 - eyeBrightnessM);
|
||||||
|
}
|
||||||
|
#endif
|
@ -0,0 +1,192 @@
|
|||||||
|
#include "/spookylib/colors/colorMultipliers.glsl"
|
||||||
|
|
||||||
|
#ifdef BORDER_FOG
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
#include "/spookylib/atmospherics/sky.glsl"
|
||||||
|
#elif defined NETHER
|
||||||
|
#include "/spookylib/colors/skyColors.glsl"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void DoBorderFog(inout vec3 color, inout float skyFade, float lPlayerPosXZ, float VdotU, float VdotS, float dither) {
|
||||||
|
#if defined OVERWORLD || defined END
|
||||||
|
float fog = lPlayerPosXZ / far;
|
||||||
|
fog *= fog;
|
||||||
|
fog = 1.0 - exp(-3.0 * fog);
|
||||||
|
#endif
|
||||||
|
#ifdef NETHER
|
||||||
|
float farM = min(far, 256.0); // consistency9023HFUE85JG
|
||||||
|
float fog = lPlayerPosXZ / farM;
|
||||||
|
fog = pow(fog, 2.0 - farM / 256.0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (fog > 0.0) {
|
||||||
|
fog = clamp(fog, 0.0, 1.0);
|
||||||
|
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
vec3 fogColorM = GetSky(VdotU, VdotS, dither, true, false);
|
||||||
|
#elif defined NETHER
|
||||||
|
vec3 fogColorM = netherColor;
|
||||||
|
#else
|
||||||
|
vec3 fogColorM = endSkyColor;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
fogColorM *= atmColorMult;
|
||||||
|
|
||||||
|
color = mix(color, fogColorM, fog);
|
||||||
|
|
||||||
|
#ifndef GBUFFERS_WATER
|
||||||
|
skyFade = fog;
|
||||||
|
#else
|
||||||
|
skyFade = fog * (1.0 - isEyeInWater);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CAVE_FOG
|
||||||
|
#include "/spookylib/atmospherics/fog/caveFactor.glsl"
|
||||||
|
|
||||||
|
void DoCaveFog(inout vec3 color, float lViewPos) {
|
||||||
|
float fog = GetCaveFactor() * (0.9 - 0.9 * exp(- lViewPos * 0.015));
|
||||||
|
|
||||||
|
color = mix(color, caveFogColor, fog);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef ATMOSPHERIC_FOG
|
||||||
|
#include "/spookylib/colors/lightAndAmbientColors.glsl"
|
||||||
|
#include "/spookylib/colors/skyColors.glsl"
|
||||||
|
|
||||||
|
// SRATA: Atm. fog starts reducing above this altitude
|
||||||
|
// CRFTM: Atm. fog continues reducing for this meters
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
#define atmFogSRATA ATM_FOG_ALTITUDE + 0.1
|
||||||
|
float atmFogCRFTM = 60.0;
|
||||||
|
#else
|
||||||
|
float atmFogSRATA = 55.1;
|
||||||
|
float atmFogCRFTM = 30.0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
float GetAtmFogAltitudeFactor(float altitude) {
|
||||||
|
float altitudeFactor = pow2(1.0 - clamp(altitude - atmFogSRATA, 0.0, atmFogCRFTM) / atmFogCRFTM);
|
||||||
|
#ifndef LIGHTSHAFTS_ACTIVE
|
||||||
|
altitudeFactor = mix(altitudeFactor, 1.0, rainFactor * 0.2);
|
||||||
|
#endif
|
||||||
|
return altitudeFactor;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoAtmosphericFog(inout vec3 color, vec3 playerPos, float lViewPos, float VdotS) {
|
||||||
|
float renDisFactor = min1(192.0 / far);
|
||||||
|
|
||||||
|
#if ATM_FOG_DISTANCE != 100
|
||||||
|
#define ATM_FOG_DISTANCE_M 100.0 / ATM_FOG_DISTANCE;
|
||||||
|
renDisFactor *= ATM_FOG_DISTANCE_M;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
float fog = 1.0 - exp(-pow(lViewPos * (0.001 - 0.0007 * rainFactor), 2.0 - rainFactor2) * lViewPos * renDisFactor * 100.0);
|
||||||
|
fog *= max(ATM_FOG_MULT, 1.0) - 0.1 - 0.15 * invRainFactor;
|
||||||
|
|
||||||
|
float altitudeFactorP = GetAtmFogAltitudeFactor(playerPos.y + cameraPosition.y);
|
||||||
|
float altitudeFactor = altitudeFactorP;
|
||||||
|
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
altitudeFactor *= 1.0 - 0.75 * GetAtmFogAltitudeFactor(cameraPosition.y) * invRainFactor;
|
||||||
|
|
||||||
|
#ifdef CAVE_FOG
|
||||||
|
fog *= 0.2 + 0.8 * sqrt2(eyeBrightnessM);
|
||||||
|
fog *= 1.0 - GetCaveFactor();
|
||||||
|
fog *= 1.5;
|
||||||
|
fog *= mix(1.0, 0.6, rainFactor);
|
||||||
|
#else
|
||||||
|
fog *= eyeBrightnessM;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
fog *= altitudeFactor * 0.9 + 0.1;
|
||||||
|
|
||||||
|
if (fog > 0.0) {
|
||||||
|
fog = clamp(fog, 0.0, 1.0);
|
||||||
|
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
float nightFogMult = 2.5 - 0.625 * pow2(pow2(altitudeFactorP));
|
||||||
|
float dayNightFogBlend = pow(invNightFactor, 4.0 - VdotS - 2.5 * sunVisibility2);
|
||||||
|
vec3 fogColorM = mix(
|
||||||
|
nightUpSkyColor * (nightFogMult - dayNightFogBlend * nightFogMult),
|
||||||
|
dayDownSkyColor * (0.9 + 0.2 * noonFactor),
|
||||||
|
dayNightFogBlend
|
||||||
|
) * 0.5;
|
||||||
|
#else
|
||||||
|
vec3 fogColorM = endSkyColor;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
fogColorM *= atmColorMult;
|
||||||
|
|
||||||
|
color = mix(color, fogColorM, fog);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "/spookylib/atmospherics/fog/waterFog.glsl"
|
||||||
|
|
||||||
|
void DoWaterFog(inout vec3 color, float lViewPos) {
|
||||||
|
float fog = GetWaterFog(lViewPos);
|
||||||
|
|
||||||
|
color = mix(color, waterFogColor, fog) * 0.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoLavaFog(inout vec3 color, float lViewPos) {
|
||||||
|
float fog = (lViewPos * 3.0 - gl_Fog.start) * gl_Fog.scale;
|
||||||
|
|
||||||
|
#ifdef LESS_LAVA_FOG
|
||||||
|
fog = sqrt(fog) * 0.4;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
fog = 1.0 - exp(-fog);
|
||||||
|
|
||||||
|
fog = clamp(fog, 0.0, 1.0);
|
||||||
|
color = mix(color, fogColor * 5.0, fog);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoPowderSnowFog(inout vec3 color, float lViewPos) {
|
||||||
|
float fog = lViewPos;
|
||||||
|
fog *= fog;
|
||||||
|
fog = 1.0 - exp(-fog);
|
||||||
|
|
||||||
|
fog = clamp(fog, 0.0, 1.0);
|
||||||
|
color = mix(color, fogColor, fog);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoBlindnessFog(inout vec3 color, float lViewPos) {
|
||||||
|
float fog = lViewPos * 0.3 * blindness;
|
||||||
|
fog *= fog;
|
||||||
|
fog = 1.0 - exp(-fog);
|
||||||
|
|
||||||
|
fog = clamp(fog, 0.0, 1.0);
|
||||||
|
color = mix(color, vec3(0.0), fog);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoDarknessFog(inout vec3 color, float lViewPos) {
|
||||||
|
float fog = lViewPos * 0.075 * darknessFactor;
|
||||||
|
fog *= fog;
|
||||||
|
fog *= fog;
|
||||||
|
color *= exp(-fog);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoFog(inout vec3 color, inout float skyFade, float lViewPos, vec3 playerPos, float VdotU, float VdotS, float dither) {
|
||||||
|
#ifdef CAVE_FOG
|
||||||
|
DoCaveFog(color, lViewPos);
|
||||||
|
#endif
|
||||||
|
#ifdef ATMOSPHERIC_FOG
|
||||||
|
DoAtmosphericFog(color, playerPos, lViewPos, VdotS);
|
||||||
|
#endif
|
||||||
|
#ifdef BORDER_FOG
|
||||||
|
DoBorderFog(color, skyFade, length(playerPos.xz), VdotU, VdotS, dither);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (isEyeInWater == 1) DoWaterFog(color, lViewPos);
|
||||||
|
else if (isEyeInWater == 2) DoLavaFog(color, lViewPos);
|
||||||
|
else if (isEyeInWater == 3) DoPowderSnowFog(color, lViewPos);
|
||||||
|
|
||||||
|
if (blindness > 0.00001) DoBlindnessFog(color, lViewPos);
|
||||||
|
if (darknessFactor > 0.00001) DoDarknessFog(color, lViewPos);
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
#ifndef INCLUDE_WATER_FOG
|
||||||
|
#define INCLUDE_WATER_FOG
|
||||||
|
float GetWaterFog(float lViewPos) {
|
||||||
|
#if WATER_FOG_MULT != 100
|
||||||
|
#define WATER_FOG_MULT_M WATER_FOG_MULT * 0.01;
|
||||||
|
lViewPos *= WATER_FOG_MULT_M;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if LIGHTSHAFT_QUALI > 0 && defined REALTIME_SHADOWS
|
||||||
|
float fog = lViewPos / 48.0;
|
||||||
|
fog *= fog;
|
||||||
|
#else
|
||||||
|
float fog = lViewPos / 32.0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return 1.0 - exp(-fog);
|
||||||
|
}
|
||||||
|
#endif
|
@ -0,0 +1,91 @@
|
|||||||
|
float Noise3D(vec3 p) {
|
||||||
|
p.z = fract(p.z) * 128.0;
|
||||||
|
float iz = floor(p.z);
|
||||||
|
float fz = fract(p.z);
|
||||||
|
vec2 a_off = vec2(23.0, 29.0) * (iz) / 128.0;
|
||||||
|
vec2 b_off = vec2(23.0, 29.0) * (iz + 1.0) / 128.0;
|
||||||
|
float a = texture2D(noisetex, p.xy + a_off).r;
|
||||||
|
float b = texture2D(noisetex, p.xy + b_off).r;
|
||||||
|
return mix(a, b, fz);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 GetNetherStorm(vec3 color, vec3 translucentMult, vec3 playerPos, vec3 viewPos, float lViewPos, float lViewPos1, float dither) {
|
||||||
|
vec4 netherStorm = vec4(1.0, 1.0, 1.0, 0.0);
|
||||||
|
vec3 nPlayerPos = normalize(playerPos);
|
||||||
|
|
||||||
|
#ifdef BORDER_FOG
|
||||||
|
float maxDist = min(far, 256.0); // consistency9023HFUE85JG
|
||||||
|
#else
|
||||||
|
float maxDist = far;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef LOW_QUALITY_NETHER_STORM
|
||||||
|
int sampleCount = int(maxDist / 8.0 + 0.001);
|
||||||
|
|
||||||
|
vec3 traceAdd = nPlayerPos * maxDist / sampleCount;
|
||||||
|
vec3 tracePos = cameraPosition;
|
||||||
|
tracePos += traceAdd * dither;
|
||||||
|
#else
|
||||||
|
int sampleCount = int(maxDist / 16.0 + 0.001);
|
||||||
|
|
||||||
|
vec3 traceAdd = 0.75 * nPlayerPos * maxDist / sampleCount;
|
||||||
|
vec3 tracePos = cameraPosition;
|
||||||
|
tracePos += traceAdd * dither;
|
||||||
|
tracePos += traceAdd * sampleCount * 0.25;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
vec3 translucentMultM = pow(translucentMult, vec3(1.0 / sampleCount));
|
||||||
|
|
||||||
|
for (int i = 0; i < sampleCount; i++) {
|
||||||
|
tracePos += traceAdd;
|
||||||
|
|
||||||
|
vec3 tracedPlayerPos = tracePos - cameraPosition;
|
||||||
|
float lTracePos = length(tracedPlayerPos);
|
||||||
|
if (lTracePos > lViewPos1) break;
|
||||||
|
|
||||||
|
vec3 wind = vec3(frameTimeCounter * 0.002);
|
||||||
|
|
||||||
|
vec3 tracePosM = tracePos * 0.001;
|
||||||
|
tracePosM.y += tracePosM.x;
|
||||||
|
tracePosM += Noise3D(tracePosM - wind) * 0.01;
|
||||||
|
tracePosM = tracePosM * vec3(2.0, 0.5, 2.0);
|
||||||
|
|
||||||
|
float traceAltitudeM = abs(tracePos.y - NETHER_STORM_LOWER_ALT);
|
||||||
|
if (tracePos.y < NETHER_STORM_LOWER_ALT) traceAltitudeM *= 10.0;
|
||||||
|
traceAltitudeM = 1.0 - min1(abs(traceAltitudeM) / NETHER_STORM_HEIGHT);
|
||||||
|
|
||||||
|
for (int h = 0; h < 4; h++) {
|
||||||
|
float stormSample = pow2(Noise3D(tracePosM + wind));
|
||||||
|
stormSample *= traceAltitudeM;
|
||||||
|
stormSample = pow2(pow2(stormSample));
|
||||||
|
stormSample *= sqrt1(max0(1.0 - lTracePos / maxDist));
|
||||||
|
|
||||||
|
netherStorm.a += stormSample;
|
||||||
|
tracePosM *= 2.0;
|
||||||
|
wind *= -2.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef IS_IRIS
|
||||||
|
vec2 lightningAdd = lightningFlashEffect(tracePos - cameraPosition, lightningBoltPosition.xyz, vec3(1.0), 150.0) * lightningBoltPosition.w * 8.0;
|
||||||
|
netherStorm.rgb += lightningAdd.y;
|
||||||
|
#else
|
||||||
|
vec2 lightningAdd = lightningFlashEffect(tracePos - cameraPosition, vec3(0.0, exp(1.0) - 1000.0, 0.0), vec3(1.0), 80.0) * lightningFlashOptifine * 10.0;
|
||||||
|
netherStorm.rgb += lightningAdd.y;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (lTracePos > lViewPos) netherStorm.rgb *= translucentMultM;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef LOW_QUALITY_NETHER_STORM
|
||||||
|
netherStorm.a *= 1.8;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
netherStorm.a = min1(netherStorm.a * NETHER_STORM_I);
|
||||||
|
|
||||||
|
netherStorm.rgb *= netherColor * 3.0;
|
||||||
|
|
||||||
|
//if (netherStorm.a > 0.98) netherStorm.rgb = vec3(1,0,1);
|
||||||
|
//netherStorm.a *= 1.0 - max0(netherStorm.a - 0.98) * 50.0;
|
||||||
|
|
||||||
|
return netherStorm;
|
||||||
|
}
|
@ -0,0 +1,96 @@
|
|||||||
|
#include "/spookylib/atmospherics/stars.glsl"
|
||||||
|
|
||||||
|
// Nebula implementation by flytrap https://godotshaders.com/shader/2d-nebula-shader/
|
||||||
|
|
||||||
|
#ifndef HQ_NIGHT_NEBULA
|
||||||
|
const int OCTAVE = 5;
|
||||||
|
#else
|
||||||
|
const int OCTAVE = 8;
|
||||||
|
#endif
|
||||||
|
const float timescale = 5.0;
|
||||||
|
const float zoomScale = 3.0;
|
||||||
|
const vec4 CLOUD1_COL = vec4(0.41, 0.64, 0.97, 0.4);
|
||||||
|
const vec4 CLOUD2_COL = vec4(0.81, 0.55, 0.21, 0.2);
|
||||||
|
const vec4 CLOUD3_COL = vec4(0.51, 0.81, 0.98, 1.0);
|
||||||
|
|
||||||
|
float rand(vec2 inCoord){
|
||||||
|
return fract(sin(dot(inCoord, vec2(23.53, 44.0))) * 42350.45);
|
||||||
|
}
|
||||||
|
|
||||||
|
float perlin(vec2 inCoord){
|
||||||
|
vec2 i = floor(inCoord);
|
||||||
|
vec2 j = fract(inCoord);
|
||||||
|
vec2 coord = smoothstep(0.0, 1.0, j);
|
||||||
|
|
||||||
|
float a = rand(i);
|
||||||
|
float b = rand(i + vec2(1.0, 0.0));
|
||||||
|
float c = rand(i + vec2(0.0, 1.0));
|
||||||
|
float d = rand(i + vec2(1.0, 1.0));
|
||||||
|
|
||||||
|
return mix(mix(a, b, coord.x), mix(c, d, coord.x), coord.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
float fbmCloud(vec2 inCoord, float minimum){
|
||||||
|
float value = 0.0;
|
||||||
|
float scale = 0.5;
|
||||||
|
|
||||||
|
for(int i = 0; i < OCTAVE; i++){
|
||||||
|
value += perlin(inCoord) * scale;
|
||||||
|
inCoord *= 2.0;
|
||||||
|
scale *= 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
return smoothstep(0.0, 1.0, (smoothstep(minimum, 1.0, value) - minimum) / (1.0 - minimum));
|
||||||
|
}
|
||||||
|
|
||||||
|
float fbmCloud2(vec2 inCoord, float minimum){
|
||||||
|
float value = 0.0;
|
||||||
|
float scale = 0.5;
|
||||||
|
|
||||||
|
for(int i = 0; i < OCTAVE; i++){
|
||||||
|
value += perlin(inCoord) * scale;
|
||||||
|
inCoord *= 2.0;
|
||||||
|
scale *= 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (smoothstep(minimum, 1.0, value) - minimum) / (1.0 - minimum);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 GetNightNebula(vec3 viewPos, float VdotU, float VdotS) {
|
||||||
|
float nebulaFactor = pow2(max0(VdotU) * min1(nightFactor * 2.0));
|
||||||
|
nebulaFactor *= mix(1.0, invRainFactor, heightRelativeToCloud);
|
||||||
|
if (nebulaFactor < 0.001) return vec3(0.0);
|
||||||
|
|
||||||
|
vec2 UV = GetStarCoord(viewPos, 0.5);
|
||||||
|
float TIME = syncedTime * 0.003 + 15.0;
|
||||||
|
|
||||||
|
float timescaled = TIME * timescale;
|
||||||
|
vec2 zoomUV2
|
||||||
|
= vec2(zoomScale * UV.x + 0.03 * timescaled * sin(0.07 * timescaled), zoomScale * UV.y + 0.03 * timescaled * cos(0.06 * timescaled));
|
||||||
|
vec2 zoomUV3
|
||||||
|
= vec2(zoomScale * UV.x + 0.027 * timescaled * sin(0.07 * timescaled), zoomScale * UV.y + 0.025 * timescaled * cos(0.06 * timescaled));
|
||||||
|
vec2 zoomUV4
|
||||||
|
= vec2(zoomScale * UV.x + 0.021 * timescaled * sin(0.07 * timescaled), zoomScale * UV.y + 0.021 * timescaled * cos(0.07 * timescaled));
|
||||||
|
float tide = 0.05 * sin(TIME);
|
||||||
|
float tide2 = 0.06 * cos(0.3 * TIME);
|
||||||
|
|
||||||
|
vec4 nebulaTexture = vec4(vec3(0.0), 0.5 + 0.2 * sin(0.23 * TIME + UV.x - UV.y));
|
||||||
|
nebulaTexture += fbmCloud2(zoomUV3, 0.24 + tide) * CLOUD1_COL;
|
||||||
|
nebulaTexture += fbmCloud(zoomUV2 * 0.9, 0.33 - tide) * CLOUD2_COL;
|
||||||
|
nebulaTexture = mix(nebulaTexture, CLOUD3_COL, fbmCloud(vec2(0.9 * zoomUV4.x, 0.9 * zoomUV4.y), 0.25 + tide2));
|
||||||
|
|
||||||
|
//nebulaTexture = vec4(1,0,1,1);,
|
||||||
|
nebulaFactor *= 1.0 - pow2(pow2(pow2(abs(VdotS))));
|
||||||
|
nebulaTexture.a *= min1(pow2(pow2(nebulaTexture.a))) * nebulaFactor;
|
||||||
|
|
||||||
|
float starFactor = 1024.0;
|
||||||
|
vec2 starCoord = floor(UV * 0.2 * starFactor) / starFactor;
|
||||||
|
nebulaTexture.rgb *= 1.5 + 10.0 * pow2(max0(GetStarNoise(starCoord) * GetStarNoise(starCoord + 0.1) - 0.6));
|
||||||
|
|
||||||
|
#if NIGHT_NEBULA_I != 100
|
||||||
|
#define NIGHT_NEBULA_IM NIGHT_NEBULA_I * 0.01
|
||||||
|
nebulaTexture.a *= NIGHT_NEBULA_IM;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return max(nebulaTexture.rgb * nebulaTexture.a, vec3(0.0));
|
||||||
|
}
|
@ -0,0 +1,131 @@
|
|||||||
|
#ifndef INCLUDE_SKY
|
||||||
|
#define INCLUDE_SKY
|
||||||
|
|
||||||
|
#include "/spookylib/colors/lightAndAmbientColors.glsl"
|
||||||
|
#include "/spookylib/colors/skyColors.glsl"
|
||||||
|
|
||||||
|
#ifdef CAVE_FOG
|
||||||
|
#include "/spookylib/atmospherics/fog/caveFactor.glsl"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
vec3 GetSky(float VdotU, float VdotS, float dither, bool doGlare, bool doGround) {
|
||||||
|
// Prepare variables
|
||||||
|
float nightFactorM = sqrt3(nightFactor) * 0.4;
|
||||||
|
float VdotSM1 = pow2(max(VdotS, 0.0));
|
||||||
|
float VdotSM2 = pow2(VdotSM1);
|
||||||
|
float VdotSM3 = pow2(pow2(max(-VdotS, 0.0)));
|
||||||
|
float VdotSML = sunVisibility > 0.5 ? VdotS : -VdotS;
|
||||||
|
|
||||||
|
float VdotUmax0 = max(VdotU, 0.0);
|
||||||
|
float VdotUmax0M = 1.0 - pow2(VdotUmax0);
|
||||||
|
|
||||||
|
// Prepare colors
|
||||||
|
vec3 upColor = mix(nightUpSkyColor * (1.0 + nightFactorM * VdotSM3 * 1.5), dayUpSkyColor, sunFactor);
|
||||||
|
vec3 middleColor = mix(nightMiddleSkyColor, dayMiddleSkyColor * (1.0 + VdotSM2 * 0.3), sunFactor);
|
||||||
|
vec3 downColor = mix(nightDownSkyColor, dayDownSkyColor, (sunFactor + sunVisibility) * 0.5);
|
||||||
|
|
||||||
|
// Mix the colors
|
||||||
|
// Set sky gradient
|
||||||
|
float VdotUM1 = pow2(1.0 - VdotUmax0);
|
||||||
|
VdotUM1 = pow(VdotUM1, 1.0 - VdotSM2 * 0.4);
|
||||||
|
VdotUM1 = mix(VdotUM1, 1.0, rainFactor2 * 0.15);
|
||||||
|
vec3 finalSky = mix(upColor, middleColor * 0.8, VdotUM1);
|
||||||
|
|
||||||
|
// Add sunset color
|
||||||
|
float VdotUM2 = pow2(1.0 - abs(VdotU));
|
||||||
|
VdotUM2 = VdotUM2 * VdotUM2 * (3.0 - 2.0 * VdotUM2);
|
||||||
|
VdotUM2 *= (0.7 - nightFactorM + VdotSM1 * (0.3 + nightFactorM)) * invNoonFactor * sunFactor;
|
||||||
|
finalSky = mix(finalSky, sunsetDownSkyColorP * (1.0 + VdotSM1 * 0.3), VdotUM2 * invRainFactor);
|
||||||
|
|
||||||
|
// Add sky ground with fake light scattering
|
||||||
|
float VdotUM3 = min(max0(-VdotU + 0.08) / 0.35, 1.0);
|
||||||
|
VdotUM3 = smoothstep1(VdotUM3);
|
||||||
|
vec3 scatteredGroundMixer = vec3(VdotUM3 * VdotUM3, sqrt1(VdotUM3), sqrt3(VdotUM3));
|
||||||
|
scatteredGroundMixer = mix(vec3(VdotUM3), scatteredGroundMixer, 0.75 - 0.5 * rainFactor);
|
||||||
|
finalSky = mix(finalSky, downColor, scatteredGroundMixer * 0.2);
|
||||||
|
//
|
||||||
|
|
||||||
|
// Sky Ground
|
||||||
|
if (doGround)
|
||||||
|
finalSky *= smoothstep1(pow2(1.0 + min(VdotU, 0.0)));
|
||||||
|
|
||||||
|
// Apply Underwater Fog
|
||||||
|
if (isEyeInWater == 1)
|
||||||
|
finalSky = mix(finalSky * 3.0, waterFogColor, VdotUmax0M);
|
||||||
|
|
||||||
|
// Sun/Moon Glare
|
||||||
|
if (doGlare) {
|
||||||
|
if (0.0 < VdotSML) {
|
||||||
|
float glareScatter = 4.0 * (2.0 - clamp01(VdotS * 1000.0));
|
||||||
|
float VdotSM4 = pow(abs(VdotS), glareScatter);
|
||||||
|
|
||||||
|
float visfactor = 0.075;
|
||||||
|
float glare = visfactor / (1.0 - (1.0 - visfactor) * VdotSM4) - visfactor;
|
||||||
|
|
||||||
|
glare *= 0.5 + pow2(noonFactor) * 1.2;
|
||||||
|
glare *= 1.0 - rainFactor * 0.5;
|
||||||
|
|
||||||
|
float glareWaterFactor = isEyeInWater * sunVisibility;
|
||||||
|
vec3 moonGlareColor = vec3(0.502, 0.3804, 0.3804);
|
||||||
|
#if BLOOD_MOON > 0
|
||||||
|
moonGlareColor = mix(moonGlareColor, vec3(1.0, 0.0, 0.0) * 1.5, getBloodMoon(moonPhase, sunVisibility));
|
||||||
|
#endif
|
||||||
|
vec3 glareColor = mix(moonGlareColor * 0.7, vec3(0.5), sunVisibility);
|
||||||
|
glareColor = glareColor + glareWaterFactor * vec3(7.0);
|
||||||
|
glare *= 0.5;
|
||||||
|
|
||||||
|
finalSky += glare * shadowTime * glareColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CAVE_FOG
|
||||||
|
// Apply Cave Fog
|
||||||
|
finalSky = mix(finalSky, caveFogColor, GetCaveFactor() * VdotUmax0M);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Dither to fix banding
|
||||||
|
finalSky += (dither - 0.5) / 128.0;
|
||||||
|
|
||||||
|
return finalSky;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 GetLowQualitySky(float VdotU, float VdotS, float dither, bool doGlare, bool doGround) {
|
||||||
|
// Prepare variables
|
||||||
|
float VdotUmax0 = max(VdotU, 0.0);
|
||||||
|
float VdotUmax0M = 1.0 - pow2(VdotUmax0);
|
||||||
|
|
||||||
|
// Prepare colors
|
||||||
|
vec3 upColor = mix(nightUpSkyColor, dayUpSkyColor, sunFactor);
|
||||||
|
vec3 middleColor = mix(nightMiddleSkyColor, dayMiddleSkyColor, sunFactor);
|
||||||
|
|
||||||
|
// Mix the colors
|
||||||
|
// Set sky gradient
|
||||||
|
float VdotUM1 = pow2(1.0 - VdotUmax0);
|
||||||
|
VdotUM1 = mix(VdotUM1, 1.0, rainFactor2 * 0.2);
|
||||||
|
vec3 finalSky = mix(upColor, middleColor, VdotUM1);
|
||||||
|
|
||||||
|
// Add sunset color
|
||||||
|
float VdotUM2 = pow2(1.0 - abs(VdotU));
|
||||||
|
VdotUM2 *= invNoonFactor * sunFactor * (0.8 + 0.2 * VdotS);
|
||||||
|
finalSky = mix(finalSky, sunsetDownSkyColorP * (shadowTime * 0.6 + 0.2), VdotUM2 * invRainFactor);
|
||||||
|
//
|
||||||
|
|
||||||
|
// Sky Ground
|
||||||
|
finalSky *= pow2(pow2(1.0 + min(VdotU, 0.0)));
|
||||||
|
|
||||||
|
// Apply Underwater Fog
|
||||||
|
if (isEyeInWater == 1)
|
||||||
|
finalSky = mix(finalSky, waterFogColor, VdotUmax0M);
|
||||||
|
|
||||||
|
// Sun/Moon Glare
|
||||||
|
finalSky *= 1.0 + mix(nightFactor, 0.5 + 0.7 * noonFactor, VdotS * 0.5 + 0.5) * pow2(pow2(pow2(VdotS)));
|
||||||
|
|
||||||
|
#ifdef CAVE_FOG
|
||||||
|
// Apply Cave Fog
|
||||||
|
finalSky = mix(finalSky, caveFogColor, GetCaveFactor() * VdotUmax0M);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return finalSky;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,47 @@
|
|||||||
|
#include "/spookylib/colors/skyColors.glsl"
|
||||||
|
|
||||||
|
float GetStarNoise(vec2 pos) {
|
||||||
|
return fract(sin(dot(pos, vec2(12.9898, 4.1414))) * 43758.54953);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec2 GetStarCoord(vec3 viewPos, float sphereness) {
|
||||||
|
vec3 wpos = normalize((gbufferModelViewInverse * vec4(viewPos * 1000.0, 1.0)).xyz);
|
||||||
|
vec3 starCoord = wpos / (wpos.y + length(wpos.xz) * sphereness);
|
||||||
|
vec3 moonPos = vec3(gbufferModelViewInverse * vec4(- sunVec * 70.0, 1.0));
|
||||||
|
vec3 moonCoord = moonPos / (moonPos.y + length(moonPos.xz) * sphereness);
|
||||||
|
return starCoord.xz - moonCoord.xz;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 GetStars(vec2 starCoord, float VdotU, float VdotS) {
|
||||||
|
if (VdotU < 0.0) return vec3(0.0);
|
||||||
|
|
||||||
|
starCoord *= 0.4;
|
||||||
|
float starFactor = 1024.0;
|
||||||
|
starCoord = floor(starCoord * starFactor) / starFactor;
|
||||||
|
|
||||||
|
float star = 1.0;
|
||||||
|
star *= GetStarNoise(starCoord.xy);
|
||||||
|
star *= GetStarNoise(starCoord.xy+0.1);
|
||||||
|
star *= GetStarNoise(starCoord.xy+0.23);
|
||||||
|
|
||||||
|
#if NIGHT_STAR_AMOUNT == 2
|
||||||
|
star -= 0.5;
|
||||||
|
star *= 0.55;
|
||||||
|
#else
|
||||||
|
star -= 0.6;
|
||||||
|
star *= 0.65;
|
||||||
|
#endif
|
||||||
|
star = max0(star);
|
||||||
|
star *= star;
|
||||||
|
|
||||||
|
float starFogFactor = min1(VdotU * 3.0);
|
||||||
|
star *= starFogFactor * (1.0 - sunVisibility);
|
||||||
|
star *= max0(1.0 - pow(abs(VdotS) * 1.002, 100.0));
|
||||||
|
|
||||||
|
vec3 stars = 40.0 * star * vec3(0.38, 0.4, 0.5) * 2.0;
|
||||||
|
stars *= mix(1.0, invRainFactor, heightRelativeToCloud);
|
||||||
|
|
||||||
|
stars *= clamp(abs(texture2D(noisetex, starCoord + frameTimeCounter * 0.004).r - 0.5) * 10, 0.5, 1.0);
|
||||||
|
|
||||||
|
return stars;
|
||||||
|
}
|
@ -0,0 +1,262 @@
|
|||||||
|
// Volumetric tracing from Robobo1221, highly modified
|
||||||
|
|
||||||
|
#include "/spookylib/colors/lightAndAmbientColors.glsl"
|
||||||
|
|
||||||
|
float GetDepth(float depth) {
|
||||||
|
return 2.0 * near * far / (far + near - (2.0 * depth - 1.0) * (far - near));
|
||||||
|
}
|
||||||
|
|
||||||
|
float GetDistX(float dist) {
|
||||||
|
return (far * (dist - near)) / (dist * (far - near));
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 DistortShadow(vec4 shadowpos, float distortFactor) {
|
||||||
|
shadowpos.xy *= 1.0 / distortFactor;
|
||||||
|
shadowpos.z = shadowpos.z * 0.2;
|
||||||
|
shadowpos = shadowpos * 0.5 + 0.5;
|
||||||
|
|
||||||
|
return shadowpos;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 GetVolumetricLight(inout vec3 color, inout float vlFactor, vec3 translucentMult, float lViewPos, vec3 nViewPos, float VdotL, float VdotU, vec2 texCoord, float z0, float z1, float dither) {
|
||||||
|
if (max(blindness, darknessFactor) > 0.1) return vec4(0.0);
|
||||||
|
vec4 volumetricLight = vec4(0.0);
|
||||||
|
|
||||||
|
// For some reason Optifine doesn't provide correct shadowMapResolution if Shadow Quality isn't 1x
|
||||||
|
vec2 shadowMapResolutionM = textureSize(shadowtex0, 0);
|
||||||
|
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
vec3 vlColor = lightColor;
|
||||||
|
vec3 vlColorReducer = vec3(1.0);
|
||||||
|
float vlSceneIntensity = isEyeInWater != 1 ? vlFactor : 1.0;
|
||||||
|
float vlMult = 1.0;
|
||||||
|
|
||||||
|
if (sunVisibility < 0.5) {
|
||||||
|
vlSceneIntensity = 0.0;
|
||||||
|
vlMult = 0.6 + 0.4 * max0(far - lViewPos) / far;
|
||||||
|
vlColor = normalize(pow(vlColor, vec3(1.0 - max0(1.0 - 1.5 * nightFactor))));
|
||||||
|
vlColor *= 0.0766 + 0.0766 * vsBrightness;
|
||||||
|
} else {
|
||||||
|
vlColorReducer = 1.0 / sqrt(vlColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
float rainyNight = (1.0 - sunVisibility) * rainFactor;
|
||||||
|
float VdotLM = max((VdotL + 1.0) / 2.0, 0.0);
|
||||||
|
float VdotUmax0 = max(VdotU, 0.0);
|
||||||
|
float VdotUM = mix(pow2(1.0 - VdotUmax0), 1.0, 0.5 * vlSceneIntensity);
|
||||||
|
VdotUM = smoothstep1(VdotUM);
|
||||||
|
VdotUM = pow(VdotUM, min(lViewPos / far, 1.0) * (3.0 - 2.0 * vlSceneIntensity));
|
||||||
|
vlMult *= mix(VdotUM * VdotLM, 1.0, 0.4 * rainyNight) * vlTime;
|
||||||
|
vlMult *= mix(invNoonFactor2 * 0.875 + 0.125, 1.0, max(vlSceneIntensity, rainFactor2));
|
||||||
|
|
||||||
|
#if LIGHTSHAFT_QUALI == 4
|
||||||
|
int sampleCount = vlSceneIntensity < 0.5 ? 30 : 50;
|
||||||
|
#elif LIGHTSHAFT_QUALI == 3
|
||||||
|
int sampleCount = vlSceneIntensity < 0.5 ? 15 : 30;
|
||||||
|
#elif LIGHTSHAFT_QUALI == 2
|
||||||
|
int sampleCount = vlSceneIntensity < 0.5 ? 10 : 20;
|
||||||
|
#elif LIGHTSHAFT_QUALI == 1
|
||||||
|
int sampleCount = vlSceneIntensity < 0.5 ? 6 : 12;
|
||||||
|
#endif
|
||||||
|
#ifndef TAA
|
||||||
|
//sampleCount *= 2;
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
translucentMult = sqrt(translucentMult); // Because we pow2() the vl result in composite for the End dimension
|
||||||
|
|
||||||
|
float vlSceneIntensity = 0.0;
|
||||||
|
|
||||||
|
#ifndef LOW_QUALITY_ENDER_NEBULA
|
||||||
|
int sampleCount = 16;
|
||||||
|
#else
|
||||||
|
int sampleCount = 10;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
float addition = 1.0;
|
||||||
|
float maxDist = mix(max(far, 96.0) * 0.55, 80.0, vlSceneIntensity);
|
||||||
|
|
||||||
|
#if WATER_FOG_MULT != 100
|
||||||
|
if (isEyeInWater == 1) {
|
||||||
|
#define WATER_FOG_MULT_M WATER_FOG_MULT * 0.01;
|
||||||
|
maxDist /= WATER_FOG_MULT_M;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
float distMult = maxDist / (sampleCount + addition);
|
||||||
|
float sampleMultIntense = isEyeInWater != 1 ? 1.0 : 0.85;
|
||||||
|
|
||||||
|
float viewFactor = 1.0 - 0.7 * pow2(dot(nViewPos.xy, nViewPos.xy));
|
||||||
|
|
||||||
|
float depth0 = GetDepth(z0);
|
||||||
|
float depth1 = GetDepth(z1);
|
||||||
|
#ifdef END
|
||||||
|
if (z0 == 1.0) depth0 = 1000.0;
|
||||||
|
if (z1 == 1.0) depth1 = 1000.0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Fast but inaccurate perspective distortion approximation
|
||||||
|
maxDist *= viewFactor;
|
||||||
|
distMult *= viewFactor;
|
||||||
|
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
float maxCurrentDist = min(depth1, maxDist);
|
||||||
|
#else
|
||||||
|
float maxCurrentDist = min(depth1, far);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (int i = 0; i < sampleCount; i++) {
|
||||||
|
float currentDist = (i + dither) * distMult + addition;
|
||||||
|
|
||||||
|
if (currentDist > maxCurrentDist) break;
|
||||||
|
|
||||||
|
vec4 viewPos = gbufferProjectionInverse * (vec4(texCoord, GetDistX(currentDist), 1.0) * 2.0 - 1.0);
|
||||||
|
viewPos /= viewPos.w;
|
||||||
|
vec4 wpos = gbufferModelViewInverse * viewPos;
|
||||||
|
vec3 playerPos = wpos.xyz / wpos.w;
|
||||||
|
#ifdef END
|
||||||
|
vec4 enderBeamSample = vec4(DrawEnderBeams(VdotU, playerPos), 1.0);
|
||||||
|
enderBeamSample /= sampleCount;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
float shadowSample = 1.0;
|
||||||
|
vec3 vlSample = vec3(1.0);
|
||||||
|
#ifdef REALTIME_SHADOWS
|
||||||
|
wpos = shadowModelView * wpos;
|
||||||
|
wpos = shadowProjection * wpos;
|
||||||
|
wpos /= wpos.w;
|
||||||
|
float distb = sqrt(wpos.x * wpos.x + wpos.y * wpos.y);
|
||||||
|
float distortFactor = 1.0 - shadowMapBias + distb * shadowMapBias;
|
||||||
|
vec4 shadowPosition = DistortShadow(wpos,distortFactor);
|
||||||
|
//shadowPosition.z += 0.0001;
|
||||||
|
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
float percentComplete = currentDist / maxDist;
|
||||||
|
float sampleMult = mix(percentComplete * 3.0, sampleMultIntense, max(rainFactor, vlSceneIntensity));
|
||||||
|
if (currentDist < 5.0) sampleMult *= smoothstep1(clamp(currentDist / 5.0, 0.0, 1.0));
|
||||||
|
sampleMult /= sampleCount;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (length(shadowPosition.xy * 2.0 - 1.0) < 1.0) {
|
||||||
|
// 28A3DK6 We need to use texelFetch here or a lot of Nvidia GPUs can't get a valid value
|
||||||
|
shadowSample = texelFetch(shadowtex0, ivec2(shadowPosition.xy * shadowMapResolutionM), 0).x;
|
||||||
|
shadowSample = clamp((shadowSample-shadowPosition.z)*65536.0,0.0,1.0);
|
||||||
|
vlSample = vec3(shadowSample);
|
||||||
|
|
||||||
|
#if SHADOW_QUALITY >= 1
|
||||||
|
if (shadowSample == 0.0) {
|
||||||
|
float testsample = shadow2D(shadowtex1, shadowPosition.xyz).z;
|
||||||
|
if (testsample == 1.0) {
|
||||||
|
vec3 colsample = texture2D(shadowcolor1, shadowPosition.xy).rgb * 4.0;
|
||||||
|
colsample *= colsample;
|
||||||
|
vlSample = colsample * (1.0 - vlSample) + vlSample;
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
vlSample *= vlColorReducer;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
// For water-tinting the water surface when observed from below the surface
|
||||||
|
if (translucentMult != vec3(1.0) && currentDist > depth0) {
|
||||||
|
if (isEyeInWater == 1) {
|
||||||
|
vec3 translucentMultM = translucentMult * 2.8;
|
||||||
|
vlSample *= pow(translucentMultM, vec3(sunVisibility * 3.0 * clamp01(playerPos.y * 0.03)));
|
||||||
|
} else {
|
||||||
|
vlSample *= 0.1 + 0.9 * pow2(pow2(translucentMult * 1.7));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (isEyeInWater == 1 && translucentMult == vec3(1.0)) vlSample = vec3(0.0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (currentDist > depth0) vlSample *= translucentMult;
|
||||||
|
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
volumetricLight += vec4(vlSample, shadowSample) * sampleMult;
|
||||||
|
#else
|
||||||
|
volumetricLight += vec4(vlSample, shadowSample) * enderBeamSample;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined OVERWORLD && LIGHTSHAFT_BEHAVIOUR == 1 && SHADOW_QUALITY >= 1
|
||||||
|
if (viewWidth + viewHeight - gl_FragCoord.x - gl_FragCoord.y < 1.5) {
|
||||||
|
if (frameCounter % int(0.06666 / frameTimeSmooth + 0.5) == 0) { // Change speed is not too different above 10 fps
|
||||||
|
int salsX = 5;
|
||||||
|
int salsY = 5;
|
||||||
|
float heightThreshold = 6.0;
|
||||||
|
|
||||||
|
vec2 viewM = 1.0 / vec2(salsX, salsY);
|
||||||
|
float salsSampleSum = 0.0;
|
||||||
|
int salsSampleCount = 0;
|
||||||
|
for (float i = 0.25; i < salsX; i++) {
|
||||||
|
for (float h = 0.45; h < salsY; h++) {
|
||||||
|
vec2 coord = 0.3 + 0.4 * viewM * vec2(i, h);
|
||||||
|
ivec2 icoord = ivec2(coord * shadowMapResolutionM);
|
||||||
|
float salsSample = texelFetch(shadowtex0, icoord, 0).x; // read 28A3DK6
|
||||||
|
if (salsSample < 0.55) {
|
||||||
|
float sampledHeight = max0(texture2D(shadowcolor1, coord).a - 0.25) / 0.05; // consistencyMEJHRI7DG
|
||||||
|
salsSampleSum += sampledHeight;
|
||||||
|
salsSampleCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float salsCheck = salsSampleSum / salsSampleCount;
|
||||||
|
int reduceAmount = 2;
|
||||||
|
|
||||||
|
int skyCheck = 0;
|
||||||
|
for (float i = 0.1; i < 1.0; i += 0.2) {
|
||||||
|
skyCheck += int(texelFetch(depthtex0, ivec2(view.x * i, view.y * 0.9), 0).x == 1.0);
|
||||||
|
}
|
||||||
|
if (skyCheck >= 4) {
|
||||||
|
salsCheck = 0.0;
|
||||||
|
reduceAmount = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (salsCheck > heightThreshold) {
|
||||||
|
vlFactor = min(vlFactor + OSIEBCA, 1.0);
|
||||||
|
} else {
|
||||||
|
vlFactor = max(vlFactor - OSIEBCA * reduceAmount, 0.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else vlFactor = 0.0;
|
||||||
|
//if (gl_FragCoord.y < 50) color.rgb = vec3(1,0,1) * float(salsCheck / heightThreshold > gl_FragCoord.x / 1920.0);
|
||||||
|
|
||||||
|
/*for (float i = 0.25; i < salsX; i++) {
|
||||||
|
for (float h = 0.45; h < salsY; h++) {
|
||||||
|
if (length(texCoord - (0.3 + 0.4 * viewM * vec2(i, h))) < 0.01) return vec4(1,0,1,1);
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
vlColor = pow(vlColor, vec3(0.5 + 0.5 * invNoonFactor * invRainFactor + 0.3 * rainFactor));
|
||||||
|
vlColor *= 1.0 - (0.3 + 0.3 * noonFactor) * rainFactor - 0.5 * rainyNight;
|
||||||
|
|
||||||
|
#if LIGHTSHAFT_DAY_I != 100 || LIGHTSHAFT_NIGHT_I != 100
|
||||||
|
#define LIGHTSHAFT_DAY_IM LIGHTSHAFT_DAY_I * 0.01
|
||||||
|
#define LIGHTSHAFT_NIGHT_IM LIGHTSHAFT_NIGHT_I * 0.01
|
||||||
|
vlColor.rgb *= mix(LIGHTSHAFT_NIGHT_IM, LIGHTSHAFT_DAY_IM, sunVisibility);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if LIGHTSHAFT_RAIN_I != 100
|
||||||
|
#define LIGHTSHAFT_RAIN_IM LIGHTSHAFT_RAIN_I * 0.01
|
||||||
|
vlColor.rgb *= mix(1.0, LIGHTSHAFT_RAIN_IM, rainFactor);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
volumetricLight.rgb *= vlMult * vlColor;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
volumetricLight = max(volumetricLight, vec4(0.0));
|
||||||
|
volumetricLight.a = min(volumetricLight.a, 1.0);
|
||||||
|
|
||||||
|
float spookyVolLight = 0.2;
|
||||||
|
|
||||||
|
if (isEyeInWater == 1) volumetricLight *= 0.2;
|
||||||
|
|
||||||
|
return volumetricLight * 0.35;
|
||||||
|
}
|
@ -0,0 +1,3 @@
|
|||||||
|
vec3 cloudRainColor = mix(nightMiddleSkyColor, dayMiddleSkyColor, sunFactor);
|
||||||
|
vec3 cloudAmbientColor = mix(ambientColor * (sunVisibility2 * (0.55 + 0.1 * noonFactor) + 0.35), cloudRainColor * 0.5, rainFactor);
|
||||||
|
vec3 cloudLightColor = mix(lightColor * (0.9 + 0.2 * noonFactor), cloudRainColor * 0.25, noonFactor * rainFactor);
|
@ -0,0 +1,57 @@
|
|||||||
|
#ifndef INCLUDE_LIGHT_AND_AMBIENT_MULTIPLIERS
|
||||||
|
#define INCLUDE_LIGHT_AND_AMBIENT_MULTIPLIERS
|
||||||
|
|
||||||
|
vec3 GetLightColorMult() {
|
||||||
|
vec3 lightColorMult;
|
||||||
|
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
vec3 morningLightMult = vec3(LIGHT_MORNING_R, LIGHT_MORNING_G, LIGHT_MORNING_B) * LIGHT_MORNING_I;
|
||||||
|
vec3 noonLightMult = vec3(LIGHT_NOON_R, LIGHT_NOON_G, LIGHT_NOON_B) * LIGHT_NOON_I;
|
||||||
|
vec3 nightLightMult = vec3(LIGHT_NIGHT_R, LIGHT_NIGHT_G, LIGHT_NIGHT_B) * LIGHT_NIGHT_I;
|
||||||
|
vec3 rainLightMult = vec3(LIGHT_RAIN_R, LIGHT_RAIN_G, LIGHT_RAIN_B) * LIGHT_RAIN_I;
|
||||||
|
|
||||||
|
lightColorMult = mix(noonLightMult, morningLightMult, invNoonFactor2);
|
||||||
|
lightColorMult = mix(nightLightMult, lightColorMult, sunVisibility2);
|
||||||
|
lightColorMult *= mix(vec3(1.0), rainLightMult, rainFactor);
|
||||||
|
#elif defined NETHER
|
||||||
|
vec3 netherLightMult = vec3(LIGHT_NETHER_R, LIGHT_NETHER_G, LIGHT_NETHER_B) * LIGHT_NETHER_I;
|
||||||
|
|
||||||
|
lightColorMult = netherLightMult;
|
||||||
|
#elif defined END
|
||||||
|
vec3 endLightMult = vec3(LIGHT_END_R, LIGHT_END_G, LIGHT_END_B) * LIGHT_END_I;
|
||||||
|
|
||||||
|
lightColorMult = endLightMult;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return lightColorMult;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 GetAtmColorMult() {
|
||||||
|
vec3 atmColorMult;
|
||||||
|
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
vec3 morningAtmMult = vec3(ATM_MORNING_R, ATM_MORNING_G, ATM_MORNING_B) * ATM_MORNING_I;
|
||||||
|
vec3 noonAtmMult = vec3(ATM_NOON_R, ATM_NOON_G, ATM_NOON_B) * ATM_NOON_I;
|
||||||
|
vec3 nightAtmMult = vec3(ATM_NIGHT_R, ATM_NIGHT_G, ATM_NIGHT_B) * ATM_NIGHT_I * 0.5;
|
||||||
|
vec3 rainAtmMult = vec3(ATM_RAIN_R, ATM_RAIN_G, ATM_RAIN_B) * ATM_RAIN_I * 0.75;
|
||||||
|
|
||||||
|
atmColorMult = mix(noonAtmMult, morningAtmMult, invNoonFactor2);
|
||||||
|
atmColorMult = mix(nightAtmMult, atmColorMult, sunVisibility2);
|
||||||
|
atmColorMult *= mix(vec3(1.0), rainAtmMult, rainFactor);
|
||||||
|
#elif defined NETHER
|
||||||
|
vec3 netherAtmMult = vec3(ATM_NETHER_R, ATM_NETHER_G, ATM_NETHER_B) * ATM_NETHER_I * 0.3;
|
||||||
|
|
||||||
|
atmColorMult = netherAtmMult;
|
||||||
|
#elif defined END
|
||||||
|
vec3 endAtmMult = vec3(ATM_END_R, ATM_END_G, ATM_END_B) * ATM_END_I * 0.5;
|
||||||
|
|
||||||
|
atmColorMult = endAtmMult;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return atmColorMult;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 lightColorMult;
|
||||||
|
vec3 atmColorMult;
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,60 @@
|
|||||||
|
#ifndef INCLUDE_LIGHT_AND_AMBIENT_COLORS
|
||||||
|
#define INCLUDE_LIGHT_AND_AMBIENT_COLORS
|
||||||
|
|
||||||
|
#if defined OVERWORLD
|
||||||
|
#ifndef COMPOSITE
|
||||||
|
vec3 noonClearLightColor = vec3(0.7, 0.55, 0.4) * 1.9; //ground and cloud color
|
||||||
|
#else
|
||||||
|
vec3 noonClearLightColor = vec3(0.4, 0.7, 1.4); //light shaft color
|
||||||
|
#endif
|
||||||
|
vec3 noonClearAmbientColor = pow(skyColor, vec3(0.65)) * 0.85;
|
||||||
|
|
||||||
|
#ifndef COMPOSITE
|
||||||
|
vec3 sunsetClearLightColor = pow(vec3(0.64, 0.45, 0.3), vec3(1.5 + invNoonFactor)) * 5.0; //ground and cloud color
|
||||||
|
#else
|
||||||
|
vec3 sunsetClearLightColor = pow(vec3(0.62, 0.39, 0.24), vec3(1.5 + invNoonFactor)) * 6.8; //light shaft color
|
||||||
|
#endif
|
||||||
|
vec3 sunsetClearAmbientColor = noonClearAmbientColor * vec3(1.21, 0.92, 0.76) * 0.95;
|
||||||
|
|
||||||
|
#if !defined COMPOSITE && !defined DEFERRED1
|
||||||
|
vec3 nightClearLightColor = vec3(0.15, 0.14, 0.20) * (0.4 + vsBrightness * 0.4); //ground color
|
||||||
|
#elif defined DEFERRED1
|
||||||
|
vec3 nightClearLightColor = vec3(0.11, 0.14, 0.20); //cloud color
|
||||||
|
#else
|
||||||
|
vec3 nightClearLightColor = vec3(0.07, 0.12, 0.27); //light shaft color
|
||||||
|
#endif
|
||||||
|
vec3 nightClearAmbientColor = vec3(0.09, 0.12, 0.17) * (1.55 + vsBrightness * 0.77);
|
||||||
|
|
||||||
|
vec3 dayRainLightColor = vec3(0.21, 0.16, 0.13) * 0.85;
|
||||||
|
vec3 dayRainAmbientColor = vec3(0.2, 0.2, 0.25) * 2.3;
|
||||||
|
|
||||||
|
vec3 nightRainLightColor = vec3(0.03, 0.035, 0.05) * (0.5 + 0.5 * vsBrightness);
|
||||||
|
vec3 nightRainAmbientColor = vec3(0.16, 0.20, 0.3) * (0.75 + 0.6 * vsBrightness);
|
||||||
|
|
||||||
|
#ifndef COMPOSITE
|
||||||
|
float noonFactorDM = noonFactor; //ground and cloud factor
|
||||||
|
#else
|
||||||
|
float noonFactorDM = noonFactor * noonFactor; //light shaft factor
|
||||||
|
#endif
|
||||||
|
vec3 dayLightColor = mix(sunsetClearLightColor, noonClearLightColor, noonFactorDM);
|
||||||
|
vec3 dayAmbientColor = mix(sunsetClearAmbientColor, noonClearAmbientColor, noonFactorDM);
|
||||||
|
|
||||||
|
vec3 clearLightColor = mix(nightClearLightColor, dayLightColor, sunVisibility2);
|
||||||
|
vec3 clearAmbientColor = mix(nightClearAmbientColor, dayAmbientColor, sunVisibility2);
|
||||||
|
|
||||||
|
vec3 rainLightColor = mix(nightRainLightColor, dayRainLightColor, sunVisibility2) * 2.5;
|
||||||
|
vec3 rainAmbientColor = mix(nightRainAmbientColor, dayRainAmbientColor, sunVisibility2);
|
||||||
|
|
||||||
|
vec3 lightColor = mix(clearLightColor, rainLightColor, rainFactor) * 0.4;
|
||||||
|
vec3 ambientColor = mix(clearAmbientColor, rainAmbientColor, rainFactor) * 0.4;
|
||||||
|
#elif defined NETHER
|
||||||
|
vec3 lightColor = vec3(0.0);
|
||||||
|
vec3 ambientColor = (netherColor + 0.5 * lavaLightColor) * (0.9 + 0.45 * vsBrightness) * 0.4;
|
||||||
|
#elif defined END
|
||||||
|
vec3 endLightColor = vec3(0.68, 0.51, 1.07);
|
||||||
|
float endLightBalancer = 0.2 * vsBrightness;
|
||||||
|
vec3 lightColor = endLightColor * (0.35 - endLightBalancer) * 0.4;
|
||||||
|
vec3 ambientColor = endLightColor * (0.2 + endLightBalancer) * 0.4;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
float moonPhaseInfluence = mix(
|
||||||
|
1.0,
|
||||||
|
moonPhase == 0 ? MOON_PHASE_FULL : moonPhase != 4 ? MOON_PHASE_PARTIAL : MOON_PHASE_DARK,
|
||||||
|
1.0 - sunVisibility2
|
||||||
|
);
|
@ -0,0 +1,30 @@
|
|||||||
|
#ifndef INCLUDE_SKY_COLORS
|
||||||
|
#define INCLUDE_SKY_COLORS
|
||||||
|
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
uniform vec3 skyColorSmooth;
|
||||||
|
vec3 skyColorM = (skyColor / (length(clamp(skyColorSmooth, skyColor * 0.9, skyColor * 1.1)) + 0.0001)) * vec3(0.949, 0.7725, 0.5569);
|
||||||
|
vec3 skyColorNoon = skyColorM * mix(1.28, 1.28 - 0.47 * rainFactor, heightRelativeToCloud);
|
||||||
|
vec3 skyColorSunset = skyColorM * mix(1.18, 1.18 - 0.44 * rainFactor, heightRelativeToCloud) * invNightFactor * invNightFactor;
|
||||||
|
|
||||||
|
vec3 skyColorSqrt = sqrt(skyColorNoon);
|
||||||
|
vec3 noonUpSkyColor = pow(skyColorSqrt, vec3(2.9));
|
||||||
|
vec3 noonMiddleSkyColor = skyColorSqrt * mix(vec3(1.15), vec3(1.15) - vec3(0.1, 0.4, 0.6) * rainFactor, heightRelativeToCloud) + noonUpSkyColor * 0.6;
|
||||||
|
vec3 noonDownSkyColor = skyColorSqrt * mix(vec3(0.9), vec3(0.9) - vec3(0.15, 0.3, 0.42) * rainFactor, heightRelativeToCloud) + noonUpSkyColor * 0.25;
|
||||||
|
|
||||||
|
vec3 sunsetUpSkyColor = skyColorSunset * mix(vec3(0.8, 0.58, 0.58), vec3(0.8, 0.58, 0.58) + vec3(0.1, 0.2, 0.35) * rainFactor2, heightRelativeToCloud);
|
||||||
|
vec3 sunsetMiddleSkyColor = skyColorSunset * mix(vec3(1.8, 1.3, 1.2), vec3(1.8, 1.3, 1.2) + vec3(0.15, 0.25, -0.05) * rainFactor2, heightRelativeToCloud);
|
||||||
|
vec3 sunsetDownSkyColorP = mix(vec3(1.45, 0.86, 0.5), vec3(1.45, 0.86, 0.5) - vec3(0.8, 0.3, 0.0) * rainFactor, heightRelativeToCloud);
|
||||||
|
vec3 sunsetDownSkyColor = sunsetDownSkyColorP * 0.5 + 0.25 * sunsetMiddleSkyColor;
|
||||||
|
|
||||||
|
vec3 dayUpSkyColor = mix(noonUpSkyColor, sunsetUpSkyColor, invNoonFactor2);
|
||||||
|
vec3 dayMiddleSkyColor = mix(noonMiddleSkyColor, sunsetMiddleSkyColor, invNoonFactor2);
|
||||||
|
vec3 dayDownSkyColor = mix(noonDownSkyColor, sunsetDownSkyColor, invNoonFactor2);
|
||||||
|
|
||||||
|
vec3 nightColFactor = vec3(0.07, 0.14, 0.24) * mix(1.0, 1.0 - 0.5 * rainFactor, heightRelativeToCloud) + skyColor;
|
||||||
|
vec3 nightUpSkyColor = pow(nightColFactor, vec3(0.90)) * 0.4;
|
||||||
|
vec3 nightMiddleSkyColor = sqrt(nightUpSkyColor) * 0.68;
|
||||||
|
vec3 nightDownSkyColor = nightMiddleSkyColor * vec3(0.82, 0.82, 0.88);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,670 @@
|
|||||||
|
/*---------------------------------------------------------------------
|
||||||
|
___ __ __ ____ ___ ____ _____ _ _ _ _____
|
||||||
|
|_ _| \/ | _ \ / _ \| _ \_ _|/ \ | \ | |_ _|
|
||||||
|
| || |\/| | |_) | | | | |_) || | / _ \ | \| | | |
|
||||||
|
| || | | | __/| |_| | _ < | |/ ___ \| |\ | | |
|
||||||
|
|___|_| |_|_| \___/|_| \_\|_/_/ \_\_| \_| |_|
|
||||||
|
.
|
||||||
|
-> -> -> EDITING THIS FILE HAS A HIGH CHANCE TO BREAK THE SHADER PACK
|
||||||
|
-> -> -> DO NOT CHANGE ANYTHING UNLESS YOU KNOW WHAT YOU ARE DOING
|
||||||
|
-> -> -> DO NOT EXPECT SUPPORT AFTER MODIFYING SHADER FILES
|
||||||
|
---------------------------------------------------------------------*/
|
||||||
|
uniform float frameTimeCounter;
|
||||||
|
uniform vec4 lightningBoltPosition;
|
||||||
|
uniform float lightningFlashOptifine;
|
||||||
|
uniform float lightning;
|
||||||
|
uniform int moonPhase;
|
||||||
|
uniform sampler2D noisetex;
|
||||||
|
|
||||||
|
//User Settings//
|
||||||
|
#define SHADER_STYLE 4 //[1 4]
|
||||||
|
|
||||||
|
#define RP_MODE 1 //[1 0 3 2]
|
||||||
|
#if RP_MODE == 1
|
||||||
|
#define IPBR
|
||||||
|
//#define GENERATED_NORMALS
|
||||||
|
//#define COATED_TEXTURES
|
||||||
|
//#define FANCY_GLASS
|
||||||
|
//#define GREEN_SCREEN_LIME
|
||||||
|
#endif
|
||||||
|
#if RP_MODE >= 2
|
||||||
|
#define CUSTOM_PBR
|
||||||
|
#define POM
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define REALTIME_SHADOWS
|
||||||
|
#define SHADOW_QUALITY 2 //[0 1 2 3 4 5]
|
||||||
|
const float shadowDistance = 192.0; //[64.0 80.0 96.0 112.0 128.0 160.0 192.0 224.0 256.0 320.0 384.0 512.0 768.0 1024.0]
|
||||||
|
//#define ENTITY_SHADOWS
|
||||||
|
#define SSAO_QUALI_DEFINE 2 //[0 2 3]
|
||||||
|
#define FXAA
|
||||||
|
#define DETAIL_QUALITY 2 //[0 2 3]
|
||||||
|
#define CLOUD_QUALITY 2 //[0 1 2 3]
|
||||||
|
#define LIGHTSHAFT_QUALI_DEFINE 2 //[0 1 2 3 4]
|
||||||
|
#define WATER_QUALITY 2 //[1 2 3]
|
||||||
|
#define WATER_REFLECT_QUALITY 2 //[0 1 2]
|
||||||
|
#define BLOCK_REFLECT_QUALITY 3 //[0 1 2 3]
|
||||||
|
|
||||||
|
#define WATER_STYLE_DEFINE -1 //[-1 1 2 3]
|
||||||
|
#define WATER_CAUSTIC_STYLE_DEFINE -1 //[-1 1 3]
|
||||||
|
#define WATER_REFRACTION_INTENSITY 2.0 //[1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0]
|
||||||
|
#define WATER_FOAM_I 100 //[0 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150]
|
||||||
|
#define WATER_ALPHA_MULT 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300 325 350 375 400 425 450 475 500 550 600 650 700 750 800 850 900]
|
||||||
|
#define WATER_FOG_MULT 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300 325 350 375 400 425 450 475 500 550 600 650 700 750 800 850 900]
|
||||||
|
#define WATERCOLOR_MODE 3 //[3 2 0]
|
||||||
|
#define BRIGHT_CAVE_WATER
|
||||||
|
#define WATERCOLOR_R 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300]
|
||||||
|
#define WATERCOLOR_G 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300]
|
||||||
|
#define WATERCOLOR_B 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300]
|
||||||
|
#define UNDERWATERCOLOR_R 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150]
|
||||||
|
#define UNDERWATERCOLOR_G 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150]
|
||||||
|
#define UNDERWATERCOLOR_B 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150]
|
||||||
|
#define WATER_BUMPINESS 1.25 //[0.05 0.10 0.15 0.20 0.25 0.30 0.40 0.50 0.65 0.80 1.00 1.25 1.50 2.00 2.50]
|
||||||
|
#define WATER_BUMP_SMALL 0.75 //[0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00]
|
||||||
|
#define WATER_BUMP_MED 1.70 //[0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00]
|
||||||
|
#define WATER_BUMP_BIG 2.00 //[0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00]
|
||||||
|
#define WATER_SPEED_MULT 1.10 //[0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00]
|
||||||
|
#define WATER_SIZE_MULT 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300]
|
||||||
|
|
||||||
|
#define PIXEL_SHADOW 0 //[0 8 16 32 64 128]
|
||||||
|
#define RAIN_PUDDLES 1 //[0 1 2 3 4]
|
||||||
|
#define SSAO_I 100 //[0 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300]
|
||||||
|
#define VANILLAAO_I 100 //[0 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300]
|
||||||
|
|
||||||
|
#define AURORA_STYLE_DEFINE -1 //[-1 0 1 2]
|
||||||
|
#define AURORA_CONDITION 3 //[0 1 2 3 4]
|
||||||
|
//#define NIGHT_NEBULA
|
||||||
|
#define NIGHT_NEBULA_I 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300]
|
||||||
|
#define WEATHER_TEX_OPACITY 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300 325 350 375 400 425 450 475 500 550 600 650 700 750 800 850 900]
|
||||||
|
#define SUN_MOON_STYLE_DEFINE -1 //[-1 1 2 3]
|
||||||
|
#define SUN_MOON_HORIZON
|
||||||
|
#define NIGHT_STAR_AMOUNT 2 //[2 3]
|
||||||
|
#define CLOUD_STYLE_DEFINE -1 //[-1 0 1 3 50]
|
||||||
|
//#define CLOUD_SHADOWS
|
||||||
|
#define CLOUD_CLOSED_AREA_CHECK
|
||||||
|
#define CLOUD_ALT1 192 //[-96 -92 -88 -84 -80 -76 -72 -68 -64 -60 -56 -52 -48 -44 -40 -36 -32 -28 -24 -20 -16 -10 -8 -4 0 4 8 12 16 20 22 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120 124 128 132 136 140 144 148 152 156 160 164 168 172 176 180 184 188 192 196 200 204 208 212 216 220 224 228 232 236 240 244 248 252 256 260 264 268 272 276 280 284 288 292 296 300 304 308 312 316 320 324 328 332 336 340 344 348 352 356 360 364 368 372 376 380 384 388 392 396 400 404 408 412 416 420 424 428 432 436 440 444 448 452 456 460 464 468 472 476 480 484 488 492 496 500 510 520 530 540 550 560 570 580 590 600 610 620 630 640 650 660 670 680 690 700 710 720 730 740 750 760 770 780 790 800]
|
||||||
|
#define CLOUD_SPEED_MULT 100 //[0 5 7 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300 325 350 375 400 425 450 475 500 550 600 650 700 750 800 850 900]
|
||||||
|
|
||||||
|
#define CLOUD_UNBOUND_AMOUNT 1.00 //[0.70 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.80 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.90 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00 1.02 1.04 1.06 1.08 1.10 1.12 1.14 1.16 1.18 1.20 1.22 1.24 1.26 1.28 1.30 1.32 1.34 1.36 1.38 1.40 1.42 1.44 1.46 1.48 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00 2.10 2.20 2.30 2.40 2.50 2.60 2.70 2.80 2.90 3.00]
|
||||||
|
#define CLOUD_UNBOUND_SIZE_MULT 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300]
|
||||||
|
|
||||||
|
//#define DOUBLE_REIM_CLOUDS
|
||||||
|
#define CLOUD_ALT2 288 //[-96 -92 -88 -84 -80 -76 -72 -68 -64 -60 -56 -52 -48 -44 -40 -36 -32 -28 -24 -20 -16 -10 -8 -4 0 4 8 12 16 20 22 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120 124 128 132 136 140 144 148 152 156 160 164 168 172 176 180 184 188 192 196 200 204 208 212 216 220 224 228 232 236 240 244 248 252 256 260 264 268 272 276 280 284 288 292 296 300 304 308 312 316 320 324 328 332 336 340 344 348 352 356 360 364 368 372 376 380 384 388 392 396 400 404 408 412 416 420 424 428 432 436 440 444 448 452 456 460 464 468 472 476 480 484 488 492 496 500 510 520 530 540 550 560 570 580 590 600 610 620 630 640 650 660 670 680 690 700 710 720 730 740 750 760 770 780 790 800]
|
||||||
|
|
||||||
|
#define NETHER_COLOR_MODE 3 //[3 2 0]
|
||||||
|
#define NETHER_STORM
|
||||||
|
#define NETHER_STORM_LOWER_ALT 28 //[-296 -292 -288 -284 -280 -276 -272 -268 -264 -260 -256 -252 -248 -244 -240 -236 -232 -228 -224 -220 -216 -212 -208 -204 -200 -196 -192 -188 -184 -180 -176 -172 -168 -164 -160 -156 -152 -148 -144 -140 -136 -132 -128 -124 -120 -116 -112 -108 -104 -100 -96 -92 -88 -84 -80 -76 -72 -68 -64 -60 -56 -52 -48 -44 -40 -36 -32 -28 -24 -20 -16 -12 -8 -4 0 4 8 12 16 20 22 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120 124 128 132 136 140 144 148 152 156 160 164 168 172 176 180 184 188 192 196 200 204 208 212 216 220 224 228 232 236 240 244 248 252 256 260 264 268 272 276 280 284 288 292 296 300]
|
||||||
|
#define NETHER_STORM_HEIGHT 200 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300 325 350 375 400 425 450 475 500 550 600 650 700 750 800 850 900]
|
||||||
|
#define NETHER_STORM_I 0.40 //[0.05 0.06 0.07 0.08 0.09 0.10 0.12 0.14 0.16 0.18 0.22 0.26 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50]
|
||||||
|
|
||||||
|
#define BORDER_FOG
|
||||||
|
#define ATM_FOG_MULT 0.95 //[0.50 0.65 0.80 0.95]
|
||||||
|
#define ATM_FOG_DISTANCE 100 //[10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200 220 240 260 280 300]
|
||||||
|
#define ATM_FOG_ALTITUDE 63 //[0 5 10 15 20 25 30 35 40 45 50 52 54 56 58 60 61 62 63 64 65 66 67 68 69 70 72 74 76 78 80 85 90 95 100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175 180 185 190 195 200 210 220 230 240 250 260 270 280 290 300]
|
||||||
|
#define CAVE_FOG
|
||||||
|
#define LIGHTSHAFT_BEHAVIOUR 1 //[0 1 2 3]
|
||||||
|
#define LIGHTSHAFT_DAY_I 100 //[1 3 5 7 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200]
|
||||||
|
#define LIGHTSHAFT_NIGHT_I 100 //[1 3 5 7 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200]
|
||||||
|
#define LIGHTSHAFT_RAIN_I 100 //[1 3 5 7 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200]
|
||||||
|
|
||||||
|
#define BLOOM
|
||||||
|
#define BLOOM_STRENGTH 0.12 //[0.027 0.036 0.045 0.054 0.063 0.072 0.081 0.09 0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.21 0.23 0.25 0.28 0.32 10.00]
|
||||||
|
#define IMAGE_SHARPENING 3 //[0 1 2 3 4 5 6 7 8 9 10]
|
||||||
|
//#define MOTION_BLURRING
|
||||||
|
#define MOTION_BLURRING_STRENGTH 1.00 //[0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00]
|
||||||
|
#define VIGNETTE_R
|
||||||
|
#define CHROMA_ABERRATION 0 //[0 1 2 3 4 5 6 7 8]
|
||||||
|
#define UNDERWATER_DISTORTION
|
||||||
|
//#define LENSFLARE
|
||||||
|
#define LENSFLARE_I 1.00 //[0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00]
|
||||||
|
|
||||||
|
#define WORLD_BLUR 0 //[0 1 2]
|
||||||
|
//#define WB_FOV_SCALED
|
||||||
|
//#define WB_CHROMATIC
|
||||||
|
//#define WB_ANAMORPHIC
|
||||||
|
#define WB_DOF_I 64.0 //[1.0 1.5 2.0 3.0 4.5 6.0 9.0 12.0 18.0 24.0 32.0 48.0 64.0 96.0 128.0 192.0 256.0 384.0 512.0 768.0 1024.0 1536.0 2048.0 3072.0 4096.0]
|
||||||
|
#define WB_DOF_FOCUS 0 //[-1 0 1 2 3 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 65 67 69 72 74 76 79 81 83 86 88 91 94 96 99 102 104 107 110 113 115 118 121 124 127 130 133 136 140 143 146 149 153 156 160 163 167 170 174 178 182 185 189 193 197 201 206 210 214 219 223 227 232 237 242 246 251 256 261 267 272 277 283 288 294 300 306 312 318 324 330 337 344 350 357 364 371 379 386 394 402 410 418 427 435 444 453 462 472 481 491 501 512 530 550 575 600 625 650 675 700 725 750 800 850 900]
|
||||||
|
#define WB_DB_DAY_I 64.0 //[1.0 1.5 2.0 3.0 4.5 6.0 9.0 12.0 18.0 24.0 32.0 48.0 64.0 96.0 128.0 192.0 256.0 384.0 512.0 768.0 1024.0 1536.0 2048.0 3072.0 4096.0]
|
||||||
|
#define WB_DB_NIGHT_I 64.0 //[1.0 1.5 2.0 3.0 4.5 6.0 9.0 12.0 18.0 24.0 32.0 48.0 64.0 96.0 128.0 192.0 256.0 384.0 512.0 768.0 1024.0 1536.0 2048.0 3072.0 4096.0]
|
||||||
|
#define WB_DB_RAIN_I 64.0 //[1.0 1.5 2.0 3.0 4.5 6.0 9.0 12.0 18.0 24.0 32.0 48.0 64.0 96.0 128.0 192.0 256.0 384.0 512.0 768.0 1024.0 1536.0 2048.0 3072.0 4096.0]
|
||||||
|
#define WB_DB_WATER_I 64.0 //[1.0 1.5 2.0 3.0 4.5 6.0 9.0 12.0 18.0 24.0 32.0 48.0 64.0 96.0 128.0 192.0 256.0 384.0 512.0 768.0 1024.0 1536.0 2048.0 3072.0 4096.0]
|
||||||
|
#define WB_DB_NETHER_I 64.0 //[1.0 1.5 2.0 3.0 4.5 6.0 9.0 12.0 18.0 24.0 32.0 48.0 64.0 96.0 128.0 192.0 256.0 384.0 512.0 768.0 1024.0 1536.0 2048.0 3072.0 4096.0]
|
||||||
|
#define WB_DB_END_I 64.0 //[1.0 1.5 2.0 3.0 4.5 6.0 9.0 12.0 18.0 24.0 32.0 48.0 64.0 96.0 128.0 192.0 256.0 384.0 512.0 768.0 1024.0 1536.0 2048.0 3072.0 4096.0]
|
||||||
|
|
||||||
|
#define ENTITY_GN_AND_CT
|
||||||
|
#define GENERATED_NORMAL_MULT 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200]
|
||||||
|
#define COATED_TEXTURE_MULT 100 //[25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200]
|
||||||
|
|
||||||
|
#define GLOWING_ORE_MASTER 0 //[0 1 2]
|
||||||
|
#define GLOWING_ORE_MULT 1.00 //[0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#if GLOWING_ORE_MASTER == 2 || SHADER_STYLE == 4 && GLOWING_ORE_MASTER == 1
|
||||||
|
#define GLOWING_ORE_IRON
|
||||||
|
#define GLOWING_ORE_GOLD
|
||||||
|
#define GLOWING_ORE_COPPER
|
||||||
|
#define GLOWING_ORE_REDSTONE
|
||||||
|
#define GLOWING_ORE_LAPIS
|
||||||
|
#define GLOWING_ORE_EMERALD
|
||||||
|
#define GLOWING_ORE_DIAMOND
|
||||||
|
#define GLOWING_ORE_NETHERQUARTZ
|
||||||
|
#define GLOWING_ORE_NETHERGOLD
|
||||||
|
#define GLOWING_ORE_GILDEDBLACKSTONE
|
||||||
|
#define GLOWING_ORE_ANCIENTDEBRIS
|
||||||
|
#define GLOWING_ORE_MODDED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define GLOWING_AMETHYST 1 //[0 1 2]
|
||||||
|
#define GLOWING_LICHEN 1 //[0 1 2]
|
||||||
|
//#define EMISSIVE_REDSTONE_BLOCK
|
||||||
|
//#define EMISSIVE_LAPIS_BLOCK
|
||||||
|
//#define GLOWING_ARMOR_TRIM
|
||||||
|
|
||||||
|
#define NORMAL_MAP_STRENGTH 100 //[0 10 15 20 30 40 60 80 100 120 140 160 180 200]
|
||||||
|
#define CUSTOM_EMISSION_INTENSITY 100 //[0 5 7 10 15 20 25 30 35 40 45 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 225 250]
|
||||||
|
#define POM_DEPTH 0.80 //[0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00]
|
||||||
|
#define POM_QUALITY 128 //[16 32 64 128 256 512]
|
||||||
|
#define POM_DISTANCE 32 //[16 24 32 48 64 128 256 512 1024]
|
||||||
|
#define POM_LIGHTING_MODE 2 //[1 2]
|
||||||
|
//#define POM_ALLOW_CUTOUT
|
||||||
|
#define DIRECTIONAL_BLOCKLIGHT 0 //[0 3 7 11]
|
||||||
|
|
||||||
|
#define MINIMUM_LIGHT_MODE 2 //[0 1 2 3 4]
|
||||||
|
#define HELD_LIGHTING_MODE 2 //[0 1 2]
|
||||||
|
#define AMBIENT_MULT 100 //[50 55 60 65 70 75 80 85 90 95 100 110 120 130 140 150 160 170 180 190 200]
|
||||||
|
|
||||||
|
#define WAVING_SPEED 1.00 //[0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00]
|
||||||
|
#define WAVING_I 1.00 //[0.25 0.50 0.75 1.00 1.25 1.50 1.75 2.00 50.0]
|
||||||
|
#define NO_WAVING_INDOORS
|
||||||
|
#define WAVING_FOLIAGE
|
||||||
|
#define WAVING_LEAVES
|
||||||
|
#define WAVING_LAVA
|
||||||
|
#define WAVING_WATER_VERTEX
|
||||||
|
#define WAVING_RAIN
|
||||||
|
|
||||||
|
#define SUN_ANGLE -1 //[-1 0 -20 -30 -40 -50 -60 60 50 40 30 20]
|
||||||
|
|
||||||
|
#define SELECT_OUTLINE 1 //[0 1 3 4 2]
|
||||||
|
#define SELECT_OUTLINE_I 1.00 //[0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00]
|
||||||
|
#define SELECT_OUTLINE_R 1.35 //[0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00]
|
||||||
|
#define SELECT_OUTLINE_G 0.35 //[0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00]
|
||||||
|
#define SELECT_OUTLINE_B 1.75 //[0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00]
|
||||||
|
|
||||||
|
//#define WORLD_OUTLINE
|
||||||
|
#define WORLD_OUTLINE_THICKNESS 1 //[1 2 3 4]
|
||||||
|
#define WORLD_OUTLINE_I 1.50 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00]
|
||||||
|
//#define DARK_OUTLINE
|
||||||
|
#define DARK_OUTLINE_THICKNESS 1 //[1 2]
|
||||||
|
|
||||||
|
#define HAND_SWAYING 0 //[0 1 2 3]
|
||||||
|
#define SHOW_LIGHT_LEVEL 0 //[0 1 2 3]
|
||||||
|
//#define REDUCE_CLOSE_PARTICLES
|
||||||
|
//#define LESS_LAVA_FOG
|
||||||
|
//#define SNOWY_WORLD
|
||||||
|
//#define COLOR_CODED_PROGRAMS
|
||||||
|
|
||||||
|
//#define MOON_PHASE_INF_LIGHT
|
||||||
|
#define MOON_PHASE_INF_REFLECTION
|
||||||
|
#define MOON_PHASE_FULL 1.00 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define MOON_PHASE_PARTIAL 0.85 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define MOON_PHASE_DARK 0.60 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
|
||||||
|
#define T_EXPOSURE 1.40 //[0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00 2.10 2.20 2.30 2.40 2.50 2.60 2.70 2.80]
|
||||||
|
#define TM_WHITE_CURVE 2.0 //[1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0]
|
||||||
|
#define T_LOWER_CURVE 1.20 //[0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00]
|
||||||
|
#define T_UPPER_CURVE 1.30 //[0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00]
|
||||||
|
#define T_SATURATION 1.00 //[0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00]
|
||||||
|
#define T_VIBRANCE 1.00 //[0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00]
|
||||||
|
//#define COLORGRADING
|
||||||
|
#define GR_RR 100 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500]
|
||||||
|
#define GR_RG 0 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500]
|
||||||
|
#define GR_RB 0 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500]
|
||||||
|
#define GR_RC 1.00 //[0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00]
|
||||||
|
#define GR_GR 0 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500]
|
||||||
|
#define GR_GG 100 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500]
|
||||||
|
#define GR_GB 0 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500]
|
||||||
|
#define GR_GC 1.00 //[0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00]
|
||||||
|
#define GR_BR 0 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500]
|
||||||
|
#define GR_BG 0 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500]
|
||||||
|
#define GR_BB 100 //[0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 108 116 124 132 140 148 156 164 172 180 188 196 200 212 224 236 248 260 272 284 296 300 316 332 348 364 380 396 400 424 448 472 496 500]
|
||||||
|
#define GR_BC 1.00 //[0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2.20 2.40 2.60 2.80 3.00 3.25 3.50 3.75 4.00 4.50 5.00]
|
||||||
|
|
||||||
|
//#define LIGHT_COLOR_MULTS
|
||||||
|
//#define ATM_COLOR_MULTS
|
||||||
|
#define LIGHT_MORNING_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_MORNING_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_MORNING_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_MORNING_I 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_MORNING_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_MORNING_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_MORNING_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_MORNING_I 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_NOON_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_NOON_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_NOON_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_NOON_I 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_NOON_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_NOON_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_NOON_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_NOON_I 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_NIGHT_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_NIGHT_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_NIGHT_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_NIGHT_I 1.00 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_NIGHT_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_NIGHT_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_NIGHT_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_NIGHT_I 1.00 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_RAIN_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_RAIN_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_RAIN_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_RAIN_I 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_RAIN_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_RAIN_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_RAIN_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_RAIN_I 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_NETHER_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_NETHER_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_NETHER_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_NETHER_I 1.00 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_NETHER_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_NETHER_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_NETHER_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_NETHER_I 1.00 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_END_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_END_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_END_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define LIGHT_END_I 1.00 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_END_R 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_END_G 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_END_B 1.00 //[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define ATM_END_I 1.00 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
|
||||||
|
#define XLIGHT_R 1.00 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define XLIGHT_G 1.00 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
#define XLIGHT_B 1.00 //[0.01 0.03 0.05 0.07 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00]
|
||||||
|
|
||||||
|
//#define LIGHT_COLORING
|
||||||
|
|
||||||
|
#define EYES
|
||||||
|
#define EYE_FREQUENCY 1.0 //[0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5]
|
||||||
|
#define EYE_SPEED 1.0 //[0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0]
|
||||||
|
#define EYE_RED_PROBABILITY 0.07 //[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.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 0.39 0.40 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.50 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.60 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.70 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.80 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.90 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
|
||||||
|
#define BLOOD_MOON 1 //[0 1 2] Off, Full Moon, Every Moon
|
||||||
|
#define EMISSIVE_BLOOD_MOON_FLOWERS
|
||||||
|
|
||||||
|
//Internal Settings//
|
||||||
|
#define SIDE_SHADOWING
|
||||||
|
#define SHADOW_FILTERING
|
||||||
|
|
||||||
|
#define GLASS_OPACITY 0.25
|
||||||
|
#define FANCY_NETHERPORTAL
|
||||||
|
|
||||||
|
#define DIRECTIONAL_SHADING
|
||||||
|
|
||||||
|
#define ATMOSPHERIC_FOG
|
||||||
|
#define BLOOM_FOG
|
||||||
|
|
||||||
|
#define GLOWING_ENTITY_FIX
|
||||||
|
#define FLICKERING_FIX
|
||||||
|
//#define SAFER_GENERATED_NORMALS
|
||||||
|
|
||||||
|
//Extensions//
|
||||||
|
#extension GL_ARB_shader_image_load_store : enable
|
||||||
|
|
||||||
|
//Information//
|
||||||
|
#define info0 0 //[0]
|
||||||
|
#define info1 0 //[0]
|
||||||
|
#define info2 0 //[0]
|
||||||
|
#define info3 0 //[0]
|
||||||
|
#define info4 0 //[0]
|
||||||
|
#define info5 0 //[0]
|
||||||
|
#define info6 0 //[0]
|
||||||
|
#define info7 0 //[0]
|
||||||
|
#define info8 0 //[0]
|
||||||
|
#define info9 0 //[0]
|
||||||
|
#define info10 0 //[0]
|
||||||
|
|
||||||
|
//Visual Style and Performance Setting Handling//
|
||||||
|
#if SHADER_STYLE == 1
|
||||||
|
#define WATER_STYLE_DEFAULT 1
|
||||||
|
//#define WATER_CAUSTIC_STYLE_DEFAULT 1
|
||||||
|
#define AURORA_STYLE_DEFAULT 1
|
||||||
|
#define SUN_MOON_STYLE_DEFAULT 1
|
||||||
|
#define CLOUD_STYLE_DEFAULT 1
|
||||||
|
#elif SHADER_STYLE == 4
|
||||||
|
#define WATER_STYLE_DEFAULT 3
|
||||||
|
//#define WATER_CAUSTIC_STYLE_DEFAULT 3
|
||||||
|
#define AURORA_STYLE_DEFAULT 2
|
||||||
|
#define SUN_MOON_STYLE_DEFAULT 3
|
||||||
|
#define CLOUD_STYLE_DEFAULT 3
|
||||||
|
#endif
|
||||||
|
#if WATER_STYLE_DEFINE == -1
|
||||||
|
#define WATER_STYLE WATER_STYLE_DEFAULT
|
||||||
|
#else
|
||||||
|
#define WATER_STYLE WATER_STYLE_DEFINE
|
||||||
|
#endif
|
||||||
|
#if WATER_CAUSTIC_STYLE_DEFINE == -1
|
||||||
|
#define WATER_CAUSTIC_STYLE WATER_STYLE
|
||||||
|
#else
|
||||||
|
#define WATER_CAUSTIC_STYLE WATER_CAUSTIC_STYLE_DEFINE
|
||||||
|
#endif
|
||||||
|
#if AURORA_STYLE_DEFINE == -1
|
||||||
|
#define AURORA_STYLE AURORA_STYLE_DEFAULT
|
||||||
|
#else
|
||||||
|
#define AURORA_STYLE AURORA_STYLE_DEFINE
|
||||||
|
#endif
|
||||||
|
#if SUN_MOON_STYLE_DEFINE == -1
|
||||||
|
#define SUN_MOON_STYLE SUN_MOON_STYLE_DEFAULT
|
||||||
|
#else
|
||||||
|
#define SUN_MOON_STYLE SUN_MOON_STYLE_DEFINE
|
||||||
|
#endif
|
||||||
|
#if CLOUD_STYLE_DEFINE == -1
|
||||||
|
#define CLOUD_STYLE CLOUD_STYLE_DEFAULT
|
||||||
|
#else
|
||||||
|
#define CLOUD_STYLE CLOUD_STYLE_DEFINE
|
||||||
|
#endif
|
||||||
|
// Thanks to SpacEagle17 and isuewo for the sun angle handling
|
||||||
|
#if SUN_ANGLE == -1
|
||||||
|
#if SHADER_STYLE == 1
|
||||||
|
const float sunPathRotation = 0.0;
|
||||||
|
#define PERPENDICULAR_TWEAKS
|
||||||
|
#elif SHADER_STYLE == 4
|
||||||
|
const float sunPathRotation = -40.0;
|
||||||
|
#endif
|
||||||
|
#elif SUN_ANGLE == 0
|
||||||
|
const float sunPathRotation = 0.0;
|
||||||
|
#define PERPENDICULAR_TWEAKS
|
||||||
|
#elif SUN_ANGLE == 20
|
||||||
|
const float sunPathRotation = 20.0;
|
||||||
|
#elif SUN_ANGLE == 30
|
||||||
|
const float sunPathRotation = 30.0;
|
||||||
|
#elif SUN_ANGLE == 40
|
||||||
|
const float sunPathRotation = 40.0;
|
||||||
|
#elif SUN_ANGLE == 50
|
||||||
|
const float sunPathRotation = 50.0;
|
||||||
|
#elif SUN_ANGLE == 60
|
||||||
|
const float sunPathRotation = 60.0;
|
||||||
|
#elif SUN_ANGLE == -20
|
||||||
|
const float sunPathRotation = -20.0;
|
||||||
|
#elif SUN_ANGLE == -30
|
||||||
|
const float sunPathRotation = -30.0;
|
||||||
|
#elif SUN_ANGLE == -40
|
||||||
|
const float sunPathRotation = -40.0;
|
||||||
|
#elif SUN_ANGLE == -50
|
||||||
|
const float sunPathRotation = -50.0;
|
||||||
|
#elif SUN_ANGLE == -60
|
||||||
|
const float sunPathRotation = -60.0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if SHADOW_QUALITY >= 1
|
||||||
|
const int shadowMapResolution = 2048;
|
||||||
|
#else
|
||||||
|
const int shadowMapResolution = 1024;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if SSAO_I > 0
|
||||||
|
#define SSAO_QUALI SSAO_QUALI_DEFINE
|
||||||
|
#else
|
||||||
|
#define SSAO_QUALI 0
|
||||||
|
#endif
|
||||||
|
#if LIGHTSHAFT_BEHAVIOUR > 0
|
||||||
|
#define LIGHTSHAFT_QUALI LIGHTSHAFT_QUALI_DEFINE
|
||||||
|
#else
|
||||||
|
#define LIGHTSHAFT_QUALI 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if BLOCK_REFLECT_QUALITY >= 1
|
||||||
|
#define LIGHT_HIGHLIGHT
|
||||||
|
#endif
|
||||||
|
#if BLOCK_REFLECT_QUALITY >= 2 && RP_MODE >= 1
|
||||||
|
#define PBR_REFLECTIONS
|
||||||
|
#endif
|
||||||
|
#if BLOCK_REFLECT_QUALITY >= 3
|
||||||
|
#define TEMPORAL_FILTER
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if DETAIL_QUALITY == 0
|
||||||
|
#undef PERPENDICULAR_TWEAKS
|
||||||
|
#define LOW_QUALITY_NETHER_STORM
|
||||||
|
#define LOW_QUALITY_ENDER_NEBULA
|
||||||
|
#endif
|
||||||
|
#if DETAIL_QUALITY >= 1
|
||||||
|
#define TAA
|
||||||
|
#endif
|
||||||
|
#if DETAIL_QUALITY >= 2
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#if DETAIL_QUALITY >= 3
|
||||||
|
#define HQ_NIGHT_NEBULA
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//Define Handling//
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
#if CLOUD_STYLE > 0 && CLOUD_STYLE != 50 && CLOUD_QUALITY > 0
|
||||||
|
#define VL_CLOUDS_ACTIVE
|
||||||
|
#if CLOUD_STYLE == 1
|
||||||
|
#define CLOUDS_REIMAGINED
|
||||||
|
#endif
|
||||||
|
#if CLOUD_STYLE == 3
|
||||||
|
#define CLOUDS_UNBOUND
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#undef LIGHT_HIGHLIGHT
|
||||||
|
#undef CAVE_FOG
|
||||||
|
#undef CLOUD_SHADOWS
|
||||||
|
#undef SNOWY_WORLD
|
||||||
|
#undef LENSFLARE
|
||||||
|
#endif
|
||||||
|
#ifdef NETHER
|
||||||
|
#undef ATMOSPHERIC_FOG
|
||||||
|
#else
|
||||||
|
#undef NETHER_STORM
|
||||||
|
#endif
|
||||||
|
#ifdef END
|
||||||
|
#undef BLOOM_FOG
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef BLOOM
|
||||||
|
#undef BLOOM_FOG
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef BLOOM_FOG
|
||||||
|
#if WORLD_BLUR > 0
|
||||||
|
#define BLOOM_FOG_COMPOSITE3
|
||||||
|
#elif defined MOTION_BLURRING
|
||||||
|
#define BLOOM_FOG_COMPOSITE2
|
||||||
|
#else
|
||||||
|
#define BLOOM_FOG_COMPOSITE
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined GBUFFERS_HAND || defined GBUFFERS_ENTITIES
|
||||||
|
#undef SNOWY_WORLD
|
||||||
|
#endif
|
||||||
|
#if defined GBUFFERS_TEXTURED || defined GBUFFERS_BASIC
|
||||||
|
#undef LIGHT_HIGHLIGHT
|
||||||
|
#undef DIRECTIONAL_SHADING
|
||||||
|
#undef SIDE_SHADOWING
|
||||||
|
#endif
|
||||||
|
#ifdef GBUFFERS_WATER
|
||||||
|
#undef LIGHT_HIGHLIGHT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef GLOWING_ENTITY_FIX
|
||||||
|
#undef GBUFFERS_ENTITIES_GLOWING
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if LIGHTSHAFT_QUALI > 0 && defined OVERWORLD && defined REALTIME_SHADOWS || defined END
|
||||||
|
#define LIGHTSHAFTS_ACTIVE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined WAVING_FOLIAGE || defined WAVING_LEAVES || defined WAVING_LAVA
|
||||||
|
#define WAVING_ANYTHING_TERRAIN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef IS_IRIS
|
||||||
|
#undef FANCY_GLASS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if WATERCOLOR_R != 100 || WATERCOLOR_G != 100 || WATERCOLOR_B != 100
|
||||||
|
#define WATERCOLOR_RM WATERCOLOR_R * 0.01
|
||||||
|
#define WATERCOLOR_GM WATERCOLOR_G * 0.01
|
||||||
|
#define WATERCOLOR_BM WATERCOLOR_B * 0.01
|
||||||
|
#define WATERCOLOR_CHANGED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if UNDERWATERCOLOR_R != 100 || UNDERWATERCOLOR_G != 100 || UNDERWATERCOLOR_B != 100
|
||||||
|
#define UNDERWATERCOLOR_RM UNDERWATERCOLOR_R * 0.01
|
||||||
|
#define UNDERWATERCOLOR_GM UNDERWATERCOLOR_G * 0.01
|
||||||
|
#define UNDERWATERCOLOR_BM UNDERWATERCOLOR_B * 0.01
|
||||||
|
#define UNDERWATERCOLOR_CHANGED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//Activate Settings//
|
||||||
|
#ifdef ENTITY_SHADOWS
|
||||||
|
#endif
|
||||||
|
#ifdef POM_ALLOW_CUTOUT
|
||||||
|
#endif
|
||||||
|
#ifdef CLOUD_CLOSED_AREA_CHECK
|
||||||
|
#endif
|
||||||
|
#ifdef BRIGHT_CAVE_WATER
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//Very Common Uniforms//
|
||||||
|
uniform int worldTime;
|
||||||
|
uniform int worldDay;
|
||||||
|
|
||||||
|
uniform float rainFactor;
|
||||||
|
uniform float screenBrightness;
|
||||||
|
uniform float eyeBrightnessM;
|
||||||
|
|
||||||
|
uniform vec3 fogColor;
|
||||||
|
|
||||||
|
#if NETHER_COLOR_MODE == 3
|
||||||
|
uniform float inNetherWastes;
|
||||||
|
uniform float inCrimsonForest;
|
||||||
|
uniform float inWarpedForest;
|
||||||
|
uniform float inBasaltDeltas;
|
||||||
|
uniform float inSoulValley;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef VERTEX_SHADER
|
||||||
|
uniform mat4 gbufferModelView;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//Very Common Variables//
|
||||||
|
const float OSIEBCA = 1.0 / 255.0; // One Step In Eight Bit Color Attachment
|
||||||
|
/* materialMask steps
|
||||||
|
IntegratedPBR:
|
||||||
|
OSIEBCA * 1.0 = Intense Fresnel
|
||||||
|
OSIEBCA * 2.0 = Copper Fresnel
|
||||||
|
OSIEBCA * 3.0 = Gold Fresnel
|
||||||
|
OSIEBCA * 4.0 =
|
||||||
|
OSIEBCA * 5.0 = Redstone Fresnel
|
||||||
|
.
|
||||||
|
OSIEBCA * 240.0 = Green Screen Lime Blocks
|
||||||
|
PBR Independant: (Limited to 241 and above)
|
||||||
|
OSIEBCA * 241.0 = Water
|
||||||
|
.
|
||||||
|
OSIEBCA * 252.0 = Versatile Selection Outline
|
||||||
|
OSIEBCA * 253.0 = Reduced Edge TAA
|
||||||
|
OSIEBCA * 254.0 = No SSAO, No TAA
|
||||||
|
OSIEBCA * 255.0 = *Unused as 1.0 is the clear color*
|
||||||
|
*/
|
||||||
|
|
||||||
|
float cloudMaxAdd = 5.0;
|
||||||
|
uniform float cloudHeight = 192.0;
|
||||||
|
uniform float eyeAltitude;
|
||||||
|
#if defined DOUBLE_REIM_CLOUDS && defined CLOUDS_REIMAGINED
|
||||||
|
float maximumCloudsHeight = max(CLOUD_ALT1, CLOUD_ALT2) + cloudMaxAdd;
|
||||||
|
#elif CLOUD_STYLE_DEFINE == 50
|
||||||
|
float maximumCloudsHeight = cloudHeight + cloudMaxAdd;
|
||||||
|
#else
|
||||||
|
float maximumCloudsHeight = CLOUD_ALT1 + cloudMaxAdd;
|
||||||
|
#endif
|
||||||
|
float cloudGradientLength = 30.0; // in blocks, probably...
|
||||||
|
float heightRelativeToCloud = clamp(1.0 - (eyeAltitude - maximumCloudsHeight) / cloudGradientLength, 0.0, 1.0);
|
||||||
|
|
||||||
|
const float shadowMapBias = 1.0 - 25.6 / shadowDistance;
|
||||||
|
float timeAngle = worldTime / 24000.0;
|
||||||
|
float noonFactor = sqrt(max(sin(timeAngle*6.28318530718),0.0));
|
||||||
|
float nightFactor = max(sin(timeAngle*(-6.28318530718)),0.0);
|
||||||
|
float invNightFactor = 1.0 - nightFactor;
|
||||||
|
float rainFactor2 = rainFactor * rainFactor;
|
||||||
|
float invRainFactor = 1.0 - rainFactor;
|
||||||
|
float invRainFactorSqrt = 1.0 - rainFactor * rainFactor;
|
||||||
|
float invNoonFactor = 1.0 - noonFactor;
|
||||||
|
float invNoonFactor2 = invNoonFactor * invNoonFactor;
|
||||||
|
|
||||||
|
float vsBrightness = clamp(screenBrightness, 0.0, 1.0);
|
||||||
|
|
||||||
|
int modifiedWorldDay = int(mod(worldDay, 100) + 5.0);
|
||||||
|
float syncedTime = (worldTime + modifiedWorldDay * 24000) * 0.05;
|
||||||
|
|
||||||
|
const float pi = 3.14159265359;
|
||||||
|
|
||||||
|
const float oceanAltitude = 61.9;
|
||||||
|
|
||||||
|
const vec3 blocklightCol = vec3(0.2, 0.1098, 0.0431) * vec3(XLIGHT_R, XLIGHT_G, XLIGHT_B);
|
||||||
|
|
||||||
|
const vec3 caveFogColorRaw = vec3(0.13, 0.13, 0.15);
|
||||||
|
#if MINIMUM_LIGHT_MODE <= 1
|
||||||
|
vec3 caveFogColor = caveFogColorRaw * 0.7;
|
||||||
|
#elif MINIMUM_LIGHT_MODE == 2
|
||||||
|
vec3 caveFogColor = caveFogColorRaw * (0.7 + 0.3 * vsBrightness); // Default
|
||||||
|
#elif MINIMUM_LIGHT_MODE >= 3
|
||||||
|
vec3 caveFogColor = caveFogColorRaw;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if WATERCOLOR_MODE >= 2
|
||||||
|
vec3 underwaterColorM1 = pow(fogColor, vec3(0.33, 0.21, 0.26));
|
||||||
|
#else
|
||||||
|
vec3 underwaterColorM1 = vec3(0.46, 0.62, 1.0);
|
||||||
|
#endif
|
||||||
|
#ifndef UNDERWATERCOLOR_CHANGED
|
||||||
|
vec3 underwaterColorM2 = underwaterColorM1;
|
||||||
|
#else
|
||||||
|
vec3 underwaterColorM2 = underwaterColorM1 * vec3(UNDERWATERCOLOR_RM, UNDERWATERCOLOR_GM, UNDERWATERCOLOR_BM);
|
||||||
|
#endif
|
||||||
|
vec3 waterFogColor = underwaterColorM2 * vec3(0.2 + 0.1 * vsBrightness);
|
||||||
|
|
||||||
|
#if NETHER_COLOR_MODE == 3 && defined FRAGMENT_SHADER
|
||||||
|
float netherColorMixer = inNetherWastes + inCrimsonForest + inWarpedForest + inBasaltDeltas + inSoulValley;
|
||||||
|
vec3 netherColor = mix(
|
||||||
|
fogColor * 0.6 + 0.2 * normalize(fogColor + 0.0001),
|
||||||
|
(
|
||||||
|
inNetherWastes * vec3(0.38, 0.15, 0.05) + inCrimsonForest * vec3(0.33, 0.07, 0.04) +
|
||||||
|
inWarpedForest * vec3(0.18, 0.1, 0.25) + inBasaltDeltas * vec3(0.25, 0.235, 0.23) +
|
||||||
|
inSoulValley * vec3(0.1, vec2(0.24))
|
||||||
|
),
|
||||||
|
netherColorMixer
|
||||||
|
);
|
||||||
|
#elif NETHER_COLOR_MODE == 2
|
||||||
|
vec3 netherColor = fogColor * 0.6 + 0.2 * normalize(fogColor + 0.0001);
|
||||||
|
#elif NETHER_COLOR_MODE == 0
|
||||||
|
vec3 netherColor = vec3(0.7, 0.26, 0.08) * 0.6;
|
||||||
|
#endif
|
||||||
|
vec3 lavaLightColor = vec3(0.15, 0.06, 0.01);
|
||||||
|
|
||||||
|
const vec3 endSkyColor = vec3(0.095, 0.07, 0.15) * 1.5;
|
||||||
|
|
||||||
|
#if WEATHER_TEX_OPACITY == 100
|
||||||
|
const float rainTexOpacity = 0.35;
|
||||||
|
const float snowTexOpacity = 0.5;
|
||||||
|
#else
|
||||||
|
#define WEATHER_TEX_OPACITY_M 100.0 / WEATHER_TEX_OPACITY
|
||||||
|
const float rainTexOpacity = pow(0.35, WEATHER_TEX_OPACITY_M);
|
||||||
|
const float snowTexOpacity = pow(0.5, WEATHER_TEX_OPACITY_M);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef FRAGMENT_SHADER
|
||||||
|
ivec2 texelCoord = ivec2(gl_FragCoord.xy);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const int cloudAlt1i = int(CLOUD_ALT1); // Old setting files can send float values
|
||||||
|
const int cloudAlt2i = int(CLOUD_ALT2);
|
||||||
|
|
||||||
|
//Very Common Functions//
|
||||||
|
#include "/spookylib/util/commonFunctions.glsl"
|
||||||
|
|
||||||
|
// 62 75 74 20 74 68 4F 73 65 20 77 68 6F 20 68 6F 70 65 20 69 6E 20 74 68 65 20 6C 69 6D 69 4E 61 6C 0A 77 69 6C 6C 20 72 65 6E 65 77 20 74 68 65 69 72 20 73 54 72 65 6E 67 74 48 2E 0A 74 68 65 79 20 77 69 6C 6C 20 73 6F 41 72 20 6F 6E 20 65 6C 79 54 72 61 73 20 6C 69 6B 65 20 70 68 61 6E 74 6F 6D 73 3B 0A 74 68 65 79 20 77 69 6C 6C 20 72 75 6E 20 61 6E 44 20 6E 6F 74 20 67 72 6F 77 20 77 65 41 72 79 2C 0A 74 68 65 59 20 77 69 6C 6C 20 77 61 6C 6B 20 61 6E 64 20 6E 6F 74 20 62 65 20 66 61 69 6E 74 2E
|
@ -0,0 +1,60 @@
|
|||||||
|
// GGX area light approximation from Horizon Zero Dawn
|
||||||
|
float GetNoHSquared(float radiusTan, float NoL, float NoV, float VoL) {
|
||||||
|
float radiusCos = 1.0 / sqrt(1.0 + radiusTan * radiusTan);
|
||||||
|
|
||||||
|
float RoL = 2.0 * NoL * NoV - VoL;
|
||||||
|
if (RoL >= radiusCos)
|
||||||
|
return 1.0;
|
||||||
|
|
||||||
|
float rOverLengthT = radiusCos * radiusTan / sqrt(1.0 - RoL * RoL);
|
||||||
|
float NoTr = rOverLengthT * (NoV - RoL * NoL);
|
||||||
|
float VoTr = rOverLengthT * (2.0 * NoV * NoV - 1.0 - RoL * VoL);
|
||||||
|
|
||||||
|
float triple = sqrt(clamp(1.0 - NoL * NoL - NoV * NoV - VoL * VoL + 2.0 * NoL * NoV * VoL, 0.0, 1.0));
|
||||||
|
|
||||||
|
float NoBr = rOverLengthT * triple, VoBr = rOverLengthT * (2.0 * triple * NoV);
|
||||||
|
float NoLVTr = NoL * radiusCos + NoV + NoTr, VoLVTr = VoL * radiusCos + 1.0 + VoTr;
|
||||||
|
float p = NoBr * VoLVTr, q = NoLVTr * VoLVTr, s = VoBr * NoLVTr;
|
||||||
|
float xNum = q * (-0.5 * p + 0.25 * VoBr * NoLVTr);
|
||||||
|
float xDenom = p * p + s * ((s - 2.0 * p)) + NoLVTr * ((NoL * radiusCos + NoV) * VoLVTr * VoLVTr +
|
||||||
|
q * (-0.5 * (VoLVTr + VoL * radiusCos) - 0.5));
|
||||||
|
float twoX1 = 2.0 * xNum / (xDenom * xDenom + xNum * xNum);
|
||||||
|
float sinTheta = twoX1 * xDenom;
|
||||||
|
float cosTheta = 1.0 - twoX1 * xNum;
|
||||||
|
NoTr = cosTheta * NoTr + sinTheta * NoBr;
|
||||||
|
VoTr = cosTheta * VoTr + sinTheta * VoBr;
|
||||||
|
|
||||||
|
float newNoL = NoL * radiusCos + NoTr;
|
||||||
|
float newVoL = VoL * radiusCos + VoTr;
|
||||||
|
float NoH = NoV + newNoL;
|
||||||
|
float HoH = 2.0 * newVoL + 2.0;
|
||||||
|
return clamp(NoH * NoH / HoH, 0.0, 1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
float GGX(vec3 normalM, vec3 viewPos, vec3 lightVec, float NdotLmax0, float smoothnessG) {
|
||||||
|
smoothnessG = sqrt1(smoothnessG * 0.9 + 0.1);
|
||||||
|
float roughnessP = (1.35 - smoothnessG);
|
||||||
|
float roughness = pow2(pow2(roughnessP));
|
||||||
|
|
||||||
|
vec3 halfVec = normalize(lightVec - viewPos);
|
||||||
|
|
||||||
|
float dotLH = clamp(dot(halfVec, lightVec), 0.0, 1.0);
|
||||||
|
float dotNV = dot(normalM, -viewPos);
|
||||||
|
|
||||||
|
#if WATER_REFLECT_QUALITY >= 2
|
||||||
|
float dotNH = GetNoHSquared(0.01, NdotLmax0, dotNV, dot(-viewPos, lightVec));
|
||||||
|
#else
|
||||||
|
float dotNH = pow2(min1(2.0 * NdotLmax0 * dotNV * length(halfVec) - dot(-viewPos, lightVec)));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
float denom = dotNH * roughness - dotNH + 1.0;
|
||||||
|
float D = roughness / (3.141592653589793 * pow2(denom));
|
||||||
|
float f0 = 0.05;
|
||||||
|
float F = exp2((-5.55473 * dotLH - 6.98316) * dotLH) * (1.0 - f0) + f0;
|
||||||
|
|
||||||
|
float NdotLmax0M = sqrt3(NdotLmax0 * max0(dot(normal, lightVec)));
|
||||||
|
float specular = max0(NdotLmax0M * D * F / pow2(dotLH));
|
||||||
|
specular = specular / (0.125 * specular + 1.0);
|
||||||
|
|
||||||
|
return specular;
|
||||||
|
}
|
@ -0,0 +1,502 @@
|
|||||||
|
//Lighting Uniforms//
|
||||||
|
uniform float darknessLightFactor;
|
||||||
|
|
||||||
|
#if HELD_LIGHTING_MODE >= 1
|
||||||
|
uniform int heldBlockLightValue;
|
||||||
|
uniform int heldBlockLightValue2;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//Lighting Includes//
|
||||||
|
#include "/spookylib/colors/lightAndAmbientColors.glsl"
|
||||||
|
#include "/spookylib/lighting/ggx.glsl"
|
||||||
|
|
||||||
|
#if defined REALTIME_SHADOWS && (defined OVERWORLD || defined END)
|
||||||
|
#include "/spookylib/lighting/shadowSampling.glsl"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined CLOUDS_REIMAGINED && defined CLOUD_SHADOWS
|
||||||
|
#if !defined GBUFFERS_WATER || WATER_STYLE == 1
|
||||||
|
uniform sampler2D gaux4;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "/spookylib/atmospherics/clouds/cloudCoord.glsl"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef LIGHT_COLOR_MULTS
|
||||||
|
#include "/spookylib/colors/colorMultipliers.glsl"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined MOON_PHASE_INF_LIGHT || defined MOON_PHASE_INF_REFLECTION
|
||||||
|
#include "/spookylib/colors/moonPhaseInfluence.glsl"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//
|
||||||
|
vec3 highlightColor = normalize(pow(lightColor, vec3(0.37))) * (0.3 + 1.5 * sunVisibility2) * (1.0 - 0.85 * rainFactor);
|
||||||
|
|
||||||
|
//Lighting//
|
||||||
|
void DoLighting(inout vec4 color, inout vec3 shadowMult, vec3 playerPos, vec3 viewPos, float lViewPos, vec3 normalM, vec2 lightmap,
|
||||||
|
bool noSmoothLighting, bool noDirectionalShading, bool noVanillaAO, bool centerShadowBias,
|
||||||
|
int subsurfaceMode, float smoothnessG, float highlightMult, float emission) {
|
||||||
|
lightmap.x *= 0.85;
|
||||||
|
float lightmapY2 = pow2(lightmap.y);
|
||||||
|
float lightmapYM = smoothstep1(lightmap.y);
|
||||||
|
float subsurfaceHighlight = 0.0;
|
||||||
|
float ambientMult = 1.0;
|
||||||
|
vec3 lightColorM = lightColor;
|
||||||
|
vec3 ambientColorM = ambientColor;
|
||||||
|
vec3 nViewPos = normalize(viewPos);
|
||||||
|
|
||||||
|
#if defined LIGHT_COLOR_MULTS && !defined GBUFFERS_WATER // lightColorMult is defined early in gbuffers_water
|
||||||
|
lightColorMult = GetLightColorMult();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
vec3 normalLighting = ViewToPlayer(normal);
|
||||||
|
#ifdef IS_IRIS
|
||||||
|
vec2 lightningAdd = lightningFlashEffect(playerPos, lightningBoltPosition.xyz, normalLighting, 450.0) * lightningBoltPosition.w * 5.0;
|
||||||
|
ambientColorM += lightningAdd.x;
|
||||||
|
#else
|
||||||
|
vec2 lightningAdd = lightningFlashEffect(playerPos, vec3(0.0), normalLighting, 450.0) * lightningFlashOptifine * 5.0;
|
||||||
|
ambientColorM += lightningAdd.x;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
float skyLightShadowMult = pow2(pow2(lightmapY2));
|
||||||
|
#else
|
||||||
|
float skyLightShadowMult = 1.0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined SIDE_SHADOWING || defined DIRECTIONAL_SHADING
|
||||||
|
float NdotN = dot(normalM, northVec);
|
||||||
|
float absNdotN = abs(NdotN);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined CUSTOM_PBR || defined GENERATED_NORMALS
|
||||||
|
float NPdotU = abs(dot(normal, upVec));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Shadows
|
||||||
|
#if defined OVERWORLD || defined END
|
||||||
|
float NdotL = dot(normalM, lightVec);
|
||||||
|
#ifdef GBUFFERS_WATER
|
||||||
|
//NdotL = mix(NdotL, 1.0, 1.0 - color.a);
|
||||||
|
#endif
|
||||||
|
#ifdef CUSTOM_PBR
|
||||||
|
float geoNdotLM = dot(normal, lightVec);
|
||||||
|
if (geoNdotLM > 0.0) geoNdotLM *= 10.0;
|
||||||
|
NdotL = min(geoNdotLM, NdotL);
|
||||||
|
|
||||||
|
NdotL *= 1.0 - 0.7 * (1.0 - pow2(pow2(NdotUmax0))) * NPdotU;
|
||||||
|
#endif
|
||||||
|
#if !defined REALTIME_SHADOWS && defined GBUFFERS_TERRAIN
|
||||||
|
if (subsurfaceMode == 1) {
|
||||||
|
NdotU = 1.0;
|
||||||
|
NdotUmax0 = 1.0;
|
||||||
|
NdotL = dot(upVec, lightVec);
|
||||||
|
} else if (subsurfaceMode == 2) {
|
||||||
|
highlightMult *= NdotL;
|
||||||
|
NdotL = mix(NdotL, 1.0, 0.35);
|
||||||
|
}
|
||||||
|
|
||||||
|
subsurfaceMode = 0;
|
||||||
|
#endif
|
||||||
|
float NdotLmax0 = max0(NdotL);
|
||||||
|
float NdotLM = NdotLmax0 * 0.9999;
|
||||||
|
|
||||||
|
#ifndef GBUFFERS_TEXTURED
|
||||||
|
#if defined GBUFFERS_TERRAIN
|
||||||
|
if (subsurfaceMode != 0) NdotLM = 1.0;
|
||||||
|
#ifdef SIDE_SHADOWING
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#ifdef SIDE_SHADOWING
|
||||||
|
NdotLM = max0(NdotL + 0.4) * 0.714;
|
||||||
|
|
||||||
|
#ifdef END
|
||||||
|
NdotLM = sqrt3(NdotLM);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
NdotLM = 1.0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined ENTITY_SHADOWS && (defined GBUFFERS_ENTITIES || defined GBUFFERS_BLOCK)
|
||||||
|
lightColorM = mix(lightColorM * 0.75, ambientColorM, 0.5 * pow2(pow2(1.0 - NdotLM)));
|
||||||
|
NdotLM = NdotLM * 0.75 + 0.25;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (shadowMult.r > 0.00001) {
|
||||||
|
#ifdef REALTIME_SHADOWS
|
||||||
|
if (NdotLM > 0.0001) {
|
||||||
|
vec3 shadowMultBeforeLighting = shadowMult;
|
||||||
|
float shadowLength = shadowDistance * 0.9166667 - length(vec4(playerPos.x, playerPos.y, playerPos.y, playerPos.z));
|
||||||
|
|
||||||
|
if (shadowLength > 0.000001) {
|
||||||
|
float offset = 0.0009765;
|
||||||
|
|
||||||
|
vec3 playerPosM = playerPos;
|
||||||
|
|
||||||
|
#if PIXEL_SHADOW > 0 && !defined GBUFFERS_HAND
|
||||||
|
playerPosM = floor((playerPosM + cameraPosition) * PIXEL_SHADOW + 0.001) / PIXEL_SHADOW - cameraPosition + 0.5 / PIXEL_SHADOW;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef GBUFFERS_TEXTURED
|
||||||
|
// Shadow bias without peter-panning
|
||||||
|
vec3 worldNormal = normalize(ViewToPlayer(normal*1000.0));
|
||||||
|
float distanceBias = pow(dot(playerPos, playerPos), 0.75);
|
||||||
|
distanceBias = 0.12 + 0.0008 * distanceBias;
|
||||||
|
vec3 bias = worldNormal * distanceBias * (2.0 - 0.95 * NdotLmax0); // 0.95 fixes pink petals noon shadows
|
||||||
|
|
||||||
|
#ifdef GBUFFERS_TERRAIN
|
||||||
|
if (subsurfaceMode == 2) {
|
||||||
|
bias *= vec3(0.0, 0.0, -0.75);
|
||||||
|
} else if (subsurfaceMode == 1) {
|
||||||
|
bias *= 1.0 - lightmapYM;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Fix light leaking in caves
|
||||||
|
if (lightmapYM < 0.999) {
|
||||||
|
#ifdef GBUFFERS_HAND
|
||||||
|
playerPosM = mix(vec3(0.0), playerPosM, 0.2 + 0.8 * lightmapYM);
|
||||||
|
#else
|
||||||
|
if (centerShadowBias) {
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
vec3 centerPos = floor(playerPosM + cameraPosition) - cameraPosition + 0.5;
|
||||||
|
playerPosM = mix(centerPos, playerPosM, 0.5 + 0.5 * lightmapYM);
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
vec3 edgeFactor = 0.2 * (0.5 - fract(playerPosM + cameraPosition + worldNormal * 0.01));
|
||||||
|
|
||||||
|
#ifdef GBUFFERS_WATER
|
||||||
|
bias *= 0.7;
|
||||||
|
playerPosM += (1.0 - lightmapYM) * edgeFactor;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
playerPosM += (1.0 - pow2(pow2(max(glColor.a, lightmapYM)))) * edgeFactor;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
playerPosM += bias;
|
||||||
|
#else
|
||||||
|
vec3 centerplayerPos = floor(playerPosM + cameraPosition) - cameraPosition + 0.5;
|
||||||
|
playerPosM = mix(centerplayerPos, playerPosM + vec3(0.0, 0.02, 0.0), lightmapYM);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
vec3 shadowPos = GetShadowPos(playerPosM);
|
||||||
|
|
||||||
|
bool leaves = false;
|
||||||
|
#ifdef GBUFFERS_TERRAIN
|
||||||
|
if (subsurfaceMode == 0) {
|
||||||
|
#if defined PERPENDICULAR_TWEAKS && defined SIDE_SHADOWING
|
||||||
|
offset *= 1.0 + pow2(absNdotN);
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
float VdotL = dot(nViewPos, lightVec);
|
||||||
|
float lightFactor = pow(max(VdotL, 0.0), 10.0) * float(isEyeInWater == 0);
|
||||||
|
if (subsurfaceMode == 1) {
|
||||||
|
offset = 0.0010235 * lightmapYM + 0.0009765;
|
||||||
|
shadowPos.z -= max(NdotL * 0.0001, 0.0) * lightmapYM;
|
||||||
|
subsurfaceHighlight = lightFactor * 0.8;
|
||||||
|
#ifndef SHADOW_FILTERING
|
||||||
|
shadowPos.z -= 0.0002;
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
leaves = true;
|
||||||
|
offset = 0.0005235 * lightmapYM + 0.0009765;
|
||||||
|
shadowPos.z -= 0.000175 * lightmapYM;
|
||||||
|
subsurfaceHighlight = lightFactor * 0.6;
|
||||||
|
#ifndef SHADOW_FILTERING
|
||||||
|
NdotLM = mix(NdotL, NdotLM, 0.5);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
shadowMult *= GetShadow(shadowPos, lViewPos, lightmap.y, offset, leaves);
|
||||||
|
}
|
||||||
|
|
||||||
|
float shadowSmooth = 16.0;
|
||||||
|
if (shadowLength < shadowSmooth) {
|
||||||
|
float shadowMixer = max0(shadowLength / shadowSmooth);
|
||||||
|
|
||||||
|
#ifdef GBUFFERS_TERRAIN
|
||||||
|
if (subsurfaceMode != 0) {
|
||||||
|
float shadowMixerM = pow2(shadowMixer);
|
||||||
|
|
||||||
|
if (subsurfaceMode == 1) skyLightShadowMult *= mix(0.6 + 0.3 * pow2(noonFactor), 1.0, shadowMixerM);
|
||||||
|
else skyLightShadowMult *= mix(NdotL * 0.4999 + 0.5, 1.0, shadowMixerM);
|
||||||
|
|
||||||
|
subsurfaceHighlight *= shadowMixer;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
shadowMult = mix(vec3(skyLightShadowMult * shadowMultBeforeLighting), shadowMult, shadowMixer);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CLOUD_SHADOWS
|
||||||
|
if (shadowMult.r > 0.0001) {
|
||||||
|
vec3 worldPos = playerPos + cameraPosition;
|
||||||
|
|
||||||
|
#ifdef CLOUDS_REIMAGINED
|
||||||
|
float EdotL = dot(eastVec, lightVec);
|
||||||
|
float EdotLM = tan(acos(EdotL));
|
||||||
|
|
||||||
|
#if SUN_ANGLE != 0
|
||||||
|
float NVdotLM = tan(acos(dot(northVec, lightVec)));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
float distToCloudLayer1 = cloudAlt1i - worldPos.y;
|
||||||
|
vec3 cloudOffset1 = vec3(distToCloudLayer1 / EdotLM, 0.0, 0.0);
|
||||||
|
#if SUN_ANGLE != 0
|
||||||
|
cloudOffset1.z += distToCloudLayer1 / NVdotLM;
|
||||||
|
#endif
|
||||||
|
vec2 cloudPos1 = GetRoundedCloudCoord(ModifyTracePos(worldPos + cloudOffset1, cloudAlt1i).xz);
|
||||||
|
float cloudSample = texture2D(gaux4, cloudPos1).b;
|
||||||
|
cloudSample *= clamp(distToCloudLayer1 * 0.1, 0.0, 1.0);
|
||||||
|
|
||||||
|
#ifdef DOUBLE_REIM_CLOUDS
|
||||||
|
float distToCloudLayer2 = cloudAlt2i - worldPos.y;
|
||||||
|
vec3 cloudOffset2 = vec3(distToCloudLayer2 / EdotLM, 0.0, 0.0);
|
||||||
|
#if SUN_ANGLE != 0
|
||||||
|
cloudOffset2.z += distToCloudLayer2 / NVdotLM;
|
||||||
|
#endif
|
||||||
|
vec2 cloudPos2 = GetRoundedCloudCoord(ModifyTracePos(worldPos + cloudOffset2, cloudAlt2i).xz);
|
||||||
|
float cloudSample2 = texture2D(gaux4, cloudPos2).b;
|
||||||
|
cloudSample2 *= clamp(distToCloudLayer2 * 0.1, 0.0, 1.0);
|
||||||
|
|
||||||
|
cloudSample = max(cloudSample, cloudSample2);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
cloudSample *= sqrt3(1.0 - abs(EdotL));
|
||||||
|
shadowMult *= 1.0 - 0.85 * cloudSample;
|
||||||
|
#else
|
||||||
|
vec2 csPos = worldPos.xz + worldPos.y * 0.25;
|
||||||
|
csPos.x += syncedTime;
|
||||||
|
csPos *= 0.0002;
|
||||||
|
|
||||||
|
vec2 shadowoffsets[8] = vec2[8](
|
||||||
|
vec2( 0.0 , 1.0 ),
|
||||||
|
vec2( 0.7071, 0.7071),
|
||||||
|
vec2( 1.0 , 0.0 ),
|
||||||
|
vec2( 0.7071,-0.7071),
|
||||||
|
vec2( 0.0 ,-1.0 ),
|
||||||
|
vec2(-0.7071,-0.7071),
|
||||||
|
vec2(-1.0 , 0.0 ),
|
||||||
|
vec2(-0.7071, 0.7071));
|
||||||
|
float cloudSample = 0.0;
|
||||||
|
for (int i = 0; i < 8; i++) {
|
||||||
|
cloudSample += texture2D(noisetex, csPos + 0.005 * shadowoffsets[i]).b;
|
||||||
|
}
|
||||||
|
|
||||||
|
shadowMult *= smoothstep1(pow2(min1(cloudSample * 0.2)));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
shadowMult *= skyLightShadowMult;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
shadowMult *= max(NdotLM * shadowTime, 0.0);
|
||||||
|
}
|
||||||
|
#ifdef GBUFFERS_WATER
|
||||||
|
else { // Low Quality Water
|
||||||
|
shadowMult = vec3(pow2(lightmapY2) * max(NdotLM * shadowTime, 0.0));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Blocklight
|
||||||
|
#if HELD_LIGHTING_MODE >= 1
|
||||||
|
float heldLight = max(heldBlockLightValue, heldBlockLightValue2);
|
||||||
|
float lViewPosL = lViewPos;
|
||||||
|
heldLight *= 1.1;
|
||||||
|
lViewPosL *= 2.5;
|
||||||
|
lightmap.x = max(lightmap.x, (heldLight - lViewPosL) * 0.066666);
|
||||||
|
#endif
|
||||||
|
float lightmapXM;
|
||||||
|
if (!noSmoothLighting) {
|
||||||
|
float lightmapXMSteep = pow2(pow2(lightmap.x * lightmap.x)) * (3.8 - 0.6 * vsBrightness);
|
||||||
|
float lightmapXMCalm = (lightmap.x) * (1.8 + 0.6 * vsBrightness);
|
||||||
|
lightmapXM = pow(lightmapXMSteep + lightmapXMCalm, 2.25);
|
||||||
|
} else lightmapXM = pow2(lightmap.x) * lightmap.x * 10.0;
|
||||||
|
|
||||||
|
//vec2 flickerNoise = texture2D(noisetex, vec2(frameTimeCounter * 0.06)).rb;
|
||||||
|
//lightmapXM *= mix(1.0, min1(max(flickerNoise.r, flickerNoise.g) * 1.7), 0.7);
|
||||||
|
|
||||||
|
// Minimum Light
|
||||||
|
float fadeDistance = max(1.0 - length(playerPos) / 80, 0.0);
|
||||||
|
fadeDistance = exp((1.0 - fadeDistance) * -15.0) * (1.0 - nightVision) + nightVision;
|
||||||
|
|
||||||
|
#if !defined END && MINIMUM_LIGHT_MODE > 0
|
||||||
|
#if MINIMUM_LIGHT_MODE == 1
|
||||||
|
vec3 minLighting = vec3(0.0036) * fadeDistance;
|
||||||
|
#elif MINIMUM_LIGHT_MODE == 2
|
||||||
|
vec3 minLighting = vec3(0.005625 + vsBrightness * 0.043) * fadeDistance;
|
||||||
|
#elif MINIMUM_LIGHT_MODE == 3
|
||||||
|
vec3 minLighting = vec3(0.0625) * fadeDistance;
|
||||||
|
#elif MINIMUM_LIGHT_MODE == 4
|
||||||
|
vec3 minLighting = vec3(0.25) * fadeDistance;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
minLighting *= 1.0 - lightmapYM; //AAA
|
||||||
|
#else
|
||||||
|
vec3 minLighting = vec3(0.0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
minLighting += nightVision * vec3(0.5, 0.5, 0.75);
|
||||||
|
|
||||||
|
// Lighting Tweaks
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
ambientMult = mix(lightmapYM, pow2(lightmapYM) * lightmapYM, rainFactor);
|
||||||
|
|
||||||
|
#ifndef REALTIME_SHADOWS
|
||||||
|
float tweakFactor = 1.0 + 0.6 * (1.0 - pow2(pow2(pow2(noonFactor))));
|
||||||
|
lightColorM /= tweakFactor;
|
||||||
|
ambientMult *= mix(tweakFactor, 1.0, 0.5 * NdotUmax0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if AMBIENT_MULT != 100
|
||||||
|
#define AMBIENT_MULT_M (AMBIENT_MULT - 100) * 0.006
|
||||||
|
vec3 shadowMultP = shadowMult / (0.1 + 0.9 * sqrt2(max0(NdotLM)));
|
||||||
|
ambientMult *= 1.0 + pow2(pow2(max0(1.0 - dot(shadowMultP, shadowMultP)))) * AMBIENT_MULT *
|
||||||
|
(0.5 + 0.2 * sunFactor + 0.8 * noonFactor) * (1.0 - rainFactor * 0.5);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (isEyeInWater != 1) {
|
||||||
|
float lxFactor = (sunVisibility2 * 0.4 + (0.6 - 0.6 * pow2(invNoonFactor))) * (6.0 - 5.0 * rainFactor);
|
||||||
|
lxFactor *= lightmapY2 + lightmapY2 * 2.0 * pow2(shadowMult.r);
|
||||||
|
lxFactor = max0(lxFactor - emission * 1000000.0);
|
||||||
|
lightmapXM *= pow(max(lightmap.x, 0.001), lxFactor);
|
||||||
|
|
||||||
|
// Less light in the distance / more light closer to the camera during rain or night to simulate thicker fog
|
||||||
|
float rainLF = 0.1 * rainFactor;
|
||||||
|
float lightFogTweaks = 1.0 + max0(96.0 - lViewPos) * (0.002 * (1.0 - sunVisibility2) + 0.0104 * rainLF) - rainLF;
|
||||||
|
ambientMult *= lightFogTweaks;
|
||||||
|
lightColorM *= lightFogTweaks;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GBUFFERS_HAND
|
||||||
|
ambientMult *= 1.3; // To improve held map visibility
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Directional Shading
|
||||||
|
float directionShade = 1.0;
|
||||||
|
#ifdef DIRECTIONAL_SHADING
|
||||||
|
if (!noDirectionalShading) {
|
||||||
|
float NdotE = dot(normalM, eastVec);
|
||||||
|
float absNdotE = abs(NdotE);
|
||||||
|
float absNdotE2 = pow2(absNdotE);
|
||||||
|
|
||||||
|
#if !defined NETHER
|
||||||
|
float NdotUM = 0.75 + NdotU * 0.25;
|
||||||
|
#else
|
||||||
|
float NdotUM = 0.75 + abs(NdotU + 0.5) * 0.16666;
|
||||||
|
#endif
|
||||||
|
float NdotNM = 1.0 + 0.075 * absNdotN;
|
||||||
|
float NdotEM = 1.0 - 0.1 * absNdotE2;
|
||||||
|
directionShade = NdotUM * NdotEM * NdotNM;
|
||||||
|
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
lightColorM *= 1.0 + absNdotE2 * 0.75;
|
||||||
|
#elif defined NETHER
|
||||||
|
directionShade *= directionShade;
|
||||||
|
ambientColorM += lavaLightColor * pow2(absNdotN * 0.5 + max0(-NdotU)) * (0.7 + 0.35 * vsBrightness);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined CUSTOM_PBR || defined GENERATED_NORMALS
|
||||||
|
float cpbrAmbFactor = NdotN * NPdotU;
|
||||||
|
cpbrAmbFactor = 1.0 - 0.3 * cpbrAmbFactor;
|
||||||
|
ambientColorM *= cpbrAmbFactor;
|
||||||
|
minLighting *= cpbrAmbFactor;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined OVERWORLD && defined PERPENDICULAR_TWEAKS && defined SIDE_SHADOWING
|
||||||
|
// Fake bounced light
|
||||||
|
ambientColorM = mix(ambientColorM, lightColorM, (0.05 + 0.03 * subsurfaceMode) * absNdotN * lightmapY2);
|
||||||
|
|
||||||
|
// Get a bit more natural looking lighting during noon
|
||||||
|
lightColorM *= 1.0 + max0(1.0 - subsurfaceMode) * pow(noonFactor, 20.0) * (pow2(absNdotN) - absNdotE2 * 0.1);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Combine Lighting
|
||||||
|
vec3 blockLighting = lightmapXM * blocklightCol;
|
||||||
|
vec3 sceneLighting = lightColorM * shadowMult + ambientColorM * ambientMult;
|
||||||
|
float dotSceneLighting = dot(sceneLighting, sceneLighting);
|
||||||
|
|
||||||
|
#ifdef LIGHT_COLOR_MULTS
|
||||||
|
sceneLighting *= lightColorMult;
|
||||||
|
#endif
|
||||||
|
#ifdef MOON_PHASE_INF_LIGHT
|
||||||
|
sceneLighting *= moonPhaseInfluence;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Vanilla Ambient Occlusion
|
||||||
|
float vanillaAO = 1.0;
|
||||||
|
#if VANILLAAO_I > 0
|
||||||
|
if (subsurfaceMode != 0) vanillaAO = min1(glColor.a * 1.15);
|
||||||
|
else if (!noVanillaAO) {
|
||||||
|
#ifdef GBUFFERS_TERRAIN
|
||||||
|
vanillaAO = min1(glColor.a + 0.08);
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
vanillaAO = pow(
|
||||||
|
pow1_5(vanillaAO),
|
||||||
|
1.0 + dotSceneLighting * 0.02 + NdotUmax0 * (0.15 + 0.25 * pow2(noonFactor * pow2(lightmapY2)))
|
||||||
|
);
|
||||||
|
#elif defined NETHER
|
||||||
|
vanillaAO = pow(
|
||||||
|
pow1_5(vanillaAO),
|
||||||
|
1.0 + NdotUmax0 * 0.5
|
||||||
|
);
|
||||||
|
#else
|
||||||
|
vanillaAO = pow(
|
||||||
|
vanillaAO,
|
||||||
|
0.75 + NdotUmax0 * 0.25
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
vanillaAO = glColor.a;
|
||||||
|
#endif
|
||||||
|
vanillaAO = vanillaAO * 0.9 + 0.1;
|
||||||
|
|
||||||
|
#if VANILLAAO_I != 100
|
||||||
|
#define VANILLAAO_IM VANILLAAO_I * 0.01
|
||||||
|
vanillaAO = pow(vanillaAO, VANILLAAO_IM);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Light Highlight
|
||||||
|
vec3 lightHighlight = vec3(0.0);
|
||||||
|
#ifdef LIGHT_HIGHLIGHT
|
||||||
|
float specularHighlight = GGX(normalM, nViewPos, lightVec, NdotLmax0, smoothnessG);
|
||||||
|
|
||||||
|
specularHighlight *= highlightMult;
|
||||||
|
|
||||||
|
lightHighlight = isEyeInWater != 1 ? shadowMult : pow(shadowMult, vec3(0.25)) * 0.35;
|
||||||
|
lightHighlight *= (subsurfaceHighlight + specularHighlight) * highlightColor;
|
||||||
|
|
||||||
|
#ifdef LIGHT_COLOR_MULTS
|
||||||
|
lightHighlight *= lightColorMult;
|
||||||
|
#endif
|
||||||
|
#ifdef MOON_PHASE_INF_REFLECTION
|
||||||
|
lightHighlight *= pow2(moonPhaseInfluence);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
lightHighlight *= 0.3;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Mix Colors
|
||||||
|
vec3 finalDiffuse = pow2(directionShade * vanillaAO) * (blockLighting + pow2(sceneLighting) + minLighting) + pow2(emission);
|
||||||
|
finalDiffuse = sqrt(max(finalDiffuse, vec3(0.0))); // sqrt() for a bit more realistic light mix, max() to prevent NaNs
|
||||||
|
|
||||||
|
// Apply Lighting
|
||||||
|
color.rgb *= finalDiffuse;
|
||||||
|
color.rgb += lightHighlight;
|
||||||
|
color.rgb *= pow2(1.0 - darknessLightFactor);
|
||||||
|
}
|
@ -0,0 +1,122 @@
|
|||||||
|
uniform sampler2D shadowcolor0;
|
||||||
|
uniform sampler2DShadow shadowtex0;
|
||||||
|
uniform sampler2DShadow shadowtex1;
|
||||||
|
|
||||||
|
vec3 GetShadowPos(vec3 playerPos) {
|
||||||
|
vec3 shadowPos = PlayerToShadow(playerPos);
|
||||||
|
float distb = sqrt(shadowPos.x * shadowPos.x + shadowPos.y * shadowPos.y);
|
||||||
|
float distortFactor = distb * shadowMapBias + (1.0 - shadowMapBias);
|
||||||
|
shadowPos.xy /= distortFactor;
|
||||||
|
shadowPos.z *= 0.2;
|
||||||
|
return shadowPos * 0.5 + 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 SampleShadow(vec3 shadowPos, float colorMult, float colorPow) {
|
||||||
|
float shadow0 = shadow2D(shadowtex0, vec3(shadowPos.st, shadowPos.z)).x;
|
||||||
|
|
||||||
|
vec3 shadowcol = vec3(0.0);
|
||||||
|
if (shadow0 < 1.0) {
|
||||||
|
float shadow1 = shadow2D(shadowtex1, vec3(shadowPos.st, shadowPos.z)).x;
|
||||||
|
if (shadow1 > 0.9999) {
|
||||||
|
shadowcol = texture2D(shadowcolor0, shadowPos.st).rgb * shadow1;
|
||||||
|
|
||||||
|
shadowcol *= colorMult;
|
||||||
|
shadowcol = pow(shadowcol, vec3(colorPow));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return shadowcol * (1.0 - shadow0) + shadow0;
|
||||||
|
}
|
||||||
|
|
||||||
|
float InterleavedGradientNoise() {
|
||||||
|
float n = 52.9829189 * fract(0.06711056 * gl_FragCoord.x + 0.00583715 * gl_FragCoord.y);
|
||||||
|
#if !defined GBUFFERS_ENTITIES && !defined GBUFFERS_HAND && !defined GBUFFERS_TEXTURED
|
||||||
|
return fract(n + 1.61803398875 * mod(float(frameCounter), 3600.0));
|
||||||
|
#else
|
||||||
|
return fract(n);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
vec2 offsetDist(float x, int s) {
|
||||||
|
float n = fract(x * 2.427) * 3.1415;
|
||||||
|
return vec2(cos(n), sin(n)) * 1.4 * x / s;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 SampleTAAFilteredShadow(vec3 shadowPos, float lViewPos, float offset, bool leaves, float colorMult, float colorPow) {
|
||||||
|
vec3 shadow = vec3(0.0);
|
||||||
|
float gradientNoise = InterleavedGradientNoise();
|
||||||
|
|
||||||
|
#if SHADOW_QUALITY == 0
|
||||||
|
int shadowSamples = 0; // We don't use SampleTAAFilteredShadow on Shadow Quality 0
|
||||||
|
#elif SHADOW_QUALITY == 1
|
||||||
|
int shadowSamples = 1;
|
||||||
|
#elif SHADOW_QUALITY == 2 || SHADOW_QUALITY == 3
|
||||||
|
int shadowSamples = 2;
|
||||||
|
#elif SHADOW_QUALITY == 4
|
||||||
|
int shadowSamples = 2;
|
||||||
|
if (lViewPos < 10.0) shadowSamples = 6;
|
||||||
|
#elif SHADOW_QUALITY == 5
|
||||||
|
int shadowSamples = 6;
|
||||||
|
if (lViewPos < 10.0) shadowSamples = 12;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined GBUFFERS_ENTITIES && !defined GBUFFERS_HAND && !defined GBUFFERS_TEXTURED
|
||||||
|
offset *= 1.3875;
|
||||||
|
#else
|
||||||
|
shadowSamples *= 2;
|
||||||
|
offset *= 0.69375;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
float shadowPosZM = shadowPos.z;
|
||||||
|
for (int i = 0; i < shadowSamples; i++) {
|
||||||
|
vec2 offset2 = offsetDist(gradientNoise + i, shadowSamples) * offset;
|
||||||
|
if (leaves) shadowPosZM = shadowPos.z - 0.12 * offset * (gradientNoise + i) / shadowSamples;
|
||||||
|
shadow += SampleShadow(vec3(shadowPos.st + offset2, shadowPosZM), colorMult, colorPow);
|
||||||
|
shadow += SampleShadow(vec3(shadowPos.st - offset2, shadowPosZM), colorMult, colorPow);
|
||||||
|
}
|
||||||
|
|
||||||
|
shadow /= shadowSamples * 2.0;
|
||||||
|
|
||||||
|
return shadow;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec2 shadowOffsets[4] = vec2[4](
|
||||||
|
vec2( 1.0, 0.0),
|
||||||
|
vec2( 0.0, 1.0),
|
||||||
|
vec2(-1.0, 0.0),
|
||||||
|
vec2( 0.0,-1.0));
|
||||||
|
|
||||||
|
vec3 SampleBasicFilteredShadow(vec3 shadowPos, float offset) {
|
||||||
|
float shadow = 0.0;
|
||||||
|
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
shadow += shadow2D(shadowtex0, vec3(offset * shadowOffsets[i] + shadowPos.st, shadowPos.z)).x;
|
||||||
|
}
|
||||||
|
|
||||||
|
return vec3(shadow * 0.25);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 GetShadow(vec3 shadowPos, float lViewPos, float lightmapY, float offset, bool leaves) {
|
||||||
|
#if SHADOW_QUALITY > 0
|
||||||
|
#if !defined ENTITY_SHADOWS && defined GBUFFERS_BLOCK
|
||||||
|
offset *= 4.0;
|
||||||
|
#else
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
offset *= 1.0 + rainFactor2 * 2.0;
|
||||||
|
#else
|
||||||
|
offset *= 3.0;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
float colorMult = 1.2 + 3.8 * lightmapY; // Natural strength is 5.0
|
||||||
|
float colorPow = 1.1 - 0.6 * pow2(pow2(pow2(lightmapY)));
|
||||||
|
|
||||||
|
#if SHADOW_QUALITY >= 1
|
||||||
|
vec3 shadow = SampleTAAFilteredShadow(shadowPos, lViewPos, offset, leaves, colorMult, colorPow);
|
||||||
|
#else
|
||||||
|
vec3 shadow = SampleBasicFilteredShadow(shadowPos, offset);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return shadow;
|
||||||
|
}
|
@ -0,0 +1,105 @@
|
|||||||
|
if (blockEntityId < 60028) {
|
||||||
|
if (blockEntityId < 60012) {
|
||||||
|
if (blockEntityId < 60004) {
|
||||||
|
if (blockEntityId == 10548) { // Enchanting Table:Book
|
||||||
|
smoothnessG = pow2(color.g) * 0.35;
|
||||||
|
|
||||||
|
if (color.b < 0.0001 && color.r > color.g) {
|
||||||
|
emission = color.g * 4.0;
|
||||||
|
}
|
||||||
|
} else if (blockEntityId == 60000) { //
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (blockEntityId == 60004) { // Signs
|
||||||
|
noSmoothLighting = true;
|
||||||
|
|
||||||
|
if (glColor.r + glColor.g + glColor.b <= 2.99 || lmCoord.x > 0.999) { // Sign Text
|
||||||
|
#include "/spookylib/materials/specificMaterials/others/signText.glsl"
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.66;
|
||||||
|
#endif
|
||||||
|
} else /*if (blockEntityId == 60008)*/ { // Chest
|
||||||
|
noSmoothLighting = true;
|
||||||
|
|
||||||
|
smoothnessG = pow2(color.g);
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.66;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (blockEntityId < 60020) {
|
||||||
|
if (blockEntityId == 60012) { // Ender Chest
|
||||||
|
noSmoothLighting = true;
|
||||||
|
|
||||||
|
float factor = min(pow2(color.g), 0.25);
|
||||||
|
smoothnessG = factor * 2.0;
|
||||||
|
|
||||||
|
if (color.g > color.r || color.b > color.g)
|
||||||
|
emission = pow2(factor) * 20.0;
|
||||||
|
emission += 0.35;
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.66;
|
||||||
|
#endif
|
||||||
|
} else /*if (blockEntityId == 60016)*/ { // Shulker Box+, Banner+, Head+, Bed+
|
||||||
|
noSmoothLighting = true;
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.2;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (blockEntityId == 60020) { // Conduit
|
||||||
|
noSmoothLighting = true;
|
||||||
|
lmCoordM.x = 0.9;
|
||||||
|
|
||||||
|
if (color.b > color.r) { // Conduit:Wind, Conduit:Blue Pixels of The Eye
|
||||||
|
emission = color.r * 16.0;
|
||||||
|
} else if (color.r > color.b * 2.5) { // Conduit:Red Pixels of The Eye
|
||||||
|
emission = 20.0;
|
||||||
|
color.rgb *= vec3(1.0, 0.25, 0.1);
|
||||||
|
}
|
||||||
|
} else /*if (blockEntityId == 60024)*/ { // End Portal
|
||||||
|
#include "/spookylib/materials/specificMaterials/others/endPortalEffect.glsl"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (blockEntityId < 60044) {
|
||||||
|
if (blockEntityId < 60036) {
|
||||||
|
if (blockEntityId == 60028) { // End Gateway
|
||||||
|
#include "/spookylib/materials/specificMaterials/others/endPortalEffect.glsl"
|
||||||
|
} else /*if (blockEntityId == 60032)*/ { // Bell
|
||||||
|
if (color.r + color.g > color.b + 0.5) { // Bell:Golden Part
|
||||||
|
#include "/spookylib/materials/specificMaterials/terrain/goldBlock.glsl"
|
||||||
|
} else {
|
||||||
|
#include "/spookylib/materials/specificMaterials/terrain/stone.glsl"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (blockEntityId == 60036) { //
|
||||||
|
|
||||||
|
} else /*if (blockEntityId == 60040)*/ { //
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (blockEntityId < 60052) {
|
||||||
|
if (blockEntityId == 60044) { //
|
||||||
|
|
||||||
|
} else /*if (blockEntityId == 60048)*/ { //
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (blockEntityId == 60052) { //
|
||||||
|
|
||||||
|
} else if (blockEntityId == 60056) { //
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,136 @@
|
|||||||
|
#ifdef POM
|
||||||
|
#include "/spookylib/materials/materialMethods/pomEffects.glsl"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void GetCustomMaterials(inout vec4 color, inout vec3 normalM, inout vec2 lmCoordM, inout float NdotU, inout vec3 shadowMult, inout float smoothnessG, inout float smoothnessD, inout float highlightMult, inout float emission, inout float materialMask, vec3 viewPos, float lViewPos) {
|
||||||
|
vec2 texCoordM = texCoord;
|
||||||
|
|
||||||
|
#ifdef POM
|
||||||
|
texCoordM = vTexCoord.xy * vTexCoordAM.zw + vTexCoordAM.xy;
|
||||||
|
|
||||||
|
float parallaxFade = pow2(lViewPos / POM_DISTANCE); // Still enabled to test: Lava, Painting
|
||||||
|
#ifdef GBUFFERS_ENTITIES
|
||||||
|
if (entityId == 50008) parallaxFade = 1.1; // Item Frame, Glow Item Frame
|
||||||
|
#endif
|
||||||
|
#ifdef GBUFFERS_BLOCK
|
||||||
|
if (blockEntityId == 60004) parallaxFade = 1.1; // Signs
|
||||||
|
#endif
|
||||||
|
#ifdef GBUFFERS_HAND
|
||||||
|
if (heldItemId == 40004 || heldItemId2 == 40004) parallaxFade = 1.1; // Filled Map
|
||||||
|
#endif
|
||||||
|
|
||||||
|
vec3 parallaxTraceCoordDepth = vec3(texCoordM, 1.0);
|
||||||
|
float parallaxTexDepth = 1.0;
|
||||||
|
vec2 parallaxLocalCoord = vTexCoord.st;
|
||||||
|
|
||||||
|
vec4 normalMap = ReadNormal(vTexCoord.st);
|
||||||
|
parallaxFade += pow(normalMap.a, 64.0);
|
||||||
|
|
||||||
|
if (parallaxFade < 1.0) {
|
||||||
|
parallaxLocalCoord = GetParallaxCoord(parallaxFade, texCoordM, parallaxTexDepth, parallaxTraceCoordDepth);
|
||||||
|
|
||||||
|
normalMap = textureGrad(normals, texCoordM, dcdx, dcdy);
|
||||||
|
color = textureGrad(tex, texCoordM, dcdx, dcdy);
|
||||||
|
#if !defined GBUFFERS_ENTITIES && !defined GBUFFERS_BLOCK
|
||||||
|
color.rgb *= glColor.rgb;
|
||||||
|
#else
|
||||||
|
color *= glColor;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
shadowMult *= GetParallaxShadow(parallaxFade, normalMap.a, parallaxLocalCoord, lightVec, tbnMatrix);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Normal Map
|
||||||
|
#if NORMAL_MAP_STRENGTH != 0
|
||||||
|
#ifndef POM
|
||||||
|
vec4 normalMap = texture2D(normals, texCoordM);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
normalM = normalMap.xyz;
|
||||||
|
normalM += vec3(0.5, 0.5, 0.0);
|
||||||
|
normalM = pow(normalM, vec3(NORMAL_MAP_STRENGTH * 0.007)); // 70% strength by default
|
||||||
|
normalM -= vec3(0.5, 0.5, 0.0);
|
||||||
|
normalM = normalM * 2.0 - 1.0;
|
||||||
|
|
||||||
|
#if RP_MODE == 3 // labPBR
|
||||||
|
if (normalM.x + normalM.y > -1.999) {
|
||||||
|
if (length(normalM.xy) > 1.0) normalM.xy = normalize(normalM.xy);
|
||||||
|
normalM.z = sqrt(1.0 - dot(normalM.xy, normalM.xy));
|
||||||
|
normalM.xyz = normalize(clamp(normalM.xyz, vec3(-1.0), vec3(1.0)));
|
||||||
|
} else normalM = vec3(0.0, 0.0, 1.0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined POM && POM_QUALITY >= 128 && POM_LIGHTING_MODE == 2
|
||||||
|
float slopeThreshold = max(1.0 / POM_QUALITY, 1.0/255.0);
|
||||||
|
if (parallaxTexDepth - parallaxTraceCoordDepth.z > slopeThreshold) {
|
||||||
|
vec3 slopeNormal = GetParallaxSlopeNormal(parallaxLocalCoord, parallaxTraceCoordDepth.z, viewVector);
|
||||||
|
normalM = mix(normalM, slopeNormal, 0.5 * pow2(max0(1.0 - parallaxFade * 2.0)));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
normalM = clamp(normalize(normalM * tbnMatrix), vec3(-1.0), vec3(1.0));
|
||||||
|
|
||||||
|
NdotU = dot(normalM, upVec);
|
||||||
|
NdotUmax0 = max0(NdotU);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if DIRECTIONAL_BLOCKLIGHT > 0
|
||||||
|
mat3 lightmapTBN = mat3(normalize(dFdx(viewPos)), normalize(dFdy(viewPos)), vec3(0.0));
|
||||||
|
lightmapTBN[2] = cross(lightmapTBN[0], lightmapTBN[1]);
|
||||||
|
|
||||||
|
float lmCoordXDir = lmCoordM.x;
|
||||||
|
vec2 deriv = vec2(dFdx(lmCoordXDir), dFdy(lmCoordXDir)) * 256.0;
|
||||||
|
vec3 dir = normalize(vec3(deriv.x * lightmapTBN[0] +
|
||||||
|
0.0005 * lightmapTBN[2] +
|
||||||
|
deriv.y * lightmapTBN[1]));
|
||||||
|
|
||||||
|
float pwr = clamp(dot(normalM, dir), -1.0, 1.0);
|
||||||
|
float absPwr = abs(pwr);
|
||||||
|
if (absPwr > 0.0) pwr = pow(absPwr, 9.0 / DIRECTIONAL_BLOCKLIGHT) * sign(pwr) * lmCoordXDir;
|
||||||
|
if (length(deriv) > 0.001) lmCoordXDir = pow(max(lmCoordXDir, 0.00001), 1.0 - pwr);
|
||||||
|
|
||||||
|
lmCoordM.x = mix(lmCoordM.x, lmCoordXDir, 0.01 * max0(100.0 - pow2(lViewPos)));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Specular Map
|
||||||
|
vec4 specularMap = texture2D(specular, texCoordM);
|
||||||
|
|
||||||
|
float smoothnessM = pow2(specularMap.r);
|
||||||
|
smoothnessG = smoothnessM;
|
||||||
|
smoothnessD = smoothnessM;
|
||||||
|
highlightMult = 1.0 + 2.5 * specularMap.r;
|
||||||
|
|
||||||
|
#if RP_MODE == 3 // labPBR
|
||||||
|
highlightMult *= 0.5 + 0.5 * specularMap.g;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if CUSTOM_EMISSION_INTENSITY > 0
|
||||||
|
#if RP_MODE == 2 // seuspbr
|
||||||
|
emission = specularMap.b;
|
||||||
|
#elif RP_MODE == 3 // labPBR
|
||||||
|
emission = specularMap.a < 1.0 ? specularMap.a : 0.0;
|
||||||
|
|
||||||
|
vec4 specularMapL0 = texture2DLod(specular, texCoordM, 0);
|
||||||
|
float emissionL0 = specularMapL0.a < 1.0 ? specularMapL0.a : 0.0;
|
||||||
|
emission = min(emission, emissionL0); // Fixes issues caused by mipmaps
|
||||||
|
#endif
|
||||||
|
emission *= 0.03 * CUSTOM_EMISSION_INTENSITY;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef GBUFFERS_WATER
|
||||||
|
#ifdef GBUFFERS_ENTITIES
|
||||||
|
if (materialMask > OSIEBCA * 240.1) return;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if RP_MODE == 2 // seuspbr
|
||||||
|
materialMask = specularMap.g * OSIEBCA * 240.0;
|
||||||
|
#elif RP_MODE == 3 // labPBR
|
||||||
|
if (specularMap.g < OSIEBCA * 229.1) {
|
||||||
|
materialMask = specularMap.g * OSIEBCA * 214.0;
|
||||||
|
} else {
|
||||||
|
materialMask = specularMap.g - OSIEBCA * 15.0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
}
|
@ -0,0 +1,66 @@
|
|||||||
|
if (materialMaskInt != 0) {
|
||||||
|
if (materialMaskInt < 9) {
|
||||||
|
if (materialMaskInt < 5) {
|
||||||
|
if (materialMaskInt < 3) {
|
||||||
|
if (materialMaskInt == 1) { // Intense Fresnel
|
||||||
|
intenseFresnel = 1.0;
|
||||||
|
} else /*if (materialMaskInt == 2)*/ { // Copper Fresnel
|
||||||
|
intenseFresnel = 1.0;
|
||||||
|
reflectColor = mix(vec3(0.5, 0.75, 0.5), vec3(1.0, 0.45, 0.3), sqrt1(smoothnessD));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (materialMaskInt == 3) { // Gold Fresnel
|
||||||
|
intenseFresnel = 1.0;
|
||||||
|
reflectColor = vec3(1.0, 0.8, 0.5);
|
||||||
|
} else /*if (materialMaskInt == 4)*/ { // End Portal
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (materialMaskInt < 7) {
|
||||||
|
if (materialMaskInt == 5) { // Redstone Fresnel
|
||||||
|
intenseFresnel = 1.0;
|
||||||
|
reflectColor = vec3(1.0, 0.3, 0.2);
|
||||||
|
} else /*if (materialMaskInt == 6)*/ { //
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (materialMaskInt == 7) { //
|
||||||
|
|
||||||
|
} else /*if (materialMaskInt == 8)*/ { //
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (materialMaskInt < 13) {
|
||||||
|
if (materialMaskInt < 11) {
|
||||||
|
if (materialMaskInt == 9) { //
|
||||||
|
|
||||||
|
} else /*if (materialMaskInt == 10)*/ { //
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (materialMaskInt == 11) { //
|
||||||
|
|
||||||
|
} else /*if (materialMaskInt == 12)*/ { //
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (materialMaskInt < 15) {
|
||||||
|
if (materialMaskInt == 13) { //
|
||||||
|
|
||||||
|
} else /*if (materialMaskInt == 14)*/ { //
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (materialMaskInt == 254) { // No SSAO, No TAA
|
||||||
|
ssao = 1.0;
|
||||||
|
} else /*if (materialMaskInt == "15 to 255 except 254")*/ { //
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,183 @@
|
|||||||
|
if (entityId < 50064) {
|
||||||
|
if (entityId < 50032) {
|
||||||
|
if (entityId < 50016) {
|
||||||
|
if (entityId < 50008) {
|
||||||
|
if (entityId == 50000) { // End Crystal
|
||||||
|
lmCoordM.x *= 0.7;
|
||||||
|
|
||||||
|
if (color.g * 1.2 < color.r) {
|
||||||
|
emission = 12.0 * color.g;
|
||||||
|
color.r *= 1.1;
|
||||||
|
}
|
||||||
|
} else if (entityId == 50004) { // Lightning Bolt
|
||||||
|
#include "/spookylib/materials/specificMaterials/entities/lightningBolt.glsl"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (entityId == 50008) { // Item Frame, Glow Item Frame
|
||||||
|
noSmoothLighting = true;
|
||||||
|
} else /*if (entityId == 50012)*/ { //
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (entityId < 50024) {
|
||||||
|
if (entityId == 50016) { // Player
|
||||||
|
if (entityColor.a < 0.001) {
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.5;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (CheckForColor(texelFetch(tex, ivec2(0, 0), 0).rgb, vec3(23, 46, 92))) {
|
||||||
|
for (int i = 63; i >= 56; i--) {
|
||||||
|
vec3 dif = color.rgb - texelFetch(tex, ivec2(i, 0), 0).rgb;
|
||||||
|
if (dif == clamp(dif, vec3(-0.001), vec3(0.001))) {
|
||||||
|
emission = 2.0 * texelFetch(tex, ivec2(i, 1), 0).r;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else /*if (entityId == 50020)*/ { // Blaze
|
||||||
|
lmCoordM = vec2(0.9, 0.0);
|
||||||
|
emission = min(color.r, 0.7) * 1.4;
|
||||||
|
|
||||||
|
float dotColor = dot(color.rgb, color.rgb);
|
||||||
|
if (abs(dotColor - 1.5) > 1.4) {
|
||||||
|
emission = 5.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (entityId == 50024) { // Creeper
|
||||||
|
emission = max0(color.b - color.g - color.r) * 10.0;
|
||||||
|
} else /*if (entityId == 50028)*/ { // Drowned
|
||||||
|
if (atlasSize.x < 900) {
|
||||||
|
if (CheckForColor(color.rgb, vec3(143, 241, 215)) ||
|
||||||
|
CheckForColor(color.rgb, vec3( 49, 173, 183)) ||
|
||||||
|
CheckForColor(color.rgb, vec3(101, 224, 221))) emission = 3.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (entityId < 50048) {
|
||||||
|
if (entityId < 50040) {
|
||||||
|
if (entityId == 50032) { // Guardian
|
||||||
|
vec3 absDif = abs(vec3(color.r - color.g, color.g - color.b, color.r - color.b));
|
||||||
|
float maxDif = max(absDif.r, max(absDif.g, absDif.b));
|
||||||
|
if (maxDif < 0.1 && color.b > 0.5 && color.b < 0.88) {
|
||||||
|
emission = pow2(pow1_5(color.b)) * 5.0;
|
||||||
|
color.rgb *= color.rgb;
|
||||||
|
}
|
||||||
|
} else /*if (entityId == 50036)*/ { // Elder Guardian
|
||||||
|
if (CheckForColor(color.rgb, vec3(203, 177, 165)) ||
|
||||||
|
CheckForColor(color.rgb, vec3(214, 155, 126))) {
|
||||||
|
emission = pow2(pow1_5(color.b)) * 10.0;
|
||||||
|
color.r *= 1.2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (entityId == 50040) { // Endermite
|
||||||
|
if (CheckForColor(color.rgb, vec3(87, 23, 50))) {
|
||||||
|
emission = 8.0;
|
||||||
|
color.rgb *= color.rgb;
|
||||||
|
}
|
||||||
|
} else /*if (entityId == 50044)*/ { // Ghast
|
||||||
|
if (entityColor.a < 0.001)
|
||||||
|
emission = max0(color.r - color.g - color.b) * 6.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (entityId < 50056) {
|
||||||
|
if (entityId == 50048) { // Glow Squid
|
||||||
|
lmCoordM.x = 0.0;
|
||||||
|
float dotColor = dot(color.rgb, color.rgb);
|
||||||
|
emission = pow2(pow2(min(dotColor * 0.65, 1.5))) + 0.45;
|
||||||
|
} else /*if (entityId == 50052)*/ { // Magma Cube
|
||||||
|
emission = color.g * 6.0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (entityId == 50056) { // Stray
|
||||||
|
if (CheckForColor(color.rgb, vec3(230, 242, 246)) && texCoord.y > 0.35)
|
||||||
|
emission = 3.7;
|
||||||
|
} else /*if (entityId == 50060)*/ { // Vex
|
||||||
|
lmCoordM = vec2(0.0);
|
||||||
|
emission = pow2(pow2(color.r)) * 3.5 + 0.5;
|
||||||
|
color.a *= color.a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (entityId < 50096) {
|
||||||
|
if (entityId < 50080) {
|
||||||
|
if (entityId < 50072) {
|
||||||
|
if (entityId == 50064) { // Witch
|
||||||
|
emission = 2.0 * color.g * float(color.g * 1.5 > color.b + color.r);
|
||||||
|
} else /*if (entityId == 50068)*/ { // Wither, Wither Skull
|
||||||
|
lmCoordM.x = 0.9;
|
||||||
|
emission = 3.0 * float(dot(color.rgb, color.rgb) > 1.0);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (entityId == 50072) { // Experience Orb
|
||||||
|
emission = 7.5;
|
||||||
|
|
||||||
|
color.rgb *= color.rgb;
|
||||||
|
} else /*if (entityId == 50076)*/ { // Boat
|
||||||
|
//playerPos.y += 0.18; // to avoid water shadow
|
||||||
|
playerPos.y += 0.38; // to also avoid the black inner shadow bug
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (entityId < 50088) {
|
||||||
|
if (entityId == 50080) { // Allay
|
||||||
|
if (atlasSize.x < 900) {
|
||||||
|
lmCoordM = vec2(0.0);
|
||||||
|
emission = float(color.r > 0.9 && color.b > 0.9) * 5.0 + color.g;
|
||||||
|
} else {
|
||||||
|
lmCoordM.x = 0.8;
|
||||||
|
}
|
||||||
|
} else /*if (entityId == 50084)*/ { // Slime
|
||||||
|
//only slime code is in Vertex Shader for now
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (entityId == 50088) { // Entity Flame (Iris Feature)
|
||||||
|
emission = 1.3;
|
||||||
|
} else /*if (entityId == 50092)*/ { // Trident Entity
|
||||||
|
#ifdef IS_IRIS
|
||||||
|
// Only on Iris, because otherwise it would be inconsistent with the Trident item
|
||||||
|
#include "/spookylib/materials/specificMaterials/others/trident.glsl"
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (entityId < 50112) {
|
||||||
|
if (entityId < 50104) {
|
||||||
|
if (entityId == 50096) { //
|
||||||
|
|
||||||
|
} else /*if (entityId == 50100)*/ { //
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (entityId == 50104) { //
|
||||||
|
|
||||||
|
} else /*if (entityId == 50108)*/ { //
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (entityId < 50120) {
|
||||||
|
if (entityId == 50112) { //
|
||||||
|
|
||||||
|
} else /*if (entityId == 50116)*/ { //
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (entityId == 50120) { //
|
||||||
|
|
||||||
|
} else /*if (entityId == 50124)*/ { //
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,221 @@
|
|||||||
|
int mat = currentRenderedItemId;
|
||||||
|
|
||||||
|
#ifdef GBUFFERS_HAND
|
||||||
|
float lViewPos = 0.0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int subsurfaceMode;
|
||||||
|
bool noDirectionalShading, noVanillaAO, centerShadowBias;
|
||||||
|
float noPuddles;
|
||||||
|
|
||||||
|
if (currentRenderedItemId < 45000) {
|
||||||
|
#include "/spookylib/materials/materialHandling/terrainMaterials.glsl"
|
||||||
|
} else
|
||||||
|
|
||||||
|
if (currentRenderedItemId < 45064) {
|
||||||
|
if (currentRenderedItemId < 45032) {
|
||||||
|
if (currentRenderedItemId < 45016) {
|
||||||
|
if (currentRenderedItemId < 45008) {
|
||||||
|
if (currentRenderedItemId == 45000) { // Armor Trims
|
||||||
|
smoothnessG = 0.5;
|
||||||
|
highlightMult = 2.0;
|
||||||
|
smoothnessD = 0.5;
|
||||||
|
|
||||||
|
#ifdef GLOWING_ARMOR_TRIM
|
||||||
|
emission = 2.0;
|
||||||
|
#endif
|
||||||
|
} else if (currentRenderedItemId == 45004) { // Wooden Tools, Bow, Fishing Rod
|
||||||
|
#include "/spookylib/materials/specificMaterials/planks/sprucePlanks.glsl"
|
||||||
|
smoothnessG = min(smoothnessG, 0.4);
|
||||||
|
smoothnessD = smoothnessG;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (currentRenderedItemId == 45008) { // Stone Tools
|
||||||
|
if (CheckForStick(color.rgb)) {
|
||||||
|
#include "/spookylib/materials/specificMaterials/planks/sprucePlanks.glsl"
|
||||||
|
} else {
|
||||||
|
#include "/spookylib/materials/specificMaterials/terrain/stone.glsl"
|
||||||
|
}
|
||||||
|
} else /*if (currentRenderedItemId == 45012)*/ { // Iron Tools, Iron Armor, Iron Ingot, Iron Nugget, Iron Horse Armor, Flint and Steel, Flint, Spyglass, Shears
|
||||||
|
if (CheckForStick(color.rgb)) {
|
||||||
|
#include "/spookylib/materials/specificMaterials/planks/sprucePlanks.glsl"
|
||||||
|
} else {
|
||||||
|
#include "/spookylib/materials/specificMaterials/terrain/ironBlock.glsl"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (currentRenderedItemId < 45024) {
|
||||||
|
if (currentRenderedItemId == 45016) { // Golden Tools, Golden Armor, Gold Ingot, Gold Nugget, Golden Apple, Enchanted Golden Apple, Golden Carrot, Golden Horse Armor, Copper Ingot
|
||||||
|
if (CheckForStick(color.rgb)) {
|
||||||
|
#include "/spookylib/materials/specificMaterials/planks/sprucePlanks.glsl"
|
||||||
|
} else {
|
||||||
|
#include "/spookylib/materials/specificMaterials/terrain/goldBlock.glsl"
|
||||||
|
}
|
||||||
|
} else /*if (currentRenderedItemId == 45020)*/ { // Diamond Tools, Diamond Armor, Diamond, Diamond Horse Armor, Emerald
|
||||||
|
if (CheckForStick(color.rgb)) {
|
||||||
|
#include "/spookylib/materials/specificMaterials/planks/sprucePlanks.glsl"
|
||||||
|
} else {
|
||||||
|
#include "/spookylib/materials/specificMaterials/terrain/diamondBlock.glsl"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (currentRenderedItemId == 45024) { // Netherite Tools, Netherite Armor, Netherite Ingot
|
||||||
|
smoothnessG = color.r * 2.0;
|
||||||
|
smoothnessG = min1(smoothnessG);
|
||||||
|
highlightMult = smoothnessG * 2.0;
|
||||||
|
smoothnessD = smoothnessG * 0.5 + 0.5;
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.33;
|
||||||
|
#endif
|
||||||
|
} else /*if (currentRenderedItemId == 45028)*/ { // Trident Item
|
||||||
|
#include "/spookylib/materials/specificMaterials/others/trident.glsl"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (currentRenderedItemId < 45048) {
|
||||||
|
if (currentRenderedItemId < 45040) {
|
||||||
|
if (currentRenderedItemId == 45032) { // Lava Bucket
|
||||||
|
if (color.r + color.g > color.b * 2.0) {
|
||||||
|
emission = color.r + color.g - color.b * 1.5;
|
||||||
|
emission *= 1.8;
|
||||||
|
color.rg += color.b * vec2(0.4, 0.15);
|
||||||
|
color.b *= 0.8;
|
||||||
|
} else {
|
||||||
|
#include "/spookylib/materials/specificMaterials/terrain/ironBlock.glsl"
|
||||||
|
}
|
||||||
|
} else /*if (currentRenderedItemId == 45036)*/ { // Bucket++
|
||||||
|
if (GetMaxColorDif(color.rgb) < 0.01) {
|
||||||
|
#include "/spookylib/materials/specificMaterials/terrain/ironBlock.glsl"
|
||||||
|
} else {
|
||||||
|
float factor = color.b;
|
||||||
|
smoothnessG = factor;
|
||||||
|
highlightMult = factor * 2.0;
|
||||||
|
smoothnessD = factor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (currentRenderedItemId == 45040) { // Blaze Rod, Blaze Powder
|
||||||
|
noSmoothLighting = false;
|
||||||
|
lmCoordM.x = 0.85;
|
||||||
|
emission = color.g;
|
||||||
|
color.rgb = sqrt1(color.rgb);
|
||||||
|
} else /*if (currentRenderedItemId == 45044)*/ { // Bottle o' Enchanting, Glow Inc Sac
|
||||||
|
emission = color.b * 2.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (currentRenderedItemId < 45056) {
|
||||||
|
if (currentRenderedItemId == 45048) { // Fire Charge
|
||||||
|
emission = max0(color.r + color.g - color.b * 0.5);
|
||||||
|
} else /*if (currentRenderedItemId == 45052)*/ { // Chorus Fruit
|
||||||
|
emission = max0(color.b * 2.0 - color.r) * 1.5;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (currentRenderedItemId == 45056) { // Amethyst Shard
|
||||||
|
materialMask = OSIEBCA; // Intense Fresnel
|
||||||
|
float factor = pow2(color.r);
|
||||||
|
smoothnessG = 0.8 - factor * 0.3;
|
||||||
|
highlightMult = factor * 3.0;
|
||||||
|
smoothnessD = factor;
|
||||||
|
} else /*if (currentRenderedItemId == 45060)*/ { // Shield
|
||||||
|
float factor = min(color.r * color.g * color.b * 4.0, 0.7);
|
||||||
|
smoothnessG = factor;
|
||||||
|
highlightMult = factor * 3.0;
|
||||||
|
smoothnessD = factor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (currentRenderedItemId < 45096) {
|
||||||
|
if (currentRenderedItemId < 45080) {
|
||||||
|
if (currentRenderedItemId < 45072) {
|
||||||
|
if (currentRenderedItemId == 45064) { // Turtle Shell
|
||||||
|
float factor = color.g * 0.7;
|
||||||
|
smoothnessG = factor;
|
||||||
|
highlightMult = factor * 3.0;
|
||||||
|
smoothnessD = factor;
|
||||||
|
} else /*if (currentRenderedItemId == 45068)*/ { // Ender Pearl
|
||||||
|
smoothnessG = 1.0;
|
||||||
|
highlightMult = 2.0;
|
||||||
|
smoothnessD = 1.0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (currentRenderedItemId == 45072) { // Eye of Ender
|
||||||
|
smoothnessG = 1.0;
|
||||||
|
highlightMult = 2.0;
|
||||||
|
smoothnessD = 1.0;
|
||||||
|
emission = max0(color.g - color.b * 0.25);
|
||||||
|
color.rgb = pow(color.rgb, vec3(1.0 - 0.75 * emission));
|
||||||
|
} else /*if (currentRenderedItemId == 45076)*/ { // Clock
|
||||||
|
if (
|
||||||
|
CheckForColor(color.rgb, vec3(255, 255, 0)) ||
|
||||||
|
CheckForColor(color.rgb, vec3(204, 204, 0)) ||
|
||||||
|
CheckForColor(color.rgb, vec3(73, 104, 216)) ||
|
||||||
|
CheckForColor(color.rgb, vec3(58, 83, 172)) ||
|
||||||
|
CheckForColor(color.rgb, vec3(108, 108, 137)) ||
|
||||||
|
CheckForColor(color.rgb, vec3(86, 86, 109))
|
||||||
|
) {
|
||||||
|
emission = 1.0;
|
||||||
|
color.rgb += vec3(0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "/spookylib/materials/specificMaterials/terrain/goldBlock.glsl"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (currentRenderedItemId < 45088) {
|
||||||
|
if (currentRenderedItemId == 45080) { // Compass
|
||||||
|
if (color.r - 0.1 > color.b + color.g) {
|
||||||
|
emission = color.r * 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "/spookylib/materials/specificMaterials/terrain/ironBlock.glsl"
|
||||||
|
} else /*if (currentRenderedItemId == 45084)*/ { // Echo Shard, Recovery Compass, Music Disc 5
|
||||||
|
emission = max0(color.b + color.g - color.r * 2.0);
|
||||||
|
|
||||||
|
#include "/spookylib/materials/specificMaterials/terrain/ironBlock.glsl"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (currentRenderedItemId == 45088) { // Nether Star
|
||||||
|
emission = pow2(color.r + color.g) * 0.5;
|
||||||
|
} else /*if (currentRenderedItemId == 45092)*/ { //
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (currentRenderedItemId < 45112) {
|
||||||
|
if (currentRenderedItemId < 45104) {
|
||||||
|
if (currentRenderedItemId == 45096) { //
|
||||||
|
|
||||||
|
} else /*if (currentRenderedItemId == 45100)*/ { //
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (currentRenderedItemId == 45104) { //
|
||||||
|
|
||||||
|
} else /*if (currentRenderedItemId == 45108)*/ { //
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (currentRenderedItemId < 45120) {
|
||||||
|
if (currentRenderedItemId == 45112) { //
|
||||||
|
|
||||||
|
} else /*if (currentRenderedItemId == 45116)*/ { //
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (currentRenderedItemId == 45120) { //
|
||||||
|
|
||||||
|
} else /*if (currentRenderedItemId == 45124)*/ { //
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,107 @@
|
|||||||
|
if (mat < 31008) {
|
||||||
|
if (mat < 30016) {
|
||||||
|
if (mat < 30008) {
|
||||||
|
if (mat == 30000) { // Stained Glass
|
||||||
|
#include "/spookylib/materials/specificMaterials/translucents/stainedGlass.glsl"
|
||||||
|
} else if (mat == 30004) { // Stained Glass Pane
|
||||||
|
#include "/spookylib/materials/specificMaterials/translucents/stainedGlass.glsl"
|
||||||
|
noSmoothLighting = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (mat == 30008) { // Tinted Glass
|
||||||
|
color.a = pow(color.a, 1.0 - fresnel * 0.65);
|
||||||
|
reflectMult = 0.75;
|
||||||
|
} else /*if (mat == 30012)*/ { // Slime Block
|
||||||
|
translucentMultCalculated = true;
|
||||||
|
reflectMult = 0.7;
|
||||||
|
translucentMult.rgb = pow2(color.rgb) * 0.2;
|
||||||
|
|
||||||
|
smoothnessG = color.g * 0.7;
|
||||||
|
highlightMult = 2.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (mat < 31000) {
|
||||||
|
if (mat == 30016) { // Honey Block
|
||||||
|
translucentMultCalculated = true;
|
||||||
|
reflectMult = 1.0;
|
||||||
|
translucentMult.rgb = pow2(color.rgb) * 0.2;
|
||||||
|
|
||||||
|
smoothnessG = color.r * 0.7;
|
||||||
|
highlightMult = 2.5;
|
||||||
|
} else /*if (mat == 30020)*/ { // Nether Portal
|
||||||
|
#ifdef FANCY_NETHERPORTAL
|
||||||
|
#include "/spookylib/materials/specificMaterials/translucents/netherPortal.glsl"
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (mat == 31000) { // Water
|
||||||
|
#include "/spookylib/materials/specificMaterials/translucents/water.glsl"
|
||||||
|
} else /*if (mat == 31004)*/ { // Ice
|
||||||
|
smoothnessG = pow2(color.g) * color.g;
|
||||||
|
highlightMult = pow2(min1(pow2(color.g) * 1.5)) * 3.5;
|
||||||
|
|
||||||
|
reflectMult = 0.7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (mat < 31024) {
|
||||||
|
if (mat < 31016) {
|
||||||
|
if (mat == 31008) { // Glass
|
||||||
|
#include "/spookylib/materials/specificMaterials/translucents/glass.glsl"
|
||||||
|
} else /*if (mat == 31012)*/ { // Glass Pane
|
||||||
|
if (color.a < 0.001 && abs(NdotU) > 0.95) discard; // Fixing artifacts on connected glass panes
|
||||||
|
#include "/spookylib/materials/specificMaterials/translucents/glass.glsl"
|
||||||
|
noSmoothLighting = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (mat == 31016) { // Beacon
|
||||||
|
lmCoordM.x = 0.88;
|
||||||
|
|
||||||
|
translucentMultCalculated = true;
|
||||||
|
translucentMult = vec4(0.0, 0.0, 0.0, 1.0);
|
||||||
|
|
||||||
|
if (color.b > 0.5) {
|
||||||
|
if (color.g - color.b < 0.01 && color.g < 0.99) {
|
||||||
|
#include "/spookylib/materials/specificMaterials/translucents/glass.glsl"
|
||||||
|
} else { // Beacon:Center
|
||||||
|
lmCoordM = vec2(0.0);
|
||||||
|
noDirectionalShading = true;
|
||||||
|
|
||||||
|
float lColor = length(color.rgb);
|
||||||
|
vec3 baseColor = vec3(0.1, 1.0, 0.92);
|
||||||
|
if (lColor > 1.5) color.rgb = baseColor + 0.22;
|
||||||
|
else if (lColor > 1.3) color.rgb = baseColor + 0.15;
|
||||||
|
else if (lColor > 1.15) color.rgb = baseColor + 0.09;
|
||||||
|
else color.rgb = baseColor + 0.05;
|
||||||
|
emission = 4.0;
|
||||||
|
}
|
||||||
|
} else { // Beacon:Obsidian
|
||||||
|
float factor = color.r * 1.5;
|
||||||
|
|
||||||
|
smoothnessG = factor;
|
||||||
|
highlightMult = 2.0 + min1(smoothnessG * 2.0) * 1.5;
|
||||||
|
smoothnessG = min1(smoothnessG);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else /*if (mat == 31020)*/ { //
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (mat < 31032) {
|
||||||
|
if (mat == 31024) { //
|
||||||
|
|
||||||
|
} else /*if (mat == 31028)*/ { //
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (mat == 31032) { //
|
||||||
|
|
||||||
|
} else /*if (mat == 31036)*/ { //
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
const float packSizeNT = 64.0;
|
||||||
|
|
||||||
|
void CoatTextures(inout vec3 color, float noiseFactor, vec3 playerPos) {
|
||||||
|
#ifndef ENTITY_GN_AND_CT
|
||||||
|
#if defined GBUFFERS_ENTITIES || defined GBUFFERS_HAND
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef SAFER_GENERATED_NORMALS
|
||||||
|
vec2 noiseCoord = floor(midCoordPos / 16.0 * packSizeNT * atlasSizeM) / packSizeNT / 3.0;
|
||||||
|
#else
|
||||||
|
vec2 offsetR = max(absMidCoordPos.x, absMidCoordPos.y) * vec2(float(atlasSizeM.y) / float(atlasSizeM.x), 1.0);
|
||||||
|
vec2 noiseCoord = floor(midCoordPos / 2.0 * packSizeNT / offsetR) / packSizeNT / 3.0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined GBUFFERS_ENTITIES && !defined GBUFFERS_HAND
|
||||||
|
vec3 floorWorldPos = floor(playerPos + cameraPosition + 0.001);
|
||||||
|
noiseCoord += 0.84 * (floorWorldPos.xz + floorWorldPos.y);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
float noiseTexture = texture2D(noisetex, noiseCoord).r;
|
||||||
|
noiseTexture = noiseTexture + 0.6;
|
||||||
|
float colorBrightness = dot(color, color) * 0.3;
|
||||||
|
#define COATED_TEXTURE_MULT_M COATED_TEXTURE_MULT * 0.0027
|
||||||
|
noiseFactor *= COATED_TEXTURE_MULT_M * max0(1.0 - colorBrightness);
|
||||||
|
noiseFactor *= max(1.0 - miplevel * 0.25, 0.0);
|
||||||
|
noiseTexture = pow(noiseTexture, noiseFactor);
|
||||||
|
color.rgb *= noiseTexture;
|
||||||
|
}
|
@ -0,0 +1,85 @@
|
|||||||
|
const float normalThreshold = 0.05;
|
||||||
|
const float normalClamp = 0.2;
|
||||||
|
const float packSizeGN = 128.0;
|
||||||
|
|
||||||
|
#ifndef GBUFFERS_HAND
|
||||||
|
const float normalMult = GENERATED_NORMAL_MULT * 0.025;
|
||||||
|
#else
|
||||||
|
const float normalMult = GENERATED_NORMAL_MULT * 0.015;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
float GetDif(float lOriginalAlbedo, vec2 offsetCoord) {
|
||||||
|
#ifndef GBUFFERS_WATER
|
||||||
|
float lNearbyAlbedo = length(texture2D(tex, offsetCoord).rgb);
|
||||||
|
#else
|
||||||
|
vec4 textureSample = texture2D(tex, offsetCoord);
|
||||||
|
float lNearbyAlbedo = length(textureSample.rgb * textureSample.a * 1.5);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GBUFFERS_ENTITIES
|
||||||
|
lOriginalAlbedo = abs(lOriginalAlbedo - 1.0);
|
||||||
|
lNearbyAlbedo = abs(lNearbyAlbedo - 1.0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
float dif = lOriginalAlbedo - lNearbyAlbedo;
|
||||||
|
|
||||||
|
#ifdef GBUFFERS_ENTITIES
|
||||||
|
dif = -dif;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef GBUFFERS_WATER
|
||||||
|
if (dif > 0.0) dif = max(dif - normalThreshold, 0.0);
|
||||||
|
else dif = min(dif + normalThreshold, 0.0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return clamp(dif, -normalClamp, normalClamp);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GenerateNormals(inout vec3 normalM, vec3 color) {
|
||||||
|
#ifndef ENTITY_GN_AND_CT
|
||||||
|
#if defined GBUFFERS_ENTITIES || defined GBUFFERS_HAND
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
vec2 absMidCoordPos2 = absMidCoordPos * 2.0;
|
||||||
|
float lOriginalAlbedo = length(color.rgb);
|
||||||
|
|
||||||
|
float normalMult = max0(1.0 - mipDelta) * normalMult;
|
||||||
|
|
||||||
|
#ifndef SAFER_GENERATED_NORMALS
|
||||||
|
vec2 offsetR = 16.0 / atlasSizeM;
|
||||||
|
#else
|
||||||
|
vec2 offsetR = max(absMidCoordPos2.x, absMidCoordPos2.y) * vec2(float(atlasSizeM.y) / float(atlasSizeM.x), 1.0);
|
||||||
|
#endif
|
||||||
|
offsetR /= packSizeGN;
|
||||||
|
|
||||||
|
vec2 midCoord = texCoord - midCoordPos;
|
||||||
|
vec2 maxOffsetCoord = midCoord + absMidCoordPos;
|
||||||
|
vec2 minOffsetCoord = midCoord - absMidCoordPos;
|
||||||
|
if (normalMult > 0.0) {
|
||||||
|
vec3 normalMap = vec3(0.0, 0.0, 1.0);
|
||||||
|
|
||||||
|
vec2 offsetCoord = texCoord + vec2( 0.0, offsetR.y);
|
||||||
|
if (offsetCoord.y < maxOffsetCoord.y)
|
||||||
|
normalMap.y += GetDif(lOriginalAlbedo, offsetCoord);
|
||||||
|
|
||||||
|
offsetCoord = texCoord + vec2( offsetR.x, 0.0);
|
||||||
|
if (offsetCoord.x < maxOffsetCoord.x)
|
||||||
|
normalMap.x += GetDif(lOriginalAlbedo, offsetCoord);
|
||||||
|
|
||||||
|
offsetCoord = texCoord + vec2( 0.0,-offsetR.y);
|
||||||
|
if (offsetCoord.y > minOffsetCoord.y)
|
||||||
|
normalMap.y -= GetDif(lOriginalAlbedo, offsetCoord);
|
||||||
|
|
||||||
|
offsetCoord = texCoord + vec2(-offsetR.x, 0.0);
|
||||||
|
if (offsetCoord.x > minOffsetCoord.x)
|
||||||
|
normalMap.x -= GetDif(lOriginalAlbedo, offsetCoord);
|
||||||
|
|
||||||
|
normalMap.xy *= normalMult;
|
||||||
|
normalMap.xy = clamp(normalMap.xy, vec2(-1.0), vec2(1.0));
|
||||||
|
|
||||||
|
if (normalMap.xy != vec2(0.0, 0.0))
|
||||||
|
normalM = clamp(normalize(normalMap * tbnMatrix), vec3(-1.0), vec3(1.0));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,127 @@
|
|||||||
|
#include "/spookylib/util/dither.glsl"
|
||||||
|
|
||||||
|
vec2 vTexCoord = signMidCoordPos * 0.5 + 0.5;
|
||||||
|
|
||||||
|
#include "/spookylib/util/dFdxdFdy.glsl"
|
||||||
|
|
||||||
|
vec4 ReadNormal(vec2 coord) {
|
||||||
|
coord = fract(coord) * vTexCoordAM.pq + vTexCoordAM.st;
|
||||||
|
return textureGrad(normals, coord, dcdx, dcdy);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec2 GetParallaxCoord(float parallaxFade, inout vec2 newCoord, inout float texDepth, inout vec3 traceCoordDepth) {
|
||||||
|
float invParallaxQuality = 1.0 / POM_QUALITY;
|
||||||
|
vec4 normalMap = ReadNormal(vTexCoord.st);
|
||||||
|
vec2 normalMapM = normalMap.xy * 2.0 - 1.0;
|
||||||
|
float normalCheck = normalMapM.x + normalMapM.y;
|
||||||
|
float minHeight = 1.0 - invParallaxQuality;
|
||||||
|
|
||||||
|
if (viewVector.z >= 0.0 || normalMap.a >= minHeight || normalCheck <= -1.999) return vTexCoord.st;
|
||||||
|
|
||||||
|
vec2 interval = viewVector.xy * 0.25 * (1.0 - parallaxFade) * POM_DEPTH / (-viewVector.z * POM_QUALITY);
|
||||||
|
|
||||||
|
float i = 0.0;
|
||||||
|
vec2 localCoord;
|
||||||
|
#if defined GBUFFERS_TERRAIN || defined GBUFFERS_BLOCK
|
||||||
|
float dither = Bayer64(gl_FragCoord.xy);
|
||||||
|
#ifdef TAA
|
||||||
|
dither = fract(dither + 1.61803398875 * mod(float(frameCounter), 3600.0));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (texDepth <= 1.0 - i * invParallaxQuality) {
|
||||||
|
localCoord = vTexCoord.st + i * interval;
|
||||||
|
texDepth = ReadNormal(localCoord).a;
|
||||||
|
i = dither;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (; i < POM_QUALITY && texDepth <= 1.0 - i * invParallaxQuality; i++) {
|
||||||
|
localCoord = vTexCoord.st + i * interval;
|
||||||
|
texDepth = ReadNormal(localCoord).a;
|
||||||
|
}
|
||||||
|
|
||||||
|
float pI = float(max(i - 1, 0));
|
||||||
|
traceCoordDepth.xy -= pI * interval;
|
||||||
|
traceCoordDepth.z -= pI * invParallaxQuality;
|
||||||
|
|
||||||
|
localCoord = fract(vTexCoord.st + pI * interval);
|
||||||
|
newCoord = localCoord * vTexCoordAM.pq + vTexCoordAM.st;
|
||||||
|
return localCoord;
|
||||||
|
}
|
||||||
|
|
||||||
|
float GetParallaxShadow(float parallaxFade, float height, vec2 coord, vec3 lightVec, mat3 tbn) {
|
||||||
|
float parallaxshadow = 1.0;
|
||||||
|
|
||||||
|
vec3 parallaxdir = tbn * lightVec;
|
||||||
|
parallaxdir.xy *= 1.0 * POM_DEPTH; // Angle
|
||||||
|
float stepL = 1.0 / 32.0;
|
||||||
|
|
||||||
|
for(int i = 0; i < 4 && parallaxshadow >= 0.01; i++) {
|
||||||
|
float stepLC = stepL * i;
|
||||||
|
|
||||||
|
float currentHeight = height + parallaxdir.z * stepLC;
|
||||||
|
|
||||||
|
vec2 parallaxCoord = fract(coord + parallaxdir.xy * stepLC) * vTexCoordAM.pq + vTexCoordAM.st;
|
||||||
|
float offsetHeight = textureGrad(normals, parallaxCoord, dcdx, dcdy).a;
|
||||||
|
|
||||||
|
parallaxshadow *= clamp(1.0 - (offsetHeight - currentHeight) * 4.0, 0.0, 1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return mix(parallaxshadow, 1.0, parallaxFade);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Big thanks to null511 for slope normals
|
||||||
|
vec3 GetParallaxSlopeNormal(vec2 texCoord, float traceDepth, vec3 viewDir) {
|
||||||
|
vec2 atlasPixelSize = 1.0 / atlasSize;
|
||||||
|
float atlasAspect = atlasSize.x / atlasSize.y;
|
||||||
|
vec2 atlasCoord = fract(texCoord) * vTexCoordAM.pq + vTexCoordAM.st;
|
||||||
|
|
||||||
|
vec2 tileSize = atlasSize * vTexCoordAM.pq;
|
||||||
|
vec2 tilePixelSize = 1.0 / tileSize;
|
||||||
|
|
||||||
|
vec2 tex_snapped = floor(atlasCoord * atlasSize) * atlasPixelSize;
|
||||||
|
vec2 tex_offset = atlasCoord - (tex_snapped + 0.5 * atlasPixelSize);
|
||||||
|
|
||||||
|
vec2 stepSign = sign(tex_offset);
|
||||||
|
vec2 viewSign = sign(viewDir.xy);
|
||||||
|
|
||||||
|
bool dir = abs(tex_offset.x * atlasAspect) < abs(tex_offset.y);
|
||||||
|
vec2 tex_x, tex_y;
|
||||||
|
|
||||||
|
if (dir) {
|
||||||
|
tex_x = texCoord - vec2(tilePixelSize.x * viewSign.x, 0.0);
|
||||||
|
tex_y = texCoord + vec2(0.0, stepSign.y * tilePixelSize.y);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tex_x = texCoord + vec2(tilePixelSize.x * stepSign.x, 0.0);
|
||||||
|
tex_y = texCoord - vec2(0.0, viewSign.y * tilePixelSize.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
float height_x = ReadNormal(tex_x).a;
|
||||||
|
float height_y = ReadNormal(tex_y).a;
|
||||||
|
|
||||||
|
if (dir) {
|
||||||
|
if (!(traceDepth > height_y && viewSign.y != stepSign.y)) {
|
||||||
|
if (traceDepth > height_x) return vec3(-viewSign.x, 0.0, 0.0);
|
||||||
|
|
||||||
|
if (abs(viewDir.y) > abs(viewDir.x))
|
||||||
|
return vec3(0.0, -viewSign.y, 0.0);
|
||||||
|
else
|
||||||
|
return vec3(-viewSign.x, 0.0, 0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return vec3(0.0, -viewSign.y, 0.0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (!(traceDepth > height_x && viewSign.x != stepSign.x)) {
|
||||||
|
if (traceDepth > height_y) return vec3(0.0, -viewSign.y, 0.0);
|
||||||
|
|
||||||
|
if (abs(viewDir.y) > abs(viewDir.x))
|
||||||
|
return vec3(0.0, -viewSign.y, 0.0);
|
||||||
|
else
|
||||||
|
return vec3(-viewSign.x, 0.0, 0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return vec3(-viewSign.x, 0.0, 0.0);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,135 @@
|
|||||||
|
#ifdef OVERWORLD
|
||||||
|
#include "/spookylib/atmospherics/sky.glsl"
|
||||||
|
#endif
|
||||||
|
#if defined END && defined DEFERRED1
|
||||||
|
#include "/spookylib/atmospherics/enderBeams.glsl"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
vec3 nvec3(vec4 pos) {
|
||||||
|
return pos.xyz/pos.w;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 refPos = vec3(0.0);
|
||||||
|
|
||||||
|
vec4 GetReflection(vec3 normalM, vec3 viewPos, vec3 nViewPos, vec3 playerPos, float lViewPos, float z0,
|
||||||
|
sampler2D depthtex, float dither, float skyLightFactor, float fresnel,
|
||||||
|
float smoothness, vec3 geoNormal, vec3 color, vec3 shadowMult, float highlightMult) {
|
||||||
|
vec3 rfragpos = vec3(0.0);
|
||||||
|
float dist = 0.0;
|
||||||
|
int sr = 0;
|
||||||
|
vec2 rEdge = vec2(0.6, 0.53);
|
||||||
|
vec3 normalMR = normalM;
|
||||||
|
|
||||||
|
#if defined GBUFFERS_WATER && defined GENERATED_NORMALS && WATER_STYLE == 1
|
||||||
|
normalMR = mix(geoNormal, normalM, 0.05);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
vec3 nViewPosR = reflect(nViewPos, normalMR);
|
||||||
|
float RVdotU = dot(normalize(nViewPosR), upVec);
|
||||||
|
float RVdotS = dot(normalize(nViewPosR), sunVec);
|
||||||
|
|
||||||
|
vec3 start = viewPos + normalMR * (lViewPos * 0.025 * (1.0 - fresnel) + 0.05);
|
||||||
|
vec3 vector = reflect(nViewPos, normalize(normalMR));
|
||||||
|
vector *= 0.5;
|
||||||
|
vec3 viewPosRT = viewPos + vector;
|
||||||
|
vec3 tvector = vector;
|
||||||
|
|
||||||
|
for(int i = 0; i < 30; i++) {
|
||||||
|
refPos = nvec3(gbufferProjection * vec4(viewPosRT, 1.0)) * 0.5 + 0.5;
|
||||||
|
if (abs(refPos.x - 0.5) > rEdge.x || abs(refPos.y - 0.5) > rEdge.y) break;
|
||||||
|
|
||||||
|
rfragpos = vec3(refPos.xy, texture2D(depthtex, refPos.xy).r);
|
||||||
|
rfragpos = nvec3(gbufferProjectionInverse * vec4(rfragpos * 2.0 - 1.0, 1.0));
|
||||||
|
dist = length(start - rfragpos);
|
||||||
|
|
||||||
|
float err = length(viewPosRT - rfragpos);
|
||||||
|
|
||||||
|
if (err < length(vector) * 3.0) {
|
||||||
|
sr++;
|
||||||
|
if (sr >= 6) break;
|
||||||
|
tvector -= vector;
|
||||||
|
vector *= 0.1;
|
||||||
|
}
|
||||||
|
vector *= 2.0;
|
||||||
|
tvector += vector * (0.95 + 0.1 * dither);
|
||||||
|
viewPosRT = start + tvector;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec2 absPos = abs(refPos.xy - 0.5);
|
||||||
|
vec2 cdist = absPos / rEdge;
|
||||||
|
float border = clamp(1.0 - pow(max(cdist.x, cdist.y), 50.0), 0.0, 1.0);
|
||||||
|
|
||||||
|
vec4 reflection = vec4(0.0);
|
||||||
|
if (refPos.z < 0.99997) {
|
||||||
|
reflection.a = border;
|
||||||
|
|
||||||
|
float lViewPosRT = length(rfragpos);
|
||||||
|
|
||||||
|
if (reflection.a > 0.001) {
|
||||||
|
vec2 edgeFactor = pow2(pow2(pow2(cdist)));
|
||||||
|
refPos.y += (dither - 0.5) * (0.05 * (edgeFactor.x + edgeFactor.y));
|
||||||
|
|
||||||
|
#ifdef DEFERRED1
|
||||||
|
float smoothnessDM = pow2(smoothness);
|
||||||
|
float lodFactor = 1.0 - exp(-0.125 * (1.0 - smoothnessDM) * dist);
|
||||||
|
float lod = log2(viewHeight / 8.0 * (1.0 - smoothnessDM) * lodFactor) * 0.45;
|
||||||
|
#ifdef CUSTOM_PBR
|
||||||
|
if (z0 <= 0.56) lod *= 2.22;
|
||||||
|
#endif
|
||||||
|
lod = max(lod - 1.0, 0.0);
|
||||||
|
|
||||||
|
reflection.rgb = texture2DLod(colortex0, refPos.xy, lod).rgb;
|
||||||
|
#else
|
||||||
|
reflection = texture2D(gaux2, refPos.xy);
|
||||||
|
reflection.rgb = pow2(reflection.rgb + 1.0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**/
|
||||||
|
float skyFade = 0.0;
|
||||||
|
DoFog(reflection.rgb, skyFade, lViewPosRT, ViewToPlayer(rfragpos.xyz), RVdotU, RVdotS, dither);
|
||||||
|
|
||||||
|
edgeFactor.x = pow2(edgeFactor.x);
|
||||||
|
edgeFactor = 1.0 - edgeFactor;
|
||||||
|
reflection.a *= pow(edgeFactor.x * edgeFactor.y, 2.0 + 3.0 * GetLuminance(reflection.rgb));
|
||||||
|
}
|
||||||
|
|
||||||
|
float posDif = lViewPosRT - lViewPos;
|
||||||
|
reflection.a *= clamp(posDif + 3.0, 0.0, 1.0);
|
||||||
|
}
|
||||||
|
#if defined DEFERRED1 && defined TEMPORAL_FILTER
|
||||||
|
else refPos.z = 1.0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (reflection.a < 1.0) {
|
||||||
|
#ifdef OVERWORLD
|
||||||
|
vec3 skyReflection = GetSky(RVdotU, RVdotS, dither, true, true);
|
||||||
|
|
||||||
|
//skyReflection += pow(lightColor, vec3(0.8)) * 0.6 * rainFactor2; // Add approximate light shaft color
|
||||||
|
|
||||||
|
skyReflection *= atmColorMult;
|
||||||
|
|
||||||
|
#ifdef DEFERRED1
|
||||||
|
skyReflection *= skyLightFactor;
|
||||||
|
#else
|
||||||
|
skyReflection = mix(color * 0.5, skyReflection, skyLightFactor);
|
||||||
|
|
||||||
|
float specularHighlight = GGX(normalM, nViewPos, lightVec, max(dot(normalM, lightVec), 0.0), smoothness);
|
||||||
|
skyReflection += specularHighlight * highlightColor * shadowMult * highlightMult * invRainFactor;
|
||||||
|
#endif
|
||||||
|
#elif defined END
|
||||||
|
#ifdef DEFERRED1
|
||||||
|
vec3 skyReflection = (endSkyColor + 0.4 * DrawEnderBeams(RVdotU, playerPos)) * skyLightFactor;
|
||||||
|
#else
|
||||||
|
vec3 skyReflection = endSkyColor * shadowMult;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
skyReflection *= atmColorMult;
|
||||||
|
#else
|
||||||
|
vec3 skyReflection = vec3(0.0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
reflection.rgb = mix(skyReflection, reflection.rgb, reflection.a);
|
||||||
|
}
|
||||||
|
|
||||||
|
return reflection;
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
float GetApproxDistance(float depth) {
|
||||||
|
return near * far / (far - depth * far);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoRefraction(inout vec3 color, inout float z0, inout float z1, vec3 viewPos, float lViewPos) {
|
||||||
|
// Prep
|
||||||
|
if (int(texelFetch(colortex1, texelCoord, 0).g * 255.1) != 241) return;
|
||||||
|
|
||||||
|
float fovScale = gbufferProjection[1][1];
|
||||||
|
|
||||||
|
vec3 playerPos = ViewToPlayer(viewPos.xyz);
|
||||||
|
vec3 worldPos = playerPos.xyz + cameraPosition.xyz;
|
||||||
|
vec2 worldPosRM = worldPos.xz * 0.02 + worldPos.y * 0.01 + 0.01 * frameTimeCounter;
|
||||||
|
|
||||||
|
vec2 refractNoise = texture2D(noisetex, worldPosRM).rb - vec2(0.5);
|
||||||
|
refractNoise *= WATER_REFRACTION_INTENSITY * fovScale / (3.0 + lViewPos);
|
||||||
|
|
||||||
|
#if WATER_STYLE < 3
|
||||||
|
refractNoise *= 0.015;
|
||||||
|
#else
|
||||||
|
refractNoise *= 0.02;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Check
|
||||||
|
float approxDif = GetApproxDistance(z1) - GetApproxDistance(z0);
|
||||||
|
refractNoise *= clamp(approxDif, 0.0, 1.0);
|
||||||
|
|
||||||
|
vec2 refractCoord = texCoord.xy + refractNoise;
|
||||||
|
|
||||||
|
if (int(texture2D(colortex1, refractCoord).g * 255.1) != 241) return;
|
||||||
|
|
||||||
|
float z0check = texture2D(depthtex0, refractCoord).r;
|
||||||
|
float z1check = texture2D(depthtex1, refractCoord).r;
|
||||||
|
float approxDifCheck = GetApproxDistance(z1check) - GetApproxDistance(z0check);
|
||||||
|
refractNoise *= clamp(approxDifCheck, 0.0, 1.0);
|
||||||
|
|
||||||
|
// Sample
|
||||||
|
refractCoord = texCoord.xy + refractNoise;
|
||||||
|
color = texture2D(colortex0, refractCoord).rgb;
|
||||||
|
z0 = texture2D(depthtex0, refractCoord).r;
|
||||||
|
z1 = texture2D(depthtex1, refractCoord).r;
|
||||||
|
}
|
@ -0,0 +1,131 @@
|
|||||||
|
vec3 GetWave(in vec3 pos, float waveSpeed) {
|
||||||
|
float wind = frameTimeCounter * waveSpeed * WAVING_SPEED;
|
||||||
|
|
||||||
|
float magnitude = sin(wind * 0.0027 + pos.z + pos.y) * 0.04 + 0.04;
|
||||||
|
magnitude *= mix(1.0, 2.5, rainFactor);
|
||||||
|
float d0 = sin(wind * 0.0127);
|
||||||
|
float d1 = sin(wind * 0.0089);
|
||||||
|
float d2 = sin(wind * 0.0114);
|
||||||
|
vec3 wave;
|
||||||
|
wave.x = sin(wind*0.0063 + d0 + d1 - pos.x + pos.z + pos.y) * magnitude;
|
||||||
|
wave.z = sin(wind*0.0224 + d1 + d2 + pos.x - pos.z + pos.y) * magnitude;
|
||||||
|
wave.y = sin(wind*0.0015 + d2 + d0 + pos.z + pos.y - pos.y) * magnitude;
|
||||||
|
|
||||||
|
#ifdef NO_WAVING_INDOORS
|
||||||
|
wave *= clamp(lmCoord.y - 0.87, 0.0, 0.1);
|
||||||
|
#else
|
||||||
|
wave *= 0.1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return wave * WAVING_I;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoWave_Foliage(inout vec3 playerPos, vec3 worldPos) {
|
||||||
|
worldPos.y *= 0.5;
|
||||||
|
|
||||||
|
vec3 wave = GetWave(worldPos, 170.0);
|
||||||
|
wave.x = wave.x * 8.0 + wave.y * 4.0;
|
||||||
|
wave.y = 0.0;
|
||||||
|
wave.z = wave.z * 3.0;
|
||||||
|
|
||||||
|
playerPos.xyz += wave;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoWave_GroundedFoliage(inout vec3 playerPos, vec3 worldPos) {
|
||||||
|
if (gl_MultiTexCoord0.t < mc_midTexCoord.t || fract(worldPos.y + 0.21) > 0.26) {
|
||||||
|
DoWave_Foliage(playerPos, worldPos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoWave_Leaves(inout vec3 playerPos, vec3 worldPos, float waveMult) {
|
||||||
|
worldPos *= vec3(0.5, 0.25, 0.5);
|
||||||
|
|
||||||
|
vec3 wave = GetWave(worldPos, 170.0);
|
||||||
|
wave *= vec3(8.0, 3.0, 4.0);
|
||||||
|
|
||||||
|
playerPos.xyz += wave * waveMult;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoWave_Water(inout vec3 playerPos, vec3 worldPos) {
|
||||||
|
if (fract(worldPos.y + 0.005) > 0.06) {
|
||||||
|
float waterWaveTime = frameTimeCounter * 6.0 * WAVING_SPEED;
|
||||||
|
worldPos.xz *= 18.0;
|
||||||
|
|
||||||
|
float wave = sin(waterWaveTime * 0.7 + worldPos.x * 0.14 + worldPos.z * 0.07);
|
||||||
|
wave += sin(waterWaveTime * 0.5 + worldPos.x * 0.10 + worldPos.z * 0.05);
|
||||||
|
|
||||||
|
#ifdef NO_WAVING_INDOORS
|
||||||
|
wave *= clamp(lmCoord.y - 0.87, 0.0, 0.1);
|
||||||
|
#else
|
||||||
|
wave *= 0.1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
playerPos.y += wave * 0.125 - 0.05;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoWave_Lava(inout vec3 playerPos, vec3 worldPos) {
|
||||||
|
if (fract(worldPos.y + 0.005) > 0.06) {
|
||||||
|
float lavaWaveTime = frameTimeCounter * 3.0 * WAVING_SPEED;
|
||||||
|
worldPos.xz *= 14.0;
|
||||||
|
|
||||||
|
float wave = sin(lavaWaveTime * 0.7 + worldPos.x * 0.14 + worldPos.z * 0.07);
|
||||||
|
wave += sin(lavaWaveTime * 0.5 + worldPos.x * 0.05 + worldPos.z * 0.10);
|
||||||
|
|
||||||
|
playerPos.y += wave * 0.0125;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoWave(inout vec3 playerPos, int mat) {
|
||||||
|
vec3 worldPos = playerPos.xyz + cameraPosition.xyz;
|
||||||
|
|
||||||
|
#if defined GBUFFERS_TERRAIN || defined SHADOW
|
||||||
|
#ifdef WAVING_FOLIAGE
|
||||||
|
if (mat == 10003 || mat == 10004) { // Grounded Waving Foliage
|
||||||
|
DoWave_GroundedFoliage(playerPos.xyz, worldPos);
|
||||||
|
} else if (mat == 10020 || mat == 10021) { // Upper Layer Waving Foliage
|
||||||
|
DoWave_Foliage(playerPos.xyz, worldPos);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined WAVING_LEAVES || defined WAVING_LAVA
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WAVING_LEAVES
|
||||||
|
if (mat == 10008) { // Leaves
|
||||||
|
DoWave_Leaves(playerPos.xyz, worldPos, 1.0);
|
||||||
|
} else if (mat == 10012) { // Vine
|
||||||
|
// Reduced waving on vines to prevent clipping through blocks
|
||||||
|
DoWave_Leaves(playerPos.xyz, worldPos, 0.75);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef WAVING_LAVA
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WAVING_LAVA
|
||||||
|
if (mat == 10068 || mat == 10069) { // Lava
|
||||||
|
DoWave_Lava(playerPos.xyz, worldPos);
|
||||||
|
|
||||||
|
#ifdef GBUFFERS_TERRAIN
|
||||||
|
// G8FL735 Fixes Optifine-Iris parity. Optifine has 0.9 gl_Color.rgb on a lot of versions
|
||||||
|
glColorRaw.rgb = min(glColorRaw.rgb, vec3(0.9));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined GBUFFERS_WATER || defined SHADOW
|
||||||
|
#ifdef WAVING_WATER_VERTEX
|
||||||
|
#if defined WAVING_ANYTHING_TERRAIN && defined SHADOW
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (mat == 31000) { // Water
|
||||||
|
DoWave_Water(playerPos.xyz, worldPos);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
#include "/spookylib/materials/specificMaterials/entities/itemFrame.glsl"
|
@ -0,0 +1 @@
|
|||||||
|
noSmoothLighting = true;
|
@ -0,0 +1 @@
|
|||||||
|
color = vec4(1.0, 1.25, 1.875, 1.0);
|
@ -0,0 +1,65 @@
|
|||||||
|
// End Portal fix by fayer3#2332 (Modified)
|
||||||
|
vec3[8] colors = vec3[](
|
||||||
|
vec3(0.3472479, 0.6559956, 0.7387838) * 1.5,
|
||||||
|
vec3(0.6010780, 0.7153565, 1.060625 ),
|
||||||
|
vec3(0.4221090, 0.8135094, 0.9026056),
|
||||||
|
vec3(0.3492291, 1.0241201, 1.8612821),
|
||||||
|
vec3(0.7543085, 0.8238697, 0.6803233),
|
||||||
|
vec3(0.4144472, 0.5648165, 0.8037 ),
|
||||||
|
vec3(0.508905 , 0.6719649, 0.9982805),
|
||||||
|
vec3(0.5361914, 0.4476583, 0.8008522));
|
||||||
|
color.rgb = vec3(0.4214321, 0.4722309, 1.9922364) * 0.08;
|
||||||
|
|
||||||
|
float dither = Bayer64(gl_FragCoord.xy);
|
||||||
|
#ifdef TAA
|
||||||
|
dither = fract(dither + 1.61803398875 * mod(float(frameCounter), 3600.0));
|
||||||
|
int repeat = 4;
|
||||||
|
#else
|
||||||
|
int repeat = 8;
|
||||||
|
#endif
|
||||||
|
float dismult = 0.5;
|
||||||
|
for (int j = 0; j < repeat; j++) {
|
||||||
|
float add = float(j + dither) * 0.0625 / float(repeat);
|
||||||
|
for (int i = 1; i <= 8; i++) {
|
||||||
|
float colormult = 0.9/(30.0+i);
|
||||||
|
float rotation = (i - 0.1 * i + 0.71 * i - 11 * i + 21) * 0.01 + i * 0.01;
|
||||||
|
float Cos = cos(radians(rotation));
|
||||||
|
float Sin = sin(radians(rotation));
|
||||||
|
vec2 offset = vec2(0.0, 1.0/(3600.0/24.0)) * pow(16.0 - i, 2.0) * 0.004;
|
||||||
|
|
||||||
|
vec3 wpos = normalize((gbufferModelViewInverse * vec4(viewPos * (i * dismult + 1), 1.0)).xyz);
|
||||||
|
if (abs(NdotU) > 0.9) {
|
||||||
|
wpos.xz /= wpos.y;
|
||||||
|
wpos.xz *= 0.06 * sign(- playerPos.y);
|
||||||
|
wpos.xz *= abs(playerPos.y) + i * dismult + add;
|
||||||
|
wpos.xz -= cameraPosition.xz * 0.05;
|
||||||
|
} else {
|
||||||
|
vec3 absPos = abs(playerPos);
|
||||||
|
if (abs(dot(normal, eastVec)) > 0.9) {
|
||||||
|
wpos.xz = wpos.yz / wpos.x;
|
||||||
|
wpos.xz *= 0.06 * sign(- playerPos.x);
|
||||||
|
wpos.xz *= abs(playerPos.x) + i * dismult + add;
|
||||||
|
wpos.xz -= cameraPosition.yz * 0.05;
|
||||||
|
} else {
|
||||||
|
wpos.xz = wpos.yx / wpos.z;
|
||||||
|
wpos.xz *= 0.06 * sign(- playerPos.z);
|
||||||
|
wpos.xz *= abs(playerPos.z) + i * dismult + add;
|
||||||
|
wpos.xz -= cameraPosition.yx * 0.05;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
vec2 pos = wpos.xz;
|
||||||
|
|
||||||
|
vec2 wind = fract((frameTimeCounter + 984.0) * (i + 8) * 0.125 * offset);
|
||||||
|
vec2 coord = mat2(Cos, Sin, -Sin, Cos) * pos + wind;
|
||||||
|
if (mod(float(i), 4) < 1.5) coord = coord.yx + vec2(-1.0, 1.0) * wind.y;
|
||||||
|
|
||||||
|
vec3 psample = pow(texture2D(tex, coord).rgb, vec3(0.85)) * colors[i-1] * colormult;
|
||||||
|
color.rgb += psample * length(psample.rgb) * (3000.0 / repeat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
color.rgb *= 0.4;
|
||||||
|
noDirectionalShading = true;
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.0;
|
||||||
|
#endif
|
@ -0,0 +1,15 @@
|
|||||||
|
normalM = upVec;
|
||||||
|
|
||||||
|
highlightMult = 0.0;
|
||||||
|
shadowMult = vec3(0.0);
|
||||||
|
|
||||||
|
#if MC_VERSION >= 11700
|
||||||
|
if (lmCoord.x > 0.99) { // Glowing Sign Text
|
||||||
|
lmCoordM = vec2(0.0);
|
||||||
|
|
||||||
|
emission = 1.0;
|
||||||
|
|
||||||
|
color.rgb *= length(color.rgb) + 0.5;
|
||||||
|
} else // Normal Sign Text
|
||||||
|
#endif
|
||||||
|
color.rgb *= 5.0;
|
@ -0,0 +1,4 @@
|
|||||||
|
smoothnessG = color.g;
|
||||||
|
smoothnessD = color.g;
|
||||||
|
|
||||||
|
emission = min(max0(dot(color.rgb, color.rgb) - 1.0) * 6.0, 1.0);
|
@ -0,0 +1,6 @@
|
|||||||
|
smoothnessG = pow2(pow2(color.r)) * 0.65;
|
||||||
|
smoothnessD = smoothnessG;
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.5;
|
||||||
|
#endif
|
@ -0,0 +1,3 @@
|
|||||||
|
smoothnessG = color.r * 0.4;
|
||||||
|
|
||||||
|
smoothnessD = color.r * 0.3;
|
@ -0,0 +1,6 @@
|
|||||||
|
smoothnessG = pow2(pow2(color.g)) * 0.75;
|
||||||
|
smoothnessD = smoothnessG;
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.66;
|
||||||
|
#endif
|
@ -0,0 +1,6 @@
|
|||||||
|
smoothnessG = pow2(pow2(color.g)) * 0.7;
|
||||||
|
smoothnessD = smoothnessG;
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.66;
|
||||||
|
#endif
|
@ -0,0 +1,6 @@
|
|||||||
|
smoothnessG = pow2(color.r) * 0.7;
|
||||||
|
smoothnessD = smoothnessG;
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.77;
|
||||||
|
#endif
|
@ -0,0 +1,6 @@
|
|||||||
|
smoothnessG = color.r * 0.7;
|
||||||
|
smoothnessD = smoothnessG;
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.66;
|
||||||
|
#endif
|
@ -0,0 +1,7 @@
|
|||||||
|
smoothnessG = pow2(pow2(pow2(color.g))) * 12.0;
|
||||||
|
smoothnessG = min1(smoothnessG);
|
||||||
|
smoothnessD = smoothnessG;
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.66;
|
||||||
|
#endif
|
@ -0,0 +1,3 @@
|
|||||||
|
smoothnessG = pow2(color.r) * 0.7;
|
||||||
|
smoothnessG = min1(smoothnessG);
|
||||||
|
smoothnessD = smoothnessG;
|
@ -0,0 +1,7 @@
|
|||||||
|
smoothnessG = pow2(pow2(pow2(color.g))) * 12.0;
|
||||||
|
smoothnessG = min1(smoothnessG);
|
||||||
|
smoothnessD = smoothnessG;
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.77;
|
||||||
|
#endif
|
@ -0,0 +1,7 @@
|
|||||||
|
smoothnessG = pow2(pow2(color.g)) * 8.0;
|
||||||
|
smoothnessG = min1(smoothnessG);
|
||||||
|
smoothnessD = smoothnessG;
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.66;
|
||||||
|
#endif
|
@ -0,0 +1,6 @@
|
|||||||
|
smoothnessG = pow2(color.g) * 0.7;
|
||||||
|
smoothnessD = smoothnessG;
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.77;
|
||||||
|
#endif
|
@ -0,0 +1,6 @@
|
|||||||
|
smoothnessG = color.r;
|
||||||
|
smoothnessD = color.r;
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.33;
|
||||||
|
#endif
|
@ -0,0 +1,2 @@
|
|||||||
|
smoothnessG = color.r;
|
||||||
|
smoothnessD = color.r * 0.65;
|
@ -0,0 +1,3 @@
|
|||||||
|
smoothnessG = pow2(pow2(color.g));
|
||||||
|
smoothnessD = smoothnessG;
|
||||||
|
smoothnessG = max(smoothnessG, 0.3 * color.g * float(color.g > color.b * 1.5));
|
@ -0,0 +1,7 @@
|
|||||||
|
float lColor = length(color.rgb);
|
||||||
|
smoothnessG = lColor * 0.2;
|
||||||
|
smoothnessD = lColor * 0.15;
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.66;
|
||||||
|
#endif
|
@ -0,0 +1,11 @@
|
|||||||
|
#include "/spookylib/materials/specificMaterials/terrain/obsidian.glsl"
|
||||||
|
|
||||||
|
highlightMult *= 0.5;
|
||||||
|
|
||||||
|
float factor0 = sqrt2(max0(color.b - color.g * 6.0));
|
||||||
|
float factor1 = pow2(color.b);
|
||||||
|
emission = 1.35 + pow2(pow2(factor1)) * 7.5;
|
||||||
|
emission *= factor0;
|
||||||
|
color.r *= 1.15;
|
||||||
|
|
||||||
|
maRecolor = vec3(factor0 * min(max0(factor1 * 0.7 - 0.1) * 1.3, 0.5));
|
@ -0,0 +1,3 @@
|
|||||||
|
smoothnessG = pow2(pow2(color.g)) * 4.0;
|
||||||
|
smoothnessG = min1(smoothnessG);
|
||||||
|
smoothnessD = smoothnessG;
|
@ -0,0 +1,25 @@
|
|||||||
|
materialMask = OSIEBCA; // Intense Fresnel
|
||||||
|
|
||||||
|
float factor = max(color.g, 0.8);
|
||||||
|
float factor2 = pow2(factor);
|
||||||
|
#ifdef GBUFFERS_TERRAIN
|
||||||
|
float factor4 = pow2(factor2);
|
||||||
|
#else
|
||||||
|
float factor4 = factor2;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
smoothnessG = factor - pow2(pow2(color.g)) * 0.4;
|
||||||
|
highlightMult = 3.0 * max(pow2(factor4), 0.2);
|
||||||
|
|
||||||
|
smoothnessD = factor4 * 0.75;
|
||||||
|
|
||||||
|
#if MC_VERSION < 11300
|
||||||
|
highlightMult *= 2.0;
|
||||||
|
smoothnessD /= 0.75;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
color.rgb *= 0.7 + 0.4 * GetLuminance(color.rgb);
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.5;
|
||||||
|
#endif
|
@ -0,0 +1 @@
|
|||||||
|
smoothnessG = color.r * 0.1 + 0.1;
|
@ -0,0 +1,14 @@
|
|||||||
|
materialMask = OSIEBCA; // Intense Fresnel
|
||||||
|
|
||||||
|
float factor = color.g;
|
||||||
|
float factor2 = pow2(factor);
|
||||||
|
float factor4 = pow2(factor2);
|
||||||
|
|
||||||
|
smoothnessG = factor - factor4 * 0.4;
|
||||||
|
highlightMult = 1.5 + 1.5 * factor4;
|
||||||
|
|
||||||
|
smoothnessD = factor4 * 0.75;
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.5;
|
||||||
|
#endif
|
@ -0,0 +1,3 @@
|
|||||||
|
// End Portal Frame:Green Parts
|
||||||
|
smoothnessG = 0.25;
|
||||||
|
smoothnessD = 0.45;
|
@ -0,0 +1,7 @@
|
|||||||
|
float factor = pow2(pow2(color.r));
|
||||||
|
smoothnessG = factor * 0.65;
|
||||||
|
smoothnessD = smoothnessG * 0.6;
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.66;
|
||||||
|
#endif
|
@ -0,0 +1,10 @@
|
|||||||
|
noSmoothLighting = true; noDirectionalShading = true;
|
||||||
|
lmCoordM = vec2(1.0, 0.0);
|
||||||
|
|
||||||
|
float blockRes = absMidCoordPos.x * atlasSize.x;
|
||||||
|
vec2 signMidCoordPosM = abs((floor((signMidCoordPos + 1.0) * blockRes) + 0.5) / blockRes - 1.0);
|
||||||
|
float value = 1.0 - max(signMidCoordPosM.x, signMidCoordPosM.y);
|
||||||
|
emission = 0.3 + value + pow(dot(color.rgb, color.rgb) * 0.33, frogPow);
|
||||||
|
emission *= 1.7;
|
||||||
|
|
||||||
|
color.rgb = pow2(color.rgb);
|
@ -0,0 +1,20 @@
|
|||||||
|
materialMask = OSIEBCA * 3.0; // Gold Fresnel
|
||||||
|
|
||||||
|
#ifdef GBUFFERS_TERRAIN
|
||||||
|
float colorG2 = pow2(color.g);
|
||||||
|
#else
|
||||||
|
float colorG2 = color.g;
|
||||||
|
#endif
|
||||||
|
float colorG4 = pow2(colorG2);
|
||||||
|
float factor = max(color.g, 0.8);
|
||||||
|
|
||||||
|
smoothnessG = min1(factor - colorG4 * 0.5);
|
||||||
|
highlightMult = 3.5 * max(colorG4, 0.2);
|
||||||
|
|
||||||
|
smoothnessD = colorG4;
|
||||||
|
|
||||||
|
color.rgb *= 0.5 + 0.4 * GetLuminance(color.rgb);
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.33;
|
||||||
|
#endif
|
@ -0,0 +1,14 @@
|
|||||||
|
#ifdef GBUFFERS_TERRAIN
|
||||||
|
smoothnessG = pow2(pow2(color.r));
|
||||||
|
#else
|
||||||
|
smoothnessG = pow2(color.r);
|
||||||
|
#endif
|
||||||
|
highlightMult = smoothnessG * 3.0;
|
||||||
|
smoothnessD = smoothnessG;
|
||||||
|
materialMask = OSIEBCA; // Intense Fresnel
|
||||||
|
|
||||||
|
color.rgb *= 0.6 + 0.5 * GetLuminance(color.rgb);
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.33;
|
||||||
|
#endif
|
@ -0,0 +1,6 @@
|
|||||||
|
smoothnessG = color.b;
|
||||||
|
smoothnessD = color.b;
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.66;
|
||||||
|
#endif
|
@ -0,0 +1,6 @@
|
|||||||
|
smoothnessG = pow2(color.b) * 0.8;
|
||||||
|
smoothnessD = smoothnessG;
|
||||||
|
|
||||||
|
#ifdef COATED_TEXTURES
|
||||||
|
noiseFactor = 0.5;
|
||||||
|
#endif
|
@ -0,0 +1,33 @@
|
|||||||
|
// Tweak to prevent the animation of lava causing brightness pulsing
|
||||||
|
vec3 avgColor = vec3(0.0);
|
||||||
|
ivec2 itexCoordC = ivec2(midCoord * atlasSize + 0.0001);
|
||||||
|
for (int x = -8; x < 8; x += 2) {
|
||||||
|
for (int y = -8; y < 8; y += 2) {
|
||||||
|
avgColor += texelFetch(tex, itexCoordC + ivec2(x, y), 0).rgb;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
color.rgb /= max(GetLuminance(avgColor) * 0.0390625, 0.001);
|
||||||
|
noDirectionalShading = true;
|
||||||
|
lmCoordM = vec2(0.0);
|
||||||
|
emission = GetLuminance(color.rgb) * 6.5;
|
||||||
|
|
||||||
|
vec3 worldPos = playerPos + cameraPosition;
|
||||||
|
vec2 lavaPos = (floor(worldPos.xz * 16.0) + worldPos.y * 32.0) * 0.000666;
|
||||||
|
vec2 wind = vec2(frameTimeCounter * 0.012, 0.0);
|
||||||
|
|
||||||
|
#ifdef NETHER
|
||||||
|
float noiseSample = texture2D(noisetex, lavaPos + wind).g;
|
||||||
|
noiseSample = noiseSample - 0.5;
|
||||||
|
noiseSample *= 0.1;
|
||||||
|
color.rgb = pow(color.rgb, vec3(1.0 + noiseSample));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (mat == 10068 || mat == 10069){
|
||||||
|
#include "/spookylib/materials/specificMaterials/terrain/lavaNoise.glsl"
|
||||||
|
}
|
||||||
|
|
||||||
|
#if RAIN_PUDDLES >= 1
|
||||||
|
noPuddles = 1.0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
color.rgb = max(color.rgb, 0.023); // so black spots still have some textures and aren't fully black
|
@ -0,0 +1,35 @@
|
|||||||
|
#ifdef GBUFFERS_TERRAIN
|
||||||
|
float columnNoise = 0.0;
|
||||||
|
float noise = 0.0;
|
||||||
|
vec3 lavaNoiseColor = color.rgb + 0.1;
|
||||||
|
float lavaNoiseEmission = emission;
|
||||||
|
if (mat == 10068 || columnNoise == 1.0) {
|
||||||
|
#ifdef NETHER
|
||||||
|
if (worldPos.y > 30 && worldPos.y < 32) {
|
||||||
|
noise += texture2D(noisetex, lavaPos * 0.2 + wind * 0.1).r;
|
||||||
|
noise += texture2D(noisetex, lavaPos * 0.8 + wind * 0.04).r * 0.5;
|
||||||
|
noise *= texture2D(noisetex, lavaPos * 0.1 + wind * 0.02).r * 0.5;
|
||||||
|
lavaNoiseEmission *= 1.6;
|
||||||
|
lavaNoiseColor *= smoothstep(0.00, 0.50, noise);
|
||||||
|
lavaNoiseColor.r *= 1.2;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
noise += texture2D(noisetex, lavaPos * 0.05 + wind * 0.01).r;
|
||||||
|
noise -= texture2D(noisetex, lavaPos * 1.5 + wind * 0.05).r * 0.3;
|
||||||
|
noise += texture2D(noisetex, lavaPos * 0.1).r * 0.7;
|
||||||
|
lavaNoiseColor *= smoothstep(0.00, 0.70, noise);
|
||||||
|
lavaNoiseColor.r *= 1.5;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
noise += texture2D(noisetex, lavaPos * 0.2 + wind * 0.01).g;
|
||||||
|
noise -= texture2D(noisetex, lavaPos * 2.0 + wind * 0.05).g * 0.3;
|
||||||
|
noise += texture2D(noisetex, lavaPos * 0.1).g * 0.3;
|
||||||
|
lavaNoiseColor *= smoothstep(0.00, 0.70, noise);
|
||||||
|
lavaNoiseColor.r *= 1.25;
|
||||||
|
lavaNoiseEmission *= 1.1;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
color.rgb = mix(color.rgb, lavaNoiseColor, lavaNoiseIntensity);
|
||||||
|
emission = mix(emission, lavaNoiseEmission, lavaNoiseIntensity);
|
||||||
|
#endif
|
@ -0,0 +1,19 @@
|
|||||||
|
subsurfaceMode = 2;
|
||||||
|
materialMask = OSIEBCA * 253.0; // Reduced Edge TAA
|
||||||
|
|
||||||
|
#ifdef IPBR
|
||||||
|
float factor = min1(pow2(color.g - 0.15 * (color.r + color.b)) * 2.5);
|
||||||
|
smoothnessG = factor * 0.5;
|
||||||
|
highlightMult = factor * 4.0 + 2.0;
|
||||||
|
float fresnel = clamp(1.0 + dot(normalM, normalize(viewPos)), 0.0, 1.0);
|
||||||
|
highlightMult *= 1.0 - pow2(pow2(fresnel));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef SNOWY_WORLD
|
||||||
|
snowMinNdotU = min(pow2(pow2(color.g)), 0.1);
|
||||||
|
color.rgb = color.rgb * 0.5 + 0.5 * (color.rgb / glColor.rgb);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined REALTIME_SHADOWS && SHADOW_QUALITY < 3
|
||||||
|
shadowMult = vec3(sqrt1(max0(max(lmCoordM.y, min1(lmCoordM.x * 2.0)) - 0.95) * 20.0));
|
||||||
|
#endif
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user