축소버퍼를 이용한 파티클렌더링

2D, 3D, 다각형, 픽셀 등 게임의 그래픽 프로그래밍에 관한 포럼입니다.

Moderator: 류광

Locked
비회원

축소버퍼를 이용한 파티클렌더링

Post by 비회원 »

파티클 난무의 게임을 만들고 있는데 아무래도 필레이트때문에 그래픽카드쪽의 부담이 셉니다..
해서 전에 본적이 있는 축소버퍼를 이용한 파티클렌더링방법을 검토해보고 있습니다.

이 방식의 주 아이디어는 화면보다 작은 ( 대략 1/4의 ) 렌더타겟에 파티클을 렌더링하고
이 렌더타겟을 본 화면에 붙이는 겁니다. 작은 화면에 렌더링하므로 알파연산등이 1/4로 줄어든다는게
이 아이디어의 핵심인데, 일단 1/4화면으로 렌더링해서 확대하는 것이므로 퀄리티의 저하가 있긴하지만
봐줄만하면 된다! ( 눈에 잘 안튀면 된다. )라는 생각이 깔려있습니다.

이런 방식을 사용한것들로는...
XBOX의 더블스틸
XBOX360의 로스트 플래닛
그리고 nVidia의 Vulcan 데모 정도 가 있습니다.

관련자료를 찾아보고 있는데...
더블스틸관련 문서는 예전의 spirit3d.net에 있었는데 사이트 폐쇄로 사라졌고..
로스트 플래닛 : http://blog.naver.com/saebaryo/30014051789
nVidia의 Vulcan : http://developer.nvidia.com/docs/IO/834 ... Vulcan.pdf

정도인데...두리뭉실해서 막상 구현하려니 애로사항이 꽃피네요...

주 문제점은
1. 백버퍼의 재사용
렌더타겟을 1/4짜리를 쓰게되면 백버퍼를 재사용할수 없다고 알고 있습니다.
해서 nVidia데모의 경우는 로우 폴리곤을 1/4쪽에 다시 출력하고 있고,
로스트플래닛은 ppt만 보면 Z버퍼도 1/4로 축소하는듯한데...이게 어떻게 가능한지가 의문합니다.

2. 출력방식의 차이에 따른 색 변화..
1/4 축소로 인한 퀄리티저하는 감안한다고 해도
add, src-alpha 같은 경우는 검정색 렌더타겟에 그냥 출력해서 나중에 add나 src-alpha로 원화면에
찍어주면 같은 색이 나올듯한데...
lighten, darken, screen 처럼 배경색이 필요한 출력방식은 어떻게 색을 유지시켜줄지가 의문입니다.
로스트플래닛을 보면 원래화면도 1/4로 축소해서 출력에 사용하는듯한데 이렇게 하면
이펙트가 찍히지 않는 부분도 1/4로 축소된 픽셀들이 찍혀서 전체적으로 1/4로 저하된 퀄리티가
되버릴듯한데...glow처럼 블러먹여서 찍는다면...전체 화면의 퀄리티가 많이 달라져서 원하는
방향이 아니구요..
비회원

Post by 비회원 »

2. 출력방식의 차이에 따른 색 변화..
1/4 축소로 인한 퀄리티저하는 감안한다고 해도
add, src-alpha 같은 경우는 검정색 렌더타겟에 그냥 출력해서 나중에 add나 src-alpha로 원화면에
찍어주면 같은 색이 나올듯한데...
lighten, darken, screen 처럼 배경색이 필요한 출력방식은 어떻게 색을 유지시켜줄지가 의문입니다.
로스트플래닛을 보면 원래화면도 1/4로 축소해서 출력에 사용하는듯한데 이렇게 하면
이펙트가 찍히지 않는 부분도 1/4로 축소된 픽셀들이 찍혀서 전체적으로 1/4로 저하된 퀄리티가
되버릴듯한데...glow처럼 블러먹여서 찍는다면...전체 화면의 퀄리티가 많이 달라져서 원하는
방향이 아니구요..
축소버퍼(?)에 원래화면을 그려주지 말고 그냥 렌더텍스쳐를 참조만 하는 방식으로 하면

원래 화면의 퀄리티가 떨어지지는 않을것 같습니다.

대신 배경색이 필요한 이펙트 출력쪽에 바뀔부분이 많을 것 같습니다만 ^^;
비회원

Post by 비회원 »

네...축소된 원화면을 텍스쳐로 쓰면 될것도 같습니다..

다만 lighten, darken, screen을 텍스쳐스테이지의 조합으로 흉내낼 만한 기능이 없습니다.
픽셀셰이더를 쓰면 될것같긴한데..사양의 압박때문에 선택하기를 망설이고 있습니다.
xbox쪽이야 균일한 사양이니 상관없지만 PC쪽이니...

일단 이펙트 폭발시 부담이 증가하는 구간에 3부분정도 있는데 ( 이펙트객체 생성, 리소스로딩, 실제 출력 )
CPU쪽의 순간부담을 줄여주는쪽으로 수정중입니다만 마지막 실제출력구간에서 GPU의 부담이 폭발하기때문에
CPU쪽을 수정해도 큰 이득이 없는 출력구간에서의 순간 느려짐을 어떻게 개선할지 애매하네요..
Locked