Pyramide de Sierpinsky

Fractale 3D basée sur le triangle de Sierpinski.

Principe grossier : à chaque itération, on remplace chaque pyramide par cinq pyramides plus petites empilées.

Génération des modèles : Maya, Mel-Python.
Images : 3ds max, VRay.

Itération 0 1 2 3 4 5 6 7
Éléments 1 5 25 125 625 3.125 15.625 78.125
Polygones 5 25 125 625 3.125 15.625 78.125 390.625
Fichier .obj 1.1 Ko 5.2 Ko 25.5 Ko 130 Ko 675 Ko 3.4 Mo 17.4 Mo ~95 Mo
Génération 1) < 1 sec < 1 sec < 1 sec < 1 sec 1 sec 2 sec 9 sec ?
Rendu 2) < 30 sec < 30 sec < 30 sec < 30 sec 30 sec 45 sec 90 sec ?
sierpinskiPyramid.py
##
# Sierpinski Pyramid
# p01 2009
# Maya python script
##
 
from maya.cmds import *
from math import *
 
def sierpinskiPyramid(x, y, z, sz, it, lvl=0):
    if lvl==it:
        polyPyramid(w=sz)
        move(x, y, z)
        rotate(0, '45deg', 0)
    else:
        r = sz / 4.0
        h = sz / 2.84
        childs = [[0,h/2,0],[r,-h/2,r],[r,-h/2,-r],[-r,-h/2,r],[-r,-h/2,-r]]
        for c in childs:
            sierpinskiPyramid(x+c[0],y+c[1],z+c[2],sz/2.0,it,lvl+1)
 
def run(it=0, sz=50.0):
    if objExists('pPyramid1'):
        select(all=True)
        delete()
    sierpinskiPyramid(0, 0, 0, sz, it)
    select(cl=True)
    viewFit()
 
def win():	
    window(t='Sierpinski Pyramid')
    columnLayout(rs=20)
    intSliderGrp(l='Iteration',
        field=1, min=0, max=4, v=0,
        cc=lambda x:run(int(x)))        
    showWindow()
 
run()
win()

→ L'éponge de Menger a été rendue selon la même méthode : Éponge de Menger

1)
Ces temps correspondent à la génération du modèle sous Maya, pas au rendu des images. Temps enregistrés sur un i7 860 à 2.8 GHz.
2)
Ces temps correspondent au rendu des images avec VRay sous 3ds max. Temps enregistrés sur un i7 860 à 2.8 GHz.