서피스 셰이더 공부 시작.....예전에 문서 다 읽어 봤지만 마치 처음 읽어 보는 것 같은 이 이상한 기분..;;;;

 

이번은 서피스 셰이더 예제 따라하기~

 

1. 램버트 라이트 에 색상만 출력하는 초 간단 셰이더

 

Shader "DY/surf_ex_001" {
 SubShader{
  Tags{"RenderType"="Opaque"}
  
  CGPROGRAM
  #pragma surface surf Lambert

//기본으로 지정되있는 램버트 라이트 사용
  
   struct Input {
    float4 color : COLOR;
   };

//인풋은 달랑 색상만 받는다


   void surf (Input IN, inout SurfaceOutput o){
    o.Albedo = 0.5;
   }

//Albedo는 색상(Diffuse) 정하는 구문이고 0.5 는 컬러값 (회색)을 준다.
  ENDCG
  }
  //SubShader
}
//Shader

 

 

 

 

 

==========================================================================================

 

 

2. 텍스쳐 추가...디퓨즈 셰이더

 

Shader "DY/surf_ex_002" {
 Properties{
  _MainTex("Texture",2D)="White"{}
 }
 SubShader{
  Tags{"RanderType"="Opaque"}
  CGPROGRAM
  #pragma surface surf Lambert
  
  struct Input{
   float2 uv_MainTex;
  };
  //인풋에 메인 텍스쳐의 uv정보를 받아온다.


  sampler2D _MainTex;
  //2D텍스쳐를 사용하기 위한 참조.


  void surf(Input IN, inout SurfaceOutput o){
   o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb;
  }

//디퓨즈에 해당하는Albedo에 메인 텍스쳐와 인풋의 uv정보를 적용.
  
  ENDCG
 }
 Fallback "Diffuse"

//그래픽카드가 안맞거나 오류가 생기면 디뷰즈 셰이더로 대체.
}

 

 

 

 

 

 

==========================================================================================

 

 

3. 범프맵 추가 ......(사칙연산이 되는구나......좋다! 서피스!!)

 

Shader "DY/surf_ex_003" {
 Properties{
  _MainTex("Texture",2D)="white"{}
  _BumpMap("Bumpmap",2D)="bump"{}
 }
 SubShader{
  Tags{"RanderType"="Opaque"}
  
  CGPROGRAM
  #pragma surface surf Lambert
  
  struct Input{
   float2 uv_MainTex;
   float2 uv_BumpMap;
  };
  //인풋에 범프맵 uv추가.


  sampler2D _MainTex;
  sampler2D _BumpMap;

//범프맵도 2D텍스쳐니까 참조 추가.
  
  void surf(Input IN, inout SurfaceOutput o){
   o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb;
   o.Normal = UnpackNormal (tex2D(_BumpMap, IN.uv_BumpMap));
  }

//유니티의 노말압축을 풀어주고(UnpackNormal) 범프맵과 uv정보 적용


  ENDCG
 }
 Fallback"Diffuse"
}


 

 

==========================================================================================

 

 

Posted by 프리랜서 디자이너