1. UI Prefab 미리 로딩하기
UI구조를 꽤 많이 뜯어고쳐야할 줄 알았는데 기존에 의외로 인스턴시에이트해야하는 UI프리팹을 담을 Parent의 Start()에서 인스턴시에이트를 하고 있었기 때문에
그냥 그 Parent객체를 UI로딩 이전에 SetActive(true)해주는 것만으로 되는 것 같네요
그래서 큰 코드 변경없이 간단히 처리한 것 까진 좋았는데 대신에 로딩창이 껌뻑거리고 난리가 난 ㅋㅋㅋㅋ
지금은 로딩 스크린은 3D화면 사용중인데 2D로 바꾸는걸 검토해봐야겠어요
AFK journey같은 갬성적인 로딩화면 만들고 싶었는데...
2.쉐이더 성능?
아직은 많이 생소한 프로파일러를 켜서 여러가지 프로파일링 테스트를 해보았는데 새로 사용 중인 유니티 툰 쉐이더가 병아리들 Batching 처리를 못해주는걸 알게되었습니다
옵션에 배칭 설정이 있었던것 같은데 왜??.... 3D는 같은 매터리얼 써도 배칭이 안되는건가? 흠...
아래 보면 병아리를 하나하나 다 그리고 있죠. 그림자는 ㄹㅇ fake shadow로 바꿔야할듯요
혹시 몰라서 다른 가벼운 툰 쉐이더를 몇개 깔아보았는데 전부 렌더링이 안되서 투명 병아리를 만들어버리더라는...
아마 URP 에셋 설정이 뭔가 꼬인 것 아닌가 싶은데 이걸로 또 몇 주 날리겠네요 ㅎ....
3. URP 옵션 조정
Depth Priming Mode를 Forced로 바꾸는 것은 로우폴리 툰쉐이딩에서 그래픽에 영향을 거의 주지 않으면서 FPS 3~5정도의 개선 효과를 주는 것 같아요
FPS가 3~5면 별거 아닌걸로 보일 수 있지만 현재 FPS 15~25 수준인 보닌쟝 께임에서는 무려 15%이상의 어마어마한 개선이네요 ㅋㅋㅋㅋ 알려주셔서 ㄳㄳ
이것도 그렇지면 URP에 워낙 설정값들이 다양해서 쉐이더 바꿔가며 어떻게 바뀌는지 테스트를 해봐야할 것 같습니다
4. Deep Profiling 성능감소가 의외로 적었다
NHN의 Game Packagae Manager를 깔고 돌려보았는데 에디터 연결해서 Deep Profiling을 할 때와 안할때 FPS차이가 5~10정도 나왔네요
아마 워낙에 사용중인 폰이 허접해서 많이 개선되지는 못하는게 아닐까 추측 해봅니다
어쨌거나 생각보다 FPS개선이 없어서 희망이 다시 없어져버렸어요 ㅋㅋㅋㅋㅋㅋㅋ
5. 유니티 최적화 영상 보는 중
프로파일러 사용법을 잘 몰라서 유니티 강좌를 듣는 중입니다 의외로 기능이 다양하게 많네요
https://www.youtube.com/watch?v=d_0uDfNEOk8&list=PLO5TRuOM6cK0jbY7UqSP8cVbrhUR-Vf7c
제대로 만든 첫 게임이다보니 UI쪽이 엉망진창일거라고 생각하고 있었는데 프로파일러나 오버드로우를 확인해봤는데 의외로 나쁘지 않게 보였습니다
하지만 제가 까막눈이라 뭘 몰라서 그럴 수도 있어서 계속 지켜봐야할 것 같아요 ㅋㅋㅋㅋ
6. 화면에 안보이는 객체 Update()연산 줄이기
지난주던가 갤에서 안보이는 객체 Update()도 줄이는것도 팁이라고 해서 챗GPT에게 물어봤더니 모노비헤비어에 OnBecameVisible()과 OnBecameInvisible()이라는 이벤트함수가 있으니 그걸 활용하면 된다길래 해봤는데 전혀~~ 호출이 되지 않았어요 ㅋㅋㅋㅋㅋㅋ
다른 방법으로는 렌더러에 isVisible이란 변수가 있으니 그걸 활용하라는데 LOD를 사용하다보니 한 동물당 렌더러가 4개씩 붙어있어서 매번 렌더러를 4개씩 확인해야 하는데 루프를 돌리기는 싫으니 그냥 무식하게 isVisible 변수를 다음과 같이 하나 만들어 주었습니다
bool isVisible => renderers[0].isVisible || renderers[1].isVisible || renderers[2].isVisible || renderers[3].isVisible; // ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
void Update() {
if(isVisible) return;
}
이게 얼마나 성능에 기여를 할지는 모르겠지만 어쨌거나 마음이 편하긴 하네요 ㅋㅋㅋㅋ
7. 다음 작업계획
일단 현재로서는 렌더링 쪽이 가장 부하를 많이 먹고 있어서 예쁘게 보이면서 성능도 덜 먹는 툰쉐이더를 찾는 것을 가장 우선적으로 검토해봐야할 것 같습니다
병아리들 배칭이 잘 안되면 병아리나 닭, 오리같이 작은 동물은 GPU 인스턴싱적용하는 것을 고려해봐야겠어요. 예전 기억으로는 동물 하나당 게임 용량이 10메가 정도 늘어났던걸로 기억하는데 LOD를 줄이면 좀 나아지려나... 어차피 이미 350메가 넘었으니 350메가나 400메가나 그게그거 아닌가?!! 라는 마인드로 ㅋㅋㅋ
그 외에 캔버스를 용도별로 4개인가 5개씩이나 쓰고 있는데 이것도 좀 구조조정해봐야할 것 같네요
병아리 그림자를 Fake Shadow로 바꾸고 캐릭터 얼굴 이미지 같은건 아틀라스로 바꾸는 작업도 약간의 개선이 가능할 것 같은데 이건 나중에 해야겠어요
이미지를 언제 또 바꿀지 모르는 상황이라.... 유니티 최적화 강좌를 좀 더 보면서 어느 부분을 좀 더 최적화 할지 고민해볼 생각입니다
그래도 일케 일지 쓰니까 뭔가 하고 있다는 티가 나잖으ㅋ
아 지난 6개월은 거의 버그 잡고 스파게티 코드 고치느라 시간 다 보내서 ㄹㅇ 보여줄게 없었던거라서 ㅋㅋㅋㅋ 최적화 하는 동안은 자주 올릴것 같네요. 개인적으로 최적화 작업 기록 남겨두기도 좋고 뉴비쟝들한테도 도움이 될것 같아서 ㅎㅎㅎ
rito15.github.io/posts/unity-opt-script-optimization 이건 어때?
모르는것들이 꽤 있네요 이것도 해볼께요 ㄳㄳ
화이팅!!