2022년 9월 12일 월요일
Unity Webgl 1.0 2.0
2022년 5월 15일 일요일
URP)CameraStackManager
CameraStackManager
https://github.com/do-won-kim/CameraStack
unity urp로 넘어오면서 카메라가 제법 많이 변경이 있었는데 그중 눈에 띄는 점은 depth가 사라진 점과 depth only 가 사라진 것이다.
depth는 stack이라는 리스트로 depth only는 overlay camera로 구현이 가능한데 사실 기존에 UI canvas쪽을 screen space - overlay를 사용하던 프로젝트는 카메라를 여러대 쓰는게 아니라서 별로 신경쓸 점이 없다.
하지만 불행이도 우리 프로젝트는 screen space - camera를 사용중이였고 그에따라 ui camera가 따로 존재해서 overlay camera 기능을 사용해주어야 했다.
canvas를 전부 overlay로 바꾸는것은 이펙트 때문에 작업량이 많아져서 불가능 했기 때문에 기존 형태에서 자동으로 씬 이동이나 overlay 카메라가 켜지거나 꺼질때 혹은 base 카메라가 추가되거나 꺼지거나 할때 자동으로 stack 이라는 리스트를 관리해줄 필요성이 있어서 해당 매니저를 제작하게 되었다.
프로파일링 데이터 엑셀 추출 툴
프로파일링 데이터 엑셀 추출 툴
https://github.com/do-won-kim/Tools/tree/main/Profiling
한창 최적화를 할 때 테스트 데이터를 저장해서 필요한 장소만 수정 할 수 있도록 엑셀 데이터를 뽑는 툴을 만든 적이 있었는데 이 후 다른 작업을 하게되면서 잊고 있었는데 갑자기 생각이 나서 odin 제거하고 기본 유니티에디터 스크립트로 수정한 버전
유니티 에디터에서 촬영하는 버전과 android와 연결해서 촬영하는 버전 두개가 있다.
자세한 사용방법은 깃허브의 리드미로 대체 합니다.
2022년 5월 9일 월요일
Simple)Material Copy Tool
Material Copy Tool
2022년 5월 2일 월요일
Custom Shader GUI Basic Frame
Custom Shader GUI Basic Frame
2022년 2월 16일 수요일
URP 7.6.3 -> 10.8.1 Specular가 미묘하게 달라져있다.
URP 7.6.3 -> 10.8.1 Specular가 미묘하게 달라져있다.
2021년 12월 15일 수요일
Coroutine과 Task를 사용할 때 DeadLock
Coroutine과 Task를 사용할 때 DeadLock
2021년 8월 11일 수요일
Addressable 1.18.15 번들 갱신이 되는 특이한(?) 경우
Addressable 1.18.15 번들 갱신이 되는 특이한(?) 경우
2021년 8월 5일 목요일
Addressable 1.16.19 Bug
Addressable 1.16.19 Bug
2021년 8월 2일 월요일
GC Alloc를 줄이자
GC Alloc를 줄이자
-해당 코드 프로파일링 결과-
2021년 7월 21일 수요일
Unity Text(UIVertex[]) Memory Leak
Unity Text(UIVertex[]) Memory Leak
2021년 7월 18일 일요일
Unity 2019.4.28f 버그?
이번에 유니티 버전을 4.22f에서 4.28f로 올리면서 지난버전에서는 없었던 크래쉬 이슈가 다량으로 올라왔다.
확인 결과 ios나 android 스마트폰에서는 해당 증상이 없었으나 에뮬레이터에서 발생한 것을 알 수 있었고 매번 크래쉬가 나지는 않고 간혈적으로 발생했다.
크래쉬 로그를 뽑아서 확인 해보니깐 모두 같은 함수를 타다가 크래쉬가 났는데 유니티 자체 함수에서 발생하는 것을 알 수 있었다 바로 FindObjectOfType 와 FindObjectsOfType였고 매개변수만 다른 몇몇 개로 수정해서 테스트 해봤으나 여전히 크래쉬가 발생했고 결국 할 수 있는 선택지는 해당 함수를 제거하고 같은 기능을 다른 방식으로 구현했다.
그 결과 크래쉬는 발생하지 않았다.
특이한 점은 새로운 프로젝트를 만들어서 해당 함수를 사용했을 때는 크래쉬가 발생하지 않았다는 점인데 무언가 그 타이밍에 돌던 다른 것과 충돌하는 것일 수도 있을거 같긴하다.
아무튼 유니티는 버전이 바뀔 때마다 새로움을 준다.
---
4.28f 업그레이드 이후에 GetPixels 함수에서도 간혈적으로 크래쉬가 일어나 확인중
-21-07-19) GetPixels32 로 바꾼 후에 크래쉬는 제거 됐으나 GetPixels32를 쓰고 있는 다른 스크립트에서 memory leak이 발견되어 추가 확인중
2021년 7월 16일 금요일
Bloom Shader 최적화
Bloom Shader 최적화
2021년 7월 13일 화요일
쉐이더 메모리 최적화
쉐이더 메모리 최적화
쉐이더에는 multi_compile와 shader_feature 라는 기능이 있다.
쉐이더의 베리언트를 나눠서 하나의 쉐이더에서 여러 기능을 구현 할 수 있도록 해주는 것인데 둘의 차이라면 multi_compile는 모든 분기가 빌드에 포함되고 shader_feature 사용중인 분기만 빌드에 포함된다는 것이다.
그러면 shader_feature 만 쓰면 된다고 생각 할 수도 있지만 런타임중에 분기가 바뀌는 경우에는 shader_feature 의 경우 빌드에 포함되지 않았기 때문에 동작이 제대로 되지 않는다.
그렇다고 multi_compile를 전부 쓰면 쉐이더의 베리언트가 배로 계속 늘어 무식하게 커지게 된다.
pc게임이라면 어느정도 사이즈는 신경 쓰지 않을 수 있지만 회사에서 모바일 게임을 개발 중이기 때문에 민감하지 않을 수 가 없었다.
2021년 7월 12일 월요일
유니티 어드레서블 그룹 정리 툴
어드레서블 정리 툴
사용 하던 유니티에 어드레서블을 적용하고 나서 몇몇 문제들이 있었습니다.
그중에 내가 직접 넣은 에셋말고 그 에셋에 포함되서 들어오는 에셋들 때문에 그룹 업데이트가 빈번하게 되서 암시적으로 오는 에셋들을 전부 분리해서 에셋으로 빼니깐 양이 많아져서 그룹 정리하는게 일일이 손으로 하기 힘들어서 툴을 만들게 되었습니다.
암시적으로 들어가 있는 에셋들을 분리 해주는 툴은 어드레서블 패키지를 한줄 수정해야하고 좀 불안정해서 그룹핑 하는 툴만 올려봅니다.
2021년 7월 10일 토요일
어드레서블과 아틀라스(레거시) 최적화 문제
어드레서블과 아틀라스(레거시) 최적화 문제
메모리 최적화를 위해 메모리 프로파일링을 하던 도중 아틀라스가 중복되서 올라오는 현상을 발견했다.
워낙 큰 아틀라스라 처음에는 여러장 있는 건줄 알고 있었으나 같은 아틀라스인 걸 확인 후에 레거시는 새로나온 V2처럼 수동조작으로 하는게 아닌데 왜 중복으로 올라가는지 찾아본 결과
어드레서블을 이용해 번들을 나눌 때 파일 형식 별로 갯수와 용량을 맞추었는데 아틀라스가 같은 스프라이트가 번들이 나눠져 있을 경우 나눠진 만큼 아틀라스도 중복되서 올라가는 것이였다.
스프라이트의 경우 아틀라스가 없으면 일정 갯수대로 있으면 아틀라스 별로 번들 그룹을 정하는 것으로 해결
- 참고1 테스트용 apk를 만들면서 이상한 점을 발견했는데 빈 프로젝트에 아틀라스 패킹을 하고 번들을 찢어 놓으면 메모리가 여러개 올라가지 않고 하나만 올라갔다는 점이다.
이상해서 이것 저것 테스트 하던 와중 번들내에 있는 스프라이트를 하나 어드레서블 로드를 했을 때 갑자기 여러장이 올라가서 이게 문제 인가 했지만 테스트 했던 코드를 모두 지우고 다시 빌드 했을 때도 여전히 여러장의 메모리가 올라가는 것을 확인했다.
유니티는 정말 봐도 봐도 신기하다는걸 이번 테스트로 다시 확인 했다.
결국 정확한 원인은 파악하지 못했지만 해결 방법은 같은 아틀라스를 쓰는 스프라이트들은 같은 번들에 넣는 걸로 해결이 가능하였다.
- 참고2 해당 문제는 apk빌드 후에 프로파일링을 해야 발견 됐다 에디터에서는 간혹 캐쉬가 남아서 한두개 더 찍히기도 했지만 껐다가 키면 다시 아틀라스가 하나씩만 메모리에 올라가는 것을 확인 하였다.
