Editeur de material & shaders

Généralités sur la programmation 3D
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Editeur de material & shaders

Message par kelebrindae »

Bonjour,

Comme vous l'avez peut-être vu dans ce post de Blendman http://www.purebasic.fr/french/viewtopi ... =1&t=12763, j'ai créé un petit éditeur de material/shaders pour PB.
Blendman s'était heurté au problème suivant: on ne peut faire Parse3dScripts qu'une seule fois par programme, donc on ne peut pas créer ou modifier un material puis afficher dynamiquement le résultat.

Quoique si, peut-être... L'idée (venue en pleine nuit alors que je pensais à autre chose; des fois, on se demande...), c'est de lancer un second programme chargé de l'affichage 3D dans une window fille de la fenêtre de l'éditeur => quand on modifie le material, on kill et on relance ce programme, qui affiche alors le material modifié.
Et voilà le travail! 8)
Image

Voilà donc tout le bazar: http://keleb.free.fr/codecorner/downloa ... Editor.zip
ça contient les sources de l'éditeur (materialEditor.pb) et du programme de preview (materialPreview.pb), le fichier du Visual Editor de PB, les icônes, etc..
Plein de choses sont embarquées dans l'exe par des "includeBinary": l'exe de preview, un material par défaut avec ses textures, des images... Tout cela se trouve dans le répertoire "included".

Et pour ceux qui veulent essayer tout de suite, voici le programme compilé (win 32 bits): http://keleb.free.fr/codecorner/downloa ... torExe.zip
Engine3D.dll est inclus: dézippez ça dans un répertoire, et ça marche (normalement).

Mode d'emploi résumé:
Touches:
- curseur + pageup pagedown pour manipuler la preview;
- F5 pour rafraîchir la preview en fonction des modifs apportées dans les éditeurs.

- Le menu sert à charger/sauvegarder. Les sauvegardes embarquent meshes, textures, material et shaders, qui "packés" dans la sauvegarde, et "unpackés" quand on ré-ouvre le projet.
- On peut aussi exporter un material avec ses dépendances, et tous les fichiers sont alors enregistrés dans le répertoire choisi, de même qu'un petit source PB montrant comment charger le tout.

Pour importer un material existant, pas d'automatisme: on passe par les petits boutons "importer" présents sur chaque onglet.
Exemple avec le material "SphereMap" dans purebasic/examples/3d/data/scripts:
- Sur l'onglet "material", clique sur le bouton "importer" et choisis "spheremap.material" => le contenu du fichier apparaît dans l'éditeur;
- Sur l'onglet "Shader", tu peux tout supprimer (ce material n'utilise pas de shader. S'il y en avait, ils seraient référencés derrière le mot-clef "source" dans le material);
- Sur l'onglet "Textures - meshes", supprime les textures et importe les deux référencées dans les "textures units" du material: "rustySteel.jpg" et "spheremap.png" (elles sont dans purebasic/examples/3d/data/textures);
- Appuie sur F5 pour forcer le rafraîchissement => ça devrait marcher.

Limitation:
- L'éditeur ne gère qu'un seul material par fichier ".material", et un seul fichier ".material" par projet; donc un projet = un material (par contre, pas de limite sur le nombre de fichiers de mesh, de shaders ou de textures).
- Quand on active l'affichage du sol, cela active aussi les ombres en mode "modulative", ce qui est parfois génant; il faut que j'ajoute un paramétrage pour choisir le type d'ombrage utilisé...
- C'est en anglais, désolé... Je n'ai pas encore pris le temps de traduire; mais je le ferai très bientôt, promis.

Bon, voilà. Il y a encore des bugs et des trucs pas pratique, mais c'est déjà assez utilisable et ça simplifie un peu l'écriture des materials. J'espère que ça vous sera utile! :wink:

[EDIT] Le Zip avec exe + engine3D.dll a été mis à jour pour PB v5.00b2 .
Dernière modification par kelebrindae le mar. 18/sept./2012 9:22, modifié 2 fois.
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Re: Editeur de material & shaders

Message par kelebrindae »

Et voici deux materials à charger avec cet éditeur:
http://keleb.free.fr/codecorner/downloa ... iLight.pbm
http://keleb.free.fr/codecorner/downloa ... olcano.pbm

[EDIT]
Et encore deux autres, fraîchement convertis de Cg vers hlsl grâce au Cg toolkit de nVidia:
http://keleb.free.fr/codecorner/downloa ... xtured.pbm
http://keleb.free.fr/codecorner/downloa ... xtured.pbm

[EDIT]
Deux de plus, (convertis en hlsl avec le Cg toolkit de nVidia):
http://keleb.free.fr/codecorner/downloa ... /glass.pbm
http://keleb.free.fr/codecorner/downloa ... refrac.pbm
Dernière modification par kelebrindae le ven. 25/mai/2012 13:00, modifié 2 fois.
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Editeur de material & shaders

Message par comtois »

Nickel tout fonctionne bien. Merci pour le partage et les exemples de shaders. Il faudrait que je m'y mette un jour, quand j'aurai le temps, et ce n'est pas demain la veille :)
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Editeur de material & shaders

Message par blendman »

super !

Je vais regarder ça rapidement, dis-moi, si j'y arrive puis-je ajouter des modifications et poster celles-ci sur ce sujet (si je juge que c'est intéressant, bien sûr ;)).

En tout cas, un grand merci pour ce partage. Tu as posté ça sur le forum Anglais ?
Il faudrait intégrer ce genre d'outil à Purebasic, car c'est je pense le genre d'utilitaire indispensable pour favoriser l'utilisation de Purebasic et la 3D.

Encore merci :D

EDIT :
j'ai testé et c'est intéressant. Je pense qu'il y a moyen d'ajouter un système encore plus simple pour la création de shaders (je vais essayer d'ajouter quelques paramètres). Ensuite, on modifierait en temps réel le shader en utilisant les boutons, trackbar et autre checkbox.

Si j'ai bien compris ton système, tu créés une fenêtre fille, tu affiches cette fenêtre dans l'imagegadget preview dans la fenêtre principale ?
Grâce à ça :

Code : Tout sélectionner

hdlPreview = RunProgram(#WORK_DIR + "\materialPreview.exe",Str(GadgetID(#IM_preview)),"",#PB_Program_Open)
Notamment le paramètre :

Code : Tout sélectionner

Str(GadgetID(#IM_preview))
ça fonctionne comment ? En passant en paramètre ça actualise le gadget image ?
En faisant comme ça, ça permet d'inclure la fenêtre de preview dans le programme principal ?
En tout cas c'est intéressant :).

Sinon, effectivement, il y a un soucis avec certains shaders et les lights/shadowworld()...
Par exemple si on active le ground avec le normalmap3lights, ça "bug". De plus, ça ne prend pas compte de la position des lights pour ce shader, c'est dommage.
L'autre material, le lava ne prend pas en compte l'éclairage non plus des lights.
Cet éditeur est donc 'est une super initiative, mais pour le moment, les 2 exemples proposés (lava et normalmap3light) ne sont pas vraiment utilisable ingame si on a des lights dynamiques.
On a aussi ça avec le shader par defaut, ce qui est aussi étrange c'est que si on fait une rotation, on dirait que la lumière bouge en même temps que l'objet, alors que non.
Il n'y a pas moyen de définir le système de lighting en fonction des lights de la scène ? Car là, j'ai l'impression que c'est défini dans le shader directement.

En tout cas, bravo car c'est vraiment le genre d'outil intéressant pour créer des material ;).
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Re: Editeur de material & shaders

Message par kelebrindae »

@Blendman:
Le paramètre que je passe dans le runProgram est le handle de la fenêtre de l'éditeur. Ensuite, dans le programme de preview, je crée la window avec #WM_CHILD et je la lie à la window de l'éditeur. Il y a également un CallBack pour fermer la fille en même temps que la mère. Jette un coup d'oeil au code de materialPreview, tu verras, c'est assez simple.
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Editeur de material & shaders

Message par blendman »

kelebrindae a écrit :@Blendman:
Le paramètre que je passe dans le runProgram est le handle de la fenêtre de l'éditeur. Ensuite, dans le programme de preview, je crée la window avec #WM_CHILD et je la lie à la window de l'éditeur. Il y a également un CallBack pour fermer la fille en même temps que la mère. Jette un coup d'oeil au code de materialPreview, tu verras, c'est assez simple.
yep, j'ai bien regardé, mais disons que je ne connais pas le lien entre la fenêtre fille et le fait que cette fenêtre apparaisse dans la fenêtre mère à l'emplacement du gadget image.
Je ne savais pas qu'on pouvait faire ça en fait ^^.

Et je ne comprends pas trop comment ça marche (à moins que ce soit "automatique" si on met ça comme paramètre dans Runprogram).
stombretrooper
Messages : 117
Inscription : dim. 21/déc./2008 18:39

Re: Editeur de material & shaders

Message par stombretrooper »

Très sympa comme outil, merci du partage ! :D
http://www.purebasicstreet.com/ - Site dédié à purebasic.
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Re: Editeur de material & shaders

Message par kelebrindae »

@Comtois et Stombretrooper: Merci! :D

@Blendman:
(Ouais désolé, j'ai pas trop bien expliqué dans le précédent message, car je n'étaispas chez moi et je n'avais pas le code sous les yeux...)
Regarde l'aide de openWindow: le dernier paramètre est le handle de la fenêtre parent. C'est précisément la valeur de ce handle que je passe sous forme de chaîne de caractères dans la ligne de commande, par le RunProgram. Dans le programme lancé, je le récupère dans les paramètres de lancement (programParameters), je le re-transforme en int, et je le passe à OpenWindow.

Code : Tout sélectionner

OpenWindow(0,0,0,PSize\right,PSize\bottom,"",#WS_CHILD|#WS_EX_NOACTIVATE, DisplayHwnd)
Le même "truc" est utilisé pour afficher la preview des économiseurs d'écran, dans Windows; c'est par-là que je l'ai appris => http://www.purebasic.fr/french/viewtopic.php?f=3&t=7945
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Re: Editeur de material & shaders

Message par kelebrindae »

J'ai ajouté deux shaders dans le second post ci-dessus:
http://keleb.free.fr/codecorner/downloa ... xtured.pbm
http://keleb.free.fr/codecorner/downloa ... xtured.pbm

Je les ai trouvé à cette adresse: http://www.ogre3d.org/tikiwiki/Shaders& ... e=Cookbook et convertis de Cg vers hlsl grâce au Cg toolkit de nVidia.
Une fois convertis en hlsl, il y a encore 2-3 modifs à apporter au material et au shader pour que ça marche, mais mon petit éditeur rend la chose beaucoup plus facile et rapide, je trouve... (fier!)

Dès que je trouverai le temps, je posterai un petit tuto pour expliquer la marche à suivre.

A+
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Re: Editeur de material & shaders

Message par kelebrindae »

Deux de plus, (convertis en hlsl avec le Cg toolkit de nVidia):
http://keleb.free.fr/codecorner/downloa ... /glass.pbm
http://keleb.free.fr/codecorner/downloa ... refrac.pbm

- Le premier est un material transparent reflétant une cubemap, avec opacité réglable grâce à un paramètre passé depuis le ".material".
- Le second simule la transparence avec un effet de refraction (ce que l'on voit à travers est déformé par la courbure de l'objet) et une légère irisation (présence de reflets arc-en-ciel sur le bord des courbes). La transparence est simulée: on ne voit pas la scène réelle à travers l'objet, mais une cubemap => ce shader n'est adapté qu'aux scènes statiques...
(exemple ici: http://www.purebasic.fr/english/viewtop ... 16&t=41426)
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Editeur de material & shaders

Message par blendman »

merci pour les nouveaux shaders ;)

Un truc sympa, ce serait le même qu'en refraction, mais avec une scène dynamique (et donc j'imagine un "render from camera to shader" (camera mapping ?) ou un truc du genre :D.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Editeur de material & shaders

Message par G-Rom »

Pense à fournir la dll avec ( engine3D.dll ) la mienne n'est pas pareil (x64) , donc sa plante :/
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Re: Editeur de material & shaders

Message par kelebrindae »

Tu as raison. L'erreur est réparée:
http://keleb.free.fr/codecorner/downloa ... torExe.zip (avec Engine3D.dll incluse)
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Editeur de material & shaders

Message par G-Rom »

tu saurais faire la même chose en glsl ?
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Re: Editeur de material & shaders

Message par kelebrindae »

"Faire", non: je ne saurais pas créer un shader, parce que globalement, je n'y comprends presque rien. :?

Par contre, si tu as un shader CG à convertir en GLSL, c'est peut-être possible de la même façon que pour le HLSL: le Cg Toolkit est capable de sortir du GLSL, il me semble.
En recompilant le programme de preview de l'éditeur avec le subsystem OpenGL, et en procédant par essai/erreur, ça doit être faisable.
(mais là, je m'avance un peu; il faudrait que j'essaie d'abord avec un cas simple, comme ceux ci-dessus)
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
Répondre