중간 위치에서 실제로 렌더링하여 물리적으로 정확한 모션 블러를 구현하려면이 작업을 올바르게 수행하려면 특수 블렌딩 기능이 필요합니다. 첨가제 블렌딩은 검정색 배경에서만 작동하며 표준 "투명도"기능 (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
은 작은 수의 샘플에서는 괜찮은 것처럼 보일 수 있지만 결국 렌더링 된 샘플이 결과 색상에 더 많이 기여하기 때문에 물리적으로 부정확합니다.사용자 정의 블렌드 함수 (OpenGL) 정의
필자가 필요로하는 기능은 조각을 덮고있는 샘플의 수에 따라 원래 색과 대상 색의 가중 평균 인 색을 만들어야합니다. 그러나 이것을 샘플간에 렌더링 차이를 더 잘 설명하기 위해 일반화 할 수 있습니다. 흐린 객체를 n 번 렌더링한다고 가정 해 보겠습니다. 색상을 3 벡터로 처리 할 경우 D
은 DEST - SRC
이됩니다. 각 렌더링에 소스 색상에 D/n
을 추가하고 싶습니다.
고정 기능 파이프 라인을 사용하여이 작업을 수행 할 수 있습니까? 적어도 내게는 The glBlendFunc reference이 다소 신빙성이있다. 이것은 쉽게 할 수 있거나 불가능한 것처럼 보입니다. 알파를 1/n
으로 설정하고 싶습니다. 방금 설명한 동작에 대해 GL_DEST_MINUS_SRC_COLOR
옵션이 필요합니까?
관련 질문이 있습니다.이 혼합 작업은 어느 단계에서 수행됩니까? 프래그먼트 셰이더 프로그램 전후에? 조각 쉐이더에서 소스 및 대상 색상에 액세스 할 수 있습니까?
내가 원하는 것을 달성하는 한 가지 방법은 누적 버퍼를 사용하는 것입니다. 나는 그것이 메모리와 채우기의 낭비이기 때문에 이것을하고 싶지 않다.
아직 블렌드 셰이더가 없으므로 고정 기능 파이프 라인에서이 작업을 수행해야합니다. 또한 혼합은 조각 쉐이딩 후에 발생합니다. 파이프 라인의 다른 단계에서는 픽셀의 가치를 알 수 없습니다. – pmr
몇 가지 생각을 한 후에 : 어떻게 BlendFunc에 상태를 넣을 수 있는지 모르겠습니다. 일반적으로 BlendEquation으로 튜닝 할 수 있지만 파이프 라인의 블렌딩 부분에는 '렌더링 패스 수'라는 개념이 없으므로 여기서는 도움이되지 않습니다. 그러나 유니폼을 사용하여 올바른 알파 값을 계산하는 프래그먼트 셰이더를 사용할 수 있습니다. – pmr
조각 프로그램에서 직접 할 수 없습니까? 입력 텍스처를 텍스처 유닛 1 ~ 8 (또는 카드의 최대 값이 무엇이든간에)에 넣고 거기에 블렌드 할 수 있습니다. – user1118321