boubouk50 a écrit :Basiquement:
> Tu récupères ta diffuse que tu mets dans la sortie couleur RGB
> Tu récupères ton mask que tu multiplies avec l'alpha de ta diffuse et que tu mets en sortie de couleur Alpha.
là, déjà, tu as le masque. Ensuite, la partie la moins simple: l'animation du mask.
Le plus simple mais peu fonctionnel:
> Tu scales ton mask: diminution du tile de mask -> scale par rapport au coin d'origine
Le plus fonctionnel:
> Gérer le scale de ton mask en fonction d'un centre décidé par un Vector2: scale + offset.
plus facile à dire qu'à faire. je relis la doc en long/large/travers je comprends pas une ligne
Code : Tout sélectionner
Shader "Custom/test" {
Properties {
_MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
_Detail ("Detail", 2D) = "white" {}
_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
}
ca je pige l'idée, j'ai rajouté un champ pour ma Detail et pas retirer pour le moment l'ami Cutoff parce que j'y vais hyper pas à pas
Code : Tout sélectionner
SubShader {
Tags {"Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout"}
LOD 100
bon soit, je pense que je ne dois rien changer la dedans c'est vraiment ce que je veux faire donc okay
oh un truc clair : on dégage l'effet de la lumière OUHOU!
Code : Tout sélectionner
Pass {
CGPROGRAM
//Ca j'ai compris que l'un est l'appel à une fonction sur la partie vertex et on appelle la fonction "vert"
#pragma vertex vert
//Ca j'ai vaguement compris que l'autre est l'appel à une fonction sur la partie fragment (woot?) et on appelle la fonction "frag"
#pragma fragment frag
//Gros WTF, j'ai vu que c'était important partout mais je comprends toujours pas trop pourquoi
#pragma multi_compile_fog
Code : Tout sélectionner
#include "UnityCG.cginc"
struct appdata_t {
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
};
struct v2f {
float4 vertex : SV_POSITION;
half2 texcoord : TEXCOORD0;
UNITY_FOG_COORDS(1)
};
Lolilol c'est là que je pige plus rien du tout ce que j'ai vu c'est que le machin POSITION ou SV_POSITION ça sert pour dire des trucs à la GPU mais je comprends pas ce que fagote c'est machin là, quand j'ai tenté de rajouté ma detail dedans il m'a dit "va te faire...". Je comprends pas, ça sert de paramètre à me fonction frag et vert. L'un semblerait servir pour l'autre ...
Code : Tout sélectionner
sampler2D _MainTex;
float4 _MainTex_ST;
sampler2D _Detail;
float4 _Detail_ST;
fixed _Cutoff;
Alors là j'ai un sampler 2D et un float4... la différence? Pourquoi deux? L'un semble une référence à la propriété mais l'autre c'est quoi? Une conversion? Un truc pour se foutre de ma gueule?
Code : Tout sélectionner
v2f vert (appdata_t v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
UNITY_TRANSFER_FOG(o,o.vertex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.texcoord);
clip(col.a - _Cutoff);
UNITY_APPLY_FOG(i.fogCoord, col);
return col;
}
ENDCG
}
}
}
Je n'émettrais AUCUN commentaire là dessus. Je crois qu'il faut que je rajoute un truc dans ce style :
Code : Tout sélectionner
fixed4 col = tex2D(_MainTex, i.texcoord);
fixed4 col = tex2D(_Detail , i.detailMap);
col.a = alpha;
EDIT :
En écrivant ça je me suis dit HEY!
J'ai tenté ça :
Code : Tout sélectionner
fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.texcoord);
fixed4 alpha = tex2D(_Detail, i.texcoord);
col.a = alpha;
UNITY_APPLY_FOG(i.fogCoord, col);
return col;
}
il s'en fiche, je vous dis même pas comment. Ca ou pisser dans un violon...
Et je viens de lire le Why on a le Sampler 2D et le float4.... en fait l'un contient la texture et l'autre les coordonnées d'application de cette texture! Mon monde s'éclaircit!
EDIT 2 :
The geometry of your model is first passed through a function called vert which can alter its vertices. Then, individual triangles are passed through another function called frag which decides the final RGB colour for every pixel
Ahhhhhhhhhhhhhhhhhhhh! Okay cool!