Test OpenSCAD sur Apple Silicon

Cette discussion a été créée à partir de réponses séparées de : Apple Studio Display et Mac Studio.

Réponses

  • RocouRocou Membre

    Parmi ceux qui ont un Mac Studio ou un Mac M1, avez-vous testé OpenScad?
    Sur de gros projets, le rendu peut mettre 30 minutes sur mon iMac i9 de 2019. J'aimerais bien savoir si le M1 (et ses dérivés) permet un gain de temps significatif.

  • Je n'ai pas testé mais j'ai un Mac mini M1 et si tu veux je peux faire le rendu de ton fichier.

  • RocouRocou Membre

    Merci @Eric P.
    J'ai inclus des bibliothèques externes. Voici le code source. Dis moi combien de temps met le rendu. :-)
    Merci de ne pas t'offusquer, le code n'est pas encore très propre :-)

    /* pour trapèze à bords arrondis */
    use </Users/rob/Documents/OpenSCAD/libraries/dotSCAD-master/src/shape_trapezium.scad>;
    use </Users/rob/Documents/OpenSCAD/libraries/dotSCAD-master/src/path_extrude.scad>;
    use </Users/rob/Documents/OpenSCAD/libraries/dotSCAD-master/src/bezier_curve.scad>;
    
    $fn=50;
    
    
    // Grand trapèze
    t_step = 1;
    
    B = 37;
    b = 25;
    h = 20;
    epaisseur = 4;
    arrondi = 5;
    
    
    shape_pts = shape_trapezium(
        [B, b], h , corner_r = arrondi
    );
    
    
    
    p0 = [0, 0.001, 0];
    p1 = [0, 0, epaisseur];
    
    path_pts = bezier_curve(t_step,
        [p0, p1]
    );
    
    
    /*fin grand trapèze*/
    
    // Petit trapèze
    
    B_petit = 24;
    b_petit = 15;
    h_petit = 20;
    epaisseur_petit = 4;
    arrondi_petit = 5;
    
    
    shape_pts_petit = shape_trapezium(
        [B_petit, b_petit], h_petit , corner_r = arrondi
    );
    
    
    p0_petit = [0, 0.001, 0];
    p1_petit = [0, 0, epaisseur];
    
    path_pts_petit = bezier_curve(t_step,
        [p0_petit, p1_petit]
    );
    
    /*fin petit trapèze*/
    
    
    // joue
    module Joue(){
    difference()
        {
            cylinder (3,d=200, center=true);
            cylinder (4,d=50, center=true);
    
    
    
    //Petits trapèzes sur la joue
    Rayon = 100;
    circonference = 100*PI;
    nb_trapezes = 16;
    
    // "+6" permet de corriger les effets des arrondis
    // "0.8" permet de positionner les trapèze sur un cercle fictif 0.8 fois plus petit que la joue
    
    for (i = [-10 : (circonference+6)/nb_trapezes : circonference+(circonference/nb_trapezes)]){
                translate ([Rayon*0.8*cos(i),Rayon*0.8*sin(i),-2]) rotate ([0,0,i+90]) path_extrude(shape_pts_petit, path_pts_petit);
    }
    
    //Grands trapèzes sur la joue
    
    
    nb_grand_trapezes = 8;
    
    
    for (i = [0 : (circonference+6)/nb_grand_trapezes : circonference+(circonference/nb_grand_trapezes)]){
                translate ([Rayon*0.55*cos(i),Rayon*0.55*sin(i),-2]) rotate ([0,0,i+90]) path_extrude(shape_pts, path_pts);
    }
    
    }
    }
    
    Joue();
    
    difference()
        {
            translate ([0,0,35]) cylinder (70,d=90, center=true);
            translate ([0,0,35])cylinder (71,d=85, center=true);
    
    }
    
    translate ([0,0,71]) Joue();
    
     // le filament
    
    
    module ring(r, R) {
      rotate_extrude()
      translate([R,0,0])
      circle(r);
    }
    
    
    color( "Red", 1.0 ) {  
    scale([1,1.0,1.2])
    rotate([0,0,0])
    
    for (i=[2:1:57]){
    translate([0,0,i]) ring(0.5,45.5);
    }
    
    
    
    for (i=[40:1:90]){
    translate([0,0,2]) ring(0.5,i);
    }
    
    
    for (i=[40:1:90]){
    translate([0,0,69]) ring(0.5,i);
    }
    
    
    for (i=[2:1:68]){
    translate([0,0,i]) ring(0.5,90);
    }
    }
    
  • klogklog Membre
    mars 2022 modifié #5

    Est-ce qu'il y a une version Apple Silicon d'OpenSCAD ?
    Parce que là, je suis en train de rendre ton fichier sur la dernière version d'OpenSCAD, installée via Homebrew sur mon MBP M1Max, et elle marche via rosetta.
    Le rendu en est à 1h10 !

    J'ai aussi eu pas mal de warning :

    WARNING: Can't open library '/Users/rob/Documents/OpenSCAD/libraries/dotSCAD-master/src/shape_trapezium.scad'.
    WARNING: Can't open library '/Users/rob/Documents/OpenSCAD/libraries/dotSCAD-master/src/path_extrude.scad'.
    WARNING: Can't open library '/Users/rob/Documents/OpenSCAD/libraries/dotSCAD-master/src/bezier_curve.scad'.
    Compiling design (CSG Tree generation)...
    WARNING: Ignoring unknown function 'shape_trapezium' in file , line 19
    WARNING: Ignoring unknown function 'bezier_curve' in file , line 28
    WARNING: Ignoring unknown function 'shape_trapezium' in file , line 44
    WARNING: Ignoring unknown function 'bezier_curve' in file , line 52
    WARNING: Ignoring unknown module 'path_extrude' in file , line 77
    WARNING: Ignoring unknown module 'path_extrude' in file , line 77
    WARNING: Ignoring unknown module 'path_extrude' in file , line 77
    WARNING: Ignoring unknown module 'path_extrude' in file , line 77
    WARNING: Ignoring unknown module 'path_extrude' in file , line 77
    WARNING: Ignoring unknown module 'path_extrude' in file , line 87
    WARNING: Ignoring unknown module 'path_extrude' in file , line 87
    WARNING: Ignoring unknown module 'path_extrude' in file , line 87
    WARNING: Ignoring unknown module 'path_extrude' in file , line 87
    WARNING: Ignoring unknown module 'path_extrude' in file , line 87
    WARNING: Ignoring unknown module 'path_extrude' in file , line 77
    WARNING: Ignoring unknown module 'path_extrude' in file , line 77
    WARNING: Ignoring unknown module 'path_extrude' in file , line 77
    WARNING: Ignoring unknown module 'path_extrude' in file , line 77
    WARNING: Ignoring unknown module 'path_extrude' in file , line 77
    WARNING: Ignoring unknown module 'path_extrude' in file , line 87
    WARNING: Ignoring unknown module 'path_extrude' in file , line 87
    WARNING: Ignoring unknown module 'path_extrude' in file , line 87
    WARNING: Ignoring unknown module 'path_extrude' in file , line 87
    WARNING: Ignoring unknown module 'path_extrude' in file , line 87

  • klogklog Membre

    2h12 et ça continue... C'est censé prendre combien de temps ?

  • klogklog Membre

    Il doit il y avoir un problème. Me suis arrêté à 4h09, désolé...

  • Bon Rocou, avant de faire l'essai, j'attends ton retour après les posts de blog.

  • RocouRocou Membre
    mars 2022 modifié #9

    @klog a dit :
    Est-ce qu'il y a une version Apple Silicon d'OpenSCAD ?
    Parce que là, je suis en train de rendre ton fichier sur la dernière version d'OpenSCAD, installée via Homebrew sur mon MBP M1Max, et elle marche via rosetta.
    Le rendu en est à 1h10 !

    J'ai aussi eu pas mal de warning :

    WARNING: Can't open library '/Users/rob/Documents/OpenSCAD/libraries/dotSCAD-master/src/shape_trapezium.scad'.

    Oui, il y a une version Apple Silicon, qu'il faut récupérer sur le site de OpenScad (zone "Development Snapshots")
    Concernant les warnings, c'est normal, il faut préalablement récupérer les bibliothèques chez leurs développeurs respectifs, puis les copier chez soi.
    Je peux les fournir, bien évidemment.

    Si vous voulez accélèrer considérablement le rendu, il faut modifier la ligne suivante:
    $fn = 50

    Vous mettez un chiffre plus petit à la place de 50. Par exemple 20. Le rendu sera moche mais vous pourrez ainsi rapidement vérifier que tout fonctionne.
    (Pour que le rendu soit magnifique, il faudrait que je puisse mettre $fn = 200 mais dans ce cas, j'en ai pour des jours de calculs... D'où mon intérêt pour le M1)

  • klogklog Membre
    mars 2022 modifié #10

    OK... Ca marche... Cette version s'exécute bien sur le M1.
    Premier test avec $fn = 10; -> 2m11s
    Je teste avec 20 puis 50

  • klogklog Membre

    $fn = 20; -> 7m05s

    Tous les cores du CPU semblent exploités : il y a 10 threads actifs en permanence.

  • RocouRocou Membre
    mars 2022 modifié #12

    @klog a dit :
    $fn = 20; -> 7m05s

    Tous les cores du CPU semblent exploités : il y a 10 threads actifs en permanence.

    Wow! Avec $fn=20 mon iMac i9 3,6GHz de 2019 met plus de 40 minutes! :o

    EDIT: je relativise car en installant la version de développement, universelle Intel/M1 le calcul ne prends plus que 12 minutes. Par conséquent, pour cet objet, le calcul est 58% plus rapide sur le M1. C'est pas mal du tout mais moins que je ne l'espérais. Faudrait voir avec le M1 Max (et l'Ultra mais je ne suis pas sûr de trouver un utilisateur :D )

  • klogklog Membre

    @Rocou a dit :
    Faudrait voir avec le M1 Max

    Je mène les tests avec un M1Max

  • klogklog Membre
    mars 2022 modifié #14

    $fn = 50; -> 1h19m03s

  • Sur un Mac mini M1 2020 avec 8 Go :
    $fn=10; => Total rendering time: 0:02:11.440 avec un warning (Object may not be a valid 2-manifold and may need repair!
    $fn=20; => Total rendering time: 0:07:07.857 avec le même warning
    $fn=50; => Total rendering time: 1:06:07.402 avec le même warning

    Voilà !

  • Tant de temps de calcul pour un résultat qui ferait rire n'importe quel moteur 3D un peu moderne ?! C'est quoi le concept derrière tout ça ?

  • C'est vrai que je n'ai pas bien vu la différence entre la prévisualisation qui est quasi instantanée et le rendu.

  • klogklog Membre
    mars 2022 modifié #18

    @Pyroh a dit :
    Tant de temps de calcul pour un résultat qui ferait rire n'importe quel moteur 3D un peu moderne ?! C'est quoi le concept derrière tout ça ?

    C'est un générateur géométrique (type CAO) piloté par des scripts, pas un moteur de rendu au sens classique du terme. D'ailleurs le GPU ne fonctionne pas pendant le rendu... Seulement le CPU.

    La preview utilise le GPU, mais produit une approximation du modèle 3D avec des défauts. Et ce n'est qu'une visualisation. contrairement au rendu, qui calcule le vrai modèle 3D résultant des opérations géométrique du script (opération booléenne, CSG, extrusion, tesselation, etc.). Cette géométrie, résultat du rendu, peut être exportée.

    Le modèle géométrique généré, une fois rendu et exporté, peut être visualisé en temps réel avec n'importe quel soft.

  • RocouRocou Membre
    mars 2022 modifié #19

    Merci à tous pour vos tests.
    Pour $fn=50 j'obtiens 1h58 avec mon i9. Quasiment le double du M1. Curieusement le M1 Max est plus lent.
    Comme le souligne @klog l'application n'utilise pas le GPU pour le calcul de rendu.

    C'est lent pour les raisons que donne @klog , le résultat doit être exportable pour une imprimante 3D. C'est donc un objet 3D complet, sans face ou détail cachés.
    Mais surtout, les spires, qui représentent, vous l'aurez compris, le filament, sont autant de courbes de bezier. Si on enlève cette représentation du filament, le rendu est immédiat. Il faut que j'optimise cette partie.

  • @klog a dit :

    @Pyroh a dit :
    Tant de temps de calcul pour un résultat qui ferait rire n'importe quel moteur 3D un peu moderne ?! C'est quoi le concept derrière tout ça ?

    C'est un générateur géométrique (type CAO) piloté par des scripts, pas un moteur de rendu au sens classique du terme. D'ailleurs le GPU ne fonctionne pas pendant le rendu... Seulement le CPU.

    La preview utilise le GPU, mais produit une approximation du modèle 3D avec des défauts. Et ce n'est qu'une visualisation. contrairement au rendu, qui calcule le vrai modèle 3D résultant des opérations géométrique du script (opération booléenne, CSG, extrusion, tesselation, etc.). Cette géométrie, résultat du rendu, peut être exportée.

    Le modèle géométrique généré, une fois rendu et exporté, peut être visualisé en temps réel avec n'importe quel soft.

    Merci pour les précisions 😃 Néanmoins même si on parle de génération de modèle ça me paraît quand même beaucoup. D'autant que je ne comprends pas pourquoi générer un tel modèle si c'est pour calculer des parcours d'outil... Y'a un truc qui m'échappe mais c'est pas très grave 😄

  • klogklog Membre

    @Rocou a dit :
    Curieusement le M1 Max est plus lent.

    J'ai noté... Normalement on passe de 6+2 cores à 8+2 cores.

    Deux éventualités : j'ai laissé le portable passer en veille, et j'ai utilisé Safari à un moment pendant le calcul. J'ai remarqué que le nombre de threads actifs passait alors de 10 à 7 ou 8... Il y a vraisemblablement au moins 2 coeurs du CPU qui ont été alloués à Safari.
    J'essaierai de refaire le calcul Sans être devant la machine et en bloquant la mise en veille.

  • klogklog Membre

    @Pyroh a dit :

    @klog a dit :

    @Pyroh a dit :
    Tant de temps de calcul pour un résultat qui ferait rire n'importe quel moteur 3D un peu moderne ?! C'est quoi le concept derrière tout ça ?

    C'est un générateur géométrique (type CAO) piloté par des scripts, pas un moteur de rendu au sens classique du terme. D'ailleurs le GPU ne fonctionne pas pendant le rendu... Seulement le CPU.

    La preview utilise le GPU, mais produit une approximation du modèle 3D avec des défauts. Et ce n'est qu'une visualisation. contrairement au rendu, qui calcule le vrai modèle 3D résultant des opérations géométrique du script (opération booléenne, CSG, extrusion, tesselation, etc.). Cette géométrie, résultat du rendu, peut être exportée.

    Le modèle géométrique généré, une fois rendu et exporté, peut être visualisé en temps réel avec n'importe quel soft.

    Merci pour les précisions 😃 Néanmoins même si on parle de génération de modèle ça me paraît quand même beaucoup. D'autant que je ne comprends pas pourquoi générer un tel modèle si c'est pour calculer des parcours d'outil... Y'a un truc qui m'échappe mais c'est pas très grave 😄

    Tu génères une représentation 3D propre, 2-manifold ou proche de 2-manifold, sans facette à l'intérieure de la matière par exemple, sans facette dégénérée ou croisée, etc.

  • PyrohPyroh Membre
    mars 2022 modifié #23

    @klog a dit :

    @Pyroh a dit :

    @klog a dit :

    @Pyroh a dit :
    Tant de temps de calcul pour un résultat qui ferait rire n'importe quel moteur 3D un peu moderne ?! C'est quoi le concept derrière tout ça ?

    C'est un générateur géométrique (type CAO) piloté par des scripts, pas un moteur de rendu au sens classique du terme. D'ailleurs le GPU ne fonctionne pas pendant le rendu... Seulement le CPU.

    La preview utilise le GPU, mais produit une approximation du modèle 3D avec des défauts. Et ce n'est qu'une visualisation. contrairement au rendu, qui calcule le vrai modèle 3D résultant des opérations géométrique du script (opération booléenne, CSG, extrusion, tesselation, etc.). Cette géométrie, résultat du rendu, peut être exportée.

    Le modèle géométrique généré, une fois rendu et exporté, peut être visualisé en temps réel avec n'importe quel soft.

    Merci pour les précisions 😃 Néanmoins même si on parle de génération de modèle ça me paraît quand même beaucoup. D'autant que je ne comprends pas pourquoi générer un tel modèle si c'est pour calculer des parcours d'outil... Y'a un truc qui m'échappe mais c'est pas très grave 😄

    Tu génères une représentation 3D propre, 2-manifold ou proche de 2-manifold, sans facette à l'intérieure de la matière par exemple, sans facette dégénérée ou croisée, etc.

    Ça je peux comprendre pour de l'impression 3D si t'as pas de driver direct pour l'imprimante et pour le passer par un slicer. Mais on est bien d'accord que c'est une hérésie de travailler de la sorte avec un tour/fraiseuse CN (j'en ai pas fait depuis 20 ans et mon bac ça a peut-être changé depuis) ?

    En relisant la réponse de @Rocou je crois que je comprends pourquoi ça met autant de temps 😄

Connectez-vous ou Inscrivez-vous pour répondre.