Hey guys,
I need some help on a shader for a project I’m currently working on:
Shader "BlendTextures" {
Properties {
_Blend ("Blend", Range (0, 1) ) = 0
_Override ("Override", Range (0, 1) ) = 0
_BlendOverride ("Blend Override", Range (0, 1) ) = 0
_MainTex ("Main Texture", 2D) = ""
_BlendTexture ("Blend Texture", 2D) = ""
_OverrideTexture ("Override Texture", 2D) = ""
_BlendOverrideTexture ("Blend Override Texture", 2D) = ""
}
SubShader {
Pass {
Fog { Mode Off }
SetTexture[_MainTex]
SetTexture[_BlendTexture] {
ConstantColor (0,0,0, [_Blend])
Combine texture Lerp(constant) previous
}
SetTexture[_OverrideTexture] {
ConstantColor (0,0,0, [_Override])
Combine texture Lerp(constant) previous
}
SetTexture[_BlendOverrideTexture] {
ConstantColor (0,0,0, [_BlendOverride])
Combine texture Lerp(constant) previous
}
}
}
}
I want that _BlendOverrideTexture depends on the Alpha of _OverrideTexture, e.g. it only should be shown if _Override is active (> 0).
Any idea how I could do that?
Most of my shader experience is with CGProgramming, but if that is alright, this should do:
Shader "Custom/Diffuse Blend" {
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_MainTex ("Base (RGB)", 2D) = "white" {}
_OverrideTex ("Base (RGB) Override (A)", 2D) = "black" {}
}
SubShader {
Tags {"Queue"="Opaque" "IgnoreProjector"="True" "RenderType"="Opaque"}
LOD 200
CGPROGRAM
#pragma surface surf Lambert
sampler2D _MainTex;
sampler2D _OverrideTex;
fixed4 _Color;
struct Input {
float2 uv_MainTex;
float2 uv_OverrideTex;
};
void surf (Input IN, inout SurfaceOutput o) {
fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
fixed4 overrideC = tex2D(_OverrideTex, IN.uv_OverrideTex) * _Color;
if (overrideC.a > 0)
o.Albedo = overrideC.rgb;
else
o.Albedo = c.rgb;
}
ENDCG
}
Fallback "Transparent/VertexLit"
}
Shader “Custom/Diffuse Blend” {
Properties {
_Color (“Main Color”, Color) = (1,1,1,1)
_MainTex (“Base (RGB)”, 2D) = “white” {}
_OverrideTex (“Base (RGB) Override (A)”, 2D) = “black” {}
}
SubShader {
Tags {"Queue"="Opaque" "IgnoreProjector"="True" "RenderType"="Geometry"}
LOD 200
CGPROGRAM
#pragma surface surf Lambert
sampler2D _MainTex;
sampler2D _OverrideTex;
fixed4 _Color;
struct Input {
float2 uv_MainTex;
float2 uv_OverrideTex;
};
void surf (Input IN, inout SurfaceOutput o) {
fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
fixed4 overrideC = tex2D(_OverrideTex, IN.uv_OverrideTex) * _Color;
if (overrideC.a > 0)
o.Albedo = overrideC.rgb;
else
o.Albedo = c.rgb;
}
ENDCG
}
Fallback "Transparent/VertexLit"
}