본문으로 바로가기

splatting texture

category Technical Report/Graphics Tech Reports 2015. 5. 13. 18:11
반응형

간단하게 Unlit 기반 blending shader 
   



//

    Properties {
      _MainTex ("Texture 1", 2D) = "white" {}
      _MainTex2 ("Texture 2", 2D) = "white" {}
      _BlendTex ("BlendMask", 2D) = "white" {}
      _Tile ("Tiling", Vector) = (1,1,1,1)
     
    }
   
    SubShader {
   
        Tags { "RenderType" = "Opaque" }
      Lighting Off
     
      CGPROGRAM
      #pragma surface surf Unlit noforwardadd approxview noambient halfasview nolightmap
       
      sampler2D _MainTex;
      sampler2D _MainTex2;
      sampler2D _BlendTex;
    
      float4 _Tile;
     
   
     
 
     fixed4 LightingUnlit (SurfaceOutput s, half3 lightDir, half atten) {

          return fixed4(s.Albedo,1);
        }
    

      struct Input {
        
           float2 uv_MainTex;
           float2 uv2_BlendTex;
          
        
      };
     
      
     
      void surf (Input IN, inout SurfaceOutput o) {
           
         
          fixed3 b = tex2D (_BlendTex, IN.uv2_BlendTex).rgb;
         //uv 제어, UDK의 textcoord와 같은 역할

        
          fixed4 d = lerp (tex2D (_MainTex, IN.uv_MainTex * _Tile.xy) * b.g,tex2D (_MainTex2 , IN.uv2_MainTex * _Tile.zw) * b.b,b.r);                      
         // Masking texture의 R.G.B 값에 따른  texture blending
  

       o.Albedo = ( d.rgb );
         
    

      }
      ENDCG
    }
   
  }


fallback시에 1번 texture 나오게 하려면 손을 좀 봐야하는데... 귀찮.... 그냥 invert해서 쓰기로..

UV tiling은 저렇게 Vector 쓰는것도 좋지만 그냥 float2로 uv 정의해서 빼버리는게 깔끔할듯..

반응형