그래픽 최적화 남은 부분을 더 배우고, 실습 프로젝트의 맵을 꾸미는 시간을 가졌다.
조형물 오브젝트들을 넣고, 라이트가 적용되니 게임의 느낌이 확 달라져서 그 중요성을 새삼 체감했다.
회사에 들어간다면 아트 담당이 맡을 작업일 수도 있겠지만, 개별 프로젝트에서는 전부 팀원끼리 해야하는 만큼 잘 알아둬야겠다.
그래픽 최적화
해상도 변경
Edit > Project Settings > Player > Android > Resolution and Presentation에서 변경 가능하다.
Resolution Scaling Mode
- Disabled: 해상도 스케일링 안 함 (기본값)
- Fixed DPI: 원하는 DPI를 고정값으로 설정
- Custom: 코드로 동적 제어
Target DPI (Resolution Scaling Mode를 Fixed DPI로 설정한 경우에만 활성화됨)
- 예: 240, 320, 480 등
- 값이 낮을수록 해상도는 낮아지고 성능은 높아짐
텍스쳐 압축
PSD, PNG, JPEG 포맷은 GPU와 호환되는 형식으로 다시 압축된다.
- 모바일에서는 사이즈를 2048 넘지 않도록 한다.
- 압축을 위해 2의 n승 크기로 설정한다.
- Atlas 기능을 이용해 Sprite는 묶어서 사용한다.
Mesh 설정
완성된 3D Model의 폴리곤 수를 줄이고 싶은 경우, 인스펙터의 Mesh Comprression을 줄이면 메시를 압축할 수 있다.
- Compress the mesh
- Disable Read/Write 비활성화
- Disable rigs and
- Disable rigs and BlendShapes : Rigging Blender Shape 사용하지 않을 경우 끄기
- Disable normals and tangents, if possible : 빠르게 움직이는 오브젝트의 경우 normal, tangent 비활성화
- Optimize Mesh : 활성화 추천
Scale
3D 모델의 스케일을 변경하면 물리 연산에 영향을 주기 때문에 (1, 1, 1)로 설정해야 한다.
스케일을 조절해야 한다면 Model의 Scale Factor 값을 조절한다.
V Sync
Vertical Synchronization이라는 뜻으로, GPU의 화면 갱신 주기를 모니터의 수직 리프레시 주기에 맞춰 동기화하는 설정이다.
설정하지 않을 경우 GPU가 화면을 출력하는 도중 다음 화면을 갱신하는 과정에서 동기화가 이루어지지 않아 화면이 찢어진 듯한 현상이 나타난다. 모바일은 OS가 자동 동기화하기 때문에 항상 V Sync 상태이다.
Project Settings > Quality에서 Count 설정 가능하다.
- Don't Sync(끄기)
- Every V Blank(매번 동기화)
- Every Second V Blank(두 번째 V Blank마다 동기화)
Anisotropic 필터링
사물을 비스듬하게 봤을 때 텍스쳐의 품질을 향상시키는 기능이다.
Sparse Texturing
대형 텍스쳐를 GPU 메모리에 전부 올리지 않고 필요한 부분만 불러와 사용하는 최적화 기법이다.
Project Settiing > Player > Other Settings > Virtual Texturing을 통해 사용할 수 있지만, 아직 실험적인 기능이다.
Procedural Material
텍스쳐를 이미지가 아닌 수학적 절차로 생성한다.

맵 꾸미기 실습
맵에 구조물들을 더 배치하고, 스카이박스를 설정하고, 라이트 베이킹을 하는 등 맵을 꾸미는 실습을 진행하였다.

팀 프로젝트 회고
아이템 스폰 위치를 다양하게 하기 위한 작업을 진행하였다.
현재 땅파기의 경우 Dig 시 변경되는 복셀 좌표값을 알아낼 수 있지만, Digger 에셋을 사용하게되면 그 내부에서 일어나는 정보들을 외부에서 알 수 있는 방법이 없기 때문에 Dig 전후로 지형 정보를 스캔해서 아이템 스폰 위치를 결정하는 식으로 하려고 한다.
1. 아이템 드랍율에 따라 아이템 드랍할 지 결정
2. (드랍한다면) 사전 정보 스캔
3. 땅파기 로직 실행
4. (드랍한다면) 사후 정보 스캔 및 아이템 스폰
5. 근처 청크의 아이템 물리 적용 체크
정보를 스캔하는 방법은 DigRadius + Margin 사이즈를 일정 간격에 맞춰 땅인지, 공기인지를 체크하는 식이다.
아이템을 이 위치에 스폰한다면 조건에 만족하는 지 확인해서 스폰 위치를 결정할 것이다.
하지만 조건 확인하는 부분은 완전 탐색으로 하게 되면 비효율적일 것 같아서 어떤 방법이 있을지 고민 중이다.