Simple Fake bRDFs

Reference to animation4ever unity shader code tutorial movie.

Shader "CodexShader/BRDF_DiffuseWrap" {
 Properties {
  _MainTex ("Base (RGB)", 2D) = "white" {}
  _Ramp2D ("BRDF Ramp" , 2D) = "gray" {}
  _FolloffRange ("BRDF Range" , Range(0,1)) = 0.8
 }
 SubShader {
  Tags { "RenderType"="Opaque" }
  LOD 200
 
  CGPROGRAM
//  #pragma surface surf Lambert
  #pragma surface surf Ramp
  #pragma target 3.0

  sampler2D _MainTex;
  sampler2D _Ramp2D;
  float _FolloffRange;
 
  struct Input {
   float2 uv_MainTex;
  };
 
  half4 LightingRamp (SurfaceOutput s , half3 lightDir , half3 viewDir , half atten)
  {
   //float NdotL = saturate(dot(s.Normal, lightDir));
   float NdotL = dot(s.Normal, lightDir);
   float NdotE = dot(s.Normal , viewDir); // folloff code
  
   //do diffuse wrap here
   float diff = (NdotL * 0.3) + 0.5;
   float2 brdfUV = half2(NdotE * _FolloffRange , diff);
   float3 BRDF = tex2D(_Ramp2D , brdfUV.xy).rgb;
  
   float4 c;
   //c.rgb =float3(diff,diff,diff);
   c.rgb = BRDF;
   c.a = s.Alpha;
   return c;
  }
  void surf (Input IN, inout SurfaceOutput o) {
   //half4 c = float4(.5,.5,.5,1);
   half4 c = tex2D (_MainTex, IN.uv_MainTex);
   o.Albedo = c.rgb;
   o.Alpha = c.a;
  }
  ENDCG
 }
 FallBack "Diffuse"
}

Game Developer Leegoon copyright all right reserved since 2010.

Comments

  1. 잘 보고 갑니다. ㅎㅎ. 좋은 내용이 많네요.. ^^

    ReplyDelete
  2. 좋은 내용이라니 다행이네여 ^^

    ReplyDelete
  3. 좋은 내용이라니 다행이네여 ^^

    ReplyDelete

Post a Comment

덧글쓰기 기능 있는거 아시죠? ㅋㅋ