DX11에서 어셋번들 쉐이더가 깨져 나오는 경우
Unity3D/Problems 2016. 8. 29. 10:31https://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 |