Unity에서 메시 데이터를 압축하여 크기를 줄이면 성능이 향상될 수 있습니다. Unity는 메시를 압축하는 두 가지 방법을 제공합니다. 이러한 방법은 서로 다르게 작동하며 여러 측면에서 성능에 영향을 줍니다.
동일한 프로젝트에서 두 압축 방법을 모두 사용할 수 있지만 동일한 메시에서는 사용할 수 없습니다. 메시 압축을 메시에 적용하면 Unity는 해당 메시에 버텍스 압축을 적용하지 않습니다.
참고: 버텍스 압축과 메시 압축에 대한 Unity의 기본 설정은 대부분의 프로젝트에 적합합니다. 문제가 발생했을 경우에만 해당 설정을 변경하고 결과를 평가하여 변경 사항이 유용했는지 확인해야 합니다.
버텍스 압축 설정을 사용하면 프로젝트의 모든 메시에 대해 더 낮은 정밀도 데이터 포맷을 사용할 수 있습니다. 이렇게 하려면 특정 데이터 채널에 대한 데이터 타입을 설정합니다.
주어진 채널의 데이터 타입을 FP32(Floating Point32, 32비트 부동 소수점 숫자)에서 FP16(Floating Point32, 반정밀도 부동 소수점이라고도 함)으로 변경할 수 있습니다. FP16 포맷은 FP32 숫자보다 소수점 이하 자릿수가 적은 숫자를 저장합니다. 즉 공간을 덜 차지하지만 정밀도는 약간 떨어집니다.
FP32에서 FP16으로 변환된 데이터는 메모리의 공간을 적게 차지하며 디스크의 공간도 약간 적게 차지합니다. 이 데이터는 GPU의 메모리 대역폭을 적게 사용하므로 GPU 성능이 약간 향상될 수 있습니다.
버텍스 압축 기술은 압축하기 위해 선택한 버텍스 속성의 수에 따라 달라지는 비율로 메시를 압축합니다. 노멀, 탄젠트, 컬러, UV 좌표 세 세트를 압축할 때 압축 비율은 일반적으로 약 1.45배입니다.
버텍스 압축을 사용하려면 메시가 다음 요구 사항을 충족해야 합니다.
이러한 요구 사항을 메시가 충족하지 못하면 Unity는 해당 메시에 버텍스 압축을 적용하지 않으며 메시의 모든 데이터 채널은 FP32 정밀도 숫자를 사용합니다.
버텍스 압축 설정을 변경하려면 다음 단계를 따르십시오. 1. Player settings(메뉴: Edit > Project Settings > Player)를 엽니다. 1. Other Settings 하위 메뉴를 열고 Optimization 제목으로 이동합니다. 1. Vertex Compression 드롭다운을 선택하고 해당 채널에 대한 압축을 활성화하거나 비활성화할 채널을 선택합니다. 또는 None을 선택하여 모든 채널에 대해 압축을 비활성화하거나 Everything을 선택하여 모든 채널에 대해 압축을 활성화할 수도 있습니다.
버텍스 압축은 기본적으로 Mixed로 설정되어 있으며 Unity는 드롭다운 메뉴에서 다중 선택이 액티브 상태일 때 표시합니다. 기본적으로 Unity는 다음 채널에 버텍스 압축을 사용합니다.
대부분의 경우 이러한 설정 조합은 메시의 형상을 크게 변경하지 않고도 저장된 메모리를 적절하게 혼합하기 때문에 Unity는 기본적으로 이러한 채널을 압축합니다. 그 외 다른 설정인 Position과 Tex Coord 1은 기본적으로 압축하지 않습니다. 이 설정은 메시의 형상에 영향을 줄 가능성이 높으며 메모리 사용량이 크게 줄어들지 않기 때문입니다. Position과 Tex Coord 1 채널에 대해 버텍스 압축을 활성화하려면 설정을 테스트하여 메시에 아티팩트가 발생하지 않도록 해야 합니다.
메시 압축 설정을 사용하여 디스크에 제공된 모델 에셋에 대한 메시 데이터를 압축할 수 있습니다. 메시 압축 알고리즘은 버텍스 압축 기술보다 더 공격적이기 때문에 압축비가 높고 파일 크기가 더 작아집니다. 그러나 더 많은 단점이 존재합니다.
이 설정을 적용하면 Unity는 알고리즘을 사용하여 각 압축 채널의 명시적 값을 최대값과 최소값 사이의 범위로 바꿉니다. 여기서 고정 비트 수는 각 값이 해당 범위에 속하는 위치를 나타냅니다. 이렇게 하면 디스크의 메시 데이터 크기가 줄어듭니다. Unity는 메시를 메모리에 로드할 때 압축된 데이터를 풀어서 해당 범위를 원래 값으로 다시 변환합니다. 그 후에는 성능에 영향을 미치지 않습니다.
이 기술은 최종 빌드 크기 또는 메시가 최대로 존재할 수 있는 에셋 번들의 크기를 줄여야 하거나 런타임 압축 풀기로 인한 성능 저하가 허용되는 경우에 유용할 수 있습니다.
런타임 시 메시 압축 풀기는 추가 CPU 리소스를 사용합니다. 즉 메시 데이터를 로드하는 시간이 더 오래 걸립니다. Unity는 또한 메시 압축을 풀 때 더 많은 임시 메모리를 사용합니다.
또한 압축비가 상대적으로 높기 때문에 Unity가 메시 압축을 해제할 때 원하지 않는 아티팩트가 나타날 수 있습니다. 아티팩트를 방지하려면 압축할 메시에 대해 각 옵션을 테스트하고 올바르게 나타나는지 확인해야 합니다.
메시 압축 설정을 사용하려면 다음 단계를 따르십시오.
사용할 수 있는 값은 High, Medium, Low, Off가 있습니다. 다음 표에서는 각각의 해당 설정에 대한 일반적인 압축비를 보여줍니다.
값 | Vertices | Normals | Tangents | UVs | Color |
---|---|---|---|---|---|
Off | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
Low | 1.6 | 4.6 | 4.4 | 2.0 | 1.0 |
Medium | 2.0 | 5.6 | 5.3 | 3.2 | 1.3 |
High | 3.2 | 7.4 | 6.7 | 4.0 | 2.0 |
메시 압축 기술의 압축비
참고: “Color” 열은 UNorm8 포맷을 사용하는 메시의 비율을 보여줍니다. 버텍스 컬러에 FP32 포맷을 사용하는 메시의 경우 비율은 Low 설정에서 4.0, Medium 설정에서 5.3, High 설정에서 8.0입니다.