OptiX

NVIDIA OptiX
Utvecklare Nvidia
Stabil frisättning
7.6 / 24 oktober 2022 ( 2022-10-24 )
Skrivet i C / C++
Operativ system Linux , OS X , Windows 7 och senare
Typ Ray spårning
Licens proprietär programvara , gratis för kommersiellt bruk
Hemsida NVIDIA OptiX utvecklarwebbplats

Nvidia OptiX ( OptiX Application Acceleration Engine ) är ett ray tracing API som först utvecklades runt 2009. Beräkningarna överförs till GPU :erna genom antingen lågnivå- eller högnivå- API :et som introducerades med CUDA . CUDA är endast tillgängligt för Nvidias grafikprodukter. Nvidia OptiX är en del av Nvidia GameWorks . OptiX är ett API på hög nivå, eller "till-algoritmen", vilket betyder att det är designat för att kapsla in hela algoritmen som strålspårning är en del av, inte bara själva strålspårningen. Detta är tänkt att tillåta OptiX-motorn att exekvera den större algoritmen med stor flexibilitet utan ändringar på applikationssidan.

Vanligtvis använder videospel rastrering snarare än ray tracing för sin rendering.

Enligt Nvidia är OptiX utformad för att vara tillräckligt flexibel för "procedurdefinitioner och hybridrenderingsmetoder." Förutom datorgrafikrendering hjälper OptiX också till med optisk och akustisk design, strålnings- och elektromagnetisk forskning, artificiell intelligensfrågor och kollisionsanalys .

Strålspårning med OptiX

Ett Julia-set ritat med NVIDIA OptiX. (Detta är ett exempel på SDK .)

OptiX fungerar genom att använda instruktioner från användaren (i form av CUDA- kärnor) angående vad en stråle ska göra under speciella omständigheter för att simulera en fullständig spårningsprocess.

En ljusstråle (eller kanske en annan sorts stråle) kan ha ett annat beteende när den träffar en viss yta snarare än en annan, OptiX tillåter att anpassa dessa träffförhållanden med program som tillhandahålls av användaren. Dessa program är skrivna i CUDA C eller direkt i PTX- kod och länkas samman när de används av OptiX-motorn.

För att kunna använda OptiX måste en CUDA -kapabel GPU vara tillgänglig på systemet och CUDA-verktygssatsen måste vara installerad.

Att använda OptiX-motorn i en strålspårningsapplikation innebär vanligtvis följande steg:

  • Definiera program för strålgenerering (t.ex. strålar kan skjutas parallellt, i perspektiv eller som ett gradientfält ), stråle saknas (när en stråle inte skär något objekt), ett valfritt undantagsprogram (när strålen inte kan skjutas av någon anledning), ett bounding box -program (programmet som tillhandahåller ett bounding box-skärningstest för ett givet objekt) och ett intersektionsprogram.

Flera exempel för dessa program finns tillgängliga med programmets SDK




     
  0  


     
  0  


     
   
     
    // Exempelkod med OptiX API:er //  /* Ray-genereringsprogram */  rtProgramCreateFromPTXFile  (  *  context  ,  path_to_ptx  ,  "pinhole_camera"  ,  &  ray_gen_program  );  rtContextSetRayGenerationProgram  (  *  kontext  ,  ,  ray_gen_program  );  /* Miss program */  rtProgramCreateFromPTXFile  (  *  context  ,  path_to_ptx  ,  "miss"  ,  &  miss_program  );  rtContextSetMissProgram  (  *  kontext  ,  ,  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  ); 

Bounding box-program används för att definiera bounding volymer som används för att accelerera strålspårningsprocessen inom accelerationsstrukturer som kd-träd eller bounding volym hierarkier

  • Skapa material med alla träff- och närmaste träff-program: dessa två program bestämmer ett strålbeteende när de stöter på dess första korsning (närmaste träff) eller en generisk korsning (valfri träff)


     
     


   
  0  
     // Exempelkod med OptiX API:er //  rtProgramCreateFromPTXFile  (  context  ,  path_to_ptx  ,  "closest_hit_radiance"  ,  &  closest_hit_program  );  rtProgramCreateFromPTXFile  (  context  ,  path_to_ptx  ,  "any_hit_shadow"  &  any_hit_program  )  ;  /* Associera närmaste träff och alla träffprogram med ett material */  rtMaterialCreate  (  kontext  ,  material  );  rtMaterialSetClosestHitProgram  (  *  material  ,  ,  closest_hit_program  );  rtMaterialSetAnyHitProgram  (  *  material  ,  1  ,  any_hit_program  ); 
  • Definiera buffertar , variabler som kan användas i de medföljande programmen. Buffertar är minnesområden som tillåter värdkod (dvs normal CPU- kod) att kommunicera med enhetskod (dvs koden som exekveras på GPU ) och vice versa. Variabler är OptiX:s interna sätt att kommunicera och använda buffertar för att överföra data fram och tillbaka.
  • Definiera OptiX-hierarkin av geometriobjekt, grupper, väljare och andra noder för att generera en trädgraf över hela scenen som ska renderas
Ett exempel på grafträd för NVIDIA OptiX

För att rendera en komplex scen eller spåra olika vägar för alla strålar drar OptiX fördel av GPGPU- beräkningar genom att utnyttja NVIDIA CUDA -plattformen. Eftersom processen att skjuta strålar och ställa in deras beteende är mycket anpassningsbar, kan OptiX användas i en mängd andra applikationer förutom strålspårning.

OptiX Prime

Från och med OptiX 3.5.0 lades ett andra bibliotek kallat OptiX Prime till paketet som syftar till att tillhandahålla ett snabbt lågnivå- API för strålspårning - bygga accelerationsstrukturen , korsa accelerationsstrukturen och stråltriangelkorsningen . Prime har också en CPU-backup när ingen kompatibel GPU hittas på systemet. Till skillnad från OptiX är Prime inte ett programmerbart API, så det saknar stöd för anpassade, icke-triangelprimitiv och skuggning. Eftersom OptiX Prime inte är programmerbar, kapslar inte in hela algoritmen som strålspårning är en del av. Därför kan Prime inte kompilera om algoritmen för nya GPU:er, refaktorera beräkningen för prestanda eller använda en nätverksapparat som Quadro VCA, etc.

Programvara som använder OptiX

  • Blender har OptiX-stöd sedan version 2.81 (7.1 i 2.92)
  • Blender-tillägget D-NOISE använder OptiX-binärer för AI-accelererad denoising
  • FurryBall - Avancerad realtids-GPU-produktionskvalitet för slutbildsrenderare med raytrace såväl som rastrering - baserad på Nvidia OptiX
  • SIGGRAPH 2011 visade Adobe upp OptiX i en teknikdemo av GPU-strålspårning för rörlig grafik.
  • SIGGRAPH 2013 presenterades OptiX i Pixars GPU-baserade realtidsförhandsgranskningsverktyg för belysning.
  • OptiX har integrerats i GameWorks utvecklarbibliotek tillsammans med PhysX och andra CUDA- drivna grafikmotorer och ramverk.
  • Adobe After Effects CC
  • Daz Studio hade OptiX Prime Acceleration sedan sin Iray-integrering, men stöd togs bort i version 4.12.1.8
  • Luxrender 2.5: upp till 600 % acceleration

Se även

externa länkar