Articulo de referencia

OptiX

Nvidia OptiX ( OptiX Application Acceleration Engine ) es una API de trazado de rayos que se desarrolló por primera vez alrededor de 2009. [1] Los cálculos se descargan a las GP...

Nvidia OptiX ( OptiX Application Acceleration Engine ) es una API de trazado de rayos que se desarrolló por primera vez alrededor de 2009. [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 "algoritmo", lo que significa que está diseñada para encapsular todo el algoritmo del cual el trazado de rayos es una parte, no solo el trazado de rayos en sí. Esto tiene como objetivo permitir que el motor OptiX ejecute el algoritmo más grande con gran flexibilidad sin cambios del lado de la aplicación.

Comúnmente, los videojuegos utilizan rasterización en lugar de trazado de rayos para su renderizado.

Según Nvidia , OptiX está diseñado para ser lo suficientemente flexible para "definiciones procedimentales y enfoques de renderizado híbrido". Además de la renderización de gráficos por computadora , OptiX también ayuda en el diseño óptico y acústico , la investigación sobre radiación y electromagnetismo , [2] consultas de inteligencia artificial y análisis de colisiones . [3]

Trazado de rayos con OptiX

Un conjunto de Julia dibujado con Nvidia OptiX (esta es una muestra del SDK ).

OptiX funciona utilizando instrucciones proporcionadas por el usuario (en forma de núcleos CUDA ) sobre lo que debe hacer un rayo en circunstancias particulares para simular un proceso de seguimiento completo. [4]

Un rayo de luz (o quizás otro tipo de rayo) puede tener un comportamiento diferente al impactar 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 se vinculan entre sí cuando se utilizan con el motor OptiX.

Para poder utilizar OptiX, debe haber una GPU compatible con CUDA disponible 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 (por ejemplo, los rayos se pueden disparar en paralelo, en forma de perspectiva o como un campo de gradiente ), rayo faltante (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 determinado) y un programa de intersección.

Hay varios ejemplos de estos programas disponibles con el SDK del programa.

// Código de muestra que utiliza las API de OptiX //

/* Programa de generación de rayos */ 
rtProgramCreateFromPTXFile ( * contexto , ruta_a_ptx , "cámara_pinhole" , & programa_generación_ray ); rtContextSetRayGenerationProgram ( * contexto , 0 , programa_generación_ray );     
    

/* Programa perdido */ 
rtProgramCreateFromPTXFile ( * contexto , ruta_a_ptx , "perdido" , & programa_perdido ); rtContextSetMissProgram ( * contexto , 0 , programa_perdido );     
    

/* Programa de cuadro delimitador e intersección */ 
rtProgramCreateFromPTXFile ( contexto , ruta_a_ptx , "límites_de_cuadro" , & programa_de_cuadro_delimitador_de_cuadro ); rtGeometrySetBoundingBoxProgram ( * cuadro , programa_de_cuadro_delimitador_de_cuadro ) ; rtProgramCreateFromPTXFile ( contexto , ruta_a_ptx , "intersección_de_cuadro " , & programa_de_intersección_de_cuadro ); rtGeometrySetIntersectionProgram ( * cuadro , programa_de_intersección_de_cuadro );     
   
     
   

Los programas de cuadros delimitadores 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 volúmenes delimitadores.

  • Crear material para cualquier programa de impacto y de impacto más cercano: estos dos programas determinan el comportamiento de un rayo cuando encuentra su primera intersección (impacto más cercano) o una intersección genérica (cualquier impacto)
// Código de muestra que utiliza las API de OptiX //

rtProgramCreateFromPTXFile ( contexto , ruta_a_ptx , "radiancia_de_impacto_más_cercano" , y programa_de_impacto_más_cercano ); rtProgramCreateFromPTXFile ( contexto , ruta_a_ptx , "cualquier_sombra_de_impacto" , y cualquier_programa_de_impacto );     
     

/* Asociar el impacto más cercano y cualquier programa de impacto con un material */ 
rtMaterialCreate ( context , material ); rtMaterialSetClosestHitProgram ( * material , 0 , nearest_hit_program ); rtMaterialSetAnyHitProgram ( * material , 1 , any_hit_program );   
    
    
  • Defina los buffers , variables que pueden usarse dentro de los programas suministrados. Los buffers 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 comunicación de OptiX y el uso de buffers para transferir datos de ida y vuelta.
  • Defina la jerarquía OptiX de objetos de geometría, grupos, selectores y otros nodos para generar un gráfico de árbol de toda la escena que se va a renderizar.
Un árbol gráfico de muestra para Nvidia OptiX

Para renderizar una escena compleja o trazar diferentes rutas 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 utilizar en una variedad de otras aplicaciones además del trazado de rayos.

OptiX Prime

A partir de OptiX 3.5.0, se agregó al paquete una segunda biblioteca llamada OptiX Prime, cuyo objetivo es proporcionar una API rápida de bajo nivel para el trazado de rayos: creación de la estructura de aceleración , recorrido de la estructura de aceleración e intersección de rayos y triángulos . Prime también cuenta con una CPU de reserva 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 sombreado 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 volver a compilar el algoritmo para nuevas GPU, refactorizar el cálculo para mejorar el rendimiento o usar un dispositivo de red como Quadro VCA, etc.

Software que utiliza OptiX

  • Blender tiene soporte para OptiX desde la versión 2.81 (7.1 en 2.92) [5]
  • El complemento Blender D-NOISE utiliza binarios OptiX para la eliminación de ruido acelerada por IA [6]
  • En SIGGRAPH 2011, Adobe presentó OptiX en una demostración de tecnología de trazado de rayos de 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 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

Referencias

  1. ^ "Programación en OptiX, el motor de trazado de rayos de Nvidia" (PDF) . 15 de agosto de 2009.
  2. ^ 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 de la GPU NVIDIA OptiX". 2012 6th European Conference on Antennas and Propagation (EUCAP) . IEEE Xplore. págs.  488– 492. doi :10.1109/EuCAP.2012.6206198. ISBN 978-1-4577-0920-3.S2CID 45563615  .
  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 Communications of the ACM - GPU ray tracing". Comunicaciones de la ACM . 56 (5). ACM: 93– 101. doi :10.1145/2447976.2447997. S2CID  17174671 . Consultado el 14 de agosto de 2013 .
  4. ^ Steven G. Parker; James Bigler; Andreas Dietrich; Heiko Friedrich; Jared Hoberock; David Luebke; David McAllister; Morgan McGuire; Keith Morely; Austin Robison; Martin Stich (2010). "OptiX: un motor de trazado de rayos de propósito general". ACM Transactions on Graphics . 29 (4). ACM: 66:1–66:13. doi :10.1145/1778765.1778803 . Consultado el 14 de agosto de 2013 .
  5. ^ "Puntos de referencia de Blender 2.81 en 19 tarjetas gráficas NVIDIA: el rendimiento de renderizado de RTX OptiX es increíble". 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 muestra OptiX en una demostración tecnológica para gráficos en movimiento con trazado de rayos con GPU". NVIDIA. 2013. Archivado desde el original el 20 de diciembre de 2021. Consultado el 14 de agosto de 2013 .
  8. ^ "Nvidia anuncia el programa Gameworks en Montreal 2013; es compatible con SteamOS". NVIDIA. 2013. Archivado desde el original el 1 de noviembre de 2013. Consultado el 29 de octubre de 2013 .
  9. ^ "Cambios en la 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 .
  10. ^ "Registro de cambios de Daz Studio". DAZ 3D . Consultado el 14 de diciembre de 2019 .
  11. ^ "Nuevas funciones en v2.5 – LuxCoreRender".
  • Página principal del motor de aceleración de aplicaciones NVIDIA OptiX
  • Guía de programación de OptiX y SDK de OptiX
  • Foro de soporte de OptiX
  • Código del tutorial del curso OptiX 7
Obtenido de "https://es.wikipedia.org/w/index.php?title=OptiX&oldid=1258362928"