10_Human Skin Rendering
Transcript of 10_Human Skin Rendering
실시간 피부 렌더링
• 최근 하이엔드 게임에서 사실적인 피부 렌더링은 기본이 됨
피부 특징 (1)
• 피부의 구성
– 표피 epidermis
– 진피 dermis
– 피하지방층 subcutaneous fat
• 빛이 피부 안에서 산란
SubSurface Scattering (표면하산란)
반투명 물체 내부에서 일어나는 산란
• 반투명 BSSRDF 모델
• 반투명 특성으로 피부에는 빛이 드리워 졌을 때 부드럽게 스며드는
효과가 나타남
피부 특징 (2) - 산란
• 그림자 영역과 빛을 받는 영역 사이의 경계가 부드럽다
– 비교 피부와 불투명 재질에 드리워진 그림자
• 일반적인 소프트 셰도우 이슈와는 다른 성격
피부 특징 (3) - 산란
• 산란색이 약간 붉은 색의 특성을 띰
– 피부 내부 표피의 필터링 효과• 멜라닌 (갈색)
• 카로틴 (오렌지색)
• 헤모글로빈 (적색, 분홍색)
– 파장의 성분으로 보면 장파장(적색)에 좀 더 높은 반사 특성
피부 특징 (4) – 투과
• 피부의 두께에 따라 투과도가 다름
얇은 피부는 투과되어 보임
피부 렌더링 파이프라인
• 텍스처 스페이스의 피부 렌더 텍스처 렌더링
– 오리지널 피부의 텍스처
– 라이팅
– 그림자
• 피부 렌더 텍스처를 단계별로 가우시안 블러
• (텍스처에 피부의 두께 렌더링)
• 화면에 피부 텍스처를 이용하여 렌더링
Nvidia Human Head Demo
• (이미지 Siggraph 2010 dice문서 발췌)
• Efficient Rendering of Human Skin - Eurographics Symposium on Rendering 2007
파이프 라인 최적화(1)
• Fast Skin Shading - ShaderX7
• 스킨 텍스처의 레이어별 가우시안 블러 텍스처 없이 렌더링
– 한 장의 가우시안 블록 텍스처만으로 렌더링
– 블러 텍스처 없이 최종 렌더링에서 셈플링
파이프 라인 최적화(2)
• 12개의 샘플링만으로 블러 + 피부산란
• 레이어 별로 가우시안 텍스처 사용한 결과 값에 근사
• 퍼포먼스에 따라 샘플링한 텍스처를 사용하거나 최종 패스에 직접 샘플링
(품질 차이는 거의 없으며 퍼포먼스 이슈)
투과
• 두께를 이용하여 투과된 빛의 양을 계산
피부 두께 근사화
• 두께를 실시간으로 구하는데 어려움이 있음. 근사화하여 사용
• Translucent Shadow Map– 라이트 시점에서 Depth 렌더링
– Z 버퍼 없이 depth를 pixel op를
min 으로도 가능
– 프로젝션 위치와 깊이 버퍼를
깊이 값을 이용해서 임의의
위치에서의 두께 계산
– Convex가 아닌 경우 올바른
계산법은 아님 (그래도 비교적 무난한
결과가 나오는 것으로..)
• 두께를 SH계수로 굽는 방법
– 각 버텍스에서 전 방향의 두께를 구한 후 SH 계수로 압축하여 버텍스에 저장
– 탄젠트 스페이스로 가지고 있으면 좀 더 정확한 근사, 애니메이션에도 사용 가능
– 굉장히 저렴한 셰이더 코드 (1채널 SH디코드)
– http://www.youtube.com/watch?v=_UMpeSEAwik
– ^^
참고
• Uncharted 2: Character Lighting and Shading, John Hable, SIGGRAPH 2010
• Efficient Rendering of Human Skin, Eugene d'Eon, David Luebke, and Eric Enderton,
Eurographics 2007
• Fast Skin Shading, John Hable, George Borshukov, and Jim Hejl, ShaderX7
• Real-Time Realistic Skin Translucency, Jorge jimnez, David Whelan
• http://www.gamedev.net/community/forums/topic.asp?topic_id=553749