Programming 43

[DirectX11] 디퍼드 렌더링 (Deferred Rendering)

포워드 렌더링 방식에서는 지오메트리를 픽셀로 변환하면서매번 라이팅 계산을 하게 된다.디퍼드 렌더링 방식을 사용한다면 버려질 픽셀에 대해라이팅 계산 비용을 절약할 수 있다.(그렇다고 무조건 디퍼드 렌더링 방식이 좋은건 아니다.) 이번 글은 디퍼드 렌더링의 원리와포워드 vs 디퍼드 방식에 대해 비교하는 내용을 담고 있다. 오버드로우 (Overdraw) 오버드로우는 같은 픽셀에 여러번 Pixel Shader가 실행되는 현상을 의미한다.기본적으로 래스터라이저 실행 이후 바로 픽셀쉐이더가 실행되는 것이 아니라, 내부적으로 조기 깊이 테스트(Early-z test)가 이루어져 뒤에 있는 프래그먼트에 대해서 픽셀쉐이더를 실행하지 않는다. 하지만 픽셀쉐이더에서 discard나 clip이 사용된 경우, 조기 깊이 테..

[DirectX11] 포스트프로세싱(PostProcessing) Bloom 구현하기

Bloom을 구현하려면 우선sceneHDR pass -> LDR ToneMapping pass위 과정이 분리 구현 되어있어야한다.이번 글은 해당 내용에 대한 이해가 있다는 것을 바탕으로 한다. Mip (mipmap) Bloom을 구현하기 전에 먼저 Mip의 개념에 대해 복습을 하고 가자. Mip(mipmap)은 같은 텍스처를 여러 해상도로 미리 만들어둔 배열이다. 주로 멀리있는 오브젝트에 텍스처를 샘플링할때 낮은 해상도의 이미지를 사용하여 최적화(앨리어싱 방지 등)를 하는 용도로 사용한다.mip 0 : 1024 x 1024 (원본)mip 1 : 512 x 512mip 2 : 256 x 256mip 3 : 128 x 128mip 4 : 64 x 64... Bloom에서는 이 Mip의 개념..

[DirectX11] IBL (Image-Based Lighting)

지난 글에서 PBR의 직접광을 구현하였다.이번 글은 PBR에서 간접광 구현에 대한 기본적인 개념과IBL 구현에 대한 내용이다. 조명(Illumination)의 종류 Local Illumination : 직접광Global Illumination : 직접광 + 간접광 GI (Global Illumination) Global Illumination(GI)은 표면에서 반구 방향으로 들어오는 모든 광량(직접광 + 간접광)을 BRDF를 통해 적분하여 계산하는 이상적인 조명 모델이다. 이 모델은 빛의 다중 반사(Bounce)까지 모두 고려하므로 현실적인 조명 표현이 가능하지만, 전체 적분을 실시간으로 계산하기에는 연산 비용이 매우 크다.그래서 실제 그래픽스 파이프라인에서는 다음과 같이 직접광과 간접광을 분리하..

[DirectX11] PBR Pixel Shader 구현하기

이전 정리글에서 PBR 구현을 위한 개념들을 정리하였다.DirectX에서 PBR 쉐이더는 PBR은 metallic, roughness 텍스처 or 상수값을 사용하여BRDF 공식 그대로 만들면 된다. 근데 나는 roughness가 0에 너무 가까울 경우광택이 아예 사라지는 문제가 있어서D함수의 aplha를 제곱하지 않고 구현했다. PBR_PS.hlsl/* [ PBR Pixel Shader ] - Cook-Torrance BRDF - Texture Map Support - Diffuse Map (Albedo Map) - Normal Map - Emissive Map - Metallic Map - Roughness Map ..

[PBR] 4. BRDF

이번 글은 PBR에서 다루는 BRDF의 수식 이해를 위한 정리글이다. 빛 표면 시뮬레이션 모델 BSDF BSDF(Bidirectional Scattering Distribution Function)는 표면에서 매질과 상호작용한 빛이 어떤 방향으로 흩어지는 전체 현상을 다루는 함수로 반사(reflection)과 투과(transmission)/굴절(refraction)이 모두 포함된다. 즉, BSDF는 반사를 다루는 BRDF와 투과/굴절을 다루는 BTDF를 모두 포함한 개념이며 보통 PBR에서는 BRDF만 다룬다. BSDF 안에는 다음과 같은 특성이 포함된다:BRDF (Bidirectional Reflectance Distribution Function) : 반사(specualr + diffuse(표..

[PBR] 3. 프레넬 효과(Fresnel)와 미세면 모델(Microfacet model)

프레넬(Fresnel) 효과 프레넬 효과란 빛이 법선에 가깝게 입사하면 투과의 확률이 높아지고, 법선에 멀게 입사할 수록 반사의 비율이 높아지는 현상이다.법선에 가깝게 입사 → 투과경사에서 입사 → 반사 비스듬한 각도에서는 빛이 표면을 스치니까 전자들이 진동하면서 반사를 더 강하게 유도하며, 수직에서는 표면을 뚫고 들어가기가 쉬워 투과가 더 많다. PBR에서는 프레넬 효과를 입사광이 “얼마나 반사되는가”를 계산하는데 사용한다. F0 (normal-incidence reflectance) F0은 빛이 표면 법선 방향으로 입사했을 때의 스페큘러 반사량을 의미하며, PBR에서 프레넬(Fresnel) term을 결정하는 핵심 값이다.금속(Metals)금속은 빛이 내부로 거의 투과되지 않고 대부분 표면에서 반..

[PBR] 2. 금속과 비금속 (Metalic)

PBR에서 물체의 재질이 금속이냐, 비금속이냐에 따라 빛의 표면 반응이 다르기 때문에이 속성(Metallic)은 매우 중요하다. 금속/ 비금속 빛 에너지 표면 반응금속(Metals)에서 빛과 전자의 상호작용 금속 재질은 자유전자가 많아 광자 대부분이 표면에서 즉시 반사되며, 일부 파장은 흡수되어 열로 변환된다. 이렇게 살아남은 파장이 형성하는 반사파의 스펙트럼이 금속 고유 색상을 결정한다.최초의 빛 100% │ ├─ 반사 → 대부분 반사되어 눈으로 들어옴 └─ 일부 파장 흡수 → 사라짐(눈에는 안 보임) 금속의 자유전자는 전도대가 연속적이기 때문에, 비금속처럼 특정한 에너지 준위(밴드갭)에만 반응하는 것이 아니라 넓은 파장 범위의 전자기파와 상호작용할 수 있다. 금속은 모든 파장에 대해..

[PBR] 1. 빛

빛 빛은 전자기파(Electromagnetic wave)로서, 전기장(electric)과 자기장(magnetic)이 서로를 만들어내며 진공에서 퍼져나가는 파동이다. 빛은 파동인 동시에 광자(photon)라는 최소 단위의 에너지를 가진 입자처럼 행동한다. 광자는 파장이 짧을수록 에너지가 크며, 물질과 상호작용 할때 원자에 에너지를 전달한다. 이때 물질이 금속이냐 비금속이냐에 따라 광자의 에너지 반응(반사 or 흡수→방출)이 달라진다. 반사 : 광자가 표면에서 바로 방향만 바꾸고 나가는 과정 → 에너지 거의 그대로흡수→방출 : 광자가 내부에 들어가 일부 에너지가 흡수되고, 나머지가 여러 방향으로 퍼져 나옴 빛(파동)과 물질의 상호작용 반사 (Reflection) 빛(광자)이 표면에 도달했을 때, 광자 에너..

[PBR] PBR이란 무엇인가?

드디어...PBR...!!!!! 기존 블린퐁 모델의 한계 블린퐁은 비물리 기반 반사 모델로 계산이 매우 빠르고 간단하여 게임 엔진에서 한동안 기본 표준처럼 사용되었다. 하지만 현실적인 조명을 표현하기에는 여러 한계가 있다. 에너지 보존이 없다.표면이 거칠기와 상관없이 반사량이 동일하고, 결과적으로 재질이 빛보다 더 밝아지는 비현실적인 하이라이트가 발생한다. 빛이 표면에서 반사될 때 ‘얼마나 반사되는지, 얼마나 흡수되는지’라는 물리적 규칙을 지키지 않는다.재질의 일관성 부족광원 세기나 환경광이 달라지면 재질이 억지로 바뀐 것처럼 보인다. 예를 들어 같은 금속 재질도 Scene마다 색과 반짝임이 달라지는 경우가 흔하다.재질의 특성을 물리적으로 설명할 수 없다.블린퐁의 파라미터는 specular inten..

[DirectX11] PCF방식을 통한 부드러운 그림자 매핑(Soft Shadow Mapping)

이번 글은 기본적으로 그림자 매핑 방식에 대해 이해하고 있어야 한다. [DirectX11] 그림자 매핑 (Shadow Mapping)멀티 패스 렌더링 (Multi-Pass Rendering) 기본적으로 멀티 패스 렌더링이란 하나의 장면(Scene)을 완성하기 위해 여러 단계(Pass)로 나누어 렌더링하는 기법을 말한다. 여기서 패스(Pass) 는 한 번의 DrawCallwooj22.tistory.com 그림자 팩터 (Shadow Factor) 그림자 팩터(Shadow Factor)는 픽셀이 광원에서 차단되는 정도를 나타내는 0~1 사이의 값이다. 값의미0그림자에 완전히 가려짐 → direct light 없음1완전히 광원에 노출됨 → direct light 완전 적용0~1반쯤 그림자(Soft Shad..