highdynamicrange-101031082844-phpapp01

Download Report

Transcript highdynamicrange-101031082844-phpapp01

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