일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Frustum Culling
- direct3d
- 장치 초기화
- effective C++
- 입방체 매핑
- 조명 처리
- 네트워크 게임 프로그래밍
- Deferred Rendering
- 절두체 컬링
- 네트워크
- 노멀 맵핑
- gitscm
- gitlab
- Dynamic Indexing
- FrameResource
- 동적 색인화
- 게임 클래스
- Render Target
- InputManager
- 큐브 매핑
- DirectX12
- C++
- 게임 프로그래밍
- 게임 디자인 패턴
- TCP/IP
- light
- 직교 투영
- Direct3D12
- DirectX
- 디퍼드 렌더링
- Today
- Total
목록DirectX12/DirectX12 응용 (19)
코승호딩의 메모장
![](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/r0VXJ/btsyBgCfFOv/cmr6KWERn5VKzJlmJ7lLI1/img.gif)
이번 글에서는 큐브 매핑을 통해 텍스처를 하늘에 입히도록 한다. 큐브 매핑을 하는 방법은 다양하다. 우선 기존의 TEXTURE2D SRV를 사용하여 일반적인 텍스처를 구에 입히는 방법이 있다. 그러나 이번 구현에서는 보다 정확한 구현을 위해 TEXTURECUBE SRV를 사용하여 큐브 매핑을 하려 한다. Direct3D에서는 2차원 텍스처를 적용할 때와는 달리, 큐브 맵의 한 텍셀을 2차원 텍스처 좌표로 지칭할 수 없다. 따라서 큐브 맵의 한 텍셀을 식별하기 위해서는 3차원 텍스처 좌표가 필요하다. 이를 조회 벡터 v라고 부른다. 위 그림은 3차원을 간단하게 2차원으로 표현한 모습이다. 3차원에서의 텍셀은 원점에서 v의 방향으로 나아가는 반직선의 조회 벡터가 큐브 맵의 한 면과 교차하는 지점에 있는 것에..