Files
Gregtech-New-Bastards/.minecraft/shaderpacks/ComplementaryShaders_v4.6/shaders/lib/ifchecks/terrainFragment.glsl
2025-09-28 22:53:13 +02:00

353 lines
19 KiB
GLSL

if (mat > 100.5 && mat < 10000.0) {
if (mat < 152.5) {
if (mat < 132.5) {
if (mat < 124.5) {
if (material == 120.0) { // Redstone Stuff
#ifndef WORLD_CURVATURE
float comPos = fract(worldPos.y + cameraPosition.y);
#else
float comPos = fract(oldPosition.y + cameraPosition.y);
#endif
if (comPos > 0.18) emissive = float((albedo.r > 0.65 && albedo.r > albedo.b * 1.0) || albedo.b > 0.99);
else emissive = float(albedo.r > albedo.b * 3.0 && albedo.r > 0.5) * 0.125;
emissive *= max(0.65 - 0.3 * dot(albedo.rgb, vec3(1.0, 1.0, 0.0)), 0.0);
if (specB > 900.0) { // Observer
emissive *= float(albedo.r > albedo.g * 1.5);
}
}
else if (material == 124.0) { // Warped Stem+
#ifdef EMISSIVE_NETHER_STEMS
float core = float(albedo.r < 0.1);
float edge = float(albedo.b > 0.35 && albedo.b < 0.401 && core == 0.0);
emissive = core * 0.195 + 0.035 * edge;
#endif
}
} else {
if (material == 128.0) { // Crimson Stem+
#ifdef EMISSIVE_NETHER_STEMS
emissive = float(albedo.b < 0.16);
emissive = min(pow2(lAlbedoP * lAlbedoP) * emissive * 3.0, 0.3);
#endif
}
if (material == 130.0) { // Sculk++
emissive *= max((albedo.b - albedo.r) - 0.1, 0.0) * 0.5
+ 100.0 * max(albedo.g - albedo.b, 0.0) * float(albedo.r < albedo.b - 0.1)
;
}
else if (material == 132.0) { // Command Blocks
#ifndef WORLD_CURVATURE
vec3 comPos = fract(worldPos.xyz + cameraPosition.xyz);
#else
vec3 comPos = fract(oldPosition.xyz + cameraPosition.xyz);
#endif
comPos = abs(comPos - vec3(0.5));
float comPosM = min(max(comPos.x, comPos.y), min(max(comPos.x, comPos.z), max(comPos.y, comPos.z)));
emissive = 0.0;
if (comPosM < 0.1882) { // Command Block Center
vec3 dif = vec3(albedo.r - albedo.b, albedo.r - albedo.g, albedo.b - albedo.g);
dif = abs(dif);
emissive = float(max(dif.r, max(dif.g, dif.b)) > 0.1) * 25.0;
emissive *= float(albedo.r > 0.44 || albedo.g > 0.29);
if (CheckForColor(albedo.rgb, vec3(207, 166, 139)) // Fix for Iris' precision
|| CheckForColor(albedo.rgb, vec3(201, 143, 107))
|| CheckForColor(albedo.rgb, vec3(161, 195, 180))
|| CheckForColor(albedo.rgb, vec3(131, 181, 145))
|| CheckForColor(albedo.rgb, vec3(155, 139, 207))
|| CheckForColor(albedo.rgb, vec3(135, 121, 181))) emissive = 0.0;
#ifdef ALTERNATIVE_COMMAND_BLOCK
if (emissive > 0.01) {
albedo.rgb *= vec3(0.88, 1.32, 1.9);
albedo.g = sqrt1(albedo.g) * 0.6;
albedo.rgb *= albedo.rgb * 2.0;
}
#endif
}
vec3 dif = abs(vec3(albedo.r - albedo.g, albedo.g - albedo.b, albedo.r - albedo.b));
float maxDif = max(dif.r, max(dif.g, dif.b));
smoothness = 0.38;
if (maxDif < 0.05) smoothness = 0.6;
metalness = 1.0;
}
}
} else {
if (mat < 144.5) {
if (material == 136.0) { // Snowy Grass Block
if (lAlbedoP > 1.0) smoothness = lAlbedoP * lAlbedoP * 0.165;
else metalness = 0.003;
}
else if (material == 140.0) { // Dragon Egg, Spawner
emissive = float(albedo.r + albedo.b > albedo.g * 30.0 && lAlbedoP < 0.6);
emissive *= 8.0 + float(lAlbedoP < 0.4) * 100.0;
if (albedo.b + albedo.g > albedo.r * 2.0 && lAlbedoP > 0.2) { // Spawner Metal
smoothness = 0.385;
metalness = 0.8;
}
if (max(abs(albedo.r - albedo.b), abs(albedo.g - albedo.r)) < 0.01) { // Dragon Egg Subtle Emission
emissive = 2.5 * float(lAlbedoP < 0.2);
}
}
else if (material == 144.0) // Furnaces Lit
emissive = 0.75 * float(albedo.r * albedo.r > albedo.b * 4.0 || (albedo.r > 0.9 && (albedo.r > albedo.b || albedo.r > 0.99)));
} else {
if (material == 148.0) // Torch, Soul Torch
emissive = float(albedo.r > 0.9 || albedo.b > 0.65) * (1.4 - albedo.b * 1.05);
/* {
#ifndef WORLD_CURVATURE
vec3 comPos = fract(worldPos.xyz + cameraPosition.xyz);
#else
vec3 comPos = fract(oldPosition.xyz + cameraPosition.xyz);
#endif
comPos = abs(comPos - vec3(0.5));
float comPosM = max(max(comPos.x, comPos.y), comPos.z);
emissive = clamp(1.0 - comPosM * 2.0, 0.0, 1.0);
if (emissive > 0.001) {
emissive *= emissive;
emissive *= emissive;
emissive *= pow(lAlbedoP * 0.7, 4.0) * 0.75;
emissive = min(emissive, 0.15);
} else emissive = 0.0;
lightmap.x = min(emissive * 10.0 + 0.6, 1.05);
albedo.rgb = pow(albedo.rgb, vec3(1.4 - lightmap.x));
} */
else if (material == 152.0) { // Obsidian++
smoothness = max(smoothness, 0.375);
if (specB > 0.5) { // Crying Obsidian, Respawn Anchor
emissive = (albedo.b - albedo.r) * albedo.r * 6.0;
emissive *= emissive * emissive;
emissive = clamp(emissive, 0.05, 1.0);
if (lAlbedoP > 1.6 || albedo.r > albedo.b * 1.7) emissive = 1.0;
} else {
if (lAlbedoP > 0.75) { // Enchanting Table Diamond
f0 = smoothness;
smoothness = 0.9 - f0 * 0.1;
metalness = 0.0;
}
if (albedo.r > albedo.g + albedo.b) { // Enchanting Table Cloth
smoothness = max(smoothness - 0.45, 0.0);
metalness = 0.0;
}
}
}
}
}
} else {
if (mat < 170.5) {
if (mat < 162.5) {
if (material == 156.0) { // Campfires, Powered Lever
if (albedo.g + albedo.b > albedo.r * 2.3 && albedo.g > 0.38 && albedo.g > albedo.b * 0.9) emissive = 0.09;
if (albedo.r > albedo.b * 3.0 || albedo.r > 0.8) emissive = 0.65;
emissive *= max(1.0 - albedo.b + albedo.r, 0.0);
emissive *= lAlbedoP;
}
else if (material == 160.0) { // Cauldron, Hopper, Anvils
if (color.r < 0.99) { // Cauldron Water
cauldron = 1.0, smoothness = 1.0, metalness = 0.0;
skymapMod = lmCoord.y * 0.475 + 0.515;
#if defined REFLECTION_RAIN && defined RAIN_REF_BIOME_CHECK
noRain = 1.0;
#endif
#if WATER_TYPE == 0
albedo.rgb = waterColor.rgb;
#elif WATER_TYPE == 1
albedo.rgb = pow(albedo.rgb, vec3(1.3));
#else
albedo.rgb = vec3(0.4, 0.5, 0.4) * (pow(albedo.rgb, vec3(2.8)) + 4 * waterColor.rgb * pow(albedo.r, 1.8)
+ 16 * waterColor.rgb * pow(albedo.g, 1.8) + 4 * waterColor.rgb * pow(albedo.b, 1.8));
albedo.rgb = pow(albedo.rgb * 1.5, vec3(0.5, 0.6, 0.5)) * 0.6;
albedo.rgb *= 1 + length(albedo.rgb) * pow(WATER_OPACITY, 32.0) * 2.0;
#endif
#ifdef NORMAL_MAPPING
vec2 cauldronCoord1 = texCoord + fract(frametime * 0.003);
float cauldronNoise1 = texture2D(noisetex, cauldronCoord1).r;
vec2 cauldronCoord2 = texCoord - fract(frametime * 0.003);
float cauldronNoise2 = texture2D(noisetex, cauldronCoord2).r;
float waveFactor = 0.027 + 0.065 * lightmap.y;
normalMap.xy += (0.5 * waveFactor) * (cauldronNoise1 * cauldronNoise2 - 0.3);
albedo.rgb *= (1.0 - waveFactor * 0.5) + waveFactor * cauldronNoise1 * cauldronNoise2;
#endif
}
#if MC_VERSION >= 11700
else if (albedo.r * 1.5 > albedo.g + albedo.b) { // Cauldron Lava
metalness = 0.0;
smoothness = 0.0;
#ifndef WORLD_CURVATURE
float comPos = fract(worldPos.y + cameraPosition.y);
#else
float comPos = fract(oldPosition.y + cameraPosition.y);
#endif
comPos = fract(comPos);
if (comPos > 0.2 && comPos < 0.99) {
emissive = 1.0;
albedo.rgb *= LAVA_INTENSITY * 0.9;
}
}
else if (dot(albedo.rgb, albedo.rgb) > 2.7) { // Cauldron Powder Snow
metalness = 0.0;
smoothness = pow(lAlbedoP, 1.8037) * 0.185;
smoothness = min(smoothness, 1.0);
}
#endif
}
else if (material == 162.0) { // Glowstone, Magma Block
#include "/lib/other/mipLevel.glsl"
emissive = pow(lAlbedoP, specB) * fract(specB) * 20.0;
emissive += miplevel * 2.5;
}
} else {
if (material == 164.0) { // Chorus Plant, Chorus Flower Age 5
if (albedo.g > 0.55 && albedo.r < albedo.g * 1.1) {
emissive = 1.0;
}
}
else if (material == 168.0) { // Overworld Ore Handling Except Redstone
float stoneDif = max(abs(albedo.r - albedo.g), max(abs(albedo.r - albedo.b), abs(albedo.g - albedo.b)));
float brightFactor = max(lAlbedoP - 1.5, 0.0);
float ore = max(max(stoneDif - 0.175 + specG, 0.0), brightFactor);
#ifdef EMISSIVE_ORES
emissive *= sqrt4(ore) * 0.15 * ORE_EMISSION;
#endif
metalness = 0.0;
#if !defined EMISSIVE_ORES || !defined EMISSIVE_IRON_ORE
if (abs(specG - 0.07) < 0.0001) {
float oreM = min(pow2(ore * ore) * 300.0, 1.0);
smoothness = mix(smoothness, 1.0, oreM);
metalness = mix(metalness, 0.8, sqrt3(oreM));
}
#endif
#if !defined EMISSIVE_ORES || !defined EMISSIVE_COPPER_ORE
if (abs(specG - 0.1) < 0.0001) {
float oreM = sqrt3(min(ore * 0.25, 1.0));
smoothness = mix(smoothness, 0.5, oreM);
if (oreM > 0.01) metalness = 0.8;
}
#endif
#if !defined EMISSIVE_ORES || !defined EMISSIVE_GOLD_ORE
if (abs(specG - 0.002) < 0.0001) {
float oreM = min(pow2(ore * ore) * 40.0, 1.0);
smoothness = mix(smoothness, 0.5, oreM);
if (oreM > 0.01) metalness = 0.8;
}
#endif
#if !defined EMISSIVE_ORES || !defined EMISSIVE_EMERALD_ORE
if (abs(specG - 0.0015) < 0.0001) {
if (ore > 0.01) {
float oreM = 1.0 - min(ore * 0.75, 1.0);
smoothness = mix(smoothness, 1.0, oreM);
extraSpecularM = 1.0;
}
}
#endif
#if !defined EMISSIVE_ORES || !defined EMISSIVE_DIAMOND_ORE
if (abs(specG - 0.001) < 0.0001) {
if (ore > 0.01) {
float oreM = 1.0 - min(ore, 1.0);
smoothness = mix(smoothness, 1.0, oreM);
extraSpecularM = 1.0;
}
}
#endif
}
else if (material == 170.0) { // Block of Amethyst++
smoothness = min(pow((max(1.73 - lAlbedoP, 0.0) + 1.0), 0.81) * 0.5, 1.0);
#ifdef EMISSIVE_AMETHYST_BUDS
#ifndef WORLD_CURVATURE
vec3 comPos = fract(worldPos.xyz + cameraPosition.xyz);
#else
vec3 comPos = fract(oldPosition.xyz + cameraPosition.xyz);
#endif
comPos = abs(comPos - vec3(0.5));
float comPosM = max(max(comPos.x, comPos.y), comPos.z);
emissive = clamp(1.0 - comPosM * 2.0, 0.0, 1.0);
if (emissive > 0.001) {
float orangeFactor = sqrt1(emissive * sqrt2(1.0 - lmCoord.x));
emissive *= emissive;
emissive *= emissive;
emissive *= pow(lAlbedoP * 0.7, 4.0) * 0.75;
emissive = min(emissive, 0.15) * 1.1;
albedo.rgb = pow(albedo.rgb, mix(vec3(1.0), vec3(1.0, 1.0, 2.0), orangeFactor));
float whiteFactor = pow(clamp(albedo.g * (1.0 + emissive), 0.0, 1.0), 10.0);
albedo.rgb = mix(albedo.rgb, vec3(1.0), whiteFactor);
} else emissive = 0.0;
#endif
}
}
} else {
if (mat < 176.5) {
if (material == 172.0) { // Wet Farmland
if (lAlbedoP > 0.3) smoothness = lAlbedoP * 0.7;
else smoothness = lAlbedoP * 2.7;
smoothness = min(smoothness, 1.0);
}
else if (material == 174.0) { // Emissive Redstone Ores
float stoneDif = max(abs(albedo.r - albedo.g), max(abs(albedo.r - albedo.b), abs(albedo.g - albedo.b)));
float brightFactor = max(lAlbedoP - 1.5, 0.0);
float ore = max(max(stoneDif - 0.175 + specG, 0.0), brightFactor);
emissive *= sqrt4(ore) * 0.11 * ORE_EMISSION;
metalness = 0.0;
// Fix white pixels
if (emissive > 0.01) {
float whitePixelFactor = max(lAlbedoP * lAlbedoP * 2.2, 1.0);
albedo.rgb = pow(albedo.rgb, vec3(whitePixelFactor));
}
}
else if (material == 176.0) { // Beacon
#ifndef WORLD_CURVATURE
vec3 comPos = fract(worldPos.xyz + cameraPosition.xyz);
#else
vec3 comPos = fract(oldPosition.xyz + cameraPosition.xyz);
#endif
comPos = abs(comPos - vec3(0.5));
float comPosM = max(max(comPos.x, comPos.y), comPos.z);
if (comPosM < 0.4 && albedo.b > 0.5) { // Beacon Core
albedo.rgb = vec3(0.35, 1.0, 0.975);
if (lAlbedoP > 1.5) albedo.rgb = vec3(1.0);
else if (lAlbedoP > 1.3) albedo.rgb = vec3(0.35, 1.0, 0.975);
else if (lAlbedoP > 1.15) albedo.rgb *= 0.86;
else albedo.rgb *= 0.78;
emissive = 1.5;
}
}
} else {
if (material == 180.0) { // End Rod
if (lAlbedoP > 1.3) {
smoothness = 0.0;
emissive = 0.4;
}
}
else if (material == 184.0) { // Rails
if (albedo.r > albedo.g * 2.0 + albedo.b) {
if (lAlbedoP > 0.45) { // Rail Redstone Lit
emissive = lAlbedoP;
} else { // Rail Redstone Unlit
smoothness = 0.4;
metalness = 1.0;
}
} else {
if (albedo.r > albedo.g + albedo.b || abs(albedo.r - albedo.b) < 0.1) { // Rail Gold, Rail Iron
smoothness = 0.4;
metalness = 1.0;
}
}
}
}
}
}
}
#ifdef EMISSIVE_NETHER_ORES
if (specB < -9.0) {
emissive = float(albedo.r + albedo.g > albedo.b * 2.0 && albedo.g > albedo.b * (1.2 - albedo.g * 0.5));
if (abs(albedo.g - albedo.b) < 0.1) emissive *= float(albedo.b > 0.35 || albedo.b < 0.05); // Eliminate Some Pixels On Quartz Ore
emissive *= albedo.r * 0.05 * ORE_EMISSION;
if (emissive > 0.01) // Desaturate Some Red-Looking Pixels
albedo.rgb = mix(albedo.rgb, vec3(dot(albedo.rgb, vec3(0.4, 0.5, 0.07))), clamp((albedo.r - albedo.g) * 2.0, 0.0, 0.3));
}
#endif