Shader가 Asset Bundle에 포함되면, 이 Shader는 제대로 표현될까?

Shader는 평상시에 text 형태의 소스코드로 존재해서, windows editor에서는 d3d로 동작하고, 모바일 기기에서는 open gl es나 metal 로 동작된다.

즉 소스코드로 존재할 때는 unity가 알아서 현재 동작되는 플랫폼에 맞는 binary로 빌드해서 처리해 준다.


문제는 shader 를 AssetBundle안에 묶을 때 발생한다.

Shader가 Asset Bundle에 포함되면, 소스코드 형태로 들어가지 않고, 타겟 플랫폼으로 빌드된 형태로 포함되게 된다.

따라서 이 Asset Bundle을 타겟 플랫폼에서 사용하면 잘 동작하지만, 다른 플랫폼에서 사용하면 Shader.isSupported가 false로 나오면서 핑크 또는 검정색으로 뜨게 된다.


이게 당연한 얘기처럼 들릴 수도 있겠지만, Asset Bundle을 개발을 위해서 editor에서 돌릴 때 문제가 된다.

editor에서 android 타겟으로 빌드한 asset bundle을 열어서 사용하게 되면, 타겟 플랫폼은 android이고, 현재 플랫폼은 windows이므로 shader가 지원되지 않는다.

즉 분홍색 또는 검정색으로 나오게 된다.


이런 현상을 처음 겪게 되면, 유니티 버그로 인식하게 되고...... 절망하게 된다.

이를 피할 수 있는 방법은 editor에서만 shader를 Shader.Find()로 한 번 더 찾아서, 연결시켜주면 된다.

오직 editor에서만 이런 처리를 해주면 된다. 타겟 플랫폼에서는 원래 잘 되기 때문이다.


좀 더 편리한 해결 방법이 있을까?

http://www.mingruijiang.com/Shaders-from-asset-bundles-appear-pink-in-editor

Posted by 바람인생
,