Shader/Unity surface shader2012. 8. 27. 08:47

내장 BlinnPhong Shader를 커스텀 라이트 로 표현

 

커스텀 버텍스 스펙큘러 라이트......알파에 스펙뮬러를 적용 안한 라이트라 버텍스로 스펙쿨러가 적용되고있다....

예제는 여기 까지지만 노멀과 림, 리플렉션 등등을 넣으려면 이 커스텀 라이트는 기본 모델일뿐 적용할곳을 몇군데 바꿔야 하는 라이트가 되겠네....역시 예제는 예제일뿐... 실제 적용은 다른 얘기지....

 

다음 공부는 거의 모든 기능이 들어간 서피스 라이트 하나 구현해보고 플레그먼크 셰이더로 넘어가 보자.....

 

 

Shader "DY/surf_Specular" {
 Properties{
  _MainTex("Texture",2D)="white"{}
 }
 
 SubShader{
  Tags{"RenderType"="Opaque"}
  CGPROGRAM
  #pragma surface surf SimpleSpecular
  
  half4 LightingSimpleSpecular (SurfaceOutput s, half3 lightDir, half3 viewDir, half atten){

   half3 h = normalize (lightDir + viewDir);

 //스펙큘러를 위한 하프노말.

 

   half diff = max(0, dot(s.Normal, lightDir));

//디뷰즈 라이트를 위한 닷..max함수로 음수로 못돌아가게 한것 같다.
   
   float nh = max(0,dot(s.Normal,h));

//하프노멀에 노멀을 닷 해 스펙큘러를 구했다 역시나 max함수 사용.
   
   float spec = pow(nh, 48.0);

//pow함수를 이용해 스펙큘러 구현.
   
   half4 c;
   c.rgb = (s.Albedo * _LightColor0.rgb * diff + _LightColor0.rgb * spec) * (atten * 2);

//모든 라이트가 버텍스라이트로 들어가 있다.

 

   c.a = s.Alpha;

//여기서 알파는 별달리 의미가 없다


   return c;
  }
  
  struct Input{
   float2 uv_MainTex;
  };
  
  sampler2D _MainTex;
  
  void surf (Input IN, inout SurfaceOutput o){
   o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb;
  }
  
  ENDCG
 }
 Fallback"Diffuse"
}

 

 

 

 

 

 

 

 

 

 

Posted by monsters

댓글을 달아 주세요