WinCNT

Bloom 본문

Bloom

빛이 Blooding하는 느낌

Blur 효과를 사용한다

 

HALO3의 Bloom 효과

 

Bloom을 위해서는 우선 밝은 부분을 Bloom Curve 추출해야 한다

(1.2와 같은 파마리터 수치는 알아서 설정)

원래의 색을 Bloom curve를 이용해서 밝은 부분은 더욱 밝게, 어두운 부분은 더욱 어둡게 만들어서 추출한다

//#define BLOOMCURVE_METHOD_1
//#define BLOOMCURVE_METHOD_2
#define BLOOMCURVE_METHOD_3

float GetBloomCurve( float x, float threshold )
{
    float result = x;
    x *= 2.0f;
    
    #ifdef BLOOMCURVE_METHOD_1
    result = x*0.05+max(0,x-threshold)*0.5; // default threshold = 1.26
    #endif
    
    #ifdef BLOOMCURVE_METHOD_2
    result = x*x/3.2;
    #endif
    
    #ifdef BLOOMCURVE_METHOD_3
    result = max(0,x-threshold); // default threshold = 1.0
    result *= result;
    #endif 
    
    return result * 0.5f;
}

그리고 Bloom Curve를 적용한  Downsample + Bloom Curve

 

준비해둔 작은 사이즈의 버퍼를 3~4개를 이용해서

Bloom Curve를 적용한 텍스처를 점점 Downsample한다

 

제일 작은 사이즈의 버퍼에 Downsampling이 끝났으면 Blur를 적용하고,

그 위 해상도의 해상도와 합친다(작은 해상도는 Linear 필터가 적용되면서 커짐)

그리고 다시 Blur를 적용하고 다시 그 위의 해상도와 합친다

위의 처리를 원본 텍스처와 합칠 때까지 계속한다

 

놀랍게도 연산 부하는 원본을 바로 Blur하는 것보다 줄어든다...

짜잔~

Specular 채널은 Bloom Curve를 통과하는(즉 무조건 Bloom이 적용하는) 채널을 나타내는 것이다

 

SSS

'게임 프로그래밍(학습 내용 정리) > 게임 수학' 카테고리의 다른 글

Posterize  (0) 2022.06.21
Pixelate  (0) 2022.06.21
Motion Blur  (0) 2022.06.21
Radial Blur  (0) 2022.06.14
Blur  (0) 2022.06.14