삼각형 베이스 맵에서의 SW Occlusion Culling

삼각형 베이스 맵에서의 SW Occlusion Culling 작업중. 복셀 지형을 렌더링할때 성능향상을 위해 사용했던 SW Occlusion Culling을 삼각형 베이스 맵에도 적용한다. KD-Tree를 순회할때 카메라 위치에 가까운 leaf부터 방문하게 되므로 방문하는 leaf의 삼각형들을 차곡차곡 Rasterize/z-test 해가면 z-buffer상에서 가려지는 leaf는 조기에 제외시킬 수 있다. SW Rasterizer/Tester는 작년까지 죽어라 다듬어놨기 때문에 더 손볼게 없다. 512×512버퍼에 KD-Tree를 순회하면서 프러스텀에 걸치는 … More 삼각형 베이스 맵에서의 SW Occlusion Culling

GPU를 이용한 PVS #4 – 게임 클라이언트 테스트

맵에디터가 아닌 게임 클라이언트에서의 테스트다. 오프라인 PVS빌드에 GPU 점유율 86%정도로 약 13분이 걸렸다. Voxelization에선 그나마 DX12버전이 약간 더 빨랐는데, 이 경우는 그냥 DX11이 더 빠르다. 더 정확히 얘기하면 DX11의 싱글스레드로 CPU점유율 20%, GPU점유율 86% – 13분(대략) 였고, DX12의 멀티스레드(6스레드)로 CPU점유율 90%, GPU점유율 100% – 13분 30초(대략) 이었다. DX12는 정말 답이 없다. 아마 AMD GPU였으면 그래도 … More GPU를 이용한 PVS #4 – 게임 클라이언트 테스트

GPU를 이용한 PVS #3.

현재까지 구현한 방법에는 약간의 문제가 있다. 그냥 딱 잘라 말하면 정밀도 문제다. 결과적으로 특정 공간에서 보여야할 오브젝트가 보이지 않는 현상이 일어난다. 정밀도를 높이면 높일수록 빌드시간이 길어진다. 정말 제대로 하려면 어마어마한 시간이 필요하다. 그래서 결국 지난 2주를 날렸구나..라고 생각했으나, 밑져야 본전이라는 생각으로 약간의 꼼수를 써봤다. 기존 방식대로 PVS를 계산하고(마을맵 하나에 15분), 이후 문제가 되는 공간들에 대해서만 … More GPU를 이용한 PVS #3.

GPU를 이용한 PVS계산 #2

정밀도 문제와 기타 등등 문제들이 있지만 의도한대로 작동은 한다. 영상의 앞부분은 PVS를 사용하지 않고 KD-Tree와 View Frustum culling만을 사용하여 렌더링. 당연히 가려지는 매시들을 상당수 그리고 있다. 뒷부분은 미리 계산한 가시성 테이블을 이용하여 렌더링. 100%는 아니지만 꽤 많은 수의 가려지는 매시들을(leaf단위로 잘려있는) 미리 걸러낸다. 조금 더 부연하면 KD-Tree를 타고 현재 카메라의 eye 점이 있는 leaf를 탐색. … More GPU를 이용한 PVS계산 #2

GPU를 이용한 PVS계산

[데모 설명] 카메라가 위치한 방에서 버튼을 눌러서 PvS를 계산한다. 이후 이 방으로부터 볼 수 있는 공간들은 노란색 와이어프레임으로 표시된다. 1. 월드 공간을 KD-Tree로 분할. 2. 삼각형과 교차하지 않는 공간이 leaf가 된다. 또는 특정 사이즈 이하로 공간이 작아지면 leaf가 된다. 3. leaf가 삼각형과 교차하는 경우 서브 트리로 분할. 서브트리에서 다시 삼각형과 교차하지 않는 leaf의 AABB만 수집 … More GPU를 이용한 PVS계산

겪어보지 않으면 모른다.바닥부터 만들기.

내 항상 주장하지만 남이 만들어놓은 소스 기반 위에서 작업하는거랑 까만 화면에 main()부터 찍어서 작업하는건 지구와 안드로메다 성계까지의 거리만큼 큰 차이가 있다. 아무리 썩었어도 돌아가는 소스 위에서 뭘 할때는 가시적으로 결과가 나온다. 진행은 된다. 원래 작업하려던 부분만 집중하면 된다. 아무것도 없는 상태에서 시작하면 새로운 할 일이 끊임없이 늘어난다. 꽤 깊은 뎁스를 가지는 트리를 탐색하는것과 같다. 기능 … More 겪어보지 않으면 모른다.바닥부터 만들기.

Clipping Triangle for SW Occlusion Culling

어제 x:-1 – +1, y:-1 – +1, z:0 – +1 볼륨에 대해 삼각형 클리핑 코드를 완성했고 잘 작동함을 확인했다. 그런데 카메라 돌리다보면 삼각형이 사라지거나 원래 삼각형의 빗면과 같은 기울기로 엉뚱한 곳에 삼각형이 나타나는 현상이 발생함. 원인 찾느라 엄청 해맸다. [원인] 커다란 삼각형의 점 일부가 카메라 뒷쪽으로 가는 경우, 프로젝션하고 보면 w값이 음수가 나옴. 이 경우 … More Clipping Triangle for SW Occlusion Culling

SW Occlusion Culling

아직 완전하지는 않지만 엔진에 SW Occlusion Culling기능을 넣었다. 물론 HW Occlusion Culling이 가능하다. Compute Shader를 이용한 HW Occlusion Culling과 D3DQuery를 이용한 HW Occlusion Culling기능도 이미 오래 전에 만들어놨다. 그런데 왜 SW Occlusion Culling기능을 따로 만들었는가..하면 렌더링을 위해 KD-Tree를 탐색하며 뷰프러스텀에 들어가는 복셀 오브젝트들을 탐색한다. 뷰프러스텀에 들어가는 오브젝트만 골라내도 사실 그 수가 적지 않다. 트리 순회 … More SW Occlusion Culling

Object Culling #1

네트워크 플레이의 기본 구조는 제대로 구현했다. 이제 플레이 가능한 속도를 보장할수 있도록 오브젝트 컬링을 위한 작업에 들어갔다. 우선 월드를 KD-Tree로 분할해서 복셀 오브젝트들을 집어넣었다. 뷰프러스텀에 들어가는 오브젝트를 찾을때 상위노드부터 제거하므로 탐색 효율은 확실히 좋아졌다. 하지만 이것만으론 많이 부족하다. 역시 가려진 오브젝트를 그리지 않도록 하는것이 가장 중요하다. 예전에 사용했던 Room/Portal/BSP방식도 이번엔 사용할 수 없다. 지형이 실시간으로 … More Object Culling #1

XBOX에서의 UWP앱 개발 관련 정보 몇 가지.

1.DirectX Feature Level 10.0까지만 지원됨. 이건 하드웨어 쿼리니까 소프트웨어의 문제가 아니다. GPU사양의 문제다. 그렇다면 XDK게임들도 Feature Level 10.0으로 개발했단 얘긴데…실제 칩사양 아시는 분? 그러니까 UWP on XBOX에서 DirectX 12 디바이스를 생성하려고 하면 항상 실패하는데 왜 실패하는지 이유를 알게 된 것이다. 처음엔 XBOX용 Windows 10에서 DX12가 미구현이라고 생각했는데 그게 아니다. DirectX12를 돌리기 위한 최소 Feature Level이 … More XBOX에서의 UWP앱 개발 관련 정보 몇 가지.