1 2022-01-31: Blender¶
1.1 Opgave: Configuratie Blender¶
Start Blender.
Open het rendermenu rechtsonderaan:
Verander de render-engine van “Eevee” naar “Cycles”:
Verander de “max samples” setting van 1024 naar 16:
Open nu het “output properties”-menu:
Standaard worden afbeeldingen in FullHD resolutie gerenderd. Je kan met de percentage-slider om tijd te besparen, in een lager percentage van die resolutie renderen. Verlaag het percentage in de slider naar 25% zodat jullie sneller kunnen renderen:
Net onder de instelling voor de resolutie vinden jullie een sectie met naam “Frame range”. Hier kan je instellen hoeveel frames gerenderd moeten worden. Pas de “End”-instelling aan van 250 naar 48. We renderen 24 beelden per seconde, dus met 48 frames hebben we 2 seconden aan video.
Een korte screencast hierover vinden jullie op https://youtu.be/6JoR9Fn837M.
1.2 Opgave: Render default cube¶
We gaan onze instellingen nu testen.
Render de default scene. Gebruik hiervoor het “Render”-menu.
Sla de afbeelding op, via het “Image->Image save”-menu en upload naar Smartschool in uploadzone 2022-01-31.
Screencast op https://youtu.be/OIQ78MkVakc.
1.3 Opgave: Render oranje kubus¶
Selecteer de kubus.
Open het materiaal-menu mbv het knopje rechtsonderaan:
Pas de basis kleur (base color) aan zodat de kubus oranje is:
Render de kubus, sla op als PNG, en upload naar Smartschool.
Screencast op https://youtu.be/abza3mZvnLI.
1.4 Opgave: Render animatie kubus¶
Notitie
Keyframe-animatie is een manier om animaties in te geven. Je doet dit door voor bepaalde frames (tijdstippen) aan te geven welke waardes bepaalde eigenschappen hebben. Bijvoorbeeld, op frame 1 (begin van een filmpje) is de x-coördinaat van een kubus 0. Op frame 100 is de coördinaat van diezelfde cubus 10. Het animatiesysteem zal dan voor frames 2 tot en met 99 zelf berekenen wat de coordinaten van de kubus zijn om een vloeiende animatie te krijgen.
Selecteer de kubus.
Klik met de rechtermuisknop op de kubus en selecteer “insert keyframe”, en vervolgens “location”. Zie onderstaande GIF:
In een ander formaat:
Onderaan vind je de Timeline. Hier kan je o.a. je animatie afspelen, of door de frames gaan van je animatie. Ga naar het laatste frame in je animatie (frame 48) door de blauwe tag te verslepen.
Verplaats nu de kubus door linksboven op het icoontje met de 4 pijltjes te klikken. Je kubus krijgt nu een assenstelsel. Je kan nu op een as klikken (b.v. de X-as) en slepen. Zo verplaats je de kubus op de X-as.
Klik nu opnieuw op je kubus met de rechtermuisknop en selecteer “Insert keyframe” en vervolgens “Location”.
Speel de animatie af door op het “play”-icoontje te klikken.
Screencast op https://youtu.be/XUdPGPq5Ad8.
Je kan met Blender niet alleen losse afbeeldingen renderen maar ook animaties. Blender kan de animatie als b.v. losse PNGs opslaan, of als een filmpje. Pas de instellingen in Blender aan, zodat je een filmpje kan renderen.
Screencast op https://youtu.be/kl3scCrapIQ.
Render de animatie, en upload het filmpje naar Smartschool.
1.5 Opgave: Scripting kubus¶
Je kan in Blender programmeren met behulp van de programmeertaal Python. Bovenaan in de menubalk zie je een aantal tabbladen. Het eerste tabblad heet “Layout”, het volgende “Modeling”. Het laatste tabblad heet “Scripting”. Klik op deze tab.
De layout van Blender wordt nu aangepast. Je ziet nu linksboven de 3D-viewport, links in het midden een Python console, en in het midden een groot leeg venster.
Bovenaan dit lege venster zie je twee knoppen “New” en “Open”. Klik op “New”.
Je krijgt nu een nieuw leeg venster waarin je Python code kunt ingeven.
Kopieer onderstaande code en plak in dit nieuwe lege venster.
1import bpy
2
3bpy.ops.mesh.primitive_cube_add(location=(1, 2, 0))
Je ziet nu 1 kubus verschijnen op positie (1, 2, 0).
Regel 1 laadt de Python-module om toegang te krijgen tot de Blender functionaliteit. Op regel 3 roepen we een functie op die toelaat om een kubus aan de scene toe te voegen. De parameter location laat ons de locatie van de nieuwe kubus doorgeven.
Render de scene, sla op als PNG, en upload naar Smartschool.
Screencast op https://youtu.be/riNSptm9iXA.
1.6 Opgave: Kubusgrootte¶
Je kan primitive_cube_add functie ook een size parameter meegeven die de grootte van de toe te voegen kubus bepaalt:
1import bpy
2
3bpy.ops.mesh.primitive_cube_add(location=(1, 2, 0), size=0.5)
Kopieer bovenstaande code, zorg ervoor dat de kubus als grootte 0.75 heeft, render de scene, sla op als PNG, en upload naar Smartschool.
1.7 Opgave: Scripting kubussen¶
Ons vorige script bestond uit slechts 2 regels. Maar je hebt een volledige Python omgeving ter beschikking: Je kan dus alles wat je tot nu toe geleerd hebt gebruiken.
Voeg 5 kubussen met grootte 0.75 toe in de scene door gebruik te maken van een for-loop. Laat de x-coordinaten van je kubussen overeenkomen met de variabele van je for-loop.
Render de scene, sla op als PNG, en upload naar Smartschool.
1.8 Opgave: Scripting kubussen met grootte¶
Pas bovenstaand script aan zodat de grootte van de kubussen overeenkomt met het x-coordinaat gedeeld door 10.
Render de scene, sla op als PNG, en upload naar Smartschool.
1.9 Opgave: Scripting kubusgrid¶
Pas bovenstaand script aan zodat je een grid van kubussen krijgt. Gebruik hiervoor een dubbele for-loop.
Render de scene, sla op als PNG, en upload naar Smartschool.
1.10 Opgave: Scripting tekst¶
Verwijder de kubussen door ze te selecteren met de muis, en vervolgens op ofwel “x” ofwel de delete-toets te drukken.
Kopieer onderstaande code en vervang alle code in het Python code venster in Blender.
1import bpy
2
3bpy.ops.object.text_add(location=(0, 1, 0.5))
Als je bovenstaande code uitvoert, zie je “Text” verschijnen in de 3D viewport.
We hebben dus volgende functies tot onze beschikking:
bpy.ops.mesh.primitive_cube_add; toevoegen kubus
bpy.ops.object.text_add: toevoegen tekst
Render de scene, sla op als PNG, en upload naar Smartschool.
1.11 Opgave: Scripting tekst aanpassen¶
Hoe passen de tekst nu aan zodat we iets anders kunnen tonen dan “Text”?
1import bpy
2
3bpy.ops.object.text_add(location=(0, 1, 0.5))
4
5obj = bpy.context.object
6obj.data.body = "takis"
Op regel 5 maken we een variabele om makkelijker toegang te hebben tot het actieve object. Op regel 6 gebruiken we deze nieuwe variable om de data.body property aan te passen.
Zorg ervoor dat je naam getoond wordt ipv “Text”, render de scene, sla op als PNG, en upload naar Smartschool.
1.12 Opgave: Extruding¶
We zien de tekst nu wel in Blender, maar het ziet er nogal platjes uit… Hoe kunnen de tekst nu dikte geven?
1import bpy
2
3bpy.ops.object.text_add(location=(0, 1, 0.5))
4
5obj = bpy.context.object
6obj.data.body = "takis"
7obj.data.extrude = 0.2
Op regel 7 gebruiken we de data.extrude property om de “dikte” van de tekst aan te passen.
Zorg ervoor dat je naam getoond wordt ipv “Text”, render de scene, sla op als PNG, en upload naar Smartschool.
1.13 Opgave: Scrolling text¶
We willen de tekst nu animeren. Zoals we eerder zagen, kunnen we dit doen door keyframes te gebruiken.
1import bpy
2
3bpy.ops.object.text_add(location=(-4, 1, 0.5))
4
5obj = bpy.context.object
6obj.data.body = "takis"
7obj.data.extrude = 0.2
8
9obj.keyframe_insert(data_path="location", frame=1)
10obj.location = (4, 1, 0.5)
11obj.keyframe_insert(data_path="location", frame=48)
Op regel 10 geven aan dat we de huidige locatie van de tekst willen opslaan in keyframe 1. Op regel 11 passen we de locatie van de tekst aan. En op regel 11 geven aan dat we de nieuwe locatie van de tekst willen opslaan in keyframe 48.
Zorg ervoor dat je naam getoond wordt ipv “Mosa RT”, render de scene als animatie en upload naar Smartschool.
1.14 Opgave: Loading text from file¶
Momenteel stond de tekst hardcoded in onze code. Maar, we hebben de hele Python standaardbibliotheek ter beschikken, dus we kunnen onze code flexibeler maken.
1import bpy
2
3f = open("mijntekst.txt", "rt")
4
5y = 0
6for line in f:
7 bpy.ops.object.text_add(location=(-2, y, 0.5))
8
9 obj = bpy.context.object
10 obj.data.body = line
11 obj.data.extrude = 0.2
12
13 y -= 1
Laad je eigen tekst in ipv de Star Wars intro, render de scene als PNG en upload naar Smartschool.
1.15 Opgave: Animating text loaded from file¶
En nu met de keyframe-code terug toegevoegd:
1import bpy
2
3f = open("mijntekst.txt", "rt")
4
5y = 0
6for line in f:
7 bpy.ops.object.text_add(location=(-2, y, 0.5))
8
9 obj = bpy.context.object
10 obj.data.body = line
11 obj.data.extrude = 0.2
12
13 obj.keyframe_insert(data_path="location", frame=1)
14 obj.location = (-2, y + 10, 0.5)
15 obj.keyframe_insert(data_path="location", frame=48)
16 y -= 1
En het resultaat: