10. 1. 기존의 색상 표현
• 픽셀당 4Byte 표현
• 4Byte = 32bit
• R:8 G:8 B:8 A:8
• 각 색상당 1Byte(8bit), 256단계로 표현 가능(0~255)
• 모든 색을 표현하기에는 부족.
2. HDR
• 색상당 16비트 부동 소수점으로 표현
• 약 4.4 * 10 ^12 의 색상 표현 가능
• 기존의 RGB8은 LDR(Low Dynamic Range)라고 부름
3. 장면의 고휘도 값을 렌더링 파이프라인 전체에 유지, 그 결과를 디스플레이 장치에 출력할 수 있는
범위로 압축하는 과정.
• 모니터의 출력 허용치는 LDR 범위 (4bite RGB만 표시 가능)
• HDR은 모니터의 출력 범위를 넘어섬.
• HDR장면을 출력하기 위해서는 모니터의 출력 허용치인 LDR 범위로 압출해야 됨.
• 이 변환을 Tone Mapping이라고 함.
HDR(High Dynamic Range)
12. Tone Mapping의 필요성
HDR
0.0 1.0 2.0
LDR
1.00.0
LDR
2.01.0
0.0 ~2.0 범위의 HDR 이 있다면, LDR은 0~1, 혹은 1~2로 선택이 가능하다.
이것은 장면의 특성에 따라 휘도의 구간을 선택적으로 적용이 가능하게 된다.
17. LUT을 켠 최종 이미지.
Cool tint 가 적용 된 것을 볼 수 있음. (전의 이미지와 비교해보면 변경점이 보임)
18. 이것은 색 보정을 post process effect(후처리 효과)보다는 렌즈의 필터처럼 다룰 수 있게 해준다.
왜 색보정을 HDR에서 하고 싶었던 것일까?
19. 같은 샷, multiply mode로 강한 cyan을 적용. 구름의 하얀색이 변한 부분에 주목.
LDR 적용
20. LDR과 같은 조건인 multiply mode로 강한 cyan을 적용. 약간의 white가 구름속에 보이는 부분에 주목.
이것은 LDR에서는 masking이나 blend mode를 통해서 얻을 수 있지만, HDR에서는 자동으로 일어납니다.
HDR 적용
21. 이전 프로젝트에서 John Hable이 고안한 tone mapping 기능을 가지고 있었음.
HDR 값들을 LDR space로 변환시키는 것을 단순히 컨트롤하고 있었음.
같은 mapping효과를 친숙한 그래픽 소프트웨어(Photoshop 같은)의 curve editor를 통해 얻을 수 있음.
그리고 이러한 mapping을 grayscale의 LUT texture로 저장할 수 있습니다.
22. 하나의 HDR LUT texture에 color grading(색보정)과 tonemapping curve를 둘 다 부호화(encode)하기로 결정.
통상의 LUT는 0~1.0의 범위를 가지게 되나 여기에서는 0~2.0 sRGB의 범위를 가지게 됨.
4.0 sRGB까지 실험했고 기술적인 문제도 없었지만, uncharted4의 look에서는 필요 없었으므로 2.0 SRGB만 사용.
23.
24. HDR color grading과 tone mapping curve 에디팅에 Fusion 사용. (Nuke, Davinci도 상관 없음)
실시간 LUT의 보정이 가능하므로 color grading을 위해 스크린샷을 찍지 않아도 됨.
28. • Color grading(색 보정)은 LUT를 통해 구현.
• 3개(R,G,B)의 1D LUT 대신 조금 더 세련된 색 변환이 가능한 3D LUT 하나를 사용.
LUT(Color Look Up Table)
256 * 16 텍스쳐에 16 * 16 * 16 색 중립 LUT 모습
29. 1. Color grading을 하고자 하는 대표 스크린샷을 Photoshop에서 불러온다.
2. Photoshop에서 중립 256 * 16 LUT 로드. (unreal engine4 예제에서도 제공)
3. LUT를 스크린 샷 도큐먼트에 불여 넣는다.
4. Manipulatoin(색 조작)을 적용. (adjustment layer를 추가하는 식이 좋음)
5. 256 * 16 LUT를 선택하여 병합. (색 조작으로 LUT의 색상이 바뀌어 있음)
6. 엔진이 읽을 수 있는 비압축 포맷으로 저장.
7. 활용.
LUT(Color Look Up Table) 제작 방법
35. Fog의 color를 control하기위해 아티스트들이 만든 fog texture.
좌측의 하늘 texture와 연관된 fog texture.
Fog Texture의 위쪽 반은 좌측 하늘 텍스쳐와 color와 energy가 같음.
아래쪽 반은 수평선의 아래쪽 부분을 아티스트들이 직접 연장해서 만든 이미지.
36. Fog texture를 적용.
문제는 앞에 있는 물체와 뒤쪽에 있는 물체가 같은 fog color의 영향을 받는다는 것.
(실내나 벽 뒤에 있으면 문제가 더 심각해 짐)
37. 그래서, low mip(최고 해상도)를 수평에 사용, high mip(낮은 해상도)를 카메라 가까이 사용.
1 * 1 사이즈까지 fog texture 제작. (화면 전체를 하나의 평균 색상으로 표현할 수 있는 fog texture)
그 색상은 카메라와 목적지 사이의 파티클을 관통하는 빛의 축적임. (산란과 흡수계수의 오차는 있음)
39. Mip fog 랜더링은 꽤 그럴싸함.
왜냐하면, 씬의 다른 부분에서 오는 빛들을 반영했기 때문. (sky dome의 색상을 반영했기 때문)
40. Fog texture를 sample하기 위해서 카메라 벡터를 근사치로 mip fig texture를 적용해야 하는
sky의 UV space로 변환.
Fog의 농도를 별도로 계산하기 위해서 전통적으로 control하는 방법을 쓴다. (height falloff,
distance falloff, etc)
44. 카메라의 vector방향(Depth)으로
빌보드가 적용된 Fog plane이
중첩된 형태를 Fog 시스템이라고
가정한 모델.카메라
카메라 화각 (FOV)
Fog Plane
카메라 view
카메라 vecor
Fog를 아래와 같은 구조로 구현이 된다고 가정합니다. (실제 게임의 Fog 시스템과는 다릅니다.)
45. 카메라
카메라 view
카메라 vecor
Sky Dome
카메라 vector를 근사치로 sky의UV Space로 변환….의 의미.
게임에서 카메라를 통해 보이는 view는 sky
dome의 일부분이다.
이 view의 위치를 sky dome의 UV에서 찾는다.
46. 카메라 vector를 근사치로 sky의UV Space로 변환….의 의미.
Sky dome에 적용된 UV에서 하늘색 박스 부분이 실제 게임에서 카메라가 비추고 있는 화면 부분이다.
즉, sky dome이 texture를 적용하기 위해 가지고 있는 UV좌표 위에서 카메라 view의 좌표가 하늘색 박스.
카메라의 view를 sky dome의 UV space로 변환한다의 의미는 위와 같다.
Texture와
UV좌표
47. 카메라 vector를 근사치로 sky의UV Space로 변환….의 의미.
카메라의 view의 위치를 sky dome의 UV 좌표상에서 찾았으면, fog texture에서도 같은 위치를 찾는다.
Sky Dome UV space 에서의 위치
Fog Texture에서의 위치
48. 카메라
카메라 화각 (FOV)
Depth(Vector)에 따른 카메라 view 영역
카메라 vecor
카메라의 FOV 때문에 카메라의 Depth(Vector)값에 따라 카메라의 view에 비치는 fog plane의 영역이 달라진다.
49. 카메라의 Depth(Vector)에 따라 달라지는 view의 영역을 maipmap의 개념으로 이해하면
mipmap level 적용 부분의 이해가 쉽게된다.
카메라
카메라 화각 (FOV)
카메라 vecor
50. 자연에서 눈에 들어오는 빛은 직선으로 오는 빛 뿐만아니라 주변에서 반사된 여러 빛들이 동시에 들어옴.
Fog texture의전체를 사용하는 것도 아니고 일부를 sky dome의 UV space 에서 비교해서 찾아 사용.
그 부분이 mipmap level에따라 뭉게지면서 컬러(빛)들이 혼합되게 된다.
즉, 멀리 있을 수록 이 컬러(빛)들의 구분이 명확하지만(mipmap level이 낮음) 카메라와 가까울 수록 주변의
컬러(빛)과 혼합된 형태로 보여지게 된다. (mipmap level이 높음)
이런 이유로 mip fog 개념을 게임에 적용하면 빛의 축적, 산란계수 등을 근사치로 적용한 효과도 부가적으로
얻게 된다. (Fog는 카메라의 depth 값에 따라 밀도(중첩정도)가 달라지기 때문)