프로그래밍 2016. 10. 26. 20:44
728x90

 

volume fog - 파헤치기 - 볼륨 렌더링은 이렇게

 

 

우웃, 며칠 지났는데,

슬슬 볼륨 포그 구현에 대한 것을 까먹어가기 시작했다

더 늦어서 아무것도 생각안나기 전에, 올려두자

 

 

 

 

 

 

처녀귀신의 숲의 바닥에 볼륨포그를 깔았다

약간 분위기가 업되는듯 !?

 

첫번째 장에서 설명한대로,

볼륨포그는 뎁스버퍼에 볼륨모델을 렌더링한후, 풀씬화면에서 그 기록된 깊이값을 이용하여 포그 연산을 해주면 된다

 

볼륨포그 모델은 일반적으로는 6각형, 구, 주전자, 심지어 애니메이션되는 캐릭터까지

아무것이나 상관없다

이 값만을 이용해서, 여러가지 효과 같은것을 만들어 줄수도 있을것 같다.

가령 캐릭터를 볼륨 렌더링해주고, 실제 캐릭터 렌더링은 하지 않는다면,

포그같은 모습의 캐릭터를 볼수 있을 것이다

 

 

 

동그란 구슬을 볼륨으로 그려본것

 

 

 

 

           부처상을 볼륨으로 그려보았는데, 몇군데 구멍이 뚫리는 부분이 생긴다

폴리곤의 면구성이 볼륨렌더링에 맞게 앞면, 뒷면이 적절하게 구성되어 있어야

                              깨끗하게 출력되는 것 같다,

 복잡한 모델의 경우는 아무래도 사용이 힘들듯

 

 

어쨋든, 책에서 구현된 방식은 볼륨의 깊이값을 기록하는 대신,

볼륨의 두께를 기록하는 방법을 사용한다

 

볼륨의 두께를 구하는 것은, 볼륨렌더링을 두번 해주면 된다

첫번째 렌더링에서는 카메라 거리에서 먼쪽 면을 먼저 그리고,

두번째 렌더링에서는 카메라 거리에서 가까운쪽 면을 그리는 것이다

볼륨 깊이버퍼에 기록할때 최종값으로는 (먼쪽값 - 가까운쪽값) 의 결과값으로

볼륨의 두께를 구할수 있다

 

먼쪽 면을 그린다는 것은 실제 카메라에서 보이지 않는 숨겨진 면을 그리는 것이고,

가까운 면을 그린다는 것은 카메라에서 보이는 면을 그리는 것이다

우리가 은면제거에 사용하는 컬링옵션을 바꾸어서 렌더링 시켜 주면 되는데,

CW, CCW 옵션을 바꾸어서 그려주면 된다,

CW, CCW 옵션은 각자의 게임 환경에 따라 바뀔수 있는 부분이기 때문에,

환경에 맞추어 사용해주면 되겠다

 

나의 경우는 CW 가 기본 컬링 옵션이므로,

CCW 렌더링

CW 렌더링

순으로 진행하였다

 

자, 렌더링 방식에 대해 좀더 디테일하게 정리를 해보겠다

 

1. 렌더타겟 준비

->볼륨타겟

->임시볼륨타겟

 

2.

CCW 렌더링 (임시볼륨타겟에 렌더링)

CW 렌더링 (볼륨타겟에 렌더링, 이때 임시볼륨타겟 텍스쳐를 가져온다)

->임시볼륨타겟의 텍스쳐에서 읽어온 far 값 - 현재 자신의 depth 값( near )

->을 구해서 볼륨타겟에다가 기록해 둔다

->즉 두께만을 기록해 두는 것이다

 

3.

풀씬과 합성 방법은 동일하다

 

 

월드상에, 같은 거리에 2개의 볼륨이 있다고 하자

하나는 택배박스만 하고, 다른 하나는 방크기만하다고 하자

 

깊이값만을 기록하였다면,

적용되는 포그의 밀도치는 택배박스볼륨과 방볼륨 모두 동일하다

(거리값을 적절하게 밀도치로 변경해서 사용하였다면, 무조건 거리에 따라 포그가 진해지니까)

 

두께를 기록하면, 택배박스의 두께와 방의 두께가 달라지므로,

택배박스보다는 두꺼운 방의 볼륨이 더욱 밀도치가 높아질 것이다

 

오브젝트의 월드 중심값을 넘겨서, 두께를 계산한다던지,

다양한 방식으로 두께를 계산해줄수 있지 않을까 싶다

 

 

 

 

모든 수치가 같은 포그볼륨 2개이다

차이점은 하나는 작고, 하나는 크다

두께가 다르므로, 큰 것이 밀도치가 더욱 크다

 

 

728x90
posted by BK dddDang
: