Начинающий
- Статус
- Оффлайн
- Регистрация
- 5 Ноя 2023
- Сообщения
- 232
- Реакции
- 0
- Выберите загрузчик игры
- Vanilla
- OptiFine
- Прочие моды
Такого на форуме не замечал, решил слить
ПРИМЕЧАНИЕ!!! Я ИСПОЛЬЗУЮ EXPENSIVE 3.1 НО ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ ЛЮБУЮ БАЗУ НА 1.16.5
Преимущество рендера головы именно так - нету глупых мини пропастей на углах головы, голова более лучше и гибче закругляется, оптимизация
Для начала по пути (im\expensive\utils\shader\shaders) создаем класс HeadGlsl и пишем туда следующее:
|
далее идем в класс ShaderUtil (или похожий) и пишем туда следующее:
там где список ваших шейдеров (ниже будет скрин примера)
добавляем строку:
далее в классе Shaders добавляем строку (куда добавить будет скрин ниже)
добавляем сюда:
Далее идем туда где рендерится ваш таргет худ и вместо строк с рендером головы пишем:
ПРИМЕЧАНИЕ!!! Я ИСПОЛЬЗУЮ EXPENSIVE 3.1 НО ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ ЛЮБУЮ БАЗУ НА 1.16.5
Преимущество рендера головы именно так - нету глупых мини пропастей на углах головы, голова более лучше и гибче закругляется, оптимизация
Для начала по пути (im\expensive\utils\shader\shaders) создаем класс HeadGlsl и пишем туда следующее:
|
HeadGlsl.java:
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 (или похожий) и пишем туда следующее:
там где список ваших шейдеров (ниже будет скрин примера)
добавляем строку:
Код:
public static ShaderUtil head = new ShaderUtil("round-head");
далее в классе Shaders добавляем строку (куда добавить будет скрин ниже)
добавляем сюда:
Код:
@Getter
private IShader head = new HeadGlsl();
Далее идем туда где рендерится ваш таргет худ и вместо строк с рендером головы пишем:
Код:
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);