[RESOLU] Alpha cache les autres textures

Modérateur : Administrateurs Suppléants

Avatar de l’utilisateur
Maki-Sama
Messages : 17
Inscription : 12 Mars 2018 21:00

[RESOLU] Alpha cache les autres textures

Message par Maki-Sama » 02 Déc 2018 16:07

Salut à tous :hello: ,

Voilà mon soucis est le suivant, j'ai récupérer un shader permettant d'avoir un aspect de transparence contenant une outline. Jusque là, tout va bien, mais voilà qu'il y à un petit problème au niveau de l'affichage de l'alpha.

Il y bien l'effet de Cutout (donc transparence par découpage) mais cela efface également les autres textures qu'il y a derrière celle-ci.

J'ai donc décidé d'utiliser un model afin de vous montrer de quoi il en retourne.
Je tiens à préciser que le matériel et le shader de la fourrure n'est pas la même que le reste du loup.

Image

J'ai essayé de faire quelques modifs mais échec, j'ai même trouvé sur un autre forum quelqu'un d'autre qui avait le même problème, sauf que lui c'était pour la version mobile 3DS et je n'ai pas trop compris. :/

Je vous laisse le code, je pense que cela viens de la :

Code : Tout sélectionner

Shader "Toon_Transparent" {
	Properties{
		_MainTex("Texture", 2D) = "white" {}
		_Color("Couleur", Color) = (1,1,1,0)
		_Emission("Couleur d'émission", Color) = (0,0,0,0)

		_OutlineColor("Outline couleur", Color) = (0,0,0,1)
		_Outline("Outline taille", Range(0.0, 10)) = 0.01
	}

		CGINCLUDE
#include "UnityCG.cginc"

		struct appdata {
		float4 vertex : POSITION;
		float3 normal : NORMAL;
	};

	struct v2f {
		float4 pos : POSITION;
		float4 color : COLOR;
	};

	uniform float _Outline;
	uniform float4 _OutlineColor;

	v2f vert(appdata v) {

		v2f o;
		o.pos = UnityObjectToClipPos(v.vertex);

		float3 norm = mul((float3x3)UNITY_MATRIX_IT_MV, v.normal);
		float2 offset = TransformViewToProjection(norm.xy);
		o.pos.xy += offset * o.pos.z * _Outline;
		o.color = _OutlineColor;
		return o;
	}
	ENDCG

		SubShader{
		Tags{ "RenderType" = "TransparentCutout" "Queue" = "AlphaTest" "IgnoreProjector"="True" }
		Pass{
		ColorMask 0
		AlphaTest Greater 1
}
		Pass{
		Name "BASE"
		Blend SrcAlpha OneMinusSrcAlpha
		ColorMask RGB
		Material{
		Diffuse[_Color]
		Specular[_SpecColor]
		Emission[_Emission]
		}

		Lighting On
		SetTexture[_MainTex]{
		Combine texture * primary DOUBLE, texture * primary
	}
	}

		Pass{
		Name "OUTLINE"
		Tags{ "LightMode" = "Always" }
		Cull Front

		Blend SrcAlpha OneMinusSrcAlpha

		CGPROGRAM
#pragma vertex vert
#pragma fragment frag

		half4 frag(v2f i) :COLOR{
		return i.color;
	}
		ENDCG
	}
	}
		Fallback "Diffuse"
}
De mon côté je cherche toujours, merci par avance.
Dernière édition par Maki-Sama le 03 Déc 2018 23:42, édité 2 fois.

djulio74
Messages : 432
Inscription : 19 Déc 2009 22:55
Contact :

Re: Alpha cache les autres textures

Message par djulio74 » 02 Déc 2018 17:48

Salut.
Alors je n'ai encore jamais utilisé les fragment shader, mais dans le fond ça a l'air de ressembler assez au surface shader.
le probleme avec les transparence, c'est que tu n'as jamais d'ombre ( ni reçue ni projetée).
Par contre il y a le clip(float) pour un shader opaque qui peut être intéressant. En grgos permet d'afficher ou non les parties d'un mesh.

regarde dans la doc unity, vers le milieu il y a un exemple sur base de damier, ou encore en surface shader, idem environ au milieu de la page.

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 4651
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: Alpha cache les autres textures

Message par boubouk50 » 03 Déc 2018 10:59

Ce serait pas juste une question de tri ou de profondeur? de Depth buffer? de Queue?
Z-Write ou un autre tag pour dessiner le mesh derrière?

EDIT -
https://stackoverflow.com/questions/507 ... ency-issue
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
Maki-Sama
Messages : 17
Inscription : 12 Mars 2018 21:00

Re: Alpha cache les autres textures

Message par Maki-Sama » 03 Déc 2018 23:35

Salut Boubouk50, c'est effectivement cela.

Il fallait juste remplacer "Queue"="AlphaTest" par "Queue"="Transparent"

Et aussi ajouter ZWrite Off dans le pass nommé "BASE"

Finalement j'ai eu ce que je voulais.

Merci encore, à plus.

Répondre

Revenir vers « les Shaders »