Blender 2.8 Python Scripting supermakter för icke-programmerare

skapa 3d gör, spel och animationer är alltid otroligt spännande! Tja, förutom när det blir utmanande eller tråkigt. Om du har använt Blender eller någon annan 3D-app ett tag har du hittat dig själv slogging genom samma uppgifter om och om igen och någon gång tänker ”Jag önskar verkligen att Blender bara gjorde det här för mig”.

genom skript kan det! Inte bara det, Python kan skapa roliga nya funktioner som inte ens är möjliga genom att klicka runt gränssnittet.

om du är som jag och inte har haft någon utbildning i datavetenskap kan programmering verka som ett ord med fyra bokstäver utom med elva bokstäver (2,75 gånger så illa!). Det är som ett hemligt språk som bara smarta människor vet, som förmodligen också alltid läser näringsfakta, bygger raketmotorer för skojs skull eller har en doktorsexamen i någon typ av matematik som inte ens använder siffror.

det är tack och lov inte fallet alls. Sanningen är att om du kan använda Ctrl+C och Ctrl+V för att kopiera och klistra in, kan du börja skapa dina egna Blender Python-skript direkt.

vänja dig vid att se kod

exponeringsterapi. Progressiv desensibilisering. Kalla det vad du vill, men det bästa sättet att normalisera något som verkar konstigt i början är att se det tillräckligt ofta i rätt sammanhang.

varje åtgärd som du tar i Blenders gränssnitt utförs via Python-kommandon. Du kan kolla in det här själv genom att byta din tidslinje till Info Editor och se vad det spottar ut när du går om ditt normala arbete.

info editor kan vara lite av en firehose, men det finns något om kommandorader och sådant som kan programmera kätteri men sätta mig till mods när du börjar – det mesta av vad du ser är det ifall du behöver det och 98% av tiden du inte behöver det. Så när du gör något enkelt som att flytta kuben och det ger dig två eller tre fulla rader kod, kan du ignorera det mesta. Den viktiga delen är rätt i början:

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

du vet redan att namnet för att flytta något kallas ’översätt’, så värdena som kommer efter det är hur mycket du har översatt ditt objekt på X -, Y-och Z-axlarna respektive. Allt innan ’översätt’ är där det Kommandot finns i Blenders kod. Det är som om Blender är en jätte kapslad meny och du valde Blender Python -> Operations -> Transform -> Translate.

det finns nio huvuddelar av Blender Python (bpy). Du behöver inte memorera dessa, men att känna igen några av dem kan hjälpa dig att förstå hur Blender arbetar under huven.

  • bpy.app-Information om Blender själv som inte ändras när du kör.
  • bpy.kontext-skrivskyddade listor över vad som för närvarande är aktivt i Blender.
  • bpy.data-alla mixers interna data, till exempel objekt.
  • bpy.msgbus-står för” message bus”, och används för att meddela Blender av vissa ändringar. Inte något vi behöver oroa oss för.
  • bpy.ops – alla operationer du kan göra i Blender, från modellering till att lägga till filer till rendering.
  • bpy.path-funktioner som hanterar filvägar.
  • bpy.rekvisita-de olika egenskaperna som Blender använder. Du skulle använda detta för att berätta för Blender om en ingång ska vara ett nummer eller en färg.
  • bpy.typer-ALLA typer av saker som finns i Blender, från modifierare till texturer till lampor och mycket mer.
  • bpy.utils-verktygsfunktioner som endast är för Blender men inte hanterar interna data.

om du är nyfiken, här är API-dokumentationen för Blender 2.8 och för alla tidigare versioner.

när du arbetar, vänja dig att se var dina favoritverktyg finns i koden. Du behöver inte förstå allt just nu – bara vänja dig vid hur det ser ut!

Python – konsolen med Power

när du är redo för nästa steg, gå över till fliken Scripting workspace. Du hittar den nu bekanta informationsredigeraren längst ner till vänster. Direkt ovanför är Python-konsolen, där du kan klistra in kommandon och få saker att hända. Prova detta: välj en rad i Informationsredigeraren, tryck Ctrl+C för att kopiera och använd sedan Ctrl+V för att klistra in den i konsolen. Tryck på enter, så ser du att exakt samma åtgärd händer igen!

försök nu detta: rotera, skala och flytta något, eller gör några andra tre åtgärder i rad. Kopiera alla tre från informationsredigeraren och klistra in dem i konsolen. Nu gjorde du bara tre saker på en gång! Det finns ingen gräns för detta, så du kan göra hundratals saker på en gång på detta sätt om du vill. Även om du inte går längre in i kodning är detta ett bra knep att hålla i bakfickan.

spara kommandon med textredigeraren

jakt genom en massa kommandon och kopiera / klistra hela tiden är i sig ganska tråkigt om du gör det mycket! Låt oss spara oss lite tid och göra vår multitasking ännu effektivare genom att använda Blenders textredigerare.

skapa en ny textfil och kopiera och klistra in tre eller flera olika åtgärder från informationsredigeraren i textredigeraren. Jag börjar med att lägga till en kub:

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

sedan roterar jag kuben längs Z-axeln:

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 är mycket kod för något så enkelt! Om det inte stör dig, fortsätt och behåll det. Om du tycker att det är skrämmande, försök ta bort allt utom värdet och den orienterade axeln så att den läser lättare. Resten kommer helt enkelt att anta standardvärden.

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

slutligen, låt oss lägga till en avfasningsmodifierare:

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

en extra sak som du behöver göra för att få skriptet att köra är typ:

import.bpy

överst i filen, så att den kan läsa Blender Python. Det är också bra att slå på de tre knapparna för radnummer, radbrytning och syntaxmarkering i Textredigerarens rubrik.

varsågod, nu har du ett manus! Du kan nu göra tre mycket viktiga saker på en gång genom att klicka på Kör Script i Textredigerarens rubrik. Om du vill spara den för senare eller använda den i en annan fil, gå till Text -> Spara som och spara den som en .py Python-fil.

om du försökte andra kommandon än jag gjorde och ditt skript inte fungerar som förväntat beror det troligen på kontext – vilket objekt som är valt eller vilken redigerare som är aktiv. Du kan välja eller avmarkera objekt i Blender 2.8 genom att ställa in egenskapen selection till True eller False:

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

alla hagel Komplettera automatiskt

vissa kommandon som Blender har kan bara göras via kod och finns inte i gränssnittet. Dessutom ger andra saker som ändras i gränssnittet (som att skrubba tidslinjen) dig inte alltid något i Informationsredigeraren som du kan kopiera och klistra in.

du kan alltid använda Google eller Blender API Docs för att hjälpa dig att hitta rätt kommando för att göra vad du behöver, men ofta är det lättare att bara hitta det med autofullständig. Om du börjar skriva en adress i Python-konsolen kan du slå Ctrl+Space och Blender visar dig alla tillgängliga sätt att slutföra det du har skrivit. Det är ett bra sätt att navigera i kodbasen och upptäcka nya funktioner.

Textredigeraren har också en Ctrl+Space autofullständig funktion, men den fungerar inte på samma sätt och är i allmänhet inte så användbar. Om det är något du skulle använda ofta, skulle jag rekommendera att ta tag i Jacques Luckes kod Autocomplete addon som gör att du kan arbeta mycket snabbare.

fantastiska mallar

om du vill göra ditt skript till ett ordentligt tillägg som kan nås via en knapp i gränssnittet eller en meny, är Blenders inbyggda mallar ett bra ställe att börja. Det kan finnas mycket att komma ihåg när det gäller hur man tillhandahåller den information som ses i användarinställningarna eller hur man registrerar tillägget så att det visas korrekt, så mallar är en bra sak att hänvisa till (eller kopiera och klistra in från) om du fastnar.

faktiskt lära Python

om du har haft att skapa egna skript men känner lite underwhelmed på deras brist på makt (Jag gjorde några stora löften i början!), då är det dags att lära sig mer om Python och programmering i allmänhet. Begrepp som variabler, loopar och funktioner är viktiga för att göra något riktigt nytt eller kraftfullt. Lite kunskap kan gå långt här, så det är verkligen värt den extra ansträngningen. Jag skulle rekommendera att gräva i Python på en av följande platser. Vi är inte anslutna på något sätt, de gör bara ett bra jobb.

  • Team Treehouse
  • Kod Academy
  • Data Camp
  • Lär Python

Skicka Hjälp!

oundvikligen kommer du att fastna i mitten av att bygga dina egna skript och tillägg. Det händer med de bästa av oss! Här är de platser du kan gå för att ställa frågor om kodning i Blender:

  • Blender StackExchange
  • Blender DevTalk

du kan också lära dig mer genom att titta på dessa kurser på CG Cookie:

  • Intro till Python Scripting i Blender
  • Scripting med Python hanterare funktioner i Blender
  • Scripting en anpassad Rig UI i Blender