Apply Gloss to only one texture in Shader?

Hi.
I’ve written/hacked-together a shader that I need help with.
The shader has a MainTexture which is the main texture, then it has a PaintTexture that is applied ontop of it to allow the player to paint on the ground.

It also takes a normal map for each and blends them together.
The problem is that I want the paint to look shiny, but the ground shouldn’t.

The image below shows the effects I’m trying to combine;

alt text

Setting the Gloss variable to 1, the paint is perfect but the ground is to shiny.

Setting the Gloss variable to 0, the ground is perfect but the paint isn’t shiny enough.

I basically need a way to apply Gloss only to the Paint Bumpmap, keeping the Gloss for the Normal Bumpmap at 0. I’ve been struggling with this for week so I’d really appreciate any help/ideas!

Here is my current shader code;

Shader "Custom/Paint" {
 Properties {
     _Color ("Main Color", Color) = (1,1,1,1)
     _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 0)
     _Shininess ("Shininess", Range (0.01, 1)) = 1.0
     _Gloss ("Gloss", Range (0.01, 1)) = 1.0
     _MainTex ("Object Texture (RGB)", 2D) = "white" {}
	 _PaintTex ("Paint Texture (RGBA)", 2D) = "white" {}
	  // Slider to control fading between normalmaps
     _MainBumpSlider ("Normal Blend", Range (0, 1)) = 0
     _MainBump ("Object Normal Map", 2D) = "bump" {}
     // Second normal map
     _PaintBump ("Paint Normal Map", 2D) = "bump" {}
 }
 
 SubShader {
     Tags {"Queue"="AlphaTest" "IgnoreProjector"="False" "RenderType"="TransparentCutout"}
     LOD 400
     
 CGPROGRAM
 #pragma surface surf BlinnPhong alphatest:_Cutoff
 #pragma exclude_renderers flash
 #pragma target 3.0
 
 sampler2D _MainTex;
 sampler2D _PaintTex;
 sampler2D _MainBump;
 fixed4 _Color;
 half _Shininess;
 half _Gloss;
 // Remember to add your properties in here also. Check ShaderLab References from manual for more info
 float _MainBumpSlider;
 sampler2D _PaintBump;
 
 struct Input {
     float2 uv_MainTex;
     float2 uv_PaintTex;
     float2 uv_MainBump;
 };
 
 void surf (Input IN, inout SurfaceOutput o) {
     half4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
     half4 tattoo = tex2D(_PaintTex, IN.uv_PaintTex);
     c.rgb = lerp (c.rgb, tattoo.rgb, tattoo.a);
     o.Albedo = c.rgb * _Color.rgb;
     o.Gloss = _Gloss;
     o.Specular = _Shininess;
     // Read values from _MainBump and _PaintBump
     fixed3 normal1 = UnpackNormal(tex2D(_MainBump, IN.uv_MainBump));
     fixed3 normal2 = UnpackNormal(tex2D(_PaintBump, IN.uv_MainBump));
     // Interpolater between them and set the result to the o.Normal
     o.Normal = lerp(normal1, normal2, _MainBumpSlider);
     
 }
 ENDCG
 }
 
 FallBack "Transparent/Cutout/Bumped Specular"
 FallBack "Transparent/Cutout/VertexLit"
 }

That should actually be a pretty easy one to handle.

o.Gloss = _Gloss * tattoo.a;

That should be enough to take care of it. Wherever your paint exists (i.e. the “tattoo” texture) can act as a mask for the level of gloss.

Edit: Granted, this works based on the assumption that your paint/tattoo texture has an alpha channel, but from the image and the code you provided, it clearly does.