что такое расширенный opengl в minecraft
Как поддержка OpenGL 3.2 повлияет на Minecraft
В Minecraft добавлена поддержка OpenGL 3.2 (Core Profile) — это спецификация, определяющая программный интерфейс, предназначенный для использования в приложениях с трёхмерной и двухмерной графикой.
Это сразу вызывает два вопроса: будет ли теперь Minecraft запускаться на моём ПК, и как это в целом повлияет на Minecraft.
Минимальные системные требования Minecraft
Разработчики гарантируют, что Minecraft будет работать на ПК, соответствующем минимальным системным требованиям:
Надо сказать, что тут ничего нового — такие требования указаны довольно давно, т.е. переход на более новую версию OpenGL вряд ли приведёт к проблемам у игроков.
Поэтому интереснее, как повлияет это обновление на игру.
Как использование OpenGL 3.2 повлияет на Minecraft Java Edition
Несмотря на то, что поддержка OpenGL 3.2 добавлена в Minecraft только сейчас — это далеко не самая новая спецификация. Она была опубликована ещё в 2009, а последняя версия — 4.6 в 2017г.
Разработчик игры Майкл Стойк (Searge) написал серию твитов о том, почему был сделан такой выбор, и что вообще изменится в игре благодаря обновлению графического движка. Основные моменты его рассказа приводятся ниже.
Майкл работал над обновлением Blaze3D (графический движок Minecraft) для использования OpenGL 3.2 почти целый год.
В декабре к работе подключился Феликс Джонс (Xilefian), который помогал писать шейдеры и исправлять ошибки.
Переход от очень старой версии OpenGL, которой уже 16 лет, к чуть более новой, одиннадцатилетней, — это хороший компромисс между желанием поддерживать работу игры на старых компьютерах и улучшением движка, который обеспечит разработчиков большим контролем над рендерингом.
Использование OpenGL 3.2 позволит снизить нагрузку на центральный процессор и перераспределить часть работы на видеопроцессор.
Кроме этого, большинство современных средств разработки для видеопроцессоров рассчитано на более новые спецификации OpenGL; благодаря им разработчики могут буквально отследить, как именно был отрисован каждый отдельный пиксель на экране.
Обновлённый движок можно рассматривать, как базу для будущей работы, которая должна привести к улучшению производительности и упростить разработчикам добавление нового контента.
В настоящее время не планируется менять то, как выглядит игра.
Мне кажется, что последнее утверждение следует рассматривать скорее как «не планируется в Minecraft 1.17». Дело в том, что разработка многих элементов игры осуществляется схожим образом — сначала доступ к новым возможностям получают лишь разработчики, а потом она становится неотъемлемым элементом игры.
Так было со структурными блоками и наборами данных (датапаками) и так, похоже, будет с поддержкой шейдеров в ресурспаках.
По крайней мере, разработчики уже сделали пару ресурспаков, благодаря которым вода и листья приходят в движение, словно их шевелит лёгкий ветерок.
Так что можно ждать, во-первых, новых ресурспаков, которые используют эти возможности. А во-вторых, уверен, разработчики тоже не смогут удержаться и начнут использовать новые возможности графического обновлённого движка.
Тема: openGL
Опции темы
Поиск по теме
Отображение
openGL
Здесь я постарался как можно более емко и кратко рассказать о тех возможностях openGL, которые могут пригодиться при создании модов для Minecraft. Несмотря на это, объем текста получился весьма внушительным.
Для того, чтобы по-настоящему владеть openGL, этого туториала вам все равно не хватит. Нужно будет прочитать раз в 10 больше литературы. Кроме того, нужны базовые, но уверенные познания в математике и достаточное количество терпения, чтобы понять суть матриц трансформации.
Туториал носит по большей части теоретический характер, реальных примеров в нем очень мало. Он призван немного сбалансировать огромное количество туториалов, в которых используется openGL-код без толкового объяснения происходящего.
Описываются по большей части возможности openGL 1, на котором построен Minecraft. Да, я в курсе, что он давным-давно устарел, но в процессе модификации Minecraft’а избежать использования openGL 1 всё равно не выйдет. Про новые возможности будет сказано немного и в самом конце.
q: Что делают функции openGL?
a: Функции openGL делятся на два типа: одни меняют его глобальное состояние (openGL state), в то время как другие передают в него данные (позиции вершин, UV-координаты и нормали) для отрисовки.
q: В чем суть того, что делает openGL?
a: OpenGL строит изображение на экране (или в памяти) на основе поступающих в него вершин (координат) и своего состояния. В зависимости от состояния он может рисовать точки, линии и многоугольники.
Подсказка: можно прописать в импортах*import static org.lwjgl.opengl.GL11.**(и другие нужные версии) и не*заморачиваться с постоянным повторением GL11.
Используя только openGL:
Используя возможности Minecraft:
Я почти уверен, что из моего посредственного объяснения вы вынесли очень немногое, и настоятельно рекомендую сейчас перейти по*этой ссылке*и прочитать ВСЮ статью. Три раза.
Часто необходимо сохранить текущую матрицу с возможностью последующего восстановления. Это возможно при помощи функций*glPushMatrix() и*glPopMatrix(). glPushMatrix() добавляет матрицу в стек (список) сохраненных матриц. glPopMatrix() восстанавливает последнюю матрицу из стека и удаляет ее оттуда. Например:
Функция*glLoadIdentity()*задает единичную матрицу (которая не делает никаких трансформаций). На практике при создании модов она вряд ли понадобится.
Другие параметры openGL
Кроме матриц трансформации, есть огромное количество других составляющих состояния openGL. Я попробую рассказать о тех, что наиболее важны при создании модов.
В openGL есть несколько boolean-параметров, которые включаются и отключаются при помощи функций*glEnable() и glDisable(), куда в качестве аргумента передается опкод этого параметра. С некоторыми из этих параметров связаны другие функции.
GL_TEXTURE_2D*включает использование текстуры. В качестве «сопутствующей» функции можно было бы указать Minecraft.getMinecraft().renderEngine.bindTexture( ).
GL_LIGHTING*включает простое освещение (с двумя источниками света на постоянных позициях). Оно НИКАК не связано с тем, как затеняются блоки ночью и в тени. Про освещение в Minecraft расскажу внизу.
Когда GL_LIGHTING нужно:
При рендеринге сущностей
При рендеринге tile entity
При рендеринге блоков в GUI
При рендеринге предмета в руках
Когда оно не нужно:
При рендеринге обычных блоков в мире. Там всё работает на костылях.
При рендеринге частиц
При рендеринге GUI
Сопутствующих фунций и параметров много, а рассказывать о них в контексте Minecraft’a толку мало. Включается дефолтное освещение через RenderHelper.enableStandardItemLighting(), выключается через RenderHelper.disableStandardItemLighting(), вспомогательные функции там и смотрите.
GL_CULL_FACE*включает запрет на отрисовку полигонов с обратной стороны. По умолчанию включен, имеет смысл выключать в случаях, когда иначе придется дублировать полигоны с обеих сторон. Сопутствующие функции указывают, что считать передней и обратной сторонами полигона и какие стороны обрезать при включенном GL_CULL_FACE. Никакого смысла трогать эти функции нет, по умолчанию передней стороной считается та, которая рисуется против часовой стрелки.
GL_NORMALIZE*включает автоматическую нормализацию нормалей. Довольно затратно, на практике использовать не стоит.
GL_RESCALE_NORMAL*- упрощенный и ускоренный вариант GL_NORMALIZE. Он подразумевает, что переданные в openGL нормали уже были нормализованы, но вы масшабировали матрицу трансформации (использовали glScale()). Работает верно только в тех случаях, когда матрица была масштабирована без искажений, то есть x, y и z, которые вы передали в glScale(), были равны.
Далее о некоторых вещах, которым не место в гайде по openGL 1, но о которых стоило бы рассказать.