SlideShare a Scribd company logo
CUDA Raytracing을 이용한
voxel 오브젝트 가시성 검사
유영천
https://megayuchi.com
Tw: @dgtman
도형을 화면에 표시하는 방법
• Rasterization
• Ray Tracing
View
Matrix
Projection
Matrix
X
X ->
Rasterization
X 𝑉𝑖𝑒𝑤 matrix−1
𝑃𝑖𝑥𝑒𝑙. 𝑥 ÷ 𝑊𝑖𝑑𝑡ℎ × 2 − 1
𝑝𝑟𝑜𝑗𝑒𝑐𝑡𝑖𝑜𝑛 𝑚𝑎𝑡𝑟𝑖𝑥[0][0]
−(𝑃𝑖𝑥𝑒𝑙. 𝑦 ÷ 𝐻𝑒𝑖𝑔ℎ𝑡 × 2 − 1)
𝑝𝑟𝑜𝑗𝑒𝑐𝑡𝑖𝑜𝑛 𝑚𝑎𝑡𝑟𝑖𝑥[1][1]
0
,1 , 0
Ray Tracing
,
가장 앞의 픽셀을 그리는 방법
Rasterization
• 기본적으로 모든 매시는 순서
없이 그린다.
• Z-buffer를 이용해서 가장 앞에
있는 픽셀로 덮어쓴다.
• 삼각형->WVP 변환 후 얻은
z값을 z-buffer에 기록. 현재
Z값이 기존 z값보다 작으면
기존 픽셀을 덮어쓴다.
Ray Tracing
• depth버퍼 없다.
• Ray가 발사됐을 때 Ray마다
가장 앞에 있는 픽셀을
찾아낸다.
Z-Buffer
(-1.0, -1.0) (1.0, -1.0)
(-1.0, 1.0) (1.0, 1.0)
(0, Height) (Width, Height)
(Width, 0)
1.0
1.0
1.0
1.0
1.0
0.47
1.0
0.46
1.0
0.41
1.0
0.42
0.42
0.45
0.43
0.44
1.0
0.43
1.0
0.43
0.43
0.43
0.43
0.43
1.0
0.42
1.0
0.41
0.43
0.46
0.45
0.46
0.47
0.46
0.46
0.46
0.46
0.44
0.45
0.46
0.46
0.45
0.45
0.46
0.45
0.46
0.46
0.44
0.44
0.42
1.0
0.45
0.46
1.0
1.0
0.46
1.0
0.47
0.47
1.0
1.0
1.0
1.0
0.45
1.0
0.45
1.0
1.0 1.0
1.0
1.0
1.0
1.0
1.0 1.0
1.0
1.0
1.0
1.0
1.0 1.0
1.0
1.0
1.0
1.0
1.0 1.0
1.0
1.0
1.0
1.0
0.46
0.47
1.0
0.48
0.47
0.48
0.48
0.48
0.48
1.0
0.48
1.0
1.0
1.0
1.0
1.0
1.0 1.0
1.0
1.0
1.0
0.48
0.48
0.48
0.48
1.0
1.0
1.0
1.0
0.44
NDC
(0, 0)
Rasterization
Ray tracing에서 어느 오브젝트, 어느 삼각형이 앞에 있는지 어떻게 알지?
쉬운방법
• Ray 하나당 모든 오브젝트를 순회한다.
• Ray가 많아지면 당연히 미친듯이 느려진다.
KD-Tree
• X,Y,Z 축에 정렬된 BSP Tree.
• 각 node를 3가지 축과 축방향의 거리 D값으로 표현할 수 있다.
• KD-Tree를 탐색할 때 카메라로부터 가까운 node와 먼 node를 찾을
수 있다.
• Ray의 교차판정 등에 많이 사용한다.
• Near node와 Far node를 구분하지 않는다면 Quad-Tree와 별
차이는 없다.
• 게임의 월드를 KD-Tree로 관리하는 경우가 많다.
KD-Tree를 이용한 가장 가까운 오브젝트 탐색
• root node가 ray와 충돌하지 않으면 순회 중지.
• 현재 node의 자식 node 2개중 한 개만 ray와 충돌할 경우 충돌하는
노드를 방문.
• 현재 node의 자식 node 2개가 모두 충돌할 경우 먼 node를 stack에
push하고 가까운 node를 방문.
• 방문한 node가 leaf일 때 leaf에 들어있는 매시의 삼각형들에
대해서 ray와 충돌체크. 현재 leaf에서 충돌한 경우 t값을 저장하고
순회 중지.
• 방문한 node가 leaf일 때 어떤 삼각형도 ray와 충돌하지 않는 경우
stack에서 node포인터를 꺼내서 방문.
KD-Tree Traversal
0 1
2
node A
node A-a
node A-b
node A-b-a node A-b-b
node A
node A-a node A-b
node A-b-a node A-b-b
가시성 검사에 응용
S/W Occlusion Culling
• 적당히 작은 사이즈의 버퍼에 최대한 간소화된 방법으로 매시를
그려본다. 이 과정에서 얻은 depth값을 버퍼에 기록.
• 오브젝트 또는 트리의 node/leaf를 depth버퍼에 대해 z-test.
렌더링 파이프라인에 넣기 전에 이 단계에서 가려지는
오브젝트를 걸러낸다.
• 이것을 GPU에서 처리하면 H/W Occlusion Culling.
• S/W방식(CPU에서)으로 처리하는 이유는 GPU와의 통신시간을
트리 탐색중 바로 적용할 수 있기 때문.
복셀 월드에서의 S/W Occlusion Culling
• 복셀 지형 특성상 안이 꽉 차 있고 모양이 복잡하다.
• 복셀 오브젝트간 가리고 가려지는 상황이 엄청 빈번하다.
• S/W Occlusion Culling을 시도했을때 depth를 써넣고 테스트 하는
비용이 너무 크다.
• 복셀 오브젝트 개수만 해도 5-10만개씩 되기 때문에 이미 수집한
5-10만개의 오브젝트에서 보이지 않는 오브젝트를 제거할때도
생각보다 CPU시간을 많이 소모한다.
• S/W Occlusion Culling에 적합한가?
Ray Tracing을 이용한 가시성 검사
• Ray Tracing에선 처음부터 가려지는 픽셀-오브젝트는 그릴 일이
없다.
• Z-test도 필요없다.
• Ray를 쏴서 충돌하는 픽셀의 컬러값 대신 충돌한 지형지물의
오브젝트 ID 또는 leaf의 ID를 기록하면 정확히 보이는 오브젝트
목록만 얻을 수 있다.
Ray Tracing을 이용한 가시성 검사-복셀월드
• 복셀 오브젝트당 삼각형 개수는 비교적 적은 편이다.
• 변경/삭제가 빈번하지 않다.
• 복셀 오브젝트 변경시 트리를 재구축할 필요없이 leaf의 삼각형만
갱신해주면 된다.
• S/W Occlusion Culling으로 보이지 않는 오브젝트를
제외시키기보다 Ray Tracing을 이용해서 보이는 오브젝트만을
골라내는 편이 더 효율적이다.
Ray Tracing을 이용한 복셀월드의 가시성 검사
1. 메모리에 적당한 사이즈의 화면 버퍼를 만든다(ex: 512×512)
2. view matrix, projection matrix를 이용해서 각 픽셀로부터
월드공간의 ray를 만든다.
3. 각 픽셀에서 출발한 ray로 복셀 오브젝트들로 구성된 KD-Tree를
순회하며 ray가 충돌하는 가장 가까운 오브젝트를 찾는다.
4. 오브젝트를 찾으면 화면 버퍼에 오브젝트의 ID를
기록한다.(테스트 시에는 depth값-ray가 충돌했을 때의 t값)
5. 버퍼의 기록된 오브젝트 ID를 가지고 렌더링 될 복셀 오브젝트
목록을 만든다.
CPU vs GPU
• CPU로 구현하면 안되나?
• CPU로 구현해보자.
[i7 8700k 6 cores – 12 threads]
Single Thread - 2408.62 ms
Multi Thread – 12 thread(HT enabled) - 353.59 ms
60프레임을 위해서는 16ms를 초과하면 안된다! CPU로는 무리!
CUDA로 구현
CUDA를 이용한 구현
• CPU로는 너무 느리다. GPU를 사용하자.
• DirectX Raytracing API를 사용하면 간단하게 구현할 수 있다.
그러나…
• GTX 900시리즈 같은 DXR 지원 안하는 GPU에서도 성능 향상을
보고 싶다.
• 그래픽 API를 사용할 수 없는 환경에서도 이 기능을 사용하고 싶다.
예를 들면 서버라든가.
• 그렇다면 CUDA를 사용한다.
기본 구현
• 트리 재구성 비용을 줄이기 위해 트리는 최대 depth만큼 미리
빌드해 둔다.
• 트리는 어차피 CPU측에 먼저 구현해야 한다. (picking, CPU를
이용한 오브젝트 수집 등)
• GPU측(CUDA memory)에 트리 전체를 업데이트.
• 복셀 오브젝트가 추가/삭제/변경 될 경우 CUDA측 트리의
leaf내용만 업데이트.
• Raytracing을 이용한 depth, Object ID를 저장하는 코드는 CPU
코드로 먼저 작성한다. 1)검증, 2) 포팅 용이함을 위해서다.
GPU측에 KD-Tree구현하기
• KD-Tree 순회 코드는 CPU코드를 거의 그대로 사용할 수 있다.
• CUDA는 device memor와 host memory를 구분하므로 트리를
구축할때는 간단하지 않다. 팁을 제시하자면…
1. cudaMallocManaged()를 사용한다. – 가장 쉽다. 하지만 느리다.
2. cudaMalloc()/cudaMallocHost()를 이용해서 구현한다.
a. Host메모리에 먼저 구현. 트리를 배열로 표현.
b. 각 노드는 child node를 저장할때 포인터 대신 node 배열에서의 index로 저장.
c. 똑같은 사이즈의 Device메모리를 만들어서 host->device로 한번에 카피.
GPU Memory
System Memory
CUDA Code
node 0 node 1 node 2 node 3 node 4 node 5
node 0
node 1 node 2
node 3 node 4 node 5
node 0 node 1 node 2 node 3 node 4 node 5
KD_AXIS axis;
float d;
DWORD child[2];
cudaMemcpy()
Visual Studio Debugger
Parallel NSight Debugger
성능 테스트
[i7 8700k 6 cores – 12 threads]
Single Thread - 2408.62 ms
Multi Thread – 12 thread(HT enabled) - 353.59 ms
CUDA(GTX970) - 12.2468 ms
60프레임 가능! 사용 가능!
성능 테스트
SW Occlusion Culling CUDA Raytracing (GTX970) delta
DX11 (1920x1200)
렌더링된 오브젝트 3580 2428 -32%
카메라 정지시 FPS 294 345 +17%
카메라 이동시 FPS 220 246 +11%
DXR (1920x1200)
렌더링된 오브젝트 2675 1873 -29%
카메라 정지시 FPS 20 21 +5%
카메라 이동시 FPS 19 19 0%
오차 문제
• Ray Tracing버퍼의 해상도가 512x512정도면 충분한가?
• 일반적으로 게임 해상도는 1920x1080이상이므로 512x512버퍼의
Raytracing테스트로는 완벽하지 않을 수 있다.
• 멀리 있는 오브젝트들의 앞뒤 관계에서 오차가 발생할 수 있다.
• 그렇다고 게임의 네이티브 해상도와 일치시키면 너무 느리다.
오차 문제 - 해결안
• Ray Tracing버퍼의 해상도가 512x512정도면 충분한가?
• 일반적으로 게임 해상도는 1920x1080이상이므로 512x512버퍼의
Raytracing테스트로는 완벽하지 않을 수 있다.
• 멀리 있는 오브젝트들의 앞뒤 관계에서 오차가 발생할 수 있다.
• 그렇다고 게임의 네이티브 해상도와 일치시키면 너무 느리다.
• 오브젝트의 ID대신 KD-Tree의 leaf의 ID를 저장한다.
• 다소의 불필요한 렌더링을 감수한다. 오차를 줄인다.
제약사항
• nvidia GPU 한정
• GPU 성능 요구사항
생각해볼 주제
• CUDA 최적화
• OpenCL로의 포팅
• 디버깅 환경이 거지같지만 포인터가 있으니 ‘의지’가 있다면 가능.
• Compute Shader로의 포팅
• 이론상 불가능하진 않지만 포인터가 없기 때문에 꽤~~~~ 빡실듯.
참고자료
• https://graphics.stanford.edu/papers/gpu_kdtree/kdtree.pdf

More Related Content

What's hot

정종필 팀장이됐어요(더저용량)
정종필 팀장이됐어요(더저용량)정종필 팀장이됐어요(더저용량)
정종필 팀장이됐어요(더저용량)JP Jung
 
빌드 속도를 올려보자
빌드 속도를 올려보자빌드 속도를 올려보자
빌드 속도를 올려보자KyeongWon Koo
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
devCAT Studio, NEXON
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingYEONG-CHEON YOU
 
Game Physics Engine Development (게임 물리 엔진 개발)
Game Physics Engine Development (게임 물리 엔진 개발)Game Physics Engine Development (게임 물리 엔진 개발)
Game Physics Engine Development (게임 물리 엔진 개발)
Bongseok Cho
 
Recast Detour.pptx
Recast Detour.pptxRecast Detour.pptx
Recast Detour.pptx
MUUMUMUMU
 
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012devCAT Studio, NEXON
 
Compute shader DX11
Compute shader DX11Compute shader DX11
Compute shader DX11
민웅 이
 
멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)
Bongseok Cho
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU
YEONG-CHEON YOU
 
[FOSS4G Korea 2016] GeoHash를 이용한 지형도 변화탐지와 시계열 관리
[FOSS4G Korea 2016] GeoHash를 이용한 지형도 변화탐지와 시계열 관리[FOSS4G Korea 2016] GeoHash를 이용한 지형도 변화탐지와 시계열 관리
[FOSS4G Korea 2016] GeoHash를 이용한 지형도 변화탐지와 시계열 관리
BJ Jang
 
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들MinGeun Park
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
Amazon Web Services Korea
 
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
NDOORS
 
Oit And Indirect Illumination Using Dx11 Linked Lists
Oit And Indirect Illumination Using Dx11 Linked ListsOit And Indirect Illumination Using Dx11 Linked Lists
Oit And Indirect Illumination Using Dx11 Linked ListsHolger Gruen
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012devCAT Studio, NEXON
 
[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유
Hwan Min
 
Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1
YEONG-CHEON YOU
 
190406 신입 클라이언트 프로그래머 1개월차까지 이야기
190406 신입 클라이언트 프로그래머 1개월차까지 이야기190406 신입 클라이언트 프로그래머 1개월차까지 이야기
190406 신입 클라이언트 프로그래머 1개월차까지 이야기
KWANGIL KIM
 

What's hot (20)

정종필 팀장이됐어요(더저용량)
정종필 팀장이됐어요(더저용량)정종필 팀장이됐어요(더저용량)
정종필 팀장이됐어요(더저용량)
 
빌드 속도를 올려보자
빌드 속도를 올려보자빌드 속도를 올려보자
빌드 속도를 올려보자
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion Culling
 
Game Physics Engine Development (게임 물리 엔진 개발)
Game Physics Engine Development (게임 물리 엔진 개발)Game Physics Engine Development (게임 물리 엔진 개발)
Game Physics Engine Development (게임 물리 엔진 개발)
 
Recast Detour.pptx
Recast Detour.pptxRecast Detour.pptx
Recast Detour.pptx
 
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
 
Compute shader DX11
Compute shader DX11Compute shader DX11
Compute shader DX11
 
멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU
 
[FOSS4G Korea 2016] GeoHash를 이용한 지형도 변화탐지와 시계열 관리
[FOSS4G Korea 2016] GeoHash를 이용한 지형도 변화탐지와 시계열 관리[FOSS4G Korea 2016] GeoHash를 이용한 지형도 변화탐지와 시계열 관리
[FOSS4G Korea 2016] GeoHash를 이용한 지형도 변화탐지와 시계열 관리
 
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
[KGC2011_박민근] 신입 게임 개발자가 알아야 할 것들
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
 
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
 
Oit And Indirect Illumination Using Dx11 Linked Lists
Oit And Indirect Illumination Using Dx11 Linked ListsOit And Indirect Illumination Using Dx11 Linked Lists
Oit And Indirect Illumination Using Dx11 Linked Lists
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
 
[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유
 
Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1
 
190406 신입 클라이언트 프로그래머 1개월차까지 이야기
190406 신입 클라이언트 프로그래머 1개월차까지 이야기190406 신입 클라이언트 프로그래머 1개월차까지 이야기
190406 신입 클라이언트 프로그래머 1개월차까지 이야기
 

Similar to CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트

Developing Next-Generation Games with Stage3D (Molehill)
Developing Next-Generation Games with Stage3D (Molehill) Developing Next-Generation Games with Stage3D (Molehill)
Developing Next-Generation Games with Stage3D (Molehill)
Jean-Philippe Doiron
 
Single shot multiboxdetectors
Single shot multiboxdetectorsSingle shot multiboxdetectors
Single shot multiboxdetectors
지현 백
 
Windows to reality getting the most out of direct3 d 10 graphics in your games
Windows to reality   getting the most out of direct3 d 10 graphics in your gamesWindows to reality   getting the most out of direct3 d 10 graphics in your games
Windows to reality getting the most out of direct3 d 10 graphics in your gameschangehee lee
 
Image ORB feature
Image ORB featureImage ORB feature
Image ORB feature
Gavin Gao
 
Single shot multiboxdetectors
Single shot multiboxdetectorsSingle shot multiboxdetectors
Single shot multiboxdetectors
지현 백
 
Csw2016 wheeler barksdale-gruskovnjak-execute_mypacket
Csw2016 wheeler barksdale-gruskovnjak-execute_mypacketCsw2016 wheeler barksdale-gruskovnjak-execute_mypacket
Csw2016 wheeler barksdale-gruskovnjak-execute_mypacket
CanSecWest
 
"Energy-efficient Hardware for Embedded Vision and Deep Convolutional Neural ...
"Energy-efficient Hardware for Embedded Vision and Deep Convolutional Neural ..."Energy-efficient Hardware for Embedded Vision and Deep Convolutional Neural ...
"Energy-efficient Hardware for Embedded Vision and Deep Convolutional Neural ...
Edge AI and Vision Alliance
 
Advanced Scenegraph Rendering Pipeline
Advanced Scenegraph Rendering PipelineAdvanced Scenegraph Rendering Pipeline
Advanced Scenegraph Rendering Pipeline
Narann29
 
GPU - how can we use it?
GPU - how can we use it?GPU - how can we use it?
GPU - how can we use it?
Bartlomiej Filipek
 
Gpu perf-presentation
Gpu perf-presentationGpu perf-presentation
Gpu perf-presentation
GiannisTsagatakis
 
GPGPU Computation
GPGPU ComputationGPGPU Computation
GPGPU Computation
jtsagata
 
Screen Space Reflections in The Surge
Screen Space Reflections in The SurgeScreen Space Reflections in The Surge
Screen Space Reflections in The Surge
Michele Giacalone
 
Keras on tensorflow in R & Python
Keras on tensorflow in R & PythonKeras on tensorflow in R & Python
Keras on tensorflow in R & Python
Longhow Lam
 
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
ozlael ozlael
 
Blur Filter - Hanpo
Blur Filter - HanpoBlur Filter - Hanpo
Blur Filter - Hanpo
Hanpo Cheng
 
Applying your Convolutional Neural Networks
Applying your Convolutional Neural NetworksApplying your Convolutional Neural Networks
Applying your Convolutional Neural Networks
Databricks
 
CUDA by Example : Constant Memory and Events : Notes
CUDA by Example : Constant Memory and Events : NotesCUDA by Example : Constant Memory and Events : Notes
CUDA by Example : Constant Memory and Events : Notes
Subhajit Sahu
 
Anil Thomas - Object recognition
Anil Thomas - Object recognitionAnil Thomas - Object recognition
Anil Thomas - Object recognition
Intel Nervana
 
Mongodb debugging-performance-problems
Mongodb debugging-performance-problemsMongodb debugging-performance-problems
Mongodb debugging-performance-problems
MongoDB
 

Similar to CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트 (20)

Developing Next-Generation Games with Stage3D (Molehill)
Developing Next-Generation Games with Stage3D (Molehill) Developing Next-Generation Games with Stage3D (Molehill)
Developing Next-Generation Games with Stage3D (Molehill)
 
Single shot multiboxdetectors
Single shot multiboxdetectorsSingle shot multiboxdetectors
Single shot multiboxdetectors
 
Windows to reality getting the most out of direct3 d 10 graphics in your games
Windows to reality   getting the most out of direct3 d 10 graphics in your gamesWindows to reality   getting the most out of direct3 d 10 graphics in your games
Windows to reality getting the most out of direct3 d 10 graphics in your games
 
Image ORB feature
Image ORB featureImage ORB feature
Image ORB feature
 
Single shot multiboxdetectors
Single shot multiboxdetectorsSingle shot multiboxdetectors
Single shot multiboxdetectors
 
December 4, Project
December 4, ProjectDecember 4, Project
December 4, Project
 
Csw2016 wheeler barksdale-gruskovnjak-execute_mypacket
Csw2016 wheeler barksdale-gruskovnjak-execute_mypacketCsw2016 wheeler barksdale-gruskovnjak-execute_mypacket
Csw2016 wheeler barksdale-gruskovnjak-execute_mypacket
 
"Energy-efficient Hardware for Embedded Vision and Deep Convolutional Neural ...
"Energy-efficient Hardware for Embedded Vision and Deep Convolutional Neural ..."Energy-efficient Hardware for Embedded Vision and Deep Convolutional Neural ...
"Energy-efficient Hardware for Embedded Vision and Deep Convolutional Neural ...
 
Advanced Scenegraph Rendering Pipeline
Advanced Scenegraph Rendering PipelineAdvanced Scenegraph Rendering Pipeline
Advanced Scenegraph Rendering Pipeline
 
GPU - how can we use it?
GPU - how can we use it?GPU - how can we use it?
GPU - how can we use it?
 
Gpu perf-presentation
Gpu perf-presentationGpu perf-presentation
Gpu perf-presentation
 
GPGPU Computation
GPGPU ComputationGPGPU Computation
GPGPU Computation
 
Screen Space Reflections in The Surge
Screen Space Reflections in The SurgeScreen Space Reflections in The Surge
Screen Space Reflections in The Surge
 
Keras on tensorflow in R & Python
Keras on tensorflow in R & PythonKeras on tensorflow in R & Python
Keras on tensorflow in R & Python
 
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
 
Blur Filter - Hanpo
Blur Filter - HanpoBlur Filter - Hanpo
Blur Filter - Hanpo
 
Applying your Convolutional Neural Networks
Applying your Convolutional Neural NetworksApplying your Convolutional Neural Networks
Applying your Convolutional Neural Networks
 
CUDA by Example : Constant Memory and Events : Notes
CUDA by Example : Constant Memory and Events : NotesCUDA by Example : Constant Memory and Events : Notes
CUDA by Example : Constant Memory and Events : Notes
 
Anil Thomas - Object recognition
Anil Thomas - Object recognitionAnil Thomas - Object recognition
Anil Thomas - Object recognition
 
Mongodb debugging-performance-problems
Mongodb debugging-performance-problemsMongodb debugging-performance-problems
Mongodb debugging-performance-problems
 

More from YEONG-CHEON YOU

DirectStroage프로그래밍소개
DirectStroage프로그래밍소개DirectStroage프로그래밍소개
DirectStroage프로그래밍소개
YEONG-CHEON YOU
 
Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2
YEONG-CHEON YOU
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
YEONG-CHEON YOU
 
XDK없이 XBOX게임 개발하기(UWP on XBOX)
XDK없이 XBOX게임 개발하기(UWP on XBOX)XDK없이 XBOX게임 개발하기(UWP on XBOX)
XDK없이 XBOX게임 개발하기(UWP on XBOX)
YEONG-CHEON YOU
 
Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5
YEONG-CHEON YOU
 
빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술
YEONG-CHEON YOU
 
Voxelizaition with GPU
Voxelizaition with GPUVoxelizaition with GPU
Voxelizaition with GPU
YEONG-CHEON YOU
 
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelase
YEONG-CHEON YOU
 
Sw occlusion culling
Sw occlusion cullingSw occlusion culling
Sw occlusion culling
YEONG-CHEON YOU
 
CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기
YEONG-CHEON YOU
 
서버와 클라이언트 같은 엔진 사용하기
서버와 클라이언트 같은 엔진 사용하기서버와 클라이언트 같은 엔진 사용하기
서버와 클라이언트 같은 엔진 사용하기
YEONG-CHEON YOU
 
win32 app에서 UWP API호출하기
win32 app에서 UWP API호출하기win32 app에서 UWP API호출하기
win32 app에서 UWP API호출하기
YEONG-CHEON YOU
 
Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기
YEONG-CHEON YOU
 
Development AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic APIDevelopment AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic API
YEONG-CHEON YOU
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
YEONG-CHEON YOU
 
Tips and experience_of_dx12_engine_development._ver_1.2
Tips and experience_of_dx12_engine_development._ver_1.2Tips and experience_of_dx12_engine_development._ver_1.2
Tips and experience_of_dx12_engine_development._ver_1.2
YEONG-CHEON YOU
 
Implements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture ArrayImplements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture Array
YEONG-CHEON YOU
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .
YEONG-CHEON YOU
 
Porting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp appPorting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp app
YEONG-CHEON YOU
 
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
YEONG-CHEON YOU
 

More from YEONG-CHEON YOU (20)

DirectStroage프로그래밍소개
DirectStroage프로그래밍소개DirectStroage프로그래밍소개
DirectStroage프로그래밍소개
 
Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
XDK없이 XBOX게임 개발하기(UWP on XBOX)
XDK없이 XBOX게임 개발하기(UWP on XBOX)XDK없이 XBOX게임 개발하기(UWP on XBOX)
XDK없이 XBOX게임 개발하기(UWP on XBOX)
 
Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5
 
빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술
 
Voxelizaition with GPU
Voxelizaition with GPUVoxelizaition with GPU
Voxelizaition with GPU
 
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelase
 
Sw occlusion culling
Sw occlusion cullingSw occlusion culling
Sw occlusion culling
 
CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기
 
서버와 클라이언트 같은 엔진 사용하기
서버와 클라이언트 같은 엔진 사용하기서버와 클라이언트 같은 엔진 사용하기
서버와 클라이언트 같은 엔진 사용하기
 
win32 app에서 UWP API호출하기
win32 app에서 UWP API호출하기win32 app에서 UWP API호출하기
win32 app에서 UWP API호출하기
 
Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기
 
Development AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic APIDevelopment AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic API
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
 
Tips and experience_of_dx12_engine_development._ver_1.2
Tips and experience_of_dx12_engine_development._ver_1.2Tips and experience_of_dx12_engine_development._ver_1.2
Tips and experience_of_dx12_engine_development._ver_1.2
 
Implements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture ArrayImplements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture Array
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .
 
Porting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp appPorting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp app
 
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
 

Recently uploaded

NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
Amil Baba Dawood bangali
 
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
ydteq
 
6th International Conference on Machine Learning & Applications (CMLA 2024)
6th International Conference on Machine Learning & Applications (CMLA 2024)6th International Conference on Machine Learning & Applications (CMLA 2024)
6th International Conference on Machine Learning & Applications (CMLA 2024)
ClaraZara1
 
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming PipelinesHarnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
Christina Lin
 
Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...
Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...
Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...
AJAYKUMARPUND1
 
14 Template Contractual Notice - EOT Application
14 Template Contractual Notice - EOT Application14 Template Contractual Notice - EOT Application
14 Template Contractual Notice - EOT Application
SyedAbiiAzazi1
 
DESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABS
DESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABSDESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABS
DESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABS
itech2017
 
Water Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdfWater Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation & Control
 
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
thanhdowork
 
Top 10 Oil and Gas Projects in Saudi Arabia 2024.pdf
Top 10 Oil and Gas Projects in Saudi Arabia 2024.pdfTop 10 Oil and Gas Projects in Saudi Arabia 2024.pdf
Top 10 Oil and Gas Projects in Saudi Arabia 2024.pdf
Teleport Manpower Consultant
 
Recycled Concrete Aggregate in Construction Part III
Recycled Concrete Aggregate in Construction Part IIIRecycled Concrete Aggregate in Construction Part III
Recycled Concrete Aggregate in Construction Part III
Aditya Rajan Patra
 
Cosmetic shop management system project report.pdf
Cosmetic shop management system project report.pdfCosmetic shop management system project report.pdf
Cosmetic shop management system project report.pdf
Kamal Acharya
 
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理
zwunae
 
Planning Of Procurement o different goods and services
Planning Of Procurement o different goods and servicesPlanning Of Procurement o different goods and services
Planning Of Procurement o different goods and services
JoytuBarua2
 
Building Electrical System Design & Installation
Building Electrical System Design & InstallationBuilding Electrical System Design & Installation
Building Electrical System Design & Installation
symbo111
 
Immunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary AttacksImmunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary Attacks
gerogepatton
 
Basic Industrial Engineering terms for apparel
Basic Industrial Engineering terms for apparelBasic Industrial Engineering terms for apparel
Basic Industrial Engineering terms for apparel
top1002
 
Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024
Massimo Talia
 
Governing Equations for Fundamental Aerodynamics_Anderson2010.pdf
Governing Equations for Fundamental Aerodynamics_Anderson2010.pdfGoverning Equations for Fundamental Aerodynamics_Anderson2010.pdf
Governing Equations for Fundamental Aerodynamics_Anderson2010.pdf
WENKENLI1
 
Steel & Timber Design according to British Standard
Steel & Timber Design according to British StandardSteel & Timber Design according to British Standard
Steel & Timber Design according to British Standard
AkolbilaEmmanuel1
 

Recently uploaded (20)

NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
 
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
一比一原版(UofT毕业证)多伦多大学毕业证成绩单如何办理
 
6th International Conference on Machine Learning & Applications (CMLA 2024)
6th International Conference on Machine Learning & Applications (CMLA 2024)6th International Conference on Machine Learning & Applications (CMLA 2024)
6th International Conference on Machine Learning & Applications (CMLA 2024)
 
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming PipelinesHarnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
 
Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...
Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...
Pile Foundation by Venkatesh Taduvai (Sub Geotechnical Engineering II)-conver...
 
14 Template Contractual Notice - EOT Application
14 Template Contractual Notice - EOT Application14 Template Contractual Notice - EOT Application
14 Template Contractual Notice - EOT Application
 
DESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABS
DESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABSDESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABS
DESIGN AND ANALYSIS OF A CAR SHOWROOM USING E TABS
 
Water Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdfWater Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdf
 
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
 
Top 10 Oil and Gas Projects in Saudi Arabia 2024.pdf
Top 10 Oil and Gas Projects in Saudi Arabia 2024.pdfTop 10 Oil and Gas Projects in Saudi Arabia 2024.pdf
Top 10 Oil and Gas Projects in Saudi Arabia 2024.pdf
 
Recycled Concrete Aggregate in Construction Part III
Recycled Concrete Aggregate in Construction Part IIIRecycled Concrete Aggregate in Construction Part III
Recycled Concrete Aggregate in Construction Part III
 
Cosmetic shop management system project report.pdf
Cosmetic shop management system project report.pdfCosmetic shop management system project report.pdf
Cosmetic shop management system project report.pdf
 
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理
一比一原版(IIT毕业证)伊利诺伊理工大学毕业证成绩单专业办理
 
Planning Of Procurement o different goods and services
Planning Of Procurement o different goods and servicesPlanning Of Procurement o different goods and services
Planning Of Procurement o different goods and services
 
Building Electrical System Design & Installation
Building Electrical System Design & InstallationBuilding Electrical System Design & Installation
Building Electrical System Design & Installation
 
Immunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary AttacksImmunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary Attacks
 
Basic Industrial Engineering terms for apparel
Basic Industrial Engineering terms for apparelBasic Industrial Engineering terms for apparel
Basic Industrial Engineering terms for apparel
 
Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024
 
Governing Equations for Fundamental Aerodynamics_Anderson2010.pdf
Governing Equations for Fundamental Aerodynamics_Anderson2010.pdfGoverning Equations for Fundamental Aerodynamics_Anderson2010.pdf
Governing Equations for Fundamental Aerodynamics_Anderson2010.pdf
 
Steel & Timber Design according to British Standard
Steel & Timber Design according to British StandardSteel & Timber Design according to British Standard
Steel & Timber Design according to British Standard
 

CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트

  • 1. CUDA Raytracing을 이용한 voxel 오브젝트 가시성 검사 유영천 https://megayuchi.com Tw: @dgtman
  • 2.
  • 3. 도형을 화면에 표시하는 방법 • Rasterization • Ray Tracing
  • 4.
  • 6. X 𝑉𝑖𝑒𝑤 matrix−1 𝑃𝑖𝑥𝑒𝑙. 𝑥 ÷ 𝑊𝑖𝑑𝑡ℎ × 2 − 1 𝑝𝑟𝑜𝑗𝑒𝑐𝑡𝑖𝑜𝑛 𝑚𝑎𝑡𝑟𝑖𝑥[0][0] −(𝑃𝑖𝑥𝑒𝑙. 𝑦 ÷ 𝐻𝑒𝑖𝑔ℎ𝑡 × 2 − 1) 𝑝𝑟𝑜𝑗𝑒𝑐𝑡𝑖𝑜𝑛 𝑚𝑎𝑡𝑟𝑖𝑥[1][1] 0 ,1 , 0 Ray Tracing ,
  • 7. 가장 앞의 픽셀을 그리는 방법 Rasterization • 기본적으로 모든 매시는 순서 없이 그린다. • Z-buffer를 이용해서 가장 앞에 있는 픽셀로 덮어쓴다. • 삼각형->WVP 변환 후 얻은 z값을 z-buffer에 기록. 현재 Z값이 기존 z값보다 작으면 기존 픽셀을 덮어쓴다. Ray Tracing • depth버퍼 없다. • Ray가 발사됐을 때 Ray마다 가장 앞에 있는 픽셀을 찾아낸다.
  • 8. Z-Buffer (-1.0, -1.0) (1.0, -1.0) (-1.0, 1.0) (1.0, 1.0) (0, Height) (Width, Height) (Width, 0) 1.0 1.0 1.0 1.0 1.0 0.47 1.0 0.46 1.0 0.41 1.0 0.42 0.42 0.45 0.43 0.44 1.0 0.43 1.0 0.43 0.43 0.43 0.43 0.43 1.0 0.42 1.0 0.41 0.43 0.46 0.45 0.46 0.47 0.46 0.46 0.46 0.46 0.44 0.45 0.46 0.46 0.45 0.45 0.46 0.45 0.46 0.46 0.44 0.44 0.42 1.0 0.45 0.46 1.0 1.0 0.46 1.0 0.47 0.47 1.0 1.0 1.0 1.0 0.45 1.0 0.45 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.46 0.47 1.0 0.48 0.47 0.48 0.48 0.48 0.48 1.0 0.48 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.48 0.48 0.48 0.48 1.0 1.0 1.0 1.0 0.44 NDC (0, 0) Rasterization
  • 9. Ray tracing에서 어느 오브젝트, 어느 삼각형이 앞에 있는지 어떻게 알지? 쉬운방법 • Ray 하나당 모든 오브젝트를 순회한다. • Ray가 많아지면 당연히 미친듯이 느려진다.
  • 10. KD-Tree • X,Y,Z 축에 정렬된 BSP Tree. • 각 node를 3가지 축과 축방향의 거리 D값으로 표현할 수 있다. • KD-Tree를 탐색할 때 카메라로부터 가까운 node와 먼 node를 찾을 수 있다. • Ray의 교차판정 등에 많이 사용한다. • Near node와 Far node를 구분하지 않는다면 Quad-Tree와 별 차이는 없다. • 게임의 월드를 KD-Tree로 관리하는 경우가 많다.
  • 11. KD-Tree를 이용한 가장 가까운 오브젝트 탐색 • root node가 ray와 충돌하지 않으면 순회 중지. • 현재 node의 자식 node 2개중 한 개만 ray와 충돌할 경우 충돌하는 노드를 방문. • 현재 node의 자식 node 2개가 모두 충돌할 경우 먼 node를 stack에 push하고 가까운 node를 방문. • 방문한 node가 leaf일 때 leaf에 들어있는 매시의 삼각형들에 대해서 ray와 충돌체크. 현재 leaf에서 충돌한 경우 t값을 저장하고 순회 중지. • 방문한 node가 leaf일 때 어떤 삼각형도 ray와 충돌하지 않는 경우 stack에서 node포인터를 꺼내서 방문.
  • 12. KD-Tree Traversal 0 1 2 node A node A-a node A-b node A-b-a node A-b-b node A node A-a node A-b node A-b-a node A-b-b
  • 14. S/W Occlusion Culling • 적당히 작은 사이즈의 버퍼에 최대한 간소화된 방법으로 매시를 그려본다. 이 과정에서 얻은 depth값을 버퍼에 기록. • 오브젝트 또는 트리의 node/leaf를 depth버퍼에 대해 z-test. 렌더링 파이프라인에 넣기 전에 이 단계에서 가려지는 오브젝트를 걸러낸다. • 이것을 GPU에서 처리하면 H/W Occlusion Culling. • S/W방식(CPU에서)으로 처리하는 이유는 GPU와의 통신시간을 트리 탐색중 바로 적용할 수 있기 때문.
  • 15. 복셀 월드에서의 S/W Occlusion Culling • 복셀 지형 특성상 안이 꽉 차 있고 모양이 복잡하다. • 복셀 오브젝트간 가리고 가려지는 상황이 엄청 빈번하다. • S/W Occlusion Culling을 시도했을때 depth를 써넣고 테스트 하는 비용이 너무 크다. • 복셀 오브젝트 개수만 해도 5-10만개씩 되기 때문에 이미 수집한 5-10만개의 오브젝트에서 보이지 않는 오브젝트를 제거할때도 생각보다 CPU시간을 많이 소모한다. • S/W Occlusion Culling에 적합한가?
  • 16. Ray Tracing을 이용한 가시성 검사 • Ray Tracing에선 처음부터 가려지는 픽셀-오브젝트는 그릴 일이 없다. • Z-test도 필요없다. • Ray를 쏴서 충돌하는 픽셀의 컬러값 대신 충돌한 지형지물의 오브젝트 ID 또는 leaf의 ID를 기록하면 정확히 보이는 오브젝트 목록만 얻을 수 있다.
  • 17. Ray Tracing을 이용한 가시성 검사-복셀월드 • 복셀 오브젝트당 삼각형 개수는 비교적 적은 편이다. • 변경/삭제가 빈번하지 않다. • 복셀 오브젝트 변경시 트리를 재구축할 필요없이 leaf의 삼각형만 갱신해주면 된다. • S/W Occlusion Culling으로 보이지 않는 오브젝트를 제외시키기보다 Ray Tracing을 이용해서 보이는 오브젝트만을 골라내는 편이 더 효율적이다.
  • 18. Ray Tracing을 이용한 복셀월드의 가시성 검사 1. 메모리에 적당한 사이즈의 화면 버퍼를 만든다(ex: 512×512) 2. view matrix, projection matrix를 이용해서 각 픽셀로부터 월드공간의 ray를 만든다. 3. 각 픽셀에서 출발한 ray로 복셀 오브젝트들로 구성된 KD-Tree를 순회하며 ray가 충돌하는 가장 가까운 오브젝트를 찾는다. 4. 오브젝트를 찾으면 화면 버퍼에 오브젝트의 ID를 기록한다.(테스트 시에는 depth값-ray가 충돌했을 때의 t값) 5. 버퍼의 기록된 오브젝트 ID를 가지고 렌더링 될 복셀 오브젝트 목록을 만든다.
  • 19.
  • 20. CPU vs GPU • CPU로 구현하면 안되나? • CPU로 구현해보자. [i7 8700k 6 cores – 12 threads] Single Thread - 2408.62 ms Multi Thread – 12 thread(HT enabled) - 353.59 ms 60프레임을 위해서는 16ms를 초과하면 안된다! CPU로는 무리!
  • 22. CUDA를 이용한 구현 • CPU로는 너무 느리다. GPU를 사용하자. • DirectX Raytracing API를 사용하면 간단하게 구현할 수 있다. 그러나… • GTX 900시리즈 같은 DXR 지원 안하는 GPU에서도 성능 향상을 보고 싶다. • 그래픽 API를 사용할 수 없는 환경에서도 이 기능을 사용하고 싶다. 예를 들면 서버라든가. • 그렇다면 CUDA를 사용한다.
  • 23. 기본 구현 • 트리 재구성 비용을 줄이기 위해 트리는 최대 depth만큼 미리 빌드해 둔다. • 트리는 어차피 CPU측에 먼저 구현해야 한다. (picking, CPU를 이용한 오브젝트 수집 등) • GPU측(CUDA memory)에 트리 전체를 업데이트. • 복셀 오브젝트가 추가/삭제/변경 될 경우 CUDA측 트리의 leaf내용만 업데이트. • Raytracing을 이용한 depth, Object ID를 저장하는 코드는 CPU 코드로 먼저 작성한다. 1)검증, 2) 포팅 용이함을 위해서다.
  • 24. GPU측에 KD-Tree구현하기 • KD-Tree 순회 코드는 CPU코드를 거의 그대로 사용할 수 있다. • CUDA는 device memor와 host memory를 구분하므로 트리를 구축할때는 간단하지 않다. 팁을 제시하자면… 1. cudaMallocManaged()를 사용한다. – 가장 쉽다. 하지만 느리다. 2. cudaMalloc()/cudaMallocHost()를 이용해서 구현한다. a. Host메모리에 먼저 구현. 트리를 배열로 표현. b. 각 노드는 child node를 저장할때 포인터 대신 node 배열에서의 index로 저장. c. 똑같은 사이즈의 Device메모리를 만들어서 host->device로 한번에 카피.
  • 25. GPU Memory System Memory CUDA Code node 0 node 1 node 2 node 3 node 4 node 5 node 0 node 1 node 2 node 3 node 4 node 5 node 0 node 1 node 2 node 3 node 4 node 5 KD_AXIS axis; float d; DWORD child[2]; cudaMemcpy() Visual Studio Debugger Parallel NSight Debugger
  • 26. 성능 테스트 [i7 8700k 6 cores – 12 threads] Single Thread - 2408.62 ms Multi Thread – 12 thread(HT enabled) - 353.59 ms CUDA(GTX970) - 12.2468 ms 60프레임 가능! 사용 가능!
  • 27. 성능 테스트 SW Occlusion Culling CUDA Raytracing (GTX970) delta DX11 (1920x1200) 렌더링된 오브젝트 3580 2428 -32% 카메라 정지시 FPS 294 345 +17% 카메라 이동시 FPS 220 246 +11% DXR (1920x1200) 렌더링된 오브젝트 2675 1873 -29% 카메라 정지시 FPS 20 21 +5% 카메라 이동시 FPS 19 19 0%
  • 28. 오차 문제 • Ray Tracing버퍼의 해상도가 512x512정도면 충분한가? • 일반적으로 게임 해상도는 1920x1080이상이므로 512x512버퍼의 Raytracing테스트로는 완벽하지 않을 수 있다. • 멀리 있는 오브젝트들의 앞뒤 관계에서 오차가 발생할 수 있다. • 그렇다고 게임의 네이티브 해상도와 일치시키면 너무 느리다.
  • 29. 오차 문제 - 해결안 • Ray Tracing버퍼의 해상도가 512x512정도면 충분한가? • 일반적으로 게임 해상도는 1920x1080이상이므로 512x512버퍼의 Raytracing테스트로는 완벽하지 않을 수 있다. • 멀리 있는 오브젝트들의 앞뒤 관계에서 오차가 발생할 수 있다. • 그렇다고 게임의 네이티브 해상도와 일치시키면 너무 느리다. • 오브젝트의 ID대신 KD-Tree의 leaf의 ID를 저장한다. • 다소의 불필요한 렌더링을 감수한다. 오차를 줄인다.
  • 30.
  • 31. 제약사항 • nvidia GPU 한정 • GPU 성능 요구사항
  • 32. 생각해볼 주제 • CUDA 최적화 • OpenCL로의 포팅 • 디버깅 환경이 거지같지만 포인터가 있으니 ‘의지’가 있다면 가능. • Compute Shader로의 포팅 • 이론상 불가능하진 않지만 포인터가 없기 때문에 꽤~~~~ 빡실듯.