문제 상황
빌드머신을 정리하다가, 프로젝트 저장소의 내용은 같은데도 불구하고 빌드를 하면 Shader 를 찾을 수 없다는 에러 로그와 함께 ,화면의 메터리얼이 제대로 출력되지 않았다. ( 핑크색, 투명색 , 회색 등) 또한, Unity Editor 를 열고 에러 로그에서 말한 Shader 를 클릭해서 인스펙터에서 Compile Code 버튼을 클릭하면 , 컴파일 할 수 없다는 에러 로그가 뜬다. 이전 커밋으로 돌려도 문제가 재현되어서, 빌드머신의 문제라고 단정지을 수 있었다.
대응
사실, 빌드해서 에러로그를 찾을 때에는 특정 쉐이더의 할당이 누락된 것이라고 추정했었다. 실제로 예전에 유니티 버전을 바꾸면서 협업하다가, 기본 쉐이더 할당이 누락되어서 비슷한 현상이 일어난 적 있기 때문이다. 하지만, 프로젝트 세팅에서 누락된 쉐이더는 없었을 뿐더러, 더군다나 프로젝트 세팅의 파일 변경 내용도 깃에서 없는 것을 확인했다.
해당 로그를 직접 검색해서 포럼이나 스택오버플로우의 보고된 내용도 별다른 도움이 되지 않았다.
감을 좀 잡은 것은, 에디터를 빌드머신에서 켜보고, 그 쉐이더를 우연히 인스펙터로 켜보았을 때다. 컴파일을 누르면, 평소라면 컴파일 후에 해당 쉐이더 코드를 보여주는데, 컴파일에서 오류가 났고 그다음 코드가 떴다. 그래서, 컴파일이 제대로 되지 않아서 빌드에 포함되지 않은 쉐이더가 존재하게 되었고, 빌드에서는 쉐이더가 없다는 로그를 반환하는 것이라고 추리했다.
해당 내용으로 좀 디깅해보자, 참고할만한 스레드를 찾았다.
https://forum.unity.com/threads/unity-2019-2-7-build-ios-crashes-in-shader-compile.757754/?_ga=2.186811885.456730236.1573928598-986812279.1568100368
ios 빌드에 관한 내용이었지만, 원인적으로는 같은 이슈였다.
2가지의 전략을 세웠는데,
- 프로젝트를 2019 LTS 버전으로 업그레이드 하는 것
- 빌드머신의 유니티 엔진의 ShaderCompiler 파일을 2019.3.x 버전의 것으로 교체하는 것
그래서 둘다 병행하여 진행했고, 2가 먼저 성공을 거둠에 따라 1은 기각하고서, 이슈를 해결할 수 있었다. ( 1은 관련 SDK 의 오작동이나 플레이 로직에 영향등 여러모로 부담이 크다. )
후기
이번 이슈 조금 아찔했다. 평소에 쉐이더 컴파일러는 신경도 쓰지 않는데다가, 해결한 지금도 쉐이더에 관련해서 “그래픽 관련한 어떤 파일” 정도의 이해를 벗어나지 못하고 있으니 말이다. 그럼에도 굉장히 빠르게 해결할 수 있었는데, 서당개 삼년이면 풍월을 읊는다더니 이제 제법 차분하게 이슈를 핸들링하게 된 것 같다.
해결법이나 이슈 자체가 좀 난감한 편이라고 생각한다. ( 해결법도 파일 바꿔치기라니 기괴하다. ) 그럼에도 어쩌겠나, 상용엔진을 사용하는 원죄로 우리는 의문의 장애물을 만나게 되고 모두의 힘을 모아 해결하게 되는 것이다.(???)