[HN Gopher] Bevy 0.9: data oriented game engine built in Rust
       ___________________________________________________________________
        
       Bevy 0.9: data oriented game engine built in Rust
        
       Author : _cart
       Score  : 118 points
       Date   : 2022-11-12 21:28 UTC (1 hours ago)
        
 (HTM) web link (bevyengine.org)
 (TXT) w3m dump (bevyengine.org)
        
       | brink wrote:
       | Pardon my lack of technical terms, but when I worked with Bevy in
       | 0.7, applying a part of a texture to a surface was really
       | difficult. (It wants to apply the entire texture, and stretch it
       | to fit.)
       | 
       | Has this improved?
        
       | [deleted]
        
       | _cart wrote:
       | Creator and lead developer of Bevy here. Feel free to ask me
       | anything!
        
         | aquariusDue wrote:
         | Hi, sorry if this question might not be appropriate but I was
         | wondering what are the main differences between Godot's way of
         | doing things and Bevy's.
         | 
         | Also more importantly thank you for the work you've done on
         | Bevy! For someone like me picking up Rust recently it's great
         | knowing I can even develop games in it without going into the
         | nitty-gritty part of game dev.
        
           | _cart wrote:
           | I've summarized a lot of my thoughts in this blog post:
           | https://bevyengine.org/news/bevys-first-birthday/#things-
           | i-m...
           | 
           | But in short (slight copy-paste of my generic Bevy pitch):
           | 
           | The Developer's Engine: most engines are built using multiple
           | languages, with significant abstraction between "user code"
           | and "engine code". Bevy is built with a consistent stack and
           | data model (see the blog post I linked to for details). If
           | you "go to definition" on a Bevy app symbol in your IDE, the
           | underlying engine code will look the same as your app code.
           | You can also swap out basically everything. We have a vibrant
           | plugin ecosystem (https://bevyengine.org/assets) as a result.
           | These blurred lines also make it _way_ easier for "Bevy app
           | developers" to make direct contributions to the engine. Bevy
           | App developers _are_ Bevy Engine developers, they just don't
           | know it yet. The new Bevy renderer (in 0.6) was also built
           | with this principle in mind. It exposes low, mid, and high
           | level renderer apis in a way that makes it easy to "insert
           | yourself" into the engine.
           | 
           | Fully embraces ECS: No popular engines are currently all-in
           | on ECS (either they have no official support ... or they are
           | half-in half-out). I reflect on some of the benefits we've
           | enjoyed thanks to Bevy ECS in the blog post I linked to. Note
           | that there is _a lot_ of pro _and_ anti ECS hype. Don't just
           | blindly follow dogma and hype trains. ECS isn't one thing and
           | Bevy ECS intentionally blurs the lines between paradigms.
           | 
           | We can't currently compete with the "big engines" on
           | features, but we are adding features at a rapid (and growing)
           | pace. Bevy was released about a year and a half ago. Most
           | popular engines have been in development for almost 20 years
           | (Godot since 2007, Unity since 2005, Unreal since 1998), so
           | we have plenty of "time" from my perspective.
           | 
           | I'm a huge fan of Godot and used it to build my game High Hat
           | over the course of about 4 years. I also contributed to it
           | every once and awhile. When I was initially building Bevy,
           | Godot's design decisions were always at the top of my mind
           | (and they still are to this day). I love they way they do
           | scenes (and our system draws inspiration from it). We also
           | plan on borrowing their "dogfooding" approach to editor
           | building (the Bevy Editor will be a normal Bevy App).
        
         | Waterluvian wrote:
         | I know of a few ROS (Robot Operating System) community members
         | that use Bevy to simulate hundreds to thousands of mobile
         | robots in various commercial and industrial contexts, finding
         | it operates drastically better than Gazebo Sim
         | 
         | Does your team exclusively focus on game dev? How aware are you
         | of non-gaming applications where Bevy works great?
        
           | alice-i-cecile wrote:
           | Another maintainer: very aware of it, Foresight Mining
           | Software Company is a major force in the ecosystem and makes
           | CAD tools! We try to be responsive to the needs of those
           | communities (robotics, CAD, GIS, scientific simulation...),
           | but focus on tackling the needs of game development first.
           | 
           | Definitely naturally synergy here though, and the flexible
           | model makes it very easy for different groups of users to
           | pick and choose what they care about.
        
         | mwcampbell wrote:
         | How far along is the Bevy UI toolkit? From what I've heard, it
         | seems fairly common to use an external GUI toolkit like egui in
         | Bevy projects. Is anyone using Bevy UI in production yet?
        
           | alice-i-cecile wrote:
           | Totally fine for simple game menus, but heavy on boilerplate.
           | 
           | It needs more widgets, the data flow needs some love, and
           | text rendering is so-so. We're steadily improving it though,
           | and every release it really does get better.
        
         | DDSDev wrote:
         | What are your feelings on the direction of game engines across
         | the industry right now?
         | 
         | What is an innovation you hope you see wider adoption of in the
         | space?
         | 
         | Thank you for your efforts!
        
         | SeanAnderson wrote:
         | Oh! I have so much to ask you but feel so ill prepared! I
         | literally have the Bevvy website open-and-pinned in my browser
         | at the moment.
         | 
         | I have never written in Rust or built a serious game, but have
         | 10+ years programming experience and have worked heavily in
         | frameworkless canvas/webgl rendering. I've become very used to
         | declarative programming after sinking my teeth into React. As I
         | start to learn more about game programming I've realized that
         | almost all engines expect an imperative approach.
         | 
         | Recently, started poking at game engines trying to find
         | something reasonable. I thought I'd start with PixiJS + react-
         | pixi (not a full engine, I know), but found my FPS getting
         | absolutely crushed trying to run a simulation game through
         | React's reconciler. Code was simple to reason about, though! I
         | started to feel like I was forcing a round peg through a square
         | hole by doubling-down on React frameworks to interface with
         | WebGL. So, I'm abandoning that approach and looking for other
         | options that don't push me towards a fully imperative approach.
         | 
         | Bevvy is, by an incredibly large margin, what I am most
         | interested in using. If there were even vague notions of having
         | a stable API in the next year I'd start building now, but I am
         | trying to be respectful of the message on your website, "If you
         | are currently trying to pick an engine for your Next Big
         | Project(tm), we recommend that you check out Godot Engine. "
         | 
         | Do you have any estimations on when you might reach 1.0? Do you
         | have guidance on which areas you feel are most stable and/or
         | experimental? If I'm a noob with game development am I likely
         | to challenge Bevvy in ways that I'd regret as the interface
         | changes or is it too early to tell?
         | 
         | What trade-offs are you making in building Bevvy that would
         | cause someone to choose Godot over your long-term vision?
         | 
         | Are there any concerns specific to Bevvy around compiling its
         | output to WASM? I assume not, but might as well ask.
        
           | alice-i-cecile wrote:
           | So, I'm currently part of a team making a Real Commercial
           | Video Game in Bevy. The stability issues aren't bad: it's
           | half a day of work fixing compiler errors every 3 months,
           | even on a massive project. The Rust compiler (and tests!)
           | make it way easier, and ecosystem crates are pretty good
           | about updating (and will often merge PRs to do so, even if
           | the author isn't super active).
           | 
           | I would expect 1.0 in two to three years, but of course,
           | that's not a promise.
           | 
           | Missing features are definitely the larger challenge still:
           | animation is crude, there's no editor yet (but
           | `bevy_inspector_egui` rocks), UI is very heavy on boilerplate
           | and needs widgets. But the ability to rapidly prototype and
           | refactor rock-solid, high performance gameplay code simply
           | can't be matched. Rust's type system makes writing robust
           | code easy and Bevy's ECS nearly eliminates data plumbing
           | nuisances.
           | 
           | > What trade-offs are you making in building Bevvy that would
           | cause someone to choose Godot over your long-term vision?
           | 
           | Even in the long-term, I would choose Godot if you're looking
           | for a more traditional, editor-driven approach. Bevy is
           | likely to prioritize code over nodes for gameplay purposes,
           | and you really want anyone implementing game designs to have
           | some Rust (it's not that bad when working in an established
           | framework!).
           | 
           | > Are there any concerns specific to Bevvy around compiling
           | its output to WASM? I assume not, but might as well ask.
           | 
           | Bevy generally works quite well on WASM [0], but there's some
           | frustrations. Audio has weirdness at startup, there are
           | random compiler issues, some graphics APIs are unavailable,
           | and of course, parallelism is still very limited. Steadily
           | improving, but most of that work is being done upstream from
           | us.
           | 
           | [0]: https://itch.io/jam/bevy-jam-2
        
             | SeanAnderson wrote:
             | Awesome! Thank you for the thoughtful response. It's really
             | encouraging to hear that a RCVG(tm) is building using Bevy
             | and happy with it! I'll start playing this weekend based on
             | that feedback.
             | 
             | I am not super interested in an editor-driven approach at
             | the moment, but perhaps I'll regret that as the project
             | grows in complexity.
             | 
             | Thanks for the specific remarks on WASM, Animation FX, etc.
             | I'll be happy with those problems if I can get my project
             | to the point of experiencing them.
             | 
             | Good luck on your project! Let me know when it's out and
             | I'll give it a spin :)
        
         | User23 wrote:
         | What does data oriented mean in this context? My gamedev
         | experience is limited to writing MUDs and roguelikes over two
         | decades ago so I have basically no context.
        
           | _cart wrote:
           | It is a pretty broad term, but it generally implies some
           | combination of cache-friendly design and composable
           | (sometimes component-driven) behaviors. ECS intersects with
           | it, but "data oriented" is a much broader category.
        
         | cowtools wrote:
        
           | _cart wrote:
           | Ooh this one is an easy question. No it doesn't.
        
         | prideout wrote:
         | The ECS looks really nice. Can it be used independently of the
         | rest of Bevy?
        
           | _cart wrote:
           | Yup! Bevy ECS is a fully standalone Rust ECS library.
        
             | prideout wrote:
             | How are entity id's managed? When an entity "dies", can its
             | id be re-used?
             | 
             | From a Rust-on-WASM perspective, it might be useful to
             | limit the entity id's to ~52 bits or less, since native
             | JavaScript numbers are doubles.
        
               | djmcnab wrote:
               | > From a Rust-on-WASM perspective, it might be useful to
               | limit the entity id's to ~52 bits or less, since native
               | JavaScript numbers are doubles.
               | 
               | Since compiling to web uses WebAssembly, we can just use
               | native 64 bit integers for our entities. In general, we
               | avoid introducing differences between web and native
               | targets, and this is no exception.
               | 
               | If you do need to round-trip full entities using
               | JavaScript, you should either store them in one of the
               | native non-broken integer types (such as `BigInt` or
               | `BigUint64Array`), or just store the `index` and
               | `generation` as seperate `number`s. It's worth
               | recognising that in most cases, you should only need to
               | exchange the entity `id` with different systems, as the
               | `generation` is mainly used to panic on use-after-free
               | conditions.
        
               | ickk wrote:
               | Entity is essentially a u64, which is composed of a 32
               | bit index and a 32 bit generation. Despawned entities
               | free their index, and which ever new Entity takes its
               | place gets a new generation.
        
       | pvg wrote:
       | Discussed recently 4, 7 and 10 months ago
       | 
       | https://news.ycombinator.com/item?id=32287828 18 comments
       | 
       | https://news.ycombinator.com/item?id=31043668 63 comments
       | 
       | https://news.ycombinator.com/item?id=29854416 89 comments
        
         | Narishma wrote:
         | Those are different releases.
        
           | password4321 wrote:
           | Per dang@https://news.ycombinator.com/item?id=23071428 [2020]
        
           | pvg wrote:
           | Yes but for the most part, releases (within a year or so) are
           | HN dupes short of big doses of snee. Otherwise the front page
           | would look like the freshmeat.net of yore.
        
           | [deleted]
        
       ___________________________________________________________________
       (page generated 2022-11-12 23:00 UTC)