Розыгрыш Premium и Уникальной юзергруппы на форуме! Перейти

Визуальная часть CometRenderer — премиальный >= 1.21.8 fabric рендеринг

Здарова всем. Мне стало достаточно скучно в последнее время, поэтому я решил выпустить на свет мое творение, которое я делал ещё с конца лета — CometRenderer.

Что за CometRenderer?


Данный проект представляет из себя достаточно мощную по производительности и возможному функционалу рендер библиотеку, которая будет гораздо лучше, чем обычный рендер майнкрафта. Предназначена же она для майнкрафта 1.21.8 fabric, однако данную библиотеку можно попробовать использовать на более поздних или ранних версиях (по крайней мере CometRenderer спокойно использовался на 1.21.10, за исключением того, что пример пост эффектов на руки был сломан)

Возможности CometRender'a и чем же он лучше обычного майнкрафт рендера

  • Оптимизация работы с униформами:
    В майнкрафте униформы загружаются в GPU при каждой отрисовке. В CometRenderer униформы загружаются на GPU только после того, как их значение было изменено.
  • Оптимизация отрисовки:
    Отрисовка происходит без каких-либо мусорных действий. Так же библиотека поддерживает отрисовку не только своего меша, но еще и BuiltBuffer майнкрафта.
  • Более удобная загрузка данных:
    В майнкрафте загрузка кода шейдеров происходит через Identifier, что не очень удобно, когда ты хочешь загрузить шейдер с необычного места расположения.
    В CometRenderer есть реализация CometLoader, при помощи которой можно создать кастомный загрузчик данных, тем самым загружая код шейдера тем способом, которым вы захотите. По умолчанию есть следующие загрузчики, распологающиеся в классе CometLoaders:
    IN_JAR, INPUT_STREAM, URI.
  • Создание кастомных форматов вершин (VertexFormat):
    Хотя в майнкрафте есть тоже что-то похожее, однако в CometRenderer это сделано на более высоком уровне.

    В майнкрафте форматы вершин создаются при помощи элементов вершин, которые создаются и хранятся отдельно от форматов, тем более их можно создать не больше 32. В данной библиотеке элементы вершин создаются внутри формата, тем самым можно делать самые разнообразные форматы вершин. (с этой реализацией можно создать шейдер и формат вершин, что бы за 1 draw метод отрисовывать множество ректов с разным размером, цветом, закруглением, с включенным оутлайном или нет и его размером).

    Например, вот код для создание формата вершины, который я использую в своем клиенте для отрисовки закругленных ректов:
    ROUNDED_RECT VertexFormat:
    Expand Collapse Copy
    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:
    Expand Collapse Copy
    #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:
    Expand Collapse Copy
    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:
    Expand Collapse Copy
    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:
Expand Collapse Copy
repositories {
    maven {
        name = "ferra13671-maven"
        url = "https://ferra13671.github.io/maven/"
    }
}

dependencies {
    implementation "com.ferra13671:comet-renderer:latest" //latest заменить на последнюю доступную версию CometRenderer'a (на момент публикации это 1.8.4-public)
    implementation "com.ferra13671:gl-texture-utils:latest" //latest заменить на последнюю доступную версию gl-texture-utils (на момент публикации это 1.6.3)
}

Пример использования библиотеки можно найти в репо по пути src/testmod/java/com/ferra13671/cometrenderer/test


Насчет будущего проекта


CometRenderer является на данный момент моим активным проектом. Идей пока что у меня достаточно, поэтому обновлений будет достаточно много. Из документации пока только JavaDoc у классов и методов, однако в будущем я планирую сделать сайт с подробной документацией по пользованию библиотекой.
Если у вас есть какие-либо идеи либо вы нашли баг, вы всегда можете написать об этом в репозитории CometRenderer'a, либо в моём дискорд сервере (
Пожалуйста, авторизуйтесь для просмотра ссылки.
).



Желаю всем удачи! :CoolCat:

Update 08.12.2025
Добавил документацию по CometRenderer на мой сайт:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Update 18(17).12.2025
Обновил CometRenderer до версии 1.9.

Изменения:
  • UniformType.MATRIX был переименован в UniformType.MATRIX4.
  • Добавлена система теговых реестров.
  • Добавлена система расширений компилятора (плагинов).
  • Добавлена конфиг система.
  • пост-эффекты были перенесены в отдельный плагин ('post-effects').
  • Добавлен глобальный реестр, хранящий как постоянную, так и изменяемую информацию.
  • Вывод исключений с подробным описанием, списком возможных проблем и решений перенесен в плагин 'better-exceptions'.
  • Шейдерные библиотеки были перенесены в отдельный плагин ('shader-libraries').
  • Небольшой рефакторинг.
 
Update 18(17).12.2025
Обновил CometRenderer до версии 1.9.

Изменения:
  • UniformType.MATRIX был переименован в UniformType.MATRIX4.
  • Добавлена система теговых реестров.
  • Добавлена система расширений компилятора (плагинов).
  • Добавлена конфиг система.
  • пост-эффекты были перенесены в отдельный плагин ('post-effects').
  • Добавлен глобальный реестр, хранящий как постоянную, так и изменяемую информацию.
  • Вывод исключений с подробным описанием, списком возможных проблем и решений перенесен в плагин 'better-exceptions'.
  • Шейдерные библиотеки были перенесены в отдельный плагин ('shader-libraries').
  • Небольшой рефакторинг.
перестань обновлять своё дерьмо, ПРОШУ!
 
Update 18(17).12.2025
Обновил CometRenderer до версии 1.9.

Изменения:
  • UniformType.MATRIX был переименован в UniformType.MATRIX4.
  • Добавлена система теговых реестров.
  • Добавлена система расширений компилятора (плагинов).
  • Добавлена конфиг система.
  • пост-эффекты были перенесены в отдельный плагин ('post-effects').
  • Добавлен глобальный реестр, хранящий как постоянную, так и изменяемую информацию.
  • Вывод исключений с подробным описанием, списком возможных проблем и решений перенесен в плагин 'better-exceptions'.
  • Шейдерные библиотеки были перенесены в отдельный плагин ('shader-libraries').
  • Небольшой рефакторинг.
ерунда какаято
 
Update 18(17).12.2025
Обновил CometRenderer до версии 1.9.

Изменения:
  • UniformType.MATRIX был переименован в UniformType.MATRIX4.
  • Добавлена система теговых реестров.
  • Добавлена система расширений компилятора (плагинов).
  • Добавлена конфиг система.
  • пост-эффекты были перенесены в отдельный плагин ('post-effects').
  • Добавлен глобальный реестр, хранящий как постоянную, так и изменяемую информацию.
  • Вывод исключений с подробным описанием, списком возможных проблем и решений перенесен в плагин 'better-exceptions'.
  • Шейдерные библиотеки были перенесены в отдельный плагин ('shader-libraries').
  • Небольшой рефакторинг.
не развиваемый психбольной, прекрати этот ужас
 
Update 18(17).12.2025
Обновил CometRenderer до версии 1.9.

Изменения:
  • UniformType.MATRIX был переименован в UniformType.MATRIX4.
  • Добавлена система теговых реестров.
  • Добавлена система расширений компилятора (плагинов).
  • Добавлена конфиг система.
  • пост-эффекты были перенесены в отдельный плагин ('post-effects').
  • Добавлен глобальный реестр, хранящий как постоянную, так и изменяемую информацию.
  • Вывод исключений с подробным описанием, списком возможных проблем и решений перенесен в плагин 'better-exceptions'.
  • Шейдерные библиотеки были перенесены в отдельный плагин ('shader-libraries').
  • Небольшой рефакторинг.
Пожалуйста хватит, остановись, не обновляй больше это, мы уже поняли что у тебя есть много свободного времени, но это же действительно никому не нужно
 
Только обнову на югейм выложил, а уже фанаты налетели XD
Сразу видно — стражи югейма.
фанатеть по кому? по рыгакодеру у которого вместо креста ярлык курсора и вместо иконы листок с доменом чата гпт?
 
Только обнову на югейм выложил, а уже фанаты налетели XD
Сразу видно — стражи югейма.
Тебе говорят не обновляй, потому что ты тратишь свое время на это говно,которое можно просто удалить. у всех бывают говно проекты, и самое лучшее решение это не пытаться спасти его, а сделать новый,учитывая все ошибкм
 
Тебе говорят не обновляй, потому что ты тратишь свое время на это говно,которое можно просто удалить. у всех бывают говно проекты, и самое лучшее решение это не пытаться спасти его, а сделать новый,учитывая все ошибкм
Я обновляю рендер по той причине, что в первую очередь он нужен мне, т.к. он у меня используется в клиенте как более оптимизированная замена майнкрафтовского рендера, а так же потому, что я в будущем хочу его полностью отделить от майна и использовать его для другого проекта.

Называть CometRenderer говном нету ни одного нормального обоснования, т.к. своё предназначение он выполняет достойно, а попытки назвать проект гпт хуйнёй являются просто тупым вбросом.

Я уверен на 100%, что не один ИИ не напишет такой же по функционалу и качеству рендерер для версий >=1.21.8, как этот. Максимум потратите время на написание гигантского количества просьб железному рабу об фиксе его же ошибок, в итоге получив большого дерьма на ложке, в котором сами же не разберётесь.
 
Я обновляю рендер по той причине, что в первую очередь он нужен мне, т.к. он у меня используется в клиенте как более оптимизированная замена майнкрафтовского рендера, а так же потому, что я в будущем хочу его полностью отделить от майна и использовать его для другого проекта.

Называть CometRenderer говном нету ни одного нормального обоснования, т.к. своё предназначение он выполняет достойно, а попытки назвать проект гпт хуйнёй являются просто тупым вбросом.

Я уверен на 100%, что не один ИИ не напишет такой же по функционалу и качеству рендерер для версий >=1.21.8, как этот. Максимум потратите время на написание гигантского количества просьб железному рабу об фиксе его же ошибок, в итоге получив большого дерьма на ложке, в котором сами же не разберётесь.
ну и пользуйся своей поебенью премиальный рендер хуендер ты сам то понимаешь нахуй оно нужно?
хуже уже не будет, это прям ПЛАТИНОВЫЙ ВЫСЕР) премиальный рендерер))) тебе стало скучно в последнее время, поэтому ты решил высрать чатгпт враппер и ссать всем в уши что это НЕ ЕБАТЬСЯ РЕНДЕРЕР ПРЕМИАЛЬНЫЙ))))))
"Данный проект представляет из себя достаточно мощную по производительности" засчёт ЧЕГО тут блять достигается МОЩЬ ПО ПРОИЗВОДИТЕЛЬНОСТИ?) ЗАСЧЁТ ЗАГРУЗКИ БЛЯТЬ ЮНИФОРМ ПРИ ИХ ИЗМЕНЕНИИ?))) невьебическая оптимизация, я бы даже сказал ДОСТАТОЧНО МОЩНАЯ)
"Оптимизация отрисовки: Отрисовка происходит без каких-либо мусорных действий" это ПИЗДЁЖ собачий, потому что если ты выставляешь это ПРЕМИУМ рендерером, то как у рендерера тут не применено буквально НИКАКИХ решений по оптимизации кроме вот этого нищего приёма который я выше упомянул, так ты ещё и в добавок к этому заявил, что твой "РЕНДЕРЕР)))" лучше, чем у майнкрафта)
"с этой реализацией можно создать шейдер и формат вершин, что бы за 1 draw метод отрисовывать множество ректов с разным размером, цветом, закруглением, с включенным оутлайном или нет и его размером" удачи тебе с ЭТОЙ РЕАЛИЗАЦИЕЙ топовой, точнее достаточно мощной, нарисовать что то ещё помимо ректа в 1 дравколл)
Посмотреть вложение 319844
great. даже если предположить что этот мусор чем то обусловлен, не отменяет того факта что это мусор. и выглядит как мусор, и даже звучит это как мусор.
твоя обёртка лезет в юниформы юзаемой проги ДАЖЕ БЛЯТЬ НЕ ЗНАЯ что там реально юзается а что нет)
Посмотреть вложение 319842
секретный ингредиент))) вот ты когда вырастешь и у тебя родится сын(ахахах видимо от твоего парня с которым ты этот экскремент нашкодил), и НУ ВДРУГ он заболеет например там не знаю грыжа блять вылезет, ты видимо его так же топором нахуй зарубишь из за этого)
и ты, опять же, назвал это ПРЕМИАЛЬНЫМ рендерером) премиальный вонючий кусок говна блять с привычкой дрочить систем экзит при ошибке, ещё раз, БИБЛИОТЕКА-ВРАППЕР(!!!) КОТОРЫЙ СНОСИТ ВЕСЬ ПРОЦЕСС, просто БЕСПОЛЕЗНЫЙ по факту потому что никаких реальных ускорений в нём НЕТ, так ты ещё свою мега оптимизацию с юниформами умудрился в 2 пункта расписать как отдельные)

"Возможности CometRender'a и чем же он лучше обычного майнкрафт рендера" Он ничем не лучше. как минимум потому что опять же это не рендерер а обёртка убогая.
Ты по факту просто для понта расписал всю эту огромную хуйню, но за ней не стоит БУКВАЛЬНО НИЧЕГО) любой нормальный кодер всё сам напишет как ему удобно, и в отличии от твоей хуйни - реально оптимизирует рендер, вместо накатывания твоей говно-обёртки, потому что удобство от этой библиотеки очень спорное, а оптимизации нет вообще никакой.

"Ну раз критикуешь то, как я описал данный класс, то предлагай как бы ты описал данный класс." Это нельзя никак описать иначе, чем просто говно. Ты ещё и умудряешься спорить с чуваком о том, что это якобы не чатгпт проект и не чатгпт пост) когда это и чатгпт и само по себе говно.
"Тебе никакой ИИ не напишет здравую кастомную рендер библиотеку, тем более которая будет нормально работать на +-1.21.8 fabric."
Вот именно, что не напишет, так что и ТЫ нихуя никакую ЗДРАВУЮ БЛЯТЬ)) КАСТОМНУЮ БЛЯТЬ)) РЕНДЕР БЛЯТЬ))) библиотеку не написал) забавно ещё то что ты пишешь +-1.21.8 fabric хотя в названии написано премиальный >= 1.21.8 fabric рендеринг)
Единственный совет, который тут можно дать, как минимум переименовать библиотеку, потому что это враппер, а во вторых приубавить понты с описанием того что ты тут НАШКОДИЛ) Потому что когда видишь этот пост, может сначала показаться, что это что то полезное, из за масштаба расписанного, но когда начинаешь смотреть что это на самом деле понимаешь что это просто мусор.
Начали за здравие(здравая кастом рендер библиотека)))), закончили за упокой, тут лучше и не скажешь)
На этом форуме наверное нет ничего, что преподаётся с таким напускным пафосом, расписано по всем блять гост стандартам в программировании, но на деле является НИЧЕМ, как в этом посте) Лишь премиальная обёртка, обёрнутая в ещё более премиальную обёртку)
Называть CometRenderer говном нету ни одного нормального обоснования, т.к. своё предназначение он выполняет достойно, а попытки назвать проект гпт хуйнёй являются просто тупым вбросом.
тут тип тебе всё подробно расписал
 
Здарова всем. Мне стало достаточно скучно в последнее время, поэтому я решил выпустить на свет мое творение, которое я делал ещё с конца лета — CometRenderer.

Что за CometRenderer?


Данный проект представляет из себя достаточно мощную по производительности и возможному функционалу рендер библиотеку, которая будет гораздо лучше, чем обычный рендер майнкрафта. Предназначена же она для майнкрафта 1.21.8 fabric, однако данную библиотеку можно попробовать использовать на более поздних или ранних версиях (по крайней мере CometRenderer спокойно использовался на 1.21.10, за исключением того, что пример пост эффектов на руки был сломан)

Возможности CometRender'a и чем же он лучше обычного майнкрафт рендера

  • Оптимизация работы с униформами:
    В майнкрафте униформы загружаются в GPU при каждой отрисовке. В CometRenderer униформы загружаются на GPU только после того, как их значение было изменено.
  • Оптимизация отрисовки:
    Отрисовка происходит без каких-либо мусорных действий. Так же библиотека поддерживает отрисовку не только своего меша, но еще и BuiltBuffer майнкрафта.
  • Более удобная загрузка данных:
    В майнкрафте загрузка кода шейдеров происходит через Identifier, что не очень удобно, когда ты хочешь загрузить шейдер с необычного места расположения.
    В CometRenderer есть реализация CometLoader, при помощи которой можно создать кастомный загрузчик данных, тем самым загружая код шейдера тем способом, которым вы захотите. По умолчанию есть следующие загрузчики, распологающиеся в классе CometLoaders:
    IN_JAR, INPUT_STREAM, URI.
  • Создание кастомных форматов вершин (VertexFormat):
    Хотя в майнкрафте есть тоже что-то похожее, однако в CometRenderer это сделано на более высоком уровне.

    В майнкрафте форматы вершин создаются при помощи элементов вершин, которые создаются и хранятся отдельно от форматов, тем более их можно создать не больше 32. В данной библиотеке элементы вершин создаются внутри формата, тем самым можно делать самые разнообразные форматы вершин. (с этой реализацией можно создать шейдер и формат вершин, что бы за 1 draw метод отрисовывать множество ректов с разным размером, цветом, закруглением, с включенным оутлайном или нет и его размером).

    Например, вот код для создание формата вершины, который я использую в своем клиенте для отрисовки закругленных ректов:
    ROUNDED_RECT VertexFormat:
    Expand Collapse Copy
    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:
    Expand Collapse Copy
    #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:
    Expand Collapse Copy
    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:
    Expand Collapse Copy
    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:
Expand Collapse Copy
repositories {
    maven {
        name = "ferra13671-maven"
        url = "https://ferra13671.github.io/maven/"
    }
}

dependencies {
    implementation "com.ferra13671:comet-renderer:1.9"
    implementation "com.ferra13671:gl-texture-utils:1.6.1"
    
   //Плагины (необязательно)
   implementation "com.ferra13671:comet-renderer-better-exceptions:1.9"
   implementation "com.ferra13671:comet-renderer-post-effects:1.9"
   implementation "com.ferra13671:comet-renderer-shader-libraries:1.9"
}

Пример использования библиотеки можно найти в репо по пути src/testmod/java/com/ferra13671/cometrenderer/test


Насчет будущего проекта


CometRenderer является на данный момент моим активным проектом. Идей пока что у меня достаточно, поэтому обновлений будет достаточно много. Из документации пока только JavaDoc у классов и методов, однако в будущем я планирую сделать сайт с подробной документацией по пользованию библиотекой.
Если у вас есть какие-либо идеи либо вы нашли баг, вы всегда можете написать об этом в репозитории CometRenderer'a, либо в моём дискорд сервере (
Пожалуйста, авторизуйтесь для просмотра ссылки.
).



Желаю всем удачи! :CoolCat:

Update 08.12.2025
Добавил документацию по CometRenderer на мой сайт:
Пожалуйста, авторизуйтесь для просмотра ссылки.


Update 18(17).12.2025
Обновил CometRenderer до версии 1.9.

Изменения:
  • UniformType.MATRIX был переименован в UniformType.MATRIX4.
  • Добавлена система теговых реестров.
  • Добавлена система расширений компилятора (плагинов).
  • Добавлена конфиг система.
  • пост-эффекты были перенесены в отдельный плагин ('post-effects').
  • Добавлен глобальный реестр, хранящий как постоянную, так и изменяемую информацию.
  • Вывод исключений с подробным описанием, списком возможных проблем и решений перенесен в плагин 'better-exceptions'.
  • Шейдерные библиотеки были перенесены в отдельный плагин ('shader-libraries').
  • Небольшой рефакторинг.
Update 20.12.2025
Обновил CometRenderer до версии 2.0

Изменения:
  • Обновлена зависимость GLTextureUtils до версии 1.7.1
  • Полное отделение рендера от майнкрафта
  • Добавлен 'minecraft' плагин (1.21.8-fabric-yarn-2.0 и 1.21.11-fabric-yarn-2.0)
 
Последнее редактирование:
Здарова всем. Мне стало достаточно скучно в последнее время, поэтому я решил выпустить на свет мое творение, которое я делал ещё с конца лета — CometRenderer.

Что за 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:
    Expand Collapse Copy
    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:
    Expand Collapse Copy
    #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:
    Expand Collapse Copy
    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:
    Expand Collapse Copy
    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:
Expand Collapse Copy
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, либо в моём дискорд сервере (
Пожалуйста, авторизуйтесь для просмотра ссылки.
).



Желаю всем удачи! :CoolCat:

Update 08.12.2025
Добавил документацию по CometRenderer на мой сайт:
Пожалуйста, авторизуйтесь для просмотра ссылки.


Update 18(17).12.2025
Обновил CometRenderer до версии 1.9.

Изменения:
  • UniformType.MATRIX был переименован в UniformType.MATRIX4.
  • Добавлена система теговых реестров.
  • Добавлена система расширений компилятора (плагинов).
  • Добавлена конфиг система.
  • пост-эффекты были перенесены в отдельный плагин ('post-effects').
  • Добавлен глобальный реестр, хранящий как постоянную, так и изменяемую информацию.
  • Вывод исключений с подробным описанием, списком возможных проблем и решений перенесен в плагин 'better-exceptions'.
  • Шейдерные библиотеки были перенесены в отдельный плагин ('shader-libraries').
  • Небольшой рефакторинг.
Update 20.12.2025
Обновил CometRenderer до версии 2.0

Изменения:
  • Обновлена зависимость GLTextureUtils до версии 1.7.1
  • Полное отделение рендера от майнкрафта
  • Добавлен 'minecraft' плагин (1.21.8-fabric-yarn-2.0 и 1.21.11-fabric-yarn-2.0)
Update 24.12.2025
Добавлен 'minecraft' плагин для версии майна 26.1-snapshot-1
Также ранее плагин был добавлен для версий 1.21.8 и 1.21.11 с mojang маппингами.
 
Update 24.12.2025
Добавлен 'minecraft' плагин для версии майна 26.1-snapshot-1
Также ранее плагин был добавлен для версий 1.21.8 и 1.21.11 с mojang маппингами.
огромный молодец, красавчик что стараешься, продолжай дальше обновлять свой дерьмовый рендер, надеюсь у тебя ничего не получится
 
Здарова всем. Мне стало достаточно скучно в последнее время, поэтому я решил выпустить на свет мое творение, которое я делал ещё с конца лета — CometRenderer.

Что за 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:
    Expand Collapse Copy
    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:
    Expand Collapse Copy
    #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:
    Expand Collapse Copy
    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:
    Expand Collapse Copy
    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:
Expand Collapse Copy
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, либо в моём дискорд сервере (
Пожалуйста, авторизуйтесь для просмотра ссылки.
).



Желаю всем удачи! :CoolCat:

Update 08.12.2025
Добавил документацию по CometRenderer на мой сайт:
Пожалуйста, авторизуйтесь для просмотра ссылки.


Update 18(17).12.2025
Обновил CometRenderer до версии 1.9.

Изменения:
  • UniformType.MATRIX был переименован в UniformType.MATRIX4.
  • Добавлена система теговых реестров.
  • Добавлена система расширений компилятора (плагинов).
  • Добавлена конфиг система.
  • пост-эффекты были перенесены в отдельный плагин ('post-effects').
  • Добавлен глобальный реестр, хранящий как постоянную, так и изменяемую информацию.
  • Вывод исключений с подробным описанием, списком возможных проблем и решений перенесен в плагин 'better-exceptions'.
  • Шейдерные библиотеки были перенесены в отдельный плагин ('shader-libraries').
  • Небольшой рефакторинг.
Update 20.12.2025
Обновил CometRenderer до версии 2.0

Изменения:
  • Обновлена зависимость GLTextureUtils до версии 1.7.1
  • Полное отделение рендера от майнкрафта
  • Добавлен 'minecraft' плагин (1.21.8-fabric-yarn-2.0 и 1.21.11-fabric-yarn-2.0)
Update 24.12.2025
Добавлен 'minecraft' плагин для версии майна 26.1-snapshot-1
Также ранее плагин был добавлен для версий 1.21.8 и 1.21.11 с mojang маппингами.
Update 30.12.2025
Обновил CometRenderer до версии 2.1

Изменения:
  • Добавлена sampler object система
  • Убраны SamplerUniformUploader и BufferUniformUploader классы
  • Обновлены примеры использования 'minecraft' плагина
  • Использование lombok'а в проекте
  • Добавлен параметр оффсета для субэлементов в VertexElementType
 
Назад
Сверху Снизу