2. Agenda HDR, Tone Mapping, Luminance Gamma Filmic HDR in Uncharted2 Q&A
3. HDR HDR : High Dynamic Range 디스플레이의 밝기/색상범위 등에 얽매이지 않고 폭넓은 밝기/색상범위를 수행하는 것 RGBA 24Bit Color = 1677만색= 70dB 실제 세계 = 1012색 = 120dB 16Bit Color = 4.4* 1012 = 120dB 어둠 달밤 여명 방안 햇빛 원추체 : 밝은 빛이나 색을 느낌 간상체: 어두운 빛을 느낌 dB = 10 * Log10(X) 1012 = 120dB 원추체 간상체
4. HDR HDR로 얻을 수 있는 이점 음영을 큰 손실 없이 리얼하게 표현 노출 시뮬레이션 눈부심 표현
5. 음영표현 예 아스팔트 반사율 7% 0~255에서는 18 어둡다! 하지만 현실에서는 둔하게나마 빛나 보임! 태양은 255보다 훨씬 큰 휘도를 갖기 때문에… 아스팔트 <<넘사벽<<태양
7. 노출 시뮬레이션 인간이 지각할 수 있는 Dynamic Range 80~120dB, 10-6 ~ 106 하지만 보고 있는 Scene의 최대or평균 휘도에 영향을 많이 받음 액정을 어두운 곳에서 보았을 때 대낮의 야외에서 보았을 때 광채(Iris)라는 눈의 부위가 안구로 통하는 광량을 조정하고 있기 때문에
8. 노출 시뮬레이션 Scene의 평균 휘도를 구한 후 Tone Mapping을 실행하면 적정 휘도로 Scene을 표현할 수 있다! 즉 눈의 광채가 광량을 보기 편하게 조정하는 동작을 흉내 낼 수 있다. Tone Mapping HDR 영상을 디스플레이로 표현하기 위한 색상 조정/가공 과정
9. 노출 시뮬레이션 어두운 곳에 눈이 익숙해져 있는 상태에서 밝은 곳으로 이동하면 사물이 눈부시게 보인다. 밝은 곳에서 일정 시간이 지난 후에야 노출이 적절하게 보정된다.
10. 눈부심 표현 휘도가 높은 빛이 렌즈 안에서 반사되거나 속눈썹에서 회절 되어서 생기는 현상 Bloom : 고휘도의 빛이 희미하게 넘침 Glare : 고휘도의 물체에서 나오는 빛줄기 < Bloom(좌) / Glare(우) >
11. HDR Process HDR 프레임버퍼 HDR 텍스쳐 Tone Mapping HDR 광원 표시 Bloom/Glare HDR 렌더타겟 동적인 환경맵 등을 이용 HDR 텍스쳐 Int8 LDR 텍스쳐여도 상관없지만 환경 맵이나 자체 발광 텍스쳐는HDR을 사용하는 것이 좋음
12. 유사 HDR Int8 LDR 텍스쳐 사용 0~255 색 0~1 휘도 (보통의 경우) 0~255 색 0~2or0~4 휘도 (색표현↓휘도↑) DXTC 압축이 가능 < 0~1(좌), 0~2(중), 0~4(우) >
13. 유사 HDR 로스트플래닛 (2007) 압축 기법 DXT5 이용 {r,g,b,1.0} 중 최대값 M 선택 인코딩: {r/M, g/M, b/M, 1/M} = {R, G, B, A} 디코딩: {R/A, G/A, B/A} = {R*M, G*M, B*M} 단점 알파값을 사용할 수 없음 R,G,B의 차이가 크면 해상도가 떨어짐
14. Bloom/Glare Bloom 평균 휘도 계산 고휘도 추출 (Tone Mapping과 연관) 고휘도 부분 Blur Gaussian Filter 1/4 통합 1/8 1/16 1/32
30. Gamma Gamma? TV에서 수상부 입력 전압에 대한 음극선관 휘도와 피사체 휘도에 대한 카메라 출력 전압의 비율 γ, r로표기 Gamma와 CRT TV나모니터 속에는 형광물질이 발라진 CRT가 있는데이 CRT는 발광소자의 특성 및 기술적 한계로 인해 전기 신호의 입력값을 비례적으로 재현하지 못한다. CRT의 입력과 출력 비율은 평균 2.2 대부분 2.0~2.4 vs Mac 1.72
31. Gamma 우리가 보는 일반 모니터도 r2.2 제대로 보이는 이유는 이미지가 밝게 보정되어 저장되어있기 때문
41. Linear Space Lighting Diffuse Map Gamma Space Normal Map Linear Space Specular Uncharted 2 : Linear 하지만 Gamma Space가 맞는것 같다. Ambient Occlusion Uncharted 2 : Linear 하지만 Gamma Space가 맞는것 같다.
52. Filmic Tone Mapping by Jim Hejl, Richard Burgess-Dawson 이전 페이지 버전의 근사/최적화 pow(1/2.2) 불필요 float4 ps_main( float2 texCoord : TEXCOORD0 ) : COLOR { float3 texColor = tex2D(Texture0, texCoord ); float3 x = max(0,texColor-0.004); float3 retColor = (x*(6.2*x+.5))/(x*(6.2*x+1.7)+0.06); return float4(retColor,1); }
53. Filmic Tone Mapping float A = 0.15; // Shoulder Strength float B = 0.50; // Linear Strength float C = 0.10; // Linear Angle float D = 0.20; // Toe Strength float E = 0.02; // Toe Numerator (분자) float F = 0.30; // Toe Denominator (분모) float W = 11.2; // Linear White Point Value float3 Uncharted2Tonemap(float3 x) { return ((x*(A*x+C*B)+D*E)/(x*(A*x+B)+D*F))-E/F; } float4 ps_main( float2 texCoord : TEXCOORD0 ) : COLOR { float3 texColor = tex2D(Texture0, texCoord ); float ExposureBias = 2.0f; float3 curr = Uncharted2Tonemap(ExposureBias*texColor); float3 whiteScale = 1.0f/Uncharted2Tonemap(W); float3 color = curr*whiteScale; return float4( pow(color, 1/2.2), 1 ); } Toe, Shoulder 등을 조정할 수 있음 pow(1/2.2) 필요함
54. Filmic Tone Mapping 적용하려면… Lighting 모두를 손대야 할 수도 있다. LDR 상태에서 Lighting을 조정(Tweak)했다면 단순히 공식 적용하는 것만으로는 부족하다.
55. References Filmic Tone Mapping http://filmicgames.com/ http://www.slideshare.net/ozlael/hable-john-uncharted2-hdr-lighting?from=ss_embed HDR/Luminance http://kyruie.tistory.com/13#ph1_12 http://allosha.tistory.com/category/3D%20%EA%B7%B8%EB%9E%98%ED%94%BD%EC%8A%A4%20%EB%A7%A4%EB%8B%88%EC%95%85%EC%8A%A4/HDR%20%EB%A0%8C%EB%8D%94%EB%A7%81 Linear Space GPU Gems 3, Chapter 24