4 pontos por GN⁺ 2024-04-30 | 1 comentários | Compartilhar no WhatsApp
  • Threlte é um framework open source que coloca o modelo de componentes reativos do Svelte sobre o Three.js para criar rapidamente apps 3D interativos para a web
  • Com componentes declarativos como <T.Mesh>, ele compõe objetos do Three.js e usa o ciclo de vida do Svelte para lidar com assinatura de eventos e mudanças de estado
  • Como ferramentas padrão, oferece junto o motor de física Rapier, a ferramenta de animação Theatre.js, @threlte/gltf e @threlte/extras, reduzindo a configuração inicial de apps 3D
  • Comportamentos que não podem ser cobertos apenas pelos componentes <T> podem ser estendidos com Plugins type-safe, adicionando props e eventos personalizados
  • No ecossistema Svelte, ele é avaliado como uma opção forte em documentação e usabilidade para desenvolvedores que buscam uma biblioteca declarativa de THREE e ferramentas para criar apps WebGL

Montando cenas do Three.js no estilo Svelte

  • Threlte é um framework 3D para web criado sobre Svelte e Three.js
  • O foco é construir rapidamente apps 3D interativos com componentes declarativos e reativos
  • Aproveitando o ciclo de vida dos componentes Svelte, é possível lidar com as seguintes tarefas
    • assinatura de eventos
    • processamento de mudanças de estado
    • conexão de comportamentos baseados em componentes
  • O código de exemplo posiciona geometria e material dentro de <T.Mesh> e define diretamente props e eventos como scale, position.x e onclick
  • A primeira configuração de cena pode ser vista em Make Your First Scene

Ferramentas incluídas e forma de extensão

  • Threlte adota uma abordagem “batteries included” e fornece junto as ferramentas necessárias para criar apps 3D
    • Rapier: motor de física
    • Theatre.js: biblioteca de animação com um conjunto profissional de ferramentas de motion design
    • @threlte/gltf: ferramenta que converte arquivos GLTF em componentes Threlte
    • @threlte/extras: coleção de componentes e utilitários necessários para começar
  • O exemplo com Rapier combina RigidBody, AutoColliders e <T.Mesh> para configurar um colisor esférico e a malha
  • O exemplo de @threlte/extras usa os componentes Float e GLTF para carregar o modelo /models/flower.glb e definir sombra, posição e escala
  • O uso de @threlte/extras pode ser visto na Documentation
  • Plugins são a forma de extensão que adiciona props e eventos personalizados ao <T> com segurança de tipos
    • O plugin de exemplo registra a prop lookAt com injectPlugin e chama args.ref.lookAt(args.props.lookAt) dentro de $effect
    • O uso avançado está organizado na documentação de Plugins
  • Também são fornecidos documentos iniciais e links da comunidade

1 comentários

 
GN⁺ 2024-04-30
Opiniões no Hacker News
  • Sou o autor do Threlte. Obrigado por postar; se quiser saber no que estamos trabalhando agora, assista ao vídeo da apresentação que acabei de fazer no Svelte Summit Spring: https://www.youtube.com/live/gkJ09joGBZ4?si=KX9ZwfWTixj6r55Y...
    Basicamente estamos fazendo duas coisas. Uma é o suporte ao Svelte 5; como o Threlte mexeu bastante nos componentes internamente para tornar o tratamento de eventos mais eficiente ou para aplicar transições do Svelte a componentes, não a elementos do DOM, dá um pouco mais de trabalho do que em uma biblioteca Svelte comum. Boa parte disso foi incorporada ao Svelte 5, e o restante, como as transições, teremos que deixar de lado por enquanto
    A outra é o Threlte Studio. Ainda não sei bem qual é a melhor forma de descrevê-lo, mas dá para dizer que é um editor que permite modificar o código visualmente. Ele é extensível, então pode ser adaptado ao seu fluxo de trabalho, e estou curioso para ver até onde isso pode ir. Se tiver interesse, acompanhe pelo Discord http://chat.threlte.xyz ou pelo X https://twitter.com/threlte
    • Tenho curiosidade sobre como o Threlte se compara ao React-Three-Fiber em termos de paridade de recursos e desempenho
    • Por coincidência, terminei ontem o tutorial do Svelte e fui pesquisar se era possível trazer o Three.js para o Svelte
      O Svelte é tão intuitivo que naturalmente pensei que também daria para gerenciar um ambiente 3D de forma eficiente, e por isso acabei pesquisando “Svelte + three.js”
      Como alguém que tem usado PlayCanvas e Babylon.js, estou muito animado com o desenvolvimento do Threlte Studio. Gosto do DREI por expor tudo como se fosse um diretório, mas isso me fez pensar em “ferramentas de estúdio” familiares. Gostaria de saber qual é a previsão para o Threlte Studio
  • Tenho usado react-three-fiber e react-three-drei; dá para pensar neste projeto como a versão React disso. Os exemplos são impressionantes e excelentes: https://docs.pmnd.rs/react-three-fiber/getting-started/examp...
    Um de que gosto especialmente é o exemplo da galeria de imagens. Fiz uma modificação para que, ao clicar em uma imagem, você entre em outra sala, ou seja, em outra galeria
    https://github.com/pmndrs/drei é uma coleção de exemplos e helpers
    O que mais me impressionou foi um exemplo que usa modelos GLTF, textura de vídeo sobre texto, reflexos etc.; a versão independente está em https://bfplr.csb.app/
    Ainda mais impressionante é o sandbox que mostra que não há tanto código assim: https://codesandbox.io/p/sandbox/ground-reflections-and-vide...
    Colocar uma camada por cima do three.js exige muito trabalho e também me deu boas dores de cabeça, mas o potencial é grande. Usar three.js mudou completamente a forma como vejo o desenvolvimento de sites, e, se você usa Svelte, definitivamente vale a pena dar uma olhada
    • Fiquei curioso sobre o que exatamente mudou na parte “usar three.js mudou completamente a forma como vejo o desenvolvimento de sites”
    • Muito legal. Definitivamente tem uma vibe Yugop, e dá para ver como ferramentas assim podem criar um estilo completamente novo de mídia online. O potencial é evidente
  • Navegando por aí, encontrei um app de demonstração que mostra o Threlte v6: https://github.com/grischaerbe/threlter, https://threltemania.xyz/
    O Technical Outline, especialmente a explicação simplificada da física de carros, é bem instrutivo. Essencialmente, é um clone de Trackmania com até um editor de pistas, e parece ser um exemplo que aproveita ao máximo os pontos fortes de Svelte/Threlte
    • Se “aproveitou ao máximo os pontos fortes de Svelte/Threlte”, quais você diria que são esses pontos fortes, com suas próprias palavras?
  • Parece interessante. Dito isso, se você quer 3D declarativo e componentes sem Svelte ou React, também existem A-Frame e X3D
    Fico me perguntando se as pessoas realmente querem 3D declarativo. X3D/VRML existe há mais de 25 anos e A-Frame há 8 anos, mas nenhum dos dois se tornou muito popular; vários outros formatos também surgiram e desapareceram. Por outro lado, three.js e 3D imperativo/procedural em geral vão bem, e fico curioso sobre o porquê
    • Acho que 3D declarativo na forma de integrações de frameworks com Three.js é muito popular, e hoje provavelmente é a configuração profissional mais usada em sites com Three.js. A mais popular delas é o react-three-fiber. A natureza declarativa desses frameworks facilita a reutilização, e isso se torna a base do ecossistema
    • Frameworks como react-three-fibre são populares porque iniciantes conseguem montar componentes existentes sabendo muito pouco JavaScript. É comum ver influenciadores dessa área dizendo coisas como “crie este configurador com apenas 6 linhas de código!”. O que torna essas ferramentas populares não é a natureza declarativa do código, mas a velocidade de produção e a aparência de facilidade de uso
  • A combinação Threlte/SvelteKit/Tauri é ótima. Testei Threlte recentemente e fiz algo assim: https://crusaders-ashy.vercel.app/
    Não está superotimizado, e todos os modelos são modelos gratuitos do Sketchfab. Como é um ambiente de jogo 3D, ajuda ter um PC moderno
  • Gosto tanto de Svelte quanto de Threlte. Criei um tabuleiro de xadrez 3D em um ambiente de parque e até integrei com o lichess; tudo foi surpreendentemente fácil
    Acho que muitas UIs poderiam se beneficiar do uso de 3D
    • Eu adoraria ver como isso fica. Mesmo um exemplo simples usando essas bibliotecas já seria ótimo
  • Projeto excelente. Se você prefere uma abordagem mais próxima do básico, A-Frame também é uma boa opção: https://aframe.io/
  • A sintaxe é muito boa. É tão impressionante quanto quando vi Three.js em JSX pela primeira vez com react-three-fiber. Se um dia eu usar Svelte + Three, é bom saber que existe essa opção
  • Fiquei impressionado com a suavidade da rolagem. Sempre achei que páginas web com animações baseadas em rolagem costumavam travar e engasgar, mas não sabia que, quando rodam de fato sincronizadas à taxa de atualização do monitor, o efeito podia ficar tão bom
  • Uso há cerca de 2 anos. Toda vez que vejo a documentação, há um novo extra adicionado, e o legrisch também é excelente. O Discord também é bastante ativo. É um conjunto de ferramentas incrível, e estou ansioso para ver até onde vai