- Rive publicó como open source su Rive Renderer, lo que permite usar una única base de renderizado en todas las plataformas, adaptada al contenido, las animaciones y los runtimes de Rive
- El objetivo del renderizador es mantener animaciones a 120fps y una alta calidad de antialiasing incluso al dibujar muchos gráficos vectoriales y texto nítido
- Antes dependía de varios renderizadores, como Skia y la API de HTML Canvas, por lo que si una función no existía en un backend era difícil lanzarla en todas las plataformas
- Gracias a un renderizador único, se pueden agregar de forma más consistente en varios runtimes efectos como blur, drop shadow, glow y tapered stroke
- La implementación reduce rutas vectoriales con antialiasing a parches triangulares y aprovecha el pipeline paralelo de rasterización de triángulos de la GPU; puede activarse en iOS, Android y Web, y ya está integrado en los runtimes de Unity y Unreal
Lanzamiento de Rive Renderer y contexto de su desarrollo
- Rive Renderer es un renderizador creado por Rive para su contenido, animaciones y runtimes
- Apunta a ofrecer animaciones de 120fps y una calidad de antialiasing limpia incluso en situaciones donde se dibujan muchos gráficos vectoriales y texto en pantalla
- Su desarrollo interno tomó 2 años, y ahora Rive puede controlar de forma más directa toda la experiencia, desde el momento en que los diseñadores crean algo en Rive Editor hasta cuando los usuarios lo ven e interactúan con ello en el runtime
- Se optimizó para generar intencionalmente contenido que funcione rápido en el runtime, de modo que los diseñadores puedan concentrarse más en crear y menos en cómo implementar el rendimiento
Límites de una arquitectura con varios renderizadores y efecto de un renderizador único
- En sus inicios, Rive usaba soluciones de renderizado open source ya existentes, como Skia y la API de HTML Canvas
- La arquitectura bring-your-own-renderer, que permite a los usuarios conectar fácilmente el renderizador que prefieran, se seguirá soportando
- Pero sin un renderizador propio consistente y optimizado, la hoja de ruta del producto y el desarrollo de nuevas funciones inevitablemente quedaban atados a las restricciones de cada plataforma
- En una estructura con varios renderizadores, si una función faltaba en uno de ellos, no podía funcionar en todos los backends donde corre Rive, por lo que era difícil lanzar esa función
- Entre los efectos que se vuelven más fáciles de añadir con un renderizador único están blurs, drop shadows, glows y tapered strokes
Forma de implementación y soporte de plataformas
- Rive Renderer se basa en un enfoque geométrico que reduce rutas vectoriales con antialiasing a parches triangulares únicos
- Aprovecha el pipeline masivamente paralelo de rasterización de triángulos presente de forma nativa en las GPU de escritorio y móviles
- Usa hardware 3D para dibujar curvas Bézier mediante un método específico de triangulación
- Seguirá siendo posible usar renderizadores de terceros, pero para las funciones propias de Rive y la experiencia general se recomienda usar Rive Renderer
- En iOS, Android y Web se puede activar Rive Renderer siguiendo la guía oficial
- El código está publicado en GitHub; ya está integrado en los runtimes de Unity y Unreal, y hay más integraciones previstas
1 comentarios
Opiniones en Hacker News
Acabo de estar en el stand de GDC y, como programa para permitir que los diseñadores de UI/UX hagan más cosas directamente en los juegos, se veía realmente bueno.
Normalmente, un diseñador trabaja varios días en Figma y luego se lo pasa a un programador, quien responde que no se puede implementar por tal o cual razón, y así empieza un ida y vuelta.
Esto se agrava porque Unreal Engine carece de un buen framework de UI adecuado para juegos AAA, pero el flujo de trabajo de esta herramienta es el mejor que he visto hasta ahora y parece integrarse de forma natural con Unreal Engine y Blueprints.
Personalmente, me entusiasma porque parece que los diseñadores de UI/UX podrán trabajar sin ayuda de programadores. Además, en general a los programadores de juegos no les gusta trabajar en UI.
Parece que esto se puede explicar por la diferencia de mentalidad entre sentarse a trabajar y sentarse a jugar.
Fue casi la primera vez que me sentí como un viejo gritando que la versión moderna es pésima.
Hay mucha investigación activa sobre renderizar gráficos vectoriales 2D mediante teselación en GPU, y es bastante genial ver que una tecnología en la línea del trabajo de Raph Levien llegue a un producto real.
Nunca he usado Rive, así que me pregunto si sirve solo para crear animaciones vistosas o si también permite hacer UI dinámicas como las que uno construiría con una biblioteca GUI de modo inmediato.
https://rive.app/game-ui
https://rive.app/blog/how-age-of-learning-uses-rive-to-a-b-t...
He creado UIs bastante complejas con Rive, pero todavía no he explorado mucho la parte de agregar elementos de forma programática según eventos externos o cambiar textos de la UI.
Me parece que este experimento ya se hizo con Flash. Macromedia/Adobe liberaba el reproductor gratis y cobraba por las herramientas, y Rive parece querer publicar el reproductor como open source y cobrar por el editor.
Rive es un poco distinto porque parece apuntar a desarrolladores de juegos que usan otras plataformas como Unity o Unreal, por ejemplo quienes quieren embeber cosas como cinemáticas.
Aun así, que exista un reproductor open source sugiere que Rive quiere controlar toda la experiencia, lo que me recuerda a Flash.
Lo he estado esperando desde que lo anunciaron. Antes usaban Skia, y toda la app y la salida de renderizado estaban hechas con Flutter. Ahora Flutter tiene un nuevo motor de renderizado, Impeller, más optimizado que Skia para problemas específicos de Flutter.
Cuando antes le pregunté al equipo de Impeller cómo veían el renderer de Rive, dijeron que es excelente para gráficos vectoriales, pero que Impeller también debe lidiar con problemas de renderizado relacionados con UI, como mostrar texto correctamente, así que no son una comparación uno a uno.
Ahora que este renderer es open source, espero que ambos equipos puedan aprender el uno del otro.
Me gustan el producto y la empresa Rive, y también me gusta el open source, pero esto es publicar bajo licencia MIT una capa de abstracción de renderizado que forma parte del runtime de Rive, para el cual hay que crear contenido con Rive Editor.
Me pregunto cuál es el objetivo de abrirlo como open source y qué comunidad más grande quieren construir alrededor.
También me pregunto si se les ocurre algún otro proyecto que pudiera beneficiarse de adoptar solo el renderer.
A mí personalmente también me interesa. Actualmente uso canvasAPI y pixi, y a menudo me topo con los límites del dibujo 2D dentro de un presupuesto de 16 ms por frame.
[0] https://github.com/rive-app/rive-renderer
Se ve tan genial que me dan ganas de usarlo en un proyecto personal de hobby
Parece que ofrece una API Cairo/Skia/canvas/NanoVG más o menos estandarizada, con cosas como moveTo y lineTo, así que espero que no requiera demasiado esfuerzo aprenderla
Al menos aquí se ve lineTo: https://github.com/rive-app/rive-renderer/blob/main/renderer...
Me da curiosidad cómo se compara este rendimiento de renderizado con Skia o Pathfinder. Pathfinder, si el hardware lo soporta, también puede procesar en cómputo GPU la etapa de convertir rutas en triángulos
Como enfoque más integral de renderizado 2D basado en cómputo, también está Vello
Mi impresión inicial es que el rendimiento dependerá mucho del hardware, en particular del soporte de pixel local storage. Por lo que he visto hasta ahora, Apple Silicon es el punto ideal. El hardware soporta binning y ordenamiento por tiles, y funciona bien incluso serializando la ejecución del fragment shader dentro de un tile
En otro hardware, esperaría que el costo de serializar esas llamadas sea mucho mayor
Una de las razones por las que en Vello todavía no hemos hecho benchmarks profundos es que la historia de rendimiento aún no está completa. Actualmente hay un problema al recolectar bounding boxes con operaciones atómicas de dispositivo, y una implementación prototipo[2] que usa monoides para la reducción de segmentos muestra resultados bastante mejorados
Además, tenemos planeado usar operaciones f16, lo que podría dar grandes beneficios, especialmente en móviles. Para varias etapas de sumas acumuladas planeamos usar subgrupos, y los subgrupos están entrando en WebGPU[3]
En general, me alegra que este renderer se haya publicado como open source, y también me alegra ver más actividad en renderizado rápido de gráficos vectoriales en GPU. Me gustaría ver algún día un futuro en el que el renderizado de rutas en CPU se considere anticuado, y esta publicación nos acerca más en esa dirección
[1]: https://dawn.googlesource.com/dawn/+/refs/heads/main/docs/da...
[2]: https://github.com/linebender/vello/issues/259
[3]: https://github.com/gpuweb/gpuweb/issues/4306
Parecen decisiones técnicas sólidas, elegidas por gente que sabe lo que hace, y sin duda vale la pena comprobar directamente su rendimiento y calidad
Estos renderers con enfoque GPU-first tienen abordajes ligeramente distintos, y es muy probable que cada uno tenga áreas donde sea el mejor dentro de un espacio multidimensional de calidad, rendimiento, soporte de hardware/drivers y dificultad de integración. Si uno de los cuatro no te convence, vale la pena revisar los demás
Personalmente, me alegra muchísimo
Durante unos 6 meses estuve impulsando la adopción de Rive en lugar de Lottie y soluciones anteriores con varios clientes, desde empresas de salud con apps móviles nativas hasta empresas y productos muy metidos en juegos. Ahora por fin creo que está encaminado y en estado de “listo para adoptar”
En esas conversaciones, lo último que quedaba como posible preocupación era que el renderer más reciente estaba cerrado y todavía no tenía su forma final
Con esta decisión y el trabajo general del equipo de Rive, espero que este espacio de problemas siga mejorando. Funciones como sombras y blur también serán muy interesantes cuando se lancen
Lottie ya se está consolidando bastante como formato de archivo, tiene flujos de trabajo bien establecidos y es relativamente simple
Me da curiosidad qué hace Rive mucho mejor como para justificar impulsarlo con tanta fuerza
Repositorio: https://github.com/rive-app/rive-renderer
Relacionado: https://news.ycombinator.com/item?id=39754770 (Build System Schism: The Curse of Meta Build Systems)
Este problema parece seguir generando software que intenta resolverlo, sin que exista una solución definitiva.
La razón por la que resulta un poco extraño es que, si se tienen una función de muestreo de píxeles y una métrica de espacio de color, existe un renderizado objetivamente correcto para cualquier escena de gráficos vectoriales. Cada valor de píxel de salida debería ser el color representable más cercano a la convolución de esa función con la escena, y la escena puede representarse como una función de R^2 a R, mientras que el color puede expresarse en un sistema de color lineal.
Parece alcanzable si se manejan bien el cómputo en GPU y los límites de error al calcular numéricamente la teselación de curvas o la integración simbólica exacta de curvas.
Además, una solución así también parece fácil de adaptar para ajustar el nivel de aproximación y lograr un renderizado más rápido.
Si solo tuviéramos una computadora paralela decente, no sería tan difícil, pero en la práctica hay que adaptar la lógica de renderizado a combinaciones específicas de montones de hacks que soporta la infraestructura GPU, y cada una tiene restricciones y compromisos muy particulares.
Creo que te va a gustar un próximo paper sobre expansión de trazos amigable con GPU. El punto central es precisamente tratar la integración simbólica exacta de cierta métrica de curvatura de una curva mediante métodos numéricos con límites de error.
Si tienes curiosidad, ya puedes verlo en el código shader/flatten.wgsl de la rama main de Vello.