Поясняю за рейтрейсинг и 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 сделать попросту невозможно.

Поясняю за рейтрейсинг и Overdrive Mode для Cyberpunk 2077

Вот то, о чём я говорил выше. Теперь все, даже самые мелкие объекты в игре отбрасывают тень, а что более удивительно свет от них переотражается и продолжает освещать территорию вокруг, а далее плавно затихает порождая Ambient occlusion.

Поясняю за рейтрейсинг и Overdrive Mode для Cyberpunk 2077

Опять сравние в растеризации и тут опять таже проблема. Идёт глобальный свет от солнца, далее от источников и одни пытаются загасить другие, но загасить солнечный просто не получается, потому хоть мы солнца и не видим, но оно видит нас и продолжат освещать все объекты. Ну и на overdrive моде этой проблемы нет, т.к нет костылей её порождающих.

Поясняю за рейтрейсинг и Overdrive Mode для Cyberpunk 2077

Тут мы явно видим утечку света и то, как эта проблема решается overdrive модом и трассировкой путей в частности. Свет красиво блокируются, а что самое важное создаёт мягкие тени.

Поясняю за рейтрейсинг и Overdrive Mode для Cyberpunk 2077

Мы опять видим тени от любой геометрии и от любого источника освещения, что добавляет огромное кол-во реализма в сцену, казалось бы таким мелким нововведением.

Поясняю за рейтрейсинг и Overdrive Mode для Cyberpunk 2077

Теперь по поводу muzzle эффекта, т.е света от дульной вспышки который вызывает мягкие тени от объектов. Напоминаю что этот эффект сейчас считается очень дорогим и чаще всего не используется и тем более не порождает мягкие тени. Для поиска путей он бесплатен, т.к кол-во лучей константно, а значит его появление по сути дополнительная фишка.

Поясняю за рейтрейсинг и Overdrive Mode для Cyberpunk 2077

Теперь возвращаемся к словам "Для этого все игровые места запекают в точки пространства", т.е о зондах освещения. На первом скрине мы видим 2 проблемы:

  1. Место в вентиляции не осветилось рейтрейсингом, потому использовались зонды освещения, а они не учитывают каждый угол геометрии, потому полностью освещены солнечным светом.
  2. В отражении мы можем увидеть бак, но видим мы его в базовом материале и текстуре, без финального освещения.

Всё это решается в overdrive моде и финальная каринка получает тени и отражения света в полном объёме.

Поясняю за рейтрейсинг и Overdrive Mode для Cyberpunk 2077

Опять сравнение с растеризацией где видно как у NPC появляются тени в том числе и во рту. + тенью объято всё тело, так же тени появятся даже от цепи на груди npc.

Поясняю за рейтрейсинг и Overdrive Mode для Cyberpunk 2077

В полном видео показано ещё пару моментов которые показывают мощь новой технологии, но DTF более не выдерживает новых медиа файлов, а потому вложить больше я не могу.

Вы можете сами оценить итоговые результаты на видео или же самостоятельно уже завтра (если вы сын миллиардера).

Ну что же, я показал всё что хотел, может что то и забыл, но на то и существуют комментарии. Я уверен что многие из вас напишут что такое освещение уже было в игре 1993 года и работало на процессоре от холодильника.

Будут и те, кто скажут что графика не важна и есть множеств игр без рейтрейсинга или без света вообще и это абсолютно ваш выбор.

Как минимум будут те, кто напишет что всё это развод от Куртки ака главы Nvidia, ради развода гоев на шекели. Это тоже ваше право и я его уважаю.

Но всё же надеюсь я смог показать как обычные мягкие тени и правильное освещение без костылей могут изменить картинку, хоть и тратой огромных ресурсов видеокарты.

Самое важное что вы должны понять. Эра истинного ретйресинга ещё не наступила и вероятно не наступит в течении следующего десятилетия и нам остаётся только наблюдать как технологии меняют мир во круг нас, как минимум мир виртуальный.

Спасибо за прочтение (ну или хотя бы закладку).

821821
413 комментария
500 ₽

было интересно. побольше бы такого контента

97
Ответить

Смешались в кучу кони, люди.
- Трассировку лучей методом "от источника к камере" не используют сейчас нигде. По крайней мере в таком виде, как тут описывается. Причина - при обратимой brdf (а большую часть брдфок можно считать обратимыми) нет большой разницы в том, считать лучи от источника или от камеры, а у лучей от камеры есть большой плюс - они попадают в камеру и не будут "лишними". Минус от такого подхода - шума в картинке много, особенно на отражениях маленьких ярких источников и каустиках, нужны денойзеры и надо понимать, в какие части изображения больше лучей кидать, куда меньше. Наличие переотражений вообще не зависит от того, прямая это трассировка, обратная ли и т.д., оно зависит только от того, сколько переотражений для лучей вы разрешаете и копите ли результат прошлых кадров где-то. Если копите - получаете переотражения. Не копите - не получаете. В метро есть переотражения, в люмене есть, киберпанк такой не один.
- В оффлайн рендерах могут использовать элементы прямой трассировки, но не в явном виде, можно погуглить bidirectional photon mapping, bidirectional path tracing, metropolis light transport, там описано более подробно.
- То, что сейчас используется в основном для RTXGI это сетки световых проб (чем-то похоже на маленькие кубические карты), которые обновляются в реалтайме рейтрейсингом. Проблема в том, что они довольно лоурезные, непрямые тени от объектов среднего размера теряются. В какой-то степени чинится AOшкой, но не до конца. Плюс из-за аошки вы получаете двойной окклюжен. У вас есть "честный" окклюжн от того, что пробы в тени получают меньше света, и вы сверху на это еще накидываете AO, получается двойное затенение. Это одна из причин, почему в новых играх с RTGI (метро, ведьмак3) иногда слишком темные комнаты, углы, кроны деревьев и т.д.
- схему с рандомным сэмплированием brdf используют и сейчас. Lumen например так делает из того, что доступно сейчас.
- Подход с прямым и непрямым освещением используют все как раньше, так и сейчас, даже в оффлайн рендерах. Причина - если просто рандомно кидать лучи, шума очень много. В сцене известно, где находятся яркие (а значит - наиболее влияющие на картинку) источники, грех этим не пользоваться. Отличие растеризации от рейтрейсинга тут только в том, как считается видимость между точкой и источником, рейтрейс пускает луч и проверяет, пересекся ли он с геометрией, в растеризации рисуют шадоумапы. Но суть одна и та же, надо для каждой точки сцены понять, виден ли из нее источник или нет. Шадоумапы просто надо хранить где-то, рисовать их долго и они плохо работают на источники света больших размеров (т.к. сам алгоритм предполагает, что свет исходит из точки / из фиксированного направления, что исключает полутени). Полутени фейкаются различными методами, типа pcf/moment-based shadow maps. Но в целом, вы __можете__ _в теории_ получить ту же картинку, что и с рейтрейсингом, если количество шадоумап будет очень большим. Рейтрейсинг обходит это тем, что можно просто запустить луч из точки поверхности в случайную точку на источнике света и посчитать геометрическое пересечение. Проблема - это дорого делать для всех источников, в играх рейтрейснутые тени сейчас делают обычно от пары источников (обычно солнце или какая-нибудь самая яркая лампочка в индоре). Если я правильно понял, кп2077 решили использовать restir di для ускорения (если верить df конеш), там суть основная в том, что можно запоминать, какие источники света дают больший вклад в освещение точки, какие меньше, и на основе этого кидать больше лучей в важные источники и меньше в неважные, это сильно ускоряет процесс.
Для непрямого освещения используется примерно тот же подход (запоминают, какие направления более "важные" для суммарного освещения, туда и кидают).

Ну и да, все это для каустик опять плохо работает, шумный результат очень. Но для каустик вообще почти все плохо работает, сложный это эффект.

195
Ответить

Комментарий недоступен

49
Ответить
Автор

Трассировку лучей методом "от источника к камере" не используют сейчас нигде

Разве render man от pixar не использует почти полный RT с фотонными картами для уменьшения кол-ва денойза?

Минус от такого подхода - шума в картинке много, особенно на отражениях маленьких ярких источников и каустиках, нужны денойзеры и надо понимать, в какие части изображения больше лучей кидать

Я думаю тему с каустиками вообще поднимать не стоит.

Наличие переотражений вообще не зависит от того, прямая это трассировка, обратная ли и т.д., оно зависит только от того, сколько переотражений для лучей вы разрешаете и копите ли результат прошлых кадров где-то.

Вы правы, я и не хотел сказать о направлении луча, я лишь хотел указать на рандомизацию лучей в случае PT.

- схему с рандомным сэмплированием brdf используют и сейчас. Lumen например так делает из того, что доступно сейчас.

В случае Lumen не совсем. Они делают рандомизацию, но не полную с доп растеризоваными кадрами в лоу резе того, до чего не дотянулись, + стоит помнить о вексельном распространении который делает эти "затухания" при изменении сцены и как раз по вокселям они контролируют рандомизацию.

что и с рейтрейсингом, если количество шадоумап будет очень большим.

По сути это будет семплированием, что даст не плохие тени, но это костыль костыля.

Если я правильно понял, кп2077 решили использовать restir di для ускорения (если верить df конеш).

Про него я видел только демку Nvidia и то это было пару лет назад. Нужно почитать, может чего интересного вычитаю.

Спасибо за комментарий.

30
Ответить

Минус за нечитабельную стену текста

2
Ответить
13
Ответить