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

Начинающий
Начинающий
Статус
Онлайн
Регистрация
29 Июл 2025
Сообщения
286
Реакции
7
Выберите загрузчик игры
  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
        );
 
Последнее редактирование:
Назад
Сверху Снизу