알파 합성

Alpha compositing
컬러 스펙트럼 이미지의 알파 채널은 바닥에서 0으로 떨어지며 배경색과 혼합됩니다.

컴퓨터 그래픽에서 알파 합성 또는 알파 블렌딩은 하나의 이미지를 배경과 결합하여 부분 또는 전체 투명도의 모양을 만드는 과정입니다.[1] 그림 요소(픽셀)를 별도의 패스 또는 레이어로 렌더링한 다음 결과 2D 이미지합성이라고 하는 하나의 최종 이미지로 결합하는 것이 유용한 경우가 많습니다. 컴포지팅은 컴퓨터 렌더링 이미지 요소를 라이브 영상과 결합할 때 영화에서 광범위하게 사용됩니다. 알파 블렌딩은 2D 컴퓨터 그래픽에서도 래스터화된 전경 요소를 배경 위에 배치하는 데 사용됩니다.

이미지의 그림 요소를 올바르게 결합하려면 색상 외에 각 요소에 대한 관련 매트를 유지해야 합니다. 이 무광 레이어에는 이미지에서 그려진 부분과 비어 있는 부분을 구별할 수 있도록 그려지는 지오메트리의 모양인 커버리지 정보가 포함되어 있습니다.

두 이미지를 결합하는 가장 기본적인 작업은 하나를 서로 겹쳐 놓는 것이지만 사용되는 많은 작업 또는 혼합 모드가 있습니다.

역사

알파 채널의 개념은 1970년대 후반 앨비 레이 스미스에드 캣멀뉴욕 공과대학교 컴퓨터 그래픽스 연구소에서 소개했습니다. 브루스 에이. Wallace는 1981년 물리적 반사율/투과율 모델을 기반으로 동일한 직선 오버 연산자를 도출했습니다.[2] 토마스 포터와 톰 더프의 1984년 논문은 기하학적 접근법을 이용한 사전 곱셈 알파를 소개했습니다.[3]

용어 알파의 사용은 스미스에 의해 다음과 같이 설명됩니다. "우리는 그리스 문자 알파)를 사용하여 이 경우 두 이미지 A와 B 사이의 보간 양을 제어하는 고전적인 선형 보간 공식 +(- (1 -) B 때문에 그렇게 불렀습니다."[4] 즉, 이미지 B 위에 이미지 A를 합성할 때 α 값은 A의 알파 채널에서 직접 가져옵니다.

묘사

2D 이미지에서 색상 조합은 각 사진 요소(픽셀)에 대해 저장되며, 종종 빨간색, 녹색 및 파란색(RGB)의 조합입니다. 알파 합성을 사용하는 경우 각 픽셀은 0에서 1 사이의 값으로 알파 채널에 저장된 추가 숫자 값을 가집니다. 값이 0이면 픽셀이 완전히 투명하고 아래 픽셀의 색상이 투과됨을 의미합니다. 값이 1이면 픽셀이 완전히 불투명하다는 것을 의미합니다.

알파 채널의 존재로 합성 대수를 사용하여 합성 영상 연산을 표현할 수 있습니다. 예를 들어, 두 개의 이미지 AB가 주어졌을 때, 가장 일반적인 합성 작업은 A가 전경에 나타나고 B가 배경에 나타나도록 이미지를 결합하는 것입니다. 이것은 B보다 A로 표현할 수 있습니다. Porter와 Duff는[3] 개념적으로 두 픽셀의 색상을 혼합할 때 선택할 수 있는 방법을 고려하여 (이 문구는 홀드아웃 매트를 의미하며 일반적으로 약칭됩니다), 1위, xor(및 역방향 연산자 로버, , 루트ratop)로 구성 연산자를 정의했습니다. 중첩을 직교:

예를 들어 픽셀에 다음 공식을 적용하여 오버 연산자를 수행할 수 있습니다.[2]

여기서 는 결과적으로 각 색상 채널(적색/녹색/파란색)에 개별적으로 적용되는 픽셀의 색상 성분을 나타내는 반면, {\ \ 각 픽셀의 알파 값입니다.

오버 연산자는 사실상 정상적인 도장 작업입니다(Painter's 알고리즘 참조). 입력출력 연산자는 클리핑의 알파 합성 등가물입니다. 두 개는 두 번째 이미지의 알파 채널만 사용하고 색상 성분은 무시합니다. 또한 플러스는 첨가제 블렌딩을 정의합니다.[3]

직선 대 사전 곱셈

영상에서 알파 채널을 사용하는 경우 사용할 수 있는 일반적인 표현은 직선(연관되지 않은) 알파와 미리 곱해진(연관된) 알파 두 가지입니다.

  • 직선 알파를 사용하면 RGB 구성 요소는 불투명도를 무시하고 객체 또는 픽셀의 색상을 나타냅니다. 이것은 앞 의 오버 오퍼레이터가 암시한 방법입니다.
  • 사전 곱셈 알파를 사용하면 RGB 구성 요소는 물체 또는 픽셀의 방출을 나타내고 알파는 폐색을 나타냅니다. 그러면 오버 연산자는 [3]다음과 같습니다.

비교

사전 곱셈 알파의 가장 큰 장점은 올바른 블렌딩, 보간필터링이 가능하다는 것입니다.[5] 사전 곱셈된 알파가 없는 일반적인 보간은 RGB 정보가 이상적으로 보이지 않더라도 완전히 투명한(A=0) 영역에서 RGB 정보가 새어 나가게 합니다. 투명 영역과 불투명 영역 사이에 갑작스러운 경계가 있는 이미지를 보간하거나 필터링할 때 원래 이미지에서 볼 수 없었던 색상의 경계가 발생할 수 있습니다. RGB 구성 요소의 가중치가 정확하지 않아 반투명 영역에서도 오류가 발생하여 더 투명한(낮은 알파) 픽셀의 색상에 잘못된 가중치가 부여됩니다.[5][6]

또한 일반 알파 블렌딩(예: 연기) 영역과 추가 블렌딩 모드(예: 불꽃 및 반짝임 효과) 영역이 동일한 이미지 내에서 인코딩되도록 사전 곱셈 알파를 사용할 수 있습니다.[7][8] 이는 (0.4, 0.3, 0.2, 0.0)과 같이 폐색 없이 방출을 표현하는 RGBA 삼중항으로 표현됩니다.[5]

사전 곱셈 알파의 또 다른 장점은 성능입니다. 특정 상황에서 곱셈 연산 수를 줄일 수 있습니다(예: 나중에 합성할 때 이미지를 여러 번 사용하는 경우).[5] 포터-더프 연산은 사전 곱셈 알파에서만 간단한 형태를 갖습니다.[3] 일부 렌더링 파이프라인은 "직선 알파" API 표면을 노출하지만 성능을 위해 사전 곱셈 알파로 변환합니다.[9]

사전 곱셈 알파의 한 가지 단점은 색 성분에 대해 정수 또는 고정점 표현을 사용할 때 RGB 값에서 사용 가능한 상대 정밀도를 줄일 수 있다는 것입니다. 나중에 색상 정보가 밝아지거나 알파 채널이 제거되면 품질이 현저하게 저하될 수 있습니다. 실제로는 OVER와 같은 전형적인 합성 작업 중에 낮은 알파 영역의 낮은 정밀도 색상 정보가 최종 출력 이미지(합성 후)에 미치는 영향이 그에 따라 감소하기 때문에 이는 일반적으로 눈에 띄지 않습니다. 또한 이러한 정밀도 손실로 인해 사전 다중화된 이미지는 투명 영역 내부에 숨겨진 색상 변화를 기록하지 않고 낮은 알파 영역을 인코딩하기 위해 더 적은 비트를 할당할 수 있기 때문에 특정 압축 방식을 사용하여 압축하기가 더 쉬워집니다. 채널당 8비트와 같은 낮은 양자화 비트 깊이의 동일한 "제한"이 알파가 없는 이미지에도 존재하며, 결과적으로 이러한 주장은 문제가 있습니다.[5]

픽셀 색상이 직선(미리 곱하지 않은) RGBA 튜플을 사용하여 표현된다고 가정할 때, (0, 0.7, 0, 0.5)의 픽셀 값은 최대 녹색 강도의 70%와 불투명도의 50%를 갖는 픽셀을 의미합니다. 색상이 완전히 녹색인 경우 RGBA는 (0, 1, 0, 0.5)입니다.[5] 그러나 이 픽셀이 사전 곱셈된 알파를 사용하는 경우 모든 RGB 값(0, 0.7, 0)에 알파 값(0, 0, 0, 0)을 곱하거나 크기를 조정하여 0.5를 산출합니다(0, 0.35, 0, 0.5). 이 경우 G 채널의 0.35 값은 실제로 70%의 녹색 발광 강도(폐색 50%)를 나타냅니다. 순수한 녹색 방출은 (0, 0.5, 0, 0.5)로 인코딩됩니다. 파일을 올바르게 처리하거나 합성하려면 다른 계산이 필요하므로 파일이 직선 또는 사전 곱하기 알파를 사용하는지 아는 것이 필수입니다.[5]

폐색이 없는 방출은 직선 알파로 나타낼 수 없습니다. 이 경우에는 변환을 사용할 수 없습니다.[5]

알파 채널을 지원하는 이미지 형식

알파 채널을 지원하는 가장 일반적인 이미지 형식은 PNGTIFF입니다. GIF는 알파 채널을 지원하지만 파일 크기에 있어서는 비효율적인 것으로 간주됩니다. Alpha 채널에 대한 지원은 QuickTime 형식의 Animation 및 Apple ProRes 4444와 같은 일부 비디오 코덱 또는 Techsmith 다중 형식 코덱에 있습니다.

파일 형식 BMP는 일반적으로 이 채널을 지원하지 않지만 32비트(888-8) 또는 16비트(444-4)와 같은 다른 형식에서는 알파 채널을 저장할 수 있습니다. 모든 시스템이나 프로그램이 읽을 수 있는 것은 아니지만, 주로 일부 비디오 게임이나[10] 특정 응용 프로그램에서 활용됩니다.[11] 특정 프로그램도 이러한 BMP를 만들기 위해 만들어졌습니다.

파일/코덱 형식[12] 최대 깊이 유형 브라우저 지원 매체유형 메모들
Apple ProRes 4444 16비트 없음. 영상(.mov)
HEVC / h.265 10비트 사파리로 제한됨 비디오(.hevc) H.264의 후속 모델이 될 예정입니다.
WebM(코덱 비디오 VP8, VP9 또는 AV1) 12비트 모든 최신 브라우저 영상(.webm) VP8/VP9는 최신 브라우저에서 광범위하게 지원되지만 AV1은 아직 지원이 제한적입니다.[13] 크롬 기반 브라우저만 알파 레이어를 표시합니다.
EXR 열기 32비트 없음. 이미지(.exr) HDR 스프레드가 가장 큽니다.
PNG 16비트 똑바로 모든 최신 브라우저 이미지(.png)
TIFF 32비트 둘다요. 없음. 이미지(.tiff)
APNG 24비트 똑바로 적당한 지지 이미지(.apng) 애니메이션을 지원합니다.
움짤 8비트 모든 최신 브라우저 이미지(.gif) 브라우저는 일반적으로 GIF 알파 계층을 지원하지 않습니다.
SVG 32비트 똑바로 모든 최신 브라우저 이미지(.svg) CSS 컬러 기준.
JPEG XL 32비트 둘다요. 적당한 지지 이미지(.jxl) 손실 및 HDR을 허용합니다.

감마 보정

알파 블렌딩, 감마 보정을 고려하지 않습니다.
알파 블렌딩, 테이크아웃
감마 보정을 고려해서요

일반적인 디지털 이미지의 RGB 값은 물리적인 빛의 강도에 직접적으로 대응하지 않고 감마 보정 기능을 통해 압축됩니다.

이 변환은 휘도에 대한 비선형 인간 인식과 더 잘 일치하는γ {\displaystyle\gamma}를 선택함으로써 인코딩된 이미지의 제한된 비트 수를 더 잘 활용합니다.

따라서 이러한 이미지를 처리하는 컴퓨터 프로그램은 RGB 값을 선형 공간으로 디코딩하고(감마 압축을 취소하여) 선형 광 강도를 혼합한 다음 결과에 감마 압축을 다시 적용해야 합니다.[14][15][failed verification]

사전 곱셈 알파와 결합하면 감마 압축 전 선형 공간에서 사전 곱셈이 수행됩니다.[16] 그 결과 다음과 같은 공식이 나타납니다.

알파 채널은 컬러 채널이 감마 보정을 수행하는 경우에도 감마 보정을 수행하거나 수행하지 않을 수 있습니다.

기타 투명성 방법

유사한 용도로 사용되지만 투명 색상이미지 마스크는 중첩된 이미지 픽셀과 배경 픽셀을 원활하게 혼합할 수 없습니다(전체 이미지 픽셀 또는 전체 배경 픽셀만 허용).

Truevision TGA 이미지 파일 형식의 16비트 RGBA 고색상 모드와 관련 TARGA 및 AT-Vista/NU-Vista 디스플레이 어댑터의 고색상 그래픽 모드에서 볼 수 있는 것처럼 1비트 알파 채널에서도 유사한 효과를 얻을 수 있습니다. 이 모드는 기본 RGB 색상(15비트 RGB)마다 5비트와 나머지 비트를 "알파 채널"로 할당합니다.

디더링을 사용하여 1비트 알파만 사용할 수 있는 부분 폐색을 시뮬레이션할 수 있습니다.

일부 애플리케이션의 경우 단일 알파 채널로는 충분하지 않습니다. 예를 들어, 스테인드 글라스 창은 RGB 채널마다 적색, 녹색 및 청색 투명도를 개별적으로 모델링하기 위해 별도의 투명도 채널을 필요로 합니다. 정확한 스펙트럼 색상 여과 적용을 위해 더 많은 알파 채널을 추가할 수 있습니다.

일부 순서 독립적인 투명도 방법은 오버 연산자를 교환 근사로 대체합니다.[17]

참고 항목

참고문헌

  1. ^ "Definition of alpha blending". PCMAG. Retrieved 2021-08-07.
  2. ^ a b Wallace, Bruce A. (1981). "Merging and transformation of raster images for cartoon animation". Proceedings of the 8th annual conference on Computer graphics and interactive techniques - SIGGRAPH '81. Vol. 15. New York City, New York: ACM Press. pp. 253–262. CiteSeerX 10.1.1.141.7875. doi:10.1145/800224.806813. ISBN 0-89791-045-1. S2CID 1147910.
  3. ^ a b c d e Porter, Thomas; Duff, Tom (July 1984). "Compositing digital images" (PDF). Proceedings of the 11th annual conference on Computer graphics and interactive techniques - SIGGRAPH '84. Vol. 18. New York City, New York: ACM Press. pp. 253–259. doi:10.1145/800031.808606. ISBN 9780897911382. S2CID 18663039. Archived (PDF) from the original on 2011-04-29. Retrieved 2019-03-11.
  4. ^ Alvy Ray Smith (1995-08-15). "Alpha and the History of Digital Compositing" (PDF). alvyray.com. p. 6. Archived from the original (PDF) on 2021-10-25.
  5. ^ a b c d e f g h "ALPHA COMPOSITING – Animationmet". animationmet.com. Archived from the original on 2019-09-25. Retrieved 2019-09-25.
  6. ^ "Alpha Blending: To Pre or Not To Pre". NVIDIA Developer. 31 January 2013. However, something interesting happens when we generate the next mipmap level...
  7. ^ "TomF's Tech Blog - It's only pretending to be a wiki". TomF's Tech Blog - It's only pretending to be a wiki. Archived from the original on 12 December 2017. Retrieved 8 May 2018.
  8. ^ Trebilco, Damian. "To close to draw call (presentation on Pre-multiplied alpha)". GitHub. By switching to pre-multiplied blend mode for all particle effects, and entire scene can be done with one draw call (assuming atlasing/2D array for the textures)... Another neat trick with pre-multiplied alpha is that if you have overlapping textures that are in known positions, you can pre-process them all down to one texture.
  9. ^ "Premultiplied alpha". Win2D for WinUI3. Retrieved 30 June 2023. Win2D uses straight alpha in its API surface, but premultiplied alpha for internal rendering operations.
  10. ^ "Creating Textures". www.echos.ch. Retrieved 2023-05-25.
  11. ^ "Extended Formats". 2016-03-04. Archived from the original on 2016-03-04. Retrieved 2023-05-25.
  12. ^ Lambrecht, Jordan (2022-12-31). "List of Video/Image Formats Supporting Alpha Channels". Pixel Bakery Design Studio. Retrieved 2023-05-25.
  13. ^ "AV1 video format Can I use... Support tables for HTML5, CSS3, etc". caniuse.com. Retrieved 2023-05-25.
  14. ^ Minute Physics (March 20, 2015). "Computer Color is Broken". YouTube. Archived from the original on 2021-11-22.
  15. ^ Novak, John (September 21, 2016). "What every coder should know about gamma".
  16. ^ "Gamma Correction vs. Premultiplied Pixels – Søren Sandmann Pedersen". ssp.impulsetrain.com.
  17. ^ McGuire, Morgan; Bavoil, Louis (2013). "Weighted Blended Order-Independent Transparency". Journal of Computer Graphics Techniques. 2 (2): 122–141.

외부 링크