Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Прочее Liquid Glass Renderer | Zenith Recode

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
29 Июл 2025
Сообщения
344
Реакции
9
Выберите загрузчик игры
  1. Fabric
Код:
Expand Collapse Copy
// к остальным шейдерам:
private GlProgram liquidGlassProgram;


// в initializeShaders:
liquidGlassProgram = new GlProgram(Zenith.id("liquidglass/data"), VertexFormats.POSITION_TEXTURE_COLOR);
сам рендер:
Expand Collapse Copy
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:
photo_2025-10-24_23-39-40.jpg

upd:
сразу настроенный рект как на ссе, так-же по мере увеличивания ректа уменьшайте distortStrenght

Код:
Expand Collapse Copy
        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
        );
 
Последнее редактирование:
Код:
Expand Collapse Copy
// к остальным шейдерам:
private GlProgram liquidGlassProgram;


// в initializeShaders:
liquidGlassProgram = new GlProgram(Zenith.id("liquidglass/data"), VertexFormats.POSITION_TEXTURE_COLOR);
сам рендер:
Expand Collapse Copy
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:
Посмотреть вложение 318236
upd:
сразу настроенный рект как на ссе, так-же по мере увеличивания ректа уменьшайте distortStrenght

Код:
Expand Collapse Copy
        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
        );
у меня лучше
 
Код:
Expand Collapse Copy
// к остальным шейдерам:
private GlProgram liquidGlassProgram;


// в initializeShaders:
liquidGlassProgram = new GlProgram(Zenith.id("liquidglass/data"), VertexFormats.POSITION_TEXTURE_COLOR);
сам рендер:
Expand Collapse Copy
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:
Посмотреть вложение 318236
upd:
сразу настроенный рект как на ссе, так-же по мере увеличивания ректа уменьшайте distortStrenght

Код:
Expand Collapse Copy
        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
        );
Можете подсказать куда кидать этот азуенный шейдер ну куда вставлять все
 

Похожие темы

Назад
Сверху Снизу