Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Nvidia OptiX ( OptiX Application Acceleration Engine ) - это API трассировки лучей . [1] Вычисления выгружаются на GPU через низкоуровневый или высокоуровневый API, представленный в CUDA . CUDA доступен только для графических продуктов Nvidia. Nvidia OptiX является частью Nvidia GameWorks . OptiX - это высокоуровневый API-интерфейс, или API-интерфейс, ориентированный на алгоритм, что означает, что он предназначен для инкапсуляции всего алгоритма, частью которого является трассировка лучей, а не только самой трассировки лучей. Это предназначено для того, чтобы движок OptiX мог выполнять более крупный алгоритм с большой гибкостью без изменений на стороне приложения.

Обычно в видеоиграх для рендеринга используется растеризация, а не трассировка лучей.

Согласно Nvidia , OptiX разработан, чтобы быть достаточно гибким для «процедурных определений и гибридных подходов к рендерингу». Помимо рендеринга компьютерной графики , OptiX также помогает в оптическом и акустическом дизайне, исследованиях излучения и электромагнитных полей [2], запросах искусственного интеллекта и анализе столкновений . [3]

Трассировка лучей с помощью OptiX [ править ]

Набор Julia, нарисованный с помощью NVIDIA OptiX. Это тоже образец SDK

OptiX работает, используя предоставленные пользователем инструкции (в форме ядер CUDA ) относительно того, что луч должен делать в определенных обстоятельствах для имитации полного процесса трассировки. [4]

Луч света (или, возможно, другой вид луча) может иметь другое поведение при попадании на конкретную поверхность, а не на другую, OptiX позволяет настраивать эти условия попадания с помощью пользовательских программ. Эти программы написаны на CUDA C или непосредственно в коде PTX и связаны между собой при использовании движком OptiX.

Для того , чтобы использовать OptiX CUDA сигнала управления на GPU должен быть доступен в системе и должен быть установлен инструментарий CUDA.

Использование движка OptiX в приложении для трассировки лучей обычно включает следующие шаги:

  • Определение программ для генерации лучей (например, лучи могут быть сняты параллельно, в перспективе или как поле градиента ), отсутствие луча (когда луч не пересекает какой-либо объект), дополнительная программа исключения (когда луч не может быть снят по какой-то причине), программу ограничивающего прямоугольника (программа, которая обеспечивает проверку пересечения ограничивающего прямоугольника для данного объекта) и программу пересечения.

Несколько примеров для этих программ доступны в SDK программы.

// Пример кода с использованием API OptiX /// * Программа генерации лучей * / rtProgramCreateFromPTXFile (  * context ,  path_to_ptx ,  "pinhole_camera" ,  & ray_gen_program  ); rtContextSetRayGenerationProgram (  * контекст ,  0 ,  ray_gen_program  );/ * Пропущенная программа * / rtProgramCreateFromPTXFile (  * context ,  path_to_ptx ,  "miss" ,  & miss_program  ); rtContextSetMissProgram (  * контекст ,  0 ,  пропущенная_программа  );/ * Граничная рамка и программа пересечения * / rtProgramCreateFromPTXFile (  context ,  path_to_ptx ,  "box_bounds" ,  & box_bounding_box_program  ); rtGeometrySetBoundingBoxProgram (  * поле ,  box_bounding_box_program  ); rtProgramCreateFromPTXFile (  контекст ,  путь_к_ptx ,  "box_intersect" ,  & box_intersection_program  ); rtGeometrySetIntersectionProgram (  * box ,  box_intersection_program  );

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

  • Создавайте материалы для любого попадания и программы ближайшего попадания: эти две программы определяют поведение луча при обнаружении его первого пересечения (самое близкое попадание) или общего пересечения (любое попадание)
// Пример кода с использованием API OptiX //rtProgramCreateFromPTXFile (  контекст ,  path_to_ptx ,  "closest_hit_radiance" ,  & closest_hit_program  ); rtProgramCreateFromPTXFile (  контекст ,  путь_к_ptx ,  "any_hit_shadow" ,  & any_hit_program  );/ * Связывает ближайшее попадание и любую программу попадания с материалом * / rtMaterialCreate (  context ,  material  ); rtMaterialSetClosestHitProgram (  * материал ,  0 ,  closest_hit_program  ); rtMaterialSetAnyHitProgram (  * материал ,  1 ,  any_hit_program  );
  • Определите буферы , переменные, которые могут использоваться внутри поставляемых программ. Буферы - это области памяти, которые позволяют коду хоста (т. Е. Нормальному коду ЦП ) взаимодействовать с кодом устройства (т. Е. Кодом, который выполняется на графическом процессоре ) и наоборот. Переменные - это внутренний способ связи OptiX и использование буферов для передачи данных туда и обратно.
  • Определите иерархию OptiX геометрических объектов, групп, селекторов и других узлов, чтобы сгенерировать древовидный граф всей сцены для визуализации.
Пример графического дерева для NVIDIA OptiX

Для визуализации сложной сцены или отслеживания различных путей для любого луча OptiX использует преимущества вычислений GPGPU , используя платформу NVIDIA CUDA . Поскольку процесс съемки лучей и настройки их поведения легко настраивается, OptiX можно использовать во множестве других приложений, помимо трассировки лучей.

OptiX Prime [ править ]

Начиная с OptiX 3.5.0, в комплект была добавлена ​​вторая библиотека под названием OptiX Prime, целью которой является предоставление быстрого низкоуровневого API для трассировки лучей - построения структуры ускорения , обхода структуры ускорения и пересечения лучей и треугольников . Prime также имеет резервный процессор, если в системе не обнаружен совместимый графический процессор. В отличие от OptiX, Prime не является программируемым API, поэтому ему не хватает поддержки пользовательских примитивов, не являющихся треугольниками, и штриховки. OptiX Prime не является программируемым и не инкапсулирует весь алгоритм, частью которого является трассировка лучей. Таким образом, Prime не может перекомпилировать алгоритм для новых графических процессоров, выполнить рефакторинг вычислений для повышения производительности или использовать сетевое устройство, такое как Quadro VCA и т. Д.

Программное обеспечение с использованием OptiX [ править ]

  • Blender поддерживает OptiX с версии 2.81 [5]
  • Надстройка Blender D- NOISE использует бинарники OptiX для шумоподавления с искусственным интеллектом [6]
  • FurryBall - усовершенствованный модуль рендеринга финального кадра графического процессора в реальном времени с использованием трассировки лучей и растеризации - на основе Nvidia OptiX
  • На SIGGRAPH 2011 Adobe представила OptiX в виде демонстрации технологии трассировки лучей GPU для анимированной графики. [7]
  • На выставке SIGGRAPH 2013 OptiX был представлен в качестве инструмента предварительного просмотра освещения на базе графического процессора Pixar в реальном времени.
  • OptiX был интегрирован в библиотеку разработчиков GameWorks вместе с PhysX и другими графическими движками и фреймворками на базе CUDA . [8]
  • Adobe After Effects CC [9]
  • В Daz Studio было OptiX Prime Acceleration с момента его интеграции с Iray, однако поддержка была удалена в версии 4.12.1.8 [10]

Ссылки [ править ]

  1. ^ «Планирование в OptiX, движке трассировки лучей Nvidia» (PDF) . 15 августа 2009 г.
  2. ^ Фельбекер, Роберт; Рашковский, Лешек; Кеусген, Вильгельм; Питер, Майкл (2012). «Распространение электромагнитных волн в миллиметровом диапазоне волн с помощью движка трассировки лучей NVIDIA OptiX GPU». 2012 6-я Европейская конференция по антеннам и распространению радиоволн (EUCAP) . IEEE Xplore. С. 488–492. DOI : 10,1109 / EuCAP.2012.6206198 . ISBN 978-1-4577-0920-3.
  3. ^ Стивен Г. Паркер; Хайко Фридрих; Дэвид Любке; Кейт Морли; Джеймс Биглер; Джаред Хоберок; Дэвид Макаллистер; Остин Робисон; Андреас Дитрих; Грег Хамфрис; Морган Макгуайр; Мартин Стич (2013). «Журнал коммуникаций ACM - трассировка лучей на GPU» . Коммуникации ACM . ACM . Проверено 14 августа 2013 года .
  4. ^ Стивен Г. Паркер; Хайко Фридрих; Дэвид Любке; Кейт Морли; Джеймс Биглер; Джаред Хоберок; Дэвид Макаллистер; Остин Робисон; Андреас Дитрих; Грег Хамфрис; Морган Макгуайр; Мартин Стич (2010). «OptiX: средство трассировки лучей общего назначения» . Транзакции ACM на графике (Tog) . ACM. DOI : 10.1145 / 1778765.1778803 . Проверено 14 августа 2013 года .
  5. ^ «Тесты Blender 2.81 на 19 видеокартах NVIDIA - производительность рендеринга RTX OptiX невероятна» . phoronix.com. 2019 . Проверено 26 ноября 2019 года .
  6. ^ "D-NOISE: быстрое устранение шумов AI для Blender" . Ремингтон Креатив . 20 июля 2019 . Проверено 14 декабря 2019 года .
  7. ^ "Adobe демонстрирует OptiX в демонстрации технологии трассировки лучей движущейся графики с помощью графических процессоров" . NVIDIA. 2013 . Проверено 14 августа 2013 года .
  8. ^ «Nvidia объявляет о программе Gameworks в Монреале 2013; поддерживает SteamOS» . NVIDIA. 2013 . Проверено 29 октября 2013 года .
  9. ^ «Изменения графического процессора (для CUDA и OpenGL) в After Effects CC (12.1) | Интересующая область After Effects» . Проверено 22 февраля 2015 года .
  10. ^ "Журнал изменений Daz Studio" . ДАЗ 3D . Проверено 14 декабря 2019 года .

Внешние ссылки [ править ]

  • Главная страница NVIDIA OptiX Application Acceleration Engine
  • Руководство по программированию OptiX и OptiX SDK
  • Форум поддержки OptiX
  • Учебный код курса OptiX 7