아티스트를위한 SubSurfaceScattering + UDK Custom Shader 권오찬
캐릭터에대한 Needs Doom3 / id soft Dekaron / GameHI Blade and Soul / NC soft 싱글 설정에맞는캐릭터 온라인초기 개성있는캐릭터 온라인 살아있는캐릭터
살아있는듯한캐릭터 진보된 Facial Animation
살아있는듯한캐릭터 진보된 Facial Animation 진보된 Physics Animation
살아있는듯한캐릭터 진보된 Facial Animation 진보된 Physics Animation 진보된 Procedural Animation
살아있는듯한캐릭터 진보된 Facial Animation 진보된 Physics Animation 진보된 Procedural Animation 그리고 진보된 Skin Shader
발표자소개 권오찬 chany1220@gmail.com NCsoft Nexon Mgame Studio Neowiz Games / A1 Project / TA
목차 SubSurfaceScattering ( 피하산란 ) UDK를이용한구현 향후개선방향 QnA
약관 - 일러두기
약관 - 일러두기 Reference - Advanced Skin Rendering (Nvidia, 2007) 구현은 UDK에서아티스트가할수있는수준내에서 최적화되어있지않은쉐이더 Non Realistic
왜사람은사람처럼보이는가?
왜사람은사람처럼보이는가?
BRDF Bidirectional Reflectance Distribution Function ( 양방향반사분포함수 ) 라이트벡터, 노말벡터를넣으면색이나오는블랙박스
BRDF 의한계 BRDF 불투명한재질의표면에서일어나는반사를통해색을결정한다. = 표면에서전부반사되지않으면표현할수없다!
왜사람은사람처럼보이는가? SubSurfaceScattering ( 피하산란 ) 피부가투명하기때문에빛이피부를투과, 산란하는현상
SSS 피부층내부에서발생하는산란 표피와진피로나뉘고깊이에따라반사되는색이달라진다.
SSS 피부층아래에서발생하는산란 훨씬넓은영역에걸쳐서전체적으로붉게산란된다.
SSS 산란의결과 피부의특정지점에빛이닿게되면주변영역의디퓨즈칼라가영향을받는다. 마치블러 (Blur) 와흡사하다!
SSS 불투명재질 (BRDF) 과피부 (SSS) 의차이
왜사람은사람처럼보이는가? SubSurfaceScattering ( 피하산란 ) Oren-Nayar Reflectance Model
Oren-Nayar 피부는매끄러운미세면들이랜덤한각도를가지고 (= 거칠게 ) 모여있다. 거친표면에서는 Lambertian Model 보다 Oren-Nayar Model 이정확하다.
Oren-Nayar 미세한 Lambertian 면들이모여있을때광원이여러번반사되는데이중첩되는표면반사광을모두더하여계산한다. 꼭이수식과원리를이해해야할필요는없다!
Oren-Nayar
Oren-Nayar
Oren-Nayar
Oren-Nayar
왜사람은사람처럼보이는가? SubSurfaceScattering ( 피하산란 ) Oren-Nayar Reflectance Model Etc
전제조건 : 원리 구현 엄밀한물리적구현은불가능하다 하나의특성을여러개의단순한근사적요소로분해해서구현한다.
전제조건 : UDK 한계 UDK 매터리얼에디터는완벽한쉐이더제작툴이아니다. 제한된픽셀쉐이더연산 + 제한된버텍스쉐이더연산 랜더Pass, 랜더타겟에코드없이접근이불가능 그림자에대한접근이불가능 Emissive 채널에라이트벡터가적용안됨 이런제약을감안하더라도터무니없이강력하다!
구현요소 Custom HalfLambert SubSurfaceScattering Mid-Tone 붉은색추가 Transmission Silhouette
구현요소 SubSurface Scattering SubSurface Scattering Custom HalfLambert Orne-Nayar Mid-Tone RedBias Transmission Silhouette
Custom HalfLambert
Custom HalfLambert Half Lambert
Custom HalfLambert Half Lambert Front : Half Lambert Oren-Nayar
Custom HalfLambert Half Lambert Front : Half Lambert Oren-Nayar Back : Half Lambert Fake GI
Custom HalfLambert HalfLambert (Wrap) max(0,( dot(l, N) + wrap) / (1 + wrap))
Custom HalfLambert HalfLambert (Wrap) max(0,( dot(l, N) + wrap) / (1 + wrap))
Custom HalfLambert HalfLambert (Wrap) 의문제점 광원의경계선이계속남아있다. 너무밝아진다.
Custom HalfLambert Custom HalfLambert
Custom HalfLambert Custom HalfLambert
Custom HalfLambert Custom HalfLambert
Custom HalfLambert Custom HalfLambert max(0, ((dot(l, N) + wrap) / (1 + wrap + wrap^2))^(1+wrap))
Custom HalfLambert Custom HalfLambert max(0, ((dot(l, N) + wrap) / (1 + wrap + wrap^2))^(1+wrap))
Custom HalfLambert Custom HalfLambert max(0, ((dot(l, N) + wrap) / (1 + wrap + wrap^2))^(1+wrap))
Custom HalfLambert UDK 에서노드시연
SSS
SSS Light Vector Material Editor
SSS 구현방법 포토샵을이용해서미리 Blur 가적용된텍스쳐를생성한다. Normal 텍스쳐에 Blur 를적용한다. 산란을위한레이어는 2단계로제한한다. RGB채널을각각연산하여마지막에합친다.
SSS
SSS UDK 에서노드시연
Mid-tone Red Bias
Mid-tone Red Bias 발생원인 사람의몸안이붉은색으로구성되어산란하는빛이영향을받는다. 전체적으로파장이긴붉은색이더넓게산란된다. 눈이가장민감한영역 (Mid-Tone) 의붉은색이더눈에띈다. GI 칼라블렌딩의영향이크다.
Mid-tone Red Bias HalfLambert 와 Lambertian 사이의차이를추출해서이용.
Mid-tone Red Bias HalfLambert 와 Lambertian 사이의차이를추출해서이용. Diffuse 채널에추가.
Mid-tone Red Bias UDK 에서노드시연
Transmission
Transmission 구현 귀, 손가락, 코끝은 Texture로, 실루엣은 Fresnel로영역을지정한다. Emissive 채널에합성한다. 카메라벡터와라이트벡터를이용해서역광이아닌상황을걸러낸다.
Transmission
Transmission 외곽투과효과는 Silhouette 에서처리. 귀, 손가락, 코끝은약한이미시브채널을추가... 그래도꽤괜찮다!
Transmission UDK 에서노드시연
Silhouette 장점 캐릭터의입체감배경과의조화물리적인원근감의근사적구현 단점 다양항광원상황에대한대응이불가능 퍼포먼스비용
Silhouette Fresnel 함수를이용해서외곽선검출 Silhouette 칼라는디퓨즈칼라를 Multiply로추가. 카메라벡터와라이트벡터의 Dot Product를이용해서역광을검출 역광검출을이용해서외곽 Transmission 효과를추가. +
Silhouette UDK 에서노드시연
전체구성
Sample
Sample
향후개선방향 단기개선 : 최적화 파라미터상수화 노드최적화 Lookup Texture로 Custom HalfLambert와 Mid-Tone 붉은색추가를대체 장기개선 : 포스트프로세스쉐이더를이용해서 ScreenSpace SSS 를구현 리얼타임 Blur 적용 랜더타겟추가생성, 접근이가능해야한다.
Reference Eugene d Eon. 2007. Advanced Skin Rendering GDC2007 Rory Driscoll. 2009. Energy conservation in games Mikkel Adamsen & Sune Loje. 2004. Subsurface Scattering http://en.wikipedia.org/wiki/oren%e2%80%93nayar_reflectance_model http://en.wikipedia.org/wiki/brdf http://en.wikipedia.org/wiki/subsurface_scattering
QnA chany1220@gmail.com
Thank you