Поясняю за рейтрейсинг и Overdrive Mode для Cyberpunk 2077
Пока я писал первую часть, вышел видео-обзор от Digital Foundry в котором они показали очень интересные кадры с которыми будет легче понять суть происходящего.
На скринах ниже мы видим сравнение обычной растеризации, максимального рейтрейсинга и нового его режима.
В первом случае мы наблюдаем проблему с совмещением растеризации и RT.
Свет исходит от туда, от куда идти и не должен был, это так называемая "утечка света".
На втором такой проблемы нет, то что тёмно, остаётся тёмным и это одна из главным фич трассировки путей.
На данном скрине мы видим сравнение максимальной растеризации без рейтрейсинга и overdrive мода.
Тут разница уже прям сильно попадает в глаза. В случае растеризации мы получаем несколько проходов и каждый не знает о соседнем. От сюда отсутствие тени от матраса и прочих объектов, т.к его в тайне от нас освещает свет от солнца, а уже поверх этого игра пытается наложить тени от стен комнаты и в финале добавить AO.
В случае overdrive мода мы получаем весь нужный свет от солнца и других источников освещения в первом проходе, а переотраженный свет во втором который и добавляет все эти красивые мягкие тени, нормальную реализацию которых без RT сделать попросту невозможно.
Вот то, о чём я говорил выше. Теперь все, даже самые мелкие объекты в игре отбрасывают тень, а что более удивительно свет от них переотражается и продолжает освещать территорию вокруг, а далее плавно затихает порождая Ambient occlusion.
Опять сравние в растеризации и тут опять таже проблема. Идёт глобальный свет от солнца, далее от источников и одни пытаются загасить другие, но загасить солнечный просто не получается, потому хоть мы солнца и не видим, но оно видит нас и продолжат освещать все объекты. Ну и на overdrive моде этой проблемы нет, т.к нет костылей её порождающих.
Тут мы явно видим утечку света и то, как эта проблема решается overdrive модом и трассировкой путей в частности. Свет красиво блокируются, а что самое важное создаёт мягкие тени.
Мы опять видим тени от любой геометрии и от любого источника освещения, что добавляет огромное кол-во реализма в сцену, казалось бы таким мелким нововведением.
Теперь по поводу muzzle эффекта, т.е света от дульной вспышки который вызывает мягкие тени от объектов. Напоминаю что этот эффект сейчас считается очень дорогим и чаще всего не используется и тем более не порождает мягкие тени. Для поиска путей он бесплатен, т.к кол-во лучей константно, а значит его появление по сути дополнительная фишка.
Теперь возвращаемся к словам "Для этого все игровые места запекают в точки пространства", т.е о зондах освещения. На первом скрине мы видим 2 проблемы:
- Место в вентиляции не осветилось рейтрейсингом, потому использовались зонды освещения, а они не учитывают каждый угол геометрии, потому полностью освещены солнечным светом.
- В отражении мы можем увидеть бак, но видим мы его в базовом материале и текстуре, без финального освещения.
Всё это решается в overdrive моде и финальная каринка получает тени и отражения света в полном объёме.
Опять сравнение с растеризацией где видно как у NPC появляются тени в том числе и во рту. + тенью объято всё тело, так же тени появятся даже от цепи на груди npc.
В полном видео показано ещё пару моментов которые показывают мощь новой технологии, но DTF более не выдерживает новых медиа файлов, а потому вложить больше я не могу.
Вы можете сами оценить итоговые результаты на видео или же самостоятельно уже завтра (если вы сын миллиардера).
Ну что же, я показал всё что хотел, может что то и забыл, но на то и существуют комментарии. Я уверен что многие из вас напишут что такое освещение уже было в игре 1993 года и работало на процессоре от холодильника.
Будут и те, кто скажут что графика не важна и есть множеств игр без рейтрейсинга или без света вообще и это абсолютно ваш выбор.
Как минимум будут те, кто напишет что всё это развод от Куртки ака главы Nvidia, ради развода гоев на шекели. Это тоже ваше право и я его уважаю.
Но всё же надеюсь я смог показать как обычные мягкие тени и правильное освещение без костылей могут изменить картинку, хоть и тратой огромных ресурсов видеокарты.
Самое важное что вы должны понять. Эра истинного ретйресинга ещё не наступила и вероятно не наступит в течении следующего десятилетия и нам остаётся только наблюдать как технологии меняют мир во круг нас, как минимум мир виртуальный.
Спасибо за прочтение (ну или хотя бы закладку).
было интересно. побольше бы такого контента
Смешались в кучу кони, люди.
- Трассировку лучей методом "от источника к камере" не используют сейчас нигде. По крайней мере в таком виде, как тут описывается. Причина - при обратимой 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 конеш), там суть основная в том, что можно запоминать, какие источники света дают больший вклад в освещение точки, какие меньше, и на основе этого кидать больше лучей в важные источники и меньше в неважные, это сильно ускоряет процесс.
Для непрямого освещения используется примерно тот же подход (запоминают, какие направления более "важные" для суммарного освещения, туда и кидают).
Ну и да, все это для каустик опять плохо работает, шумный результат очень. Но для каустик вообще почти все плохо работает, сложный это эффект.
Комментарий недоступен
Трассировку лучей методом "от источника к камере" не используют сейчас нигде
Разве render man от pixar не использует почти полный RT с фотонными картами для уменьшения кол-ва денойза?
Минус от такого подхода - шума в картинке много, особенно на отражениях маленьких ярких источников и каустиках, нужны денойзеры и надо понимать, в какие части изображения больше лучей кидать
Я думаю тему с каустиками вообще поднимать не стоит.
Наличие переотражений вообще не зависит от того, прямая это трассировка, обратная ли и т.д., оно зависит только от того, сколько переотражений для лучей вы разрешаете и копите ли результат прошлых кадров где-то.
Вы правы, я и не хотел сказать о направлении луча, я лишь хотел указать на рандомизацию лучей в случае PT.
- схему с рандомным сэмплированием brdf используют и сейчас. Lumen например так делает из того, что доступно сейчас.
В случае Lumen не совсем. Они делают рандомизацию, но не полную с доп растеризоваными кадрами в лоу резе того, до чего не дотянулись, + стоит помнить о вексельном распространении который делает эти "затухания" при изменении сцены и как раз по вокселям они контролируют рандомизацию.
что и с рейтрейсингом, если количество шадоумап будет очень большим.
По сути это будет семплированием, что даст не плохие тени, но это костыль костыля.
Если я правильно понял, кп2077 решили использовать restir di для ускорения (если верить df конеш).
Про него я видел только демку Nvidia и то это было пару лет назад. Нужно почитать, может чего интересного вычитаю.
Спасибо за комментарий.
Минус за нечитабельную стену текста