apres m'etre boulotté un ouvrage sur les shaders sous unity 5 , je me suis jeté à l'eau comme on s'elance du haut des chute du Niagara blotti dans son tonneau... et crac.
mon objectif pour commencer etait d'essayer d'appliquer ce que j'avais cru comprendre à un cas apparemment simple: un shader toon. l'effet toon est issu d'une texture ramp et cerise sur le gateau, si il y a une couche alpha sur la texture, ... elle est appliquée (le truc de ouf quoi)
sauf que voilà:
alors je ne vous envoi pas d'autre images, mais meme sur un simple batiment sans bitmap (donc juste un couleur) il me fait ce superbe effet de "je vois à travers et en plus je ne sais plus ce qui est devant et derriere au sein d'un meme objet"...
j'ai cherché, lu, traduit, essayer (pleins de trucs, j'en ai laissé quelqu'uns sous forme de ligne commentées dans le code) et c'est l'echec , d'où mon appel au secours.
merci d'avance !
voici le code:
Code : Tout sélectionner
Shader "Custom/toon" {
Properties
{
_RampTex ("Ramp", 2D) = "white" {}
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
}
SubShader
{
Tags
{
"Queue" = "Transparent"
"IgnoreProjector" = "True"
"RenderType" = "Transparent"
// "Queue"="AlphaTest"
// "RenderType"="TransparentCutout"
}
LOD 200
cull off
CGPROGRAM
#pragma surface surf Toon alpha:fade fullforwardshadows
#pragma target 3.0
sampler2D _MainTex;
sampler2D _RampTex;
fixed4 _Color;
//float4 _cb;
struct Input
{
float2 uv_MainTex;
};
UNITY_INSTANCING_BUFFER_START(Props)
// put more per-instance properties here
UNITY_INSTANCING_BUFFER_END(Props)
fixed4 LightingToon (SurfaceOutput s, fixed3 lightDir, fixed atten)
{
half NdotL = dot (s.Normal, lightDir);
NdotL = tex2D(_RampTex, fixed2(NdotL, 0.5));
fixed4 c;
c.rgb = s.Albedo * _LightColor0.rgb * NdotL * atten;
c.a = s.Alpha;
return c;
}
void surf (Input IN, inout SurfaceOutput o)
{
//float4 _cb = tex2D (_MainTex, IN.uv_MainTex).rgb * _Color; // cette ligne ne marche pas: "invalid initialization"
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb * _Color;
o.Alpha = tex2D (_MainTex, IN.uv_MainTex).a;
//o.Alpha = 1.0;
//o.Alpha = c.a;
}
ENDCG
}
//FallBack "Diffuse"
FallBack "Transparent/Cutout/Diffuse"
}