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.
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);
}
}
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
@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)
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!
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 )
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
@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 à 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.
@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 😄
@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.
@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.
@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 😄
Réponses
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.
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 :-)
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 :
2h12 et ça continue... C'est censé prendre combien de temps ?
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.
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)
OK... Ca marche... Cette version s'exécute bien sur le M1.
Premier test avec $fn = 10; -> 2m11s
Je teste avec 20 puis 50
$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!
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 )
Je mène les tests avec un M1Max
$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.
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 à 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.
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 😄
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.
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 😄