что такое рендер в майнкрафте
Анализ рендеринга кадра бета-версии 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
Преобразуем миры Minecraft в трёхмерные фотореалистичные сцены с помощью нейросетей
Мы представляем GANcraft — работающий без участия человека фреймворк нейронного рендеринга для генерации фотореалистичных изображений больших миров из 3D-блоков, например, таких, которые созданы в Minecraft. Наша система получает на входе мир из семантических блоков, в котором каждому блоку назначена метка, например, «земля», «дерево», «трава», «песок» или «вода».
Мы задаём мир как непрерывную объёмную функцию и обучаем нашу модель рендерингу фотореалистичных изображений с сохранением внешнего вида с произвольных точек обзора без наличия реальных изображений блочного мира.
Кроме позиции камеры, GANcraft позволяет пользователю задавать семантику и стиль сцены.
Выходные данные нашей модели. В левом нижнем углу показаны блочные миры, подаваемые на вход.
Видео с кратким описанием
Обзор технологии
Какую конкретно задачу пытается решить GANcraft?
GANcraft нацелен на решение задачи преобразования одного мира в другой мир. Имея семантически размеченный мир, например, такой, который используется в популярной игре Minecraft, GANcraft способен преобразовать его в новый мир, имеющий ту же структуру, но с добавленным фотореализмом. После этого новый мир можно рендерить с произвольных точек обзора, получая фотореалистичные видео и изображения, сохраняющие внешний вид при смене точек обзора. GANcraft упрощает процесc 3D-моделирования сложных ландшафтных сцен, на создание которых потребовались бы многие годы практики.
По сути, GANcraft превращает любого игрока Minecraft в 3D-художника!
Вопрос: «Почему просто не использовать преобразование im2im?«
Так как исходных истинных фотореалистичных рендеров для созданного пользователем блочного мира не существует, нам приходится обучать модели при помощи непрямого контроля.
Хорошими кандидатами являются некоторые уже существующие решения. Например, можно использовать методики преобразования «изображение-изображение» (image-to-image, im2im), в частности, MUNIT and SPADE, изначально обучавшуюся только на 2D-данных, чтобы конвертировать покадровые маски сегментации, спроецированные из блочного мира, в реалистично выглядящие изображения.
Также можно использовать wc-vid2vid — методику, учитывающую 3D-объём, для генерации изображений с постоянным внешним видом при помощи 2D-ретуширования и 3D-искажений, применяя в качестве 3D-геометрии поверхности вокселей.
Эти модели нужно обучать на преобразовании реальных карт сегментации в реальные изображения, а затем применить в Minecraft.
В качестве ещё одной альтернативы можно обучить NeRF-W, изучающую поле 3D-излучения от нефотометрической, но позиционированной и 3D-неизменной коллекции изображений. Её можно обучить по прогнозируемым изображениям из методики im2im (псевдоистинных данных, о которых будет рассказано в следующем разделе), то есть данных, которые максимально близки к требованиям.
Слева направо: MUNIT, SPADE, wc-vid2vid, NSVF-W (NSVF + NeRF-W), GANcraft(наша методика)
Сравнивая результаты различных методик, мы сразу же можем заменить некоторые проблемы:
Несовпадение распределения и псевдоистинные данные
Допустим, у нас есть подходящая модель нейронного рендеринга с воксельной подготовкой, способная создавать фотореалистичный мир. Нам всё равно нужен какой-то способ её обучения без истинных изображений с указанным расположением камеры. Adversarial training достигло определённого успеха на задачах нейронного рендеринга малого размера без условий, когда изображения с указанием их позиции недоступны. Однако для GANcraft проблема ещё более сложна. В отличие от реального мира, блочные миры из Minecraft обычно имеют гораздо более разнообразное распределение меток. Например, некоторые сцены могут быть полностью покрыты снегом, песком или водой. Существуют также сцены, в которых на небольшой площади пересекается множество биомов. Кроме того, невозможно сопоставить сэмплируемое распределение камер с распределением на фотографиями из Интернета при случайном сэмплировании точек обзора из модели нейронного рендеринга.
Примеры изображений, сгенерированных без псевдоистинных данных:
Примеры изображений, сгенерированных с псевдоистинными данными:
Как видно на первых примерах, adversarial training с помощью фотографий из Интернета из-за сложности задачи приводит к нереалистичным результатам.
Создание и использование псевдоистинных данных для обучения стало одним из самых важных вкладов нашей работы и значительно улучшило результаты (вторые примеры).
Генерирование псевдоистинных данных
Псевдоистинные данные — это фотореалистичные изображения, сгенерированные из масок сегментации с помощью предварительно обученной модели SPADE. Так как маски сегментации сэмплируются из блочного мира, псевдоистинные данные имеют те же метки и позиции камер, что и изображения, сгенерированные для тех же точек обзора. Это не только снижает рассогласование распределения меток и камер, но и позволяет нам использовать более сильные потери, например, функции перцептуальных потерь и L2, для более быстрого и стабильного обучения.
Гибридный нейронный рендеринг, ограниченный вокселами
В GANcraft мы задаём фотореалистичную сцену сочетанием объёмного 3D-рендерера и рендерера изображений 2D-пространства. Мы задаём нейронное поле свечения, ограниченное вокселями: имея данные блочного мира, мы назначаем каждому углу блоков вектор характеристик, и используем трилинейную интерполяцию для задания кода расположения в произвольных местах внутри вокселя. Благодаря этому можно задать поле излучения при помощи MLP, получающего на входе код локации, семантическую метку и код общего стиля, а на выходе создающего точечный объект (схожий с данными излучения) и плотность его объёма. Зная параметры камеры, мы рендерим поле излучения для получения карты 2D-характеристик, которая при помощи CNN преобразуется в изображение.
Полная архитектура GANcraft
Такая двухэтапная архитектура значительно улучшает качество изображений, сокращая при этом объёмы вычислений и занимаемой памяти, потому что поле излучения можно смоделировать более простым MLP. Предложенная нами архитектура способна обрабатывать очень большие миры. В своих экспериментах мы использовали воксельные сетки размером 512×512×256, что эквивалентно 0,26 квадратным километрам.
Нейронный купол неба
Старые методики нейронного рендеринга на основе вокселей не могли моделировать бесконечно удалённое от сцены небо. Однако небо является неотъемлемым ингредиентом фотореалистичности. Для добавления неба мы используем в GANcraft дополнительный MLP. MLP преобразует направление луча камеры в вектор характеристик, имеющий тот же размер, что и точечные объекты из поля излучения. Этот вектор характеристик используется в качестве полностью непрозрачного окончательного сэмпла луча, смешивающего характеристики пикселя в соответствии с оставшейся пропускаемостью луча.
Генерация изображений с разнообразным внешним видом
Процесс генерации GANcraft является условным и зависит от задающего стиль изображения. Во время обучения мы используем в качестве задающего стиль изображения псевдоистинные данные, что позволяет объяснить несоответствие между сгенерированным изображением и псевдоистинными данными потерями при реконструкции. Во время вычислений мы можем управлять стилем выходных данных, передавая GANcraft различные изображения, задающие стиль. В примере ниже мы линейно интерполируем стиль между шестью различными изображениями стиля.
Интерполяция между несколькими стилями
Может задебажить игру в PerfStudio/прочих? Включить вайрфрейм и всех делов 🙂
А вообще в майнкрафте не такое уж и большое количество видимых кубиков, инстансинг зарулит.
Програмно каждый кубик может быть или открытым(хотябы одна сторона в воздухе) или закрытым. Тоесть обрабатывается некая 3д плоскость, а не все кубики. А тут уже можно заюзать индор техники.
Недавно пробовал рендерить большую территорию, состоящую из кубиков:
40 FPS на GeForce 310M
Здесь порядка 5 миллионов кубиков, которые разделены на чанки (отдельные меши из 64x64x32 32x32x64 кубов). При обновлении чанка генерируется меш, который состоит только из видимых сторон кубов.
Che@ter
> А вообще в майнкрафте не такое уж и большое количество видимых кубиков,
> инстансинг зарулит.
А чего там инстансить то? Куб же очень простая фигура, более того в подавляющем большинстве видны только одна-две-три грани. Разве есть смысл «инстансить» грани?
Хорошо, допустим видюхи умеют сотни миллионы маленьких трисов в секунды, в это верится.
А вот как быть с филлрейтом? Довольно легко напридумывать ситуаций когда филлрейт забьёт растеризатору печенку вконец.
Например поле из множества плоских слоёв с пустыми слоями между ними и вот мы в центре композиции смотрим наверх там или вниз.
Очевидно полезно рендерить от ближних чанков к дальним включив z-buffer, но как то поэффективней можно?
=A=L=X=
> но как то поэффективней можно?
Конечно, просто не нужно рисовать то что не видно,
раньше так во всех играх делали, а теперь разленились.
Hybernaculum
> Конечно, просто не нужно рисовать то что не видно,
> раньше так во всех играх делали, а теперь разленились.
Привет, это Джакобо. Делать скрины в Майнкрафте сложно. Не в том плане, что нужно нажать на F2 и залезть в директорию игры, а в том, что нужно выставить прорисовку на как можно более дальнюю, если объекты на большом расстоянии и не вползают в 10,5 чанка, а это на слабых компах трудно, если и невозможно вовсе. Также, делая скрин, вы все равно не сможете показать всю карту разом, не только из-за размеров, но из-за того, что маленькие объекты не видны за большими. Продолжать можно, но думаю, вы поняли.
В спасение приходит прога Chunky.
Теперь, когда прога у вас под рукой, начинаю свой рассказ. Начнем с самого начала. При запуске у вас открывается Chunky Launcher. Здесь ничего не надо делать, можете разве что объем памяти увеличить. Жмете Launch. Если вы правильно нажали на кнопку Launch (Это делается ЛКМ кстати)))0), то запускается сама Chunky. И вы попадаете в прекрасный мир с множеством возможностей, которых у вас не было ранее.
При запуске, как правило, автоматически открывается та карта, на которой вы были в последний раз.
Рассмотрим самое главное и то, в чем я хотя бы немного разбираюсь. По порядку.