[Resolu] CG Shader: Ombres avec Unity 5

Questions à propos du scripting Shader.
Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5402
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

[Resolu] CG Shader: Ombres avec Unity 5

Message par boubouk50 » 16 Nov 2015 12:01

Bonjour, me revoilà une fois de plus vous embêter (et aussi apprendre avec moi ^^) avec les shaders!

Je n'arrive pas à avoir d'ombres sur mes shaders persos. Je ne trouve pas l'info, je rame bien. J'ai trouvé le mot clé fullforwardshadows mais il ne suffit pas de le rajouter pour avoir des ombres. Bref, je pêche et je me dis qu'à trop vouloir simplifier, j'ai tout cassé... Faut-il que je passe en Standard? Faut-il obligatoirement un Vertex shader? Où récupère-je les ombres? Quelle est la différence entre un pigeon? Tant de questions...
Le shader en question:

Code : Tout sélectionner

Shader "_MyCustoms/Water/Bump Script Offset" {
	Properties {
		_Color ("Main Color", Color) = (1, 1, 1, 1)
		_ReflectColor ("Reflection Color", Color) = (1, 1, 1, 1)
		_MainTex ("Base Texture (RGB)", 2D) = "white" {}
		_BumpMap ("Normal Map", 2D) = "bump" {}
		_Cube ("Reflection Cubemap", Cube) = "" {}
	}
	
	SubShader {
		Tags {"Queue" = "Geometry" "IgnoreProjector" = "True" "RenderType" = "Opaque" }
		LOD 200
		
		CGPROGRAM
		#pragma surface surf Lambert fullforwardshadows
		#pragma target 3.0
		
		sampler2D _MainTex;
		sampler2D _BumpMap;
		samplerCUBE _Cube;
		fixed4 _Color;
		fixed4 _ReflectColor;
		
		struct Input {
			half2 uv_MainTex;
			half2 uv_BumpMap;
			half2 uv_Cube;
			half3 worldRefl;
			half3 viewDir;
			INTERNAL_DATA
		};
		
		void surf(Input IN, inout SurfaceOutput o) {
			fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);
			fixed4 c = tex * _Color;
			o.Albedo = c.rgb;
			
			float3 normal1 = UnpackNormal (tex2D (_BumpMap, 1.171 * IN.uv_BumpMap)).xyz;
			float3 normal2 = UnpackNormal (tex2D (_BumpMap, IN.uv_Cube)).xyz;
			o.Normal = normalize (normal1 + normal2);
			fixed rim = 0.92 - (dot (IN.viewDir, o.Normal) * 0.8);
			o.Emission = texCUBE (_Cube, WorldReflectionVector (IN, o.Normal)).rgb * _ReflectColor.rgb * rim;

			o.Alpha = c.a;
		}
		
		ENDCG
	}
	
	Fallback "Diffuse"
} 
Si vous pouviez m'aiguiller, je vous en serai éternellement reconnaissant pendant 5 secondes.
Merci.
"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
boubouk50
ModoGenereux
ModoGenereux
Messages : 5402
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: CG Shader: Ombres avec Unity 5

Message par boubouk50 » 16 Nov 2015 12:32

Bon, ben, en fait il n'y a rien à changer dans ce script, il est bon. Alors comment, j'ai résolu le problème (pour l'instant):
J'ai changé mon le shader de mon matériau par le Legacy/Diffuse (pour voir si mon matériau recevait bien des ombres) qui a eu pour effet d'afficher les ombres, je suis repassé sous mon shader perso et les ombres sont restées. EH OUI! Je suis le plus grand magicien du monde! :frime:
Donc, là le problème devient tout autre: Bug? :pascontent2:

- EDIT - j'ai relancé Unity, compilé un Exe et les ombres restent. Tant mieux, mais bon, pour activer mes ombres c'est un peu à la One Again...
"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
Alesk
Messages : 2302
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: CG Shader: Ombres avec Unity 5

Message par Alesk » 17 Nov 2015 19:24

Yo !

Tu créés un surface shader par défaut, tu le sélectionnes puis dans l'inspecteur tu vas voir "Show generated code", tu fais un clic dessus et ça va t'afficher une version plus exhaustive du code du shader.
Là tu n'as besoin de t'intéresser qu'à la première passe, il y a plein de choses dedans, y compris ce qu'il faut utiliser pour gérer les ombres.
à partir de là, tu n'as plus qu'à faire le ménage petit à petit pour isoler ce qui est vraiment nécessaire.

Je ne te dis pas directement ce qu'il faut garder ou non, car je ne le sais pas précisément moi même. Je suis passé par cette méthode il y a à peine quelques jours pour la même raison que toi, et mon shader est encore en chantier, j'ai pas terminé de faire le ménage ;)

Bon courage !

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

Re: CG Shader: Ombres avec Unity 5

Message par boubouk50 » 18 Nov 2015 10:14

Salut,
Comme je l'ai mis dans mon post, j'avais la solution mais Unity ne me les affichait pas pour une raison inconnue. J'ai réussi à faire un shader Unlit qui prend en compte les ombres et c'est passé crème cette fois-ci.
Les éléments clés:

Code : Tout sélectionner

Tags { "LightMode" = "ForwardBase"}
...
#include "UnityCG.cginc"
#include "AutoLight.cginc"
...
fixed shadow = SHADOW_ATTENUATION(i); //dans le fragment shader
...
FallBack "Diffuse" //la gestion de la lumière et des ombres est gérée par le fallback apparemment, il faut le Fallback (je l'ai lu mais j'ai pas investigué)
Bisous
"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
Alesk
Messages : 2302
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: CG Shader: Ombres avec Unity 5

Message par Alesk » 18 Nov 2015 12:37

ok merci :)

Répondre

Revenir vers « les Shaders »