RGB와 알파의 약속

같은 색, 다른 가장자리

이미 곱한 알파를 또 곱하면, 투명한 부분부터 어두워집니다.
선택한 처리
표현에 맞춘 처리

어두운 경계와 사라진 빛

문제 · 두 현상은 원인이 다릅니다

반투명 경계가 어두워지면 알파 표현부터 확인합니다. 밝은 배경에서 가산 효과가 사라지면 합성 결과와 배경의 대비를 확인합니다.

원인 · 저장 값과 합성 인자의 불일치

Straight는 C를, premultiplied는 Cα를 저장합니다. 후자에 SrcAlpha를 곱하면 Cα²가 됩니다. 배경 버퍼도 Cbαb를 저장해야 하며 출력 알파는 αs+αb(1−αs)입니다. RGB와 같은 SrcAlpha를 알파에도 쓰면 αs²가 되어 잘못됩니다.

해결 · 같은 약속으로 연결하기

‘저장 표현에 인자 맞추기’는 straight에 SrcAlpha, premultiplied에 One을 선택하고 알파에는 별도 One을 씁니다. 결과 co는 premultiplied 값으로 유지하고 필요할 때만 Co=co/αo로 복원합니다. 아래 숫자는 도형 중심의 겹친 픽셀입니다.

가산·곱셈과 색 공간

가산은 Cb+Csα, 곱셈은 Cb×(1−α+Csα)로 계산합니다. 이 두 모드는 불투명 배경 비교입니다. 선형 모드에서는 입력 sRGB를 광량으로 복원하고 계산 뒤 sRGB로 되돌립니다. 가산이 1을 넘는 채널은 화면에서 LDR로 잘립니다.

대가와 한계

각 픽셀의 수식을 CPU로 계산해 보여줍니다. 텍스처 압축·필터링의 테두리 오류, HDR 디스플레이·톤 매핑·실제 빛의 산란은 포함하지 않습니다. 투명 이미지의 저장 형식을 바꾸려면 출력 버퍼와 이후 패스도 함께 맞춰야 합니다.

W3C source-over 식 · Unity RGB·알파 합성 인자