상세 컨텐츠

본문 제목

[포니 게임 개발] 23

프로그래밍/포니게임개발

by ∫2tdt=t²+c 2013. 5. 18. 09:03

본문




왼쪽은 안티앨리어싱 사용안함, 오른쪽은 사용함


... 틀린 그림 찾기는 아니구요, 안티앨리어싱(Anti aliasing) 테스트 사진입니다.

작업내역이 안티앨리어싱만 있는 건 아니지만, 이게 제일 눈에 띄기에 사진부터 올려놓고 갑니다.


주 작업내용은 저번과 마찬가지로 GUI입니다. 이제 게임 내에서 그래픽 설정을 조절할수 있습니다. UI가 썩 이쁜 편은 아니지만, 돌아가기만 하면 된다는 신념으로 개발중이죠....ㅋ


저번의 문제였던, 윈도우 확대 애니메이션 때의 버벅임은 애니메이션 때는 텍스트를 숨기는 것으로 간단하게(!) 해결했습니다. 왜 그 생각을 못했을까ㅋ


UI에서 Extended 모드에서 작은 크기로 스프라이트를 그리면 쪼개지는 문제를 해결했습니다.

그 동안은 Extended모드로 스프라이트를 그릴때, 텍스쳐를 다음과 같이


1

 2

 3

 4

 5

 6

 7

 8

 9


가로 3등분, 세로 3등분, 총 9등분하여 1, 3, 7, 9번은 스케일링 없이 그리고, 2, 8번은 가로로만 늘어나게, 4, 6번은 세로로만 늘어나게, 5번은 가로, 세로로 모두 늘어나게 하여서, 임의의 크기에도 알맞게 그리도록 했었는데,

문제는 그리려는 크기가 원래 스프라이트의 2/3보다 작아질 경우, 2, 4, 5, 6, 8번을 아무리 줄여도 그 크기에 도달할 수 없다는 문제가(1,3번의 가로만 합쳐도 이미 전체 크기의 2/3가 되니깐...) 있었지요.


해결책은 심플하게. 크기가 원래 스프라이트의 2/3 이하로 될때는 Extended모드가 아니라 일반 스케일링 모드로 그려주는것.

그리고 텍스쳐 분할을 1:1:1로 하는게 아니라, 1:2:1로 하여서, 1, 3번을 합쳐도 전체 크기의 1/2밖에 되지 않도록 변경했습니다.


그리고 대망의 안티앨리어싱!

원래는 D3DMULTISAMPLE_4_SAMPLES 같은 놈을 설정해서, 안티앨리어싱을 적용해보고자 했으나, 이상하게 쟤만 적용하면 Z-Buffer가 거꾸로 들어가서, 뒤에 있는 물체가 앞을 가리는 희한한 현상이 나타나서 짜증나서 버려버렸습니다.

검색을 통해서 Render Target을 여러 개 사용하는 경우 D3D9의 멀티샘플링 방식은 사용할 수 없다는 사실을 알았고, 엔비디아 샘플을 뒤져보니 RTT에 멀티샘플링하는 경우에는 StretchRect를 이용하라는 팁을 얻었습니다.....만

귀찮고 어려워서 다 때려치우고

그냥 칼라 버퍼랑 노말 버퍼 해상도를 가로 세로 2배로 뻥튀기했습니다.

(이렇게 뻥튀기시킨 Render To Texture 사용할 때 주의사항은 DepthStencil버퍼도 같이 뻥튀기하는걸 빼먹지 말라는것입니다! DS버퍼는 그냥 냅둔채 RTT만 뻥튀기해놓고 렌더링이 하나도 안 되어서 몇시간 동안 헤맸네요ㅠ)

그 결과 120프레임 가까이 나오던 놈이 60프레임으로 떨어져 버렸네요. 흐음... 최적화가 절실합니다.


사진이나 영상으로는 잘 안보일지 모르겠지만, 외곽선 그리는 알고리즘도 약간 바꿨습니다. 이전에는 소벨 필터에서

x*x y*y 값이 0.04를 넘는지 안 넘는지만을 판단해서 0 or 1로 외곽선을 칠했지만, 이제는 sqrt(x*x y*y)값을 적당히 조절하고 계단함수를 씌워서 8단계로 외곽선을 칠해서, 조금더 부드러워 보이도록 변경했습니다. (연산량이 조금 많이 늘어났지만...ㅠㅠ 아아 점점 느려진다)




'프로그래밍 > 포니게임개발' 카테고리의 다른 글

[포니 게임 개발] 25  (0) 2013.05.26
[포니 게임 개발] 24  (0) 2013.05.22
[포니 게임 개발] 좋은 폰트를 주웠다  (1) 2013.05.20
[포니 게임 개발] 22  (0) 2013.05.16
[포니 게임 개발] 21  (0) 2013.04.28
[포니 게임 개발] 20  (0) 2013.04.23

관련글 더보기

댓글 영역