Flow map

Questions à propos du scripting Shader.
Avatar de l’utilisateur
axel
Messages : 1924
Inscription : 26 Avr 2012 09:10
Localisation : Lille - Dunkerque
Contact :

Flow map

Message par axel » 03 Mai 2012 08:29

Salut,

Je cherche à réaliser de l'eau avec une flowmap sous Unity.
Un peu comme ici sous l'udk:
http://www.youtube.com/watch?v=2X1vFVGAlwk

Une personne a déjà travaillé sur le sujet sur le forum de Unity, et a crée un shader avec un script.
http://forum.unity3d.com/threads/97662- ... -Flow-Maps

Le problème c'est que j'ai essayé, et le flowmap ne bouge pas quand je lance le player.

Du coup je me suis dis: "comme je ne sais pas programmer les shader, je vais utiliser Strumpy shader editor..." Monumentale erreur :D

Quoiqu'il en soit, j'ai tout de même réussis à obtenir une texture qui bouge en fonction d'une flowmap, créee avec le logiciel Flow field editor:
http://algoholic.eu/tag/flowmap/

Voici la flowmap:
Image

Et mon graphique sous Strumpy shader editor, avec le shader
Image
Image

Le résultat donne ceci:
http://axvaude.free.fr/temp/flowmap/str ... layer.html

Le problème qui se pose, c'est que je n'arrive pas à mettre de la réflection et de la réfraction sur ce shader. Toute mes tentatives sous Strumpy se solde par une erreur: "Shader error in 'WaterFlow': Too many texture interpolators would be used for ForwardBase pass at line 35"
En cherchant un peu, je me suis vite aperçu que même avec Strumpy il faut savoir coder les shaders, et comme le créateurs de cet éditeur ne peut visiblement plus assurer le suivit de son soft, je me retrouve bloqué (je ne comprend rien au langage des shaders, et je ne trouve pas de doc ou tutos simple).
Donc voici le graph de strumpy et le shader resultant, si quelqu'un à une idée je l'en remercie d'avance.

http://axvaude.free.fr/temp/flowmap/waterflow.sgraph
http://axvaude.free.fr/temp/flowmap/waterflow.shader

Aegis
Messages : 233
Inscription : 14 Juin 2010 20:29
Localisation : Wellington, Nouvelle-Zélande

Re: Flow map

Message par Aegis » 03 Mai 2012 09:31

Suivant la carte graphique, un shader ne supporte que x textures par passes. Tu as déjà 3 textures sur ton shader. Si tu en rajoute deux, tu sera a 5 alors que ta cg ne doit en prendre que 3 ou 4 max. A moins que ce soit une limite de Strumpy shader editor, je ne le connais pas.

La seule solution sans ajouter de nouvelles textures, serait d'utiliser au maximum les canaux alphas des textures déjà utilisées. Inconvénient, tu ne pourra utiliser une map en niveau de gris.

Si tu as vraiment besoin de ces textures, il faudra alors faire un shader avec plusieurs passes. Le soucis c'est que chaque passes provoque un drawcall (je crois).

Edit : Puisque le nombre de texture possible par passes dépend de ta cg, ça veut dire que quelqu'un qui aura une cg moins performante que la tienne ne pourra sûrement pas voir ce shader. C'est pour cela qu'en général, il y a plusieurs subshader ou un fallback (ça sera moins joli mais ça affichera quand même quelque chose).

Avatar de l’utilisateur
axel
Messages : 1924
Inscription : 26 Avr 2012 09:10
Localisation : Lille - Dunkerque
Contact :

Re: Flow map

Message par axel » 03 Mai 2012 10:01

Merci Aegis pour ces éclaircissements, j'ai effectivement lu quelque part cette limitation de textures.
Du coup j'ai essayé en supprimant la map diffuse de base et mettant juste une couleur. Mais le simple fait d'ajouter une couleur au séculaire me provoque cette erreur.
Ce que je ne m'explique pas aussi, c'est que le shader fournit sur le forum (celui qui n'est pas animé), comporte 5 textures, et ça passe dans Unity.
Image

Aegis
Messages : 233
Inscription : 14 Juin 2010 20:29
Localisation : Wellington, Nouvelle-Zélande

Re: Flow map

Message par Aegis » 03 Mai 2012 10:59

Certes le shader du forum utilise 5 textures mais rien n'indique que les 5 sont utilisées en une seule passe. Peut-être qu'il en utilise deux. Tu peux filer le code de ce shader que je puisse y jeter un oeil ?

J'ai essayé de lire le shader généré par SSE (Strumpy Shader Editor), mais j'ai un peu de mal. Je n'ai pas encore vraiment vu la partie CGPROGRAM. Je suis resté sur du basique jusqu'à présent ;-)

D'ailleurs, le waterflow.shader que tu donnes est la version qui n'utilise que 3 textures. J'imagine que tu l'erreur empêche SSE de le générer ?

Avatar de l’utilisateur
axel
Messages : 1924
Inscription : 26 Avr 2012 09:10
Localisation : Lille - Dunkerque
Contact :

Re: Flow map

Message par axel » 03 Mai 2012 11:28

le shader en question est sur cette page tout en bas:
http://forum.unity3d.com/threads/97662- ... -Flow-Maps

Et effectivement comme Strumpy met une erreur il ne le compile pas.

Aegis
Messages : 233
Inscription : 14 Juin 2010 20:29
Localisation : Wellington, Nouvelle-Zélande

Re: Flow map

Message par Aegis » 03 Mai 2012 14:18

Arf je n'avais pas vu que tu m'avais dit "tout en bas". Du coup j'ai passé 10 minutes à décortiquer le premier shader en me disant que ça ne correspondait pas...

Bref, ce shader ne semble utiliser qu'une seule passe. Ton erreur viens donc soit d'une limite de SSE ou d'une mauvaise configuration (genre tu essaye de connecter des nodes qui ne sont pas compatibles).

Le soucis c'est qu'on ne va pas pouvoir aller bien plus loin comme ça :
- Je ne connais pas SSE (et je pense qu'il est payant ?).
- Modifier le shader à la main ne mettrait pas le graph à jour. Du coup, tu ne pourra plus utiliser SSE.
- Faire un shader aussi complexe à la main est pour le moment au dessus de mes compétences.

Tu pourrais prendre un screenshot de la connexion que tu essaye de faire sur le graph ?

Avatar de l’utilisateur
axel
Messages : 1924
Inscription : 26 Avr 2012 09:10
Localisation : Lille - Dunkerque
Contact :

Re: Flow map

Message par axel » 03 Mai 2012 16:14

Merci à toi, c'est sympa.

Du coup j'ai bidouillé un peu les nodes et les paramètres, et c'est passé. Je ne saurait dire ce qui à fait que ça fonctionne maintenant.
Par contre la reflexion, si elle est passé ne donne rien du tout. Je n'ai pas trop compris comment ça fonctionne SSE.

j'ai mis le nouveau shader:
http://axvaude.free.fr/temp/flowmap/waterflow.shader

et un webplayer de ce que ça donne:
http://axvaude.free.fr/temp/flowmap/str ... layer.html

Aegis
Messages : 233
Inscription : 14 Juin 2010 20:29
Localisation : Wellington, Nouvelle-Zélande

Re: Flow map

Message par Aegis » 03 Mai 2012 16:58

Si j'en crois le shader que tu as linké, il n'y a pas de map de réflexion. Tu as la FlowMap, BumpMap, CubeMap & MainText.

Avatar de l’utilisateur
axel
Messages : 1924
Inscription : 26 Avr 2012 09:10
Localisation : Lille - Dunkerque
Contact :

Re: Flow map

Message par axel » 04 Mai 2012 08:56

ah ça serait peut être pour ça que ça passe alors :D
Il va falloir que je revois mon graph sous SSE.

Pour répondre à ta question d'avant: SSE est gratuit.

Encore merci pour ton aide.

Aegis
Messages : 233
Inscription : 14 Juin 2010 20:29
Localisation : Wellington, Nouvelle-Zélande

Re: Flow map

Message par Aegis » 04 Mai 2012 11:12

Ah bah je testerai alors (même si j'aimerais surtout apprendre à les faire à la main).

Répondre

Revenir vers « les Shaders »