DirectX11

    [DirectX 11] Normal Mapping

    Normal Mapping 개발 기간 : 2021년 5월 17일 ~ 2021년 5월 18일 Normal Mapping은 다음과 같은 과정으로 진행됩니다. 1. Normal Map 텍스쳐를 로드합니다. 2. Tangent Space의 TBN 벡터 중 T 벡터를 계산합니다. 이 때, 메쉬의 각 정점 v마다, 메쉬에서 그 정점을 공유하는 모든 삼각형의 T 벡터의 평균을 내서 vertex별로 T 벡터를 구합니다. 3. PS에서는 픽셀 위치에서 T와 N 벡터를 알고있고, 외적을 통해 B 벡터를 구합니다. 그리고, TBN 행렬을 구축해 Normal Map의 Tangent Space Normal값을 World Space로 변환합니다. 1. Normal Map 텍스쳐를 로드합니다. 확장자에 따라 DXTK 라이브러리에서..

    [DirectX 11] 외곽선

    개발 일자 : 2021년 12월 21일 외곽선은 다음과 같은 두 가지 방식으로 개발했습니다. 1. 라플라시안 필터를 이용한 외곽선 출력 2. 뎁스 차이를 이용한 외곽선 출력 1. 라플라시안 필터를 이용한 외곽선 출력 픽셀 쉐이더에서 라플라시안 필터에 픽셀들을 필터링시켜 외곽선을 검출했습니다. float mask[9] = { -1, -1, -1, -1, 8, -1, -1, -1, -1 }; // Laplacian Filter float coord[3] = { -1, 0, +1 }; float divider = 1; float4 PS_Outline_Laplacian(VertexOut_RenderTarget pin) : SV_Target { float4 Color = 0; float4 Ret = 0; floa..

    [DirectX 11] 파티클 시스템

    개발 일자 : 2022년 3월 14일 ~ 18일 현재 제작 중인 일본 테마의 맵 중앙에는 이렇게 큰 냄비와 모닥불이 있습니다. 모닥불에는 당연히 불이 있어야될 것 같아서 파티클 시스템 구현을 시작했습니다. 구현 방식을 요약하자면 다음과 같습니다. 현재 파티클 리스트를 스트림 출력(Stream Output) 전용으로 그립니다. 래스터화기가 비활성화되어 있으므로 그 어떤 파티클도 화면에 렌더링되지는 않습니다. 기하 쉐이더는 주어진 조건에 따라 파티클들을 생성하거나 파괴합니다 (구체적인 조건은 구체적인 파티클 시스템에 따라 다릅니다. 불 파티클 시스템은 불.fx에 정의된 조건을 따릅니다.) 갱신된 파티클 리스트를 스트림 출력(Stream Output)을 통해 정점 버퍼에 기록합니다. 현재 프레임에 갱신된 파티..

    [DirectX 11] Bloom

    개발 일자 : 2022년 3월 7일 ~ 10일 지난 번에 창문으로 햇빛이 들어오는 효과를 위해서 Emissive를 개발했고 아트에게 Emissive Map도 요청해서 받았으나, 적용해보니 생각보다 느낌이 살지 않아 Bloom을 개발하게 되었습니다. 결과는 만족스럽게 나왔고 어떤식으로 개발했는지 살펴보겠습니다. 제가 참고한 Bloom 예시는 Halo3의 자료입니다. 이 자료에서 Bloom의 단계는 크게 9단계로 나뉩니다. 왼쪽에 Halo3 예시와 함께 제 엔진에서 적용된 화면을 같이 보겠습니다. 먼저, 원본 렌더타겟에 4x4 다운샘플링을 합니다. 그 후 Bloom Curve를 적용시켜 일정 밝기 이상을 추출해줍니다. 코드는 책과 Halo3 자료를 참고했습니다. float4 PS(VertexOut pin) ..