Технология: трассировка лучей, рейтресинг, Ray Tracing
Компании, внедряющие технологию: NVIDIA, AMD, Sony, Microsoft, Intel и другие
Устройства с аппаратной поддержкой ретрейсинга: NVIDIA GeForce RTX 2060, NVIDIA GeForce RTX 2060 Super, NVIDIA GeForce RTX 2070, NVIDIA GeForce RTX 2070 Super, NVIDIA GeForce RTX 2080, NVIDIA GeForce RTX 2080 Super, NVIDIA GeForce RTX 2080 T, NVIDIA Titan RTX, Xbox Scarlet, PlayStation 5 и другие
Игры с трассировкой лучей: Batlefield 5, Shadow of the Tomb Raider, Metro Exodus, Control, Quake II RTX, World of Tanks, Atomic Heart, MechWarrior 5: Mercenaries, Call of Duty: Modern Warfare, Minecraft и другие
Мульфильмы с трассировкой лучей: Тачки, Университет монстров, Тайна Коко и другие
Мы привыкли, что из года в год графика в видеоиграх улучшается настолько медленно, что прогресс почти невозможно заметить. Batman Arkham Knight вышел 4 года назад, но если сказать, что эта игра выходит этой осенью, то никто и глазом не моргнет. Революции случаются, но редко, а их плоды доходят до массового потребителя годами.
Одна из первых таких революций - аппаратное ускорение 3D-графики. Сначала в аркадных автоматах, затем в игровых консолях Sony PlayStation, Sega Saturn и Nintendo 64, а в конце 90-ых на ПК начали появляться первые 3D-ускорители. Это были даже не видеокарты в современном понимании, они делали только то, что заявлено на коробке - ускоряли обработку 3D. Обладателям ранних карт вроде PowerVR и 3dfx Voodoo нужно было иметь отдельное устройство, чтобы не терять аппаратное ускорение в Windows и обычных программах.
Второй революцией было появление программируемых шейдеров. Это программы, исполняемые на видеокарте, изменяющие изображение. Они могут добавлять свет и тени, размытие в движении, создавать прозрачность, новые геометрические детали (тесселляция), отражения и многое другое. Первой видеокартой с программируемыми шейдерами была NVIDIA GeForce 3, а первой игровой консолью - оригинальный Xbox, в котором использовали модифицированную версию чипа NV2A.
Тут, наверное, стоит рассказать про все инновации, которые последовали за последние 18 лет, но… Революций больше не было. Появились новые типы шейдеров, чипы видеокарт становились больше и быстрее, появлялись более совершенные методы рендера и общая база знаний о компьютерной графике непрерывно росла и развивалась. Но революций больше не было.
Истоки
На самом деле, абсолютно все люди, интересующиеся компьютерной графикой всегда знали, куда течет вода. Трассировка лучей - это не какая-то новая, уникальная, доселе невиданная идея. Если верить Википедии, то саму концепцию придумали в начале XVI века. Испанцы и португальцы воодушевленно истребляли коренное население Америки, Иван Грозный ползал по люльке, а Альбрехт Дюрер путешествовал по северной Италии, изучал линейную перспективу и придумывал основы современной компьютерной графики. Как он умудрился не столкнуться с Эцио Аудиторе только Ubisoft известно.
Но настоящая движуха пошла только 450 лет спустя, в 1982 году. Скотт Рот придумал концепцию ray casting, «бросание лучей» и эта концепция очень простая. Ваш экран - это камера. Каждый пиксель экрана «бросает луч» (десятки строк кода) в трехмерное пространство, скажем, в сцену игры. Если луч с чем-то столкнулся, то мы получаем данные, что там что-то есть и на каком расстоянии. Крибле-крабле-бумс, получили трехмерную сцену на плоскости монитора!
А теперь главный сюрприз - эту технику использовали в малоизвестной инди-игре Wolfenstein 3D в 1992 году. И практически больше нигде, потому что так и процессор можно расплавить вместе с радиатором. Что еще хуже, метод бросания лучей не подразумевает тени, отражения, прозрачность, только положение объекта и его цвет.
Вместо затратного бросания лучей стали использовать растеризацию - простейшую проекцию трехмерной сцены в экранное пространство (монитор). Это настолько простой метод, что блок растеризации в современных видеокартах исполняет его практически моментально. Сложность в другом - если просто растеризовать трехмерную сцену, то в ней не будет ничего. Ни информации о свете, тенях, отражениях, прозрачности, яркости, даже о том, на каком расстоянии от камеры (экрана) находятся объекты и какие их части мы не должны видеть.
Помните вышеупомянутые 18 лет технического прогресса? Все это время (и даже больше) все силы инженеров, программистов и дизайнеров были брошены на то, чтобы видеоигры выглядели как кино и фотографии, а не цветная размазня. Но чем ближе компьютерная графика приближается к реальности, тем затратнее становятся эффекты, которые ее имитируют. Доходит до того, что имитация становится почти такой же сложной как симуляция.
Уже облучены
Вопреки распространенному мнению даже в кино трассировка лучей для рендеринга эффектов и сцен появилась не так давно. Не в 80-ых, даже не в 90-ых, а в 2006 году в мультфильме «Тачки». Причем не как полная замена растеризации, а только для отражений, теней и затенения фонового освещения (теней там, куда свет просто не доходит).
Первым полностью трассированным полнометражным мультфильмом стал «Университет монстров» в 2013 году. И даже это не решило всех проблем, с которыми сталкиваются инженеры Pixar. В техническом пост-мортем они пишут, что в будущем собираются переходить на трассировку пути - более реалистичную и гораздо более требовательную к ресурсам версию трассировки лучей. Звучит страшно, особенно если знать, что первые тестовые кадры мультфильма «Тайна Коко» должны были рендериться 1000 часов на кадр (если тоже захотите повесить серверную ферму Диснея, то секрет простой - сцена с 8 млн источниками света). Только грамотные оптимизации спасли Pixar от разорения от счета за электричество.
Надеюсь, вы уже прочувствовали безумные вычислительные мощности, которые нужны для традиционной трассировки лучей. А теперь бонусный факт - в том или ином виде, она используется в играх уже десятки лет.
Вышеупомянутый Wolfenstein 3D был только началом. Да, для полноценного рендера всей сцены нужно очень много лучей в секунду, но с более простыми задачами справляются даже древние мобильные процессоры в PlayStation 4 и Xbox One. В Killzone: Shadow Fall объемным звук создавался при помощи трассировки - это симуляция, и она не обязательно должна работать со светом. Во многих играх искусственный интеллект бросает лучи, чтобы понять видит противник героя или нет.
В последних играх DICE вроде Battlefield 1 и Star Wars: Battlefront II движок бросает лучи в экранном пространстве, чтобы правильно совмещать отражения с настоящими объектами. В Star Wars: Republic Commando искусственный интеллект джеоносианцев проверял лучами, куда он может прыгнуть. Считать лучами дугу на Intel Pentium III в оригинальном Xbox было слишком затратно, поэтому кидали луч до верхней точки прыжка, а потом еще один в место приземления.
Но самое главное - оффлайновый рендер. Уровни игры экспортируют в 3D-рендерер, который работает с трассировкой лучей или пути, и не торопясь просчитывают свет и тени, а потом экспортируют и «запекают» их в игру. Так игры вроде Mirror’s Edge умудряются выглядеть очень красиво и современно даже 10 лет спустя. Все, что надо - время на оффлайновый рендер и немного (иногда много) видеопамяти. В некоторых движках та же история с картами отражений, хотя Unreal Engine 4, например, умеет создавать их сам. В любом случае, все это - статичные решения, которые очень плохо реагируют, когда по миру игры бегают игроки и пытаются все там поменять. Тут уж либо красота, либо интерактивность. Или уже нет?
Третья революция
Под конец 2019 года только ленивый не анонсировал поддержку трассировки лучей в своих игровых продуктах. NVIDIA, Crytek, AMD, Microsoft, Sony, Intel - и у всех своя собственная версия.
Растеризация как метод проекции 3D-сцены полезна в первую очередь своей скоростью. Все, что не в кадре - не существует. Все, что не видно - выкидывается. Солипсизм от мира компьютерной графики. Это удобно, но реальный мир работает не так. Что если мы видим отражение того, что у нас за спиной? Что если источник света находится за кадром? Или его перекрывает объект, которого мы не видим? Трассировка лучей может помочь ответить на эти и многие другие вопросы.
В теории, это очень простой метод. Как мы видим мир? Источник света (скажем, солнце) испускает лучи. Они достигают объект, отражаются, преломляются, поляризуются, меняют длину волны, теряют энергию и, наконец, попадают в наши глаза и воспринимаются мозгом. В компьютерной графике пускать все лучи во все стороны не имеет смысла - большая их часть нам не интересна. Поэтому трассировка лучей решает эту задачу наоборот. Каждый пиксель экрана пускает луч, он взаимодействует с трехмерной сценой пока не попадет в источник света, не получит информацию о первоначальной энергии (грубо говоря, яркости). Та-дам! Вы получили реалистичную трехмерную сцену!
Это в теории. На практике, даже такие расчеты занимают слишком долго, поэтому инженерам приходится идти на компромиссы. Самые распространенные - уменьшение разрешения (т.е. количества эмиттеров лучей), уменьшение количества лучей, испускаемых пикселем (приводит к появлению шума, с этим борются алгоритмы шумоподавления) и создание потоков лучей, которые будут иметь примерно одинаковые результаты.
Microsoft DirectX Raytracing
В марте 2018 года на конференции GDC Microsoft анонсировала новый аппаратно-программный интерфейс DirectX Raytracing как надстройку над DirectX 12. Также как и оригинальный DirectX в 1995 году, эта надстройка призвана сделать трассировку лучей в играх стандартизованной. В идеале, любая видеокарта с поддержкой DXR должна работать с любой DXR-игрой. Но проверить правда это или нет мы пока не можем - за это время только NVIDIA выпустила видеокарты с аппаратным ускорением трассировки лучей.
NVIDIA RTX
В августе 2018 года NVIDIA анонсировала видеокарты линейки GeForce RTX. Они поддерживают аппаратное ускорение трассировки лучей при помощи специальных RT-ядер и используют тензорные ядра и машинное обучение для шумоподавления. Последнее - один из важнейших факторов, позволяющих рендерить игры в реальном времени без заметного шума в изображении.
Спустя год поддержка RTX появилась всего в пригоршне игр, но каждая показывает технологию с разной стороны.
Battlefield V
Первая игра с поддержкой RTX Battlefield V использует трассировку лучей для отражений, полностью заменяя SSR (screen space reflections) и частично заменяя кубические карты отражений. Последние все еще используются движком игры как запасной вариант - например, на очень большом расстоянии или когда нужно показать отражение в отражении.
К сожалению, игра не слишком богата на блестящие материалы - металлические кузовы автомобилей, стекла и вода - основные места, где можно их разглядеть. Но большинство локации игры находится в полях, горах и разрушенных зданиях времен Второй Мировой войны, где мало современных глянцевых материалов. Star Wars Battlefront II с блестящими полами, пластиковыми штурмовиками и бескрайними стеклянными коридорами был бы гораздо более убедительной демонстрацией технологии.
Shadow of the Tomb Raider
Под стать названию, в Shadow of the Tomb Raider лучи трассируются ради реалистичный теней. В ПК-версии игры очень красивые тени, поэтому разница не всегда заметна, но когда она есть, она резко прибавляет реализм сцене. Как говорят голливудские художники по спецэффектам, «ничто никогда не освещено само по себе», и RTX старательно маскирует то, что это игра, добавляя ей глубину и весомость.
Control
Control - один из самых любопытных примеров игр с RTX хотя бы потому что предыдущая игра, Quantum Break, от ее разработчика Remedy была на том же движке, но местами невероятно страдала от отсутствия данных о всей 3D-сцене. Например, многие диалоги проходили на фоне стекла или металлической двери лифта. Движок игры использует настоящие физически обоснованные материалы, поэтому он знает, что в стекле или двери должны быть отражения. Но единственный доступный метод - отражения в экранном пространстве. Человек смотрит лицом в камеру, а у него за спиной в его отражении… тоже лицо. Добро пожаловать в страну кошмаров.
В Control SSR подхватывают заранее сохраненные изображения с картой расстояний, которые проецируется в геометрически верные позиции при помощи трассировки конусов (метод быстрый трассировки, который можно делать даже на консольных процессорах). Это очень хороший метод для игры, в которой невероятно много отражающих поверхностей. Но RTX выводит ее на совершенно новый уровень.
В экшене Control есть два эффекта, которые пока не появлялись в других играх - контактные тени и непрямой рассеянный свет. Трассировка для контактных теней призвана создавать тени для маленьких объектов, которые слишком малы для разрешения стандартных карт теней. Если вглядываться, то многие объекты в играх «висят» в воздухе, потому что у них либо нет тени, либо их тень не совсем верно соотносится с объектом.
Непрямой рассеянный свет рассчитывает свет, который отражается от поверхности. Например, луч солнца попадет на красный ковер, то соседние стены осветятся красным светом. В некоторых играх (например, оригинальный Mirror’s Edge) есть подобный эффект, но он создается при помощи заранее просчитанных карт освещения и не будет работать с динамическими объектами - например, если сдвинуть источник света или отражающий объект, плюс он не будет отбрасывать свет на персонажей. В игре Control же можно схватить, унести или разрушить практически любой предмет, поэтому классический подход не сработал бы.
Quake II RTX
В отличие от остальный игр и демок, эта версия Quake II не использует растеризацию в принципе. Абсолютно все объекты и источники света (кроме частиц) проецируются на экран при помощи трассировки пути - более сложного и максимально точного алгоритма трассировки лучей. Текстуры и модели заменены на обновленные, с поддержкой физически обоснованного рендеринга, который нужен для корректного освещения игры.
Что касается эффектов, то эта игра поддерживает все - отражения, отражения на прозрачных объектах, глобальное освещение, большие, рассеянные источники света, тени, преломления.
На днях прошла новость о том, что NVIDIA набирает людей в их студию Lightspeed для создания RTX-ремейков старых игр. Half-Life 1-2 напрашивается, конечно, и Lightspeed уже делала порт Half-Life 2 на NVIDIA Shield. Но у меня есть идея получше: Star Wars: Jedi Knight II - Jedi Outcast!
Intel
Intel занимается поддержкой игр с трассировкой пути дольше всех. В 2004 году они спонсировали проект Quake 3: Ray Traced, в 2006 - Quake 4: Ray Traced, в 2008 - Quake Wars: Ray Traced и в 2010 - Wolfenstein: Ray Traced. В отличие от DirectX Raytracing, эти проекты рассчитывали лучи на многоядерных процессорах, зачастую - на рабочих станциях с двумя, тремя и даже четырьмя многоядерными процессорами. Эти игры были просто демонстрациями технологии и мощности процессоров Intel, играть в них было нельзя.
16 октября 2019 года Wargaming объявил, что в World of Tanks появится трассировка лучей для рендеринга теней от танков. Никакого дополнительного железа для этого не надо - алгоритм, разработанный WG совместно с Intel, должен работать быстро на практически любой машине. Однако, напрямую сравнивать с другими конкурентами эту технологию нельзя - жесткие тени от одного источника света (солнца), это достаточно простая вычислительная задача.
AMD (Microsoft и Sony)
Хотя AMD официально не объявила о своих планах по поддержке аппаратного ускорения трассировки лучей, и Microsoft, и Sony уже подтвердили, что этот функционал будет присутствовать в Xbox Scarlet и PlayStation 5.
Пока можно только спекулировать об имплементации, но, учитывая, что DXR был разработал Microsoft при поддержке и NVIDIA, и AMD, а RTX также работает через аппаратно-программный интерфейс Vulkan, который разрабатывается при активной поддержке AMD, то можно предположить, что в новых видеокартах и SoC (system on chip) компании тоже будут специализированные ядра, ускоряющие трассировку. Так оно или нет не знают даже глубокие инсайдеры, поэтому придется подождать официального анонса или слива информации.
Crytek
В марте 2019 года Crytek показал собственную версию отражений, сделанных при помощи трассировки лучей. Версия CryEngine вызвала много шума, потому что она работает на любом современном железе, без специальных блоков для ускорения трассировки.
По словам разработчиков, CryEngine уже использует трассировку конусов по вокселям, поэтому обновить движок до поддержки трассировки лучей было не очень сложно. В демке используется комбинированный подход - большая часть отражений просчитывается более простым методом трассировки конусами и только полностью зеркальные отражения просчитываются лучами для максимальной точности. Такой метод удобен для статичной сцены - динамичными объектами в ней являются только беспилотник и гильзы на мостовой (они оказались слишком маленькими для вокселей).
Безусловно, это очень интересная демонстрация технологии, но вряд ли она станет популярной. Во-первых, как упоминалось, текущая имплементация работает на современных видеокартах только с условием практически полной статичности сцены.
Будь в демке хотя бы десяток персонажей, она работала бы гораздо медленнее. Во-вторых, это метод работает исключительно в CryEngine, тогда как Microsoft DirectX Raytracing создан не только с учетом множества игровых движков, но и множества игровых платформ - по меньшей мере, Windows 10 и Xbox Scarlett. Ну и наконец, практически никто не делает игры на CryEngine. Unreal Engine 4 и Unity остаются королями готовых решений для создания игр, доля CryEngine на рынке сравнима со статистической погрешностью.
Будущее за лучами?
Хочется верить, что да. Трассировка лучей - далеко не единственный метод создания фотореалистичной компьютерной графики, но, возможно, самый простой с точки зрения разработчика. Это симуляция физическое поведения света. В идеале она «просто работает». Загружаешь модели, расставляешь свет, выбираешь угол обзора и вуаля - виртуальное кино. Как вы уже могли понять, сейчас все не так просто. Переход от растеризованной графики, к которой мы привыкли, займет время. Возможно десятилетия. Может меньше.
Но если посмотреть в прошлое на «Тачки», первый мультфильм, который использовал трассировку лучей, то его список эффектов звучит до боли знакомо. Отражения, тени, затенение фонового освещения в 2048x1080. Сейчас в Control те же самые эффекты работают в 3840x2160 со скоростью 60 кадров в секунду. 16 мс на кадр вместо часов и дней. И когда слышишь бесконечные новости про лут-боксы, систематические уходы игровых издателей от налогов, баны игроков, остается одна надежда - что совсем скоро будущие игры будут безумно красивыми.