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

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
11 Май 2022
Сообщения
76
Реакции
12
Рендер на 1.21.4:
Пожалуйста, авторизуйтесь для просмотра ссылки.
(
Пожалуйста, авторизуйтесь для просмотра ссылки.
)
Поддерживаются основные объекты, блюр, msdf шрифты. Шейдеры написаны так, что не зависят от позиции на экране и не используют дополнительные атрибуты вершин, так что все преобразования через матрицы работают нормально, как и рендер в пространстве. Пример использования есть на гитхабе.
 
Рендер на 1.21.4:
Пожалуйста, авторизуйтесь для просмотра ссылки.
(
Пожалуйста, авторизуйтесь для просмотра ссылки.
)
Поддерживаются основные объекты, блюр, msdf шрифты. Шейдеры написаны так, что не зависят от позиции на экране и не используют дополнительные атрибуты вершин, так что все преобразования через матрицы работают нормально, как и рендер в пространстве. Пример использования есть на гитхабе.
легенда.
 
Посмотрел исходники, сказать особо нечего: просто размазанный по абстракциям рендер майна. Я рассчитывал хотя бы на корявую реализацию батчинга.И да чтобы билдеры ручками не писать существует такая вещь как 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();

    }



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