---
title: Export composite
description: Exporter votre scène Blender en GLTF modulaire avec manifeste pour GS Framework.
---

import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';

L'export composite transforme votre scène Blender en un ensemble de fichiers GLTF modulaires accompagnés d'un manifeste `.scene.json`, prêts à être intégrés dans le moteur GS Framework.

---

## Concept

L'export analyse votre scène et la décompose en **sous-scènes** :

- Chaque **collection instanciée** (liée depuis un autre .blend ou locale) devient un fichier GLTF séparé
- Les **objets locaux** (hors collections) sont regroupés dans un GLTF additionnel
- Un fichier **manifeste** (`.scene.json`) décrit l'assemblage : quels GLTF, à quelle position, avec quelles propriétés

Le résultat est une structure de fichiers :

```
mon_export/
├── subscenes/
│   ├── Batiment_A.gltf
│   ├── Batiment_A.bin
│   ├── Arbre_Chene.gltf
│   ├── Arbre_Chene.bin
│   └── ...
├── textures/          (optionnel, si déduplication activée)
│   └── shared_textures...
└── MaScene.scene.json
```

---

## Lancer l'export

Deux accès équivalents :

- **File → Export → Composite Scene (.gltf + .scene.json)**
- Bouton **Export Composite Scene** dans l'[onglet GS Scene](/blender/interface/export-tab/) de la sidebar (panneau *Export de Scène*)

---

## Options d'export

| Option | Par défaut | Description |
|---|---|---|
| **Scene Name** | (nom du .blend) | Nom de la scène. Sert à nommer le manifeste `<nom>.scene.json`. Si vide, le nom du fichier Blender est utilisé. |
| **Apply Modifiers** | ✅ | Applique les modifiers Blender avant l'export (subdivision, miroir, etc.) |
| **Deduplicate Textures** | ❌ | Fusionne les textures identiques dans un dossier `textures/` partagé |
| **Convert Textures to DDS (BC7)** | ❌ | Convertit les textures en DDS BC7 via `texconv.exe` (uniquement si *Deduplicate Textures* est activé) |
| **DDS Max Resolution** | 1024 | Taille max des textures DDS (visible si la conversion DDS est activée) |
| **Single Subscene Mode** | ❌ | Exporte toute la scène comme un seul GLTF sans décomposition |
| **Skip Unchanged Subscenes** | ❌ | Ignore les sous-scènes dont le `.blend` source n'a pas changé (export incrémental) |
| **Include Dynamic Objects in GLTF** | ❌ | Inclut les props dans le GLTF au lieu de les exporter séparément en NML |
| **Keep Original Texture Files** | ❌ | Remet les fichiers texture d'origine (DDS, TGA…) à la place des PNG ré-encodés par Blender |

<Tabs>
<TabItem label="Mode décomposé (défaut)">

Chaque collection instanciée produit son propre fichier GLTF. Le manifeste décrit toutes les instances avec leurs transformations et propriétés.

**Avantages** :
- Fichiers GLTF réutilisables individuellement
- Mise à jour ciblée d'une sous-scène sans réexporter le tout
- Structure modulaire alignée avec l'architecture GS Framework

</TabItem>
<TabItem label="Mode single subscene">

Toute la scène est exportée dans un seul fichier GLTF. Le manifeste est simplifié.

**Avantages** :
- Export plus simple pour les scènes non modulaires
- Un seul fichier GLTF à gérer

</TabItem>
</Tabs>

---

## Propriétés d'instance

Chaque instance de collection peut porter des **propriétés custom** qui seront incluses dans le manifeste. Ces propriétés se gèrent depuis le panneau **Instance liée** de l'[onglet GS Object](/blender/interface/gsedit-tab/) (il n'apparaît que lorsqu'une instance de collection est sélectionnée).

### Propriétés reconnues

| Propriété | Type | Rôle dans le moteur |
|---|---|---|
| `replaceable` | Booléen | L'objet peut être remplacé dynamiquement |
| `slot_id` | Texte | Identifiant de slot pour le placement dynamique |
| `tags` | Texte | Tags séparés par des virgules (ex: `"decoration,outdoor"`) |
| `lod_group` | Texte | Groupe de niveau de détail (LOD) |
| `collision` | Booléen | L'objet a de la collision dans le moteur |
| `static` | Booléen | L'objet est statique (optimisations moteur) |

Toute autre propriété custom est également exportée dans un champ `custom_properties` du manifeste.

### Ajouter des propriétés

<Steps>

1. **Sélectionnez** une instance de collection dans le viewport.

2. Ouvrez l'onglet **GS Object** dans la sidebar.

3. Le panneau **Instance liée** affiche les informations de l'instance.

4. Utilisez les boutons **Quick Add Properties** pour ajouter rapidement les propriétés courantes (`replaceable`, `slot_id`, `tags`, `static`).

5. La liste **Current Properties** affiche toutes les propriétés de l'instance, chacune avec un bouton de suppression.

</Steps>

---

## Conversion des coordonnées

L'export convertit automatiquement le système de coordonnées de Blender (Z-up) vers celui de GS Framework (Y-up) :

| Blender | Export (Y-up) |
|---|---|
| Position (x, y, z) | (x, z, -y) |
| Rotation | Quaternion tourné de -90° autour de X |
| Échelle (x, y, z) | (x, z, y) |

Vous n'avez rien à faire — la conversion est automatique.

---

## Exporter une scène complète

<Steps>

1. **Organisez** votre scène en collections Blender. Chaque collection instanciée deviendra une sous-scène GLTF séparée.

2. **Ajoutez les propriétés** nécessaires aux instances (replaceable, slot_id, tags, etc.) via le panneau **Instance liée** (onglet GS Object).

3. **Configurez les matériaux** avec le [panneau GS Material](/blender/interface/shader-panel/) si nécessaire (shaders NSA, canaux de texture).

4. Allez dans **File → Export → Composite Scene** (ou cliquez sur le bouton **Export Composite Scene** dans l'onglet GS Scene).

5. Choisissez le **dossier de destination**.

6. Configurez les options :
   - Donnez un **nom de scène** si souhaité
   - Activez **Apply Modifiers** si vous avez des modifiers
   - Laissez **Deduplicate Textures** désactivé sauf besoin spécifique

7. Lancez l'export.

</Steps>

---

## Structure du manifeste

Le fichier `.scene.json` généré contient :

```json
{
  "format": "composite_scene_v1",
  "generator": "blender_nms_addon",
  "name": "MaScene",
  "children": [
    {
      "name": "Batiment_A_001",
      "source": "subscenes/Batiment_A.gltf",
      "transform": {
        "translation": [10.0, 0.0, -5.0],
        "rotation": [0.0, 0.707, 0.0, 0.707],
        "scale": [1.0, 1.0, 1.0]
      },
      "replaceable": true,
      "static": true,
      "tags": ["building", "commercial"]
    }
  ]
}
```

Chaque entrée dans `children` correspond à une instance dans la scène, avec sa source GLTF, sa transformation et ses propriétés.

---

## Bonnes pratiques

<Aside type="tip">

- **Structurez en collections** : plus votre scène est organisée en collections, plus l'export sera modulaire et réutilisable
- **Nommez vos collections** clairement : le nom de la collection devient le nom du fichier GLTF
- **Vérifiez l'analyse de scène** dans le panneau *Export de Scène* (onglet GS Scene) avant d'exporter — elle vous montre combien de collections, instances et objets locaux seront traités
- **Vérifiez vos matériaux** dans le [panneau GS Material](/blender/interface/shader-panel/) : les données shader y sont sauvegardées automatiquement, mais c'est l'occasion de contrôler les canaux de texture et le shader NSA

</Aside>
