High dynamic range

3,555 views

Published on

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

Published in: Business, Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,555
On SlideShare
0
From Embeds
0
Number of Embeds
320
Actions
Shares
0
Downloads
46
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • 9
  • High dynamic range

    1. 1. High Dynamic Range Kasa Study(www.dev3d.net) 이창희(cagetu@softnette.com) 2010.10.31
    2. 2. HDR? • High Dynamic Range의 약자 • 이미 현시대 게임에서는 보편화된 기능 • 특별히 설명할 말 없음… ㅌㅌㅌ – (앞으로 나오는 것들도 설명은 간략히 넘어가 겠음)
    3. 3. HDR? • 왜 HDR을 발표할까? – 널리 사용되고 있지만, 결과가 좋게 나오게 하기란 생각보다 쉬 운 작업이 아님. – 생각보다 많은 작업자들은 DirectX Sample에 의존적인 듯 • 구현에 대한 설명이 너무 부족함 – GDC, SIGGRAPH, CEDEC에서는 아직도 HDR이 언급된 발표가 이어지고 있음. • Uncharted2, tri-Ace 사의 발표 등… • 우리가 게임에서 구현하는 그래픽은 Realistic이 아니라, Photo-Realistic 한 것!!!!! – 결국 HDR은 그 시작!!! • 결국 좋은 결과물을 얻기 위해서는 HDR 과정에 대한 전반적 은 이해가 필요함
    4. 4. HDR 작업 목록
    5. 5. HDR Data • HDR을 처리하기 위해서는 HDR 데이터가 필요. 즉, 0~1 사이 이상으로 정보가 기록 되어 있어야 함. – 간단하게 Floating Texture를 사용 • A16FR16FG16GB16F – HDR Data 압축하기 • LogLUV, RGBE
    6. 6. HDR Data 압축 • LogLUV – Playstation3에서는 Floating Texture를 사용할 수 없기 때 문에, HDR을 표현하기 위한 압축 기술이 연구되었고, 그 중 가장 보편적으로 사용되는 방법이 LogLUV 압축임 • Heavenly Sword에서 사용하기 시작 – http://www.anyhere.com/gward/papers/jgtpap1.pdf – 그냥 Color를 압축해서, 복원하는 식이라면, 그렇게 눈에 띄는 결함이 없음. – 하지만, Luminance를 구하는 과정에서 손실이 많아서, 상 대적으로 디테일이 많이 떨어짐.
    7. 7. Gamma Correction • HDR 처리의 linear space에 color 정보가 되어 있다고 가정한다. • 즉, gamma가 1.0이 되어야 함을 의미
    8. 8. Gamma Correction (Cont’) • Post-Processing을 작업할 때에는 – 처음 텍셀을 sRGB->linear 변환을 해주고, 마지막 Step의 마지막 Pass에서 linear->sRGB 변환을 해줘 야 한다.
    9. 9. Linear-Space Lighting: Conclusion “Drake! You must believe in linear-space lighting!” [Uncharted 2 : HDR Lighting]에서 발췌
    10. 10. Tone Mapping • HDR 영역을 LDR 영역으로 표현하기 위한 방법 – 평균 Luminance를 중심으로 0~1 사이의 값으로 매핑. • 즉, 우리가 해야 할 것은 1. 평균 Luminance를 구하고, • Luminance 구하기 2. Luminance를 중심으로 0~1 사이로 • Tone Mapping Operator
    11. 11. Luminance 구하기 • Luminance는 빛의 밝기를 의미 • 위의 공식을 이용하여, 평균 Luminance를 구함. – 최종 결과는 1x1 Luminance • 장면의 평균 밝기는 각 픽셀의 밝기를 구하는 것부 터 출발 – 각 픽셀의 밝기 구하기?
    12. 12. 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로 변환이 가능
    13. 13. Luminance Adapation • 광적응 효과 – 갑자기 어두운 곳에서 밝은 곳으로 나왔다거나, 밝은 곳에서 어 두운 곳으로 들어갔을 때의 서서히 눈이 적응하는 효과 • 시간에 따라, 갱신할 장면의 luminance로 변경 • Luminance History Function – 급작스러운 변화를 막기 위해서, 이전 16프레임의 Luminance값 을 저장하고 있다가, 그 값과 비교하여, 변경되었다고 판단될 경 우에만 luminance를 갱신 • 16Frame의 Lumiance를 저장하기 위해서 4x4 렌더타겟이 필요
    14. 14. Middle Grey – 현재 장면의 Luminance가 0.36이고, middle bright value 가 0.18이라고 한다면, 최종 이미지의 luminance value는 원본 이미지의 절반의 값의 범위가 되는 것이다. (노출 정 도라고 봐도 된다.) • 날씨의 변화나 시간에 따라, 이 값이 변화될 필요가 있 다. – Middle grey는 일반적으로 0.18 • 자동으로 구할 수도 있다. (Auto Exposure)
    15. 15. Tone Mapping Operator • 실제 LDR로 변환하는 과정을 처리하는 연산자 • 어떤 톤 매핑 연산을 사용했느냐에 따라 느낌이 다름 – Reinhard가 발표한 공식에서 발전하기 시작 – Star Ocean 4 에서는 공식이 아니라, 실제 카메라의 C-MOS 정 보 등을 기초로 하여, Flim 스럽게 만들기도 함. – Uncharted2에서 Flimic Tonemapping을 언급하면서 화두!! • Tone Mapping Operator – Reinhard (+Modified) – Flimic – Uncharted2
    16. 16. Reinhard • Reinhard – LumScaled : 이전에 구한 노출 정도 • Reinhard(Modified) – 흰색의 경우, 매우 밝게 조절된 형태로 원할 수도 있기 때문에, 새로운 공식이 등장 – 흰색은 LDR 이미지를 톤매핑할 때, 명암의 감소를 최소화 한다. 이는 White Clamping 이라고 부르기도 한다. • “Interactive Time-Dependent Tone Mapping Using Programmable Graphics Hardware” – 최종 색상을 결정할 때, 아래와 같이 Saturation을 적용 • LumCompressed * pow(color / pixelLuminance, LUMINANCE_SATURATION);
    17. 17. Flimic • John Hable이 Unchated2 HDR Lighting 발표 문서에서 소개한 내용 • Flim에서의 색상 Curve가 더 나은 결과를 보여준다는 것에서 착안 • Reinhard와 비교 – Reinhard가 상대적으로 Grayish
    18. 18. 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]에서 발췌
    19. 19. Uncharted 2 • John Hable의 Blog 를 통해서, Fixed 된 버전이라고 소개. • Gamma 보정을 최종 적으로 적용해주어야 한다. (pow(x, 1/2.2))
    20. 20. Glare(Bloom) • Bright Pass – Tone Mapping을 그대 로 적용 – Threshold를 적절히 조 절 • 특별히 복잡한 작업 공 정이 필요하지 않음 • 하지만……
    21. 21. Glare (Cont’) • 실제 화상에서는 어지간히 강한 빛이 아니면, 큰 Glare 가 나오지 않는다. – 결과적으로 렌더링 화상의 Dynamic Range(DR)가 본래의 DR에 비해 충분하지않기 때문에, Threshold 값을 낮춤으로 서 강제로 Glare를 만들기를 시도한다. • 그 결과, Diffuse에서도 부자연스럽게 Glare가 나오는 현상과 색상 정보다 전부 타들어간 듯이 날아가 버리 는 현상이 자주 발생한다. – 뭔가 저렴해 보인다!!!!!! • 즉, 적합한 HDR 연산을 통한 처리와 물리적인 라이팅 이 뒷받침 되지 않는다면, 이런 문제가 발생하기 쉽다.
    22. 22. Pipeline Tone Mapping Operation
    23. 23. Pipeline(Cont’) • 톤매핑을 선행해 서, 이미 고휘도 부분을 추출한 상태이기 때문에, 순서가 변경되어 도 특별히 부자 연스러운 부분이 없다. • 오히려, 연산량 을 줄일 수 있는 장점이 있을 것 으로 보임
    24. 24. 기타 효과 • Vignette – 카메라 렌즈의 구경에 따라 사진의 테두리 쪽으로 약간의 노이 즈가 생기는 현상. 특히, 오래된 사진기일 수록 많이 발생 • Blue Shift – 매우 낮은 밝기가 되어, 작은 수의 간상체(rod)가 남게되고, 추상 체(cone)이 주 광자 수용체가 되게 되면, 파란색 색조로 색상 전 환이 이루어 진다. • Grain Filter – 어두운 곳으로 가면, 눈에 들어오는 광자가 적어지는 까닭에 노 이즈가 심하고 전반적으로 디테일이 떨어지는 현상도 발생한다. • 어두운 곳에서 사진을 찍으면, 화면이 깨진 것 같은 느낌!
    25. 25. Channel-Based Color Correction • Levels – Photoshop에서의 Levels command – Gamma, contrast, 전체 이미지의 dynamic range 를 수정하거나 독립적으로 채널 색상에 대한 속성 들을 조정할 수 있다. • Curves – 생략
    26. 26. 결론 • 실제 작업해보면, 위의 내용들이 대단히 쉽지 않은 과 정임을 알 수 있음. – 공부해둬야 할 것도 한 트럭!! • 하지만, 향후 렌더링 프로세스 전반에 영향을 주는 가 장 기본적이고 중요한 작업 과정 – 이것은 끝이 아닌 시작!! • Tone Mapping Operator의 경우, 어떤 것이 좋은 지는 결과를 보고 각자 판단하는 것이 좋을 듯. • 파이프라인이 길어서, 컨트롤할 Parameter들이 많으니, 비교적 많은 테스트가 필요. – Parameter들에 대한 결과가 꽤나 민감함!!!
    27. 27. 참고자료 • “CrazyXIII : HDR”를 참고하시오!!! • DirectX Sample “HDR Lighting” • Kasa 이전 발표 – “Conversion Color Space & Filtering” - 이창희
    28. 28. Q & A
    29. 29. 다음 편 예고 • “Physically Based Shading Model” • SIGGRAPH10에서 발표된 내용 – 이전부터 이야기는 있었던 듯(By Tri-ace 社) • 사실 HDR에 대한 정리 작업은 이 과정을 잘하기 위한 선행 작업이었음. • Brief – Glare를 조절하기 위해서, Threshold 값에만 의존하십니까? • Threshold를 만지면, 전체 화면이 뭉개진다!!!! – 이 문제는 물체가 가지는 dynamic range의 값 자체가 잘못 되어 서 그런거임… • 그럼 잘하려면?

    ×