일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 입방체 매핑
- TCP/IP
- effective C++
- InputManager
- light
- 동적 색인화
- 네트워크
- 직교 투영
- Frustum Culling
- DirectX12
- Deferred Rendering
- 장치 초기화
- C++
- 디퍼드 렌더링
- Direct3D12
- 게임 디자인 패턴
- 큐브 매핑
- 게임 프로그래밍
- 노멀 맵핑
- 조명 처리
- 절두체 컬링
- 게임 클래스
- 네트워크 게임 프로그래밍
- Render Target
- FrameResource
- Dynamic Indexing
- direct3d
- gitlab
- DirectX
- gitscm
- Today
- Total
목록DirectX12 (6)
코승호딩의 메모장
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/V0LGj/btszlkriCnM/LgmKO18v349YEKnK3ZDnOk/img.gif)
이번 글에서는 이 전에 렌더 타겟을 통해서 출력한 값들을 기반으로 모두 합쳐서 지연 렌더링 Deferred Rendering을 구현해 보도록 한다. 렌더 타겟은 총 5가지로 포지션, 노말, 텍스처, 프레넬, 매끄러움으로 SV_Target0~4까지 출력하였다. 그리고 이들을 합치는 것은 그렇게 어려운 작업은 아니다. 그러나 프레넬과 매끄러움은 굳이 UI로 표현해 줄 필요성을 못 느꼈기 때문에 이 자리에 대신 조명 처리를 통해 얻은 diffuse와 specular 텍스처를 추가하도록 할 것이다. 오류 수정 이 전에 구현하였을 때는 데스크탑으로 실행하여서 별 문제가 뜨지 않았다. 그러나 같은 프로젝트를 노트북으로 실행했을 때는 Ref Count 문제와 Back Buffer Index 문제가 떠서 실행조차 되지..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/uYmy9/btsy3g9opPx/Ssdg9fkWzKHOrFIjhTRPcK/img.gif)
이번 글에서는 렌더 타겟을 구현하기로 한다. 기존에 Forward 렌더링 방식은 제한되는 것과 성능이 좋지 않기 때문에 Deferred 렌더링 방식으로 변경해야 한다. 과거에는 대부분 Forward 방식을 사용했지만 현대 게임들은 대부분 Deferred 방식을 사용한다. 지연 렌더링을 의미하는 Deferred 렌더링은 위키백과에 자세히 설명이 되어 있다. 이번 글에서는 Deferred을 구현하는 것이 아니라 Deferred 렌더링을 하기 위해서 여러 개의 렌더 타겟에 쉐이더 프로그램으로 계산한 결과를 출력하는 것까지가 목표이다. Deferred shading - Wikipedia From Wikipedia, the free encyclopedia Screen-space shading technique D..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/FTSim/btsyUgouUnA/bm8qDAGA4R4ppUczIkQdkk/img.png)
이번 글에서는 직교 투영을 이용하여 UI와 같은 오브젝트를 구현하려고 한다. 직교 투영은 원근 투영과는 달리 z 값에 다라 크기가 줄어들거나 늘어나는 것이 아니며 간단하게 DirectX의 XMMatrixOrthographicLH 함수를 이용해서 투영 변환 행렬을 생성하면 된다. 주의할 점은 이 전까지는 카메라로 생성되는 뷰 행렬과 투영 행렬은 모두 패스 당 상수 버퍼 즉 패스 당 한 번만 업데이트 되도록 하였다. 그러나 이렇게만 구현한다면 여러 개의 게임 오브젝트 중에 UI만 찍을 카메라로 직교 투영 행렬을 상수 버퍼에 넘겨주더라도 그 후에 다시 기본 오브젝트들을 찍을 메인 카메라의 원근 투영 행렬 계산을 통해 원근 투영 행렬로 덮어 써 질 것이다. 따라서 다른 방법을 생각해봐야 한다. 가장 쉽게 생각할..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/uFwOE/btsyVansPFW/KLGdJYNlEaakMnAEm3glFk/img.png)
이번 글에서는 Dynamic Indexing(동적 색인화)를 구현하기로 한다. 동적 색인화란 쉐이더 프로그램 안에서 자원 배열을 동적으로 색인화하는 것이다. 여기서 말하는 자원 배열은 텍스처 배열이다. 이 배열의 색인화에 사용할 수 있는 색인들은 다양한데 우선 상수 버퍼의 요소를 색인으로 지정할 수 있다. 그리고 시스템 밸류 값인 SV_PrimitiveID, SV_VertexID, SV_DispatchID, SV_InstanceID 등을 색인으로 사용할 수 있다. 또한 셰이더 안에서 계산한 결과를 색인으로 사용할 수 있으며 텍스처에서 추출한 값을 색인으로 사용할 수 있고 정점 구조체의 한 성분을 색인으로 사용할 수도 있다. 이렇게 자원 배열을 색인화한다면 다양하게 구현이 가능하다. 동적 색인화 개요 cb..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/k1teZ/btsyTqksjTX/yqsN68WkTFr3QpMgGJ5uhk/img.png)
이번 글에서는 프러스텀 컬링을 구현하려고 한다. 현재까지 월드 기준으로 변환을 진행하였으며 카메라 행렬을 기준으로 생성한 프러스텀을 뷰 변환의 역 변환을 통하여 월드 변환으로 변환한 후에 씬에 배치된 게임 오브젝트와의 충돌 처리를 통해 프러스텀 컬링을 구현해야 한다. 프러스텀의 각 면들을 수학적 계산을 통해 해당 오브젝트의 바운딩 박스가 충돌했는지를 구해야 하지만 DirectX12에서는 DirectXCollision.h를 통해서 바운딩 박스와 바운딩 프러스텀을 제공한다. 따라서 이를 사용해서 구현하기로 한다. class Camera : public Component { //... void GenerateFrustum(); bool IsInFrustum(BoundingOrientedBox& boundsOO..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bQ583x/btstCEVLQmX/I7EH0XOjP5mI9sWsN4UpS1/img.png)
이번 포스팅은 DirectX12에서 전체 화면 모드로의 전환을 구현하는 방법을 기술합니다. 책의 내용에 전체 화면 관련 내용이 자세하게 나와 있지 않아 따로 내용을 추가적으로 기술하였습니다. 내용 중에 혹시라도 틀린 부분이나 추가해야할 부분이 있다면 피드백 해주시면 정말 감사드리겠습니다. 우선 전체 화면 모드는 시각적인 몰입도 뿐만 아니라 게임의 성능에도 영향을 끼친다. 전체 화면 모드에서는 DXGI는 플립(Flip)을 수행할 수 있다. 앞 포스팅에서 말했듯이 플립은 후면 버퍼와 전면 버퍼의 포인터만 하드웨어적으로 변경하기 때문에 후면 버퍼를 전면 버퍼에 모두 복사하는 블리트보다 성능이 좋다. 그러나 주의할 점은 DXGI가 플립을 수행하기 위해서는 후면 버퍼와 전면 버퍼의 크기와 형식이 일치해야 한다는 ..