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

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

ПРИМЕЧАНИЕ!!! Я ИСПОЛЬЗУЮ 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 то так
 
Назад
Сверху Снизу