옵티엑스
OptiX![]() 공식 로고 | |
개발자 | 엔비디아 |
---|---|
안정적 해제 | 7.4 / 2021년 11월 8일 |
기록 위치 | C / C++ |
운영 체제 | Linux, OS X, Windows 7 이상 |
유형 | 레이 트레이싱 |
면허증 | 독점 소프트웨어, 상업용 무료 |
웹사이트 | NVIDIA OptiX 개발 사이트 |
엔비디아 옵티엑스(OptiX Application Acceleration Engine)는 2009년경 처음 개발된 레이 트레이싱 API이다.[1]컴퓨팅은 CUDA와 함께 도입된 낮은 레벨 또는 높은 레벨 API를 통해 GPU로 오프로드된다. CUDA는 엔비디아의 그래픽 제품에만 사용할 수 있다.Nvidia OptiX는 Nvidia GameWorks에 소속되어 있다.OptiX는 레이 트레이싱 자체만이 아니라 레이 트레이싱이 어떤 부분인지 전체 알고리즘을 캡슐화하도록 설계됐다는 뜻이다.이는 OptiX 엔진이 애플리케이션 측 변경 없이 큰 유연성을 가지고 더 큰 알고리즘을 실행할 수 있도록 하기 위한 것이다.
일반적으로 비디오 게임은 렌더링에 광선추적이 아닌 래스터라이징을 사용한다.
엔비디아에 따르면 옵티엑스는 "절차적 정의와 하이브리드 렌더링 접근법"에 적합할 정도로 유연하도록 설계됐다.컴퓨터 그래픽 렌더링 외에도 OptiX는 광학 및 음향 설계, 방사선 및 전자기 연구,[2] 인공지능 쿼리 및 충돌 분석에도 도움을 준다.[3]
OptiX를 사용한 레이 추적
OptiX는 (CUDA 커널의 형태로) 레이가 특정 상황에서 무엇을 해야 완전한 추적 프로세스를 시뮬레이션할 수 있는지에 대해 사용자가 제공한 지침을 사용하여 작동한다.[4]
광선(또는 다른 종류의 광선)은 다른 표면이 아닌 특정 표면을 타격할 때 다른 행동을 할 수 있으며, OptiX는 사용자가 제공한 프로그램으로 이러한 타격 조건을 사용자 정의할 수 있다.이러한 프로그램은 CUDA C 또는 PTX 코드로 직접 작성되며 OptiX 엔진에서 사용할 때 함께 연결된다.
OptiX를 사용하려면 시스템에 CUDA 지원 GPU를 사용할 수 있어야 하며, CUDA 툴킷을 설치해야 한다.
광선 추적 애플리케이션에서 OptiX 엔진을 사용하는 데는 대개 다음 단계가 포함된다.
- 레이 생성을 위한 프로그램 정의(예: 투시 방식 또는 그라데이션 필드처럼 병렬로 촬영할 수 있음), 레이 실종(레이가 어떤 물체와 교차하지 않는 경우), 옵션 예외 프로그램(어떤 이유로 레이를 촬영할 수 없는 경우), 바운드 박스 프로그램(경우에 대한 경계 상자 교차 테스트를 제공하는 프로그램)n 객체) 및 교차 프로그램.
이러한 프로그램에 대한 몇 가지 예는 프로그램의 SDK에서 확인할 수 있다.
// OptiX APIs //를 사용하여 코드 샘플링 /* Ray 생성 프로그램 */ rtProgramCreateFromPTXFile( *문맥, path_to_ptx, "핀홀_파워", &ray_gen_program ); rtContextSetRayGenerationProgram( *문맥, 0, ray_gen_program ); /* 프로그램 미스 */ rtProgramCreateFromPTXFile( *문맥, path_to_ptx, "미스", &miss_program ); rtContextSetMissProgram( *문맥, 0, miss_program ); /* 경계 상자 및 교차로 프로그램 */ rtProgramCreateFromPTXFile( 문맥, path_to_ptx, "box_box", &box_bound_box_program ); rtGeometrySetBoundingBoxProgram( *권투를 하다, box_bound_box_program ); rtProgramCreateFromPTXFile( 문맥, path_to_ptx, "box_box", &box_bask_program ); rtGeometrySetIntersectionProgram( *권투를 하다, box_bask_program );
Bounding box 프로그램은 가속 구조 내에서 Ray 추적 프로세스를 가속화하는 데 사용되는 Bounding volume을 kd-tree 또는 Bounding volume 계층 구조로 정의하는데 사용된다.
- 히트 및 가장 가까운 히트 프로그램 재료 만들기: 이 두 프로그램은 첫 번째 교차점(가장 근접한 히트) 또는 일반 교차점(어느 히트)과 마주칠 때 레이 동작을 결정한다.
// OptiX APIs //를 사용하여 코드 샘플링 rtProgramCreateFromPTXFile( 문맥, path_to_ptx, "closest_hit_radiance", &close_hit_program ); rtProgramCreateFromPTXFile( 문맥, path_to_ptx, "any_hit_shadow", &any_hit_program ); /* 재료와 가장 가까운 히트 프로그램 연결 */ rtMaterialCreate( 문맥, 물질적 ); rtMaterialSetClosestHitProgram( *물질적, 0, close_hit_program ); rtMaterialSetAnyHitProgram( *물질적, 1, any_hit_program );
- 제공된 프로그램 내에서 사용할 수 있는 변수인 버퍼를 정의하십시오.버퍼는 호스트 코드(즉, 정상 CPU 코드)가 디바이스 코드(즉, GPU에서 실행되는 코드)와 통신할 수 있도록 하는 메모리 영역이며, 그 반대의 경우도 마찬가지다.변수는 OptiX의 내부 통신 방식이며 버퍼로 데이터를 앞뒤로 전송하는 방식이다.
- 지오메트리 객체, 그룹, 선택기 및 기타 노드의 OptiX 계층을 정의하여 렌더링할 전체 씬(scene)의 트리 그래프 생성

어떤 레이에 대해서도 복잡한 장면을 렌더링하거나 다른 경로를 추적하기 위해 OptiX는 NVIDIA CUDA 플랫폼을 활용하여 GPGPU 컴퓨팅을 활용한다.광선을 촬영하고 그 행동을 설정하는 과정은 매우 사용자 정의가 가능하기 때문에, OptiX는 광선 추적 외에도 다양한 다른 애플리케이션에서 사용될 수 있다.
옵티엑스 프라임
OptiX 3.5.0에서 시작하여 두 번째 라이브러리 OptiX Prime이 번들에 추가되었는데, 이 번들은 가속 구조 구축, 가속 구조 통과, 그리고 레이-트라이앵글 교차로의 레이 트레이싱을 위한 빠른 로우 레벨 API를 제공하는 것을 목표로 한다.Prime은 또한 시스템에서 호환되는 GPU가 없을 때 CPU 폴백을 특징으로 한다.Prime은 OptiX와 달리 프로그램 가능한 API가 아니기 때문에 사용자 정의, 비삼각 원소 및 음영에 대한 지원이 부족하다.프로그램 불가능한 OptiX Prime은 레이트레이싱이 일부인 전체 알고리즘을 캡슐화하지 않는다.따라서 Prime은 새로운 GPU에 대한 알고리즘을 다시 컴파일하거나, 성능을 위해 연산을 리팩터링하거나, Quadro VCA 등과 같은 네트워크 어플라이언스를 사용할 수 없다.
OptiX를 사용한 소프트웨어
- Blender는 버전 2.81(2.92의 7.1) 이후 OptiX를 지원했다.
- 블렌더 애드온 D-NOISE는 AI 가속 데노이즈에 OptiX 바이너리를[6] 사용한다.
- 모피볼 - Nvidia OptiX 기반 레이트레이스 및 래스터ize를 사용한 고급 실시간 GPU 생산 품질 최종 프레임 렌더러
- SIGGRAPH 2011에서 Adobe는 모션 그래픽용 GPU 레이 트레이싱 기술 데모에서 OptiX를 선보였다.[7]
- at SIGGRAPH 2013 OptiX는 픽사의 실시간 GPU 기반 조명 미리보기 도구에 실렸다.
- OptiX는 PhysX 및 기타 CUDA 동력 그래픽 엔진 및 프레임워크와 함께 GameWorks 개발자 라이브러리에 통합되었다.[8]
- Adobe After Effects CC[9]
- 다즈 스튜디오는 아이라이 통합 이후 OptiX Prime Acceleration을 가지고 있었지만 4.12.1.8 버전에서[10] 지원이 제거되었다.
- 럭스렌더 2.5: 최대 600% 가속
참고 항목
참조
- ^ "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. ACM. 56 (5): 93–101. doi:10.1145/2447976.2447997. S2CID 17174671. Retrieved August 14, 2013.
- ^ 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 (2010). "OptiX: a general purpose ray tracing engine". ACM Transactions on Graphics (Tog). ACM. 29 (4): 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".