Oto cały kod potrzebny do stworzenia powyższej animacji:
import bpy |
bpy.ops.mesh.primitive_plane_add(radius=145, location=(0, 0, 0)) |
bpy.ops.rigidbody.object_add() |
bpy.context.object.rigid_body.type = 'PASSIVE' |
|
for i in range(0, 25): |
bpy.ops.mesh.primitive_cube_add(radius=1, location=(6*i, 0, 10)) |
bpy.ops.rigidbody.object_add() |
bpy.ops.transform.resize(value=(1, 6, 10), constraint_axis=(False, True, True)) |
if i==0: |
bpy.ops.transform.rotate(value=0.4, axis=(0, 1, 0)) |
Jak to działa?
Silnik fizyki w Blenderze ma olbrzymie możliwości, a przy tym łatwo go obsłużyć programowo. Jeżeli uczysz się Pythona, zabawa z fizyką jest świetnym sposobem na ćwiczenie. Do efektu domina potrzebujemy tylko płaszczyzny i kilku klocków.
Płaszczyzna (plane), która będzie służyć za stół, na którym będą stały klocki [linia 1] oraz klocki są Ciałami Sztywnymi (Rigid Bodies) [2]. Kiedy ustawisz obiekt w Blenderze jako Ciało Sztywne, zachowuje się on jak... no cóż, ciało sztywne, co oznacza, że inne Ciała Sztywne nie będą przez niego przenikać, lecz będą go odpychały, odbijały itd. Domyślnie Blender traktuje wszystkie obiekty jak chmury lub duchy, które nie reagują na kolizje. Zamienienie ich w Ciała Sztywne odpowiada zamienieniu ich w kamienie i daje im właściwości fizyczne.
Płaszczyzna jest "pasywnym" (passive)[3] Ciałem Sztywnym, so oznacza, że grawitacja nie ściągnie jej w dół. Klocki są aktywne.
Opis kodu w skrócie:
[0] wgranie modułu Python Blendera
[1-3] stworzenie płaszczyzny i określenie jej własności fizycznych
[5-7] tworzenie klocków domino - to po prostu płaskie prostopadłościany
[8] zmiana rozmiaru klocków
[9-10] obrót pierwszego klocka tak, by przewrócił się i rozpoczął reakcję łańcuchową
Spróbuj eksperymentować z różnym położeniem klocków - może na sinusoidzie lub kole?
Kliknij tutaj, by ściągnąć plik .blend, który zawiera kod
Inne poradniki:
Rozbiajanie muru kulą - 14 linii kodu
Fraktale w JavaScript - tylko 25 linii kodu