1 / 39

HDR Meets Black & White 2

HDR Meets Black & White 2. Shader Study 10.06.07 임정 환. What’s HDR rendering. 1.0 보다 큰 color luminance 를 표현할 수 있는 format 이 필요 Display device 들은 LDR 이라 HDR 에서 LDR 로 변환시켜줘야함. Why HDR?. 밝고 어두운 것을 명확하게 표현 밝고 어두움이 극명하게 표현된 씬에서 saturating 없이 표현. Black & white2 by night.

hal
Télécharger la présentation

HDR Meets Black & White 2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. HDR Meets Black & White 2 Shader Study 10.06.07 임정환

  2. What’s HDR rendering • 1.0보다 큰 color luminance를 표현할 수 있는 format이 필요 • Display device들은 LDR이라 HDR에서 LDR로 변환시켜줘야함

  3. Why HDR? • 밝고 어두운 것을 명확하게 표현 • 밝고 어두움이 극명하게 표현된 씬에서 saturating 없이 표현

  4. Black& white2 by night • 모든 케이스에 들어맞는 lighting을 셋업하기 참힘듬 • 특히 밤 Scene은 low dynamic rage때문에 아주 참기힘들정도였다는 • HDR rendering과 auto exposure를 도입하여 밤 scene에서 visual 퀄리티를 향상시킴

  5. Black& white2 by night(2) 밤에는 luminance 히스토그램의 95퍼센트가 0.5보다 적은 값임

  6. color luminance • 빠르고 간편함 : HSL space에서 직관적으로 color 밝기를 표현할수 있는 값임 • RGB로부터 luminance = dot(color, LUMINANCE_VECTOR) • LUMINANCE_VECTOR ( 0.2125, 0.7154, 0.0721)

  7. HSL vs HSV

  8. Tonemapping • 간단한 톤매핑 if (luminance > 1.0) color = white • 간단하지만 좀 더 생각해 볼 톤매핑 new_luminance= luminance / max_luminance new_color = color * new_luminance / luminance • 그러나 Tone mapping은 아티스트가 관여해야 함, 아티스트로부터의 input을 받는 것이 필요

  9. HDR in Games • 이 당시에는….(2005년) • Half Life 2 Lost Coast (HDRL) • Far Cry and Splinter Cell (HDRR) • Some XBOX 360 Games

  10. HDR “a la” Half Life 2 (1) • High dynamic range values를 사용함 • Frame buffer에 결과값을 쓰기전에 라이팅 계산의 마지막에 Tone map • D3DFMT_A8R8G8B8 render target 사용

  11. HDR “a la” Half Life 2 (2) • 장점: • HDR hardware를 요구하지 않음 • MSAA 호환가능, 상대적으로 값싼 • 단점 • tone mapping 포함하기위해 각각의 모든shader를 만져줘야했음 • Scene의 전체적인 dynamic range를 이해하기 힘들었음 • 많이 overdraw되면 값이 비쌈(?)

  12. HDR : The “floating” way(1) • High dynamic range를 사용하여 lighting 계산하는것은 결과값은 Floating point(16,32 bit per component) render target에 값을 기입하는 것(D3DFMT_A16FG16FB16F) • 평균,최대 luminance를 HDR Image로부터 계산한다. • HDR image를 LDR render target으로 tone map한다.

  13. HDR : The “floating” way(2) • 장점 • 픽셀당 고정되고 예측가능한 코스트가 든다. • 높은 정밀성, 평균값과 최대값을 이용함으로써 노출도를 쉽게 조정가능하다. • 단점 • 비싸다. 많은 bandwidth가 요구된다. 많은 메모리도 요구(fp16 render target) • 최신의 하드웨어에서만 이용가능(이당시) • MSAA와 잘 맞지않다. MSAA를 해결할 수 있는 하드웨어적 지원이 필요함

  14. Other ways to do HDR • HDR 컬러를 표현가능한 RGBE를 사용 • manually하게 blending해줘야함 • NO MSAA • HSL에서 더 많은 BIT를 L에 할당을 하고 계산한다. • 올바르게 구현하기 어렵고, 값이 비쌈 • 애네들은16-bit floating-point를 썻다고 함

  15. High Quality 32-Bit HDR Colors with LogLUV(책에있는챕터) • CIE Luv – 3가지 요소 • L – Luminance • u,v – Chromaticity coordinate • 우선 RGB -> XYZ 로 변형 • 그다음XYZ -> CIE Luv로

  16. High Quality 32-Bit HDR Colors with LogLUV (책) L = Y

  17. High Quality 32-Bit HDR Colors with LogLUV (책) • U,v는 8비트로 L은 16 bit logarithm으로 저장 • Shader를 사용하여 가능 • 장점 • 4 byte로 표현가능 • 계산이 쉬움 • 단점 • Alpha blending 에 제약이있음 • LogLuv texture를 sampling하면 artifact가 있음(왜냐하면 LogLuv가 linear하지 못하기 때문이라고 함)

  18. High Quality 32-Bit HDR Colors with LogLUV (책) float eps = pow(2, -64); float3x3 mRGB_to_XYZ = { {0.497, 0.256, 0.023}, {0.339, 0.678, 0.113}, {0.164, 0.066, 0.864} }; float4 ConvertRGBToLogLuv(float3 RGB) { float3 XYZ = mul(mRGB_to_XYZ, RGB); XYZ = max(XYZ, float3(eps, eps, eps)); //avoid by 0 float2 xy = XYZ.xz / dot( float3(1,1,1), XYZ); float2 uv = float4(4, 9) * xy / dot(float3(-2,12,3), float3(xy, 1)); float LogL = 256 * log(XYZ,y + 64); //avoid neg value float LogL_LSB = frac(LogL); // get 8 least significant bits; return float4(uv, LogL_LSB, LogL); }

  19. Tonemapping(책) • Lw는 mapping되어지는 pixel의 luminance • Lwhite는 완전 하얀색에 mapping될 가장 작은 luminance • Lmin은 완전 검정색에 mapping될 가장 작은 luminance • Lave는 scene의 평균 luminance • Ld(x,y)는 coordinate x,y위치에 [0..1] 사이의 값으로 새로구해져매핑될luminance 이해하기 쉽고 아티스트가 조정가능하면서realtime에 적합한 Tone Mapping 이다~

  20. Minimum, Maximum, and Average Luminance(책) • 최대값, 최소값, 평균값을 다운 샘플하면서Average 구할수 있다.

  21. Average luminance and the GPU • 평균luminance를 구하는 것은 전형적인 ‘gathering’ operation인데… • GPU는 data를 gathering하기에 좋지 않음 • CPU가 매우좋다.

  22. Average luminance and the CPU • HDR 이미지를 메인메모리로다시가져와야한다. • 메우느림(PCI-E 에서는 그렇게 느리지는 않다고함) • 다음 콘솔환경에서는 문제가 되지 않을것으로 봄 • 전체 image histogram을 계산해보자.

  23. Image Histogram(책) • 씬에서min,max,avg값을 구하는 것은 이미 전체영역에 대한 모든 픽셀들에 대한 계산이 요구되는 작업임 • 여기에다가 약간의 작업을 좀 더 추가하면 더 많은 정보를 얻어낼 수 있다. • Luminance 를 단계(슬롯)를 나누어 구분하자.(예를 들어 1024) • 각 슬롯들은 해당되는 luminance를 가지는 픽셀들의 숫자를 기록함

  24. Image Histogram • 최대값과 최소값을 찾자(Lmax, Lmin) • Luminance range를 확실한 숫자슬롯으로 나누자(예를들어 1024) • 각 슬롯마다 픽셀의 숫자를 찾자. • Frequency를 얻기위해 각 슬롯을 픽셀의 숫자로 나누자.

  25. Histogram Equalisation(1) • 여기서는전체dynamic range를 이용할 수 있게균등화할 수 있는 image histogram로 바꿔봅시다.~

  26. Histogram Equalisation(2) • From “Digital image processing”, page 91-93: • Input image에서 R의 luminance를 가지는 각각의 slot들을 S로 mapping 시킨다. • S는 R보다 작거나 같은 모든 frequency들의 합

  27. AutoExposure(1) • 균등화된 histogram으로부터Lnew_min, Lnew_max, Lnew_avg를 계산해내자. • Lnew_min은 S가Pmin보다 큰 첫번째 slot임.. • Lnew_max는 S가Pmax보다 큰 첫번째 slot임 • Lnew_avg는 S가Pavg보다 큰 첫번째 slot임 • 일반적으로Pmin, Pmax, Pavg는 0.01(1%), 0.99(99%), 0.50(50%) 임

  28. AutoExposure(2) • 최소값과 최대값의 percentage는 매우작은 부분의 밝거나 어두운 지역을 무시해버릴수도있음..

  29. AutoExposure(3) • Auto exposure는 최소값,최대값,평균값을 트래킹함으로써 구현된다. • Act_value += new_value * (1.0f –pow(1.0f – speed, 30.0f * elapsed_time)); • Speed는 아티스트가 조절가능한 숫자로 얼마나 빨리 노출도가 적용되는가를 나타낸다.

  30. Luminance mapping(1) • Luminance mapping을 저장할 1024 * 1 짜리 texture를 만든다. • Lact_min보다 적은 luminance는 0.0으로 매핑 • Lact_max보다 큰 것은 1.0으로 매핑(그러면 bloomed) • 나머지 영역은 간단한 gamma ramp로 map할수있다. float xp = 1.0f + (Lact_avg – Lact_min)/(Lact_max-Lact_min); gamma_ramp= powf(x, xp + bias);

  31. Luminance mapping(2) • Bias 값은 scene 에 contrast를 증감시킬수있는 값이다. • 낮에는contrast를 높게 • 밤에는 낮게

  32. Luminance mapping(3) • 아티팩트를줄이기위해 luminance map은 D3DFMT_R16F 로 • Tone mapper에서의 픽셀쉐이더 Float Li = dot(colorln, LUMINANCE_VECTOR); Float Ld = tex1D(LuminanceMapSampler, Li); colorOut.rgb = LuminanceScale * (Colorln.rgb/Li)*Ld;

  33. Histogram based HDR Pros and Cons • 장점(Pros.) • GPU파워를 위해 GPU에서 CPU로 bandwidth를 옮길수있다.(보통 남지만 그러나 부족한) • 이미지를 특색있게컨트롤할수있음 • 매우 flexible하고 simple한 pixel shader tone mapper • 3d texture들에 기초한 color correction techniques로 plug하기 쉽다.(색변형시키기 쉽다) • 단점(Cons) • 많은 GPU에서 CPU로의 bandwidth가 필요함 • 그러나 console에서는 free • HDR image의 더블 buffer에 많은 메모리가 필요하다. • HDR IMAGE를 분석하는데 CPU 사이클이 필요하다.

  34. HDR in Black & White 2 • B&W에서는 HDR을 끼워넣는데 부분적인 수정만하였다. • 기존의Shader를 수정할 필요가없음 • Art asset을 수정할 필요없음 • HDR의 장점을 잘이용하기위해 아티스트가 Process중간에서 개입할필요는있다.

  35. Performance analysis • Origin size(1024*768)은 대략 6MB의 video Ram을 더먹고 4xMSAA를 사용하면 최대 25MB까지 더 먹음.. • 1024*768 fp16 의 scaled down version은 대략 11mb/s의bandwidth를 요구한다. • 꽤 많이 먹네;; • 약 10ms 가 걸리며 분석하는데는 AMD64 3500mhz로 1ms가 걸린다.

  36. Before

  37. After

  38. Before

  39. After

More Related