Yes i totally agree with your POV dreamora. writing tools for all platforms and all cases and for vertex, forward and deffered is a totally mad challenge, and i gotta admit that for this SL dev team did an impressive good job.
What am angrying about is just the obfuscation of the doc. IMHO unity should enroll writers and produce thousands pages books they should sell about just shaderlabs. I thing this would worth the investment, would lighten the forum from stoopid questions like mine and would allow more people to have a deeper comprehension of shaderlab backgrounds…
But this is not the point.
OK and thanks for the clue about _PPLAmbient. i imagined what you confirm. However, i found nowhere this info.
I only call it unknown, as it’s ( IMHO ) an important element ( ambient light IS important ) whis is found nowhere in docs.
I found it in shaders examples somewhere on the web, without clear explanation, als now here, from your knowledge.
I just hope that this topic will make it more popular 8-D
Now as a last part, i found a solution about the lil mess about _LightColor0 wich is present in cginc but undocumented and set nowhere ( at least not in some accessible code ). Aside i had to guess it was the good usable light color for the current pass ( among all other appearently ( always 0 ) unused light colors like : float4 unity_LightColor[4];float3 unity_LightColor0, unity_LightColor1, unity_LightColor2, unity_LightColor3; ) i also found why it sometimes disappeared ( depending on the drawing order )…
I just had to add a lil tag in the pass:
Tags { “LightMode” = “ForwardBase” }
As i use forward rendering.
So now, it seems i got a simple specular shader for U3.0+ without shadows as am still on indie, that works properly.
Here’s the final piece of code for those who feel it usefull:
Shader "VPFP_specular" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 0)
_Shininess ("Shininess", Range (0.01,1)) = 0.078125
_Gloss ("Gloss", Float) = 0.078125
}
SubShader {
Tags {"Queue"="Geometry" "RenderType" = "Opaque" "IgnoreProjector"="True"}
LOD 200
Pass {
Tags { "LightMode" = "ForwardBase" }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#include "Lighting.cginc" // for having _LightColor0 _SpecColor uniforms
struct v2f {
float4 pos : SV_POSITION;
float2 uv_MainTex : TEXCOORD0;
float3 lightdir;
float3 viewdir;
float3 norm;
};
float4 _MainTex_ST;
half _Shininess;
half _Gloss;
inline half4 SpecularLight( half3 lightDir, half3 viewDir, half3 normal, half4 color, float spec_shine)
{
lightDir = normalize(lightDir);
viewDir = normalize(viewDir);
float3 h = normalize( lightDir + viewDir );
fixed diffuse = max (0, dot (normal, lightDir));
float nh = max (0, dot (normal, h));
float spec = pow (nh, spec_shine*128.0) * _Gloss;
float3 litecolor = _LightColor0.rgb; //ca, ca merdouille
half4 c;
c.rgb = (_PPLAmbient*color.rgb+color.rgb * litecolor * diffuse + _SpecColor.rgb * litecolor * spec)*2;
c.a = _SpecColor.a * spec;
return c;
}
v2f vert(appdata_full v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.uv_MainTex = TRANSFORM_TEX(v.texcoord, _MainTex);
o.norm = v.normal;
o.lightdir = ObjSpaceLightDir(_WorldSpaceLightPos0); // hopefully _WorldSpaceLightPos0 is not empty crap ! once is not use....
o.viewdir = ObjSpaceViewDir( v.vertex );
return o;
}
sampler2D _MainTex;
float4 frag(v2f IN) : COLOR
{
half4 Albedo = tex2D (_MainTex, IN.uv_MainTex);
half4 c = SpecularLight( IN.lightdir, IN.viewdir, IN.norm,Albedo, _Shininess); // no atten for directionnal light. sry for thos who need atten...
return c;
}
ENDCG
}
}
}
If you try this and have problems please give a post here.
And if you find it usefull, say it too. I’d be curious to see if am the only moron thinking
having this kind of shader is important. I might be totally wrong… 
have fun