[Direct11] 21. EX App Program - Fog System
1. EX App Program
1.1 Fog System
1.1.1 Fog System Principle
- 게임에서 특정한 기상조건을 흉내 낼 때 유용한 것이 안개 효과
- 먼 거리의 렌더링 결함이나 파핑현상을 숨길 수 있음
- 절두체의 먼 평면 뒤에 있던 물체가 카메라의 이동에 따라 절두체 안으로 들어오면서 화면으로 튀어 나오는 현상
- 지평선 부근의 산처럼 멀리 있는 물체는 흐릿해 보이기에 대기 원근 현상을 흉내 내기에 적합
1.1.2 Pixel Shader
- 안개의 색상과 안개가 시작되는 거리, 안개의 범위를 설정
cbuffer cbPerFrame { /* ... */ float gFogStart; float gFogRange; float4 gFogColor; };
- 렌더링 시 삼각형의 한 점의 색상을 원래 색상과 안개 색상의 가중 평균으로 결정
- 카메라 위치와 표면 점 사이의 거리에 의존하는 0에서 1사이 값을 이용
- 카메라와 표면 점 사이의 거리가 커지면 이 값이 1에 가까워지며, 표면 점이 점점 안개에 가려지는 효과가 생김
- 밑의 코드로 부터 안개와 카메라 시점에서의 거리를 판단
- 사이에 있는 경우 안개 색에 의해 변경되지 않음 & 안개가 시작되지 않은 것으로 판단
float fogLerp = saturate((distToEye - gFogStart) / gFogRange);
- 안개의 시작점을 범위를 설정한 값으로 부터 카메라의 시점이 있다면 안개가 거리에 따라 생성
- 거리가 증가함에 따라 0에서 1로 선형 증가, 안개 색의 가중치가 점차 커지고 원 색상의 가중치가 점점 작아짐
- 거리가 멀어지면서 표면점이 점점 더 안개에 가려지는 효과가 생김
litColor = lerp(litColor, gFogColor, fogLerp);
1.1.3 C++ 응용 프로그램
- 나머지 코드는 이전 코드와 동일
[Direct11] 11. EX App Program - Color Box
1. EX App Program 1.1 Color Box 1.1.1 Geometry Buffer - 색상이 있는 박스를 생성하기 위해 각 정점에 대해 좌표 및 색상 적용 Vertex vertices[] = { { XMFLOAT3(-1.0f, -1.0f, -1.0f), XMFLOAT4((const float*)&Colors::White) }, { XMFLOAT3
choiprogramming.tistory.com
- 안개의 색상, 시작점, 범위 등 설정하여 렌더링
Effects::BasicFX->SetDirLights(_dirLights);
Effects::BasicFX->SetEyePosW(_eyePosW);
Effects::BasicFX->SetFogColor(Colors::Silver);
Effects::BasicFX->SetFogStart(15.0f);
Effects::BasicFX->SetFogRange(175.0f);