Índice · 24 secciones
- 00De una imagen a un dibujo editable
- 01El problema de representación
- 02La cadena completa de conversión
- 03Resolución, alfa y selección temporal
- 04Separar fondo y transparencia
- 05Una paleta compacta y perceptual
- 06Cuantización por votos y dithering
- 07Compresión espacial con rectángulos
- 08Trazos, esqueletos, curvas y elipses
- 09Cobertura y reparación de costuras
- 10Reducir ruido sin borrar la estructura
- 11Qué cambia entre los nueve modos
- 12Tests con el pipeline real de Pintura
- 13Blur, glows y degradados nativos
- 14Compresión temporal y movimiento
- 15El presupuesto y su ajuste matemático
- 16Render y resolución automática de Pintura
- 17Cómo se reduce el trabajo computacional
- 18De las primitivas al editor de GD
- 19Qué significa el porcentaje de similitud
- 20Benchmark: Paimon frente a Geometrize2GD
- 21Parámetros, pseudocódigo y límites
- 22Notación y glosario
- 23Fuentes y referencia de esta edición
De una imagen a un dibujo editable
Una imagen raster almacena muestras de color en una cuadrícula. Geometry Dash dibuja objetos con textura, posición, escala, rotación, color y reglas de visibilidad. Convertir una imagen a objetos exige cambiar de representación: identificar qué partes pueden compartir una figura, cuánto detalle puede conservarse y qué coste tendrá reproducirlo dentro del editor.
El sistema de Paimbnails analiza imágenes, GIF y fuentes de vídeo a través de una representación común. Reduce la fuente, construye una paleta compartida, asigna colores a una cuadrícula, limpia fragmentos de escaso contraste y genera primitivas. Puede reconstruir áreas con bloques, seguir trazos, ajustar elipses o usar máscaras de decoraciones nativas. Para animaciones, compara reutilización temporal, fotogramas y movimiento. Finalmente comprueba el presupuesto y prepara los objetos y triggers que recibirá GD.
Este paper explica esa cadena desde el código: las decisiones de color y geometría, las restricciones de cobertura, el criterio de selección y las consecuencias de cada optimización. La idea central es que la fidelidad visual, el número de objetos y el coste de reproducción son variables diferentes. Mejorar una de ellas puede empeorar otra.
7c08658bcce2, del 7 de octubre de 2026. Las ecuaciones marcadas como modelo conceptual sirven para razonar sobre el problema; las reglas descritas como implementadas proceden del código. Los tests ejecutan el pipeline C++ original en modo Pintura a través de WebAssembly. El benchmark lo compara con el motor de Geometrize en el mismo navegador; sus tiempos describen ese entorno y no la ejecución dentro de GD.El documento puede leerse de principio a fin o por temas. Las fórmulas usan coordenadas en celdas durante el análisis y unidades de GD durante la emisión. Los ejemplos numéricos muestran cómo operan las reglas, sin atribuir tiempos ni resultados de rendimiento que no se hayan medido.
El problema de representación
Sea una fuente de ancho Wₛ, alto Hₛ y Fₛ fotogramas. Cada muestra contiene tres canales de color de 8 bits y un alfa. Los retrasos de los fotogramas forman parte de la fuente: dos GIF con los mismos colores pueden tener una duración o cadencia diferentes.
La representación intermedia contiene una paleta P, una cuadrícula de índices Qₜ y primitivas con centro, ancho, alto, orientación, índice de color, tipo y capa. La celda −1 significa «sin pintura», no un color negro. Una primitiva puede abarcar muchas celdas y no tiene por qué alinearse con los ejes.
Para razonar sobre la tarea puede plantearse una función de coste con un término visual, uno geométrico y otro de reproducción. Esta función es un modelo conceptual: el conversor no resuelve un único optimizador continuo ni calcula estos tres coeficientes. Usa heurísticas discretas, pruebas de cobertura y comparaciones entre planes.
El operador ℛ representa la rasterización del plan. Las restricciones reales incluyen un presupuesto total, límites de triggers y grupos, disponibilidad de canales de color y posibilidad de crear las figuras elegidas. Un plan matemáticamente atractivo puede resultar inviable si el nivel ya ocupa los canales necesarios. El control de recursos del editor sucede al preparar la importación, después del análisis.
La compresión es estructural: un rectángulo de un solo color puede describir miles de muestras. No hay una reducción universal. Una fotografía con textura fina o un patrón de ruido puede necesitar muchas piezas incluso con pocos colores, porque el número de fronteras sigue siendo alto.
La cadena completa de conversión
La fuente común es SourceAnimation, que contiene tamaño y una secuencia de buffers RGBA. El escalado previo puede usar OpenGL y por eso se prepara en el hilo apropiado. El trabajo geométrico recibe datos normales de C++ y puede distribuirse entre workers. El resultado es ImportPlan, independiente de los nodos de la interfaz.
El plan guarda los objetos estáticos, los tracks de visibilidad, los tracks de movimiento, la paleta, las máscaras utilizadas y los conteos de objetos. También conserva resolución solicitada y efectiva, estrategia, similitud y número de pasadas de Render. Estos datos permiten mostrar lo que se construirá antes de crear los objetos.
Hay dos rutas principales de búsqueda. La regular empieza por la dimensión solicitada y la reduce si las restricciones o la revisión lo requieren. Render prueba varias dimensiones independientes y elige entre los planes válidos. En ambas rutas, la búsqueda inicial desactiva el movimiento; después se prueba si reutilizar siluetas permite ahorrar objetos. El glow adicional de los modos no suaves se añade al final, con el espacio restante.
Este orden evita que una optimización secundaria obligue a elegir una cuadrícula más pobre desde el comienzo. También evita confundir el halo decorativo con la estructura que se compara contra la imagen.
Resolución, alfa y selección temporal
Una cuadrícula que conserva la proporción
La dimensión D controla el lado más largo. El otro lado se redondea a un entero y nunca baja de una celda. Para una imagen horizontal, el ancho es D y la altura es el valor proporcional; para una vertical se intercambian los papeles.
Reducir una imagen requiere decidir qué aporta cada región de origen. El muestreo cercano selecciona una muestra representativa y preserva la apariencia escalonada. El muestreo por área suma colores ponderados por alfa. Esta ponderación impide que el RGB oculto de los píxeles transparentes introduzca un borde oscuro o un tono arbitrario.
Si la suma de alfa es cero, el color resultante se fija a cero. En el código los acumuladores son enteros y hay divisiones y redondeos; la expresión anterior describe la media antes de esas discretizaciones. La máscara de fondo también interviene: una muestra eliminada no vuelve a pintar por el mero hecho de tener alfa alto.
El escalador previo conserva una fuente de trabajo de hasta cuatro muestras por celda de la resolución solicitada, con una base mínima de trabajo de 128. No se multiplica indefinidamente la fuente ni se inventa detalle cuando el origen es menor. La reducción GPU tiene una ruta CPU de recuperación si falla o desaparece el alfa visible. El escalado de trabajo y la cuadrícula final son etapas distintas.
Menos frames, misma suma de retrasos seleccionados
Si hay demasiados fotogramas, la secuencia se divide en intervalos por índice. Se conserva un fotograma central de cada intervalo y se suman sus retrasos. Cada retraso fuente se normaliza a un mínimo de 10 ms. Esto conserva la duración normalizada, aunque cambia qué poses se ven y cuánto tiempo ocupa cada pose.
La selección no es uniforme en tiempo cuando los frames tienen retrasos diferentes: los intervalos se forman por posición en la secuencia. Después de cuantizar, dos cuadrículas consecutivas idénticas se fusionan y sus tiempos se acumulan. Esta segunda reducción es exacta con respecto a la cuadrícula cuantizada.
Separar fondo y transparencia
Eliminar el fondo no equivale a borrar todos los píxeles de un color. Un personaje puede tener ojos blancos sobre un fondo blanco. El modo AutoBorder analiza las muestras visibles del borde exterior y agrupa su RGB en un histograma de 12 bits: cuatro bits por canal, 4096 combinaciones.
El bin más frecuente solo se acepta como candidato de fondo si reúne al menos un tercio de las muestras visibles del borde. Así se evita tratar automáticamente un borde de fotografía heterogéneo como un fondo plano. El RGB de referencia es la media de las muestras de ese bin.
Desde el perímetro se hace una expansión por cuatro vecinos. La búsqueda atraviesa muestras transparentes y colores suficientemente próximos a la referencia. Solo se elimina lo que puede alcanzarse desde ese perímetro: una región interior del mismo color, separada por un contorno, queda protegida.
Si el proceso eliminaría toda una imagen sólida visible, la máscara se deshace. Esta protección evita que un rectángulo de un solo tono produzca una importación vacía por confundirse con su propio fondo. El análisis se realiza por fotograma; no supone que el borde de una animación sea siempre idéntico.
La regla es útil para ilustraciones sobre un fondo uniforme. No realiza segmentación semántica, no reconoce personajes y no sabe si una región es «cielo» o «piel». Si el objeto toca el borde con un color muy parecido al fondo, la conectividad puede unirlos. El modo de conservar fondo permite evitar esa decisión automática.
Una paleta compacta y perceptual
Histograma de origen y pesos
La paleta se analiza a partir de la fuente disponible, no únicamente desde una miniatura ya promediada. El histograma principal usa cinco bits por canal, 32³ = 32768 bins. Dentro de cada bin se acumulan peso y sumas RGB, por lo que el representante es una media ponderada de los colores reales que cayeron en él.
El peso temporal de un fotograma se limita a entre 10 y 1000 ms. En los modos que usan geometría de pintura también se favorecen tonos localmente planos: se compara una muestra con sus ocho vecinos a escala de celda y se aplica un peso 32, 8 o 1 según cuántos coincidan dentro del umbral. Así un relleno amplio puede conservar su color frente a pequeñas variaciones del antialiasing.
Para fuentes grandes, el paso de muestreo crece según una raíz cuadrada calculada a partir de un objetivo de 4·2²⁰ muestras por frame. Es un control aproximado del volumen de análisis; la distribución y los redondeos de las regiones de muestreo siguen afectando al total real.
Cortes por dispersión
El inicio de la paleta es una variante de median cut. Cada caja contiene entradas de histograma; se calculan las medias y dispersiones RGB. Se elige la caja con mayor error medio y se ordena por el canal de mayor variación. El corte busca una mediana ponderada, no la mitad del número de entradas.
Una caja cuyo peso está por debajo del 0,1 % del histograma no se divide para obtener otra entrada. Este umbral se refiere al peso acumulado, que puede incluir duración y planitud, no directamente al porcentaje de píxeles. El número máximo de colores es un techo; la paleta final puede contener menos.
Distancia en Oklab
Para buscar el color más próximo, el RGB de 8 bits primero se normaliza y se transforma de sRGB a RGB lineal. Una tabla de 256 valores evita repetir las potencias por canal. Oklab representa claridad y dos ejes cromáticos; su diseño y matrices están documentados por Björn Ottosson. Las matrices siguientes son las utilizadas por ColorSpace.cpp.
El refinamiento asigna los bins a los representantes más próximos en Oklab y ajusta cada centro al bin de mayor peso de su región. Después fusiona centros demasiado cercanos mediante una media ponderada en Oklab. Esta etapa ayuda a conservar tonos planos repetidos y a evitar colores casi duplicados; no es un entrenamiento iterativo de k-means.
Para volver a RGB se invierten las transformaciones, se elevan al cubo las respuestas intermedias y se aplica la curva sRGB inversa. El resultado se redondea y limita al intervalo 0–255. Una distancia perceptual útil para cuantizar tampoco garantiza que el render final conserve toda la estructura del dibujo: los errores geométricos deben medirse por separado.
Cuantización por votos y dithering
En la ruta habitual sin dithering, cada celda observa su región correspondiente de la fuente y vota por colores de la paleta. Una tabla precalculada de 32768 entradas relaciona los bins RGB con el color Oklab más cercano. La aproximación del bin evita una búsqueda perceptual completa para cada muestra.
La votación conserva el color dominante de una región en vez de crear siempre un promedio intermedio. Las muestras por debajo del umbral alfa no emiten un voto; las eliminadas por fondo tampoco. Si la opacidad media no alcanza el umbral, la celda queda vacía. Los votos y el cálculo de opacidad son comprobaciones relacionadas pero distintas.
Un ejemplo: una región con tres muestras rojas opacas y una azul opaca asigna más voto al rojo. Un promedio RGB introduciría un púrpura que quizá no existe en la ilustración. En fotografías ese promedio puede resultar más suave; en rellenos planos y contornos, preservar un tono existente puede reducir fragmentación.
La ruta con difusión de error
Si se activa dithering en el modo compatible, la cuantización trabaja sobre la copia reducida. Añade el error acumulado al RGB de la muestra, limita el resultado y elige el color de paleta más cercano en Oklab. El error RGB restante se difunde hacia las celdas siguientes con los pesos de Floyd–Steinberg implementados en la función.
El dithering aproxima tonos intermedios mediante alternancia espacial. Esa alternancia crea más fronteras y puede aumentar el número de objetos. La normalización de opciones lo desactiva en Paint, Render y Free, y en los otros modos no basados en bloques. La tabla perceptual y la difusión RGB no deben confundirse: usan espacios distintos para tareas diferentes.
La cuadrícula ya cuantizada es una referencia importante, pero no es la imagen original. Un dibujo con geometría perfecta respecto a esa cuadrícula puede haber perdido textura, transparencias o colores durante los pasos previos.
Compresión espacial con rectángulos
Un bloque por celda es la representación más directa. Si la cuadrícula tiene n celdas visibles, ese esquema necesita n objetos. Una región rectangular uniforme de a×b celdas puede describirse con un objeto escalado. La mejora viene de compartir color y cobertura, sin tener que promediar colores vecinos.
packBlocks construye una máscara local del color que debe cubrir. Distingue las celdas pendientes de otras por las que se permite pasar. Un barrido busca rectángulos que cubran el mayor número de celdas pendientes; en empates favorece mayor área. Las sumas acumuladas por fila permiten consultar cuántas celdas pendientes hay en un tramo sin volver a sumarlo muestra por muestra.
La lógica se aplica por color y evalúa alternativas de empaquetado. No garantiza el mínimo global de rectángulos para cualquier máscara. Se prioriza una búsqueda acotada con una cobertura útil. En una región con huecos, ampliar un rectángulo puede cubrir color ajeno; en las rutas con capas, algunos espacios son transitables porque quedarán tapados por otra figura.
Conectar áreas idénticas a través de regiones permitidas puede reducir objetos, pero requiere respetar el orden real de pintado. No basta con que el bounding box parezca correcto: un círculo de otra hoja de sprites puede terminar por encima de un rectángulo y hacer visible lo que se suponía oculto.
Trazos, esqueletos, curvas y elipses
Componentes y campos de distancia
La geometría comienza agrupando celdas conectadas del mismo color. Cada componente se analiza en una región local con padding. Un campo de distancia euclídea mide la separación respecto a la celda vacía más cercana. El cálculo usa dos pasadas sobre envolventes de parábolas, en lugar de comparar cada celda contra todos los huecos.
El campo ayuda a distinguir zonas interiores y fronteras. La distancia de tablero, que se calcula aparte con pasos de vecindad, sirve para clasificar grosores en la cuadrícula. Son medidas diferentes: una aproxima separaciones según movimientos de celdas y otra usa la distancia euclídea.
Para un trazo fino, una esqueletización reduce el área a un eje. Se extraen caminos del esqueleto y se ajustan tramos. Una línea diagonal no necesita necesariamente una escalera de bloques: puede describirse como un rectángulo rotado, si la forma mantiene cobertura y no invade colores protegidos.
Orientación principal
Un ajuste de trazo calcula el centro de las muestras y sus productos de desviación. La dirección principal se obtiene de una forma cerrada para una matriz simétrica de dos dimensiones. La normalización por el número de muestras no cambia el ángulo, por lo que el código puede usar las sumas sin dividirlas.
Las extensiones de las proyecciones definen ancho y alto. Un padding evita perder las esquinas de las celdas que originaron el trazo. En Art también se considera el área de las muestras para estimar el grosor. La dirección principal es un candidato: no decide por sí sola que la forma sea válida.
Simplificación del camino
La simplificación conserva extremos y busca la muestra más alejada del segmento que los une. Si supera la tolerancia, divide el camino y vuelve a simplificar las partes. La distancia al segmento utiliza una proyección limitada entre sus extremos; esto evita tratar un punto más allá del extremo como si estuviera próximo a una recta infinita.
En Pintura, el eje suave se filtra antes de simplificar. Los bucles requieren conservar continuidad en el cierre. Los giros pueden incorporar uniones redondas y los extremos expuestos pueden probar remates circulares o elípticos. Estos ajustes se comparan contra muestras protegidas para evitar que el redondeo corte una línea o pinte sobre su vecina. El concepto de remates y uniones redondos también se describe en SVG 2; las restricciones concretas aquí pertenecen al conversor.
Fusionar fragmentos con una figura mayor
La fusión de Pintura agrupa fragmentos cercanos mediante sectores de cuatro celdas. Prueba la dirección principal, una orientación horizontal, una pendiente estimada a partir de las extensiones y rotaciones ya presentes. El grupo y la figura resultante están acotados; en el ajuste revisado, una extensión superior a 32 celdas se rechaza.
El candidato debe contener centros, contactos e interiores exigidos. Además, su área no puede crecer sin control: para este ajuste se limita a 1,18 veces el área original más 0,25. Entre los candidatos válidos se favorece menor área. Una elipse escala sus radios hasta incluir todas las muestras necesarias; una figura que ahorra piezas puede ser rechazada si cruza la frontera.
Esta es una optimización local. El área no representa por sí sola toda la calidad: dos figuras con área parecida pueden tocar colores diferentes. Por eso se combina con pruebas de cobertura y con una revisión rasterizada del plan.
Cobertura y reparación de costuras
Comprobar el centro de cada celda es barato, pero una figura rotada puede pasar por el centro correcto y aun dejar una esquina vacía. También puede invadir una franja de un color vecino sin llegar a tocar su centro. La validación utiliza centros y muestras subcelda según la operación que se esté probando.
Para un punto de pantalla, el test geométrico primero resta el centro de la primitiva y aplica la rotación inversa. En esas coordenadas, los tests son sencillos. Un bloque usa dos desigualdades, una elipse usa una suma de cuadrados y un triángulo usa coordenadas normalizadas.
Las máscaras de stamps contienen cobertura alfa de la textura. La consulta se realiza en el espacio local de la figura; el test binario usa un umbral de 128. El render de una figura suave necesita además la intensidad de alfa y su modo de mezcla, no solo ese test binario.
Las operaciones exigentes revisan interiores a escala 8: cada celda puede producir 64 muestras. El evaluador precalcula seno, coseno y extensiones de la figura y recorre los tramos de fila que puede tocar. Así evita preguntar por puntos que están fuera de su bounding box o de su intersección con esa fila.
El orden de capas importa. Pintura puede colocar un relleno amplio detrás de una frontera de otro color; ese solapamiento es válido solo si la capa superior lo oculta. Los círculos requieren una frontera más estricta porque GD puede ordenarlos de forma diferente a los rectángulos de otra hoja de sprites.
Después del trazado, la reparación de costuras busca zonas que deberían verse y no están cubiertas como se esperaba. Puede añadir parches, fusionarlos o volver a ajustar fragmentos. Esto puede aumentar el conteo inicial. Optimizar el número de objetos antes de reparar no equivale a optimizar el resultado final.
El modo Circles no sigue la misma reparación exacta de cuadrícula: su dibujo se define por las formas circulares, y los parches rectangulares podrían quedar debajo. Las garantías locales de muestras tampoco son una prueba de igualdad visual absoluta dentro de GD: las texturas, el orden de sprites y el zoom del juego influyen en el resultado.
Reducir ruido sin borrar la estructura
Una paleta limitada puede convertir el antialiasing de un borde en pequeñas islas de colores intermedios. Cada isla puede crear una figura propia y obligar a partir el relleno circundante. La limpieza opera sobre componentes y vecindades de la cuadrícula antes de generar geometría.
mergeFaintSpecks considera manchas pequeñas y de escaso contraste. Su criterio combina diferencia de color y área; el umbral se ajusta en los modos verticales. Hay un límite de área para que una línea larga y fina no sea tratada como ruido únicamente por ser estrecha.
En las rutas de pintura, dissolveSpecks limita el tamaño de las manchas candidatas con una regla que depende del área de la cuadrícula. Si la cuadrícula es muy pequeña, el límite puede ser cero y no se aplica esa disolución.
compactPaintSpeckles puede sustituir tonos intermedios por vecinos compatibles. Cuando dispone de la fuente reducida, limita el aumento del error RGB cuadrático contra ella. En las comprobaciones correspondientes, se permite un aumento de hasta 900 por muestra y hasta 900 por el tamaño del componente. Un vecino frecuente no obtiene permiso automático para borrar un detalle contrastado.
La limpieza y la reparación de costuras resuelven problemas diferentes. La primera cambia la cuadrícula para ahorrar complejidad de poco valor; la segunda intenta representar mejor la cuadrícula elegida. Mezclarlas en una sola métrica escondería de dónde viene la pérdida.
Si la revisión geométrica baja del umbral de Pintura, la búsqueda puede volver a construir la misma resolución sin la compactación opcional de manchas. Esa alternativa conserva las otras etapas de limpieza. No significa que se recupere automáticamente toda la fuente original.
Qué cambia entre los nueve modos
Los modos comparten preparación, paleta y planificación, pero usan diccionarios geométricos distintos. La elección modifica el tipo de aproximación, la cantidad de costuras y las posibilidades de reutilización.
| Modo | Reconstrucción | Consecuencia principal |
|---|---|---|
| Blocks | Empaquetado de regiones del mismo color en rectángulos. | Conserva la estructura de celdas; el dithering puede incrementar fragmentación. |
| Art | Componentes, ajuste de trazos, esqueletos y relleno con bloques. | Puede sustituir escaleras por trazos rotados, sujeto a cobertura. |
| Paint | Contornos, zonas interiores, trazos suaves, elipses, fusiones y reparación. | Busca una lectura más continua de ilustraciones y líneas. |
| Render | Geometría de Paint en varias resoluciones con revisión y selección. | Elige por calidad y coste entre planes válidos, no por dimensión máxima solamente. |
| Free | Ajustes geométricos y candidatos del catálogo de formas con límites de búsqueda. | Una forma adecuada puede representar una región compleja con menos piezas. |
| Circles | Círculos y elipses con pruebas de orientación, cobertura y derrame. | Su estética y reparación difieren de una reproducción exacta por celdas. |
| Blur | Filtrado de la fuente y construcción mediante glow radial. | La superposición y normalización de energía son parte de la reconstrucción. |
| Vert | Pares de rampas verticales enfrentadas por tramo horizontal. | Aprovecha decoraciones de degradado nativas y mezcla aditiva. |
| VertX | Ruta vertical con opción de un wash de degradado 2903. | Añade una capa de flujo vertical con colores superior e inferior. |
Free acota profundidad de división, intentos exactos y tamaño mínimo de regiones para que la búsqueda de figuras no crezca sin límite. La ganancia debe justificar sustituir la alternativa de rectángulos. Circles prueba 16 direcciones y varias relaciones de radios; no supone que toda componente sea un disco.
Los límites describen la revisión estudiada, no una propiedad universal de los modos. La semejanza entre dos nombres tampoco implica equivalencia: Render usa Pintura como geometría, pero cambia la estrategia de búsqueda; Blur puede seguir usando glows aunque el filtrado se desactive.
Tests con el pipeline real de Pintura
Las pruebas de Paimon usan el mismo buildPlan del conversor, con Pintura seleccionada explícitamente. El resultado es una rasterización del plan; el entorno del navegador no incorpora el editor, las texturas del juego ni los triggers de una animación.
Explorar el modo Pintura
Ejecuta el código C++ original del pipeline con ImportMode::Paint, compilado a WebAssembly. La prueba incluye la paleta, la limpieza, el trazado de figuras, las reparaciones y la revisión de calidad del plan. Cambia la imagen, la resolución solicitada y el máximo de colores.
Fuente: Paimon · ilustración oficial · archivo original. © HoYoverse / miHoYo. Imagen completa sobre el fondo del paper; sin recortes.
El laboratorio admite de 16 a 320 celdas horizontales. La entrada común es 320 × 240 RGBA sobre el fondo del paper, para aprovechar el detalle de las imágenes oficiales. El límite de esta prueba es 50000 objetos para estudiar el detalle; el benchmark inferior usa presupuestos de 128, 256 y 512. La resolución efectiva puede bajar si lo exige la revisión del pipeline. La curva ejecuta siete conversiones reales a 16, 32, 64, 96, 160, 240 y 320 celdas; cada conteo incluye todos los objetos del plan, sin glow ni animación.
Blur, glows y degradados nativos
Un filtro separable con alfa
Como modelo continuo, un desenfoque gaussiano combina muestras con un peso que decrece con la distancia. La separabilidad permite filtrar horizontal y verticalmente en dos pasadas en vez de usar un kernel bidimensional completo. La fórmula continua siguiente explica la idea; el shader del proyecto usa una aproximación discreta concreta.
gif_blur.glsl toma cinco muestras por eje con pesos 1, 4, 6, 4 y 1. El radio controla la separación de los taps. La suma de pesos es 16. El RGB se acumula premultiplicado por alfa y se divide por el alfa ponderado; el alfa final se divide por 16. La ruta CPU usa los mismos pesos e interpola cuando la posición cae entre muestras.
gif_blur.glsl. Dos pasadas forman el kernel bidimensional. Cambiar r mueve las muestras, no convierte estos cinco pesos en una gaussiana exacta de radio arbitrario.La figura es una máscara, no su caja
Los glows se eligen a partir del catálogo de objetos y de su cobertura alfa. La preparación consulta el juego en el hilo GL y copia máscaras inmutables para el trazado. Un objeto con un nombre prometedor puede no tener la forma adecuada: se compara la máscara completa.
Si no hay un glow radial completo apropiado, la ruta puede combinar cuatro cuartos orientados alrededor del centro. Las rampas verticales se usan enfrentadas. En la revisión actual existen también repuestos analíticos declarados para recursos ausentes; su presencia no garantiza idéntica textura a un recurso nativo y el plan registra esa condición.
En Vert, un tramo horizontal continuo del mismo color comparte un par de decoraciones. Dos rampas generan la cobertura vertical de ese tramo. El modo básico usa objetos decorativos, mientras que VertX puede incorporar un wash con el trigger de degradado 2903. Confundir ambos conduciría a una explicación equivocada del conteo de triggers.
Energía, mezcla y base negra
La mezcla aditiva suma contribuciones luminosas y puede saturar canales. Una retícula densa de glows sin compensación sobreiluminaría incluso un campo uniforme. La reconstrucción ajusta opacidad e intensidad según máscara y solapamiento; la compactación de Blur cambia la densidad de muestras y puede introducir variantes de opacidad.
Esta ecuación es una aproximación explicativa de la mezcla, no una promesa sobre gamma, texturas o todos los estados de render del juego. Para el marco general de composición puede consultarse Compositing and Blending del W3C. El render del conversor usa sus máscaras y reglas propias para aproximar la vista previa.
Una base negra ayuda a conservar la lectura de tonos oscuros; mezclar con la base del nivel deja que el escenario participe en el resultado. La base negra añade un objeto y un canal al presupuesto. El glow adicional de los modos no suaves es una etapa separada: reserva como máximo el menor valor entre una quinta parte del presupuesto y el hueco disponible, y prioriza candidatos grandes.
Compresión temporal y movimiento
Separar lo constante de lo variable
Para una animación, copiar todo el dibujo en cada frame cuesta aproximadamente la suma de objetos de todos los fotogramas. Sin embargo, un fondo fijo no necesita duplicarse. El plan distingue celdas constantes de celdas dinámicas y evalúa estrategias alternativas.
En la estrategia temporal se agrupan posiciones por color y máscara de visibilidad. Una máscara de F bits dice en qué frames existe ese estado. En la estrategia por fotograma se comparte lo estático y se generan tracks para las partes dinámicas de cada frame. Sus costes pueden ser muy diferentes aunque produzcan las mismas cuadrículas.
Contar las transiciones
Un track necesita cambiar de visibilidad cuando su bit actual difiere del anterior. Los estados que empiezan ocultos requieren inicialización. La reproducción también usa eventos de avance, y un bucle agrega el retorno del último frame al primero. Los objetos Alpha, Spawn y Move participan en el total, no solo las figuras del dibujo.
En la función de conteo revisada, para un plan animado con tracks, se parte de un evento inicial y de los triggers de movimiento. Se añaden inicializaciones ocultas y transiciones; en bucle se suman los cambios del cierre y F eventos de avance, y sin bucle se agregan F−2 eventos si F es mayor que dos. La fórmula de cambios anterior es solo uno de esos términos.
Una silueta que se desplaza
Cuando una figura conserva forma y color y cambia de posición, puede almacenarse una sola vez y desplazarse con Move triggers. El planificador busca coincidencias con offsets, predicción de velocidad y una vecindad limitada. En esta revisión exige al menos ocho celdas y tres frames para considerar un track; limita la cantidad de grupos y cadenas abiertas.
El seguimiento no es una estimación de flujo óptico completa ni detecta automáticamente deformaciones. La búsqueda limitada puede perder una coincidencia distante; una silueta que cambia debe dividirse o representarse de otra manera. También hace falta conservar la secuencia de visibilidad y restaurar posición cuando el bucle lo requiere.
El plan con movimiento solo se adopta si supera el ahorro mínimo: su total debe ser menor que el 95 % del plan base. En geometría de pintura se rechaza además si pierde más de 1,5 puntos de similitud. El movimiento se evalúa al final, a la resolución efectiva elegida por el plan base.
El presupuesto y su ajuste matemático
El presupuesto cuenta objetos visuales y triggers emitidos. El coste de comparación en reproducción pesa más los triggers: en esta revisión se usa un factor ocho. Son dos cantidades diferentes, ambas necesarias para elegir una estrategia.
El factor ocho es una heurística interna, no una medición de que cada trigger cueste exactamente ocho objetos en todas las plataformas. La selección compara primero si el candidato respeta el límite de reproducción de 512 triggers; luego si cabe en el presupuesto. Entre los que caben, decide por coste ponderado y desempata con el total.
La validación del plan también exige menos de 9800 grupos potenciales entre tracks y eventos. La preparación posterior del editor busca grupos realmente libres en el rango admitido. Tener menos de 9800 en el plan no prueba que un nivel concreto disponga de ellos.
Por qué aparece una raíz cuadrada
Si las dimensiones se reducen por un factor q, el área disminuye aproximadamente por q². Bajo un modelo en que los objetos crecen como el área, la dimensión necesaria para pasar de N objetos a B es D·√(B/N). La relación es orientativa: la conectividad y la cuantización pueden cambiar de forma discreta.
La ruta regular implementa un ajuste amortiguado: multiplica la raíz por 0,94 y limita el factor entre 0,5 y 0,9. Redondea hacia abajo y se asegura de bajar al menos una unidad sin cruzar la dimensión mínima.
Con D=320, N=20000 y B=12000, la raíz es aproximadamente 0,775; el factor amortiguado es 0,728 y la siguiente dimensión es 232, si la mínima lo permite. El producto antes del redondeo es 232,998678: redondear el factor mostrado a tres decimales antes de calcular puede producir otra cifra. El conversor vuelve a construir y contar; no da por hecho que el resultado sea exactamente de 12000 objetos.
Explorar el siguiente intento
Introduce un conteo hipotético para evaluar la fórmula real de ajuste. La curva representa únicamente el modelo N(D) ∝ D²; el valor siguiente usa el clamp y el redondeo del código.
La ruta regular tiene un máximo de veinte intentos. Si ya está en la resolución mínima y sigue sin caber, puede reducir el límite de frames con un factor lineal basado en B/N, también amortiguado y limitado. Conserva un mínimo de dos cuando entra en esa reducción temporal; una fuente originalmente estática sigue siendo estática.
Si el plan cabe pero la calidad geométrica no supera el criterio de revisión, puede bajar la dimensión un 10 % y conservar el mejor resultado. Cuando ninguna combinación cumple, informa de que no cabe en el presupuesto. No elimina objetos arbitrariamente del payload final para fingir que el plan entra.
Render y resolución automática de Pintura
Render compara varias resoluciones
La ruta Render evalúa la dimensión mínima y seis proporciones de la máxima: 0,45, 0,60, 0,72, 0,84, 0,93 y 1,00. Redondea, limita y elimina duplicados. Las pasadas son independientes y se ejecutan en paralelo cuando hay capacidad; después se elige de forma ordenada entre los planes válidos.
La calidad usada para seleccionar es el menor valor entre similitud general y de detalle. Se define un límite suave de objetos: el menor entre el presupuesto y 2500 para fuentes estáticas o 6000 para animadas. Es una preferencia, no un reemplazo del presupuesto duro.
Si dos calidades difieren como máximo 0,25 puntos, se favorece menor total de objetos. Un candidato que entra en el límite suave puede sustituir a otro fuera de él aunque pierda hasta 0,75 puntos. Una vez que un plan bajo ese límite llega al objetivo de 97, otro más caro no lo reemplaza solamente por subir calidad. Estas reglas hacen que «más resolución» y «plan preferido» no sean equivalentes.
Auto estima detalle que se perdería
La opción Auto de Pintura analiza la pérdida al agrupar la fuente a una dimensión candidata. Inspecciona el primer frame, el central y el último. Usa RGBA premultiplicado: un color oculto bajo alfa cero no debe forzar una resolución mayor.
Para cada región calcula su media y máximo contraste por canal. Si el contraste no supera 32, no añade pérdida. Para las regiones restantes, toma la mayor desviación de los cuatro canales y resta una zona muerta de ocho unidades. El denominador cuenta las muestras de las regiones inspeccionadas, también las de bajo contraste.
La búsqueda prueba 320 y 480 y se detiene si la pérdida es como máximo dos. Si ambas requieren más detalle, usa el techo: el menor entre 680 y el lado nativo más largo. Una fuente con lado de 400 no salta a 680. Las fuentes de hasta 320 siguen usando la base de 320, aunque aumentar la cuadrícula no crea información nativa.
Auto cambia la resolución candidata, no elimina el presupuesto. El plan posterior puede reducirla por cantidad de objetos, reproducción o revisión. La normalización habitual de opciones limita la dimensión manual a 320; la ruta Auto de Paint realiza su elección después y puede extenderla.
Cómo se reduce el trabajo computacional
La optimización tiene dos frentes: reducir el coste del plan importado y reducir el trabajo necesario para construirlo. Una tabla perceptual ahorra CPU durante el análisis, pero no reduce por sí misma la cantidad de objetos. Una fusión geométrica puede reducir objetos y necesitar más cálculo inicial.
| Mecanismo | Trabajo que evita | Límite o condición |
|---|---|---|
| Tabla sRGB de 256 valores | Repetir exponenciación por cada canal de cada conversión. | Describe exactamente los 256 valores de entrada de 8 bits. |
| Lookup de paleta de 32768 entradas | Comparar cada muestra fuente con todos los colores de la paleta. | Cuantiza la consulta RGB a cinco bits por canal. |
| Sumas por fila | Volver a contar celdas pendientes dentro de cada tramo. | Se reconstruyen cuando cambian las celdas pendientes. |
| Transformaciones precalculadas | Repetir trigonometría en cada consulta de cobertura. | Cada figura conserva seno, coseno y extensiones. |
| Regiones locales y sectores | Comparar cada fragmento con todo el dibujo. | La vecindad, el grupo y las pasadas están acotados. |
| Paralelismo por tareas | Procesar serialmente colores, buckets o resoluciones independientes. | Se limita por tareas y CPU; no se anidan equipos completos de workers. |
| Previsualización limitada | Rasterizar y publicar cada cambio pequeño de progreso. | Escala dos y un intervalo mínimo de 250 ms con try-lock. |
Complejidad orientativa
Con S muestras analizadas, K colores y Bₕ bins, la asignación directa tiene coste del orden de S·K. Preparar una tabla de Bₕ entradas y consultar después cuesta aproximadamente Bₕ·K + S. La tabla es especialmente útil cuando muchas muestras comparten la misma paleta. Estos órdenes omiten constantes, construcción de histogramas y accesos a memoria.
Un rasterizador que pregunta por todas las figuras en cada muestra puede acercarse a O(P·M), con P muestras y M figuras. Acotar cajas y tramos reduce consultas efectivas. El muestreo a escala s multiplica las muestras potenciales por s²; de ahí la necesidad de aplicar las verificaciones finas a regiones pertinentes.
La geometría completa no tiene un único coste lineal garantizado. Componentes, simplificación, candidatos, fusiones y reparación aportan costes diferentes. La simplificación recursiva puede tener un caso desfavorable cuadrático en la longitud de un camino; el coste real depende del contorno y de los límites locales de búsqueda.
Workers y publicación de progreso
El límite de workers usa la concurrencia de hardware o un límite configurado. Si hay más de dos hilos disponibles, reserva uno para el juego; con uno o dos mantiene esa capacidad. Una región paralela marca el hilo para que una llamada interna no lance otro equipo completo. Esto evita multiplicar trabajadores en búsquedas anidadas.
El progreso de Render se suma bajo mutex y no retrocede al terminar pasadas en distinto orden. La previsualización usa un try-lock y puede omitir una publicación si otra ya está en curso. Son decisiones para mantener la interfaz y el trabajo coordinados, no garantías de ausencia de pausas en cualquier equipo.
Como modelo general del beneficio del paralelismo, la ley de Amdahl recuerda que la parte serial limita la aceleración. Esta ecuación es una explicación de rendimiento, no una estimación medida del mod: la preparación GL y la creación final de objetos no se paralelizan como la geometría.
De las primitivas al editor de GD
Una vez elegido el plan, el emisor busca canales de color y grupos libres, mide las dimensiones de las figuras disponibles y construye el payload de objetos del editor. El plan geométrico usa celdas con y creciendo hacia abajo; GD necesita la inversión vertical y el desplazamiento hacia el origen de importación.
Sea p el tamaño de celda en unidades de GD y (oₓ,oᵧ) el origen. Para una figura sin offset de stamp, la revisión actual introduce además un medio paso de celda en la traslación. Las expresiones siguientes reproducen la convención concreta del emisor; no deben sustituirse por una fórmula de centro genérica.
Las dimensiones b𝑤 y bₕ son las del objeto base, que se miden en el editor. Los stamps incluyen offsets porque la pintura puede ocupar solo una parte de la caja de su textura. El emisor traslada la figura para que el área pintada, no solo el frame vacío, coincida con el plan.
GD escala antes de rotar. Con una orientación de 90° los ejes intercambian su papel: la anchura final procede de la altura del arte. La ruta de stamps corrige las escalas; los triángulos normales también requieren una corrección de orientación. Los índices de color se convierten en canales concretos y cada track recibe el grupo apropiado.
| Recurso de la revisión | ID de referencia | Uso |
|---|---|---|
| Objeto sólido | 211 | Bloques y rectángulos de trazo. |
| Círculo | 3637 | Círculos y elipses escaladas. |
| Triángulos | 693 / 694 | Triángulo normal y ancho. |
| Alpha / Spawn / Move | 1007 / 1268 / 901 | Visibilidad, avance y traslación. |
| Gradient | 2903 | Wash opcional de VertX; las rampas de Vert se eligen como stamps. |
Los canales de color se asignan en el rango 1–999 y los grupos se buscan entre identificadores libres hasta 9999. Para estados y movimientos animados hacen falta grupos adicionales a los eventos. Antes de aplicar el plan se comprueba que el editor siga disponible y que la sesión permita modificar los recursos requeridos.
El trabajo en segundo plano prepara estado de C++ y lo entrega al hilo principal. La inserción asíncrona procesa el payload en lotes de 16 segmentos; la creación de objetos no se hace desde los workers. El emisor comprueba que la cantidad de objetos del payload coincida con el plan. Si GD no crea toda la importación, la ruta correspondiente evita dejarla aplicada como un resultado completo y libera los recursos de paleta que procedan.
Qué significa el porcentaje de similitud
El conversor rasteriza el plan para revisarlo. En la métrica de Pintura se comparan muestras donde la referencia o el resultado sean visibles. Si ambos son transparentes, la muestra se omite; si solo uno es visible, la contribución es cero. Cuando ambos tienen color, se calcula una distancia RGB normalizada por la diagonal máxima del cubo de 8 bits.
El mínimo entre fotogramas impide que una pose mala quede completamente escondida por muchas poses fáciles. Si un frame no aporta muestras comparables, no reduce el mínimo inicial. La revisión de geometría compara contra la cuadrícula limpia; la revisión general puede comparar contra la fuente reducida; la de detalle usa una referencia a escala dos cuando está disponible.
La distancia de esta métrica es RGB, no Oklab. Oklab se usa para escoger colores de paleta. Tampoco se trata de SSIM, una métrica aprendida o una medida de calidad semántica. Un porcentaje alto puede coexistir con un detalle pequeño mal dibujado, porque ese detalle ocupa pocas muestras.
La ruta regular usa un umbral de revisión geométrica de 95 para las geometrías que se revisan como pintura exacta. El primer intento que ya cabe puede aceptar 90 en la condición prevista por el código. Render usa un objetivo de calidad 97 para sus preferencias. Esos valores controlan decisiones internas; no significan que el dibujo sea «95 % idéntico» para cualquier observador.
Un protocolo de evaluación útil
Una comparación reproducible debería separar al menos cuatro pérdidas: reducción de resolución, reducción de colores, limpieza de cuadrícula y geometría. Después debería medir los objetos visuales, triggers y grupos, el tiempo de construcción, memoria y comportamiento real en el editor y al reproducir el nivel.
| Medida | Qué revela | Qué no demuestra por sí sola |
|---|---|---|
| Similitud geométrica | Fidelidad a la cuadrícula limpia. | Conservación de todos los colores y detalles originales. |
| Similitud a la fuente | Error del render contra la referencia reducida. | Ausencia de artefactos de textura o de orden de sprites en GD. |
| Conteo total | Tamaño del plan importado. | Tiempo por frame idéntico entre modos o equipos. |
| Triggers y grupos | Complejidad de reproducción y recursos requeridos. | Disponibilidad en un nivel ya cargado. |
| Tiempo y memoria medidos | Coste observado en un entorno concreto. | Rendimiento universal en otras plataformas. |
Los tests de este paper ejecutan el pipeline original de Pintura en WebAssembly y miden la rasterización de sus planes sobre imágenes oficiales de Paimon. Sus imágenes no son capturas de GD y los tiempos no incluyen la importación ni la reproducción dentro del juego.
Benchmark: Paimon frente a Geometrize2GD
Geometrize2GD recibe un JSON producido por Geometrize y lo transforma en objetos del editor. Su guía restringe las formas a círculos, elipses y elipses rotadas. Por eso la referencia de este laboratorio es el motor original Geometrize Haxe con esos tres tipos, no un algoritmo que solo imita su aspecto. Se usa una copia fijada del JavaScript publicado en el repositorio del autor, con su licencia MIT y hash de integridad.
El método de Paimbnails ejecuta el pipeline C++ original en modo Pintura, compilado a WebAssembly. Se llama a buildPlan con ImportMode::Paint, incluyendo reducción, paleta, limpieza, vectorización, reparación, selección y revisión del presupuesto. La rasterización usa renderPlanFrame. Ambos motores corren en un Web Worker de un solo hilo. Esta comparación mide las implementaciones del navegador y no la ejecución del mod dentro de GD.
Las fuentes del ensayo

Archivo oficial original · 568 × 712

Archivo oficial original · 639 × 293
Imágenes de la página oficial de Genshin Impact de HoYoverse / miHoYo. Paimon y Genshin Impact © HoYoverse / miHoYo. Se conservan los PNG originales, su transparencia y su proporción. Procedencia, revisiones y hashes SHA-256.
Protocolo común y diferencias entre métodos
Cada PNG se centra completo, sin recortar, en una referencia de 96 × 96 píxeles. El alfa se compone sobre el fondo RGB (6,14,15), igual que el fondo del paper. El escalado usa Canvas 2D con suavizado alto y se realiza una sola vez: ambos métodos reciben exactamente el mismo buffer RGBA. El informe publicado conserva también ese PNG normalizado y el SHA-256 de sus bytes RGBA. Esta composición sirve para comparar dibujos opacos; no mide la preservación de transparencia.
Un RMSE o ΔOklab menor indica menos error; un PSNR mayor indica menos error. Se compara todo el lienzo, incluido el fondo, de modo que el espacio vacío también influye. ΔOklab es una distancia media en las coordenadas del paper, sin multiplicarla por 100; no es ΔE2000 ni una puntuación semántica. Las tres métricas se calculan sobre la referencia común y el bitmap final, después de detener el reloj.
| Condición | Paimbnails · Pintura C++ / WASM | Geometrize / flujo Geometrize2GD |
|---|---|---|
| Entrada y fondo | El mismo RGBA 96 × 96 opaco. | El mismo RGBA 96 × 96 opaco. |
| Presupuesto máximo | 128, 256 o 512 objetos del plan; se muestran el conteo y la resolución efectivos. | 128, 256 o 512 figuras totales: una base de color medio y B−1 formas. |
| Búsqueda | Pintura; dimensión inicial 96, hasta 24 colores, muestreo Smooth y fondo Keep. El pipeline ajusta resolución y revisa calidad; Auto, glow, dithering, bucle y movimiento desactivados. | 50 candidatos por paso y parámetro de 100 mutaciones por búsqueda. Círculos, elipses y elipses rotadas; alfa 255. |
| Aleatoriedad | Determinista para el buffer recibido. | PRNG Mulberry32; semillas 1337, 7331 y 2026. |
| Medición | Copia RGBA al motor, buildPlan completo, rasterización, adaptación al lienzo común y extracción del resultado. | Preparación del bitmap, color base, búsqueda, composición y extracción RGBA. |
| Repeticiones | Una pasada de calentamiento y tres pasadas registradas. | Una pasada de calentamiento y tres pasadas registradas; se alterna el orden de los métodos. |
| Fuera del reloj | Descarga, decodificación, normalización común, métricas y actualización de interfaz. | Las mismas exclusiones; no incluye importación del JSON dentro de GD. |
La base de Geometrize cuenta como una figura para impedir que el fondo sea gratuito al comparar presupuestos. Esa convención describe este ensayo y no es un conteo final del importador. Los parámetros internos de candidatos y mutaciones controlan trabajo distinto de «objetos»: más búsqueda puede mejorar una figura sin aumentar el número final. Pintura puede usar menos objetos que el límite tras la búsqueda de resolución y la revisión de calidad. Su conteo corresponde al plan construido; esta prueba no llama al emisor del editor.
Misma Paimon, mismo límite de objetos
La tabla y las imágenes cargan resultados medidos y guardados. Ejecuta tres pasadas en tu equipo para obtener tus propios tiempos. El trabajo corre en un Web Worker y se puede cancelar.
Medición del laboratorio web · 96 × 96 · misma referencia para ambos métodos
| Método | Objetos | Resolución interna | Tiempo mediano | RMSE ↓ | PSNR ↑ | ΔOklab ↓ |
|---|---|---|---|---|---|---|
| Cargando resultados medidos… | ||||||
Informe publicado completo · Tabla CSV · Código del ensayo · Licencia de Geometrize
La reconstrucción de Pintura usa el rasterizador original a una escala entera entre 1 y 8 muestras por celda y se adapta bilinealmente al lienzo común de 96 × 96, componiendo cualquier hueco sobre el fondo. La carga y compilación inicial del módulo WebAssembly están fuera del reloj. El informe registra el hash del módulo, el puente y los archivos C++ de la revisión fijada. Puedes consultar el puente C++, el adaptador del motor y el protocolo completo del laboratorio.
Cómo interpretar los resultados
El gráfico muestra el RMSE mediano para los tres presupuestos sobre la fuente seleccionada. La tabla informa por separado la mediana de cada métrica y la del tiempo: no necesariamente pertenecen a la misma pasada. Las reconstrucciones muestran la primera semilla registrada, 1337, para que la imagen no cambie al escoger una estadística. El JSON conserva las tres pasadas, los tiempos mínimo y máximo y las revisiones de las fuentes.
Una paleta compacta favorece regiones con colores repetidos, mientras que la búsqueda geométrica puede describir curvas con figuras superpuestas. El ruido, los contornos pequeños, los gradientes y la cantidad de fondo cambian el resultado. El tiempo depende del navegador, la compilación de WebAssembly, el JIT de JavaScript, la CPU y la carga de trabajo; no equivale al coste de dibujar el nivel, ni a FPS, memoria o duración de una conversión nativa.
Un presupuesto menor no garantiza una conversión más rápida en Pintura: si un plan excede el límite, buildRegularPlan vuelve a construirlo con otra resolución, hasta un máximo de 20 intentos. La revisión de calidad también puede probar una variante sin compactación opcional. Esas reconstrucciones forman parte del tiempo registrado; una conversión que cabe antes puede terminar más rápido aunque conserve más objetos.
Para comparar el coste dentro del juego habría que importar ambos resultados en GD y medir emisión, canales, orden de sprites y reproducción bajo las mismas condiciones. Este ensayo ya ejecuta el código real del pipeline de Pintura, pero mide su compilación WebAssembly y la reconstrucción matemática del plan; no mide el editor ni los FPS del juego.
Parámetros, pseudocódigo y límites
Para reproducir una conversión conviene guardar fuente, dimensión, colores, umbral alfa, modo, política de fondo, muestreo, presupuesto, opciones de animación y recursos del juego. Los defaults de la estructura de opciones no tienen por qué coincidir con una sesión de interfaz que conserva ajustes del usuario.
| Parámetro | Default en Options | Normalización o condición |
|---|---|---|
| Dimensión / mínima | 320 / 6 | Manual entre 4 y 320; Auto de Paint tiene una ruta posterior hasta 680. |
| Colores | 24 | Máximo solicitado entre 1 y 64; paleta efectiva puede ser menor. |
| Frames | 90 | Límite solicitado entre 1 y 120. |
| Presupuesto | 12000 | Entre 100 y 50000; incluye triggers. |
| Umbral alfa | 96 | Entre 1 y 254. |
| Tolerancia de fondo | 28 | Entre 0 y 120; distancia RGB cuadrática con factor tres. |
| Tamaño de celda GD | 6 | Entre 1 y 30 unidades. |
| Modo / muestreo | Blocks / Smooth | Las reglas de normalización restringen dithering y muestreo según modo. |
| Bucle / movimiento | Activados | Se evalúan según frames y ahorro efectivo. |
| Auto / glow / dithering | Desactivados | Auto se aplica a Paint; glow adicional se aplica después del plan base. |
- Validar la fuente y normalizar opciones.
- Preparar escalado, filtro y máscaras requeridas.
- Seleccionar frames y conservar sus retrasos acumulados.
- Para cada dimensión candidata: calcular máscara de fondo, paleta y cuadrículas.
- Limpiar componentes y producir geometría con el modo elegido.
- Comparar estrategias de reutilización temporal y contar objetos, triggers y grupos.
- Rasterizar el plan, revisar calidad y conservar una alternativa sin compactación si mejora.
- Elegir un plan válido o ajustar dimensión y frames en la ruta regular.
- Probar reutilización por movimiento y añadir glow si hay presupuesto.
- Reservar canales y grupos; emitir el payload y comprobar el conteo.
Las principales limitaciones son estructurales. Reducir una fotografía a pocos colores puede perder gradientes; un patrón de ruido puede tener pocas oportunidades de fusión; un trazo extremadamente fino puede desaparecer al muestrear; un glow depende del fondo; una forma que parece equivalente en la vista previa puede dibujarse de otro modo con las texturas o capas del juego.
La resolución, los colores y el tamaño de celda afectan propiedades diferentes. Subir colores puede recuperar variaciones y aumentar fragmentación. Subir resolución puede mejorar contornos y aumentar objetos de manera no monótona. Cambiar el tamaño de celda en GD amplía o reduce el dibujo físico sin recuperar muestras que ya se perdieron.
Para medir una mejora futura habría que fijar un conjunto de fuentes, comparar la misma revisión y opciones, registrar conteos finales después de reparación y glow, y repetir en los dispositivos objetivo. Las visualizaciones de este documento ayudan a entender las reglas; la validación dentro del juego sigue siendo una etapa distinta.
Notación y glosario
| Símbolo o término | Significado |
|---|---|
| Iₜ / Qₜ | Fuente RGBA / cuadrícula de índices de color en el frame t. |
| Wₛ, Hₛ / W, H | Dimensiones de la fuente / dimensiones de la cuadrícula. |
| D / p | Lado más largo en celdas / tamaño de celda en unidades de GD. |
| K / P | Número efectivo de colores / paleta compartida. |
| α / τₐ | Opacidad de la muestra / umbral de visibilidad. |
| B / N | Presupuesto máximo de objetos / total del plan. |
| ℛ | Rasterización de primitivas, colores y estados temporales. |
| Stamp | Figura del catálogo acompañada de máscara, dimensiones, orientación y offsets. |
| Track de visibilidad | Geometría compartida y máscara que indica en qué frames se muestra. |
| Track de movimiento | Silueta compartida, máscara de visibilidad y posiciones por frame. |
| Derrame / spill | Cobertura que sale de una región permitida en la comprobación correspondiente. |
| Costura | Hueco o borde de unión producido al reconstruir con primitivas distintas. |
| Clamp / argmax | Limitar a un intervalo / índice que obtiene el mayor valor. |
| ≪, ≫ / 1[condición] | Desplazamientos binarios / indicador que vale uno si se cumple la condición. |
Fuentes y referencia de esta edición
Las reglas específicas del conversor se vinculan al código de la revisión estudiada. Las referencias externas aportan el fundamento de color y los conceptos generales de composición y trazado; no validan los resultados ni el rendimiento de Paimbnails.
- Paimbnails · GifImportPipeline.cppPreparación, paleta, cuantización, estrategias temporales, conteos, revisión y búsqueda.
- Paimbnails · GifPaintVectorizer.cppContornos, campos locales, rellenos, fusiones, cobertura y reparación.
- Paimbnails · GifVectorMath.cppDistancias, simplificación, componentes y esqueletización.
- Paimbnails · GifObjectEmitter.cppTransformación a GD, recursos libres, payload y creación de objetos.
- Björn Ottosson · A perceptual color space for image processingDefinición de Oklab y transformaciones entre RGB lineal y Oklab.
- W3C · SVG 2, Painting: Stroke ShapeConceptos de formas de trazo, remates y uniones.
- W3C · Compositing and Blending Level 1Marco de composición alfa y mezcla.
Citar este documento
Referencia técnica del proyecto, sin atribuir revisión académica ni resultados experimentales no medidos.