Nvidia OptiX ( motor de aceleración de aplicaciones OptiX ) es una API de trazado de rayos . [1] Los cálculos se descargan a las GPU a través de la API de bajo nivel o de alto nivel introducida con CUDA . CUDA solo está disponible para los productos gráficos de Nvidia. Nvidia OptiX es parte de Nvidia GameWorks . OptiX es una API de alto nivel o "para el algoritmo", lo que significa que está diseñada para encapsular todo el algoritmo del que forma parte el trazado de rayos, no solo el trazado de rayos en sí. Esto está destinado a permitir que el motor OptiX ejecute el algoritmo más grande con gran flexibilidad sin cambios en la aplicación.
Desarrollador (es) | Nvidia |
---|---|
Lanzamiento estable | 7.3 / 16 de abril de 2021 |
Escrito en | C / C ++ |
Sistema operativo | Linux , OS X , Windows 7 y posteriores |
Tipo | trazado de rayos |
Licencia | software propietario , gratuito para uso comercial |
Sitio web | Sitio para desarrolladores de NVIDIA OptiX |
Por lo general, los videojuegos utilizan la rasterización en lugar del trazado de rayos para su renderizado.
Según Nvidia , OptiX está diseñado para ser lo suficientemente flexible para "definiciones de procedimiento y enfoques de representación híbrida". Además de la representación de gráficos por computadora , OptiX también ayuda en el diseño óptico y acústico , la investigación electromagnética y de radiación , [2] consultas de inteligencia artificial y análisis de colisiones . [3]
Trazado de rayos con OptiX
OptiX funciona mediante el uso de instrucciones proporcionadas por el usuario (en forma de núcleos CUDA ) con respecto a lo que debe hacer un rayo en circunstancias particulares para simular un proceso de rastreo completo. [4]
Un rayo de luz (o quizás otro tipo de rayo) puede tener un comportamiento diferente cuando golpea una superficie en particular en lugar de otra, OptiX permite personalizar estas condiciones de impacto con programas proporcionados por el usuario. Estos programas están escritos en CUDA C o directamente en código PTX y están vinculados cuando los utiliza el motor OptiX.
Para utilizar OptiX, debe haber una GPU compatible con CUDA disponible en el sistema y el kit de herramientas CUDA debe estar instalado.
El uso del motor OptiX en una aplicación de trazado de rayos generalmente implica los siguientes pasos:
- Definición de programas para la generación de rayos (por ejemplo, los rayos se pueden disparar en paralelo, en perspectiva o como un campo degradado ), falta de rayo (cuando un rayo no se cruza con ningún objeto), un programa de excepción opcional (cuando el rayo no se puede disparar por alguna razón), un programa de cuadro delimitador (el programa que proporciona una prueba de intersección de cuadro delimitador para un objeto dado) y un programa de intersección.
Hay varios ejemplos de estos programas disponibles con el SDK del programa.
// Código de muestra usando las API OptiX /// * Programa de generación de rayos * / rtProgramCreateFromPTXFile ( * context , path_to_ptx , "pinhole_camera" , & ray_gen_program ); rtContextSetRayGenerationProgram ( * contexto , 0 , ray_gen_program );/ * Miss programa * / rtProgramCreateFromPTXFile ( * context , path_to_ptx , "miss" , & miss_program ); rtContextSetMissProgram ( * contexto , 0 , miss_program );/ * Cuadro delimitador y programa de intersección * / rtProgramCreateFromPTXFile ( context , path_to_ptx , "box_bounds" , & box_bounding_box_program ); rtGeometrySetBoundingBoxProgram ( * caja , box_bounding_box_program ); rtProgramCreateFromPTXFile ( contexto , ruta_a_ptx , "box_intersect" , & box_intersection_program ); rtGeometrySetIntersectionProgram ( * cuadro , cuadro_programa_intersección );
Los programas de cuadro delimitador se utilizan para definir volúmenes delimitadores utilizados para acelerar el proceso de trazado de rayos dentro de estructuras de aceleración como árboles kd o jerarquías de volumen delimitador
- Crear material programas de cualquier impacto y impacto más cercano: estos dos programas determinan el comportamiento de un rayo al encontrar su primera intersección (impacto más cercano) o una intersección genérica (cualquier impacto)
// Código de muestra usando las API OptiX //rtProgramCreateFromPTXFile ( contexto , ruta_a_ptx , "más cercana_hit_radiancia" , & más cercano_hit_program ); rtProgramCreateFromPTXFile ( contexto , path_to_ptx , "any_hit_shadow" , y any_hit_program );/ * Asociar el hit más cercano y cualquier programa de hit con un material * / rtMaterialCreate ( contexto , material ); rtMaterialSetClosestHitProgram ( * material , 0 , programa_golpe_más_cercano ); rtMaterialSetAnyHitProgram ( * material , 1 , any_hit_program );
- Defina búferes , variables que se pueden usar dentro de los programas proporcionados. Los búferes son áreas de memoria que permiten que el código de host (es decir, el código de CPU normal ) se comunique con el código del dispositivo (es decir, el código que se ejecuta en la GPU ) y viceversa. Las variables son la forma interna de OptiX de comunicarse y utilizar búferes para transferir datos de un lado a otro.
- Defina la jerarquía OptiX de objetos geométricos, grupos, selectores y otros nodos para generar un gráfico de árbol de toda la escena que se va a renderizar.
Para renderizar una escena compleja o trazar diferentes caminos para cualquier rayo, OptiX aprovecha la computación GPGPU al explotar la plataforma NVIDIA CUDA . Dado que el proceso de disparar rayos y establecer su comportamiento es altamente personalizable, OptiX se puede utilizar en una variedad de otras aplicaciones además del trazado de rayos.
OptiX Prime
A partir de OptiX 3.5.0, se agregó una segunda biblioteca llamada OptiX Prime al paquete que tiene como objetivo proporcionar una API rápida de bajo nivel para el trazado de rayos: construir la estructura de aceleración , atravesar la estructura de aceleración y la intersección de triángulo de rayos . Prime también presenta una reserva de CPU cuando no se encuentra una GPU compatible en el sistema. A diferencia de OptiX, Prime no es una API programable, por lo que carece de soporte para primitivas y sombreados personalizados que no sean triángulos. Al no ser programable, OptiX Prime no encapsula todo el algoritmo del que forma parte el trazado de rayos. Por lo tanto, Prime no puede recompilar el algoritmo para nuevas GPU, refactorizar el cálculo para el rendimiento o usar un dispositivo de red como Quadro VCA, etc.
Software que utiliza OptiX
- Blender tiene soporte OptiX desde la versión 2.81 (7.1 en 2.92) [5]
- El complemento de Blender D-NOISE utiliza binarios OptiX para la eliminación de ruido acelerada por IA [6]
- FurryBall : renderizador de fotogramas finales con calidad de producción de GPU en tiempo real avanzado que utiliza raytrace y rasterize, basado en Nvidia OptiX
- En SIGGRAPH 2011, Adobe presentó OptiX en una demostración de tecnología de trazado de rayos GPU para gráficos en movimiento. [7]
- En SIGGRAPH 2013, OptiX se presentó en la herramienta de vista previa de iluminación basada en GPU en tiempo real de Pixar .
- OptiX se ha integrado en la biblioteca de desarrolladores de GameWorks junto con PhysX y otros motores y marcos gráficos impulsados por CUDA . [8]
- Adobe After Effects CC [9]
- Daz Studio tenía OptiX Prime Acceleration desde su integración con Iray, sin embargo, se eliminó el soporte en la versión 4.12.1.8 [10]
- Luxrender 2.5: hasta un 600% de aceleración [11]
Referencias
- ^ "Programación en OptiX, el motor de trazado de rayos de Nvidia" (PDF) . 15 de agosto de 2009.
- ^ Felbecker, Robert; Raschkowski, Leszek; Keusgen, Wilhelm; Peter, Michael (2012). "Propagación de ondas electromagnéticas en la banda de ondas milimétricas utilizando el motor de trazado de rayos NVIDIA OptiX GPU". 2012 VI Congreso Europeo de Antenas y Propagación (EUCAP) . IEEE Xplore. págs. 488–492. doi : 10.1109 / EuCAP.2012.6206198 . ISBN 978-1-4577-0920-3.
- ^ Steven G. Parker; Heiko Friedrich; David Luebke; Keith Morley; James Bigler; Jared Hoberock; David McAllister; Austin Robison; Andreas Dietrich; Greg Humphreys; Morgan McGuire; Martin Stich (2013). "Revista Comunicaciones del ACM - GPU ray tracing" . Comunicaciones de la ACM . ACM . Consultado el 14 de agosto de 2013 .
- ^ Steven G. Parker; Heiko Friedrich; David Luebke; Keith Morley; James Bigler; Jared Hoberock; David McAllister; Austin Robison; Andreas Dietrich; Greg Humphreys; Morgan McGuire; Martin Stich (2010). "OptiX: un motor de trazado de rayos de propósito general" . Transacciones ACM en gráficos (Tog) . ACM. doi : 10.1145 / 1778765.1778803 . Consultado el 14 de agosto de 2013 .
- ^ "Puntos de referencia de Blender 2.81 en 19 tarjetas gráficas NVIDIA: el rendimiento de renderizado RTX OptiX es increíble" . phoronix.com. 2019 . Consultado el 26 de noviembre de 2019 .
- ^ "D-NOISE: Rapid AI Denoising para Blender" . Remington Creative . 20 de julio de 2019 . Consultado el 14 de diciembre de 2019 .
- ^ "Adobe presenta OptiX en una demostración de tecnología para gráficos en movimiento de trazado de rayos con GPU" . NVIDIA. 2013 . Consultado el 14 de agosto de 2013 .
- ^ "Nvidia anuncia el programa Gameworks en Montreal 2013; es compatible con SteamOS" . NVIDIA. 2013 . Consultado el 29 de octubre de 2013 .
- ^ "Cambios de GPU (para CUDA y OpenGL) en After Effects CC (12.1) | Región de interés de After Effects" . Consultado el 22 de febrero de 2015 .
- ^ "Registro de cambios de Daz Studio" . DAZ 3D . Consultado el 14 de diciembre de 2019 .
- ^ https://luxcorerender.org/new-features-in-v2-5/
enlaces externos
- Página principal del motor de aceleración de aplicaciones NVIDIA OptiX
- Guía de programación OptiX y OptiX SDK
- Foro de soporte OptiX
- Código de tutorial del curso OptiX 7