Поясняю за рейтрейсинг и Overdrive Mode для Cyberpunk 2077
И чём разница между трассировкой лучей и трассировкой путей.
Уже буквально через сутки выйдет патч для киберпука который добавит новую систему освещения. После показанных кадров у людей возник один вопрос: А где фепесы? На что ответ весьма прямолинеен — освещение.
Начнём чуть издалека, до ~2018 года в играх использовалась только прямая Растеризация для рендера 3D пространства. В давние годы даже такое простое действие как проекция точек фигуры на 2D плоскость экрана казалось очень и очень сложной задачей, но со временем компьютеры смогли осилить и её, а что самое главное начали усложнять и добавлять новые методы для того, что бы быть похожим на второй тип рендера, ранее не виданный для реал тайм графики — Трассировка лучей.
Если в случае растеризации мы должны спроецировать 3D объекты на плоскость экрана, а далее наложить шейдеры для создания эффекта освещения и всех косвенных деталей, то для трассировка лучей нам нужно буквально повторить реальное поведение света (не будем вдаваться в физику с её волнами и другими видами излучения).
* Внимание сейчас начнётся моя визуализация.
Нам необходимо пускать лучи от источников света, далее отражать их от поверхностей и улавливать камерой. Главной проблемой стоит как их кол-во так и кол-во их отражений от поверхностей, которое требует каких то непонятных цифр с большим кол-вом нулей.
И сейчас дамы и господа мы приходим в реальный мир где умные дяди решили пойти по костылям.
Костыль первый
Зачем нам пускать лучи от источника света к камере, если можно пустить луч от камеры к источнику и получить тот же эффект.
Костыль второй, аля трассировка путей
Если первый костыль быль придуман в 70-е года прошло века, то этот уже в 80-е и привнёс одно небольшое изменение.
Теперь лучи также исходят из камеры, но на этот раз не целятся в источники освещения, а отражаются в бесконечном кол-ве в случайные направления до момента попадания в источник.
Звучит это уже менее производительно, а оно так и есть, что мы и видим в трейлере Overdrive Mode для киберпука, но вместе с этим можно понять почему Nvidia называют это революционной технологией.
Пока в играх обычный костыльный рейтрейсинг кажется технологией будущего, то тут нам заявляют о новом глобальном улучшении которое приближает нас к полноценному RT.
Overdrive Mode
Сейчас секунду внимания для понимания работы киберпука.
На данный момент весь рендер графики в игре разбит на множество пунктов, каждый из которых не пересекается со следующим.
Т.е даже в режиме рейтрейсинга, мы сначала растрируем базовый прямой свет, а далее накладываем поверх более точный RT свет и тени. После чего просчитываем отражённое освещение и применяем к итоговой картинке RT ambient occlusion (тени в углах и между поверхностями) и внимание растрированное отражённое освещение в места, куда не попал RT.
Для этого все игровые места запекают в точки пространства, перемещаясь между которыми можно менять текстуру отражений на объектах (про точность можно сразу забыть)
А теперь начинается магия трассировки путей.
Мы забываем о всех прошлых пунктах и просто ставим задачу отрисовать свет в 2 прохода.
Первый просчитывает прямое, а второй отражённое освещение. ВСЁ!
Теперь внимание супер фичи.
- Нам не нужно пытаться повторить тени от мелких объектов, т.к они появятся сами.
- Нам не нужно повторить ambient occlusion от мелких объектов, т.к он тоже появится сам, даже от самых мелких источников освещения
- Теперь небольшая, но интересная штука, любой источник света окажет максимально влияние на всю сцену, а это к примеру позволяет сделать бесплатный muzzle effect.
Пока я писал первую часть, вышел видео-обзор от Digital Foundry в котором они показали очень интересные кадры с которыми будет легче понять суть происходящего.
На скринах ниже мы видим сравнение обычной растеризации, максимального рейтрейсинга и нового его режима.
В первом случае мы наблюдаем проблему с совмещением растеризации и RT.
Свет исходит от туда, от куда идти и не должен был, это так называемая "утечка света".
На втором такой проблемы нет, то что тёмно, остаётся тёмным и это одна из главным фич трассировки путей.
На данном скрине мы видим сравнение максимальной растеризации без рейтрейсинга и overdrive мода.
Тут разница уже прям сильно попадает в глаза. В случае растеризации мы получаем несколько проходов и каждый не знает о соседнем. От сюда отсутствие тени от матраса и прочих объектов, т.к его в тайне от нас освещает свет от солнца, а уже поверх этого игра пытается наложить тени от стен комнаты и в финале добавить AO.
В случае overdrive мода мы получаем весь нужный свет от солнца и других источников освещения в первом проходе, а переотраженный свет во втором который и добавляет все эти красивые мягкие тени, нормальную реализацию которых без RT сделать попросту невозможно.
Вот то, о чём я говорил выше. Теперь все, даже самые мелкие объекты в игре отбрасывают тень, а что более удивительно свет от них переотражается и продолжает освещать территорию вокруг, а далее плавно затихает порождая Ambient occlusion.
Опять сравние в растеризации и тут опять таже проблема. Идёт глобальный свет от солнца, далее от источников и одни пытаются загасить другие, но загасить солнечный просто не получается, потому хоть мы солнца и не видим, но оно видит нас и продолжат освещать все объекты. Ну и на overdrive моде этой проблемы нет, т.к нет костылей её порождающих.
Тут мы явно видим утечку света и то, как эта проблема решается overdrive модом и трассировкой путей в частности. Свет красиво блокируются, а что самое важное создаёт мягкие тени.
Мы опять видим тени от любой геометрии и от любого источника освещения, что добавляет огромное кол-во реализма в сцену, казалось бы таким мелким нововведением.
Теперь по поводу muzzle эффекта, т.е света от дульной вспышки который вызывает мягкие тени от объектов. Напоминаю что этот эффект сейчас считается очень дорогим и чаще всего не используется и тем более не порождает мягкие тени. Для поиска путей он бесплатен, т.к кол-во лучей константно, а значит его появление по сути дополнительная фишка.
Теперь возвращаемся к словам "Для этого все игровые места запекают в точки пространства", т.е о зондах освещения. На первом скрине мы видим 2 проблемы:
- Место в вентиляции не осветилось рейтрейсингом, потому использовались зонды освещения, а они не учитывают каждый угол геометрии, потому полностью освещены солнечным светом.
- В отражении мы можем увидеть бак, но видим мы его в базовом материале и текстуре, без финального освещения.
Всё это решается в overdrive моде и финальная каринка получает тени и отражения света в полном объёме.
Опять сравнение с растеризацией где видно как у NPC появляются тени в том числе и во рту. + тенью объято всё тело, так же тени появятся даже от цепи на груди npc.
В полном видео показано ещё пару моментов которые показывают мощь новой технологии, но DTF более не выдерживает новых медиа файлов, а потому вложить больше я не могу.
Вы можете сами оценить итоговые результаты на видео или же самостоятельно уже завтра (если вы сын миллиардера).
Ну что же, я показал всё что хотел, может что то и забыл, но на то и существуют комментарии. Я уверен что многие из вас напишут что такое освещение уже было в игре 1993 года и работало на процессоре от холодильника.
Будут и те, кто скажут что графика не важна и есть множеств игр без рейтрейсинга или без света вообще и это абсолютно ваш выбор.
Как минимум будут те, кто напишет что всё это развод от Куртки ака главы Nvidia, ради развода гоев на шекели. Это тоже ваше право и я его уважаю.
Но всё же надеюсь я смог показать как обычные мягкие тени и правильное освещение без костылей могут изменить картинку, хоть и тратой огромных ресурсов видеокарты.
Самое важное что вы должны понять. Эра истинного ретйресинга ещё не наступила и вероятно не наступит в течении следующего десятилетия и нам остаётся только наблюдать как технологии меняют мир во круг нас, как минимум мир виртуальный.
Спасибо за прочтение (ну или хотя бы закладку).