21
SH를 이용한 실시간 투명 근사 Fast Real-time Translucent Rendering 김성익([email protected]) 소프트네트 2011/05/29

11_SH를 이용한 실시간 투명 근사법

  • Upload
    noerror

  • View
    988

  • Download
    5

Embed Size (px)

Citation preview

Page 1: 11_SH를 이용한 실시간 투명 근사법

SH를 이용한 실시간 투명 근사

Fast Real-time Translucent Rendering

김성익([email protected])

소프트네트

2011/05/29

Page 2: 11_SH를 이용한 실시간 투명 근사법

투명 재질

• 빛이 표면에서 전부 반사하거나 통과하지 않고 일

부 내부에서 산란하여 통과하는 재질

http://www.cs.virginia.edu/~rw2p/cs647/project.htm

Page 3: 11_SH를 이용한 실시간 투명 근사법

BTDF

• 일반적인 BRDF에는 미포함

BSSRDF (BRDF 내하 산란 항을 추가한 것으로

투과와는 성격이 약간 다름)

• 투과 속성을 가진 BTDF항 추가

• 투과도가 필요

재질 내부 특성이 균일하다고

가정하면 깊이가 필요

Wikipedia:Bidirectional_scattering_distribution_function

Page 4: 11_SH를 이용한 실시간 투명 근사법

실시간 투명 렌더링

• 깊이 값을 근사하여 투명도 결정

– 깊이 텍스처를 이용

– 텍스처 스페이스

• SH를 이용한 근사법 제안

Page 5: 11_SH를 이용한 실시간 투명 근사법

깊이 텍스처를 이용

• Translucent Shadow Map

• 1. 깊이 맵을 이용

– 라이트의 시점에서 깊이 렌더링 (그림자 맵과 동일)

– 임의의 점의 라이트 거리와 TSM에 저장된 거리 차이

• 2. 두 채널을 이용

– R에는 거리, G는 Far에서의 거리를 Write

– 블랜드는 Min

– 결과적으로는 가까운 거리는 R, 먼 거리는 1-G

– 두 값 차이를 이용하여 깊이 계산

http://www.gamerendering.com/2009/09/25/render-thickness/

Page 6: 11_SH를 이용한 실시간 투명 근사법

깊이 텍스처를 이용

• 단점

– 렌더링 패스 증가로 인한 성능 이슈

– 해상도로 인한 실루엣 알리아싱 문제

– Convex한 물체에만 유효

Page 7: 11_SH를 이용한 실시간 투명 근사법

DICE(GDC2011)

• GDC2011:Approximating Translucency

for a Fast, Cheap and Convincing Subsurface

Scattering Look

• 쉽고 빠른 근사가 목표

Page 8: 11_SH를 이용한 실시간 투명 근사법

DICE(GDC2011)

• 표면의 투과도를 미리 Bake

– 텍스처 스페이스에서 계산 (픽셀 별로)

– 표면의 노멀 반대 방향으로

Ambient Occlusion 계산하는 방식으로 계산

– 값을 인버스 하면 투명도의 근사값을 구함

Page 9: 11_SH를 이용한 실시간 투명 근사법

DICE(GDC2011)

• 재질의 특성에 맞도록 투과를 계산

• 표면의 투과도를 곱해서 최종 투과 라이트 값을 구함

• Convex한 객체에 최적화됨

Page 10: 11_SH를 이용한 실시간 투명 근사법

Spherical Harmonics

• 구면 조화함수

• 컨셉은 푸리에 변환이나 라플라스 변환 같은 값의 도메인

을 이동하는 계열과 유사하게 생각하면 됨

• 계수가 많을 수록 입력 값과 유사해짐

낮은 주파수 영역대가 근사값에 큰 역할을 함

• 압축하는 의도라고 생각해도 크게 틀리지 않음

Page 11: 11_SH를 이용한 실시간 투명 근사법

Spherical Harmonics

• 구면 조화함수 그래픽스 응용

• 입력 구형 이미지 => SH 계수

• SH계수 => 구형이미지

• 계수가 많다면 입력 이미지를 복원하겠지만, 전역광의 경우 의도적으

로 블러링하여 사용하기 때문에 그냥 적은 개수의 계수를 사용하면

블러링한 결과와 동일 GOOD

• 연산이 가볍고 적은 개수의 계수로도 훌륭한 품질의 결과물이 나와서

실시간 렌더링에서 많이 사용

http://www.cs.berkeley.edu/~ravir/

Page 12: 11_SH를 이용한 실시간 투명 근사법

SH를 이용한 투명 재질

• 컨셉 : SH를 이용하여 방향성 있는 투명도를 구하자

• 절차

– 깊이 계산이 필요한 위치에서 방향 별 깊이 값을 연산(불투

명도)

– SH계수를 이용하여 압축 (손실은 있으나 내부 산란 특성을

고려하면-투명도의 저주파성- 오히려 블러링 생략의 이득)

– 렌더링시 노멀을 이용해 방향성 있는 투명도 얻기

Page 13: 11_SH를 이용한 실시간 투명 근사법

SH를 이용한 투명 재질

• http://www.youtube.com/watch?v=_UMpeSEAwik

Page 14: 11_SH를 이용한 실시간 투명 근사법

SH를 이용한 투명 재질

• 버텍스 단위 계산

– 퍼 픽셀로 계산하기 위해선 float 텍스처 여러

장이 필요함

– 투명 재질의 내부 산란 특성 때문에 높은 해상

도의 데이터는 불필요

• 버텍스의 스트림에 버텍스의 SH계수를 전

달 (3개의 texture coordinate가 필요)

Page 15: 11_SH를 이용한 실시간 투명 근사법

SH를 이용한 투명 재질

• 버텍스에서 전 방향의 두께를 구함

– 빛의 입사에 따라 깊이 값이 달라지므로

– 임의의 개수의 ray를 발사해서 구하기

• 필요하다면 다층의 길이를 합산 가능

– 단순 합산이 물리적으로는 맞지 않을 수도 있

으나 convex하지 않은 객체도 근사 가능

Page 16: 11_SH를 이용한 실시간 투명 근사법

SH를 이용한 투명 재질

• 대 부분 노멀 방향에서 좌우로 퍼지는 모양

을 하고 있음

• 탄젠트 스페이스로 계산

– 값의 엔트로피 감소

– SH계수로 변환 시 좀 더 손실이 적음

Page 17: 11_SH를 이용한 실시간 투명 근사법

SH를 이용한 투명 재질

• 계산한 깊이 값으로 SH계수 구하기

• 정확한 깊이 값을 구하는 게 목표는 아니므

로 적당히 노멀라이징

– 실제로는 깊이 보다는 투명도가 필요한 것

Page 18: 11_SH를 이용한 실시간 투명 근사법

장점

• 빛의 방향에 따른 투명도가 적용된다

Page 19: 11_SH를 이용한 실시간 투명 근사법

장점

• 스키닝 객체에도 적용이 가능하다

– 빛의 방향을 탄젠트 스페이스 좌표로 옮기면 끝

• 애니메이션 객체에도 적용 가능하다

– 어클루더가 움직이기 때문에 물리적으로 올바르지 않

지만 방향성을 정상적이기 때문에 납득할 만한 품질

Page 20: 11_SH를 이용한 실시간 투명 근사법

장점

• 버텍스 셰이더에서 간단한 SH 만으로 계산 가능

– 저사양에서도 전혀 부담 없는 연산 비용

• Convex가 아닌 객체도 쉽게 구할 수 있음

– GDC2011:Dice도 같은 조건이지만 convex 언급한 것

은 AO를 통해서 굽는 방식적인 부분 때문으로 TSM의

한계와는 다른 이슈

(현 방식의 SH 상수항만 사용하면 Dice와 동일)

• 납득할만한 퀄리티

Page 21: 11_SH를 이용한 실시간 투명 근사법

질문/답