29
High Dynamic Range Kasa Study(www.dev3d.net ) 이이이 ([email protected] ) 2010.10.31

High dynamic range

Embed Size (px)

DESCRIPTION

Kasa에서 발표한 HDR 발표 문서입니다.cagetu.egloos.com

Citation preview

Page 1: High dynamic range

High Dynamic Range

Kasa Study(www.dev3d.net)이창희 ([email protected])

2010.10.31

Page 2: High dynamic range

HDR?• High Dynamic Range 의 약자• 이미 현시대 게임에서는 보편화된 기능

• 특별히 설명할 말 없음… ㅌㅌㅌ– ( 앞으로 나오는 것들도 설명은 간략히 넘어가겠

음 )

Page 3: High dynamic range

HDR?• 왜 HDR 을 발표할까 ?

– 널리 사용되고 있지만 , 결과가 좋게 나오게 하기란 생각보다 쉬운 작업이 아님 .– 생각보다 많은 작업자들은 DirectX Sample에 의존적인 듯

• 구현에 대한 설명이 너무 부족함– GDC, SIGGRAPH, CEDEC 에서는 아직도 HDR 이 언급된 발표가 이어지고

있음 .• Uncharted2, tri-Ace 사의 발표 등…

• 우리가 게임에서 구현하는 그래픽은 Realistic 이 아니라 , Photo-Real-istic 한 것 !!!!!– 결국 HDR 은 그 시작 !!!

• 결국 좋은 결과물을 얻기 위해서는 HDR 과정에 대한 전반적은 이해가 필요함

Page 4: High dynamic range

HDR 작업 목록

Page 5: High dynamic range

HDR Data• HDR 을 처리하기 위해서는 HDR 데이터가

필요 . 즉 , 0~1 사이 이상으로 정보가 기록되어 있어야 함 .–간단하게 Floating Texture 를 사용• A16FR16FG16GB16F

– HDR Data 압축하기• LogLUV, RGBE

Page 6: High dynamic range

HDR Data 압축• LogLUV

– Playstation3 에서는 Floating Texture 를 사용할 수 없기 때문에 , HDR 을 표현하기 위한 압축 기술이 연구되었고 , 그 중 가장 보편적으로 사용되는 방법이 LogLUV 압축임• Heavenly Sword 에서 사용하기 시작

– http://www.anyhere.com/gward/papers/jgtpap1.pdf– 그냥 Color 를 압축해서 , 복원하는 식이라면 , 그렇게 눈에 띄는

결함이 없음 .– 하지만 , Luminance 를 구하는 과정에서 손실이 많아서 ,

상대적으로 디테일이 많이 떨어짐 .

Page 7: High dynamic range

Gamma Correction• HDR 처리의 linear space 에 color

정보가 되어 있다고 가정한다 .• 즉 , gamma 가 1.0 이 되어야 함을 의미

Page 8: High dynamic range

Gamma Correction (Cont’)

• Post-Processing 을 작업할 때에는– 처음 텍셀을 sRGB->linear 변환을 해주고 , 마지막

Step 의 마지막 Pass 에서 linear->sRGB 변환을 해줘야 한다 .

Page 9: High dynamic range

Linear-Space Lighting: Conclu-sion

“Drake! You must believe in linear-space lighting!”

[Uncharted 2 : HDR Lighting] 에서 발췌

Page 10: High dynamic range

Tone Mapping• HDR 영역을 LDR 영역으로 표현하기 위한 방법

– 평균 Luminance 를 중심으로 0~1 사이의 값으로 매핑 .

• 즉 , 우리가 해야 할 것은1. 평균 Luminance 를 구하고 ,

• Luminance 구하기2. Luminance 를 중심으로 0~1 사이로• Tone Mapping Operator

Page 11: High dynamic range

Luminance 구하기

• Luminance 는 빛의 밝기를 의미 • 위의 공식을 이용하여 , 평균 Luminance 를 구함 .

– 최종 결과는 1x1 Luminance

• 장면의 평균 밝기는 각 픽셀의 밝기를 구하는 것부터 출발– 각 픽셀의 밝기 구하기 ?

Page 12: High dynamic range

RGB -> Luminance• RGB 를 Luminance 를 변환

1. Luminance 상수를 이용하여 , Luminance 계산• LUMINANCE = float3(0.2125f, 0.7154f, 0.0721f);

dot(rgb, LUMINANCE);• Luminance 를 다시 RGB 로 전환 불가

2. CIE Yxy Encoding 을 이용하여 , 압축• RGB -> CIE XYZ -> CIE Yxy (Y 값이 Luminance)• 이후 Tone mapping 을 통한 luminance 의 값의 변화를

가지고 다시 RGB 로 변환이 가능

Page 13: High dynamic range

Luminance Adapation• 광적응 효과

– 갑자기 어두운 곳에서 밝은 곳으로 나왔다거나 , 밝은 곳에서 어두운 곳으로 들어갔을 때의 서서히 눈이 적응하는 효과

• 시간에 따라 , 갱신할 장면의 luminance 로 변경

• Luminance History Function – 급작스러운 변화를 막기 위해서 , 이전 16프레임의 Luminance 값을 저장하고

있다가 , 그 값과 비교하여 , 변경되었다고 판단될 경우에만 luminance 를 갱신• 16Frame의 Lumiance를 저장하기 위해서 4x4 렌더타겟이 필요

Page 14: High dynamic range

Middle Grey

– 현재 장면의 Luminance 가 0.36 이고 , middle bright value가 0.18 이라고 한다면 , 최종 이미지의 luminance value 는 원본 이미지의 절반의 값의 범위가 되는 것이다 . ( 노출 정도라고 봐도 된다 .)

• 날씨의 변화나 시간에 따라 , 이 값이 변화될 필요가 있다 .– Middle grey 는 일반적으로 0.18

• 자동으로 구할 수도 있다 . (Auto Exposure)

Page 15: High dynamic range

Tone Mapping Operator• 실제 LDR 로 변환하는 과정을 처리하는 연산자• 어떤 톤 매핑 연산을 사용했느냐에 따라 느낌이 다름

– Reinhard 가 발표한 공식에서 발전하기 시작– Star Ocean 4 에서는 공식이 아니라 , 실제 카메라의 C-MOS 정보

등을 기초로 하여 , Flim 스럽게 만들기도 함 .– Uncharted2 에서 Flimic Tonemapping 을 언급하면서 화두 !!

• Tone Mapping Operator– Reinhard (+Modified)– Flimic– Uncharted2

Page 16: High dynamic range

Reinhard• Reinhard

– LumScaled : 이전에 구한 노출 정도

• Reinhard(Modified)– 흰색의 경우 , 매우 밝게 조절된 형태로 원할 수도 있기 때문에 , 새로운 공식이 등장– 흰색은 LDR 이미지를 톤매핑할 때 , 명암의 감소를 최소화 한다 . 이는 White Clamping

이라고 부르기도 한다 .

• “Interactive Time-Dependent Tone Mapping Using Programmable Graphics Hardware”– 최종 색상을 결정할 때 , 아래와 같이 Saturation을 적용

• LumCompressed * pow(color / pixelLuminance, LUMINANCE_SATURATION);

Page 17: High dynamic range

Flimic• John Hable 이 Unchated2 HDR Light-

ing 발표 문서에서 소개한 내용• Flim 에서의 색상 Curve 가 더 나은 결과를

보여준다는 것에서 착안• Reinhard 와 비교– Reinhard 가 상대적으로 Grayish

Page 18: High dynamic range

Flimic Tone Mapping

x = max(0, LinearColor-0.004);GammaColor = (x*(6.2*x+0.5))/(x*(6.2*x+1.7)+0.06);

• pow(x,1/2.2) 가 포함되어 있다 . • 즉 , Gamma Correction 을 위해 , Albedo 텍스쳐를 읽을 때 ,

pow(x, 2.2) 를 해주었다면 , 모니터로 보낼 때 , pow(x, 1/2.2) 를 해주어야 하지만 , 이 공식에는 Bake 되어 있기 때문에 , 별도의 과정이 필요없다 .

• 하지만 , 일반적으로 마지막 패스에서 pow(x, 1/2.2) 를 해주기 때문에 , 이 공식을 사용할 경우 , 결과에 pow(1, 2.2) 를 해주어서 , 최종 패스에서 처리하는 결과와 맞춰주어야 한다 .

[Uncharted 2 : HDR Lighting] 에서 발췌

Page 19: High dynamic range

Uncharted 2• John Hable 의 Blog

를 통해서 , Fixed 된 버전이라고 소개 .

• Gamma 보정을 최종적으로 적용해주어야 한다 . (pow(x, 1/2.2))

Page 20: High dynamic range

Glare(Bloom)• Bright Pass– Tone Mapping 을

그대로 적용– Threshold 를 적절히

조절• 특별히 복잡한 작업

공정이 필요하지 않음• 하지만……

Page 21: High dynamic range

Glare (Cont’)• 실제 화상에서는 어지간히 강한 빛이 아니면 , 큰 Glare 가 나오지

않는다 .– 결과적으로 렌더링 화상의 Dynamic Range(DR) 가 본래의 DR 에 비해

충분하지않기 때문에 , Threshold 값을 낮춤으로서 강제로 Glare 를 만들기를 시도한다 .

• 그 결과 , Diffuse 에서도 부자연스럽게 Glare 가 나오는 현상과 색상 정보다 전부 타들어간 듯이 날아가 버리는 현상이 자주 발생한다 .– 뭔가 저렴해 보인다 !!!!!!

• 즉 , 적합한 HDR 연산을 통한 처리와 물리적인 라이팅이 뒷받침 되지 않는다면 , 이런 문제가 발생하기 쉽다 .

Page 22: High dynamic range

Pipeline

Page 23: High dynamic range

Pipeline(Cont’)• 톤매핑을 선행해

서 , 이미 고휘도 부분을 추출한 상태이기 때문에 , 순서가 변경되어도 특별히 부자연스러운 부분이 없다 .

• 오히려 , 연산량을 줄일 수 있는 장점이 있을 것으로 보임

Page 24: High dynamic range

기타 효과• Vignette

– 카메라 렌즈의 구경에 따라 사진의 테두리 쪽으로 약간의 노이즈가 생기는 현상 . 특히 , 오래된 사진기일 수록 많이 발생

• Blue Shift– 매우 낮은 밝기가 되어 , 작은 수의 간상체 (rod) 가 남게되고 , 추상체 (cone)

이 주 광자 수용체가 되게 되면 , 파란색 색조로 색상 전환이 이루어 진다 .

• Grain Filter– 어두운 곳으로 가면 , 눈에 들어오는 광자가 적어지는 까닭에 노이즈가 심하고

전반적으로 디테일이 떨어지는 현상도 발생한다 .• 어두운 곳에서 사진을 찍으면 , 화면이 깨진 것 같은 느낌 !

Page 25: High dynamic range

Channel-Based Color Correc-tion

• Levels– Photoshop 에서의 Levels command– Gamma, contrast, 전체 이미지의 dynamic

range 를 수정하거나 독립적으로 채널 색상에 대한 속성들을 조정할 수 있다 .

• Curves– 생략

Page 26: High dynamic range

결론• 실제 작업해보면 , 위의 내용들이 대단히 쉽지 않은 과정임을 알 수

있음 .– 공부해둬야 할 것도 한 트럭 !!

• 하지만 , 향후 렌더링 프로세스 전반에 영향을 주는 가장 기본적이고 중요한 작업 과정– 이것은 끝이 아닌 시작 !!

• Tone Mapping Operator 의 경우 , 어떤 것이 좋은 지는 결과를 보고 각자 판단하는 것이 좋을 듯 .

• 파이프라인이 길어서 , 컨트롤할 Parameter 들이 많으니 , 비교적 많은 테스트가 필요 .– Parameter 들에 대한 결과가 꽤나 민감함 !!!

Page 27: High dynamic range

참고자료• “CrazyXIII : HDR”를 참고하시오 !!!• DirectX Sample “HDR Lighting”• Kasa 이전 발표 – “ Conversion Color

Space & Filtering” - 이창희

Page 28: High dynamic range

Q & A

Page 29: High dynamic range

다음 편 예고• “Physically Based Shading Model”• SIGGRAPH10 에서 발표된 내용

– 이전부터 이야기는 있었던 듯 (By Tri-ace 社 )

• 사실 HDR 에 대한 정리 작업은 이 과정을 잘하기 위한 선행 작업이었음 .

• Brief– Glare를 조절하기 위해서 , Threshold 값에만 의존하십니까?

• Threshold 를 만지면 , 전체 화면이 뭉개진다 !!!!

– 이 문제는 물체가 가지는 dynamic range의 값 자체가 잘못 되어서 그런거임…• 그럼 잘하려면 ?