[데브루키] fog

42
Fog 구경원(돼지고기) 2012.05.16

Upload: kyeongwon-koo

Post on 08-Jul-2015

1.278 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: [데브루키] FOG

Fog

구경원(돼지고기)

2012.05.16

Page 2: [데브루키] FOG

Fog

• 대기 중의 수증기가 응결하여 지표 가까이에 작은 물방울이 떠 있는 현상

Page 3: [데브루키] FOG

FOG 개념

• 3D 장면을 구성하는 가상 카메라에서, 멀리 있는 오브젝트는 포그의 색상에 가깝게 만들고 가까운 오브젝트는 물체를 선명하게 보이게 하는기법.

흡수작용 - 입자에 가로막히는 빛외산란 - 다른 방향 으로 반산 되는 빛

내산란 - 광선을 따라 반사된 다른 방향 의로 부터의 빛

Page 4: [데브루키] FOG

FOG 효과

• 현실감 상승.

• 게임의 몰입도 극대화.

• 랜더링 속도의 향상.

• 갑자기 오브젝트가 나타나는 부자연 스러움 방지.

Page 5: [데브루키] FOG
Page 6: [데브루키] FOG
Page 7: [데브루키] FOG
Page 8: [데브루키] FOG
Page 9: [데브루키] FOG
Page 10: [데브루키] FOG
Page 11: [데브루키] FOG
Page 12: [데브루키] FOG
Page 13: [데브루키] FOG

D3D FOG

• 정점 포그

• 픽셀 포그

Page 14: [데브루키] FOG

D3D FOG

• 정점 포그

• 픽셀 포그

• 다각형의 각 정점에 포그 계산을 적용한다.

• Rasterize 때 다각형의 면에 결과를 보간 한다.

• 고정파이프라인에서 처리되어 진다.

Page 15: [데브루키] FOG

D3D FOG

• 정점 포그

• 픽셀 포그

• SetRenderState(D3DRS_FOGENABLE, TRUE);

• SetRenderState(D3DRS_FOGCOLOR, Color);

• SetRenderState(D3DRS_FOGVERTEXMODE, Mode);

Page 16: [데브루키] FOG

D3D FOG

• 정점 포그

• 픽셀 포그

• 픽셀단위로 포그 계산을 한다.

• 포그 계수를 사전에 계산된 참조테이블을 이용하기 때문에 테이블 포그 라고도 부른다.

• 정점포그 보다 더 컬리티가 높다.

• 장치 드라이브가 처리한다.

Page 17: [데브루키] FOG

D3D FOG

• 정점 포그

• 픽셀 포그

• SetRenderState(D3DRS_FOGENABLE, TRUE);

• SetRenderState(D3DRS_FOGCOLOR, Color);

• SetRenderState(D3DRS_FOGTABLEMODE, Mode);

Page 18: [데브루키] FOG

C = f * 폴리곤 색상 + ( 1 - f ) * 포그색상

f = 포그 계수 (1.0 ~ 0.0)

( 1.0 = 투명하다 0.0 = 탁하다)

- f의 계산 방식에 따라서 시각적으로 다양한 효과를 얻을 수 있다.

Page 19: [데브루키] FOG

F 를 구하는 방법?

• 선형포그

• 지수포그

• 지수제곱포그

Page 20: [데브루키] FOG

• 안개 구현 중 가장 간단하다

• 해당하는 거리에 걸쳐서 안개 입자가 균등하게 분포되어있다.

• 시작 값과 종료 값으로 안개를 조절한다.

선형 FOG

Page 21: [데브루키] FOG

• start - FOG 가 시작되는 거리.

• end - FOG 가 증가하지 않는 거리.

• d - 시점으로부터의 거리.

Page 22: [데브루키] FOG

D3D 선형FOG

• SetRenderState(• D3DRS_FOGVERTEXMODE, Mode );

• SetRenderState(• D3DRS_FOGSTART, *(DWORD *)(&Start) );

• SetRenderState(• D3DRS_FOGEND, *(DWORD *)(&End) );

• //D3DFOG_LINEAR

Page 23: [데브루키] FOG

셰이더 선형FOG

Page 24: [데브루키] FOG

• 현실세계 현상과 매우 닮은 안개이다.

• 종료 값과 농도를 가지고 안개를 조절 한다.

지수 FOG

Page 25: [데브루키] FOG

• e - 자연대수의 바닥 ( 약 2.71828)이다.

• density - 0.0 ~ 1.0 의 범위의 임의의 FOG 밀도이다.

• distance - 즉 시점으로부터의 거리를 나타낸다.

Page 26: [데브루키] FOG

• SetRenderState(

• D3DRS_FOGVERTEXMODE, Mode );

• SetRenderState(

• D3DRS_FOGDENSITY, *(DWORD *)(&Density) );

• // D3DFOG_EXP

D3D 지수FOG

Page 27: [데브루키] FOG

셰이더 지수FOG

Page 28: [데브루키] FOG

지수제곱 FOG

• 지수안개와 유사하다.

• 가까운 거리에서는 평탄하고 뒤이어 가파른 경사를 가진다.

Page 29: [데브루키] FOG

• e - 자연대수의 바닥 ( 약 2.71828)이다.

• density - 0.0 ~ 1.0 의 범위의 임의의 FOG 밀도이다.

• density - 즉 시점으로부터의 거리를 나타낸다.

Page 30: [데브루키] FOG

• SetRenderState(

• D3DRS_FOGVERTEXMODE, Mode );

• SetRenderState(

• D3DRS_FOGDENSITY, *(DWORD *)(&Density) );

• // D3DFOG_EXP2

D3D 지수FOG

Page 31: [데브루키] FOG

셰이더 지수제곱FOG

Page 32: [데브루키] FOG

• 오브젝트 기반

카메라와 오브젝트의 거리에 따른 포그의 농도 이용.

• 거리 기반

카메라와 일정 거리에 따른 포그의 농도 이용.

Range-based FOG

Page 33: [데브루키] FOG

• 카메라를 회전시킬 때 오브젝트가 깜빡이는 현상.

• 다수의 오브젝트들이 있을 때 부자연스러운 Fog 연출.

Range-based FOG

Page 34: [데브루키] FOG

• m_lpDevice->SetRenderState(D3DRENDERSTATE_RANGEFOGENABLE, TRUE);

• 정점 Fog 에서만 적용할 수 있다.

Range-based FOG

Page 35: [데브루키] FOG
Page 36: [데브루키] FOG

레이어 안개

• 거리요소 뿐만 아니라 높이 요소도 포함시킨다.

Page 37: [데브루키] FOG

언리얼 - 볼륨포그

• 특정 영역에만 포그를 적용하는 방법.

Page 38: [데브루키] FOG

언리얼 높이포그

Page 39: [데브루키] FOG

버츄어 파이터 VTF 포그

• VTF:Vertex Texture Fetching

Page 40: [데브루키] FOG

• 마무리

Page 41: [데브루키] FOG

• Q&A

Page 42: [데브루키] FOG

• END