Shader unlight cut - Mesh

Questions à propos du scripting Shader.
Avatar de l’utilisateur
lenneth78
Messages : 187
Inscription : 05 Jan 2012 16:58

Shader unlight cut - Mesh

Message par lenneth78 » 15 Nov 2012 17:17

Petit shader perso que je viens de finir qui permet de tronquer un mesh.

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)
Inverser la comparaison rend la découpe décroissante.
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) :

Image

Test avec une image du dépliage UV du premier mesh :

Image

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 
}
ps : j'ai deux warnings qui ne gènent pas l'exécution mais si vous savez d'où ça vient

Répondre

Revenir vers « les Shaders »