D3D12엔진개발 – D3DQUERY를 이용한 Occlusion Culling

며칠전 개발중인 D3D12렌더러에 Compute Shader를  이용한 Hi-Z Occlusion Culling을 만들어넣었었다. 물론 Occlusion Culling에 걸리는 시간으로만 보면 Hi-Z Occlusion Culling이 훨씬 빠르다. 그러나 Hi-Z Culling은 Bounding Sphere를 가지고 테스트 하기 때문에 정확도가 많이 떨어진다. 보이지 않는 오브젝트도 보인다고 판정할 확률이 높다. 그래서 이전 D3D11렌더러에서도 Hi-Z Culling이후에 D3DQUERY를 이용한 Occlusion Culling을 사용했다. D3DQUERY Occlusion Culling을 추가로 사용하면 … More D3D12엔진개발 – D3DQUERY를 이용한 Occlusion Culling

D3D12엔진개발 – Hierachical z Map Occlusion Culling

D3D11버전에서 구현했던 Compute Shader를 이용한 Hi-Z Occlusion Culling을 D3D12엔진에서 구현했다. 기본 개념과 구현에 대해서는 자세히 적지 않겠다. 예전에 KASA에서 밝표했던 내용이 있으므로 발표자료를 첨부한다. Hierachical z Map Occlusion Culling from YEONG-CHEON YOU D3D12에서 Compute Shader를 사용하려면 어떤 API들을 사용해야하는지 찾느라 좀 애먹었다. Compute Shader를 위한 ID3DPipelineState를 만들려면D3D12_GRAPHICS_PIPELINE_STATE_DESC구조체 대신 D3D12_COMPUTE_PIPELINE_STATE_DESC를 사용해야한다. 또한 CreateGraphicsPipelineState()대신 ID3D12Device::CreateComputePipelineState()를 사용한다. 이거 … More D3D12엔진개발 – Hierachical z Map Occlusion Culling

실시간 게임에서 AI한테 지지 않는다고?

퀘이크에서의 bot들도 그렇고. 전술 부분에선 얘들이 실수할 일이 없기 때문에 절대 안짐. 내 게임 Project D Online에선 몬스터들이 플레이어와 완전히 같은 무기를 사용했다. 머신건이든 로켓런처든 레일건이든 판정 조건은 플레이어와 완전히 동일함. 확률로 판정하는게 아니고 실제 타격이 되었느냐를 산술적으로 검출했다. 로켓은 탄이 날라가서 충돌후 폭발하고 나서야 데미지를 적용했고 머신건,레일건은 거의 광속에 가깝게 날아간다고 가정하고 ray로 체크함. … More 실시간 게임에서 AI한테 지지 않는다고?

Surface book Windows 10 th2 클린 인스톨 후기

서피스북 처음 구입하면 현재 최신 빌드인 th2 (10586 1511)빌드가 아닌 그냥 th1(10586)빌드가 설치되어있습니다. 구입하자마자 엄청나게 업데이트 시간을 들여서 th2로 넘어가게 되는데요. 이게 영 찝찝하죠. 요새 소소한 문제들이 있어서…앞의 찝찝함도 있고, 혹시나 몇 가지 문제는 해결되지 않을까 하여 결국 클린 인스톨을 결심했습니다. 클린인스톨 방법은 서피스프로 제품들과 기본적으로 동일합니다. 1. 최신 Windows 10 빌드를 넣은 부팅 가능한 … More Surface book Windows 10 th2 클린 인스톨 후기

D3D12엔진개발 – PipelineState 조합(폭발) 처리

D3D12렌더러 개발을 시작하면서 한번 언급했던 내용이다. PipelineState폭발. D3D12에선 Render State의 각 항목들을 개별적으로 바꿀 방법이 없다. 무슨 소린고 하니 A라는 VertexShader를 사용해서 렌더링했다가 모든 Render State를 그대로 유지한 상태에서 B라는 VertexShader로 바꿔서 렌더링하고 싶다…이런거 불가능하다. 알파블랜딩 상태도 마찬가지이고 Z-Write를 끌지 켤지, Z-Test를 할지 말지도 마찬가지다. 이 모든 상태들은 ID3D12PipelineState객체 한개로 묶어서 처리된다. D3D12_GRAPHICS_PIPELINE_STATE_DESC구조체 각 상태들을 설정해서 ID3D12PipelineState객체를 … More D3D12엔진개발 – PipelineState 조합(폭발) 처리

D3D12엔진개발 – Light Map Object를 위한 Texture Update

절대로 움직이지 않는 static한 오브젝트들은 Light Map을 사용한다. Graphics API를 사용하는 계층 말고 그 위의 상위 계층에서 Light Map의 좌표를 부여하고 각 Texel의 광도를 계산한다. 렌더러에서는 이미지 데이타로 받아서 Light Map Texture를 생성하고 렌더링할 뿐이다. 따라서 D3D11 -> D3D12로 전환되어도 Light Map처리 자체가 바뀌진 않는다. D3D Resource로서의 Light Texture 다루는 방법만 바뀔 뿐. Light Texture는 … More D3D12엔진개발 – Light Map Object를 위한 Texture Update

win32 or UWP에서 인터넷에 연결된 적절한 IP가져오기

요새는 머신에 여러개의 네트워크 장치가 붙어있다. 랜카드가 여러개인 경우도 있고, 그렇지 않더라도 VM등 가상 네트워크 디바이스가 여러개 존재하는 경우가 대부분이다. 따라서 어플리케이션이 접속을 받아야하는 경우에 어느 네트워크 장치의 IP에 bind해야할지 난감할때가 많다. 그래서 이럴때 사용할 코드를 작성했다. win32의 경우는 dns주소와 gateway가 설정된 경우를 찾아서 인터넷에 접속한걸로 간주한다. UWP의 경우 NetworkInformation::GetInternetConnectionProfile()로 인터넷에 연결된 네트워크 장치를 찾는다. … More win32 or UWP에서 인터넷에 연결된 적절한 IP가져오기