Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Upcoming SlideShare
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
Next
Download to read offline and view in fullscreen.

4

Share

Download to read offline

Wrapped diffuse

Download to read offline

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Wrapped diffuse

  1. 1. Wrapped Diffuse 이민웅 Shader Study
  2. 2. Wrapped Diffuse • 팀 포트리스 2에서 사용 • subsurface scattering, area light source, 더 부드러운 reflectance 를 표현하기 위해 서 Hemisphere(반구)를 감싸는 셰이딩 모 델 Lambert Wrapped Diffuse
  3. 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. 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. 5. Wrapped Diffuse • 팀 포트리스 방식 – Wrapped Function은 Half Lambert를 이용해서, 1D Wrapped Diffuse Texture에서 값을 얻어오 는것 – GPU Gems 16. Real-Time Approximation to Subsurface Scattering • Wrap Lighting 계산 내용을 미리 Texture로 저장하 여 사용함
  6. 6. WarpTex Lambert Half Lambert Warping Function 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); Light Color Ambient Albedo Ka : ambient Cl : LightColor http://www.sfdm.scad.edu/faculty/mkesson/vsfx419/wip/spring11/eric_kurzmack/toon.html
  7. 7. Specular Fresnel Mixed Specular Primary Specularity Rim Fresnel Upward Ambient Rim Final Mix http://www.sfdm.scad.edu/faculty/mkesson/vsfx419/wip/spring11/eric_kurzmack/toon.html Rim Specular
  8. 8. Code Specular Fresnel 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); } Mixed Specular 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; Rim Fresnel vector i= normalize(-I); float rimfres=pow((1-(nf.i)),2); vector i= normalize(-I); Upward Ambient Rim float upward = clamp((nf.vector(0,1,0)),0,1); float uprim= upward*rimfres*Kr*(Ka*5); Rim Specular 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); } Final Mix Ci = Oi*(diffusecolor+speccolor+uprim);
  9. 9. Q&A
  10. 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/energyconservation-in-games/ • http://www.gamedevforever.com/150 • http://cagetu.egloos.com/5621806
  • lsh1208

    Jun. 27, 2019
  • taru00

    Jul. 27, 2016
  • JinKyuKim

    Jun. 15, 2015
  • al6uiz

    Nov. 6, 2014

Views

Total views

4,254

On Slideshare

0

From embeds

0

Number of embeds

731

Actions

Downloads

19

Shares

0

Comments

0

Likes

4

×