Loading
2015. 7. 2. 21:37 - Twocap_Dev

ETC1 + Alpha




Asset : ETC1 + Alpha


unity 용량을 조금이나마 줄여보기위해서 사용한 어셋


결론적으로 효율은 좋았으나, 개발과정상 약간의 문제가 발생한다.

(AssetBundle로 만든 후, 읽어들였을 때 Editor에서 Shader를 제대로 읽지 못하는 문제가 발생)


- 카페에서 제가 썼던 글을 가져왔습니다. 활용방법입니다 -





구글 스토어에 업로드 할려면 50메가 용량 제한이 걸리게 됩니다. 
용량 제한 때문에 이런저런 방식을 사용해야하는데요. 

이미지가 용량에 큰 부분을 차지하기 때문에 소규모 제작시 이미지 용량을 줄여서 apk 가 아예 50메가를 넘지 않도록 할 수 있다면 좋겠지요.

중요한 점은.. Asset 을 구매하셔야해요. 자체적으로 하실 수도 있지만.. 구매가 빠르고.. 편합니다!! 25$

1. 이미지를 유니티에 추가한 후 이미지를 클릭합니다.




2. Generate Mip Maps 는 2D 게임을 개발하신다면 필요없기 때문에 체크 해제하세요. (용량을 줄여줍니다)

3. Format 이 부분이 중요한 부분이에요.
Automatic TrueColor 를 선택하신다면 알파가 존재하는 텍스쳐의 경우 용량이 어마어마 합니다.
Automatic Compressed 를 선택하신다면 알파가 들어갔지만 16bit로 되어서 화질이 크게 손상됩니다. (대신 용량은 엄청 작아지지요)

4. 비교를 해보면

ETC1 - 256Kb



Automatic Truecolor - 2M



이렇게 차이가 발생합니다. 저 차이는 여러장의 이미지와 큰 이미지를 사용할 수록 차이가 크겠지요.

용량의 차이가 나는 이유는 알파를 넣느냐 안넣느냐라고 생각하시면 됩니다.
ETC1 의 경우 알파를 넣지 못하기 때문에, 용량은 줄었지만 원하는대로 이미지가 나오지 않겠지요.

ETC1 + Alpha 라는 어셋을 사용하면 알파 정보를 따로 이미지로 만들어줍니다.



Generate 를 누르면 저렇게 빨간색으로 알파채널이 만들어지게 됩니다.




알파채널 이미지가 만들어지면 안드로이드 속성에 Override for Android 가 자동으로 체크되면서 (안드로이드일 경우 저 포멧을 사용한다라는 의미)

ETC1 이 자동 적용됩니다.

그럼 용량을 다시 한번 체크해보죠.

원본 이미지 ETC1 - 256kb
알파채널 이미지 ETC1 - 256kb

원본 이미지 RGBA32(Automic TureColor) - 2M

이제 우리는 알파를 넣고, 화질이 떨어지지 않으면서도 1.5M 를 절약하게 된 것입니다.

여기에서 용량을 더 줄여보자면. 알파채널은 같은 이미지 크기를 지정하지 않아도 됩니다. (반으로 줄여도 거의 차이가 없어요)
따라서 알파채널의 크기 (512 x 1024) 를 (256 x 512) 로 반으로 줄여놓습니다.




이로써 우리는 용량을 더 줄일 수 있게 되었습니다~~

자 그러면 이제 실제 사용을 해야겠지요. Material 으로 넘어갑니다.

기존에 Automic TrueColor 혹은 Automic Compressed 를 사용해서 Material 에 이미지를 넣었을 때입니다.




알파채널을 만들었기 때문에. 사용을 해야겠지요. Shader 를 알파채널을 포함할 수 있도록 변경해야합니다.
구매한 어셋을 import 하셨다면 ETC+Alpha 라는 쉐이더 항목이 생깁니다.

그리고 우리는 R(빨간색) 으로 알파채널을 만들었기 때문에 R을 지정해서





이렇게 만들어주는 것이지요. 그러면 알파가 적용된 것을 확인하실 수 있습니다.

이렇게 알파가 들어간 이미지에 대해 용량을 줄이시면 apk 용량이 함께 줄어들거에요!
(정확하게 확인은 해보지 않았지만요 'ㅂ'... )




또다른 Tip


큰 이미지를 사용하고 싶으시다면.. 예를들면 630 x 1136 (전체화면) 같은 이미지는
ToNearest 옵션으로 이미지를 2배수에 맞춘 후에 계산하여 Scale 해도 화질상 큰 문제는 없습니다.
(75% -> 100% , 즉 Scale 을 1.25배해도 잘 티가 나지 않아요.)



0. 이미지 용량이 줄어든다는 것은 성능에도 영향을 끼치게 됩니다. 더 적은 메모리를 사용할 수 있지요.

1. 512 X 1024 와 같이 정사각형이 아닌 이미지는 용량 상으로는 이득이지만 유니티 메모리상 올라갈때 1024 X 1024 로 로드될꺼에요. 따라서 되도록이면 정사각형으로 이미지 또는 atlas 를 관리하시는 것이 좋습니다.

2. 알파채널은 3가지 색으로 만드실 수 있어요. R, G, B
이렇게 3가지 색으로 나눈 R,G,B 를 하나의 채널에 묶을 수가 있습니다. 그렇게 되면 용량은 한번 더 줄일 수 있겠지요!


3. 현재 이 어셋은 2D Toolkit 에 대한 Shader 목록이 있기도 하지만, 다른 어셋과 혼용해서 사용해도 문제는 없습니다.
다만, atlas로 묶은 이미지의 경우 이미지가 수정될 때마다 알파채널을 다시 만들어주는 일은 조금 피곤하겠지요.

개발시에는 편하게 Automic truecolor 로 하시다가, 출시를 압두고 적용해보시면 좋을 것 같습니다.


4. Edit -> Project Settings -> Player 를 보시면

Use 32-bit Display Buffer - 32bit 이미지 포멧을 사용하시지 않으시면 해제하셔도 무관합니다.
Use 24-bit Depth Buffer - 2D 게임을 개발하신다면 해제하셔도 무관합니다.

해당 사항은 성능에 영향을 줄꺼에요. 




용량 때문에 고민이신 분들은 한번쯤 적용해볼만하다고 생각해보며, 화이팅하세요!!





'Asset' 카테고리의 다른 글

IOS Native - Push (Developer web setting)  (0) 2015.07.09
[prime31]iOS StoreKit In App Purchase Plugin  (0) 2015.07.03
IOS Native  (0) 2015.07.02
Easy Save 2  (0) 2015.07.01
SmoothMoves  (0) 2015.06.30