Wikipedia: Python este un limbaj de programare multifuncțional folosit de exemplu de către companii ca Google sau Yahoo! pentru programarea aplicațiilor web, însă există și o serie de aplicații științifice sau de divertisment programate parțial sau în întregime în Python.
Implementarea de referință a Python este scrisă în C și poartă deci numele de CPython. Această implementare este software liber și este administrată de fundația Python Software Foundation.
Traducerea videoclipului Python Tutorial: 3D Wrecking Animation With 14 Lines of Code
În videoclip, cu ajutorul a 14 linii de cod scris în Python sunt adăugate în scenă obiectele 3D (un plan, un zid și un lanț), este creată animația, după care se adaugă manual materialul pentru obiectele și sursa de lumină.
Deschide Blender, șterge cubul implicit și comută la motorul de randare Cycles Render. Desparte fereastra 3D View în două (trage marcajul ca un triunghi din partea dreaptă sus spre stânga), apoi comută una din ferestre la Text Editor.
În fereastra Text Editor, click pe butonul New.
În noul fișier text, copie codul de mai jos:
import bpy
bpy.ops.mesh.primitive_plane_add(radius=100, location=(0, 0, 0)) # crearea planului
bpy.ops.rigidbody.object_add()
bpy.context.object.rigid_body.type = 'PASSIVE'
for x in range(1,19): # crearea obiectelor de forma toroidala (mesh - torus)
bpy.ops.mesh.primitive_torus_add(location=(0, x*4.3, 110), rotation=(0,1.5708*(x%2), 0), major_radius=3.5, minor_radius=.5, abso_major_rad=1.25, abso_minor_rad=0.75)
bpy.ops.rigidbody.object_add()
bpy.context.object.rigid_body.collision_shape = 'MESH'
if x==1:
bpy.context.object.rigid_body.enabled = False
for z in range (0,9): # crearea cuburilor pentru zid
bpy.ops.mesh.primitive_cube_add(radius=3, location=(x*6-60,2,2.8+z*6))
bpy.ops.rigidbody.object_add()
bpy.context.object.rigid_body.mass = 0.0001
Pentru a distinge mai bine sintaxa textului, poți activa butonul Syntax Highlight for scripting.
Apoi, cu click pe butonul Run Script (aflat puțin mai la dreapta), rulează programul. Blender adaugă în scenă planul, inelele pentru lanț și cuburile pentru zid.
Cu Alt+A (sau click pe butonul Play din fereastra Timeline) se poate rula animația.
Pentru a realiza animația, este nevoie de trei seturi de corpuri rigide (la activarea atributului Rigid Body pentru obiectul adăugat în Blender, Blender va simula coliziunile cu alte corpuri rigide):
Linia de cod [2] adaugă în scenă un plan simplu, pe care vor sta cuburile.
2 bpy.ops.mesh.primitive_plane_add(radius=100, location=(0, 0, 0))
Pentru a preveni căderea planului din cauza gravitației, planului i se va adăuga proprietatea Rigid Body de tip pasiv - linia de cod [4].
4 bpy.context.object.rigid_body.type = 'PASSIVE'
Bucla de instrucțiuni de pe liniile de cod [5-10] creează lanțul format din 18 inele care vor lovi blocurile.
5 for x in range(1,19): # crearea obiectelor de forma toroidala (mesh - torus)
6 bpy.ops.mesh.primitive_torus_add(location=(0, x*4.3, 110), rotation=(0,1.5708*(x%2), 0), major_radius=3.5, minor_radius=.5, abso_major_rad=1.25, abso_minor_rad=0.75)
7 bpy.ops.rigidbody.object_add()
8 bpy.context.object.rigid_body.collision_shape = 'MESH'
9 if x==1:
10 bpy.context.object.rigid_body.enabled = False
Pe liniile de cod [11-14], este creată o coloană cu 9 cuburi așezate unul peste altul, de greutate foarte mică, astfel încât să zboare mai mult atunci când sunt lovite.
11 for z in range (0,9): # crearea cuburilor pentru zid
12 bpy.ops.mesh.primitive_cube_add(radius=3, location=(x*6-60,2,2.8+z*6))
13 bpy.ops.rigidbody.object_add()
14 bpy.context.object.rigid_body.mass = 0.0001
Fiindcă bucla z este imbricată în bucla x, coloana de 9 cuburi va fi multiplicată de 18 ori, pentru a obține un perete alcătuit din 162 de cuburi.
Tot aici, să rotim și lanțul astfel încât să lovească peretele sub un unghi care are ca rezultat o coliziune mai spectaculoasă. Schimbă linia [6] cu:
bpy.ops.mesh.primitive_torus_add(location=(x*2, x*4.3, 110), rotation=(0,1.5708*(x%2), 0), major_radius=3.5+1*(x==18), minor_radius=.5+1*(x==18), abso_major_rad=1.25, abso_minor_rad=0.75)
Obs.: Ultimul tor poate fi selectat și modificat în Edit Mode: i se poate adăuga o sferă care să semene cu o bilă reală folosită la demolare.
Variantă a construcției de cuburi, folosind biblioteca math (math library )
Înlocuiește liniile de cod [11-14] cu următorul cod:
for z in range(1,10):
bpy.ops.mesh.primitive_cube_add(radius=3, location=(z*6-60,0,x*6-3))
bpy.ops.transform.resize(value=(1, .5+10*math.cos(x/3.14)*math.sin(z/3.14),1), constraint_axis=(False, True, False))
bpy.ops.rigidbody.object_add()
bpy.context.object.rigid_body.mass=0.0001
și adaugă la început, după linia 1, încă o linie cu instrucțiunea
import math
Acum, construcția din cuburi arată diferit.
Obs. Animația se oprește la cadrul 250, chiar dacă alegem în Timeline o valoare mai mare pentru cadrul final (caseta End).
Pentru a modifica numărul de cadre pe care se întinde simularea, în fereastra cu proprietăți - eticheta Scene - secțiunea Rigid Body Cache, alege o altă valoare în caseta End.
Unește cele două ferestre (3D View și Text Editor) într-una singură: 3D View.
Apoi selectează sursa de lumină (obiectul Lamp) și în fereastra cu proprietăți din dreapta, eticheta Object Data, alege tipul la Sun și intensitatea (Strenght sau Energy) la 7.
În fereastra 3D View, mută (tasta G) și rotește (tasta R) obiectul Lamp, pentru a lumina zidul din față.
Salvează fișierul (Ctrl+S).
Adăugarea culorii din fundal
În fereastra cu proprietăți din dreapta, selectează eticheta World (globul pământesc) și în secțiunea Surface, alege o culoare mai deschisă (gri deschis).
Setări pentru randare
Tot în fereastra cu proprietăți, eticheta Render (aparatul foto), secțiunea Render, lista cu opțiuni Device, poți alege ca dispozitive de randare între CPU (microprocesor) și GPU (placa grafică).
În fereastra 3D View, apasă tastele Shift+Z pentru a dezactiva afișarea Rendered.
Adăugarea materialului și randarea
Selectează un cub și în fereastra cu proprietăți din dreapta, deschide eticheta Materials, apoi click pe butonul New pentru a adăuga un material nou. Alege culoarea pentru cubul selectat.
Pentru a copia culoarea la celelalte cuburi, selectează toate cuburile, apoi din panoul Toolshelf (tasta T), secțiunea Relations, sub Object Data, click pe butonul Link Data.
---
Repetă operațiunea pentru obiectele de formă toroidală.
---
La final, poți randa animația.
Blender are un predefinit și un ecran pentru scrierea de cod și testarea lui: Scripting.
Ecranul poate fi afișat/ales din lista cu ecrane predefinite (Screen Layout) sau cu tastele rapide Ctrl (apăsată continuu) și una din tastele săgeți (stânga sau dreapta), apăsate repetat.
Ecranul Scripting afișează patru ferestre:
Notă: Pentru a comuta în orice fereastră la Consola Python, apasă Shift+F4.
La realizarea unei acțiuni, Blender afișează codul executat în secțiunea Info (fereastra de sus). De exemplu, în imaginea alăturată, se pot vedea trei comenzi:
Comenzile din secțiunea Info pot fi copiate prin selectare cu click RMB (butonul din dreapta de pe maus) și apăsarea tastelor Ctrl+C, apoi adăugate cu Ctrl+V în altă locație - de exemplu:
Pentru a șterge comenzile din secțiunea Info, acestea se selectează cu RMB (pentru a selecta toate comenzile, apasă tasta A), apoi apasă tasta X sau tasta Delete.