2011-12-31 2 views
1

중간 위치에서 실제로 렌더링하여 물리적으로 정확한 모션 블러를 구현하려면이 작업을 올바르게 수행하려면 특수 블렌딩 기능이 필요합니다. 첨가제 블렌딩은 검정색 배경에서만 작동하며 표준 "투명도"기능 (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)은 작은 수의 샘플에서는 괜찮은 것처럼 보일 수 있지만 결국 렌더링 된 샘플이 결과 색상에 더 많이 기여하기 때문에 물리적으로 부정확합니다.사용자 정의 블렌드 함수 (OpenGL) 정의

필자가 필요로하는 기능은 조각을 덮고있는 샘플의 수에 따라 원래 색과 대상 색의 가중 평균 인 색을 만들어야합니다. 그러나 이것을 샘플간에 렌더링 차이를 더 잘 설명하기 위해 일반화 할 수 있습니다. 흐린 객체를 n 번 렌더링한다고 가정 해 보겠습니다. 색상을 3 벡터로 처리 할 경우 DDEST - SRC이됩니다. 각 렌더링에 소스 색상에 D/n을 추가하고 싶습니다.

고정 기능 파이프 라인을 사용하여이 작업을 수행 할 수 있습니까? 적어도 내게는 The glBlendFunc reference이 다소 신빙성이있다. 이것은 쉽게 할 수 있거나 불가능한 것처럼 보입니다. 알파를 1/n으로 설정하고 싶습니다. 방금 설명한 동작에 대해 GL_DEST_MINUS_SRC_COLOR 옵션이 필요합니까?

관련 질문이 있습니다.이 혼합 작업은 어느 단계에서 수행됩니까? 프래그먼트 셰이더 프로그램 전후에? 조각 쉐이더에서 소스 및 대상 색상에 액세스 할 수 있습니까?

내가 원하는 것을 달성하는 한 가지 방법은 누적 버퍼를 사용하는 것입니다. 나는 그것이 메모리와 채우기의 낭비이기 때문에 이것을하고 싶지 않다.

+2

아직 블렌드 셰이더가 없으므로 고정 기능 파이프 라인에서이 작업을 수행해야합니다. 또한 혼합은 조각 쉐이딩 후에 발생합니다. 파이프 라인의 다른 단계에서는 픽셀의 가치를 알 수 없습니다. – pmr

+0

몇 가지 생각을 한 후에 : 어떻게 BlendFunc에 상태를 넣을 수 있는지 모르겠습니다. 일반적으로 BlendEquation으로 튜닝 할 수 있지만 파이프 라인의 블렌딩 부분에는 '렌더링 패스 수'라는 개념이 없으므로 여기서는 도움이되지 않습니다. 그러나 유니폼을 사용하여 올바른 알파 값을 계산하는 프래그먼트 셰이더를 사용할 수 있습니다. – pmr

+0

조각 프로그램에서 직접 할 수 없습니까? 입력 텍스처를 텍스처 유닛 1 ~ 8 (또는 카드의 최대 값이 무엇이든간에)에 넣고 거기에 블렌드 할 수 있습니다. – user1118321

답변

1

내 효과를 구현하는 데 사용한 솔루션은 조각 쉐이더에서 텍스처로 액세스하는 첨가제 블렌딩과 렌더 타겟의 조합입니다.