본문으로 바로가기

Lava Shader

category Technical Report/Unity Shader 2015. 4. 30. 18:52
반응형

구글에서 검색한걸 가져와서 튜닝(원소스를 찾을려고 했는데 어디서 긁어왔는지 찾을수가 없다. 본래는 3개의 레이어를 블렌드 해서 쓰는 구조라 조금 복잡). 회사 작업에 쓰지는 않았고 이건 그냥 테스트 삼아. 실제 작업에 쓰인건 이것보다 조금 더 가볍다. 프로젝트에 쓰인것과의 차이점이라면 이건 shader상에서 distortion이 가능하다는거.(이것도 모바일에서도 가능할듯) 좌표 연산에 sin, cos을 써서 좀 더 무겁다~


회사에서 쓴건 그냥 surface 구조로 _time으로 제어. distortion은 그냥 메쉬 휘어서 해결하고 emission은 그냥 material ani로.....(잔머리 쩐다..ㅋ)



//

 
Properties
 
  _MainTex ("Base (RGB)", 2D) = "white" {}
  _Intensity ("Intesity", Range(0.000, 0.025)) = 0.003
  _ScrollX ("X Scroll", Range(-2, 2)) = 0
  _ScrollY ("Y Scroll", Range(-2, 2)) = 0
  _Mask ("Global Mask(GreyScale)", 2D) = "white" {}
                                                                                          
 }


SubShader {
 
  Tags { "RenderType"="Opaque" }
 
  Lighting Off
 
  ZWrite On
                                                
  Pass {
  
   CGPROGRAM
   #pragma vertex vert
   #pragma fragment frag
   #include "UnityCG.cginc"
 
 
  
   sampler2D _MainTex;

   half _Intensity;
 
   half _ScrollX;
   half _ScrollY;
   sampler2D _Mask;
                                                                                
                                                 
   struct appdata {
            half4 vertex : POSITION;
            half4 texcoord : TEXCOORD0;
   };
   struct v2f {
            half4 pos : SV_POSITION;
            half4 uv : TEXCOORD0;
   };
                                                                                
   v2f vert (appdata v) {
            v2f o;
            o.pos = mul( UNITY_MATRIX_MVP, v.vertex );
            o.uv = half4( v.texcoord.xy, 0, 0 );
            return o;
   }
                                                
   half4 frag( v2f v ) : COLOR
   {
            half4 result = half4(0,0,0,0);
            half4 FinalColor = half4(0,0,0,0);
  
            half intensity = _Intensity;
           
            half2 Offset = half2(_ScrollX, _ScrollY);
            half2 uv = half2(sin(_Time.w + v.uv.x), cos(_Time.w + v.uv.y));
        

            half4 Lava = tex2D(_MainTex, ((v.uv.xy ) + _Time.x * Offset.xy) + intensity * uv).rgba ;
            half Mask = tex2D(_Mask, v.uv.xy).r;
            Lava.rgb *= Lava.a * Mask;
                                                                                                                
          
 
            result.rgb = Lava.rgb ;
            result.a = tex2D(_MainTex, v.uv.xy).r;
 
            return result;
   }
   ENDCG
  }
}
Fallback "Diffuse"
}

반응형

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

Surface shader UV atlas  (0) 2015.05.18
weed shader animation  (0) 2015.05.11
Unity 기본 3가지 shader 정리  (0) 2015.03.10
Unity 5 surface emission shader lighting  (0) 2015.03.08
surface shader noambient parameter  (0) 2015.01.28