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++ 응용 프로그램
- 나머지 코드는 이전 코드와 동일
- 안개의 색상, 시작점, 범위 등 설정하여 렌더링
Effects::BasicFX->SetDirLights(_dirLights);
Effects::BasicFX->SetEyePosW(_eyePosW);
Effects::BasicFX->SetFogColor(Colors::Silver);
Effects::BasicFX->SetFogStart(15.0f);
Effects::BasicFX->SetFogRange(175.0f);
'C++ Algorithm & Study > Game Math & DirectX 11' 카테고리의 다른 글
[Direct11] 23. EX App Program - Mirror (0) | 2023.06.19 |
---|---|
[Direct11] 22. Direct3D Stencil (0) | 2023.06.19 |
[Direct11] 20. Direct3D Blending - Blending System (0) | 2023.06.17 |
[Direct11] 19. Direct3D Blending (0) | 2023.06.17 |
[Direct11] 18. EX App Program - Texture Box (0) | 2023.06.16 |