VRML en a rêvé, Blender le fait

Petite scène concoctée sans grand soin… mais entamée en 1998.

Je doute que la superbe scène que vous êtes en train de contempler vous fasse autant d’effet qu’à moi, mais elle commence enfin à ressembler à ce que j’espérais obtenir quand j’ai commencé à fantasmer et travailler sur elle, aux environs de 1998, autrement dit il y a… la bagatelle de vingt-quatre ans.

A l’époque, la technologie à la mode en matière de 3D était le langage VRML, VRML comme « Virtual Reality Modeling Language ». Ca n’était rien de moins qu’un standard international (je n’exagère pas du tout, il avait bel et bien fait l’objet de réunions de l’International Standard Organization, la fameuse ISO, des deux côtés de l’Atlantique voire du Pacifique) — et ce supposé nouveau standard, VRML, ne cachait pas son ambition d’être un jour pour la 3D ce que HTML commençait alors à peine à devenir pour la navigation sur Internet.

Aujourd’hui, ce que je vous montre vous fait probablement l’effet du summum de la ringardise, mais à l’époque ça pouvait au contraire passer pour quelque chose de futuriste et de très en avance sur son temps — probablement trop, même, car le trop ambitieux VRML a hélas fini assez vite en eau de boudin.

Pour concocter une horreur comme celle que je vous montre, ce n’était même pas la peine d’essayer de travailler avec une machine de bureau (même si c’est quand même ce que j’ai fait à l’époque, et en plus nous étions sans doute quelques dizaines de milliers de mordus à avoir la même ambition pharaonique au même moment). Non, pour arriver à gérer une telle complexité, même si aujourd’hui elle vous paraît sans doute bien modeste, il fallait faire les frais d’une station de travail Silicon Graphics qui valait trois à cinq fois plus cher que nos ordinateurs de bureau, et sur laquelle on devait en plus faire tourner un logiciel propriétaire du type 3D Studio — ancêtre de l’actuel Autocad 3DS Max–, lequel coûtait pour sa part environ trois mois de salaire rien qu’à l’achat, c’est-à-dire sans parler du coût des mises à jour annuelles et nonobstant obligatoires.

Eh bien, comme vous le voyez, en 2022 on parvient — en tout cas, moi, je parviens — à faire, sinon aussi bien, du moins pas vraiment plus mal, sur une machine assez banale et même déjà un peu antique. J’ai fait ce que vous êtes en train de voir sur mon bête ordinateur de bureau — lequel était certes à la pointe du progrès quand je l’ai fait monter, mais c’était il y a déjà cinq ans, et en plus à l’époque j’avais été trop fauché ou trop radin pour l’équiper d’une carte graphique, de sorte qu’il n’en dispose toujours pas: tout ce que vous voyez a donc été calculé par les quatre petits coeurs d’un processeur unique. Et au lieu de faire ça avec un soft privateur qui vaut la peau des fesses, j’ai utilisé un logiciel libre et donc obtenu sans bourse délier. Vous l’aviez deviné, il s’agit bien sûr de Blender — en version 2.93 LTS, et avec le moteur de rendu Eevee vu que je n’ai pas de carte graphique pour faire tourner Cycles.

Vous avez donc sous les yeux, grâce à Blender et à mon petit talent acquis en une grosse vingtaine d’années de bidouille, à peu près ce sur quoi les archi-geeks fantasmaient vers 1998: une scène 3D d’une cinquantaine de mètres de large, avec tout plein de perspective, un arrière-plan, des textures, des détails à l’échelle du centimètre voire un peu moins et, pardonnez-moi d’avoir l’immodestie de m’en vanter, des mouvements de caméra réguliers quoique occasionnellement complexes.

De la 3D maillée, texturée, animée. C’est ce que j’espérais faire en 1998, et ça reste la limite de mes ambitions en l’an de grâce 2022. Si vous savez faire mieux, je vous en félicite, mais si vous ne savez même pas en faire autant, alors c’est peut-être le signe que je n’ai pas bossé tout à fait pour rien au cours des vingt dernières années.

Masques africains, maquillages de clown et petits mickeys

Toujours résolu à animer des petits mickeys et en particulier leurs expressions faciales, j’ai déjà essayé d’appliquer une texture sur un visage tout plat, mais ça restait peu crédible. Au prix de pas mal de travail de maillage et en prétendant s’inspirer de masques africains, il n’est pas trop difficile d’ajouter au visage un nez et des arcades sourcilières, dont on augmente la lisibilité avec un maquillage de clown, ce qui suffit à nous ramener dans la troisième dimension, après quoi on peut se limiter à modifier la texture en appliquant grossièrement des traits noirs sur un fond blanc. Alors, on peut vraiment travailler très vite, tout spécialement si on a recours à la technique des calques, ce que je fais avec Krita. La précision des traits n’est pas essentielle, on peut considérer que les imperfections ajoutent un petit côté artisanal bienvenu dans des images 3D par nature très géométriques.

Si je commence à assez bien maîtriser cette technique, hélas ça ne corrige ni mon daltonisme ni mon goût de chiottes… mais comme dit la Carmen de Bizet, je daigne m’en contenter.

Motifs végétaux et personnages chez Sweet Home 3D

Blender n’est pas seul au monde, il existe beaucoup d’autres logiciels de 3D nettement moins puissants mais aussi beaucoup plus faciles à prendre en main, comme par exemple celui que je vais évoquer ici, « Sweet Home 3D ».

Pour être honnête, je ne l’ai strictement jamais manipulé ni même installé, j’ai seulement vu quelques vidéos de démonstration et visité leur site web (http://www.sweethome3d.com/) pour me faire une idée — a priori, ça n’est pas assez polyvalent pour ce que je souhaite faire, mais ça a l’air de pouvoir être un outil pédagogique intéressant pour permettre à des élèves du secondaire de se familiariser avec la 3D en élaborant des scènes représentant des intérieurs de maisons, avec des portes, des fenêtres, du plancher, du carrelage, des meubles, des escaliers, des bibelots.

C’est sans doute très bien pour des débutants en milieu scolaire — détail non dépourvu d’intérêt, c’est un logiciel libre — mais moi, je m’en fiche quand même un peu. Cela dit, le projet a un aspect très sympathique: son abondante bibliothèque d’objets tout prêts et libres de droits, qu’on peut intégrer bien évidemment dans Sweet Home 3D… mais aussi dans Blender si on se donne un peu de mal. Bon, un peu plus qu’un peu. Si on se donne vraiment du mal, en fait.

Ce sont des objets généralement réalistes (ils n’ont pas l’aspect « cartoon » que l’on trouve très souvent dans les collections de bazars libres de droits, et du coup il est possible d’en mettre plusieurs dans une même scène sans que ça ait un aspect trop incongru), et ils sont fournis dans un format relativement courant, celui d’Alias Wavefront.

Il s’agit d’un format Ascii que j’ai longtemps trouvé très inutilement compliqué (au lieu de se contenter comme tout le monde de faire des inventaires de coordonnées cartésiennes, il impose de calculer et d’inscrire ce qu’on appelle des normales, c’est-à-dire, si j’ai bien compris, une façon de noter l’orientation d’un plan 2D dans un espace 3D, ce qui par la suite peut simplifier les calculs de rendu; c’est beaucoup trop complexe pour que j’y comprenne quelque chose, mais ça n’est pas si difficile que ça à calculer quand on se fait aider par Wikipédia… enfin, bref, j’y suis parvenu mais surtout ne me demandez pas de vous expliquer comment).

Bref, ce format Alias Wavefront utilisé par la bibliothèque d’objets libres de droits de Sweet Home 3D n’est vraiment pas inutilisable quand on sait écrire des moulinettes de conversion (ça tombe bien, c’est ma spécialité), et par ailleurs c’est un des rarissimes formats que Blender 2.8 gère assez correctement en import comme en export — sous réserve toutefois qu’on ait appris comment remettre en place les textures quand elles ont disparu pour une raison X ou Y au cours du processus d’importation ou des manipulations subséquentes — si vous connaissez une fonction standard de Blender qui permet de remettre en place les textures sans y passer cinq heures, indiquez-la moi, mais à ma connaissance cette manipulation absolument indispensable avec les objets texturés n’est guère réalisable qu’à l’aide d’un petit script Python que je ne suis parvenu à écrire que très récemment, misère et putréfaction… mais maintenant que je l’ai écrit ça m’a bien débloqué, et en particulier ça m’a permis de récupérer dans Blender la jolie collection d’objets texturés que je me propose de vous montrer maintenant.

Dans la bibliothèque de Sweet Home 3D, on trouve très principalement des meubles et des éléments d’architecture, mais moi j’aime nettement mieux les concocter moi-même que de ne rien pouvoir changer à ceux déjà élaborés par les copains avec leur goût de chiottes, alors que le seul goût de chiottes que je supporte, c’est le mien. Donc, je n’ai pas du tout touché aux meubles ni aux motifs architecturaux, qu’on peut élaborer avec des calculs et des listings comme j’aime faire, je me suis au contraire focalisé sur les bazars qu’on ne peut guère concocter qu’à la mimine avec un talent graphique dont le Bon Dieu ne m’a pas pourvu et qui donnent quand même un aspect plus vivant à des scènes presque exclusivement consacrées à la gloire de la géométrie et du théorème de Pythagore comme je sais faire.

Je publie donc dans la vidéo ci-dessus ma collection de motifs végétaux et de personnages, récupérés depuis Sweet Home 3D.

Mises à jour, je vous hais

Mais put@#% de bor£$µ, ils testent leur soft avant de faire des mises à jour, chez Blender?

Gestion des ombres entre Blender 2.80 et 2.81

En haut, c’est un rendu Eevee de la version 2.80; médiocre, mais acceptable. En bas, c’est un rendu Eevee de la version 2.81 (que je croyais, bien naïvement, a priori plus déboguée que la précédente). Visez-moi ce friselis ridicule au bord du toit, et surtout constatez que cette ombre friselée n’apparaît même pas là où elle devrait être, mais environ 15 cm trop bas…

Même merdouille d’affichage sous la caisse du camion: non seulement l’ombre est friselée, mais en plus elle est trop bas. Je les boufferais!

Ils sont au courant, les mecs de Blender, qu’il y a des gens qui essayent de produire des images avec leur soft? Grrr!

Vingt smileys en seulement quinze ans

Ca m’aura seulement demandé une quinzaine d’années, mais je commence enfin à pouvoir donner vie à des petits Mickeys dans Blender.

Ce qui me débloque enfin, c’est d’avoir surmonté deux obstacles: primo, réussir à faire bouffer à Blender des objets tout texturés (parce que je persiste à penser que son éditeur UV est une horreur); deuxio, avoir enfin compris comment paramétrer un rendu d’images avec un petit script Python.

Quinze ans à se prendre la tête avec l’immonde et imbitable interface de Blender… Est-ce que ça en valait vraiment la peine? Je n’en jurerais pas… mais enfin je commence enfin à m’amuser, et je ne l’ai pas volé.

De la scie sauteuse dans Blender

Je ne sais pas si vous êtes comme moi assez vieux pour qu’on vous ait offert ce genre de joujoux quand vous étiez petits:

Joujoux fabriqués à la scie sauteuse

Mais bon, moi, j’ai eu ce genre de jouets, et depuis que je suis tout petit l’une de mes ambitions est d’arriver un jour à les fabriquer moi-même. Drôle d’idée voire affligeante perversion témoignant d’un effarant manque de maturité… mais c’est comme ça, j’ai toujours eu envie de fabriquer mes propres joujoux. Eh bien, figurez-vous qu’à cinquante-neuf ans révolus et grâce à plein plein de logiciels libres (LibreCAD, Inkscape, Gimp, Krita, Blender et surtout Python)… eh bien j’y arrive enfin, et j’en suis si fiérot que je crois nécessaire de vous en faire profiter:

Bon, je ne suis pas sûr que vous allez comprendre grand-chose à la vidéo ci-dessus, mais c’est quand même censé être une vidéo explicative. 😀 Ayez la bonté de ne pas trop m’en vouloir si c’est un peu cryptique, car c’est lié à mon côté surdoué (qui ne se manifeste pas souvent, oh que non): parfois, quand je suis touché par ma muse informatique, je fais des trucs tellement compliqués que deux jours après les avoir abandonnés je n’ai plus la moindre idée de comment diable j’avais pu m’y prendre pour y arriver, et c’est quand même énervant. Alors, il faut absolument que je prenne des notes avant qu’il soit trop tard, et cette vidéo est une forme de prise de notes (les Post-it du troisième millénaire sont devenus un peu compliqués, c’est l’époque qui veut ça).

Tous vos sarcasmes sont bienvenus, ils glisseront sur moi comme l’eau sur la peau d’un canard, intimement convaincu que je suis que c’est seulement la jalousie qui vous fera parler: z’êtes même pas capables d’en faire autant, bande de blancs-becs.

Blender 2.8, triomphe et désastre

J’ai mis mon nez dans Blender 2.8, et on ne m’avait pas menti: par bien des côtés, c’est carrément un autre logiciel que Blender 2.79.

L’interface (qui, il faut bien l’admettre, a toujours été une abomination) a été revue sur quantité d’aspects, et généralement de façon pertinente: l’usine à gaz bordélique est devenue une usine à gaz bien rangée… mais ça ne change rien au fait que tout le savoir-faire que vous aviez pu développer pour vous orienter dans le bordel devient du jour au lendemain obsolète.

OK, c’est pour notre bien… mais il faut quand même être conscient que ça a une conséquence épouvantable: TOUS les tutoriels disponibles sur le web et YouTube deviennent aux trois quarts obsolètes eux aussi, et donc chaque fois que vous vous direz « oh, merde, je vais pas y passer six mois, en posant poliment ma question à Google je vais bien finir par savoir où est caché ce foutu réglage qu’il faut absolument que je modifie »… eh bien, faites comme à l’entrée de l’Enfer de Dante: abandonnez toute espérance: si, vous allez bel et bien devoir vous retaper au minimum minimorum des journées entières d’apprentissage, et pour certains réglages, ces journées entières seront des semaines entières, et pour certains autres ces semaines entières seront des mois entiers; au terme desquels, n’en doutez pas, Blender accouchera d’une version 2.9, ou 3.0… qui vous forcera une fois de plus à passer des journées, des semaines et des mois à retrouver vos repères.

En plus, il n’y a pas que l’interface qui a été revue: les moteurs de rendu aussi, et de fond en comble. Très bon côté des choses: les bugs d’affichage insupportables que j’avais dénoncés ici ont pour la plupart disparu. Très mauvais côté des choses: tous les réglages minutieux que vous aviez pu mettre au point jusqu’à la version 2.79… sont inadaptés à la version 2.8, et vous allez devoir retravailler TOUS vos éclairages. Oui, TOUS — sauf à continuer de travailler avec la version 2.79 jusqu’à ce qu’elle plante parce qu’elle ne sera plus maintenue; désastre sans doute lointain, mais inéluctable.

Les nouveaux moteurs de rendu sont beaucoup, beaucoup, beaucoup mieux que les précédents. Sur certaines vidéos de démonstration, c’est absolument bluffant. Mais il y a un mais… Des tas d’effets « moches mais lisibles » (en particulier sur les reflets et transparences) que vous aviez pu identifier par le passé… ont été remplacés par d’autres beaucoup moins moches mais 1) vous devrez vous retaper des tonnes de réglages; 2) ce sera beaucoup beaucoup plus beau, mais ça demandera peut-être, sur des scènes simples, des temps de réponse sensiblement moins enthousiasmants que par le passé. « Quand c’est mieux, ça coûte plus cher », disait ma grand-mère.

Et puis il y a des petites cochonneries inacceptables: les textures mises en place avec la version 2.79 ne sont plus en place avec la version 2.8, il faut les remettre (pourquoi? mystère); les scripts Python pouvaient être découpés en plusieurs modules, ils doivent désormais être d’un seul tenant; les convertisseurs X3D sont beaucoup moins élaborés qu’avant (ils paument les couleurs et les textures), et « c’est pas un bug, it’s a feature« : c’est complètement normal, ce n’était pas développé par l’équipe de Blender, c’était des contributions de bénévoles, donc à vous de leur demander de recommencer à bénévoler pour adapter à 2.8 le boulot qu’ils avaient fait pour les versions antérieures. J’ai tendance à trouver cette façon de faire un peu cavalière…

Le progrès consiste à remplacer ce qui ne marchait pas vraiment mal par ce qui ne marche pas vraiment bien… Et Blender progresse comme ça. On aime, on n’aime pas, mais faut faire avec — et dans x mois, quand vous devrez vous adapter à la version 2.9 ou à la 3.0, vous verrez que vous la regretterez, cette version 2.8 contre laquelle vous aviez pesté quand elle vous a forcé à abandonner la 2.79…

« If you can meet with Triumph and Disaster and treat those two impostors just the same », comme disait Kipling… alors vous aimerez Blender 2.8. Dans le cas contraire, je crois que les développeurs de Blender ne se donneront même pas la peine de vous sourire d’un air désolé. Blender, ça se mérite, voilà, et si t’es pas content, ça se mérite quand même.

Blender a un rendu nul, mais il dépote

Bon, qui aime bien châtie bien: j’ai déjà consacré assez d’énergie à dire du mal du moteur de rendu de Blender pour concéder qu’il a pour lui un argument massue: l’extrême brièveté de ses temps de réponse. Quand j’avais produit avec POV-Ray l’animation que vous pouvez voir ci-dessus, ça m’avait pris sept heures, avec dix fois moins de pixels, donc pour une qualité similaire à ce que vous voyez il m’aurait fallu environ 70 heures. Eh bien, maintenant que j’ai compris comment manipuler Python dans Blender, je lui ai fait refaire la même quantité d’images dans une meilleure définition. Les cadrages et la fréquence des images sont absolument inchangés: j’ai fait lire et convertir à Blender, grâce à un script Python, les très longues listes de paramétrages qui m’avaient servi pour l’animation POV-Ray, et que j’avais conservées. Soit dit en passant, la possibilité de faire tourner Python dans Blender, et surtout de faire varier sa configuration grâce à des fichiers de paramétrages calculés hors de son interface immondément pas pratique… ça change complètement la vie, et Blender passe immédiatement grâce à cela du statut d’épouvantable usine à gaz à celui de logiciel surpuissant et indispensable.

Bref. Ce nouveau calcul de l’animation m’a pris trois quarts d’heure, c’est-à-dire… environ 90 fois moins de temps que le travail équivalent avec POV-Ray. Honnêtement, même si Blender oblige à être beaucoup plus soigneux pour obtenir des images lisibles, je dois admettre que cela me fait pratiquement renvoyer POV-Ray aux oubliettes, au moins pour les calculs d’animation — POV-Ray reste intéressant pour le calcul d’images fixes très fouillées.

Par ailleurs, Blender permet aussi d’effectuer des prévisualisations de l’animation directement à la vitesse de diffusion du rendu final, et même si c’est avec un rendu très médiocre, c’est bien sûr une bénédiction quand on travaille au brouillon.

Cela dit, il est clair que Blender obtient ces temps de réponse enthousiasmants en rognant très considérablement sur la précision de ses calculs, et cela peut engendrer de vrais problèmes de lisibilité quand des surfaces superposées sont assez proches. Sur la vidéo que vous regardez, vous constaterez probablement des tas de petites saletés dans l’affichage du quadrillage, et notamment à ses intersections: en fait, quand plusieurs surfaces sont définies à peu près au même endroit (le quadrillage est très proche du sol, et là où les lignes se croisent, elles sont placées exactement au même niveau), alors Blender a tendance à penser qu’une surface projette des ombres sur l’autre, mais surtout, et c’est beaucoup plus grave, il lui arrive d’afficher l’ombre par-dessus la surface qui est censée lui donner naissance! Dans certains cas de figure, cela rend vraiment l’image immondément illisible, et cela force donc ou à renoncer à certains cadrages, ou à devoir considérablement retravailler les objets de la scène pour éliminer de telles superpositions.

Du Python dans Blender, c’est possible

Il y a des années que je cherchais un tutoriel intelligible sur l’usage de Python dans Blender pour l’automatisation du calcul d’une animation… mais je crains qu’il s’agisse de l’un de ces secrets qui ne peuvent être transmis que de bouche de druide à oreille de druide, car tout ce que j’ai trouvé à ce sujet m’a toujours paru complètement imbitable. Un petit camarade (dont voici le site) a fini par me fournir un fichier d’exemple et surtout m’expliquer comment on le faisait tourner, et bon, avec quelques années de Python et de Blender dans les pattes, il m’apparaît qu’en effet il n’est pas du tout impossible d’en tirer quelque chose, et la vidéo david-lynchesque qui chapeaute ce post en est une proof of concept.

Dès l’instant où j’ai le sentiment de dominer ce savoir ésotérique, je suis saisi de la noble aspiration altruiste de concocter le tutoriel simple sur la question que j’ai moi-même désespérément cherché pendant des années… mais vous savez quoi? Je crains fort que la raison pour laquelle ce tutoriel simple n’existe pas, c’est qu’en fait la chose… n’est pas simple.

Tout simplement… c’est pas simple. Du moins, ça n’est pas simple tant qu’on n’a pas encore compris, non pas seulement la chose en elle-même, mais des tonnes de savoirs indispensables en amont pour avoir ne serait-ce que l’espoir d’y arriver. C’est une des difficultés de l’informatique: si le seul moyen de comprendre un tutoriel, c’est de savoir déjà à peu près tout ce qu’il est censé vous expliquer… ben c’est raté, et tous les tutoriels que j’ai cherché à comprendre sur la question étaient ratés. Je crains fort que si j’en concocte un moi-même ça ne soit pas mieux.

Je vais quand même essayer de concocter quelque chose, mais Dieu seul sait combien de mois ça pourrait me prendre.