Optix API는 CUDA 기반 Application에서 호출되는 CUDA 중심의 API이다. 이 API는 stateless, multi-threaded, asynchronous로 설계되어 메모리 관리 및 셰이더 컴파일과 같이 성능에 민감한 작업에 대한 명시적인
opaque data type이란 인터페이스에서 완전히 정의되지 않은 데이터 유형이다.값은 누락된 정보에 접근할 수 있는 함수를 호출하여 조작할 수 있습니다. 이는 정보 은닉을 강제합니다. 즉, 그 값은 누락된 정보에 접근할 수 있는 함수를 호출하여 조작할 수 있습니다
3.1 Error handling
여기서 설명하는 API function들은 다음과 같다. optixDeviceContextCreate optixDeviceContextDestroy optixDeviceContextGetProperty optixDeviceContextSetLogCallback o
다음 API function들을 설명할 것이다. optixAccelComputeMemoryUsage optixAccelBuild optixAccelRelocate optixConvertPointerToTraversableHandle optiX는 Scene의 ge
acceleration struct를 AS라고 표현 예정이다.geometry acceleration struct는 GAS,instance acceleration struct는 IAS로 표현optiX에서 motion을 활성화하려면 OptixMotionOptions 구조체
이번 section에서 설명할 API 목록은 다음과 같다. optixModuleCreate optixModuleDestroy optixProgramGroupCreate optixProgramGroupGetStackSize optixPipelineCreate optix
shader binding table(SBT)는 program 및 해당 파라미터의 위치에 대한 정보를 포함하는 배열이다. SBT는 device memoryㅇ네 있으며 Application에서 관리한다. 7.1 Records record는 헤더와 데이터 블록으로 구성된 SBT의 배열 요소이다. header의 contents는 Application에서 ...
Difference between curves, spheres, and triangles OptiX를 사용한 ray tracing curve 또는 sphere tracing, triangle의 절차와 유사하다. curve, sphere, triangle의 차이점은 다음과 같다. triangle build input의 index buffer는 선택 사항...
이 section에서 optixLaunch 함수에 대한 설명이다.ray generation launch는 optix API의 핵심이다. launch는 device에서 1D, 2D 또는 3D thread array를 호출하고 각 thread에 대한 ray generati
이전 chapter에서는 property의 data type이 암시하는 한계보다 낮은 상한을 가진 propertype에 대해 설명했다. 이러한 상한 값은 device context가 생성되는 GPU 세대에 따라 달라진다. 이러한 값은 runtime에 optixDevic
Optix device runtime은 ray tracing 상태를 설정 및 가져오고 user program들 내에서 새로운 ray tracing하는 기능을 제공한다. 다음 function은 모든 program type에서 사용할 수 있다.optixGetTransfor
ray payload는 optixTrace와 ray traverse 중에 호출된 program 간에 데이터를 전달하는 데 사용된다. payload 값은 optixTrace에 전달되고 optixTrace에서 반환되며, copy-in/copy-out semantic을 따른
callable program을 사용하면 OptiX 7 program set 내에서 추가적인 프로그래밍이 가능하다. 이러한 program은 SBT의 index를 사용하여 호출된다. index로 함수를 함수를 호출하면 program을 다시 컴파일할 필요 없이 runtim
https://docs.nvidia.com/gameworks/content/gameworkslibrary/optix/optix_quickstart.htm OptiX SDk는 아주 간단한 것부터 중간 정도의 복잡한 것까지 여러 가지 기본 ray tracing 효과를
https://github.com/ingowald/optix7course call 부분에 함수를 입력하고, 함수의 결과(OptixResult)가 OPTIX_SUCCESS 가 아닐 경우 함수 실행에 실패했음을 호출해주는 코드이다. cudaFree(0); CUDA를
Example03 LaunchParams.h는 Example02와 동일하므로 생략한다. devicePrograms.cu는 Example02와 동일하므로 생략한다.
마찬가지로 Example 01~03까지에서 다른점만 작성한다. Example03과 다르게 마우스를 통한 camera 이동까지 구현되었다. 따라서 SampleWindow의 상속은 GLFCameraWindow으로 바뀌었다. cameraFrame은 GLFWindow.
마찬가지로 이전 Example에서 변경된 점만 설명한다.TriangleMesh에 color가 추가되었다.ratgenRecords와 missRecords는 동일하고, hit group의 record만 변경되었다.TriangleMeshSBTData를 Record에 저장한다
마찬가지로 이전 Example에서 달라진 점만 설명한다.물체별로 데이터를 설정한다.triangle input(OptixBuildInput)에 대해서 각 물체에 대해서 입력을 받는다.optixAccelComputeMemoryUsage에서 numBuildInputs의 수를
이전과 마찬가지로 추가된 부분만 설명한다.Model.h의 loadOBJ 함수를 통해 obj 파일을 load한다.파일은 위 링크에서 다운받을 수 있다.addVertex를 확인해보면, idx가 이미 knownVertices map에 있으면 기존 정점 ID를 반환하고 종료한
이전과 마찬가지로 달라진 점만 작성한다.TriangleMesh에 diffuseTextureID 가 생겼다.Texture 구조체가 생겼으며 Texture가 저장될 예정이다.그리고 Model에 Texture의 list가 저장된다.addVertex 함수와 유사하게 file
이전과 마찬가지로 변경된 점만 작성한다.MissProgram을 2개를 만든다.각각 ray-gen program에서 발사한 ray가 miss 됐을 시 리턴되는 \_\_miss\_\_radiance 에 대한 Miss program과, shadow-ray로 발사 되었을
이전과 마찬가지로 변경된 점만 작성한다.light에 대한 설정을 SampleWindow에 넘겨주고 결과적으로 SampleRenderer에 넘겨진다.QuadLight는 Model.h에서 정의한다.launchParam에도 QuadLight에 대한 값을 넣는다.light에
Instance Acceleration Structure의 필요성을 느낀 것은 다음과 같이 AS에 Transformation을 적용하기 위해서이다.해당 코드는 아래에서 확인할 수 있다.https://github.com/sunbei00/OptiXViewer.gi