Closed Nachomartgar closed 2 years ago
Awesome feature, looking forward to use it.
It would be nice to be able to "share" a singular bookmark in some way so that another user could just cut/paste a singular string/value and have it add to their local bookmarks or maybe just update the camera to the new position/orientation as though it was a bookmark they clicked?
It would be nice to be able to "share" a singular bookmark in some way so that another user could just cut/paste a singular string/value and have it add to their local bookmarks or maybe just update the camera to the new position/orientation as though it was a bookmark they clicked?
Yes I agree, this could be a nice stretch goal! We could generate an URL (something like this o3de://set_camera/e2xldmVsX25hbW) with base 64 encoding that could be shared between developers. For example, if a designer finds a missing texture in the level this URL could be generated and shared with the artist responsible, then when clicked, it will set the camera to that specific position in the level.
When I watched someone use this, they were using the existing level cameras to 'look through' so that they could get a WYSIWYG view of the viewpoint from that camera, including other camera settings like screen effects, color grading, etc.
Additional gems can in the future add an unknown quantity of additional screen effects of other components that affect what happens when you 'inhabit' a camera.
Would it not make more sense to bookmark cameras instead of some subset of camera properties? Or to copy those components to the current editor camera while using the bookmark? Or something?
As for merge conflicts, its an interesting question, that is, where to save them. Its possible to save these bookmarks in user preference space instead of level, since the level already contains actual cameras, which is what is supposed to be saved. This would reduce conflicts but not allow sharing. A combo of some means of sharing, especially if it could be string encoded, as well as saving in user space might be ideal but is worth further thought.
My gut tells me that this would be a more ideal default pattern for storage:
(valuable future) I can use the camera bookmark system in automation (generate dailies!); generate screenshots from multiple views in a level, upload/stash them on a S3 bucket, and build a confluence discussion page so a group can review, discuss, and perform collaborative group project planning. (this is a step towards high value production tracking workflows ... like integrating with Autodesk ShotGrid (used to be called Shotgun))
Notes: @gadams3 please weigh in
It would be nice to be able to "share" a singular bookmark in some way so that another user could just cut/paste a singular string/value and have it add to their local bookmarks or maybe just update the camera to the new position/orientation as though it was a bookmark they clicked?
Yes I agree, this could be a nice stretch goal! We could generate an URL (something like this o3de://set_camera/e2xldmVsX25hbW) with base 64 encoding that could be shared between developers. For example, if a designer finds a missing texture in the level this URL could be generated and shared with the artist responsible, then when clicked, it will set the camera to that specific position in the level.
Yeah this is super useful for data stored in a bug! When I was at R*NY we had a pretty good bug system for GTA that automated the stored of metadata like this along with screenshots. (other metadata was stored like the level / sequence, and some gamestate data.)
When I watched someone use this, they were using the existing level cameras to 'look through' so that they could get a WYSIWYG view of the viewpoint from that camera, including other camera settings like screen effects, color grading, etc.
Additional gems can in the future add an unknown quantity of additional screen effects of other components that affect what happens when you 'inhabit' a camera.
Would it not make more sense to bookmark cameras instead of some subset of camera properties? Or to copy those components to the current editor camera while using the bookmark? Or something?
See my comment but yes I agree, lets make sure we define and consider these critical use cases.
When I watched someone use this, they were using the existing level cameras to 'look through' so that they could get a WYSIWYG view of the viewpoint from that camera, including other camera settings like screen effects, color grading, etc.
Additional gems can in the future add an unknown quantity of additional screen effects of other components that affect what happens when you 'inhabit' a camera.
Would it not make more sense to bookmark cameras instead of some subset of camera properties? Or to copy those components to the current editor camera while using the bookmark? Or something?
I think the discussion is starting to create some confusion between the purposes of this new system (Camera Bookmarks) and those of the existing one (Be This Camera).
The existing "Be This Camera" system allows users to "inhabit" existing camera gameobjects in the scene. While you "are" that camera, all changes to the view (both via keyboard inputs, mouse inputs on the viewport etc) are reflected on the gameobject transform and camera components until the user leaves the camera and returns to the editor camera. This system was created to allow users to more easily make changes to an in-game camera entity.
Subsequently, users started using this system for a purpose it was not built for. Users wanted to save multiple positions in the level and easily switch between them in the editor. Mind you, these are not meant to be in-game cameras that will be used in gameplay; alas, using the "Be This Camera" system for that objective creates artifacts that are saved to the level and loaded in-game. Creating them as editor-only would mitigate that, but objectively that's more of a workaround than a feature. Additionally, "Be This Camera" alters the camera entity's position when the camera is moved, meaning that those entities are constantly changing and don't provide fixed positions in the world, which kind of goes against the user's intention.
The new "Camera Bookmarks" feature is built to serve this new and different use case. Camera bookmarks are just data, and whenever the user selects one, it just moves the existing editor camera to that position. This would not remove "Be This Camera", which has a completely different purpose.
It would be nice to be able to "share" a singular bookmark in some way so that another user could just cut/paste a singular string/value and have it add to their local bookmarks or maybe just update the camera to the new position/orientation as though it was a bookmark they clicked?
Yes I agree, this could be a nice stretch goal! We could generate an URL (something like this o3de://set_camera/e2xldmVsX25hbW) with base 64 encoding that could be shared between developers. For example, if a designer finds a missing texture in the level this URL could be generated and shared with the artist responsible, then when clicked, it will set the camera to that specific position in the level.
Agreed, although I'd be oriented towards just using json directly. We have discussed potentially doing something similar with entities in prefabs in the future (select an entity in the Outliner, press Ctrl+C, and that actually stores the json representing the entity in your clipboard.
Honestly, I am somewhat partial to the idea of differentiating between local and shared camera bookmarks. I think it will just introduce confusion and be a source of complication on the UX side. Ideally, all saved bookmarks could be stored on the level (not including the transient ones of course). Not against the current setup if we can make the difference clear and transparent to the user though.
Another thing to keep in mind, then, is the fact that levels are prefabs, and viceversa. Will all prefabs possibly contain bookmarks? If so, how will they be handled in the UI?
Aside from the comments above, a few suggestions (which likely would be more of a stretch goal):
It would be nice to be able to "share" a singular bookmark in some way so that another user could just cut/paste a singular string/value and have it add to their local bookmarks or maybe just update the camera to the new position/orientation as though it was a bookmark they clicked?
Yes I agree, this could be a nice stretch goal! We could generate an URL (something like this o3de://set_camera/e2xldmVsX25hbW) with base 64 encoding that could be shared between developers. For example, if a designer finds a missing texture in the level this URL could be generated and shared with the artist responsible, then when clicked, it will set the camera to that specific position in the level.
Agreed, although I'd be oriented towards just using json directly. We have discussed potentially doing something similar with entities in prefabs in the future (select an entity in the Outliner, press Ctrl+C, and that actually stores the json representing the entity in your clipboard.
I think having something compact is important here for numerous reasons (usability, transportability, etc) versus having something readable/editable
Subsequently, users started using this system for a purpose it was not built for.
Uhm, we've been using it this way for many years, specifically we leveraged this A Lot while demoing at GDC, etc. We should lean into what users feel is intuitive and understand why they are in the frame of context.
Subsequently, users started using this system for a purpose it was not built for.
Uhm, we've been using it this way for many years, specifically we leveraged this A Lot while demoing at GDC, etc. We should lean into what users feel is intuitive and understand why they are in the frame of context.
I don't think the fact that a tool has been erroneously used for a certain purpose for a long time means it's the most intuitive or best way to provide the same functionality. If anything, it highlights that the current UX for "Be This Camera" is very confusing, and that we don't provide the functionality the user wants in that context.
This RFC is a good direction and proposal, and definitely an area O3DE does not give good answer.
Having said that I have several questions and observations:
All in all, the points that you raised in this RFC are very important and as per Guthrie I see them as P0-P1. What is not quite clear is whether there is a major win in creating such a system over adding a layer on top of the existing today to get the functionality you described that will now benefit from the generic functionality inherited by the entities, components and GUI.
I will say I really like this bookmark RFC and the general direction (super valuable) I still have some skepticism to remove. One aspect of RFCs are for feeling out the questions and poke holes, or suggest potential alternatives. Not trying to confuse the discussion, just having a solid discussion that allows us to view the problem thought many facets to understand the implications and impact (we all want the same thing, which is great experience design.)
Users wanted to save multiple positions in the level and easily switch between them in the editor.
Agreed. There are SO many use cases for parking cameras (or views), from the obvious (persisting intended views), for workflows (multi-view editing, like this is vital to lighting), to the technical (level automation processes).
Bookmarking implies marking an object directly with pertinent locations (a page in a book); we are definitely talking about scene bookmarks. The RFC is saying the bookmarking system is better then how users use "Viewport Camera Selector" today (for a similar purpose) that sounds fine, give me something better (and I know people have desiring better camera workflows.)
I completely get the usefulness of breadcrumbing type mechanics, bookmarking locations in any viewport sounds great. (like bookmarking a particular viewpoint in a complex blueprint graph in unreal, helps you quickly hope around the canvas view and are stored with that graph.)
Should we also be talking about per-camera bookmarks (I think so)? I know several users who I know are familiar with several 3D DCC tools and likely then also familiar with their bookmarking systems, how do you know that something like this isn't what they are actually asking for? https://www.fxfx.net/how-to-bookmark-camera-angle-in-maya/
Or more like this? https://blendermarket.com/products/bookmark-view/docs Where I can log many bookmarks, then independently apply them to any viewport.
If any viewport could potentially "Be this camera" (Or any similar valuable use like, "Look Through Light")? And if users wanted to apply view bookmarks, to any viewport, which could be viewing any camera, what do we do?
In DCC tools (lets say CGi workflows), 'the stage' is composed of many layers data from referenced files. This is not really much different from levels and nested prefabs. Any of these referenced files may have their own sets of cameras, and each camera may have bookmarks. One nice thing Maya allows for, is to provide namespaces for references - the scene (level prefab) might have 'PerspectiveCamera' and the nested scene (prefab) might have 'Foo:PerspectiveCamera' (this helps distinguish ownership across complex scene data in a way you can grok on inspection)
Scenes get complex quickly, and so I feel like even with an MVP, we need to know what the North Star is (the outcome we are hopefully driving towards) So how do you think this is going to scale to larger sets of bookmark locations in a partitioned vast open worlds, etc.? Because I am definitely going to want to build a castle prefab and store bookmarks in that scene, and then place that castle in a larger level and bookmark locations in that scene as well.
Honestly most 3D tools just use a collection of the same stateful 'camera node' class, only a few are specially configured as default views for scene editing (in Maya a scene comes with a default set: Persp, and 3 ortho), these are just cameras:
So treating a camera (or collection of them) as 'Editor Only' would be the equivalent Not a workaround And so there is an alternative design here, which might be more straightforward, and better preserve user intent.
So what I might consider is an alternative....
Questions and thoughts I have:
it's not the most intuitive or best way to provide the same functionality.
- from my POV apparently many people did intuit exactly this (and it wasn't always problematic), they didn't complain about it being unintuitive, they complained when it stopped functioning the way they expected (based on prior experience)
So treating a camera (or collection of them) as 'Editor Only' would be the equivalent Not a workaround
I disagree with this, they are different operations with different results.
Let's say we establish this workflow:
If you do this with the current "Be This Camera" workflow, point 5 will result in the viewport displaying the position after the zoom operation. That's because changes to the camera done in the viewport are saved to the camera entity, and those result in the level being edited (even when the entity is editor-only, it is still saved in the level prefab). This is because "Be This Camera" is designed to offer an intuitive way to alter entities in the scene.
If you do the same workflow with the "Camera Bookmarks" system detailed above, point 5 will result in the viewport displaying the same exact view as point 2. Effectively, CameraBookmarks are not entities in the scene, they're pretty much the equivalent of using the "Go to Position" option, and avoid having to supply the string defining the position/rotation of the camera manually every time.
For what I can understand, we've been using the "Be This Camera" system to achieve results that are not really what it was intended to do. If anything, I think "Be This Camera" should actually be changed to be the Component Mode of the Camera Component - that would likely clarify the difference between the two systems, in my opinion.
As far as the UI for the proposed tool panel goes, we do have a bookmark panel in GraphCanvas
that is used for both ScriptCanvas
and LandscapeCanvas
, that similarly lets you save (bookmark) positions in a graph and switch between them. It also has several different ways of switching between them, including shortcuts, and a search filter as well.
This system doesn't handle local vs. shared bookmarks though, so I believe it's more helpful for having a consistent UI experience across our different tools as opposed to how to handle the actual data on the backend.
As far as the UI for the proposed tool panel goes, we do have a bookmark panel in
GraphCanvas
that is used for bothScriptCanvas
andLandscapeCanvas
, that similarly lets you save (bookmark) positions in a graph and switch between them. It also has several different ways of switching between them, including shortcuts, and a search filter as well.This system doesn't handle local vs. shared bookmarks though, so I believe it's more helpful for having a consistent UI experience across our different tools as opposed to how to handle the actual data on the backend.
This is like Blueprint canvas bookmarks and these bookmarks are owned by the graph. In world building then this would be something like.
A graph is a view : a camera is a view. A graph can store location bookmarks : a camera can bookmark view locations.
Q: Do bookmarks aggregate if graphs are nested? Do you think shared bookmarks in the canvas tool have an important use case?
All cameras are a common class object, several controllers operate camera data (at edit, or runtime), one of which is a action based bookmarking system. IMO to me, anything special about 'editor cameras' (and their views) is either because of their default configuration/presentation, or the way a User decides to treat them (like naming conventions or groups). I haven't changed my mind that our 'Editor Only' state is a valid mechanism to sort one set of cameras from another (by intent purpose) and prune a set of those cameras from runtime.
Viewports, views, cameras and bookmarks, if they can't just fit the MVC model like this it makes me wonder why?
So treating a camera (or collection of them) as 'Editor Only' would be the equivalent Not a workaround I disagree with this, they are different operations with different results.
This is the same as common 3d tools with bookmarking systems:
If you do this with the current "Be This Camera" workflow, point 5 will result in the viewport displaying the position after the zoom operation.
That feels intentional. (the viewport is now the controller, the camera is the data it is operating)
That's because changes to the camera done in the viewport are saved to the camera entity.
For camera's this is often exactly what you want. Like moving a camera view to line up a shot, then keyframe that position. This is exactly the simple basic camera entity design that most 3D tools use.
In Maya (as an example): If a parameter (lets say transform.x, .y, .z) are keyframed, the params change color (red) to indicate this. This doesn't stop you from selecting and moving the camera around (during edit time.) The red indicates the current transform value will be overridden by keyframe data. You NEED to be able to move it around, so you can CRUD keyframe data. When you activate dynamic mode(s) like 'animation playback' (like going in and out of game mode), the camera will jump to the keyframed position.
If a param is bound by logic (like an expression), it turns purple, this indicates that you can't keyframe it. In fact it's permanently bound to the logical expression in both edit and dynamic mode. (this is something Chris Roby and I talked about many times, which is to make expressive constructs at edit time - like seeing a Rock scale based on world position. Anyway another conversation.)
When you exit the dynamic mode it doesn't return to the position it was in before dynamic mode, it's just left wherever you stopped (it's current keyframe value.)
^ that is something I realize is desirable to improve for viewports/cameras in O3DE when entering/exiting game mode (a departure from my story here, but that's addressable in Maya - you'd script a callback to store and then restore which camera and it's state to return to.)
If you want a camera position/view to be immutable, you lock it's transform (or part of it). Thinks keeps user-interactions from further editing or altering its data (it does not lock keyframe or logical expression from operating that data, only users actions.)
The default editor camera views (Perspective, Top, Front, Side):
But all cameras are camera nodes of the same class, and viewports are just one controller (which has to layer with other potential controllers.) And any camera can be bookmarked. And bookmarks are just an action based controller of cameras.
Users decide a new cameras purpose, "it is a scene editing camera", "its a cinematic camera", "its a camera rigged in a character controller"
For what I can understand, we've been using the "Be This Camera" system to achieve results that are not really what it was intended to do.
People eat with chopsticks, but they are just sticks. But OK "be this camera" is what it is, it's important, and needs to work just as well. Both are ways a user interacts with camera data and view switching. Therefore the new design, should state it's indentions and impact on the other camera interactions and workflows.
"Be This Camera" should actually be changed to be the Component Mode of the Camera Component.
Cameras and camera view editing should not be gated behind a button like mechanism. (unless you really enjoy death by a thousand clicks, and are ok with creating flow state interruptions users are not accustomed to encountering.) This would be so foreign to 3D tool users, the flow interruption will cause friction (My gut is that this will just become a 'complaint flywheel'.)
The locking out of data generally should be in the users control... sure I might accidentally edit a camera, however on the flipside too many guide rails, barriers and gating mechanisms is just a different kind of compounded frustration. One I can learn to avoid, the other I can not.
Component Modes (CM) purpose is 'modal editing' so we can have 'new' mode states, along with new actions and mechanisms, like hotkeys, and advanced modes for data manipulation (like Whitebox mesh data.)
This looks good. We can use these Runtime as well I assume. Could we have a Vector3 POS for a Camera Target as well. Also, Locking of some Transforms and Rotations? Maybe I want to script this camera to do some dynamic animation, or a user can use the camera in with some restrictions, like only can rotate around etc.
Some notes to clear up several topics mentioned in this thread:
I've condensed, I think these are the only point of my thoughts that are actually important considerations.
Personally I am 100% in favor of replacing "Viewport Camera Selector" with something like "Viewport Bookmarks", however, doing so does not alleviate my need to 1.select, 2.switch, 3.activate, and 4.control game cameras in a view.
Here is how it basically doesn't add up for me though ...
You are explicitly suggesting we take away something that has performed 1.2. and 3 (the "Viewport Camera Selector") to get you to the state of 4 quickly, but you are suggesting to replace it with something that does not do 1.2.3 or necessarily 4. (sniff test, are you actually solving the same problem here?)
Therefor we may not have the core of a MVP users need (or the design and RFC is indexing on the wrong issues and assumptions as the tent poles suggesting it is needed.)
User needs:
So I ponder, what is a "Main Editor Viewport" in a state of multiplicity!?
This design is around storing bookmarks and assigning them to the 'Main Editor Viewport' (only).
The suggested design hasn't solved the inter-op when Bookmarks applied to --> 'Main Editor Viewport' when --> it's the view and controller for an 'active camera'. (I do not see how this can be decoupled, or not answered in this design.)
A Bookmark design that operates on a "Viewport", can not assume a singleton view forever, so a more general design is needed (design with a North Star in mind.)
Many details and comments suggest that this system is independent of others, like "be this camera".
However, the User Experience of Viewports, Viewport Controls, Cameras (virtual cameras like editor views, or placed camera entities), and Camera and/or View bookmarking, are in fact to me the User the same experience and part of scene management and fluid workflows. Personally I use all of these fluidly and in the flow don't think about views, cameras and bookmarks separately ( I am simply navigating my scene/world with the best use of mechanisms and my understanding of them. )
1) Not all 3d apps have bookmarking, but generally all 3d apps do allow the user to place, configure and manage collections of cameras around the scene.
2) All 3d apps generally allow you to 'look through' any camera, from any viewport; if that camera is considered active (or locked, there are a few variations), then the viewport is the camera view controller. This is the common baseline, thus the most likely to be encountered and naturally intuitive way to operate,
3) Bookmarks are not ubiquitous, they are actually supplemental to any core needs related to cameras, view switching, and navigating complex scenes.
(Let's maybe hold off on building a roof, until we are sure we have the solid framing to support it.)
Hi everyone! first of all I want to thank you for all your valuable feedback I really appreciate the time you've taken to improve this RFC. I also want to clarify some general points and question that I have seen so far and hopefully end some the confusion that might have been generated.
This is not replacing the current Camera Viewport Selector and Be this camera feature and we are not going to remove anything. Maybe the name choice for this feature have caused some misunderstanding and we should possibly rename it to something like "Location Bookmarks" instead.
The main purpose of this feature is replacing a lost functionality from the old Cry Viewport that let the user save camera positions (function keys). This CryEngine feature was very limited and its functionality/discoverability was really poor. We are trying to improve on what was possible before. In any case, and thinking longer term, we can definitely talk about the viewport camera selector communicating with the Location Bookmarks which can definitely be complementary systems.
I've also seen some concern about how we would support multiple viewports. This should be easily achieved as the viewport that is in focus would be the one that will be loading the Location Bookmark data.
As far as data storage relates, we want to follow o3de standards (project/user folder). We like the idea of having custom stereg files instead of storing this data in already existing ones. This will provide a better encapsulation keeping the files clean and accessible.
I've seen so many great ideas and suggestions in the comments but we really want to avoid feature creep and limit the scope in the MVP. The Location Bookmark is what the MVP really is and we should focus on that, once that is in place we can think of building on top of it.
We discussed this RFC in the sig-content monthly meeting on 1/27.
I support this proposal.
Approved to move into the final 5-day comment period at SIG-Content Triage on February 8, 2022. Please raise any final concerns on or before February 13, 2022.
@monroegm Quick follow-up, should this now be closed? Or is it expected to be left in the open state? Thanks!
Overview
This feature proposes a View Bookmark System in which the user can store several camera properties (position, orientation, fov, etc.) and allow them to group these Bookmarks in order to improve workflows such as level or environment design.
What is the relevance of this feature?
Currently, the only feature that can accomplish a similar behavior is the "Viewport Camera Selector". Nevertheless, this feature was not designed for that use and has the following drawbacks:
With the new system we would be storing just Bookmarks which are structs that contain different properties for the camera and then, when the user accesses one of those Bookmarks, we would load these properties into the main viewport camera. These Bookmarks also hold other information such as tags that will helpful in organizing widgets to easily display these Bookmarks.
Feature design description
This feature is all based in the View Bookmark concept which is a struct in which we store camera properties. Depending on the use case we want, these Bookmarks could be kept in memory or stored persistently. If they are stored persistently we may want to have them stored locally or shared amongst the development team. For Example:
Local Bookmarks vs Shared Bookmarks
The only difference between these two options is where the data would be stored. If we want to store a bookmark locally we would store it in the Settings Registry (project/user/Registry/ViewBookmarks), whereas if we want to make it shared we would store it in the prefab itself.
Bookmark Widget
Technical design description
The first step will be creating a transient View Bookmark. This Bookmark will be stored in memory and we will use it to keep the camera transform every time we go out of Game Mode or Simulate Mode. #2917
Then, we'll have to create a system where every time the user closes a level a View Bookmark gets saved to the Editor Settings Registry and every time the user opens a level it loads the transform stored in that View Bookmark. There should also an option to let the user keep the current transform of the camera when switching between levels.
This is our MVP.
Using the approach as per the last known camera level location feature, we will implement the capability of storing several View Bookmarks for the level in the Editor Settings Registry. This will become the local View Bookmarks. We will create a 'LocalViewBookmarkComponent' that stores the reference to the settings registry file in the prefab.
The next step is creating the Shared View Bookmarks. A 'SharedViewBookmarkComponent' will be created that would be part of the Root Entity of the prefab and will hold a list of View Bookmarks saved by the user. Ideally, we would use the same API used by the previous system. The Bookmarks can be stored via a context menu in the viewport. We will also allow the user to cycle between cameras. We have to make sure we display these options clearly in the UX.
We will allow the user to create tags for the View Bookmarks so it is easier to organize and access these Bookmarks from the widget. For example, the users could have a "Spawn" tag and, when they filter for that tag, only the Bookmarks that have that will be displayed.
Storing the data
This is an example of how the Bookmark data would look like stored in the prefab
and in the Settings Registry for the TestViewBookmarkLevel
What are the advantages of the feature?
This feature will improve workflows such as level design and environmental design by making them much more agile, allowing the users to edit, store and organize several camera properties of a level. It will also address several issues that are currently present in the engine.
Issues that will be addressed with this feature:
Switch Camera options are not functional #6193
Editor Camera is in a different view after exiting maximized game mode view #2917
Restore Viewport Camera on Game Mode Exit setting has no effect #2324
Camera location/rotation saves when saving level. #2074
What are the disadvantages of the feature?
If this feature breaks it will affect mostly artists and designers that might lose several or all of the View Bookmarks they have saved which could severely impact in their workflow.
This feature could potentially generate more merge conflicts if different users save different Bookmarks in the prefab which could also lead to duplicate data or having very similar View Bookmarks saved into the same prefab. This issue should be mitigated by having a Bookmark picking widget that allows the user to select which Bookmarks should be local and which should be shared.
How will this be implemented or integrated into the O3DE environment?
The main part would be implementing this
ViewBookmarkSystemComponent
.Are there any alternatives to this feature?
As mentioned before, we currently have the "Viewport Camera Selector" but this is a feature wasn't meant to be utilized in this context and users are just using it due to not having a proper feature for these kind of workflows.
How will users learn this feature?
Are there any open questions?
Changelog
[2020/02/03] - Renamed Camera Bookmark RFC to View Bookmark RFC to clarify feature scope.
[2020/03/07] - Updated with new data from investigating the issue.