diff --git a/src/main/resources/assets/minecraft/shaders/core/rendertype_cutout.fsh b/src/main/resources/assets/minecraft/shaders/core/rendertype_cutout.fsh index 441b8209..9687414d 100644 --- a/src/main/resources/assets/minecraft/shaders/core/rendertype_cutout.fsh +++ b/src/main/resources/assets/minecraft/shaders/core/rendertype_cutout.fsh @@ -14,15 +14,34 @@ in vec2 texCoord0; out vec4 fragColor; +vec3 rgbToHSV(vec3 color) { + vec4 k = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + vec4 p = mix(vec4(color.bg, k.wz), vec4(color.gb, k.xy), step(color.b, color.g)); + vec4 q = mix(vec4(p.xyw, color.r), vec4(color.r, p.yzx), step(p.x, color.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); +} + +vec3 hsvToRGB(vec3 color) { + vec4 k = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(color.xxx + k.xyz) * 6.0 - k.www); + return color.z * mix(k.xxx, clamp(p - k.xxx, 0.0, 1.0), color.y); +} + void main() { vec4 tex = texture(Sampler0, texCoord0); if (tex.a < 0.1) { discard; } vec4 color = tex * ColorModulator; - if (tex.a > 0.99) { - color = color * vertexColor; + vec4 vertex = vertexColor; + if (tex.a < 0.99) { + vec3 hsv = rgbToHSV(vertex.rgb); + hsv.z = 1.0; + vertex.rgb = hsvToRGB(hsv); } + color = linear_fog(color * vertex, vertexDistance, FogStart, FogEnd, FogColor); color.a = 1.0; - fragColor = linear_fog(color, vertexDistance, FogStart, FogEnd, FogColor); + fragColor = color; } diff --git a/src/main/resources/assets/minecraft/shaders/core/rendertype_entity_cutout.fsh b/src/main/resources/assets/minecraft/shaders/core/rendertype_entity_cutout.fsh new file mode 100644 index 00000000..dbf6cf19 --- /dev/null +++ b/src/main/resources/assets/minecraft/shaders/core/rendertype_entity_cutout.fsh @@ -0,0 +1,47 @@ +#version 150 +#moj_import + +uniform sampler2D Sampler0; + +uniform vec4 ColorModulator; +uniform float FogStart; +uniform float FogEnd; +uniform vec4 FogColor; + +in float vertexDistance; +in vec4 vertexColor; +in vec2 texCoord0; + +out vec4 fragColor; + +vec3 rgbToHSV(vec3 color) { + vec4 k = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + vec4 p = mix(vec4(color.bg, k.wz), vec4(color.gb, k.xy), step(color.b, color.g)); + vec4 q = mix(vec4(p.xyw, color.r), vec4(color.r, p.yzx), step(p.x, color.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); +} + +vec3 hsvToRGB(vec3 color) { + vec4 k = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(color.xxx + k.xyz) * 6.0 - k.www); + return color.z * mix(k.xxx, clamp(p - k.xxx, 0.0, 1.0), color.y); +} + +void main() { + vec4 tex = texture(Sampler0, texCoord0); + if (tex.a < 0.1) { + discard; + } + vec4 color = tex * ColorModulator; + vec4 vertex = vertexColor; + if (tex.a < 0.99) { + vec3 hsv = rgbToHSV(vertex.rgb); + hsv.z = 1.0; + vertex.rgb = hsvToRGB(hsv); + } + color = linear_fog(color * vertex, vertexDistance, FogStart, FogEnd, FogColor); + color.a = 1.0; + fragColor = color; +} \ No newline at end of file diff --git a/src/main/resources/assets/minecraft/shaders/core/rendertype_item_entity_translucent_cull.fsh b/src/main/resources/assets/minecraft/shaders/core/rendertype_item_entity_translucent_cull.fsh new file mode 100644 index 00000000..503293f4 --- /dev/null +++ b/src/main/resources/assets/minecraft/shaders/core/rendertype_item_entity_translucent_cull.fsh @@ -0,0 +1,46 @@ +#version 150 +#moj_import + +uniform sampler2D Sampler0; + +uniform vec4 ColorModulator; +uniform float FogStart; +uniform float FogEnd; +uniform vec4 FogColor; + +in float vertexDistance; +in vec4 vertexColor; +in vec2 texCoord0; + +out vec4 fragColor; + +vec3 rgbToHSV(vec3 color) { + vec4 k = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + vec4 p = mix(vec4(color.bg, k.wz), vec4(color.gb, k.xy), step(color.b, color.g)); + vec4 q = mix(vec4(p.xyw, color.r), vec4(color.r, p.yzx), step(p.x, color.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); +} + +vec3 hsvToRGB(vec3 color) { + vec4 k = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(color.xxx + k.xyz) * 6.0 - k.www); + return color.z * mix(k.xxx, clamp(p - k.xxx, 0.0, 1.0), color.y); +} + +void main() { + vec4 tex = texture(Sampler0, texCoord0); + if (tex.a < 0.1) { + discard; + } + vec4 color = tex * ColorModulator; + vec4 vertex = vertexColor; + if (tex.a < 0.99) { + vec3 hsv = rgbToHSV(vertex.rgb); + hsv.z = 1.0; + vertex.rgb = hsvToRGB(hsv); + } + color = linear_fog(color * vertex, vertexDistance, FogStart, FogEnd, FogColor); + fragColor = color; +} \ No newline at end of file diff --git a/src/main/resources/assets/minecraft/shaders/core/rendertype_solid.fsh b/src/main/resources/assets/minecraft/shaders/core/rendertype_solid.fsh index c01d103d..19222825 100644 --- a/src/main/resources/assets/minecraft/shaders/core/rendertype_solid.fsh +++ b/src/main/resources/assets/minecraft/shaders/core/rendertype_solid.fsh @@ -14,12 +14,31 @@ in vec2 texCoord0; out vec4 fragColor; +vec3 rgbToHSV(vec3 color) { + vec4 k = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + vec4 p = mix(vec4(color.bg, k.wz), vec4(color.gb, k.xy), step(color.b, color.g)); + vec4 q = mix(vec4(p.xyw, color.r), vec4(color.r, p.yzx), step(p.x, color.r)); + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); +} + +vec3 hsvToRGB(vec3 color) { + vec4 k = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(color.xxx + k.xyz) * 6.0 - k.www); + return color.z * mix(k.xxx, clamp(p - k.xxx, 0.0, 1.0), color.y); +} + void main() { vec4 tex = texture(Sampler0, texCoord0); vec4 color = tex * ColorModulator; - if (tex.a > 0.99) { - color = color * vertexColor; + vec4 vertex = vertexColor; + if (tex.a < 0.99) { + vec3 hsv = rgbToHSV(vertex.rgb); + hsv.z = 1.0; + vertex.rgb = hsvToRGB(hsv); } + color = linear_fog(color * vertex, vertexDistance, FogStart, FogEnd, FogColor); color.a = 1.0; - fragColor = linear_fog(color, vertexDistance, FogStart, FogEnd, FogColor); + fragColor = color; }