[데브루키] fog
TRANSCRIPT
Fog
구경원(돼지고기)
2012.05.16
Fog
• 대기 중의 수증기가 응결하여 지표 가까이에 작은 물방울이 떠 있는 현상
FOG 개념
• 3D 장면을 구성하는 가상 카메라에서, 멀리 있는 오브젝트는 포그의 색상에 가깝게 만들고 가까운 오브젝트는 물체를 선명하게 보이게 하는기법.
흡수작용 - 입자에 가로막히는 빛외산란 - 다른 방향 으로 반산 되는 빛
내산란 - 광선을 따라 반사된 다른 방향 의로 부터의 빛
FOG 효과
• 현실감 상승.
• 게임의 몰입도 극대화.
• 랜더링 속도의 향상.
• 갑자기 오브젝트가 나타나는 부자연 스러움 방지.
D3D FOG
• 정점 포그
• 픽셀 포그
D3D FOG
• 정점 포그
• 픽셀 포그
• 다각형의 각 정점에 포그 계산을 적용한다.
• Rasterize 때 다각형의 면에 결과를 보간 한다.
• 고정파이프라인에서 처리되어 진다.
D3D FOG
• 정점 포그
• 픽셀 포그
• SetRenderState(D3DRS_FOGENABLE, TRUE);
• SetRenderState(D3DRS_FOGCOLOR, Color);
• SetRenderState(D3DRS_FOGVERTEXMODE, Mode);
D3D FOG
• 정점 포그
• 픽셀 포그
• 픽셀단위로 포그 계산을 한다.
• 포그 계수를 사전에 계산된 참조테이블을 이용하기 때문에 테이블 포그 라고도 부른다.
• 정점포그 보다 더 컬리티가 높다.
• 장치 드라이브가 처리한다.
D3D FOG
• 정점 포그
• 픽셀 포그
• SetRenderState(D3DRS_FOGENABLE, TRUE);
• SetRenderState(D3DRS_FOGCOLOR, Color);
• SetRenderState(D3DRS_FOGTABLEMODE, Mode);
C = f * 폴리곤 색상 + ( 1 - f ) * 포그색상
f = 포그 계수 (1.0 ~ 0.0)
( 1.0 = 투명하다 0.0 = 탁하다)
- f의 계산 방식에 따라서 시각적으로 다양한 효과를 얻을 수 있다.
F 를 구하는 방법?
• 선형포그
• 지수포그
• 지수제곱포그
• 안개 구현 중 가장 간단하다
• 해당하는 거리에 걸쳐서 안개 입자가 균등하게 분포되어있다.
• 시작 값과 종료 값으로 안개를 조절한다.
선형 FOG
• start - FOG 가 시작되는 거리.
• end - FOG 가 증가하지 않는 거리.
• d - 시점으로부터의 거리.
D3D 선형FOG
• SetRenderState(• D3DRS_FOGVERTEXMODE, Mode );
• SetRenderState(• D3DRS_FOGSTART, *(DWORD *)(&Start) );
• SetRenderState(• D3DRS_FOGEND, *(DWORD *)(&End) );
• //D3DFOG_LINEAR
셰이더 선형FOG
• 현실세계 현상과 매우 닮은 안개이다.
• 종료 값과 농도를 가지고 안개를 조절 한다.
지수 FOG
• e - 자연대수의 바닥 ( 약 2.71828)이다.
• density - 0.0 ~ 1.0 의 범위의 임의의 FOG 밀도이다.
• distance - 즉 시점으로부터의 거리를 나타낸다.
• SetRenderState(
• D3DRS_FOGVERTEXMODE, Mode );
• SetRenderState(
• D3DRS_FOGDENSITY, *(DWORD *)(&Density) );
• // D3DFOG_EXP
D3D 지수FOG
셰이더 지수FOG
지수제곱 FOG
• 지수안개와 유사하다.
• 가까운 거리에서는 평탄하고 뒤이어 가파른 경사를 가진다.
• e - 자연대수의 바닥 ( 약 2.71828)이다.
• density - 0.0 ~ 1.0 의 범위의 임의의 FOG 밀도이다.
• density - 즉 시점으로부터의 거리를 나타낸다.
• SetRenderState(
• D3DRS_FOGVERTEXMODE, Mode );
• SetRenderState(
• D3DRS_FOGDENSITY, *(DWORD *)(&Density) );
• // D3DFOG_EXP2
D3D 지수FOG
셰이더 지수제곱FOG
• 오브젝트 기반
카메라와 오브젝트의 거리에 따른 포그의 농도 이용.
• 거리 기반
카메라와 일정 거리에 따른 포그의 농도 이용.
Range-based FOG
• 카메라를 회전시킬 때 오브젝트가 깜빡이는 현상.
• 다수의 오브젝트들이 있을 때 부자연스러운 Fog 연출.
Range-based FOG
• m_lpDevice->SetRenderState(D3DRENDERSTATE_RANGEFOGENABLE, TRUE);
• 정점 Fog 에서만 적용할 수 있다.
Range-based FOG
레이어 안개
• 거리요소 뿐만 아니라 높이 요소도 포함시킨다.
언리얼 - 볼륨포그
• 특정 영역에만 포그를 적용하는 방법.
언리얼 높이포그
버츄어 파이터 VTF 포그
• VTF:Vertex Texture Fetching
• 마무리
• Q&A
• END