Zbierka - Generovanie objektov - Blender

Zo stránky Parametrické a Generatívne 3D modelovanie
Verzia z 13:22, 10. máj 2024, ktorú vytvoril Admin (diskusia | príspevky)
   https://kempelen.dai.fmph.uniba.sk/design/images/2/28/Generate_multiple.stl

Generátor objektov

Trvanie:
1 hod
Náročnosť:
pokročilý
Nástroje:
Blender, Python

Jendným z hlavných metodík parametrického a generatívneho dizajnu je potrebné vedieť generovať mnoho objektov a vedieť ich rýchlo upravovať. Preto sme zahrnuli aj toto cvičenie, kde si ukážeme ako vieme rýchlo v Blenderi generovať objekty a apliklovať na ne viaceré zmeny.


Zadanie úlohy

Cieľom je predstaviť si bázové programovacie koncepty v Pythone, ktoré potrebujeme ak chceme generovať v Blenderi veľa objektov rýchlo a modifikovať ich za behu.

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:

  • Teória - rozcestník stručnej teórie pre koncepty, ktoré potrebujeme
  • 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
  • Blender 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

Inštrukcie

  1. Zapneme si nástroj Blender a z horných tabov si vyberieme ten s názvom "Scripting" pre otvorenie okna na písanie programu.
    Blender scripting.png
  2. Klikneme na ikonku "New," ktorou si vytvoríme nový súbor.
    Blender new script.png
  3. 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:
    Blender setup.png
  4. 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:
    Blender bpy import.png
    Takýmto volaním vieme získať objekt, ktorý máme aktuálne v scéne, kde pomocou "print" si dávame do konzoly vypísať jeho meno. Aby sme videli tento výstup v konzole, musíme si ju otvoriť v okne a to spravíme nasledovne:
    Blender system console.png
  5. Pre pokračovanie je potrebné naštudovať si Blender Python API, aby sme vedeli používať funkcie, ktoré potrebujeme.
  6. Najprv sa pokúsime vytvoriť si objekt v scéne priamo z kódu. Toto môžeme dosiahnuť napríklad spustením nasledovného skriptu v Blenderi:
    import bpy
    
    # Vytvorenie nového objektu - kocky
    bpy.ops.mesh.primitive_cube_add(size=2)
    
    # Presunutie kocky na inú pozíciu
    bpy.context.object.location = (0, 0, 2)
    
  7. Potom chceme týchto modelov vygenerovať viac vedľa seba a uložiť si ich napríklad do poľa. Vieme to spraviť napríklad takto:
    import bpy
    
    # Veľkosť kocky
    size = 2
    
    # Vytvorenie prvej kocky
    bpy.ops.mesh.primitive_cube_add(size=size)
    cube1 = bpy.context.object
    
    # Uloženie referencie na aktuálny návrh
    scene = bpy.context.scene
    
    # Pozícia prvej kocky
    pos_x = 0
    
    # Vytvorenie a umiestnenie ďalších kociek
    for i in range(1, 5):
        # Vytvorenie novej kocky
        bpy.ops.mesh.primitive_cube_add(size=size)
        cube = bpy.context.object
        
        # Nastavenie pozície
        pos_x += size * 1.33  # Medzera o tretine priemeru
        cube.location.x = pos_x
    
        # Pridanie do scény
        scene.collection.objects.link(cube)
    
  8. Následne chceme implementovať modifikáciu týchto objektov, skúsme to spraviť tak, že každý jeden objekt v scéne modifikujeme iným spôsobom. Na jeden môdel môžme aplikovať jednu aj viac mien. Vytvorenie a aplikácia modifikátora na model (konkrétne pre modifikátor wireframe a subdivision) vyzerajú nasledovne:
    import bpy
    
    # Vytvorenie nového objektu - kocky
    bpy.ops.mesh.primitive_cube_add(size=2)
    
    # Získanie odkazu na vytvorený objekt
    cube = bpy.context.object
    
    # Pridanie Wireframe modifikátora
    wireframe_mod = cube.modifiers.new(name="Wireframe", type='WIREFRAME')
    wireframe_mod.thickness = 0.1  # hrúbka drôtového rámu
    
    # Pridanie Subdivision modifikátora
    subdivision_mod = cube.modifiers.new(name="Subdivision", type='SUBSURF')
    subdivision_mod.levels = 2  # počet úrovní podrobností
    
    # Presunutie kocky na inú pozíciu
    cube.location = (0, 0, 2)
    
  9. Hlavným princípom, ktorý budeme využívať na modifikovanie objektov budeme využívať Blender modifiers, o ktorých sa dozvieme viac v časti Blender modifiers. Skúste si preto viac modifikátorov a vyskúšajte si ich aplikovať viac na viaceré objekty samostatne alebo súčasne.
  10. Ak máme vytvorených viac modifikácií a viac objektov, pokúsme sa tieto modifikácie aplikovať na dané objekty kým s nimi nie sme spokojní.

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 kód optimalizovať aby bol dostatočne prehľadný - rozmiestniť jednotlivé modifikácie do funkcií a podobne
  • pri aplikácií viacerých modifikácií môže byť problém s výkonom, skúste implementovať podmienky, ktoré zamedzia príliš veľkým alebo príliš nízkym hodnotám parametrov - vieme, že modifikároti majú urené rozdahy, ktoré môžeme aplikovať, napríklad "SUBSURF" úrovne môžu nadobúdať hodnotu <0,6>
  • pokúste sa vytvoriť postupné renderovanie objektu a pri každej iterácií ho nejak viac modifikovať ako napríklad:
    Voronoiov objekt 4 Voronoiov objekt 5 Voronoiov objekt 6
  • modifikovať môžeme aj objekty, ktoré si vieme importovať do scény, vyskúšajte si teda importovanie a modifikáciu aj takéhoto objektu:
    obrázok s návodom na import modelu

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.

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ť:

Záver

V úlohe sme si predstavili akými spôsobmi môžeme generovať viac objektov naraz, manipulovať s nimi v scéne, modifikovať ich za behu programu či ako si isch uschovávať a prehľadávať. Tieto základy sú potrebné k tvorbe plnohodnotného generatívneho dizajnu.