Monta e renderiza cenas 3D interativas na web. Trigger em: "three.js", "WebGPU", "WebGPURenderer", "WebGL", "cena 3D no browser", "landing page com 3D", "produto 3D interativo no site", "configurador 3D", "visualizador 3D", "carregar GLB na pagina", "GLTFLoader", "camera navegavel", "OrbitControls", "raycasting", "scene description", "montar cena proceduralmente", "3D interativo em vez de video", "react-three-fiber", "R3F", "modelo 3D no site", "girar o produto na tela".
88%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Recebe assets 3D prontos e uma intencao de cena, e entrega uma cena real no browser: navegavel, editavel e re-renderizavel sem custo de geracao. O oposto de video gerado — trocar camera, luz, horario ou posicao de objeto e mudar um campo do scene description, nao gerar um novo clipe.
Esta skill segue GLOBAL.md, policies/execution.md, policies/handoffs.md,
policies/token-efficiency.md, policies/evals.md e policies/verification-before-completion.md
(cena 3D e afirmacao visual: "renderizou" exige screenshot real, nao "o codigo esta correto").
Conteudo denso vive em references/ — carregar so o arquivo relevante:
| Assunto | Arquivo |
|---|---|
| Schema completo do scene description (campos, tipos, exemplo end-to-end, regras de validacao) | references/scene-schema.md |
| Setup de renderer, compressao de asset, orcamento de performance e matriz de fallback | references/renderer-and-performance.md |
| Gerar o asset 3D que entra na cena — conceito->mesh, retexture, rig, mocap, splats, orbit views, LoRA | references/generating-3d-assets.md |
Guidelines de codigo three.js nao vivem aqui. A skill 02 ja mantem 53 guidelines verificadas
(three.js 0.185.1) com Do/Don't e codigo bom/ruim em skills/02-ui-ux-design/data/stacks/threejs.csv.
Consultar antes de escrever qualquer linha:
python skills/02-ui-ux-design/scripts/design_search.py "GLTF loader camera orbit" --stack threejsEsta skill decide a cena e o contrato; aquele CSV decide como escrever o codigo. Duplicar as 53 guidelines aqui criaria duas fontes de verdade que envelhecem em ritmos diferentes.
skills/68-character-animation-3d/SKILL.mdskills/69-character-pipeline-2d/SKILL.mdskills/64-scroll-storytelling/SKILL.md (ver fronteira abaixo)skills/12-motion-design/SKILL.mdskills/67-game-engine-development/SKILL.mdA 64 tem uma regra dura contra render 3D (references/worlds.md: "NAO render 3D") e contra corrente
continua de camera — e ela esta certa no dominio dela: o mundo dela e fotografico, o scroll e o
unico input, e um flythrough continuo e a coisa mais cara e fragil de construir. Nada aqui revoga
aquela regra.
A fronteira e o input: se o visitante so rola a pagina, e a 64. Se o visitante controla a camera (arrasta, orbita, aproxima, clica num objeto pra focar), e esta skill. Um beat de scrollytelling que precise de um objeto 3D girando conforme o scroll pode delegar so aquele bloco pra ca — a pagina continua sendo da 64, o canvas e daqui.
.glb/.gltf (das skills 68/69, de biblioteca licenciada, ou do proprio cliente)scene.json valido contra references/scene-schema.md — o artefato que o LLM emite e o runtime consomeprefers-reduced-motionO contrato existe pra que o LLM seja diretor de cena, nao autor de codigo de render. Ele decide
enquadramento, luz, o que entra na cena e o que e interativo; nao escreve camera.position.set().
Mesma disciplina do MotionPlan da skill 69 (LLM dirige intencao, nunca rotacao de bone crua) —
aqui aplicada a cena: o JSON descreve o que a cena e, o runtime decide como desenhar.
Sem esse contrato, cada cena vira um arquivo main.js artesanal que ninguem mais consegue editar
por campo. Schema completo em references/scene-schema.md.
WebGPU atingiu Baseline em janeiro de 2026 (Chrome/Edge, Firefox no Windows e macOS Tahoe, Safari
26+). O WebGPURenderer do three.js cai pra WebGL2 automaticamente quando o browser nao suporta
— nao e preciso escrever dois caminhos. Ele segue oficialmente experimental (previsao de estabilizar
ao fim de 2026), o que muda o texto do risco no handoff, nao a escolha default.
Duas consequencias praticas que nao sao obvias:
setAnimationLoop() cuida da inicializacao do backend sozinho. await renderer.init() explicito
so e necessario quando algo roda antes do primeiro frame (compute pass, render unico pra
thumbnail).MeshStandardMaterial) continua funcionando — e mapeado pro sistema de nodes.
Mas ShaderMaterial, RawShaderMaterial e patch via onBeforeCompile nao atravessam pro
backend WebGPU: precisam ser reescritos em TSL. Herdar um shader custom de projeto WebGL antigo e
o ponto onde a migracao quebra em silencio.Comandos, importmap, tabela de fallback e o que cada caminho custa: references/renderer-and-performance.md.
Camera livre nao e "adicionar OrbitControls e pronto". Decidir e declarar no scene description: limite de orbita (evitar o visitante ver o avesso da cena), limite de zoom, se ha alvo de foco, e o que acontece no mobile (touch tem menos eixos que mouse).
Raycasting tem duas armadilhas que o CSV da skill 02 documenta com codigo: um unico raycaster
compartilhado (nao um por frame) e a flag recursiva em intersectObjects — sem ela, um GLB
carregado nao registra clique nenhum, porque as meshes sao descendentes de um Group, e o bug se
apresenta como "o modelo carregou mas nao responde".
Peso e performance sao decisao de escopo, nao ajuste final. Definir antes de modelar/importar: budget de triangulo, de textura, e o teto de particulas. Compressao nao e opcional em cena web — Draco/meshopt pra geometria, KTX2/Basis pra textura (fica comprimida na VRAM, nao so no download).
Checkpoint obrigatorio: medir na pagina composta, em device real ou throttle equivalente — contagem de draw call, triangulo, e peso transferido. Se estourar o budget, cortar escopo da cena (menos objeto, menos luz com shadow, LOD mais agressivo) e medir de novo. Nao aceitar "no meu desktop roda liso" como evidencia: a cena 3D e o item mais caro da pagina e o celular do visitante e outra maquina. Repetir ate o budget fechar na mesma medicao.
Toda cena declara o que aparece quando ela nao pode rodar: sem WebGL2, com prefers-reduced-motion,
ou em device que nao aguenta o budget. Um <canvas> vazio nao e fallback — imagem estatica do
mesmo enquadramento e. O canvas precisa de aria-label, e a cena precisa de um caminho de teclado
quando ha objeto interativo (clicar no objeto nao pode ser a unica forma de chegar na informacao).
dispose() ao remover da cena. Geometria e textura nao saem da VRAM por garbage collection.
Configurador que troca peca 20 vezes sem dispose vaza ate o tab morrer.requestAnimationFrame sozinho nao resolve tudo; cena
rodando em aba oculta gasta bateria e aparece como "o site esquenta o celular".InstancedMesh, nao 200 meshes.onBeforeCompile/ShaderMaterial — quebra em
silencio, sem erro de importtraverse), sombra e
material das meshes filhas ficam sem configurar, e a cena renderiza chapada sem erro nenhumintersectObjects sem flag recursiva em cena com GLB — clique nunca acerta nadascene.json valida contra o schema, e trocar um campo (camera, luz, material) muda a cena
renderizada sem tocar em codigodispose() verificado em troca de asset (sem crescimento de memoria entre trocas)aria-label no canvas e caminho de teclado para objeto interativothreejs.csv consultadas (nao reescritas)character.glb + animation.glb certificados. Fecha o handoff
que faltava: a 68 entregava so pra engine de jogo (Unity/Unreal), nunca pro browserthreejs.csv01 spec -> 02 ancora estetica -> (68/69 assets, se houver personagem) -> 74 cena e runtime -> 04 integracao -> 22 a11y + 14 performance -> 05 QA.
WebGPURenderer do three.js — fallback automatico pra
WebGL2, opcao forceWebGL, setAnimationLoop() cobrindo a inicializacao e await renderer.init()
necessario so antes do primeiro frame: verificado na documentacao oficial do three.js
(WebGPURenderer) e em levantamento de suporte de browser em 2026-09, nao presumido.three/webgpu e three/tsl (build three.webgpu.js) e caminhos de loader
(three/addons/loaders/{GLTFLoader,DRACOLoader,KTX2Loader}.js, com setDRACOLoader/setKTX2Loader):
documentacao e exemplos oficiais do three.js.ShaderMaterial,
RawShaderMaterial e onBeforeCompile exigem reescrita em TSL): documentacao do sistema de nodes
do three.js.skills/02-ui-ux-design/data/stacks/threejs.csv, portadas de
nextlevelbuilder/ui-ux-pro-max-skill (MIT),
e sao consultadas via design_search.py. Ver ## Fontes da skill 02 para a proveniencia completa.MotionPlan.json da skill 69 para o dominio de cena — mesma arquitetura, dominio diferente.felvieira/claude-skills-fv
449fb53
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.