OptiX: Difference between revisions
UserTwoSix (talk | contribs) →Software using OptiX: see also |
m unpiped links using script |
||
(16 intermediate revisions by 13 users not shown) | |||
Line 1: | Line 1: | ||
⚫ | |||
{{Short description|Nvidia ray tracing API using CUDA to compute on GPUs}} |
{{Short description|Nvidia ray tracing API using CUDA to compute on GPUs}} |
||
⚫ | |||
{{Infobox software |
{{Infobox software |
||
| name = |
| name = Nvidia OptiX |
||
| logo = OptiX logo.png |
| logo = OptiX logo.png |
||
| logo caption = |
| logo caption = Official logo |
||
| logo size = 200px |
| logo size = 200px |
||
| screenshot = |
| screenshot = |
||
Line 11: | Line 11: | ||
| programming language = [[C (programming language)|C]] / [[C++]] |
| programming language = [[C (programming language)|C]] / [[C++]] |
||
| genre = [[Ray tracing (graphics)|Ray tracing]] |
| genre = [[Ray tracing (graphics)|Ray tracing]] |
||
| license = [[ |
| license = [[Proprietary software]], free for commercial use |
||
| website = [https://developer.nvidia.com/optix |
| website = [https://developer.nvidia.com/optix Nvidia OptiX developer site] |
||
| latest_release_version = |
| latest_release_version = 8.0 |
||
| latest_release_date = {{ |
| latest_release_date = {{Start date|2023|08}} |
||
| operating_system = [[Linux]], [[OS X]], [[Windows 7]] and later |
| operating_system = [[Linux]], [[OS X]], [[Windows 7]] and later |
||
}} |
}} |
||
'''Nvidia OptiX''' ('''OptiX Application Acceleration Engine''') is a [[Ray tracing (graphics)|ray tracing]] [[ |
'''Nvidia OptiX''' ('''OptiX Application Acceleration Engine''') is a [[Ray tracing (graphics)|ray tracing]] [[API]] that was first developed around 2009.<ref>{{cite web |url=http://highperformancegraphics.org/previous/www_2009/presentations/nvidia-rt.pdf |title=Scheduling in OptiX, the Nvidia ray tracing engine |date=2009-08-15}}</ref> The computations are offloaded to the [[GPU]]s through either the low-level or the high-level [[API]] introduced with [[CUDA]]. CUDA is only available for Nvidia's graphics products. Nvidia OptiX is part of [[Nvidia GameWorks]]. OptiX is a high-level, or "to-the-algorithm" API, meaning that it is designed to encapsulate the entire algorithm of which ray tracing is a part, not just the ray tracing itself. This is meant to allow the OptiX engine to execute the larger algorithm with great flexibility without application-side changes. |
||
Commonly, video games use [[Rendering (computer graphics)#rasterisation|rasterization]] rather than ray |
Commonly, video games use [[Rendering (computer graphics)#rasterisation|rasterization]] rather than ray tracing for their rendering. |
||
According to [[Nvidia]], OptiX is designed to be flexible enough for "procedural definitions and hybrid rendering approaches |
According to [[Nvidia]], OptiX is designed to be flexible enough for "procedural definitions and hybrid rendering approaches". Aside from [[computer graphics]] rendering, OptiX also helps in [[optical]] and [[acoustical]] design, [[radiation]] and [[electromagnetic radiation|electromagnetic]] research,<ref>{{cite book|chapter=Electromagnetic wave propagation in the millimeter wave band using the NVIDIA OptiX GPU ray tracing engine|title=2012 6th European Conference on Antennas and Propagation (EUCAP)|year=2012|publisher=IEEE Xplore|doi=10.1109/EuCAP.2012.6206198|isbn=978-1-4577-0920-3|last1=Felbecker|first1=Robert|last2=Raschkowski|first2=Leszek|last3=Keusgen|first3=Wilhelm|last4=Peter|first4=Michael|pages=488–492|s2cid=45563615}}</ref> [[artificial intelligence]] queries and [[collision]] analysis.<ref>{{cite journal|url=https://dl.acm.org/citation.cfm?id=2447976.2447997|title=Magazine Communications of the ACM - GPU ray tracing|author1=Steven G. Parker|author2=Heiko Friedrich|year=2013|publisher=ACM|access-date=2013-08-14|author3=David Luebke|author4=Keith Morley|author5=James Bigler|author6=Jared Hoberock|author7=David McAllister|author8=Austin Robison|author9=Andreas Dietrich|author10=Greg Humphreys|author11=Morgan McGuire|author12=Martin Stich|journal=Communications of the ACM|volume=56|issue=5|pages=93–101|doi=10.1145/2447976.2447997|s2cid=17174671}}</ref> |
||
== Ray tracing with OptiX == |
== Ray tracing with OptiX == |
||
[[Image:OptiX Julia set.png|thumb|left|A [[Julia set]] drawn with NVIDIA OptiX |
[[Image:OptiX Julia set.png|thumb|left|A [[Julia set]] drawn with NVIDIA OptiX (This is a sample of the [[Software development kit|SDK]].)]] |
||
OptiX works by using user-supplied instructions (in the form of [[CUDA]] kernels) regarding what a ray should do in particular circumstances to simulate a complete tracing process.<ref>{{cite journal |
OptiX works by using user-supplied instructions (in the form of [[CUDA]] kernels) regarding what a ray should do in particular circumstances to simulate a complete tracing process.<ref>{{cite journal |author1=Steven G. Parker |author2=James Bigler |author3=Andreas Dietrich |author4=Heiko Friedrich |author5=Jared Hoberock |author6=David Luebke |author7=David McAllister |author8=Morgan McGuire |author9=Keith Morely |author10=Austin Robison |author11=Martin Stich |author12= |year=2010 |title=OptiX: a general purpose ray tracing engine |url=https://dl.acm.org/citation.cfm?id=1778803 |journal=ACM Transactions on Graphics |publisher=ACM |volume=29 |issue=4 |pages=66:1–66:13 |doi=10.1145/1778765.1778803 |access-date=2013-08-14}}</ref> |
||
A light ray (or perhaps another kind of ray) might have a different behavior when hitting a particular surface rather than another one, OptiX allows to customize these hit conditions with user-provided programs. These programs are written in [[CUDA C]] or directly in [[Parallel Thread Execution|PTX]] code and are linked together when used by the OptiX engine. |
A light ray (or perhaps another kind of ray) might have a different behavior when hitting a particular surface rather than another one, OptiX allows to customize these hit conditions with user-provided programs. These programs are written in [[CUDA C]] or directly in [[Parallel Thread Execution|PTX]] code and are linked together when used by the OptiX engine. |
||
Line 71: | Line 71: | ||
</syntaxhighlight> |
</syntaxhighlight> |
||
* Define [[Data buffer|buffer]]s, [[variable (computer science)|variable]]s that might be used inside the supplied programs. Buffers are memory areas that allow host code (i.e. normal [[ |
* Define [[Data buffer|buffer]]s, [[variable (computer science)|variable]]s that might be used inside the supplied programs. Buffers are memory areas that allow host code (i.e. normal [[CPU]] code) to communicate with device code (i.e. the code that gets executed on the [[GPU]]) and vice versa. Variables are OptiX's internal way of communicating and using buffers to transfer data back and forth. |
||
* Define the OptiX hierarchy of geometry objects, groups, selectors and other nodes to generate a tree graph of the entire scene to be rendered |
* Define the OptiX hierarchy of geometry objects, groups, selectors and other nodes to generate a tree graph of the entire scene to be rendered |
||
[[File:A sample OptiX© graph tree.png|thumb|A sample [[Tree graph|graph tree]] for |
[[File:A sample OptiX© graph tree.png|thumb|A sample [[Tree graph|graph tree]] for Nvidia OptiX]] |
||
In order to render a complex scene or trace different paths for any ray OptiX takes advantage of [[ |
In order to render a complex scene or trace different paths for any ray OptiX takes advantage of [[GPGPU]] computing by exploiting Nvidia [[CUDA]] platform. |
||
Since the process of shooting rays and setting their behavior is highly customizable, OptiX may be used in a variety of other applications aside from ray tracing. |
Since the process of shooting rays and setting their behavior is highly customizable, OptiX may be used in a variety of other applications aside from ray tracing. |
||
Line 85: | Line 85: | ||
*[[Blender (software)|Blender]] has OptiX support since version 2.81 (7.1 in 2.92) <ref>{{cite web|title=Blender 2.81 Benchmarks On 19 NVIDIA Graphics Cards - RTX OptiX Rendering Performance Is Incredible|publisher=phoronix.com|access-date=2019-11-26|year=2019|url=https://www.phoronix.com/scan.php?page=article&item=blender-281-optix&num=1}}</ref> |
*[[Blender (software)|Blender]] has OptiX support since version 2.81 (7.1 in 2.92) <ref>{{cite web|title=Blender 2.81 Benchmarks On 19 NVIDIA Graphics Cards - RTX OptiX Rendering Performance Is Incredible|publisher=phoronix.com|access-date=2019-11-26|year=2019|url=https://www.phoronix.com/scan.php?page=article&item=blender-281-optix&num=1}}</ref> |
||
* The Blender Add-on [https://remington.pro/software/blender/d-noise/ D-NOISE] uses OptiX binaries for AI-accelerated denoising<ref>{{cite web |title=D-NOISE: Rapid AI Denoising for Blender |url=https://remington.pro/software/blender/d-noise/ |website=Remington Creative |access-date=14 December 2019|date=July 20, 2019 }}</ref> |
* The Blender Add-on [https://remington.pro/software/blender/d-noise/ D-NOISE] uses OptiX binaries for AI-accelerated denoising<ref>{{cite web |title=D-NOISE: Rapid AI Denoising for Blender |url=https://remington.pro/software/blender/d-noise/ |website=Remington Creative |access-date=14 December 2019|date=July 20, 2019 }}</ref> |
||
⚫ | * At [[SIGGRAPH]] 2011 [[Adobe Systems|Adobe]] showcased OptiX in a technology demo of GPU ray tracing for motion graphics.<ref>{{cite web|title=Adobe showcasing OptiX in a technology demo for ray tracing motion graphics with GPUs|publisher=NVIDIA|access-date=2013-08-14|year=2013|url=https://www.youtube.com/watch?v=3IwgBYBXPOA |archive-url=https://ghostarchive.org/varchive/youtube/20211220/3IwgBYBXPOA |archive-date=2021-12-20 |url-status=live}}{{cbignore}}</ref> |
||
* [http://furryball.aaa-studio.eu/ FurryBall] - Advanced real-time GPU production quality final frame renderer using raytrace as well as rasterize - based on Nvidia OptiX |
|||
⚫ | * At [[SIGGRAPH]] 2011 [[Adobe Systems|Adobe]] showcased OptiX in a technology demo of GPU ray tracing for motion graphics.<ref>{{cite web|title=Adobe showcasing OptiX in a technology demo for ray tracing motion graphics with GPUs|publisher=NVIDIA|access-date=2013-08-14|year=2013|url=https://www.youtube.com/watch?v=3IwgBYBXPOA}}</ref> |
||
* At [[SIGGRAPH]] 2013 OptiX was featured in [[Pixar]]'s realtime, GPU-based lighting preview tool. |
* At [[SIGGRAPH]] 2013 OptiX was featured in [[Pixar]]'s realtime, GPU-based lighting preview tool. |
||
* OptiX has been integrated into the [[Nvidia GameWorks|GameWorks]] developers library along with [[PhysX]] and other [[CUDA]] powered graphics engines and frameworks.<ref>{{cite web|url=https://gearnuke.com/nvidia-announces-gameworks-program-montreal-2013-supports-steamos/|title=Nvidia announces Gameworks Program at Montreal 2013; supports SteamOS|year=2013|publisher=NVIDIA|access-date=2013-10-29}}</ref> |
* OptiX has been integrated into the [[Nvidia GameWorks|GameWorks]] developers library along with [[PhysX]] and other [[CUDA]] powered graphics engines and frameworks.<ref>{{cite web|url=https://gearnuke.com/nvidia-announces-gameworks-program-montreal-2013-supports-steamos/|title=Nvidia announces Gameworks Program at Montreal 2013; supports SteamOS|year=2013|publisher=NVIDIA|access-date=2013-10-29}}</ref> |
||
Line 96: | Line 95: | ||
* [[CUDA]] |
* [[CUDA]] |
||
* [[Nvidia RTX]] |
|||
* [[Heterogeneous-compute Interface for Portability|HIP]] |
|||
==References== |
==References== |
Revision as of 23:33, 20 July 2024
Developer(s) | Nvidia |
---|---|
Stable release | 8.0
/ August 2023 |
Written in | C / C++ |
Operating system | Linux, OS X, Windows 7 and later |
Type | Ray tracing |
License | Proprietary software, free for commercial use |
Website | Nvidia OptiX developer site |
Nvidia OptiX (OptiX Application Acceleration Engine) is a ray tracing API that was first developed around 2009.[1] The computations are offloaded to the GPUs through either the low-level or the high-level API introduced with CUDA. CUDA is only available for Nvidia's graphics products. Nvidia OptiX is part of Nvidia GameWorks. OptiX is a high-level, or "to-the-algorithm" API, meaning that it is designed to encapsulate the entire algorithm of which ray tracing is a part, not just the ray tracing itself. This is meant to allow the OptiX engine to execute the larger algorithm with great flexibility without application-side changes.
Commonly, video games use rasterization rather than ray tracing for their rendering.
According to Nvidia, OptiX is designed to be flexible enough for "procedural definitions and hybrid rendering approaches". Aside from computer graphics rendering, OptiX also helps in optical and acoustical design, radiation and electromagnetic research,[2] artificial intelligence queries and collision analysis.[3]
Ray tracing with OptiX
OptiX works by using user-supplied instructions (in the form of CUDA kernels) regarding what a ray should do in particular circumstances to simulate a complete tracing process.[4]
A light ray (or perhaps another kind of ray) might have a different behavior when hitting a particular surface rather than another one, OptiX allows to customize these hit conditions with user-provided programs. These programs are written in CUDA C or directly in PTX code and are linked together when used by the OptiX engine.
In order to use OptiX a CUDA-capable GPU must be available on the system and the CUDA toolkit must be installed.
Using the OptiX engine in a ray tracing application usually involves the following steps:
- Defining programs for ray generation (e.g. rays can be shot in parallel, in a perspective fashion or like a gradient field), ray missing (when a ray doesn't intersect any object), an optional exception program (when the ray cannot be shot for some reason), a bounding box program (the program that provides a bounding box intersection test for a given object) and an intersection program.
Several examples for these programs are available with the program's SDK
// 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 );
Bounding box programs are used to define bounding volumes used to accelerate ray tracing process within acceleration structures as kd-trees or bounding volume hierarchies
- Create material any hit and closest hit programs: these two programs determine a ray behavior when encountering its first intersection (closest hit) or a generic intersection (any hit)
// 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 );
- Define buffers, variables that might be used inside the supplied programs. Buffers are memory areas that allow host code (i.e. normal CPU code) to communicate with device code (i.e. the code that gets executed on the GPU) and vice versa. Variables are OptiX's internal way of communicating and using buffers to transfer data back and forth.
- Define the OptiX hierarchy of geometry objects, groups, selectors and other nodes to generate a tree graph of the entire scene to be rendered
In order to render a complex scene or trace different paths for any ray OptiX takes advantage of GPGPU computing by exploiting Nvidia CUDA platform. Since the process of shooting rays and setting their behavior is highly customizable, OptiX may be used in a variety of other applications aside from ray tracing.
OptiX Prime
Starting from OptiX 3.5.0 a second library called OptiX Prime was added to the bundle which aims to provide a fast low-level API for ray tracing - building the acceleration structure, traversing the acceleration structure, and ray-triangle intersection. Prime also features a CPU fallback when no compatible GPU is found on the system. Unlike OptiX, Prime is not a programmable API, so lacks support for custom, non-triangle primitives and shading. Being non-programmable, OptiX Prime does not encapsulate the entire algorithm of which ray tracing is a part. Thus, Prime cannot recompile the algorithm for new GPUs, refactor the computation for performance, or use a network appliance like the Quadro VCA, etc.
Software using OptiX
- Blender has OptiX support since version 2.81 (7.1 in 2.92) [5]
- The Blender Add-on D-NOISE uses OptiX binaries for AI-accelerated denoising[6]
- At SIGGRAPH 2011 Adobe showcased OptiX in a technology demo of GPU ray tracing for motion graphics.[7]
- At SIGGRAPH 2013 OptiX was featured in Pixar's realtime, GPU-based lighting preview tool.
- OptiX has been integrated into the GameWorks developers library along with PhysX and other CUDA powered graphics engines and frameworks.[8]
- Adobe After Effects CC[9]
- Daz Studio had OptiX Prime Acceleration since its Iray integration, however support was removed in version 4.12.1.8[10]
- Luxrender 2.5: up to 600% acceleration [11]
See also
References
- ^ "Scheduling in OptiX, the Nvidia ray tracing engine" (PDF). August 15, 2009.
- ^ 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. doi:10.1109/EuCAP.2012.6206198. ISBN 978-1-4577-0920-3. S2CID 45563615.
- ^ 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). "Magazine Communications of the ACM - GPU ray tracing". Communications of the ACM. 56 (5). ACM: 93–101. doi:10.1145/2447976.2447997. S2CID 17174671. Retrieved August 14, 2013.
- ^ 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: a general purpose ray tracing engine". ACM Transactions on Graphics. 29 (4). ACM: 66:1–66:13. doi:10.1145/1778765.1778803. Retrieved August 14, 2013.
- ^ "Blender 2.81 Benchmarks On 19 NVIDIA Graphics Cards - RTX OptiX Rendering Performance Is Incredible". phoronix.com. 2019. Retrieved November 26, 2019.
- ^ "D-NOISE: Rapid AI Denoising for Blender". Remington Creative. July 20, 2019. Retrieved December 14, 2019.
- ^ "Adobe showcasing OptiX in a technology demo for ray tracing motion graphics with GPUs". NVIDIA. 2013. Archived from the original on December 20, 2021. Retrieved August 14, 2013.
- ^ "Nvidia announces Gameworks Program at Montreal 2013; supports SteamOS". NVIDIA. 2013. Retrieved October 29, 2013.
- ^ "GPU changes (for CUDA and OpenGL) in After Effects CC (12.1) | After Effects region of interest". Retrieved February 22, 2015.
- ^ "Daz Studio Changelog". DAZ 3D. Retrieved December 14, 2019.
- ^ "New Features in v2.5 – LuxCoreRender".