디지털 그림에서 색 레이어의 순서를 바꾸면 한 색의 값은 커지고 다른 색의 값은 작아질 수 있어요. 그렇다면 빨강·초록·파랑 각각을 가장 크게 만드는 일을 한 순서에서 함께 할 수 있을까요? 각 색을 따로 최대로 만든 숫자를 모았다고 해서, 그 세 숫자가 실제 한 그림에서 나오는 것은 아니에요.
먼저 검은 배경에 빨강 레이어와 파랑 레이어를 한 장씩 놓을게요. 두 레이어의 불투명도는 각각 1/2입니다. 이 글은 한 픽셀의 RGB 세 숫자를 0과 1 사이로 정하고, 위 색과 아래 색을 불투명도 비율로 섞는 정확한 자체 규칙을 써요. 여기서 ‘색 값을 키운다’는 말은 해당 숫자가 커진다는 뜻이에요. 눈으로 느끼는 진하기나 전체 밝기를 평가하는 문제가 아니에요.
| 위에서 아래로 놓은 순서 | 빨강 값 | 초록 값 | 파랑 값 |
|---|---|---|---|
| 빨강 → 파랑 | 1/2 | 0 | 1/4 |
| 파랑 → 빨강 | 1/4 | 0 | 1/2 |
빨강의 최대는 1/2, 파랑의 최대도 1/2입니다. 그러나 두 값을 함께 얻는 순서는 없어요. 위 레이어가 아래쪽 색의 비중도 바꾸기 때문이에요. 같은 두 색이 있다는 사실만으로 순서를 무시할 수 없어요.
이제 레이어 수 n을 0 이상의 유한한 정수로 정하고, 모든 레이어를 한 번씩 사용해요. 각 레이어는 이름으로 구별하고, 색 cᵢ와 불투명도 αᵢ는 고정해요. 배경 b도 고정해요. 색 벡터의 세 성분은 빨강·초록·파랑 순서예요. 겹친 목록은 위에서 아래로 적으므로 아래쪽부터 계산해 올라온다.
빈 목록에서는 결과가 배경 b입니다. 목표는 세 성분의 개별 최댓값 M₁,M₂,M₃를 한 순서에서 함께 얻을 수 있는지 판정하고, 가능하다면 그런 순서를 모두 찾는 거예요. 특정 프로그램의 색 공간, 감마 처리나 물리적인 투명 필름을 이 식으로 검증하는 것은 아니에요.
색 벡터 c가 d 이상이라는 말은 세 성분에서 모두 c가 d 이상이라는 뜻으로 써요. 어떤 두 벡터든 한쪽이 다른 쪽 이상이면 ‘성분별로 서로 비교 가능하다’고 해 볼까요? 빨강 (1,0,0)과 파랑 (0,0,1)은 서로 비교할 수 없어요. 반면 (1,1,1)과 (1/2,1/2,1/2)는 비교할 수 있어요.
불투명도가 0인 레이어는 아래 값을 그대로 통과시킨다. 어디에 놓아도 결과에 영향이 없으므로 잠시 지워도 돼요. 완전히 불투명한 레이어가 없다면 나머지는 모두 불투명도가 0보다 크고 1보다 작아요. 이 경우 공통 최대가 있을 필요충분조건은 모든 색 벡터가 성분별로 서로 비교 가능하다는 거예요. 모든 최적 순서는 큰 벡터부터 작은 벡터까지 위에서 아래로 놓는 순서예요. 같은 벡터끼리는 자유롭게 바꾸고, 불투명도 0인 레이어도 어디에든 다시 넣을 수 있어요.
왜 이런 조건이 나올까요? 이웃한 두 레이어 i, j의 순서만 바꿔 볼게요. 원래 i가 위에 있을 때와 j가 위에 있을 때의 k번째 성분 차이는 다음과 같아요. P는 그 두 장보다 위에 놓인 레이어들을 통과한 비중이에요.
완전 불투명 레이어가 없으면 P와 두 불투명도가 모두 양수예요. 어느 성분에서 아래 레이어의 값이 더 크면 두 장을 바꿔 그 성분을 엄격히 키울 수 있어요. 따라서 그 성분을 최대로 만드는 순서는 값이 위에서 아래로 작아져야 해요. 세 성분 모두에서 이 요구를 만족하는 한 순서가 있어야 하므로, 색 벡터끼리의 비교가 필요해요. 역으로 모두 비교 가능하면 큰 벡터부터 나열하여 세 요구를 함께 만족시켜요. 이는 알려진 이웃 교환과 정렬을 도구로 사용한 거예요.
그런데 불투명도가 1인 레이어를 허용하면 같은 조건을 그대로 쓸 수 없어요. 가장 위에 있는 완전 불투명 레이어는 그 아래 모든 색과 배경을 가려요. 앞의 빨강·파랑에 불투명 흰색 (1,1,1)을 한 장 더하고 가장 위에 두면 결과는 (1,1,1)입니다. 빨강과 파랑이 서로 비교되지 않아도 두 장은 이제 아래에서 가려져요.
완전 불투명 레이어가 적어도 하나 있을 때만 다음 m과 H를 정의해요. T는 반투명 레이어, O는 완전 불투명 레이어의 목록이에요. m은 O 안에서 각 성분의 최대를 따로 모은 벡터이고, H는 어느 한 성분이라도 m보다 큰 반투명 레이어들의 목록이에요.
공통 최대가 있을 필요충분조건은 세 가지예요. 첫째, 실제 완전 불투명 레이어 하나가 색 m을 가져야 해요. 둘째, H의 각 색은 한 성분만이 아니라 세 성분 모두에서 m 이상이어야 해요. 셋째, H의 색들끼리는 성분별로 서로 비교 가능해야 해요.
첫 조건을 빠뜨리면 빨강과 초록의 완전 불투명 레이어만 놓은 경우를 잘못 판정해요. 각각 (1,0,0), (0,1,0)이면 m은 (1,1,0)이지만 실제 어느 장도 이 색이 아니에요. 둘을 어떻게 놓아도 위에 있는 한 장만 보이므로 공통 최대는 불가능해요.
둘째 조건도 따로 필요해요. 불투명 바탕색이 (1/2,1/2,1/2)이고 반투명 한 장의 색이 (1,0,1/2)라면, 빨강을 키우려면 그 장을 위에 놓아야 하지만 초록은 작아져요. H에 한 장만 있어 셋째 조건은 자동으로 맞아도 공통 최대는 없어요.
셋째 조건을 따로 보려면 처음의 반투명 빨강·파랑 밑에 불투명 검은색 (0,0,0)을 놓을게요. m은 검은색이고 첫 두 조건은 맞아요. 그러나 두 반투명 색은 서로 비교되지 않아 여전히 공통 최대는 없어요. 불투명 레이어가 있다는 사실만으로 항상 해결되는 것도 아니에요.
세 조건이 맞으면 m인 불투명 레이어를 고르고, H 전부를 성분별로 큰 순서부터 그 위에 놓으면 돼요. 그 외 레이어는 아래에 둬요. 왜 빠짐없이 모든 답을 얻는지도 확인해 볼까요? 어느 성분을 최대로 만들려면 맨 위 불투명 레이어가 그 성분의 불투명 최대여야 해요. 그 최대보다 큰 반투명 색은 가릴 수 없고, 작은 색은 위에서 섞으면 손해예요. 세 성분의 요구를 겹치면 정확히 위 세 조건이 남아요.
한 성분에서 첫 불투명 레이어의 값이 불투명 목록의 최대보다 작다면, 아래에 가려진 최대 레이어와 바꾸어 엄격히 키울 수 있어요. 그 앞은 모두 반투명이라 바뀐 값의 양의 비중이 남아요. 최대보다 큰 반투명 레이어를 아래에 숨겼다면, 첫 불투명 레이어 바로 위에 옮겨 그 성분을 키울 수 있어요.
반대로 최대보다 작은 반투명 색이 위에 있다면, 그런 색 중 가장 아래 것을 골라요. 그 아래는 최대 이상의 색들과 최대인 불투명 색으로만 섞였으므로 값이 최대 이상이에요. 고른 작은 색을 아래로 숨기면 그보다 큰 아래 값이 남아 결과가 커져요. 따라서 최적에서는 작은 색을 가리고, 남은 큰 색들은 이웃 교환으로 큰 순서부터 놓아야 해요. 최대와 같은 색은 최대인 바탕 위에서 그 성분을 바꾸지 않아요.
모든 공통 최대 순서는 다음처럼 설명할 수 있어요. 불투명도 0인 레이어를 제외하고, 첫 불투명 레이어의 색은 m이어야 해요. H 전부는 그 위에서 성분별로 큰 순서부터 놓여요. 색이 정확히 m인 반투명 레이어는 H 뒤와 첫 불투명 레이어 사이에 넣어도 되고, 아래에 가려도 돼요. m 이하이면서 어느 성분이 작은 반투명 레이어는 반드시 가려요. 다른 완전 불투명 레이어도 그 아래에 있어요. 가려진 레이어들끼리는 순서를 자유롭게 바꿀 수 있어요.
이 결론은 ‘색 값이 큰 것부터 정렬하면 된다’라는 말 하나로는 설명되지 않아요. 완전 불투명 레이어가 없을 때에는 모든 양의 비중 색을 비교해야 해요. 있을 때에는 어떤 색들이 꼭 보이고 어떤 색들이 가려져야 하는지 먼저 나눠요. 불투명도 0인 레이어만 있으면 모든 순서의 결과가 배경이고, 같은 색끼리는 불투명도가 달라도 순서를 바꿔 결과가 같다는 경계도 포함해요.
교사는 빨강과 파랑을 각각 최대로 만든 두 순서를 먼저 비교하게 하고, 두 최대를 모은 벡터가 어느 한 순서에 실제로 나오는지 묻게 해요. 다음에는 완전 불투명 흰색을 추가해 처음의 불가능 조건이 유지되는지 확인해요. 한 성분의 최선, 세 성분이 함께 얻는 최선, 뒤에서 가려져 사라진 조건은 서로 다른 판단이에요. 제공 교재의 합성함수와 교집합은 이 구별을 표현하는 용어이며, 위 전체 분류가 교재에 실린 정리라는 뜻은 아니에요.
착안: Krita Documentation, Mix — Normal. 원문에서 위 픽셀의 색과 투명도를 보고 아래 색과 섞는다는 지정 절 전체를 읽었어요. 본문의 정확한 한 픽셀 규칙, 색 목록, 순서 질문과 전범위 증명은 자체 교육 모형이에요. 원문 그림이나 프로그램 화면을 옮기지 않았고, 실제 소프트웨어 출력·색감 또는 실험 결과를 측정한 자료도 아니에요.
