Blender 2.8 Python Scripting supermagter til ikke-programmører

oprettelse af 3D-gengivelser, spil og animationer er altid utroligt spændende! Godt, undtagen når det bliver udfordrende eller kedeligt. Hvis du har brugt Blender eller en anden 3D-app i et stykke tid, har du fundet dig selv slogging gennem de samme opgaver igen og igen og på et tidspunkt tænker, “jeg ønsker virkelig Blender bare gjorde dette for mig”.

gennem scripting kan det! Ikke kun det, Python kan skabe sjove nye funktioner, der ikke engang er mulige ved at klikke rundt på grænsefladen.

hvis du er som mig og ikke har haft nogen uddannelse i datalogi, kan programmering virke som et ord på fire bogstaver undtagen med elleve bogstaver (2,75 gange så slemt!). Det er som et hemmeligt sprog, som kun smarte mennesker kender, som sandsynligvis også altid læser ernæringsfakta, bygger raketmotorer for sjov eller har en ph.d. i en slags matematik, der ikke engang bruger tal.

det er heldigvis ikke tilfældet overhovedet. Sandheden er, at hvis du kan bruge Ctrl+C og Ctrl+V til at kopiere og indsætte, kan du begynde at lave dine egne blender Python-scripts med det samme.

væn dig til at se kode

eksponeringsterapi. Progressiv desensibilisering. Kald det, hvad du vil, men den bedste måde at normalisere noget, der oprindeligt virker underligt, er at se det ofte nok i den rigtige sammenhæng.

hver handling, du tager i Blenders interface, udføres via Python-kommandoer. Du kan tjekke dette ud for dig selv ved at skifte din tidslinje til Info Editor og se, hvad det spytter ud, når du går om dit normale arbejde.

info-editoren kan være lidt af en brandslange, men der er noget ved kommandolinjer og sådan, der muligvis programmerer kætteri, men sætter mig rolig, når jeg starter – det meste af det, du ser, er der, bare hvis du har brug for det, og 98% af tiden har du ikke brug for det. Så når du gør noget simpelt som at flytte terningen, og det giver dig to eller tre fulde linjer kode, kan du ignorere det meste af det. Den vigtige del er lige i begyndelsen:

bpy.ops.transform.translate(value = (0.5, 0, 0))

du ved allerede, at navnet på at flytte noget kaldes ‘oversæt’, så de værdier, der kommer efter det, er, hvor meget du har oversat dit objekt på hhv. Alt før ‘Oversæt’ er, hvor denne kommando findes i Blenders kode. Det er som om Blender er en kæmpe indlejret menu, og du valgte Blender Python -> Operations -> Transform -> Oversæt.

der er ni hovedafsnit af Blender Python (bpy). Du behøver ikke at huske disse, men at genkende nogle af dem kan hjælpe dig med at forstå, hvordan Blender fungerer under hætten.

  • bpy.app-oplysninger om Blender selv, der ikke ændrer sig, mens du kører.
  • bpy.kontekst-skrivebeskyttet lister over, hvad der i øjeblikket er aktivt i Blender.
  • bpy.data – alle Blenders interne data, såsom objekter.
  • bpy.msgbus-står for” message bus”, og bruges til at anmelde Blender af visse ændringer. Ikke noget, vi skal bekymre os om.
  • bpy.ops – alle de operationer, du kan gøre i Blender, fra modellering til tilføjelse af filer til gengivelse.
  • bpy.sti-funktioner, der beskæftiger sig med filstier.
  • bpy.rekvisitter – de forskellige egenskaber, som Blender bruger. Du vil bruge dette til at fortælle Blender, om et input skal være et tal eller en farve.
  • bpy.typer-hver type ting, der findes i Blender, fra modifikatorer til teksturer til lamper og meget mere.
  • bpy.utils-hjælpefunktioner, der kun er til Blender, men ikke beskæftiger sig med interne data.

hvis du er nysgerrig, er her API-dokumentationen til Blender 2.8 og for alle tidligere versioner.

når du arbejder, skal du vænne dig til at se, hvor dine yndlingsværktøjer findes i koden. Du behøver ikke at forstå det hele på dette tidspunkt – bare vænne sig til, hvordan det ser ud!

Python-konsollen med magt

når du er klar til næste trin, skal du gå over til fanen Scripting-arbejdsområde. Du finder den nu velkendte info editor nederst til venstre. Direkte over det er Python-konsollen, hvor du kan indsætte kommandoer og få ting til at ske. Prøv dette: vælg en linje i Info-editoren, tryk på Ctrl+C for at kopiere, og brug derefter Ctrl+V til at indsætte den i konsollen. Tryk enter, og du vil se, at nøjagtig samme handling ske igen!

prøv nu dette: drej, skalere og flytte noget, eller udfør andre tre handlinger i træk. Kopier alle tre fra info editor og indsæt dem i konsollen. Nu gjorde du bare tre ting på en gang! Der er ingen grænse for dette, så du kunne gøre hundredvis af ting på en gang på denne måde, hvis du ville. Selvom du ikke går længere ind i kodning, er dette et godt trick at holde i baglommen.

at gemme kommandoer med teksteditoren

jagt gennem en masse kommandoer og kopiere / indsætte hele tiden er i sig selv temmelig kedelig, hvis du gør det meget! Lad os spare os lidt tid og gøre vores multitasking endnu mere effektiv ved at bruge Blenders teksteditor.

Opret en ny tekstfil, og kopier og indsæt tre eller flere forskellige handlinger fra info-editoren i teksteditoren. Jeg starter med at tilføje en terning:

bpy.ops.mesh.primitive_cube_add(size=2, view_align=False, enter_editmode=False, location=(0, 0, 0))

så roterer jeg terningen langs å-aksen:

bpy.ops.transform.rotate(value=-0.261911, orient_axis='Z', orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', constraint_axis=(False, False, True), mirror=True, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1)

Yikes, det er en masse kode til noget så simpelt! Hvis det ikke generer dig, så fortsæt og hold det. Hvis du finder det skræmmende, kan du prøve at slette alt undtagen værdien og den orienterede akse, så den læser lettere. Resten antager simpelthen standardindstillinger.

bpy.ops.transform.rotate(value=-0.261911, orient_axis='Z')

endelig, lad os tilføje en bevel modifier:

bpy.ops.object.modifier_add(type='BEVEL')

den ene ekstra ting, du skal gøre for at få scriptet til at køre, er type:

import.bpy

øverst i filen, så den kan læse Blender Python. Det er også nyttigt at tænde de tre knapper for linjenumre, ordindpakning og syntaksfremhævning i Teksteditorens overskrift.

der går du, du har nu et script! Du kan nu gøre tre meget vigtige ting på en gang ved at klikke på Kør Script i Teksteditorens overskrift. Hvis du vil gemme den til senere eller bruge den i en anden fil, skal du gå til tekst -> Gem som og gem den som en .py Python-fil.

hvis du prøvede andre kommandoer end jeg gjorde, og dit script ikke fungerer som forventet, skyldes det sandsynligvis kontekst – hvilket objekt der er valgt, eller hvilken editor der er aktiv. Du kan vælge eller fravælge objekter i Blender 2.8 ved at indstille dens valgegenskab til sand eller falsk:

bpy.data.objects.select_set(state=True)

alle Hail autofuldførelse

nogle kommandoer, som Blender har, kan kun udføres via kode og findes ikke i grænsefladen. Derudover giver andre ting, der ændrer sig i grænsefladen (som at skrubbe tidslinjen) dig ikke altid noget i Info-editoren, som du kan kopiere og indsætte.

du kan altid bruge Google eller Blender API Docs til at hjælpe dig med at finde den rigtige kommando til at gøre, hvad du har brug for, men ofte er det lettere at bare finde den ved hjælp af autofuldførelse. Hvis du begynder at skrive en adresse i Python-konsollen, kan du trykke på Ctrl+Space, og Blender viser dig alle tilgængelige måder at fuldføre det, du har skrevet. Det er en fantastisk måde at navigere i kodebasen og opdage nye funktioner.

teksteditoren har også en Ctrl+Space autofuldførelse funktion, men det virker ikke det samme og er generelt ikke så nyttigt. Hvis det er noget, du ofte vil bruge, vil jeg anbefale at tage fat på Luckes kode autofuldførelse addon, som giver dig mulighed for at arbejde meget hurtigere.

Terrific Templates

hvis du gerne vil gøre dit script til en ordentlig addon, der kan tilgås via en knap i grænsefladen eller en menu, er Blenders indbyggede skabeloner et godt sted at starte. Der kan være meget at huske, når det kommer til, hvordan man giver de oplysninger, der ses i Brugerpræferencerne, eller hvordan man registrerer tilføjelsen, så den vises korrekt, så skabeloner er en god ting at henvise til (eller kopiere og indsætte fra), hvis du sidder fast.

faktisk at lære Python

hvis du har nydt at lave dine egne scripts, men føler dig lidt undervurderet over deres mangel på Magt (jeg lavede nogle store løfter i begyndelsen!), så er det tid til at lære mere om Python og programmering generelt. Begreber som variabler, sløjfer og funktioner er afgørende for at gøre noget virkelig nyt eller kraftfuldt. Lidt viden kan gå langt her, så det er virkelig værd at den ekstra indsats. Jeg vil anbefale at grave i Python på et af følgende steder. Vi er ikke tilknyttet på nogen måde, de gør bare et godt stykke arbejde.

  • Team Treehouse
  • Code Academy
  • Data Camp
  • Lær Python

Send Hjælp!

uundgåeligt vil du sidde fast midt i opbygningen af dine egne scripts og tilføjelser. Det sker for de bedste af os! Her er de steder, du kan gå for at stille spørgsmål om kodning i Blender:

  • Blender Stackudveksling
  • Blender DevTalk

du kan også lære mere ved at se disse kurser på CG Cookie:

  • Introduktion til Python Scripting i Blender
  • Scripting med Python Handlerfunktioner i Blender
  • Scripting en brugerdefineret Rig UI i Blender