- Home /
CG shader tile issue
Hi, im developing a shader that blends two textures taking into account only the alpha of texture 1. This seems to work fine, but if i want to set diferent tiling or scale for each texture only tile on the 1st one is taken into consideration. This is my code:
Shader "My Shaders/Unlit/Mixer Alpha Blend" {
Properties {
_Blend ("Blend", Range (0,1)) = 0.0
_MainTex ("Texture (A = Transparency)", 2D) = ""
_BlendTexture ("BlendTexture (A = Transparency)", 2D) = ""
_Cutoff ("Alpha Cutoff", Float) = 0.5
}
SubShader {
Tags {"Queue"="transparent" "RenderType"="transparent" }
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
Lighting Off
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainTex;
sampler2D _BlendTexture;
uniform float _Cutoff;
uniform float _Blend;
float4 _MainTex_ST;
float4 _BlendTexture_ST;
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
};
v2f vert (appdata_base v){
v2f o;
o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
o.uv = TRANSFORM_TEX (v.texcoord, _MainTex);
return o;
}
half4 frag (v2f i) : COLOR{
float4 MyColor = tex2D (_BlendTexture, i.uv).rgba;
float4 MyAlpha = tex2D (_MainTex, i.uv).rgba;
if (MyAlpha.a < _Cutoff)
// alpha value less than user-specified threshold?
{
discard; // yes: discard this fragment
}
return lerp(MyAlpha, MyColor , _Blend);
}
ENDCG
}
}
}
Comment
i guess i have to modify something here:
v2f vert (appdata_base v){
v2f o;
o.pos = mul (UNITY_$$anonymous$$ATRIX_$$anonymous$$VP, v.vertex);
o.uv = TRANSFOR$$anonymous$$_TEX (v.texcoord, _$$anonymous$$ainTex);
return o;
}
so that the output combines both texture's uv or something like that. any hints?
Best Answer
Answer by Complex77 · Jan 14, 2014 at 12:03 AM
go it:
Shader "My Shaders/Unlit/Mixer Alpha Blend" {
Properties {
_Blend ("Blend", Range (0,1)) = 0.0
_MainTex ("Texture (A = Transparency)", 2D) = ""
_BlendTexture ("BlendTexture (A = Transparency)", 2D) = ""
_Cutoff ("Alpha Cutoff", Float) = 0.5
}
SubShader {
Tags {"Queue"="transparent" "RenderType"="transparent" }
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
Lighting Off
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainTex;
sampler2D _BlendTexture;
uniform float _Cutoff;
uniform float _Blend;
float4 _MainTex_ST;
float4 _BlendTexture_ST;
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
float2 uv2 : TEXCOORD1;
};
v2f vert (appdata_base v){
v2f o;
o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
o.uv = TRANSFORM_TEX (v.texcoord, _MainTex);
o.uv2 = TRANSFORM_TEX (v.texcoord, _BlendTexture);
return o;
}
half4 frag (v2f i) : COLOR{
float4 MyColor = tex2D (_BlendTexture, i.uv2).rgba;
float4 MyAlpha = tex2D (_MainTex, i.uv).rgba;
if (MyAlpha.a < _Cutoff)
// alpha value less than user-specified threshold?
{
discard; // yes: discard this fragment
}
return lerp(MyAlpha, MyColor , _Blend);
}
ENDCG
}
}
}