Pink Transparent Star

Unity

[Unity] Solve - Shader가 핸드폰에선 적용이 안될 때

채유나 2024. 8. 18. 03:19
728x90

Unity 로 어느 정도의 개발이 마무리되고 APK를 뽑은 뒤 게임을 확인한 결과 치명적인 오류를 발견했다..

 

바로 모든 핸드폰 기종에서 그런건 아니지만 쉐이더 처리한 모든 것들이 보여지지 않는 다는 문제가 생겼다.

 

문제 1. 버튼의 쉐이더가 보이지 않음

 

 

 

문제 2. 인게임 안의 쉐이더와 파티클 쉐이더가 깨지고 무지개 빛으로 나타남

 

이 문제를 해결하기 위해 해봤던 방법들을 작성해두려고한다.

1. 인게임에서 적용한 Material Resources 이동 (💣 실패 )

유니티는 내부적으로 특수 목적으로 동적 파일을 사용할 때 Resources라는 고정적인 이름을 가진 파일을 만들어서 저장하면, 동적 로드를 지원하는 기능을 제공

> 관련된 부분은 프리팹으로 만들어서 상관은 없을꺼같지만 해당 방법으로 해결했다는 글을 보게되었다.

문제의 원인으로 메터리얼를 로드하는데의 이유로 판단을 하여  Resources에 추가하였다.

차후 Addressables로 변경해야할 것 같다.

 

2. Build Profiles > Android > Auto Graphics API 설정 (💣 실패 )

 : 런타임때 적합한 API를 자동으로 설정을 해준다고하여 선택하였다.

 

그래픽스 API 지원 - Unity 매뉴얼

Unity는 특정 플랫폼의 API 유효성에 따라 DirectX, Metal, OpenGL 및 Vulkan 그래픽스 API를 지원합니다. Unity는 빌트인 그래픽스 API 세트 또는 에디터에서 선택된 그래픽스 API를 사용합니다.

docs.unity3d.com

 

3. Texture > Android > Override For Android (💣 실패 )

텍스처에 문제가 있는 건가 하여 특정 플랫폼의 기본값을 오버라이드 할 수 있다고 하여 해보았다.

 

Unity - Manual: Android 2D Textures Overrides

Android 2D Textures Overrides When you are building for different platforms, you have to think about the resolution of your textures for the target platform, the size and the quality. You can set default options and then override the defaults for a specifi

docs.unity3d.com

 

4. Enable GPU Instancing (💣 실패 )

여러가지 이유를 서칭하는 중 커스텀 쉐이더를 적용했을 때의 문제로 Enable GPU Instancing을 해제하면 해결된다고 하셨으나.. 내가 만든 커스텀 쉐이더에는 해당 부분이 존재하지 않았다.

 

 

GPU 인스턴싱 - Unity 매뉴얼

GPU 인스턴싱을 사용하면 적은 수의 드로우 콜을 사용하여 동일한 메시의 여러 복제본을 한 번에 그리거나 렌더링할 수 있습니다. 씬에서 반복적으로 나타나는 건물, 나무, 풀 등의 오브젝트를

docs.unity3d.com

 

5. Edit > Project Settings > Graphics > Shader Settings - Always Included Shaders (💣 실패 )

사용했던 Shader를 추가해서 포함시켜야한다고한다.

🤔 의문 ? 그럼 쉐이더를 몇 백개가 있는 경우 몇 백개를 등록해야한다는 것일까...? 아닐꺼같은데 좀 더 알아봐야할 것 같다.

 

6. Bulid Profiles > Platform Setting > Texture Compression (💣 실패 )

: 텍스처 압축 포맷 문제인가하고 ETC2로 선택되어 있던 것을 ASTC로 변경하였다.

 

 

- ASTC( Adaptive Scalable Texture Compression ) 

- ETC2( Ericsson Texture Compression )

이 두개의 압축 포맷을 유니티에서 일반적으로 사용되는 텍스처 압축 포맷이라고 한다.

 

이 두 개의 차이는 궁금한 부분이라 나중에 따로 포스팅을 작성해야겠다.

 

7. 문제가 생겼던 기기의 원인인가하여 기기에 대해 조사 ❗❗

문제가 생겼던 기기 : 갤럭시S23과 플립

 

알아보니 갤럭시 S23과 필립같은 경우 쉐이더 오류가 있는 것같았다.

Vulkan일 때 버그가 생긴다고하여 기존 Auto Graphics API를 해제하고 OpenGLES3로 사용하고 해결할 수 있었다..!

 

Subtle Vulkan shader compilation bug when running on Adreno GPUs (Samsung Galaxy S23 Ultra) · Issue #5186 · ggerganov/llama.cp

GPU info: QUALCOMM build : 7b26bdd942, Iab69c31769 Build Date : 08/28/23 Shader Compiler Version : E031.41.03.44 Local Branch : Remote Branch : refs/tags/AU_LINUX_ANDROID_LA.VENDOR.13.2.0.11.00.00....

github.com

 

 

참고 사이트

https://aker.tistory.com/545

https://openplay.tistory.com/5

https://coding-shop.tistory.com/157

 

728x90