- Rive, kendi geliştirdiği Rive Renderer'ı açık kaynak olarak yayımlayarak, Rive içeriği·animasyonları·runtime'ları için uyarlanmış tek bir render temelinin tüm platformlarda kullanılmasını sağladı
- Renderer'ın hedefi, çok sayıda vektör grafik ve net metin çizerken bile 120fps animasyonu ve yüksek anti-aliasing kalitesini korumak
- Daha önce Skia ve HTML Canvas API gibi birden fazla renderer'a bağımlıydı; bu yüzden bir backend'de olmayan özellikleri tüm platformlara sunmak zordu
- Tek bir renderer sayesinde blur, drop shadow, glow, tapered stroke gibi efektler birden fazla runtime'a daha tutarlı biçimde eklenebiliyor
- Uygulama, anti-aliased vektör yolları triangle patch'lere indirip GPU'nun paralel üçgen rasterizasyon pipeline'ından yararlanıyor; iOS·Android·Web'de etkinleştirilebiliyor ve Unity·Unreal runtime'larına zaten entegre edilmiş durumda
Rive Renderer'ın duyurulması ve geliştirilme arka planı
- Rive Renderer, Rive içeriği, animasyonları ve runtime'ları için şirket içinde geliştirilen bir renderer'dır
- Ekranda çok sayıda vektör grafik ve metin çizilen durumlarda bile 120fps animasyon ve temiz anti-aliasing kalitesini hedefler
- Şirket içi geliştirme 2 yıl sürdü ve bu sayede, tasarımcının Rive Editor'da üretim yaptığı andan kullanıcının runtime'da görüp etkileşime geçtiği ana kadar tüm deneyim daha doğrudan kontrol edilebiliyor
- Runtime'da hızlı çalışacak içeriklerin bilinçli olarak üretilmesine yönelik optimizasyonlar sayesinde, tasarımcılar performansın nasıl gerçekleştirileceğini daha az düşünerek üretime odaklanabiliyor
Çoklu renderer mimarisinin sınırları ve tek renderer'ın etkisi
- İlk dönemde Rive, Skia ve HTML Canvas API gibi mevcut açık kaynak render çözümlerini kullanıyordu
- Kullanıcının istediği renderer'ı kolayca bağlayabildiği bring-your-own-renderer yapısı desteklenmeye devam ediyor
- Ancak tutarlı ve optimize edilmiş bir şirket içi renderer olmadan, ürün yol haritası ve yeni özellik geliştirme süreci platform bazlı kısıtlara bağlı kalıyordu
- Birden fazla renderer kullanan yapıda, belirli bir özellik bir renderer'da yoksa Rive'ın çalıştığı tüm backend'lerde de çalışmadığından, o özelliği yayımlamak zorlaşıyordu
- Tek bir renderer ile eklenmesi kolaylaşan efektler arasında blurs, drop shadows, glows, tapered strokes yer alıyor
Uygulama yöntemi ve platform desteği
- Rive Renderer, anti-aliased vektör yolları özgün triangle patch'lere indirgeyen geometrik bir yaklaşıma dayanıyor
- Masaüstü ve mobil GPU'larda yerleşik olan büyük ölçekli paralel üçgen rasterizasyon pipeline'ından yararlanıyor
- Belirli bir triangulation yöntemiyle 3D donanım kullanarak Bézier eğrileri çiziyor
- Üçüncü taraf renderer kullanımı mümkün olmaya devam etse de, Rive'a özgü özellikler ve genel deneyim için Rive Renderer kullanımı öneriliyor
- iOS, Android ve Web'de resmi kılavuzu izleyerek Rive Renderer etkinleştirilebiliyor
- Kodlar GitHub üzerinde yayımlandı; Unity ve Unreal runtime'larına entegre edilmiş durumda ve ek entegrasyonlar da planlanıyor
1 yorum
Hacker News yorumları
Az önce GDC standındaydım; UI/UX tasarımcılarının oyunlarda daha fazla işi doğrudan kendilerinin yapmasını sağlayan bir program olarak gerçekten iyi görünüyordu.
Genelde tasarımcı Figma’da birkaç gün çalışıp programcıya devreder; programcı da çeşitli nedenlerle bunun uygulanamayacağını söyler ve gidip gelmeler sürer.
Unreal Engine’de AAA oyunlara uygun iyi bir UI framework’ünün eksik olması bunu daha da kötüleştiriyor; bu aracın iş akışı şimdiye kadar gördüklerimin en iyisi ve Unreal Engine ile Blueprints’e doğal biçimde bağlanıyor gibi görünüyor.
Kişisel olarak, UI/UX tasarımcılarının programcı yardımı olmadan çalışabilmesini sağlayacak gibi göründüğü için beklentim yüksek. Oyun programcıları da genel olarak UI işleri yapmaktan hoşlanmaz.
Bunun, çalışmak için oturduğunuz andaki zihniyet ile oyun oynamak için oturduğunuz andaki zihniyet farkıyla açıklanabileceğini düşünüyorum.
Modern sürümlerin berbat olduğunu bağıran yaşlı biri gibi hissettiğim neredeyse ilk andı.
GPU tesselation ile 2D vektör grafikleri render etme üzerine araştırmalar oldukça aktif; Raph Levien’in çalışmaları gibi bir çizgideki teknolojiyi gerçek bir ürün olarak sunmaları epey güzel.
Rive’ı hiç kullanmadım; bu yüzden yalnızca havalı animasyonlar üretmeye mi yönelik, yoksa immediate mode GUI kütüphanesiyle yapılabilecek türden dinamik UI’lar da oluşturulabiliyor mu merak ediyorum.
https://rive.app/game-ui
https://rive.app/blog/how-age-of-learning-uses-rive-to-a-b-t...
Rive ile oldukça karmaşık UI’lar yaptım, ancak harici olaylara göre öğeleri programatik olarak ekleme ya da UI metnini değiştirme alanını henüz keşfetmedim.
Bu deneyi zaten Flash ile yapmadık mı diye düşünüyorum. Macromedia/Adobe oynatıcıyı ücretsiz dağıtıp araçlardan ücret alıyordu; Rive da oynatıcıyı açık kaynak yayımlayıp editörden ücret almak istiyor gibi görünüyor.
Rive biraz farklı; Unity veya Unreal gibi başka platformları kullanan, örneğin sinematik gibi şeyleri gömmek isteyen oyun geliştiricilerini hedefliyor gibi.
Yine de açık kaynak bir oynatıcının olması, Rive’ın tüm deneyimi kontrol etmek istediği anlamına geliyor; bu da Flash’ı akla getiriyor.
Duyurulduğundan beri bekliyordum. Önceden Skia kullanıyordu ve tüm uygulama ile render çıktısı Flutter ile yapılmıştı. Artık Flutter’da, Skia’ya kıyasla Flutter’a özgü sorunlara daha iyi optimize edilmiş yeni render motoru Impeller var.
Bir zamanlar Impeller ekibine Rive renderer’ı nasıl gördüklerini sorduğumda, vektör grafikler için mükemmel olduğunu ama Impeller’ın metni düzgün görüntüleme gibi UI ile ilgili render sorunlarını da ele alması gerektiğini, bu yüzden bire bir karşılaştırma konusu olmadığını söylemişlerdi.
Bu renderer açık kaynak olduğuna göre iki ekibin birbirinden öğrenebilmesini umuyorum.
Rive ürününü ve şirketini de seviyorum, açık kaynağı da seviyorum; ancak bu, içeriklerin Rive Editor ile oluşturulmasını gerektiren Rive runtime’ının bir parçası olan render soyutlama katmanının MIT lisansıyla yayımlanması.
Açık kaynak yapmanın hedefini ve bunun etrafında nasıl daha büyük bir topluluk kurmak istediklerini merak ediyorum.
Sadece renderer’ı benimseyerek fayda görebilecek başka projeler aklınıza geliyor mu, onu da merak ediyorum.
Benim de ilgimi çekiyor. Şu anda canvasAPI ve pixi kullanıyorum; 16 ms’lik kare bütçesi içinde 2D çizimin sınırlarına sık sık çarpıyorum.
[0] https://github.com/rive-app/rive-renderer
Kişisel hobi projemde denemek isteyeceğim kadar gerçekten harika görünüyor
moveTo, lineTo gibi bir ölçüde standartlaşmış bir Cairo/Skia/canvas/NanoVG API sunuluyor gibi; bu yüzden öğrenmek için çok büyük çaba gerektirmemesini umuyorum
En azından burada lineTo görünüyor: https://github.com/rive-app/rive-renderer/blob/main/renderer...
Bu render performansının Skia veya Pathfinder ile karşılaştırıldığında nasıl olduğunu merak ediyorum. Pathfinder, donanım destekliyorsa yolları üçgenlere dönüştürme adımını GPU compute ile de işleyebiliyor
Daha kapsamlı compute tabanlı 2D render yaklaşımı olarak Vello da var
İlk değerlendirmeme göre performans donanıma, özellikle de pixel local storage desteğine büyük ölçüde bağlı olacak gibi. Şimdiye kadar gördüğüm kadarıyla Apple Silicon ideal nokta. Tile bazlı binning ve sıralamayı donanım destekliyor; tile içinde fragment shader yürütmesini serileştirmek de iyi çalışıyor
Diğer donanımlarda bu tür çağrı serileştirme maliyetinin çok daha yüksek olmasını beklerim
Vello tarafında henüz derinlemesine benchmark yapmamış olmamızın nedenlerinden biri, performans hikâyesinin henüz tamamlanmamış olması. Şu anda cihaz atomik işlemleriyle bounding box toplama sorunu var; segment indirgeme için monoid kullanan prototip bir uygulama[2] ise epey daha iyi sonuçlar gösteriyor
Ek olarak f16 işlemlerini kullanmayı planlıyoruz; bu özellikle mobilde büyük kazanç sağlayabilir. Birkaç prefix sum adımında subgroup kullanmayı planlıyoruz; subgroup'lar WebGPU'ya eklenme sürecinde[3]
Genel olarak bu renderer'ın açık kaynak olarak yayımlanmasına seviniyorum; hızlı GPU vektör grafik render alanında hareketliliğin artması da güzel. Bir gün CPU yol render'ının çağın gerisinde kalmış sayıldığı bir geleceği görmek istiyorum; bu yayın da bizi o yöne biraz daha yaklaştırıyor
[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
Ne yaptığını bilen kişilerin seçtiği sağlam teknik tercihler gibi görünüyor; performansını ve kalitesini bizzat kontrol etmeye kesinlikle değer
Bu GPU öncelikli renderer'ların yaklaşımları biraz farklı; kalite, performans, donanım/sürücü desteği ve entegrasyon zorluğu gibi çok boyutlu bir alanda her birinin en iyi olduğu bölgeler olması muhtemel. Dördünden biri hoşunuza gitmezse diğerlerine de bakmaya değer
Kişisel olarak gerçekten sevindirici
Yaklaşık son 6 aydır, yerel mobil uygulaması olan sağlık şirketlerinden derin oyun şirketleri ve ürünlerine kadar çeşitli müşterilerde Lottie ve eski çözümler yerine Rive benimsenmesini destekliyordum. Artık sonunda rayına oturduğunu ve “uygulamaya hazır” durumda olduğunu düşünüyorum
Bu görüşmelerde potansiyel son endişe olarak kalan nokta, en yeni renderer'ın kapalı olması ve henüz nihai hâlinde olmamasıydı
Bu karar ve Rive ekibinin genel çalışmaları sayesinde bu problem alanının ilerlemeye devam edeceğini düşünüyor ve heyecan duyuyorum. Gölge, blur gibi özellikler de çıktığında çok ilginç olacak
Lottie bir dosya formatı olarak epey yerleşiyor, iş akışı da iyi oturmuş ve nispeten basit
Rive neyi çok daha iyi yapıyor da özellikle zorlamaya değiyor, merak ediyorum
Depo: https://github.com/rive-app/rive-renderer
İlgili: https://news.ycombinator.com/item?id=39754770 (Build System Schism: The Curse of Meta Build Systems)
Bu sorun, kesin bir çözümü olmadan, onu çözmeye çalışan yazılımlar üretmeye devam ettiriyor gibi görünüyor.
Biraz tuhaf olmasının nedeni şu: Piksel örnekleme fonksiyonu ve renk uzayı metriği verildiğinde, herhangi bir vektör grafik sahnesi için nesnel olarak doğru tek bir render vardır. Her çıkış piksel değeri, o fonksiyon ile sahnenin konvolüsyonuna en yakın temsil edilebilir renk olmalı; sahne R^2’den R’ye giden bir fonksiyon, renk de doğrusal bir renk sistemiyle temsil edilebilir.
GPU compute ile, eğri tessellation’ı ya da eğrilerin kesin sembolik integrasyonunu sayısal olarak hesaplarken hata sınırlarını iyi ele alarak bunun başarılabilir göründüğünü düşünüyorum.
Ayrıca böyle bir çözüm, daha hızlı render için yaklaşım seviyesini ayarlamayı da kolaylaştıracak gibi görünüyor.
Yalnızca makul bir paralel bilgisayarımız olsaydı o kadar zor olmazdı; ama pratikte render mantığını, GPU altyapısının desteklediği hack yığınının belirli kombinasyonlarına uyarlamak gerekiyor ve bunların her birinin çok kendine özgü kısıtları ve ödünleşimleri var.
Yakında çıkacak GPU dostu stroke genişletme makalesini seveceğinizi düşünüyorum. İşin özü, eğrinin belirli bir eğrilik metriği için kesin sembolik integrasyonu, hata sınırları olan sayısal bir yöntemle ele almak.
Merak ediyorsanız bunu şu anda Vello main’deki shader/flatten.wgsl kodunda görebilirsiniz.