Top Banner
Bilateral Filtering / Reprojection Cache 기법 소개 김성익([email protected]) 2009/09/27
17

09_Bilateral filtering/Reprojection Cache 소개

Jul 05, 2015

Download

Technology

noerror

Bilateral Filtering 소개
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 09_Bilateral filtering/Reprojection Cache 소개

Bilateral Filtering / Reprojection Cache 기법 소개

김성익([email protected])2009/09/27

Page 2: 09_Bilateral filtering/Reprojection Cache 소개

렌더링 최적화

• 렌더링 퍼포먼스의 한계– 메모리 대역폭– 연산량 (코어 속도, 파이프라인 개수..)– 필레이트

• 고해상도, 무거운 셰이더 시대에, 적은 필레이트와 적은셰이더 연산을 유도하는 기법 소개– 축소버퍼 / Bilateral Filtering– Reprojection Cache

Page 3: 09_Bilateral filtering/Reprojection Cache 소개

축소 버퍼(1)• 해상도가 작아지면 퍼포먼스가 향상

– 이상적으로 가로 세로 1/2 => 퍼포먼스 4배 향상

• 그럼, 작은 해상도에 렌더링한 후 Upsampling 한다면– 속도는 향상되지만– 뭉개지는 느낌 => 시각적 손상이 있다. 저주파 특성일수록 손상이 적다

(속도와 트레이드오프관계)– 옆픽셀이 묻어나오는 Halo 효과 발생

Page 4: 09_Bilateral filtering/Reprojection Cache 소개

축소버퍼(2)• 오프스크린 파티클

– 작은 사이즈의 텍스처에 파티클 렌더링– 원래 사이즈로 업셈플링– (참고: Z 버퍼 경계지점에 Z테스트 이슈)

Page 5: 09_Bilateral filtering/Reprojection Cache 소개

축소버퍼(3)

• 기어스오브워2 사례– SSAO에 AO텍스처 축소버퍼사용 (언리얼3)

• 이미지 특성이 저주파 성격• 업셈플링시 샘플링 픽셀중 가장 큰 z 값으로 z test

Page 6: 09_Bilateral filtering/Reprojection Cache 소개

Bilateral Filtering(1)

• Bilinear Filtering 혹은 Gaussian Filtering 등은 셈플링할픽셀 주변의 색을 공평하게 반영– Halo 발생

Page 7: 09_Bilateral filtering/Reprojection Cache 소개

Bilateral Filtering(2)• 만약, 마스킹등으로 가중치를 주고 이를 가중치에 반영

– 산의 볼륨을 마스크로 가중치를 주어 가우시안 가중치와 곱한 경우

• 블러를 더 강하게 주더라도 경계는 샤프하게 유지

Page 8: 09_Bilateral filtering/Reprojection Cache 소개

Bilateral Filtering(3)• 가중치는 샘플링할 점과의 연속성을 나타냄• 이미지 베이스 프로세싱에서는 마스크(가중치)를 어떻게 주느냐가 과제

– 하지만 3d 렌더링 이미지는 Depth 값을 활용할 수 있다!!

Page 9: 09_Bilateral filtering/Reprojection Cache 소개

Bilateral Filtering(4)• AO에 사용

– 이미지가 저주파 특성 => 시각적 손상이 거의 없음– 셰이더가 무겁기 때문에, 해상도가 줄어들 경우 굉장한 이득

Page 10: 09_Bilateral filtering/Reprojection Cache 소개

Bilateral Filtering(5)• 적극적으로 활용해서 저해상도부터 차례로 렌더링

– 고주파영역은 다음 해상도에서 렌더링– 저주파 영역은 마스킹 (PixelShader에서 패스)

Page 11: 09_Bilateral filtering/Reprojection Cache 소개

Reprojection Cache(1)• 무거운 셰이더 연산 부담• 아예 픽셀 셰이딩 계산을 PASS할 수 있다면 => 퍼포먼스 향상

• 기본 아이디어는 바로 전 프레임의 렌더링 결과를 활용하여 새롭게나타난 부분만 셰이더 연산

Page 12: 09_Bilateral filtering/Reprojection Cache 소개

Reprojection Cache(2)• 어떻게 이전 프레임에서 결과를 가져오나

– 현제 픽셀의 전 프레임에서의 월드 좌표를 구한다. => 정적인 오브젝트라면 동일

– 월드 좌표를 이전 프레임의 뷰좌표계로 변환한다.– 프로젝션하여 이전 프레임 버퍼의 uv 좌표를 구한다. => 픽셀 값과 이전 프레임

의 깊이 값을 구할 수 있다.– 뷰좌표로 구해진 z 값과 이전 프레임의 깊이 버퍼의 z값을 비교 => 거의 같다면

픽셀 값을 가져온다.

Page 13: 09_Bilateral filtering/Reprojection Cache 소개

Reprojection Cache(3)• Hit 테스트하는 두가지 방법

– 1패스로 하는 방법• 셰이더의 복잡도가 높아짐 (셰이더 코드에 Hittest 코드가 삽입되어야 함)

– 2패스에 의한 방법• 1pass Hit 테스트 후 Hit하면 이전 프레임 픽셀을 채우고 스텐실값도 set• 2pass 기존 방식과 동일하게 다시 렌더링 (but 이전 픽셀값을 사용하는 픽셀은 스텐실

테스트에서 pass)• 기존 시스템 큰 변경 없이 적용 가능

Page 14: 09_Bilateral filtering/Reprojection Cache 소개

Reprojection Cache(4)• Specular 같은 뷰 의존적인 셰이딩 연산 오류

– 이전 프레임 값은 현재 계산한 값과 다름– 해결법

• 뷰독립적인 셰이더 연산에만 사용• HitTest에 의도적으로 노이즈 삽입 (엄격하게 항상 같은 컬러는 아니지만 밀도에 따라

시각적 손실을 최소화할 수 있음)

Page 15: 09_Bilateral filtering/Reprojection Cache 소개

Temporal Coherence• Reprojection Cache와 알고리즘/컨셉은 유사하나 목표가 다름• 이전 프레임의 결과를 현재 프레임에 누적해서 사용• 품질 향상을 위함 (적은 셈플로 품질을 높임 <= 퍼포먼스 향상)• 기어스오브워2 케이스

– 이전 프레임의 AO 결과를 활용– 적은 샘플링으로 시각적 품질 향상

Page 16: 09_Bilateral filtering/Reprojection Cache 소개

감사합니다~

Page 17: 09_Bilateral filtering/Reprojection Cache 소개

참고문서• High-Speed, Off-Screen Particles, Iain Cantlay• Geometry-Aware Framebuffer Level of Detail, Lei Yang at el• Rendering Techniques in Gears of War 2, Niklas Smedberg and Daniel Wright• A Gentle Introduction to Bilateral Filtering and its Applications, S. Paris at el• Mixed Resolution Rendering, Jeremy Shopf

• The Real-Time Reprojection Cache, Diego Nehab at el• Automated Reprojection-Based Pixel Shader Optimization, Diego Nehab at el