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 (16 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 | ||
Sitio web oficial
| ||
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]
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:
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
// 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 );
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.
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.