feat: Initial commit
This commit is contained in:
21
.gitignore
vendored
Normal file
21
.gitignore
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# build output
|
||||||
|
dist/
|
||||||
|
# generated types
|
||||||
|
.astro/
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# logs
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
|
||||||
|
|
||||||
|
# environment variables
|
||||||
|
.env
|
||||||
|
.env.production
|
||||||
|
|
||||||
|
# macOS-specific files
|
||||||
|
.DS_Store
|
||||||
4
.prettierrc
Normal file
4
.prettierrc
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"tabWidth": 4,
|
||||||
|
"useTabs": false
|
||||||
|
}
|
||||||
4
.vscode/extensions.json
vendored
Normal file
4
.vscode/extensions.json
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"recommendations": ["astro-build.astro-vscode"],
|
||||||
|
"unwantedRecommendations": []
|
||||||
|
}
|
||||||
11
.vscode/launch.json
vendored
Normal file
11
.vscode/launch.json
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"command": "./node_modules/.bin/astro dev",
|
||||||
|
"name": "Development server",
|
||||||
|
"request": "launch",
|
||||||
|
"type": "node-terminal"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
49
README.md
Normal file
49
README.md
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
# Starlight Starter Kit: Basics
|
||||||
|
|
||||||
|
[](https://starlight.astro.build)
|
||||||
|
|
||||||
|
```
|
||||||
|
npm create astro@latest -- --template starlight
|
||||||
|
```
|
||||||
|
|
||||||
|
> 🧑🚀 **Seasoned astronaut?** Delete this file. Have fun!
|
||||||
|
|
||||||
|
## 🚀 Project Structure
|
||||||
|
|
||||||
|
Inside of your Astro + Starlight project, you'll see the following folders and files:
|
||||||
|
|
||||||
|
```
|
||||||
|
.
|
||||||
|
├── public/
|
||||||
|
├── src/
|
||||||
|
│ ├── assets/
|
||||||
|
│ ├── content/
|
||||||
|
│ │ └── docs/
|
||||||
|
│ └── content.config.ts
|
||||||
|
├── astro.config.mjs
|
||||||
|
├── package.json
|
||||||
|
└── tsconfig.json
|
||||||
|
```
|
||||||
|
|
||||||
|
Starlight looks for `.md` or `.mdx` files in the `src/content/docs/` directory. Each file is exposed as a route based on its file name.
|
||||||
|
|
||||||
|
Images can be added to `src/assets/` and embedded in Markdown with a relative link.
|
||||||
|
|
||||||
|
Static assets, like favicons, can be placed in the `public/` directory.
|
||||||
|
|
||||||
|
## 🧞 Commands
|
||||||
|
|
||||||
|
All commands are run from the root of the project, from a terminal:
|
||||||
|
|
||||||
|
| Command | Action |
|
||||||
|
| :------------------------ | :----------------------------------------------- |
|
||||||
|
| `npm install` | Installs dependencies |
|
||||||
|
| `npm run dev` | Starts local dev server at `localhost:4321` |
|
||||||
|
| `npm run build` | Build your production site to `./dist/` |
|
||||||
|
| `npm run preview` | Preview your build locally, before deploying |
|
||||||
|
| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
|
||||||
|
| `npm run astro -- --help` | Get help using the Astro CLI |
|
||||||
|
|
||||||
|
## 👀 Want to learn more?
|
||||||
|
|
||||||
|
Check out [Starlight’s docs](https://starlight.astro.build/), read [the Astro documentation](https://docs.astro.build), or jump into the [Astro Discord server](https://astro.build/chat).
|
||||||
76
astro.config.mjs
Normal file
76
astro.config.mjs
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
// @ts-check
|
||||||
|
import starlight from "@astrojs/starlight";
|
||||||
|
import { defineConfig } from "astro/config";
|
||||||
|
import starlightSidebarTopics from "starlight-sidebar-topics";
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
integrations: [
|
||||||
|
starlight({
|
||||||
|
title: "Develter Documentation",
|
||||||
|
plugins: [
|
||||||
|
starlightSidebarTopics([
|
||||||
|
{
|
||||||
|
label: "Squirrel",
|
||||||
|
link: "/squirrel/overview",
|
||||||
|
icon: "seti:json",
|
||||||
|
items: [
|
||||||
|
"squirrel/overview",
|
||||||
|
{ label: 'UI', items: ['squirrel/ui/component'] },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Blender",
|
||||||
|
link: "/blender/getting-started/installation",
|
||||||
|
icon: "seti:puppet",
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
label: 'Prise en main',
|
||||||
|
items: [
|
||||||
|
{ label: 'Installation', slug: 'blender/getting-started/installation' },
|
||||||
|
{ label: 'Configuration', slug: 'blender/getting-started/configuration' },
|
||||||
|
{ label: 'Premier import', slug: 'blender/getting-started/premier-import' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Interface',
|
||||||
|
items: [
|
||||||
|
{ label: 'Onglet GSEdit', slug: 'blender/interface/gsedit-tab' },
|
||||||
|
{ label: 'Onglet NMS Export', slug: 'blender/interface/export-tab' },
|
||||||
|
{ label: 'Onglet Squirrel', slug: 'blender/interface/squirrel-tab' },
|
||||||
|
{ label: 'Panneau Shader (GS Edit)', slug: 'blender/interface/shader-panel' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Import',
|
||||||
|
items: [
|
||||||
|
{ label: 'Import NMG (Géométrie)', slug: 'blender/import/nmg' },
|
||||||
|
{ label: 'Import NMM (Matériau)', slug: 'blender/import/nmm' },
|
||||||
|
{ label: 'Import NMS Unpacked', slug: 'blender/import/nms-unpacked' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Tutoriels',
|
||||||
|
items: [
|
||||||
|
{ label: 'Système de nommage', slug: 'blender/tutoriels/nommage' },
|
||||||
|
{ label: 'Gestion de la physique', slug: 'blender/tutoriels/physique' },
|
||||||
|
{ label: 'Gestion des tracks', slug: 'blender/tutoriels/tracks' },
|
||||||
|
{ label: 'Matériaux et shaders', slug: 'blender/tutoriels/materiaux' },
|
||||||
|
{ label: 'Export composite', slug: 'blender/tutoriels/export' },
|
||||||
|
{ label: 'Animations Squirrel', slug: 'blender/tutoriels/animations' },
|
||||||
|
{ label: 'Import d\'objects depuis la librairie d\'asset', slug: 'blender/tutoriels/asset-library' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Référence',
|
||||||
|
items: [
|
||||||
|
{ label: 'Propriétés custom', slug: 'blender/reference/proprietes-custom' },
|
||||||
|
{ label: 'Types et constantes', slug: 'blender/reference/types-objets' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
]),
|
||||||
|
],
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
});
|
||||||
6867
package-lock.json
generated
Normal file
6867
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
18
package.json
Normal file
18
package.json
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"name": "develter-doc",
|
||||||
|
"type": "module",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "astro dev",
|
||||||
|
"start": "astro dev",
|
||||||
|
"build": "astro build",
|
||||||
|
"preview": "astro preview",
|
||||||
|
"astro": "astro"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@astrojs/starlight": "^0.37.6",
|
||||||
|
"astro": "^5.6.1",
|
||||||
|
"sharp": "^0.34.2",
|
||||||
|
"starlight-sidebar-topics": "^0.6.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
1
public/favicon.svg
Normal file
1
public/favicon.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><path fill-rule="evenodd" d="M81 36 64 0 47 36l-1 2-9-10a6 6 0 0 0-9 9l10 10h-2L0 64l36 17h2L28 91a6 6 0 1 0 9 9l9-10 1 2 17 36 17-36v-2l9 10a6 6 0 1 0 9-9l-9-9 2-1 36-17-36-17-2-1 9-9a6 6 0 1 0-9-9l-9 10v-2Zm-17 2-2 5c-4 8-11 15-19 19l-5 2 5 2c8 4 15 11 19 19l2 5 2-5c4-8 11-15 19-19l5-2-5-2c-8-4-15-11-19-19l-2-5Z" clip-rule="evenodd"/><path d="M118 19a6 6 0 0 0-9-9l-3 3a6 6 0 1 0 9 9l3-3Zm-96 4c-2 2-6 2-9 0l-3-3a6 6 0 1 1 9-9l3 3c3 2 3 6 0 9Zm0 82c-2-2-6-2-9 0l-3 3a6 6 0 1 0 9 9l3-3c3-2 3-6 0-9Zm96 4a6 6 0 0 1-9 9l-3-3a6 6 0 1 1 9-9l3 3Z"/><style>path{fill:#000}@media (prefers-color-scheme:dark){path{fill:#fff}}</style></svg>
|
||||||
|
After Width: | Height: | Size: 696 B |
BIN
src/assets/houston.webp
Normal file
BIN
src/assets/houston.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 96 KiB |
BIN
src/assets/squirrel.png
Normal file
BIN
src/assets/squirrel.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 393 B |
7
src/content.config.ts
Normal file
7
src/content.config.ts
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
import { defineCollection } from 'astro:content';
|
||||||
|
import { docsLoader } from '@astrojs/starlight/loaders';
|
||||||
|
import { docsSchema } from '@astrojs/starlight/schema';
|
||||||
|
|
||||||
|
export const collections = {
|
||||||
|
docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }),
|
||||||
|
};
|
||||||
77
src/content/docs/blender/getting-started/configuration.mdx
Normal file
77
src/content/docs/blender/getting-started/configuration.mdx
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
---
|
||||||
|
title: Configuration
|
||||||
|
description: Configurer les préférences essentielles de l'addon BlenderEdit.
|
||||||
|
---
|
||||||
|
|
||||||
|
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
|
Les préférences de l'addon se trouvent dans **Edit → Preferences → Add-ons**, puis recherchez "Blender-GS" et dépliez le panneau.
|
||||||
|
|
||||||
|
{/*  */}
|
||||||
|
|
||||||
|
## Dossier Projet
|
||||||
|
|
||||||
|
Le paramètre le plus important : le **Dossier Projet** (`Project Folder`).
|
||||||
|
|
||||||
|
Ce dossier est la racine de votre arborescence GS Framework. Il sert de base pour résoudre tous les chemins relatifs lors de l'import : textures, géométrie, matériaux, scènes.
|
||||||
|
|
||||||
|
<Steps>
|
||||||
|
|
||||||
|
1. Dans les préférences de l'addon, repérez le champ **Project Folder**.
|
||||||
|
2. Cliquez sur l'icône de dossier pour parcourir votre système de fichiers.
|
||||||
|
3. Sélectionnez le dossier racine de votre projet (celui qui contient généralement un sous-dossier `app/` ou `assets/`).
|
||||||
|
|
||||||
|
</Steps>
|
||||||
|
|
||||||
|
<Aside type="caution">
|
||||||
|
Si ce dossier n'est pas correctement configuré, l'addon ne pourra pas trouver les textures et matériaux référencés par vos fichiers. C'est la cause la plus fréquente de matériaux manquants ou noirs après un import.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
### Comment l'addon résout les chemins
|
||||||
|
|
||||||
|
Lorsqu'un fichier importé référence une ressource (par exemple une texture `textures/terrain/grass.png`), l'addon cherche dans cet ordre :
|
||||||
|
|
||||||
|
1. Chemin absolu (si le chemin est complet)
|
||||||
|
2. Relatif au **dossier projet** configuré
|
||||||
|
3. Relatif au sous-dossier `app/` du dossier projet
|
||||||
|
4. Relatif au dossier du fichier importé
|
||||||
|
5. Remontée dans les dossiers parents (jusqu'à 5 niveaux)
|
||||||
|
6. Recherche par nom de fichier seul dans tous les emplacements connus
|
||||||
|
|
||||||
|
## Logging
|
||||||
|
|
||||||
|
### Mode verbose
|
||||||
|
|
||||||
|
La case **Verbose Logging** active les messages de débogage détaillés. En utilisation normale, vous pouvez la laisser désactivée — seules les erreurs seront affichées.
|
||||||
|
|
||||||
|
Activez-la si :
|
||||||
|
- Un import échoue et vous voulez comprendre pourquoi
|
||||||
|
- Des textures ou matériaux semblent manquants
|
||||||
|
- Vous voulez voir le détail de la résolution de chemins
|
||||||
|
|
||||||
|
Les logs sont écrits dans un fichier `logs.txt` situé dans le dossier de l'addon.
|
||||||
|
|
||||||
|
### Sources de log
|
||||||
|
|
||||||
|
Quatre filtres permettent de contrôler quelles parties de l'addon écrivent des logs :
|
||||||
|
|
||||||
|
| Source | Ce qu'elle couvre |
|
||||||
|
|---|---|
|
||||||
|
| **Scene Importer** | Import des scènes NMS (hiérarchie, objets, instances) |
|
||||||
|
| **Geometry Importer** | Import des fichiers NMG (mesh, UV, normales) |
|
||||||
|
| **Materials Importer** | Import des fichiers NMM (textures, paramètres shader) |
|
||||||
|
| **Dynamic Objects Importer** | Import des objets dynamiques (marks, arbres, éléments placés) |
|
||||||
|
|
||||||
|
Désactivez une source pour réduire le bruit dans les logs si vous ne vous intéressez qu'à une partie spécifique de l'import.
|
||||||
|
|
||||||
|
## Animations (Squirrel)
|
||||||
|
|
||||||
|
Le champ **Squirrel Bridge Build Path** indique le chemin vers le module C++ compilé (`squirrel_bridge.pyd`) qui permet d'exécuter les scripts d'animation Squirrel.
|
||||||
|
|
||||||
|
<Aside>
|
||||||
|
Ce paramètre n'est nécessaire que si vous utilisez le système d'animations scriptées. Si vous faites uniquement de la modélisation et de l'import/export, vous pouvez l'ignorer.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
## Étape suivante
|
||||||
|
|
||||||
|
Votre addon est configuré. Passons à votre [premier import](/getting-started/premier-import/).
|
||||||
58
src/content/docs/blender/getting-started/installation.mdx
Normal file
58
src/content/docs/blender/getting-started/installation.mdx
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
---
|
||||||
|
title: Installation
|
||||||
|
description: Installer et activer l'addon BlenderEdit dans Blender.
|
||||||
|
---
|
||||||
|
|
||||||
|
import { Aside, Steps } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
|
## Prérequis
|
||||||
|
|
||||||
|
- **Blender 3.0** ou supérieur
|
||||||
|
- Les fichiers source du projet GS Framework (dossier contenant vos `.nms`, `.nmg`, `.nmm`)
|
||||||
|
|
||||||
|
<Aside type="tip">
|
||||||
|
L'addon fonctionne avec toutes les versions de Blender à partir de la 3.0. Nous recommandons d'utiliser la dernière version LTS pour une stabilité maximale.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
## Installer l'addon
|
||||||
|
|
||||||
|
<Steps>
|
||||||
|
|
||||||
|
1. **Téléchargez** le fichier `.zip` de l'addon BlenderEdit (fourni par votre équipe ou généré via le script `make_zip.py`).
|
||||||
|
|
||||||
|
2. **Ouvrez Blender** et allez dans **Edit → Preferences** (ou `Ctrl+,`).
|
||||||
|
|
||||||
|
3. Dans la section **Add-ons**, cliquez sur le bouton **Install…** en haut à droite.
|
||||||
|
|
||||||
|
{/*  */}
|
||||||
|
|
||||||
|
4. **Sélectionnez** le fichier `.zip` téléchargé et confirmez.
|
||||||
|
|
||||||
|
5. **Activez** l'addon en cochant la case à côté de son nom : **Blender-GS - NMS/NMG/NMM Importer from GameStart Editor**.
|
||||||
|
|
||||||
|
{/*  */}
|
||||||
|
|
||||||
|
</Steps>
|
||||||
|
|
||||||
|
## Vérifier l'installation
|
||||||
|
|
||||||
|
Une fois l'addon activé, vous devriez voir :
|
||||||
|
|
||||||
|
- De nouveaux menus dans **File → Import** :
|
||||||
|
- NMS Scene (.nms)
|
||||||
|
- NMS Scene Unpacked (.nms)
|
||||||
|
- NMG Geometry (.nmg)
|
||||||
|
- NMM Material (.nmm)
|
||||||
|
- Un menu dans **File → Export** :
|
||||||
|
- Composite Scene (.gltf + .scene.json)
|
||||||
|
- Un nouvel onglet **GSEdit** dans la sidebar du viewport 3D (touche `N`)
|
||||||
|
- Un onglet **NMS Export** dans la sidebar du viewport 3D
|
||||||
|
- Un onglet **Squirrel** dans la sidebar du viewport 3D
|
||||||
|
|
||||||
|
<Aside>
|
||||||
|
Si vous ne voyez pas la sidebar, appuyez sur `N` dans le viewport 3D pour la faire apparaître, puis cherchez les onglets **GSEdit**, **NMS Export** et **Squirrel**.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
## Étape suivante
|
||||||
|
|
||||||
|
Avant de commencer à importer, il est important de [configurer les préférences de l'addon](/getting-started/configuration/).
|
||||||
59
src/content/docs/blender/getting-started/premier-import.mdx
Normal file
59
src/content/docs/blender/getting-started/premier-import.mdx
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
---
|
||||||
|
title: Premier import
|
||||||
|
description: Importez votre premier fichier NMG dans Blender en quelques minutes.
|
||||||
|
---
|
||||||
|
|
||||||
|
import { Aside, Steps } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
|
Ce guide vous accompagne dans l'import d'un fichier de géométrie NMG — le cas d'usage le plus simple pour se familiariser avec l'addon.
|
||||||
|
|
||||||
|
## Importer un fichier NMG
|
||||||
|
|
||||||
|
<Steps>
|
||||||
|
|
||||||
|
1. Assurez-vous que le [dossier projet est configuré](/getting-started/configuration/) dans les préférences de l'addon.
|
||||||
|
|
||||||
|
2. Allez dans **File → Import → NMG Geometry (.nmg)**.
|
||||||
|
|
||||||
|
{/*  */}
|
||||||
|
|
||||||
|
3. Naviguez jusqu'à votre fichier `.nmg` et sélectionnez-le.
|
||||||
|
|
||||||
|
4. Dans le panneau d'options à droite du navigateur de fichiers, vérifiez les réglages :
|
||||||
|
- **Scale** : laissez à `1.0` sauf si votre scène utilise une échelle différente
|
||||||
|
- **Flip X** et **Swap YZ** : laissez cochés (conversion du système de coordonnées GS Framework → Blender)
|
||||||
|
- **Import Materials** : coché pour importer automatiquement les matériaux référencés
|
||||||
|
|
||||||
|
5. Cliquez sur **Import NMG**.
|
||||||
|
|
||||||
|
</Steps>
|
||||||
|
|
||||||
|
## Résultat
|
||||||
|
|
||||||
|
Après l'import, vous verrez dans votre scène Blender :
|
||||||
|
|
||||||
|
- Un (ou plusieurs) **objet mesh** correspondant à la géométrie du fichier NMG
|
||||||
|
- Les **matériaux** automatiquement créés et assignés (si l'option était activée)
|
||||||
|
- Des **propriétés custom** sur l'objet (visibles dans le panneau Properties → Object → Custom Properties) contenant les métadonnées d'origine
|
||||||
|
|
||||||
|
{/*  */}
|
||||||
|
|
||||||
|
<Aside type="tip">
|
||||||
|
Si les matériaux apparaissent noirs ou manquants, vérifiez que le **Dossier Projet** est correctement configuré dans les [préférences de l'addon](/getting-started/configuration/). Activez le **Verbose Logging** pour voir les tentatives de résolution de chemins dans les logs.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
## Comprendre les propriétés importées
|
||||||
|
|
||||||
|
Sélectionnez l'objet importé et ouvrez l'onglet **GSEdit** dans la sidebar (touche `N`). Vous y trouverez :
|
||||||
|
|
||||||
|
- Le **panneau Items Actifs** : indique si l'objet est actif dans la scène
|
||||||
|
- Le **panneau Propriétés Communes** : type d'asset, système de nommage
|
||||||
|
- D'éventuelles **propriétés physiques** si le fichier source en contenait
|
||||||
|
|
||||||
|
Pour en savoir plus sur chaque panneau, consultez la section [Interface](/interface/gsedit-tab/).
|
||||||
|
|
||||||
|
## Et ensuite ?
|
||||||
|
|
||||||
|
- Pour importer un matériau seul : [Import NMM](/import/nmm/)
|
||||||
|
- Pour importer une scène complète avec sous-scènes : [Import NMS Unpacked](/import/nms-unpacked/)
|
||||||
|
- Pour comprendre le système de nommage : [Tutoriel Nommage](/tutoriels/nommage/)
|
||||||
86
src/content/docs/blender/import/nmg.mdx
Normal file
86
src/content/docs/blender/import/nmg.mdx
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
---
|
||||||
|
title: Import NMG (Géométrie)
|
||||||
|
description: Importer un fichier de géométrie NMG dans Blender.
|
||||||
|
---
|
||||||
|
|
||||||
|
import { Aside } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
|
Le format **NMG** (Native Model Geometry) contient les données de géométrie d'un modèle 3D : vertices, normales, UV maps, indices de faces et références aux matériaux. C'est le format de base pour importer un mesh isolé depuis GS Framework.
|
||||||
|
|
||||||
|
**Menu** : File → Import → **NMG Geometry (.nmg)**
|
||||||
|
|
||||||
|
{/*  */}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Options d'import
|
||||||
|
|
||||||
|
| Option | Par défaut | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| **Project Folder** | (préférences) | Dossier racine du projet, utilisé pour résoudre les chemins des matériaux et textures. Si laissé vide, la valeur des préférences est utilisée. |
|
||||||
|
| **Scale** | `1.0` | Facteur d'échelle appliqué à la géométrie importée. Plage : 0.001 à 1000. |
|
||||||
|
| **Flip X** | ✅ Activé | Inverse l'axe X. Le moteur GS Framework utilise un axe X inversé par rapport à Blender. |
|
||||||
|
| **Swap YZ** | ✅ Activé | Échange les axes Y et Z. GS Framework utilise un système Y-up, Blender utilise Z-up. |
|
||||||
|
| **Import Materials** | ✅ Activé | Importe automatiquement les matériaux (.nmm) référencés par la géométrie. |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Détail des options
|
||||||
|
|
||||||
|
### Scale
|
||||||
|
|
||||||
|
Le facteur d'échelle multiplie toutes les coordonnées de la géométrie. Utilisez-le si votre scène GS Framework est dans une échelle très différente de celle de Blender.
|
||||||
|
|
||||||
|
<Aside type="tip">
|
||||||
|
En règle générale, laissez l'échelle à `1.0`. Modifiez-la uniquement si les objets importés apparaissent démesurément grands ou petits.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
### Flip X et Swap YZ
|
||||||
|
|
||||||
|
Ces deux options gèrent la conversion du système de coordonnées entre GS Framework et Blender :
|
||||||
|
|
||||||
|
- **GS Framework** : Y vers le haut, X inversé
|
||||||
|
- **Blender** : Z vers le haut
|
||||||
|
|
||||||
|
**Gardez les deux options activées** dans la grande majorité des cas. Ne les désactivez que si vous travaillez volontairement dans le système de coordonnées natif de GS Framework (rare).
|
||||||
|
|
||||||
|
### Import Materials
|
||||||
|
|
||||||
|
Quand cette option est activée, l'addon :
|
||||||
|
|
||||||
|
1. Lit les références de matériaux contenues dans le fichier NMG
|
||||||
|
2. Recherche les fichiers `.nmm` correspondants dans le dossier projet
|
||||||
|
3. Importe chaque matériau (textures, paramètres shader, couleurs)
|
||||||
|
4. Assigne les matériaux aux faces correspondantes du mesh
|
||||||
|
|
||||||
|
Si l'option est désactivée, le mesh est importé sans matériaux — vous pouvez les ajouter manuellement plus tard.
|
||||||
|
|
||||||
|
<Aside type="caution">
|
||||||
|
Si les matériaux ne sont pas trouvés, vérifiez que le **Project Folder** est correctement configuré. Activez le [Verbose Logging](/getting-started/configuration/) pour voir les chemins de recherche tentés.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ce qui est importé
|
||||||
|
|
||||||
|
Un fichier NMG produit dans Blender :
|
||||||
|
|
||||||
|
- Un **objet mesh** avec la géométrie complète (vertices, faces, normales)
|
||||||
|
- Les **UV maps** du modèle (autant de layers UV que le fichier en contient)
|
||||||
|
- Les **matériaux** assignés (si l'option est activée)
|
||||||
|
- Des **propriétés custom** sur l'objet :
|
||||||
|
- `asset_type` : "NMG"
|
||||||
|
- `asset_file` : chemin du fichier source
|
||||||
|
- `nmg_vertices` : nombre de vertices
|
||||||
|
- `nmg_polygons` : nombre de polygones
|
||||||
|
- `nmg_uv_channels` : nombre de layers UV
|
||||||
|
- `nmg_has_normals` : présence de normales
|
||||||
|
- `nmg_materials` : liste JSON des chemins de matériaux référencés
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Cas d'usage
|
||||||
|
|
||||||
|
- **Vérifier un modèle** : importer un NMG seul pour inspecter la géométrie d'un asset
|
||||||
|
- **Remplacer un mesh** : importer la géométrie pour la modifier, puis réexporter
|
||||||
|
- **Assemblage manuel** : importer plusieurs NMG individuellement pour construire une scène à la main
|
||||||
98
src/content/docs/blender/import/nmm.mdx
Normal file
98
src/content/docs/blender/import/nmm.mdx
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
---
|
||||||
|
title: Import NMM (Matériau)
|
||||||
|
description: Importer un fichier de matériau NMM dans Blender.
|
||||||
|
---
|
||||||
|
|
||||||
|
import { Aside } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
|
Le format **NMM** (Native Model Material) contient la définition d'un matériau : couleurs (diffuse, spéculaire, ambiante, émission), paramètres de rendu, référence shader et textures associées.
|
||||||
|
|
||||||
|
**Menu** : File → Import → **NMM Material (.nmm)**
|
||||||
|
|
||||||
|
{/*  */}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Options d'import
|
||||||
|
|
||||||
|
| Option | Par défaut | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| **Project Folder** | `""` (vide) | Dossier racine du projet pour résoudre les chemins des textures. Si vide, utilise la valeur des préférences de l'addon. |
|
||||||
|
|
||||||
|
L'import NMM n'a qu'une seule option spécifique — la résolution de chemins de textures dépend entièrement du dossier projet.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Comportement
|
||||||
|
|
||||||
|
### Assignation automatique
|
||||||
|
|
||||||
|
Si un objet mesh est **sélectionné et actif** au moment de l'import, le matériau importé lui est **automatiquement assigné**. C'est le moyen le plus rapide de tester un matériau sur un objet existant.
|
||||||
|
|
||||||
|
Si aucun objet n'est sélectionné (ou si l'objet actif n'est pas un mesh), le matériau est créé dans les données Blender mais n'est assigné à rien — vous pouvez l'affecter manuellement ensuite.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ce que l'import crée
|
||||||
|
|
||||||
|
L'import NMM crée un **matériau Blender** utilisant le shader **Principled BSDF**, configuré comme suit :
|
||||||
|
|
||||||
|
### Couleurs et paramètres
|
||||||
|
|
||||||
|
| Propriété NMM | Destination Blender |
|
||||||
|
|---|---|
|
||||||
|
| Diffuse | Base Color du Principled BSDF |
|
||||||
|
| Specular | Specular color/intensity |
|
||||||
|
| Glossiness | Roughness (valeur inversée : glossiness élevée = roughness basse) |
|
||||||
|
| Self-illumination | Emission Color + Emission Strength |
|
||||||
|
| Opacity | Alpha (si ≠ 1.0) |
|
||||||
|
|
||||||
|
### Textures
|
||||||
|
|
||||||
|
Les textures référencées dans le NMM sont automatiquement connectées aux entrées du Principled BSDF :
|
||||||
|
|
||||||
|
| Canal texture | Connexion Blender |
|
||||||
|
|---|---|
|
||||||
|
| `diffuse` | Base Color |
|
||||||
|
| `normal` | Normal (via un nœud Normal Map) |
|
||||||
|
| `specular` | Specular |
|
||||||
|
| `glossiness` / `roughness` | Roughness |
|
||||||
|
| `opacity` | Alpha |
|
||||||
|
| `reflection` | Specular / Environment |
|
||||||
|
| `selfillum` | Emission Color |
|
||||||
|
| `ao` | Multiplié avec la Base Color |
|
||||||
|
| `metallic` | Metallic |
|
||||||
|
|
||||||
|
### Flags de rendu
|
||||||
|
|
||||||
|
| Flag | Effet dans Blender |
|
||||||
|
|---|---|
|
||||||
|
| `double_sided` | Désactive le backface culling |
|
||||||
|
| `shadeless` | Passe le matériau en émissif pur (non affecté par l'éclairage) |
|
||||||
|
| `alpha_blend` | Active le mode de blend Alpha dans les réglages du matériau |
|
||||||
|
|
||||||
|
### Propriétés custom
|
||||||
|
|
||||||
|
Le matériau porte des propriétés custom préfixées `nmm_` contenant toutes les données d'origine :
|
||||||
|
|
||||||
|
- `nmm_diffuse`, `nmm_specular`, `nmm_ambient`, `nmm_self_illum` : couleurs originales
|
||||||
|
- `nmm_glossiness`, `nmm_opacity` : paramètres
|
||||||
|
- `nmm_shader_path` : chemin du shader NSA référencé
|
||||||
|
- `nmm_textures` : dictionnaire JSON des textures par canal
|
||||||
|
- `nmm_double_sided`, `nmm_shadeless`, `nmm_alpha_blend` : flags de rendu
|
||||||
|
|
||||||
|
<Aside type="tip">
|
||||||
|
Ces propriétés custom sont lues par l'[exporteur composite](/tutoriels/export/) et le [panneau Shader GS Edit](/interface/shader-panel/). Elles préservent les informations nécessaires pour un aller-retour (import → modification → export) sans perte de données.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Cas d'usage
|
||||||
|
|
||||||
|
- **Tester un matériau** : sélectionnez un objet, importez un NMM — le matériau est immédiatement appliqué
|
||||||
|
- **Inspecter les paramètres** : importez un NMM pour voir comment il est configuré dans le Shader Editor
|
||||||
|
- **Modifier et réassigner** : importez, modifiez les textures ou paramètres dans le [panneau GS Edit](/interface/shader-panel/), puis exportez
|
||||||
|
|
||||||
|
<Aside>
|
||||||
|
En général, l'import de matériaux se fait automatiquement lors de l'import NMG (avec l'option **Import Materials** activée). L'import NMM direct est utile pour travailler sur un matériau individuel.
|
||||||
|
</Aside>
|
||||||
162
src/content/docs/blender/import/nms-unpacked.mdx
Normal file
162
src/content/docs/blender/import/nms-unpacked.mdx
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
---
|
||||||
|
title: Import NMS Unpacked
|
||||||
|
description: Importer une scène NMS en fichiers .blend séparés par sous-scène.
|
||||||
|
---
|
||||||
|
|
||||||
|
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
|
L'import **NMS Unpacked** est le mode d'import recommandé pour les scènes complexes. Contrairement à l'import NMS classique qui charge tout dans un seul fichier, le mode Unpacked **crée un fichier `.blend` séparé pour chaque sous-scène**, puis les lie ensemble via le système d'assets de Blender.
|
||||||
|
|
||||||
|
**Menu** : File → Import → **NMS Scene Unpacked (.nms)**
|
||||||
|
|
||||||
|
{/*  */}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Concept
|
||||||
|
|
||||||
|
Une scène NMS peut contenir des **instances** qui font référence à d'autres fichiers `.nms` (sous-scènes). Par exemple, une scène de ville peut instancier des bâtiments, des véhicules, des arbres — chacun défini dans son propre fichier NMS.
|
||||||
|
|
||||||
|
Le mode Unpacked :
|
||||||
|
|
||||||
|
1. **Analyse** récursivement toutes les sous-scènes référencées
|
||||||
|
2. **Crée un fichier `.blend` séparé** pour chaque sous-scène
|
||||||
|
3. **Lie** les collections de chaque sous-scène dans la scène principale via Blender assets
|
||||||
|
4. **Préserve** la hiérarchie et les transformations (position, rotation, échelle)
|
||||||
|
|
||||||
|
Le résultat est une arborescence de fichiers `.blend` qui reflète la structure du projet d'origine.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Options d'import
|
||||||
|
|
||||||
|
### Gestion des fichiers
|
||||||
|
|
||||||
|
| Option | Valeurs | Par défaut | Description |
|
||||||
|
|---|---|---|---|
|
||||||
|
| **Output Folder** | Chemin de dossier | `""` | Dossier de destination pour les fichiers `.blend` générés. **Obligatoire.** |
|
||||||
|
| **Project Folder** | Chemin de dossier | `""` | Dossier racine du projet pour la résolution des chemins. Si vide, utilise les préférences. |
|
||||||
|
| **Existing .blend Action** | USE_EXISTING / OVERRIDE | USE_EXISTING | Comportement quand un fichier `.blend` existe déjà pour une sous-scène. |
|
||||||
|
| **Import Mode** | OVERRIDE / SKIP | OVERRIDE | Comment la scène principale est traitée. |
|
||||||
|
| **Hide Collections** | Case à cocher | Désactivé | Masquer les collections importées dans le viewport pour réduire l'encombrement visuel. |
|
||||||
|
|
||||||
|
### Options d'import
|
||||||
|
|
||||||
|
| Option | Par défaut | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| **Scale** | `1.0` | Facteur d'échelle global (0.001 à 1000) |
|
||||||
|
| **Import Materials** | ✅ | Importer les matériaux référencés |
|
||||||
|
| **Import Cameras** | ✅ | Importer les caméras de la scène |
|
||||||
|
| **Import Lights** | ✅ | Importer les lumières de la scène |
|
||||||
|
| **Round Rotations** | ❌ | Arrondir les rotations aux angles courants |
|
||||||
|
| **Rotation Threshold** | `10.0°` | Seuil d'arrondi (visible uniquement si Round Rotations est activé) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Détail des options clés
|
||||||
|
|
||||||
|
### Existing .blend Action
|
||||||
|
|
||||||
|
Contrôle ce qui se passe quand un fichier `.blend` de sous-scène existe déjà dans le dossier de sortie.
|
||||||
|
|
||||||
|
<Tabs>
|
||||||
|
<TabItem label="USE_EXISTING (défaut)">
|
||||||
|
|
||||||
|
**Réutilise** le fichier `.blend` existant tel quel, sans réimporter la sous-scène. Le fichier existant est simplement lié dans la scène principale.
|
||||||
|
|
||||||
|
**Quand l'utiliser** :
|
||||||
|
- Vous avez déjà importé la scène une première fois et souhaitez mettre à jour uniquement la scène principale
|
||||||
|
- Les sous-scènes n'ont pas changé depuis le dernier import
|
||||||
|
- Vous voulez gagner du temps sur un import en évitant de retraiter des sous-scènes identiques
|
||||||
|
|
||||||
|
</TabItem>
|
||||||
|
<TabItem label="OVERRIDE">
|
||||||
|
|
||||||
|
**Recréer** le fichier `.blend` en réimportant la sous-scène depuis zéro, même si un fichier existait déjà. L'ancien fichier est écrasé.
|
||||||
|
|
||||||
|
**Quand l'utiliser** :
|
||||||
|
- Les fichiers source `.nms`/`.nmg`/`.nmm` ont été modifiés depuis le dernier import
|
||||||
|
- Vous voulez un import complètement propre
|
||||||
|
- Des problèmes ont été corrigés dans les sources et doivent être reflétés
|
||||||
|
|
||||||
|
</TabItem>
|
||||||
|
</Tabs>
|
||||||
|
|
||||||
|
### Import Mode
|
||||||
|
|
||||||
|
Contrôle comment la **scène principale** (le fichier `.nms` racine que vous avez sélectionné) est traitée.
|
||||||
|
|
||||||
|
<Tabs>
|
||||||
|
<TabItem label="OVERRIDE (défaut)">
|
||||||
|
|
||||||
|
La scène principale est **sauvegardée dans son propre fichier `.blend`**, puis ce fichier est **ouvert dans Blender**. Vous quittez le fichier Blender actuel pour ouvrir le nouveau.
|
||||||
|
|
||||||
|
**Quand l'utiliser** :
|
||||||
|
- Vous commencez un nouveau travail à partir de la scène importée
|
||||||
|
- Vous voulez que le fichier Blender ouvert corresponde exactement à la scène NMS
|
||||||
|
|
||||||
|
</TabItem>
|
||||||
|
<TabItem label="SKIP">
|
||||||
|
|
||||||
|
La scène principale est **recréée dans le fichier Blender actuel** sous forme d'une collection. Les sous-scènes sont liées normalement.
|
||||||
|
|
||||||
|
Vous **restez dans votre fichier Blender** et la scène importée est ajoutée à côté de votre contenu existant.
|
||||||
|
|
||||||
|
**Quand l'utiliser** :
|
||||||
|
- Vous voulez intégrer la scène NMS dans un fichier Blender déjà existant
|
||||||
|
- Vous travaillez sur un overlay ou une composition de plusieurs scènes
|
||||||
|
- Vous ne voulez pas perdre votre session de travail actuelle
|
||||||
|
|
||||||
|
</TabItem>
|
||||||
|
</Tabs>
|
||||||
|
|
||||||
|
<Aside type="caution">
|
||||||
|
En mode **OVERRIDE**, votre fichier Blender actuel sera fermé. Sauvegardez votre travail avant de lancer l'import.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
### Round Rotations
|
||||||
|
|
||||||
|
Certaines scènes GS Framework contiennent des rotations avec de légères imprécisions numériques (par exemple 89.97° au lieu de 90°). L'option **Round Rotations** arrondit ces valeurs aux angles courants (0°, 90°, 180°, 270°) si elles sont dans le seuil configuré.
|
||||||
|
|
||||||
|
Le **Rotation Threshold** (seuil) détermine la tolérance : une rotation à 85° avec un seuil de 10° sera arrondie à 90°. Ce seuil n'apparaît dans les options que si Round Rotations est activé.
|
||||||
|
|
||||||
|
### Hide Collections
|
||||||
|
|
||||||
|
Utile pour les scènes très lourdes. Masque les collections et instances importées dans le viewport pour éviter que Blender ne rame. Les objets restent présents — ils ne sont simplement pas affichés.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Résultat de l'import
|
||||||
|
|
||||||
|
Après l'import, vous obtenez :
|
||||||
|
|
||||||
|
- Un **dossier de sortie** contenant un `.blend` par sous-scène, organisé selon la structure du projet d'origine
|
||||||
|
- Chaque collection de sous-scène est marquée comme **Blender asset**, permettant la réutilisation via l'Asset Browser
|
||||||
|
- La **scène principale** contient des instances liées vers chaque sous-scène, avec les transformations d'origine préservées
|
||||||
|
- Les **tracks**, **objets dynamiques** et **physique** sont importés dans chaque sous-scène concernée
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Workflow type
|
||||||
|
|
||||||
|
<Steps>
|
||||||
|
|
||||||
|
1. Vérifiez que le [dossier projet est configuré](/getting-started/configuration/).
|
||||||
|
|
||||||
|
2. Allez dans **File → Import → NMS Scene Unpacked (.nms)**.
|
||||||
|
|
||||||
|
3. Sélectionnez votre fichier `.nms` racine.
|
||||||
|
|
||||||
|
4. Configurez le **Output Folder** — c'est là que seront créés les fichiers `.blend`.
|
||||||
|
|
||||||
|
5. À la première importation, laissez les options par défaut (USE_EXISTING + OVERRIDE).
|
||||||
|
|
||||||
|
6. Lancez l'import — l'addon traverse récursivement toutes les sous-scènes.
|
||||||
|
|
||||||
|
7. Une fois terminé, le fichier Blender de la scène principale s'ouvre avec toutes les sous-scènes liées.
|
||||||
|
|
||||||
|
</Steps>
|
||||||
|
|
||||||
|
<Aside type="tip">
|
||||||
|
Pour les scènes volumineuses, le premier import peut prendre plusieurs minutes. Les imports suivants avec **USE_EXISTING** seront beaucoup plus rapides car seules les sous-scènes modifiées sont réimportées.
|
||||||
|
</Aside>
|
||||||
52
src/content/docs/blender/index.mdx
Normal file
52
src/content/docs/blender/index.mdx
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
---
|
||||||
|
title: BlenderEdit
|
||||||
|
description: Documentation de l'addon Blender pour l'import/export de scènes, géométrie et matériaux depuis le moteur GS Framework.
|
||||||
|
template: splash
|
||||||
|
hero:
|
||||||
|
tagline: Importez et exportez vos scènes GS Framework directement dans Blender — géométrie, matériaux, physique, tracks et animations.
|
||||||
|
actions:
|
||||||
|
- text: Commencer
|
||||||
|
link: /getting-started/installation/
|
||||||
|
icon: right-arrow
|
||||||
|
variant: primary
|
||||||
|
- text: Tutoriels
|
||||||
|
link: /tutoriels/nommage/
|
||||||
|
variant: minimal
|
||||||
|
---
|
||||||
|
|
||||||
|
import { Card, CardGrid, LinkCard } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
|
## Que permet cet addon ?
|
||||||
|
|
||||||
|
<CardGrid>
|
||||||
|
<Card title="Import de scènes" icon="document">
|
||||||
|
Importez des fichiers **NMS**, **NMG** et **NMM** depuis GS Framework. Géométrie, matériaux, lumières, caméras et hiérarchies d'objets sont recréés automatiquement dans Blender.
|
||||||
|
</Card>
|
||||||
|
<Card title="Physique & collisions" icon="seti:config">
|
||||||
|
Gérez les propriétés physiques de vos objets : modes de collision, shapes (Box, Sphere, Capsule…), masques et damping — le tout depuis un panneau dédié.
|
||||||
|
</Card>
|
||||||
|
<Card title="Tracks & circulation" icon="random">
|
||||||
|
Créez et éditez des chemins de circulation (routes, sentiers animaux) avec vitesses, types de route et états personnalisables.
|
||||||
|
</Card>
|
||||||
|
<Card title="Export composite" icon="external">
|
||||||
|
Exportez vos scènes en GLTF modulaire avec un manifeste `.scene.json`, prêt à être intégré dans le moteur.
|
||||||
|
</Card>
|
||||||
|
</CardGrid>
|
||||||
|
|
||||||
|
## Par où commencer ?
|
||||||
|
|
||||||
|
<CardGrid>
|
||||||
|
<LinkCard title="Installation" href="/getting-started/installation/" description="Installer et activer l'addon dans Blender." />
|
||||||
|
<LinkCard title="Configuration" href="/getting-started/configuration/" description="Configurer les préférences essentielles." />
|
||||||
|
<LinkCard title="Premier import" href="/getting-started/premier-import/" description="Importer votre premier fichier en 5 minutes." />
|
||||||
|
<LinkCard title="Système de nommage" href="/tutoriels/nommage/" description="Comprendre les conventions de nommage." />
|
||||||
|
</CardGrid>
|
||||||
|
|
||||||
|
## Sections principales
|
||||||
|
|
||||||
|
<CardGrid>
|
||||||
|
<LinkCard title="Interface" href="/interface/gsedit-tab/" description="Découvrir les panneaux et onglets de l'addon." />
|
||||||
|
<LinkCard title="Import" href="/import/nmg/" description="Importer de la géométrie, des matériaux et des scènes." />
|
||||||
|
<LinkCard title="Tutoriels" href="/tutoriels/nommage/" description="Guides pratiques pas à pas." />
|
||||||
|
<LinkCard title="Référence" href="/reference/proprietes-custom/" description="Propriétés, types et constantes." />
|
||||||
|
</CardGrid>
|
||||||
79
src/content/docs/blender/interface/export-tab.mdx
Normal file
79
src/content/docs/blender/interface/export-tab.mdx
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
---
|
||||||
|
title: Onglet NMS Export
|
||||||
|
description: Présentation de l'onglet d'export composite dans la sidebar du viewport 3D.
|
||||||
|
---
|
||||||
|
|
||||||
|
import { Aside } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
|
L'onglet **NMS Export** se trouve dans la **sidebar du viewport 3D** (touche `N`) et regroupe les outils d'export vers le moteur GS Framework.
|
||||||
|
|
||||||
|
{/*  */}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Composite Scene Export
|
||||||
|
|
||||||
|
### Bouton d'export
|
||||||
|
|
||||||
|
Le bouton **Export Composite Scene** lance l'export de la scène en fichiers GLTF modulaires accompagnés d'un manifeste `.scene.json`. C'est l'équivalent de **File → Export → Composite Scene**, accessible directement depuis la sidebar.
|
||||||
|
|
||||||
|
### Analyse de la scène
|
||||||
|
|
||||||
|
Sous le bouton, un encadré affiche une analyse en temps réel de votre scène :
|
||||||
|
|
||||||
|
| Information | Description |
|
||||||
|
|---|---|
|
||||||
|
| **Collections** | Nombre de collections uniques détectées |
|
||||||
|
| **Instances** | Nombre d'instances de collections (objets liés à des collections) |
|
||||||
|
| **Objets locaux** | Nombre d'objets qui ne font partie d'aucune collection instanciée |
|
||||||
|
|
||||||
|
Ces chiffres vous donnent un aperçu de la complexité de l'export avant de le lancer.
|
||||||
|
|
||||||
|
### Propriétés custom reconnues
|
||||||
|
|
||||||
|
L'encadré d'aide liste les propriétés custom que l'exporteur reconnaît et intègre dans le manifeste `.scene.json` :
|
||||||
|
|
||||||
|
| Propriété | Type | Rôle |
|
||||||
|
|---|---|---|
|
||||||
|
| `replaceable` | Booléen | Marque l'objet comme remplaçable dans le moteur |
|
||||||
|
| `slot_id` | Texte | Identifiant de slot pour le placement dynamique |
|
||||||
|
| `tags` | Texte | Tags séparés par des virgules (convertis en liste dans le JSON) |
|
||||||
|
| `lod_group` | Texte | Groupe de niveau de détail |
|
||||||
|
| `collision` | Booléen | Indique si l'objet a de la collision |
|
||||||
|
| `static` | Booléen | Indique si l'objet est statique |
|
||||||
|
|
||||||
|
Toute autre propriété custom présente sur l'objet est également exportée dans un champ `custom_properties` du manifeste.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Instance Properties
|
||||||
|
|
||||||
|
Ce sous-panneau n'apparaît que lorsque l'objet sélectionné est une **instance de collection** (un objet qui référence une collection Blender).
|
||||||
|
|
||||||
|
{/*  */}
|
||||||
|
|
||||||
|
### Informations affichées
|
||||||
|
|
||||||
|
- **Nom de la collection** liée
|
||||||
|
- **Statut** : linked (depuis un autre .blend) ou local
|
||||||
|
|
||||||
|
### Ajout rapide de propriétés
|
||||||
|
|
||||||
|
Des boutons permettent d'ajouter rapidement les propriétés les plus courantes à l'instance sélectionnée :
|
||||||
|
|
||||||
|
- **replaceable** (booléen)
|
||||||
|
- **slot_id** (texte)
|
||||||
|
- **tags** (texte)
|
||||||
|
- **static** (booléen)
|
||||||
|
|
||||||
|
### Liste des propriétés
|
||||||
|
|
||||||
|
En-dessous, la liste de toutes les propriétés custom actuellement sur l'objet, avec un bouton de suppression pour chacune.
|
||||||
|
|
||||||
|
<Aside type="tip">
|
||||||
|
Les propriétés ajoutées ici sont lues par l'exporteur composite et intégrées dans le fichier `.scene.json`. C'est le moyen principal de transmettre des métadonnées au moteur lors de l'export.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
<Aside>
|
||||||
|
Pour un guide complet sur le processus d'export, consultez le [tutoriel Export composite](/tutoriels/export/).
|
||||||
|
</Aside>
|
||||||
192
src/content/docs/blender/interface/gsedit-tab.mdx
Normal file
192
src/content/docs/blender/interface/gsedit-tab.mdx
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
---
|
||||||
|
title: Onglet GSEdit
|
||||||
|
description: Présentation complète de l'onglet GSEdit dans la sidebar du viewport 3D.
|
||||||
|
---
|
||||||
|
|
||||||
|
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
|
L'onglet **GSEdit** est le panneau principal de l'addon. Il apparaît dans la **sidebar du viewport 3D** (touche `N`) et regroupe cinq panneaux qui s'adaptent au contexte — certains ne s'affichent que lorsqu'un objet pertinent est sélectionné.
|
||||||
|
|
||||||
|
{/*  */}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Items Actifs
|
||||||
|
|
||||||
|
Ce panneau est **toujours visible**, quel que soit l'objet sélectionné. Il offre une vue d'ensemble de l'état d'activation des objets de votre scène.
|
||||||
|
|
||||||
|
### Ce que vous y trouvez
|
||||||
|
|
||||||
|
- **Compteur** : nombre d'objets actifs / nombre total d'objets
|
||||||
|
- **Sync Visibilité** : synchronise la visibilité dans le viewport avec l'état actif/inactif de chaque objet. Utile si vous avez masqué ou affiché des objets manuellement et souhaitez remettre la visibilité en cohérence.
|
||||||
|
- **Tout Activer** : réactive tous les objets inactifs en un clic (n'apparaît que si des objets sont désactivés)
|
||||||
|
- **Toggle pour l'objet sélectionné** : active ou désactive l'objet actuellement sélectionné
|
||||||
|
- **Liste des objets inactifs** : affiche jusqu'à 15 objets désactivés, chacun avec un bouton pour le réactiver et le sélectionner
|
||||||
|
|
||||||
|
{/*  */}
|
||||||
|
|
||||||
|
<Aside type="tip">
|
||||||
|
Désactiver un objet le masque dans le viewport **et** le marque comme inactif dans les données de la scène. C'est différent d'un simple masquage (`H`) qui ne touche que l'affichage.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
### Quand l'utiliser
|
||||||
|
|
||||||
|
- Pour masquer temporairement des éléments de la scène (personnages, véhicules) afin de travailler sur l'environnement
|
||||||
|
- Pour retrouver rapidement quels objets sont désactivés
|
||||||
|
- Après un import, pour vérifier quels objets étaient actifs dans la scène d'origine
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Propriétés Communes
|
||||||
|
|
||||||
|
Ce panneau apparaît dès qu'un **objet est sélectionné**. Il gère le typage et le nommage de vos objets.
|
||||||
|
|
||||||
|
### Type d'asset
|
||||||
|
|
||||||
|
Un menu déroulant permet de définir le rôle fonctionnel de l'objet :
|
||||||
|
|
||||||
|
| Type | Usage |
|
||||||
|
|---|---|
|
||||||
|
| **Default** | Objet standard, pas de rôle particulier |
|
||||||
|
| **Trigger** | Zone de déclenchement (trigger zone) |
|
||||||
|
| **Collision Shape** | Forme de collision |
|
||||||
|
| **Track** | Chemin de circulation |
|
||||||
|
|
||||||
|
Changer le type d'asset peut faire apparaître des sections supplémentaires dans le panneau (par exemple, la section Track pour les courbes et meshes).
|
||||||
|
|
||||||
|
### Section Track
|
||||||
|
|
||||||
|
Visible uniquement pour les objets de type **Courbe** ou **Mesh**, ou les objets déjà convertis en track.
|
||||||
|
|
||||||
|
- Si l'objet est déjà un track : affiche ses informations (ID, nombre de points, vitesse par défaut)
|
||||||
|
- Sinon : propose un bouton **Convertir en Track** (voir le [tutoriel Tracks](/tutoriels/tracks/))
|
||||||
|
|
||||||
|
### Vérification d'intégrité
|
||||||
|
|
||||||
|
Le bouton **Vérifier Intégrité** analyse tous les objets de la scène et détecte :
|
||||||
|
|
||||||
|
- **Noms en double** : deux objets portant exactement le même nom
|
||||||
|
- **Caractères invalides** : noms contenant des caractères autres que lettres, chiffres, points et underscores
|
||||||
|
- **Incohérences de nommage** : objets en mode automatique dont le nom ne correspond pas au format attendu
|
||||||
|
- **Compteur d'overrides** : nombre d'objets en mode "nommage libre"
|
||||||
|
|
||||||
|
Le rapport s'affiche dans une fenêtre popup avec les détails par catégorie.
|
||||||
|
|
||||||
|
### Nommage automatique
|
||||||
|
|
||||||
|
<Aside>
|
||||||
|
Pour un guide complet sur le système de nommage, consultez le [tutoriel dédié](/tutoriels/nommage/).
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
Deux modes de nommage sont disponibles :
|
||||||
|
|
||||||
|
<Tabs>
|
||||||
|
<TabItem label="Mode automatique">
|
||||||
|
|
||||||
|
Quand **Nommage Libre** est désactivé, l'addon génère automatiquement le nom de l'objet selon le format :
|
||||||
|
|
||||||
|
```
|
||||||
|
<type>_<nom_custom>
|
||||||
|
```
|
||||||
|
|
||||||
|
Par exemple : `tree_Oak01`, `building_Mairie`, `vehicle_Bus`.
|
||||||
|
|
||||||
|
Vous choisissez :
|
||||||
|
- Le **Type d'objet** dans le menu déroulant (tree, building, vehicle, animal, character, prop, sign, road, internal)
|
||||||
|
- Un **Nom custom** optionnel dans le champ texte
|
||||||
|
|
||||||
|
Le nom est recalculé automatiquement à chaque modification.
|
||||||
|
|
||||||
|
</TabItem>
|
||||||
|
<TabItem label="Nommage libre">
|
||||||
|
|
||||||
|
Quand **Nommage Libre** est activé, les champs Type et Nom custom sont grisés. Vous pouvez renommer l'objet librement dans Blender comme d'habitude.
|
||||||
|
|
||||||
|
Ce mode est pratique pour les objets qui ne suivent pas la convention de nommage standard.
|
||||||
|
|
||||||
|
</TabItem>
|
||||||
|
</Tabs>
|
||||||
|
|
||||||
|
La section **Informations** affiche en permanence :
|
||||||
|
- Le nom actuel de l'objet
|
||||||
|
- Un aperçu du nom qui serait généré automatiquement
|
||||||
|
- Un bouton **Réinitialiser Nom** pour remettre le nom automatique
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Propriétés Physiques
|
||||||
|
|
||||||
|
Ce panneau apparaît pour les objets de type **Mesh** ou **Empty**. Il permet de configurer le comportement physique de l'objet dans le moteur.
|
||||||
|
|
||||||
|
### Mode physique
|
||||||
|
|
||||||
|
Le menu déroulant principal détermine comment l'objet interagit avec le moteur physique :
|
||||||
|
|
||||||
|
| Mode | Description |
|
||||||
|
|---|---|
|
||||||
|
| **Aucun** | Pas de physique |
|
||||||
|
| **Static Collision** | Objet immobile avec collision (murs, sol, bâtiments) |
|
||||||
|
| **Moveable Collision** | Objet déplaçable avec collision (portes, plateformes) |
|
||||||
|
| **Physic + Collision** | Simulation physique complète (objets qui tombent, rebondissent) |
|
||||||
|
| **Character** | Contrôleur de personnage |
|
||||||
|
| **Vehicle** | Physique véhicule |
|
||||||
|
|
||||||
|
### Sections conditionnelles
|
||||||
|
|
||||||
|
Selon le mode choisi, des sections supplémentaires apparaissent :
|
||||||
|
|
||||||
|
- **Masques de collision** (Static, Moveable, Physic, Character, Vehicle) : deux champs pour définir quel "groupe" l'objet occupe (`Self Mask`) et avec quels groupes il entre en collision (`Collide With`)
|
||||||
|
- **Damping** (Physic, Vehicle uniquement) : amortissement linéaire et angulaire (0.0 à 1.0), contrôle la vitesse à laquelle l'objet perd son énergie cinétique
|
||||||
|
- **Collision Shapes** (Static, Moveable, Physic, Vehicle) : liste des formes de collision enfants, avec possibilité d'en ajouter de nouvelles
|
||||||
|
|
||||||
|
<Aside>
|
||||||
|
Pour un guide pratique sur la gestion des collision shapes, consultez le [tutoriel Physique](/tutoriels/physique/).
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Collision Shape Editor
|
||||||
|
|
||||||
|
Ce panneau apparaît uniquement quand un objet **Empty** est sélectionné. Il remplit deux rôles :
|
||||||
|
|
||||||
|
### Pour un empty qui est déjà une collision shape
|
||||||
|
|
||||||
|
- Affiche le **type actuel** de la shape (Box, Sphere, Capsule, Cylinder, Mesh)
|
||||||
|
- Propose des boutons pour **changer le type**
|
||||||
|
- Montre les informations de transformation (position, rotation, dimensions)
|
||||||
|
|
||||||
|
### Pour un empty classique
|
||||||
|
|
||||||
|
- Propose des boutons pour **convertir** l'empty en collision shape de chaque type disponible
|
||||||
|
- Pratique pour créer rapidement des shapes à partir d'empties existants
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Propriétés de Track
|
||||||
|
|
||||||
|
Ce panneau n'apparaît que pour les objets **Courbe** ayant été convertis en track (possédant une propriété `track_id`).
|
||||||
|
|
||||||
|
Il permet d'éditer les propriétés du track selon deux modes :
|
||||||
|
|
||||||
|
<Tabs>
|
||||||
|
<TabItem label="Mode Route">
|
||||||
|
|
||||||
|
Pour les tracks de circulation routière :
|
||||||
|
|
||||||
|
- **Type de route** : Route, Autoroute ou Ville — influence le comportement de la circulation
|
||||||
|
- **Vitesse** : presets rapides (30, 50, 70, 90, 110, 130 km/h) ou saisie personnalisée via un dialogue
|
||||||
|
|
||||||
|
</TabItem>
|
||||||
|
<TabItem label="Mode Animal">
|
||||||
|
|
||||||
|
Pour les tracks de déplacement d'animaux :
|
||||||
|
|
||||||
|
- **État** : presets rapides (idle, walk, run, graze) ou saisie personnalisée via un dialogue
|
||||||
|
- Contrôle le comportement de l'animal sur ce segment du track
|
||||||
|
|
||||||
|
</TabItem>
|
||||||
|
</Tabs>
|
||||||
|
|
||||||
|
<Aside>
|
||||||
|
Pour apprendre à créer et configurer des tracks, consultez le [tutoriel Tracks](/tutoriels/tracks/).
|
||||||
|
</Aside>
|
||||||
110
src/content/docs/blender/interface/shader-panel.mdx
Normal file
110
src/content/docs/blender/interface/shader-panel.mdx
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
---
|
||||||
|
title: Panneau Shader (GS Edit)
|
||||||
|
description: Présentation du panneau GS Edit dans l'éditeur de shaders pour la gestion des matériaux.
|
||||||
|
---
|
||||||
|
|
||||||
|
import { Aside, Steps } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
|
Le panneau **GS Edit** se trouve dans la **sidebar de l'éditeur de shaders** (Shader Editor), pas dans le viewport 3D. Il permet d'associer des références de shaders NSA et des canaux de texture aux matériaux Blender, pour que ces informations soient transmises lors de l'export.
|
||||||
|
|
||||||
|
<Aside type="caution">
|
||||||
|
Ce panneau n'est visible que dans le **Shader Editor** (éditeur de nœuds matériaux). Pour y accéder : passez en mode Shader Editor, puis ouvrez la sidebar avec `N` et cherchez l'onglet **GS Edit**.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
{/*  */}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Prérequis
|
||||||
|
|
||||||
|
Le panneau n'apparaît que si :
|
||||||
|
- Vous êtes dans le **Shader Editor**
|
||||||
|
- Un **matériau actif** existe sur l'objet sélectionné
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## NSA Shader
|
||||||
|
|
||||||
|
Cette section gère la référence au fichier shader `.nsa` utilisé par le moteur GS Framework.
|
||||||
|
|
||||||
|
### Sans shader assigné
|
||||||
|
|
||||||
|
Un bouton **Select NSA Shader** ouvre un navigateur de fichiers filtré sur les fichiers `.nsa`. Le chemin est stocké **relativement au dossier projet** configuré dans les préférences.
|
||||||
|
|
||||||
|
### Avec un shader assigné
|
||||||
|
|
||||||
|
- Le **chemin relatif** du shader est affiché
|
||||||
|
- Bouton **Change** : remplacer par un autre shader
|
||||||
|
- Bouton **Clear** : supprimer la référence
|
||||||
|
|
||||||
|
Un indicateur montre si le dossier projet est configuré. Si ce n'est pas le cas, le chemin sera stocké en absolu.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Texture Channels
|
||||||
|
|
||||||
|
Cette section liste les canaux de texture associés au matériau. Chaque canal lie un type de texture (diffuse, normal, specular…) à un fichier image.
|
||||||
|
|
||||||
|
### Liste des canaux
|
||||||
|
|
||||||
|
Une liste affiche les canaux existants avec pour chacun :
|
||||||
|
- **Index** du slot
|
||||||
|
- **Type** de canal (diffuse, normal, etc.)
|
||||||
|
- **Nom du fichier** texture
|
||||||
|
|
||||||
|
### Ajouter / Supprimer
|
||||||
|
|
||||||
|
- **Add Channel** : ajoute un nouveau slot de texture
|
||||||
|
- **Remove Channel** : supprime le canal sélectionné
|
||||||
|
|
||||||
|
### Détail du canal sélectionné
|
||||||
|
|
||||||
|
Quand un canal est sélectionné, un encadré affiche ses détails éditables :
|
||||||
|
|
||||||
|
- **Type** : menu déroulant avec les 13 types disponibles :
|
||||||
|
|
||||||
|
| Type | Description |
|
||||||
|
|---|---|
|
||||||
|
| `diffuse` | Couleur de base / albedo |
|
||||||
|
| `normal` | Carte de normales |
|
||||||
|
| `specular` | Carte de spéculaire |
|
||||||
|
| `glossiness` | Carte de brillance |
|
||||||
|
| `roughness` | Carte de rugosité |
|
||||||
|
| `opacity` | Carte d'opacité / transparence |
|
||||||
|
| `reflection` | Carte de réflexion |
|
||||||
|
| `selfillum` | Carte d'auto-illumination / émission |
|
||||||
|
| `light` | Carte de lumière (lightmap) |
|
||||||
|
| `ao` | Occlusion ambiante |
|
||||||
|
| `metallic` | Carte métallique |
|
||||||
|
| `colormask` | Masque de couleur |
|
||||||
|
| `custom` | Type personnalisé (un champ de nom apparaît) |
|
||||||
|
|
||||||
|
- **Index** : numéro du slot
|
||||||
|
- **Chemin** : chemin vers le fichier texture + bouton de parcours (supporte PNG, JPG, TGA, BMP, TIF, DDS)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Sauvegarder et charger
|
||||||
|
|
||||||
|
Deux boutons permettent de gérer la persistance des données :
|
||||||
|
|
||||||
|
- **Save** : enregistre la configuration actuelle des canaux dans les propriétés custom du matériau (stocké en JSON dans `nmm_textures`)
|
||||||
|
- **Load** : recharge la configuration depuis les propriétés custom du matériau — utile après avoir quitté et rouvert le fichier, ou pour restaurer les données importées
|
||||||
|
|
||||||
|
<Aside type="tip">
|
||||||
|
Pensez à cliquer sur **Save** après avoir modifié les canaux de texture. Les modifications dans la liste ne sont pas automatiquement sauvegardées dans les propriétés du matériau.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Clear All GS Data
|
||||||
|
|
||||||
|
Le bouton **Clear All GS Data** supprime à la fois la référence shader NSA et tous les canaux de texture du matériau. Le matériau retrouve son comportement GLTF standard.
|
||||||
|
|
||||||
|
<Aside type="caution">
|
||||||
|
Cette action est irréversible. Assurez-vous de ne plus avoir besoin des données GS avant de les supprimer.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
<Aside>
|
||||||
|
Pour un guide pratique sur la gestion des matériaux et shaders, consultez le [tutoriel Matériaux](/tutoriels/materiaux/).
|
||||||
|
</Aside>
|
||||||
104
src/content/docs/blender/interface/squirrel-tab.mdx
Normal file
104
src/content/docs/blender/interface/squirrel-tab.mdx
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
---
|
||||||
|
title: Onglet Squirrel
|
||||||
|
description: Présentation du panneau d'animations scriptées Squirrel.
|
||||||
|
---
|
||||||
|
|
||||||
|
import { Aside, Steps } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
|
L'onglet **Squirrel** se trouve dans la **sidebar du viewport 3D** (touche `N`). Il permet de charger et exécuter des scripts d'animation écrits en langage Squirrel, puis de les "bake" (convertir en keyframes) sur les objets de votre scène.
|
||||||
|
|
||||||
|
<Aside>
|
||||||
|
Ce système nécessite que le module C++ Squirrel soit compilé et que son chemin soit configuré dans les [préférences de l'addon](/getting-started/configuration/). Si vous ne l'utilisez pas, vous pouvez ignorer cet onglet.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
{/*  */}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Vue d'ensemble
|
||||||
|
|
||||||
|
Le panneau est organisé en sections verticales qui suivent un workflow séquentiel : initialisation → chargement du script → configuration → bake.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Manager
|
||||||
|
|
||||||
|
La première section contient le bouton **Initialize Squirrel Manager**. Il doit être cliqué **une seule fois** au début de votre session pour démarrer le moteur d'interprétation Squirrel.
|
||||||
|
|
||||||
|
<Aside type="caution">
|
||||||
|
Si le bouton affiche une erreur, vérifiez que le chemin du module Squirrel est correctement configuré dans les [préférences de l'addon](/getting-started/configuration/) et que le fichier `squirrel_bridge.pyd` existe à cet emplacement.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Script
|
||||||
|
|
||||||
|
- **Champ de chemin** : sélectionnez un fichier `.nut` (script Squirrel) via le sélecteur de fichiers
|
||||||
|
- **Bouton Load** : charge le script et détecte automatiquement les classes d'animation disponibles
|
||||||
|
|
||||||
|
Une fois le script chargé, la section suivante se remplit automatiquement.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Create Animation
|
||||||
|
|
||||||
|
### Sélection de classe
|
||||||
|
|
||||||
|
Un menu déroulant liste toutes les classes d'animation trouvées dans le script chargé. Chaque classe représente un type d'animation différent (rotation, oscillation, mouvement de balancier, etc.).
|
||||||
|
|
||||||
|
### Informations du script
|
||||||
|
|
||||||
|
Un encadré affiche les métadonnées de la classe sélectionnée :
|
||||||
|
|
||||||
|
- **Nom** : nom descriptif de l'animation
|
||||||
|
- **Auteur** : créateur du script
|
||||||
|
- **Catégorie** : classification (ex : "Environnement", "Véhicule")
|
||||||
|
- **Description** : explication de ce que fait l'animation
|
||||||
|
|
||||||
|
### Paramètres
|
||||||
|
|
||||||
|
Cette section affiche les paramètres configurables de l'animation sélectionnée, qui varient d'un script à l'autre. Chaque paramètre a un type spécifique :
|
||||||
|
|
||||||
|
| Type | Contrôle affiché |
|
||||||
|
|---|---|
|
||||||
|
| **Float** | Curseur numérique à virgule |
|
||||||
|
| **Int** | Curseur numérique entier |
|
||||||
|
| **Bool** | Case à cocher |
|
||||||
|
| **String** | Champ texte |
|
||||||
|
|
||||||
|
Les valeurs par défaut sont pré-remplies depuis le script.
|
||||||
|
|
||||||
|
### Target
|
||||||
|
|
||||||
|
Affiche l'objet Blender actuellement sélectionné sur lequel l'animation sera appliquée. L'animation affecte l'objet **et toute sa hiérarchie d'enfants**.
|
||||||
|
|
||||||
|
### Bouton Bake
|
||||||
|
|
||||||
|
Lance le calcul de l'animation. Le processus simule l'animation image par image et crée des keyframes sur l'objet et ses enfants.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Baking Settings
|
||||||
|
|
||||||
|
Deux paramètres contrôlent la résolution et la durée de l'animation bakée :
|
||||||
|
|
||||||
|
| Paramètre | Par défaut | Plage | Description |
|
||||||
|
|---|---|---|---|
|
||||||
|
| **FPS** | 30 | 1–120 | Images par seconde — plus la valeur est haute, plus l'animation est fluide mais plus le bake est long |
|
||||||
|
| **Duration** | 20 s | 0.1–300 s | Durée totale de l'animation en secondes |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Barre de progression
|
||||||
|
|
||||||
|
Pendant le bake, une barre de progression s'affiche indiquant l'avancement du calcul. Le bake s'effectue en tâche de fond — vous pouvez observer la progression sans que Blender ne se bloque.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Active Instances
|
||||||
|
|
||||||
|
En bas du panneau, la liste des animations actives sur les objets de votre scène. Chaque entrée affiche le nom de l'instance avec un bouton **Destroy** pour la supprimer et retirer les keyframes associés.
|
||||||
|
|
||||||
|
<Aside type="tip">
|
||||||
|
Pour un guide pratique pas à pas, consultez le [tutoriel Animations Squirrel](/tutoriels/animations/).
|
||||||
|
</Aside>
|
||||||
164
src/content/docs/blender/reference/proprietes-custom.mdx
Normal file
164
src/content/docs/blender/reference/proprietes-custom.mdx
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
---
|
||||||
|
title: Propriétés custom
|
||||||
|
description: Référence complète des propriétés custom stockées sur les objets Blender par l'addon.
|
||||||
|
---
|
||||||
|
|
||||||
|
import { Aside } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
|
Lors de l'import, l'addon stocke des métadonnées sur les objets Blender sous forme de **propriétés custom** (Custom Properties), visibles dans le panneau Properties → Object → Custom Properties. Ces propriétés préservent les informations nécessaires pour l'export et la traçabilité.
|
||||||
|
|
||||||
|
<Aside>
|
||||||
|
Ces propriétés sont destinées à la référence. Vous n'avez généralement pas besoin de les modifier manuellement — l'addon les gère via ses panneaux dédiés.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Propriétés communes (tous les objets importés)
|
||||||
|
|
||||||
|
| Propriété | Type | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| `asset_type` | Texte | Type d'asset : `NMG`, `NMS`, `Material`, `Camera`, `Light`, `Instance`, `CollisionShape`, `Trigger`, `Track` |
|
||||||
|
| `asset_file` | Texte | Chemin absolu vers le fichier source |
|
||||||
|
| `asset_name` | Texte | Nom du fichier source (sans chemin) |
|
||||||
|
| `asset_rel_path` | Texte | Chemin relatif depuis le dossier projet |
|
||||||
|
| `asset_timestamp` | Texte | Date/heure d'import (format ISO) |
|
||||||
|
| `object_type` | Texte | Type d'objet pour le nommage (`tree`, `building`, etc.) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Propriétés NMG (géométrie) — préfixe `nmg_`
|
||||||
|
|
||||||
|
Présentes sur les objets mesh importés depuis un fichier NMG.
|
||||||
|
|
||||||
|
| Propriété | Type | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| `nmg_materials` | JSON (liste) | Liste des chemins de fichiers matériaux (.nmm) référencés |
|
||||||
|
| `nmg_vertices` | Entier | Nombre de vertices du mesh |
|
||||||
|
| `nmg_polygons` | Entier | Nombre de polygones |
|
||||||
|
| `nmg_uv_channels` | Entier | Nombre de layers UV |
|
||||||
|
| `nmg_has_normals` | Booléen | Indique si les normales sont incluses dans le fichier |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Propriétés NMS (scène) — préfixe `nms_`
|
||||||
|
|
||||||
|
Présentes sur les objets importés depuis un fichier NMS.
|
||||||
|
|
||||||
|
| Propriété | Type | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| `nms_id` | Texte | Identifiant de l'item dans la scène NMS |
|
||||||
|
| `nms_uid` | Texte | Identifiant unique (UID) |
|
||||||
|
| `nms_active` | Booléen | L'item est actif dans la scène d'origine |
|
||||||
|
| `nms_static` | Booléen | L'item est statique |
|
||||||
|
| `nms_priority` | Entier | Priorité de l'item (uniquement si ≠ 0) |
|
||||||
|
| `nms_rotation_order` | Texte | Ordre de rotation (uniquement si ≠ "ZYX") |
|
||||||
|
| `nms_position` | Texte | Position originale dans le format NMS |
|
||||||
|
| `nms_rotation` | Texte | Rotation originale dans le format NMS |
|
||||||
|
| `nms_scale` | Texte | Échelle originale dans le format NMS |
|
||||||
|
| `nms_geometry_path` | Texte | Chemin du fichier .nmg référencé |
|
||||||
|
| `nms_template_path` | Texte | Chemin du template .nms (pour les instances) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Propriétés NMM (matériau) — préfixe `nmm_`
|
||||||
|
|
||||||
|
Présentes sur les **matériaux Blender** (pas sur les objets) importés depuis un fichier NMM.
|
||||||
|
|
||||||
|
### Couleurs et paramètres
|
||||||
|
|
||||||
|
| Propriété | Type | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| `nmm_diffuse` | Texte | Couleur diffuse originale |
|
||||||
|
| `nmm_specular` | Texte | Couleur spéculaire |
|
||||||
|
| `nmm_ambient` | Texte | Couleur ambiante |
|
||||||
|
| `nmm_self_illum` | Texte | Couleur d'auto-illumination (émission) |
|
||||||
|
| `nmm_glossiness` | Flottant | Brillance (uniquement si ≠ 0.5) |
|
||||||
|
| `nmm_opacity` | Flottant | Opacité (uniquement si ≠ 1.0) |
|
||||||
|
| `nmm_alpha_threshold` | Flottant | Seuil de transparence |
|
||||||
|
| `nmm_reflection` | Flottant | Intensité de la réflexion |
|
||||||
|
|
||||||
|
### Flags de rendu
|
||||||
|
|
||||||
|
| Propriété | Type | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| `nmm_smoothing` | Booléen | Lissage des normales |
|
||||||
|
| `nmm_double_sided` | Booléen | Rendu double-face |
|
||||||
|
| `nmm_shadeless` | Booléen | Matériau non affecté par l'éclairage |
|
||||||
|
| `nmm_use_vertex_color` | Booléen | Utilise les couleurs de vertex |
|
||||||
|
| `nmm_alpha_blend` | Booléen | Mode de mélange alpha |
|
||||||
|
| `nmm_render_mask` | Entier | Masque de rendu (bits) |
|
||||||
|
| `nmm_blend_op` | Texte | Opération de mélange |
|
||||||
|
|
||||||
|
### Références
|
||||||
|
|
||||||
|
| Propriété | Type | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| `nmm_shader_path` | Texte | Chemin relatif du shader .nsa |
|
||||||
|
| `nmm_physic_material` | Texte | Référence au matériau physique |
|
||||||
|
| `nmm_textures` | JSON (dict) | Dictionnaire des canaux de texture : `{"canal": {"path": "...", "index": N}}` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Propriétés physiques — préfixe `physic_`
|
||||||
|
|
||||||
|
Présentes sur les objets avec un mode physique assigné.
|
||||||
|
|
||||||
|
| Propriété | Type | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| `physic_mode` | Texte | Mode : `None`, `Static`, `Dynamic`, `Kinematic`, `Character`, `Vehicle` |
|
||||||
|
| `physic_self_mask` | Entier | Masque de collision propre |
|
||||||
|
| `physic_mask` | Entier | Masque de collision cible |
|
||||||
|
| `physic_linear_damping` | Flottant | Amortissement linéaire (0.0–1.0) |
|
||||||
|
| `physic_angular_damping` | Flottant | Amortissement angulaire (0.0–1.0) |
|
||||||
|
| `physic_char_radius` | Flottant | Rayon du contrôleur de personnage |
|
||||||
|
| `physic_char_height` | Flottant | Hauteur du contrôleur de personnage |
|
||||||
|
| `physic_char_max_step` | Flottant | Hauteur de marche max du personnage |
|
||||||
|
|
||||||
|
### Collision shapes
|
||||||
|
|
||||||
|
| Propriété | Type | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| `collision_shape_type` | Texte | Type de shape : `Box`, `Sphere`, `Capsule`, `Cylinder`, `Mesh` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Propriétés Track — préfixe `track_`
|
||||||
|
|
||||||
|
Présentes sur les courbes converties en tracks.
|
||||||
|
|
||||||
|
| Propriété | Type | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| `track_id` | Texte | Identifiant unique du track |
|
||||||
|
| `track_points` | Entier | Nombre de points du track |
|
||||||
|
| `track_default_speed` | Entier | Vitesse par défaut (km/h) |
|
||||||
|
| `track_default_road_type` | Entier | Type de route par défaut (0=Route, 1=Animal) |
|
||||||
|
| `track_mode` | Entier | Mode du track (0=Route, 1=Animal) |
|
||||||
|
| `track_points_data` | JSON (liste) | Données détaillées par point |
|
||||||
|
|
||||||
|
### Structure de `track_points_data`
|
||||||
|
|
||||||
|
Chaque point est un objet JSON :
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"index": 0,
|
||||||
|
"position_start": [x, y, z],
|
||||||
|
"position_end": [x, y, z],
|
||||||
|
"time": 0.0,
|
||||||
|
"speed": 90,
|
||||||
|
"road_type": 0,
|
||||||
|
"toll_lane": 0
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Propriétés d'interface — sans préfixe
|
||||||
|
|
||||||
|
Utilisées par les panneaux de l'addon pour l'état de l'interface.
|
||||||
|
|
||||||
|
| Propriété | Type | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| `item_active` | Booléen | Objet actif/inactif (synchronisé avec la visibilité viewport) |
|
||||||
|
| `custom_name` | Texte | Nom personnalisé pour le nommage automatique |
|
||||||
|
| `name_override` | Booléen | Mode Nommage Libre activé/désactivé |
|
||||||
163
src/content/docs/blender/reference/types-objets.mdx
Normal file
163
src/content/docs/blender/reference/types-objets.mdx
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
---
|
||||||
|
title: Types et constantes
|
||||||
|
description: Référence rapide des types d'objets, d'assets, de collision shapes et autres constantes de l'addon.
|
||||||
|
---
|
||||||
|
|
||||||
|
import { Aside } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Types d'objets (nommage)
|
||||||
|
|
||||||
|
Utilisés par le [système de nommage](/tutoriels/nommage/) pour catégoriser les objets.
|
||||||
|
|
||||||
|
| Valeur | Description |
|
||||||
|
|---|---|
|
||||||
|
| `tree` | Arbres, buissons, végétation |
|
||||||
|
| `building` | Bâtiments, structures |
|
||||||
|
| `vehicle` | Véhicules |
|
||||||
|
| `animal` | Animaux |
|
||||||
|
| `character` | Personnages, piétons |
|
||||||
|
| `prop` | Accessoires, mobilier urbain |
|
||||||
|
| `sign` | Panneaux, signalisation |
|
||||||
|
| `road` | Routes, trottoirs, voirie |
|
||||||
|
| `internal` | Objets internes au système |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Types d'assets
|
||||||
|
|
||||||
|
Définis dans le panneau Propriétés Communes, ils déterminent le rôle fonctionnel de l'objet.
|
||||||
|
|
||||||
|
| Valeur | Description |
|
||||||
|
|---|---|
|
||||||
|
| *(vide)* | Objet standard (Default) |
|
||||||
|
| `Trigger` | Zone de déclenchement |
|
||||||
|
| `CollisionShape` | Forme de collision |
|
||||||
|
| `Track` | Chemin de circulation |
|
||||||
|
| `NMG` | Géométrie importée |
|
||||||
|
| `NMS` | Objet de scène importé |
|
||||||
|
| `Material` | Matériau |
|
||||||
|
| `Camera` | Caméra |
|
||||||
|
| `Light` | Lumière |
|
||||||
|
| `Instance` | Instance de sous-scène |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Types de collision shapes
|
||||||
|
|
||||||
|
| Type | Forme | Affichage Empty Blender |
|
||||||
|
|---|---|---|
|
||||||
|
| `Box` | Parallélépipède rectangle | Cube |
|
||||||
|
| `Sphere` | Sphère | Sphere |
|
||||||
|
| `Capsule` | Cylindre arrondi | Sphere |
|
||||||
|
| `Cylinder` | Cylindre | Cube |
|
||||||
|
| `Mesh` | Forme libre | Plain Axes |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Modes physiques
|
||||||
|
|
||||||
|
| Mode | Comportement moteur | Type de simulation |
|
||||||
|
|---|---|---|
|
||||||
|
| `None` | Aucune physique | — |
|
||||||
|
| `Static` | Immobile, collision | Statique |
|
||||||
|
| `Kinematic` | Déplaçable, collision | Cinématique |
|
||||||
|
| `Dynamic` | Simulation complète | Dynamique |
|
||||||
|
| `Character` | Contrôleur personnage | Cinématique |
|
||||||
|
| `Vehicle` | Physique véhicule | Dynamique |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Canaux de texture
|
||||||
|
|
||||||
|
Types reconnus par le [panneau Shader GS Edit](/interface/shader-panel/) et le système d'import/export.
|
||||||
|
|
||||||
|
| Canal | Usage |
|
||||||
|
|---|---|
|
||||||
|
| `diffuse` | Couleur de base / albedo |
|
||||||
|
| `normal` | Carte de normales |
|
||||||
|
| `specular` | Réflexion spéculaire |
|
||||||
|
| `glossiness` | Brillance |
|
||||||
|
| `roughness` | Rugosité |
|
||||||
|
| `opacity` | Transparence |
|
||||||
|
| `reflection` | Réflexion environnementale |
|
||||||
|
| `selfillum` | Auto-illumination / émission |
|
||||||
|
| `light` | Lightmap |
|
||||||
|
| `ao` | Occlusion ambiante |
|
||||||
|
| `metallic` | Caractère métallique |
|
||||||
|
| `colormask` | Masque de couleur |
|
||||||
|
| `custom` | Canal personnalisé |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Types de route (Tracks)
|
||||||
|
|
||||||
|
| Valeur | Label | Usage |
|
||||||
|
|---|---|---|
|
||||||
|
| `0` | Route | Route standard |
|
||||||
|
| `1` | Autoroute | Voie rapide |
|
||||||
|
| `2` | Ville | Zone urbaine |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Modes de track
|
||||||
|
|
||||||
|
| Valeur | Mode | Usage |
|
||||||
|
|---|---|---|
|
||||||
|
| `0` | Route | Circulation routière (véhicules) |
|
||||||
|
| `1` | Animal | Déplacement animal |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## États animaux (Tracks)
|
||||||
|
|
||||||
|
Presets proposés par défaut dans l'interface :
|
||||||
|
|
||||||
|
| État | Description |
|
||||||
|
|---|---|
|
||||||
|
| `idle` | Stationnaire |
|
||||||
|
| `walk` | Marche |
|
||||||
|
| `run` | Course |
|
||||||
|
| `graze` | Broutage |
|
||||||
|
|
||||||
|
<Aside type="tip">
|
||||||
|
N'importe quel texte peut être saisi comme état animal — les presets ci-dessus ne sont que des raccourcis. Le moteur GS Framework peut supporter d'autres états définis par votre équipe.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Formats de fichiers
|
||||||
|
|
||||||
|
| Extension | Format | Contenu |
|
||||||
|
|---|---|---|
|
||||||
|
| `.nms` | Native Model Scene | Scène complète (hiérarchie, objets, instances, lumières, caméras) |
|
||||||
|
| `.nmg` | Native Model Geometry | Géométrie (mesh, UV, normales, indices) |
|
||||||
|
| `.nmm` | Native Model Material | Matériau (couleurs, textures, paramètres shader) |
|
||||||
|
| `.nsa` | Shader definition | Définition de shader pour le moteur |
|
||||||
|
| `.nut` | Squirrel script | Script d'animation Squirrel |
|
||||||
|
| `.scene.json` | Manifeste d'export | Description de la scène exportée (GLTF + métadonnées) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Presets de vitesse (Tracks routiers)
|
||||||
|
|
||||||
|
| Vitesse | Usage typique |
|
||||||
|
|---|---|
|
||||||
|
| 30 km/h | Zone résidentielle, scolaire |
|
||||||
|
| 50 km/h | Ville |
|
||||||
|
| 70 km/h | Départementale |
|
||||||
|
| 90 km/h | Nationale |
|
||||||
|
| 110 km/h | Voie rapide |
|
||||||
|
| 130 km/h | Autoroute |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Système de coordonnées
|
||||||
|
|
||||||
|
| Système | Axe haut | X |
|
||||||
|
|---|---|---|
|
||||||
|
| **GS Framework** | Y | Inversé |
|
||||||
|
| **Blender** | Z | Normal |
|
||||||
|
|
||||||
|
La conversion est automatique lors de l'import (`Flip X` + `Swap YZ`) et de l'export.
|
||||||
94
src/content/docs/blender/tutoriels/animations.mdx
Normal file
94
src/content/docs/blender/tutoriels/animations.mdx
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
---
|
||||||
|
title: Animations Squirrel
|
||||||
|
description: Utiliser le système d'animations scriptées Squirrel dans Blender.
|
||||||
|
---
|
||||||
|
|
||||||
|
import { Aside, Steps } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
|
Le système d'animations Squirrel permet d'exécuter des scripts d'animation écrits en langage Squirrel directement dans Blender, puis de convertir le résultat en keyframes exploitables. C'est utile pour les animations procédurales (rotation continue, oscillation, mouvement de balancier, etc.) définies par des scripts du moteur GS Framework.
|
||||||
|
|
||||||
|
<Aside>
|
||||||
|
Ce système nécessite un module C++ compilé (`squirrel_bridge.pyd`). Si le module n'est pas disponible ou que vous n'avez pas de scripts `.nut`, vous pouvez ignorer cette fonctionnalité.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Prérequis
|
||||||
|
|
||||||
|
1. Le module `squirrel_bridge.pyd` doit être **compilé** et présent sur votre machine
|
||||||
|
2. Son chemin doit être configuré dans les [préférences de l'addon](/getting-started/configuration/) (champ **Squirrel Bridge Build Path**)
|
||||||
|
3. Vous devez disposer d'un fichier script `.nut` contenant une ou plusieurs classes d'animation
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Workflow complet
|
||||||
|
|
||||||
|
<Steps>
|
||||||
|
|
||||||
|
1. **Initialisez le moteur** : dans l'onglet **Squirrel** de la sidebar, cliquez sur **Initialize Squirrel Manager**. Cette étape n'est nécessaire qu'une fois par session Blender.
|
||||||
|
|
||||||
|
2. **Chargez un script** : cliquez sur l'icône de fichier à côté du champ de chemin, naviguez jusqu'à votre fichier `.nut`, puis cliquez sur **Load**. Les classes d'animation du script sont détectées automatiquement.
|
||||||
|
|
||||||
|
3. **Sélectionnez une classe** : dans le menu déroulant, choisissez la classe d'animation à utiliser. Les informations du script s'affichent (nom, auteur, catégorie, description).
|
||||||
|
|
||||||
|
4. **Configurez les paramètres** : chaque script expose des paramètres configurables (vitesse de rotation, amplitude, fréquence, etc.). Ajustez-les selon vos besoins. Les types de paramètres varient :
|
||||||
|
- **Float** : curseur à virgule (ex: vitesse de rotation)
|
||||||
|
- **Int** : curseur entier (ex: nombre de cycles)
|
||||||
|
- **Bool** : case à cocher (ex: activer l'inversion)
|
||||||
|
- **String** : champ texte (ex: nom d'un axe)
|
||||||
|
|
||||||
|
5. **Sélectionnez l'objet cible** : dans le viewport, sélectionnez l'objet Blender sur lequel appliquer l'animation. L'objet cible est affiché dans la section **Target**.
|
||||||
|
|
||||||
|
6. **Réglez le bake** : dans la section **Baking Settings** :
|
||||||
|
- **FPS** : nombre d'images par seconde (défaut : 30). Plus c'est élevé, plus l'animation est fluide.
|
||||||
|
- **Duration** : durée totale en secondes (défaut : 20 s).
|
||||||
|
|
||||||
|
7. **Lancez le bake** : cliquez sur **Bake Animation**. Une barre de progression s'affiche pendant le calcul.
|
||||||
|
|
||||||
|
8. **Résultat** : des keyframes sont créées sur l'objet et tous ses enfants (position, rotation, échelle). L'animation est prête à être jouée dans la timeline Blender.
|
||||||
|
|
||||||
|
</Steps>
|
||||||
|
|
||||||
|
{/*  */}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ce qui se passe pendant le bake
|
||||||
|
|
||||||
|
Le processus de bake :
|
||||||
|
|
||||||
|
1. Simule l'animation image par image dans le moteur Squirrel (en tâche de fond)
|
||||||
|
2. Pour chaque frame, capture la position, rotation et échelle de l'objet cible **et de toute sa hiérarchie d'enfants**
|
||||||
|
3. Convertit les coordonnées du système GS Framework (Y-up) vers Blender (Z-up)
|
||||||
|
4. Crée les keyframes correspondantes dans Blender
|
||||||
|
|
||||||
|
<Aside type="tip">
|
||||||
|
Le bake s'effectue en arrière-plan — Blender reste réactif pendant le calcul. La barre de progression vous informe de l'avancement.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Gérer les animations actives
|
||||||
|
|
||||||
|
La section **Active Instances** en bas du panneau Squirrel liste toutes les animations actuellement bakées. Chaque entrée affiche le nom de l'instance avec un bouton **Destroy** pour supprimer l'animation et retirer les keyframes associées.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Scripts d'animation
|
||||||
|
|
||||||
|
Les scripts `.nut` sont des fichiers texte écrits en langage Squirrel. Chaque script peut contenir une ou plusieurs classes d'animation. Les métadonnées (nom, auteur, paramètres) sont définies dans un bloc de commentaires spécial en tête de classe.
|
||||||
|
|
||||||
|
<Aside>
|
||||||
|
La création de scripts d'animation est une tâche de développeur. En tant que modélisateur, vous utilisez les scripts fournis par votre équipe de développement — l'onglet Squirrel vous permet de les appliquer sans écrire de code.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Résolution de problèmes
|
||||||
|
|
||||||
|
| Problème | Solution |
|
||||||
|
|---|---|
|
||||||
|
| Le bouton Initialize échoue | Vérifiez le chemin du module dans les préférences → `squirrel_bridge.pyd` doit exister |
|
||||||
|
| Aucune classe détectée après Load | Le script `.nut` peut ne pas contenir de classes valides, ou avoir une erreur de syntaxe |
|
||||||
|
| L'animation est décalée/inversée | Vérification normale : le système convertit automatiquement Y-up → Z-up |
|
||||||
|
| Le bake est très lent | Réduisez la durée ou le FPS. Une animation de 300s à 120 FPS = 36 000 frames à calculer |
|
||||||
42
src/content/docs/blender/tutoriels/asset-library.mdx
Normal file
42
src/content/docs/blender/tutoriels/asset-library.mdx
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
---
|
||||||
|
title: Animations Squirrel
|
||||||
|
description: Utiliser le système d'animations scriptées Squirrel dans Blender.
|
||||||
|
---
|
||||||
|
import { Aside } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
|
La création de la librairie permettra de se faciliter la vie pour récupérer les assets, matériaux... pour la création de scène.
|
||||||
|
|
||||||
|
# Prérequis
|
||||||
|
|
||||||
|
**1. Créer un nouveaux Layout dans blender**
|
||||||
|
|
||||||
|
- En haut de blender, dupliquer le Layout de base nommer Layout et renommer le en bibliotheque.
|
||||||
|
- Agrandissez la fenêtre de Timeline en bas de blender. Cliquet sur **Editor Type** est changer la fenêtre de **Timeline → Assets Browser**.<br></br>
|
||||||
|
(Pour conserver le **Layout bibliotheque** sauvegarder la scène. **File → Defaults → Save Startup File** (Le faire avec la scène de base, lumière, caméra et l'object cube)).
|
||||||
|
|
||||||
|
<Aside type="caution"title="Attention !"> Si vous voulez le **Layout bibliotheque** dans un blender déjà existant avec des éléments à l'intérieur, créer juste le Layout, ne sauvegardez pas la scène.</Aside>
|
||||||
|
|
||||||
|
|
||||||
|
**2. Ajouter la librairie d'assets au fichier blender.**
|
||||||
|
|
||||||
|
- Dans le fenêtre "assets browser", en haut à gauche cliquet sur **All Libraries** et sélectionner **User Library**.
|
||||||
|
- Cliquet sur "Open Preferences...". Dans la fenêtre "Preferences" aller dans **File Paths → Asset Libraries**.
|
||||||
|
- Cliquet sur le + à droite pour ajouter une nouvelle librairie, puis aller chercher le dossier ou se trouve les blender des objects.<br></br>
|
||||||
|
**NAS-Developper → Developpement → 3D → asset-library**<br></br>
|
||||||
|
Fermer la fenêtre de préférence, cliquet en haut à gauche de la fenêtre Asset Browser sur **User Library**. En bas de la liste vous trouverez le dossier **asset-library** avec tous les assets rangés par catégorie.
|
||||||
|
|
||||||
|
# Utilisation de la Librairie
|
||||||
|
|
||||||
|
**1. Imports des assets**
|
||||||
|
|
||||||
|
- Sélectionner l'object que vous voulez importer et dropper le dans la scène.
|
||||||
|
|
||||||
|
**2. Import d'un ensemble d'object parenté**
|
||||||
|
|
||||||
|
- Dans la bibliotheque, il y a des objets qui sont composés de plusieurs objets.<br></br>
|
||||||
|
Quand on place cet objet dans la scène, il se comporte comme un objet unique. Pour séparer l'objet en plusieurs morceaux et retrouver la hiérarchie de parents il faut:<br></br>
|
||||||
|
Tout en haut dans la barre de tâche sélectionner **Object → Apply → Make Instance Real**. L'object retrouvera ça hiérarchie parent enfant.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
192
src/content/docs/blender/tutoriels/export.mdx
Normal file
192
src/content/docs/blender/tutoriels/export.mdx
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
---
|
||||||
|
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 NMS Export](/interface/export-tab/) de la sidebar
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Options d'export
|
||||||
|
|
||||||
|
| Option | Par défaut | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| **Scene Name** | (nom du .blend) | Nom de la scène dans le manifeste. 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 partagé (expérimental) |
|
||||||
|
| **Export as Single Subscene** | ❌ | Exporte toute la scène comme un seul GLTF sans décomposition |
|
||||||
|
|
||||||
|
<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 sous-panneau **Instance Properties** de l'[onglet NMS Export](/interface/export-tab/).
|
||||||
|
|
||||||
|
### 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 **NMS Export** dans la sidebar.
|
||||||
|
|
||||||
|
3. Le sous-panneau **Instance Properties** affiche les informations de l'instance.
|
||||||
|
|
||||||
|
4. Utilisez les boutons **Quick Add** pour ajouter rapidement les propriétés courantes.
|
||||||
|
|
||||||
|
5. Ou utilisez le bouton **Add Custom Property** pour ajouter une propriété avec un nom et un type personnalisés.
|
||||||
|
|
||||||
|
</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 Properties.
|
||||||
|
|
||||||
|
3. **Configurez les matériaux** avec le [panneau GS Edit](/interface/shader-panel/) si nécessaire (shaders NSA, canaux de texture).
|
||||||
|
|
||||||
|
4. Allez dans **File → Export → Composite Scene** (ou cliquez sur le bouton dans l'onglet NMS Export).
|
||||||
|
|
||||||
|
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 NMS Export avant d'exporter — elle vous montre combien de collections, instances et objets locaux seront traités
|
||||||
|
- **Sauvegardez les matériaux** (bouton Save dans le panneau GS Edit) avant d'exporter pour que les données shader soient à jour
|
||||||
|
|
||||||
|
</Aside>
|
||||||
161
src/content/docs/blender/tutoriels/materiaux.mdx
Normal file
161
src/content/docs/blender/tutoriels/materiaux.mdx
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
---
|
||||||
|
title: Matériaux et shaders
|
||||||
|
description: Comprendre et gérer les matériaux GS Framework dans Blender.
|
||||||
|
---
|
||||||
|
|
||||||
|
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
|
L'addon gère les matériaux GS Framework à deux niveaux : l'**import** (conversion des fichiers NMM en matériaux Blender) et l'**édition** (configuration des shaders et textures via le panneau GS Edit pour l'export).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Comment les matériaux NMM sont convertis
|
||||||
|
|
||||||
|
Lors de l'import d'un fichier NMM, l'addon crée un matériau Blender utilisant le shader **Principled BSDF** et configure ses paramètres :
|
||||||
|
|
||||||
|
| Donnée NMM | Résultat dans Blender |
|
||||||
|
|---|---|
|
||||||
|
| Couleur diffuse | Base Color |
|
||||||
|
| Couleur spéculaire | Specular |
|
||||||
|
| Glossiness | Roughness (inversé : glossiness haute = roughness basse) |
|
||||||
|
| Self-illumination | Emission Color + Strength |
|
||||||
|
| Opacité | Alpha |
|
||||||
|
| Texture diffuse | Connectée à Base Color |
|
||||||
|
| Texture normal | Connectée via un nœud Normal Map |
|
||||||
|
| Texture AO | Multipliée avec Base Color |
|
||||||
|
| Texture metallic | Connectée à Metallic |
|
||||||
|
| Double-sided | Backface culling désactivé |
|
||||||
|
| Shadeless | Matériau en émissif pur |
|
||||||
|
| Alpha blend | Mode blend Alpha activé |
|
||||||
|
|
||||||
|
Toutes les données originales restent accessibles dans les **propriétés custom** du matériau (préfixe `nmm_`), permettant un export fidèle.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Le panneau GS Edit (Shader Editor)
|
||||||
|
|
||||||
|
Le panneau de gestion des matériaux se trouve dans la **sidebar du Shader Editor**, onglet **GS Edit**. Voir la [présentation complète du panneau](/interface/shader-panel/).
|
||||||
|
|
||||||
|
Il permet de :
|
||||||
|
|
||||||
|
- Associer un **shader NSA** au matériau
|
||||||
|
- Définir les **canaux de texture** et leurs fichiers
|
||||||
|
- **Sauvegarder / charger** ces données dans les propriétés custom du matériau
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Canaux de texture disponibles
|
||||||
|
|
||||||
|
L'addon reconnaît 13 types de canaux de texture :
|
||||||
|
|
||||||
|
| Canal | Usage |
|
||||||
|
|---|---|
|
||||||
|
| `diffuse` | Couleur de base / albedo |
|
||||||
|
| `normal` | Carte de normales pour le relief |
|
||||||
|
| `specular` | Intensité de la réflexion spéculaire |
|
||||||
|
| `glossiness` | Brillance de la surface |
|
||||||
|
| `roughness` | Rugosité de la surface (inverse de glossiness) |
|
||||||
|
| `opacity` | Transparence |
|
||||||
|
| `reflection` | Réflexion environnementale |
|
||||||
|
| `selfillum` | Auto-illumination / émission |
|
||||||
|
| `light` | Lightmap (éclairage précalculé) |
|
||||||
|
| `ao` | Occlusion ambiante |
|
||||||
|
| `metallic` | Caractère métallique |
|
||||||
|
| `colormask` | Masque de couleur |
|
||||||
|
| `custom` | Canal personnalisé (vous choisissez le nom) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Assigner un shader et des textures manuellement
|
||||||
|
|
||||||
|
<Steps>
|
||||||
|
|
||||||
|
1. **Sélectionnez** un objet avec un matériau dans le viewport.
|
||||||
|
|
||||||
|
2. **Ouvrez le Shader Editor** (passez un éditeur en mode Shader Editor, ou utilisez le layout Shading).
|
||||||
|
|
||||||
|
3. Ouvrez la **sidebar** du Shader Editor (touche `N`) et allez dans l'onglet **GS Edit**.
|
||||||
|
|
||||||
|
4. Dans la section **NSA Shader**, cliquez sur **Select NSA Shader** et naviguez jusqu'au fichier `.nsa` souhaité.
|
||||||
|
|
||||||
|
{/*  */}
|
||||||
|
|
||||||
|
5. Dans la section **Texture Channels**, cliquez sur **Add Channel** pour ajouter un canal.
|
||||||
|
|
||||||
|
6. Sélectionnez le canal ajouté dans la liste. Dans le détail :
|
||||||
|
- Choisissez le **type** (ex: `diffuse`)
|
||||||
|
- Cliquez sur le bouton de parcours pour sélectionner le **fichier texture**
|
||||||
|
|
||||||
|
7. Répétez pour chaque canal nécessaire (normal, specular, etc.).
|
||||||
|
|
||||||
|
8. Cliquez sur **Save** pour enregistrer la configuration dans les propriétés du matériau.
|
||||||
|
|
||||||
|
</Steps>
|
||||||
|
|
||||||
|
<Aside type="caution">
|
||||||
|
Les modifications dans la liste des canaux ne sont **pas automatiquement sauvegardées**. Cliquez toujours sur **Save** après vos modifications, sinon elles seront perdues en fermant le fichier.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Workflow Save / Load
|
||||||
|
|
||||||
|
<Tabs>
|
||||||
|
<TabItem label="Save">
|
||||||
|
|
||||||
|
**Save** lit la configuration actuelle de la liste des canaux de texture dans le panneau et l'écrit dans les propriétés custom du matériau sous forme d'un dictionnaire JSON (propriété `nmm_textures`).
|
||||||
|
|
||||||
|
**Quand l'utiliser** : après chaque modification des canaux de texture.
|
||||||
|
|
||||||
|
</TabItem>
|
||||||
|
<TabItem label="Load">
|
||||||
|
|
||||||
|
**Load** lit les propriétés custom du matériau (`nmm_textures`) et remplit la liste des canaux dans le panneau.
|
||||||
|
|
||||||
|
**Quand l'utiliser** :
|
||||||
|
- Après avoir ouvert un fichier contenant des matériaux importés
|
||||||
|
- Pour restaurer la configuration après avoir fait des changements non sauvegardés
|
||||||
|
- Pour synchroniser le panneau avec les données stockées
|
||||||
|
|
||||||
|
</TabItem>
|
||||||
|
</Tabs>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Supprimer les données GS
|
||||||
|
|
||||||
|
Le bouton **Clear All GS Data** supprime :
|
||||||
|
- La référence au shader NSA (`nmm_shader_path`)
|
||||||
|
- Tous les canaux de texture (`nmm_textures`)
|
||||||
|
|
||||||
|
Le matériau retrouve un comportement GLTF standard. Cette action est utile si vous voulez exporter le matériau en GLTF pur sans les métadonnées GS Framework.
|
||||||
|
|
||||||
|
<Aside type="caution">
|
||||||
|
Cette suppression est irréversible. Les données GS originales seront perdues.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Formats de texture supportés
|
||||||
|
|
||||||
|
Le sélecteur de fichiers textures accepte les formats suivants :
|
||||||
|
|
||||||
|
- **PNG** (.png)
|
||||||
|
- **JPEG** (.jpg, .jpeg)
|
||||||
|
- **TGA** (.tga)
|
||||||
|
- **BMP** (.bmp)
|
||||||
|
- **TIFF** (.tif, .tiff)
|
||||||
|
- **DDS** (.dds)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Bonnes pratiques
|
||||||
|
|
||||||
|
<Aside type="tip">
|
||||||
|
|
||||||
|
- **Importez d'abord**, éditez ensuite : les matériaux NMM importés ont déjà leurs canaux correctement configurés dans les propriétés custom. Utilisez **Load** pour les voir dans le panneau.
|
||||||
|
- **Un canal par type** : évitez de mettre deux canaux du même type (ex: deux `diffuse`). Le dernier écrasera le premier lors de l'export.
|
||||||
|
- **Chemins relatifs** : configurez le [dossier projet](/getting-started/configuration/) pour que les chemins de textures soient stockés de manière relative et portable.
|
||||||
|
- **Vérifiez dans le Shader Editor** : les nœuds Principled BSDF de Blender vous montrent le résultat visuel des textures connectées, indépendamment des données GS stockées.
|
||||||
|
|
||||||
|
</Aside>
|
||||||
156
src/content/docs/blender/tutoriels/nommage.mdx
Normal file
156
src/content/docs/blender/tutoriels/nommage.mdx
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
---
|
||||||
|
title: Système de nommage
|
||||||
|
description: Comprendre et utiliser les conventions de nommage de l'addon BlenderEdit.
|
||||||
|
---
|
||||||
|
|
||||||
|
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
|
L'addon impose un système de nommage structuré pour garantir la cohérence des objets exportés vers le moteur GS Framework. Ce système est géré depuis le panneau **Propriétés Communes** de l'[onglet GSEdit](/interface/gsedit-tab/).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Principe
|
||||||
|
|
||||||
|
Chaque objet Blender peut être nommé selon deux modes :
|
||||||
|
|
||||||
|
<Tabs>
|
||||||
|
<TabItem label="Nommage automatique">
|
||||||
|
|
||||||
|
Le nom est généré automatiquement à partir de deux informations :
|
||||||
|
|
||||||
|
- Le **type d'objet** (catégorie fonctionnelle)
|
||||||
|
- Un **nom personnalisé** (identifiant unique)
|
||||||
|
|
||||||
|
Le format résultant est :
|
||||||
|
|
||||||
|
```
|
||||||
|
<type>_<nom_personnalisé>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Exemples** :
|
||||||
|
- `tree_Oak01` — un arbre nommé Oak01
|
||||||
|
- `building_Mairie` — un bâtiment nommé Mairie
|
||||||
|
- `vehicle_Bus` — un véhicule nommé Bus
|
||||||
|
- `prop_Bench` — un accessoire nommé Bench
|
||||||
|
|
||||||
|
Si seul le type est renseigné → le nom est juste le type (ex: `tree`).
|
||||||
|
Si seul le nom personnalisé est renseigné → le nom est juste le nom (ex: `Oak01`).
|
||||||
|
|
||||||
|
</TabItem>
|
||||||
|
<TabItem label="Nommage libre">
|
||||||
|
|
||||||
|
Quand le mode **Nommage Libre** est activé (case cochée), le système automatique est désactivé. Vous pouvez renommer l'objet comme vous le souhaitez directement dans Blender.
|
||||||
|
|
||||||
|
Les champs Type et Nom custom sont grisés et n'ont aucun effet.
|
||||||
|
|
||||||
|
</TabItem>
|
||||||
|
</Tabs>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Types d'objets disponibles
|
||||||
|
|
||||||
|
Le menu déroulant **Type d'objet** propose les catégories suivantes :
|
||||||
|
|
||||||
|
| Type | Usage typique |
|
||||||
|
|---|---|
|
||||||
|
| `tree` | Arbres, buissons, végétation |
|
||||||
|
| `building` | Bâtiments, structures architecturales |
|
||||||
|
| `vehicle` | Véhicules (voitures, bus, camions) |
|
||||||
|
| `animal` | Animaux |
|
||||||
|
| `character` | Personnages, piétons |
|
||||||
|
| `prop` | Accessoires, mobilier urbain, objets décoratifs |
|
||||||
|
| `sign` | Panneaux, signalisation |
|
||||||
|
| `road` | Routes, trottoirs, éléments de voirie |
|
||||||
|
| `internal` | Objets internes / système |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Types d'assets
|
||||||
|
|
||||||
|
Indépendamment du type d'objet (qui sert au nommage), chaque objet a un **type d'asset** qui définit son rôle fonctionnel :
|
||||||
|
|
||||||
|
| Type d'asset | Rôle |
|
||||||
|
|---|---|
|
||||||
|
| **Default** | Objet standard, aucun rôle spécial |
|
||||||
|
| **Trigger** | Zone de déclenchement d'événements |
|
||||||
|
| **Collision Shape** | Forme de collision physique |
|
||||||
|
| **Track** | Chemin de circulation |
|
||||||
|
|
||||||
|
Le type d'asset n'affecte pas le nom automatique mais contrôle quelles sections apparaissent dans l'interface (par exemple, la section Track n'est visible que pour les assets de type Track ou les courbes/meshes).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Nettoyage des noms
|
||||||
|
|
||||||
|
Les noms sont automatiquement nettoyés :
|
||||||
|
|
||||||
|
- Tous les caractères non alphanumériques sont remplacés par des underscores `_`
|
||||||
|
- Les underscores en début et fin de nom sont supprimés
|
||||||
|
- Seuls les caractères `a-z`, `A-Z`, `0-9` et `_` sont conservés
|
||||||
|
|
||||||
|
**Exemple** : `Arbre (chêne) #2` devient `Arbre_ch_ne_2`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Nommer correctement vos objets
|
||||||
|
|
||||||
|
<Steps>
|
||||||
|
|
||||||
|
1. **Sélectionnez** l'objet dans le viewport.
|
||||||
|
|
||||||
|
2. Dans l'onglet **GSEdit** de la sidebar, trouvez le panneau **Propriétés Communes**.
|
||||||
|
|
||||||
|
3. **Désactivez Nommage Libre** si ce n'est pas déjà fait (la case doit être décochée).
|
||||||
|
|
||||||
|
4. Choisissez le **Type d'objet** dans le menu déroulant (ex: `tree`).
|
||||||
|
|
||||||
|
5. Saisissez un **Nom custom** dans le champ texte (ex: `Oak01`).
|
||||||
|
|
||||||
|
6. Le nom de l'objet est mis à jour automatiquement : `tree_Oak01`.
|
||||||
|
|
||||||
|
7. Vérifiez dans la section **Informations** que le nom affiché correspond à ce que vous attendez.
|
||||||
|
|
||||||
|
</Steps>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Vérification d'intégrité
|
||||||
|
|
||||||
|
Le bouton **Vérifier Intégrité** analyse **tous les objets de la scène** et détecte les problèmes suivants :
|
||||||
|
|
||||||
|
### Erreurs (à corriger)
|
||||||
|
|
||||||
|
| Problème | Description |
|
||||||
|
|---|---|
|
||||||
|
| **Noms en double** | Deux objets ou plus portent exactement le même nom |
|
||||||
|
| **Caractères invalides** | Le nom contient des caractères autres que lettres, chiffres, points et underscores |
|
||||||
|
|
||||||
|
### Avertissements
|
||||||
|
|
||||||
|
| Problème | Description |
|
||||||
|
|---|---|
|
||||||
|
| **Format incohérent** | Un objet en mode automatique a un nom qui ne correspond pas au format `type_nom` attendu (peut arriver si le nom a été modifié manuellement sans passer par les champs) |
|
||||||
|
|
||||||
|
### Informations
|
||||||
|
|
||||||
|
| Information | Description |
|
||||||
|
|---|---|
|
||||||
|
| **Compteur d'overrides** | Nombre d'objets en mode Nommage Libre, pour encourager l'utilisation du nommage structuré |
|
||||||
|
|
||||||
|
Le rapport s'affiche dans une fenêtre popup organisée par catégorie (erreurs, avertissements, informations).
|
||||||
|
|
||||||
|
<Aside type="tip">
|
||||||
|
Lancez la vérification d'intégrité avant chaque export pour vous assurer que tous les noms sont valides et uniques.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Réinitialiser un nom
|
||||||
|
|
||||||
|
Si vous avez modifié manuellement le nom d'un objet et souhaitez revenir au nom automatique :
|
||||||
|
|
||||||
|
1. Sélectionnez l'objet
|
||||||
|
2. Dans la section **Informations** du panneau Propriétés Communes, cliquez sur **Réinitialiser Nom**
|
||||||
|
|
||||||
|
Le bouton **Effacer Nom Custom** vide uniquement le champ de nom personnalisé, sans toucher au type.
|
||||||
146
src/content/docs/blender/tutoriels/physique.mdx
Normal file
146
src/content/docs/blender/tutoriels/physique.mdx
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
---
|
||||||
|
title: Gestion de la physique
|
||||||
|
description: Configurer les propriétés physiques et les collision shapes de vos objets.
|
||||||
|
---
|
||||||
|
|
||||||
|
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
|
L'addon permet de définir les propriétés physiques de vos objets directement dans Blender : mode de collision, shapes, masques et amortissement. Ces données sont exportées vers le moteur GS Framework.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Modes physiques
|
||||||
|
|
||||||
|
Le mode physique détermine comment l'objet se comporte dans le moteur. Il se configure dans le panneau **Propriétés Physiques** de l'[onglet GSEdit](/interface/gsedit-tab/).
|
||||||
|
|
||||||
|
| Mode | Comportement | Exemples |
|
||||||
|
|---|---|---|
|
||||||
|
| **Aucun** | L'objet n'a aucune physique ni collision | Éléments décoratifs sans interaction |
|
||||||
|
| **Static Collision** | Immobile, les autres objets entrent en collision avec lui | Murs, sol, bâtiments, terrain |
|
||||||
|
| **Moveable Collision** | Peut être déplacé par le moteur, a de la collision | Portes coulissantes, plateformes mobiles |
|
||||||
|
| **Physic + Collision** | Simulation physique complète (gravité, forces, rebonds) | Objets qui tombent, caisses, débris |
|
||||||
|
| **Character** | Contrôleur de personnage (kinematic) | Personnages joueurs ou PNJ |
|
||||||
|
| **Vehicle** | Physique véhicule avec simulation dynamique | Voitures, bus, camions |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Masques de collision
|
||||||
|
|
||||||
|
Les masques de collision contrôlent **quels objets entrent en collision entre eux**. Ils apparaissent pour tous les modes sauf "Aucun".
|
||||||
|
|
||||||
|
| Champ | Rôle |
|
||||||
|
|---|---|
|
||||||
|
| **Self Mask** | Le "groupe" auquel appartient cet objet |
|
||||||
|
| **Collide With** | Les groupes avec lesquels cet objet entre en collision |
|
||||||
|
|
||||||
|
Deux objets entrent en collision uniquement si le Self Mask de l'un correspond au Collide With de l'autre (et vice-versa).
|
||||||
|
|
||||||
|
<Aside type="tip">
|
||||||
|
En pratique, laissez les valeurs par défaut sauf si vous avez besoin de filtrer spécifiquement quels objets peuvent se toucher (par exemple, empêcher les véhicules de collisionner avec certains éléments décoratifs).
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Amortissement (Damping)
|
||||||
|
|
||||||
|
Visible uniquement pour les modes **Physic + Collision** et **Vehicle**.
|
||||||
|
|
||||||
|
| Paramètre | Plage | Effet |
|
||||||
|
|---|---|---|
|
||||||
|
| **Linear Damping** | 0.0 – 1.0 | Ralentit le déplacement linéaire de l'objet. 0 = aucun amortissement, 1 = arrêt immédiat |
|
||||||
|
| **Angular Damping** | 0.0 – 1.0 | Ralentit la rotation de l'objet. 0 = tourne indéfiniment, 1 = arrêt immédiat |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Collision Shapes
|
||||||
|
|
||||||
|
Les collision shapes définissent la **forme géométrique utilisée pour calculer les collisions**. Elles ne sont pas visibles dans le rendu final — ce sont des volumes de collision simplifiés.
|
||||||
|
|
||||||
|
### Types de shapes
|
||||||
|
|
||||||
|
| Type | Forme | Représentation dans Blender |
|
||||||
|
|---|---|---|
|
||||||
|
| **Box** | Parallélépipède rectangle | Empty en mode Cube |
|
||||||
|
| **Sphere** | Sphère | Empty en mode Sphere |
|
||||||
|
| **Capsule** | Cylindre arrondi aux extrémités | Empty en mode Sphere |
|
||||||
|
| **Cylinder** | Cylindre | Empty en mode Cube |
|
||||||
|
| **Mesh** | Forme libre (mesh de collision) | Empty en mode Plain Axes |
|
||||||
|
|
||||||
|
<Aside>
|
||||||
|
Les collision shapes sont représentées par des **objets Empty** dans Blender. Leur type d'affichage (Cube, Sphere, etc.) donne un aperçu visuel de la forme, mais les dimensions exactes sont stockées dans les propriétés custom.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
### Structure dans la scène
|
||||||
|
|
||||||
|
Les collision shapes sont des **objets enfants** de l'objet physique. La hiérarchie est la suivante :
|
||||||
|
|
||||||
|
```
|
||||||
|
MonObjet (mesh, mode: Static Collision)
|
||||||
|
└── CollisionShape_Box (empty, type: Box)
|
||||||
|
└── CollisionShape_Sphere (empty, type: Sphere)
|
||||||
|
```
|
||||||
|
|
||||||
|
Chaque shape a sa propre position, rotation et échelle **relative à l'objet parent**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ajouter une collision shape
|
||||||
|
|
||||||
|
<Steps>
|
||||||
|
|
||||||
|
1. **Sélectionnez** l'objet mesh auquel vous voulez ajouter une collision.
|
||||||
|
|
||||||
|
2. Dans le panneau **Propriétés Physiques** (onglet GSEdit), choisissez un **mode physique** différent de "Aucun" (par exemple "Static Collision").
|
||||||
|
|
||||||
|
3. Dans la section **Collision Shapes**, cliquez sur **Ajouter Collision Shape**.
|
||||||
|
|
||||||
|
4. Choisissez le **type de shape** dans le menu (Box, Sphere, Capsule, Cylinder, Mesh).
|
||||||
|
|
||||||
|
5. Un objet empty est créé comme enfant de votre objet, positionné à son centre.
|
||||||
|
|
||||||
|
6. **Déplacez, tournez et redimensionnez** l'empty pour ajuster la shape à votre modèle.
|
||||||
|
|
||||||
|
</Steps>
|
||||||
|
|
||||||
|
{/*  */}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Convertir un empty existant en collision shape
|
||||||
|
|
||||||
|
Si vous avez déjà un empty dans votre scène que vous souhaitez utiliser comme collision shape :
|
||||||
|
|
||||||
|
<Steps>
|
||||||
|
|
||||||
|
1. **Sélectionnez** l'empty.
|
||||||
|
|
||||||
|
2. Le panneau **Collision Shape Editor** apparaît dans l'onglet GSEdit.
|
||||||
|
|
||||||
|
3. Cliquez sur le bouton correspondant au type souhaité (Box, Sphere, Capsule, Cylinder, Mesh).
|
||||||
|
|
||||||
|
4. L'empty est convertit : ses propriétés custom sont configurées et son type d'affichage est mis à jour.
|
||||||
|
|
||||||
|
</Steps>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Changer le type d'une collision shape
|
||||||
|
|
||||||
|
Si une collision shape existe déjà mais que vous voulez changer son type :
|
||||||
|
|
||||||
|
1. Sélectionnez la collision shape (l'empty enfant)
|
||||||
|
2. Dans le **Collision Shape Editor**, des boutons de changement de type sont affichés
|
||||||
|
3. Cliquez sur le type souhaité — les propriétés et l'affichage sont mis à jour
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Bonnes pratiques
|
||||||
|
|
||||||
|
<Aside type="tip">
|
||||||
|
|
||||||
|
- **Utilisez des shapes simples** (Box, Sphere) autant que possible — elles sont beaucoup plus performantes que les Mesh colliders dans le moteur
|
||||||
|
- **Combinez plusieurs shapes** pour approximer des formes complexes plutôt que d'utiliser un Mesh collider
|
||||||
|
- **Vérifiez la hiérarchie** : les shapes doivent être enfants de l'objet physique
|
||||||
|
- Pour les bâtiments, une Box suffit souvent. Pour les véhicules, combinez plusieurs Box pour le châssis et les roues
|
||||||
|
|
||||||
|
</Aside>
|
||||||
144
src/content/docs/blender/tutoriels/tracks.mdx
Normal file
144
src/content/docs/blender/tutoriels/tracks.mdx
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
---
|
||||||
|
title: Gestion des tracks
|
||||||
|
description: Créer, configurer et éditer des chemins de circulation (tracks) dans Blender.
|
||||||
|
---
|
||||||
|
|
||||||
|
import { Aside, Steps, Tabs, TabItem } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
|
Les **tracks** sont des chemins de circulation utilisés par le moteur GS Framework pour guider le déplacement de véhicules (routes) ou d'animaux (sentiers). Ils sont définis par une série de points avec des métadonnées (vitesse, type de route, état animal).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Concept
|
||||||
|
|
||||||
|
Un track est une **courbe Blender** (objet Curve) enrichie de métadonnées :
|
||||||
|
|
||||||
|
- **Points** : positions 3D définissant le chemin
|
||||||
|
- **Vitesse** : vitesse de déplacement sur le track (en km/h pour les routes)
|
||||||
|
- **Type de route** : classification du segment (route, autoroute, ville)
|
||||||
|
- **Mode** : route (véhicules) ou animal
|
||||||
|
- **État** : pour les tracks animaux, le comportement de l'animal (idle, walk, run, graze)
|
||||||
|
|
||||||
|
Chaque point du track stocke ses propres métadonnées, permettant de varier la vitesse ou le type le long du parcours.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Créer un track
|
||||||
|
|
||||||
|
Les points de contrôle de la courbe définissent le chemin.
|
||||||
|
|
||||||
|
<Steps>
|
||||||
|
|
||||||
|
1. **Créez une courbe** dans Blender (Add → Curve → Path, Bezier, ou NURBS).
|
||||||
|
|
||||||
|
2. **Modifiez la courbe** en Edit Mode pour placer les points de contrôle le long du chemin souhaité.
|
||||||
|
|
||||||
|
3. Repassez en **Object Mode** et sélectionnez la courbe.
|
||||||
|
|
||||||
|
4. Dans l'onglet **GSEdit**, panneau **Propriétés Communes**, trouvez la section Track.
|
||||||
|
|
||||||
|
5. Cliquez sur **Convertir en Track**.
|
||||||
|
|
||||||
|
6. Une fenêtre de configuration apparaît :
|
||||||
|
- **Vitesse par défaut** : vitesse initiale pour tous les points (0–500 km/h, défaut : 50)
|
||||||
|
- **Type de route par défaut** : 0 = Route, 1 = Animal
|
||||||
|
|
||||||
|
7. Confirmez — la courbe est maintenant un track avec toutes ses métadonnées.
|
||||||
|
|
||||||
|
</Steps>
|
||||||
|
|
||||||
|
{/*  */}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Configurer un track
|
||||||
|
|
||||||
|
Une fois le track créé, le panneau **Propriétés de Track** apparaît quand la courbe est sélectionnée. Deux modes sont disponibles :
|
||||||
|
|
||||||
|
### Mode Route
|
||||||
|
|
||||||
|
Pour les tracks de circulation routière (véhicules).
|
||||||
|
|
||||||
|
#### Type de route
|
||||||
|
|
||||||
|
Trois types disponibles via des boutons :
|
||||||
|
|
||||||
|
| Type | Valeur | Usage |
|
||||||
|
|---|---|---|
|
||||||
|
| **Route** | 0 | Route standard, urbaine ou de campagne |
|
||||||
|
| **Autoroute** | 1 | Axe rapide, voie express |
|
||||||
|
| **Ville** | 2 | Zone urbaine dense |
|
||||||
|
|
||||||
|
Le type de route influence le comportement de la circulation dans le moteur (densité, règles de priorité, etc.).
|
||||||
|
|
||||||
|
#### Vitesse
|
||||||
|
|
||||||
|
Des presets rapides sont disponibles :
|
||||||
|
|
||||||
|
| Preset | Description |
|
||||||
|
|---|---|
|
||||||
|
| **30 km/h** | Zone résidentielle, zone scolaire |
|
||||||
|
| **50 km/h** | Ville standard |
|
||||||
|
| **70 km/h** | Route départementale |
|
||||||
|
| **90 km/h** | Route nationale |
|
||||||
|
| **110 km/h** | Voie rapide |
|
||||||
|
| **130 km/h** | Autoroute |
|
||||||
|
|
||||||
|
Un bouton de saisie personnalisée permet de définir n'importe quelle vitesse entre 0 et 300 km/h.
|
||||||
|
|
||||||
|
### Mode Animal
|
||||||
|
|
||||||
|
Pour les tracks de déplacement d'animaux.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Mettre à jour un track
|
||||||
|
|
||||||
|
Si vous modifiez la géométrie de la courbe après avoir créé le track (ajout de points, déplacement) :
|
||||||
|
|
||||||
|
<Steps>
|
||||||
|
|
||||||
|
1. Sélectionnez la courbe du track.
|
||||||
|
|
||||||
|
2. Dans le panneau **Propriétés Communes**, cliquez sur **Mettre à jour Track**.
|
||||||
|
|
||||||
|
3. Choisissez si vous voulez **conserver les métadonnées existantes** :
|
||||||
|
- **Oui** (par défaut) : si le nombre de points n'a pas changé, les vitesses et types de route sont préservés
|
||||||
|
- **Non** : les métadonnées sont réinitialisées aux valeurs par défaut
|
||||||
|
|
||||||
|
</Steps>
|
||||||
|
|
||||||
|
<Aside type="caution">
|
||||||
|
Si le nombre de points a changé (ajout ou suppression de points de contrôle), les métadonnées par point sont réinitialisées même si l'option de conservation est activée — l'addon ne peut pas deviner quelle métadonnée correspond à quel nouveau point.
|
||||||
|
</Aside>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Données stockées
|
||||||
|
|
||||||
|
Chaque track porte ces propriétés custom sur l'objet courbe :
|
||||||
|
|
||||||
|
| Propriété | Description |
|
||||||
|
|---|---|
|
||||||
|
| `track_id` | Identifiant unique du track |
|
||||||
|
| `track_points` | Nombre de points |
|
||||||
|
| `track_default_speed` | Vitesse par défaut (km/h) |
|
||||||
|
| `track_default_road_type` | Type de route par défaut |
|
||||||
|
| `track_mode` | Mode : 0 = Route, 1 = Animal |
|
||||||
|
| `track_points_data` | Données complètes de chaque point (JSON) |
|
||||||
|
|
||||||
|
Les données par point contiennent : index, positions de début/fin pour l'interpolation, temps, vitesse, type de route, et voie de péage.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Bonnes pratiques
|
||||||
|
|
||||||
|
<Aside type="tip">
|
||||||
|
|
||||||
|
- **Utilisez des courbes de type Path** pour les routes droites et les autoroutes
|
||||||
|
- **Utilisez des courbes Bézier** pour les routes sinueuses et les sentiers animaux
|
||||||
|
- **Nommez vos tracks** clairement (ex: `track_RueHauteVitesse`, `track_SentierCerf`) grâce au [système de nommage](/tutoriels/nommage/)
|
||||||
|
- **Vérifiez le sens** de la courbe : le premier point de contrôle est le début du track, le dernier est la fin
|
||||||
|
- **Adaptez la vitesse** aux segments : utilisez une vitesse plus basse dans les virages, plus haute sur les lignes droites
|
||||||
|
|
||||||
|
</Aside>
|
||||||
40
src/content/docs/index.mdx
Normal file
40
src/content/docs/index.mdx
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
---
|
||||||
|
title: Welcome to Starlight
|
||||||
|
description: Get started building your docs site with Starlight.
|
||||||
|
template: splash # Remove or comment out this line to display the site sidebar on this page.
|
||||||
|
hero:
|
||||||
|
tagline: Congrats on setting up a new Starlight project!
|
||||||
|
image:
|
||||||
|
file: ../../assets/houston.webp
|
||||||
|
actions:
|
||||||
|
- text: Example Guide
|
||||||
|
link: /squirrel/overview
|
||||||
|
icon: right-arrow
|
||||||
|
- text: Read the Starlight docs
|
||||||
|
link: https://starlight.astro.build
|
||||||
|
icon: external
|
||||||
|
variant: minimal
|
||||||
|
---
|
||||||
|
|
||||||
|
import { Card, CardGrid } from '@astrojs/starlight/components';
|
||||||
|
|
||||||
|
## Next steps
|
||||||
|
|
||||||
|
<CardGrid stagger>
|
||||||
|
<Card title="Update content" icon="pencil">
|
||||||
|
Edit `src/content/docs/index.mdx` to see this page change.
|
||||||
|
</Card>
|
||||||
|
<Card title="Change page layout" icon="document">
|
||||||
|
Delete `template: splash` in `src/content/docs/index.mdx` to display a
|
||||||
|
sidebar on this page.
|
||||||
|
</Card>
|
||||||
|
<Card title="Add new content" icon="add-document">
|
||||||
|
Add Markdown or MDX files to `src/content/docs` to create new pages.
|
||||||
|
</Card>
|
||||||
|
<Card title="Configure your site" icon="setting">
|
||||||
|
Edit your `sidebar` and other config in `astro.config.mjs`.
|
||||||
|
</Card>
|
||||||
|
<Card title="Read the docs" icon="open-book">
|
||||||
|
Learn more in [the Starlight Docs](https://starlight.astro.build/).
|
||||||
|
</Card>
|
||||||
|
</CardGrid>
|
||||||
6
src/content/docs/squirrel/overview.md
Normal file
6
src/content/docs/squirrel/overview.md
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
title: Squirrel doc
|
||||||
|
description: This is the first file of the Squirrel documentation.
|
||||||
|
---
|
||||||
|
|
||||||
|
This is the first file of the Squirrel documentation.
|
||||||
14
src/content/docs/squirrel/ui/component.md
Normal file
14
src/content/docs/squirrel/ui/component.md
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
title: Composants
|
||||||
|
description: Les composants sont les briques de base de l'interface utilisateur.
|
||||||
|
---
|
||||||
|
|
||||||
|
Les composants sont les briques de l'interface utilisateur. A partir d'eux, il est possible de construire l'intégralité de l'interface utilisateur.
|
||||||
|
|
||||||
|
## Les bases
|
||||||
|
|
||||||
|
Toutes les composants sont des classes qui dépende de la classe `UIElement`.
|
||||||
|
|
||||||
|
## Ajouter une brique
|
||||||
|
|
||||||
|
Pour ajouter une brique, donc un composant de base, il faut créer un nouveau fichier dans le dossier `app/scripts/ui/components` qui hérite de la classe `UIElement`. Cette classe doit
|
||||||
5
tsconfig.json
Normal file
5
tsconfig.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"extends": "astro/tsconfigs/strict",
|
||||||
|
"include": [".astro/types.d.ts", "**/*"],
|
||||||
|
"exclude": ["dist"]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user