Q2VKPT — это первая играбельная игра с полным рейтрейсингом, эффективно симулирующая полностью динамическое освещение в реальном времени с помощью тех же современных технологий, которые используются в киноиндустрии (см. Disney's practical guide to path tracing).
Недавний выпуск моделей GPU с функциями трассировки лучей (raytracing) открыл абсолютно новые возможности для будущего игровой графики, однако правильное использование рейтрейсинга — нетривиальная задача. В то время, как некоторые разработчики игр начали исследовать открывающиеся возможности в рендеринге теней и отражений, Q2VKPT стал первым проектом, реализовавшим эффективное общее решение для всех видов переноса света: прямого, рассеянного и отражённого освещения (см. раздел «Медиа»). В киноиндустрии такая унификация привела к значительному улучшению гибкости и продуктивности. Существует вероятность, что подобное развитие технологий в играх обещает схожее улучшение визуальной точности и реализма графики в течение ближайших нескольких лет. Этот проект должен служить подтверждением концепции для области исследований компьютерной графики и игровой индустрии; к тому же он позволяет фанатам игр взглянуть на потенциальное будущее игровой графики. Кроме использования аппаратно ускоряемого рейтрейсинга, Q2VKPT в основном обеспечивает свою эффективность благодаря технике адаптивной фильтрации изображения, которая интеллектуальным образом отслеживает изменения в освещённости сцены, чтобы повторно использовать как можно больше информации из предыдущих вычислений.
О проекте
Проект выпущен как open source на GitHub. Он интегрирует наш трассировщик лучей Vulkan в клиент Q2PRO. Проект возник из-за необходимости в исследованиях компьютерной графики быстро работающего тестового контента. Он мотивирован первыми интригующими результатами рендерера трассировки пути, написанного в 2016 году.
История
VKPT и Q2VKPT были созданы как хобби-проект Кристофом Шидом (Christoph Schied) для проверки результатов исследований компьютерной графики в настоящей игре. В данный момент проект включает в себя 12 тысяч строк кода и полностью заменяет оригинальный графический код Quake II. Изначально его прототип был написан на OpenGL с участием Иоганнеса Ханика (Johannes Hanika) (экспериментальный рейтрейсинг, шейдеры, исправления GL/Vulkan), Аддисом Диттебрандтом (иерархия освещения, визуализация отладки), Тобиасом Цирром (Tobias Zirr) (сэмплирование освещения, руководство хакингом, веб-сайт, информационные тексты) и Флорианом Райболдом (первоначальная иерархия освещения). Дополнительную помощь оказывали Стефан Бергманн, Эмануэль Шраде, Алиса Юнг и Кристоф Петерс (немного шума).
Скачиваемые материалы
- Репозиторий Github
- Двоичный файл Windows на Github
- Quake 2 Demo (для игры в q2vkpt нужны файлы .pak из демо или полной версии игры)
Видео
Неудачные кадры в разработке: видео с глитчами 1, видео с глитчами 2.
Скриншоты
Советуем посмотреть видео или самим сыграть в игру, потому что полностью динамическое освещение гораздо лучше ощущается в движении.
Вывод трассировщика пути (слева) и применённый фильтр снижения шума (справа)
Технология
Q2VKPT реализован на Vulkan API, чтобы иметь возможность использования новых аппаратных функций рейтрейсинга, появившихся в прошлом году. Благодаря им игра может приблизиться к 60 FPS (2560x1440, RTX2080Ti) при полном рейтрейсинге и динамическом затенении с реалистичными моделями глобального освещения, вычисляемыми в реальном времени. Использование трассировки пути для полностью динамического освещения позволяет сильно повысить детализацию затенения игровых сцен, естественным образом создавая сложное взаимодействие резких и плавных теней, блестящие материалы и перспективно корректные отражения. Более того, свет может естественным образом распространяться повсюду, связывая сцены так, как это происходит в реальном мире. Традиционные решения с предварительно вычисленным освещением или грубыми растровыми аппроксимациями реального времени никогда не смогут достичь такой детализации при сравнимом разрешении, потому что весь объём информации об освещении превзойдёт любые пределы памяти.
Технические подробности
В Q2VKPT используется множество техник, позволяющих адаптировать к играм вычислительно затратные методы, которые раньше применялись только в киноиндустрии. Их ядром является адаптивный временной фильтр, который интеллектуальным образом повторно использует результаты вычислений предыдущих кадров (это предыдущий исследовательский проект Кристофа). Этот фильтр используется поверх уже широко распространённого временного сглаживания (temporal anti-aliasing) и расширяет процесс отслеживания временнЫх изменений из простого пространства изображения в высокоразмерное пространство путей распространения света. Отслеживание изменения путей необходимо, потому что трассировка пути — это рандомизированный алгоритм, что является его и сильной, и слабой сторонами: он может в обобщённом виде обрабатывать все виды распространения света, но чтобы результаты стали надёжными, может потребоваться долгое время, слишком долгое для одного кадра в игре реального времени. Простое решение в пространстве изображения (например temporal anti-aliasing) не может справиться с таким уровнем неопределённости.
Поверх временной фильтрации мы исследовали несколько техник нахождения источников освещения, влияющих на каждую поверхность в игре. Подбор правильных источников освещения критически важен для качества картинки, потому что при неверном выборе мы получим очень ненадёжные выходные данные трассировщика пути, что заставит временной фильтр удалить все красивые детали, которые должен был создать трассировщик пути. В первоначальном прототипе использовалась полная иерархия источников освещения, распространённая в киноиндустрии: разделяя источники освещения по иерархии, мы можем одновременно вычислить влияние нескольких источников, что позволяет быстро исключить из расчёта далёкие и слабые источники, а также источники, стоящие не в том направлении. Однако оказалось, что такие вычисления сложно сделать точными, а вычислительные затраты на обход иерархии сложно контролировать. Так как в оригинальном Quake II использовались множества потенциально видимых пространств (Potentially-Visible-Set) для отсечения невидимых частей сцены, мы решили обойтись извлечением из этих множеств списков потенциально видимых источников для каждой части сцены. В текущей версии мы реализовали частично точное вычисление влияния каждого источника в списке, случайным образом выбирая соответствующее подмножество этих списков в каждом кадре. Поэтому рендерер быстро находит все источники освещения, и мы можем выполнять все вычисления влияния освещения за управляемые, постоянные промежутки времени.
Вопросы и ответы
Почему у меня игра «вылетает»?
Мы занимаемся этим проектом в свободное время, поэтому нам не хватает сил на тщательный контроль качества. Пожалуйста, отправьте отчёт об ошибке в issue tracker нашего репозитория GitHub!
Почему нет частиц? Мне нужны мухи и искры из рейлгана!
К сожалению, нам не хватило времени на добавление в рейлган источников освещения. Что касается других частиц, то принятое нами решение выполнять рейтрейсинг всего слегка усложнило процесс рендеринга частиц. Если мы найдём время, то в будущем это исправим!
В наше время игры и так выглядят реалистичными! Зачем использовать трассировку пути?
Современные игры сильно расширили возможности традиционной, основанной на растеризации графики. Однако за эти усовершенствования приходится платить свою цену: движки рендеринга современных игр превратились в чрезвычайно запутанные наборы узконаправленных техник. Чтобы добиться приемлемой картинки без артефактов, освещение, тени и отражения необходимо по отдельности вычислять во многих разрешениях и масштабах. Трассировка пути и другие монте-карловские техники рендеринга позволяют найти выход из этой постоянно усложняющейся системы. На самом деле, они уже решили эту проблему в киноиндустрии. Наш прототип — это первый ответ на вопрос, как достичь этого в индустрии видеоигр.
Quake II — это древняя игра! Если бы у этих технологий было какое-то будущее, то сегодня он бы работал с частотой 6000 FPS!
Да, Quake II — это достаточно старая игра с довольно низкой сложностью геометрии, но основным ограничивающим фактором для трассировки пути не является рейтрейсинг или сложность геометрии. На самом деле текущий прототип может трассировать гораздо больше лучей без заметного снижения частоты кадров. Вычислительные затраты использованных в прототипе Q2VKPT техник в основном зависят от объёма вычислений (непрямого) рассеяния света и количества источников освещения. В Quake II изначально было много источников освещения, и в этом отношении он по-прежнему является достаточно современной игрой. Кроме того, количество событий рассеяния света не зависит от сложности сцены. Поэтому можно предположить, что использованные нами техники хорошо подойдут и для более современных игр.
Почему Quake II?
Потому что исходники Quake II выложены в открытый доступ, а сама игра имеет долгую историю моддинга. Это превосходная «песочница» для проверки научных исследований в реальном мире. В частности, игра обладает активным и состязательным геймплеем, что задаёт высокие требования к производительности и надёжности реализуемых техник рендеринга. И, наконец, Quake II в каком-то смысле до сих пор остаётся достаточно современной игрой, потому что он изначально был выпущен со сложным и художественным дизайном освещения.
Как можно использовать Q2VKPT в качестве бенчмарка?
Откройте консоль, нажав клавишу "~". В демо версии Quake 2 можно использовать команду «timedemo 1; demo q2demo1», в полной версии — команду «timedemo 1; demo demo1». Встроенный профилировщик запускается командой «vkpt_profiler 1». Он сообщает подробности о таймингах GPU для отдельных этапов рендеринга.
Чем трассировка пути отличается от трассировки лучей?
Трассировка пути — это элегантный алгоритм, способный симулировать множество сложных способов, которыми распространяется и рассеивается свет в виртуальных сценах. Его симуляция освещения на основе физики обеспечивает высококачественный рендеринг. Трассировка пути использует трассировку лучей для определения видимости между событиями рассеяния. Однако трассировка лучей — это просто примитивная операция, которую можно использовать для множества целей. Поэтому сама по себе трассировка лучей не способна создавать реалистичные изображения. Для этого можно использовать алгоритмы распространения света наподобие трассировки пути. Однако несмотря на то, что она элегантна и очень мощна, наивная трассировка пути очень затратна и для создания стабильных изображений требует много времени. В нашем проекте используется интеллектуальный адаптивный фильтр, который повторно использует максимально возможный объём информации в нескольких кадрах и пикселях, чтобы создавать надёжные и стабильные изображения.
Трассировка пути и трассировка лучей — будущее игровой графики?
Недавнее появление GPU с функциями трассировки лучей открыло совершенно новые возможности для будущего игровой графики, однако для правильного использования трассировки лучей требуется нетривиальный подход. Цель нашего проекта — выяснить, чего же не хватает для создания прямого пути в будущее графики с трассировкой лучей. Хотя некоторые проблемы уже решены в научных исследованиях, многие реальные проблемы остаются незаметными, пока не приступишь к реализации полного рендерера игры. В дальнейшем мы планируем изучить некоторые такие проблемы, например, более качественное сэмплирование освещение, улучшенная фильтрация и более целостная программная структура рендерера. Чтобы эти изменения стали широкомасштабными, необходимы хорошие решения новых, непривычных задач рендереров на основе трассировки лучей и пути.
Сможет ли трассировка пути наконец решить все проблемы графики?
Трассировка пути и схожие с ней методы элегантно решают множество сложных задач игровой графики. Однако их вероятностная природа добавляет целое множество новых задач, решение которых необходимо для создания чётких (бесшумных) изображений высокого качества. Метод фильтрации в прототипе Q2VKPT — это первый шаг к надёжным унифицированным методам, позволяющим реализовать в рендеринге полностью унифицированный подход грубого перебора с помощью трассировки пути. В ближайшие месяцы и годы мы ожидаем и надеемся увидеть другие исследования в этом направлении!
В Q2VKPT используются карты освещения из оригинала игры?
В оригинальном движке Quake 2 используются предварительно вычисленные карты освещения, содержащие мягкие тени и диффузное непрямое освещение. Q2VKPT полностью заменяет статическое освещение полностью динамической симуляцией, унифицирующей и статические, и динамические источники освещения.
Сколько лучей Q2VKPT испускает на пиксель?
Количество испускаемых лучей зависит от первой видимой поверхности. На непрозрачных поверхностях Q2VKPT использует для каждого пикселя по одному лучу для нахождения прямой и непрямой видимой поверхности. Кроме того, для обеих поверхностей Q2VKPT испускает по одному лучу к случайно выбранным источникам освещения. Поэтому Q2VKPT испускает для каждого пикселя не менее 4 лучей.
В Q2VKPT используется растеризация?
Традиционно для нахождения видимых из камеры поверхностей в играх используется растеризатор. В Q2VKPT визуализация полностью выполняется трассировкой лучей, поэтому растеризатор не используется (за исключением двухмерных элементов пользовательского интерфейса).
Комментарии (38)
CoolCmd
22.01.2019 12:18что-то мне не понравилась вода. выглядит как «жидкое зеркало» или ртуть.
dredd_krd
22.01.2019 13:11При взгляде из воды виден или какой-то артефакт, или достаточно чёткое отражение оружия от водной глади, внутрь.
BaLaMuTt
22.01.2019 13:49Простейшая шейдерная вода так уже больше 10 лет выглядит. Сравните с водой в Half Life 2 например.
ivanrt
23.01.2019 03:22+1В данном случае вода это поверхность с полным отражением лучей. Честным. Такого раньше не встречалась, максимум environment map было или screen space reflections. BF5 по лучше выглядит, но там нет global elimination. Попробуйте найти в Half Life 2 отражения в воде динамических объектов, типа вертолётов, игрока и тп.
creker
23.01.2019 12:27А как же planar reflections и кубемапы? Отражение динамических объектов в воде это давно пройденный этап. В том числе в упомянутом half life 2 (там вроде как planar reflections), где, по крайней мере в orange box версии, отражения содержали все динамические объекты в кадре. Игрока конечно не видно было, но это типично для шутеров и вряд ли технически сложно реализовать. Сейчас подобные отражения дороговато с учетом всего остального и повсеместного отложенного рендеринга, поэтому, видимо, проще screen space отражения приделать.
В BF5 global illumination есть. Оно конечно не RTX считается и не в реальном времени вся сцена пересчитывается, но сам вклад пересчитывается все время и динамические объекты с этим всем взаимодействуют нормально. Собственно, подобным этим техниками уже много лет. Хаки, но работает отлично.oracle_and_delphi
23.01.2019 14:22Отражение динамических объектов в воде это давно пройденный этап
Для рэйтрэйса пройденный?creker
23.01.2019 15:14Я про растеризацию. Для рейтрейса само собой, это базовая вообще вещь. Единственное конечно в RTX для этого надо специально пересчитывать оптимизирующие структуры, чтобы туда эти объекты попадали, но тоже базовая вещь из туториалов.
Space__Elf
23.01.2019 17:16Вроде, базовое для рейтрейса медленно считаемого на процессоре.
А для рейтрейса быстро считаемого на видюхе, как?creker
23.01.2019 17:52А какая проблема? С видюхами то проблемы была не реализовать вообще, а сделать это эффективно. В RTX вот придумали хитрые оптимизирующие структуры, в которые помещается геометрия + пачка специальных шейдеров. Рейтрейсинг и реймарчинг так-то давно используется в куче алгоритмов растеризации в играх. Просто лучей мало, переотражений нет и прочие оптимизации.
Базовое я имел ввиду то, что отражения это естественный побочный эффект самого простейшего рейтрейсинга. Простейшие тени не менее элементарно реализуются. Более хитрые алгоритмы уже нужны для global illumination. Тут-то техники вроде path tracing и используются.
Space__Elf
23.01.2019 16:15Уже в первом ролике — разбиваемое стекло выглядит матовым, а должно быть прозрачным.
Oliksolik
22.01.2019 13:17Жду когда ко 2ой халфе такую штуку прикрутят.Будет повод перепройти.
tommyangelo27
23.01.2019 11:30А я и без того перепрохожу :) Недавно начал, только теперь со зрителем — четырехлетней дочкой. Она называет её "игра, где мы ищем тётю", собственно увлеклась когда увидела Аликс.
Panzerschrek
22.01.2019 13:19Весь секрет успеха — хорошее замыливание через шумодав. На низкодетальной геометрии Quake II это работает, но есть подозрение, что на чём-то детальном этот шумодав начнёт замазывать детали.
knstqq
22.01.2019 14:11Этот шумодав работает только на слое освещения, поэтому есть вероятность, что он будет работать почти-хорошо
creker
23.01.2019 03:16+1Только там, где и так низкочастотная информация — рассеянный свет тот же. А вот границы свет-тень выглядят плохо даже здесь. Нет четких границ в месте контакта, все размыто. С растеризацией тени нынче лучше получаются.
Rastler
23.01.2019 21:11Светотеневой рисунок на мелких деталях будет скорее очень не чёткий. А вообще круто, я думал не доживу до RT в реальном времени. Для более-менее детальной картинки при подходе «в лоб» нужна производительность на порядок выше, как мне кажется.
VBKesha
22.01.2019 15:05Интересно бы на первый Unreal взглянуть в такой версии.
NetBUG
23.01.2019 00:44А для него есть не закрытые лицензией коды?
VBKesha
23.01.2019 00:52+1Скорей всего нет, UE4 они открыли а вот старые версии нет. Знаю что только 100% были открытые рендеры.
Newbilius
23.01.2019 07:23Сторонние рендеры для первых Unreal точно есть, например:
http://kentie.net/article/d3d10drv/
RolexStrider
22.01.2019 21:41+3Тени, особенно в динамике — чертовски хороши. На них всё ИМХО и выезжает.
Psychosynthesis
22.01.2019 22:47Прикольно. А кто-нить запускал вообще? Чё там со скоростью?
Она использует файлы .pak из оригинала. Насколько я знаю, многие моды реализуются через замену этих самых pak-файлов. Было бы прикольно попробовать какой-нить hi-res мод к этому движку прикрутить.mastan
23.01.2019 15:35Насчёт скорости, у меня в среднем 30-40 fps на RTX 2070 при 2560x1440. Под виндой(если это имеет значение).
ivanrt
23.01.2019 03:15Забавно, что есть тень от персонажа — но он это только "рука с оружием".
vesper-bot
23.01.2019 12:15Интересно, кстати, в мультиплеере с этим же рендерером будут нормальные тени от персонажей, включая самого себя, или нет? :) Если да, то просто в сингле модель не добавляют, потому как изначально теней не было, а сами треугольники в кадр не попадают по z-отсечению, и стоит её добавить на сцену, как всё появится.
barnes
23.01.2019 13:54+1моделька игрока и его тень на самом деле там есть, просто когда парсятся сущности для текушего кадра, модельку игрока пропускают. Там по сути надо одно continue в клиент коде убрать и все. Таким же по сути образом делается камера от третьего лица.
u010602
24.01.2019 03:33Наверное я старею. Но в чем вообще улучшение? Ни какого вау эффекта я не ощутил. Кризис 1 на ультрах выглядит интереснее. А тут «майнкрафт с шейдерами» какой-то. Это технология для программистов или для пользователей? Сейчас А тайтлов выходят десятки в год, на парочке движков, нужно еще больше? Я просто понять не могу какая мотивацию у пользователей переплачивать за эту технологию на данном этапе. Мне это напоминает эпоху 2-3-4 жифорсов. Когда шейдеры только появлялись, и начали выходить игры, требующие эту технологию. В итоге все игры тормозили на всех не-топовых картах того времени, и люди придумали утилиты, обманывавшие игры. Игра думала что шейдеры есть и что они выполняются, а на самом деле их не было. Одна из таких игр Сайлент Хил, и как я не пытался увидеть чего-же не хватает без шейдеров — не смог. Потребовалось 4 поколения видеокарт, что-бы технология созрела и вышла на потребительский уровень. А все карты до 6ххх поколения жирафов так ни когда и не раскрыли свой потенциал по шейдерам.
barnes
24.01.2019 15:25Это просто технодемка, демонстрация, а не готовый мод. Вау у меня только их шумодав вызвал и тени. ГИ неплохое. Но без переосвещения и карт нормалей это не более чем еще одно тенебрае.
dredd_krd
Вот бы такую графику в те времена, когда я целыми сутками гонял по диалапу на серверах, когда это ещё не было мейнстримом :)
CoolCmd
как всё изменилось. в современных сетевых играх настройки пытаются понизить, чтобы улучшить видимость и заставить работать крютой монитор 240 Гц. :)
Goodkat
PKav
Тогда и обычная графика этой игры считалась очень крутой, красивой и реалистично.
Или вы о свободном времени, которого сейчас не хватает на игры?
dredd_krd
Да, графика на тот момент была крутейшей. Да и мы не знали лучшего, поэтому подобных мыслей тогда не было и быть не могло.
Я в целом о том, что количество кайфа от игры было бы в разы больше :) А что времени не хватает — так это нормально, жизнь-то поменялась уже давно. Но тоже было бы круто, да.