본문 바로가기
유니티 엔진

유니티 5.2 이상부터는 ETC2 기본 사용

by 대마왕J 2016. 2. 10.

http://ozlael.tistory.com/42

 

유니티 5.2 이상부터는 안드로이드에서 ETC2가 기본 사용입니다.

그냥 자동으로 해 두면 ETC2가 가동됩니다. 편한데다가...알파까지 지원되는 퀄리티 좋은 텍스쳐가 나오니 이 어찌 아니 좋을시고..

아참, 정확히 말해야겠군요.

그냥 RGB - 알파 없는 상태 - 일때는 여전히 ETC1 이고

알파가 있는 상태 RGBA 일 때만 ETC2 파일 포맷을 사용하는 거군요. 하긴 알파가 없을때는  ETC1이나 2의 퀄리티가 큰 차이가 없지요. 위 글에서 강제로 바꾸는 법을 소개했습니다만, ETC1으로 만들어도 퀄리티도 큰 차이가 없고 하위 호환도 되니까 사실상 굳이 강제로 바꿀 필요는 없어 보입니다.

 

 

하지만 RGBA16비트와 ETC2 RGBA의 퀄리티와 용량 차이는 상당합니다.

ETC2 RGBA가 압도적으로 용량이나 퀄리티가 뛰어나요. 좋은 방향입니다.

 

단지 여전히 ETC1 밖에 지원 못하는 기기가 문제입니다.

예를 들자면 겔럭시3라던가 겔럭시3라던가 겔럭시3라던가 겔럭시3라던가 겔럭시3라던가 겔럭시3라던가

 

그런 경우에는 ETC2를 지원 못하니까요 큰일입니다.

그럴 때를 대비해서 아래 메뉴가 있습니다. 

 

 

이 옵션을 체크해주면 ETC1으로 알아서 두 장으로 알파를 갈라준다는군요. 흠. 즉

ETC1 한 장은 RGB이고 ETC1 또 한 장을 알파 채널만 넣어서 생성해 준다는 말입니다.

 

 

이거... 예전에 실무에서 TA들이 늘 하던 그 짓이로군요. 자동으로 하게 되었네요

아 우린 뭐 먹고 살라고

 

Shader 측면에서는... 서피스 셰이더에서는 바뀐게 없습니다. 아마도 자동으로 해주지 않을까요

내장된 대부분의 Shader를 찾아보니 위 오즈라엘 글처럼

 

Sprite-Diffuse.shader 외에는 적용된 Shader를 찾아보기 힘듭니다.

아래는 아예 함수로 빼놨네요  

 

fixed4 SampleSpriteTexture (float2 uv)
        {
            fixed4 color = tex2D (_MainTex, uv);

#if UNITY_TEXTURE_ALPHASPLIT_ALLOWED
            if (_AlphaSplitEnabled)
                color.a = tex2D (_AlphaTex, uv).r;
#endif //UNITY_TEXTURE_ALPHASPLIT_ALLOWED

            return color;
        }

 

 

 

이 함수를

void surf (Input IN, inout SurfaceOutput o)
        {
            fixed4 c = SampleSpriteTexture (IN.uv_MainTex) * IN.color;
            o.Albedo = c.rgb * c.a;
            o.Alpha = c.a;
        }

 

 

이렇게 텍스쳐 샘플링을 아예 함수로 맡겨 버리네요. 음 프래그먼트로 짤 때는 이렇게 짜야겠어요

응? 근데 이렇게 되어 있으면 텍스쳐를 어떻게 받나 싶더니

[PerRendererData] _MainTex ("Sprite Texture"2D) = "white" {}

 

[PerRendererData] 라는 전처리를 선언해 주네요?

그렇다면 이걸 선언해 주면 _MainTex 와 _AlphaTex 라는 두 개의 텍스쳐 샘플링으로 분리가 되어서 저장된다는 뜻이예요.

 

 

그럼 여기서 생긴 문제는...

ETC1으로 돌릴 생각인 게임은 저길 체크해 줘야 한다는 말이구요.

텍스쳐의 알파 채널을 다른 데다가 (스페큘러 마스크라던가) 에다가 사용할 생각이면 .. 제길! 쓸데없는 짓일 수도 있단 말 아녜요

 

 

 

근데 또 여기서 궁금한 것은, 알파가 있는 Diffuse Lambert  Shader를 만들고 , 이걸 컴파일 해 봐서 프래그먼트로 보면 이번엔 또 저 위처럼 처리가 안된단 말예요.

뭐가 답이냐고 그러니까...

 

 

 

 

 

반응형

댓글