Engine Dev – Deferred Shading적용

D3D12엔진을 Forward Shading에서 Deferred Shading체계로 바꿨다. 아니 정확히는 Lighting은 Forward로 두고, 그림자 처리는 Deferred로 바꿨다. 부분적이지만 Deferred Shading으로 바꾼 이유는 대량의 Voxel을 출력할때 self-shadow를 적용하면 forward에선 와장창 느려지기 때문이다. 사실상 상당히 많은 voxel들이 가려져서 보이지 않음에도 불구하고 보이지 않는 voxel들까지도 depth-test를 하고 있는게 꽤 심각한 성능저하를 가져왔다. 이 부분은 Deferred Shading으로 바꾸고 확실한 속도향상을 기대하고 있다. … More Engine Dev – Deferred Shading적용

GetTickCount() -> GetTickCount64()로 변경하기.

1. Redstone에선 UWP에서 IOCP를 쓸 수 있다. 그래서 개발중인 프로젝트의 UWP버전에서 StreamSocket을 사용한 네트워크코드를 걷어내고 IOCP기반의 win32코드로 교체하기로 결정. 2. 코드 고치다보니 GetTickCount()가 거슬림. PC가 부팅되고 최대 47일밖에 보장이 안되는 카운터라 안그래도 계속 바꾸려고 생각하고 있었음. 좋다. GetTickCount64()로 바꾸자. 3. 이게 조심해서 고쳐야 하는게  4바이트에서 8바이트로 사이즈가 증가하는거라 메모리 옵셋으로 다루는 부분이 있는지 확인하고 언더플로우나 … More GetTickCount() -> GetTickCount64()로 변경하기.

Windows 10 Redstone의 UWP에서 IOCP사용 가능.

예전에도 언급했지만 Windows 10 Redstone에선 UWP에서도 IOCP사용가능하다. 예전에 만들었던 IOCP 네트워크 라이브러리를 UWP로 포팅완료했다. 잘 작동한다. 수정한 코드는 클라이언트에서 사용시 소켓이벤트를 통보하기 위한 HWND와 PostMessage()를 CoreDispatcher와 람다함수로 바꾼것 뿐. 스레드와 winsock코드는 한줄도 안고치고 빌드 성공. 이제 UWP로 서버도 만들 수 있다.… 만세~

Engine Dev – Clipping Triangle for SW Occlusion Culling

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

Engine Dev – SW Occlusion Culling

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

GameDev – Object Culling #1

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

도장 찍다 망해버려라.

이젠 하드웨어 제조사도 자신들의 제품을 만들때 CPU를 직접 만들지 않는다. 일반적으로 생산되는 CPU를 사용한다. 왜냐하면 직접 CPU를 만들기는 너무나 어렵고 직접 만들어봐야 가격대 성능비가 형편없을게 분명하기 때문이다. 아마 게임엔진을 사 쓰는것도 비슷한 이유겠지. 그렇지만 나는 이 부분에 대해서 완전 동의할 수가 없다. 나 혼자서 언리얼 엔진 정도를 만들순 없겠지만…나 혼자서도 게임을 개발할 수 있는 정도의 … More 도장 찍다 망해버려라.