본문 바로가기

전체 글

(20)
Screen Space Ambient Occlusion( SSAO ) 기법 Screen Space Ambient Occlusion ( SSAO ) SSAO 기법은 Ambient Light 의 계산을 구현하는 기법중에 하나인데, 빛이 인접 물체에 산란, 반사 되어 미치는 빛을 말한다. 빛이 물체에 닿으면 흡수되고 남은 빛을 내뿜는데, 이 빛이 인접 물체에 반사 되어 눈으로 들어오는 것이 Ambient Light 라고 할 수 있다. 쉽게 생각하면 씬에 전역적으로 고르게 분포하는 빛이라고 생각하면 된다. 유니티 등에서 기본적으로 사용되는 라이팅 계산( Standard Shader )에서는 Phong 의 조명 모델이 사용되는데 빛을 매우 근사화 하여 계산한다. 위 그림 처럼 Phong Shader에서는 Ambient Light는 일정한 상수값으로 표현 된다( 매우 간략화 ). 실제로는..
Anti Aliasing 기법( MSAA, SSAA, FXAA, SMAA ) 컴퓨터 공학에서의 Aliasing 이란 정보를 디지털화 과정에서 필연적으로 일어나는 현상이다. 이미지를 처리할때는 Aliasing 이 일어나면 계단현상이 일어나게 되는데 빛 계산이 있는등 인접 필셀과 색 차이가 심할 수록 더 두드러지게 확인된다. 이런 현상을 개선 하기 위한 기본적인 방법은 경계에 위치한 픽셀에서 인접한 픽셀들의 중간값을 보여줌으로 해서 완화 할 수 있다. 상황애 따른 많은 AA 방식들이 있지만 게임과 유니티에서 사용 할 수 있는 AA 기법들의 차이점에 대해서 간단히 포스팅 하려고 한다. 1. SSAA ( Super Sampling Anti Aliasing ) 가장 기본적인 AA 기법으로 사실상 가장 품질이 좋다고 할 수 있지만 가장 연산량이 많은 AA 기법이라고 할 수 있다. 가로 세로..
[유니티 최적화] 앱 다운로드 크기 최적화 #9 ( 쉐이더 Shader 용량 최적화 ) 쉐이더( Shader ) 용량 최적화 쉐이더는 게임 상에서 사용하지 않는 쉐이더라도 프로젝트 폴더안에 있으면 컴파일 후에 빌드에 포함되게 된다. 쉐이더의 개수가 많다면 빌드 시간과 용량이 증가하는 원인이 된다. 확실히 사용하지 않는 쉐이더 파일 이라면 (.shader) 제거하는 것이 좋다. 보통 쉐이더의 용량은 크지 않은데 '쉐이더 배리언트'라는 방식이 용량 증가의 원인이 된다. GPU는 대표적인 SIMD 병렬처리 장치인데 Single Instruction Multiful Data 라는 것의 약자로 같은 연산을 여러 데이터에 대해서 동시에 병렬처리 하는 장치라는 뜻이다. 그래픽 연산을 하는 과정에서는 벌텍스 데이터(Vertext Data) 나 픽셀 데이터( Pixel )에 대한 병렬 처리가 일어나게 된다..
[유니티 최적화] 앱 다운로드 크기 최적화 #8 ( Texture 최적화 2 ) Generate Mip Maps 옵션은 GPU에서 텍스쳐를 사용할때 Filtering을 하는 과정이 있는데 이때 미리 생성된 이미지를 사용해 성능을 높이는 방식이다. Mip Map은 같은 이미지를 1/2, 1/4, 1/8과 같은 작은 사이즈를 별도로 생성하게 되고 각 단계별로 Mip Map Level 이라고 표현한다.( Mip Map Level 1, Mip Map Level2 ..) Mip Maps이 생성된 텍스쳐는 필터링 성능이 향상 되게 된다. 만약 필터 모드( Bilinear 로 설정된 화면 )를 No Filter로 설정한다면 Mip Maps 을 생성할 필요가 없다. Mip Maps을 생성하면 메모리가 약 33%늘게 된다. 필터링은 텍스쳐가 텍스쳐의 해상도보다 화면에 작게 보일때 일어나는데, 예를들..
[유니티 최적화] 앱 다운로드 크기 최적화 #7 ( Texture 최적화 ) 텍스쳐(Texture) 사이즈 최적화 중요도 : 상 ( 매우 중요 ) 난이도 : 경우에 따라 다름 Texture라는 용어는 Image나 Sprite 다르게 조금 생소할 수 있는데, 컴퓨터에서 화면이 그려질때는 모든 이미지들이 GPU에서 렌더링 과정을 거쳐서 화면에 보이게 된다. 이때 GPU에서 처리하기 위한 이미지 데이터를 Texture라고 생각하면 이해하기 편하다. 즉 2D UI Sprite도 Texture 형식으로 GPU에 넘어가고, 3D 오브젝트에 맵핑되어 있는 이미지도 Texture 형식으로 GPU에 넘겨진다. 때문에 Texture에는 GPU에서 연산하기 위한 옵션들을 설정 할 수 있다. Texture 최적화는 게임 제작시 매우 중요한 부분이기 때문에 용량 외에도 고려해야 할 것이 많다. 이번 포..
[유니티 최적화] 앱 다운로드 크기 최적화 #6 ( 폰트 font 사이즈 줄이기 ) 폰트(font) 사이즈 중요도 : 상 난이도 : 중 Font 리소스의 크기는 Editor Log 상에서 Other Assets 사이즈에 포함된다. Editor Log를 확인하는 법은 아래 글 참고 https://pokaragames.tistory.com/4 [유니티 최적화] 앱 다운로드 크기 최적화 #2 ( 빌드에 포함된 리소스 크기 확인 ) 앱 크기 확인 방법 유니티에서 앱을 빌드 한 뒤 Console 창으로 이동(메뉴: Window > General > Console)하여 오른쪽 상단의 작은 드롭다운 패널을 클릭하고 Open Editor Log 를 선택하고 스크롤을 내리다 보면 pokaragames.tistory.com 폰트 파일은 .ttf 나 .otf 로 표기됨 유니티에서는 두가지 형식 모두 사용 ..
[유니티 최적화] 앱 다운로드 크기 최적화 #5 ( Audio 사이즈 줄이기 ) 사운드 리소스 최적화 중요도 : 상 난이도 : 하 사운드 리소스는 데이터의 크기가 비교적 큼. 배경음악과 이펙트 사운드로 나눌 수 있는데 배경음악은 30초 이내의 반복되는 사운드로 사용하는 것을 권장. 각 Audio Clip을 선택해서 개별적으로 세팅 할 수 있다. 옵션을 변경하고 Apply를 누르면 설정이 변경되어 Import 된다. Import Size와 Original Size의 비율이 Ratio로 표시 된다. Force To Mono 는 스테레오로 제작된 사운드를 Mono로 재생하는 옵션, 스테레오는 출력 스피커가 여러개일 경우 스피커 별로 차이를 두어 출력하는 방식이다. Normalize옵션은 스테레오 사운드가 mono로 변환 될 때 자연스럽게 정규화 시켜주는 옵션. 모바일의 경우 의미 없는 경..
[유니티 최적화] 앱 다운로드 크기 최적화 #4 ( Player Setting 설정 ) 앱 다운로드 크기에 영향을 미치는 Project Setting 옵션 정리 중요도 : 상 난이도 : 하 프로젝트 세팅창에서 Player 메뉴를 살펴보면 배포 되는 빌드 버전의 옵션들을 설정 할 수 있다. Target Arhitectures Target Achitectures 에는 빌드에 포함 되는 CPU 아키텍쳐 버전을 선택 할 수 있는데 각각 ARMv7은 ARM의 모바일 아키텍쳐( 안드로이드 32bit ) ARM64는 ARM의 모바일 아키텍쳐 ( 안드로이드 64bit ) x86는 인텔 32bit CPU 아키텍쳐 x86-64 인텔 64bit CPU 아키텍쳐 를 말한다. 당연히 체크된 아키텍쳐 수에 따라 앱 사이즈가 늘어나게 된다. 구글 플레이스토어에 배포하는 것이 목적이라면 ARM64 와 ARMv7 만 선..