-
Notifications
You must be signed in to change notification settings - Fork 317
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
Allow archetypes to clear and/or update existing components #3381
Comments
If this proves to be more complex than anticipated, then we'll push it to 0.10 |
Needs a follow-up where we hide empty components from the streams view |
We need to think through how |
This API should also handle specifying the InstanceKeys for the collection that's being updated. |
Instance keys and num_instances are not a problem anymore (or won't be, soon). |
@teh-cmc we were talking through this with respect to Transforms I realized this approach has the potential to cause some annoying performance issues for chunks. In particular, every unused optional component will still require growing the offset array for each of the optional components by one element (in many cases, just a repeated 0). This is similar to the overhead of growing sparse unions (growing each child array), and strictly worse than the overhead of sparse unions (just growing one child array). This suggests to me we're going to need some kind of chunk-specific optimization. This also has an annoying ripple-effect on datafusion / dataframe UI of showing a bunch of empty / cleared (not nulled) columns all over the place. |
### What * Closes #6909 * First steps on the road to #3381 * Creates a new issue: #7117 Best reviewed ignoring whitespace changes. The serializers for `Transform3D` and `LeafTransform3D` will now always write every component, effectively clearing all previously logged values. `Transform3D` uses `Option<C>` for each component, treating it as a single-element list component list where `None` is empty. If we ever want to support updating some components using the transform (as outlined in #3381) we would need to turn this into a tristate, i.e. something like `NoneOrZeroOrOne<C>`. `LeafTransform3D` uses `Option<Vec<C>>` for its components, but has no interface yet for logging an update. Both `Transform3D` and `LeafTransform3D` has a new `::clear()` constructor in Rust, that replaced both `::new()` and `::default()`. This is for added clarity, and to make the transition easier if we ever add an `::update()` constructor, as per #3381 ![image](https://github.com/user-attachments/assets/588224b8-daec-463d-b238-8263f578ae19) ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using examples from latest `main` build: [rerun.io/viewer](https://rerun.io/viewer/pr/7111?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [rerun.io/viewer](https://rerun.io/viewer/pr/7111?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! * [x] If have noted any breaking changes to the log API in `CHANGELOG.md` and the migration guide - [PR Build Summary](https://build.rerun.io/pr/7111) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) To run all checks from `main`, comment on the PR with `@rerun-bot full-check`. --------- Co-authored-by: Andreas Reich <andreas@rerun.io>
Backstory
empty()
method on Rust archetype implementations to log empty #3279What should the following code do:
Should the new positions inherit the colors of the previous log call?
That would be quite non-intuitive.
Related to this: how does one update just the colors of a point cloud?
Design
We've all converged on the following API:
Python:
Necessary changes
Options
, even the required onesComponent lists implications
A component list (e.g.
radii
) can have one of the four special values:null
components aren't logged, but empty components are.When querying the store, missing components are treated the same as empty components.
Related issues:
The text was updated successfully, but these errors were encountered: