프로그래밍 2019. 12. 4. 18:11
728x90

 

bloom 이미지를 만들려면,

 

bloom RT(렌더타겟) 를 생성해두고,

 

(bloom 이미지를 세밀하게 만들려면, 되도록 orig 화면에 가까운 큰 이미지가 좋다

샘플링 할때는 가중치를 적용해 주는 것이 뭉치지 않고,

블러맵은 하나가 아닌, 크기가 축소되는 몇개의 RT 를 사용하고

최종적으로 이것들을 합쳐서 사용하는 것이, 퀄리티가 올라간다

 

https://allosha.tistory.com/50

 

HDR 렌더링(10/11) ~ HDR 렌더링 프로세스

3Dグラフィックス・マニアックス (50) HDRレンダリング(10)~HDRブルーム/グレア処理 2009-02-13 14:03:47 あふれ出す光を生成する方法ブルーム効果やグレア効果は、レンダリングしたフレーム中の高輝度部分を抽出..

allosha.tistory.com

*위의 내용을 참고해보자

)

 

orig 화면에서 밝은영역의 픽셀만을 추려내어 기록해둔뒤,

(bloom 이 적용되지 않을 픽셀들은 0으로 만들고)

(이때, 밝기를 증폭시킨다던지의 보정이 필요하다)

 

다운샘플링을 거치고,

(샘플링 범위가 클수록, 미세한 변화들을 얻을수 있다)

 

만들어진 샘플 이미지들을

bloom RT 에서 가져와, 모두 합쳐서 만들수 있다

 

 

// hdr 의 최종 출력은 대략 이런식으로,,,

Final_PS()

{

        //

        out.rgb = orig.rgb + orig_bloom.rgb;

        

        //

        out.rgb = Tonemap( out.rgb );

        

        //

        out.rgb = Gamma_ForMonitor( out.rgb );

}

 

 

orig 화면에서 밝은색상만을 남기는 방식은 다양하게 있을것이다,

 

특정값 이하는 0으로 만들고, bloom 시킬 픽셀들만 남겨보자

 

//

orig.rgb -= (fVal * 빼기증폭값);

orig.rgb = max( 0, orig.rgb );

orig.rgb *= 밝기증폭값;

 

fVal 는 상수값을 지정해서도 사용할수 있고,

fSceneLumi 값을 사용할수도 있고,

기타 다양한 방법이 있을 것이다,

 

잘라내기 기준에 대한 몇가지방법으로 테스트를 해보았는데,

출력물에서,

눈에 띄게 큰 차이점을 느끼지는 못했다

 

나의 경우는,

 

float Luminance( float3 _rgb )
{
        return dot( _rgb, float3(0.2125f, 0.7154f, 0.0721f) ) + 0.0001f;
}

 

//지정값보다 작은 픽셀값은 0으로 만든다

float fL = Luminance( orig.rgb ) - (fSceneLumi * 빼기증폭값);

fL = max( 0, fL ); 

 

orig.rgb *= fL; //즉, 남은 밝기만큼만을 bloom 으로 사용

orig.rgb *= 밝기증폭값;

 

대략 요런 식으로 사용하였다

 

이제 결과를 확인해보자

 

 

hdr 블룸 안준거

 

hdr 블룸 아주 살짝 (게임안에서 사용할만한 수치로)

 

hdr 블룸 값을 좀 크게 증폭

 

 

자, 그럼 sdr 화면에서도 살펴보자

 

hdr 블룸까지 적용된 상태에서, 

연관된 렌더타겟 텍스쳐들의 포맷만을 sdr 로 바꾸어 보았다

(감마콜렉션, 톤매핑, 휘도 등은 sdr 상태에서도 그대로 사용)

 

D3DFMT_A16B16G16R16F -> D3DFMT_A8R8G8B8

 

 

sdr 블룸 살짝 준거

 

sdr 블룸 아주 큰값으로 증폭시킨거

sdr 상태일때,

전체적인 화면이 어두운 상태에서는, bloom 적용대가 급격히 줄어들어,

아무리 블룸값을 증폭시켜 보아도 bloom 효과를 보기가 힘들다,

 

 

밑의 스샷을 보자

 

sdr 되도록 많은 픽셀을 남겨서, 좀 세게 bloom (잘라내는 기준값을 많이 낮추었다)

 

sdr 에서는,

블룸영역을 보다 넓힐때, 블룸효과를 볼수있다

되도록 주변의 픽셀들을 많이 남겨야, 다운샘플링을 통해서 블룸효과가

나타남을 이야기하는 것이다

단, 블룸화된 픽셀영역이 전체적으로 넓어지므로, 

최종화면은 전체적으로 좀더 흐릿해진다

 

 

그러면, 조금더 밝은 화면에서

hdr bloom 과 sdr bloom 을 비교해보자

 

 

hdr bloom

 

sdr bloom

얼핏보면 비슷해 보이지만,

hdr bloom 이 조금더 이쁜 출력을 보인다

sdr bloom 은 부분적으로 색상이 뭉치고, 하얀 색감을 보인다

(스샷이미지를 클릭해서 크게 확대해서, 차이를 비교해보자)

 

 

 

이번에는, 강한 빛에 대한 색감을 살펴보자,

 

hdr 의 진가가 드러나는 스샷이다!

 

 

hdr 강한 포인트 라이트 (클릭해서 크게 살펴보자)

 

sdr 강한 포인트 라이트

 

hdr 은 빛에 민감하다,

강한 빛에, 그 진가가 보여진다

sdr 에서 여러가지 수치를 조절해가며, hdr 화면에 근접해보려했지만, 

한계가 있다

sdr 의 빛에 대한 반응색은, hdr 보다 둔탁하다

(이미지를 클릭해서 크게 보면서, 차이를 비교해 보자)

 

728x90
posted by BK dddDang
: