Разработчик (и) | Nvidia |
---|---|
Стабильный выпуск | 7.1 / 30 июня 2020 г. (2020 -06-30) |
Написано на | C / C ++ |
Операционная система | Linux, OS X, Windows 7 и выше |
Тип | Трассировка лучей |
Лицензия | на собственное программное обеспечение, бесплатно для коммерческого использования |
Веб-сайт | Сайт разработчика NVIDIA OptiX |
Nvidia OptiX (OptiX Application Acceleration Engine ) - это трассировка лучей API. Вычисления выгружаются на графические процессоры через низкоуровневый или высокоуровневый API, представленный в CUDA. CUDA доступен только для графических продуктов Nvidia. Nvidia OptiX является частью Nvidia GameWorks. OptiX - это высокоуровневый API, или API «алгоритма», что означает, что он разработан для инкапсуляции всего алгоритма, частью которого является трассировка лучей, а не только самой трассировки лучей. Это сделано для того, чтобы движок OptiX мог выполнять более крупный алгоритм с большой гибкостью без изменений на стороне приложения.
Обычно видеоигры используют растеризацию вместо трассировки лучей для рендеринга.
Согласно Nvidia, OptiX разработан так, чтобы быть достаточно гибким для «процедурных определений и гибридных подходов к рендерингу». Помимо рендеринга компьютерной графики, OptiX также помогает в оптическом и акустическом дизайне, излучении и электромагнитных исследованиях, искусственный интеллект запросы и анализ коллизий.
OptiX, который работает с использованием предоставленных пользователем инструкций (в форме ядер CUDA ) относительно того, что луч должен делать в определенных обстоятельствах для имитации полного процесса трассировки.
Луч света (или, возможно, другой вид луча) может иметь другое поведение при попадании на определенную поверхность, а не на другую, OptiX позволяет настраивать эти условия попадания с помощью программ, предоставленных пользователем. Эти программы написаны в коде PTX или непосредственно в нем и связаны между собой при использовании подсистемой OptiX.
Для использования OptiX в системе должен быть доступен CUDA -capable 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 (context, 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 использует преимущества вычислений GPGPU, используя платформу NVIDIA CUDA. Поскольку процесс съемки лучей и настройки их поведения можно настраивать, OptiX можно использовать во множестве других приложений, помимо трассировки лучей.
Начиная с OptiX 3.5.0, в комплект была добавлена вторая библиотека под названием OptiX Prime, целью которой является обеспечение быстрого низкоуровневого API для трассировки лучей. - построение структуры ускорения, пересечение структуры ускорения и пересечение луча и треугольника. Prime также имеет резервный процессор, если в системе не обнаружен совместимый графический процессор. В отличие от OptiX, Prime не является программируемым API, поэтому ему не хватает поддержки пользовательских примитивов, не являющихся треугольниками, и штриховки. OptiX Prime не является программируемым и не инкапсулирует весь алгоритм, частью которого является трассировка лучей. Таким образом, Prime не может перекомпилировать алгоритм для новых графических процессоров, выполнить рефакторинг вычислений для повышения производительности или использовать сетевое устройство, такое как Quadro VCA и т. Д.