본문으로 바로가기
반응형


Unity가 4.X 부터 2pass가 가능하다는 이야기에 기존 Diffuse에 outline 그리는 공식 추가해서 붙여 보았다. 잘 그려지는거 보니 케릭터에 써볼까 했는데.. 이러면 cull option 덕분에 2 side가 적용되 폴리 x2배 찬스~!!


가뜩이나 유닛많이 등장하는 게임에 폴리까지 두배되니 이건 좀 아니다 싶어 자체 봉인... 쩝.... 나중에 쓸일 있지 않을까... (2pass에 2side까지 적용되니 좀 무겁다 싶다...)

Border 굵기 조절과 색상 조절 가능한걸 넣어서 정리

//
    Properties {
      _TintColor ("TintColor", Color) = (1,1,1,1)
      _MainTex ("Texture", 2D) = "white" {}
      _Outline ("OutlineColor", Color) = (1,1,1,1)
      _OutlineBorder ("OutlineBorder", Range(0.01, 0.1)) = 0.02

    }
 
     SubShader {
      Tags { "RenderType" = "Opaque" }
      Lighting On
      LOD 200
      
      
      CGPROGRAM
      #pragma surface surf Lambert nolightmap nodirlightmap noforwardadd approxview halfasview
                
      sampler2D _MainTex;
      fixed4 _TintColor;       
                        
      struct Input {
      
      float2 uv_MainTex;
     
      
      };
           
      
      void surf (Input IN, inout SurfaceOutput o) {
          o.Albedo = tex2D (_MainTex, IN.uv_MainTex) * _TintColor.rgb;
      
      }
      ENDCG
    
     
    Tags { "Queue"="Opaque" }
    
      Cull front
    
        
        CGPROGRAM
        #pragma surface surf Lambert vertex:vert nolightmap nodirlightmap noforwardadd approxview halfasview

        
        float4 _Outline;
       float  _OutlineBorder;       

 
        struct Input {
            float4 Color:color;
        };
        void vert(inout appdata_full v){
        v.vertex.xyz += v.normal * _OutlineBorder ;
        }



        void surf (Input IN, inout SurfaceOutput o) {
        
            o.Emission = _Outline.rgb ;
}
               ENDCG
 
        }
    
     }



Toggle형 제어문



  
 Properties {
      _TintColor ("TintColor", Color) = (1,1,1,1)
      _MainTex ("Texture", 2D) = "white" {}
      _Outline ("OutlineColor", Color) = (1,1,1,1)
      [MaterialToggle] _Outlinetoggle ("Outline", Float ) = 1
      _OutlineBorder ("OutlineBorder", Range(0.01, 0.1)) = 0.02
    }
 
     SubShader {
      Tags { "RenderType" = "Opaque" }
      Lighting On
      LOD 200
     
     
      CGPROGRAM
      #pragma surface surf Lambert nolightmap nodirlightmap noforwardadd approxview halfasview
               
      sampler2D _MainTex;
      fixed4 _TintColor;      
                       
      struct Input {
     
      float2 uv_MainTex;
    
     
      };
          
     
      void surf (Input IN, inout SurfaceOutput o) {
          o.Albedo = tex2D (_MainTex, IN.uv_MainTex) * _TintColor.rgb;
     
      }
      ENDCG
   
    
    Tags { "Queue"="Opaque" }
   
      Cull front
   
       
        CGPROGRAM
        #pragma surface surf Lambert vertex:vert nolightmap nodirlightmap noforwardadd approxview halfasview
       
        float4 _Outline;
        float  _OutlineBorder;      
        float _Outlinetoggle ;
 
        struct Input {
            float4 Color:color;
        };
        void vert(inout appdata_full v){
        v.vertex.xyz += v.normal * _OutlineBorder  * _Outlinetoggle ;
        }



        void surf (Input IN, inout SurfaceOutput o) {
       
            o.Emission = _Outline.rgb ;
}
               ENDCG
 
        }
    fallback "Diffuse"
     }



반응형

'Technical Report > Unity Shader' 카테고리의 다른 글

SelfilluminationBlend shader  (0) 2015.01.20
Wrapped Diffuse  (0) 2015.01.19
Android platform texture compresstion option에 따른 결과물  (0) 2015.01.16
Matcap shader review.  (0) 2015.01.12
Unity3D Transparent cutout lightmap  (0) 2014.12.26