kcgs11_실시간 피사계 심도 렌더링 개선 기법
TRANSCRIPT
실시간 피사계 심도 렌더링 개선 기법Advanced realtime postrendering techniques for depth of field
소프트네트http://softnette.com
2011/7/6
피사계 심도
• 피사계 심도 (Depth of Field)사진 렌즈로 어떤 거리의 피사체에 초점을 맞출
때 초점이 맞는 범위
• 피사계 심도 이외의 영역이 흐려지는 현상
http://en.wikipedia.org/wiki/Depth_of_field
피사계 심도
• 아웃-오프-포커스 (근경, 원경)
– 원경에는 인-포커스가 번지지 않음
– 근경은 인-포커스, 원경으로 번짐
• 인-포커스
– 선명한 이미지
Startcraft2 Effects & techniques(SIGGRAPH 2008)
http://graphics.stanford.edu/projects/lightfield/
피사계 심도
• COC(Circle of Confusion)
– 흐려지는 범위
http://en.wikipedia.org/wiki/Circle_of_confusion
포스트 랜더링 방식
• 포스트 프로세싱
– 랜더링된 이미지 기반으로 픽셀 단위 연산
– 추가적인 지오매트리 패스없이 렌더링된 결과
만을 가지고 처리
http://software.intel.com/en-us/articles/iir-gaussian-blur-
filter-implementation-using-intel-advanced-vector-extensions/
실시간 피사계 심도
• 포스트 프로세싱
– 렌더링된 이미지를 블러링하고 합성하여 피사
계 심도 근사
• 입력
– 렌더링 결과
– 깊이맵
실시간 피사계 심도
• 깊이 기반으로 COC 구하기
• 최대 아웃-오프-포커스 이미지와 인-포커스 이미
지의 블랜딩으로 근사
– 흐려지는 범위 => 흐려지는 정도
Startcraft2 Effects & techniques(SIGGRAPH 2008)
Tin-Tin Yu. Depth of field implementation
with open gl
실시간 피사계 심도
• 원경과 근경을 분리하여 처리
• 절차
– 1. 원경의 아웃-오프-포커스 블러 이미지 생성
– 2. 1번과 인-포커스 이미지 블랜딩
– 3. 근경의 아웃-오프-포커스 블러 이미지
– 4. 2번과 3번 이미지를 블랜딩
아웃-오프-포커스 블러
• 인-포커스 이미지 : 원본
• 아웃-오프-포커스 이미지 : 원본을 가우시안 블러
• 깊이 맵을 이용 블랜드 가중치를 구함
• 가중치로 아웃-오프-포커스 이미지와 합성
• 인-포커스 번짐 현상 발생
Bilateral Filtering
A Gentle Introduction to Bilateral Filtering and its Applications (Siggraph2008)
Bilateral Filtering
A Gentle Introduction to Bilateral Filtering and its Applications (Siggraph2008)
아웃-오브-포커스 원경 블러링
• 원경 블러링시 가중치(range)를 원경 블랜드 값으
로 바이래터럴 필터링
• 절차
– 1. 마스크 텍스처 준비
원본의 rgb에 가중치를 곱하고, 가중치를 a 채널저장output.rgb = input.rgb * far_defocus_weight;
output.a = far_defocus_weight;
– 2. 가우시안 블러
• rgba 블러링
• 다운 스케일한 후에 블러링해도 됨
– 3. 정규화 (a로 나눠줌)
합성
• 블러링 된 원경과 원본 합성
장점
• 인-포커스 번짐 현상 제거
• 빠른 성능
– 두 번의 1D 가우시안 필터링을 통한 빠른 블러링 가능• 가로로 1d 가우시안 블러, 결과를 세로로 1d 가우시
간 블러
• 12 tap 2패스 = 144 tap 1패스
– 축소하여 연산가능• 빠른 속도로 큰 커널 사이즈 블러링 가능
• 축소해도 인-포커스 번짐 현상 없음
아웃-오브-포커스 근경 블러링
• 원경과 유사한 절차로 합성
• 절차
– 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
근경 합성
• 한계점
– 불투명한 특성으로 인한 근경의 아웃-오프-포커스 지점의
시각적 불완전성
실시간 피사계심도
• 기존 포스트 프로세싱 방식의 한계
Unreal 3 Tech Demo
근경 반투명 구현 필요
• 실제 카메라의 피사계 심도
http://graphics.stanford.edu/projects/lightfield/
근경 반투명 구현
• 가려지는 영역의 정보를 이미지에 삽입하여 반투
명 구현
http://www.youtube.com/watch?v=OiUixBfJPfQ
근경 이미지 제거
• 패턴 처리
– 프레임 버퍼 렌더링시 근경 제외 (패턴)
(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;
}
....
– 근경이 제외되면서 해당 위치
에는 원래 깊이 버퍼에 의해
가려질 픽셀이 찍힘
근경 이미지 제거
• 근경 픽셀은 인접 픽셀 셈플링
– 인접 비-근경의 평균값
• 비-근경을 가중치로 바이래터럴 필터링
– 혹은, 비-근경이 있을 것으로 예상되는 위치의 픽셀값texuv = In.texuv–fmod(In.texuv, 2/g_ScreenSize.xy);
합성
• 아웃-오프-포커스 근경
– 절차는 패턴 삽입 전과 동일
– 패턴 삽입으로 완전한 근경 영역도 ¼ 비 근경 이미지가 삽입되어 마스크
가 흐려진 상태 => 4/3 을 곱해서 정규화
• 합성
– 근경이 제거된 인-포커스, 근경 아웃-오프-포커스 합성 이미지
– 정규화된 아웃-오프-포커스 이미지
결과
요약
• 실시간 피사계 심도를 개선
– 바이래터럴 필터링을 사용
• 인-포커스 번짐 현상 제거
• 빠른 2D 가우시간 필터링 (1D 2패스)
• 축소 버퍼 사용 가능
– 근경 제외 패턴 처리
• 추가적인 지오 매트리 패스 없이 반투명 처리
참고문헌
• 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