Начинающий
- Статус
- Онлайн
- Регистрация
- 29 Июл 2025
- Сообщения
- 286
- Реакции
- 7
- Выберите загрузчик игры
- Fabric
Код:
// к остальным шейдерам:
private GlProgram liquidGlassProgram;
// в initializeShaders:
liquidGlassProgram = new GlProgram(Zenith.id("liquidglass/data"), VertexFormats.POSITION_TEXTURE_COLOR);
сам рендер:
public void drawLiquidRect(MatrixStack matrices,
float x, float y, float width, float height,
BorderRadius borderRadius, ColorRGBA color,
float cornerSmoothness,
float fresnelPower, float fresnelAlpha,
float baseAlpha, boolean fresnelInvert,
float fresnelMix, float distortStrength) {
matrices.push();
Matrix4f matrix4f = matrices.peek().getPositionMatrix();
Framebuffer screenFBO = mc.getFramebuffer();
int screenTexture = screenFBO.getColorAttachment();
liquidGlassProgram.use();
liquidGlassProgram.findUniform("ModelViewMat").set(matrix4f);
liquidGlassProgram.findUniform("ProjMat").set(RenderSystem.getProjectionMatrix());
liquidGlassProgram.findUniform("Size").set(width, height);
liquidGlassProgram.findUniform("Radius").set(
borderRadius.topLeftRadius(),
borderRadius.bottomLeftRadius(),
borderRadius.topRightRadius(),
borderRadius.bottomRightRadius()
);
liquidGlassProgram.findUniform("Smoothness").set(1.0f);
liquidGlassProgram.findUniform("CornerSmoothness").set(cornerSmoothness);
liquidGlassProgram.findUniform("GlobalAlpha").set(color.getAlpha() / 255f);
liquidGlassProgram.findUniform("FresnelPower").set(fresnelPower);
liquidGlassProgram.findUniform("FresnelColor").set(1f, 1f, 1f);
liquidGlassProgram.findUniform("FresnelAlpha").set(fresnelAlpha);
liquidGlassProgram.findUniform("BaseAlpha").set(baseAlpha);
liquidGlassProgram.findUniform("FresnelInvert").set(fresnelInvert ? 1 : 0);
liquidGlassProgram.findUniform("FresnelMix").set(fresnelMix);
liquidGlassProgram.findUniform("DistortStrength").set(distortStrength);
RenderSystem.setShaderTexture(0, screenTexture);
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
RenderSystem.disableDepthTest();
drawSetup();
float scaleX = (float) screenFBO.textureWidth / mc.getWindow().getScaledWidth();
float scaleY = (float) screenFBO.textureHeight / mc.getWindow().getScaledHeight();
float fx = x * scaleX;
float fy = y * scaleY;
float fwidth = width * scaleX;
float fheight = height * scaleY;
fy = screenFBO.textureHeight - fy - fheight;
float u0 = fx / screenFBO.textureWidth;
float v0 = fy / screenFBO.textureHeight;
float u1 = (fx + fwidth) / screenFBO.textureWidth;
float v1 = (fy + fheight) / screenFBO.textureHeight;
BufferBuilder builder = RenderSystem.renderThreadTesselator()
.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR);
int r = color.getRed();
int g = color.getGreen();
int b = color.getBlue();
int a = color.getAlpha();
builder.vertex(matrix4f, x, y, 0f).texture(u0, v1).color(r, g, b, a);
builder.vertex(matrix4f, x, y + height, 0f).texture(u0, v0).color(r, g, b, a);
builder.vertex(matrix4f, x + width, y + height, 0f).texture(u1, v0).color(r, g, b, a);
builder.vertex(matrix4f, x + width, y, 0f).texture(u1, v1).color(r, g, b, a);
BufferRenderer.drawWithGlobalProgram(builder.end());
drawEnd();
RenderSystem.enableDepthTest();
matrices.pop();
}
шейдеры берите со слитых ассетов рокстара
ss:
upd:
сразу настроенный рект как на ссе, так-же по мере увеличивания ректа уменьшайте distortStrenght
Код:
DrawUtil.drawLiquidRect(
context.getMatrices(),
400, 120, 190, 120,
new BorderRadius(12, 12, 12, 12),
new ColorRGBA(255, 255, 255, 255),
3.0f, 25.0f, 0.5f, 1.0f,
true, 0.5f, 0.05f
);
Последнее редактирование: