ShaderX7 2.4. Fast Skin Shading John Hable, George Borshukov, Jim Hejl Shader Study (http://cafe.naver.com/shader)http://cafe.naver.com/shader 임용균.

Slides:



Advertisements
Similar presentations
Mining the by Graph API. 1. 페이스북 소셜 그래프와 Graph API, OGP 2. 페이스북 페이지와 친구들에서 좋아요 분석하기 3. 소셜 그래프 분석을 위한 결속집단 분석 4. 소셜 그래프 시각화.
Advertisements

Chapter 14. Advanced Techniques for Realistic Real-Time Skin Rendering 최재문.
Big Data & Hadoop. 1. Data Type by Sectors Expected Value using Big Data.
1)RACK 2)UPS 3)P D U 장치 4)Server Group 5)KVM Switch 7)UPS 를 위한 HUB 6) RACK Monitor.
1. 도형의 연결 상태 2. 꼭지점과 변으로 이루어진 도형 Ⅷ. 도형의 관찰 도형의 연결상태 연결상태가 같은 도형 단일폐곡선의 성질 연결상태가 같은 입체도형 뫼비우스의 띠.
(1/7) Postech DP&NM Lab On the Performance Characteristics of High-Speed Enterprise Networks (Performance Analysis of Underutilized Enterprise Network)
난이도 : 초급 제1장 앱 인벤터 소개 및 준비.
재료수치해석 HW # 박재혁.
The Beginning Of Light Skeaker mgun
학습목표 10장. 조명과 음영 조명과 음영의 차이점을 이해한다. 지역 조명모델과 전역 조명모델의 차이점을 이해한다.
Hamming Code 이근용. 2 Error Control Error Detection Parity Check CRC Check Error Correction Hamming Code.
USB Interface study 결과
제 7 장 함수 사용을 통해 엑셀 정복하기.
10장. 조명과 음영 학습목표 조명과 음영의 차이점을 이해한다. 지역 조명모델과 전역 조명모델의 차이점을 이해한다.
Gamma와 Linear-Color-Space
Deferred Shading (지연 세이딩)
학습목표 10장. 조명과 음영 조명과 음영의 차이점을 이해한다. 지역 조명모델과 전역 조명모델의 차이점을 이해한다.
Entity Relationship Diagram
3D Project Cloud Warcraft 박 종 선.
2d 게임 프로그래밍 기말 프로젝트 1차 발표 김대현.
Windows Server 장. 사고를 대비한 데이터 백업.
8장. 원격지 시스템 관리하기.
소리가 작으면 이어폰 사용 권장!.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
Error Detection and Correction
멀티미디어 시스템 (아날로그 이미지,신호를 디지털로 변환 방법) 이름 : 김대진 학번 :
Simulating Boolean Circuits on a DNA Computer
Kyoungju Park Computer Graphics Kyoungju Park
602 LAB FDTD 를 이용한 Acoustic Simulation 지도: 이형원 교수님 차진형.
Tail-recursive Function, High-order Function
렌더링.
컴퓨터 프로그래밍 : 실습3 2장 데이터와 식.
GPU Gems 3 Chapter 13. Volumetric Light Scattering as a Post-Process
별의 밝기와 거리[2] 밝다고 가까운 별은 아니야! 빛의 밝기와 거리와의 관계 별의 밝기 결정.
(생각열기) 옷가게에서 옷을 살 때와 옥가게 밖으로 나와 서 옷을 볼 때 옷 색이 달라져 보이는 이유는?
디지털회로설계 (15주차) 17. 시프트 레지스터와 카운터 18. 멀티바이브레이터 * RAM & ROM.
군집 분석.
마인드 맵.
뇌를 자극하는 Windows Server 2012 R2
TFT-LCD 구조 동작원리 응용분야.
Samsung Software Membership 3D MIM 신진수
뇌를 자극하는 Windows Server 장. 원격 접속 서버.
시뮬레이션 기반 가상 보조기구 알고리즘 최적화
논리회로 설계 및 실험 5주차.
2장. 변수와 타입.
인체 대 탐험 3D GAME ENGINE 게임 공학과 이성진.
3주차 오늘은 2주차에 만든 모형의 문제점이 뭘까 생각하면서 더 멀리 날아갈수 있게
게임수학 제 7 장 조명.
6. Video Effects.
(생각열기) 축구장의 전광판에 사용되는 LED에서 나오 는 빛의 3원색은 무엇인가?
Cakewalk Sonar Graphic EQ.
바넘효과 [Barnum effect] 사람들이 보편적으로 가지고 있는 성격이나 심리적 특징을 자신만의 특성으로 여기는 심리적 경향. 19세기 말 곡예단에서 사람들의 성격과 특징 등을 알아 내는 일을 하던 바넘(P.T. Barnum)에서 유래하였다. 1940년대 말 심리학자인.
전반사(Total Reflection)와 광통신
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
Word2Vec.
Support Vector Machine
05. General Linear List – Homework
기본 테이블세팅(로맨틱) 푸드스타일리스트 전공 김선아.
9 장 오류 검출 및 오류 정정 9.1 오류 종류 9.2 검출 9.3 오류 정정 9.4 요약.
Map Designer Solution 소개자료
2D 게임 프로그래밍 제안서 김보명.
Chapter 7 – Curves Part - I
상관계수.
게임수학 제 8 장 고급 렌더링.
학 습 목 표 1. 밑그림에 따라 채색할 수 있다. 2. 전체적인 색의 분위기와 조화를 생각할 수 있다.
수치해석 ch3 환경공학과 김지숙.
Introduction to Wavelets - G.E. Peckham
컴퓨터는 어떻게 덧셈, 뺄셈을 할까? 2011년 10월 5일 정동욱.
7 생성자 함수.
3D 농구 슛 시뮬레이션 이세기.
Presentation transcript:

ShaderX Fast Skin Shading John Hable, George Borshukov, Jim Hejl Shader Study ( 임용균

Introduction 많은 게임들이 일반적인 라이팅 모델을 피부에도 적용함 으로 플라스틱 같은 느낌이 나 피부 같은 느낌이 없다. 피부는 판지와 같은 pure diffuse surface 와는 매우 다르다. – 근본적인 차이는 피부 안에서 빛들의 반사가 매우 다름에 있다. – 피부는 투명도의 단계가 다른 여러 layer 로 구성 되어 있다. 피부 밑에서 빛이 어떻게 통과하는지에 대한 빠른 시뮬레 이션의 구현 (PS3, Xbox 360 수준을 목표 )

Background GPU Gems 3 [d’EonGPUGems07] Subsurface scattering –Step1 : 빛이 피부에 닿음 diffuse light 를 라이트맵에 렌더링 –Step2 : 빛이 피부 아래에서 반사 됨 라이트맵을 블러링함으로 시뮬레이션 –Step3 : 빛이 피부 밖으로 빠져나감. 카메라에 의해 보여짐 블러링된 빛을 diffuse map 에 multiplying 함으로 시뮬레이션

Diffuse 피부의 한 점의 diffuse 를 계산하기 위해서는 그 점 주변의 들어오는 빛의 intensity 를 알아야 한다. diffusion dipole 로 거의 해결되었다. [Donner05] – 빛과 점의 거리에 따라 red, green, blue 의 intensity 가 다른 커브를 발견. diffusion dipole 을 blur 들의 합으로 분해할 수 있다. –real-time 으로 실행할 수 있다. 5 번의 7x7 gaussian blur 가 1 번의 50x50 gaussian blur 보다 빠르다. blur 회수를 조절하여 다양한 피부 타입을 나타내는것이 가능하다. Variance (mm^2)RedGreenBlue

Our Contributions blur 의 samping pattern 을 변경함으로 additional error 를 많이 줄일 수 있었다. –d’Eon 과 Leubke 의 테크닉을 시뮬레이션 하지만 좀더 적은 tap 을 이용한다. (~12 samples) 두개의 “ 링 ” 을 이용하여 블러를 시뮬레이션 함으로 좋은 결과를 얻었다. – 각각의 링을 6 섹션으로 나눔 ( 총 12 섹션 ) – 섹션마다 jittered sample 을 한다. –sample 에 맞는 weight 를 적용한다.

Our Contributions float3 blurJitteredWeights[13] = { { , , }, { , , }, { , , }, { , , }, { , , }, { , , }, { , , }, { , , }, { , , }, { , , }, { , , }, { , , }, { , , }, }; float2 blurJitteredSamples[13] = { { , }, { , }, { , }, { , }, { , }, { , }, { , }, { , }, { , }, { , }, { , }, { , }, { , }, };

Our Contributions blur pass float3 totalColor = 0; float2 strectch = tex2D(StretchTextureBlurred, uv.xy).rg; float shadow = tex2D(LightMap, uv.xy).a; for (int i=0; i<=12; i++) totalColor += SubsurfaceJitterSampler(uv.xy, stretch, i);

Our Contributions High-Z –Light map 렌더링 패스에서 depth 를 기록한다. depth = dot(N, V) * –High-Z 를 사용하여 오직 앞면의 폴리곤에 blur 를 적용한다. 위의 공식에서는 depth 가 0.5 이상인 픽셀만 blur 를 적용하면 된다. Texture Size –Light map blur 텍스쳐는 원래의 Diffuse texture 보다 작은것을 이용한다. (512x512 fp16RGBA buffer)  Sharpness 가 많이 사라지는 문제 발생  Capture 장비 일 경우 자동 Blur 현상  최종 합성 단계에서 diffuse map 과의 합성

Our Contributions Shadow –Light map 렌더링 패스에서 shadow 를 alpha channel 에 포함 –lighting 을 픽셀마다 두번 해야 되는 단점이 있다. Diffuse component 를 계산하는 것은 Specular component 보다 저렴하므로 큰 문제는 아니다. –Light map 이 블러링 되면서 자연스러운 soft shadow 를 얻을 수 있 다.

Specular 피부는 실제적으로 매우 광택이 있다. Phong 모델은 적합하지 않음 – 하나의 퐁 모델이 나타내는 범위로는 비슷하게 표현이 불가능 적합한 Specular 모델은 ? – 여러 개의 범위를 나타낼수 있는 모델이어야 한다. –built-in fresnel term 이 있어야 한다. –grazing angle 에서 specular highlight 가 더 밝아야 한다. Kelemen-Szirmay-Kalos [Kelemen01] 모델을 사용 – 그러나 비용이 비싸다.

Variation Across the Face 얼굴의 모든 부분에 하나의 라이팅 모델을 적용하는 것은 맞지 않다. – 특정 부분은 다른 부분보다 더 밝다. – 부위마다 subsurface scattering 효과도 다르다. Specular Map 을 추가하여 Specular 를 제어 한다. – 드라마틱하게 향상되지는 않지만 추천하는 방법 Subsurfacy Map 을 추가하여 subsurface scattering 을 제어 – 크게 향상되지는 않지만 다른 느낌을 준다. – 다양한 느낌을 원한다면 이용 할 만 하다. (older dark-skinned male VS young white female)

Final Shader float diffuse = saturate(dot(lightVec, normal)); float finalShadow = tex2D(LightmapCombineBlur, uv.xy).w; float3 readModelColor = pow(tex2D(HeadDiffuse, uv.xy), 2.2); float4 outColor = float4(0, 0, 0, 1); float3 linearLightColor = pow(lightColor, 2.2) * lightBrightness; float3 diffusePoint = Kd * linearLightColor * diffuse * finalShadow; float lightmapAmount = tex2D(StretchTexture, uv.xy).b; float3 diffuseBlurred = Kd * tex2D(LightmapCombinedBllur, float2(uv.x, uv.y)).rgb; diffuseColor = blurJitteredWeights[0] diffusePoint + lerp((float3(1, 1, 1) – blurJitteredWeights[0]) * diffusePoint, diffuseBlurred, lightmapAmount); specular = KelemenSzirmauKalosSpec(normalize(viewVec), normal, lightVec, eccentricity, rolloff, weight); outColor.rgb = Ao * Ka * realModelColor + (diffuseColor * realModelColor + kS * linearLightColor * specular * finalShadow);

Data Preparation 실사적인 결과물을 얻기 위해서는 스캔 데이터를 이용하 는 것을 추천 – 데모에 사용된 머리는 XYZRGB 로 스캔되었음 Gamma correction 이 핵심적으로 필요함 – 적절한 gamma correction 이 diffuse map 들에 적용되어야 한다. Normal map 이 중요함 – 실제 얼굴의 표면은 매우 울퉁불퉁하다. –Subsurface scattering 은 모습을 부드럽게 한다.

Conclusion 기존의 방법들 (Doug Jones Demo) 과 비슷한 결과물을 내 면서 속도는 10 배 정도 빠르다. –Xbox360 에서 512x512 buffer blur step 을 0.45ms 에 실행한다. Doug Jones Demo 에 비해 품질이 떨어지는 부분이 있다. –“fleshiness” 적은 커널을 사용함으로 red channel 의 넓은 blur 를 정확히 표현하지 못한다. – 미묘한 부분의 생략 Stretching 에 약간의 문제가 있음 low stretch 부분이 high stretch 부분과 만나는 지점 알아차릴만한 blurring artifacts 가 발생함 귀 주변과 같은 부분