[RESOLU] Shader + Couleur

Questions à propos du scripting Shader.
Répondre
wesh57
Messages : 22
Inscription : 19 Jan 2020 04:33

[RESOLU] Shader + Couleur

Message par wesh57 » 17 Oct 2020 23:25

Bonjour,
je viens vers vous car je bloque sur un truc, alors j'ai besoin d'associer un shader et une couleur sur des objets dans ma scène. Alors mes objets ont bien un Mesh Renderer et dedans j'ai bien vu qu'il y 'avais un champ array mais je ne comprends pas comment il fonction.

Ici pour chaque object (ici une route) je lui mets soit une couleur soit le shader (les deux en même temps ne marche pas l'objet (route) est blanc)

Code : Tout sélectionner

	public Material matCurved;
		.....
		......
		.....
		//Dans une fonction:
			//comp == la route
			rendRoad = comp.GetComponent<MeshRenderer>();
                	 
                	//Couleur de chaque route
                	rendRoad.material.SetColor("_Color", Color.HSVToRGB(colorRoad, 1, 1));

                	//Le shader
               		//rendRoad.material = matCurved;
J'aimerais bien utiliser un SetColor() avec un shader mais je n'y arrive pas. Et j'aimerais bien utiliser les deux separement car j'ai déjà essayer de mettre une couleur dans le code du shader mais la couleur est fade et pas belle + la fonction principale du shader ne marche plus.
Alors voilà j'aimerais bien votre aide la dessus car je bloque depuis quelque jours.

Merci pour votre aide :)

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

Re: Shader + Couleur

Message par Max » 18 Oct 2020 11:02

Bonjour,
wesh57 a écrit :
17 Oct 2020 23:25
Ici pour chaque object (ici une route) je lui mets soit une couleur soit le shader (les deux en même temps ne marche pas l'objet (route) est blanc)
tu mélanges, je pense, un certain nombre de choses.
Tout objet graphique devant passer par le pipeline de rendu se doit de posséder au moins un material. En gros il va déterminer l'apparence que va avoir l'objet au niveau du rendu. Ce material lui, est basé quoiqu'il arrive sur un shader. Pour faire court, ce sont les paramètres définis et traités dans ce shader qui vont contrôler le rendu de l'objet (réactions à la lumière, couleur, textures, etc...).

Quand tu écris

Code : Tout sélectionner

//Le shader
rendRoad.material = matCurved;
là tu changes le material, avec tous les paramètres associés.

Quand tu écris cette fois

Code : Tout sélectionner

rendRoad.material.SetColor("_Color", Color.HSVToRGB(colorRoad, 1, 1));
tu changes la valeur du paramètre _Color du shader du material associé à rendRoad.

A titre d'info, le paramètre _Color n'existe pas forcément dans chaque shader.
wesh57 a écrit :
17 Oct 2020 23:25
J'aimerais bien utiliser un SetColor() avec un shader mais je n'y arrive pas...
Poste ton shader, cela facilitera une aide éventuelle.

Niveau compétance, les shaders sont certainement une des parties les plus ardues. Peu d'utilisateurs peuvent se targuer de bien maitriser ce domaine. Et pour s'y attaquer, Il faut des bases déjà bien solide ;)
Image
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

wesh57
Messages : 22
Inscription : 19 Jan 2020 04:33

Re: Shader + Couleur

Message par wesh57 » 18 Oct 2020 16:06

Merci pour tes précisions, j'ai bien vu que les shader étaient assez difficiles à apprendre, pour ça que je suis venue ici :gene: :gene:

Pour la partie 'code' voici le shader que j'ai récupéré d'un autre projet :
CurvedUnlit.shader

Code : Tout sélectionner

Shader "Unlit/CurvedUnlit"
{ 
	Properties
	{
		_MainTex("Texture", 2D) = "white" {}
	}
		SubShader
	{
		Tags { "RenderType" = "Opaque" }
		LOD 100

		Pass
		{
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			// make fog work 
			#pragma multi_compile_fog

			#include "CurvedCode.cginc"

			ENDCG
		}
	}
}
CurvedCode.cginc

Code : Tout sélectionner

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'


#include "UnityCG.cginc"

struct appdata
{
	float4 vertex : POSITION;
	float2 uv : TEXCOORD0;
	float4 color : COLOR;
};

struct v2f
{
	float2 uv : TEXCOORD0;
	UNITY_FOG_COORDS(1)
	float4 color : TEXCOORD2;
	float4 vertex : SV_POSITION;
};

sampler2D _MainTex;
float4 _MainTex_ST;
float _CurveStrength;


v2f vert(appdata v)
{
	v2f o;

	float _Horizon = 100.0f;
	float _FadeDist = 50.0f;

	o.vertex = UnityObjectToClipPos(v.vertex);


	float dist = UNITY_Z_0_FAR_FROM_CLIPSPACE(o.vertex.z);

	o.vertex.y -= _CurveStrength * dist * dist * _ProjectionParams.x;

	o.uv = TRANSFORM_TEX(v.uv, _MainTex);

	o.color = v.color;

	UNITY_TRANSFER_FOG(o, o.vertex);
	return o;
}

fixed4 frag(v2f i) : SV_Target
{
	// sample the texture
	fixed4 col = tex2D(_MainTex, i.uv) * i.color;
	// apply fog
	UNITY_APPLY_FOG(i.fogCoord, col);
return col;
}

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

Re: Shader + Couleur

Message par Max » 18 Oct 2020 17:02

Un lien qui t'aidera pour la réponse: https://docs.unity3d.com/Manual/SL-Vert ... mples.html

Donc dans CurvedUnlit.shader, il faut ajouter la propriété _Color("Main Color", COLOR) = (1,1,1,1).
Puis dans le fichier CurvedCode.cginc, ajouter en sortie frag la couleur, soit quelques chose comme
fixed4 col = tex2D(_MainTex, i.uv) * i.color * _Color; en n'oubliant pas de bien définir avant le float4 _Color;
Image
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

wesh57
Messages : 22
Inscription : 19 Jan 2020 04:33

Re: Shader + Couleur

Message par wesh57 » 19 Oct 2020 12:28

Re, alors j'ai testé et sa marche merci beaucoup à toi :super: :super:
Juste si tu sais comment baiser l'intensité de la couleur parce que la c'est beaucoup trop "flashy"

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

Re: Shader + Couleur

Message par Max » 19 Oct 2020 17:33

wesh57 a écrit :
19 Oct 2020 12:28
Juste si tu sais comment baiser l'intensité de la couleur parce que la c'est beaucoup trop "flashy"
ben c'est des réglages que tu as au niveau de l'inspector, ou la même par le code, via SetColor() par exemple.

Image
Image
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

wesh57
Messages : 22
Inscription : 19 Jan 2020 04:33

Re: Shader + Couleur

Message par wesh57 » 19 Oct 2020 18:07

Oui j'ai déjà essayé mais le problème c'est que la couleur est trop "fluo"/"flashy" comme si un effet était appliqué après la couleur. Je sais pas c'est du à quoi mais bon c'est juste un détail ^^
Merci quand même de ton aide :super: :super: .

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

Re: Shader + Couleur

Message par Max » 19 Oct 2020 18:33

après c'est un shader Unlit, donc qui ne réagit pas à la lumière, je pense que c'est là que réside ton soucis.
Cela donne des couleurs uniformes, qui ressortent certainement beaucoup par rapport a d'autres objets de ta scène.
Image
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

wesh57
Messages : 22
Inscription : 19 Jan 2020 04:33

Re: Shader + Couleur

Message par wesh57 » 20 Oct 2020 16:23

Ok d'accord merci pour ta réponse je vais aller chercher sur google si je trouve un truc là-dessus.
En tout cas merci à toi tu m'as beaucoup aidé :super: .
Vous pouvez donc fermer le sujet.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6185
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [RESOLU] Shader + Couleur

Message par boubouk50 » 20 Oct 2020 16:31

On ne clot pas les sujets, on avertit simplement les membres que la solution a été trouvée (ou que le sujet n'est plus alimenté). Pour cela, il faut éditer le titre du premier message et ajouter [RESOLU] en début de celui-ci.
Merci d'y penser pour les prochains sujets.
"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 »