블렌딩(컴퓨터 그래픽스)
1. 개요
서로 다른 색을 섞는 것을 의미하는 컴퓨터 그래픽 용어로, 알파 블렌딩이라고도 부른다. 컴퓨터 그래픽과 디지털 사진 편집 분야에서는 서로 다른 레이어나 오브젝트의 색을 혼합하는 방식을 가리키는 용어이다. 유니티 등의 게임 엔진에서 셰이더를 이용하여 불빛이나 그림자 효과를 만드는 것을 예로 들 수 있다.
2. 용어
포토샵 등의 프로그램을 사용한다면, 마우스 클릭 몇 번만으로 다양한 혼합 모드의 적용이 가능하지만, 실제로는 아래와 같은 구성 요소들 사이의 연산으로 이루어진다. 아래 용어들은 예시 문단에서 사용할 용어들이다.
2.1. 색상 값
흔히 0부터 255 사이의 값으로 정의되는 색상 및 알파 값이다. 블렌딩 연산에 사용하는 수치는 0에서 1 사이의 실수이다.
2.2. 활성 레이어, 배경 레이어
- 활성 레이어 :
SRC
- 배경 레이어 :
DEST
2.3. 블렌딩 함수
유니티 엔진의 셰이더 등에서는 위와 같은 함수식으로 결정하기도 한다.blend(SrcAlphaFunc, DestAlphaFunc) = SRC * SrcAlphaFunc + DEST * DestAlphaFunc
SrcAlphaFunc
와 DestAlphaFunc
는 SRC
와 DEST
에 곱해지는 값을 결정하는 인자이다.2.4. 상수
위 문단의 함수식에서
SRC
또는 DEST
에 곱해지는 상수들이다. 아래의 값들이 SrcAlphaFunc
와 DestAlphaFunc
자리에 들어간다.-
: 1. 대상 레이어의 색상과 알파 값을 그대로 유지한다.One
-
: 0. 대상 레이어의 색상과 알파 값을 모두 소거한다.Zero
-
: 대상 레이어에SrcColor
의 색상 값을 곱한다.SRC
-
: 대상 레이어에InvSrcColor
의 색상 값을 반전하여 곱한다.SRC
-
: 대상 레이어에SrcAlpha
의 알파 값을 곱한다.SRC
-
: 대상 레이어에InvSrcAlpha
의 알파 값을 반전하여 곱한다.SRC
-
: 대상 레이어에DestColor
의 색상 값을 곱한다.DEST
-
: 대상 레이어에InvDestColor
의 색상 값을 반전하여 곱한다.DEST
-
: 대상 레이어에DestAlpha
의 알파 값을 곱한다.DEST
-
: 대상 레이어에InvDestAlpha
의 알파 값을 반전하여 곱한다.DEST
3. 예시
가장 많이 쓰이는 몇 가지 옵션을 알아본다. 각 문단의 제목은 포토샵의 혼합 모드 옵션 이름을 따른다.
3.1. 표준(Normal)
상위 레이어가 하위 레이어를 가린다. 대체 함수로는Result = SRC = blend(SrcAlpha, InvSrcAlpha)
blend(One, Zero)
가 있다. 단, 투명도를 적용하지 않을 때만 유효하다.3.2. 곱하기(Multiply)
상/하위 레이어가 겹친 부분의 색상이 어두워진다. 대체 함수로는Result = SRC * DEST = blend(DestColor, InvSrcAlpha)
blend(DestColor, Zero)
가 있다. 단, 투명도를 적용하지 않을 때만 유효하다.두 레이어를 곱한다는 이야기에서 '색상값을 곱하면 밝아져야 하는 것 아닌가'라는 의문을 제기할 수도 있으나, 블렌딩 함수는 일반적인 0~255를 사용하는 것이 아니라 0~1 사이의 실수를 사용함에 주의해야 한다. 따라서 각 채널의 최소와 최대 사이의 중간값은 반드시 진분수이기 때문에, 그 값을 곱하면 당연히 색상이 어두워진다.
3.3. 선형 닷지(추가)(Linear Dodge)
상/하위 레이어가 겹친 부분의 색상이 밝아진다. 대체 함수로는Result = SRC + DEST = blend(SrcAlpha, DestAlpha)
blend(SrcAlpha, One)
, blend(One, One)
가 있다. 단, 투명도를 적용하지 않을 때만 유효하다.3.4. 스크린(Screen)
Result = SRC + DEST - (SRC * DEST)
3.5. 차이(Difference)
레이어 간 색상의 차이를 반환한다.Result = absolute(SRC - DEST)
absolute
는 절댓값을 나타낸다. DEST
의 색상을 반전하려면 SRC
를 하얀색으로 놓고 blend(InvDestColor, InvSrcAlpha)
등을 사용할 수 있다.