프로그래밍 2019. 11. 30. 19:42
728x90

 

나는 웹에서

hdr 관련 강좌, pdf, 슬라이드 발표 등

많은 정보들을 검색해서 살펴보았다,

 

그러면, 대부분

hdr 과 함께,

gamma collection 에 관한 내용들도 볼수있는데,

 

이에 대해 요약해 보자면,

 

1. 모니터에서 색이 표현될때 rgb -> pow( rgb, 2.2 ) 로 색이 강조된다는것

(인간의 눈이 선형적이지 않다는 이유, 모니터 하드웨어의 빛발광 이유 등등

여러가지 감마에 대한 내용들을 찾아볼수 있다, 2.2 는 대중적인 감마값 수치 )

 

2. 포토샵( 모든 이미지 편집툴 )에서 작업한 이미지를 저장할때

모니터에서 pow2.2 로 강조되기 때문에, 

이걸 감안해서 pow( rgb, 1/2.2 ) 로 감쇄해서 저장해 둔다는것

 

3. 우리가 작업하는 PS 쉐이더는 선형공간이다라는것( 특별한 강조, 감쇄가 필요없는 )

 

4. 따라서, 우리가 사용하는 보통의 텍스쳐들은

PS 쉐이더에서 pow( rgb, 2.2 ) 로 색을 강조해주어야 정확한 색상값을 얻어온다는 것

 

 

우리는 sdr 에서, 지금껏 잘못된 이미지색상들을 

진짜 색상인줄 착각하고 사용해 왔다는 것이다!

 

 

어쨋든, gamma collection 은

pow( rgb, 2.2 ) 또는 pow( rgb, 1/2.2 ) 로,

감마수치로 rgb 값을 증감시켜주는 모든 계산을 통틀어서 지칭하는 것이다

 

 

그러니까,

이 gamma collection 은 꼭 hdr 에만, 국한되는 이야기는 아니다,

sdr 에서도 꼭 필요한 작업이라는 이야기다

 

 

나는 감마컬렉션에 대해서 착각하고 있었다

이것은 정확한 색상값 결정을 위해

꼭 필요한 과정이었다

 

 

float3 Gamma_LinearSpace( float3 _rgb )
{
        return pow( _rgb, 2.2 );
}

 

float4 Tex = tex2D( Samp_Tex, UV );
Tex.rgb = Gamma_LinearSpace( Tex.rgb );

 

외부 이미지를 읽어들일때엔, 감마강조를 적용하고,

(외부이미지를 가져올때만 적용시켜주면 된다,

배경이미지, 하늘, 캐릭터, 이펙트 모두에 해당하는 사항이다)

 

테스트해보니,

노말맵에는 적용시키면, 결과가 이상하게 된다,

원본이미지들, 스펙큘러이미지 들에 사용해주면 되겠다

 

그리고,

 

우리가 편집툴처럼 이미지를 저장하지는 않지만,

우리가 만든 최종적인 출력화면 역시, 모니터로 보내기전에

감마감소를 해주어야 정확한 출력결과를 볼수있다

 

float3 Gamma_ForMonitor( float3 _rgb, float _f = 0.45454545 )
{
        return pow( _rgb, _f ); // 0.45454545 = 1/2.2
}

 

Out.rgb = Gamma_ForMonitor( Out.rgb );

 

PS 에 적용하는 과정은 매우 쉽다!

 

 

 

sdr 상태 ( 아무것도 하지않은 )

 

hdr 톤맵만 적용

 

hdr 톤맵, 감마컬렉션 적용

 

음, 스펙큘러 반사로 하얗던 부분이 좀 정리가 되어,

봐줄만하게 되었다

 

그런데, 의문인것은

Gamma_ForMonitor 계산을 살펴보면, 색상이 밝아지게되고,

0.1 -> 0.3

0.5 -> 0.7

0.9 -> 0.93

 

결과적으로는,

모니터 자체 감마강조가 있었겠지만,

전체적으로, 화면이 밝아진다는 것이다,

 

 

전체 라이트의 디퓨즈값과 엠비언트 값을 어둡게 주었기 때문에,

어두운 화면이 되어야 하는데,

(아, 맞다, 위의 이미지들에는 약간의 블룸이 더해진 상태이다,

코드를 정리하면서 블룸도 켜놓았던걸 깜박했다,

블룸을 끄면, 모든 스샷이 조금씩 전체적으로 어두워진다, 참고하자)

 

위, 스샷들을 보면,

디퓨즈값과 앰비언트값을 어둡게 주었음에도 불구하고,

꽤 밝은 화면들이다,

 

화면의 밝기에 대한 것이라면, 생각해 볼만한 부분이 있다

휘도맵( luminance )

 

우리들은, 화면의 휘도(luminance)맵을 구해서,

톤맵핑을 하기전에, 화면을 밝거나 어둡게 조절할수 있다

 

다음장에서는 휘도맵에 대해서 살펴보자

728x90
posted by BK dddDang
: