분류 전체보기
[DirectX 11] Tone Mapping
LDR ( Low Dynamic Range ) / HDR ( High Dynamic Range ) / Tone Mapping - LDR : 기존의 색상 표현은 색상당 8bit 으로 표현해왔다. 하지만 Light 연산을 통해 출력을 할 경우 해당 Color가 1.0을 넘는 경우가 있는데 출력시에 [0.0, 1.0] 까지만 표현이 가능하다. - HDR : 조금 더 넓은 범위의 Color를 표현하기 위해 장면의 고휘도 값을 Rendering Pipeline 전체에 유지하고, 그 결과를 디스플레이 장치에 출력할 수 있는 범위로 압축하는 방식이다. - Tone Mapping : Shader 내에서는 HDR로 계산을하고 Rendering시에는 LDR로 변환을 해주는 것이다. 즉, HDR 결과를 디스플레이 출력이 가..
[Shader / HLSL] HLSL Semantic
HLSL Semantic - Semantic은 매개 변수의 의도된 사용에 대한 정보를 전달하는 Shader Input, Output에 연결된 문자열이다. - Semantic은 Shader 단계 간에 전달되는 모든 변수에 필요하다. 정리하게된 이유 - Shader에서 Output으로 보낸 Struct의 Semantic과 해당 Struct를 Input으로 받아 사용하는 Shader의 Semantic을 일치시켜줘야 하는 부분을 동작 원리를 모르고 사용하고 있다는 느낌을 받아서 다시 한번 개념을 잡는 목적으로 정리를 하기로 생각하였다. - 찾다보니 생각보다 많은 Semantic들이 있다는 것을 알고 해당 Semantic에 대한 정리를 해보려 한다. HLSL Semantic 종류 Vertex Shader Inpu..
[DirectX 11] IBL (Image Based Lighting)
Image Based Lighting Diffuse Irradiance - 직접적인 분석 조명이 아닌 주변 환경을 하나의 큰 광원으로 간주해 조명하는 방식이다. - 일반적으로 조명 방정식에서 직접 사용할 수 있는 환경맵을 조작해 조명 방정식에서 직접 사용할 수 있도록 수행된다. - 환경의 조명을 고려할 때 객체가 훨씬 물리적으로 정확해 보이기 때문에 PBR에 IBL이 유용하다. - 주변 환경으로부터 들어오는 빛의 방향에 따라 약간의 광도가 생겨 요구사항이 생긴다. 1) 임의의 방향 벡터가 주어진 경우 장면의 밝기를 검색 할 수 있는 방법이 필요하다. 이를 위해 환경이나 장면의 방사 조도를 표현하는 방법은 큐브맵 형태이다. 이러한 큐브맵을 감안할 때 큐브 맵의 모든 텍셀을 하나의 단일 광원으로 시각화하여 ..
[DirectX 11] PBR (Physically Based Rendering)
Physically Based Rendering BRDF ( Bidirectional Reflectance Distribution Function ) - "양방향 반사율 분포 함수" 라고 하며, Diffuse BRDF와 Specular BRDF로 나뉜다. - BRDF의 조건 1) 반사율 분포를 출력으로 내뱉는다. 2) 양방향성을 가진다. 광원과 관찰자의 관계가 동일하다면 반사율 분포가 변하지 않는다. 3) 광원과 관찰자를 입력 파라미터로 받는다. 4) 같은 입력에는 항상 하나의 같은 결과가 나와야한다. - BRDF의 모델 1) Cook-Torrance 2) Oren-Nayar 3) Phong 4) Blinn Diffuse BRDF - 광원이 어떻게 반사할지는 물체의 성분과 밀도에 따라 달라지기 때문에 한..
[Shader / HLSL] Shader Reflection & Define Macro Resource Hash Table 을 이용한 Resource 동기화
Shader Reflection & Resource Hash Table 동기화 과정 일단 위 방식의 Resource 관리는 해당 Resource의 이름을 통해 관리를 하기 때문에 Shader Resource의 HLSL 내부의 이름과 프로젝트 내에서 선언한 Class의 이름이 동일해야한다. 해당 Resource의 Data 형식은 프로젝트 내부에서 설정하여 해당 Resource Hash Code를 이용하여 Register Slot에 올린다. 프로젝트 내부에서 선언한 Class들의 Header가 Include 되는 동시에 Hash Table에 해당 Resource Hash Table이 생성되는데, 현재 매번 올라가는 것을 방지하기 위해 Define Macro(https://kyuhwang.tistory.com..
[DirectX 11] Deferred Rendering FXAA
Deferred Rendering MSAA - 기존 Forward Rendering에선 문제없이 사용하였던 MSAA를 Deferred Rendering에선 여러개의 RenderTarget에 Anti-Aliasing 처리를 하면 안되기 때문에 다른 방식으로 처리를 해야한다. Deferred Rendering Anti-Aliasing 방법 1) SV_Coverage 방식 - Fragment에 의해 다루어진 픽셀을 계산하는 SV_Coverage 사용 방식이다. - Coverage Mask가 1111이 아닌 하나의 픽셀 샘플이 있다면 다른값을 반환하여, 이 복잡성을 Multi Sampling 된 Buffer에 저장해둔 후, 최종 픽셀 출력시 인접 픽셀과 평균을 내어 계산한다. - 화면 공간의 비연속성 보다는 기..
[Project] DirectX 11 3D Mini Project
DirectX 11 3D Project ( Blade Dancer ) Component 기반 DirectX 11 3D 프로젝트 플레이 영상입니다. Graphic 적용기술 Normal Mapping Shadow Mapping Skinning Animation SSAO Deferred Rendering 실행 파일 BladeDancer.zip drive.google.com
[DirectX 11] Order Independent Transparency
CPU Sorting Transparency - DirectX 11의 Blend State를 이용해 Output Merge에 바인딩을 하여 Blending을 일반적인 Alpha Blending 할 경우를 생각해보면 가려지는 부분은 그릴 필요가 없기 때문에 Pixel에 그리기 전 깊이에 따른 정렬을 해주어야 한다. Order Independent Transparency - 오브젝트 단위로 투명도 렌더링을 할 경우 정확한 투명도의 선후관계를 처리하기 힘들다. - 결국 정확한 선후관계를 판별하기엔 픽셀 단위로 해야하는데 위의 문제를 보안하기 위해 쉐이더 내부에서 처리하는 OIT 기술을 적용하게 되었다. - 반투명 오브젝트는 렌더링 하기전 미리 분류한 후 다른 방식의 렌더링 방식으로 처리한다. - 오브젝트를 해..