프로그래밍 2016. 10. 23. 18:07
728x90

 

volume fog - 파헤치기 - 기본 원리를 살펴보자

 

 

볼륨포그를 구현하려고 보니, 자료를 구하기가 너무 힘들었다

웬만한 것들은 이것저것 뒤져보면, 자료들이 좀 나오는데,

이것은 잘 나오지 않더란 말이지...

 

구현할때, DirectX9 쉐이더 프로그래밍 책을 참고하였다

(이 책은 참 도움이 된다 ㅎㅎ)

기본 개념을 잡는데는 도움이 된다.

하지만, 책이 오래전 출판된 것이라, 실제 구현소스 등은 지금과는 맞지 않는 부분이 많았다

 

그래서 혹시 찾는 사람들이 있지 않을까하여, 구현에 도움이 될만할

것들을 포스팅 해둔다

 

관심있으신 분들은 직접 구현해 보시라

이미 렌더타겟을 여러장 사용하고 있다면, 기본 구현은 큰 어려움은 없을 것이다

다만,,, 자잘한 작업은 드럽게 많으니, 각오는 해두시고! 크하하하

 

그런데, 구현중에 이것저것 테스트 해본바로는, 볼륨포그 자체는 좀 구닥다리 같다는 생각도 든다, 실제 게임에 사용할때는 볼륨포그 대신에, 안개 메쉬라든가, 이펙트 등으로 더 멋있게 만들수도 있을테니까, 

어쨋든 그리 사용도가 높지는 않을것 같다

 

 

 

 

볼륨포그는 모델을 깊이 버퍼에 렌더링함으로써, 

공간에 볼륨을 만들어 내는 렌더링 기법중의 하나이다

->이때 모델 자체를 실제화면에 렌더링하지는 않는다

->단지 볼륨깊이버퍼에 깊이값만을 기록해두는 것이다

(별도의 볼륨깊이버퍼 렌더타겟 텍스쳐 가 필요하다 )

->깊이버퍼 그림자를 그릴때와 같다

 

공간에 어떠한 볼륨값을 만들어 낸다는 의미로써는,

꼭 포그 역활이 아닌, 이를 이용한 다양한 렌더링 기법을 만들어 볼수도 있을듯 하다

 

어쨋든,

모델의 월드z 값을 깊이버퍼에 기록하고,

이 기록된 z값을 fog 연산을 이용하여, 화면컬러에 블렌딩 시켜주는 것이

볼륨포그의 핵심이다

카메라 시점에 가까울수록 z 값은 작고, 멀수록 z값이 커지니

이 z값을 볼륨값으로 이용하는 것이다

 

볼륨버퍼 렌더타겟 텍스쳐는 월드z값을 기록할수 있을정도로 큰,

D3DFMT_R32F 포맷을 이용한다

텍스쳐 생성에 관해서는 일반적인 것이니, 따로 설명하지 않겠다

 

 

728x90
posted by BK dddDang
: