что такое рендер в майнкрафте
Анализ рендеринга кадра бета-версии Minecraft RTX
Minecraft — это творческая игра-выживалка, в которой нужно откапывать ресурсы, создавать инструменты и фермы, исследовать мир в поисках ценных сокровищ и строить порталы в соседние миры Nether и End.
Это ещё и социальная игра, в ней друзья, играющие на разных платформах, способны работать вместе над созданием интересных структур. Кроме того, она имеет интуитивно понятный интерфейс для программирования собственных серверов и модов.
Недавно был обновлён рендерер Minecraft для Windows 10, в его архитектуру были внесены значительные изменения: добавлена трассировка лучей в реальном времени (ray tracing), устранение шума трассировки лучей (ray tracing denoising) и суперсэмплирование при помощи глубокого обучения (deep learning super sampling).
Давайте же изучим, как Minecraft RTX выполняет рендеринг кадра, по мере возможности ссылаясь на исследовательские статьи.
Примечание: эта статья не является официальным анализом рендерера Minecraft RTX, в ней исследуется бета-версия рендерера, поэтому описанная структура к финальному релизу может измениться.
Трассировщик лучей
Текстура поиска (Look Up Texture) PBR-материала
Создание каждого кадра Minecraft RTX начинается с построения низкоуровневых ускоряющих структур данных BuildRayTracingAccelerationStructure(. ) для всех анимированных объектов в сцене (животных или игроков).
После построения высокоуровневой ускоряющей структуры мы переходим к dispatchRays для вычисления первичных лучей и теней освещения, записывая различные выходные данные. В том числе:
Далее испускаются дополнительные лучи для непервичных лучей, а результаты записываются в:
Последним вычисляется объёмный туман (Volumetric fog).
Устранение шумов A-SVGF
Minecraft использует пространственно-временную фильтрацию [Schied et al. 2019], состоящую из этапа пространственно-временного репроецирования на основании дисперсии. Он получает буферы момента, предыдущую длину и предыдущие кадры, после чего пытается разместить эти данные там, где они должны находиться в текущем кадре.
Подробнее о устранении шума трассировки лучей реального времени при помощи A-SVGF читайте в моём посте по этой теме.
Далее следует этап двунаправленной фильтрации, на котором в течение нескольких проходов выполняется адаптивное размытие кадров. Также для ускорения ресолвинга репроецированных регионов с короткой историей используется кеширование свечения.
Далее буферы с чередованием комбинируются, создавая готовые выходные данные, передаваемые ядру DLSS 2.0.
Суперсэмплирование при помощи глубокого обучения
Deep Learning Super Sampling 2.0 (DLSS 2.0) использует автоэнкодер, получающий на входе флуктуационный render target, размер которого является частью выходного разрешения, флуктуационный буфер скоростей, аналогичный используемому при временном сглаживании. На выходе получаются готовые выходные данные в увеличенном разрешении.
Проход UI
Элементы UI рендерятся с полным разрешением в отдельный render target и композитингом добавляются в конце кадра.
Постобработка
Minecraft завершает построение кадра тональной коррекцией и применением всех включённых эффектов постобработки, например, виньетирования.
Заключение
Minecraft сильно выигрывает от использования системы трассировки лучей. Его динамические окружения и чрезвычайно вариативные тени и освещение, движение по системам пещер и исследование структур кажутся гораздо более правдоподобными и интересными…
Дополнительные ресурсы
Справочные материалы
[Schied et al. 2019] Real-Time Path Tracing and Denoising in ‘Quake 2’. Доклад Кристофа Шида и Алексея Пантелеева с GDC 2019
Может задебажить игру в PerfStudio/прочих? Включить вайрфрейм и всех делов 🙂
А вообще в майнкрафте не такое уж и большое количество видимых кубиков, инстансинг зарулит.
Програмно каждый кубик может быть или открытым(хотябы одна сторона в воздухе) или закрытым. Тоесть обрабатывается некая 3д плоскость, а не все кубики. А тут уже можно заюзать индор техники.
Недавно пробовал рендерить большую территорию, состоящую из кубиков:
40 FPS на GeForce 310M
Здесь порядка 5 миллионов кубиков, которые разделены на чанки (отдельные меши из 64x64x32 32x32x64 кубов). При обновлении чанка генерируется меш, который состоит только из видимых сторон кубов.
Che@ter
> А вообще в майнкрафте не такое уж и большое количество видимых кубиков,
> инстансинг зарулит.
А чего там инстансить то? Куб же очень простая фигура, более того в подавляющем большинстве видны только одна-две-три грани. Разве есть смысл «инстансить» грани?
Хорошо, допустим видюхи умеют сотни миллионы маленьких трисов в секунды, в это верится.
А вот как быть с филлрейтом? Довольно легко напридумывать ситуаций когда филлрейт забьёт растеризатору печенку вконец.
Например поле из множества плоских слоёв с пустыми слоями между ними и вот мы в центре композиции смотрим наверх там или вниз.
Очевидно полезно рендерить от ближних чанков к дальним включив z-buffer, но как то поэффективней можно?
=A=L=X=
> но как то поэффективней можно?
Конечно, просто не нужно рисовать то что не видно,
раньше так во всех играх делали, а теперь разленились.
Hybernaculum
> Конечно, просто не нужно рисовать то что не видно,
> раньше так во всех играх делали, а теперь разленились.
Minecraft Wiki:Создание рендеров
Рендер гранита, выполненного через Blender
Вики в основном использует специальные «стандартизированные виды» соответствующего игрового элемента в виде изображений, которые можно найти в правой части страницы. Эти стандартизированные представления являются аксонометрия представлениями с приблизительно изометрическим углом обзора (за исключением крестообразных моделей), а также используются для инвентарной формы блоков в игре. Эти представления являются не простыми скриншотами, а специальными рендерами. В большинстве случаев игровой элемент импортируется в трёхмерном программном обеспечении или воспроизводится там, чтобы затем иметь возможность создать снимок со специального ракурса. Для поддержания прозрачности используется только формат изображений PNG.
Создание стандартизированных представлений непосредственно в игре невозможно. Специальный угол обзора может быть достигнут параметрами поворота и наклона головы с помощью команды /teleport @s
Эта статья содержит инструкции по созданию стандартных представлений, используемых в wiki. Инструкции описывают только один способ создания нужного вида. Отдельные авторы могут работать по-разному. Любое загружаемое программное обеспечение доступно бесплатно, и обращение с платными альтернативами может быть проще и удобнее.
Для видов используется только приблизительно изометрический угол. Изометрическая аксонометрия стандартизирована, и точный угол обзора составляет 45° и arctan (√2) (≈54.7356°). Однако для представлений в wiki используется угол обзора 45° и 60°.
Содержание
Просмотр рендера блоков
Скачать Blender Blockbench |
Рендера блоков создаются с помощью программного обеспечения для работы с 3D графикой. Конечно, оно может быть свободно выбрано; очень популярна бесплатная программа Blender (версия 2.83), которую можно скачать в правой части страницы. Вы создаете только те стороны объекта, которые фактически видны из угла обзора, с которого в конечном итоге производится запись. Фактические модели поэтому всегда выглядят очень странно, но на конечном продукте, представлении для Вики, ничего не заметно.
Примечание: блоки также могут быть визуализированы с помощью Mineshot, как описано ниже.
Шаблоны в этом разделе предназначены только для реальных представлений в плагинах, хотя форма инвентаризации блоков также может быть сгенерирована теоретически, но использует другое освещение, чем задано в шаблонах. Поэтому для отображения инвентарной формы блоков лучше всего просто создать скриншот инвентаря с соответствующим блоком с графическим интерфейсом размером «нормальный», так как он имеет размер 32×32px в качестве стандарта в wiki и должен быть обрезан.
Шаблоны для блендера представлены во всем этом разделе предназначены исключительно для использования в Майнкрафт Вики и лицензированы под Creative Commons Attribution-NonCommercial-ShareAlike 3.0.
Настройки
Поскольку рендера блоков не создать непосредственно в игре, особенно важно сделать их как можно более подробными. Кроме того, все рендеры во всей Вики должны быть одинаковыми, так что, когда они помещаются на страницу, не будет никаких серьезных различий в способе рендеринга. Поэтому существуют некоторые особые требования, которые необходимо соблюдать при создании блочных видов. Все шаблоны, представленные в этом разделе, следуют этим рекомендациям, которые не требуют дополнительной настройки.
С скриншотом, сгенерированным модом, эти предустановки не будут достижимы, поэтому используется программное обеспечение для 3D-графики.
Кубические блоки
Рендер блока акациевых досок, созданного в Blender
Другие типы блоков
Помимо обычных блоков с кубической формой, в игре есть также некоторые блоки, которые имеют различную форму. Однако используемые до сих пор шаблоны предназначены только для кубических блоков. Для различных о форме блоков требуются различные шаблоны, все из которых должны быть специально разработаны и сконфигурированы. Таблица в этом разделе содержит различные шаблоны для различных типов таких блоков.
Использование такое же, как описано в приведенной выше инструкции. Если блок должен использовать несколько текстур, то их нужно выбрать для каждого элемента блока. Если блок основан только на одной текстуре, то для назначения текстуры можно выбрать любой элемент.
Диагностика
Пропущенная текстура
Неправильно повёрнутое изображение
При повторном рендеринге блока через соответствующее меню или нажатием клавиши F12 ошибка исправляется, как показано на рисунке. Теперь это можно сохранить как обычно.
Разрешение и сглаживание
Например, иногда нужно сделать Grid-изображение блока в разрешении 32 на 32, или включить сглаживание, чтобы не было «лесенок» по краям блока. Для этого нужно зайти в настройки сцены, или рендера. Для этого в той же панельке, где мы выбирали параметры текстур (шахматную иконку) кликаем на первую иконку — фотоаппарат. Внизу отобразятся настройки рендера.
В группе Dimesions под надписью Resolution находятся два параметра: X и Y, которые задают ширину и высоту отрендеренной картинки. Например, чтобы сделать Grid-версию блока, нужно выставить 32 на 32.
Пролистав ниже, увидим группу Anti-aliasing. Чтобы включить сглаживание, ставим галочку перед надписью Anti-aliasing. Ниже можно выбрать качество сглаживания (5, 8, 11 или 16). Дальше все, как обычно — F12 — F3 — сохраняем результат.
Использование Blockbench
Вы также можете экспортировать модели в obj-файлы, которые впоследствии будут использоваться в Blender.
Начиная с версии 3.5.2 вид камеры можно легко установить, щелкнув правой кнопкой мыши в пустом пространстве и из Angles выберите Isometric right.
Диагностика Blockbench
Так как блок по умолчанию находится не в client.jar, вы должны нажать на квадрат с плюсом (который создает новый куб) и изменить размер вашего нового куба до 16x16x16 и назначить текстуры, нажав кнопку «Add Texture», выбрав файл, щелкнув грань и перетащив соответствующую текстуру на грань. Делайте это каждый раз, когда вы хотите добавить текстуру.
Для лестниц и плит он просто обеспечит пустые текстуры с красными восклицательными знаками. Просто щелкните правой кнопкой мыши на эти пустые участки и нажмите «Change File», чтобы изменить файл.
Если вам нужно повернуть грань, вернитесь к блочной модели, нажмите на грань, найдите ползунок под новым увеличенным изображением текстуры, которую вы использовали, и перемещайте его до тех пор, пока он не станет таким, как вы хотите.
Рендер сущностей
Хотя стандартные рендеры сущностей также могут быть созданы с помощью программного обеспечения для 3D-графики, его использование не рекомендуется. Очень трудно воспроизвести правильную модель, так как каждый объект имеет разные размеры и модели. Однако другие сущности, такие как шалкеры, имеют кубическую форму, поэтому Blender можно использовать для визуализации одной из них. В дополнение к рабочей нагрузке, освещение является реальной проблемой. Свет ведет себя в «Майнкрафте» совсем по-другому, и точное поведение в среде 3D-графического программного обеспечения чрезвычайно сложно и в большинстве случаев точно воспроизвести невозможно.
В этом случае вместо программного обеспечения для 3D-графики используются моды. «Mineshot», созданный бывшим редактором англо-wiki, BarracudaATA, является лучшим модом, который может быть использован для рендеринга сущностей.
Статичные сущности
Камера центрирована на позиции игрока, но визуализируется игрой только тогда, когда она не находится в режиме просмотра от первого лица. Если поле зрения правильно настроено,то можно создать обычный скриншот. Фактический объект изображения не обязательно должен быть точно посередине, потому что запись все равно постобрабатывается.
Поскольку запись теперь была успешно выполнена, ее можно улучшить в программе обработки изображений. Используемое программное обеспечение не имеет значения, но загрузка для бесплатной программы GIMP можно найти в правом верхнем углу этого раздела. Сначала удаляется небо, для чего лучше всего подходит инструмент выбора цвета (волшебная палочка). При этом необходимо позаботиться о том, чтобы все места, где видно небо, были удалены. Такие сущности, как скелет, имеют много дыр в своей модели, где все еще будут отдельные кусочки неба.
После того, как фон исчезнет, обрезка будет выполнена. Ширина изображения должна быть минимальной, например, два ребра непосредственно примыкают к последнему пикселю объекта изображения. Высота должна иметь достаточный размах, и это не должно быть сокращено так радикально, иначе объект изображения «прилипнет» к верхнему краю. Если в рендеринге больше нечего редактировать, то его можно экспортировать и загрузить в вики.
Во время обработки изображений важно не масштабироваться. В результате теряется лишь очень небольшое качество, а размер файла резко увеличивается, а не падает. Меньшая запись должна быть создана непосредственно с Mineshot и меньшим уровнем масштабирования. В самой wiki размер изображения также может быть очень легко изменен в качестве параметра во время интеграции.
Двигающиеся сущности
Рендер стража, выполненного с помощью Mineshot
Задача при создании рендеров заключается в создании объектов, модель которых имеет постоянную анимацию. Например, в случае чешуйницы, тело которой постоянно движется, а также в случае стража, чьи шипы движутся и который постоянно вызывает плавательное движение своим хвостом. Начать создавать представление об этих существах можно было бы, конечно, просто нажав на спусковой крючок в нужный момент, но это слишком ненадежно и абсолютно правильный момент поймать практически невозможно.
Фактическая запись все еще находится в игре, и шаги уже описаны в предыдущем разделе.
Трёхмерное изображение предметов
Структуры
Render of the end portal room in stronghold using Mineshot
В случае со структурой главное-переместить все связанные блоки в подходящее место. Например, запись может происходить только в верхнем мире, поскольку в нижнем мире и Краю отсутствует солнечный свет и освещение. Если нужно сделать снимок адской крепости или другой структуры Нижнего мира, он должен быть перенесен в верхний мир. Создание структуры блок за блоком было бы трудным делом, поэтому есть структурный блок или внешнее программное обеспечение для редактирования, такое как «MCEdit», облегчающее выполнение задачи. Ссылка для загрузки находится в правой части страницы.
Если структура уже находится в надземном мире, то в большинстве случаев изменения все еще должны быть сделаны. Должна быть создана подходящая среда. Такие сооружения, как заброшенная шахта или сокровищница, не должны оставаться под землей, а должны быть сдвинуты к небу, чтобы их можно было освещать солнечным светом. Команда /clone чрезвычайно полезна для этого, а это означает, что внешнее программное обеспечение в этом случае больше не требуется. Но даже строения непосредственно на Земле должны быть сдвинуты к небу. Как описано в предыдущем разделе, небо является отличным фоном из-за его низкого цветового спектра, так как более поздняя прозрачность может быть поставлена без каких-либо проблем. Если конструкция была перемещена достаточно высоко, то грунт не виден, что упрощает постобработку. Вы также должны обратить внимание на ориентацию сцены. Как уже было описано, направление просмотра для Вики всегда указывает на северо-запад. Сцена должна быть выровнена соответствующим образом. Если это не так, то для небольших блоков структур можно вращать их с помощью структурного блока. Для больших структур было бы проще использовать внешнее программное обеспечение для редактирования, такое как»MCEdit».
Если вся конструкция сейчас находится в нужном месте, ее необходимо подготовить к записи. Это особенно важно для закрытых помещений, содержимое которых должно быть видно. Например, снимаются потолок и две стены, а именно те две стены, которые находятся ближе всего к зрителю. Совершенно не обязательно удалять все составляющие соответствующей стены, например, вход в одну из стен, желательно сохранить ее, в том числе и границу блоков. Конкретный пример открытия такого пространства можно найти на правой стороне.
Поскольку структура подготовлена, нужно подготовить только позицию игрока. Важно помнить, что камера» Mineshot » находится в центре плеера, но ее не будет видно. Если игрок виден в сцене, вы должны переключиться на просмотр от первого лица. Хотя фактическое положение игрока в сцене не имеет значения, важно только, чтобы была изображена вся сцена, но некоторые блоки, такие как сундук и голова, отображаются только до тех пор, пока игрок находится в радиусе 64 блоков. Кроме того, частицы видны только на максимальном расстоянии от игрока в 32 блока.
Поскольку запись теперь была успешно выполнена, ее можно улучшить в программе обработки изображений. Используемое программное обеспечение не имеет значения, но загрузка для бесплатной программы GIMP можно найти в правом верхнем углу этого раздела. Сначала удаляется небо, для чего лучше всего подходит инструмент выбора цвета (волшебная палочка). При этом необходимо позаботиться о том, чтобы все места, где видно небо, были удалены. Структуры с железными решётками имеют много отверстий, где все еще будут отдельные кусочки неба.
После того, как фон исчезнет, обрезка будет выполнена. Ширина изображения должна быть минимальной, например, два ребра непосредственно примыкают к последнему пикселю объекта изображения. Высота должна иметь достаточный размах, и это не должно быть сокращено так радикально, иначе объект изображения «прилипнет» к верхнему краю. Если в рендеринге больше нечего редактировать, то его можно экспортировать и загружать в вики.
Во время обработки изображений важно не масштабироваться. В результате теряется лишь очень небольшое качество, а размер файла резко увеличивается, а не падает. Меньшая запись должна быть создана непосредственно с помощью Mineshot и меньшим уровнем масштабирования. В самой вики размер изображения также может быть очень легко изменен в качестве параметра во время интеграции.
Оптимизация
Поскольку изображения всегда содержат много прозрачных областей и небольшой цветовой спектр, стоит сжать файлы. Помимо очевидного эффекта экономии места, меньший размер также помогает при просмотре изображения в браузере, поскольку оно загружается с меньшим количеством данных с Вики-сервера.
Последующее масштабирование представления не является хорошим решением для уменьшения размера файла, и это приводит к обратному эффекту. Это связано с тем, что почти во всех режимах масштабирования используется интерполяция со сглаживанием ребер. Это значительно расширяет цветовой спектр и соответственно увеличивает размер файла. Кроме того, качество текстур Minecraft, которые и так имеют низкое разрешение, часто теряется.
Вместо этого рекомендуется использовать сжатие без потерь. PNGOUT приложение, которое совместимо для Windows, macOS и Linux, доступно для этой цели. В зависимости от изображения, после сжатия остается только от 80% до 20% исходного размера файла без видимых изменений на изображении. Он может быть загружен в правой части страницы для соответствующей операционной системы.
В Windows «PNGOUT» может использоваться в качестве графического интерфейса пользователя. PNG-файлы, необходимые для сжатия, должны быть выбраны, и программа будет сжимать их. В macOS и Linux PNGOUT можно использовать только через терминал. Рекомендуется использовать скрипт, а также под Windows для автоматической обработки нескольких изображений. В Windows доступ к «PNGOUT» также можно получить с помощью интерпретатора командной строки и автоматизировать с помощью скрипта.