This page is an archive of iMAL's wiki that operated between 2012 and 2022. It documented projects, residencies and workshops mostly taking place at iMAL's Fablab.

Older & newer Fablab projects are now found at fablab.imal.org

Introduction à la Modélisation 3D : Blender

Objet template pour le workshop (voir gallerie), rassemblant plusieurs difficultés:

  • jonctions entre géométries différentes
  • utilisation de modifiers
  • duplication d'objets
  • travail sur des objects creux

Voir http://polymorph.cool/wp-content/uploads/stupid-and-difficult-object.zip pour le fichier blender.

Démo animation: http://wiki.frankiezafe.org/index.php?title=Glitch_3D#bizarros_priants

Pour lancer blender à partir du terminal sur mac osx:

  • aller dans les apllications
  • trouver blender
  • cliquer droit et choisir: "Afficher le contenu du paquet"
  • Rentrer dans le dossier "Content/MacOS"
  • Cliquer droit sur "blender" et choisir "Ouvrir avec terminal"

Documentation de l'API python de blender:

Materials:

Fluids:

Notes

source: http://piratepad.be/p/blender-modelling

Retrouver tous les raccourcis claviers de blender:
https://duckduckgo.com/?q=blender+cheat+sheet&t=lm&ia=cheatsheet&iax=1

demandes
- tee de golf et la balle
- verre à cocktail avec goutte
- plante avec pot
- monture de lunettes
- animation de texte 2D < outils d'animation
- importation de scan
- game VR -> threejs
- cnc > pieds de meubles
- bouteille klein
- python programming
painting
pour travailler avec le paint mode de blender:
- créer un dépliage UV pour l'objet
- créer une nouvelle image de 102x1024 dans l'image editor
- ajouter un material à l'objet (de préférence SHADELESS)
- ajouter une texture de type image au material
- lier l'image créée à cette texture
- passer en mode de rendu "material" dans la vue 3D
- passer en mode d'édtion "TEXTURE PAINT"
scirpts pythons, voir le zip 20160721-imal-ws-day3

/// example 1, duplication d'objets

import bpy
for z in range( 0,1 ):
    for y in range( 0,1 ):
        for x in range( 0,10 ):
            bpy.ops.mesh.primitive_cube_add(view_align=False, enter_editmode=False, location=( x * 3, y * 3, z * 3 ), layers=(False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False))
/// example 2, duplication d'objets avec décallage une ligne sur 2
import bpy
for z in range( 0,1 ):
    for y in range( 0,10 ):
        for x in range( 0,10 ):
            cx = x * 3
            if ( y / 2 ) == round( y / 2 ):
                cx = cx + 1.5
            bpy.ops.mesh.primitive_cube_add(view_align=False, enter_editmode=False, location=( cx, y * 3, z * 3 ), layers=(False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False))
// example 3, duplication d'objets avec positionnement aléatoire 
import bpy
import mathutils
for z in range( 0,1 ):
    for y in range( 0,10 ):
        for x in range( 0,10 ):
            cx = x * 3 + (( mathutils.noise.random() - 0.5 ) * 2 )
            cy = y * 3 + (( mathutils.noise.random() - 0.5 ) * 2 )
            cz = z * 3 + (( mathutils.noise.random() - 0.5 ) * 2 )
            rx = (( mathutils.noise.random() - 0.5 ) * 2 ) * 180
            ry = (( mathutils.noise.random() - 0.5 ) * 2 ) * 180
            rz = (( mathutils.noise.random() - 0.5 ) * 2 ) * 180
            r = 1 + mathutils.noise.random() * 2.5
            bpy.ops.mesh.primitive_cube_add( radius=r, view_align=False, enter_editmode=False, rotation=( rx, ry, rz), location=( cx, cy, cz ), layers=(False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False))
// example 4 - with spheres
import bpy
import mathutils
for z in range( 0,1 ):
    for y in range( 0,10 ):
        for x in range( 0,10 ):
            cx = x * 3 + (( mathutils.noise.random() - 0.5 ) * 2 )
            cy = y * 3 + (( mathutils.noise.random() - 0.5 ) * 2 )
            cz = z * 3 + (( mathutils.noise.random() - 0.5 ) * 2 )
            rx = (( mathutils.noise.random() - 0.5 ) * 2 ) * 180
            ry = (( mathutils.noise.random() - 0.5 ) * 2 ) * 180
            rz = (( mathutils.noise.random() - 0.5 ) * 2 ) * 180
            r = 1 + mathutils.noise.random() * 2.5
            #bpy.ops.mesh.primitive_cube_add( radius=r, view_align=False, enter_editmode=False, rotation=( rx, ry, rz), location=( cx, cy, cz ), layers=(False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False))
            bpy.ops.mesh.primitive_uv_sphere_add( size=r, segments=10, ring_count=5,view_align=False, enter_editmode=False, rotation=( rx, ry, rz), location=( cx, cy, cz ), layers=(False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False))
// example 5 - randomise mesh
import bpy
import mathutils
ob = bpy.context.scene.objects.active
#print( ob )
#bpy.ops.object.mode_set(mode='EDIT')
#print( ob.data.vertices )
for v in ob.data.vertices:
    print( v.co )
    v.co.z = v.co.z + mathutils.noise.random() * 0.1
//example 6 - randomise mesh
import bpy
import mathutils
ob = bpy.context.scene.objects.active
#print( ob )
#bpy.ops.object.mode_set(mode='EDIT')
#print( ob.data.vertices )
for v in ob.data.vertices:
    print( v.co )
    pusher = mathutils.Vector( v.normal )
    pusher *= mathutils.noise.random() * 0.2
    v.co = v.co + pusher

Howtos & Resources

Gallery