This shader that I found here does everything I need except that the offsets for MainTex and AlphaTex are linked together. In other words, changing the offset of the AlphaTex texture has no actual effect on its offset. Changing the offset of the MainTex moves both the MainTex and AlphaTex. I would like to be able to change the offsets independently, but I cannot wrap my mind around this code (I’m new to writing shaders). Thank you.
// Unlit alpha-blended shader.
// - no lighting
// - no lightmap support
// - no per-material color
Shader "Unlit/AlphaMask" {
Properties {
_AlphaVal ("AlphaVal", Range (0,1) ) = 1.0
_MainTex ("MainTex (Sprite)", 2D) = "white" {}
_AlphaTex ("AlphaTex (R)", 2D) = "white" {}
}
SubShader {
Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
LOD 100
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata_t {
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
};
struct v2f {
float4 vertex : SV_POSITION;
half2 texcoord : TEXCOORD0;
};
sampler2D _MainTex;
sampler2D _AlphaTex;
float _AlphaVal;
float4 _MainTex_ST;
v2f vert (appdata_t v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
fixed4 main = tex2D(_MainTex, i.texcoord);
fixed4 alph = tex2D(_AlphaTex, i.texcoord);
return fixed4(main.r, main.g, main.b, (main.a*alph.r*_AlphaVal));
}
ENDCG
}
}
}
Oh man, I know this is a super old post, but I had looked for hours to find an answer to the exact same problem, and you post helped me solve it instantly! I cannot stress enough -- THANK YOU for posting your answer for others to see :D The internet would be a much better place if everyone was like you!
– idkartist3D