Начинающий
- Статус
- Оффлайн
- Регистрация
- 7 Мар 2024
- Сообщения
- 69
- Реакции
- 2
- Выберите загрузчик игры
- Fabric
Здарова всем. Мне стало достаточно скучно в последнее время, поэтому я решил выпустить на свет мое творение, которое я делал ещё с конца лета — CometRenderer.
Данный проект представляет из себя достаточно мощную по производительности и возможному функционалу рендер библиотеку, которая будет гораздо лучше, чем обычный рендер майнкрафта. Предназначена же она на данный момент для майнкрафта 1.21.8-1.21.11 fabric, а так же может использоваться за пределами майна.
CometRenderer в данный момент находится в репозитории на гитхабе (
Вот пример добавления CometRenderer'a в ваш проект:
Пример использования библиотеки можно найти в репо по пути
CometRenderer является на данный момент моим активным проектом. Идей пока что у меня достаточно, поэтому обновлений будет достаточно много. Из документации пока только JavaDoc у классов и методов, однако в будущем я планирую сделать сайт с подробной документацией по пользованию библиотекой.
Если у вас есть какие-либо идеи либо вы нашли баг, вы всегда можете написать об этом в репозитории CometRenderer'a, либо в моём дискорд сервере (
Желаю всем удачи!
Update 08.12.2025
Добавил документацию по CometRenderer на мой сайт:
Update 18(17).12.2025
Обновил CometRenderer до версии 1.9.
Изменения:
Обновил CometRenderer до версии 2.0
Изменения:
Добавлен 'minecraft' плагин для версии майна 26.1-snapshot-1
Также ранее плагин был добавлен для версий 1.21.8 и 1.21.11 с mojang маппингами.
Что за CometRenderer?
Данный проект представляет из себя достаточно мощную по производительности и возможному функционалу рендер библиотеку, которая будет гораздо лучше, чем обычный рендер майнкрафта. Предназначена же она на данный момент для майнкрафта 1.21.8-1.21.11 fabric, а так же может использоваться за пределами майна.
Возможности CometRender'a и чем же он лучше обычного майнкрафт рендера
- Оптимизация работы с униформами:
В майнкрафте униформы загружаются в GPU при каждой отрисовке. В CometRenderer униформы загружаются на GPU только после того, как их значение было изменено. - Оптимизация отрисовки:
Отрисовка происходит без каких-либо мусорных действий. Так же библиотека поддерживает отрисовку не только своего меша, но еще и BuiltBuffer майнкрафта. - Более удобная загрузка данных:
В майнкрафте загрузка кода шейдеров происходит через Identifier, что не очень удобно, когда ты хочешь загрузить шейдер с необычного места расположения.
В CometRenderer есть реализация CometLoader, при помощи которой можно создать кастомный загрузчик данных, тем самым загружая код шейдера тем способом, которым вы захотите. По умолчанию есть следующие загрузчики, распологающиеся в классе CometLoaders: IN_JAR, INPUT_STREAM, URI. - Создание кастомных форматов вершин (VertexFormat):
Хотя в майнкрафте есть тоже что-то похожее, однако в CometRenderer это сделано на более высоком уровне.
В майнкрафте форматы вершин создаются при помощи элементов вершин, которые создаются и хранятся отдельно от форматов, тем более их можно создать не больше 32. В данной библиотеке элементы вершин создаются внутри формата, тем самым можно делать самые разнообразные форматы вершин. (с этой реализацией можно создать шейдер и формат вершин, что бы за 1 draw метод отрисовывать множество ректов с разным размером, цветом, закруглением, с включенным оутлайном или нет и его размером).
Например, вот код для создание формата вершины, который я использую в своем клиенте для отрисовки закругленных ректов:
И пример кода вершинного шейдера для данного формата:ROUNDED_RECT VertexFormat:public static final VertexFormat ROUNDED_RECT = VertexFormat.builder() .element("Color", VertexElementType.FLOAT, 4) //Цвет вершины ректа .element("Rect Position", VertexElementType.FLOAT, 2) //Позиция ректа .element("Size", VertexElementType.FLOAT, 2) //Размер ректа .element("Radius", VertexElementType.FLOAT, 1) //Радиус закругления вершины ректа .build();
example.vsh:#version 330 core in vec4 position; in vec4 _vertexColor; in vec2 _rectPosition; in vec2 _size; in float _radius; #include<matrixUniforms> //В CometRenderer также есть система шейдерных библиотек, которые могут внедряться в шейдерны на этапе компиляции. Пример их использования можно будет посмотреть в примере использования библиотеки, о котором будет оговорено позже. out vec4 vertexColor; out vec2 rectPosition; out vec2 size; out float radius; void main() { gl_Position = projMat * modelViewMat * position; vertexColor = _vertexColor; rectPosition = _rectPosition; size = _size; radius = _radius; }
По умолчанию есть следующие форматы вершин, распологающиеся в классе CometVertexFormats: POSITION, POSITION_COLOR, POSITION_TEXTURE, POSITION_COLOR_TEXTURE, POSITION_TEXTURE_COLOR. - Создание кастомных режимов отрисовки вершин (DrawMode):
По умолчанию в библиотеке есть примитивные дравмоды: LINES, LINE_STRIP, TRIANGLES, TRIANGLE_STRIP, TRIANGLE_FAN, QUADS.
Хотя для некоторых данных дравмодов будет достаточно, однако можно спокойно создавать свои дравмоды.
Например, создадим дравмод для 3д куба, который принимает 8 вершин, которые будут в последующем разложены на треугольники и обработаны при отрисовке:
Cube DrawMode:public static final DrawMode CUBE = new DrawMode( GL11.GL_TRIANGLES, //Режим отрисовки в OpenGL true, //Будет ли дравмод использовать буффер индексов или нет. В нашем случае это true. //8 — количество вершин для одного куба до триангуляции. 36 — количество вершин для одного куба после триангуляции. new IndexBufferGenerator(8, 36, (indexConsumer, firstVertexIndex) -> { //1-я сторона куба indexConsumer.accept(firstVertexIndex); indexConsumer.accept(firstVertexIndex + 1); indexConsumer.accept(firstVertexIndex + 2); indexConsumer.accept(firstVertexIndex + 2); indexConsumer.accept(firstVertexIndex + 3); indexConsumer.accept(firstVertexIndex); //2 indexConsumer.accept(firstVertexIndex + 4); indexConsumer.accept(firstVertexIndex + 5); indexConsumer.accept(firstVertexIndex + 6); indexConsumer.accept(firstVertexIndex + 6); indexConsumer.accept(firstVertexIndex + 7); indexConsumer.accept(firstVertexIndex + 4); //3-я сторона куба indexConsumer.accept(firstVertexIndex); indexConsumer.accept(firstVertexIndex + 3); indexConsumer.accept(firstVertexIndex + 4); indexConsumer.accept(firstVertexIndex + 4); indexConsumer.accept(firstVertexIndex + 7); indexConsumer.accept(firstVertexIndex); //4-я сторона куба indexConsumer.accept(firstVertexIndex + 2); indexConsumer.accept(firstVertexIndex + 1); indexConsumer.accept(firstVertexIndex + 6); indexConsumer.accept(firstVertexIndex + 6); indexConsumer.accept(firstVertexIndex + 5); indexConsumer.accept(firstVertexIndex + 2); //5-я сторона куба indexConsumer.accept(firstVertexIndex + 3); indexConsumer.accept(firstVertexIndex + 2); indexConsumer.accept(firstVertexIndex + 5); indexConsumer.accept(firstVertexIndex + 5); indexConsumer.accept(firstVertexIndex + 4); indexConsumer.accept(firstVertexIndex + 3); //6-я сторона куба indexConsumer.accept(firstVertexIndex + 1); indexConsumer.accept(firstVertexIndex); indexConsumer.accept(firstVertexIndex + 7); indexConsumer.accept(firstVertexIndex + 7); indexConsumer.accept(firstVertexIndex + 6); indexConsumer.accept(firstVertexIndex + 1); }), //Функция, возвращающая данное количество вершин в меше после триангуляции. vertices -> vertices / 8 * 36 );drawBox method:public static void drawBox(MeshBuilder meshBuilder, Matrix4f matrix4f) { meshBuilder.vertex(matrix4f, 1, 0, 0); meshBuilder.vertex(matrix4f, 1, 0, 1); meshBuilder.vertex(matrix4f, 0, 0, 1); meshBuilder.vertex(matrix4f, 0, 0, 0); meshBuilder.vertex(matrix4f, 0, 1, 0); meshBuilder.vertex(matrix4f, 0, 1, 1); meshBuilder.vertex(matrix4f, 1, 1, 1); meshBuilder.vertex(matrix4f, 1, 1, 0); }
Как добавить в проект?
CometRenderer в данный момент находится в репозитории на гитхабе (
Пожалуйста, авторизуйтесь для просмотра ссылки.
).Вот пример добавления CometRenderer'a в ваш проект:
Gradle:
repositories {
maven {
name = "ferra13671-maven"
url = "https://ferra13671.github.io/maven/"
}
}
dependencies {
implementation "com.ferra13671:comet-renderer:2.0-HOTFIX-2"
implementation "com.ferra13671:gl-texture-utils:1.7.1"
implementation "com.ferra13671:comet-renderer-minecraft:version"//выбери нужную тебе версию в https://github.com/Ferra13671/maven/tree/main/com/ferra13671/comet-renderer-minecraft
//Плагины (необязательно)
implementation "com.ferra13671:comet-renderer-better-exceptions:2.0"
implementation "com.ferra13671:comet-renderer-post-effects:2.0"
implementation "com.ferra13671:comet-renderer-shader-libraries:2.0"
}
Пример использования библиотеки можно найти в репо по пути
minecraft-(version)/src/exampleНасчет будущего проекта
CometRenderer является на данный момент моим активным проектом. Идей пока что у меня достаточно, поэтому обновлений будет достаточно много. Из документации пока только JavaDoc у классов и методов, однако в будущем я планирую сделать сайт с подробной документацией по пользованию библиотекой.
Если у вас есть какие-либо идеи либо вы нашли баг, вы всегда можете написать об этом в репозитории CometRenderer'a, либо в моём дискорд сервере (
Пожалуйста, авторизуйтесь для просмотра ссылки.
).Желаю всем удачи!

Update 08.12.2025
Добавил документацию по CometRenderer на мой сайт:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Update 18(17).12.2025
Обновил CometRenderer до версии 1.9.
Изменения:
- UniformType.MATRIX был переименован в UniformType.MATRIX4.
- Добавлена система теговых реестров.
- Добавлена система расширений компилятора (плагинов).
- Добавлена конфиг система.
- пост-эффекты были перенесены в отдельный плагин ('post-effects').
- Добавлен глобальный реестр, хранящий как постоянную, так и изменяемую информацию.
- Вывод исключений с подробным описанием, списком возможных проблем и решений перенесен в плагин 'better-exceptions'.
- Шейдерные библиотеки были перенесены в отдельный плагин ('shader-libraries').
- Небольшой рефакторинг.
Обновил CometRenderer до версии 2.0
Изменения:
- Обновлена зависимость GLTextureUtils до версии 1.7.1
- Полное отделение рендера от майнкрафта
- Добавлен 'minecraft' плагин (1.21.8-fabric-yarn-2.0 и 1.21.11-fabric-yarn-2.0)
Добавлен 'minecraft' плагин для версии майна 26.1-snapshot-1
Также ранее плагин был добавлен для версий 1.21.8 и 1.21.11 с mojang маппингами.
Последнее редактирование:


