Skip to content
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

Merged
merged 23 commits into from
Apr 6, 2021
Merged

news: release 0.5.0 #113

merged 23 commits into from
Apr 6, 2021

Conversation

cart
Copy link
Member

@cart cart commented Apr 5, 2021

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

@scottmcm
Copy link

scottmcm commented Apr 5, 2021

Convenience RENDERED link.

@cart
Copy link
Member Author

cart commented Apr 5, 2021

(I recommend viewing this with a local zola server to get proper formatting)

Just download zola and run zola serve


### 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.
Copy link
Member

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.
Copy link
Member

@alice-i-cecile alice-i-cecile Apr 5, 2021

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.

Copy link
Member Author

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.

@bjorn3
Copy link
Contributor

bjorn3 commented Apr 5, 2021

2d_text.gif is rather large (3.79MB). Can you use an actual video format instead?

@inodentry
Copy link
Contributor

inodentry commented Apr 5, 2021

@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:

  • The Archetype Graph: this is really an internal implementation detail, that most bevy users will never be faced with (other than the awesome performance it results in 😉 ). Currently, it alone, has a detailed section that is larger than many other sections, including everything in the blog post about PBR. It feels excessive and out of place.
  • Ditto for "Merged Resources into World"
  • and "Query Conflicts Use ComponentId Instead of ArchetypeComponentId" ... do we really need a detailed description of all the technicalities of how Bevy detects conflicting queries, in a Release Announcement?
  • much of the bullet-point content under "Archetypes"

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.

@inodentry
Copy link
Contributor

inodentry commented Apr 5, 2021

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:

3d orthographic screenshot


<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.
Copy link

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!

Copy link

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

Suggested change
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.

Copy link
Contributor

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

Copy link
Member Author

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.

@mmdevcodes
Copy link

I may have missed it, but can you add what are the next steps and future plans are for Bevy?

@cart
Copy link
Member Author

cart commented Apr 5, 2021

@bjorn3

2d_text.gif is rather large (3.79MB). Can you use an actual video format instead?

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
Yeah those are good points. I'll slim some things down and rethink the order a bit. Thanks!

@mmahandev

I may have missed it, but can you add what are the next steps and future plans are for Bevy?

Yup those are missing. I called out that I'll be following up with those in the PR description.

@cart
Copy link
Member Author

cart commented Apr 5, 2021

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.

@cart
Copy link
Member Author

cart commented Apr 5, 2021

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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

archetype invariants!

Copy link
Member

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

Copy link
Member

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

@inodentry
Copy link
Contributor

@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)

@cart
Copy link
Member Author

cart commented Apr 6, 2021

@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.

@cart cart marked this pull request as ready for review April 6, 2021 18:21
@RoyAwesome
Copy link

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.

@cart
Copy link
Member Author

cart commented Apr 6, 2021

Yeah good call. We could definitely do a blog post on the details.

@cart cart merged commit 16536c8 into bevyengine:master Apr 6, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.