다음 권장사항을 따라 Android 게임에서 텍스처의 모양과 성능을 최적화하세요.
텍스처는 3D 아트의 핵심 요소입니다. 많은 기기에서 원활하게 실행되는 3D 게임은 그래픽 프로세서를 활용할 수 있도록 디자인된 3D 아트에서 시작됩니다. 이 가이드에서는 게임의 성능을 개선하고 높은 시각적 품질을 유지하면서 전력 소모를 최소화하기 위한 모바일에서의 텍스처 최적화 및 권장사항을 중점적으로 설명합니다.
이 도움말의 일부는 Arm Limited에서 제공해 준 저작권 보호를 받는 내용을 기반으로 합니다.
텍스처 아틀라스 만들기
텍스처 아틀라스는 3D 메시나 2D 스프라이트 등 여러 그래픽 객체의 이미지 데이터가 포함되도록 설계된 텍스처입니다. 각 객체에 자체 텍스처가 있는 대신 아틀라스 텍스처를 사용하여 각 객체의 이미지를 결합합니다.
게임 프레임의 그리기 호출 수를 최소화하는 것이 최적의 렌더링 성능을 달성하는 데 중요한 요소입니다. 다양한 객체에 같은 텍스처를 사용하는 것은 단일 그리기 호출로 객체를 결합하는 한 가지 요소입니다. 그리기 호출을 줄이는 것은 CPU에 귀속된 게임에 특히 중요합니다. 각 그리기 호출이 그래픽 드라이버에서 처리될 때 CPU 오버헤드가 발생하기 때문입니다. 텍스처 아틀라스는 게임의 런타임 데이터에서 텍스처 애셋 파일의 수도 줄입니다. 텍스처 수백 개 또는 수천 개까지도 훨씬 적은 수의 텍스처 아틀라스 파일로 통합할 수 있습니다.
3D 메시를 만들 때 텍스처 아틀라스 레이아웃을 계획해야 합니다. 메시 애셋을 만들기 전에 아틀라스를 작성하면 메시 애셋은 텍스처 아틀라스를 따라 UV 래핑 해제되어야 합니다. 만든 후 아틀라스를 작성하면 페인팅 소프트웨어의 병합 또는 아틀라스 제작 도구를 사용하여 UV 섬이 텍스처에 따라 재정렬되어야 합니다.
엔진별 그리기 호출 일괄 처리
Unity 게임 엔진에는 자동으로 객체를 결합할 수 있는 그리기 호출 일괄 처리 기능이 있습니다. 자동 일괄 처리를 사용하려면 객체가 텍스처를 비롯한 공통 머티리얼을 공유하고 정적으로 표시되어야 합니다.
Unreal Engine 4에는 일괄 처리를 위한 수동 설정이 필요합니다. 3D 소프트웨어에서 객체를 병합한 후 Unreal로 가져올 수 있습니다. Unreal에는 메시를 결합하고 텍스처 아틀라스 파일을 만들 수 있는 UE4 Actor Merging 도구도 포함되어 있습니다.
밉맵 생성
밉맵은 텍스처의 저해상도 버전입니다. 주어진 텍스처의 밉맵 모음을 밉맵 체인이라고 합니다. 체인에서 각 후속 밉맵 수준은 이전 수준보다 낮은 해상도입니다. 밉맵은 렌더링 중에 텍스처 LOD(세부 수준)를 구현하는 데 사용됩니다. 밉매핑된 텍스처가 텍스처 스테이지에 바인딩된 경우 그래픽 하드웨어는 프래그먼트가 차지하는 텍스처 공간을 사용하여 밉맵 체인에서 수준을 선택합니다. 3D 장면을 렌더링할 때 카메라에서 더 멀리 있는 객체는 카메라에 가까운 같은 객체보다 낮은 해상도 밉맵을 사용합니다.
밉매핑된 텍스처는 밉매핑되지 않은 텍스처에 비해 메모리를 더 많이 사용합니다. 추가 밉맵 수준은 텍스처의 메모리 사용량을 33% 늘립니다. 텍스처가 카메라에서 고정된 거리에 그려지면 밉맵 생성은 메모리를 불필요하게 사용하는 것입니다.
밉맵을 올바르게 사용하면 GPU 성능이 향상됩니다. 해상도가 낮은 밉맵 수준을 사용할 수 있으면 메모리 대역폭 사용량이 줄고 텍스처 캐시 상주성이 향상됩니다.
밉매핑은 텍스처 앨리어싱을 줄여 시각적 품질을 개선할 수도 있습니다. 텍스처 앨리어싱은 카메라에서 멀리 있는 영역에서 깜박거리는 효과로 관찰될 수 있습니다.
엔진별 밉맵 세부
Unreal Engine 4에서 밉매핑을 사용하려면 2의 거듭제곱인 텍스처 크기(예: 512x1024, 128x128)가 필요합니다. 밉맵 체인은 텍스처 크기 중 하나 또는 둘 모두가 2의 거듭제곱이 아닌 경우 생성되지 않습니다.
Unity 엔진은 밉맵을 만들기 위해 2의 거듭제곱이 아닌 크기의 텍스처를 자동으로 확장합니다. 이러한 확장을 방지하려면 소스 텍스처 파일의 크기가 2의 거듭제곱이어야 합니다.
적절한 텍스처 필터링 모드 선택
텍스처 필터링은 렌더링된 삼각형의 시각적 모양에 영향을 미치는 하드웨어 렌더링 기능입니다. 텍스처 필터링을 적절하게 사용하면 장면의 시각적 품질을 개선할 수 있습니다. 텍스처 필터링 모드는 여러 개가 있으며 각각 렌더링 개선과 비용 간의 균형이 다릅니다. 비용에는 계산 시간과 메모리 대역폭이 모두 포함됩니다. 일반적으로 사용할 수 있는 텍스처 필터링 모드 세 가지는 가장 가까운 거리(또는 점), 이중 선형, 삼중 선형입니다. 비등방성은 이중 선형이나 삼중 선형 필터링과 결합될 수 있는 추가 텍스처 필터링 메서드입니다.
가장 가까운 거리
가장 가까운 거리는 가장 간단하고 비용이 적게 드는 텍스처 필터링 모드입니다. 가장 가까운 거리는 소스 텍스처에서 지정된 좌표를 사용하여 단일 텍셀을 샘플링합니다. 가장 가까운 거리로 렌더링된 삼각형은 특히 카메라 가까이에서 렌더링될 때 고르지 않거나 모자이크되어 표시됩니다.
이중 선형
이중 선형 필터링은 소스 텍스처에서 지정된 좌표를 둘러싸는 텍셀 네 개를 샘플링합니다. 이 텍셀 네 개를 평균하여 프래그먼트의 텍스처 색상을 결정합니다. 이중 선형 필터링을 통해 픽셀 간에 그라데이션이 더 부드러워져 가장 가까운 거리 필터링의 고르지 않은 모양을 피할 수 있습니다. 카메라에 가깝게 렌더링된 삼각형은 모자이크되는 대신 흐릿하게 표시됩니다. 이중 선형은 가장 가까운 거리보다 비용이 더 많이 드는데 추가 텍셀 샘플과 평균화 때문입니다.
삼중 선형
카메라로부터 꼭짓점 거리가 다양한 메시를 렌더링할 때 렌더링하는 동안 여러 밉맵 수준이 선택될 수 있습니다. 두 밉맵 수준 간의 변경으로 인해 전환 지점에서 눈에 띄는 선명한 절단이 발생할 수 있습니다. 삼중 선형 필터링은 두 가지 밉맵 수준에서 이중 선형 필터링을 실행하고 결과를 보간하여 이러한 전환을 부드럽게 합니다. 여러 밉맵 수준과 보간 사용으로 인해 삼중 선형은 이중 선형보다 계산 비용이 더 많이 듭니다.
비등방성
비등방성 필터링은 카메라를 기준으로 극단적인 각도에서 렌더링되는 텍스처 메시의 시각적 품질을 높입니다. 이러한 종류의 메시의 일반적인 예로는 기준 평면이 있습니다. 비등방성 필터링에서는 밉매핑된 텍스처가 작동해야 합니다. 렌더링 중에 적용되는 비등방성 필터링의 비율이나 수준을 구성할 수 있습니다. 비등방성 필터링 비용은 수준이 높아지면 증가합니다.
모드 선택 전략
일반적으로 이중 선형 필터링이 성능과 시각적 품질 사이에서 최적의 균형을 이룹니다. 삼중 선형 필터링은 메모리 대역폭이 훨씬 더 많이 필요하므로 선택적으로 사용해야 합니다. 대부분의 경우 2배 비등방성 필터링과 결합된 이중 선형 필터링은 1배 비등방성 필터링과 결합된 삼중 선형 필터링보다 모양과 성능이 더 뛰어납니다. 비등방성 수준을 2배 이상으로 늘리는 것은 비용이 상당히 많이 들므로 중요한 게임 애셋에만 매우 선별적으로 실행해야 합니다.
텍스처 필터링은 총 GPU 에너지 소비의 최대 절반을 차지할 수 있어 가능하면 더 간단한 텍스처 필터를 선택하는 것이 게임의 전력 수요를 줄이는 훌륭한 방법입니다.
텍스처 크기 최적화
원하는 이미지 품질을 달성하면서도 텍스처 크기는 가능한 한 작아야 합니다. 텍스처 애셋을 검토하여 잘못된 큰 텍스처가 있는지 확인합니다. 이 원칙은 개별 및 아틀라스 텍스처에 모두 적용됩니다. 게임에서 다양한 해상도와 성능 기능을 포함하는 여러 기기를 지원한다면 적절한 기기 클래스에 저해상도 및 고해상도 버전의 텍스처 애셋을 만드는 것이 좋습니다.
머티리얼에 여러 텍스처를 사용하는 메시를 렌더링할 때는 일부 텍스처의 해상도를 선택적으로 줄이는 것이 좋습니다. 예를 들어 1024x1024 디퓨즈 텍스처를 사용하는 경우 이미지 품질에 미치는 영향을 최소화하면서 거칠기 또는 금속성 맵 텍스처를 512x512로 줄이는 것이 가능할 수 있습니다. 원하는 품질 수준을 손상시키지 않도록 이러한 모든 크기 조절 실험의 영향을 확인합니다.
적절한 색공간 사용
텍스처 제작에 사용되는 많은 소프트웨어 패키지는 sRGB 색공간에서 작동하고 이를 사용하여 내보내집니다. 색상으로 처리되는 디퓨즈 텍스처는 sRGB 색공간을 사용할 수 있습니다. 금속성 맵이나 거칠기 맵, 일반 맵과 같이 색상으로 처리되지 않는 텍스처는 sRGB 색공간으로 내보내면 안 됩니다.
게임 엔진 텍스처 설정에는 텍스처에 sRGB 색공간을 사용할지에 관한 매개변수가 포함됩니다.
이러한 텍스처의 픽셀 데이터는 색상 데이터로 사용되지 않으므로 sRGB 색공간을 사용하면 잘못된 시각적 요소가 생성됩니다.
텍스처 압축 사용
텍스처 압축은 압축되지 않은 픽셀 데이터에 적용되는 이미지 압축 알고리즘으로, 렌더링 중에 그래픽 하드웨어에서 빠르게 압축 해제할 수 있는 텍스처를 생성합니다. 텍스처 압축을 효과적으로 사용하면 메모리 사용량이 줄고 시각적 품질에 미치는 영향을 최소화하면서 성능을 높일 수 있습니다. Android에서 가장 일반적인 텍스처 압축 알고리즘 세 가지는 ETC1, ETC2, ASTC입니다. 최신 게임의 경우 ASTC가 일반적으로 가장 좋은 기본 옵션이고 게임에서 ASTC를 지원하지 않는 기기를 타겟팅한다면 ETC2가 대체 옵션입니다.
ETC1
ETC1은 모든 Android 기기에서 지원됩니다. ETC1은 RGB 색상 데이터의 픽셀당 단일 4비트 모드만 지원합니다. ETC1은 알파 채널을 지원하지 않습니다. ETC1을 지원하는 여러 게임 엔진을 통해 두 번째 ETC1 텍스처를 지정하여 알파 채널 데이터를 나타내는 데 사용할 수 있습니다.
ETC2
ETC2는 활성 Android 기기 90% 이상에서 지원됩니다. OpenGL ES 3.0 API를 지원하지 않는 매우 오래된 기기는 ETC2를 사용할 수 없습니다. ETC1과 비교하여 ETC2에 추가된 사항은 다음과 같습니다.
- 알파 채널 지원, 8비트 및 단일 비트 '펀치 스루' 모두
- RGB 및 RGBA 텍스처의 sRGB 버전
- 1 및 2 채널, R11 및 RG11, 텍스처
ASTC
ASTC는 활성 Android 기기 75% 이상에서 지원됩니다. ASTC에는 구성 가능한 압축 블록 크기가 있어 주어진 텍스처의 이미지 품질 대비 압축비의 균형을 세밀하게 제어할 수 있습니다. ASTC는 ETC2와 같은 메모리 크기에서 월등한 품질을 달성하거나 ETC2보다 작은 메모리 크기에서 유사한 양을 달성할 수 있는 경우가 많습니다.
텍스처 압축 속도
텍스처 압축은 게임에 텍스처가 많다면 시간이 오래 걸릴 수 있습니다. ETC와 ASTC에는 모두 선택 가능한 압축 품질 설정이 있습니다. 품질을 높게 설정하면 압축하는 데 시간이 더 필요합니다. 개발 중에는 품질 수준을 낮춰 압축 시간을 줄이고 중요한 빌드를 만들기 전에 품질 수준을 높이는 것이 좋습니다.
게임 엔진의 텍스처 압축
게임 엔진을 사용한다면 프로젝트 수준에서 텍스처 압축 형식(ETC 또는 ASTC)을 선택해야 할 수 있습니다. 호환성 극대화를 위해 여러 압축 형식을 지원하려면 추가 작업이 필요할 수 있습니다. Google Play Asset Delivery의 텍스처 압축 형식 타겟팅 기능은 게임에 여러 형식을 포함하고 설치 시 개별 기기에 가장 적합한 형식만 제공하는 데 도움이 될 수 있습니다.
UV 래핑 해제
UV 섬을 최대한 직선으로 유지하세요. 그러면 다음과 같은 방법으로 텍스처에 도움이 됩니다.
- UV 섬 패킹이 더 쉬어져 낭비되는 공간이 줄어듭니다.
- 직선 UV는 텍스처의 '계단 효과'를 줄입니다.
- 좋은 UV 패킹을 통해 텍스처에서 최적의 해상도를 가져올 수 있습니다.
- UV가 직선화로 인해 약간 왜곡되더라도 텍스처 품질이 개선됩니다.
모델에 텍스처 솔기가 보이는 것이 좋지 않습니다. UV 솔기를 잘 보이지 않는 곳에 배치해 보세요. 더 나은 일반 맵을 만들 수 있도록 가장자리가 선명한 UV 섬을 분할하고 섬 주위에 공간을 남겨둡니다.
인식할 수 없는 세부 장식 방지
아트를 만들 때는 특히 화면이 작은 기기용으로 제작된 게임에서 보이지 않는 세부 장식을 추가하지 마세요. 복잡하게 자세한 4096x4096 텍스처를 만들어도 방구석에서 거의 보이지 않는 작은 의자 모델에 낭비됩니다. 때에 따라 도형 인식 개선을 위해 가장자리(하이라이트 추가)와 음영을 과장해야 할 수 있습니다.
세부 장식 베이킹
휴대기기는 개인용 컴퓨터나 게임 콘솔보다 화면이 작고 그래픽 하드웨어 성능이 떨어집니다. 런타임에 앰비언트 오클루전이나 반사 하이라이트와 같은 효과를 계산하는 대신 가능하면 디퓨즈 텍스처에 '베이킹'하는 것이 좋습니다. 이렇게 하면 성능이 개선되고 세부 장식도 잘 보이게 됩니다.
색상 색조 조정 사용
맞춤 셰이더를 만들 수 있고 유사하거나 동일한 색 구성표가 있는 메시가 있다면 관련 메시에 색상 색조 조정을 사용하는 것이 좋습니다. 색상 색조 조정에서는 그레이 스케일 텍스처가 사용되는데 이는 RGB 텍스처보다 텍스처 메모리 사용량이 더 적습니다. 셰이더에서 꼭짓점별 색상 데이터를 적용하여 메시에 색을 입힙니다. 또 다른 색조 조정 메서드는 RGB 마스크를 사용하고 마스크의 색상 범위에 따라 텍스처를 적용하는 것입니다.
텍스처 채널 패킹
여러 텍스처가 있는 머티리얼을 렌더링할 때는 단색 채널만 사용하는 텍스처를 세 가지 색상 채널을 모두 사용하는 단일 텍스처로 결합할 기회를 찾아보세요. 이렇게 하면 메모리 사용량이 줄고 프래그먼트 셰이더에서 실행하는 텍스처 샘플러 작업 수가 줍니다.
패킹할 때 녹색 채널에 가장 자세한 데이터를 할당합니다. 사람의 눈은 녹색에 더 민감하므로 그래픽 하드웨어에서는 일반적으로 녹색 채널에 더 많은 비트를 할당합니다. 예를 들어 거칠기/부드러움 맵은 일반적으로 금속성 맵보다 세부적이며 녹색 채널에 할당하는 것이 더 좋습니다.
알파 채널을 사용하는 머티리얼의 경우 패킹된 텍스처에 채널 두 개만 사용한다면 알파 채널 데이터를 디퓨즈 텍스처가 아닌 패킹된 텍스처에 배치하는 것이 좋습니다. 이렇게 하면 디퓨즈 텍스처의 형식에 따라 크기를 줄이거나 알파 채널 데이터를 생략하여 시각적 품질을 높일 수 있습니다.
패킹된 텍스처는 sRGB가 아닌 선형 RGB 색공간으로 설정해야 합니다.
일반 맵 만들기
일반 매핑은 3D 모델에 추가 도형을 사용하지 않고 세부 모양을 제공하는 기법입니다. 모델링하는 데 많은 삼각형이 필요할 수 있는 주름이나 볼트와 같은 지형지물은 일반 맵을 사용하여 시뮬레이션할 수 있습니다. 일반 매핑은 게임의 아트 스타일과 방향에 따라 적절할 수도 있고 적절하지 않을 수도 있습니다.
일반 맵은 성능 비용이 발생하므로 저성능 기기에서는 사용을 자제해야 합니다. 일반 맵에는 텍스처가 추가로 필요하므로 추가 텍스처 샘플링과 프래그먼트 셰이더 계산이 발생합니다.
일반 맵 권장사항
다음은 일반 맵 만들기 권장사항입니다.
케이지 사용
케이지는 로우 폴리곤 모델의 더 큰(또는 바깥쪽으로 밀어낸) 버전입니다. 일반 맵 베이킹 중에 잘 작동하려면 하이 폴리곤 모델을 포함해야 합니다. 케이지는 일반 맵 베이킹 중에 레이캐스트 거리를 제한하는 데 사용되고 일반 맵에서 분할된 일반 솔기 문제를 방지하는 데 도움이 됩니다.
메시 이름으로 매칭 베이킹
베이킹 소프트웨어에서 지원하는 경우 메시 이름으로 매칭을 베이킹합니다. 이 기능은 잘못된 일반 맵 프로젝션 문제를 줄입니다. 객체가 서로 너무 가까이 있으면 예기치 않게 일반 맵이 잘못된 표면에 프로젝션될 수 있습니다. 메시 이름으로 매칭하면 베이킹이 올바른 표면에서만 실행됩니다. Substance Painter의 이 기능에 관한 자세한 내용은 이 페이지를 참고하세요. Marmoset Toolbag의 이 기능에 관한 자세한 내용은 이 페이지를 참고하세요.
메시 분해
베이킹할 때 메시 이름으로 매칭할 수 없다면 메시를 분해하는 것이 좋습니다. 메시를 분해하면 부품이 서로 멀어지므로 일반 맵이 잘못된 표면에 프로젝션되지 않습니다. 앰비언트 오클루전도 베이킹하는 경우 분해되지 않은 메시를 사용하여 별도로 베이킹해야 할 수 있습니다.
솔기 최소화
단단한 가장자리의 연속 UV는 솔기를 보이게 하고 단단한 가장자리의 분할된 UV는 이 효과를 최소화합니다. 스무딩 그룹을 설정할 때 일반적으로 각도를 90도 미만으로 유지합니다. UV 솔기에는 삼각형에 관한 다른 스무딩 그룹이 있어야 합니다.