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.