Que fait Rendu studio CAO ?
Transformez un assemblage CAO en tout ce dont une page produit a besoin : photos de studio photoréalistes, découpes transparentes, vidéo tournante et un visualiseur 3D auto-hébergé avec RA sur téléphone. L'ensemble du processus se résume à une commande, et tout s'exécute localement. Le GPU effectue le rendu ; aucune génération d'image par IA n'est impliquée, donc les pixels correspondent à la géométrie réelle.
python3 "${CLAUDE_SKILL_DIR}/scripts/studio.py" model.step --name "Nom du produit"
${CLAUDE_SKILL_DIR} correspond au dossier de cette compétence (Claude Code le renseigne automatiquement). Pour les autres agents, utilisez le dossier contenant ce fichier SKILL.md. Tous les chemins de scripts ci-dessous sont relatifs à ce dossier.
Quand l'utiliser
- « Faire un rendu de ce fichier STEP », « créer des visuels produits / packshots à partir de CAO », « rendu photoréaliste de cette pièce »
- « Mettre un modèle 3D de ceci sur notre site web », « le rendre rotatable », « vue RA du produit »
- « PNG transparent du produit », « découpe pour le catalogue », « vidéo tournante »
- Un artiste 3D souhaite une scène Blender modifiable pour la terminer à la main
Ne concerne pas : la modélisation d'une pièce de zéro (utilisez un outil CAO), la génération d'image à partir d'un prompt textuel, ou le rendu d'une scène qui n'est pas un produit (intérieurs, personnages).
Installation de cette compétence
- Claude Code, terminal :
claude plugin install cad-studio-renders --marketplace abchiaravalle/cad-studio-renders - Claude Code, application de bureau : demandez à Claude de cloner
https://github.com/abchiaravalle/cad-studio-rendersdans~/.claude/skills/cad-studio-renders(l'application de bureau et le terminal lisent tous deux ce dossier). - Tout autre agent : placez ce dossier dans le répertoire où cet agent charge les dossiers
SKILL.md.
Prérequis (vérifier d'abord)
blender --version # 4.2 ou plus récent. Si manquant : https://www.blender.org/download/
uv --version # lit le fichier CAO. Si manquant : https://docs.astral.sh/uv/
ffmpeg -version # nécessaire uniquement pour les vidéos --turntable
Si Blender est installé mais pas dans le PATH, définissez BLENDER=/chemin/vers/blender. Un GPU (Apple Silicon, NVIDIA, AMD) accélère les rendus de 5 à 20 fois ; le CPU fonctionne, mais est plus lent. La première exécution télécharge une bibliothèque CAO (~60 Mo) et un HDRI de studio (24 Mo, CC0) dans ~/.cache/cad-studio-renders/.
Flux de travail
- Mapper les matériaux avant de lancer un rendu. Les fichiers CAO portent rarement des finitions réelles.
Lisez le tableau. Chaque pièce affiche son préréglage et la raison. Les lignes se terminant parpython3 "${CLAUDE_SKILL_DIR}/scripts/studio.py" model.step --map-only(review me)sont des suppositions. Corrigez les mauvaises avec un fichier de règles (section suivante) et relancez--map-onlyjusqu'à ce que ce soit correct. - Aperçu (environ 10 s) :
--previewgénère un brouillon de 1000 px. Observez-le avant de passer des minutes sur les rendus finaux. Vérifiez : bon sens, pièces assemblées (rien de flottant), cadrage, matériaux. - Final : retirez
--preview. Les valeurs par défaut produisent un cliché héro de 2400 px sur fond, le même cliché en PNG transparent, un fichier.blendmodifiable et le package d'intégration web. - Vérifiez la sortie en pleine taille (zoomez sur la région la plus dense) avant de la livrer.
Correction des matériaux : le fichier de règles
{"rules": [
{"match": "frame|base", "preset": "powder_coat", "color": "#2b2f33"},
{"match": "^Cover", "preset": "plastic_textured"},
{"match": "motor", "preset": "motor_housing"},
{"match": "logo plate", "preset": "anodised_color", "color": "#c8102e"},
{"match": "spindle", "preset": "steel_polished", "params": {"roughness": 0.05}},
{"match": "safety guard", "hide": true},
{"match": "gantry", "offset_mm": [0, 0, 80]}
]}
match est une expression rationnelle insensible à la casse testée par rapport au nom de la pièce, au nom de l'instance et au chemin d'assemblage. La première règle correspondante l'emporte. params remplace toute valeur de préréglage (rugosité, aspect métallique, revêtement, anisotropie, chanfrein, relief...). offset_mm définit la position de cette pièce dans la vue éclatée. Les préréglages se trouvent dans assets/presets/materials.json ; ajoutez-en de nouveaux ici.
Sans règles, le mappeur automatique utilise, dans l'ordre : les mots-clés du nom de pièce (fixations, roulements, rails linéaires, vis à billes, moteurs, caoutchouc, verre...), puis la couleur CAO (les couleurs saturées deviennent de la peinture, les pièces partageant une couleur partagent une finition), puis la taille.
Options importantes
| Option | Effet |
|---|---|
--shots hero,front,side,top,iso,back,square,hero_low,detail | Angles de caméra (assets/presets/shots.json) |
--lighting studio_soft / high_key / dramatic / hdri_only | Éclairage (assets/presets/lighting.json) |
--backdrop 0.42 ou --backdrop "#1d1f22" | Fond gris ou couleur |
--size 4000 --aspect 16:9 | Taille et format de sortie |
--samples 768 | Plus d'échantillons = détails brillants plus nets, rendu plus long |
--exposure 0.3, --light-scale 1.2, --env-scale 0.8 | Luminosité |
--hdri photo_studio_01 ou --hdri mon.exr, --hdri-rotation 40 | Environnement de réflexion |
--dof 0 / --dof 2 | Flou d'arrière-plan désactivé / moins flou |
--bevel-scale 0 | Désactiver l'arrondi des bords (l'arrondi est ce qui rend la CAO réaliste) |
| `--detail-target "spindle | chuck"avec--shots detail` |
--no-transparent, --no-backdrop, --no-embed, --no-blend | Ignorer les livrables |
--clay | Passage en gris (vérification de l'éclairage/de la forme, revues de conception) |
--passes | EXR multicouche : profondeur, normales, occlusion ambiante, brouillard, cryptomatte (ID objet + matériau) |
--exploded 0.4 | Vue éclatée (pièces poussées depuis le centre ; les règles offset_mm priment) |
--turntable [--turntable-transparent] | MP4 + WebM 360° (alpha optionnel) + images PNG |
--up y | Forcer l'axe vertical si la détection automatique se trompe |
Ce que vous obtenez
<model>_studio/
hero.png 16 bits, sur fond studio
hero_transparent.png 16 bits RGBA, ombre portée douce conservée (--shadow none pour la supprimer)
hero_clay.png, hero_exploded.png, hero_passes.exr (sur demande)
<slug>_turntable.mp4 / .webm, turntable_frames/ (sur demande)
<slug>_scene.blend lumières, caméras, matériaux, fond, textures intégrées
materials_map.json chaque pièce -> préréglage + raison (modifier et relancer via --rules)
manifest.json paramètres, temps, liste de fichiers avec tailles et hachages
embed/ package de visualisation 3D auto-hébergé (voir ci-dessous)
Le fichier .blend est conçu pour être terminé à la main. Collections : Product (un objet vide par pièce, ce qui permet de déplacer ou d'animer chaque pièce individuellement) et Studio (fond, lumières, caméras). Chaque caméra est liée à un marqueur de timeline, donc le déplacement dans la timeline change de plan. Les matériaux sont des arbres de nœuds Principled BSDF simples. L'arrondi des bords est effectué par un nœud Bevel Shader, donc la géométrie reste exacte.
Le package d'intégration
embed/ est entièrement statique et n'effectue aucune requête externe. Il intègre Google <model-viewer> (Apache-2.0) et le décodeur Draco. Téléchargez le dossier n'importe où et collez snippet.html, ou placez embed.html dans une iframe. Il contient :
assets/<slug>.glb: compressé Draco, avec matériaux correspondant aux rendusassets/<slug>.usdz: RA sur iPhone/iPad via Quick Look- une image d'affiche
- le HDRI du studio pour les réflexions
index.html: une page de démonstration avec boutons de copie et téléchargements de rendus
Des notes d'hébergement pour WordPress, Shopify, Webflow et autres se trouvent dans embed/README.md.
Pièges (chacun a posé problème lors du développement)
- Modèle sur le côté ou à l'envers. SolidWorks, Inventor, Creo et Fusion utilisent Y vers le haut par défaut ; la plupart des autres utilisent Z vers le haut. Le convertisseur lit l'en-tête STEP pour deviner et affiche la supposition (
up axis: Y (written by Solidworks)). Si c'est faux, passez--up z(ouy,-y,x...). - Pièces qui dérivent / « vue éclatée accidentelle ». La cause était des transformations d'assemblage appliquées deux fois. Le constructeur de scène vérifie maintenant que le regroupement des pièces ne déplace pas la géométrie et abandonne si c'est le cas. Si vous modifiez le code de la scène, conservez cette vérification.
- Métal plat et irréaliste. Généralement l'éclairage, pas les matériaux : sans environnement, le métal n'a rien à réfléchir. Gardez un HDRI même avec des lumières de zone (
--env-scale, pas 0). - Premier rendu délavé. La puissance des lumières est adaptée à la taille du modèle ; si vous ajoutez des lumières personnalisées dans
lighting.json, la puissance est par (rayon du modèle en mètres)². Commencez bas et utilisez--preview. - Mauvaise supposition de matériau. Les noms de pièces cryptiques (
P-0042,ASSY_7_REV2, noms non anglais translittérés) ne correspondent pas aux mots-clés et se rabattent sur la couleur/la taille. C'est ce que signale(review me). Écrivez des règles pour ces pièces. - OCP 8 a cassé le lecteur (
TDF_LabelSequencea été déplacé). Le lecteur CAO bloquecadquery-ocp-novtk<8. Ne le débloquez pas sans retester. - Le modèle web a un aspect différent du rendu. glTF ne peut pas transporter de relief procédural, de chanfrein ou de bruit de rugosité, donc le modèle web ne reçoit que les valeurs de base. C'est normal ; l'image d'affiche est le vrai rendu.
- Gros assemblages (>5M triangles) : utilisez
--quality webpour les aperçus ; les rendus finaux fonctionnent toujours mais nécessitent de la RAM (environ 1 Go pour 2M triangles dans Blender).
Vérification avant livraison
- Ouvrez le PNG héro à 100 % et inspectez la région la plus dense : pas de faces noires, pas de facettes sur les courbes, pas de mouches volantes (points blancs).
- Ouvrez le PNG transparent sur un fond sombre et un fond clair : bords nets, ombre uniquement sous le produit.
- Servez
embed/localement (python3 -m http.server -d embed 8000), ouvrez-le et confirmez que le modèle se charge, tourne et n'a pas d'erreurs dans la console. Vérifiez sur un téléphone si la RA est importante. - Si
materials_map.jsoncontient encore des lignesreview me, mentionnez-le dans la remise.
Fichiers
scripts/studio.py: point d'entrée (CLI ci-dessus)scripts/cad_to_glb.py: STEP/IGES/BREP vers glTF avec noms d'assemblage et couleurs CAO (script uv)scripts/automap.py: décisions pièce vers matériau (Python pur, exécutable seul)scripts/blender_studio.py: scène, matériaux, lumières, caméras, rendus, .blend, export webscripts/package_embed.py: le package de visualisation auto-hébergéassets/presets/*.json: matériaux, éclairages, plans de caméraexamples/make_demo_model.py: construit l'étau de démonstration (géométrie originale, CC0)