본문 바로가기

Development

Xcode issue - WARNING: Shader Unsupported: 'anyshader' - Pass 'FORWARD' has no vertex shader

Unity를 사용하여 게임을 개발하고 있습니다.


게임 런칭을 앞두고 안드로이드 테스트를 무사히 마치고 아이폰 테스트도 큰 문제없이 잘돌아가는 것까지 확인을 하고 마무리 정리를 하려고 Xcode 디버깅 로그를 보니 생각지도 않던 경고가 계속 나오게 되었습니다.


번들을 로딩할 때마다 나오는 것이 신경쓰였습니다.


 WARNING: Shader Unsupported: 'anyshader' - Pass 'FORWARD' has no vertex shader 


위와 같은 warning 로그가 반복적으로 출력이 되고 있었습니다.


전혀 원인을 알 수도 없었고 해당 쉐이더는 에셋스토어에서 구매한 쉐이더를 생성한 부분이라 쉐이더를 수정하는 것은 더욱 상상할 수 없는 것이었습니다.


그래서..


구글링으로 해결 방법을 찾아봤으나 대부분 서드파티 업데이트로 해결되었습니다.

제가 사용한 쉐이더 역시 문제는 없었지만 커스텀 형식으로 사용하기 위해 생성된 쉐이더가 문제였습니다.


원인을 알아야 수정을 할텐데..

하루동안 찾고 헤메고 다녔지만 결론은 iOS 에디터에서 원인을 찾을 수 있었습니다.


위와 같은 경고는 쉐이더가 컴파일 되지 않았기 때문에 나오는 오류입니다.

결국 정상적으로 컴파일 되도록 만들어야 합니다.


에디터에서 해당 쉐이더를 열어 컴파일 하거나 쉐이더 사용 번들을 실행해 보면 결과가 나오겠죠.

만약 쉐이더에 문제가 있다면 Unity 에디터에서 컴파일 오류를 알려줍니다.


저의 경우는 쉐이더 내부에서 사용하는 전처리기 정의값이 다르게 적용되어 있었습니다.


Unity 버전이 업데이트 되면서 전처리기를 상당부분 변경하고 있습니다.


Unity 2017.3 버전 Release Note에 보면

...


* Graphics: GPU Instancing: Instance properties are now packed as arrays of structures. Internally, we changed the constant buffer layout, where multiple instance properties are present. There are three changes in the instancing declaration macros, but the old shaders can be upgraded automatically. For your reference, the three changes are:


1. UNITY_INSTANCING_CBUFFER_START/END renamed to UNITY_INSTANCING_BUFFER_START/END.


2. UNITY_INSTANCING_BUFFER_END now takes an arrayName in the parentheses.


3. UNITY_ACCESS_INSTANCED_PROP must now be provided with the arrayName in the first argument to indicate where this property comes from. Note that if graphics jobs are not enabled, the CPU-side processing of instance property values are optimized and off-loaded to a worker thread to further reduce CPU cost.


...


쉐이더 전처리기 선언문이 변경되었습니다.

이런 문제가 발생된 원인은 최신 버전을 적용하려고 Unity 2018.2 버전으로 업그레이드 했다가 일부 에셋스토어가 아직 지원하지 않아서 Unity 2017.2 버전으로 다시 다운그레이드 했습니다.
(Unity는 자체 버전 fix 기능이 있어서 프로젝트를 import하면 설치된 버전으로 호환되도록 알아서 전처리기 등을 변경합니다.)

모든 쉐이더의 값들이 새로운 버전에 맞도록 변경되었지만 다운그레이드의 경우는 다시 복원되지 않기 때문에 문제가 발생하였습니다.

이번 이슈를 경험하면서 에디터 테스트의 중요성을 다시한번 느끼게 되었습니다.

저의 경우와 동일한 문제가 있으시면 플랫폼별 에디터 확인을 꼭 해 보시고 쉐이더 컴파일 확인을 먼저 체크해 보실 것을 권장합니다.



'Development' 카테고리의 다른 글

Apple 리젝사유 및 해결방법  (0) 2018.08.02
게임 출시전 구글 사전 보고서 오류 발생  (0) 2018.07.31