Nvidia OptiX (Motor de Aceleración de Aplicaciones OptiX) es una API de trazado de rayos que se desarrolló por primera vez alrededor de 2009.[1]​ Los cálculos se descargan en las GPU a través de la API de bajo o 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 el lado de la aplicación.

Nvidia OptiX
Información general
Tipo de programa Trazado de rayos
Autor Nvidia
Desarrollador Nvidia
Lanzamiento inicial 2009 (15 años)
Licencia Software propietario, Gratis para uso comercial
Información técnica
Programado en
Plataformas admitidas Linux, OS X, Windows 7 en adelante
Versiones
Última versión estable 7.7 ( 28 de marzo de 2023)
Enlaces

Comúnmente, los videojuegos usan 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 procedimientos y enfoques de renderizado híbrido". 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

editar
 
Un set de Julia dibujado con NVIDIA OptiX. (Esta es una muestra del SDK.)

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 entre sí cuando los utiliza el motor OptiX.

Para usar OptiX, debe haber disponible una GPU compatible con CUDA en el sistema y debe estar instalado el kit de herramientas CUDA.

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 (p. ej., los rayos se pueden disparar en paralelo, en perspectiva o como un campo degradado), rayos perdidos (cuando un rayo no interseca 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.

Varios ejemplos de estos programas están disponibles con el SDK del programa

// Sample code using OptiX APIs //

/* Ray generation program */
rtProgramCreateFromPTXFile( *context, path_to_ptx, "pinhole_camera", &ray_gen_program );
rtContextSetRayGenerationProgram( *context, 0, ray_gen_program );

/* Miss program */
rtProgramCreateFromPTXFile( *context, path_to_ptx, "miss", &miss_program );
rtContextSetMissProgram( *context, 0, miss_program );

/* Bounding box and intersection program */
rtProgramCreateFromPTXFile( context, path_to_ptx, "box_bounds", &box_bounding_box_program );
rtGeometrySetBoundingBoxProgram( *box, box_bounding_box_program );
rtProgramCreateFromPTXFile( context, path_to_ptx, "box_intersect", &box_intersection_program );
rtGeometrySetIntersectionProgram( *box, box_intersection_program );

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

  • Programas de creación de material de cualquier golpe y golpe más cercano: estos dos programas determinan el comportamiento de un rayo cuando se encuentra con su primera intersección (golpe más cercano) o una intersección genérica (cualquier golpe)
// Sample code using OptiX APIs //

rtProgramCreateFromPTXFile( context, path_to_ptx, "closest_hit_radiance", &closest_hit_program );
rtProgramCreateFromPTXFile( context, path_to_ptx, "any_hit_shadow", &any_hit_program );

/* Associate closest hit and any hit program with a material */
rtMaterialCreate( context, material );
rtMaterialSetClosestHitProgram( *material, 0, closest_hit_program );
rtMaterialSetAnyHitProgram( *material, 1, any_hit_program );
  • Defina buffers, variables que podrían usarse dentro de los programas suministrados. Los búferes son áreas de memoria que permiten que el código del host (es decir, el código normal de la CPU) 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 usar 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 representará
 
Un árbol gráfico de muestra para NVIDIA OptiX

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 configurar su comportamiento es altamente personalizable, OptiX se puede usar en una variedad de otras aplicaciones además del trazado de rayos.

OptiX Prime

editar

A partir de OptiX 3.5.0, se agregó al paquete una segunda biblioteca llamada OptiX Prime 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 del triángulo de rayos. Prime también cuenta con un respaldo 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 primitivos y sombreados personalizados que no sean triangulares. 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 volver a compilar el algoritmo para nuevas GPU, refactorizar el cálculo para el rendimiento o usar un dispositivo de red como Quadro VCA, etc.

Software usando OptiX

editar
  • 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: Procesador avanzado de fotogramas finales con calidad de producción de GPU en tiempo real que utiliza trazado de rayos y rasterización, basado en Nvidia OptiX.
  • En SIGGRAPH 2011, Adobe presentó OptiX en una demostración de tecnología de GPU ray tracing 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 de gráficos con tecnología CUDA.[8]
  • Adobe After Effects CC[9]
  • Daz Studio tenía OptiX Prime Acceleration desde su integración con Iray, sin embargo, el soporte se eliminó en la versión 4.12.1.8[10]
  • Luxrender 2.5: hasta un 600 % de aceleración[11]

Véase también

editar

Referencias

editar
  1. «Scheduling in OptiX, the Nvidia ray tracing engine». 15 de agosto de 2009. 
  2. Felbecker, Robert; Raschkowski, Leszek; Keusgen, Wilhelm; Peter, Michael (2012). «Electromagnetic wave propagation in the millimeter wave band using the NVIDIA OptiX GPU ray tracing engine». 2012 6th European Conference on Antennas and Propagation (EUCAP). IEEE Xplore. pp. 488-492. ISBN 978-1-4577-0920-3. doi:10.1109/EuCAP.2012.6206198. 
  3. Steven G. Parker; Heiko Friedrich; David Luebke; Keith Morley; James Bigler; Jared Hoberock; David McAllister; Austin Robison et al. (2013). «Magazine Communications of the ACM - GPU ray tracing». Communications of the ACM (ACM) 56 (5): 93-101. doi:10.1145/2447976.2447997. Consultado el 14 de agosto de 2013. 
  4. Steven G. Parker; Heiko Friedrich; David Luebke; Keith Morley; James Bigler; Jared Hoberock; David McAllister; Austin Robison et al. (2010). «OptiX: a general purpose ray tracing engine». ACM Transactions on Graphics (ACM) 29 (4): 66:1-66:13. doi:10.1145/1778765.1778803. Consultado el 14 de agosto de 2013. 
  5. «Blender 2.81 Benchmarks On 19 NVIDIA Graphics Cards - RTX OptiX Rendering Performance Is Incredible». phoronix.com. 2019. Consultado el 26 de noviembre de 2019. 
  6. «D-NOISE: Rapid AI Denoising for Blender». Remington Creative. 20 de julio de 2019. Consultado el 14 de diciembre de 2019. 
  7. «Adobe showcasing OptiX in a technology demo for ray tracing motion graphics with GPUs». NVIDIA. 2013. Archivado desde el original el 30 de marzo de 2023. Consultado el 14 de agosto de 2013. 
  8. «Nvidia announces Gameworks Program at Montreal 2013; supports SteamOS». NVIDIA. 2013. Archivado desde el original el 1 de noviembre de 2013. Consultado el 29 de octubre de 2013. 
  9. «GPU changes (for CUDA and OpenGL) in After Effects CC (12.1) After Effects region of interest». Consultado el 22 de febrero de 2015. 
  10. «Daz Studio Changelog». DAZ 3D. Consultado el 14 de diciembre de 2019. 
  11. «New Features in v2.5 – LuxCoreRender». 

Enlaces externos

editar