Bevy 0.12 - Rust ile geliştirilen veri odaklı oyun motoru
(bevyengine.org)- Renderer artık isteğe bağlı Deferred Rendering desteği sunuyor; materyal bazında forward veya deferred yolu seçilebiliyor ve
DefaultOpaqueRendererMethodile küresel varsayılan ayarlanabiliyor - Mevcut Bevy uygulamaları veya eklentileri için migration sürecinin 0.11 to 0.12 Migration Guide üzerinden kontrol edilmesi gerekiyor
- Bevy Asset V2, varlık ön işleme,
.metadosyası tabanlı yapılandırma, birden fazlaAssetSource, özyineli bağımlılık yükleme olayları, eşzamansız varlık I/O'su ve geliştirilmiş handle desteği sunuyor - Varlık ön işleme,
AssetPlugin { mode: AssetMode::Processed }vebevy/asset_processorCargo özelliğiyle etkinleştiriliyor; ancak şu anda çoğu kullanım senaryosu için henüz önerilmiyor - Android'de uygulama askıya alındığında artık çökme yaşanmıyor, yeniden devam edene kadar sistem çalışması durduruluyor ve
ApplicationLifetime::SuspendedileApplicationLifetime::Resumedolayları sağlanıyor - StandardMaterial'a
specular_transmission,diffuse_transmission,thickness,ior,attenuation_color,attenuation_distanceeklendi; böylece cam, su, plastik, yaprak ve kağıt gibi geçirgen materyaller destekleniyor - glTF yükleyicisi
KHR_materials_transmission,KHR_materials_ior,KHR_materials_volume,KHR_materials_emissive_strengthuzantılarını destekliyor veTEXCOORD1veyaUV1ikinci UV haritasını içe aktarabiliyor - Draw command için otomatik batching/instancing artık mümkün; aynı materyal ve mesh'e sahip entity'ler şu anda gruplanabiliyor ve
NoAutomaticBatchingbileşeniyle hariç tutulabiliyor - Gölgeler, PCF Shadow Filtering ile
DirectionalLightveSpotLightüzerinde daha yumuşak gölgeleri destekliyor; varsayılan yöntemShadowMapFilter::Castano13 - ECS'ye one-shot systems eklendi; sistemler kaydedildikten sonra gerektiğinde
SystemIdile çalıştırılabiliyor, ancak exclusive system, system piping için sistemler, kendini çağırma ve paralel değerlendirme desteklenmiyor FixedTimekaldırıldı veTime,FixedUpdateiçinde de bağlama uygun değerler döndürüyor; ayrıcaFixedUpdate'in aşırı birikip uygulamayı durdurduğu “death spiral” durumu engelleniyorAnimationPlayeriçindeset_elapsed,seek_toile;stop_repeatingiseset_repeat(RepeatAnimation::Never)ile değiştiriliyor veelapsed, animasyon hızından etkilenmeyen gerçek geçen süreyi döndürüyor- Bevy shader import yapısı Rust tarzı sözdizimine geçirildi;
#import bevy_pbr::forward_io::VertexOutput, süslü parantezli çoklu import, kısmi yol import'u ve tam nitelikli yol kullanımı destekleniyor - UI tarafında
UiMaterialile özel material shader'ları UI düğümlerinde kullanılabiliyor veOutlinebileşeniyle yerleşim alanı kaplamayan düğüm kenarlıkları destekleniyor - Erişilebilirlik entegrasyonuna
ManageAccessibilityUpdateskaynağı eklendi; değerifalseolduğunda motorun erişilebilirlik ağacını otomatik güncellemesi durdurulabiliyor
1 yorum
Hacker News yorumları
Bevy, Unity veya Godot gibi geleneksel motorlarla karşılaştırıldığında oyun yapma biçimi tamamen farklı
UI ya da script desteği olmadan her şeyi Rust koduyla hallediyor; bu açıdan libGDX veya Cocos2D-x’e daha yakın. Ancak ECS ve Rust kullandığı için kodlama tarzı yine ciddi biçimde değişiyor; bu yüzden adeta kendi adasında duran bir yapı gibi hissettiriyor
Bevy ile başarılı olmuş bağımsız oyunlar görmek isterdim, ancak çoğu oyun geliştiricisi muhtemelen zaten öğrendiği ve çevresinde de kullanılan geleneksel araçları tercih edecektir. Oyun yapmak isteyip aynı zamanda Rust’ı da tercih eden insanların kesişimi çok büyük değil; bu grubun içinde bile deneysel yeni bir motoru öğrenmek için ciddi zaman ve emek harcamak yerine, güven oluşturmuş ve bol kaynağa sahip araçları seçenler daha fazla olacaktır
Bana göre Bevy’nin, Bevy ve Rust tabanlı bir IDE ve script diline ihtiyacı var. Bu, yeni bir projeye başlamak için gereken büyük emek eşiğini ortadan kaldırmaz ama Rust deneyimi olmayan ve işe bir kod duvarıyla başlamaktan çekinen yeni kullanıcılar için çok daha tanıdık hale getirebilir. Bu, Unity veya Godot’ta olduğu gibi birkaç saat içinde bir tuval üzerinde çok temel bir prototip oluşturabilme yaklaşımıyla karşıtlık oluşturuyor
Geliştiricinin script diline karşı olduğunu biliyorum ama hot reload ve daha derin hata ayıklama gerekli; bunları yalnızca Rust ile etkili biçimde yapmak zor gibi geliyor. Birçok oyun geliştiricisi Rust ve borrow checker karşısında bunalmış hissedebilir. Yine de şu anda bunu bizzat hayata geçirmek için zaman, kaynak ve istek yok
Bevy ile biraz uğraştım ve depoyu kontrol ettiğimde hiç lifetime belirtimi görmedim
Script dili biraz yardımcı olabilir ama şu anda Bevy kullanan kişiler oldukça teknik bir profile sahip ve çoğu zaman tam zamanlı tasarımcı da değiller; bu yüzden çok acil bir ihtiyaç gibi görünmüyor
Rust topluluğunun oyun geliştirme üzerindeki etkisini görmek istiyorum ve bir gün katkı sunmayı da isterim; ancak şu an, belirtilen nedenlerden dolayı C++/C# pipeline’ımı korumayı düşünüyorum. Rust’ı bu arada düzgünce öğrenip, araçlar olgunlaştığında sonraki projelerde değerlendirebilirim
Hot reload çoğu zaman derleme süreleri taşınamayacak hale geldiğinde başvurulan geçici bir çözüm oluyor. Ortalama 4 saniye, tam yeniden derleme de yaklaşık 20 saniyeyse, tam derlemeden kaçınma yollarına çok fazla kaynak ayırma ihtiyacı azalıyor
Yine de Rust’ta genel olarak derleme sürelerinin daha uzun olduğunu duydum; bu yüzden script desteği veya hot reload ihtiyacı beklenenden daha erken ortaya çıkabilir. Buna rağmen şu anda geliştirilen bağımsız projelerin çoğu muhtemelen henüz bu eşiğe gelmemiştir
Bevy’nin kurucusu Cart, Bevy’nin Rust öncelikli olması gerektiğini düşünüyor; ben de kişisel olarak buna katılıyorum. Bu, çeşitli script dilleri için eklentiler yapılamayacağı anlamına gelmiyor; nitekim halihazırda birkaç tane var
Bevy’nin kurucusu ve proje lideriyim. Her şeyi sorabilirsiniz
Bevy ve topluluğu harika. Bazı ticket’lar üzerinde çalışılması gerekiyordu; çekirdek katkıcılarından birini bulup destekleyerek talebi sonuna kadar ilerletmek son derece kolay oldu. Örneğin morph target böyleydi
Carter gerçekten önemli bir şey inşa ediyor ve bunun arkasında müthiş bir ivme var. Bevy’nin web’e dağıtımı çok kolay; daha fazla insanın göz atması gereken bir proje. Topluluk da iyi ve yardım istemek kolay
Dokümantasyon ne zaman iyileşecek? Sürüm notlarına bakınca ideal olarak her özellik için birkaç sayfalık belge olsa iyi olurdu. Yapılacak işin çok olduğunu anlıyorum; kapsamlı dokümantasyon ancak genel istikrar sağlandıktan sonra mümkün olabilir
Bevy ne kadar güçlü görüşlere sahip bir motor? Özellikler ile geliştirici erişilebilirliği arasında ödün vermek zorunda kaldığınız oldu mu merak ediyorum
Şu anda Bevy için en ideal proje türü hangisi olurdu?
Birkaç script eklentisi var ve şu anda odak daha çok rhai üzerinde gibi görünüyor ama uygun Bevy desteği eksik olduğu için tıkanmış hissi veriyor
Bevy’nin mevcut odağı yalnızca Rust ile yazılan oyunlar olsun ya da olmasın, script ihtiyacı var ve insanlar şimdiden üçüncü taraf çözümler bulmakla uğraşıyor. Yakında resmi Bevy script desteği beklemiyorum ama en azından üçüncü taraf crate’lerin çalışabilmesi için gereken temelin Bevy tarafından benimsenmesi gerektiğini düşünüyorum
Yazıda deferred renderingin MSAA desteklemediği söyleniyor ama bu yalnızca saf bir uygulama için doğru
Örneğin bir pre-pass içinde karmaşık piksellerin stencil maskesini oluşturup, hiyerarşik erken stencil reddi kullanarak karmaşık piksellerde örnek başına pass, diğer piksellerde ise piksel başına pass çalıştırabilirsiniz. SIMD lane kullanımı kusursuz olmaz
Ayrıca karmaşık piksel maskesini işleyen bir pass koyup
(x, y, sample)koordinat tamponunu toplarsanız, sonrasında tek bir hibrit piksel başına/örnek başına compute shader pass içinde mükemmel SIMD lane kullanımı da mümkün olurBir süredir Bevy ile oyun yapıyorum. Koda da bakabilirsiniz, soru da sorabilirsiniz
https://ant.care/
https://github.com/MeoMix/symbiants
Şimdiye kadarki en büyük sıkıntı, UI sisteminin widget’ları rahatça üretmek için fazla ayrıntılı olmasıydı; bu yüzden egui’ye geçtim ama 1 yıl içinde yeniden yerel Bevy’ye döneceğimi düşünüyorum. egui’nin de ciddi kısıtları var
Ebeveyn/çocuk ilişkisi desteği çok güçlü değil ve ECS’nin yapısı da bunu bir ölçüde pek teşvik etmiyor. Bir sprite’a etiket eklemek ve sprite’ı hareket ettirip döndürürken etiketin sadece konumu takip etmesini, dönüşü takip etmemesini sağlamak beklediğimden daha zordu
Oturumlar arasında entity kalıcılığı varsayılan olarak desteklenmiyor. Entity, istemci tarafı benzersizliği için var ve kaydedilmiş ebeveyn/çocuk ilişkilerini kolayca yeniden oluşturmak da otomatik olmuyor
Henüz WASM paralelliği desteği yok ama Bevy mimarisi, görev paralelleştirmesiyle performans kazanımı sağlamak için sistem sıralamasını esnek bırakmaya yönelik birçok tasarıma sahip
Mekânsal sorgular, ECS hedefleriyle çelişiyor gibi hissettiriyor. Türe göre, yani entity’nin Position’a sahip olup olmadığına göre aramak yerine Position değerine göre aramak istediğiniz anda, sorgu motoruyla senkron tutulması gereken çok sayıda yardımcı önbellek ortaya çıkıyor
commandsile world’ü değiştirdiğinizde, performans için toplu işlensin diye bu işlem erteleniyor; ama çok fazla gecikmeli davranış olunca world’ü aktif biçimde değiştiren sistemler kurmak zorlaşıyor. Bu yüzden sık sıkapply_deferredçağırıyor ve yarış durumlarını çözmek için özel komutlar kullanıyorsunuzAndroid’de WASM, özellikle Pixel 6 ve Chrome kombinasyonunda şu anda çalışmıyor; ama bu alt bağımlılıklarla ilgili bir sorun ve Bevy 13’te düzeltilmesi planlanıyor
Artı tarafı ise, Rust motoru + Rust oyun kombinasyonuyla çalışmanın çok keyifli olması ve Rust+WASM tarafında da teknolojinin pek ayak bağı olmaması. Kafanız ECS gibi düşünmeye başlayınca geri dönmek zorlaşıyor ve sistem çok esnek geliyor. Hatta belki fazla esnek
Topluluk çok canlı; bu yüzden sorunları konuşacak insan bulmak kolay. Dokümantasyon çok fazla değil ama örnek çok. Geleceğe dair iyimserlik yüksek, geliştirme hızı hızlı ve her sürüm büyük endişeleri ciddi ölçüde ileri taşıyor
Sürüm notları harika
Deneyimli oyun/motor geliştiricileri için bazı kısımlar fazla başlangıç seviyesi gelebilir ama o dünyanın sürekli içinde olmayan biri olarak, değişiklik açıklamalarıyla konu anlatımı arasındaki dengeyi çok iyi buldum
Rust ile yazılmış 5 oyun ama 50 oyun motoru olduğu şakasını görmüştüm
Gerçekte Bevy ile yazılmış oyunların bir listesi var mı?
Tiny Glade (https://pouncelight.games/tiny-glade) çok popüler ve sosyal medyada da sıkça görünüyor. Bevy ECS / Bevy App ve özel bir renderer kullanıyor. https://store.steampowered.com/app/2198150/Tiny_Glade/
tunnet (https://puzzled-squid.itch.io/tunnet), Noumenal (https://noumenal.app/), Foresight Mining (https://www.foresightmining.com/) de var. Foresight Mining bir madencilik “CAD” yazılımı ve birden fazla Bevy geliştiricisi çalıştırıyor
Axie Infinity: Homeland (https://app.axieinfinity.com/games/homeland-alpha/) Bevy ECS ve Unity kullanıyor. Shifting Chamber (https://maciekglowka.itch.io/shifting-chamber), Hytopia (https://hytopia.com/) da var
Titleless Comfy City Builder (https://twitter.com/i_am_feenster/status/1710714877231186323), Molecoole (https://store.steampowered.com/app/1792170/Molecoole/), Titleless industrial revolution builder (https://twitter.com/ElmoSampedro/status/1684920884811698176) da var
Jarl Game (https://twitter.com/jarl_game) harika dinamik aydınlatmaya sahip, Dwarf Fortress benzeri bir oyun
itch.io’daki “bevy” etiketinde yüzlerce oyun var: https://itch.io/games/tag-bevy
Bevy Discord’daki #showcase kanalında da çok hareket var
Tüm framework’ler, mevcut bir şeyi daha basit, daha temiz ve daha hızlı uygulama iddiasıyla başlıyor, ama gösterişli özellikler eksik oluyor
Sonra özellik açısından yetişmeye çalışırken aynı derecede karmaşık bir canavara dönüşüyorlar ve bu döngü tekrarlanıyor
Sonuç, “özellik ekleyen her kolay yazılım mahvolmaya mahkûmdur” gibi geliyor; biraz dramatik
Bevy’nin mimarisi veya özellik ekleme biçimi hakkında daha somut düşünceler ya da kaygılar olup olmadığını merak ediyorum. Bu kaderden kaçınmak için ellerinden geleni yapıyorlar
Tiny Glade,
bevy_ecskullanıyor ama Bevy’nin rendering crate’lerini hiç kullanmıyor. Benim de alternatif rendering yolları, örneğin ray tracing ya da GPU güdümlü meshlet+visibility buffer rendering uygulamak için üzerinde çalıştığım birkaç PR var ve Bevy’nin içi neredeyse hiç değişmiyorKullanıcı açısından da pek bir şey değişmiyor. Uygulamaya
FeatureFooPluginekleyipFooComponentgibi şeyleri kullanıyorsunuz ve çalışıyorTek tek crate’ler veya plugin’ler şişebilir, ama Bevy’nin bütünü iyi durumda kalacaktır. Kullanıcılar bu tür plugin’leri görmezden gelip kendilerine daha uygun başka bir şey kullanabilir
Ayrıca bu bir oyun motoru. Tanımı gereği hantal ve karmaşık bir canavar; herhangi bir oyunda işe yarayabileceği için her türlü özelliği içine çekecektir. Asıl mesele, özellik şişmesinin kullanılabilirliği nasıl etkilediğidir. 1000 özellik olsa bile çoğuyla etkileşime girmeniz gerekmiyorsa bunda hiçbir sorun yok
Geriye dönük uyumluluğu dert etmek zorunda olmayan yeni projeler için bunun daha kolay olduğu doğru. Bevy’de gördüğüm kadarıyla, kullanıcıya iyi bir deneyim sunmayı isteme ve API yüzeyini azaltma kültürü güçlü. Rust paketleme sistemi sayesinde de olabilir ama bu uğurda geçmişle kopuş konusunda oldukça aktif olmalarını olumlu buluyorum
cargo’nun güzel yanı şu: Bevy’ye bağımlı olmaya karar verseniz bile, gelecekteki sürümler bozucu değişiklikler getirse de hareketli bir hedefin peşinden koşmanız gerekmiyor. Sadece kendi sürümünüzde kalabilirsiniz. Yine de en güncel sürüme geçişi kolaylaştıracak rehberler de sunuyorlar. En azından Bevy’yle biraz uğraşmış biri olarak benim deneyimim buydu0.10’dan 0.11’e geçerken uygulamada epey değişiklik yapmak gerekmişti, ama bu kez doğrudan derlendi
Bevy, özellikle büyük projeler için sevdiğim oyun motorlarından biri. Asset V2 ön işleme ve
.metadosyaları çok kullanışlı görünüyorGelecek sürümlerdeki lightmap desteğini de merakla bekliyorum
Web örneklerine bakarken UI bölümünü gördüm; her şey sanki canvas içinde işleniyor gibi
UI’yi onun yerine DOM olarak oluşturup WASM’e bağlamak mümkün mü?
Rust, yani WASM tarafında
web_sysgibi yöntemler var; JavaScript tarafında da WASM fonksiyonlarını çağırma yöntemleri bulunuyor, yani seçenek çok