SlideShare a Scribd company logo
1 of 25
Generic Refraction Simulation Shader Study  (http://cafe.naver.com/shader.cafe) Codevania  (http://codevania.textcube.com)
Index ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Introduction ,[object Object],[object Object],[object Object]
Introduction (cont.) ,[object Object],[object Object],[object Object],[object Object],[object Object]
Introduction (cont.) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Introduction (cont.) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Beforehand ,[object Object],[object Object],[object Object],[object Object],[object Object]
Basic Technique ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Basic Technique (cont.) Example 19-1. Shader for Basic Refraction Technique
Refraction Mask ,[object Object],[object Object],[object Object],Figure 19-3 Artifacts Caused by the Technique
Refraction Mask (cont.) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Refraction Mask (cont.) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Refraction Mask (cont.) Figure 19-3 Artifacts Caused by the Technique  Figure 19-5 Artifacts Removed by Using the Refraction Mask   Figure 19-4  The Alpha Channel  in the Frame Buffer
Refraction Mask (cont.) Example 19-2. Improved Shader That Uses the Refraction Mask  to Avoid Including Pixels from Objects in Front of the Refractive Object -  이 굴절 시뮬레이션 기법을  모든 메쉬타입에 대해 적용함으로써  artifacts 를 제거할 수 있다 . -  하지만 사실 그렇게 한다고 해도 ,  Occluder Pixel Colors 를  Background Color 로 바꿨기 때문에 , 여전히  artifacts 가 존재한다 .
Example 1. Water ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Example 1. Water (cont.) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Figure 19-6 The Rendering Steps for Water
Example 1. Water (cont.) ,[object Object],[object Object],[object Object]
Example 1. Water (cont.) Example 19-3. Fresnel Approximation Computation for Water Rendering
Example 1. Water (cont.) Example 19-4. The Fragment Program for Refractive/Reflective Water   half4  main(      float3  Eye :  TEXCOORD0,      float4  Wave0, 1, 2, 3 :  TEXCOORD1, 2, 3, 4,      float4  ScreenPos :  TEXCOORD5,      uniform sampler2D  tex0, 1, 2 ) :  COLOR {      // Get bump layers…      // Average bump layers      half3  vBumpTex =  normalize ( 2.0 * (vBumpTexA.xyz + vBumpTexB.xyz + vBumpTexC.xyz + vBumpTexD.xyz) - 4.0);      // Apply individual bump scale for refraction and reflection…     // Compute projected coordinates      half2  vProj = ( ScreenPos.xy / ScreenPos.w );      half4  vReflection =  tex2D ( tex2, vProj.xy + vReflBump.xy );      half4  vRefrA =  tex2D ( tex1, vProj.xy + vRefrBump.xy );      half4  vRefrB =  tex2D ( tex1, vProj.xy );      // Mask occluders from refraction map      half4  vRefraction = vRefrB * vRefrA.w + vRefrA * ( 1 - vRefrA.w );      // Compute Fresnel term      half  NdotL =  max (  dot ( vEye, vReflBump ), 0 );      half  facing = ( 1.0 - NdotL );      half  fresnel =  Fresnel ( NdotL, 0.2, 5.0 );      // Use distance to lerp between refraction and deep water color      half  fDistScale =  saturate ( 10.0 / Wave0.w );      half3  WaterDeepColor = ( vRefraction.xyz * fDistScale + ( 1 - fDistScale ) *  half3 ( 0, 0.15, 0.115 ) );      // Lerp between water color and deep water color…     // final water = reflection_color * fresnel + water_color… }
Example 1. Water (cont.) Frame Buffer Render Target
Example 2. Glass ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Example 2. Glass (cont.) ,[object Object],[object Object],[object Object],[object Object],Figure 19-7 The Rendering Steps for Stained Glass
Example 2. Glass (cont.) Example 19-5. Shader for Refractive/Reflective Glass Simulation   half4  main (      float2  BaseUV  :   TEXCOORD0 ,      float4  ScreenPos  :   TEXCOORD1 ,      float3  Eye  :   TEXCOORD2 ,      uniform sampler2D  tex0, 1, 2, 3  )   :   COLOR {      // Get bump and apply scale, then get diffuse      half4  vBumpTex  =  2.0  *   tex2D (  tex1, BaseUV. xy   )   -   1.0;      half3  vBump  =   normalize (  vBumpTex. xyz   *  half3 (  0.2, 0.2, 1.0  )   );      half4  vDiffuse  =   tex2D (  tex0, BaseUV. xy   );      // Compute reflection vector      half  LdotN  =   dot (  vBump. xyz , vEye. xyz   );      half3  vReflect  =  2.0  *  LdotN  *  vBump. xyz   -  vEye ;      // Reflection vector coordinates used for environmental mapping      half4  vEnvMap  =   tex2D (  tex3,  (  vReflect. xy   +  1.0  )   *  0.5  );      // Compute projected coordinates and add perturbation      half2  vProj  =   (  ScreenPos. xy   /  ScreenPos. w   );      half4  vRefrA  =   tex2D (  tex2, vProj. xy   +  vBump. xy   );      half4  vRefrB  =   tex2D (  tex2, vProj. xy   );      // Mask occluders from refraction map      half4  vFinal  =  vRefrB  *  vRefrA. w   +  vRefrA  *   (  1  -  vRefrA. w   );      // Compute Fresnel term      half  fresnel  =   Fresnel (  LdotN, 0.4, 5.0  );      // Lerp between 1 and diffuse for glass transparency     vDiffuse. xyz   =   saturate (  0.1  +  vDiffuse. xyz   *  0.9  );      // Final output blends reflection and refraction using Fresnel term      return  vDiffuse  *  vFinal  *   (  1  -  fresnel  )   +  vEnvMap  *  fresnel ; }
Example 2. Glass (cont.)
Conclusion ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

More Related Content

More from codevania

14 virtual memory
14 virtual memory14 virtual memory
14 virtual memorycodevania
 
Gstar gossip
Gstar gossipGstar gossip
Gstar gossipcodevania
 
Deferred rendering transparency
Deferred rendering transparencyDeferred rendering transparency
Deferred rendering transparencycodevania
 
테스트 자동화의 원칙
테스트 자동화의 원칙테스트 자동화의 원칙
테스트 자동화의 원칙codevania
 
3장 자동적으로 움직이는 게임 에이전트 생성법
3장 자동적으로 움직이는 게임 에이전트 생성법3장 자동적으로 움직이는 게임 에이전트 생성법
3장 자동적으로 움직이는 게임 에이전트 생성법codevania
 
Spin locks 추가 자료
Spin locks 추가 자료Spin locks 추가 자료
Spin locks 추가 자료codevania
 
Texture bombing
Texture bombingTexture bombing
Texture bombingcodevania
 
Memory corruption stack
Memory corruption stackMemory corruption stack
Memory corruption stackcodevania
 
Mathematical Structures for CS [Chapter3]456
Mathematical Structures for CS [Chapter3]456Mathematical Structures for CS [Chapter3]456
Mathematical Structures for CS [Chapter3]456codevania
 
Optimizing The Content Pipeline
Optimizing The Content PipelineOptimizing The Content Pipeline
Optimizing The Content Pipelinecodevania
 
시간 있으면 설계나 합시다
시간 있으면 설계나 합시다시간 있으면 설계나 합시다
시간 있으면 설계나 합시다codevania
 
Memory Corruption Heap
Memory Corruption HeapMemory Corruption Heap
Memory Corruption Heapcodevania
 
Interactive Refractions And Caustics Using Image Space Techniques
Interactive Refractions And Caustics Using Image Space TechniquesInteractive Refractions And Caustics Using Image Space Techniques
Interactive Refractions And Caustics Using Image Space Techniquescodevania
 

More from codevania (16)

14 virtual memory
14 virtual memory14 virtual memory
14 virtual memory
 
Taocp 2_4
Taocp  2_4Taocp  2_4
Taocp 2_4
 
Taocp 2_3_1
Taocp  2_3_1Taocp  2_3_1
Taocp 2_3_1
 
Taocp 1 2-2
Taocp 1 2-2Taocp 1 2-2
Taocp 1 2-2
 
Gstar gossip
Gstar gossipGstar gossip
Gstar gossip
 
Deferred rendering transparency
Deferred rendering transparencyDeferred rendering transparency
Deferred rendering transparency
 
테스트 자동화의 원칙
테스트 자동화의 원칙테스트 자동화의 원칙
테스트 자동화의 원칙
 
3장 자동적으로 움직이는 게임 에이전트 생성법
3장 자동적으로 움직이는 게임 에이전트 생성법3장 자동적으로 움직이는 게임 에이전트 생성법
3장 자동적으로 움직이는 게임 에이전트 생성법
 
Spin locks 추가 자료
Spin locks 추가 자료Spin locks 추가 자료
Spin locks 추가 자료
 
Texture bombing
Texture bombingTexture bombing
Texture bombing
 
Memory corruption stack
Memory corruption stackMemory corruption stack
Memory corruption stack
 
Mathematical Structures for CS [Chapter3]456
Mathematical Structures for CS [Chapter3]456Mathematical Structures for CS [Chapter3]456
Mathematical Structures for CS [Chapter3]456
 
Optimizing The Content Pipeline
Optimizing The Content PipelineOptimizing The Content Pipeline
Optimizing The Content Pipeline
 
시간 있으면 설계나 합시다
시간 있으면 설계나 합시다시간 있으면 설계나 합시다
시간 있으면 설계나 합시다
 
Memory Corruption Heap
Memory Corruption HeapMemory Corruption Heap
Memory Corruption Heap
 
Interactive Refractions And Caustics Using Image Space Techniques
Interactive Refractions And Caustics Using Image Space TechniquesInteractive Refractions And Caustics Using Image Space Techniques
Interactive Refractions And Caustics Using Image Space Techniques
 

Recently uploaded

محاضرات الاحصاء التطبيقي لطلاب علوم الرياضة.pdf
محاضرات الاحصاء التطبيقي لطلاب علوم الرياضة.pdfمحاضرات الاحصاء التطبيقي لطلاب علوم الرياضة.pdf
محاضرات الاحصاء التطبيقي لطلاب علوم الرياضة.pdfKhaled Elbattawy
 
Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmibookbahareshariat
 
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmibookbahareshariat
 
FAIL REKOD PENGAJARAN.pptx fail rekod pengajaran
FAIL REKOD PENGAJARAN.pptx fail rekod pengajaranFAIL REKOD PENGAJARAN.pptx fail rekod pengajaran
FAIL REKOD PENGAJARAN.pptx fail rekod pengajaransekolah233
 
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmibookbahareshariat
 
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmibookbahareshariat
 
Saunanaine_Helen Moppel_JUHENDATUD SAUNATEENUSE JA LOODUSMATKA SÜNERGIA_strat...
Saunanaine_Helen Moppel_JUHENDATUD SAUNATEENUSE JA LOODUSMATKA SÜNERGIA_strat...Saunanaine_Helen Moppel_JUHENDATUD SAUNATEENUSE JA LOODUSMATKA SÜNERGIA_strat...
Saunanaine_Helen Moppel_JUHENDATUD SAUNATEENUSE JA LOODUSMATKA SÜNERGIA_strat...Eesti Loodusturism
 

Recently uploaded (8)

محاضرات الاحصاء التطبيقي لطلاب علوم الرياضة.pdf
محاضرات الاحصاء التطبيقي لطلاب علوم الرياضة.pdfمحاضرات الاحصاء التطبيقي لطلاب علوم الرياضة.pdf
محاضرات الاحصاء التطبيقي لطلاب علوم الرياضة.pdf
 
Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmi
 
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmi
 
FAIL REKOD PENGAJARAN.pptx fail rekod pengajaran
FAIL REKOD PENGAJARAN.pptx fail rekod pengajaranFAIL REKOD PENGAJARAN.pptx fail rekod pengajaran
FAIL REKOD PENGAJARAN.pptx fail rekod pengajaran
 
Energy drink .
Energy drink                           .Energy drink                           .
Energy drink .
 
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmi
 
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmi
 
Saunanaine_Helen Moppel_JUHENDATUD SAUNATEENUSE JA LOODUSMATKA SÜNERGIA_strat...
Saunanaine_Helen Moppel_JUHENDATUD SAUNATEENUSE JA LOODUSMATKA SÜNERGIA_strat...Saunanaine_Helen Moppel_JUHENDATUD SAUNATEENUSE JA LOODUSMATKA SÜNERGIA_strat...
Saunanaine_Helen Moppel_JUHENDATUD SAUNATEENUSE JA LOODUSMATKA SÜNERGIA_strat...
 

Generic Refraction Simulation

  • 1. Generic Refraction Simulation Shader Study (http://cafe.naver.com/shader.cafe) Codevania (http://codevania.textcube.com)
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9. Basic Technique (cont.) Example 19-1. Shader for Basic Refraction Technique
  • 10.
  • 11.
  • 12.
  • 13. Refraction Mask (cont.) Figure 19-3 Artifacts Caused by the Technique Figure 19-5 Artifacts Removed by Using the Refraction Mask Figure 19-4 The Alpha Channel in the Frame Buffer
  • 14. Refraction Mask (cont.) Example 19-2. Improved Shader That Uses the Refraction Mask to Avoid Including Pixels from Objects in Front of the Refractive Object - 이 굴절 시뮬레이션 기법을 모든 메쉬타입에 대해 적용함으로써  artifacts 를 제거할 수 있다 . - 하지만 사실 그렇게 한다고 해도 , Occluder Pixel Colors 를 Background Color 로 바꿨기 때문에 , 여전히  artifacts 가 존재한다 .
  • 15.
  • 16.
  • 17.
  • 18. Example 1. Water (cont.) Example 19-3. Fresnel Approximation Computation for Water Rendering
  • 19. Example 1. Water (cont.) Example 19-4. The Fragment Program for Refractive/Reflective Water half4 main(     float3 Eye : TEXCOORD0,     float4 Wave0, 1, 2, 3 : TEXCOORD1, 2, 3, 4,     float4 ScreenPos : TEXCOORD5,     uniform sampler2D tex0, 1, 2 ) : COLOR {     // Get bump layers…     // Average bump layers     half3 vBumpTex = normalize ( 2.0 * (vBumpTexA.xyz + vBumpTexB.xyz + vBumpTexC.xyz + vBumpTexD.xyz) - 4.0);     // Apply individual bump scale for refraction and reflection…     // Compute projected coordinates     half2 vProj = ( ScreenPos.xy / ScreenPos.w );     half4 vReflection = tex2D ( tex2, vProj.xy + vReflBump.xy );     half4 vRefrA = tex2D ( tex1, vProj.xy + vRefrBump.xy );     half4 vRefrB = tex2D ( tex1, vProj.xy );     // Mask occluders from refraction map     half4 vRefraction = vRefrB * vRefrA.w + vRefrA * ( 1 - vRefrA.w );     // Compute Fresnel term     half NdotL = max ( dot ( vEye, vReflBump ), 0 );     half facing = ( 1.0 - NdotL );     half fresnel = Fresnel ( NdotL, 0.2, 5.0 );     // Use distance to lerp between refraction and deep water color     half fDistScale = saturate ( 10.0 / Wave0.w );     half3 WaterDeepColor = ( vRefraction.xyz * fDistScale + ( 1 - fDistScale ) * half3 ( 0, 0.15, 0.115 ) );     // Lerp between water color and deep water color…     // final water = reflection_color * fresnel + water_color… }
  • 20. Example 1. Water (cont.) Frame Buffer Render Target
  • 21.
  • 22.
  • 23. Example 2. Glass (cont.) Example 19-5. Shader for Refractive/Reflective Glass Simulation half4 main (     float2 BaseUV : TEXCOORD0 ,     float4 ScreenPos : TEXCOORD1 ,     float3 Eye : TEXCOORD2 ,     uniform sampler2D tex0, 1, 2, 3 ) : COLOR {     // Get bump and apply scale, then get diffuse     half4 vBumpTex = 2.0 * tex2D ( tex1, BaseUV. xy ) - 1.0;     half3 vBump = normalize ( vBumpTex. xyz * half3 ( 0.2, 0.2, 1.0 ) );     half4 vDiffuse = tex2D ( tex0, BaseUV. xy );     // Compute reflection vector     half LdotN = dot ( vBump. xyz , vEye. xyz );     half3 vReflect = 2.0 * LdotN * vBump. xyz - vEye ;     // Reflection vector coordinates used for environmental mapping     half4 vEnvMap = tex2D ( tex3, ( vReflect. xy + 1.0 ) * 0.5 );     // Compute projected coordinates and add perturbation     half2 vProj = ( ScreenPos. xy / ScreenPos. w );     half4 vRefrA = tex2D ( tex2, vProj. xy + vBump. xy );     half4 vRefrB = tex2D ( tex2, vProj. xy );     // Mask occluders from refraction map     half4 vFinal = vRefrB * vRefrA. w + vRefrA * ( 1 - vRefrA. w );     // Compute Fresnel term     half fresnel = Fresnel ( LdotN, 0.4, 5.0 );     // Lerp between 1 and diffuse for glass transparency     vDiffuse. xyz = saturate ( 0.1 + vDiffuse. xyz * 0.9 );     // Final output blends reflection and refraction using Fresnel term     return vDiffuse * vFinal * ( 1 - fresnel ) + vEnvMap * fresnel ; }
  • 24. Example 2. Glass (cont.)
  • 25.