![[DirectX12] 섀도우 매핑 (shadow mapping), 섀도우 알고리즘 상세 정리](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBav4B%2FbtsLn7ZWbu5%2F3SkV7C8SOb9cOCLSmKtdu0%2Fimg.png)
1. 장면 깊이 렌더링 광원의 시점에서 본 장면의 깊이를 렌더링하는 과정이 있다. 이는 텍스처 대상 렌더링 ( render - to - texture )의 일종이며, 광원의 시점에서 본 장면의 깊이 값들을 깊이 버퍼에 기록하는 것을 뜻한다. 그림자 매핑 알고리즘에는 두 번의 렌더링 패스가 필요하다. 광원의 시점에서 본 장면 깊이를 그림자 맵에 렌더링플레이어 카메라에서 본 장면을 후면 버퍼에 렌더링 2. 직교 투영/정사영 (Orthographic_Projection)그림자 매핑에서 평행 광이 만들어 내는 그림자를 본뜰때 직교 투영이 필요하다. (2.1). 직교 투영 행렬 구하기 (orthogonal_projection_matrix) 벡터를 특정 벡터 공간 또는 부분 공간에 직교적으로 투영할 떄 사용하는..
![[DirectX12] 큐브맵 만들기 / StructuredBuffer](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fddpto9%2FbtsKWnQ3Aan%2FVajY9S2DAiwApSe9IDmz81%2Fimg.png)
휴 ,,, 드디어 성공했다..큐브맵 자체를 만드는 건 어렵지 않다.하지만 이전 프로젝트와 큐브맵 프로젝트에서 달라지는 것이 많았다.매 장 새로운 걸 받아들이는 부분에서 제공해 주는 코드와 비교해 보면 달라지는 부분이 많다directX12 문법을 이해하고 연관성을 알아야만 큐브맵을 완성할 수 있었다. 1. 큐브맵 cubeMap / 입방체 매핑큐브맵의 텍스처는 단지 텍스처 여섯 장을 담은 배열이다. 2. 큐브맵 적용하기 🔸1) RootSignature Texture Cube를 쉐이더와 연결하기 위해 table을 만들어준다.여기서 빨간색으로 표시한 RootParameterIndex(3)을 Texture Cube로 만들 거고 Init 매개변수 3번째 인자 0이므로 shader에서 t0으로 사용된다. ?..
![[DirectX12] 스텐실(stencil) 거울 만들기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJ6Mpi%2FbtsKyDT0bFr%2FE2YqYWKFI2a5ho9iep7G70%2Fimg.png)
1. 스텐실 버퍼 Stencil Buffer🔸 특징스텐실 버퍼는 후면 버퍼 및 깊이 버퍼와 해상도가 같다.스텐실 버퍼를 지정하면 그 스텐실 버퍼는 깊이 버퍼에 부착된다.픽셀 단편들이 후면 버퍼에 기록되지 못하게 하는 역할을 한다.CD3DX12_DEPTH_STENCIL_DESC구조체 채우고, D3D12_GRAPHICS_PIPELINE_STATE_DESC 설정한다. 2. 스텐실 판정 스텐실 버퍼를 이용하면 장면이 후면 버퍼의 특정 영역에만 렌더링되지 않게 만들수 있다. 스텐실을 적용하는 경우, 주어진 한 픽셀이 후면 버퍼에 기록되는지 아닌지는 스텐실 판정의 결과에 따라 결정된다. 스텐실 판정은 픽셀이 래스터화되는 과정에서, 즉 출력 병합기 단계에서 일어난다. 픽셀을 허용 : 후면 버퍼에 그리겠다. 픽셀..
![[DirectX12] 조명의 종류](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzni3k%2FbtsCg2fTZ0w%2FEkeUrpQq8DbmpiWKGPo5Fk%2Fimg.png)
1. 조명의 주요 벡터 2. 람베르트 코사인 법칙 [ Lambert's Cosine Law ] 빛에서 중요한 것은 단위 면적당 받는 빛의 에너지(E) 이다. 같은 양의 빛을 비스듬하게 비추는 것보다 정면으로 비추는 빛이 더 강한 빛이다. 이는 빛의 에너지 = 복사조도(단위 면적당 복사 선속의 밀도) 한 영역에 빛의 양을 결정한다. A1 단면적인 빛을 표면에 정면으로 때릴 떄 각은 0도 (1번)이고 같은 양(A1) 단면적인 빛을 사전으로 때릴 때 각은 세타도이다. 이 각으로 통해 복사조도(단위 면적당 복사 선속의 밀도)를 구할 수 있다. 위의 그림과 같이 삼각법에 따라 2번의 E2를 구하면, 아래와 같은 식이 도출된다. 3. 분산 조명 [ diffuse light / 난반사광, 분산광 ] 빛은 어떤 물체 ..
![[DirectX12] 조명 연산을 위한 법선 벡터, 법선 벡터의 변환](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd9LcAc%2FbtsB1uJR4g6%2FTAlpHEPFPkvZUL8b3ouKDK%2Fimg.png)
물체의 입체감과 부피감을 표현하기 위해 조명(Lighting)과 음영(Shadering)이 중요하다. 일반적으로 조형 모형이 정확할 수록 그 계산의 비용은 크고 영화와 같은 미리 렌더링 해두어도 되는 장면은 게임같은 실시간 렌더링을 해야하는 장면보다 비용이 더 높다. 재질(material)은 빛이 물체의 표면과 상호작용하는 방식을 결정하는 속성들의 집합이라고 할 수 있다. 흡수하는 빛의 색, 표면 아래 재질의 굴절률, 표면의 매끄러운 정도, 투명도 등 .. 광원은 다양한 빛의 색을 낼 수 있고 여러가지 세기(intensity)로 방출한다. 광원에서 나온 빛이 물체와 충돌하면, 그 빛의 일부는 흡수되고 일부는 반사된다. 대부분 게임과 같은 실시간 응용 프로그램이 사용하는 조형 모형은 국소 조명 모형(loc..
![[DirectX12] 원기둥의 정점 찍기/렌더링 과정 이해하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoyPp9%2FbtsBMRTX7eZ%2FpnKgyhB7qVq71QD1Ei6kkK%2Fimg.webp)
위 내용에 맞춰 버텍스를 만들어보자. 인덱스는 생략함.float stackheight = height / stackCount; // 한 층 위의 더미로 올라 갈 때의 반지를 변화량float radiusStep = (topRadius - bottomRadius) / stackCount;uint32 ringCount = stackCount + 1;for( uint32 i = 0; i 위와 같이 정점을 구하고 인덱스를 찍었다면 배열에 담아 그림을 그려달라고 GPU에게 요청해야한다. DirectX12에서 GPU에게 요청하는 과정을 알아보자. 이전의 [Prev]CommandList를 CommandQueue(GPU가 실행하도록)에 제출하고 새롭게 그릴 명령들을 [New]CommandList에 담아 CommnadQ..