kcgs11_실시간 피사계 심도 렌더링 개선 기법

25
실시간 피사계 심도 렌더링 개선 기법 Advanced realtime postrendering techniques for depth of field 김성익 [email protected] 소프트네트 http://softnette.com 2011/7/6

Upload: noerror

Post on 02-Jul-2015

1.333 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: KCGS11_실시간 피사계 심도 렌더링 개선 기법

실시간 피사계 심도 렌더링 개선 기법Advanced realtime postrendering techniques for depth of field

김성익[email protected]

소프트네트http://softnette.com

2011/7/6

Page 2: KCGS11_실시간 피사계 심도 렌더링 개선 기법

피사계 심도

• 피사계 심도 (Depth of Field)사진 렌즈로 어떤 거리의 피사체에 초점을 맞출

때 초점이 맞는 범위

• 피사계 심도 이외의 영역이 흐려지는 현상

http://en.wikipedia.org/wiki/Depth_of_field

Page 3: KCGS11_실시간 피사계 심도 렌더링 개선 기법

피사계 심도

• 아웃-오프-포커스 (근경, 원경)

– 원경에는 인-포커스가 번지지 않음

– 근경은 인-포커스, 원경으로 번짐

• 인-포커스

– 선명한 이미지

Startcraft2 Effects & techniques(SIGGRAPH 2008)

http://graphics.stanford.edu/projects/lightfield/

Page 4: KCGS11_실시간 피사계 심도 렌더링 개선 기법

피사계 심도

• COC(Circle of Confusion)

– 흐려지는 범위

http://en.wikipedia.org/wiki/Circle_of_confusion

Page 5: KCGS11_실시간 피사계 심도 렌더링 개선 기법

포스트 랜더링 방식

• 포스트 프로세싱

– 랜더링된 이미지 기반으로 픽셀 단위 연산

– 추가적인 지오매트리 패스없이 렌더링된 결과

만을 가지고 처리

http://software.intel.com/en-us/articles/iir-gaussian-blur-

filter-implementation-using-intel-advanced-vector-extensions/

Page 6: KCGS11_실시간 피사계 심도 렌더링 개선 기법

실시간 피사계 심도

• 포스트 프로세싱

– 렌더링된 이미지를 블러링하고 합성하여 피사

계 심도 근사

• 입력

– 렌더링 결과

– 깊이맵

Page 7: KCGS11_실시간 피사계 심도 렌더링 개선 기법

실시간 피사계 심도

• 깊이 기반으로 COC 구하기

• 최대 아웃-오프-포커스 이미지와 인-포커스 이미

지의 블랜딩으로 근사

– 흐려지는 범위 => 흐려지는 정도

Startcraft2 Effects & techniques(SIGGRAPH 2008)

Tin-Tin Yu. Depth of field implementation

with open gl

Page 8: KCGS11_실시간 피사계 심도 렌더링 개선 기법

실시간 피사계 심도

• 원경과 근경을 분리하여 처리

• 절차

– 1. 원경의 아웃-오프-포커스 블러 이미지 생성

– 2. 1번과 인-포커스 이미지 블랜딩

– 3. 근경의 아웃-오프-포커스 블러 이미지

– 4. 2번과 3번 이미지를 블랜딩

Page 9: KCGS11_실시간 피사계 심도 렌더링 개선 기법

아웃-오프-포커스 블러

• 인-포커스 이미지 : 원본

• 아웃-오프-포커스 이미지 : 원본을 가우시안 블러

• 깊이 맵을 이용 블랜드 가중치를 구함

• 가중치로 아웃-오프-포커스 이미지와 합성

• 인-포커스 번짐 현상 발생

Page 10: KCGS11_실시간 피사계 심도 렌더링 개선 기법

Bilateral Filtering

A Gentle Introduction to Bilateral Filtering and its Applications (Siggraph2008)

Page 11: KCGS11_실시간 피사계 심도 렌더링 개선 기법

Bilateral Filtering

A Gentle Introduction to Bilateral Filtering and its Applications (Siggraph2008)

Page 12: KCGS11_실시간 피사계 심도 렌더링 개선 기법

아웃-오브-포커스 원경 블러링

• 원경 블러링시 가중치(range)를 원경 블랜드 값으

로 바이래터럴 필터링

• 절차

– 1. 마스크 텍스처 준비

원본의 rgb에 가중치를 곱하고, 가중치를 a 채널저장output.rgb = input.rgb * far_defocus_weight;

output.a = far_defocus_weight;

– 2. 가우시안 블러

• rgba 블러링

• 다운 스케일한 후에 블러링해도 됨

– 3. 정규화 (a로 나눠줌)

Page 13: KCGS11_실시간 피사계 심도 렌더링 개선 기법

합성

• 블러링 된 원경과 원본 합성

Page 14: KCGS11_실시간 피사계 심도 렌더링 개선 기법

장점

• 인-포커스 번짐 현상 제거

• 빠른 성능

– 두 번의 1D 가우시안 필터링을 통한 빠른 블러링 가능• 가로로 1d 가우시안 블러, 결과를 세로로 1d 가우시

간 블러

• 12 tap 2패스 = 144 tap 1패스

– 축소하여 연산가능• 빠른 속도로 큰 커널 사이즈 블러링 가능

• 축소해도 인-포커스 번짐 현상 없음

Page 15: KCGS11_실시간 피사계 심도 렌더링 개선 기법

아웃-오브-포커스 근경 블러링

• 원경과 유사한 절차로 합성

• 절차

– 1. 마스크 텍스처 준비output.rgb = input.rgb * near_defocus_weight;

output.a = near_defocus_weight;

– 2. 가우시안 블러링

• 가중치가 곱해진 rgb 와 블러링된 a

• 블러링한 원경과 합성한 이미지와 합성

– 근경 픽셀에 가중치가 곱해져 있으므로output = lerp(background, input.rgb, input.a);

output = background * (1 - input.a) + input.rgb

Page 16: KCGS11_실시간 피사계 심도 렌더링 개선 기법

근경 합성

• 한계점

– 불투명한 특성으로 인한 근경의 아웃-오프-포커스 지점의

시각적 불완전성

Page 17: KCGS11_실시간 피사계 심도 렌더링 개선 기법

실시간 피사계심도

• 기존 포스트 프로세싱 방식의 한계

Unreal 3 Tech Demo

Page 18: KCGS11_실시간 피사계 심도 렌더링 개선 기법

근경 반투명 구현 필요

• 실제 카메라의 피사계 심도

http://graphics.stanford.edu/projects/lightfield/

Page 19: KCGS11_실시간 피사계 심도 렌더링 개선 기법

근경 반투명 구현

• 가려지는 영역의 정보를 이미지에 삽입하여 반투

명 구현

http://www.youtube.com/watch?v=OiUixBfJPfQ

Page 20: KCGS11_실시간 피사계 심도 렌더링 개선 기법

근경 이미지 제거

• 패턴 처리

– 프레임 버퍼 렌더링시 근경 제외 (패턴)

(ex. 4픽셀에 1픽셀 씩)float4 p(PS_IN In) : COLOR

{

if (In.ViewDir.z < g_FocusDistance)

{

float2 pattern = fmod(floor(In.VPos.xy), 2);

if (pattern.x == 0 && pattern.y == 0)

discard;

}

....

– 근경이 제외되면서 해당 위치

에는 원래 깊이 버퍼에 의해

가려질 픽셀이 찍힘

Page 21: KCGS11_실시간 피사계 심도 렌더링 개선 기법

근경 이미지 제거

• 근경 픽셀은 인접 픽셀 셈플링

– 인접 비-근경의 평균값

• 비-근경을 가중치로 바이래터럴 필터링

– 혹은, 비-근경이 있을 것으로 예상되는 위치의 픽셀값texuv = In.texuv–fmod(In.texuv, 2/g_ScreenSize.xy);

Page 22: KCGS11_실시간 피사계 심도 렌더링 개선 기법

합성

• 아웃-오프-포커스 근경

– 절차는 패턴 삽입 전과 동일

– 패턴 삽입으로 완전한 근경 영역도 ¼ 비 근경 이미지가 삽입되어 마스크

가 흐려진 상태 => 4/3 을 곱해서 정규화

• 합성

– 근경이 제거된 인-포커스, 근경 아웃-오프-포커스 합성 이미지

– 정규화된 아웃-오프-포커스 이미지

Page 23: KCGS11_실시간 피사계 심도 렌더링 개선 기법

결과

Page 24: KCGS11_실시간 피사계 심도 렌더링 개선 기법

요약

• 실시간 피사계 심도를 개선

– 바이래터럴 필터링을 사용

• 인-포커스 번짐 현상 제거

• 빠른 2D 가우시간 필터링 (1D 2패스)

• 축소 버퍼 사용 가능

– 근경 제외 패턴 처리

• 추가적인 지오 매트리 패스 없이 반투명 처리

Page 25: KCGS11_실시간 피사계 심도 렌더링 개선 기법

참고문헌

• http://en.wikipedia.org/wiki/Depth_of_field

• M.Potmesil. A lens and aperture camera model for synthetic image generation ACM SIGGRAPH Computer Graphics, 1981

• Guennadi Riguer, Natalya Tatarchuk. Real-time depth of field simulation. In ShaderX2

• M. Kraus, M. Strengert. Depth-of-Field Rendering by Pyramidal Image Processing. In Porceedings EG 2007

• Tin-Tin Yu. Depth of field implementation with open gl, Journal of Computing Sciences in Colleges, 2004

• T.Igarashi, et al. Real-Time Depth-of-Field Rendering Using Point Splatting on Per-Pixel Layers, Pacific Graphics 2008

• C. Tomasi, et al. Bilateral Filtering for Gray and Color Images, 1998

• Dominic Filion, Starcraft 2 Effects & techniques, Siggraph 2008