C++ Algorithm & Study/Game Math & DirectX 11

[Direct11] 21. EX App Program - Fog System

GameChoi 2023. 6. 17. 18:53

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);