[HN Gopher] Bevy game engine 0.6 ___________________________________________________________________ Bevy game engine 0.6 Author : VitalyAnkh Score : 262 points Date : 2022-01-08 18:15 UTC (4 hours ago) (HTM) web link (bevyengine.org) (TXT) w3m dump (bevyengine.org) | twofornone wrote: | Looks like a good reason to finally try out Rust. Does HN have | any recommended IDEs? | pjmlp wrote: | It pains to suggest it, but VSCode is one of the best | experiences. | | Don't forget to also add Microsoft's C/C++ tooling for the | debugging support. | petee wrote: | I'm just learning myself, and I found just Visual Studio Code | and the Rust extension are great on Windows | fsloth wrote: | Seconded! It all works incredibly well. Rust with Visual | Studio Code and the relevant suggested extensions (CodeLLDB, | rust-analyzer) must be least hostile expert system I've ever | used (and I've tried a few). | friedman23 wrote: | Make sure to use the Rust Analyzer extension, it's is | significantly better than the default Rust extension. | petee wrote: | I tried for a minute but it just wouldn't work out of the | box and I didn't have time to investigate, so I reenabled | the default for now. | | I thought I saw somewhere rust devs themselves recommending | Rust Analyzer too | djmcnab wrote: | You can either use rust-analyzer[1] (for which vscode is most | well supported), or IntelliJ Rust [2]. Personally, I use `rust- | analyzer` with vscode as a bevy developer. | | [1]: https://github.com/rust-analyzer/rust-analyzer | | [2]: https://www.jetbrains.com/rust/ | mahulst wrote: | I'm in favor of intelliJ or CLion but I hear good stuff about | rust analyzer and vacode as well. | lordnacho wrote: | Yep, and I've used bevy. Just get VSCode and the rust-analyzer. | It's remarkable how well it works together with the language. | There's also a thing that prints the errors and warnings in | line to make it stand out more, sometimes you'll miss a | squiggle. | | But also the suggestions are spot on quite often, eg finding | the right import that you can just click without scrolling up | to the top to insert, or adding/removing the & and * operators. | You'll almost never come across a situation where you think it | will compile but it doesn't. | nu11ptr wrote: | I _love_ the Rust plugin for Intellij. I have used VSCode a ton | as well, but never for Rust. In general, I think Intellij is | heads and shoulders above VSCode, but it is possible that 'rust | analyzer' makes all the difference (I might check it out | sometime). | pizza234 wrote: | I've tried Bevy v0.5 and it was very immature (as a matter of | fact, all the Bevy "games" are single-screen). By looking at | the release notes, it's not clear if it now supports OpenGL, | which means that on some setups, it's not even possible to run | correctly at all. | | It may be fun to write a hello world, but in this case, there | are much easier (and more stable) engines. | | A typical setup if VSCode + Rust Analyzer. RA wasn't very | stable around 6 months ago, but it was stable enough to be used | regularly. | justinhj wrote: | I use Neovim 0.6.0 with its built LSP with some plugins | including simrat39/rust-tools.nvim. It uses rust-analyzer. It | works extremely well but I don't use the debugger at all. I've | used IntelliJ with a Rust plugin, to and it has debugger | support of sorts, but the overall experience was sluggish and I | never went back. | dang wrote: | Some past related threads: | | _Bevy 's First Birthday: a year of open source Rust game engine | development_ - https://news.ycombinator.com/item?id=28132114 - | Aug 2021 (13 comments) | | _Bevy 0.5: data oriented game engine built in Rust_ - | https://news.ycombinator.com/item?id=26716166 - April 2021 (65 | comments) | | _Bevy: A game engine built in Rust_ - | https://news.ycombinator.com/item?id=26131350 - Feb 2021 (117 | comments) | | _Bevy 0.4: data oriented game engine built in Rust_ - | https://news.ycombinator.com/item?id=25480321 - Dec 2020 (23 | comments) | | _Making a Snake Clone with Bevy_ - | https://news.ycombinator.com/item?id=24999073 - Nov 2020 (11 | comments) | | _Bevy 0.3: game engine built in Rust_ - | https://news.ycombinator.com/item?id=24983956 - Nov 2020 (55 | comments) | | _Bevy 0.2_ - https://news.ycombinator.com/item?id=24530698 - | Sept 2020 (43 comments) | | _Bevy: A Game Engine in Rust_ - | https://news.ycombinator.com/item?id=24334307 - Aug 2020 (42 | comments) | | _Bevy: A data-driven game engine and app framework built in | Rust_ - https://news.ycombinator.com/item?id=24123283 - Aug 2020 | (103 comments) | terafo wrote: | With 3 month release cadence one question becomes more pressing: | will it be 1.0 or 0.10? | alice-i-cecile wrote: | 0.10! | [deleted] | rl3 wrote: | Congratulations to cart and the core Bevy contributors! This | release was a long time coming, and their efforts are greatly | appreciated. | | If you use this project and you can afford to donate, you | definitely should! | | Having paid close attention to the Bevy Discord this past year, | the sheer amount of work that's happened on this release is | _mind-boggling_. | jasonjmcghee wrote: | Curious if others are able to see the WebGL2 examples working on | iOS. They do not render for me, but WebGL2 definitely works in | general, at least on 15.1+ (as per other sites and my own dev | work) | chmod775 wrote: | It looks great in a lot of respects, but I can't help but notice | the aliasing. In the example scene at the top, when in motion, it | probably looks like there's a snow storm going on in the foliage | and on most of the wall/floor textures. | | To me good anti-aliasing strategies is the single most important | factor when it comes to graphics. I don't really care about | things looking realistic or whatever, but I do care about my | screen not being full of moving, weird, and distracting grainy | patterns. | | This involves more than just softening the edges around polygons. | There's also textures that contain shapes and the borders in | textures with transparency to think about (usually foliage). | | My go-to solution in games with lackluster anti-alias is to just | render them at a super-high resolution (4k/8k) and downscale, but | that's not great for performance usually. You can compensate a | bit because you won't need as much anisotropic filtering and such | if you downscale, but even on expensive hardware that's not a | solution in all games. | | To get to the point: In some older games I've seen blurring | (possibly due to hardware limitations) of further-away detailed | textures reducing aliasing. I'd love to see that technique | revived in more modern games, possible with the help of AI to | detect patterns/edges on textures that may be susceptible to | aliasing, and selectively running those through a filter - | basically shifting the work from the artists having to design | textures that don't create artifacts to something automatic. | | In general good AA tends to be a second-class citizen in many | modern game engines, partly because of how their renderer is | configured by default (looking at you, Unreal). I really wish it | wasn't so. | rl3 wrote: | This release primarily constitutes a massive rendering API | rework. You can think of it more as a foundation that makes it | easier to implement better rendering features in the future. | | If you check the release notes, you'll see HDR/Bloom support | was dropped at the last minute, and several other major | rendering features are still pending implementation. [0] | | The great part about Bevy is that it's modular, so you can swap | out the renderer if you like. For example, there's already | several people using Bevy with Embark's _kajiya_ renderer.[1] | | [0] https://bevyengine.org/news/bevy-0-6/#more-renderer- | features | | [1] https://github.com/EmbarkStudios/kajiya | posix86 wrote: | You're the first person I see that also has this position! | Anti-alias makes the difference between an image looking like | it's a rendered set of datastructures by a computer, or if it's | a virtual world you happen to have an image of. All other | aspects of graphics - light, shadow, texture resolution, | polygon count - can be considered endearing style, but not | aliasing and bad texture filtering. | andrewmcwatters wrote: | > To me good anti-aliasing strategies is the single most | important factor when it comes to graphics. I don't really care | about things looking realistic or whatever, but I do care about | my screen not being full of moving, weird, and distracting | grainy patterns. | | I don't think I've ever heard this perspective before. Thank | you for sharing your thoughts. This one is pretty unique, I | think. | masklinn wrote: | > My go-to solution in games with lackluster anti-alias is to | just render them at a super-high resolution (4k/8k) and | downscale, but that's not great for performance usually. | | By "lackluster anti-alias" do you mean some sort of home-grown | MSAA that's garbage? | | Because you're hand-rolling SSAA/FSAA, can't you just override | the AA settings in the graphics driver to force FSAA or | something? | _cart wrote: | The aliasing you're seeing is "texture aliasing" from a lack of | mipmaps. We have an implementation in the works, it just didn't | make it into this release. This is a straightforward and well | understood problem. Thankfully our mesh edges are already crisp | (thanks to MSAA) and we have a number of other anti-aliasing | implementations in the works (TAA, SMAA, FXAA), each with their | own strengths and tradeoffs. | chmod775 wrote: | That's cool - as are mipmaps, but even with those you'll | still have patterns emerge that don't exist on the original | texture. Humans are really good noticing patterns, so they're | distracting (a tiled floor doesn't doesn't look like it has | u-shaped curves in reality). Those patterns not having | sharp/grainy edges anymore already helps a lot though. | | Maybe what I'm asking for is impossible, because fighting | those patterns any further would just go too far into blurry | territory. It might just be an inherent property of | projecting something on a grid of neatly ordered pixels, | which is very unlike the receptors in our eyes. | | Though to be honest, I didn't even consider that it may just | be missing mipmaps making it look like that. My perspective | is much that of a consumer who spend a lot of time trying out | various settings/technologies and ordered them into "looks | bad" and "looks better". | lewispollard wrote: | There's a really good blog post about the engineering of | mipmaps from the perspective of mipmapping messing up their | VR game's text legibility here: | | https://bgolus.medium.com/sharper-mipmapping-using-shader- | ba... | | (May have been featured on HN recently, I can't remember | how I got there). | | Often mipmaps are pretty much automatic from the player's | perspective, it's often kind of baked in by the developers | when processing the texture files. It can probably be | disabled but I can't remember seeing that option in a game | for a while. | | I'm curious to see how Bevy's doing it. I'm making a game | in Godot at the moment, and their is the option there to | generate mipmaps or not for an imported texture, and you | can choose use a bilinear or trilinear filtering for the | mipmaps, but that's about it (maybe there's more in the | API, I haven't checked.) | | > Maybe what I'm asking for is impossible, because fighting | those patterns any further would just go too far into | blurry territory. It might just be an inherent property of | projecting something on a grid of neatly ordered pixels, | which is very unlike the receptors in our eyes. | | Basically it solves this exact problem - that rendering a | high res image at a lower size can lose details at points | you don't want them to (e.g. because some part of the | texture like a line is entirely in subpixel "space"), and | pre-processing a lower res image to switch to at different | distance thresholds from the camera. The result is actually | _better_ details at scaled down sizes, with much less | flickering, even though the actual rendered texture at a | distance can be much lower quality. | | They can also save a bit of GPU power and possibly VRAM, as | the lower res, distant textures stream much more quickly | than the ultra high res, near ones. | mahulst wrote: | Awesome! What a lengthy blog, so many new features. Great job on | the new milestone! | knobli wrote: | I waited til 5am for this, it's currently 5:25am in Melbourne | Australia... | marcusbuffett wrote: | Shameless plug, I wrote a snake tutorial for bevy that's become | pretty popular, and just updated it for 0.6. | https://mbuffett.com/posts/bevy-snake-tutorial/ | dralley wrote: | Bevy's release notes are consistently the best I've ever seen. | _cart wrote: | Lead Bevy developer here: feel free to ask me anything! | fsloth wrote: | Looks really nice! If one was to implement a simple "3d arcball | rotator" viewer for 3d formats to get familiar with the engine | (i.e. load obj, view) can you suggest which examples would be | most relevant (presuming bevy architecture is the only | unfamiliar topic here)? | _cart wrote: | The input examples and the GLTF loading example are good | places to start. | | https://github.com/bevyengine/bevy/tree/main/examples/input h | ttps://github.com/bevyengine/bevy/blob/main/examples/3d/loa.. | . | eb0la wrote: | Evil question: | | I wonder why do you have version zero.something - this looks | good enough for a version 1. | | What do you like to accomplish? | | And... What kind of help you'll need to get there?? | rl3 wrote: | > _What do you like to accomplish?_ | | The _What 's Next For Bevy?_ heading in the release | announcement covers this: | | https://bevyengine.org/news/bevy-0-6/#what-s-next-for-bevy | djmcnab wrote: | I can't speak for cart here, but from my perspective as a | contributor to `bevy`, it's extremely useful having freedom | from backwards compatibility concerns to improve our APIs. | | For example, we want to rework our input handling, asset | handling and UI; supporting this current UI solution | indefinitely would be frustrating when we hope to make | something much better once we can focus on that. As an | example of this, we massively changed our rendering APIs for | this release, allowing the improvements listed in the blog | post to be implemented. | pella wrote: | Any public roadmap? | mahulst wrote: | All the way to the bottom of the blogpost, there is a list of | areas being focused on. | pella wrote: | Thanks! https://bevyengine.org/news/bevy-0-6/#what-s-next- | for-bevy | ffhhj wrote: | Congrats for the release, looks great! Not a criticism, but | model projected shadows (not prebaked on lightmaps) are very | jagged or really low-res, reminds me of early Unity shadows. I | know Unity worked hard to improve them for years and acquired | experts on shaders, because users complained and even moved to | Unreal for that reason alone. Not sure if there are now well | known solutions to get highly defined shadows, but I'm curious | on your plans to improve them. | _cart wrote: | Yup shadows are notoriously difficult to make pretty in all | situations. Fortunately we do have a number of "shadow | quality" improvements in progress: | https://bevyengine.org/news/bevy-0-6/#more-renderer-features. | And we'll probably be improving shadows indefinitely from now | on. The tech in that space is constantly evolving. | infogulch wrote: | I noticed the short section on changes to Bevy's UI. I expect | both GPU rendering and ECS will be important capabilities to | consider for new GUI systems, and Bevy does both well. How do | you imagine Bevy fitting into the budding Rust GUI story a la | https://areweguiyet.com ? An entrant itself? The backend for | one? Would you consider pure GUI applications an important use- | case for Bevy now, or perhaps some time in the future? | Animats wrote: | I'm using Rend3 for a Second Life/Open Simulator client. The | current system with Rend3 has one thread doing nothing but | refreshing the screen, while other lower-priority threads are | independently changing the scene based on incoming messages | from the network. Is that something the Bevy architecture can | handle? Should I consider switching to Bevy? | _cart wrote: | Pipelining allows rendering and app logic to run in parallel. | You can adapt to changes from the network when the app logic | runs, so in that sense, it seems like a good fit. And you can | use bevy_tasks to spawn background tasks (and spawn tasks | across different thread pools, if that is required). I think | it is worth considering Bevy, but I also think Rend3 is a | great piece of software. We discuss rendering with that | project's lead constantly :) | nchi3 wrote: | Super happy to see 0.6 released, great work! | | I've been sponsoring for close to a year, but haven't kept up | with the Discord in many months. Currently I'm just been | checking for updates every couple of weeks, and sometimes | checking the state of GitHub issues and milestones. | | However, is there any better way for me to keep up with | progress? If not, has there been any thought about having | regular status updates? They don't have to take a lot of your | (or someone else's) time, but just a few sentences on what's | been decided, what's happened, etc, would be nice! Once every | 30 or 60 days would definitely be enough. | _cart wrote: | Going forward, we will be doing a curated This Month In Bevy | newsletter. We've had templates in draft mode for awhile, but | getting 0.6 out the door has taken precedence. I'd like to | release our first newsletter this month! | nchi3 wrote: | That's great to hear! Thank you for all the hard work, I'm | looking forward to see Bevy grow, and really hope it'll end | up becoming a worthy competitor to Unity/UE/Godot for | commercial games some day! | mysterydip wrote: | If I'm a dev looking at engines to use, would now be the time | to jump to Bevy, or is there expected to be significant changes | to API and data structures moving forward still? | _cart wrote: | Things have started to stabilize, but unless you're willing | to get your hands dirty and deal with regular breaking | changes, I don't yet recommend staking your livelihood on it. | That being said, by the end of the year I think we will be | _much_ closer to our first stable release, and I expect the | number of "serious projects" adopting Bevy to increase | throughout the year. Now is the right time to start | _evaluating_ Bevy for future projects (and experimenting with | it). | mysterydip wrote: | Thanks for the response, I'll check back in a year! | wrnr wrote: | Thanks for your work. What is the support for low-end and | mobile devices? I have tried developing with bevy on my old | macbook with an Intel Iris graphics card, maybe not ideal but | that is what I have and I want to support most hardware. Last | time I tried the simple cube example made my fans spin. Is this | something that can be alleviated? | _cart wrote: | We support low-end devices well (although this is a constant | balancing act)! Bevy runs well on iOS currently (and we have | WIP Android support ... we're working on re-enabling that | asap). Fans spinning is a known issue, but it is generally | decoupled from framerates (which tend to be fine). On some | machines we are over-engaging cores, even with empty apps | that do nothing ... my current theory is that we need to | adjust how our task pools are managed. | bullen wrote: | Pipelined rendering increases motion-to-photon latency. | _cart wrote: | It can, but with care you can largely resolve this. And you can | always disable pipelining if the performance benefits aren't | worth it to you. Unity has a great article on this topic here: | https://blog.unity.com/technology/fixing-time-deltatime-in-u... | gameswithgo wrote: | yes, you desperately want low latency, but also desperately | want high throughput. such is life. | cptroot wrote: | Do you mind explaining why? Near as I can tell it should be the | same unless you were already maxing out your CPU to run the | game. | steeleduncan wrote: | Instead of doing all operations required to render the | gamestate in a single frame you spread them in parts across | multiple frames. This means that the output represents the | state of the game some number of frames ago, increasing the | time between your control inputs and what you see changing on | screen. | dagmx wrote: | I don't believe that multi frame processing is a required | part of a pipelines render. | | It just means the render stages are customizable, therefore | is more flexible. See Unity as an example. | mtsr wrote: | This kind of pipelining is really about efficiency. Without | it, either only the game logic is busy (utilizing just the | CPU, most often) or the renderer is busy (utilizing both | CPU and GPU). By starting next frames game logic sooner | (concurrently with current frames rendering), one can keep | a steadier load on both CPU and GPU with less idle time. | serverholic wrote: | Bevy is one of the most exciting projects in the rust space IMO. ___________________________________________________________________ (page generated 2022-01-08 23:00 UTC)