4 puntos por GN⁺ 2024-04-30 | 1 comentarios | Compartir por WhatsApp
  • Threlte es un framework open source que monta el modelo de componentes reactivos de Svelte sobre Three.js para crear rápidamente apps 3D interactivas en la web
  • Permite componer objetos de Three.js con componentes declarativos como <T.Mesh> y manejar suscripciones a eventos y cambios de estado mediante el ciclo de vida de Svelte
  • Incluye como herramientas base el motor de física Rapier, la herramienta de animación Theatre.js, @threlte/gltf y @threlte/extras, lo que reduce la configuración inicial de una app 3D
  • Los comportamientos que no se cubren solo con el componente <T> se pueden extender con Plugins con seguridad de tipos para agregar props y eventos personalizados
  • Dentro del ecosistema de Svelte, se valora por su documentación y facilidad de uso para desarrolladores que buscan una librería THREE declarativa y herramientas para crear apps WebGL

Construcción de escenas de Three.js al estilo Svelte

  • Threlte es un framework 3D para la web construido sobre Svelte y Three.js
  • Se enfoca en construir rápidamente apps 3D interactivas con componentes declarativos y reactivos
  • Aprovecha el ciclo de vida de los componentes de Svelte para manejar las siguientes tareas
    • suscripción a eventos
    • manejo de cambios de estado
    • conexión de comportamientos basados en componentes
  • El código de ejemplo coloca geometría y material dentro de <T.Mesh> y asigna directamente props y eventos como scale, position.x y onclick
  • La primera escena se puede revisar en Make Your First Scene

Herramientas incluidas y formas de extensión

  • Threlte promueve un enfoque “batteries included” y ofrece junto con el framework las herramientas necesarias para crear apps 3D
    • Rapier: motor de física
    • Theatre.js: librería de animación con un conjunto de herramientas profesional para motion design
    • @threlte/gltf: herramienta para convertir archivos GLTF en componentes de Threlte
    • @threlte/extras: colección de componentes y utilidades para empezar
  • El ejemplo de Rapier combina RigidBody, AutoColliders y <T.Mesh> para construir un collider esférico y el mesh
  • El ejemplo de @threlte/extras usa los componentes Float y GLTF para cargar el modelo /models/flower.glb y definir sombras, posición y escala
  • El uso de @threlte/extras se puede consultar en Documentation
  • Plugins es la forma de extensión para agregar props y eventos personalizados a <T> con seguridad de tipos
    • El plugin de ejemplo registra la prop lookAt con injectPlugin y dentro de $effect llama a args.ref.lookAt(args.props.lookAt)
    • El uso avanzado está organizado en la documentación de Plugins
  • También se ofrecen documentos para comenzar y enlaces a la comunidad

1 comentarios

 
GN⁺ 2024-04-30
Opiniones en Hacker News
  • Soy el autor de Threlte. Gracias por publicarlo; si les da curiosidad saber en qué estamos trabajando ahora, pueden ver el video de la charla que acabo de dar en Svelte Summit Spring: https://www.youtube.com/live/gkJ09joGBZ4?si=KX9ZwfWTixj6r55Y...
    En esencia, estamos haciendo dos cosas. Una es la compatibilidad con Svelte 5. Threlte tocó bastante las partes internas de los componentes para hacer más eficiente el manejo de eventos o para aplicar transiciones de Svelte a componentes en vez de elementos del DOM, así que implica algo más de trabajo que para una biblioteca normal de Svelte. Muchas de esas cosas ya vienen integradas en Svelte 5, y otras, como las transiciones, tendremos que dejarlas de lado por un tiempo.
    La otra es Threlte Studio. Todavía no sé bien cuál es la mejor forma de describirlo, pero podría decirse que es un editor que permite modificar el código visualmente. Es extensible, así que se puede adaptar al flujo de trabajo de cada quien, y tengo curiosidad por ver hasta dónde puede llegar. Si les interesa, pueden seguirnos en Discord http://chat.threlte.xyz o en X https://twitter.com/threlte
    • Me da curiosidad cómo se compara Threlte con React-Three-Fiber en términos de paridad de funciones y rendimiento.
    • Justo ayer terminé el tutorial de Svelte y busqué si era posible llevar Three.js a Svelte.
      Svelte me pareció realmente intuitivo, así que naturalmente pensé que también podría gestionar un entorno 3D de manera eficiente, y por eso terminé buscando “Svelte + three.js”.
      Como alguien que ha usado PlayCanvas y Babylon.js, tengo muchas expectativas por el desarrollo de Threlte Studio. Me gusta que DREI despliegue todo como si fuera un directorio, pero me hizo pensar en las “herramientas de estudio” familiares. Me pregunto cuál será el calendario estimado para Threlte Studio.
  • He usado react-three-fiber y react-three-drei; esto se puede ver como la versión en React de este proyecto. Los ejemplos son abrumadores y excelentes: https://docs.pmnd.rs/react-three-fiber/getting-started/examp...
    Uno que me gusta especialmente es el ejemplo de la galería de imágenes. Lo modifiqué para que al hacer clic en una imagen se entre a otra sala, es decir, a otra galería.
    https://github.com/pmndrs/drei es una colección de ejemplos y helpers.
    Lo que más me impresionó fue un ejemplo que usa modelos GLTF, texturas de video sobre texto, reflejos, etc.; la versión independiente está en https://bfplr.csb.app/
    Más impresionante aún es el sandbox que muestra que no hay tanto código: https://codesandbox.io/p/sandbox/ground-reflections-and-vide...
    Poner una capa encima de three.js requiere mucho trabajo y también me dio bastantes dolores de cabeza, pero aun así el potencial es enorme. Usar three.js cambió por completo la forma en que veo el desarrollo de sitios web, y si usas Svelte, definitivamente vale la pena echarle un vistazo.
    • Me da curiosidad qué cambió concretamente en la parte de “usar three.js cambió por completo la forma en que veo el desarrollo de sitios web”.
    • Está realmente genial. Definitivamente tiene un aire a Yugop, y se ve que herramientas como estas podrían crear un estilo completamente nuevo de medios online. El potencial es claro.
  • Mientras exploraba, encontré una app demo que muestra Threlte v6: https://github.com/grischaerbe/threlter, https://threltemania.xyz/
    El Technical Outline, en particular la explicación simplificada de física de autos, es bastante instructivo. En esencia, es un clon de Trackmania que incluso incluye un editor de pistas, y parece un ejemplo que aprovecha al máximo las ventajas de Svelte/Threlte.
    • Si “aprovecha al máximo las ventajas de Svelte/Threlte”, ¿cuáles dirías que son esas ventajas, en tus propias palabras?
  • Se ve interesante. Dicho eso, si quieres 3D declarativo y componentes sin Svelte ni React, también existen A-Frame o X3D.
    Me pregunto si la gente realmente quiere 3D declarativo. X3D/VRML existen desde hace más de 25 años y A-Frame tiene 8 años, pero ninguno de los dos se volvió muy popular; también hubo otros formatos que aparecieron y desaparecieron. En cambio, three.js y el 3D imperativo/procedural en general están funcionando bien, y me pregunto por qué.
    • El 3D declarativo en forma de integraciones de frameworks sobre Three.js es muy popular, y creo que se puede decir que hoy es la configuración profesional más usada en sitios con Three.js. La más popular entre ellas es react-three-fiber. La naturaleza declarativa de estos frameworks facilita la reutilización, y eso se convierte en la base del ecosistema.
    • Frameworks como react-three-fibre son populares porque los principiantes pueden ensamblar componentes existentes aunque sepan muy poco JavaScript. Es común ver a influencers de este campo decir cosas como “¡crea este configurador con solo 6 líneas de código!”. Lo que hace populares a estas herramientas no es la naturaleza declarativa del código, sino la velocidad de producción y que parecen fáciles de usar.
  • La combinación Threlte/SvelteKit/Tauri está genial. Hace poco probé Threlte e hice esto: https://crusaders-ashy.vercel.app/
    No está súper optimizado y todos los modelos son modelos gratuitos de Sketchfab. Es un entorno de juego 3D, así que ayuda tener una PC moderna.
  • Me gustan tanto Svelte como Threlte. Hice un tablero de ajedrez 3D en un entorno de parque e incluso lo integré con lichess; todo fue sorprendentemente fácil.
    Creo que muchas interfaces de usuario podrían beneficiarse del uso de 3D.
    • Me encantaría ver cómo se ve eso. Aunque sea un ejemplo simple usando estas bibliotecas.
  • Es un proyecto genial. Si prefieres un enfoque más cercano a lo básico, A-Frame también está bien: https://aframe.io/
  • La sintaxis es realmente buena. Me impresiona tanto como la primera vez que vi Three.js en JSX con react-three-fiber. Si algún día termino usando Svelte + Three, está bueno saber que existe esta opción.
  • Me impresiona lo suave que es el scroll. Las páginas web con animaciones basadas en scroll suelen sentirse entrecortadas y trabadas, pero no sabía que el efecto podía ser tan bueno cuando realmente se ejecuta a la frecuencia de actualización del monitor.
  • Lo he usado durante unos 2 años. Cada vez que reviso la documentación hay algún extra nuevo, y legrisch también es excelente. El Discord también es bastante activo. Es un conjunto de herramientas increíble y tengo ganas de ver hasta dónde llega.