Cheap Realistic Skin Shading
Overview
• 일반적인 Skin Models
• New Skin Model
– Ideas
– BRDF
– Layers
– Back Scattering
– Blended Normals
– Shadows
– Extras
• 결과
• 결론
일반적인 Skin Models
• Red wrapped lighting
– http://http.developer.nvidia.com/GPUGems/gpugems_ch16.html
• Texture-space diffusion
– http://http.developer.nvidia.com/GPUGems3/gpugems3_ch14.html
• Texture-space diffusion (12-tap)
– http://advances.realtimerendering.com/s2010/Hable-Uncharted2(SIGGRAPH 2010 Advanced RealTime Rendering
Course).pptx
• Screen-space diffusion
– http://giga.cps.unizar.es/~diegog/ficheros/pdf_papers/TAP_Jimenez_LR.pdf
• Blended Normals
– http://advances.realtimerendering.com/s2010/Hable-Uncharted2(SIGGRAPH 2010 Advanced RealTime Rendering
Course).pptx
• Offline “Fast-Skin Shaders”
– http://www.google.ca/#hl=en&source=hp&biw=1920&bih=965&q=fast+skin+shader&aq=f&aqi=g-
m5&aql=&oq=&gs_rfai=&fp=bc38547320fe36d4
일반적인 Skin Models
• 가장 현실적으로 표현할 수 있는 기술들이 인기가
있음
• 각 모델에는 장,단점이 있음
– 계산 비용은 매우 저렴하지만 조잡함
– 계산 비용이 크면 퀄리티가 우수함
• 어느정도 완성된(꾸며진) 조명에서는 잘 되지만 날카로운
조명에서는 안좋음
• 그 중간의 대안이 필요함
– 저렴하고 퀄리티가 좋아야 함
New Skin Model
• 물리적계산 없음
• 정확한 계산은 않하지만 보기에 좋음
• 다른 기술들을의 핵심 개념을 사용함
• Fast-Skin Shader, Human Skin Shader…
– 멀티 레이어 사용
– 물리적 기반 BRDF.
– 일반적으로 표현해야 할 것
• 그림자 가장자리의 붉은 표현
• 부드러운 표현
• 거친 표현 낮추기
New Skin Model - Ideas
• 다른 모델의 개념을 사용
– Kelemen/Szirmay-Kalos BRDF 사용
• 최적화와 상대적으로 계산 비용이 저렴
• 미리 계산하여 텍스쳐를 저장하여 사용함
– “Fast-Skin Shaders”의 멀티레이어를 사용
• 질감레이어 사용 (epidermal(표피), subdermal(피부,진피)).
• 조금 블러링 된 Epidermal layer
• 많이 블러링 된 Subdermal layer
• Diffuse(0.5) + Subdermal(0.2) + Epidermal(0.3)
– normal map을 혼합하여 부드러운 Blended Normals 을
사용
New Skin Model - BRDF
• Kelemen/Szirmay-Kalos BRDF 최적화
– fresnel to texture 저장
• 왜 하나의 specular term을 사용?
– beckmann texture 4개의 채널을 가질 수 있음
– 쉐이더에서 계산대신 4개의 float값을 사용
– Weigh them은 간단한 dot product 사용하여 구함
New Skin Model – BRDF (Code)
미리 계산하여 텍스쳐를 뽑음
정밀하게 계산할 필요가 없음// Computes beckmann distribution
// To bake to texture: texCoord.x = NdotH, texCoord.y = Exp
float4 GetBeckmannDistribution( float NdotH, float Exp )
{
// Some roughness weights
float4 m = half4(1, 0.12, 0.023, 0.012) * (Exp * Exp);
float alpha = acos( NdotH );
float ta = tan( alpha );
float4 val = 1.0 / (m * pow(NdotH, 4.0)) * exp(-(ta * ta) / m);
// Scale the value to fit within [0-1]
return 0.5 * pow( val , 0.1 );
}
// Computes fresnel reflectance (can be computed on the fly no problem)
// To bake to texture: HdotV = texCoord.x, texCoord.y = F0
float GetFresnelKS( float3 HdotV, float F0 )
{
float base = 1.0 - HdotV;
float exponential = pow( base, 5.0 );
return exponential + F0 * ( 1.0 - exponential );
}
Code modified from NVIDIA’s implementation.
New Skin Model – BRDF (Code)
float KelemenSzirmayTex( float3 N, float3 L, float3 V, float Exp, float F0 )
{
// Pretty straightforward
float NdotL = saturate(dot(N, L));
float h = L + V;
float H = normalize(h);
float HdotV = dot(H, V);
// Get fresnel from texture; 0.028 is a good value for F0
float fFresnel = tex2D(fresnelTex, float2(HdotV, F0));
// float fFresnel = GetFresnelKS(HdotV, F0 ); // Math version.
// Get beckmann distributions from texture
float4 fBeckmann = pow(2.0 * tex2D(beckmannSampler, float2(NdotH, Exp)), 10);
float4 fSpec = max( (fBeckmann * fFresnel) / dot( h, h ), 0 );
// Weight results using dot product
float result = saturate( NdotL ) * dot(fSpec, half4(1.0, 0.625, 0.075, 0.005));
return result;
}
New Skin Model – BRDF (Result)
New Skin Model - Layers
• 멀티 레이어를 만듬
– 레이어 마다 새로운 텍스쳐 생성
– 실제 해상도 보다 텍스쳐가 작으면 비용이 저렴함
– 라이트 레이어
• 블러된 상태에서 라이트를 계산
• Diffuse는 않함
• ~0.8 – 0.9 for epidermal.
• ~0.7 – 0.8 for subdermal.
– 각 텍스쳐에 조명을 적용함
Epidermal = 0.3, Subdermal = 0.2, Diffuse = 0.5
New Skin Model – Layers (Textures)
Diffuse Epidermal Subdermal
Back Scattering Specular Normal
New Skin Model – Layers (Image)
New Skin Model – Back Scattering
• 매우 간단함
– N·L과 간단한 계산
• 반투명 텍스쳐에 마스크 채널사용
– Subdermal(진피) map 알파채널 사용
– 버텍스 칼라값을 사용할수도 있음
• 날카로운 그림자를 사용안함
– 소프트 그림자를 사용하여 산란(backscattering)효과
– Translucent shadow maps.
– 그림자 영역이 재대로 가려지지 않을 수 있음
• 아직 기술이 불완전함
New Skin Model – Back Scattering (Code)
float3 BackLighting(float3 lightColor, float NdotL, float shadowMap, float transTex)
{
// Calculate back scattering.
float backLight = lerp(NdotL, 1.0, transTex) - lerp(NdotL, 1.0, 0.4);
float3 result = saturate(backLight) * lightColor * shadowMap * backScatterStrength * backScatterColor;
return result;
}
New Skin Model – Back Scattering (Image)
New Skin Model – Blended Normals
• blended normals 사용
– 언차티드 2 에서 사용
• 버택스 노말의 N·L 계산과 노말맵의 N·L 계산
– 다른 레이어들의 계산을 디퓨즈 채널에 통합
• 각 채널에 대한 강도를 설정
– 완벽하게 부드러운 normal은 필요하지 않음
– 사용할 수 있는 좋은 범위:
» Red = 0.5 – 0.7
» Green/Blue = 0.15 – 0.4
– Intensity 는 설정할수 있음
» 0-1
New Skin Model – Blended Normals (Code)
float3 BlendNormals(float lightDiffusion, float vertexNdotL, float bumpNdotL, float3
lightPos)
{
// 값은 조정이 가능
float redIntensity = lerp(0.0f, 0.6f, skinDiffusionAmount);
float greenBlueIntensity = lerp(0.0f, 0.4f, skinDiffusionAmount);
float red = lerp(vertexNdotL, bumpNdotL, redIntensity);
float greenBlue = lerp(vertexNdotL, bumpNdotL, greenBlueIntensity);
greenBlue = min(red, greenBlue); // 필요없는 부분 제거
float3 result = float3(red, greenBlue.xx);
return saturate(result);
}
New Skin Model – Blended Normals (Image)
New Skin Model – Shadows
• 확산 과정(라이트계산?)에서 그림자를
포함하지 않는 것에 대해 보상해야 함
• 2 Options:
– 블러된 그림자맵을 레이어에 사용
• 그림자에 블러를 사용하면 비용이 있음
• 오브젝트당 한다면 안 좋음
New Skin Model - Shadows (cont.)
• 선명한 그림자
– pow() 사용하여 선명한 그림자를 만듬
– Subdermal 사용하지 않음
– Epidermal 작은값을 사용 (~2-4).
– Diffuse 큰값을 사용 (~8-16).
– 상대적으로 그림자를 선명도를 조절
• 그림자 영역에 반사되는 붉은색(피)영역이 보임
New Skin Model - Shadows (cont.)
• Blended Shadows.
– 붉은(피) 표현의 그림자에 대해서 각 레이어의 그림자
선명도를 줄임
• 2개의 shadowpow.xy을 사용하여 계산
• 값을 미리 지정
• red 와 green/blue 채널을 혼합
– 빨간색 가장자리 색
– 가장자리일 경우 빨간색 채도 감소
• subdermal layer ( – ).
• epidermal layer ( – ).
• diffuse ( – ).
• 결과가 좋으면 무시할 수 있음
New Skin Model – Shadows (Code)
float3 BlendShadows(float2 shadowPow, float shadowMap)
{
float shadowR = pow(shadowMap, shadowPow.x); // subdermal
float shadowGB = pow(shadowMap, shadowPow.y); // epidermal
// Blend shadows
float red = lerp(shadowGB, shadowR, skinDiffusionAmount);
float greenBlue = lerp(shadowGB, shadowR, skinDiffusionAmount * 0.5);
float3 result = float3( red, greenBlue.xx );
// 그림자를 빨간색으로 만들기 위해..채도를 감소
result = lerp(result, dot(result, float3(0.33, 0.59, 0.11)), 0.75);
return saturate(result);
}
New Skin Model – Shadows (Image)
Pure diffuse layer Pure epidermal/subdermal layers
New Skin Model - Extras
• Rim Lighting
– fresnel (N·V) 계산
– rim term 계산
• Rim = smoothstep(0.0, 0.5, fresnel) * rimStrength;
– 라이트 계산뒤 specular 추가
• spec += rim * lightColor * pow(N·H, rimPower) * N·L
* shadowMap;
• Melanin(색소)
– Diffuse 텍스쳐의 luminance(휘도)를 계산
• lum = dot(diffuse, float3(0.33, 0.59, 0.11));
– diffuse 와 계산
– diffuse * lerp(1.0, diffuse*lum, melanin);
New Skin Model – Notes
• 선명한 그림자는 모든 레이어서 사용 할 필요가
없음
– 단순화된 그림자를 적용할 수 있음
– 피 표현에 대해 좋다
• 여러 번 blended normals 수행
– 각 레이어 계산시 노말에 대한 강도를 조절하여 다향성을 만듬
• Backscattering 색상은 제한 되지 않음
– Subdermal texture.
– 반투명 램프
결과
결과
Standard NdotL + Blinn-phong (physical model) Skin Shading, no SSS Skin Shading, full SSS
결론
• Kelemen/Szirmay-Kalos BRDF 사용
– 텍스쳐를 구워 사용 beckmann, fresnel
• 라이트가 래핑된 레이어에 산란 (subsurface scattering)
– Epidermal, subdermal.
– Keep wrapping at a minimum to avoid washing out the lighting.
• 부드러운 노말을 사용 (blended normals )
• 그림자에 pow() 함수를 통해 선명도를 조절하여 피기가 도는
그림자를 만듬
• Backscattering 은 간단한 마스크 맵을 사용해서 N·L 계산
– 매우 저렴한 계산
• 추가 효과 적용
– rim lighting ,melanin
결론
• 비용이 저렴하고 보기 좋음
• 다양한 분산효과(scattering effects)
• (bleeding shadows, back lighting)
• 여러 캐릭터에 적용할 수 있음
• 확산 방법이 정확하지 않음
• 완전하지 않음
Thanks for viewing! 
• References:
• Screen-Space Perceptual Rendering of Human Skin, Jorge Jimenez, Veronica Sundstedt,
Diego Gutierrez, 2009
– http://giga.cps.unizar.es/~diegog/ficheros/pdf_papers/TAP_Jimenez_LR.pdf
• Efficient Rendering of Human Skin, Eugene d'Eon, David Luebke, and Eric Enderton,
Eurographics 2007
– http://http.developer.nvidia.com/GPUGems3/gpugems3_ch14.html
• Real-Time Approximations to Subsurface Scattering, Simon Green, 2004
– http://http.developer.nvidia.com/GPUGems/gpugems_ch16.html
• Uncharted 2: Character Lighting and Shading, John Hable, 2010
• http://advances.realtimerendering.com/s2010/Hable-
Uncharted2(SIGGRAPH%202010%20Advanced%20RealTime%20Rendering%20Course).pptx
• Crafting Physically Motivated Shading Models for Game Development, Naty Hoffman, 2010
– http://renderwonk.com/publications/s2010-shading-
course/hoffman/s2010_physically_based_shading_hoffman_b.pdf
• Real-Time Realistic Skin Translucency, Jorge Jimenez, David Whelan, Veronica Sundstedt,
Diego Gutierrez, 2010
• http://giga.cps.unizar.es/~diegog/projects/IEEE/ieee.html
FinHead model available at Infinite-3D
http://www.youtube.com/watch?v=AX9zQ5BdAvo

Cheap realisticskinshading kor

  • 1.
  • 2.
    Overview • 일반적인 SkinModels • New Skin Model – Ideas – BRDF – Layers – Back Scattering – Blended Normals – Shadows – Extras • 결과 • 결론
  • 3.
    일반적인 Skin Models •Red wrapped lighting – http://http.developer.nvidia.com/GPUGems/gpugems_ch16.html • Texture-space diffusion – http://http.developer.nvidia.com/GPUGems3/gpugems3_ch14.html • Texture-space diffusion (12-tap) – http://advances.realtimerendering.com/s2010/Hable-Uncharted2(SIGGRAPH 2010 Advanced RealTime Rendering Course).pptx • Screen-space diffusion – http://giga.cps.unizar.es/~diegog/ficheros/pdf_papers/TAP_Jimenez_LR.pdf • Blended Normals – http://advances.realtimerendering.com/s2010/Hable-Uncharted2(SIGGRAPH 2010 Advanced RealTime Rendering Course).pptx • Offline “Fast-Skin Shaders” – http://www.google.ca/#hl=en&source=hp&biw=1920&bih=965&q=fast+skin+shader&aq=f&aqi=g- m5&aql=&oq=&gs_rfai=&fp=bc38547320fe36d4
  • 4.
    일반적인 Skin Models •가장 현실적으로 표현할 수 있는 기술들이 인기가 있음 • 각 모델에는 장,단점이 있음 – 계산 비용은 매우 저렴하지만 조잡함 – 계산 비용이 크면 퀄리티가 우수함 • 어느정도 완성된(꾸며진) 조명에서는 잘 되지만 날카로운 조명에서는 안좋음 • 그 중간의 대안이 필요함 – 저렴하고 퀄리티가 좋아야 함
  • 5.
    New Skin Model •물리적계산 없음 • 정확한 계산은 않하지만 보기에 좋음 • 다른 기술들을의 핵심 개념을 사용함 • Fast-Skin Shader, Human Skin Shader… – 멀티 레이어 사용 – 물리적 기반 BRDF. – 일반적으로 표현해야 할 것 • 그림자 가장자리의 붉은 표현 • 부드러운 표현 • 거친 표현 낮추기
  • 6.
    New Skin Model- Ideas • 다른 모델의 개념을 사용 – Kelemen/Szirmay-Kalos BRDF 사용 • 최적화와 상대적으로 계산 비용이 저렴 • 미리 계산하여 텍스쳐를 저장하여 사용함 – “Fast-Skin Shaders”의 멀티레이어를 사용 • 질감레이어 사용 (epidermal(표피), subdermal(피부,진피)). • 조금 블러링 된 Epidermal layer • 많이 블러링 된 Subdermal layer • Diffuse(0.5) + Subdermal(0.2) + Epidermal(0.3) – normal map을 혼합하여 부드러운 Blended Normals 을 사용
  • 7.
    New Skin Model- BRDF • Kelemen/Szirmay-Kalos BRDF 최적화 – fresnel to texture 저장 • 왜 하나의 specular term을 사용? – beckmann texture 4개의 채널을 가질 수 있음 – 쉐이더에서 계산대신 4개의 float값을 사용 – Weigh them은 간단한 dot product 사용하여 구함
  • 8.
    New Skin Model– BRDF (Code) 미리 계산하여 텍스쳐를 뽑음 정밀하게 계산할 필요가 없음// Computes beckmann distribution // To bake to texture: texCoord.x = NdotH, texCoord.y = Exp float4 GetBeckmannDistribution( float NdotH, float Exp ) { // Some roughness weights float4 m = half4(1, 0.12, 0.023, 0.012) * (Exp * Exp); float alpha = acos( NdotH ); float ta = tan( alpha ); float4 val = 1.0 / (m * pow(NdotH, 4.0)) * exp(-(ta * ta) / m); // Scale the value to fit within [0-1] return 0.5 * pow( val , 0.1 ); } // Computes fresnel reflectance (can be computed on the fly no problem) // To bake to texture: HdotV = texCoord.x, texCoord.y = F0 float GetFresnelKS( float3 HdotV, float F0 ) { float base = 1.0 - HdotV; float exponential = pow( base, 5.0 ); return exponential + F0 * ( 1.0 - exponential ); } Code modified from NVIDIA’s implementation.
  • 9.
    New Skin Model– BRDF (Code) float KelemenSzirmayTex( float3 N, float3 L, float3 V, float Exp, float F0 ) { // Pretty straightforward float NdotL = saturate(dot(N, L)); float h = L + V; float H = normalize(h); float HdotV = dot(H, V); // Get fresnel from texture; 0.028 is a good value for F0 float fFresnel = tex2D(fresnelTex, float2(HdotV, F0)); // float fFresnel = GetFresnelKS(HdotV, F0 ); // Math version. // Get beckmann distributions from texture float4 fBeckmann = pow(2.0 * tex2D(beckmannSampler, float2(NdotH, Exp)), 10); float4 fSpec = max( (fBeckmann * fFresnel) / dot( h, h ), 0 ); // Weight results using dot product float result = saturate( NdotL ) * dot(fSpec, half4(1.0, 0.625, 0.075, 0.005)); return result; }
  • 10.
    New Skin Model– BRDF (Result)
  • 11.
    New Skin Model- Layers • 멀티 레이어를 만듬 – 레이어 마다 새로운 텍스쳐 생성 – 실제 해상도 보다 텍스쳐가 작으면 비용이 저렴함 – 라이트 레이어 • 블러된 상태에서 라이트를 계산 • Diffuse는 않함 • ~0.8 – 0.9 for epidermal. • ~0.7 – 0.8 for subdermal. – 각 텍스쳐에 조명을 적용함 Epidermal = 0.3, Subdermal = 0.2, Diffuse = 0.5
  • 12.
    New Skin Model– Layers (Textures) Diffuse Epidermal Subdermal Back Scattering Specular Normal
  • 13.
    New Skin Model– Layers (Image)
  • 14.
    New Skin Model– Back Scattering • 매우 간단함 – N·L과 간단한 계산 • 반투명 텍스쳐에 마스크 채널사용 – Subdermal(진피) map 알파채널 사용 – 버텍스 칼라값을 사용할수도 있음 • 날카로운 그림자를 사용안함 – 소프트 그림자를 사용하여 산란(backscattering)효과 – Translucent shadow maps. – 그림자 영역이 재대로 가려지지 않을 수 있음 • 아직 기술이 불완전함
  • 15.
    New Skin Model– Back Scattering (Code) float3 BackLighting(float3 lightColor, float NdotL, float shadowMap, float transTex) { // Calculate back scattering. float backLight = lerp(NdotL, 1.0, transTex) - lerp(NdotL, 1.0, 0.4); float3 result = saturate(backLight) * lightColor * shadowMap * backScatterStrength * backScatterColor; return result; }
  • 16.
    New Skin Model– Back Scattering (Image)
  • 17.
    New Skin Model– Blended Normals • blended normals 사용 – 언차티드 2 에서 사용 • 버택스 노말의 N·L 계산과 노말맵의 N·L 계산 – 다른 레이어들의 계산을 디퓨즈 채널에 통합 • 각 채널에 대한 강도를 설정 – 완벽하게 부드러운 normal은 필요하지 않음 – 사용할 수 있는 좋은 범위: » Red = 0.5 – 0.7 » Green/Blue = 0.15 – 0.4 – Intensity 는 설정할수 있음 » 0-1
  • 18.
    New Skin Model– Blended Normals (Code) float3 BlendNormals(float lightDiffusion, float vertexNdotL, float bumpNdotL, float3 lightPos) { // 값은 조정이 가능 float redIntensity = lerp(0.0f, 0.6f, skinDiffusionAmount); float greenBlueIntensity = lerp(0.0f, 0.4f, skinDiffusionAmount); float red = lerp(vertexNdotL, bumpNdotL, redIntensity); float greenBlue = lerp(vertexNdotL, bumpNdotL, greenBlueIntensity); greenBlue = min(red, greenBlue); // 필요없는 부분 제거 float3 result = float3(red, greenBlue.xx); return saturate(result); }
  • 19.
    New Skin Model– Blended Normals (Image)
  • 20.
    New Skin Model– Shadows • 확산 과정(라이트계산?)에서 그림자를 포함하지 않는 것에 대해 보상해야 함 • 2 Options: – 블러된 그림자맵을 레이어에 사용 • 그림자에 블러를 사용하면 비용이 있음 • 오브젝트당 한다면 안 좋음
  • 21.
    New Skin Model- Shadows (cont.) • 선명한 그림자 – pow() 사용하여 선명한 그림자를 만듬 – Subdermal 사용하지 않음 – Epidermal 작은값을 사용 (~2-4). – Diffuse 큰값을 사용 (~8-16). – 상대적으로 그림자를 선명도를 조절 • 그림자 영역에 반사되는 붉은색(피)영역이 보임
  • 22.
    New Skin Model- Shadows (cont.) • Blended Shadows. – 붉은(피) 표현의 그림자에 대해서 각 레이어의 그림자 선명도를 줄임 • 2개의 shadowpow.xy을 사용하여 계산 • 값을 미리 지정 • red 와 green/blue 채널을 혼합 – 빨간색 가장자리 색 – 가장자리일 경우 빨간색 채도 감소 • subdermal layer ( – ). • epidermal layer ( – ). • diffuse ( – ). • 결과가 좋으면 무시할 수 있음
  • 23.
    New Skin Model– Shadows (Code) float3 BlendShadows(float2 shadowPow, float shadowMap) { float shadowR = pow(shadowMap, shadowPow.x); // subdermal float shadowGB = pow(shadowMap, shadowPow.y); // epidermal // Blend shadows float red = lerp(shadowGB, shadowR, skinDiffusionAmount); float greenBlue = lerp(shadowGB, shadowR, skinDiffusionAmount * 0.5); float3 result = float3( red, greenBlue.xx ); // 그림자를 빨간색으로 만들기 위해..채도를 감소 result = lerp(result, dot(result, float3(0.33, 0.59, 0.11)), 0.75); return saturate(result); }
  • 24.
    New Skin Model– Shadows (Image) Pure diffuse layer Pure epidermal/subdermal layers
  • 25.
    New Skin Model- Extras • Rim Lighting – fresnel (N·V) 계산 – rim term 계산 • Rim = smoothstep(0.0, 0.5, fresnel) * rimStrength; – 라이트 계산뒤 specular 추가 • spec += rim * lightColor * pow(N·H, rimPower) * N·L * shadowMap; • Melanin(색소) – Diffuse 텍스쳐의 luminance(휘도)를 계산 • lum = dot(diffuse, float3(0.33, 0.59, 0.11)); – diffuse 와 계산 – diffuse * lerp(1.0, diffuse*lum, melanin);
  • 26.
    New Skin Model– Notes • 선명한 그림자는 모든 레이어서 사용 할 필요가 없음 – 단순화된 그림자를 적용할 수 있음 – 피 표현에 대해 좋다 • 여러 번 blended normals 수행 – 각 레이어 계산시 노말에 대한 강도를 조절하여 다향성을 만듬 • Backscattering 색상은 제한 되지 않음 – Subdermal texture. – 반투명 램프
  • 27.
  • 28.
    결과 Standard NdotL +Blinn-phong (physical model) Skin Shading, no SSS Skin Shading, full SSS
  • 29.
    결론 • Kelemen/Szirmay-Kalos BRDF사용 – 텍스쳐를 구워 사용 beckmann, fresnel • 라이트가 래핑된 레이어에 산란 (subsurface scattering) – Epidermal, subdermal. – Keep wrapping at a minimum to avoid washing out the lighting. • 부드러운 노말을 사용 (blended normals ) • 그림자에 pow() 함수를 통해 선명도를 조절하여 피기가 도는 그림자를 만듬 • Backscattering 은 간단한 마스크 맵을 사용해서 N·L 계산 – 매우 저렴한 계산 • 추가 효과 적용 – rim lighting ,melanin
  • 30.
    결론 • 비용이 저렴하고보기 좋음 • 다양한 분산효과(scattering effects) • (bleeding shadows, back lighting) • 여러 캐릭터에 적용할 수 있음 • 확산 방법이 정확하지 않음 • 완전하지 않음
  • 31.
    Thanks for viewing! • References: • Screen-Space Perceptual Rendering of Human Skin, Jorge Jimenez, Veronica Sundstedt, Diego Gutierrez, 2009 – http://giga.cps.unizar.es/~diegog/ficheros/pdf_papers/TAP_Jimenez_LR.pdf • Efficient Rendering of Human Skin, Eugene d'Eon, David Luebke, and Eric Enderton, Eurographics 2007 – http://http.developer.nvidia.com/GPUGems3/gpugems3_ch14.html • Real-Time Approximations to Subsurface Scattering, Simon Green, 2004 – http://http.developer.nvidia.com/GPUGems/gpugems_ch16.html • Uncharted 2: Character Lighting and Shading, John Hable, 2010 • http://advances.realtimerendering.com/s2010/Hable- Uncharted2(SIGGRAPH%202010%20Advanced%20RealTime%20Rendering%20Course).pptx • Crafting Physically Motivated Shading Models for Game Development, Naty Hoffman, 2010 – http://renderwonk.com/publications/s2010-shading- course/hoffman/s2010_physically_based_shading_hoffman_b.pdf • Real-Time Realistic Skin Translucency, Jorge Jimenez, David Whelan, Veronica Sundstedt, Diego Gutierrez, 2010 • http://giga.cps.unizar.es/~diegog/projects/IEEE/ieee.html
  • 32.
    FinHead model availableat Infinite-3D http://www.youtube.com/watch?v=AX9zQ5BdAvo

Editor's Notes

  • #2 계산 비용이 적고 리얼한 피부 쉐이딩
  • #4 여기에 있는 문서 및 논문을 바탕으로 설계
  • #8 Weigh 무게