Визуальная часть Как сделать закругление головы в Target HUD? | 3.1 ready

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
14 Янв 2024
Сообщения
87
Реакции
0
Выберите загрузчик игры
  1. Forge

Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:

  • бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
  • маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
  • приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
  • обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.

Спасибо!

видел у многих клиентов голова просто квадратная.
сегодня покажу как скруглить ее через шейдер
1748860616030.png

вставляете метод для отрисовки головы в ваш рендерер таргет худа/в утилки
java:
Expand Collapse Copy
public static void drawHead(ResourceLocation skin, float x, float y, float width, float height, float radius, float alpha, float hurtPercent) {
        mc.getTextureManager().bindTexture(skin);
        RenderSystem.pushMatrix();
        RenderSystem.enableBlend();
        head.attach();
        head.setUniformf("size", width, height);
        head.setUniformf("radius", radius);
        head.setUniformf("hurt_time", hurtPercent);
        head.setUniformf("alpha", alpha);

        head.setUniformf("startX", 4);
        head.setUniformf("startY", 4);

        head.setUniformf("endX", 8);
        head.setUniformf("endY", 8);

        head.setUniformf("texXSize", 32);
        head.setUniformf("texYSize", 32);
        head.drawQuads(x + 2, y + 2, width, height);
        head.detach();
        RenderSystem.disableBlend();
        RenderSystem.popMatrix();
    }

далее идем в pasta.pasta.utils.shader.Shaders, и вставляем:
java:
Expand Collapse Copy
    [USER=270918]@Getter[/USER]
    private IShader head = new HeadGlsl();

далее создаем в ShaderUtil на ~38 строке:


java:
Expand Collapse Copy
    public static ShaderUtil head = new ShaderUtil("round-head" +
            "");

и в ~57:
java:
Expand Collapse Copy
                case "round-head" -> createShader(Shaders.getInstance().getHead(), GL_FRAGMENT_SHADER);

создаем файл в shader.shaders HeadGlsl и пихаем туда вот этот код:

java:
Expand Collapse Copy
package wtf.dart.utils.shader.shaders;

import wtf.dart.utils.shader.IShader;

public class HeadGlsl implements IShader {

    [USER=1367676]@override[/USER]
    public String glsl() {
        return """
                        #version 120
                                                   
                        uniform sampler2D texture;
                        uniform vec2 size;
                        uniform float radius;
                        uniform float hurt_time;
                        uniform float alpha;
                        uniform float startX, endX;
                        uniform float startY, endY;
                                                   
                        uniform float texXSize;
                        uniform float texYSize;
                                                   
                        float signedDistanceField(vec2 p, vec2 b, float r) {
                            return length(max(abs(p) - b, 0.0)) - r;
                        }
                                                   
                        void main() {
                            vec2 tex = gl_TexCoord[0].st;
                            vec2 clippedTexCoord = vec2(
                            mix(startX / texXSize, endX / texXSize, tex.x),
                            mix(startY / texYSize, endY / texYSize, tex.y)
                            );
                            vec4 smpl = texture2D(texture, clippedTexCoord);
                            vec2 pixel = tex * size;
                            vec2 centre = 0.5 * size;
                            float sa = smoothstep(0.0, 1, signedDistanceField(centre - pixel, centre - radius - 1, radius));
                            vec4 c = mix(vec4(smpl.rgb, smpl.a), vec4(smpl.rgb, 0), sa);
                            gl_FragColor = vec4(mix(smpl.rgb, vec3(1.0, 0.0, 0.0), hurt_time), c.a * alpha);
                        }""";
    }

}
также в рендере таргет худа добавьте импорт:

java:
Expand Collapse Copy
import static wtf.dart.utils.shader.ShaderUtil.head;

+нужно поменять метод рендера головы с drawFace на drawHead и в аргументы добавить skin, у меня это вот так:

Код:
Expand Collapse Copy
String rs = EntityType.getKey(((Entity) entity).getType()).getPath();

ResourceLocation skin = entity instanceof AbstractClientPlayerEntity e ? (e).getLocationSkin() : new ResourceLocation("textures/entity/" + rs + ".png");
drawHead(
         skin, // указываем скин который получили выше
         x - 3.5f,
         y - 4f,
         width + 2.5f,
         height + 2.5f,
         3, // радиус скругления головы
         fadeAnimation, // alpha, у меня под анимацию так что так
         hurtPercent
         );

мб что то не доложил пишите
модераторы одобрите
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
было
 
видел у многих клиентов голова просто квадратная.
сегодня покажу как скруглить ее через шейдер
Посмотреть вложение 307702
вставляете метод для отрисовки головы в ваш рендерер таргет худа/в утилки
java:
Expand Collapse Copy
public static void drawHead(ResourceLocation skin, float x, float y, float width, float height, float radius, float alpha, float hurtPercent) {
        mc.getTextureManager().bindTexture(skin);
        RenderSystem.pushMatrix();
        RenderSystem.enableBlend();
        head.attach();
        head.setUniformf("size", width, height);
        head.setUniformf("radius", radius);
        head.setUniformf("hurt_time", hurtPercent);
        head.setUniformf("alpha", alpha);

        head.setUniformf("startX", 4);
        head.setUniformf("startY", 4);

        head.setUniformf("endX", 8);
        head.setUniformf("endY", 8);

        head.setUniformf("texXSize", 32);
        head.setUniformf("texYSize", 32);
        head.drawQuads(x + 2, y + 2, width, height);
        head.detach();
        RenderSystem.disableBlend();
        RenderSystem.popMatrix();
    }

далее идем в pasta.pasta.utils.shader.Shaders, и вставляем:
java:
Expand Collapse Copy
    [USER=270918]@Getter[/USER]
    private IShader head = new HeadGlsl();

далее создаем в ShaderUtil на ~38 строке:


java:
Expand Collapse Copy
    public static ShaderUtil head = new ShaderUtil("round-head" +
            "");

и в ~57:
java:
Expand Collapse Copy
                case "round-head" -> createShader(Shaders.getInstance().getHead(), GL_FRAGMENT_SHADER);

создаем файл в shader.shaders HeadGlsl и пихаем туда вот этот код:

java:
Expand Collapse Copy
package wtf.dart.utils.shader.shaders;

import wtf.dart.utils.shader.IShader;

public class HeadGlsl implements IShader {

    [USER=1367676]@override[/USER]
    public String glsl() {
        return """
                        #version 120
                                                  
                        uniform sampler2D texture;
                        uniform vec2 size;
                        uniform float radius;
                        uniform float hurt_time;
                        uniform float alpha;
                        uniform float startX, endX;
                        uniform float startY, endY;
                                                  
                        uniform float texXSize;
                        uniform float texYSize;
                                                  
                        float signedDistanceField(vec2 p, vec2 b, float r) {
                            return length(max(abs(p) - b, 0.0)) - r;
                        }
                                                  
                        void main() {
                            vec2 tex = gl_TexCoord[0].st;
                            vec2 clippedTexCoord = vec2(
                            mix(startX / texXSize, endX / texXSize, tex.x),
                            mix(startY / texYSize, endY / texYSize, tex.y)
                            );
                            vec4 smpl = texture2D(texture, clippedTexCoord);
                            vec2 pixel = tex * size;
                            vec2 centre = 0.5 * size;
                            float sa = smoothstep(0.0, 1, signedDistanceField(centre - pixel, centre - radius - 1, radius));
                            vec4 c = mix(vec4(smpl.rgb, smpl.a), vec4(smpl.rgb, 0), sa);
                            gl_FragColor = vec4(mix(smpl.rgb, vec3(1.0, 0.0, 0.0), hurt_time), c.a * alpha);
                        }""";
    }

}
также в рендере таргет худа добавьте импорт:

java:
Expand Collapse Copy
import static wtf.dart.utils.shader.ShaderUtil.head;

+нужно поменять метод рендера головы с drawFace на drawHead и в аргументы добавить skin, у меня это вот так:

Код:
Expand Collapse Copy
String rs = EntityType.getKey(((Entity) entity).getType()).getPath();

ResourceLocation skin = entity instanceof AbstractClientPlayerEntity e ? (e).getLocationSkin() : new ResourceLocation("textures/entity/" + rs + ".png");
drawHead(
         skin, // указываем скин который получили выше
         x - 3.5f,
         y - 4f,
         width + 2.5f,
         height + 2.5f,
         3, // радиус скругления головы
         fadeAnimation, // alpha, у меня под анимацию так что так
         hurtPercent
         );

мб что то не доложил пишите
модераторы одобрите
это в гайды надо делать, не?
 
видел у многих клиентов голова просто квадратная.
сегодня покажу как скруглить ее через шейдер
Посмотреть вложение 307702
вставляете метод для отрисовки головы в ваш рендерер таргет худа/в утилки
java:
Expand Collapse Copy
public static void drawHead(ResourceLocation skin, float x, float y, float width, float height, float radius, float alpha, float hurtPercent) {
        mc.getTextureManager().bindTexture(skin);
        RenderSystem.pushMatrix();
        RenderSystem.enableBlend();
        head.attach();
        head.setUniformf("size", width, height);
        head.setUniformf("radius", radius);
        head.setUniformf("hurt_time", hurtPercent);
        head.setUniformf("alpha", alpha);

        head.setUniformf("startX", 4);
        head.setUniformf("startY", 4);

        head.setUniformf("endX", 8);
        head.setUniformf("endY", 8);

        head.setUniformf("texXSize", 32);
        head.setUniformf("texYSize", 32);
        head.drawQuads(x + 2, y + 2, width, height);
        head.detach();
        RenderSystem.disableBlend();
        RenderSystem.popMatrix();
    }

далее идем в pasta.pasta.utils.shader.Shaders, и вставляем:
java:
Expand Collapse Copy
    [USER=270918]@Getter[/USER]
    private IShader head = new HeadGlsl();

далее создаем в ShaderUtil на ~38 строке:


java:
Expand Collapse Copy
    public static ShaderUtil head = new ShaderUtil("round-head" +
            "");

и в ~57:
java:
Expand Collapse Copy
                case "round-head" -> createShader(Shaders.getInstance().getHead(), GL_FRAGMENT_SHADER);

создаем файл в shader.shaders HeadGlsl и пихаем туда вот этот код:

java:
Expand Collapse Copy
package wtf.dart.utils.shader.shaders;

import wtf.dart.utils.shader.IShader;

public class HeadGlsl implements IShader {

    [USER=1367676]@override[/USER]
    public String glsl() {
        return """
                        #version 120
                                                  
                        uniform sampler2D texture;
                        uniform vec2 size;
                        uniform float radius;
                        uniform float hurt_time;
                        uniform float alpha;
                        uniform float startX, endX;
                        uniform float startY, endY;
                                                  
                        uniform float texXSize;
                        uniform float texYSize;
                                                  
                        float signedDistanceField(vec2 p, vec2 b, float r) {
                            return length(max(abs(p) - b, 0.0)) - r;
                        }
                                                  
                        void main() {
                            vec2 tex = gl_TexCoord[0].st;
                            vec2 clippedTexCoord = vec2(
                            mix(startX / texXSize, endX / texXSize, tex.x),
                            mix(startY / texYSize, endY / texYSize, tex.y)
                            );
                            vec4 smpl = texture2D(texture, clippedTexCoord);
                            vec2 pixel = tex * size;
                            vec2 centre = 0.5 * size;
                            float sa = smoothstep(0.0, 1, signedDistanceField(centre - pixel, centre - radius - 1, radius));
                            vec4 c = mix(vec4(smpl.rgb, smpl.a), vec4(smpl.rgb, 0), sa);
                            gl_FragColor = vec4(mix(smpl.rgb, vec3(1.0, 0.0, 0.0), hurt_time), c.a * alpha);
                        }""";
    }

}
также в рендере таргет худа добавьте импорт:

java:
Expand Collapse Copy
import static wtf.dart.utils.shader.ShaderUtil.head;

+нужно поменять метод рендера головы с drawFace на drawHead и в аргументы добавить skin, у меня это вот так:

Код:
Expand Collapse Copy
String rs = EntityType.getKey(((Entity) entity).getType()).getPath();

ResourceLocation skin = entity instanceof AbstractClientPlayerEntity e ? (e).getLocationSkin() : new ResourceLocation("textures/entity/" + rs + ".png");
drawHead(
         skin, // указываем скин который получили выше
         x - 3.5f,
         y - 4f,
         width + 2.5f,
         height + 2.5f,
         3, // радиус скругления головы
         fadeAnimation, // alpha, у меня под анимацию так что так
         hurtPercent
         );

мб что то не доложил пишите
модераторы одобрите
да ебать даже коментарии из кода которые у меня в теме были не убрал это пизда чувак
 
Назад
Сверху Снизу