피부는 왜 피부처럼 보이는가? 2

반응형

links
- 피부는 왜 피부처럼 보이는가? 1 : http://mgun.tistory.com/1545

이전글의 내용은 기존 렘버트 만으로는 피부 질감을 내기 어려워서
어두운 부분의 영역을 들어 올려 부드럽고 전체적으로 밝아지는
Half Lambert를 만들었고 여기에 원하는 피부의 부분에 원하는 만큼의
광택을 주기 위해 Specular Exponent와 Specular Mask를 추가해서 
하이라이트 반사를 표현 한다는 내용이었다. 

그런데 사실 이러한 내용들은 가짜 피부를 어떻게 하면 그럴 듯 하게 보일까 하는
일종의 꼼수이다.
즉, 피부의 특성을 고려하지 않고 대략적인 값으로 그럴듯 하게 보이도록 한 것이다.

그렇다면 실제 피부는 어떤 특성을 가지는가??


피부란 위와 같은 모습을 하고 있다.
의학 서적에서나 나올 것 같은 그림 인데 여기서 봐야 할 것은 피부가 결코 하나의
층으로 만들어 져 있는게 아니라는 것이다. 

즉, 인간의 피부 음영은, 표피에 닿은 빛의 단순한 반사나 확산만으로 결정되지 않는다.
추가적으로 피부 밑으로 침투해 피부 밑에서 난반사해서 다시 표피로부터
튀어 나오는 것도 고려
해 줘야 한다.

이렇게 피부 밑에서 산란하는 현상피하산란(Subskin Scattering)이라고 하며
반투명 물체에 빛이 들어와 내부에서 산란하고 나서 다시 튀어 나오는 일반적인 현상
표면하 산란(Subsurface Scattering)이라고 한다.

이에 대한 설명은 아래 링크에 좀 더 자세히 나와있다.
http://mgun.tistory.com/1294

표면하 산란을 정식으로 구현하면 피부 음영처리가 무척이나 복잡해 진다.
그래서 위와 같은 개념을 근사하게 하나씩 재현 해 나가면 비슷하게 만들 수 있을 거라는 생각을 
가지고 NVIDIA가 GeForce 8800시리즈 데모로 Adrianne의 스킨 셰이더를 만들었다.


link : http://www.nvidia.co.kr/coolstuff/demos#!/human-head
오~ 그럴듯하게 보이는걸...ㄷㄷ.

피부를 피부답게 보이게 하는 SSS.


피부뿐 아니라 아래와 같은 부분을 표현할 때에도 사용한다.


SSS는 결국 빛이 오브젝트의 표면의 한 지점으로 투과되어 내부로 퍼져나간후
다른 위치로 빠져나가는 현상을 말하는데 이때 표면의 종류와 두께에 따라서
보이는 정도 또한 다르다
. 위 사진의 오른쪾 아래, 얼음 사진을 보면 두께에 따라 
투과되는 정도가 다르다. 사람 몸의 경우 귀처럼 얇은 부분이 특히 그렇다.
크라이 엔진에서는 초목, 피부, 아이스 셰이더에 자주 사용되는 편이다.

언리얼에서의 SSS는 위와 같다.
link : https://udn.unrealengine.com/docs/ue3/KOR/Engine/Subsystems/Rendering/DirectX11/ScreenSpaceSSS/index.html


그림으로 요약해 보자면 아래와 같다.

일반적인 고체의 표면, 즉 불투명한 물체는 빛을 받으면 빛의 대부분을 그대로 반사시킨다.

 

Subsurface Scattering은 빛이 오브젝트의 표면의 한 지점으로
투과되어 내부로 퍼져나간 후 다른 위치로 빠져나가는 현상. 

 

피부는 대략적을 생각하면 아래와 같이 지방질, 표피, 진피라는 층들로 나뉜다.

인간의 피부 단면도

왼쪽 위 부터 얇은 지방질층, 표피, 진피
우측 위 부터 지방질, 표피, 지극히 작은 사이즈.

측정에 의하면 입사한 빛의 6%가 지방질층까지에서 반사가 되고 나머지 94%가 피하의
영향을 받는다고 한다.
대략적으로 피부의  최표층에서의 반사와 피부 밑에서의 산란, 이 두개의 처리로 나누어 보면 된다.

피하 산란의 개념도

표피에서의 반사는 위와 같고 이제 지방질층에서의 반사에 대해 생각 해 보자.

지방질층에서의 반사는 일반적으로 퐁이나 블린퐁을 사용하지만 이는 피부를 표현하는 데 있어
적합하지 않기 때문에 NVIDIA에서는 KS BRDF를 선택했다.


정면샷은 대략 비슷하지만 측면샷의 끝 부분을 보면 하이라이트가
더 리얼하게 맺히는 것을 볼 수 있다.

즉, 음영계산에서 기본 N,V,L 이외에 경면반사 강도와 면의 거친정도, 굴절률을 
고려해 준다는 의미이다.
경면반사강도는 하이라이트의 강도로 이해하면 되고 면의 거친 정도는
굴절률은 프레넬반사라고 생각 해 주면 된다.
면의 거친 정도는 말 그대로 면의 거친정도에 대한 값이다.
아래 링크를 참고하면 프레넬과 면의 거친정도에 대한 설명이 되어있다.
http://mgun.tistory.com/1518
http://mgun.tistory.com/1304

자!! 그럼 이제 얼굴의 어느부분에 빛을 어떻게 표현해야 할까? 를 고민해 봐야 한다.
하지만 친절하게도 이미 측정해서 SIGGRAPH에 발표되어 있다.

위 사진을 보면 안면의 10군데에서의 경면반사 강도와 면의 거친정도를 나타내고 있다.

위 값을 사용하기 위한 분포텍스처

사실 이 값들을 실제로 고려해 주면 좋지만 구현상 많은 부하를 차지하며
식이 복잡해 진다.

이 사진을 보면 오른쪽이 실제로 경면반사 강도 분포 텍스처와 면의 거칠기 분포 텍스처를 사용하여
만든 결과물 이고 왼쪽이 대략적인 평균값 0.3을 사용해서 만든 값이다.
그다지 큰 차이가 없다.
그래서 NVIDIA도 그냥 평균값을 사용했다고 한다.

표피와 지방질층에서의 반사를 알아보았다.
표피에서의 6%반사, 지방질층을 위한 KS BRDF, 그리고 피하에서의 빛의산란.
그렇다면 피하에서의 빛의산란(나머지 96%)는 어떻게 표현해야 하는가?

피하산란 계산은 간단하지 않다.
빛의 이동경로나 빛이 산란되어 나온 빛의 포함여부나 빛의 흡수 및 감쇄를 고려해야 한다.
이러한 내용들을 간략 근사화 해서 접근해 보자.

위에서 언급했던 피하산란 관련 그림을 다시 보자.


우선 알아야 하는 기본 현상을 적어보자면
- 빛이 다른곳에서 나온다.
   (즉, 빛이 입사한 위치에서 반사되는게 아니라 다른위치에서 반사되어 나온다.)
- 빛이 어디로 갔는지에 따라 착색이 된다.
   (즉, 빛이 어디까지 갔는지, 어디를 통과했는지에 따라 색이 변한다.)
- 외견상 불가능해 보이는 작업들이 있다.
   - 무한적으로 가능한 경로들.
   - 어떤 방향에 대한 영향인가?
- 물리학에서 모델의 산란
   - 산란 이벤트와의 거리가 얼마나 먼가?
   - 흡수 이벤트와의 거리가 얼마나 먼가?
- 많은 산란 이벤트가 light diffuse를 만든다.
   - 이러한 일들이 일어나기까지 얼마나 먼가?

좀 축약해 보자면...
빛이 산란해 다시 나올 때까지의 평균 거리는 어느 정도인가? 
빛이 흡수되어 버리는 평균 빈도는 어느정도인가?

입사광의 약 10%는 최초의 지방질층을 돌파하지만 이 시점에서 빛의 지향성을
잃고 확상광
이 되어 버리고, 나머지 빛들은 KS BRDF와 프레넬 반사를 고려한 반사광이었거나
지방질을 지나 표피에 도달한 시점까지에서 흡수된다.
결국, 이 지방질을 빠져나온 10%의 확산광에 대해서만 피하 산란을 생각해 주면 된다.
그렇다면 단순하게 입사광에 대해 확산 반사의 음영 처리를 실시해서
화상의 피부 텍스처와 곱하고, 앞에서의 KS BRDF + 프레넬 반사의 결과와 
합성하면 되지 않을까?
이 생각으로 구현한 결과물이 아래와 같다.


KS BRDF + 프레넬 + 확산반사 X 화상 텍스처.
하프라이프2의 스킨 셰이더와 거의 같다.
약간 건조한 느낌으로 보인다.

- cook (ks brdf) 관련 : http://mgun.tistory.com/1337
- fresnel 관련 : http://mgun.tistory.com/1518



왜이럴까?!!
- 한 지점으로 입사해서 다른 지점으로 나가는 라이트를 고려하지 않았다.
   (확산빛은 그 픽셀에 입사한 빛만 확산한 것이 아니라 인접하는 다른 픽셀에
    입사 한 빛이 피부내에서 산란해서 나온 확산빛도 포함되어진다.)
- 지방질층의 거친 표면은 불균형한 투과률을 가진다.

그래서! 다른방식으로 접근하자.
- 다중 레이어 재질의 몬테 카를로 렌더링.
- 2005 SIGGRAPHA Craig Donner and Henrik Wann Jensen.
   ( 피부의 광산란은 단층이 아닌 복수층)


오른쪽 단층 레이어 결과물은 납인형 같아 보인다.


Reference Links :
allosha님의 표면하 사란에 의한 스킨 셰이더
GPG Gems1. Chapter16. RealTime Approximations to Subsurface Scattering.
GPG Gems3. Chapter14. Advanced Techniques for Realistic Real Time Skin Rendering.
NVIDIA GDC 2007. Demo Teamp Secrets: Advanced Skin Rendering
----------------------------------------------------------------------------------------
ps.

틀린 부분이 있거나 이상한 부분이 있다면 언제든지 문의나 덧글 부탁 드립니다.

'Study > M's Lecture' 카테고리의 다른 글

피부는 왜 피부처럼 보이는가? 4  (0) 2014.01.05
피부는 왜 피부처럼 보이는가? 3  (0) 2013.12.18
피부는 왜 피부처럼 보이는가? 1  (0) 2013.12.02
Depth Of Field 2 (Advanced DOF)  (0) 2013.04.13
행렬  (0) 2013.03.21
TAGS.

Comments