Kris

Cada plataforma, un destino: guía para elegir tu esquema de compresión

Compresión 3DCompresión de texturasCompresión de vérticesOptimizaciónPipeline

Los 4 artículos anteriores explicaron las herramientas de compresión de vértices y texturas. Pero saber usar una herramienta es una cosa; saber cuál usar y en qué contexto es otra muy distinta. Este artículo responde exactamente a eso, y está pensado para que tomes decisiones con confianza al terminar de leerlo.

Al final, deberías poder responder: ¿en qué plataforma corre mi proyecto? ¿El cuello de botella del primer render es la descarga o la memoria de video? ¿Qué esquema de compresión aplico a texturas y vértices?

Primero lo primero: el escenario manda, no la herramienta

Todo este artículo se resume en un principio fundamental, que este serie ha repetido hasta la saciedad:

No existe el «mejor» esquema de compresión, solo el que mejor se adapta a tu escenario.

Tres variables determinan la elección:

  1. Plataforma/Dispositivo: PC de escritorio, navegador móvil, visor de realidad virtual, miniprogramas… las capacidades varían enormemente.
  2. Tipo de uso: ¿Es una visualización puntual (como la página de producto de una tienda online) o una experiencia inmersiva prolongada (como un juego de VR)?
  3. Cuello de botella principal: ¿Es la velocidad de descarga, la memoria de video insuficiente, o la decodificación que bloquea el primer render?

Primero identifica el cuello de botella y luego elige la herramienta. La siguiente matriz condensa esta lógica.

La matriz de decisión clave: plataforma × esquema recomendado

Esta es la tabla más importante del artículo. Dividida por plataforma, ofrece la recomendación para texturas y vértices, junto con la razón.

Plataforma / EscenarioEsquema de texturasEsquema de vérticesCuello de botella principalRazón clave
Web de escritorio (PC)KTX2 o WebPMeshOpt / CuantizaciónVelocidad de descargaMemoria de video amplia; prioriza archivos ligeros y carga rápida
Web móvil (navegador)KTX2 (obligatorio)MeshOptMemoria de videoLa memoria móvil es limitada; texturas con compresión por bloques
WebXR / Visores VRKTX2 (obligatorio)MeshOpt + LODMemoria de video + FPSLa memoria insuficiente crashea; la caída de FPS provoca mareos
Miniprogramas (WeChat)KTX2 / WebPMeshOpt / Cuantización puraTamaño del paquete + compatibilidadLímite de tamaño; evita decodificadores pesados
Visualización de producto e-commerceWebP (ligero) / KTX2 (preciso)MeshOptVelocidad del primer renderCarga instantánea; prioriza el peso sobre la calidad
Escenas grandes / Gemelo digitalKTX2 (obligatorio)MeshOpt + Draco + LODMemoria de video + draw callsMuchas texturas y modelos; compresión integral

Algunas conclusiones que conviene recordar:

  • Si la memoria de video es el cuello de botella, KTX2 es obligatorio (móvil, VR, escenas grandes)
  • Si la descarga es el problema y hay memoria de video de sobra, WebP es suficiente (escritorio, e-commerce)
  • En entornos sensibles al tamaño del paquete (miniprogramas), prioriza MeshOpt sobre Draco: decodificador pequeño y buena compatibilidad
  • Draco solo se considera para modelos muy grandes; en la mayoría de modelos medianos y pequeños, MeshOpt es más equilibrado

Comparativa completa de formatos de textura

Saber que «hay que usar KTX2» no es suficiente. Veamos todas las dimensiones de los formatos de textura:

FormatoTamaño de archivoUso de memoria de videoVelocidad de subidaCompatibilidadCalidad de imagenCaso de uso recomendado
PNGGrandeGrande (descomprimido)LentaMuy ampliaSin pérdidasValores numéricos precisos/transparencia, o plataformas antiguas
JPGMuy pequeñoGrande (descomprimido)LentaMuy ampliaCon pérdidasMapas de color, prioridad en transferencia de red
WebPMuy pequeñoGrande (descomprimido)LentaAmpliaAltaWeb de escritorio, prioridad en velocidad de descarga
AVIFAún menorGrande (descomprimido)LentaEn adopciónAltaPlataformas nuevas, compresión extrema
KTX2 (ETC1S)PequeñoMuy pequeñoRápidaRequiere transcodificaciónMedia (suficiente para color)Mapas de color, móvil/VR
KTX2 (UASTC)MedioPequeñoRápidaRequiere transcodificaciónAltaMapas de normales/datos

Observa que las tres primeras filas (PNG/JPG/WebP/AVIF) tienen un uso de memoria de video «Grande»: sin importar lo pequeño que sea el archivo en disco, al cargarlo en la GPU se descomprime a los píxeles originales. Es la limitación fundamental de los formatos tradicionales.

La estrategia híbrida es habitual: los mapas de color clave usan KTX2 para garantizar la memoria de video, y los mapas secundarios (como un pequeño emissive) usan WebP para simplificar. No es necesario convertir todo a KTX2; distribuye según el cuello de botella.

Diagrama de decisión: paso a paso

La matriz es el resultado; el diagrama te muestra cómo llegar a él.

¿Dónde corre tu proyecto?
│
├─ Web de escritorio (memoria de video amplia)
│   └─ ¿El primer render es lento?
│       ├─ Sí → WebP (o AVIF) + MeshOpt  [prioriza velocidad de descarga]
│       └─ No, pero hay muchos modelos → KTX2 + MeshOpt [prepara para el futuro]
│
├─ Web móvil / VR / Escenas grandes (memoria de video limitada)
│   └─ Texturas: KTX2 obligatorio (color ETC1S, datos UASTC)
│       └─ ¿Malla de vértices muy densa?
│           ├─ Sí → + Draco [compresión extrema, acepta decodificación lenta]
│           └─ No → + MeshOpt [equilibrado]
│
└─ Miniprogramas / Entornos limitados
    └─ ¿Sensible al tamaño del paquete?
        ├─ Sí → Cuantización pura o MeshOpt + WebP [sin decodificador o muy pequeño]
        └─ No → MeshOpt + KTX2 [combinación estándar]

Compresión de vértices vs. texturas: ¿dónde invertir?

Una pregunta frecuente: con presupuesto limitado, ¿qué optimizo primero? Depende de la composición del modelo:

Características del modeloPrioridad de inversiónRazón
Personaje/producto PBR (muchas texturas)Compresión de texturasLas texturas ocupan el 80%+; invertir en vértices tiene poco retorno
Modelo CAD/escaneado (vértices densos, pocas texturas)Compresión de vérticesLos vértices son el volumen principal
Personaje animado (huesos + skinning)Ambos, pero vértices primero (fuera de Draco)Los datos de animación también pesan; Draco tiene soporte débil para animación
Arquitectura/escena (grande, texturas medias)Texturas + LODLas texturas ahorran memoria de video; el LOD ahorra draw calls

Un orden aproximado de retorno de inversión: Texturas KTX2 > Vértices MeshOpt/Cuantización > Simplificación geométrica (LOD) > Vértices Draco. Empieza por lo que más beneficio aporta.

Estrategia híbrida: texturas clave en KTX2, secundarias en WebP

No todas las texturas merecen convertirse a KTX2. Un material PBR típico tiene 5-6 mapas; convertirlos todos a KTX2 es mucho trabajo y a veces innecesario.

Una división práctica:

  • KTX2 obligatorio: albedo (grande, color), normal (sensible a la precisión), roughness/metallic (afectan la iluminación)
  • WebP/JPG aceptable: emissive (normalmente pequeño), AO (frecuencias medias-bajas), normales de detalle (si existen)

El criterio: ¿La textura es grande? ¿Tiene detalles de alta frecuencia? ¿Se muestrea con frecuencia? Si las tres respuestas son sí → KTX2; si ninguna → formato tradicional para simplificar.

Automatización: gltf-transform, un comando para todo

El comando optimize de gltf-transform es la bala de plata para la mayoría de los casos: detecta automáticamente el tipo de textura, comprime según la estrategia recomendada y opcionalmente procesa los vértices.

# Instalación
npm install -g @gltf-transform/cli

# Optimización estándar: texturas KTX2 + vértices MeshOpt + limpieza
gltf-transform optimize model.glb model-optimized.glb \
  --texture-compress basisu \
  --meshopt

Parámetros:

ParámetroFunciónPor defecto
--texture-compress basisuComprime texturas a KTX2 (elige ETC1S/UASTC automáticamente)Desactivado
--meshoptActiva compresión MeshOpt en vérticesDesactivado
--simplifySimplificación geométrica (reduce vértices, con pérdidas)Desactivado
--weldFusiona vértices duplicadosActivado
--pruneElimina nodos/materiales no utilizadosActivado

Una combinación «compresión agresiva» para móvil:

gltf-transform optimize model.glb model-mobile.glb \
  --texture-compress basisu \
  --meshopt \
  --simplify --simplify-ratio 0.5 \
  --prune --weld

Una combinación «suave» para escritorio (conserva detalles, solo comprime texturas y vértices):

gltf-transform optimize model.glb model-desktop.glb \
  --texture-compress webp \
  --meshopt

¿Sin ganas de escribir scripts? Usa la compresión online de Any3D

¿No quieres instalar Node ni configurar una cadena de herramientas? Compresión online de Any3D procesa directamente en el navegador: selecciona un GLB, ajusta los parámetros visualmente según la plataforma (móvil/escritorio/VR), y el modelo nunca se sube al servidor (todo se procesa localmente). Exporta la versión comprimida con un clic. Usa la misma base que gltf-transform, pero sin fricción. El próximo artículo, sobre el flujo completo de extremo a extremo, conectará todo el proceso.

Resumen rápido

  • Memoria de video es el cuello de botella → KTX2, sin discusión
  • Descarga es el problema y hay memoria de sobra → WebP/AVIF también sirve
  • Sensible al tamaño del decodificador → MeshOpt > Cuantización pura > Draco
  • Modelos muy grandes → solo entonces considera Draco
  • En la duda → gltf-transform optimize y ajusta si hace falta

Siguiente paso

Con el marco de selección listo, llega el artículo final: partiendo de un modelo real, recorreremos todo el flujo —exportación desde Blender, compresión de texturas, compresión de vértices, carga en el motor— con un script automatizado completo y una tabla de referencia rápida de toda la serie.

Apóyanos