Wrapped Diffuse - PowerPoint PPT Presentation

hiero
wrapped diffuse n.
Skip this Video
Loading SlideShow in 5 Seconds..
Wrapped Diffuse PowerPoint Presentation
Download Presentation
Wrapped Diffuse

play fullscreen
1 / 10
Download Presentation
Wrapped Diffuse
377 Views
Download Presentation

Wrapped Diffuse

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Wrapped Diffuse 이민웅 Shader Study

  2. Wrapped Diffuse • 팀 포트리스 2에서 사용 • subsurface scattering, area light source, 더 부드러운 reflectance 를 표현하기 위해서 Hemisphere(반구)를 감싸는 셰이딩 모델 Lambert Wrapped Diffuse

  3. Wrapped Diffuse • HarfLambert공식과 비슷함 • W=1이면, Half Lambert 공식 • Half Lambert와 유사하게 투과되는 느낌을 표현하는데 많이 사용 • 피부, 나뭇잎, 파티클라이팅에 주로 사용 기본 Lambert Diffuse 공식 float diffuse = max(0, dot(normal, lightdirection)); 기본 HalfLambert Diffuse 공식 float halflambert_term = dot(normal, lightdirection) * 0.5f + 0.5f Wrapped Diffuse 공식 float diffuse = saturate((dot(normal, lightdirection) + OFFSET) / (1.0+OFFSET ));

  4. Wrapped Diffuse Wrapped SH 자세한 내용 http://blog.selfshadow.com/2011/12/31/righting-wrap-part-1/ http://blog.selfshadow.com/2012/01/07/righting-wrap-part-2/ Wrap Shading www.iro.umontreal.ca/~derek/files/jgt_wrap.pdf

  5. Wrapped Diffuse • 팀 포트리스 방식 • Wrapped Function은 Half Lambert를 이용해서, 1D Wrapped Diffuse Texture에서 값을 얻어오는 것 • GPU Gems 16. Real-Time Approximation to Subsurface Scattering • Wrap Lighting 계산 내용을 미리 Texture로 저장하여 사용함

  6. WarpTex Half Lambert Warping Function Lambert Squared Half Lambert (Not used) illuminance( P, n, PI) { Ln = normalize(L); halflambert += .5*(Ln.nf)+.5; float chl = clamp(halflambert,0.01,1); accumulateMapColor = texture(warp,chl,0)*2; hlsw_clrlght += Cl*accumulateMapColor; } diffusecolor = albedocolor * (Ka + hlsw_clrlght); Ka : ambient Cl : LightColor Light Color Albedo Ambient http://www.sfdm.scad.edu/faculty/mkesson/vsfx419/wip/spring11/eric_kurzmack/toon.html

  7. Specular Fresnel Primary Specularity Rim Fresnel Rim Specular Mixed Specular Upward Ambient Rim Final Mix http://www.sfdm.scad.edu/faculty/mkesson/vsfx419/wip/spring11/eric_kurzmack/toon.html

  8. Code Mixed Specular Specular Fresnel illuminance( P, n, PI/2) { Ln = normalize(L); vector R = reflect(-Ln,nf); vector R2 = reflect(Ln,nf); ridot += clamp(max(0,(R.i)),.01,.99); ridot2 += clamp(max(0,(R2.i)),.01,.99); phngspec += (1-fres)*pow(ridot,specE); phngrim += rimfres*pow(ridot2,Krim); phngmix += Cl*Ks*(max(phngrim,phngspec)*2); } speccolor = phngmix; vector i= normalize(-I); float fres=spline((nf.i),1,1,1,.95,.6,.6); Primary Specularity illuminance( P, n, PI/2) { Ln = normalize(L); vector R = reflect(-Ln,nf); ridot += clamp(max(0,(R.i)),.01,.99); phngspec += (1-fres)*pow(ridot,specE); } Rim Fresnel Upward Ambient Rim vector i= normalize(-I); float rimfres=pow((1-(nf.i)),2); vector i= normalize(-I); float upward = clamp((nf.vector(0,1,0)),0,1); float uprim= upward*rimfres*Kr*(Ka*5); Rim Specular Final Mix illuminance( P, n, PI/2) { Ln = normalize(L); vector R2 = reflect(Ln,nf); ridot2 += clamp(max(0,(R2.i)),.01,.99); phngrim += rimfres*pow(ridot2,Krim); } Ci = Oi*(diffusecolor+speccolor+uprim);

  9. Q&A

  10. 참고자료 • Wrap Shading : http://www.iro.umontreal.ca/~derek/publication8.html • Energy-Conserving Wrapped Diffuse • Wrapped Diffuse와 팀포트리스 셰이딩: http://cagetu.egloos.com/5621806 • 팀포트리스셰이딩따라해보기: http://cagetu.egloos.com/4212681 • Energy Conservation in Games : http://www.rorydriscoll.com/2009/01/25/energy-conservation-in-games/ • http://www.gamedevforever.com/150 • http://cagetu.egloos.com/5621806