← abrir o modelo · todas as entradas si3d
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.
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.
# 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.