[RESOLU] Problème Alpha sur un Shader "Diffuse Texture Blend"

Questions à propos du scripting Shader.
IInikkoII
Messages : 7
Inscription : 21 Nov 2016 13:12

[RESOLU] Problème Alpha sur un Shader "Diffuse Texture Blend"

Message par IInikkoII » 21 Nov 2016 13:48

Bonjour à tous,

Je tiens à préciser en intro que je suis un débutant sur Unity 3D.
J'ai un petit problème avec un shader sur un de nos projets et je me permet de venir vous demander de l'aide si possible.

Introduction :
- Afin de pouvoir peindre des textures sur un assets j'ai téléchargé "ProBuilder Basic". Cet outils, en plus de permettre de modifier la géométrie d'un asset directement dans Unity, permet aussi de le coloriser à l'aide de l'outil "Vertex color editor" soit avec une couleur ou avec plusieurs textures.
Du coup j'utilise le shader "Probuilder/Diffuse Texture Blend" qui permet de peindre des textures sur la texture d'origine de l'asset.

Problème :
L'outil permettant de peindre avec des texture marche bien par contre j'ai une transparence dans la texture qui me pose un vrais problème de rendu.

Image
Image


Image
Image

Je ne sais pas si le problème viens du shader ou d'un réglage d'un des paramètre du projet. Lorsque j'utilise le shader "Probuilder/Standard Vertex Color" effectivement le problème n'apparait plus mais du coup je ne peux que peindre avec des couleurs brut et plus avec des textures...

Image
Image


Vous trouverez ci dessous le code du shader : "Probuilder/Diffuse Texture Blend" ,si une bonne âme peut se pencher dessus pour me dire si le problème viens de là ou si cela est à cause d'un autre règlage.

Code : Tout sélectionner

Shader "ProBuilder/Diffuse Texture Blend"
{
	Properties 
	{
		_FirstTex ("Texture", 2D) = "white" {}
		_SecondTex ("Texture", 2D) = "white" {}
		_ThirdTex ("Texture", 2D) = "white" {}
		_FourthTex ("Texture", 2D) = "white" {}
	}

	SubShader
	{
		Tags { "RenderType" = "Opaque" }

		ColorMask RGB

		CGPROGRAM
		#pragma surface surf Lambert

		sampler2D _FirstTex;
		sampler2D _SecondTex;
		sampler2D _ThirdTex;
		sampler2D _FourthTex;

		struct Input
		{
			float4 color : COLOR;
			float2 uv_FirstTex;
			float2 uv_SecondTex;
			float2 uv_ThirdTex;
			float2 uv_FourthTex;
		};

		void surf (Input IN, inout SurfaceOutput o)
		{
			fixed4 c0 = tex2D(_FirstTex, IN.uv_FirstTex);
			fixed4 c1 = tex2D(_SecondTex, IN.uv_SecondTex);
			fixed4 c2 = tex2D(_ThirdTex, IN.uv_ThirdTex);
			fixed4 c3 = tex2D(_FourthTex, IN.uv_FourthTex);

			fixed4 blend = normalize(IN.color);

			fixed4 rgba = c0 * blend.r;
			rgba = lerp(rgba, c1, blend.g);
			rgba = lerp(rgba, c2, blend.b);
			rgba = lerp(rgba, c3, blend.a);

			o.Albedo = rgba.rgb;
		}
		ENDCG
	}

	Fallback "Diffuse"
}
Merci d'avance pour vos réponses. Je me doute que le problème est relativement simple mais comme dit en intro je suis un débutant.

nikko

:!: Les balises code SVP :!:
Merci de lire la Netiquette.

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

Re: Problème sur un Shader "Diffuse Texture Blend"

Message par boubouk50 » 21 Nov 2016 14:33

Hummm, ton shader ne présente pas d'alpha dans code, donc il ne devrait pas être transparent...
Comme tu utilises 3 textures, décoche le bouton radio alpha, ça évitera d'avoir un canal inutilisé.
Sinon, tu peux ajouter:

Code : Tout sélectionner

o.alpha = 1f; 
après

Code : Tout sélectionner

o.Albedo = rgba.rgb;
La transparence est visible dans l'Editor, mais l'est-elle en mode play? Ce pourrait être un shader Editor qui te montre les zones pas définies puisque 3 textures sur 4.
"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

IInikkoII
Messages : 7
Inscription : 21 Nov 2016 13:12

Re: Problème sur un Shader "Diffuse Texture Blend"

Message par IInikkoII » 21 Nov 2016 15:18

Merci boubouk de la réponse rapide,

Pour répondre à la question, oui la transparence est aussi présente en Play d'où le problème. Et le problème reste le même avec l'utilisation de 1,2,3 ou 4 textures...

Je vais essayé la solution de rajouté : o.alpha = 1f; comme suggéré.

je reviens pour te dire si cela à fonctionné.

Merci

IInikkoII
Messages : 7
Inscription : 21 Nov 2016 13:12

Re: Problème sur un Shader "Diffuse Texture Blend"

Message par IInikkoII » 21 Nov 2016 16:10

Re,

Après avoir modifier le code du Shader comme ci dessous :

Image

j'obtiens quelque chose comme ci dessous et avec un message d'erreur....

Image

Le problème ne pourrait-il pas venir d'un autre réglage de unity (sur la caméra ou sur les lumière par exemple...) ?

Merci encore pour vos réponses.

nikko

Avatar de l’utilisateur
Max
Newser
Newser
Messages : 7871
Inscription : 30 Juil 2011 13:57

Re: Problème sur un Shader "Diffuse Texture Blend"

Message par Max » 21 Nov 2016 16:33

Hello,

ce n'est pas 'o.alpha' mais 'o.Alpha = 1.0;'.
Attention à la casse.
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

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

Re: Problème sur un Shader "Diffuse Texture Blend"

Message par boubouk50 » 21 Nov 2016 16:51

Max a écrit :ce n'est pas 'o.alpha' mais 'o.Alpha = 1.0;'.
Attention à la casse.
Merci Max, j'ai écrit ça tellement vite sans vérifier que je me sens tout ridicule maintenant...
"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

IInikkoII
Messages : 7
Inscription : 21 Nov 2016 13:12

Re: Problème sur un Shader "Diffuse Texture Blend"

Message par IInikkoII » 21 Nov 2016 18:01

Merci de vos réponses.

Néanmoins en mettant : o.Alpha = 1f; (en respectant la case) j'obtiens toujours une erreur et une texture rose.

En mettant o.Alpha = 1.0; je n'ai plus de message d'erreur mais la texture à toujours le même problème de transparence.

Si quelqu'un à une autre idée je suis preneur.

Merci

nikko

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

Re: Problème sur un Shader "Diffuse Texture Blend"

Message par boubouk50 » 21 Nov 2016 18:07

C'est pas étonnant, vu que ton shader ne se soucie pas de l'alpha. Au moins, même si on force à être opaque, il reste transparent donc là, c'est autre chose. Comme si une surcouche était appliquée. Un peu comme la propriété Alpha d'un canvas group...
"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

IInikkoII
Messages : 7
Inscription : 21 Nov 2016 13:12

Re: Problème sur un Shader "Diffuse Texture Blend"

Message par IInikkoII » 21 Nov 2016 22:45

Merci encore pour ta réponse,

Si tu peux m'aider à avancer un peu sur le problème en me guidant sur l'endroit ou je peux regarder pour cette histoire de canevas group...

Sinon peut être que tu peux me conseiller un "tools" me permettant de peindre sur une texture (à l'aide d'autres textures) directement dans Unity.

Pour info c'est un projet VR.
Unity est à jour sur la dernière version en ligne.

merci d'avance

nikko

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

Re: Problème sur un Shader "Diffuse Texture Blend"

Message par boubouk50 » 22 Nov 2016 10:30

C'est pas un problème de Canvas Group. C'est comme l'effet du Canvas Group, mais ce n'est absolument pas ça, puisqu'un Component d'élément d'UI.

> Toutes tes textures sont sans alpha?
> As-tu du Vertex Color? Peut-être que l'alpha est la dedans. Ce serait en tout cas fort possible, vu que tu parles de Vertex Coloring dans ton premier post. Peins la couche alpha en blanc.
"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

Répondre

Revenir vers « les Shaders »