적응형 스케일러블 텍스처 압축

**적응형 스케일러블 텍스처 압축**(Adaptive scalable texture compression, **ASTC**)은 ARM과 AMD의 요른 니스타드(Jørn Nystad) 등이 개발한 손실 블록 기반의 텍스처 압축 알고리즘이다.title=Adaptive Scalable Texture Compression (ASTC) technology developed by ARM and AMD ASTC의 전체적인 세부 사항은 하이 퍼포먼스 그래픽스 2012(High Performance Graphics 2012) 컨퍼런스에서 올슨(Olson) 등이 "Adaptive Scalable Texture Compression"이라는 제목의 논문에서 처음 공개되었다.accessdate=2012-06-27 ASTC는 2012년 8월 6일 크로노스 그룹에 의해 OpenGL과 OpenGL ES의 공식 확장 기능으로 채택되었다.accessdate=2012-08-06
# 하드웨어 지원
{| class="wikitable" |- ! 벤더/제품 !! 프로필 !! 세대 |- | AMD 라데온 || || ? |- |rowspan="2"| 애플 GPU ||| LDR 전용 || A8 ~ A12publisher=Apple Inc |- || 전체 || A13 이후 |- | ARM 말리 ||| 전체 || Mali-T620/T720/T820 이후publisher=ARM 리미티드url=https://developer.arm.com/-/media/Arm%20Developer%20Community/PDF/Mali%20GPU%20datasheet/Arm%20Mali%20GPU%20Datasheet%202021.pdf?revision=d3378de8-806b-4920-897c-e295509847b3 |- | 이미지네이션 파워VR ||| 전체 || Series6XT 이후publisher=Imagination Technologiesurl=https://www.imaginationtech.com/news/press-release/imaginations-new-generation-powervr-series6xt-architecture-delivers-up-to-50-higher-performance-and-advanced-power-management/ |- | 인텔 GPU ||| 전체accessdate=2021-08-31 || 스카이레이크부터title=Graphics API Developer's Guide For 6th Generation Intel Core Processors ; 아크/Gen12.5에서 제거됨website=Phoronix |- | Nvidia 테그라 || ? || 케플러 이후title=Vulkan API |- | 퀄컴 아드레노 ||| 전체 || 4xx 시리즈 이후 LDR,publisher=Qualcomm 안드로이드 13에서는 최소 7xx 시리즈가 GL_KHR_texture_compression_astc_hdr 확장을 지원한다 |} 리눅스에서는 모든 Gallium 3D 드라이버에 2018년부터 소프트웨어 대체 기능이 있어, 모든 AMD 라데온 GPU에서 ASTC를 사용할 수 있다.accessdate=2022-09-01
# 개요
압축 전 예시 이미지압축 후 8, 3.56, 2bpp의 예시 이미지 세부 사항압축 방식은 컬러 셀 압축의 진화형으로, 여러 개의 밀접하게 분포된 소수 비트레이트, 다양한 색상 형식, 고동적 범위(HDR) 텍스처 지원, 실제 3D 텍스처 지원 등의 특징을 포함한다. ASTC의 주요 설계 목표는 콘텐츠 개발자가 모든 손실 압축 방식에 내재된 공간/품질 절충에 대해 더 잘 제어할 수 있도록 하는 것이다. ASTC를 사용하면 인접 비트레이트 간의 비율이 약 25%이므로 특정 텍스처의 품질을 높이는 데 드는 비용이 저렴하다. 다양한 에셋을 인코딩하려면 종종 다른 색상 형식이 필요하다. ASTC는 루미넌스 전용, 루미넌스-알파, RGB, RGBA 및 표면 노멀에 최적화된 모드를 포함하여 다양한 입력 형식을 허용한다. 따라서 설계자는 여러 가지 다른 압축 방식을 지원할 필요 없이 최적의 형식을 선택할 수 있다. 비트레이트와 색상 형식의 선택은 서로를 제약하지 않으므로, 많은 조합 중에서 선택할 수 있다. 이러한 유연성에도 불구하고, ASTC는 2 및 3.56 비트/텍셀에서 측정할 때 PVRTC, S3TC, 그리고 ETC2보다 더 나은 최대 신호 대 잡음비를 달성한다. HDR 텍스처의 경우, 텍셀당 8비트에서 BC6H와 유사한 결과를 생성한다.
# 지원되는 색상 형식
ASTC는 1채널에서 4채널까지 지원한다. 2~4채널 모드에서는 채널 중 하나를 "비상관"으로 처리하고 예측을 위해 별도의 기울기를 부여할 수 있다. 어떤 경우든, 데이터는 RGBA로 디코딩된다.website=registry.khronos.org {| class="wikitable" |- |- | 1 || L || 루미넌스 전용: 디코딩된 버퍼에서 RGB가 동일한 값으로 설정되고 알파는 1로 설정됨 |- | 2 || LA || 투명도가 있는 루미넌스 |- | 2 || L+A || 비상관 투명도가 있는 루미넌스 |- | 3 || RGB || 전체 색상, 알파는 1로 설정됨 |- | 3 || RG+B || 비상관 블루가 있는 전체 색상 (실제 색상 목적에는 사용되지 않음) |- | 4 || RGBA || 투명도가 있는 전체 색상 |- | 4 || RGB+A || 비상관 투명도가 있는 전체 색상 |} 이들 각각은 저동적 범위 또는 고동적 범위로 인코딩될 수 있다. 인코더는 이미지의 각 블록에 대해 색상 형식을 독립적으로 선택한다. 실제로 ASTC는 색상 이외의 데이터를 표현하는 데 사용될 수 있다. 예를 들어, L+A 형식은 비상관 구성 요소가 있는 노멀 맵인 "X+Y"를 표현하는 데 사용될 수 있으며, "RG+B" 형식은 XY+Z를 표현하는 데 사용될 수 있다.date=6 August 2012 ARM에서 제공하는 astc-encoder 소프트웨어는 -normal 옵션으로 "X+Y" 생성을 지원한다. 셰이더는 디코딩된 출력을 swizzled texture로 처리해야 한다.quote=The best way to store normal maps using ASTC is similar to the scheme used by BC5; store the X and Y components of a unit-length normal. The Z component of the normal can be reconstructed in shader code based on the knowledge that the vector is unit length. To encode this we need to store only two input components in the compressed data, and therefore use the rrrg coding swizzle to align the data with the ASTC luminance+alpha endpoint.
# 2D 블록 풋프린트와 비트레이트
ASTC 텍스처는 128비트의 고정 블록 크기를 사용하여 압축되지만, 4×4 텍셀에서 12×12 텍셀에 이르는 가변 블록 풋프린트를 사용한다. 따라서 사용 가능한 비트레이트는 텍셀당 8비트에서 0.89비트까지 미세한 단계로 변화한다. {| class="wikitable" |- |- | 4×4 || 8.00 || 25% |- | 5×4 || 6.40 || 25% |- | 5×5 || 5.12 || 20% |- | 6×5 || 4.27 || 20% |- | 6×6 || 3.56 || 14% |- | 8×5 || 3.20 || 20% |- | 8×6 || 2.67 || 5% |- | 10×5 || 2.56 || 20% |- | 10×6 || 2.13 || 7% |- | 8×8 || 2.00 || 25% |- | 10×8 || 1.60 || 25% |- | 10×10 || 1.28 || 20% |- | 12×10 || 1.07 || 20% |- | 12×12 || 0.89 || |} 위 표에서 "증가율" 열은 다음으로 작은 비트레이트에 비해 이 비트레이트를 사용하여 텍스처를 저장하는 데 필요한 추가 저장 공간을 보여준다. 블록 풋프린트는 너비 × 높이로 표시된다.
# 3D 블록 풋프린트와 비트레이트
ASTC 3D 텍스처는 2D와 마찬가지로 128비트의 고정 블록 크기를 사용하여 압축되지만, 3×3×3 텍셀에서 6×6×6 텍셀에 이르는 가변 블록 풋프린트를 사용한다. 따라서 사용 가능한 비트레이트는 텍셀당 4.74비트에서 0.59비트까지 미세한 단계로 변화한다. {| class="wikitable" |- |- | 3×3×3 || 4.74 || 33% |- | 4×3×3 || 3.56 || 33% |- | 4×4×3 || 2.67 || 33% |- | 4×4×4 || 2.00 || 25% |- | 5×4×4 || 1.60 || 25% |- | 5×5×4 || 1.28 || 25% |- | 5×5×5 || 1.02 || 20% |- | 6×5×5 || 0.85 || 20% |- | 6×6×5 || 0.71 || 20% |- | 6×6×6 || 0.59 || |} 블록 풋프린트는 너비 × 높이 × 깊이로 표시된다.
# 유니버설 ASTC
UASTC(Universal ASTC)는 Binomial이 지정한 ASTC의 하위 집합이다. 이 형식은 자사의 Basis Universal "초압축" GPU 텍스처 형식에 사용되며, UASTC 및 ETC1S와 같은 압축된 텍스처 형식에 추가 압축을 더하고 UASTC/ETC1S에서 GPU에서 직접 사용할 수 있는 압축된 텍스처 형식으로 효율적인 변환을 허용한다.language=en UASTC는 Basis Universal의 일부로 KTX(Khronos Texture) 파일 형식의 일부이다.date=16 April 2021