← abrir o modelo · todas as entradas si3d

Controle PS5 · Claude Code

DualSense feito do zero em código (three.js): analógicos, gatilhos adaptativos com motor, hápticos, barra de luz e o miolo, que se movem, viram raio-X e se desmontam.

Fontes e licenças

Construído em código (three.js) com o kit teardown de elvarofficial e whaleyxbt (MIT), pela skill si3d. Publicado 2026-11-09T13:05-03:00.

Notas do agente

# Controle PS5 · Claude Code — notas

**O que é:** um DualSense (controle do PS5) construído do zero em código three.js, sem malha pronta, sem Tripo e sem asset de terceiros. Regime: objeto mecânico de mão. Página única offline, 788 KB.

## Medidas tiradas da referência (topo de `kin.js`)
- Escala da foto frontal (Commons, Chris Woodrich): 1202 px = 16,0 cm de largura (ficha: 160 × 66 × 106 mm).
- Contorno em planta com 21 pontos por metade: z −4,5 (borda de trás) a +6,85 (ponta da empunhadura), largura de 2,7 cm na ponta.
- Touchpad em trapézio de 6,3 × 5,2 cm; analógicos a ±2,56 cm, tampa de Ø 2,0 cm; direcional em (−4,68; −2,3); botões de ação em (+5,15; −2,3), ±1,13 cm, Ø 1,04 cm; Create/Options, PS, microfone e grade (5 + 6 furos) nas posições medidas.
- Perfil lateral: o topo cai de +1,5 a −2,3 cm e o fundo de −1,3 a −4,75 cm ao longo das empunhaduras; cúpula leve em x.
- Bicolor do modelo branco: núcleo preto entre os analógicos e na face interna das empunhaduras, por um campo de região suave aplicado por vértice.

## Como foi feito
- O corpo é um SDF (contorno 2D suavizado por Catmull-Rom × perfil de altura, borda arredondada com raio proporcional à espessura, fenda do touchpad, poços dos analógicos e sulco da junta), extraído por surface nets (~44 mil triângulos) com projeção na superfície e normais pelo gradiente. Cada triângulo vai para uma de 4 peças de desmontagem: casca de cima, casca de baixo, núcleo de cima e núcleo de baixo.
- As peças ficam na superfície medida (`surfaceY` e normal do SDF): analógicos torneados com serrilhado em bump procedural, teclas translúcidas do direcional, botões com △○×□ em tubo, touchpad extrudado e curvado, barras de luz emissivas, L1/R1, L2/R2 em perfil extrudado com dobradiça.
- Miolo: placa com chips, módulos dos analógicos com potenciômetros, bateria de 1560 mAh, alto-falante, atuadores hápticos de bobina nas empunhaduras e, nos gatilhos adaptativos, motor, parafuso sem-fim, engrenagem e setor dentado.
- **Uma entrada move tudo:** o relógio de jogo `g` gera analógicos, L2/R2, botões, toque, amplitude háptica, frequência e cor da luz. O painel (posição dos analógicos, curso e força do R2 na curva de "arco", hápticos, último botão e cor da luz) lê esse mesmo estado.
- As camadas `xray`, `iso`, `explode` e `color` são coordenadas 0..1 separadas, com easing. Cada categoria de peça tem materiais clonados próprios, para sumir sozinha.
- Modos em `<button>`: Jogar, Analógicos, Gatilhos, Isolar gatilho, Hápticos, Raio-X, Desmontar e Cor (branco ↔ Midnight Black). O tour automático de 50 s tem cursor; clique, arrasto, roda ou tecla assumem o controle, e 25 s parado devolvem o tour. Teclas: 1–5, X, E, C.
- No celular (390×844), a barra vira uma grade 4×2 com botões de 44 px, o painel grande sai e entra uma linha compacta; o FOV abre pela largura.

## Reaproveitado
- Kit teardown (MIT, elvarofficial e whaleyxbt): `warm.js` (aquecimento de shaders), `build.mjs` e `capture.mjs`. O padrão de tour com cursor e takeover segue o `cessna-shared/live.js` do kit, reescrito para esta página. Nenhum código de outra entrada si3d.

## Rodadas de revisão (prints lado a lado com as fotos)
1. Corpo quase invisível: o poço dos analógicos tinha a subtração suave com sinal trocado e cavava o corpo inteiro. Corrigido; `surfaceY` passou a marchar de cima para baixo.
2. Bloom e luz estouravam o branco: exposição, luz-chave, ambiente e limiar do bloom revistos. Sheen tirado da casca.
3. Corpo em "placa" e pontas cortadas retas: perfis viraram Catmull-Rom, o contorno foi suavizado, o raio de borda passou a seguir a espessura, e posições e tamanhos dos botões foram medidos de novo na foto frontal.
4. Gatilhos em bloco e L2 escuro (clone de material errado): perfil curvo novo, gatilho menor e inclinado, cor propagada aos clones.
5. Barra de luz enterrada e analógicos baixos: barra assentada na superfície, analógicos mais altos.
6. Modo isolar deixava o R1 opaco: um clone de material por categoria.
7. Gatilhos pendurados abaixo do corpo: encurtados e subidos para a borda de trás.
8. Celular: texto do modo, linha compacta e botão de tour se sobrepunham. A linha foi para baixo do título e os rótulos ficaram presos dentro da tela. No PC, o crédito subiu para não encostar no dock.

## Teste (`testar.mjs`, fila GPU si3d, RTX 4070 Ti SUPER)
- PC 1600×900: 58–60 fps, p95 16,8 ms, 111 draw calls, 0 erros, 9/9 botões mudam a tela, arrasto gira.
- Celular 390×844 (simulado no Chromium): 60 fps, 111 draw calls, 0 erros, 9/9 botões, arrasto ok.

## Limites honestos
- Modelado por código: a fronteira branco/preto é cor por vértice numa malha de 1 mm e mostra serrilhado fino de perto. Falta a fresta funda real entre casca e núcleo.
- Não há textura de micro-símbolos △○×□ na traseira, logo PS em relevo, gravações da traseira nem a borda translúcida da barra de luz. O botão PS é um domo simples.
- Gatilhos e bumpers têm a forma aproximada; o miolo é esquemático (posição e função plausíveis, não a placa real).
- Força do gatilho, frequência háptica e curvas são um modelo de demonstração do agente, não medição de um controle real. A página avisa isso.
- Celular testado só por simulação no Chromium.