Porter/Duff Mode
shader 를 사용할 때 모드중에 PorterDuff Mode(Porter/Duff) 가 있다. 오늘은 이녀석에 대해 간략하게 알아보자.Porter/Duff 는 이 두사람이 쓴 논문에 있는 내용이 2개의 image 를 pixel 정보를 가지고 composite(조합?) 하는 방법에 대해 이야기하는데, 거기에 나온 내용을 구현해 놓은 것이다. 필자도 대충 본 것이라 일단 넘어가자 ^^
ref. 4 를 보면 PorterDuff Mode 의 연산방법에 대한 enum 값이 나와 있다. 근데 공부좀 해야 알아먹을 정도이다. 그래서 여기서는 조금 쉽게 이야기 한다.(대신에 부정확할 수 있지만 그것은 알아서 판단하자.^^;;)
일단 어떤 연산(operator) 이 있는지 알아보자.
- DST
- DST_ATOP
- DST_IN
- DST_OUT
- DST_OVER
- CLEAR
- SRC
- SRC_ATOP
- SRC_IN
- SRC_OUT
- SRC_OVER
- XOR
- LIGHTEN
- ADD
- DARKEN
- MULTIPLY
- OVERLAY
- SCREEN
18개나 있다 ^^;; 오늘은 이중에 설명이 비교적 쉬운(?) 위의 12개에 대해서만 이야기하도록 하자.
설명을 위해서 ref. 2 에서 그림을 좀 가져왔다. 그림을 보면 대략 감이 잡힌다.
from : ref. 2 |
Porter/Duff formula
Porter / Duff 의 operator 들은 아래 공식을 사용한다. operator 는 모두 아래 공식을 이용하고, s, d , b 에 어떤 값이 들어가느냐에 차이가 있다.- Asrc⋅[s]+Adest⋅[d]+Aboth⋅[b]
s, d , b 는 영역을 나타내는 변수라고 보면 된다.
- source(s) : source 의 영역
- destination(d) : destination 의 영역
- both(b) : 겹쳐지는 영역
연산방법들, operators
겹쳐지는 부분
- SRC_* : "겹쳐지는 부분에서 Source 의 색"을 사용한다.
- DST_* : "겹쳐지는 부분에서 Dest 의 색"을 사용한다.
- *_OUT/CLEAR/XOR : 이들은 "겹쳐지는 부분의 alpha 가 0" 이어서 아무런 색도 표현되지 않는다.
겹쳐지지 않는 부위
- *_ATOP : *에 해당하는 녀석의 alpha 값이 0 + 그 반대에 해당하는 녀석은 자기 색을 갖는다.
- *_IN : *에 해당하는 녀석의 alpha 값이 0 + 그 반대에 해당하는 녀석의 alpha 값도 0
- *_OVER : 각자 자기색을 이용한다.
- *_OUT : * 에 해당하는 녀석은 자기색 + 그 반대에 해당하는 녀석은 alpha 값이 0
- SRC/DST: * 에 해당하는 녀석은 자기색 + 그 반대에 해당하는 녀석은 alpha 값이 0
이를 표로 나타내면 아래와 같다.
[s] | [d] | [b] | |
---|---|---|---|
SRC | s | 0 | s |
SRC_ATOP | 0 | d | s |
SRC_IN | 0 | 0 | s |
SRC_OVER | s | d | s |
SRC_OUT | s | d | 0 |
DST | 0 | d | d |
DST_ATOP | s | 0 | d |
DST_IN | 0 | 0 | d |
DST_OVER | s | d | d |
DST_OUT | s | d | 0 |
CLEAR | 0 | 0 | 0 |
XOR | s | d | 0 |
일단 대충 여기까지로 이해는 됐을 것 같다. 좀 더 자세한 이야기는 ref. 2 , ref. 5 를 참고하면 된다.
Reference
- Fun with Android Shaders and Filters : 안드로이드의 shader/ filter 를 이용하는 법이 예제, 그림과 함께 나와 있다. 예제 소스는 demo sources 에 있다.
- Porter/Duff Compositing and Blend Modes – Søren Sandmann Pedersen : Porter/Duff 에 대한 설명이 잘 나와 있다.
- Xenomachina: Android's 2D Canvas Rendering Pipeline : 안드로이드의 2D rendering 순서(pipeline)을 다이어그램으로 보여준다.
- PorterDuff.Mode | Android Developers
- Alpha compositing - Wikipedia, the free encyclopedia
very well explained. I would like to thank you for the efforts you had made for writing this awesome article. This article inspired me to read more. keep it up.
답글삭제Logistic Regression explained
Correlation vs Covariance
Simple Linear Regression
Bag of Words Python
KNN Algorithm