Communitygithub.com

immersive-3d-site

Créez un site Web 3D immersif et temps réel avec des scènes Three.js interactives derrière du HTML réel, piloté par le défilement et le curseur de la souris.

Qu'est-ce que immersive-3d-site ?

Ce skill permet de construire un site Web 3D immersif où le rendu 3D est en direct (pas une vidéo) et où le défilement du visiteur sert de chronologie tandis que son curseur agit comme une seconde caméra. Le texte réel reste lisible et sélectionnable au-dessus du canevas WebGL. Le skill guide l'utilisateur à travers quatre règles clés pour éviter l'échec des pages 3D classiques : chaque section (acte) doit proposer un dispositif scénique différent, il doit y avoir un seul moment fort (peak), la 3D sert le message, et le texte reste lisible à toute position de défilement. Le processus comprend la rédaction d'un brief, la sélection d'une structure narrative, l'enregistrement d'une empreinte unique pour éviter la duplication, la construction avec un moteur modulaire (stage.js et stage.css), et la validation via des captures d'écran automatisées sur desktop, mobile et en mode réduit. Le résultat est un dossier de build contenant le site statique, des captures d'écran et un rapport de vérification.

Compatible avec~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/automatorsplus/immersive-3d-site-skill/tree/HEAD/.claude/skills/immersive-3d-site

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait immersive-3d-site ?

Une page où la 3D est en direct, pas une vidéo de 3D. Le défilement du visiteur est la chronologie et son curseur est une seconde caméra. Le vrai texte se trouve au-dessus, lisible et sélectionnable ; le canevas WebGL se trouve derrière.

Ce que vous rendez : un dossier de build avec BRIEF.md, un vrai index.html, les fichiers du moteur à côté, et une série de captures d'écran depuis desktop, téléphone et mouvement réduit, plus un court rapport de ce que vous avez vérifié et de ce que vous n'avez pas pu vérifier.

Ce qui fait échouer ces pages

La plupart des "sites Web 3D" ne reposent que sur un seul effet pour toute la page : un modèle qui tourne avec du texte qui apparaît par-dessus. Dès la troisième section, le visiteur a tout vu et arrête de défiler. Quatre règles empêchent cela :

  1. Chaque acte fait quelque chose de différent. Utilisez au moins quatre dispositifs scéniques différents parmi references/scene-kit.md, jamais le même deux fois de suite.
  2. Un seul sommet. Un acte est le moment que quelqu'un décrirait à un ami. Il obtient le plus d'espace de défilement, la meilleure scène, et un acte plus calme avant lui pour que l'impact soit maximal.
  3. La 3D sert le message. Chaque scène montre quelque chose de vrai sur le sujet : de quoi il est fait, comment il fonctionne, ce qu'il procure. Une scène qui n'est que décoration est supprimée.
  4. Le texte reste lisible à chaque position de défilement. Si une ligne est difficile à lire sur la scène à une image donnée, c'est la scène qui bouge, pas le texte.

Étape 0 : Le brief

Réutilisez ce que l'utilisateur vous a déjà donné. S'il a fourni un brief complet ou a dit "utilisez votre jugement", écrivez BRIEF.md vous-même, marquez-le Rédigé sous délégation créative, répondez vous-même à chaque question ci-dessous dans la voix de la marque, et lancez-vous. Sinon, posez les huit questions en un seul message, comme de vraies questions, jamais un menu que vous avez inventé :

  1. Qu'est-ce que c'est, à qui cela s'adresse-t-il, et que doivent-ils faire à la fin ? Une action, un libellé utilisé partout.
  2. L'ambiance en trois à cinq mots, plus jusqu'à trois références venant de tout sauf de sites Web : un film, un jeu, une pochette d'album, un magasin. Citer des sites Web est ainsi qu'une page finit par en copier un.
  3. Le parcours dans leurs mots : ce que le visiteur voit en premier, ensuite, en dernier.
  4. Où cela doit être calme et où cela doit être intense.
  5. Comment quelqu'un doit se sentir à chaque étape, et le moment unique dont il doit se souvenir. Voir references/feel.md.
  6. Une chose que ce site doit faire qu'aucun site qu'ils ont vu ne fait. La graine du geste signature. Insistez pour une vraie réponse ; "être mémorable" n'en est pas une.
  7. À quel point s'éloigner du premium-minimal : proposez la gamme dans references/structures.md.
  8. Un monde continu, ou des scènes séparées ? La plus grande fourche structurelle, et leur décision. En plus : ce qu'ils ont déjà (logo, couleurs, polices, photos de produits, modèles 3D en .glb).

Écrivez BRIEF.md dans le dossier de build avec leurs réponses dans leurs mots, puis ajoutez :

  • Le parcours : quatre à sept temps forts, chacun un changement dans ce que le visiteur sait ou ressent.
  • La courbe des sentiments : une ligne par temps fort, le sentiment et ce qui à l'écran le provoque. Pas deux voisins identiques.
  • Le sommet : la phrase qu'un visiteur dirait à son sujet, et dans quel acte il se trouve.
  • C'est le site où ___ : complété par une expérience, pas une technique.
  • Le geste signature : une interaction qui n'existe que sur ce site, codée dans la page. Un dispositif de kit avec de nouveaux chiffres ne compte pas.
  • Tout silence délibéré, marqué, pour que les vérifications puissent le distinguer d'un défilement mort.

Étape 1 : Structure, journal, puis notation

Trois choses, dans cet ordre. Toutes les trois avant tout code.

Choisissez une structure parmi references/structures.md : un monde, chapitres, étape produit, exposition, terrain de jeu, éditorial avec inserts, diffusion. La navigation, l'ouverture et la fermeture en découlent. Écrivez dans BRIEF.md pourquoi celle-ci et pas les autres.

Exécutez le journal d'empreinte. Lisez FINGERPRINTS.md dans le dossier qui contient vos builds (créez-le s'il manque ; il commence vide). Le plan doit différer de chaque ligne existante sur au moins quatre des éléments : structure, navigation, dispositif d'accroche, séquence d'actes, fermeture, geste signature. S'il échoue, changez le plan, pas le journal.

Notez-le. Courbe des sentiments d'abord, puis un dispositif par temps fort, sous forme de tableau dans BRIEF.md :

Temps fortActeSentimentDispositifPortéePourquoi ce dispositif
Reconnaissanceaccrochecuriositéobjet en verre + travelling2Le produit, vivant, avant même qu'un mot soit lu
Viragemorphanticipationmorphing de particules3Le bruit devient une forme devient le nom
Sommetrailémerveillementrail de caméra3.5Voyager à travers lui dit qu'il y a beaucoup à l'intérieur
Preuveexplosionconfiancevue éclatée2.5Montre les pièces, ce qui est l'affirmation
Engagementfermeturecalmetenue calme1.5La page s'arrête et attend le clic

Vérifications avant de builder :

  • Les interdictions de la structure tiennent.
  • Quatre familles de dispositifs ou plus de references/scene-kit.md, jamais deux fois de suite.
  • Aucun deux temps forts voisins ne partagent un sentiment.
  • Le sommet a la plus grande portée, et l'acte avant lui est plus calme.
  • La fermeture termine et tient au lieu de s'estomper dans un pied de page.
  • Les portées sont en hauteurs d'écran. Une page cinématographique fait environ 8 à 14 ; les pages éditoriales et de terrains de jeu peuvent être plus courtes. Ne rembourrez jamais pour atteindre un nombre.

Étape 2 : Builder

mkdir -p <build> && cp <skill>/engine/stage.js <skill>/engine/stage.css <build>/

Partez de templates/starter/index.html pour la structure (import map, canvas, sections, un script module), et empruntez les motifs d'actes que vous avez notés. N'expédiez jamais le starter ou sa copie Orbis. Chaque page est écrite à partir de son propre brief.

Comment fonctionne le moteur (engine/stage.js, lisez le commentaire d'en-tête) :

  • La page est une pile de <section data-act="nom" data-span="2">. Chacune contient un .frame qui reste fixe pendant la durée de la section.
  • stage.act(name, { scene, camera, update(p, s), render(renderer, s), resize(w, h) }) enregistre une scène. p va de 0 à 1 sur l'acte. s transporte time, dt, pointer (lissé, de -1 à 1), velocity (vitesse de défilement), width, height, reduced, coarse.
  • L'acte qui contient le milieu de l'écran est rendu. Les actes qui partagent un même objet scene sont tous mis à jour ensemble, donc un seul monde continu est simplement plusieurs actes pointant vers la même scène.
  • Un acte a besoin d'une portée supérieure à 1 pour que p bouge. p est mesuré sur la distance pendant laquelle le cadre reste fixe, donc une portée de 1 exactement n'en a pas : p passe de 0 à 1 et tout ce qui y est lié ne s'affiche jamais. Utilisez 1,25 ou plus.
  • Chaque section reçoit --p comme variable CSS, donc les titres peuvent bouger sur la même chronologie que la 3D.
  • data-reveal sur un élément le fait apparaître en entrée ; décalez avec style="--i:2".
  • Utilisez seg(p, a, b) pour diviser un acte en temps forts et ease.inOut et autres pour les façonner.
  • Pas de WebGL : html.no-webgl montre le .poster de chaque acte. Donnez à chaque acte un poster (une image ou un dégradé).

Thématisez avec les tokens en haut de stage.css (canvas, surface, ink, ink-soft, accent, accent-ink, deux polices). Ne modifiez jamais le moteur pour un projet ; le comportement sur mesure va dans le script de la page elle-même.

Three.js vient d'une version CDN épinglée dans l'import map ([email protected] sur jsdelivr). Gardez l'épingle. Si vous avez besoin d'une version plus récente, choisissez-en une vieille d'au moins deux semaines et relancez les vérifications.

Lisez references/design.md avant d'écrire le balisage et references/performance.md avant d'ajouter la deuxième scène.

Étape 3 : Prouvez-le

cd <build> && npm i playwright-core          # une fois par dossier de build ; nécessite Google Chrome installé
node <skill>/scripts/serve.mjs --root . --port 4600 &
node <skill>/scripts/shoot.mjs --url http://localhost:4600 --out shots/desktop
node <skill>/scripts/shoot.mjs --url http://localhost:4600 --out shots/phone --width 390 --height 844 --touch
node <skill>/scripts/shoot.mjs --url http://localhost:4600 --out shots/reduced --reduced-motion --positions 0,1

Le script fait défiler chaque acte à cinq positions, attend que le lissage se stabilise, prend une capture de chacune, et écrit sheet.png. Il échoue en cas de : erreurs de page, requêtes échouées, absence de WebGL, un acte qui ne dessine rien, et défilement latéral. Un succès signifie qu'il tourne, pas que c'est bon.

Ensuite ouvrez chaque sheet.png et regardez. Pour chaque acte à chaque position : chaque ligne est-elle lisible ? La scène montre-t-elle ce que dit le temps fort ? Sur le téléphone, quelque chose est-il recadré, couvert ou minuscule ? Le sommet ressemble-t-il au sommet ? La fermeture termine-t-elle ? Corrigez, reprenez les captures, regardez à nouveau.

Ensuite la vérification des sentiments (references/feel.md) : faites défiler à froid, un mot par acte pour ce que vous avez ressenti, puis comparez avec la courbe dans BRIEF.md. Là où ils diffèrent, corrigez la page.

Dites clairement ce qui n'a pas été couvert : Chrome sans tête dessine le WebGL en logiciel, donc le taux d'images qu'il rapporte n'est pas celui d'un vrai appareil, et il ne peut pas vous dire comment le défilement se sent sur un vrai téléphone. Demandez à l'utilisateur de l'ouvrir sur son téléphone avant de considérer la page comme terminée.

Règles strictes

JamaisÀ la place
Un seul dispositif scénique pour toute la pageQuatre familles ou plus, jamais deux fois de suite
Texte cuit dans une texture ou une imageVrai HTML au-dessus du canevas
Une flèche de défilement, une icône de souris ou "défilez pour explorer"Rien. L'accroche suffit
Compteurs de section comme 01 / 05Supprimez-les
Copie centrée dans chaque acteVariez : gauche, droite, centre, divisé, haut, bas
Un foncé en pleine écran pour le contraste.scrim seulement derrière le bloc de texte
Texte dégradé, lueur néon sur le texteLe poids et la taille font l'accentuation
Chiffres ou statistiques inventésSeuls des chiffres réels de l'utilisateur
Tirets cadratins dans la copie visiblePoint, virgule, deux-points
Objets qui tournent sans jamais s'arrêterLe mouvement suit le défilement ou le curseur ; le mouvement au repos est lent et petit
Un nouveau rendu WebGL frais par sectionUn canevas, un rendu, plusieurs scènes (le moteur le fait)
Expédier la page starterÉcrivez la page à partir de son propre brief
Builder avant la structure, le journal et la notationÉtape 1, les trois
Deux sommets, ou aucunUn, avec le plus d'espace et un acte calme avant lui
Un plan qui correspond à un build antérieur sur trois colonnes du journal ou plusChangez le plan, jamais le journal
Dire que c'est fini sans l'Étape 3Exécutez l'Étape 3, regardez les feuilles, faites la vérification des sentiments

Résultat

Le dossier de build, puis un court rapport : la structure et pourquoi, le résultat de l'empreinte contre chaque ligne, le parcours, la courbe des sentiments et le sommet, le tableau de notation, le geste signature, ce que shoot.mjs a rapporté sur les trois exécutions, ce que vous avez vu sur les feuilles et corrigé, la vérification des sentiments (prévu contre ressenti), et ce que vous n'avez pas pu vérifier. Donnez l'URL locale. Ensuite ajoutez la ligne du build à FINGERPRINTS.md.

Skills associés