[DB AL][RESOLU] alphau-secours

Questions à propos du scripting Shader.
chabis
Messages : 31
Inscription : 23 Oct 2017 22:16

[DB AL][RESOLU] alphau-secours

Message par chabis » 01 Jan 2018 23:28

bonjour à tous,

apres m'etre boulotté un ouvrage sur les shaders sous unity 5 , je me suis jeté à l'eau comme on s'elance du haut des chute du Niagara blotti dans son tonneau... et crac.
mon objectif pour commencer etait d'essayer d'appliquer ce que j'avais cru comprendre à un cas apparemment simple: un shader toon. l'effet toon est issu d'une texture ramp et cerise sur le gateau, si il y a une couche alpha sur la texture, ... elle est appliquée (le truc de ouf quoi)
sauf que voilà:
Image

alors je ne vous envoi pas d'autre images, mais meme sur un simple batiment sans bitmap (donc juste un couleur) il me fait ce superbe effet de "je vois à travers et en plus je ne sais plus ce qui est devant et derriere au sein d'un meme objet"...
j'ai cherché, lu, traduit, essayer (pleins de trucs, j'en ai laissé quelqu'uns sous forme de ligne commentées dans le code) et c'est l'echec , d'où mon appel au secours.

merci d'avance !

voici le code:

Code : Tout sélectionner

Shader "Custom/toon" {
	Properties 
	{
		_RampTex ("Ramp", 2D) = "white" {}
		_Color ("Color", Color) = (1,1,1,1)
		_MainTex ("Albedo (RGB)", 2D) = "white" {}
	}

	SubShader 
	{
		Tags 
		{
		 "Queue" = "Transparent"
		 "IgnoreProjector" = "True"
		 "RenderType" = "Transparent" 
//            "Queue"="AlphaTest"
//            "RenderType"="TransparentCutout"
		 }
		LOD 200
		cull off

		CGPROGRAM

		#pragma surface surf Toon alpha:fade fullforwardshadows

		#pragma target 3.0


		sampler2D _MainTex;
		sampler2D _RampTex;
		fixed4 _Color;
		//float4 _cb;

		struct Input 
		{
			float2 uv_MainTex;
		};


		UNITY_INSTANCING_BUFFER_START(Props)
			// put more per-instance properties here
		UNITY_INSTANCING_BUFFER_END(Props)


		fixed4 LightingToon (SurfaceOutput s, fixed3 lightDir, fixed atten)
		{
			half NdotL = dot (s.Normal, lightDir);
			NdotL = tex2D(_RampTex, fixed2(NdotL, 0.5));

			fixed4 c;
			c.rgb = s.Albedo * _LightColor0.rgb * NdotL * atten;
			c.a = s.Alpha;
			return c;
		}


		void surf (Input IN, inout SurfaceOutput o) 
		{
			//float4 _cb = tex2D (_MainTex, IN.uv_MainTex).rgb * _Color;   // cette ligne ne marche pas: "invalid initialization"
			o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb * _Color;
			o.Alpha = tex2D (_MainTex, IN.uv_MainTex).a;
			//o.Alpha = 1.0;
			//o.Alpha = c.a;
		}
		ENDCG
	}
	//FallBack "Diffuse"
	FallBack "Transparent/Cutout/Diffuse"
}

Dernière édition par chabis le 03 Jan 2018 11:31, édité 1 fois.

chabis
Messages : 31
Inscription : 23 Oct 2017 22:16

Re: [DB AL] alphau-secours

Message par chabis » 01 Jan 2018 23:32

petite precision, la seule chose que je sais à cette heure, c'est que si je retire dans #pragma la commande "alpha:fade" je resoud le probleme, mais je n'ai plus d'alpha du tout....

chabis
Messages : 31
Inscription : 23 Oct 2017 22:16

Re: [DB AL][resolu] alphau-secours

Message par chabis » 03 Jan 2018 11:35

ok,... alpha clipping etait le chemin à suivre, et non pas alpha tout court.

bon j'avoue que c'est avec shaderforge que j'ai fini par comprendre. reste que lire le code d'un shaderforge c'est un peu comme se farcir l'integrale de Proust imprimé sur papier bible en caractere 6pt, faut aimer souffrir.

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

Re: [DB AL][resolu] alphau-secours

Message par boubouk50 » 03 Jan 2018 11:39

Salut,
C'est quoi l'Alpha Clipping? Alpha Cutout plutôt, non?
"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

chabis
Messages : 31
Inscription : 23 Oct 2017 22:16

Re: [DB AL][resolu] alphau-secours

Message par chabis » 03 Jan 2018 14:14

c'est que j'ai encore le nez dans shaderforge, dans lequel la distinction se fait sous cet appellation.
mon petit doigt me dit que transcrit en code cela doit etre effectivement l'alpha cutout,
sauf que quand on ouvre le code généré par shaderforge, à part la migraine, on ne trouve pas grand chose...

allé j'suis mauvaise langue, nombres de parties du code me parlent... j'en devine l'intention, je commence à entrevoir la façon dont tout cela fonctionnne (j'ai bien dit "entrevoir") sauf pour l'alpha ...
pour l'alpha, je lis et relis et je n'y vois aucune reference... preuve que j'ai pas encore compris grand chose ^^

j'ai l'impression de chercher ma grand mere dans une soiree techno trans hardcore.... si elle y est, elle est bien cachée.

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

Re: [DB AL][resolu] alphau-secours

Message par boubouk50 » 03 Jan 2018 14:28

Tu as deux types d'alpha: le cutout (aussi appelé AlphaTest) et le transparent (Alpha Blending).
l'AplhaTest est un tout ou rien tandis que l'Alpha Blending permet les dégradés de transparence. Le premier fonctionne comme un objet opaque dont la géométrie n'est pas limitée par ses arètes (mais par sa texture du coup) alors que le second nécessite d'autres traitements dont un tri en profondeur, pour pouvoir afficher les objets derrière.
De par ton image, on a l'impression que le tronc utilise de l'alpha blending et que le tri ne s'opère pas correctement.
Aussi, cela peut provenir des ombres, on a l'impression qu'elles s'appliquent sur une face arrière, ou bien que la somme de deux ombres la supprime en certains endroits.
"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

chabis
Messages : 31
Inscription : 23 Oct 2017 22:16

Re: [DB AL][resolu] alphau-secours

Message par chabis » 03 Jan 2018 14:48

j'avais bien fait l'erreur de choisir l'alpha blending, mais j'avais essayé l'alpha test sans succes (non pas que ce n'etait pas le bon choix mais que j'ai dû m'y prendre comme un manche)
j'ai l'impression, mais peut etre que je me trompe, que le code généré par shaderforge est peut etre inutilement complexe.
j'imagine que généré par un humain il serait surement plus optimisé (et plus lisible)

j'essaye de comprendre l'un avec l'autre, de faire progresser d'une part ma comprehension des shaders via shaderforge et de repartir de ce shader fonctionnel pour coder "à la main" quelque chose de similiaire.
je reste frustré à l'idée d'avoir besoin de plus que d'un simple bloc-note pour faire ce que je veux.
en meme temps, un code de shader n'est pas à proprement parler limpide. mais une fois degagé la partie mathematique / geometrie /vecteur, ca devrait quand meme pouvoir etre un peu plus lisible que la bouilli que nous sert shaderforge.
en meme temps c'est du code généré automatiquement, on va pas lui demander de nous faire du Verlaine...

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

Re: [DB AL][resolu] alphau-secours

Message par boubouk50 » 03 Jan 2018 14:56

Je te conseillerai de plutôt apprendre par des shaders programmés humainement (à grands coup de bâtons et d'insultes donc), ce sera peut-être plus explicite.
Quelques liens en vrac:
https://docs.unity3d.com/Manual/SL-Reference.html -> La doc qui t'explique tout.
http://www.shaderslab.com/shaders.html -> Tutos pas à pas
https://80.lv/articles/unity-shaders-fo ... ed-scenes/ -> les liens sont dans l'article qui je pense est proche de ton idée
"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

chabis
Messages : 31
Inscription : 23 Oct 2017 22:16

Re: [DB AL][resolu] alphau-secours

Message par chabis » 03 Jan 2018 15:16

grand merci à toi,

je prends ces liens que je ne connaissais pas (hormis la section de la doc sur les shaders quand meme...)

comme tu t'en doutes j'arpente la doc, le net à la recherche de tuto , et j'ai boulotté le "unity5 shader and effect cookbook".
ca tiens lieu de régime minceur post fêtes de fin d'année tellement c'est indigeste parfois, mais à force, ca commence à rentrer.
en parallele je teste tantot dans shaderforge, tantot en code, pour mieux comprendre.
l'avantage de shaderforge, c'est qu'on ne risque pas les fautes d'orthographe ou structure. pour jouer avec les vecteurs c'est plutôt sympa.

chabis
Messages : 31
Inscription : 23 Oct 2017 22:16

Re: [DB AL][resolu] alphau-secours

Message par chabis » 03 Jan 2018 16:04

mais pourquoi ??

pourquoi les Français qui ont compris comment fonctionnent les shaders tiennent t'ils à le dire dans un anglais avec un accent de 6eme redoublant ???
des tutos en anglais il y en a des wagons entiers...
(petite crise du mec qui n'a pas dormi de la nuit, et qui , au petit matin se retrouve à traduire du yaourt en anglais pour le retraduire en francais derriere...)

Répondre

Revenir vers « les Shaders »