Création d'un script-fu pour les surfaces virtuelles

Programmation soft

Moderator: Modérateur lunaire

Post Reply
Teto
Spationaute
Posts: 14
Joined: Wed Mar 11, 2009 7:35 am

Création d'un script-fu pour les surfaces virtuelles

Post by Teto »

Hi! :D
Je suis en train d'écrire un script-fu (une sorte de add-on pour ceux qui ne connaissent pas) pour the Gimp, afin de faire en auto des surfaces virtuelles à partir d'un seul fichier. Ça existe pour Mac, mais visiblement ça n'existe pas pour PC. De plus, comme the Gimp est libre et sur beaucoup de supports...
Pourquoi? Parce que j'ai déjà parlé ailleurs de mon impossibilité d'afficher les surfaces détaillées en hi-res. Comme ça m'a énervé, et que je n'avais pas envie de les faire 'à la main'... Et puis je voulais m'exercer sur les script-fu, c'était une excellente occasion.
Néanmoins comme je débute, ce sera un peu long avant d'arriver à un script définitif. :mrgreen:
J'up-daterai régulièrement sur ce post les différentes versions.

Teto.

Important: Les différents script sont placés sous Filtres/Celestia/virtual textures/

Scrpt-fu 1: Création. :)
Je poste ce premier script qui est un script simple car il ne fait que créer un fichier aux bonnes dimensions, par rapport au nombre de 'levels' demandés.
En regardant l'interface (script1.gif) on comprend assez facilement.
- Size security: petite bidouille permettant d'éviter de faire planter Gimp parce qu'on lui demande trop de mémoire. Perso j'arrive à faire un fichier niveau 4 mais au 5 il met un temps infini! (et j'ai du bon matos!)
- Le nombre de niveaux est limité à 8, au delà la taille est trop grande pour Gimp. Ce script est peu utile pour les niveaux supérieurs de toute façon, il est prévu que je fasse quelque chose pour les textures montrant précisément un lieu (genre Observatoire à Izaña... :mrgreen: ) mais c'est pas pour tout de suite.
- Nom de la planète = nom du fichier
- Nom des parents = nom du calque -> Ça sert plutôt pour le second script (ici on fait ce qu'on veut finalement) mais c'est plus une aide-mémoire.

Scrpt-fu 2: Exportation. :D
C'est sans doute le programme le plus utile pour le fan qui récupère une magnifique texture du genre grande et qui veut la transformer en texture virtuelle sans devoir se farcir les tuiles à la main. Je parle pour les PCistes, puisque les Linuxiens semblent mieux lotis.
Si vous regardez la capture jointe, l'interface est assez facile à comprendre, je pense, du moins ceux qui connaissent l'anglais! :mrgreen:

- Check level auto: Détermine automatiquement le plus grand niveau que l'on peut faire avec l'image. Je suis parti du principe que les tuiles font 512x512. Une version future permettra peut-être de faire 512x1024 et autres 2048x2048, cela dépendra des demandes.
- Level (0 to 8 )(manual): Si le bouton du dessus n'est pas coché, c'est ce curseur qui est pris en compte. À noter qu'il s'arrête à 8. Au delà cela sort des possibilités matérielles de Gimp, qui est limité en taille de plan de travail.
- Export from level n to 0: Coché par défaut, la fonction permet de 'tuiler' du niveau choisi au niveau 0. Le script redimensionne le dessin pour chaque niveau (mais en partant toujours de l'image de départ, pour limiter les pertes) et le tuile.
- Resize image (auto) : Il peut arriver que vous vouliez utiliser une image, mais qui fait 1016x458 par exemple, ou même 5236x157. Si la case est cochée, le script détermine le niveau 'le mieux' et redimensionne l'image. La méthode de calcul est un peu simpliste, j'avoue, elle sera peut être à revoir. Si la case n'est pas cochée, cela signifie qu'on ne veut pas redimensionner une image qui ne soit pas aux normes -> Fin du script (un message s'affiche).
- Compute surface map: Si la case est décochée, les tuiles pour la texture de 'surface' ne seront pas générées.
Le texte sous la case à cocher: Pour ne pas alourdir l'interface, j'ai décidé que le nom du fichier devait correspondre au nom de la planète, et aux parents (genre Sol/saturne) pour le nom du calque. Cela sert pour la génération du fichier .ssc. Rien de grave si ça ne correspond pas, on peut modifier le fichier ensuite à la main.
- Surface map: Il faut ensuite la choisir. Si la case n'est pas cochée, elle devient inactive dans le programme.
- Compute normal map, Normal map, Compute night map, Night map: Idem pour les textures de nuit et 'normal map'.
- Export path (YourPlanet): Il faut enfin choisir le répertoire de destination où toutes les tuiles/fichiers seront générés. Attention! Malheureusement Script-fu ne semble plus pouvoir créer les répertoires. Il faut donc que toute l'arborescence soit déjà présente, car si on essait de sauvegarder un fichier dans un répertoire qui n'existe pas, le script plante. Hélàs. :cry: Mais une arborescence toute faite existe déjà dans l'archive ci-jointe. Il suffit donc d'en faire une copie quelque part dans le dossier /extra de Celestia, de renommer le répertoire de tête en ce que vous voulez, et c'est tout. Ne touchez pas aux sous-répertoires.
À noter que le nom 'YourPlanet' est le nom de ce répertoire de tête dans l'archive.
À noter également que si vous ne choisissez aucun répertoire, le script s'arrête. Faible sécurité mais bon.
Très important: Une fois les textures créees, pensez à supprimer les répertoires vides, càd celles où aucune tuile n'a été générée. Sinon Celestia affiche des tuiles transparentes quand on s'approche de trop.

Voilà Je pense avoir été exhaustif. Si vous avez des problèmes, questions etc, n'hésitez pas.
J'ai fait plein de vérifs ça devrait aller. Mais aucun programme n'est exempt de bugs, donc... D'autant que je soupçonne l'interpréteur d'être bogué pour certaines choses, ce matin j'avais encore des problèmes avec une boucle (if...) simple. Je m'en suis sorti en utilisant une fonction voisine (cond ...) mais... enfin bref.

Si l'arborescence de répertoire ne convient pas pour les utilisateur d'Unix, Linux et autres, n'hésitez pas à m'en faire une, que j'intègrerai à l'archive.

Scrpt-fu 3: Configuration.
Pas encore fait mais je peux déjà en dire 2 mots. Ce script permettra de faire certains réglages comme la lumière spéculaire, le Haze, ces lignes qui sont dans le fichier .ssc.

Scrpt-fu 4: Importation.
- On indique une série de tuiles, le script reconstruit la texture mono-bloc. -> Est-ce que vous pensez que c'est utile?
- Au besoin elle en fait juste de plus gros morceaux si la texture finale s'avérerait trop grande pour les possibilités de Gimp. -> Utile?
- Gestion des textures type niveau 12. 'faut que je regarde avant comme ça marche, puisqu'on peut faire 0->1->2->11->12. Comment 'régler' les bords?
Attachments
Virtual-texture-creator-step2.rar
(7.27 KiB) Downloaded 444 times
Export.gif
Export.gif (14.12 KiB) Viewed 13382 times
Create.gif
Create.gif (10.59 KiB) Viewed 13404 times
Virtual-texture-creator-step1.rar
(1.61 KiB) Downloaded 439 times
Last edited by Teto on Thu Mar 26, 2009 11:16 am, edited 5 times in total.
User avatar
Joël
Habitant lunaire
Posts: 57
Joined: Thu Sep 18, 2008 5:09 am

Re: Création d'un script-fu pour les surfaces virtuelles

Post by Joël »

Salut

Ce que tu racontes ici m'intéresse beaucoup. :D
Je suis moi-même en train de finir un tutoriel sur la fabrication des close-ups, ce qui a un rapport très étroit avec les textures virtuelles.
J'utilise Photoshop et je n'y connais rien en scripts. Si je pouvais utiliser ton expérience pour automatiser certaines tâches, cela me serait bien utile.

Pour en revenir à ton problème et comme tu as dit dans un autre post avoir fait des recherches sur les forums anglais j'ai moins de scrupules à te renvoyer ici :
http://www.lepp.cornell.edu/~seb/celest ... s.html#2.5
C'est à ma connaissance la doc la plus pointue en la matière, tout en restant accessible.

Dans les liens qui sont donnés dans cette page, tu trouveras entre autre le tutoriel de Bob Hegwood pour créer automatiquement une texture virtuelle à partir d'une seule image. Il suffit de suivre les instructions pas à pas mais elle a l'inconvénient d'essayer de transformer Windows en Linux pour fonctionner.

Pour résumer et répondre directement à la question sur la taille des tuiles, celles-ci n'ont pas à faire 512x512 pixels ni même à être carrées (mais c'est plus pratique). Il suffit que chacun de leurs côtés soit une puissance de 2.
On admet que pour une meilleure visualisation la taille déclarée dans le fichier ctx soit la moitié de celle de la tuille réelle.
Cette taille déclarée indique grosso modo à Celestia à partir de quelle taille en pixel la tuile doit être affichée.
Par exemple avec une taille déclarée de 512 pixels pour une taille réelle de 1024px, la tuile commence à apparaître à peu près à la moitié de sa taille et quand elle atteint sa taille réelle à l'écran (donc sa résolution maximale), elle est remplacée par la tuile du niveau supérieur ce qui fait qu'on ne perd pas en définition. :mrgreen:
Dans Celestia, le paramètre BaseSplit du fichier ctx est toujours à zéro pour indiquer qu'il y a deux tuiles au niveau 0.

Mais je me pose quand même une question. Qu'est-ce qui te fait espérer qu'en créant toi-même ta texture virtuelle tes problèmes d'affichage seront résolus ? :lol:

Joël
Teto
Spationaute
Posts: 14
Joined: Wed Mar 11, 2009 7:35 am

Re: Création d'un script-fu pour les surfaces virtuelles

Post by Teto »

Joël wrote: Mais je me pose quand même une question. Qu'est-ce qui te fait espérer qu'en créant toi-même ta texture virtuelle tes problèmes d'affichage seront résolus ? :lol:
Joël
Parce que c'est déjà le cas! :D Si je me mets en "high-res", la texture devient rayé-grise-beurk. Par contre, en "med-res", les surface virtuelles fonctionnent sans problème et je peux ainsi zoomer tant que je veux. Pourquoi ce bug? Sans doute parce que j'utilise une CG ATI avec une carte mère Nvidia. Le logiciel ne doit pas aimer.

Sinon, des news sur le script. Le langage sheme? It 's a shame! :evil:
C'est une bouse. Je vais peut-être changer d'avis après un peu de repos, mais pour le moment c'est une vraie plaie! On utilise plus de parenthèses qu'autre chose, le debugage est pas évident... Et je ne comprends pas certains blocages! Je fais pourtant comme dans le manuel il a dit, mais ça n'empêche pas l'interpréteur de renvoyer des messages d'erreur comme quoi quelque chose ne va pas. ainsi je suis incapable d'utiliser la commande set!, je ne sais pas pourquoi, alors que je suis correctement l'exemple. Est-ce que cela viendrait de la compilation des sources pour PC? Je ne sais pas.
Je tiens à préciser que je connais Java et que je fais à peu près ce que je veux avec. Mais là...

Tout ça pour dire que j'avance un peu mais c'est pas simple (à cause de Scheme). J'ai fini le script-fu pour créer la taille du dessin suivant le 'level' voulu, mais je regarderai les liens donnés par Joël concernant les tailles possibles, peut être que je devrai reprendre à zéro. De plus on peut aller jusqu'au niveau 12, mais avec la tuile standard de 512 on dépasse les limites de Gimp au niveau 9, et au niveau 5 je pompe toutes les ressources à devoir quitter sauvagement! Bref faudra bidouiller, et avec scheme ce ne sera pas une sinécure...
Teto
Spationaute
Posts: 14
Joined: Wed Mar 11, 2009 7:35 am

Re: Création d'un script-fu pour les surfaces virtuelles

Post by Teto »

Bon. :)

Je me suis reposé, et j'ai regardé objectivement ce que j'avais déjà fait. Pour tout dire, je crois que les tutoriels de script-fu pêchés sur le net étaient parfois un peu vieux, et qu'ils m'ont enduits avec de l'erreur car je me demande si l'interpréteur de gimp n'a pas changé au fil des versions...

Concernant les explications sur les surfaces virtuelles (merci pour les liens), j'ai trouvé ça pas mal, mais pas très utile pour pouvoir trancher clairement sur l'utilité de faire des tuiles autres que 512x512. Sauf pour les pôles, où une tuile de largeur n peut être utile pour gagner de la place. Bon. Pour le moment, j'ai décidé de standardiser les tuiles produites par le programme :arrow: 512x512. :mrgreen: Scheme sur gimp est trop délicat pour se lancer dans un truc du genre tuiles 2048x512 aux pôles, et 512x512 pour les autres...

Tiens, petite question au passage: Quand Celestia se charge, est-ce qu'il charge juste les fichiers ctx sans les lire, ou bien il les lit et charge la liste des tuiles dispos :?: Si c'est le cas, alors faire des tuiles de (l x h) 2048x512 ou 1024x512 (par exemple) serait intéressant pour augmenter la vitesse d'initialisation.
Autre question (merci d'y répondre): Est-ce que les 'cloud-map' sont virtualisables, ou bien cela ne peut être qu'une seule texture?

Il est prévu:
- Les images s'écriront automatiquement dans les sous-répertoires au répertoire d'export.
- Les différents fichiers (.ssc, .ctx) se créeront automatiquement.
- Une fois l'export fini, il suffira de prendre le sous-répertoire de tête et d'en faire un zip pour le proposer aux gens, sans autre préparation qu'un read-me.
- Comme on aura sauvegardé dans le bon répertoire de Celestia, les textures seront utilisables immédiatement.

À bientôt,
François.
Last edited by Teto on Wed Mar 25, 2009 8:43 am, edited 1 time in total.
Teto
Spationaute
Posts: 14
Joined: Wed Mar 11, 2009 7:35 am

Re: Création d'un script-fu pour les surfaces virtuelles

Post by Teto »

Petites news car je suis en verve en ce moment, ça risque de ne pas durer.
Scheme sur Gimp c'est vraiment galère. Son problème (tout comme scheme en général) c'est qu'il est extrêmement sensible (faut être ultra-rigoureux en écrivant le code) mais en même temps, beaucoup d'erreurs ne débouchent pas sur une fenêtre d'avertissement (qui en plus est souvent lapidaire et vague). Résultat c'est galère pour débugger! :evil: Vraiment pas une sinécure.
Et donc j'avance lentement. Mais j'avance: j'ai mis au point la création de l'image (suivant le niveau souhaité) et là je viens de déterminer si le programme doit redimensionner le dessin s'il n'est pas aux normes, il peut également déterminer automatiquement le niveau optimal en fonction de la taille. Je sais que je vais galérer pour redimensionner les différents calques pour correspondre aux dimensions générales du dessin, mais je regarderai ça demain. Et la création des fichiers .ssc et .ctx ne devrait pas trop poser de problème.

Voilà. A+!
Teto. :P

PS: je viens de découvrir que mes tuile de la Terre en HD niveau 5 sont de 1024x1024. Grr... Une fois au point, je devrai inclure la possibilité d'utiliser des tuiles autres que 512x512. C'est pas pour demain...
User avatar
Joël
Habitant lunaire
Posts: 57
Joined: Thu Sep 18, 2008 5:09 am

Re: Création d'un script-fu pour les surfaces virtuelles

Post by Joël »

Salut

D'abord, tu peux laisser tomber les fichiers joints ! Cest comme pour les avatars, il semble que ça ne fonctionne pas dans ce forum. :evil:
C'est bien dommage car avec un petit dessin j'aurais peut-être compris ce que tu as l'intention de faire.
J'avoue que ce n'est pas très clair pour moi. :oops:

Il y a peut-être des moyens plus simples et plus rapides pour faire tes textures virtuelles que de passer par des scripts du Gimp. (Mais je ne connais pas The Gimp et je ne peux pas juger).

Généralement pour ce genre de manipulations on se tourne plutôt vers des utilitaires genre Imagemagick.
Quelle texture veux-tu "virtualiser" ?
Et de quelle taille ?

Joël
Teto
Spationaute
Posts: 14
Joined: Wed Mar 11, 2009 7:35 am

Re: Création d'un script-fu pour les surfaces virtuelles

Post by Teto »

Joël wrote:Salut

D'abord, tu peux laisser tomber les fichiers joints ! Cest comme pour les avatars, il semble que ça ne fonctionne pas dans ce forum. :evil:
Je viens de regarder, effectivement, on a droit au message désagréable du webmaster, suite à des problèmes de hacking stupide.
Joël wrote:J'avoue que ce n'est pas très clair pour moi. :oops:
Bon, je vais essayer d'être plus clair :lol: Mon problème à moi perso myself est que je n'arrive pas à voir les textures de planète en mode Hi-res, mais que les textures virtuelles marchent très bien. En Med-res je ne peux pas voir les textures 16K ou plus, le mode ne les accepte pas. D'où l'idée de transformer les textures de ce type en textures virtuelles.
Seulement, faire ça à la main c'est l'enfer. Faut faire tous les niveaux jusqu'à celui correspondant à la texture de départ. Je l'avais fait pour un satellite je sais plus lequel => Résultat 2H de boulot. Et pour faire juste une texture virtuelle niveau 2!
L'idée m'est alors venue de faire un programme permettant de faire ça en auto, puisqu'après une recherche sur le net j'ai rien trouvé pour PC (sans parler des liens qui ne fonctionnent plus). Et the Gimp s'est vite imposé: Certes on peut faire des choses avec Imagemagick, mais c'est lourd et je crois qu'on peut agir sur les images, mais pas écrire des fichiers type .ssc et .ctx. Script-fu, oui.
Et puis je voulais apprendre ce langage, et faire par Imagemagik, c'était encore se coltiner un langage de plus, j'avais pas envie. Enfin, la vitesse d'éxécution est voisine, à ce que j'ai pu juger.
Joël wrote:Il y a peut-être des moyens plus simples et plus rapides pour faire tes textures virtuelles que de passer par des scripts du Gimp. (Mais je ne connais pas The Gimp et je ne peux pas juger).
Justement :) si tu connaissais tu saurais que ce n'est pas plus long. Seule différence, faut juste ouvrir the Gimp. Mais c'est utile pour juger la valeur d'une texture avant sa transformation en texture virtuelle.
Joël wrote:Quelle texture veux-tu "virtualiser" ?
Et de quelle taille ?
Les textures mono-bloc, donc, mais aussi celles faites maison. Tu es un créateur de mondes, et tu veux mettre des créations, plutôt détaillées, dans Celestia. À partir de ta texture (peu importe la taille, mon script le met aux normes automatiquement, je viens de tester, ça fonctionne) qui peut être de surface, mais aussi les nuages, la vision de nuit et le normal map, tu crées automatiquement les textures virtuelles correspondantes, prêtes à être visualisées...

Voilà! Est-ce que j'ai éclairé ta lanterne?
Teto.
Teto
Spationaute
Posts: 14
Joined: Wed Mar 11, 2009 7:35 am

Re: Création d'un script-fu pour les surfaces virtuelles

Post by Teto »

Joël ainsi que ceux qui sont intéressés par le sujet, :)

Comme vous pouvez le voir notre webmaster vénéré à corrigé certaines choses et les fichiers joints ainsi que les avatars sont maintenant visibles. :o

Sinon concernant mon script-fu, j'ai dû revoir fortement mes prétentions à la baisse: :x
- J'y ai passé la journée, mais je n'ai pas trouvé une seule info sur une commande éventuelle pour créer par script une répertoire quelconque. :evil:
- Pire, certaines fonctions de base ont été purement et simplement désactivées, ainsi certaines instructions de manipulation de chaînes bien utiles ne fonctionnent pas, ce qui limite grandement les possibilités.

Néanmoins:
- Pour contourner ces problèmes, j'ai simplement fait une arborescence "vide" avec toutes les possibilités (surface, normal map, nuit, de 0 à 12) et des fichiers .ssc et .clx génériques.
- Les différentes tuiles se créeront tout seuls et iront dans les répertoires correspondants (ça, ça marche :P ).
- Il suffira ensuite de modifier les fichiers avec les noms qui vont bien (en gros, le nom de la planète et les types de textures présentes). J'espère encore pouvoir en faire une routine automatique, mais maintenant j'ai des doutes... :?
- Cette arborescence et les programmes seront bien sûr dispos (arborescence PC dans un premier temps).

Teto.
Teto
Spationaute
Posts: 14
Joined: Wed Mar 11, 2009 7:35 am

Re: Création d'un script-fu pour les surfaces virtuelles

Post by Teto »

J'ai bientôt fini. :)
J'essaie juste de manipuler les fichiers génériques (.ssc, .clx) de mon arborescence, pour configurer automatiquement après génération des tuiles, mais le second programme est presque prêt.

Ensuite je compte faire l'inverse: partir d'une série de tuiles pour en faire une texture unique. Seul problème, à priori je ne pourrai pas lire les .dds, mais bon. :?

Teto.
Last edited by Teto on Wed Mar 25, 2009 8:43 am, edited 1 time in total.
Teto
Spationaute
Posts: 14
Joined: Wed Mar 11, 2009 7:35 am

Re: Création d'un script-fu pour les surfaces virtuelles

Post by Teto »

Voila! :D Je viens de terminer mes 2 premiers scripts-fu pour Celestia.

J'en ai bavé :evil: Je suppose que c'est toujours comme ça quand on apprend un langage, mais quand même. Mais il vrai que script-fu est un truc un peu bâtard, pas vraiment scheme, pas complètement original non plus... Bref. :?
Surtout il ne permet pas à priori de créer des répertoires, rien trouvé sur le net, et ça limite un peu. Le programme ne peut pas tout créer de simplement une image, dommage. Mais c'est pas trop grave, je mettrai à dispo une arborescence vide comme ça l'affaire sera réglée.

À bientôt pour le script 2, le plus intéressant je pense. :)

Teto.
Teto
Spationaute
Posts: 14
Joined: Wed Mar 11, 2009 7:35 am

Re: Création d'un script-fu pour les surfaces virtuelles

Post by Teto »

Le second script est en ligne! :D

Teto.
Teto
Spationaute
Posts: 14
Joined: Wed Mar 11, 2009 7:35 am

Re: Création d'un script-fu pour les surfaces virtuelles

Post by Teto »

Je viens d'ajouter un commentaire sur le post des fichiers, pour dire qu'il faut supprimer à la main (hélas) les répertoires vides après génération des tuiles.

Tiens, pendant que j'y suis, je vous rajoute le bug que j'ai quand je me mets en qualité 'hi-res' et que je regarde la terre... :mrgreen: D'où mon script.

Teto.
Attachments
Bug.jpg
Bug.jpg (117.8 KiB) Viewed 13369 times
Post Reply