-
Notifications
You must be signed in to change notification settings - Fork 353
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
news: release 0.5.0 #113
news: release 0.5.0 #113
Conversation
Convenience RENDERED link. |
(I recommend viewing this with a local zola server to get proper formatting) Just download zola and run |
|
||
### Improved Run Criteria | ||
|
||
Run Criteria are now decoupled from systems and will be re-used when possible. For example, the FixedTimestep criteria in the example above will only be run once per stage run. The executor will re-use the criteria's result for both the `foo` and `bar` system. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Inconsistent capitalization of Run Criteria.
|
||
The old behavior was "systems detect changes that ocurred in systems that ran before them this frame". This was because we used a `bool` to track when each component/resource is added/modified. This flag was cleared for each component at the end of the frame. As a result, users had to be very careful about order of operations, and using features like "system run criteria" could result in dropped changes if systems didn't run on a given update. | ||
|
||
We now use a clever "world tick" design that allows systems to detect changes that happened at _any_ point in time since their last run. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Might be fun to mention just how long we can wait between runs to impress the magnitude of the reliability.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm i think the implied "it just works" is easier to convey and more approachable than something like "It is reliable up to a tick difference between last change and the last system run of 3 * u32::MAX/4 ticks, where each system run (and each frame) bumps the world tick by 1". While "true" and impressive, I think it muddles the message rather than driving it home.
2d_text.gif is rather large (3.79MB). Can you use an actual video format instead? |
@cart I have some pretty major criticisms about the current state of the blog post (discord discussion with other people, from that message onwards). The Core ECS Rewrite from bevyengine/bevy#1525 is described in excessively verbose and unnecessary technical detail. It is currently somewhere between a third and half of all the content in the blog post. I agree that Bevy ECS is the most unique distinguishing feature of the Bevy project and should probably get the most attention, I just don't agree about this level of technical detail and rationale being appropriate for a release announcement post. It also reads in a very different tone from the rest of it: everything else is covered briefly, with the user-facing aspects/changes showcased (which is a good style for a release announcement), while the stuff about the Core ECS Rewrite reads more like a technical post for ECS developers, full of jargon and implemetation details (much of the content feels similar to what was written/posted in the PRs themselves, for Bevy ECS devs). I don't think this is appropriate for a release announcement. I suspect a big part of the audience (who are not interested in ECS technicalities) would get tired/bored/overwhelmed quickly, part way through that giant section, and lose their attention span for everything else. It doesn't help that most other new features are covered after that. I think it would be a good idea to rearrange the content, so that as many of the cool new things in the release as possible get visibility first, while readers have the best attention span, and save the Core ECS Rewrite for last. It is the longest section that is the hardest to read. You could split away the benchmarks graphs to showcase the perf improvements early near the beginning of the blog post, while saving the detailed explanation for the end. Right now, the experience of reading the post feels very much like: come with a fresh attention span, "oh, PBR, awesome!", then get dragged into super technical detailed ECS implementation notes, gradually get tired and lose that attention span, and then skim through the rest of the long blog post (where literally everything else is!). This is very suboptimal and buries all the important user-facing features we have with the new release. Also, much of the Core ECS content could really be slimmed down:
You could replace all of that with a link to the PR, for anyone interested in the details. I don't suggest removing these sections altogether, just slimming them down. Briefly describe what the feature is and why it is important, but without too much technicality and implementation details. You could link to PRs or other sources of info for that. Also, your explanations of the ECS are very "direct world access" centric, which feels out of touch with how most people use Bevy. You explain direct world access in extraordinary detail, with entire long sections about WorldCell and EntityRef/EntityMut, and only then show at the end, that "Commands have also been updated" to match it. Commands are the primary way that most users interact with Bevy ECS. I feel like that API should be given more prominence. |
Also, with the "Orthographic Camera" stuff, you forgot a very important aspect: it is now possible to use orthographic projection for 3D! This enables people to make things like CAD applications, or "isometric" games that use a 3D orthographic view. This is probably more important than the fact that you can select different window scaling modes/behavior. EDIT: you could include a screenshot of the 3D orthographic example: |
|
||
<div class="release-feature-authors">authors: @kokounet</div> | ||
|
||
Timers now internally use `Duration`s instead of using `f32` representations of seconds. This both increases precision and makes the api a bit nicer to look at. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
what is Duration
? is this part of std or a bevy type? a link here to the docs would be nice!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see it is part of std now - maybe just a small adjustment here for clarity
Timers now internally use `Duration`s instead of using `f32` representations of seconds. This both increases precision and makes the api a bit nicer to look at. | |
Timers now internally use `std::time::Duration`s instead of using `f32` representations of seconds. This both increases precision and makes the api a bit nicer to look at. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe it could link to the official docs? https://doc.rust-lang.org/std/time/struct.Duration.html
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm planning on doing a pass that will make all of the "types" link to docs (like we've done in past blog posts). I'll do that here.
I may have missed it, but can you add what are the next steps and future plans are for Bevy? |
Good call. I got that from a PR / didn't record it myself so ill need to re-encode or re-record, but thats not too hard. @jamadazi @mmahandev
Yup those are missing. I called out that I'll be following up with those in the PR description. |
I just cut a good portion of the ECS rewrite content, with a general focus on cutting down on implementation details that make people's eye's glaze over. I also moved a good chunk of content to the end, which lets us "move on" to other things faster. I did leave a bit of the "blog post-ey" introduction to storage types as I think it helps set the stage / tells a solid story that justifies the work being done. People have responded well to this style in the past so I'm comfortable rolling with it here. |
Added a small "whats next" section at the end. Feel free to suggest items (but only if they already have people committed to working on them / plans have already been made) |
* "Pipelined" rendering and other renderer optimizations | ||
* Bevy UI redesign | ||
* Animation: component animation and 3d skeletal animation | ||
* ECS: relationships/indexing, async systems |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
archetype invariants!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also Ratys's stageless work
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe in no more .system()
. Maybe let's not promise it though
@cart is there supposed to be a flight helmet picture that isn't showing? (near the beginning of the post, after the pbr balls) The text suggests it, but I can't see one. (in the RENDERED link above) |
@jamadazi it won't show videos in the preview. You'll need to use zola to render the html. It is a webm encoding, which doesn't work in safari (yet). I'm planning on re-encoding before release. |
Co-authored-by: scottmcm <[email protected]>
Co-authored-by: Alice Cecile <[email protected]>
Co-authored-by: Alice Cecile <[email protected]>
Co-authored-by: MinerSebas <[email protected]>
An idea based on what @jamadazi said... perhaps you can salvage the deep technical details and write a "deep dive" blog post using them. I feel like that info is very valuable, but I agree that it's extremely verbose for a release announcement. |
Yeah good call. We could definitely do a blog post on the details. |
This is a first draft of the 0.5.0 release blog post. Feel free to leave comments / suggest changes / help me fill in gaps I missed 😄
If something is missing, it probably wasn't intentional, theres just a lot to balance.
I'm posting this in draft mode because we're still missing the changelog and "whats next for bevy" section