Portfolio, un projet de Maxime Gallotta
Le camp, mon portfolio : une forêt en 3D en Three.js et WebGPU qu’on visite à la souris, un téléphone pour tout menu, des saisons et des secrets.
Le camp
Mon portfolio, une forêt qu’on visite à la souris.
- Ouvert
- depuis juin 2026
- Créé par
- Maxime, de A à Z
- Moteur
- Three.js, WebGPU
Un portfolio qu’on ne lit pas, qu’on visite
On glisse la souris pour se promener dans une forêt. Chaque clairière montre une partie de mon travail, et un téléphone façon Animal Crossing remplace tous les menus : la carte, les messages, la météo, les défis, mon passeport.
Le moteur part d’un folio open source, crédité dans le téléphone. La map, les objets, les interactions, l’interface et l’ambiance sonore sont les miens.
- Three.js WebGPU
- TSL
- Vite
- GSAP
- Howler
- Blender + Python
Six clairières
La visite part du coin vinyle et suit des sentiers peints à la main dans la texture du terrain. Chaque clairière a son rôle.
- Camp
- Coin vinyle
- Présentation
- Projets
- Terrain de jeu
- Contact
Un téléphone pour tout menu
Tab ou le bouton rond le sort : carte de l’île, messages, météo et heure du camp, défis, paramètres, passeport. Sept applis, toutes dessinées pour le site.
Qu’on reste
Pas une vitrine à faire défiler : un endroit où l’on a envie de traîner.
Mes trois règles
- Aucun menu : tout passe par un téléphone
- Aucune voiture : on glisse la souris
- Des secrets à trouver en chemin
Le défi
Montrer des projets sans perdre la balade. Un CV se parcourt en quelques secondes ; un endroit, on s’y promène, on y revient.
Un monde qui vit sans nous
Le jour et la nuit tournent, les saisons suivent le calendrier : neige et guirlandes en hiver, feuilles mortes et citrouilles en automne, papillons et abeilles au printemps. Les sons de la forêt suivent ce que montre l’écran.
Des choses à toucher
Une table de blackjack où l’on s’assoit, un tourne-disque avec trois morceaux composés par Maxime, Alexis et Fabrice, des nénuphars qui sautent, des lettres ANNECY qu’on fait tomber.
Et des secrets
Neuf runes à allumer, des gemmes cachées, des défis qu’on suit dans le téléphone : de quoi revenir.
- Runes
- Gemmes cachées
- Lettres ANNECY
- Blackjack
- Vinyles
- Nénuphars
Léger
Beaucoup de choses à l’écran, peu de travail pour la carte graphique.
Triangles par image, vue d’été : seules les instances autour de la vue restent.
- Sans tri : 429 k
- Avec tri : 152 k
- 1 draw call pour la forêt
- Toute la forêt en un seul dessin : Feuillus, gros arbre, buissons et sapins partagent un mesh instancié ; chaque touffe est un plan découpé par une SDF.
- Tous les objets opaques aussi : Troncs, rochers, champignons, nénuphars : une texture de sommets, que le vertex shader relit forme par forme.
- Seulement ce qu’on voit : Les instances autour de la vue sont tassées à l’avant du buffer dès qu’elle bouge d’une unité.
- Le décor sort de scripts : 15 scripts Python génèrent les objets dans Blender et retirent les faces que la caméra ne voit jamais.
- Rien côté processeur : Abeilles, papillons, fumée, cristal : tout bouge dans le shader, aucun calcul par image.
- La carte se dessine seule : Le jeu rend lui-même la carte du téléphone, tuile par tuile, depuis l’angle de sa caméra.
Le tour
Neuf vues prises dans le jeu, de jour, de nuit et en hiver.
Aucune retouche : chaque vue sort du canvas du jeu, avec son cycle du jour et ses saisons.
Bilan
Quatre mois et demi, un camp, et pas mal de leçons.
Commits par mois
- juin : 19
- juil. : 0
- août : 0
- sept. : 83
- oct. : 43
145 commits · ≈ 30 000 lignes · 41 éléments du monde · 7 applis
Le budget décide de tout
Chaque idée se paie en draw calls. Fusionner, instancier et animer dans le shader m’a permis d’en mettre beaucoup plus que prévu.
Un script vaut mieux qu’un clic
Déplacer une ruche, c’est relancer son script Blender. Rien n’est jamais retouché à la main deux fois.
Le son fait la moitié de l’ambiance
Oiseaux à l’aube, grillons l’été, neige feutrée l’hiver : on sent la saison avant de la voir.