Creaties > Onderhanden werk

Van een database naar een animatie

(1/7) > >>

ExLibris:
Professioneel werk ik met een pakket dat SAS heet. Het is bedoeld voor datawarehousing en data analyse. Als hobby vind ik het leuk om met Blender te spelen. Tot nu hadden deze twee pakketten eigenlijk geen overlap, maar ik heb nu het idee om deze met elkaar te gaan verbinden. Wat ik eigenlijk wil is dat aan de hand van een dataset en parameters ik een complete animatie in Blender zou moeten kunnen genereren. Vrijwel alles moet dan dus procedureel zijn, want ik weet van tevoren niet welke waarden de dataset zal gaan bevatten.

Voor zover ik het nu kan bedenken moet ik dus oplossingen zoeken voor de volgende stappen:

- Zet database om in een leesbaar formaat voor Blender (CSV, Json)
- Genereer aan de hand van de data en parameters een Python script dat in Blender: objecten aanmaakt, materialen toevoegt, objecten animeert, camera bedient, animatie genereert, et cetera.
- Ik wil graag staafdiagrammen, lijndiagrammen, heat maps, pie charts en kaartjes kunnen maken.
- Ik wil kijken of ik de objecten zelf ook kan animeren
- Ik wil dmv een parameter de sfeer, kleurgebruik, bedrijfslogo en dergelijke aan kunnen passen, misschien kan ik hiervoor templates maken.
- Laat via de command line de animatie genereren
- Voeg verschillende animaties samen tot een filmpje

Eigenlijk wil ik heel deze pipeline met de druk van een knop uit kunnen voeren of elke dag kunnen schedulen.

Een animatie als dit zou kunnen draaien op een website, een powerpoint,  of op een informatiebord achter een balie of zo.

Om hier mee een start te maken, ben ik begonnen met Python in Blender. Ik had tot zo ver eigenlijk nog nooit met Python gewerkt (wel veel geprogrammeerd in andere talen). Vandaag heb ik dus de stoute schoenen aangetrokken en ben begonnen met het leren van Python. Ik wilde aan de hand van parameters helemaal procedureel een 3D staafdiagram maken .

Tot zo ver ben ik nu gekomen:





Om dit te genereren gebruik ik de volgende Python code. Waarbij ik alleen van tevoren drie materialen heb aangemaakt
-Bar_GYR_noframe
-Plane
-Text

Op termijn moeten deze ook helemaal procedureel worden.

Voor de hoogte van de bars en de tekstelementen moet straks een CSV of Json uitgelezen worden, nu zijn de waarden nog random, dus elke keer als ik het script uitvoer ziet de staafdiagram er weer anders uit.
:


--- Code: ---import bpy
import random
from math import radians

#Start with a clean environment


bpy.ops.object.select_all(action='SELECT')


bpy.ops.object.delete(use_global=False)

#Set parameters

numbars=10

#Add objects

#Plane

bpy.ops.mesh.primitive_plane_add(size=100, enter_editmode=False, align='WORLD', location=(0, 0, 0), scale=(1, 1, 1))
mat = bpy.data.materials.get("Plane")
bpy.context.active_object.data.materials.append(mat)
#Lights

bpy.ops.object.light_add(type='POINT', radius=10, align='WORLD', location=(0, 0, 5), scale=(1, 1, 1))
bpy.context.object.data.energy = 1000

bpy.ops.object.light_add(type='POINT', radius=10, align='WORLD', location=(6, 3, 5), scale=(1, 1, 1))
bpy.context.object.data.energy = 100

#Camera

bpy.ops.object.camera_add(enter_editmode=False, align='VIEW', location=(25 , -15 , 12 ),
rotation=(radians(78), 0, radians(44)), scale=(1, 1, 1))


bpy.context.scene.cursor.location = (0,0,0)

for f in range (0, numbars):
    height=random.randint(1,500)/100
    print (height)
    bpy.ops.mesh.primitive_cube_add(size=2, enter_editmode=False, align='WORLD',
    location=(0,0,1), scale=(1, 1, 1))
   
    bpy.ops.object.origin_set(type='ORIGIN_CURSOR', center='MEDIAN')
   
    bpy.ops.transform.resize(value=(1, 1, height), 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, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)

    bpy.ops.transform.translate(value=(0, (f*2.3), 0.1), orient_type='GLOBAL', orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', constraint_axis=(False, True, False), mirror=True, use_proportional_edit=False, proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)
    mat = bpy.data.materials.get("Bar_GYR_noframe")
    bpy.context.active_object.data.materials.append(mat)

   
#    Add a bevel to the mesh
    bpy.ops.object.mode_set(mode = 'EDIT')
    bpy.ops.mesh.bevel(offset=0.03, offset_pct=0, segments=5, release_confirm=True)

    bpy.ops.object.mode_set(mode = 'OBJECT')
    bpy.ops.object.shade_smooth()
   

   
    bpy.ops.object.text_add(enter_editmode=False, align='WORLD', location=(1, (f*2.3), 0.1), scale=(1, 1, 1))
    mat = bpy.data.materials.get("Text")
    bpy.context.active_object.data.materials.append(mat)
    bpy.context.object.data.body = "Object "+str(f)



--- Einde van code ---

IJp:
Dit gaat allemaal boven mijn pet maar we hebben hier het lid PKHG en dat is Peter die is helemaal weg van Python.
Ik hoop dat Peter dit topic ziet.
Maar in ieder geval succes met je project.

ExLibris:
Gisteravond weer een stukje verder gekomen. Ik heb een tamelijk willekeurig open source bestand gedownload. In mijn geval het COVID-19 rioolwaterbestand van de RIVM.

https://data.rivm.nl/covid-19//

Dat ziet er ongeveer zo uit:


--- Code: ---Date_measurement,RWZI_AWZI_code,RWZI_AWZI_name,X_coordinate,Y_coordinate,Postal_code,Security_region_code,Security_region_name,Percentage_in_security_region,RNA_per_ml,Representative_measurement,RNA_flow_per_100000

2020-03-30,32002,Tilburg,132554,401565,5048TD,VR20,Midden- en West-Brabant,1,1837,TRUE,

2020-03-31,3010,Assen,234705,558203,9403AK,VR03,Drenthe,1,2254,TRUE,

2020-03-31,1033,Garmerwolde,240219,585040,9798TC,VR01,Groningen,1,427,TRUE,

2020-03-31,2032,Harlingen,159027,576146,8861KT,VR02,Friesland,1,869,TRUE,

2020-03-31,2011,Leeuwarden,184401,578940,8937AN,VR02,Friesland,1,424,TRUE,

2020-03-31,1008,Stadskanaal,260571,559393,9501LH,VR01,Groningen,1,200,TRUE,
--- Einde van code ---

Omdat deze data ook de X- en Y coördinaten (Rijksdriehoeksmeting, https://nl.wikipedia.org/wiki/Rijksdriehoeksco%C3%B6rdinaten) van de rioolzuiveringsinstallaties bevat, had ik het idee om deze te plotten op een kaartje van Nederland. Op termijn wil ik de bars laten animeren en door de scene vliegen bijvoorbeeld en een animatie per veiligheidsregio maken.

Dit is het voorlopige resultaat. Alles wordt door het Python script gegenereerd (ik gooi alle objecten weg zodra het script start), behalve de materialen.



koos2:
Knap hoor, enige jaloersheid voel ik nu wel.

ExLibris:

--- Citaat van: koos2 op 08 december  2020, 19:41:01 pm ---Knap hoor, enige jaloersheid voel ik nu wel.

--- Einde van citaat ---

Zouden jullie het leuk vinden als ik een Youtube filmpje maak of een keer een uitleg geef in Teams of zo? Dan moet ik wel al wat verder zijn dan nu vind ik, ik ben nog teveel aan het prutsen en uitproberen op het moment.

Navigatie

[0] Berichtenindex

[#] Volgende pagina

Naar de volledige versie