• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

Визуальная часть Render-Enhancer-2D-1.21

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
11 Май 2022
Сообщения
76
Реакции
12
Рендер на 1.21.4:
Пожалуйста, авторизуйтесь для просмотра ссылки.
(
Пожалуйста, авторизуйтесь для просмотра ссылки.
)
Поддерживаются основные объекты, блюр, msdf шрифты. Шейдеры написаны так, что не зависят от позиции на экране и не используют дополнительные атрибуты вершин, так что все преобразования через матрицы работают нормально, как и рендер в пространстве. Пример использования есть на гитхабе.
 
Рендер на 1.21.4:
Пожалуйста, авторизуйтесь для просмотра ссылки.
(
Пожалуйста, авторизуйтесь для просмотра ссылки.
)
Поддерживаются основные объекты, блюр, msdf шрифты. Шейдеры написаны так, что не зависят от позиции на экране и не используют дополнительные атрибуты вершин, так что все преобразования через матрицы работают нормально, как и рендер в пространстве. Пример использования есть на гитхабе.
легенда.
 
Красавчик
 
Ты крут бро
 
легенда:kissingheart:
 
Посмотрел исходники, сказать особо нечего: просто размазанный по абстракциям рендер майна. Я рассчитывал хотя бы на корявую реализацию батчинга.И да чтобы билдеры ручками не писать существует такая вещь как Immutables.
 
Посмотрел исходники, сказать особо нечего: просто размазанный по абстракциям рендер майна. Я рассчитывал хотя бы на корявую реализацию батчинга.И да чтобы билдеры ручками не писать существует такая вещь как Immutables.
Да, рендеринг в майне действительно размазан по абстракциям, но это скорее вопрос архитектуры движка. А что именно ты ожидал от батчинга? Если речь про ускорение отрисовки, то можно смотреть в сторону оптимизации через VAO/VBO. Ну и насчёт Immutables — согласен, удобная штука, но в контексте MCP 1.21 есть ли смысл в этом, учитывая, как майнкрафт работает с данными?
 
Да, рендеринг в майне действительно размазан по абстракциям, но это скорее вопрос архитектуры движка. А что именно ты ожидал от батчинга? Если речь про ускорение отрисовки, то можно смотреть в сторону оптимизации через VAO/VBO. Ну и насчёт Immutables — согласен, удобная штука, но в контексте MCP 1.21 есть ли смысл в этом, учитывая, как майнкрафт работает с данными?
Ну рендер майнкрафта итак работает использую VBO, там даже уже есть реализация батч рендера через инстансинг. Просто надо грамматно обработать данные и в 1 драв кол всё отрендерить. А в плане чистоты кода рендер майна довольно неплохо сделан.
 
Ну рендер майнкрафта итак работает использую VBO, там даже уже есть реализация батч рендера через инстансинг. Просто надо грамматно обработать данные и в 1 драв кол всё отрендерить. А в плане чистоты кода рендер майна довольно неплохо сделан.
Согласен, рендер в майне уже давно на VBO, и инстансинг там реально используется. Просто из-за количества слоёв абстракции не всегда очевидно, где и как это происходит. В плане чистоты кода тоже неплохо, особенно если учитывать, сколько всего в него завязано.
 
в рендере блюра есть существенный недастаток, который хавает фпс, а именно лишний FrameBuffer:
Expand Collapse Copy
dev.sxmurxy.mre.renderers.impl;



import net.minecraft.client.MinecraftClient;

import net.minecraft.client.gl.Defines;

import net.minecraft.client.gl.Framebuffer;

import net.minecraft.client.gl.ShaderProgram;

import net.minecraft.client.gl.ShaderProgramKey;

import net.minecraft.client.gl.SimpleFramebuffer;

import net.minecraft.client.render.BufferBuilder;

import net.minecraft.client.render.BufferRenderer;

import net.minecraft.client.render.Tessellator;

import net.minecraft.client.render.VertexFormat.DrawMode;

import net.minecraft.client.render.VertexFormats;



import org.joml.Matrix4f;



import com.google.common.base.Supplier;

import com.google.common.base.Suppliers;

import com.mojang.blaze3d.systems.RenderSystem;



import dev.sxmurxy.mre.builders.states.QuadColorState;

import dev.sxmurxy.mre.builders.states.QuadRadiusState;

import dev.sxmurxy.mre.builders.states.SizeState;

import dev.sxmurxy.mre.providers.ResourceProvider;

import dev.sxmurxy.mre.renderers.IRenderer;



public record BuiltBlur(

        SizeState size,

        QuadRadiusState radius,

        QuadColorState color,

        float smoothness,

        float blurRadius

    ) implements IRenderer {



    private static final ShaderProgramKey BLUR_SHADER_KEY = new ShaderProgramKey(ResourceProvider.getShaderIdentifier("blur"),

        VertexFormats.POSITION_COLOR, Defines.EMPTY);

  //  private static final Supplier<SimpleFramebuffer> TEMP_FBO_SUPPLIER = Suppliers

    //    .memoize(() -> new SimpleFramebuffer(1920, 1024, false));

    private static final Framebuffer MAIN_FBO = MinecraftClient.getInstance().getFramebuffer();



    [USER=1367676]@override[/USER]

    public void render(Matrix4f matrix, float x, float y, float z) {

      //  SimpleFramebuffer fbo = TEMP_FBO_SUPPLIER.get();

        //if (fbo.textureWidth != MAIN_FBO.textureWidth || fbo.textureHeight != MAIN_FBO.textureHeight) {

        //    fbo.resize(MAIN_FBO.textureWidth, MAIN_FBO.textureHeight);

        //}



        RenderSystem.enableBlend();

        RenderSystem.defaultBlendFunc();

        RenderSystem.disableCull();



        //fbo.beginWrite(false);

        //MAIN_FBO.draw(fbo.textureWidth, fbo.textureHeight);

        //MAIN_FBO.beginWrite(false);



        RenderSystem.setShaderTexture(0, MAIN_FBO.getColorAttachment());



        float width = this.size.width(), height = this.size.height();

        ShaderProgram shader = RenderSystem.setShader(BLUR_SHADER_KEY);

        shader.getUniform("Size").set(width, height);

        shader.getUniform("Radius").set(this.radius.radius1(), this.radius.radius2(),

            this.radius.radius3(), this.radius.radius4());

        shader.getUniform("Smoothness").set(this.smoothness);

        shader.getUniform("BlurRadius").set(this.blurRadius);

     

        BufferBuilder builder = Tessellator.getInstance().begin(DrawMode.QUADS, VertexFormats.POSITION_COLOR);

        builder.vertex(matrix, x, y, z).color(this.color.color1());

        builder.vertex(matrix, x, y + height, z).color(this.color.color2());

        builder.vertex(matrix, x + width, y + height, z).color(this.color.color3());

        builder.vertex(matrix, x + width, y, z).color(this.color.color4());



        BufferRenderer.drawWithGlobalProgram(builder.end());



        RenderSystem.setShaderTexture(0, 0);



        RenderSystem.enableCull();

        RenderSystem.disableBlend();

    }



}
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
в рендере блюра есть существенный недастаток, который хавает фпс, а именно лишний FrameBuffer:
Expand Collapse Copy
dev.sxmurxy.mre.renderers.impl;



import net.minecraft.client.MinecraftClient;

import net.minecraft.client.gl.Defines;

import net.minecraft.client.gl.Framebuffer;

import net.minecraft.client.gl.ShaderProgram;

import net.minecraft.client.gl.ShaderProgramKey;

import net.minecraft.client.gl.SimpleFramebuffer;

import net.minecraft.client.render.BufferBuilder;

import net.minecraft.client.render.BufferRenderer;

import net.minecraft.client.render.Tessellator;

import net.minecraft.client.render.VertexFormat.DrawMode;

import net.minecraft.client.render.VertexFormats;



import org.joml.Matrix4f;



import com.google.common.base.Supplier;

import com.google.common.base.Suppliers;

import com.mojang.blaze3d.systems.RenderSystem;



import dev.sxmurxy.mre.builders.states.QuadColorState;

import dev.sxmurxy.mre.builders.states.QuadRadiusState;

import dev.sxmurxy.mre.builders.states.SizeState;

import dev.sxmurxy.mre.providers.ResourceProvider;

import dev.sxmurxy.mre.renderers.IRenderer;



public record BuiltBlur(

        SizeState size,

        QuadRadiusState radius,

        QuadColorState color,

        float smoothness,

        float blurRadius

    ) implements IRenderer {



    private static final ShaderProgramKey BLUR_SHADER_KEY = new ShaderProgramKey(ResourceProvider.getShaderIdentifier("blur"),

        VertexFormats.POSITION_COLOR, Defines.EMPTY);

  //  private static final Supplier<SimpleFramebuffer> TEMP_FBO_SUPPLIER = Suppliers

    //    .memoize(() -> new SimpleFramebuffer(1920, 1024, false));

    private static final Framebuffer MAIN_FBO = MinecraftClient.getInstance().getFramebuffer();



    [USER=1367676]@override[/USER]

    public void render(Matrix4f matrix, float x, float y, float z) {

      //  SimpleFramebuffer fbo = TEMP_FBO_SUPPLIER.get();

        //if (fbo.textureWidth != MAIN_FBO.textureWidth || fbo.textureHeight != MAIN_FBO.textureHeight) {

        //    fbo.resize(MAIN_FBO.textureWidth, MAIN_FBO.textureHeight);

        //}



        RenderSystem.enableBlend();

        RenderSystem.defaultBlendFunc();

        RenderSystem.disableCull();



        //fbo.beginWrite(false);

        //MAIN_FBO.draw(fbo.textureWidth, fbo.textureHeight);

        //MAIN_FBO.beginWrite(false);



        RenderSystem.setShaderTexture(0, MAIN_FBO.getColorAttachment());



        float width = this.size.width(), height = this.size.height();

        ShaderProgram shader = RenderSystem.setShader(BLUR_SHADER_KEY);

        shader.getUniform("Size").set(width, height);

        shader.getUniform("Radius").set(this.radius.radius1(), this.radius.radius2(),

            this.radius.radius3(), this.radius.radius4());

        shader.getUniform("Smoothness").set(this.smoothness);

        shader.getUniform("BlurRadius").set(this.blurRadius);

    

        BufferBuilder builder = Tessellator.getInstance().begin(DrawMode.QUADS, VertexFormats.POSITION_COLOR);

        builder.vertex(matrix, x, y, z).color(this.color.color1());

        builder.vertex(matrix, x, y + height, z).color(this.color.color2());

        builder.vertex(matrix, x + width, y + height, z).color(this.color.color3());

        builder.vertex(matrix, x + width, y, z).color(this.color.color4());



        BufferRenderer.drawWithGlobalProgram(builder.end());



        RenderSystem.setShaderTexture(0, 0);



        RenderSystem.enableCull();

        RenderSystem.disableBlend();

    }



}
Thank you!!???
 
не ну эта падписон
 
в рендере блюра есть существенный недастаток, который хавает фпс, а именно лишний FrameBuffer:
Expand Collapse Copy
dev.sxmurxy.mre.renderers.impl;



import net.minecraft.client.MinecraftClient;

import net.minecraft.client.gl.Defines;

import net.minecraft.client.gl.Framebuffer;

import net.minecraft.client.gl.ShaderProgram;

import net.minecraft.client.gl.ShaderProgramKey;

import net.minecraft.client.gl.SimpleFramebuffer;

import net.minecraft.client.render.BufferBuilder;

import net.minecraft.client.render.BufferRenderer;

import net.minecraft.client.render.Tessellator;

import net.minecraft.client.render.VertexFormat.DrawMode;

import net.minecraft.client.render.VertexFormats;



import org.joml.Matrix4f;



import com.google.common.base.Supplier;

import com.google.common.base.Suppliers;

import com.mojang.blaze3d.systems.RenderSystem;



import dev.sxmurxy.mre.builders.states.QuadColorState;

import dev.sxmurxy.mre.builders.states.QuadRadiusState;

import dev.sxmurxy.mre.builders.states.SizeState;

import dev.sxmurxy.mre.providers.ResourceProvider;

import dev.sxmurxy.mre.renderers.IRenderer;



public record BuiltBlur(

        SizeState size,

        QuadRadiusState radius,

        QuadColorState color,

        float smoothness,

        float blurRadius

    ) implements IRenderer {



    private static final ShaderProgramKey BLUR_SHADER_KEY = new ShaderProgramKey(ResourceProvider.getShaderIdentifier("blur"),

        VertexFormats.POSITION_COLOR, Defines.EMPTY);

  //  private static final Supplier<SimpleFramebuffer> TEMP_FBO_SUPPLIER = Suppliers

    //    .memoize(() -> new SimpleFramebuffer(1920, 1024, false));

    private static final Framebuffer MAIN_FBO = MinecraftClient.getInstance().getFramebuffer();



    [USER=1367676]@override[/USER]

    public void render(Matrix4f matrix, float x, float y, float z) {

      //  SimpleFramebuffer fbo = TEMP_FBO_SUPPLIER.get();

        //if (fbo.textureWidth != MAIN_FBO.textureWidth || fbo.textureHeight != MAIN_FBO.textureHeight) {

        //    fbo.resize(MAIN_FBO.textureWidth, MAIN_FBO.textureHeight);

        //}



        RenderSystem.enableBlend();

        RenderSystem.defaultBlendFunc();

        RenderSystem.disableCull();



        //fbo.beginWrite(false);

        //MAIN_FBO.draw(fbo.textureWidth, fbo.textureHeight);

        //MAIN_FBO.beginWrite(false);



        RenderSystem.setShaderTexture(0, MAIN_FBO.getColorAttachment());



        float width = this.size.width(), height = this.size.height();

        ShaderProgram shader = RenderSystem.setShader(BLUR_SHADER_KEY);

        shader.getUniform("Size").set(width, height);

        shader.getUniform("Radius").set(this.radius.radius1(), this.radius.radius2(),

            this.radius.radius3(), this.radius.radius4());

        shader.getUniform("Smoothness").set(this.smoothness);

        shader.getUniform("BlurRadius").set(this.blurRadius);

    

        BufferBuilder builder = Tessellator.getInstance().begin(DrawMode.QUADS, VertexFormats.POSITION_COLOR);

        builder.vertex(matrix, x, y, z).color(this.color.color1());

        builder.vertex(matrix, x, y + height, z).color(this.color.color2());

        builder.vertex(matrix, x + width, y + height, z).color(this.color.color3());

        builder.vertex(matrix, x + width, y, z).color(this.color.color4());



        BufferRenderer.drawWithGlobalProgram(builder.end());



        RenderSystem.setShaderTexture(0, 0);



        RenderSystem.enableCull();

        RenderSystem.disableBlend();

    }



}
он не лишний, после того как ты перестаешь создавать новый фреймбуффер, то рендер на рендер накладывается с багами, тоесть я не могу по нормальному наложить на ректангл блюр
 
он не лишний, после того как ты перестаешь создавать новый фреймбуффер, то рендер на рендер накладывается с багами, тоесть я не могу по нормальному наложить на ректангл блюр
Данная фича работает не на всех видеокартах, но имеет крутой прирост к Фпс, сообщение это писал потому, что у меня работало, позже узнал факт выше
 
Данная фича работает не на всех видеокартах, но имеет крутой прирост к Фпс, сообщение это писал потому, что у меня работало, позже узнал факт выше
про прирост заметил, но как то было обидно что присутствует такой баг
 
Назад
Сверху Снизу