DXR – RTAO와 denoising

DXR 시작할때는 RTAO와 denoising을 구현할 생각이 없었다. ray tracing이 렌더러의 미래라고 생각하니까 DXR 기반의 프레임워크만 구축하면 충분했다. 시각적으로는 반사를 이쁘게 처리할 수 있으면 그걸로 족했다.하다보니 사람이 욕심이 생기더라. 원론적인 ray tracing만 해서는 반사처리 외에 다른 시각적인 요소는 향상시킬 여지가 없었다.내 프로젝트는 아트 디자이너의 도움을 전혀 받지 못하니 이 그래픽의 썰렁함을 조금이라도 극복하려면 렌더링 코드를 향상시키는 … More DXR – RTAO와 denoising

DirectX Raytracing – 복셀월드에 raytracing적용.

복셀월드 렌더링에 raytracing을 적용했다.복셀 데이터는 삼각형 데이터와 상당히 구조가 다른데다가 오브젝트 개수가 엄청나게 많아질수 있으므로 작업이 간단하지 않았다. 또한 복셀 오브젝트는 모양이 변형될 수 있으므로 일반적인 static mesh와는 완전히 다르다. 어쨌든 꽤 빡시게 작업해서 기존 기능들은 다 작동하게 만들었다. 그런데 복셀 오브젝트 하나당 BLAS한개씩을 생성했더니 문제가 있다. 마을맵의 경우 복셀 오브젝트가 5만개가 넘는데 그 수만큼 … More DirectX Raytracing – 복셀월드에 raytracing적용.

DirectX Raytracing – GBuffer로부터의 raytracing

i7 8700K , GTX1660TI , 1920×1200 해상도에서 두 가지 방식으로 테스트. [화면으로부터 raytracing]화면 픽셀로부터 카메라 방향으로 첫번째 TraceRay()호출.충돌하는 지오메트리가 있으면 GI, 반사, 그림자 등을 계산하기 위해 두번째 TraceRay()호출35fps , GPU점유율 89% [GBuffer로부터 raytracing]GBuffer(diffuse, normal, depth)로부터 픽셀을 읽어서 depth값 < 1 이면 ray가 hit한 것으로 간주. GI, 반사, 그림자등을 계산하기 위해 첫번째 TraceRay() 호출.56fps , GPU점유율 … More DirectX Raytracing – GBuffer로부터의 raytracing

DirectX Raytracing – Hit group, Shader Record Table Acceleration Structure 갱신 등

계속 내 엔진의 D3D12렌더러에 DirectX Raytracing 기능을 적용하고 있다. 그 동안 상당히 많은 깨달음이 있었고 코드도 거의 엄청나게 갈아엎었다. 어떻게 쓰는지 감을 잡아가고 있다. Local Root Parameter , Hit Group관련하나의 피봇을 공유하는 매시들의 집합을 오브젝트라 할때, 이 오브젝트 안에서는 여러개의 재질(텍스처등)을 사용할 수 있고 이 경우 각각은 다른 텍스처 좌표를 갖기 때문에 각각 다른 인덱스 … More DirectX Raytracing – Hit group, Shader Record Table Acceleration Structure 갱신 등

3D 길찾기 구현중 #4 – voxel지형으로부터의 네비게이션 매시 생성

3D길찾기를 시도하면서 큰 목표중 하나가 복셀맵에서 길찾기를 하는것이었다. marching cube알고리즘으로 일단 voxel지형에서 삼각형을 생성할 수 있다. 이걸 네비게이션 매시로 사용해서 길찾기를 하면 되기는 하는데…..문제가 있다. 복셀 매시로부터 삼각형 매시를 생성. 삼각형이 미친듯이 많이 나온다. 복셀 매시로부터 생성한 삼각형을 최적화. 인접한 삼각형간에 엣지를 공유할 수 없게 된다. 엣지를 공유하지 않으므로 네비게이션 매시로 사용할 수 없게 된다. … More 3D 길찾기 구현중 #4 – voxel지형으로부터의 네비게이션 매시 생성

3D 길찾기 구현중 #3 – visibility 테스트와 유사한 Stupid Funnel 알고리즘 적용

Stupid Funnel 알고리즘을 적용했다. 알고리즘 내용은 아래 링크에서 참고. http://jceipek.com/Olin-Coding-Tutorials/pathing.html#funnel-algorithm 처음엔 명확하게 이해가 안됐다. 어떤 문서에선 실로 감싼다는 개념으로 설명하는데 이해가 되지 않았다. 일단 꺽이는 위치의 좌표를 구하는건 스킵하고 직선이동이 가능한 경로를 찾는데 촛점을 맞춰서 구현을 시작했다. 몇 일 작업을 하다보니 이 알고리즘의 기본 원리가 보였다. 이거 3D에서 가시성 검사할때 사용하는 Portal-Culling이랑 개념이 같다. Room/Portal방식에서 … More 3D 길찾기 구현중 #3 – visibility 테스트와 유사한 Stupid Funnel 알고리즘 적용

3D 길찾기 구현중 #2

‘복셀 데이터 -> 마칭큐브로 삼각형 변환 -> 네비게이션 매시 변환’ 을 해보고 나서서 인접한 엣지를 타고 삼각형들간의 그래프 자료구조를 만드는게 더럽게 느리다는 사실을 깨달았다. 코드를 왕창 뜯어고쳐서 50배쯤 빠르게 만들고나서 다시 테스트를 했다. 복셀맵으로부터 생성한 네비게이션 매시는 삼각형 분포가 너무 조밀하거나(최적화 안했을때), 혹은 엣지가 자료구조상 연결이 될 수 없거나(최적화 했을때) 복셀쪽은 생각을 좀더 해보기로 하고 … More 3D 길찾기 구현중 #2