Визуальная часть Закругление головы шейдером в TargetHUD

  • Автор темы Автор темы Ksafik
  • Дата начала Дата начала
Никогда не сливал свои шейдеры на форум, ведь знал, что только так можно отличить грамотный клиент от говна.
 
Никогда не сливал свои шейдеры на форум, ведь знал, что только так можно отличить грамотный клиент от говна.
ну вот так, да и слил потому что даже в слитом Hachclient это есть да и клиенты переходят на 1.20+ и как по мне 1.16 умирает
 
не паста,чел пишет как легенда ваще класс:roflanBuldiga:(это он мне зубы выбил)
 
q помоги плс tg foreverxsolo
 
Такого на форуме не замечал, решил слить

ПРИМЕЧАНИЕ!!! Я ИСПОЛЬЗУЮ EXPENSIVE 3.1 НО ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ ЛЮБУЮ БАЗУ НА 1.16.5

Преимущество рендера головы именно так - нету глупых мини пропастей на углах головы, голова более лучше и гибче закругляется, оптимизация

Для начала по пути (im\expensive\utils\shader\shaders) создаем класс HeadGlsl и пишем туда следующее:

|
HeadGlsl.java:
Expand Collapse Copy
package im.expensive.utils.shader.shaders;

import im.expensive.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);
                        }""";
    }

}

далее идем в класс ShaderUtil (или похожий) и пишем туда следующее:

там где список ваших шейдеров (ниже будет скрин примера)

Посмотреть вложение 301807
добавляем строку:
Код:
Expand Collapse Copy
 public static ShaderUtil head = new ShaderUtil("round-head");

далее в классе Shaders добавляем строку (куда добавить будет скрин ниже)

Посмотреть вложение 301808

добавляем сюда:

Код:
Expand Collapse Copy
    @Getter
    private IShader head = new HeadGlsl();

Далее идем туда где рендерится ваш таргет худ и вместо строк с рендером головы пишем:

Код:
Expand Collapse Copy
float hurtPercent = (entity.hurtTime - (entity.hurtTime != 0 ? mc.timer.renderPartialTicks : 0.0f)) / 10.0f;
String rs = EntityType.getKey(((Entity)entity).getType()).getPath();
ResourceLocation skin = entity instanceof AbstractClientPlayerEntity e ? (e).getLocationSkin() : new ResourceLocation("textures/entity/"+rs+".png");
RenderUtil.drawHead(skin, posX, posY, headSize + 5, headSize + 5, 4, 1, hurtPercent);
IShader дай на 2.0 нету
 
Такого на форуме не замечал, решил слить

ПРИМЕЧАНИЕ!!! Я ИСПОЛЬЗУЮ EXPENSIVE 3.1 НО ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ ЛЮБУЮ БАЗУ НА 1.16.5

Преимущество рендера головы именно так - нету глупых мини пропастей на углах головы, голова более лучше и гибче закругляется, оптимизация

Для начала по пути (im\expensive\utils\shader\shaders) создаем класс HeadGlsl и пишем туда следующее:

|
HeadGlsl.java:
Expand Collapse Copy
package im.expensive.utils.shader.shaders;

import im.expensive.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);
                        }""";
    }

}

далее идем в класс ShaderUtil (или похожий) и пишем туда следующее:

там где список ваших шейдеров (ниже будет скрин примера)

Посмотреть вложение 301807
добавляем строку:
Код:
Expand Collapse Copy
 public static ShaderUtil head = new ShaderUtil("round-head");

далее в классе Shaders добавляем строку (куда добавить будет скрин ниже)

Посмотреть вложение 301808

добавляем сюда:

Код:
Expand Collapse Copy
    @Getter
    private IShader head = new HeadGlsl();

Далее идем туда где рендерится ваш таргет худ и вместо строк с рендером головы пишем:

Код:
Expand Collapse Copy
float hurtPercent = (entity.hurtTime - (entity.hurtTime != 0 ? mc.timer.renderPartialTicks : 0.0f)) / 10.0f;
String rs = EntityType.getKey(((Entity)entity).getType()).getPath();
ResourceLocation skin = entity instanceof AbstractClientPlayerEntity e ? (e).getLocationSkin() : new ResourceLocation("textures/entity/"+rs+".png");
RenderUtil.drawHead(skin, posX, posY, headSize + 5, headSize + 5, 4, 1, hurtPercent);
дай renderutil
 
это так не работает чуть чуть
float hurtPercent = (entity.hurtTime - (entity.hurtTime != 0 ? mc.timer.renderPartialTicks : 0.0f)) / 10.0f;
String rs = EntityType.getKey(((Entity)entity).getType()).getPath();
ResourceLocation skin = entity instanceof AbstractClientPlayerEntity e ? (e).getLocationSkin() : new ResourceLocation("textures/entity/"+rs+".png");
drawHead(skin, posX, posY, headSize + 5, headSize + 5, 4, 1, hurtPercent);
если exp 3.1 то так
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
:screamcat::screamcat::screamcat::screamcat::screamcat::screamcat::screamcat::screamcat:
 
Назад
Сверху Снизу