Featured image of post Mobile 4 Terrain Test

Mobile 4 Terrain Test

모바일 4 터레인은 아시다시피 ‘모바일 기기에서도 완전 착하게 유니티의 터레인 - 텍스쳐 4장을 섞어 스플레팅으로 만들어 주는 기능 - 을 사용할 수 있게 해주자’ 에서부터 시작된 플러그인입니다. 가격도 싸고 사용법도 쉽습니다.

모바일 버전에서는 유니티에 포함된 터레인을 쓸 수 없기 때문에 보통 통짜 맵용 지형 텍스쳐를 그려야만 하고, 이것은 조금이라도 넓어진다면 심각한 해상도 문제를 겪기 때문에 사실상 쓰기 곤란한 방법입니다.
여러 조각으로 나눠서 각 2048 한 장씩 준다고요?

오 맨, 메모리를 걱정해 주세요. 애석하게도 우리 아이퐁에게는 그다지 메모리가 많지 않습니다.
배경에게 할당된 메모리가 30메가 정도인데, 안정되게 텍스쳐를 사용하려면 타일만 따져서 10메가 내외가 한계라고 볼 수 있습니다.

물론 미리미리 테스트하고 결과를 내고 싶었었지만 그동안 맥에서 아이팟으로 넘기기가 안됐었었 … OTL

이제야 장비가 전부 들어오고 아이팟 넘기기도 되고 제대로 프로젝트가 가동되기 시작했으니, 쉐이더 정리를 재빨리 하고 그 다음에 해야 할 일은 지금 이것이었겠지요.

우선, 지형을 그리기 위해서는 위에서 얘기했듯 크게 두 가지의 방법이 있습니다. (뭐 다른 방법도 좀 있지만 일반적으로는…)

  1. 스플레팅 방법 : 타일링된 텍스쳐를 여러 장 겹친 후, 마스킹 텍스쳐로 섞어주는 방법
  2. 통으로 그리기 : 그냥 통으로 그리기 ㅋㅋ 냅다 ㅋㅋㅋ

첫 번째 방법의 장점은, 스플레팅이라는 훌륭한 기능을 이용해서 타일을 제작하기 때문에 작은 사이즈의 타일들과 한 장의 마스크로 아주 넓은 지역을 해상도 저하없이 쉽게 조합해서 만들 수 있으며, 수정도 용이하다는 것입니다.

그렇지만 단점이 좀 치명적인데…. 그것은 모든 픽셀에서 여러 장의 이미지를 중첩해서 가지고 있게 된다는 겁니다. 모든 타일들과 마스크까지, 모든 픽셀에서 가지고 있는 식이 되는 거니까요. 즉 메모리는 절약할 수 있을 수 있겠지만 저사양의 모바일 기기에서는 CPU에 부하를 줄 위험이 있다는 겁니다.

두 번째 방법은 그 반대로, 그냥 통으로 그리다보니 그리기가 여간 까다로운게 아니고, 수정도 용이하지 못합니다. 그리고 해상도를 높게 만들면 이번엔 사용 메모리 제한에 넘어가 버려서, 그렇게 크게 그릴 수 없기 때문에 뿌옇게 배경이 만들어진다는 단점을 가지게 됩니다.

물론 장점도 있지요. 메모리에만 잘 올라간다면, 그냥 텍스쳐 한 장이 오브젝트에 입혀진 것이기 때문에 더 이상의 실시간 계산 부하는 없습니다. 훨씬 빠르죠.

때문에 월드맵과 같이 굉장히 큰 맵에서는 1번의 스플레팅 방법을 적당히 타협해서 쓰는 것이 좋고, 기타 던전, 마을, 전투맵과 같이 상대적으로 작은 맵들은 그냥 통으로 한다던가 하는 편이 좋을 수 있습니다.
물론 이런 장점과 단점은 상대적이며, 그래픽 결정하시는 분이 보고 마음에 드는 방법으로 결정해야만 하겠지요. 제가 AD가 아니니까용 ㅋ

어쨌건 그래서 , 드디어 테스트 해 볼수 있게 되었습니다.
느려도 얼마나 느린지 뭘 알려줄수 있어야 결정을 하지 원.


시험삼아 아이팟에 넘겨보니 잘 넘어갑니다. 이히히. 거진 한 달만에 넘겨보네.

그런데 미리 말씀드리자면, 아래 테스트할 때 실수가 하나 있었습니다.
아이폰에는 두 개의 해상도가 있습니다. 3gs용 저해상도, 4g용 고해상도.
3gs는 480*320 의 저해상도이고, 아이폰4는 960*640으로, 무려 4배나 차이가 납니다. 이것은 픽셀 처리 연산이 4배가 차이가 난다는 것으로, 우리는 480*320의 저해상도에 기준을 맞추어 제작하기로 되어 있었는데 아래 테스트는 960*480의 고해상도로 테스트했습니다.

대략 이 정도의 차이.

그러니까 우리게임은 이 정도의 차이. 위의 저해상도가 우리 게임 포맷입니다. 아래것은 고해상도로 올린것.
뭐 그치만 프레임 차이가 크거나 한 수준이 아니기 때문에 (아직까지는요) 일단 결과는 신용할 만 하겠습니다.

테스트결과입니다.

스플레팅 4장 : 각 256*256
마스킹 1장 : 256*256

총 5장의 이미지가 동시에 스플레팅 되고 있습니다. 애석하게도 프레임이 좋지 못합니다. 이 상태에서 8프레임이면 못쓸 물건이지요.

스플레팅 3장 : 각 256*256
마스킹 1장 : 256*256

그래서 이번엔 한 장을 줄여서 총 4장으로 해 봤습니다.
한 장만 빠졌는데도 프레임이 팍 올라가네요. 하지만 여전히 만족할 수 있는 프레임은 아닙니다.
지금처럼 훵 - 한 데에서는 30프레임쯤 나와 주고 막 이래야지요.

스플레팅 2장 : 각 256*256
마스킹 1장 : 256*256


한 장을 또 줄여서 2장만 스플레팅, 총 3장을 이용해 봤습니다. 빈 곳은 검게 보이네요.
21프레임… 약간 애석하긴 하지만 그래도 타협해 볼 만한… 프레임이 나옵니다.

마스킹 1장 : 256*256

이번엔 그냥 아예 한 장으로 만들어 봤습니다. 통맵이란 이런 것이겠지요.
놀랍습니다. 프레임이 풀로 나오는군요. 하긴 256 * 256 텍스쳐 한 장이니 처리가 가벼울 수 밖에 없겠죠.

이대로라면 스플레팅을 2장 (마스킹까지 포함 3장) 으로 하지 않으면 아주 위험하다는 결론이 나옵니다.
그렇다면…. 혹시 텍스쳐를 작게 쓰면 뭔가 달라지지 않을까요?
사실 텍스쳐를 작게 쓴다 하더라도 기존에 메모리를 오바하지 않았었다면 스플레팅에서는 별 차이가 없으리라고 예상됩니다만
한 번 해 보는것도 나쁘지 않겠죠. 혹시 압니까. 

그래서 팍 낮춰봤습니다. 
실험은 과감하지 않으면 결과가 안나오니까요.

스플레팅 4장 : 각 32*32
마스킹 1장 : 128*128


텍스쳐가 대폭 작아졌는데도 프레임에 변함이 없습니다. 역시 스플레팅은 CPU 부하입니다.

스플레팅 3장 : 각 32*32
마스킹 1장 : 128*128

3장도 비슷.

스플레팅 2장 : 각 32*32
마스킹 1장 : 128*128

2장일 경우 좀 빨라 보입니다만 오차범위 내입니다.

마스킹 1장 : 128*128

1장은 뭐 실험해보는 것도 의미가 별로 없습니다 ㅋㅋ

결론

결론적으로 , 스플레팅을 사용할 때는 한번에 2장 (마스킹 포함 3장) 을 스플레팅해서 사용해야만 의미있는 결과가 나옵니다.
(윤과장님 말씀으로는 아이패드2에서는 4장 다 돌려도 풀로 돌아간다지만…)
그러므로 스플레팅을 사용하실 때에는 2장만 블렌딩 한다는 것을 전제조건으로 생각하시고 계획해 주시는 것이 좋겠습니다.
한 번에 두 장이지, 블럭별로는 다른 2 장을 써도 되니까요, 적절히 응용해 보시면 되겠습니다.

그럼 끝.

Hugo로 만듦
JimmyStack 테마 사용 중