Blending
카테고리: OpenGL
태그: Graphics
Main Reference
- Learn OpenGL
- Rinthel Kwon - OpenGL Lecture
Blending
Blending이란 프레임 버퍼에 저장된 픽셀과 새로 그리려는 픽셀간의 연산을 의미한다. 대부분의 경우 반투명한 오브젝트를 그리는 경우에 사용된다. 참고로 gaussian splatting에서도 각각의 gaussian이 불투명한 오브젝트로 간주되기 때문에 중요하게 사용된다.
Blending Function
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);
Note
Sorted blending | Unsorted Blending |
---|---|
- 위 그림은 z값이 4, 5, 6인 불투명 window들을 이용해 블렌딩한 결과이다.
- 왼쪽 그림은 뒤에서 부터 차례대로 블렌딩한 결과. 정상적인 결과가 나타남.
- 오른쪽 그림은 앞에서 부터 거꾸로 블렌딩한 결과. window 뒷 면이 전혀 비치지 않는 문제가 발생
Blending에서 한 가지 주의해야 할 점은 반드시 뒤에 있는 물체부터 차례대로 연산을 해야한다는 것이다. 따라서 Deffered Rendering을 한다 하더라도, 불투명한 물체들은 따로 sorting 후 처리를 해주어야 한다.
댓글 남기기