Zbierka - Voronoiove objekty - Blender
Voronoiove objekty - časť: Blender
V predošlej úlohe sme sa pokúsili vytvoriť si voronoiov objekt v OpenSCADe a prišli sme k záveru, že takýto spôsob nie je úplne jednoduchý ani optimálny. Preto teraz prechádzame k nástroju Blender a pokúsime sa implementovať podobné objekty jednoduchšími spôsobmi pomocou funkcionalít, ktoré Blender už obsahuje. Použijeme pritom vysokoúrovňový programovací jazyk Python. Budeme pomocou neho implementovať funkcie, ktoré nám umožnia modifikovať objekt a rzšíria nám možnosti manipulácie s ním. Keďže parametrické 3D modelovanie využíva definované parametre na vytváranie modelov, čo umožňuje ľahkú úpravu a iteráciu, tieto funkcie budú využívať rôzne parametre, ktoré môžu a nemusia byť od seba závíslé. Generatívne 3D modelovanie zas vytvára modely pomocou algoritmov, pravidiel a procedúr, čo umožňuje vytváranie zložitých štruktúr a vzorov, pokúsime sa pre to implementovať základné algoritmy, ktoré nám neskôr takéto generatívne modelovanie umožnia.
Zadanie úlohy
Cieľom tejto úlohy je najmä naučiť sa používať Python s Blenderom, pracovať s nástrojmi v Blenderi a ukázať si ako môžeme generovať objekty s parametrickým dizajnom rýchlejšie než v predošlom OpenSCADe. Narozdiel od predošlých úloh, v tejeto si nemusíte vytvárať základný objekt, môžeme si nejaký stiahnuť, prípadne vybrať z ponuky v Blenderi.
Inštrukcie
- Zapneme si nástroj Blender a z horných tabov si vyberieme ten s názvom "Scripting" pre otvorenie okna na písanie programu.
- Klikneme na ikonku "New," ktorou si vytvoríme nový súbor.
- Uistíme sa, že v druhom okne máme otvorenú časť "3D viewport" s módom "Object Mode." Naše rozloženie okien by malo vyzerať nasledovne:
- S takto nastaveným prostredím môžeme začať písať kód. Prvým krokom je importovať si knižnice, ktoré budeme potrebovať, hlavnou je knižnica bpy, ktorá nám sprostredkúva funkcionality pre prácu s Blenderom. Importujeme a použijeme ju nasledovne:
Takýmto volaním vieme získať objekt, ktorý máme aktuálne v scéne, kde pomocou "print" si dávame do konzoli vypísať jeho meno. Aby sme videli tento výstup v konzole, musíme si ju otvoriť v okne a to spravíme nasledovne:
Ak sa nám to podarilo, tak môžeme vidieť výpis mena objektu v konzole a ako sa nám tento objekt zorbazuje aj vo vyčítaní objektov z kolekcie scény:
Spúšťať skript budeme pomocou vyznačeného tlačidla "Run script" alebo skratkou alt + P - Pre pokračovanie je potrebné naštudovať si Blender Python API, aby sme vedeli používať funkcie, ktoré potrebujeme.
- Hlavným princípom, ktorý budeme využívať pre vytvorenie voronoiovho objektu je aplikácia modifikátorov, ktoré nám Blender ponúka. Viac as o ních dozvieme v časti Blender moodifiers.
- V tejto časti máme kód, ktorým importujeme knižnicu bpy, získame náš objekt, vytvoríme mu modifikátor WIREFRAME a nastavíme mu niektoré z hodnôť:
import bpy cube_object = bpy.context.scene.objects[0] wireframe_modifier = cube_object.modifiers.new(name="My wireframe", type='WIREFRAME') wireframe_modifier.thickness = 0.2 # Thickness # <0; 1> wireframe_modifier.offset = 0 # Offset # <-1; 1>
Keď skript spustíme, okrem zmeny na objekte v hlavnej scéne si všimneme, že objektu sa aj v časti modifikátorov pridal konkrétny modifikátor aj s hodnotami, ktré sme mu pridali:
Testovanie a úpravy
Prezrite a skontrolujte si objekt a odpovedzte si na to či daný 3D model zodpovedá zadaniu a či ste s ním spokojní. Ak chcete skúsiť model upraviť, navrhujeme:
- Skúste si naštudovať rôzne modifikátori a vyskúšať si ako fungujú.
- Ďalej pomocou podobných príkazov vytvoríme modifikátor "Subdivision surface" typu 'SUBSURF' a modifikátor "Solidify" typu 'SOLIDIFY'. Dajte si ale pozor aby ste nepridávali jeden modifikátor k danému objektu viac krát, ak sa vám to stane, stačí ho v okne s modifikátormi vymazať, prípadne si to viete ošetriť v kóde kontrolou modifikátorov.
- Pre implementovanie dierovosti objektu si potrebujeme pridať viac modifikátorov, pamätajte na to, že záleží na poradí pridania modifikátorov a nakoniec ich potrebujeme všetky aplikovať, aby sa nám na danom objekte skutočne prejavili. Taktiež je niekedy výhodné použiť modifikátor opakovane. Napríklad pre takýto objekt:
Sme využili kombináciu modifikátorov SUBSURF, DECIMATE, WIREFRAME, znovu SUBSURF a nakoniec SOLIDIFY. - Vyskúšajte si kombinovať tieto modifikátori a upravujte ich parametre v nástrojoch priamo v Blenderi a pokúste sa ich prepísať do Python skriptu.
Spätná väzba
Ak ste spokojní so svojím výsledným modelom, prezentujte ho ostatným, zhodnoťte koncepty, ktoré ste použili a ako ste ho implementovali, buďte otvorení k hodnoteniam od ostatných a k prípadným návrhom na zlepšenie.
Odkazy na materiály
V tejto sekcii nájdete odkazy na materiály, ktoré vám môžu pomôcť pri riešení daných problémov a naučia vás ako používať požívané nástroje:
- Rozcestník dokumentácií Blendera - nájdete tu dokumentáciu pre vývojárov, používateľskú ríručku a aj Python API dokumentáciu
- Python syntax - tu nájdete syntax a použitie jazyka Python s ukážkami použitia
- Blendere Python API - dokumentácia Python API v Blenderi - nájdete tu všetko čo sa týka programovania s Python API (s knižnicou bpy) v Blenderi
Vzorové riešenie
Ak budete potrebovať motiváciu alebo si skontrolovať váš výsledný model, v nasledujúcich odkazoch nájdete implementáciu daného modelu v nástrojoch, ktoré ste na implementáciu mohli použiť: