Une des particularités du python c'est de pouvoir être compilé en bibliothèques séparées que l'on peut ensuite utiliser comme n'importe quelle bibliothèque dynamique avec l'avantage, non négligeable, d'une accélération considérable de l'éxécution du code puisqu'il n'y a plus d'interprétion ligne après ligne. Autre avantage: le code n'est plus lisible. Il est alors possible de distribuer ses bibliothèques sans risque de voir piller les algorithmes originaux que l'on aurait pu créer pour l'occasion. Ces bibliothèques doivent se trouver dans le même répertoire que le logiciel appelant. Elles ont le format .PYC. Une alternative consiste à créer en langage C des modules qui augmentent les capacités du python original. C'est le cas de la DLL Subsurf que l'on doit à Daniel Dunbar. Le principe de la subdivision de surface est assez proche des S-mesh de Blender. On ne s'attache pas ici à expliquer ce qui se passe au niveau mathématique dans l'opération de division, et si une information supplémentaire est nécessaire on pourra la trouver dans : CATMULL, E., AND CLARK, J. Recursively
generated B-spline surfaces on arbitrary topological
La différence: le résultat
est un nouveau mesh constitué de facettes dont les sommets sont
calculés par rapport à la forme de contrôle originale.
Et surtout, la forme est beaucoup plus douce parce que la répartition
des points est adaptée à l'angle que forment les faces entre
elles.
L'archive de subsurf.dll contient
un fichier d'exemple: demo.blend.
et un script python sur la droite: En fait, dans le script python, ces deux seules lignes ont de l'importance. En premier lieu, parce que c'est grâce à elles que l'on définit le nom du mesh qui doit être utilisé comme forme de contrôle qui est, d'ailleurs, tout simplement appelé: "Control" (attention, rappel, le python fait la différence entre les casses, donc "control" n'est pas "Control"). On remarquera que c'est surtout le nom du mesh qui est important, le nom de l'objet est assez secondaire. Une analyse du code permet de voir qu'un seul objet peut être sélectionné à la fois et qu'il y a évacuation de tous les autres objets, on ne garde que le premier de la liste. On note que le dictionnaire "data_dict" passe deux valeurs: "flip" et "levels" qui sont rangés à l'article "name" qui contient la valeur "Control". L'ordre de passage correspond à l'ordre de rangement, donc "flip" est le premier et "levels" le second. Rien ne vaut la méthode expérimentale: que se passe-t'il si on change la valeur de "flip": Il faut réactualiser le script par ALT-p et la symétrie disparait: Seule la valeur 0 change quelque chose sur le choix "flip". Par contre on peut augmenter autant qu'on le veut la valeur "levels". Un test avec 2, toujours en réactualisant l'exécution du script par ALT-p, permet de voir que le division est beaucoup plus fine:
Dernière remarque: toute modification du mesh de contrôle entraine une modifiction du mesh divisé.
Détail important: les matériaux du modèle de contrôle sont passés au modèle divisé. Mais, dans la mesure où il y a plus de facettes, les textures plaquées perdrent leur positionnement. En ce qui concerne l'interface graphique proposée par The IceMan, il faut fournir un nom correct au bouton "Control Mesh:"
.Dans le fichier exemple qui accompagne le script il ne faut surtout pas se tromper dans la casse des lettres.
Par contre, le fichier n'est plus lié à la frame courante comme dans l'exemple de Daniel Dunbar. Après avoir indiqué le nom, il faudra cliquer "Draw" pour obtenir l'actualisation de la forme. Le script marche parfaitement avec blender
1.8x, mais pose quelques difficultés avec GameBlender 2.0x, surtout
à cause des boutons "toggle" qui ne restent pas enclanchés.
La parade : appuyer sur le bouton et glisser vers l'extérieur sans
relâcher la pression.
Les questions concernant cette page
peuvent être posées sur :
|