Une barre modifiant la texture de l'objet

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Maxime00
Messages : 36
Inscription : 16 Mai 2013 09:57

Une barre modifiant la texture de l'objet

Message par Maxime00 » 18 Juin 2013 10:05

Bonjour à tous. J'ai créé un programme ou mon objet a deux texture entre lesquelles il alterne en fonction d'une barre jourNuit. Voici le code des propriétés :

Code : Tout sélectionner

Properties 
	{
_Daytime("Jour à nuit", Range(0,1) ) = 0
_Diffuse("Diffuse texture", 2D) = "white" {}
_Lightmap1("Lightmap Jour", 2D) = "gray" {}
_Ligthmap2("Lightmap Nuit", 2D) = "gray" {}

	}
La propriété Daytime sert donc à modifier l'affichage des deux textures, l'une pour le jour et l'autre la nuit, en fonction de sa valeur (je mettrais le code entier à la fin pour plus de précision.)

J'ai ensuite créé un slider GUI :

Code : Tout sélectionner

var sliderJourNuit : float = 0.0;

function OnGUI () {
       sliderJourNuit = GUI.HorizontalSlider (Rect (20, 20, 100, 30), sliderJourNuit, 0.0, 1.0);
    }
Je voudrais accéder à la propriété _DayTime du shader pour lui affecter la valeur de sliderJourNuit, mais je n'ai aucune idée de comment faire ca. Pourriez-vous m'aider ? Merci bien



Code de tout le shader :

Code : Tout sélectionner

Shader "ShaderEditor/EditorShaderCache"
{
	Properties 
	{
_Daytime("Jour à nuit", Range(0,1) ) = 0
_Diffuse("Diffuse texture", 2D) = "white" {}
_Lightmap1("Lightmap Jour", 2D) = "gray" {}
_Ligthmap2("Lightmap Nuit", 2D) = "gray" {}

	}
	
	SubShader 
	{
		Tags
		{
"Queue"="Geometry"
"IgnoreProjector"="False"
"RenderType"="Opaque"

		}

		
Cull Back
ZWrite On
ZTest LEqual
ColorMask RGBA
Fog{
}


		CGPROGRAM
#pragma surface surf BlinnPhongEditor  vertex:vert
#pragma target 2.0


float _Daytime;
sampler2D _Diffuse;
sampler2D _Lightmap1;
sampler2D _Ligthmap2;

			struct EditorSurfaceOutput {
				half3 Albedo;
				half3 Normal;
				half3 Emission;
				half3 Gloss;
				half Specular;
				half Alpha;
				half4 Custom;
			};
			
			inline half4 LightingBlinnPhongEditor_PrePass (EditorSurfaceOutput s, half4 light)
			{
				half3 spec = light.a * s.Gloss;
				half4 c;
				c.rgb = (s.Albedo * light.rgb + light.rgb * spec);
				c.a = s.Alpha;
				return c;

			}

			inline half4 LightingBlinnPhongEditor (EditorSurfaceOutput s, half3 lightDir, half3 viewDir, half atten)
			{
				half3 h = normalize (lightDir + viewDir);
				
				half diff = max (0, dot ( lightDir, s.Normal ));
				
				float nh = max (0, dot (s.Normal, h));
				float spec = pow (nh, s.Specular*128.0);
				
				half4 res;
				res.rgb = _LightColor0.rgb * diff;
				res.w = spec * Luminance (_LightColor0.rgb);
				res *= atten * 2.0;

				return LightingBlinnPhongEditor_PrePass( s, res );
			}
			
			struct Input {
				float2 uv_Diffuse;
				float2 uv_Lightmap1;
				float2 uv_Ligthmap2;

			};

			void vert (inout appdata_full v, out Input o) {
float4 VertexOutputMaster0_0_NoInput = float4(0,0,0,0);
float4 VertexOutputMaster0_1_NoInput = float4(0,0,0,0);
float4 VertexOutputMaster0_2_NoInput = float4(0,0,0,0);
float4 VertexOutputMaster0_3_NoInput = float4(0,0,0,0);


			}
			

			void surf (Input IN, inout EditorSurfaceOutput o) {
				o.Normal = float3(0.0,0.0,1.0);
				o.Alpha = 1.0;
				o.Albedo = 0.0;
				o.Emission = 0.0;
				o.Gloss = 0.0;
				o.Specular = 0.0;
				o.Custom = 0.0;
				
float4 Tex2D0=tex2D(_Diffuse,(IN.uv_Diffuse.xyxy).xy);
float4 Tex2D1=tex2D(_Lightmap1,(IN.uv_Lightmap1.xyxy).xy);
float4 Tex2D2=tex2D(_Ligthmap2,(IN.uv_Ligthmap2.xyxy).xy);
float4 Lerp0=lerp(Tex2D1,Tex2D2,_Daytime.xxxx);
float4 Multiply0=Tex2D0 * Lerp0;
float4 Master0_1_NoInput = float4(0,0,1,1);
float4 Master0_2_NoInput = float4(0,0,0,0);
float4 Master0_3_NoInput = float4(0,0,0,0);
float4 Master0_4_NoInput = float4(0,0,0,0);
float4 Master0_5_NoInput = float4(1,1,1,1);
float4 Master0_7_NoInput = float4(0,0,0,0);
float4 Master0_6_NoInput = float4(1,1,1,1);
o.Albedo = Multiply0;

				o.Normal = normalize(o.Normal);
			}
		ENDCG
	}
	Fallback "Diffuse"
}
Dernière édition par Maxime00 le 18 Juin 2013 12:37, édité 1 fois.

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

Re: Une barre modifiant la texture de l'objet

Message par Max » 18 Juin 2013 11:28

Regarde ici, cela devrait répondre à ta question: http://docs.unity3d.com/Documentation/S ... Float.html
;)
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

Maxime00
Messages : 36
Inscription : 16 Mai 2013 09:57

Re: Une barre modifiant la texture de l'objet

Message par Maxime00 » 18 Juin 2013 11:47

hé hé oui, j'avais vu ça mais je n'ai pas réussi à l'utiliser ^^'

J'ai écris

Code : Tout sélectionner

this.renderer.material.SetFloat( "_DayTime", sliderJourNuit );
Ce que je comprend, c'est qu'on accède à l'objet auquel est attaché le script (donc ma capsule avec la texture à bouger), puis à toutes ses texture et on modifie les variable _DayTime avec la valeur de sliderJourNuit.
Mais bon, ça ne marche pas donc j'ai du mal comprendre

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

Re: Une barre modifiant la texture de l'objet

Message par Max » 18 Juin 2013 11:56

Maxime00 a écrit :J'ai écris

Code : Tout sélectionner

this.renderer.material.SetFloat( "_DayTime", sliderJourNuit );
Attention, c'est plutôt

Code : Tout sélectionner

renderer.material.SetFloat( "_Daytime", sliderJourNuit );
si je me fie à ton shader...
Attention donc à la casse, donc Daytime et non pas DayTime
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

Maxime00
Messages : 36
Inscription : 16 Mai 2013 09:57

Re: Une barre modifiant la texture de l'objet

Message par Maxime00 » 18 Juin 2013 12:10

ok ca marche merci bien. Juste une question, comment la fonction sait quel texture il doit modifier ? Ou alors il modifie toutes les texture présentes ? Ou toutes celles de l'objet auquel le script est attaché ?

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

Re: Une barre modifiant la texture de l'objet

Message par Max » 18 Juin 2013 12:24

Les textures ne sont pas modifiées, mais c'est la façon dont elles sont appliquées sur ton mesh qui va jouer. C'est le rôle de ton shader.
Si j'ai bien décrypté le truc, pour résumer, ton material à trois textures de définis en entré, lors de la phase de rendu, c'est ton shader qui va faire un mix des deux textures Jour/Nuit (en fonction de Daytime), et qui l'applique, en quelque sorte en 'surcouche' sur la texture diffuse (comme un peu du lightmapping).
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

Verrouillé

Revenir vers « Scripting »