본문 바로가기
자료는 자료지/외부에서 퍼온자료

ASTC_User_Guide 번역 2

by 대마왕J 2025. 12. 5.

역시 파란색으로 표시한 것은 역주입니다 

5. ASTC 알고리즘

이 가이드의 섹션에서는 ASTC(Adaptive Scalable Texture Compression) 알고리즘이 어떻게 작동하는지 설명합니다. 먼저 블록 압축 알고리즘과 색상 인코딩 프로세스에 대한 개요를 살펴본 다음, 기술적인 세부 사항을 검토합니다.

5.1 블록 압축

실시간 그래픽을 위한 압축 형식은 텍스처에서 무작위 샘플링을 빠르고 효율적으로 수행할 수 있는 능력이 필요합니다. 이는 모든 압축 형식에 두 가지 기술적 요구 사항을 부과합니다. 다음을 수행할 수 있어야 합니다.

  • 샘플 좌표만 주어지면 메모리 내 데이터의 주소를 계산할 수 있어야 합니다.
  • 주변 데이터를 너무 많이 압축 해제하지 않고 무작위 샘플을 압축 해제할 수 있어야 합니다.

ASTC를 포함한 모든 최신 실시간 형식이 사용하는 표준 솔루션은 이미지를 고정 크기 텍셀 블록으로 나누는 것입니다. 그런 다음 각 블록은 고정된 수의 출력 비트로 압축됩니다. (주:  블록주소 = (블록 인덱스) * (고정블록크기) 이기 때문에 고정 비트이면 찾기가 쉽습니다) 이 기능 덕분에 텍셀에 빠르게, 어떤 순서로든, 그리고 잘 제한된 압축 해제 비용으로 접근할 수 있습니다.

ASTC의 2D 블록 풋프린트는 4x4 텍셀부터 최대 12x12 텍셀까지 다양하며, 이들 모두는 128비트 출력 블록으로 압축됩니다. (주: 128비트면 채널당 32비트 x 4채널 = 128비트 즉 압축 안했을때의 HDR의 RGBA 한 픽셀의 크기입니다. 물론 보통은 LDR ... 8888의 32비트 텍스쳐를 쓸것이기 때문에 32비트를 쓰지만요) 128비트를 풋프린트의 텍셀 수로 나누어 최종 형식 비트 레이트를 도출합니다. 그래서 이 비트 레이트는 8 bpt (128/(4x4))에서 0.89 bpt (128/(12x12))까지 범위입니다.

5.2 색상 인코딩

ASTC는 그라데이션을 사용하여 각 텍셀의 색상 값을 할당합니다. 각 압축된 블록은 그라데이션의 끝점 색상과 각 텍셀에 대한 보간 가중치를 저장합니다. 압축 해제 중에는 각 텍셀의 색상 값이 두 끝점 색상 사이를 보간하여 생성되며, 이는 텍셀당 가중치에 기반합니다.

블록은 종종 복잡한 색상 분포를 포함합니다. 예를 들어, 빨간 공이 녹색 잔디 위에 놓여 있는 경우입니다. 이러한 시나리오에서는 단일 색상 그라데이션이 모든 다른 텍셀 색상 값을 정확하게 나타낼 수 없습니다.

ASTC는 블록이 최대 4개의 고유한 색상 그라데이션을 정의하도록 허용하며, 이를 파티션이라고 부르고 각 텍셀을 단일 파티션에 할당할 수 있습니다. 위의 예에서 우리는 빨간 공 텍셀을 위한 파티션 하나와 녹색 잔디 텍셀을 위한 파티션 하나, 총 두 개의 파티션이 필요합니다.

5.3 정수 인코딩 (Integer encoding)

처음에 텍셀당 분수 비트(주 : Fractional Bits Per Texel, bpt : 딱 떨어지는 정수 비트 - 1비트 2비트 3비트... - 가 아닌 분수 비트 -0.89 비트 등을 의미합니다. ) 라는 아이디어는 우리가 비트 숫자를 정수로 저장하는 데 너무 익숙해져 있어서 불가능하거나 비현실적으로 들릴 수 있습니다. 그러나 실제로는 그렇게 이상하지 않습니다. ASTC는 정보를 더 효율적으로 압축하기 위해 분수 비트 수로 숫자를 저장하는 BISE(Bounded Integer Sequence Encoding)라는 인코딩 기술을 사용합니다.

5.4 알파벳 저장 ( Storing alphabets ) (주: 알파벳이란 string의 의미가 아니라 데이터의 저장 개수를 의미합니다) 

텍셀당 색상 및 가중치 값이 개념적으로는 부동 소수점 값이지만, 실제 값을 직접 저장하기에는 사용 가능한 비트가 너무 적습니다. 저장 크기를 줄이기 위해 이 값들은 압축 중에 양자화되어야 합니다. 예를 들어, 0.0에서 1.0 범위의 각 텍셀에 대한 부동 소수점 가중치가 있는 경우, 다섯 가지 값, 즉 0.0, 0.25, 0.5, 0.75, 1.0으로 양자화하도록 선택할 수 있습니다. 그런 다음 이 다섯 가지 양자화된 값을 저장소에서 정수 값 0-4를 사용하여 나타낼 수 있습니다.

일반적인 경우, N 레벨로 양자화하도록 선택하면 N 기호를 포함하는 알파벳의 문자를 효율적으로 저장할 수 있어야 합니다. N 기호 알파벳은 문자당 log2(N) 비트의 정보를 포함합니다. (주: 헷갈리므로 쉽게 말하면 2진수로 표현 가능한 숫자를 말하는 겁니다)    5개의 가능한 기호로 구성된 알파벳이 있는 경우, 각 문자는 약 2.32비트의 정보를 포함하지만, 단순 이진 저장은 3비트로 반올림해야 합니다. 이는 저장 용량의 22.3%를 낭비합니다. (주: 5개의 정보를 저장하려면 2비트(4개) 로는 안되니 3비트(8개) 에 저장해야겠죠? 라는 말입니다 ) 

이 차트는 대부분의 알파벳 크기에 대해 문자당 정수 비트 수를 사용하면 많은 저장 용량을 낭비한다는 것을 보여줍니다. 효율성은 압축 형식에 매우 중요하므로 ASTC가 다루어야 했던 영역입니다.

한 가지 해결책은 양자화 레벨을 다음 2의 거듭제곱으로 반올림하여 낭비되는 대신 추가 비트를 사용하도록 하는 것입니다. 그러나 이 솔루션은 인코더가 다른 곳에서 더 큰 이점을 위해 사용될 수 있는 비트를 소비하도록 강요하므로 이미지 품질을 저하시키고 차선의 해결책입니다. (주 : 5단계인 2.32 비트는 낭비니까 그냥 3비트 다 쓰기 위해서 8단계로 저장하자.. 라는 말인데, 이러면 한정된 128비트에서 어딘가는 퀄리티를 더 줄여야 한다는 말이 되므로 낭비라는 말입니다 ) 

 

 

반응형

'자료는 자료지 > 외부에서 퍼온자료' 카테고리의 다른 글

ASTC_User_Guide 번역 4  (0) 2025.12.14
ASTC_User_Guide 번역 3  (0) 2025.12.09
[번역]양식화된 잔디 렌더링  (0) 2025.12.09
ASTC_User_Guide 번역 1  (0) 2025.10.26
눈 구조  (0) 2025.02.22

댓글