Ir al contenido
AURUM Documentación
/

Investigación · 03

3 min de lectura 614 palabras 6 secciones

Stack técnico: MMORPG low-poly browser-first (hechos 2025–2026)

Investigado 2026-07-25. Números de fuentes primarias (docs, release notes, caniuse, bundlephobia).

Decisión tomada (2026-07-25): cliente TypeScript + Three.js · servidor Rust · WebSocket

Cliente — comparativa

Opción Peso Estado Veredicto
Three.js r185 ~178 KB gz WebGPURenderer con fallback automático a WebGL2 en el mismo renderer ELEGIDO
Babylon.js 9 ~1,7 MB gz WebGPU 1ª clase, motor completo Válido pero 10× el peso
PlayCanvas 2.x liviano Editor frontend MIT desde 2025-07; backend editor = SaaS Válido
Bevy 0.18 (Rust→WASM) 10–25 MB wasm Hay que elegir webgl2 O webgpu en compile-time; sin dynamic_linking en wasm → builds de iteración de 6+ min; single-thread; issues de audio y touch móvil Descartado para cliente
Godot 4.7 web ~5–9 MB brotli Single-thread default (4.3+) arregló iOS Safari; 4.5 exige WASM SIMD Descartado (peso + iteración)
Unity Web pesado Descartado

Evidencia de producción: Krunker.io = Three.js · Shell Shockers = Babylon.js · Venge.io = PlayCanvas. Todos los multiplayer browser exitosos usan motores JS/TS; ninguno shippeó Bevy/Godot web a esa escala. RuneScape HTML5 fracasó en 2013 por tecnología pre-WebGL2 (hoy obsoleto como argumento).

WebGPU global ~82–84 % (Safari 26 lo sumó 2025-09); WebGL2 ~97 %+ → Three.js WebGPURenderer con fallback cubre todo.

Networking

  • WebSocket: >99 % soporte. ELEGIDO. Todos los juegos de producción lo usan (Krunker, Shell Shockers, Venge, todo Colyseus).
  • WebTransport: baseline recién marzo 2026 (Safari 26.4) — iOS viejo sin soporte. Mejora progresiva futura, no base.
  • WebRTC DataChannel (geckos.io) existe pero complica infra (ICE/UDP); innecesario para juego por casillas.
  • Tick rates típicos: 10–20 Hz sobra para MMO por casillas (AO camina 1 tile/210 ms; WoW arrancó a 4 Hz; ejemplo canónico de lightyear: broadcast a 10 Hz + interpolación fluida).
  • Interest management: grid espacial (celdas + suscripción a bloque 3×3); Mirror documenta 30× más rápido que checks por distancia. AO20 ya funciona por áreas — mismo concepto.

Servidor

  • Rust (tokio + axum/tungstenite): ELEGIDO. 1M conexiones concurrentes demostradas en una caja; sin GC → p99 plano; en un VPS de 4 vCPU el límite no son las conexiones sino la simulación/broadcast.
  • Alternativas: Go (1M conns épicas, GC sub-ms — válido), Node/Bun+Colyseus (FAQ oficial: 1.000–2.000 conexiones por vCPU en juegos simples; rooms pinneadas a proceso + Redis para escalar; pausas GC V8 1–10 ms, hasta 30–50 ms con heap grande).
  • Referencias Rust: lightyear (netcode server-autoritativo con predicción/interpolación, WebSocket+WebTransport, wasm), naia, Veloren (workspace de crates común/cliente/server para compilar rápido y compartir lógica — patrón a copiar), SpacetimeDB (backend MMO entero como módulo WASM en la DB; corre BitCraft).
  • Código compartido Rust→WASM dentro de cliente TS: NO — no hay caso de producción documentado para MMO; para juego por casillas basta server-autoritativo + interpolación (patrón de los rewrites AO existentes: LambdaClass Elixir+TS/Pixi).

Android

  • PWA instalable (manifest + HTTPS; Chrome ya no exige fetch-handler) → TWA/Bubblewrap en Play Store totalmente vigente 2026 (Digital Asset Links, Lighthouse ≥80, fee única $25). Si se venden bienes digitales dentro del TWA: obligatorio Play Billing (Digital Goods API, Billing Library 7 desde 2025-08). Capacitor v8 como fallback.

Assets low-poly (CC0)

  • Quaternius: Universal Base Characters + Universal Animation Library (120–130+ animaciones retarget-ready) + Modular Character Outfits Fantasy (62 partes modulares) — base perfecta para personajes con equipamiento visible.
  • KayKit: Adventurers, dungeons, Character Animations pack (por tipo de rig).
  • Kenney (40k+ assets), Poly Pizza (agregador, incluye Google Poly archivado), OpenGameArt CC0.
  • Pipeline: Blender → glTF 2.0 → gltfpack/meshoptimizer o glTF-Transform (quantización, EXT_meshopt_compression, texturas KTX2/BasisU). Meshopt soportado en Three.js desde r122. Mixamo (gratis, FBX→GLB vía Blender) para animaciones extra.