프로그래밍 2016. 11. 6. 21:51
728x90

volume fog - 파헤치기 - 밖에서 볼때, 안으로 들어갈때

 

 

자, 이제

만들어진 볼륨포그 속으로 카메라가 들어간다면, 어떻게 될까?

(밖에서 볼때와는 다른 관점이 필요해진다)

 

 

일반적으로는,

먼쪽면을 그리고, 안쪽면을 그려서 그 두께값( 먼쪽값 - 안쪽값 ) 으로

포그연산을 해주게 되는데,

포그볼륨속으로 들어갈때도 이렇게 하면, 동일하게 두께값을 구할수 있을까?

 

쉽게, 단순화시켜서 생각을 해보자.

맵에, 방 크기 정도의 박스가 있다.

멀리 떨어져 보면, 당연히 박스의 외형이 잘 보일 것이다.

그런데, 우리가 이 박스 안에 들어가면, 박스는 어떻게 보일까?

 

...

...

 

 

답은 이상없이 보이던지, 보이지 않던지, 잘려서 보이던지 셋중의 하나!

ㅎㅎㅎ

 

컬링 옵션이 어떻게 되어 있는지에 따라서 다른데,

CW, CCW 라면,

보이는 면은 그대로, 보이지 않는 면은 뚫려서 보일 것이다.

자신의 컬링 환경에 따라서 결과에는 차이가 있겠다.

그러면, 컬링을 끈다면?

이때는 비는 곳 없이, 모두 잘 보여질 것이다

 

따라서,

볼륨포그 속으로 들어가는 경우라면,

컬링옵션을 NONE 으로 설정하고, 한번만 그려주면 된다

 

만약,

안으로 들어간 상태에서

먼쪽 면을 그리고, 가까운 면을 그려서 두께를 구해준다고 생각해 보자.

 

필연적으로,

카메라 뒤에 있어서, 디바이스에 의해,

그려지지 않는 부분이 생기기 때문에,

두께를 구하는데에 있어서 부정확한 부분들이 발생할 것이다

 

뭐, 이런 경우에도

몇 가지 값의 체크를 추가하면, 두께를 구할수 있을것 같긴 한데,

결국 한쪽면의 z 값을 그대로 이용하는 경우는 반드시 생기기 때문에,

굳이 의미가 없을것 같다

 

따라서,

밖에서 볼때는 컬링값을 바꾸어서, 두번의 렌더링이 필요하지만,

안으로 들어갔을때는,

컬링값을 NONE 으로 두어서 한번만 렌더링을 해주고,

그 z 값을 그대로 두께로 사용해 보자

 

전의 글에서 설명한 임시버퍼는 사용할 필요없이,

Volume 버퍼에 바로 렌더링을 시켜주면 되겠다

 

그런데, 잠깐 여기에서 잘 생각해 보자

NONE 으로 두고 그대로 그린다면, 이 값을 두께로 사용해도 문제가 없을까? 

정말?

 

 

 

 

 

 

위의 이미지와 같이,

카메라가 정면으로 볼륨을 바라보고 있을때,

카메라는 볼륨 속으로 들어가고,

볼륨을 구성하는 박스가 렌더링된다면,

렌더링되는 박스의 z 값이 그대로 사용되는 것이지,

볼륨의 두께를 구했다라고는 말할수 없다

 

그런데, 볼륨 속에서는 이 z 값을 그대로 사용해도,

나를 둘러싼 공간에 모두 포그가 꽉 차있는듯 보이기 때문에

시각적으로 이상하지는 않다

 

 

 

 

 

위 이미지는, 카메라가 포그 볼륨 속으로 들어온 상태

 

 

포그의 밀도치는 추가적인 변수를 사용해서

옅게, 짙게 만들수 있는 부분이기 때문에, 고민하지 말자

( 얼마든지 조절이 가능하다 )

 

 

볼륨 포그의 인, 아웃을 모두 커버하려면,

(결국은 인, 아웃 모두의 처리가 있어야 완전하다,

왜냐하면, 아웃만 처리해 놓으면,

게임에서 절대로 볼륨 속으로 카메라가 들어가는 경우가 없어야 하는데,

 

- 아무 처리도 해놓지 않으면, 안으로 들어갈 때,  포그처리가 않되어서

포그가 없는듯 보이니까 -

 

이것 때문에 맵 지형을 수정해야 할수도 있으니까! ㅎㅎ  

)

 

추가적으로는,

 

카메라가 포그속으로 들어갔는지, 밖인지를 실시간으로 체크하는 방법이 필요하고,

(한 점이 박스안에 있는지, 외부에 있는지 체크하는 방법이 제일 간단하겠고,

볼륨이 회전이 된다면, OBB 체크로 처리하면 되겠다)

 

이때, 렌더링의 컬링 옵션을 바꾸는 처리

쉐이더에서의 수행 함수 바꾸기

( 쉐이더의 픽셀 쉐이더를 밖에서 볼때와, 안으로 들어갈때로

분리해서 처리하는 것이, 작업에 편하다 )

 

등의

부가적인 작업이 필요해진다

 

 

참고로,

볼륨 포그의 안으로 들어갈때

부가적인 처리를 하지 않고, 좀 더 쉽게 처리해 볼수는 없을까?

 

생각해보니, 

기본적으로 적용하는 Dist Fog 의 색상과, 거리를 조절하여,

사용하는 것도 하나의 방법이 될수는 있겠다 

( 색상을 볼륨포그의 색상으로 맞추고, near, far 거리를 줄이면)

시각적으로는 차이가 없을 것이다

 

 

맘에 드시면 꾹 한번!

728x90
posted by BK dddDang
: