Введение


NVIDIA Turing — лучшая информационная тайна компании, если она действительно имела место быть целых 15 лет. Новая архитектура представляет особенность, которую NVIDIA считает настолько грандиозной, что она, возможно, может стать самой большой инновацией в 3D-графике с программируемыми шейдерами в реальном времени с начала прошлого десятилетия. Трассировка лучей в реальном времени действительно рассматривалась как священный Грааль 3D-графики из-за огромного количества вычислений, необходимых для её функционирования.

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

Примерно год назад, где-то в это же время, мы впервые услышали кодовое имя «Turing», и предположили, что это кристалл, который помог бы NVIDIA, нажиться на блокчейне (вспомните прошлогодний бум), поскольку архитектура названа в честь математика, спасшего миллионы жизней путем взлома нацистской криптографии «Enigma». Тем самым учёный также приблизил завершение Второй мировой войны. Однако дань NVIDIA Алану Тьюрингу (Alan Turing) не просто связана с его достижениями в криптографии, а, скорее, с его общепризнанной репутацией Отца Искусственного интеллекта и Теоретических вычислений.

Архитектура Turing и GeForce RTX

За последние пять лет NVIDIA инвестировала огромные средства в ИИ, разрабатывая первые модели нейронных сетей глубокого обучения, использующих технологию CUDA и мощные GPU. Первоначальные попытки создания и обучения нейронных сетей оказались очень трудоемкой задачей даже для самых мощных GPU, требующих аппаратных компонентов, ускоряющих тензорные операции. Таким образом, NVIDIA построила первый компонент фиксированной функции для тензорных операций, называемый просто «Tensor Cores».

Это крупные специализированные компоненты, вычисляющие матричное умножение 3x3x3. Ядра Тензора дебютировали с архитектурой «Volta», которая тогда считалась преемником «Pascal». Однако NVIDIA решила, что настала пора достать технологию RTX из печи.

Графическая архитектура «Turing» представляет собой третий (и окончательный) фрагмент аппаратной головоломки, которая делает для пользователей амбициозные планы NVIDIA по трассировке лучей по-настоящему рабочими благодаря RT-ядрам. Ядро RT — это аппаратное обеспечение с фиксированной функцией, которое проделывает то, что предлагал духовный предок RTX, NVIDIA Optix с ядрами CUDA. Вы вводите математическое представление луча, и он будет пересекать сцену, чтобы вычислить точку пересечения с любым треугольником в сцене.

NVIDIA RTX — это всеохватывающая, очень гибкая модель трассировки лучей в реальном времени для потребительской графики, стремящаяся минимизировать набор инструментов и кривую обучения для современных программистов 3D-графики. А также она стремится оказать существенное влияние на такие факторы реализма, как сглаживание, программируемые шейдеры и тесселяцию (ранее все они вызвали скачки в вычислительной мощности GPU). На «Turing» сочетание ядер CUDA последнего поколения работает с совершенно новым компонентами в лице RT Core и Tensor Cores, заставляющих RTX работать.

NVIDIA дебютировала с технологией RTX, представив линейку профессиональных видеокарт Quadro RTX, изначально на SIGGRAPH 2018, и не только потому, что мероприятие предшествует Gamescom, но и потому, что дает создателям контента сигнал о старте технологии. Семейство GeForce RTX впервые за десятилетие испытывает недостаток в «GTX» в своем брендинге, что говорит о том, насколько значим RTX для развития успеха.

В данной статье будет, как можно глубже рассмотрены внутренние технологии NVIDIA RTX и архитектура Turing GPU, а также то, как эти две части объединяются в первые три видеокарты GeForce RTX 20-серии, приобрести которые уже можно в конце этого месяца.

Очень скоро, когда будет отменено эмбарго NVIDIA на обзоры, будет предоставлен собственный отзыв по результатам тестов работы Turing в большом количестве игр

Архитектура


chipshot

Когда NVIDIA выпустила первый кристалл «Turing», оказалось, что он существенно отличался от любого другого, увиденного за последнее десятилетие. Блок-схемы указывают, что первые две реализации «Turing», TU102 и TU104, более или менее сохраняют иерархию компонентов своих предшественников, необходимых для создания современной работы графического процессора. Но вносят серьёзные изменения в SM (потоковые мультипроцессоры), неделимые подразделения GPU, внедрением RT-ядер и тензорных ядер, а также новым Warp Scheduler, позволяющим одновременное выполнение INT32 и FP32, что может улучшить общие асинхронные функции вычисления чипа. На последующих страницах мы погрузимся глубже в механику ядер CUDA, SM, RT и тензорных ядер.

Turing TU102


Turing TU102 является самым большим графическим камнем без накопителей, когда-либо созданным. Построенный на 12 нм техпроцессе производства, как в принципе и остальное семейство Turing, чип демонстрирует колоссальные 18 миллиардов транзисторов и обещает TDP всего 250 Вт. Микросхема оснащена шестью GPC (графическими процессорными кластерами), каждый из которых содержит двенадцать потоковые мультипроцессоров (SM), неделимой подсистемы GPU. Таким образом, на TU102 всего получилось 72 SM.

turing-tu102-architecture

Добавление тензорных ядер и RT-ядер оставляет место всего для 64 ядер CUDA на один SM, или 768 через GPC и 4 608 на кристалл. В отличие от GV100, ядра тензора занимают примерно в восемь раз больше площади кристаллов от ядер CUDA, а SM несёт в себе 8 тензорных ядер или 96 оных на GPC или 576 по всему GPU. RT-ядра является самым большим неделимым компонентом в SM, и всего только один из них приходится на SM, 12 на GPC и 72 на матрицу. Шина VRAM взаимодействует через 384-битный интерфейс и способна обрабатывать до 24 ГБ памяти GDDR6.

Увы, GeForce RTX 2080 Ti, как и его предшественник, GTX 1080 Ti, не может воспользоваться максимальными возможностями TU102. Включены только 68 из 72 SM, работающих с 4 352 ядрами CUDA, 544 тензорными ядрами и 68 RT-ядрами. Шина памяти также сужается до 352 бит, управляя 11 ГБ. С «Turing» NVIDIA ввела лимит на удвоение объёмов VRAM с каждым новым поколением. Возможно, виной этому состояние индустрии DRAM, а также отсутствие прецедента, вдвое превышающего память предыдущего поколения.

Turing TU104


Turing TU104 вполне оказался годным в качестве poster-boy архитектуры «Turing», так же, как и его длинная линейка предшественников, например, GK104 «Kepler» (GTX 680). Этот чип лежит в основе GeForce RTX 2080, что интересно, также не задействует все компоненты, физически присутствующие на чипе. Возможно, пока по слухам, RTX 2080+ вполне может это сделать.

Другим ключевым отличием TU104 от своих предшественников является его количество GPC по сравнению с их более крупными аналогами. Чип TU104 получил аналогичное количество GPC, что и TU102, равное 6, с той лишь разницей, что количество SM на GPC отличатся. И хотя TU102 получил 12 SM на GPC, TU104 предлагает 8 SM на GPC. Потоковые мультипроцессоры имеют ту же конфигурацию, что и TU102.

turing-tu104-architecture

Таким образом, в максимальной вариации TU104 имеет 3 072 ядра CUDA, 384 тензорных ядра и 48 RT-ядер. Для RTX 2080, отключается два из его общего количества SM. Что означает обладание 2 944 ядрами CUDA, 368 тензорными и 46 RT-ядрами. К счастью, интерфейс памяти «пила не зацепила». Память GDDR6 с 256-битной шиной выводит 8 ГБ для RTX 2080.

Turing TU106


TU106 — очень любопытный чип, и что интересно NVIDIA строит на нём RTX 2070, а не RTX 2060. Предшественники RTX 2070 (GTX 1070, GTX 970 и т. д.) традиционно были основаны на предшественниках TU104, причем несколько потоковых мультипроцессоров отключены. С RTX 2070 NVIDIA решила пойти с физически меньшим чипом, чем TU104, вероятно, чтобы свести к минимуму затраты на этот быстродействующий, большой объем SKU.

turing-tu106-architecture

Чип TU106 не совсем преуспевает за GP106, ведь это половина чипа TU102. TU106 имеет три GPC, каждый из которых вобрал 12 SM, как и TU102; в отличие от TU104, который имеет 8 SM на GPC. А вот 256-битный интерфейс памяти GDDR6 переносится с TU104.

Будучи «половиной от TU102», TU106, следовательно, получает 36 SM, или 768 CUDA ядер на GPC, что составляет всего 2 304 ядер CUDA. Число тензорных ядер составляет 288, а RT вариантов 36 штук соответственно. RTX 2070 задействует это чип по полной.

TU106 не поддерживает интерфейс NVLink, поэтому RTX 2070 остаётся без поддержки SLI, что не совсем удачное решение для видеокарты стоимостью 500 $.

GeForce RTX 2080 Ti


GeForce RTX 2080 Ti — флагманская видеокарта, основанная на архитектуре «Turing», и естественно, ориентирована в первую очередь на ПК-энтузиастов, обожающих гейминг за внушительными 4K-мониторами NVIDIA BFGD (большой формат игрового дисплея). Такие мониторы благодаря своим размерам и более низкому PPI (снижением индекса цен производителей) могут гарантировать сглаживание, которое не требуется для более распространенных размеров 4K-мониторов, таких как 28″.

Как и предшественник, RTX 2080 Ti не полностью использует камень, на котором основан. Как было описано на предыдущей странице, он имеет 68 из 72 SM, физически присутствующих на чипе; 4 352 из 4 608 ядер CUDA, 544 из 576 тензорных ядер и 68 из 72 RT-ядер. Памяти имеет ширину 352 бит и объём 11 ГБ, здесь как у предшественника, но стандарт памяти продвинулся до GDDR6.

rtx-2080-ti

NVIDIA не упоминает референсные частоты этого GPU в материалах, который разрешено распространять на текущий момент, но номинальная Boost-частота GPU составляет 1545 МГц, для справки 1635 МГц у Founders Edition. Скорость памяти составляет 14 Гбит/с, что на 27% выше, чем 11 Гбит/с у GTX 1080 Ti. Такой показатель соответствует пропускной способности 616 ГБ/с.

NVIDIA оценивает RTX 2080 Ti в 999 $, при этом продукт Founders Edition за 1.199 $. Партнеры NVIDIA будет продавать свои кастомные дизайнерские артикулы, и поэтому маловероятно, что пользователи вообще сумеют найти карты по базовой цене.

GeForce RTX 2080


GeForce RTX 2080 — второй по мощности продукт (на текущий момент), который может стать проездным на 4K-игры с частотой 60 Гц. У этого монстра достаточно мускулов, чтобы испытать все преимущества RTX, за которые юзер должен будет выложить 699 $ (по крайней мере). Как уже упоминали ранее, даже RTX 2080 не использует весь потенциал камня, на котором он основан. Включены 46 из 48 SM, физически присутствующих на чипе.

Чип, следовательно, имеет 2 944 из 3 072 ядер CUDA, 46 из 48 RT и 368 тензорных ядер. Неполная реализация TU104 даёт возможность NVIDIA внедрить в будущем премиальный «RTX 2080+», или это может быть просто банальное средство увеличение прибыльности.

rtx-2080

GPU функционирует на частоте 1515 МГц с Boost на 1710 МГц в референсном дизайне и с немножко повышенной Boost-частотой в 1800 МГц у Founders Edition. Скорость памяти составляет 14 Гбит/с, а пропускная способность составляет 448 ГБ/с.

NVIDIA запускает RTX 2080 по цене 699 $ (номинальная цена) и 799 $ для Founders Edition. Эти цены конкурируют с ценами флагмана предыдущего поколения GTX 1080 Ti.

GeForce RTX 2070


GeForce RTX 2070 является последним в длинной линейке высокопроизводительных продуктов, NVIDIA продала тонны, будь то GTX 1070, GTX 970 или GTX 670. Юзерам достаётся высококачественный набор функций по гораздо более низкой цене, чем у флагманских продуктов. Здесь, в отличие от своих предшественников, RTX 2070 не основан та том же кристалле, что и RTX 2080; а использует Turing TU106.

Как пояснялось на предыдущей странице, для RTX 2070 NVIDIA решила применить физически меньший чип, а не тратиться на затратное производство более крупного чипа с отключенными SM, которые в противном случае одинаково функциональны. TU106 — большой шаг вперёд от GP106. Это половина TU102 (big chip), в то время как его предшественники традиционно были половиной второго по величине чипа (например, GP106 — половина от GP104).

rtx-2070

Пользователь получает полноценный 256-битный интерфейс памяти GDDR6, такую ​​же объём 8 ГБ и ту же пропускную способность 448 ГБ/с, что и RTX 2080, но ровно половину от количества ядер CUDA/Tensor/RT — 2 304/288/36 от RTX 2080 Ti. RTX 2070 идеально подходит для разрешений до 4K, таких как 1440p, или даже некоторых разрешений UIltrawide, например, 3440×1440.

Ядро RTX 2070 синхронизируется с частотой 1410 МГц, 1620 МГц (Boost), которая увеличивается до 1710 МГц в Founders Edition. Когда предстоит запуск продкта в октябре этого года, RTX 2070 стартует с 499 $, а Founders Edition потянет 599 $.

Спекуляции на теме


В то время как NVIDIA запускает семейство «Turing» в массы пока только с RTX 2080 Ti, RTX 2080 и RTX 2070, а способ выстраивания её активов TU102, TU104 и TU106 заставляет немного спекулировать некоторыми возможными предстоящими продуктами. Это чисто спекуляция, и никакая информация от NVIDIA! Некоторые из них (гипотетических продуктов), возможно, никогда не появятся.

  • TITAN X Turing: сначала сперва в лёгком весе. TITAN X Turing, который, предположительно, будет стоить 1 499 $, если не больше, может максимально оперировать мощностью TU102, включая полную 384-битную шину памяти, 12 ГБ VRAM и более высокие частоты.
  • GeForce RTX 2080+: выбор NVIDIA, чтобы не перемалывать TU104 на один вариант, позволяет предположить, что на горизонте может появиться новый продукт, расположенный чуть выше RTX 2080 Founders Edition, так как получит в распоряжение все компоненты на TU104 и, вероятно, более высокие частоты. Также обозначился очевидный разрыв цен между RTX 2080 и RTX 2080 Ti, который следует обязательно чем-то заполнить.
  • GeForce RTX 2070 Ti: что сделает NVIDIA со всеми чипами TU104, имеющих менее 46/48 потоковых микропроцессоров (SM)? Верно, выделите новый продукт, расположенный на полпути между RTX 2070 и RTX 2080 с точки зрения количества ядер CUDA и тактовой частоты.
  • Серия GeForce RTX 2060: TU106 предоставляет NVIDIA свободу не только питать RTX 2070 по полной программе, но также открывает сегмент «sweetspot» с RTX 2060. Данная линейка может увидеть свет либо к концу 2018 года, либо как только NVIDIA точно убедится, что запасы текущего поколения хорошо разошлись.

Память GDDR6


slide-14

Память GDDR6 является прямой наследницей GDDR5X, которая, в свою очередь, использовалась только семейством видеокарт NVIDIA Pascal. Как и в прошлый раз, NVIDIA объединилась с индустрией DRAM, чтобы помочь активно продвигать возможности графической памяти, не вкладывая большие средства в HBM2, являющейся более дорогостоящей альтернативой, особенно когда речь идет о потребительском рынке.

Хотя различия между GDDR5X и GDDR6 не столь велики, как переход от GDDR5 к GDDR5X, но всё же есть некоторые примечательные особенности. Во-первых, скорость была увеличены до 10-16 Гбит/с, при этом NVIDIA решила использовать 14 Гбит/с для текущих предложений. Во-вторых, GDDR6 разбивает память на два канала на чип, позволяя, например, 32-битному чипу выводить два независимых 16-битных канала, что, в свою очередь, будет способствовать дальнейшему использованию показателей мощности и производительности в сценариях с высокой степенью распараллеливания (которые, как правило, GPU, используют для работы). В-третьих, GDDR6 может иметь рабочее напряжение 1.35 В либо 1.25 В (последнее в случаях, когда снижение скорости передачи данных не является критичным) по сравнению с GDDR5X, обладающая только заданным рабочим напряжением 1.35 В. Что означает, GDDR6 предоставляет множество вариантов для более эффективных решений тепло- и энергоэффективности, хотя это ещё предстоит выяснить, допустим, если это происходит с ощутимым дефицитом потенциала производительности.

Наконец, возможно, самая сильная разница заключается в том, что, в отличие от GDDR5X, ожидается, что все крупные производители DRAM возьмут GDDR6. Уже прошли анонсы от Micron, Hynix и Samsung, а это означает, что GDDR6 станет рабочей лошадкой для новых поколений видеокарт от AMD и NVIDIA — так же, как и GDDR5 в прошлом.

Сжатие цвета без потерь


slide-15

В течение нескольких поколений GPU NVIDIA использовали технологию сжатия без потерь, которая снижает требования к пропускной способности VRAM. В двух словах, GPU будет искать повторяющиеся пиксели в текстурах и вместо хранения каждого повторяющегося пикселя станет сохранять только «повторить синий, блок 4×4». Аналогичным образом, если цвета соседних пикселей одинаковы, в нем будет храниться способ вычисления цвета следующего пикселя из цвета предыдущего пикселя с использованием нескольких бит вместо полновесного 32-битного значения RGB цвета. Ключом к улучшению этого алгоритма является поиск шаблона в текстурах, которые используются в играх, а затем добавление выделенной схемы в чип, чтобы обеспечить сжатие и декомпрессию этого одного конкретного шаблона. Не удивительно, если бы NVIDIA использовала машинное обучение для оптимизации своей коллекции таких признанных моделей, подавая все текстуры во всех играх, когда-либо созданных, что представляет собой обширную задачу, позволяющую получить фантастические результаты почти сразу.

Фактически, цветовое сжатие означает меньше данных для записи и передачи из VRAM в кэш L2. Этот сокращенный трафик распространяется по линии с меньшим количеством передач данных между клиентами, включая вышеупомянутую текстуру игры, и фреймбуфер памяти. С Turing NVIDIA разработала пятое поколение технологии сжатия цветов, улучшающее степень сжатия более чем на 25% по сравнению с микроархитектурой Pascal, которая, в свою очередь, уже показала улучшения на 20% по сравнению с Maxwell.

Соревнование


Самая большая проблема в компьютерной графике — решить проблему видимости, то есть определить, какие объекты видны и которые не находятся в данный момент времени для каждого визуализированного кадра, много раз в секунду. Существуют два подхода к этому: raytracing и растеризация.

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

Технологии

Растеризация

Начнем сначала с растеризации, метод которой, для рендеринга используют все игры на сегодняшний день. Всё начинается с объектов, которые состоят из треугольников и помещаются в сцену во время генерации каждого кадра. На более позднем этапе все треугольники этих объектов проецируются на экран. В принципе, они превращаются в 2D представление на вашем экране из 3D представления в сцене. Это выполняется для каждого видимого треугольника в сцене, количество которых может достигать несколько миллионов в современных играх.

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

Решение этой проблемы называется Z-Buffering (или Depth Buffering). Каждый раз, когда пиксель на экране заполняется, второй буфер записывает, как далеко находится этот треугольник. Каждый пиксель в этом буфере инициализируется с очень большим значением. Теперь, когда пиксель записывается на экран, Z-Buffer сначала проверяется, чтобы выяснить, имеет ли он значение, меньшее, чем расстояние текущего пикселя. Если это так, предыдущий треугольник, который ближе к экрану, уже заполнит этот пиксель, а текущий пиксель отбрасывается, поскольку он оказывается перекрытым.

Все это может выполняться параллельно, потому что вывод для каждого пикселя не зависит от вывода других пикселей на экране, и все треугольники могут обрабатываться параллельно, потому что метод Z-Buffer позаботится о «сортировке» треугольников от тыла к фронту, без необходимости сравнивать два треугольника напрямую.

Raytracing

Рейтрейсинг применяет совершенно иной подход. Так же, как при растеризации, виртуальная сцена состоит из большого количества треугольников, представляющих объекты в игровом мире, но вместо того, чтобы проецировать эти треугольники на экран, raytracing выстреливает луч для каждого пикселя монитора в игровой мир, ища точки пересечения («ray hits»). Поскольку луч распространяется от монитора в мир, он автоматически решает проблему видимости, потому что первое, с чем он пересекается, будет треугольник, ближайший к экрану. Если пересечение не найдено («ray miss»), то луч никогда не попадает в объект, и цвет пикселя выбирается, например, для отображения цвета неба.

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

Вопрос: «Хорошо, а как насчёт теней и отражений?».

Тени и отражения в Raytracing

То, что мы только что описали, является оригинальным алгоритмом рейтрейсинга. Чтобы добавить тени из каждой точки пересечения лучей в сцене, выстреливается «теневой луч», который перемещается из точки пересечения, прямо к каждому источнику света. Если этот луч попадает на другой объект по пути к источнику света, тогда свет не может падать с источника света на пятно начала координат, потому что какая-то другая геометрия находится на пути, а это означает, что точка затенена.

Этот метод даёт жёсткие тени, начиная от точечных огней, но ни мягкие тени, ни области света, продемонстрированные NVIDIA на их презентации функции RTX. Подробнее об этом позже в разделе RTX.

Отражения достигаются аналогичным образом. Когда луч света попадает на поверхность, в зависимости от свойств материала, он либо становится отраженным, либо преломленным (согнутым). Этот эффект можно легко аппроксимировать математически. Все, что вы делаете сейчас — это трассировка нового луча, который возможно, несколько раз меняет направление, когда попадает на другой отражающий объект, пока не ударит по объекту, который больше не отражает (непрозрачный рассеян). Вот именно он и определяет цвет пикселя на экране. Другие поверхности на пути могут внести вклад в цвет этого пиксела, в зависимости от их материальных свойств.

Path Tracing

Дальнейшее уточнение raytracing называется «трассировкой пути», которое выбрасывает большое количество новых лучей от каждого попадания луча, имитируя свойства материалов в реальной жизни. В реальном мире каждая поверхность имеет определенную шероховатость, которая рассеивает свет во всех направлениях (а не только в одном, как при отражении). Это технология, используемая киностудиями для создания реальных визуализаций, но она поставляется с огромными вычислительными затратами, потому что количество лучей сильно умножается. Опять же, здесь обещание raytracing состоит в том, что он может имитировать эти эффекты физически правильно, не используя хаки, которые являются единственным доступным подходом при использовании растеризации. Однако из-за сложности вычислений трассировка пути невозможна даже на оборудовании RTX.

Bounding Volume Hierarchy (BVH)


В то время, когда растеризация выполняется на каждом треугольнике сцены, Ray tracing выполняется на каждом пикселе экрана, что, собственно, и предстаёт как их фундаментальное отличие. Проблема с трассировкой лучей заключается в том, что если использовать один луч на пиксель, то получается значительные блочные края. В отличие от растеризации, где используются всевозможные «хаки» в методах сглаживания, решение, применённое в трассировке лучей, на самом деле является более верным, оно просто отслеживает несколько лучей на пиксель, которые все вместе и вносят свой вклад в конечное выходное значение, поэтому сглаживаются любые ребра. Но теперь представьте разрешение Full HD 1920×1080 при 60 FPS с 16 лучами на пиксель — придётся трассировать 2 миллиарда лучей в секунду. А если помножить это число на количество треугольников в сцене, при этом каждый же луч проверяется, попадает ли он в этот треугольник или нет, и, бум, вдруг в сумме получается уже два квадриллиона тестов треугольников каждую секунду, что совершенно не подъёмно для текущих аппаратных средств.

Чтобы уменьшить такое количество тестов на треугольник, был изобретен алгоритм Bounding Volume Hierarchy (BVH), который, по сути, поэтапно ставит большие прямоугольники вокруг объектов и его треугольников. Затем эти блоки сохраняются в древовидной структуре, отслеживающей все ограничивающие поля для всей сцены, с возможностью быстрого перехода от большего к следующему меньшему. Затем эти боксы обрабатываются одновременно «уровень-к-уровню» (таким образом, можно реализовать преимущество и возможности параллельной обработки в сегодняшних картах). Только блоки, о которые ударяется луч, идут в дальнейшую обработку, а все остальные немедленно удаляются из рабочей нагрузки. Все более мелкие блоки обрабатываются по мере того, как алгоритм делит и отбрасывает их, тем самым уменьшая площадь, которую предстоит вычислить, пока в результате не появится вожделенный пиксель.

Прелесть «Turing» по сравнению с предыдущими архитектурами NVIDIA заключается в том, что, скажем, Pascal должен выполнять тысячи операций с использованием своих ядер CUDA с эмулированным подходом BVH, Turing может иметь множество параллельных вычислений трассировки лучей на выделенных аппаратных средствах одновременно с затенением на ваших более старых, но надежных шейдерных «движках». О, конечно, нужно напомнить, что это всё сделано в реальном времени! Да, это, без сомнения, самая крупная маркетинговая особенность новой микроархитектуры, и, конечно, пока неясно, насколько хорошо она заработает на практике. И если всё окажется Тип-Топ, то это предвещает один из самых гигантских скачков иллюминации в играх и должно создать прочную основу для будущих поколений аппаратного и программного обеспечения.

AI Denoising


Как упоминалось на предыдущей странице, для трассировки лучей требуется по крайней мере один луч на пиксель экрана, чтобы обеспечить цвет для этого самого пикселя. В противном случае изображение будет шумным, т. е. вокруг конечного изображения будут разбросаны чёрные пиксели. И если требуется сглаживание, то придётся выстрелить несколько лучей на пиксель.

Denoising — один из базовых способов обойти это ограничение, обеспечивая визуальное улучшение в других случаях нечётких, шумных изображений в результате разрежённых данных и/или артефактов. NVIDIA утверждает, что их фильтрация шумоподавления особенно эффективна для снижения времени, затрачиваемого на рендеринг изображений с высоким качеством, которые в реальном времени кажутся безшумными. Это происходит за счет использования как алгоритмов, основанных на ИИ, так и не основанных на ИИ, в соответствии с конкретными требованиями сцены, с ожиданием того, что вся будущая фильтрация шумоподавления будет AI-based и которая будет всё время улучшаться.

Тени


Тени попадают в изображение естественным образом, когда дело доходит до трассировки лучей, но точные карты теней являются одними из самых сложных для рендеринга в реальном времени даже до того, как будет задействована трассировка лучей. В частности, контакт с усиленными тенями играет важную роль в придании более реалистичной визуализации, и это было предметом многих игровых движков раньше с реализациями с разной степенью успеха. Например, Deus Ex: Mankind Divided, имел большой дефицит производительности, с включенной этой возможность при этом без заметного повышения качества. Контактное укрепление в настоящее время выполняется с помощью техник, включающих Percentage Closer Soft Shadows (PCSS) и Distance Field Shadows. Первая из них прилично посягает на вычислительную мощность и по-прежнему не может генерировать точные тени от огней случайных областей, а вторая ограничивается статической геометрией при генерации карты теней.

NVIDIA Turing RTX-трассировка лучей и фильтрация шумов позволяют вместо этого заменять карты теней, тенями с трассировкой лучей, что включает более практичный подход для имитации контактного укрепления теней от всех типов источников света. В приведенных выше примерах показано влияние рендеринга на основе карты теней, помогающее обеспечить равномерное размытие краев тени, но плохо учитывающее контактное укрепление. Напротив, Ray-тени могут иметь полностью твердые края или точное контактное укрепление, несмотря на меняющийся угол падения света от источника.

Ambient Occlusion


Еще один аспект улучшения характеристик трассировки лучей происходит в форме одной из модели затенения. В частности, новая Ray-traced Ambient Occlusion (RTAO), помогает противостоять отсутствию глобального освещения, выделяя складки и другие поверхностные текстуры в объектах с куда более меньшим артефактов по сравнению с используемой в других случаях Screen-space Ambient Occlusion (SSAO). SSAO особенно известна в создании артефактов или даже в плохом разрешении при работе с отражениями на гладких, глянцевых поверхностях, будь то в кубической или сферической геометрии. RTAO, особенно в сочетании с уборкой шума, как упоминалось выше, допускает более тонкие эффекты в реальном времени без каких-либо описанных проблем.

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

rtcore

Чтобы решить эти проблемы, NVIDIA разработала новый компонент GPU под названием «RT Core». Каждый SM во всех графических процессорах Turing получает одно RT-ядро, которое является фиксированной функциональной схемой для ускорения двух наиболее важных операций в трассировке лучей: Bounding Volume Hierarchy Traversal и пересечение лучей с треугольником.

Ранее мы описали, как работает BVH. Вместо того, чтобы запускать BVH в ядрах CUDA, SM теперь может отправить RT Core команду «ray probe», а RT Core независимо запускает обход BVH без нагрузки на ядра CUDA. Когда во время обхода обнаружено соприкосновение, RT Core автоматически «пробурит» все ограничивающие прямоугольники, пока, наконец, не достигнет треугольника, с которым пересекается луч; в результате может быть также возвращен лучевой промах. Эти данные передаются в SM, который затем выполняет часть игрового кода, похожего на шейдер, который решает, что делать с результатом, т. е. следует ли отбрасывать дополнительные тени или лучи отражения.

Это все, что связано с технологией RTX в аппаратном обеспечении: полностью программируемый обход BVH и блок пересечения треугольников. Все остальные подробности достаются разработчику, что дарует ему удивительную гибкость, поскольку он не ограничивается классической трассировкой лучей (стрелять лучами через экран на сцену), но может использоваться для любой геометрической задачи, которая включает в себя прямые для вычислений пересечений с большим количеством геометрии. Одним из примеров является программное обеспечение в нефтегазовой отрасли, которое использует аналогичные алгоритмы для разведки и моделирования.

Ядра RT — всего лишь фундамент; программное обеспечение также очень важно. RTX поддерживается NVIDIA OptiX, Microsoft DirectX для Raytracing и Vulkan RT. Эти перечисленные API аналогичны тем, что они обеспечивают основу для создания приложений с трассировкой лучей, используя рабочий процесс, который не похож на программирование игр DirectX. Упрощенно: игровой движок предоставляет свои объектные данные, генерирует направления лучей и начальные точки, а в результате получает информацию о попаданиях лучей. Все остальное, как управление памятью, планирование графического процессора, диспетчеризация шейдеров, обход объектов и аппаратная оптимизация, обрабатываются библиотекой, что значительно снижает рабочую нагрузку для разработчиков.

Однако должно быть ясно, что «RTX enabled» не волшебным образом переключит игру с рендеринга с растеризацией на полностью «лучистую» игру. Почти все пиксели, которые пользователь видит на экране, всё ещё генерируются с помощью растеризации. RTX просто обеспечивает новый подход к созданию определенных эффектов с помощью нового типа аппаратного ускорения или создает определенные эффекты, которые слишком дорогого стоили в традиционных рендеринговых конвейерах. Разработчики игр выбирают специфические эффекты, которые они хотят создать (тени, освещение помещений, окружающая окклюзия, отражения) и реализуют их на очень маленьком подмножестве всей сцены, используя очень мало лучей; пустоты между лучами затем заполняются NVIDIA denoiser. Это не полноценная трассировка лучей, и, конечно, не фотореалистичная трассировка из Голливуда. Это чрезвычайно умный компромисс, доставляющий в режиме реального времени трассировку лучей в руке разработчиков благодаря современному оборудованию.

Похожие записи