Jean-Pascal M.

La meilleure façon de ne pas avancer est de suivre une idée fixe (J. Prévert)

Micromega city – Empilement et habitats

Posted by Jean-Pascal sur 3 juillet 2016

Pour continuer dans cette logique de démonstration de force par répétition et variation, la gravité peut également jouer un rôle efficace. Que se passe-t-il lorsque des formes sont empilées ? Ce minimum de réalisme permet de laisser supposer qu’il s’agit d’un monde doté de caractéristiques physiques incluant la gravité. Dès lors que l’image représente quelque chose réel ou imaginaire, on se pose la question de l’observateur. Voici deux exemples, des logements empilés, s’inspirant des unités d’habitation de Le Corbusier.

Le résultat étant plutôt effrayant.

Pour obtenir l’image ci-dessus, j’ai développé un de mes tous premiers codes en python, pour Blender. J’ai mis le code à la fin de l’article. Le principe est simple : dans un tableau de 30 lignes et 30 colonnes est dupliqué un objet créé dans Blender. Sur chacun des objets, un objet généralement plus petit est posé, jusqu’à une certaine limite de 50 objets empilés. Chaque objet est légèrement différent en taille et en orientation.

Pour ajouter du réalisme, 50% des habitats ont sont éclairés. Pour les exemples qui suivent, je suis parti d’un type d’habitat plus rond et plus fantaisiste :

 

Avec un point de vue plus lointain et en supprimant les points de fuite, on obtient une « skyline » plus proche d’un village de bisounours.

Ce qui est marrant avec ce type de villes, c’est qu’il y a moins de petits logements que de grands, ce qui est l’inverse des proportions qu’on trouve généralement dans la nature. Si l’on imagine que, chez l’homme, les disparités de taille soient beaucoup plus importantes que ce que nous connaissons. Les humains les plus petits feraient 30 cm de haut quand les plus grands pourraient atteindre les 10 m de haut. Voila la logique de Micromega city ! A quoi ressemblerait une telle ville si tous vivaient en harmonie ?

Le code Python pour empiler des formes sous Blender est en dessous. A bientôt.

import bpy

from bpy import context

from math import sin, cos, radians

import random

 

cubeobject = bpy.ops.mesh.primitive_cube_add

metaballobject = bpy.ops.mesh.metaball_add

cursor = context.scene.cursor_location

 

nbX = 30

nbY = 30

nbZ = 50

 

matrixSpace = 5

spaceFactor = 0.5

 

habitat = bpy.data.objects[‘Habitat’]

habitatLamp = bpy.data.objects[‘Lamp’]

 

forcursorX in range(0,nbX):

forcursorY in range(0,nbY):

size = random.random()*matrixSpace * spaceFactor

h = 0

x = cursorX*matrixSpace + random.random()*matrixSpace + matrixSpace/2

y = cursorY*matrixSpace + random.random()*matrixSpace + matrixSpace/2

while (size>0.1):

h = h + size

bpy.ops.object.select_all(action=’DESELECT’)

habitat.select = True

bpy.context.scene.objects.active = habitat

bpy.ops.object.duplicate()

bpy.context.object.location[0] = x

bpy.context.object.location[1] = y

bpy.context.object.location[2] = h

bpy.context.object.hide = False

bpy.context.object.hide_render = False

bpy.context.object.dimensions = size*2, size*2, size*2

bpy.context.object.rotation_euler[2] = random.random()*6.28

if (random.random()<0.5):

bpy.ops.object.select_all(action=’DESELECT’)

habitatLamp.select=True

bpy.context.scene.objects.active = habitatLamp

bpy.ops.object.duplicate()

bpy.context.object.location[0] = x

bpy.context.object.location[1] = y

bpy.context.object.location[2] = h

bpy.context.object.hide = False

bpy.context.object.hide_render = False

h = h + size

size = size *random.random() *1.2

x =x + (random.random()*size – size/2)/1.5

y =y + (random.random()*size – size/2)/1.5

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

 
%d blogueurs aiment cette page :