Blending

Date:     Updated:

카테고리:

태그:

Main Reference
- Learn OpenGL
- Rinthel Kwon - OpenGL Lecture


Blending

43a4f95f-eda2-4862-a192-e0d2e89d0071

Blending이란 프레임 버퍼에 저장된 픽셀과 새로 그리려는 픽셀간의 연산을 의미한다. 대부분의 경우 반투명한 오브젝트를 그리는 경우에 사용된다. 참고로 gaussian splatting에서도 각각의 gaussian이 불투명한 오브젝트로 간주되기 때문에 중요하게 사용된다.


Blending Function

11_blending_equation

void glBlendFunc(GLenum sfactor, GLenum dfactor);
  • glBlendFunc : source, destination 별로 색상에 적용될 비율을 정의
  • sfactor : source color의 곱셈 인수를 지정
  • dfactor: destination color의 곱셈 인수를 지정


Function Description
GL_ZERO(GL_ONE) 모든 색상 요소를 0(1)로 설정
GL_SRC_COLOR source color 사용
GL_ONE_MINUS_SRC_COLOR source color의 보색 사용
GL_DST_COLOR destination color 사용
GL_ONE_MINUS_DST_COLOR destination color의 보색 사용
GL_SRC_ALPHA source color의 alpha 값 사용
GL_CONSTANT_COLOR 고정된 상수 색상 사용
  • glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) : 소스 색상은 자신의 알파 값으로, 대상 색상은 (1 - 소스 알파 값)으로 곱해짐
  • blending 함수는 위 함수 이외에도 다양한 함수가 존재
  • glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) : color/alpha 별로 blending 함수를 따로 지정하는 것도 가능


Blending Equation

void glBlendEquation(GLenum mode);
  • glBlendEquation : blendfunc가 적용된 두 색상이 어떻게 결합될지를 결정


Mode Description
GL_FUNC_ADD 소스와 대상 색상을 더함
GL_FUNC_SUBTRACT 소스 색상에서 대상 색상을 뺌
GL_FUNC_REVERSE_SUBTRACT 대상 색상에서 소스 색상을 뺌
GL_MIN 소스 색상과 대상 색상 중 최소값을 선택
GL_MAX 소스 색상과 대상 색상 중 최대값을 선택


Example

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

165406


Note

Sorted blending Unsorted Blending
165913 165935
  • 위 그림은 z값이 4, 5, 6인 불투명 window들을 이용해 블렌딩한 결과이다.
  • 왼쪽 그림은 뒤에서 부터 차례대로 블렌딩한 결과. 정상적인 결과가 나타남.
  • 오른쪽 그림은 앞에서 부터 거꾸로 블렌딩한 결과. window 뒷 면이 전혀 비치지 않는 문제가 발생

Blending에서 한 가지 주의해야 할 점은 반드시 뒤에 있는 물체부터 차례대로 연산을 해야한다는 것이다. 따라서 Deffered Rendering을 한다 하더라도, 불투명한 물체들은 따로 sorting 후 처리를 해주어야 한다.



맨 위로 이동하기

OpenGL 카테고리 내 다른 글 보러가기

댓글 남기기