DX11에서 어셋번들 쉐이더가 깨져 나오는 경우

Unity3D/Problems 2016. 8. 29. 10:31
반응형

https://docs.unity3d.com/Manual/UsingDX11GL3Features.html


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

출처: http://baramlife.tistory.com/9 [프로그래머인생]


위그림과 같이 <Dx11>로 되어 있을때 CDN에서 받아온 어셋 번들의 쉐이더가 안나오는 경우가 있다.

해결 방법 

1.Auto Graphics API Windows 체크 해제 

2. +버튼을 눌러 OpenGL ES 3, 2 추가후 Dx 11, 9 제거 

3. Apply 


수동으로 넣어 주는 방법도 있겠지만...

var arrow = AssetManager.Instance.LoadAsset<GameObject>("Effects/arrow", true);


        Renderer[] renderers;

        Material[] materials;

        string[] shaders;


        renderers = arrow.GetComponentsInChildren<Renderer>();


        foreach (var rend in renderers)

        {

            materials = rend.sharedMaterials;

            shaders = new string[materials.Length];


            for (int i = 0; i < materials.Length; i++)

            {

                shaders[i] = materials[i].shader.name;


                Debug.Log(shaders[i]);

            }


            for (int i = 0; i < materials.Length; i++)

            {

                materials[i].shader = Shader.Find(shaders[i]);

            }

        }


http://baramlife.tistory.com/9

http://jinhomang.tistory.com/43

http://devkorea.co.kr/bbs/board.php?bo_table=m03_qna&wr_id=37198




반응형

'Unity3D > Problems' 카테고리의 다른 글

Playmaker AI 설계  (0) 2016.09.20
Cannot mark assets and scenes in one AssetBundle  (0) 2016.09.20
ParticleSystem 3D Start Rotation  (0) 2016.08.19
공포의 level_pattern_data  (0) 2016.07.13
GPGS Invalid classname Issue  (0) 2016.07.13
: