issue156:python
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
issue156:python [2020/04/28 07:27] – d52fr | issue156:python [2020/04/29 14:46] (Version actuelle) – andre_domenech | ||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
If you aren't aware of Blender, I'll give you a quick introduction as to what it is, what it does, and how to do something simple, before we get into the programming aspects. I will say from the start, I am just learning how to do things with Blender from Python (and I'm not really that good with Blender by itself), so bear with me.** | If you aren't aware of Blender, I'll give you a quick introduction as to what it is, what it does, and how to do something simple, before we get into the programming aspects. I will say from the start, I am just learning how to do things with Blender from Python (and I'm not really that good with Blender by itself), so bear with me.** | ||
- | Comme je subis un confinement | + | Alors que je m' |
- | Si vous ne connaissez pas Blender, je vous présenterai succinctement ce qu'il en est, à quoi il sert, et comment faire quelque chose de simple, avant de rentrer dans les aspects de programmation. Pour commencer, je dirai que j' | + | Si vous ne connaissez pas Blender, je vous présenterai succinctement ce dont il s'agit, à quoi il sert, et comment faire quelque chose de simple, avant de rentrer dans les aspects de programmation. Pour commencer, je dirai que j' |
**From their website (blender.org), | **From their website (blender.org), | ||
Ligne 16: | Ligne 16: | ||
https:// | https:// | ||
- | D' | + | D' |
- | Je suis sûr que vous avez déjà entendu | + | Je suis sûr que vous avez déjà entendu |
https:// | https:// | ||
- | Blender tourne sur à peu près toutes les plateformes. La dernière version est la 2.8.2a, et vous pouvez la télécharger sur https:// | + | Blender tourne sur à peu près toutes les plateformes. La dernière version est la 2.8.2a et vous pouvez la télécharger sur https:// |
**One other thing, before we get started. Blender has always gone through many changes, and the tutorials out there don't often catch up. In fact, many of the tutorials (and many books) are written and published based on a preview or pre-release version that many times is changed multiple times before the actual version release. A good example is when a tutorial (for Blender 2.8.x) refers to changing things in preferences by accessing the File | User Preferences menu. That no longer exists. It's actually located under Edit | Preferences. I, at this point, don't have a good place to point you to in order to find all the changes like this. Many API calls were changed as well, so you should keep the API documentation close at hand when attempting to learn from a tutorial or book on the subject. The Blender 2.8.2a API reference is located at https:// | **One other thing, before we get started. Blender has always gone through many changes, and the tutorials out there don't often catch up. In fact, many of the tutorials (and many books) are written and published based on a preview or pre-release version that many times is changed multiple times before the actual version release. A good example is when a tutorial (for Blender 2.8.x) refers to changing things in preferences by accessing the File | User Preferences menu. That no longer exists. It's actually located under Edit | Preferences. I, at this point, don't have a good place to point you to in order to find all the changes like this. Many API calls were changed as well, so you should keep the API documentation close at hand when attempting to learn from a tutorial or book on the subject. The Blender 2.8.2a API reference is located at https:// | ||
https:// | https:// | ||
- | Autre chose, avant de commencer. Blender a toujours fait des modifications et les tutoriels disponibles | + | Autre chose, avant de commencer. Blender a toujours fait des modifications et les tutoriels disponibles sont rarement à jour. En fait, beaucoup de ces tutoriels (et beaucoup d' |
**Now, on with the fun! | **Now, on with the fun! | ||
Ligne 43: | Ligne 43: | ||
Maintenant, amusons-nous ! | Maintenant, amusons-nous ! | ||
- | Téléchargez Blender et extrayez-le dans le dossier convenable puis lancez-le avec une commande dans le terminal : | + | Téléchargez Blender et extrayez-le dans le dossier convenable, puis lancez-le avec une commande dans le terminal : |
$ ./blender | $ ./blender | ||
Ligne 51: | Ligne 51: | ||
C'est le « nouveau projet » par défaut, et il contient trois objets : un cube, une caméra et un éclairage. | C'est le « nouveau projet » par défaut, et il contient trois objets : un cube, une caméra et un éclairage. | ||
- | Je vous dire, maintenant, que Blender N'est PAS quelque chose que vous pouvez apprendre en un jour ou une semaine. Cependant, si vousvoulez | + | Je dois vous dire, tout de suite, que Blender N'est PAS quelque chose que vous pouvez apprendre en un jour ou une semaine. Cependant, si vous voulez |
**I took a screenshot of Blender, opened it into Inkscape, and labeled the camera and light for you (I think the cube is fairly obvious), and showed the three axes for you in order to help you understand the ways things will move. | **I took a screenshot of Blender, opened it into Inkscape, and labeled the camera and light for you (I think the cube is fairly obvious), and showed the three axes for you in order to help you understand the ways things will move. | ||
Ligne 59: | Ligne 59: | ||
See that little circle with an “X” and a dot in the cube? That’s the 3D cursor. This is the origin of all the objects that we put into our blender scene. Even though it doesn’t look like it, it is at the intersection of the Green and Red layout lines, and the origin is in the center of the cube. That means that only the “top” half of the cube is above the imaginary plane which is the grid that is shown on the layout screen.** | See that little circle with an “X” and a dot in the cube? That’s the 3D cursor. This is the origin of all the objects that we put into our blender scene. Even though it doesn’t look like it, it is at the intersection of the Green and Red layout lines, and the origin is in the center of the cube. That means that only the “top” half of the cube is above the imaginary plane which is the grid that is shown on the layout screen.** | ||
- | J'ai pris une copie d' | + | J'ai pris une copie d' |
- | Si vous regardez très PRÉCISÉMENT le cube, qui est notre objet par défaut au démarrage de Blender, vous verrez quelque | + | Si vous regardez très PRÉCISÉMENT le cube, qui est notre objet par défaut au démarrage de Blender, vous verrez quelque |
- | Voyez-vous le petit cercle avec un « X » et un point dans le cube ? C'est le curseur 3D. C'est l' | + | Voyez-vous le petit cercle avec un « X » et un point dans le cube ? C'est le curseur 3D. C'est l' |
**Let’s do some coding... | **Let’s do some coding... | ||
Ligne 74: | Ligne 74: | ||
LARGE DISCLAIMER: While I've been a user off and on of Blender for many years and a Python programmer for almost 15 years, until I started working on this month' | LARGE DISCLAIMER: While I've been a user off and on of Blender for many years and a Python programmer for almost 15 years, until I started working on this month' | ||
+ | |||
+ | Effectuons un peu de codage | ||
+ | |||
+ | Sur votre écran, passez sur l' | ||
+ | |||
+ | L' | ||
+ | |||
+ | Normalement, | ||
+ | |||
+ | GRAND AVERTISSEMENT : Bien que je sois un utilisateur intermittent de Blender depuis des années et un programmeur en Python depuis presque 15 ans, avant que je commence à travailler sur cet article, je n' | ||
**We’ll start our first program. I found a few small programs for Blender at: | **We’ll start our first program. I found a few small programs for Blender at: | ||
Ligne 85: | Ligne 95: | ||
Of course, we need to import the Blender API library. Next, we’ll create a function (below) that will delete everything in the default scene, so we can put what we want where we want it.** | Of course, we need to import the Blender API library. Next, we’ll create a function (below) that will delete everything in the default scene, so we can put what we want where we want it.** | ||
+ | |||
+ | Nous commencerons notre premier programme. J'ai trouvé quelques petits programmes pour Blender sur : https:// | ||
+ | |||
+ | Cependant, du fait du changement dans les API depuis que ça a été écrit, quand j'ai essayé de les faire tourner, il a refusé ; aussi, je l'ai transformé en une version plus simple. | ||
+ | |||
+ | Utilisez Texte > Nouveau pour que l' | ||
+ | |||
+ | import bpy | ||
+ | |||
+ | Evidemment, nous devons importer la bibliothèque des API de Blender. Ensuite, nous créerons une fonction (ci-dessous) qui effacera toute la scène par défaut ; ainsi, nous pourrons y mettre ce que nous voulons où nous voulons. | ||
**We need to code it this way, since we have to delete each of the existing objects one at a time. There is no “delete all objects” command that I could find. The bpy.data.objects command will provide a “list” of all the objects, and we can step through that, one at a time, to remove or delete each of the objects. | **We need to code it this way, since we have to delete each of the existing objects one at a time. There is no “delete all objects” command that I could find. The bpy.data.objects command will provide a “list” of all the objects, and we can step through that, one at a time, to remove or delete each of the objects. | ||
Ligne 95: | Ligne 115: | ||
Next, we’ll create a single cube (yes, I know we just deleted one, but this shows how to create a new object) and set its location. Notice that we set the cube at Z axis of 1, so it’s above the “floor”, | Next, we’ll create a single cube (yes, I know we just deleted one, but this shows how to create a new object) and set its location. Notice that we set the cube at Z axis of 1, so it’s above the “floor”, | ||
+ | |||
+ | Nous avons besoin de la coder de cette façon car nous devons effacer un par un chacun des objets existants. Il n'y a pas de commande « effacer tous les objets » disponible par défaut. La commande bpy.data.objects nous fournira une « liste » de tous les objets, et nous pouvons la parcourir pour enlever ou supprimer, un par un, chacun des objets. | ||
+ | |||
+ | Ensuite, nous définirons deux variables, la première pour la taille de l' | ||
+ | |||
+ | sz = 2 | ||
+ | |||
+ | extents = 8.0 | ||
+ | |||
+ | Ensuite, nous créerons un simple cube (oui, je sais, nous venons juste d'en effacer un, mais ça nous montre comment créer un nouvel objet) et définirons sa position. Notez que nous définissons que le cube est à 1 sur l'axe Z ; il est donc au-dessus du « plancher », qui dans notre cas, est imaginaire ; mais nous pourrons en créer un plus tard si nous voulons (voir ci-dessus). | ||
**That’s our code. Now save the code as “test1.py” and click on the ‘Run Script’ button. The script will run and you will see the result in the upper left layout window. If you press the {F-12} keyboard button, you will see the scene rendered. | **That’s our code. Now save the code as “test1.py” and click on the ‘Run Script’ button. The script will run and you will see the result in the upper left layout window. If you press the {F-12} keyboard button, you will see the scene rendered. | ||
Ligne 105: | Ligne 135: | ||
We’ll go ahead and import the library and use the clear_scene function we created in test1.py (see next page, top left).** | We’ll go ahead and import the library and use the clear_scene function we created in test1.py (see next page, top left).** | ||
+ | |||
+ | Voici notre code. Maintenant, sauvegardez-le dans « test1.py » et cliquez sur le bouton « Lancer le Script ». Le script sera lancé et vous verrez le résultat dans la fenêtre de mise en scène en haut à gauche. Si vous appuyez sur la touche {F12} du clavier, vous verrez le rendu de la scène. | ||
+ | |||
+ | C'est plutôt sans intérêt ; aussi, je ne le montre pas ici, mais c'est important de montrer comment créer un objet à partir du code. | ||
+ | |||
+ | Maintenant, démarrons un nouveau script pour quelque chose de beaucoup plus intéressant. | ||
+ | Nous l' | ||
+ | |||
+ | Nous commencerons par importer la bibliothèque et utiliserons la fonction clear_scene que nous avons créée dans test1.py (voir page suivante, en haut à gauche). | ||
**Now we need to define a number of variables for our program. This will include the extents (size of our “world”), | **Now we need to define a number of variables for our program. This will include the extents (size of our “world”), | ||
Ligne 116: | Ligne 155: | ||
# Size of each cube | # Size of each cube | ||
sz = (extents / count) - padding** | sz = (extents / count) - padding** | ||
+ | |||
+ | Maintenant, nous devons définir quelques variables pour notre programme. Cela incluera extents (la taille de notre « monde »), le nombre de cubes que nous créerons (sur chaque calque), l' | ||
+ | |||
+ | # Taille de la grille | ||
+ | extents = 8.0 | ||
+ | # Nombre de cubes | ||
+ | count = 10 | ||
+ | # Espacement entre cubes | ||
+ | padding = 0.005 | ||
+ | # Taille de chaque cube | ||
+ | sz = (extents / count) - padding | ||
**# To convert abstract grid position within loop to real-world coordinates. | **# To convert abstract grid position within loop to real-world coordinates. | ||
Ligne 135: | Ligne 185: | ||
Now we’ll create our cube of cubes (shown below).** | Now we’ll create our cube of cubes (shown below).** | ||
+ | |||
+ | # Pour convertir la position abstraite de la grille dans la boucle en coordonnées du monde réel. | ||
+ | iprc = 0.0 | ||
+ | jprc = 0.0 | ||
+ | kprc = 0.0 | ||
+ | countf = 1.0 / (count - 1) | ||
+ | diff = extents * 2 | ||
+ | |||
+ | # Position de chaque cube. | ||
+ | z = 0.0 | ||
+ | y = 0.0 | ||
+ | x = 0.0 | ||
+ | |||
+ | # Centre de la grille. | ||
+ | centerz = 0.0 | ||
+ | centery = 0.0 | ||
+ | centerx = 0.0 | ||
+ | |||
+ | Maintenant, nous créerons notre cube de cubes (voir ci-dessous). | ||
**The rest of our program will be just like the end of test1.py, in that we create a lamp and camera into the scene (next page). | **The rest of our program will be just like the end of test1.py, in that we create a lamp and camera into the scene (next page). | ||
Ligne 141: | Ligne 210: | ||
Shown right is what the result of test2.py looks like when rendered.** | Shown right is what the result of test2.py looks like when rendered.** | ||
+ | |||
+ | Le reste de notre programme sera comme la fin de test1.py, parce que nous créons une lampe et une caméra dans la scène (page suivante). | ||
+ | |||
+ | Quand nous lançons notre programme, ça prend un peu de temps. Sur ma machine, ça dure environ une minute et demi. Rien ne se passe sur l' | ||
+ | |||
+ | À droite, le résultat de test2.py est présenté tel qu'il est rendu. | ||
**As always, I have uploaded these two programs onto pastebin… | **As always, I have uploaded these two programs onto pastebin… | ||
Ligne 150: | Ligne 225: | ||
Until next month; stay safe, healthy, positive and creative!** | Until next month; stay safe, healthy, positive and creative!** | ||
+ | |||
+ | Comme toujours, j'ai téléversé ces deux programmes sur pastebin : | ||
+ | |||
+ | Test1.py | ||
+ | https:// | ||
+ | Test2.py | ||
+ | https:// | ||
+ | |||
+ | Jusqu' | ||
+ | |||
+ | // | ||
+ | |||
+ | **This creates a cube at location 0, 0 and 1 unit above the imaginary “ground” plane. | ||
+ | |||
+ | Now we’ll create a lamp and a camera for the scene...** | ||
+ | |||
+ | Ceci crée un cube à l' | ||
+ | |||
+ | Maintenant, nous créons une lampe et une caméra pour la scène... | ||
issue156/python.1588051649.txt.gz · Dernière modification : 2020/04/28 07:27 de d52fr