Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 50

Composants de Scène R3F Réutilisables

Recommended resources

Bonjour ! Bienvenue dans le dernier module de notre cours. Jusqu'à présent, nous avons parcouru un chemin impressionnant : des bases de React aux fondamentaux de Three.js, en passant par la puissance déclarative de React Three Fiber (R3F) et les techniques d'optimisation professionnelles comme Draco et KTX2.

Vous avez maintenant toutes les compétences techniques pour créer des scènes 3D complexes et performantes. Il est temps de les assembler pour construire un projet concret et professionnel : un showcase de produit interactif.

Dans cette première leçon du projet final, nous nous concentrons sur la compétence la plus importante pour garantir qu'un projet reste maintenable et évolutif : apprendre à structurer un projet R3F en composants de scène réutilisables. Tout comme en développement web où l'on ne met pas tout son site dans un seul fichier HTML, en 3D avec R3F, nous allons décomposer nos scènes en blocs logiques et réutilisables.

1. La philosophie de R3F : Penser en composants

En tant que développeur web, vous êtes déjà habitué à penser en termes de composants pour construire une interface utilisateur. React Three Fiber applique cette même philosophie à la 3D. Au lieu de manipuler une "scène" de manière impérative, nous allons la décrire comme un arbre de composants React.

Qu'est-ce que React Three Fiber?

Pour bien saisir cette idée fondamentale, lisez cette courte introduction à React Three Fiber.

Lisez les sections "Three.js" et "React Three Fiber". Portez une attention particulière à la comparaison de code : elle illustre parfaitement comment R3F transforme les objets Three.js en composants JSX déclaratifs. Cela rend le code plus lisible et plus proche de ce que vous connaissez avec React.

React Three Fiber vs. Three.js Code Comparison
Cette image compare la création d'une simple boîte en R3F (à gauche) et en Three.js pur (à droite). La syntaxe déclarative de R3F est immédiatement plus familière pour un développeur React.

Cette approche par composants est la clé pour gérer la complexité.


2. Le premier pas : Extraire un objet en composant

Imaginons une scène simple avec plusieurs cubes. Au lieu de copier-coller le code du <mesh> plusieurs fois, nous pouvons créer un composant <Cube> réutilisable. C'est le principe de base de la structuration de scène.

React Three Fiber (R3F) - The Basics

Cette vidéo montre de manière très claire comment passer d'un code répétitif à un composant réutilisable. C'est la première étape vers un code propre.

Regardez la section de 00:16:24 à 00:19:46. L'auteur commence avec plusieurs meshes, puis refactorise le tout en un seul composant Cube qui accepte des props comme position, size et color. Observez comment cela simplifie immédiatement le code de la scène principale.

Cette technique est exactement la même que celle que vous utiliseriez pour créer un composant <Button> ou <Card> en React. Vous identifiez un élément d'interface (ici, un objet 3D), vous l'isolez dans sa propre fonction, et vous le rendez configurable via des props.


3. Organiser la structure globale de la scène

Maintenant que nous savons comment créer des composants pour les objets, appliquons la même logique à la scène entière. Une bonne pratique consiste à ne pas placer toute la logique 3D directement dans votre composant App.jsx.

On sépare généralement la configuration du <Canvas> du contenu de la scène elle-même.

React Three Fiber (R3F) - The Basics

La même vidéo nous montre une excellente pratique d'organisation. En extrayant toute la scène dans son propre composant, on garde App.jsx propre et on prépare le terrain pour des applications plus complexes.

Regardez la courte section de 00:58:33 à 00:59:52. L'auteur déplace tout le contenu du <Canvas> dans un nouveau composant Scene. C'est une étape cruciale pour structurer un projet : App gère la page, Canvas gère le contexte 3D, et un composant Scene (ou Experience) gère les objets 3D.

Une structure de départ saine pour nos projets R3F ressemble donc souvent à ceci :

// Dans App.jsx
function App() {
  return (
    <>
      <div className="ui">...</div>
      <Canvas>
        <Experience />
      </Canvas>
    </>
  );
}

// Dans Experience.jsx
function Experience() {
  return (
    <>
      {/* Nos lumières, modèles 3D, etc. viendront ici */}
    </>
  );
}

4. Le workflow professionnel : Générer des composants à partir de modèles 3D

Pour notre projet de showcase, nous n'allons pas assembler des cubes, mais plutôt charger un modèle 3D complexe, par exemple au format .glb. La meilleure façon de l'intégrer dans R3F est de le convertir en un composant React.

L'écosystème de R3F (Poimandres) fournit un outil formidable pour cela : gltfjsx. Il analyse un fichier 3D et génère automatiquement un composant React, avec chaque partie du modèle accessible.

React Three Fiber tutorial - 3D Product Configurator

Regardons ce workflow en action dans le cadre d'un projet de configurateur de produit. C'est exactement le type de structure que nous voulons mettre en place.

Regardez la section de 00:13:35 à 00:16:09. L'auteur utilise la commande gltfjsx pour transformer son modèle chair.gltf en un composant Chair.js. Analysez le fichier Chair.js généré : remarquez comment il sépare les différentes parties du modèle (cushion, legs) en <mesh> distincts. Cela nous permettra de les manipuler (changer leur couleur, les cacher, etc.) très facilement plus tard.

L'utilisation de gltfjsx est une pratique standard dans le développement R3F professionnel. Elle nous offre :

  • Réutilisabilité : On peut maintenant utiliser <Chair /> n'importe où.
  • Performance : Le hook useGLTF précharge et met en cache le modèle.
  • Contrôle : Chaque partie du modèle est un <mesh> que l'on peut contrôler via des props, comme n'importe quel autre composant React.

5. L'architecture d'un projet de showcase

Maintenant, assemblons toutes ces idées pour définir l'architecture de notre projet final. Une scène de présentation de produit se compose généralement de plusieurs éléments logiques :

  1. Le produit lui-même (le modèle 3D).
  2. L'éclairage (les différentes lumières qui le mettent en valeur).
  3. L'environnement (un sol, un arrière-plan, des reflets).
  4. Les contrôles (pour que l'utilisateur puisse interagir).

Au lieu de tout mélanger, nous allons créer un composant pour chaque partie. Notre composant <Experience /> pourrait ressembler à ça :

// Experience.jsx

import { Product } from './Product';
import { Lighting } from './Lighting';
import { Environment }s from './Environment';
import { OrbitControls } from '@react-three/drei';

export function Experience() {
  return (
    <>
      <OrbitControls />
      <Lighting />
      <Environment />
      <Product />
    </>
  );
}

C'est une structure claire, lisible et facile à maintenir. Si vous devez ajuster l'éclairage, vous savez qu'il faut aller dans Lighting.jsx. Si vous voulez changer le modèle 3D, vous modifiez Product.jsx.

Le projet "Product Configurator" de la vidéo précédente est un excellent exemple de cette composition. Le composant Experience assemble des composants drei comme <Stage> et <PresentationControls> avec le composant personnalisé <Chair>.


Conclusion

Félicitations ! Vous venez d'apprendre le principe le plus important pour passer de petites démos à des applications 3D robustes et professionnelles.

Voici les points clés à retenir :

  • Pensez en composants : Une scène R3F est un arbre de composants React, tout comme une interface web.
  • Décomposez la complexité : Isolez les objets, les systèmes (comme l'éclairage) et les modèles complexes dans leurs propres composants réutilisables.
  • Adoptez une structure claire : Séparez la configuration du <Canvas> du contenu de la scène. Une structure App > Canvas > Experience est un excellent point de départ.
  • Utilisez gltfjsx : C'est l'outil standard pour transformer vos modèles 3D en composants React performants et faciles à manipuler.

Avec cette mentalité d'architecte logiciel, vous êtes prêt à construire des projets 3D qui sont non seulement beaux et performants, mais aussi propres, organisés et agréables à développer.

Aperçu de la prochaine leçon :

Dans la prochaine leçon, nous mettrons en pratique cette architecture. Nous allons assembler une scène de présentation de produit complète en créant et en combinant nos composants pour le modèle, l'éclairage et l'environnement. Nous allons poser les fondations statiques de notre projet final.