la découpe se fait sur l'axe y croisement mais peut être changer via cette ligne :
Code : Tout sélectionner
if( i.analyse.y > _CutOff)
Changement d'axe, change l'axe de découpe
On peut théoriquement prendre plusieurs axe de coupe
Le shader peut être influencé par une couleur et/ou une texture.
La partie coupée peut être une couleur ( modif interne decoter une ligne ) ou image ou rien.
ça crée de bon effets.
Test sans image pour la partie coupée, ni couleur ( effet non recherché mais qui rend bien) :
Test avec une image du dépliage UV du premier mesh :
Code : Tout sélectionner
Shader "Custom/unlight - CutMesh - Texture - Color"
{
Properties
{
_MainTex ("Base (RGB)", 2D) = "" {}
_HiddeTex ("Texture cachée", 2D) = ""{}
_Color("Couleur de teinte", Color) = (1,1,1,1)
_CutOff("Niveau de coupe",Range(-1,1)) = 0
}
SubShader
{
Tags
{
"Queue" = "Transparent"
"IgnoreProjector" = "True"
"RenderType" = "Transparent"
}
LOD 200
//desactive la lumiere
Lighting Off
//affiche toute les faces
Cull back
//controle l'ordre des pixels dans le buffer (on pour solid / off pour transparent)
ZWrite on
//desactive le brouillard
Fog { Mode Off }
ColorMask RGB
ColorMaterial AmbientAndDiffuse
//transparence
Blend SrcAlpha OneMinusSrcAlpha
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma glsl_no_auto_normalization
#pragma fragmentoption ARB_precision_hint_fastest
uniform fixed _CutOff;
uniform sampler2D _MainTex;
uniform fixed4 _Color;
uniform sampler2D _HiddeTex;
struct vertInput
{
fixed4 pos : POSITION;
fixed4 uv : TEXCOORD0;
};
struct fragInput
{
fixed4 pos : SV_POSITION;
fixed4 uv : TEXCOORD0;
fixed4 analyse : TEXCOORD1;
};
fragInput vert (vertInput v)
{
fragInput o;
o.analyse = v.pos;
o.pos = mul( UNITY_MATRIX_MVP, v.pos );
o.uv = v.uv;
return o;
}
fixed4 frag( fragInput i ) : COLOR
{
fixed4 retour;
if( i.analyse.y > _CutOff)
{
//couleur de retour pour partie coupée ( transparent)
//retour = fixed4(0,0,0,0);
retour = tex2D(_HiddeTex,float2(i.uv));
}
else
{
//couleur de retour pour partie non coupée
//return half4(10,0,0,0);
retour = tex2D(_MainTex,float2(i.uv));
}
retour *=_Color;
return retour;
}
ENDCG
}
}
Fallback "Vertex Colored", 1
}