본문 바로가기

Unity

(12)
[Unity] AssetBundle Parellel Download 0. 서두 모바일 게임이 미드코어를 넘어 하드코어로 진화함에 따라 그 덩치 역시 만만치 않게 커지게 되었다. 이미 1년전부터 A-RPG, MMORPG를 설치하면, 1기가가 훌쩍 뛰어넘는 경우를 흔치 않게 볼 수 있게 되었다. 상황이 이렇다보니, 압축된 애셋 번들을 적게는 400~500에서 많게는 600-700 MB 이상 배포를 해야되는데, (Funnel 분석을 해 보면)이 구간에서 적지 않은 유저들이 이탈된다. 네트워크가 좋은 나라에서는 그나마 괜찮은데, 그렇지 못한 Region에서는 이 문제의 심각성이 배가된다. DL을 다운로드 받는 동안 유저가 이탈하지 않도록 꾸준히 방법론들을 시도하였는데, 이미 만화 또는 영상을 보여주는 것으로는 실질적으로 DL 이탈률을 낮추지 못함이 업계의 정설이다. 결국 핵심은..
[Unity] Script Life-Cycle 음... 매번 조금씩 헤깔리는 자신을 반성하며, 아예 찾기 쉽게 글로 남겨겠단;; https://docs.unity3d.com/kr/current/Manual/ExecutionOrder.html 출처:[Unity] Script LifeCycle
[Unity] Memory leak 유형 및 대처 개요 프로그래머가 꼼꼼하게 챙겨주지 않으면 생각보다 많은 곳에서 메모리 누수가 발생할 수 있다. 액션 RPG 프로젝트를 진행하면서 겪었던 메모리 누수 현상들에 대해 정리하여 기록으로 남기고자 글을 작성한다. 발생할 수 있는 상황들 1. Singleton static instance 더 이상 보호되지 않아야 할 싱글턴 객체의 OnDestroy 함수에서 반드시 instance = null; 처리를 해 주어야 한다. 이것을 해주지 않으면, OnDestroy 이후에도 객체는 계속해서 alive 한 상태가 된다. 결국 메모리에서 해제되지 않으므로, 늘 유념해야 한다. 아예, OnDestroy 함수를 먼저 만들어 두고, instance = null; 코드를 삽입하는 습관을 들이는 것이 좋다. 2. delegate ..
[Unity] 개인프로젝트 - 캐릭터 렌더링 셰이더 기본 정책 PBR에 맞춘 공정으로 셰이더는 Unity5의 기본 셰이더보다 단순하게(저렴하게) 구성. Linear color space가 아닌 Gamma color space로 계산한다. 텍스쳐 구성 캐릭터의 텍스쳐 구성은 다음과 같이 이루어져 있다. Diffuse (BaseColor) Normal Metallic Glossiness AO AO 맵을 Diffuse에 multiply 시켜서 처리한다. (상-하로 갈리는 감쇄 표현 표함) [Unity] D2 - 클라이언트 최적화 문서의 캐릭터-텍스쳐에서 텍스쳐 사이즈를 확인할 수 있다. 5장의 텍스쳐를 사용하지만, 텍스쳐 병합을 통해 런타임엔 Diffuse + Normal + (Metallic + Glossiness + AO)의 3장만 사용하는 방식이다..
[Unity] 개인프로젝트 - 아트 리소스 버짓 개요 [Unity] D2 - 클라이언트 최적화에 여러 최적화 방법들이 작성되어 있지만, 근간에 해당하는 것 중 하나가 6. 아트 리소스 버짓 준수이다. 아무리 테크에서 쥐어짠다한들, 리소스 자체를 지나치게 사용하면 최적화는 답이 없어지게 된다. 그렇기에 각 리소스 버짓에 대해 파티셔닝을 해 줘야 하고, 이를 아티스트들에게 설득시키는 작업이 요구된다. 참고로, D2의 경우 기준 디바이스가 삼성 갤럭시 S5 / Note3 였다. Total vertex D2 프로젝트에서는 한번의 렌더링에서 사용될 수 있는 버텍스의 총합을 60k로 책정하였으며, 그래픽 옵션 2가 기준이었다. Budget per section 60k의 제한을 다음과 같이 아트 영역에 나누어 분배하였다. 배경 : 30k 이펙트 : 10k Crea..
[Unity] 개인프로젝트 - 저사양 단말기 구분하기 개요 D2에서는 그래픽 옵션을 4단계로 제공하고 있다. (관련 링크 : [Unity] D2 - 그래픽 옵션) 그리고, 게임을 처음 설치하면 기본적으로 옵션 2로 설정되지만, 저사양 단말기의 경우 그래픽 옵션 2로 원활하게 게임을 플레이하기 어렵다는 판단이었다. 이에, 저사양 단말기를 구분해서 기본 옵션 1로 설정되게 하고, 옵션 2 이상으로는 올리지 못하게 하는 처리가 필요했다. iOS UnityEngine.iOS.DeviceGeneration 이라는 Enum을 살펴보면 다음과 같이 열거가 되어 있다. public enum DeviceGeneration { Unknown = 0, iPhone = 1, iPhone3G = 2, iPhone3GS = 3, iPodTouch1Gen = 4, iPodTouch2..
[Unity] 개인프로젝트 - 클라이언트 최적화 개요 D2의 기준 디바이스는 안드로이드의 경우 갤럭시 S5 / Note3 급이며, 최소 디바이스은 갤럭시 S4 급이다. iOS의 기준 디바이스는 iPhone 5s 이며, 최소 디바이스는 iPhone 5 이다. 참고로, 안드의 메모리는 2GB 이상, iOS의 메모리는 1GB 이상이 메모리 최소 요구사항이다. CBT 때 어느 정도 안정화 되었던 프레임이 소프트런칭 직전 갤럭시 노트3 단말기에서 들쭉날쭉 아주 춤을 추는 상황이 생겼다. 분명 최소한의 장치는 했다고 생각했는데, CBT 이후 개발이 급격히 진행되면서 여러 가지가 망가져 있었던 것이다. 소프트런칭까지 2주 남은 시점에서 진행했던 최적화 작업들에 대해 기록을 남긴다. 목표 기준 디바이스에서의 적어도 40fps를 안정적으로 제공하는 것이 최적화의 목표..
[Unity] 개인프로젝트 - 그래픽 옵션 설정 옵션표 및 구성 D2의 그래픽 옵션은 4단계로 구성되어 있으며, 각 단계별 차이는 다음의 것들을 조합해 만들어 냈다. Unity ProjectSettings - Quality 1/2/3/4 Screen resolution force lower on/off Some shader on/off Logical object culling on/off Post processing on/off Fog on/off Combustive effect of DeadBody on/off 이러한 조합으로 만들어진 옵션표는 다음과 같다. 옵션 - 1 단계 옵션 - 2 단계 (Default) 옵션 - 3 단계 옵션 - 4단계 Texture Quality : Half Particle raycast budget : 16 Anisoto..