2008-09-30 6 views
6

많은 RGBA 픽셀을 가지고 있는데, 각각은 알파 성분을 가지고 있습니다.여러 픽셀의 알파 블렌딩 공식은 무엇입니까?

그래서 나는 픽셀 목록을 가지고 있습니다 : (p0 p1 p2 p3 p4 ... pn) 여기서 p_0_은 앞 픽셀이고 p_n_는 가장 먼 (뒤쪽)입니다.

최종 (또는 임의의) 픽셀은 불투명 일 필요는 없으므로 결과 블렌드 픽셀도 아무 래도 투명 할 수 있습니다. 목록의 처음부터 끝까지 블렌딩합니다. 반대로 (예, 광선 추적입니다). 따라서 어떤 순간의 결과가 충분히 불투명 해지면 나는 정확한 결과로 멈출 수 있습니다. 나는이 방법으로 혼합 알고리즘을 적용 할 수 있습니다 : ((((P0@ P1)를 P2) @P3) @ ...)

는 사람이 나에게 올바른 혼합 공식을 제안 할 수 있습니다 R, G 및 B뿐만 아니라 A 구성 요소에도 해당됩니까?

UPD : 색상을 결정하는 과정에서 많은 수식을 가질 수 있다는 것이 어떻게 가능한가 궁금합니다. 그것은 어떤 종류의 근접입니까? 수식이 그렇게 다르지 않아서 우리는 실제로 효율성이나 최적화를 얻지 못합니다. 아무도 이것을 명확히 할 수 있습니까?

답변

10

알파 블렌딩은 생각보다 깊이가있는 주제 중 하나입니다. 그것은 당신의 시스템에서 알파 값이 무엇을 의미하는지에 달려 있습니다. 그리고 당신이 틀렸다고 생각한다면, 당신은 괜찮아 보이는 결과를 얻지 만 이상한 유물을 보여줄 것입니다.

포터와 더프의 고전적인 종이 "Compositing Digital Images"을 읽고 훌륭한 토론과 모든 수식을 확인하십시오. 당신은 아마 "이상"연산자를 원할 것입니다.

볼륨 렌더링에 더 가깝게 작업하는 것처럼 들립니다. 수식 및 참조는 Graphics FAQ, 질문 5.16 "볼륨 렌더링은 어떻게 수행합니까?"를 참조하십시오.

+0

멋진 링크, 사람! 고마워요! – avp

2

RGBA 값이 실제로 재료의 속성을 나타내는 방식에 따라 다양한 방법이 있습니다.

다음은 가능한 알고리즘입니다. 최종 픽셀 색상으로 시작 lightr=lightg=lightb=0, lightleft=1;

lightr += lightleft*r*(1-a) 
lightg += lightleft*g*(1-a) 
lightb += lightleft*b*(1-a) 
lightleft *= 1-a; 

합니다 (RGBA 값은 0과 1 사이의 정규화하고, I는 A = 1, 은폐 수단 = 0이라고 가정하고있어, 각각 R, G, B 용

, 발생한 화소 평가 접두사가 완전히 투명 함을 의미)

첫 번째 픽셀이 파란색으로 불투명도가 50 % 인 경우 사용 가능한 색상의 50 %가 파란색으로 설정되고 나머지는 알려지지 않습니다. 불투명도 50 %의 빨간색 픽셀이 다음에있는 경우 의 나머지 2538 %는 표시등이 빨간색으로 설정되므로 픽셀의 파란색은 50 %, 빨간색은 25 %입니다. 불투명도가 60 % 인 녹색 픽셀이 다음에 있으면 픽셀은 파란색 50 %, 빨간색 25 %, 녹색 15 %이며 나머지 10 %는 남습니다.

이 기능에 해당하는 물리적 인 물질은 발광하지만 부분적으로 불투명 한 물질입니다. 따라서 스택 중간의 픽셀은 최종 색상을 어둡게 만들 수 없습니다. 단지 뒤의 빛이 최종 색상을 증가시키는 것을 방지 할 수 있습니다 (검정색으로 완전히 불투명 함).

관련 문제