一日一Shader·多层tiling区分【SS

    技术2022-07-11  88

    当多图叠加时,一般会涉及遮罩,而遮罩位置的变化是依据uv值,但是当图片的tiling变化时,遮罩位置也会改变。为了解决这个问题,需要声明多个uv,有的会随tiling变化,有的不变。

    代码:

    Shader "MyShader/SS_11_1" { Properties { _Mask ("Mask", 2D) = "white" {} _MainTex ("Texture", 2D) = "white" {} _Size("Size",float)=30 _Pos("Pos",vector)=(1,1,1,1) } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { fixed4 vertex : POSITION; fixed2 uv : TEXCOORD0; fixed2 uv1 : TEXCOORD1; fixed2 uv2 : TEXCOORD2; }; struct v2f { fixed2 uv : TEXCOORD0; fixed2 uv1 : TEXCOORD1; fixed2 uv2 : TEXCOORD2; fixed4 vertex : SV_POSITION; }; sampler2D _MainTex; sampler2D _Mask; fixed4 _Mask_ST; fixed4 _MainTex_ST; fixed _Size; fixed4 _Pos; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv1 = TRANSFORM_TEX(v.uv1, _Mask); o.uv2=TRANSFORM_TEX(v.uv2, _MainTex); o.uv=v.uv; return o; } fixed4 frag (v2f i) : SV_Target { fixed4 col = tex2D(_Mask, i.uv1); fixed4 mask=tex2D(_MainTex,i.uv2); col= pow((i.uv.x-_Pos.x),2)+pow((i.uv.y-_Pos.y),2)<_Size?mask:col; return col; } ENDCG } } }

    返回目录:https://blog.csdn.net/yzy1987523/article/details/106676451

    Processed: 0.012, SQL: 9