← abrir o modelo · todas as entradas si3d
O DualSense em código: analógicos, gatilhos adaptativos com motor e engrenagem, atuadores hápticos, raio-X e desmontagem em camadas.
Construído em código (three.js) com o kit teardown de elvarofficial e whaleyxbt (MIT), pela skill si3d. Publicado 2026-11-09T12:57-03:00.
# Controle PS5 · jcode Rodada jcode (Opus) da comparação entre harnesses. Pedido: "um si3d de um controle de PS5 (DualSense)". Regime **mecânico/objeto**: casca em placas, mecânica interna aparente, painel com leituras do modelo. ## O que foi construído - **Carcaça** feita só em código: uma função de distância (caixa arredondada, elipsoides dos ombros e pegas em cones arredondados com eixo de 5 pontos, unidos com smin) triangulada por marching cubes (`MarchingCubes` do three, campo 120³ no PC e 96³ no celular). Ela é dividida em 4 placas (asa esquerda e asa direita brancas, miolo preto e fundo preto) pela linha de costura da referência. O corte é feito por pixel no shader, que escurece a fresta em 0,35 mm. - **Peças:** touchpad trapezoidal com barra de luz nas duas bordas, Create e Options, botão PS, botão de mudo, grade do alto-falante (2 × 6 furos), USB-C e contatos de carga. Analógicos com módulo, domo, haste e capa côncava com 56 sulcos (`InstancedMesh`). Direcional de 4 teclas translúcidas com seta. △○✕□ em acrílico transparente sobre um poço cinza. L1/R1, e L2/R2 em alavanca curva com engrenagem setorial. - **Interno:** motor do gatilho adaptativo com pinhão (gira 9/2,6 vezes o setor), placa principal com chips, bateria, alto-falante e os dois atuadores hápticos (bobina de cobre que acende com a amplitude e ondas no modo Háptica). - **Uma entrada move tudo:** `estado(φ)` em `kin.js` dá o curso do R2 e do L2, a força pelo perfil (mola, arco com parede, arma com clique), os analógicos em Lissajous, a amplitude e a frequência hápticas, os botões apertados e a cor da luz. Pose, painel e gráfico de força × curso leem esse mesmo estado. - **Modos (`<button>`):** Jogar, Gatilho adaptativo, Háptica, Analógicos, Raio-X, Desmontar, Remontar e ▶ Tour. O tour automático tem cursor que clica nos botões. Clique, arrasto, roda ou tecla assume o controle, e depois de 25 s parado o tour volta. Pinça funciona no celular, e as teclas 1–7 trocam de modo. - **Celular em pé (390×844):** painel denso escondido, linha-resumo no lugar, botões de 48 px, FOV pela largura e qualidade menor. ## Medidas tiradas da referência Referência 2 (vista de cima): 160 mm = 773 px, ou seja 4,83 px/mm, com o centro em x = 497 px. Resultados: touchpad de ±36/±32 mm por 32 mm (z −53..−21); analógicos em x ±31; direcional e botões em x ±57, z −27, passo de 13,5 mm; PS em z −3 e mudo em z +6; pegas com as pontas em x ±52, z +49, inclinadas para dentro; vão central até z ≈ +20. Ficha pública: 160 × 106 × 66 mm, 280 g, 1560 mAh. Referência 1 (3/4): o branco cobre o alto e o lado de fora das pegas, o miolo e a barriga são pretos, e há contatos dourados no vão. ## Reaproveitado Só o kit teardown (elvarofficial/teardown @a91262a, MIT): `build.mjs`, `capture.mjs`, `paths.mjs` e fontes. Nenhum código de entradas si3d anteriores, nenhuma malha pronta, nada pago. As fotos de referência servem só para leitura e não vão embutidas na página. ## Rodadas de revisão 1. Casca invertida (winding dos triângulos), setor do gatilho saindo pelo topo e motor flutuando. Corrigi o winding, o arco do setor e a posição do motor. 2. Costura serrilhada (corte por triângulo) e botões de face engolidos pelo ombro curvo. Troquei pelo corte por pixel no shader e assentei os botões pela normal da superfície. 3. Ombros altos demais e grade do marching cubes cortando a base. Baixei o ombro e aumentei a caixa do campo. 4. Comparação lado a lado com a vista de cima: pegas retas, cantos de cima quadrados e posições deslocadas. Ajustei o eixo das pegas para dentro, encolhi a caixa, remedi todas as posições a 4,83 px/mm e escureci o poço dos botões. 5. Placa principal atravessava a barriga e os contatos de carga flutuavam. Recortei a placa e pus os contatos na borda do vão. Erro de console no primeiro quadro (φ < 0) corrigido. ## Teste Teste local (`testar.mjs`, fila GPU, RTX 4070 Ti SUPER): no PC (1600×900), 60 fps, p95 de 16,7 ms, 204 draw calls, 0 erro de console e 8/8 botões mudam a tela. No celular simulado (390×844 @3x, toque), 59,7 fps, 204 draw calls, 0 erro e 8/8 botões. O arrasto gira a câmera nos dois. Página de 933 KB, offline. Uma rodada anterior pegou o erro do φ negativo (0 → 1 erro, todos os botões "igual"), que já foi corrigido. Celular só foi simulado no Chromium, e a GPU integrada não foi testada. ## Limites honestos - A superfície vem do marching cubes, então há leve facetamento nos reflexos de perto e nada de textura fina (o padrão de símbolos △○✕□ do miolo e da barriga não foi feito). - As pegas são um pouco mais curtas e o miolo mais largo que no real. O vão entre as pegas é mais quadrado. - O logo PS virou uma pílula preta (marca da Sony não reproduzida de propósito). - O interno é ilustrativo (posição e tamanho plausíveis, não tirados de teardown real). Os perfis de força dos gatilhos são curvas didáticas, não dados da Sony.