2022-01-31: Blender ======================== .. sectnum:: Opgave: Configuratie Blender ---------------------------- Start Blender. Open het rendermenu rechtsonderaan: .. image:: images/blender/rendermenu.png :width: 200 Verander de render-engine van "Eevee" naar "Cycles": .. image:: images/blender/renderengine.png :width: 300 Verander de "max samples" setting van 1024 naar 16: .. image:: images/blender/cycles_max_samples.png :width: 300 Open nu het "output properties"-menu: .. image:: images/blender/outputmenu.png :width: 200 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: .. image:: images/blender/renderresolution.png :width: 300 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. .. image:: images/blender/animframes.png :width: 300 Een korte screencast hierover vinden jullie op `https://youtu.be/6JoR9Fn837M `_. 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 `_. Opgave: Render oranje kubus --------------------------- Selecteer de kubus. Open het materiaal-menu mbv het knopje rechtsonderaan: .. image:: images/blender/materialicon.png :width: 200 Pas de basis kleur (base color) aan zodat de kubus oranje is: .. image:: images/blender/materialbasecolor.png :width: 400 Render de kubus, sla op als PNG, en upload naar Smartschool. Screencast op `https://youtu.be/abza3mZvnLI `_. Opgave: Render animatie kubus ----------------------------- .. note:: 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: .. image:: images/blender/anim.gif :width: 600 In een ander formaat: .. image:: images/blender/anim.webm :width: 600 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. 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. .. literalinclude:: ./examples/blender/blender01.py :language: python :linenos: 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 `_. Opgave: Kubusgrootte -------------------------- Je kan `primitive_cube_add` functie ook een `size` parameter meegeven die de grootte van de toe te voegen kubus bepaalt: .. literalinclude:: ./examples/blender/script_cube_size.py :language: python :linenos: Kopieer bovenstaande code, zorg ervoor dat de kubus als grootte 0.75 heeft, render de scene, sla op als PNG, en upload naar Smartschool. 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. .. image:: images/blender/cuberow.png :width: 600 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. .. image:: images/blender/cuberowsized.png :width: 600 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. .. image:: images/blender/cubegrid.png :width: 600 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. .. literalinclude:: ./examples/blender/blender02.py :language: python :linenos: 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. .. image:: images/blender/text0.png :width: 600 Opgave: Scripting tekst aanpassen --------------------------------- Hoe passen de tekst nu aan zodat we iets anders kunnen tonen dan "Text"? .. literalinclude:: ./examples/blender/blender03.py :language: python :linenos: 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. .. image:: images/blender/text.png :width: 600 Opgave: Extruding --------------------------------- We zien de tekst nu wel in Blender, maar het ziet er nogal platjes uit... Hoe kunnen de tekst nu dikte geven? .. literalinclude:: ./examples/blender/textextrude.py :language: python :linenos: Op regel 7 gebruiken we de `data.extrude` property om de "dikte" van de tekst aan te passen. .. image:: images/blender/textextruded.png :width: 600 Zorg ervoor dat je naam getoond wordt ipv "Text", render de scene, sla op als PNG, en upload naar Smartschool. Opgave: Scrolling text --------------------------------- We willen de tekst nu animeren. Zoals we eerder zagen, kunnen we dit doen door `keyframes` te gebruiken. .. literalinclude:: ./examples/blender/textanim.py :language: python :linenos: 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. .. image:: images/blender/textanim.gif :width: 600 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. .. literalinclude:: ./examples/blender/textread.py :language: python :linenos: Laad je eigen tekst in ipv de Star Wars intro, render de scene als PNG en upload naar Smartschool. .. image:: images/blender/textread.png :width: 600 Opgave: Animating text loaded from file -------------------------------------------- En nu met de keyframe-code terug toegevoegd: .. literalinclude:: ./examples/blender/textreadanim.py :language: python :linenos: En het resultaat: .. image:: images/blender/scrollingtext.webm :width: 600