아래에서 퍼옴

http://chulin28ho.egloos.com/5269434

우왕. 이 부분이 아무래도 Z 버퍼와 알파블렌딩, 소팅의 개념까지 짬뽕되어 들어가는 곳이라
"우왕 이거 아무래도 간단하게 설명하기 힘들겠는걸..." 이라고 생각했는데 과연. 2부까지 써 보니 제대로 하려면 6부는 되어야 하는거 아닌가 - 라는 생각이 드는군요.

어쨌건 벌여 놓은 일은 마무리를 해야 하니.. 콜록.

==================================================================================

자 지난 시간까지 알아본것을 한 마디로 요약하면 '알파 블렌딩을 쓰면 Z 버퍼가 엉망이 되니 불투명 오브젝트부터 먼저 그리고 나중에 반투명 오브젝트를 몰아서 그리면 된다. ' 라는 것이었습니다.

네 그럼 될 것만 같습니다.

즉 불투명 오브젝트부터 먼저 그립니다. 랄라.
이 녀석들은 이전에 말씀드렸다시피, 어느게 먼저 찍혀도 상관이 없습니다. Z read와 Write 만 하면 완벽히 그려지니까요.


 


그다음 반투명을 그립니다. 역시 그리는 순서는 뒤죽박죽입니다. 왜 뒤죽박죽이냐고요? 길게 설명하진 않겠습니다만, 당연합니다. -_- ;;; 들어오는 순서대로 그리다보니, 앞에 있는지 뒤에 있는지 판단하지 않고 그냥 오는대로 그려서 그렇습니다.


 

자 이놈들도 Z Read / Write를 물론 합니다.
문제가 해결 될 것만 같습니다. 아이 기뻐라.


근데, 역시 문제가 생깁니다. 알파 블렌딩은 말씀드렸다시피 개악마 니까요 .

그렇습니다. 반투명끼리의 앞뒤판정!!!

즉 아래와 같이 반투명 이미지가 있다고 칩시다.


 

알파는 이렇구요


 

뭐 이러면 게임에서는 이렇게 나오는걸 기대할 수 있겠죠.

 

그치만, 가끔 이렇게 나옵니다..!! 뭥미 이건!!!!


 

그림을 보고 이해가 가십니까? 위의 것은 뒤의 나뭇잎이 먼저 그려지고 앞의 나뭇잎이 그려져서 문제가 없었지만,
아래의 것은 앞의 나뭇잎이 먼저 그려지면서, 투명한 부분에도 그림은 그리지 않았지만 Z 값은 Write 해 버렸기 때문에 뒤의 나뭇잎이 그려질때 Z 값을 Read 하다가 보니 이미 자기 앞의 Z 값이 있으니 그리는데 실패해서 이렇게 나오게 되는 것입니다.

여기까지 설명하면 보통 그래픽 디자이너분들은 이렇게 얘기하죠. (실제상황)


아니 그러니까 프로그래머들이 다 해결 가능하면 내가 이걸 왜 쓰고 있겠냐고.


자아 . 기존에 반투명과 불투명인 것들끼리도 저런 문제가 생겨서, 불투명한걸 먼저 그려서 해결했었습니다.
그런데 이번엔 반투명한 것들끼리 동일한 문제가 생기는군요. 그래서 알파 블렌딩은 개악마입니다

이걸 해결하는 법은 무엇일까요?
그래서 이것을 해결하기 위해 많이 사용되는 방법은 "줄세우기" 입니다.
"그렇다면 반투명인 것들은 뒤에서부터 그리면 되잖아!!!" 라는 것입니다.
오호라. 과연 명안이십니다.


그렇습니다. 반투명인것들만 따로 모아서, 줄세우기를 하는 것입니다.

불투명한 것들은 기존에 그리듯이 그냥 막 그리고 (그래도 불투명한 것들도 앞에서부터 그리면 퍼포먼스가 좋아지긴 하지만요)
반투명한 것들을 그릴 때, 줄세워서 뒤에 있는 녀석들을 먼저 그려버리는 것입니다.

그림으로 앞뒤판정하기 좀 힘들지만, 대충 써 보면 저런 순서대로 정렬이 되겠군요.
아이 좋아라. 이제 반투명한 것들 끼리도 Z 값 걱정없이 그릴 수 있게 되었습니다.
물론 이게 부하가 장난이 아닙니다... 당장 화면에 나뭇잎이 수천장이 있는데 그게 모두 알파 블렌딩이라면... ㄷㄷㄷ
다 모아서 매 프레임마다 ( 초당 30번씩) 어떤게 앞에 있는지 판정하는 것도 보통 일이 아닌 겁니다.
그래서 일단 알파 블렌딩은 부하를 엄청나게 먹고 갑니다.

어떤게 앞에 있는지 정렬하는 부하도 물론 있는데, 거기에다가 또 뒤에 있다고 안그릴 수도 없습니다. 맨 뒤부터 그리다 보니 화면에 존재하는 모든 알파 블렌딩은 일단 다 그려 버린다는 거지요. 불투명한 것은 뒤에 있으면 안그리면 되지만 알파 블렌딩은 뒤에 있어도 보일수 있다는 전제로 그려지는 방식이거든요. 그러니 절약할 수 있는 구멍이 하나도 없습니다.

...알파 블렌딩을 남발하면 당신의 게임 퍼포먼스를 최악으로 만들기는 매우 쉽습니다.



자 뭐 퍼포먼스는 프로그래머들이 어떻게 해 주겠지 라는 무책임한 생각을 가지고, 어쨌건 이렇게 하면 일단 문제는 다 해결된 것 같습니다만, 아직도 문제는 또 남아 있습니다. 알파 블렌딩은 개악마 니까요.


Posted by 노을삼킨별
,