Puntos Clave
Renderizado es el proceso de convertir datos (vértices, texturas, shaders) en una imagen en la pantalla. En dispositivos móviles, el renderizado puede realizarse en la CPU (procesador central) o en la GPU (procesador gráfico). La elección depende del tipo de gráficos y el rendimiento requerido.
CPU Rendering — procesamiento secuencial. Cada instrucción se ejecuta una tras otra. La CPU está optimizada para lógica y branching. Canvas (Android), Core Graphics (iOS) funcionan en la CPU. Ventaja: precisión, soporte para algoritmos complejos. Desventaja: lento con una gran cantidad de elementos gráficos. GPU Rendering — procesamiento paralelo. Miles de núcleos de GPU procesan vértices y píxeles simultáneamente. Metal (iOS), Vulkan (Android), OpenGL ES (ambas plataformas) usan la GPU. GPU Rendering es obligatorio para 3D, animaciones a 60 FPS y efectos complejos. Los frameworks UI modernos (SwiftUI, Jetpack Compose, Flutter) usan GPU por defecto.
Shaders son programas ejecutados en la GPU. Determinan cómo se ve cada objeto en la pantalla. El pipeline gráfico consta de varias etapas, pero dos shaders principales — Vertex Shader y Fragment Shader — se usan en el 99% de los casos. Los shaders se escriben en GLSL (OpenGL), MSL (Metal) o HLSL (DirectX).
Vertex Shader — procesa vértices de un modelo 3D. Entrada: posición del vértice, normal, coordenadas UV. Salida: posición transformada (modelo → vista → proyección). Vertex Shader no puede crear ni eliminar vértices — solo transformarlos. Fragment Shader — calcula el color de cada píxel (fragmento) en un triángulo rasterizado. Entrada: datos interpolados del Vertex Shader (UV, normales). Salida: color RGBA. Fragment Shader es responsable de texturizado, iluminación (Phong, PBR) y post-efectos. Los motores modernos (Unity, Unreal) generan shaders automáticamente, pero entender el pipeline es necesario para la optimización.
Offscreen Rendering — renderizado no en la pantalla sino en un búfer temporal. Usado para: 1) efectos (blur, shadow), 2) render to texture, 3) pre-cálculo de fotogramas. Offscreen Rendering es costoso: cambio de contexto y un pase de renderizado adicional. iOS activa automáticamente Offscreen Rendering para sombras y cornerRadius. Rasterización — conversión de datos vectoriales (vértices + shaders) en píxeles. El Rasterizador determina qué fragmentos pertenecen a un triángulo e invoca el Fragment Shader. Compositing — ensamblaje de capas en la imagen final. Core Animation compone CALayers, Android compone capas de SurfaceFlinger.
| Parámetro | CPU Rendering | GPU Rendering |
|---|---|---|
| Arquitectura | Secuencial (pocos núcleos) | Paralela (cientos-miles de núcleos) |
| Velocidad | Lenta para gráficos | Rápida para operaciones masivas |
| Herramientas | Canvas, Core Graphics (Quartz 2D) | Metal, OpenGL ES, Vulkan |
| Aplicación | Gráficos 2D simples, texto, UI | 3D, animaciones, juegos, efectos complejos |
| Consumo | Menos energía | Más energía, pero más rápido |
| Overdraw | Alto costo | Menor costo (pero aún dañino) |
CPU — para lógica y Canvas. GPU — para gráficos y animaciones. IT Sectr recomienda usar GPU rendering para cualquier contenido en movimiento (animaciones, transiciones, scroll) — esto asegura 60 FPS estables.
Core Animation — el framework de Apple para renderizado animado acelerado por GPU. El elemento básico es CALayer: un área rectangular con contenido (imagen, color, texto). CALayer gestiona: posición, tamaño, color de fondo, borde, sombra, cornerRadius y transformaciones (2D y 3D). Core Animation compone automáticamente las capas en la GPU — el desarrollador no necesita escribir código gráfico.
CALayer — un objeto ligero (no una vista) que contiene un bitmap de contenido. UIButton, UILabel, UIImageView — todos usan CALayer internamente. Propiedades: frame, bounds, position, anchorPoint, transform, opacity, masksToBounds. La animación de propiedades de CALayer ocurre en la GPU — esta es la principal ventaja de Core Animation. CALayer.shouldRasterize — activa la rasterización de la capa para almacenar en caché gráficos complejos. CAShapeLayer — una subclase para gráficos vectoriales: dibuja un path en la GPU. Usado para barras de progreso, gráficos, máscaras y animación de formas. CAShapeLayer.path — una propiedad animable (animación de morphing de formas).
Compositing en Core Animation — el proceso de ensamblaje de CALayers en el fotograma final. Cada CALayer es una textura separada en la GPU. El compositing ocurre en el Render Server (un proceso separado). Propiedades que requieren compositing: opacity, shadow, cornerRadius + masksToBounds, shouldRasterize. Cuantas menos capas — más rápido el compositing.
Overdraw — una situación donde el mismo píxel se pinta varias veces en un fotograma. Ejemplo: fondo rojo → rectángulo azul → texto. El píxel central se dibuja 3 veces. Overdraw es la principal causa de lag en la UI, especialmente en dispositivos antiguos. iOS: Debug Color Blended Layers (Xcode) — áreas rojas = blended (overdraw). Android: Debug GPU Overdraw (Opciones de Desarrollador) — colores de azul (1x) a rojo (3x+).
Cómo reducir Overdraw: 1) use opaque = true para vistas no transparentes (iOS). 2) Android — use android:windowBackground solo una vez. 3) Elimine capas invisibles. 4) Use una arquitectura en capas: fondo (1 pase) → contenido (2 pases). 5) Evite clipChildren y clipToPadding innecesariamente. Offscreen Rendering — renderizado en un búfer antes de la pantalla. Disparadores: shadow (CALayer.shadow*), cornerRadius + masksToBounds, group opacity, shouldRasterize. Xcode: Debug Offscreen Renderer — áreas amarillas = offscreen. En Android: profile GPU rendering — verifique la longitud de las barras.
Gráficos Vectoriales — imágenes descritas por fórmulas matemáticas (trazos, curvas, rellenos). Los vectores no pierden calidad al escalarse — ideal para iconos e ilustraciones en aplicaciones móviles.
SVG (Scalable Vector Graphics) — estándar W3C. No es compatible directamente en SO móviles. Se convierte: en iOS — a PDF vector assets (Xcode 12+), en Android — a Vector Drawable XML. Vector Drawable — formato de Android. Definido en XML: <vector> con <path> y <group>. Soporta animación mediante AnimatedVectorDrawable. PDF Vector Assets (iOS) — PDFs vectoriales en Assets.xcassets. Xcode los compila en texturas optimizadas para GPU. SVG y Vector Drawable no soportan efectos complejos (blur, gradient mesh). Para fotos y gradientes, use PNG/WebP rasterizados.
Preguntas Frecuentes
CPU rendering — dibujo secuencial en el procesador central. Adecuado para gráficos 2D simples y Canvas. GPU rendering usa la arquitectura paralela del procesador gráfico para el procesamiento masivo de vértices y píxeles.
Overdraw — dibujar un píxel varias veces por fotograma. Herramientas: Debug GPU Overdraw (Android), Color Blended Layers (iOS). Normal: azul (1x) y verde (2x). Rojo (3x+) — problema.
CALayer — la clase base de Core Animation. CAShapeLayer — una subclase para gráficos vectoriales en la GPU. Ambos son gestionados por Core Animation y compuestos en el Render Server.
Vertex Shader — un programa en la GPU para procesar vértices. Fragment Shader — un programa en la GPU para calcular colores de píxeles. Juntos implementan el pipeline gráfico.
SVG — estándar W3C, no compatible directamente. En iOS — PDF vector assets. En Android — Vector Drawable XML. IT Sectr recomienda PDF para iOS y Vector Drawable XML para Android.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.