Managing content items in an augmented reality environment
Virtual containers in virtual reality systems address inefficiencies by enabling independent, context-responsive virtual objects, enhancing usability and security, and optimizing resource use.
Patent Information
- Application Number
- JP2023507458
- Authority / Receiving Office
- JP · JP
- Patent Type
- Patents
- Current Assignee / Owner
- Priority Date
- 2020-08-31
- Filing Date
- 2021-07-31
- Publication Date
- 2025-08-19
- Estimated Expiration
- 2041-07-31
AI Technical Summary
Existing virtual reality systems rely on app-focused paradigms that mimic traditional user experiences, leading to inefficient resource usage, limited flexibility, and inadequate object organization and interaction, while failing to provide a realistic user experience and secure context factor distribution.
The implementation of virtual containers (augmentations) as fundamental objects in virtual reality environments, which exist independently of their creators, allowing context-responsive display modes and logic, enabling more realistic interactions and efficient resource use.
Virtual containers enhance usability, flexibility, and security by allowing virtual objects to interact like real-world objects, conserving processing resources, and providing secure context factor distribution without additional coordination layers.
Smart Images

Figure 0007725567000001 
Figure 0007725567000002 
Figure 0007725567000003
Abstract
Description
[Technical Field]
[0001] CROSS-REFERENCE TO RELATED APPLICATIONS This application is related to U.S. Patent Application No. 17 / 008,478, entitled "ARTIFICIAL REALITY AUGMENTS AND SURFACES," filed August 31, 2020, and is incorporated herein in its entirety.
[0002] The present disclosure is directed to new modes of control and interaction with virtual reality, with augmentations as fundamental objects. [Background technology]
[0003] Interaction with a computing system is often based on a set of core concepts that define how a user can interact with that computing system. For example, early operating systems provided a text interface for interacting with a file directory. This was later further developed with the addition of a "windowing" system, in which levels within a file directory and running applications were displayed in multiple windows, each assigned a portion of a 2D display populated with content selected for that window (e.g., all files from the same level within the directory, graphical user interfaces generated by applications, menus or controls for the operating system, etc.). As computing form factors decreased in size and integrated hardware features were added (e.g., cameras, GPS, wireless antennas, etc.), the core concepts evolved again, moving toward a focus on "apps," where each app encapsulated functionality of the computing system.
[0004] Existing virtual reality (XR) systems provide models, such as 3D virtual objects and 2D panels, with which users can interact in a 3D space. Existing XR systems have generally supported these models by extending the concept of app-core computing. For example, a user can instantiate these models by launching an app, instructing the app to create a model, and using the model as an interface back to the app. This approach generally requires simulating the types of interactions traditionally performed on mobile devices in a virtual space and requires the app for the model to run continuously and persist within the virtual reality environment. Summary of the Invention
[0005] According to the present invention, there is provided a method for generating a virtual container for a virtual reality environment, the method comprising: receiving a request for a virtual container, the request being associated with a manifest specifying one or more parameters of the virtual container; creating a data structure for the virtual container by performing a first part of an initialization procedure for the data structure including setting one or more properties based on the parameters specified in the manifest, the virtual container including a context-responsive display mode and context-responsive logic; and creating, in response to the request, a data structure enabling positioning of the virtual container in the virtual reality environment. to providing a handle; and performing a second portion of an initialization procedure, the second portion of the initialization procedure being performed while the handle is being used to position the virtual container in the artificial reality environment.
[0006] Optionally, the virtual container receives one or more context factors following an initialization procedure.
[0007] Optionally, the virtual container enables one of the context responsive display modes in response to evaluating a corresponding condition taking one or more context factors, or alternatively, optionally, the virtual container invokes at least a portion of the context responsive logic in response to evaluating a corresponding condition taking one or more context factors.
[0008] Optionally, the handle further enables adding content items to the virtual container.
[0009] Optionally, one or more content items are added to the virtual container using the handle while the second part of the initialization procedure is being performed.
[0010] A second part of the initialization procedure may optionally include registering the virtual container to receive context factors.
[0011] A second part of the initialization procedure may alternatively or additionally include identifying context factors that the virtual container should receive by determining which context factors are to be used in conditions corresponding to one or more of the context response display modes or portions of the context response logic, and registering the virtual container to receive the identified context factors.
[0012] Optionally, the parameters of the virtual container specified in the manifest include at least one of a context-responsive display mode, and optionally one or more of a virtual container type, a container shape, a spatial orientation, a location in the artificial reality environment, a location type suitable for placing the virtual container, or any combination thereof. For example, a display mode specified by the manifest may include one or more context factor values that must occur to enable the display mode, such as the type of surface on which the virtual container may be placed in that display mode, whether the virtual container is movable, a volume for audio presentation, a title, an ID, a virtual container type, an owner of the virtual container, an initial location of the virtual container, etc.
[0013] Optionally, parameters are specified for the virtual container in different display modes or contexts. Optionally, the specified parameters may include context factors that the virtual container needs to be informed about in order to enable a display mode or invoke logic.
[0014] Optionally, default and / or inherited properties and / or logic may be specified for virtual containers. For example, all virtual containers may be specified to have certain display modes corresponding to artificial reality system modes (e.g., audio-only, minimized, interactive). Optionally, display modes specified in the manifest may augment these default display modes, optionally allowing the default display modes to set constraints on the augmented display modes. Examples of contextual factors for which various display mode conditions may be specified include surface features, relationships with other real or virtual objects, movement characteristics, lighting, time, date, user interaction, detected sounds, artificial reality system modes, etc. Examples of predefined virtual container types may include a person, a 2D object, a 3D object, a post, an event, or a freeform.
[0015] Optionally, the virtual container type may correspond to a type of node in the social graph.
[0016] Optionally, a virtual container of a particular type may have defaults for that type, such as default properties, logic, and / or automatically added content items, etc. For example, a "posts" virtual container may have predefined visual structure, controls, and content that is automatically added based on the node in the social graph that corresponds to the post.
[0017] Optionally, the virtual reality system provides the virtual container as a volume having properties specified in the manifest, for the user to place within the virtual reality environment.
[0018] Optionally, a virtual container is a volume in three-dimensional space that can be filled with content and / or output presentation data. Optionally, a virtual container can hold data, respond to a current virtual container context, and / or have logic.
[0019] Optionally, the request may be generated as a result of a user performing an interaction with a content item that is in another previously created virtual container and associated with another manifest, and optionally the interaction was previously defined to signal the creation of a new virtual container based on the content item.
[0020] Optionally, the request may further be associated with an indication of the user's gaze direction.
[0021] The virtual container may optionally be initially placed within the virtual reality environment based on the user's line of sight.
[0022] Optionally, activation of one of the context-responsive display modes causes the virtual container to be set to its maximum size and moved to a specific location corresponding to the current mode of the virtual reality system.
[0023] Optionally, the virtual container receives a context factor specifying a value for the current mode of the virtual reality system.
[0024] Optionally, one of the context responsive display modes corresponds to a condition that evaluates to true when provided with the value of the current mode of the virtual reality system.
[0025] Optionally, the virtual container enables one of the context responsive display modes in response to the corresponding condition evaluating to true.
[0026] Optionally, one or more of the expanded context responsive display modes are expansions of other of the context responsive display modes.
[0027] Optionally, each of the one or more expanded context responsive display modes points to another of the context responsive display modes.
[0028] Optionally, the condition for enabling a particular expanded context responsive display mode is that a condition associated with a context responsive display mode referenced by the particular expanded context responsive display mode evaluates to true.
[0029] Optionally, at least one of the context response display modes is added to the data structure by creating a data structure for one of the predefined types of virtual containers specified in the request.
[0030] Optionally, each data structure of the predefined type is configured to include at least one of the context responsive display modes.
[0031] Optionally, a data structure is created for the type of virtual container specified in the request.
[0032] Optionally, default, type-based, and / or other values separate from the manifest can be set in the virtual container data structure.
[0033] Optionally, the method further comprises automatically adding one or more content items to the virtual container based on predefined rules for adding content items to a virtual container of a specified type.
[0034] According to the present invention, there is further provided a computing system for generating a virtual container for an artificial reality environment, the system comprising one or more processors and one or more memories storing instructions that, when executed by the one or more processors, cause the computing system to perform a process, the process including receiving a request for a virtual container, the request being associated with a manifest that specifies one or more parameters of the virtual container; creating a data structure for the virtual container by performing a first part of an initialization procedure for the data structure based on the manifest; in response to the request, providing a handle to the data structure that enables adding content items to the virtual container; and performing a second part of the initialization procedure, the second part of the initialization procedure being performed while the handle is used to add one or more content items to the virtual container.
[0035] Optionally, the initialization procedure includes setting properties in a data structure based on the manifest.
[0036] Optionally, the properties include at least a context-responsive display mode and one or both of a container shape and a suitable location type for placing the virtual container.
[0037] Optionally, the virtual container includes predefined types that the manifest corresponds to, including defaults. For example, the virtual container may have types of people, 2D media, posts, events, or 3D models, and the manifest may have default layouts and content corresponding to these types.
[0038] Optionally, the request was generated as a result of a user performing an interaction with a content item that is in another previously created virtual container and associated with another manifest, Optionally, the interaction was previously established to signal the creation of a new virtual container based on the content item.
[0039] Optionally, the virtual container receives a context factor specifying a value of a current mode of the artificial reality system. Optionally, the context responsive display mode included in the data structure corresponds to a condition that evaluates to true when provided with the value of the current mode of the artificial reality system. Optionally, the virtual container enables the context responsive display mode in response to the corresponding condition evaluating to true.
[0040] Optionally, a data structure is created for a type of virtual container specified in the request, and optionally the process further includes automatically adding one or more content items to the virtual container based on rules for adding content items to virtual containers of the specified type.
[0041] Optionally, the system comprises at least one mediator configured to mediate resources between the computer system hardware and the specialized component. Optionally, the computer system hardware may comprise one or more processors and one or more memories.
[0042] Optionally, the mediator may comprise an operating system, services, drivers, a basic input / output system (BIOS), controller circuitry, and / or other hardware and / or software systems.
[0043] Optionally, the specialized components may include software and / or hardware configured to perform operations for creating and managing virtual containers and surfaces in the virtual reality environment. The specialized components may optionally comprise at least one of a virtual container creator, a context tracker, a context factor registry, a surface creator, and / or components and APIs. Optionally, the components and / or APIs may be used to provide a user interface, transfer data, and / or control the specialized components.
[0044] Optionally, the specialized components may be in a computing system distributed across multiple computing devices. Optionally, the computing system may interface to a server-based application that executes one or more of the specialized components.
[0045] A specialized component may be a logical or other non-physical distinction of function and / or may be a sub-module or code block of one or more applications.
[0046] Optionally, a virtual container creator can receive a new virtual container request associated with a manifest that the virtual container creator uses to create a new virtual container data structure. Optionally, the virtual container data structure includes properties and functions ("logic").
[0047] Optionally, the virtual container data structure properties may include properties such as the ID of the virtual container, the location of the virtual container, the type of virtual container, the current display mode, the ID associated with the parent virtual container, etc. Optionally, the virtual container data structure functions may include functions for adding and removing content, setting the location, setting the display mode, etc. Other properties and functions may be included in the virtual container data structure, and the properties and functions may be defined in different ways. Optionally, the virtual container data structure may include implicitly defined functions. Optionally, the virtual container data structure may include declarative logic.
[0048] By providing the user with a handle to the virtual container data structure, the user can manipulate / interact with the virtual container, for example, by filling the virtual container with content items, placing the virtual container within a synthetic reality environment, setting parameters, etc.
[0049] A handle to the virtual container data structure is provided to the user before the virtual container is fully initialized (i.e., the first part of the initialization procedure). This allows for simultaneous initial virtual container manipulation (e.g., filling and / or placement) by the user before the virtual container is fully formed while the artificial reality system completes its initialization. For example, while the user is manipulating the virtual container, the virtual container creator can simultaneously complete initialization by registering the virtual container to receive context factors required by the virtual container's logic and / or display mode, for example, to determine whether to execute logic or enable a display mode.
[0050] Optionally, the virtual container request is sent to the virtual reality system shell with a virtual container manifest. Optionally, the shell creates the virtual container based on the manifest and returns a handle to the user. Optionally, the user may then write content to the virtual container before the virtual container is fully formed or fully initialized (including, for example, writing different versions for different display properties specified in the manifest). For example, the virtual container may have default or type-specific content still being written by the virtual reality system shell, may not yet be registered for context factor notification, or may have other initialization procedures not yet completed when the handle is provided. Such additional parts of the virtual container initialization can be completed while the user is using the provided handle. This offers the advantage that the placement and content filling of the virtual container can be performed simultaneously with the initialization procedures, providing considerable efficiency.
[0051] Optionally, the shell maintains control over where the virtual containers can be displayed, and optionally what display properties are invoked for the virtual containers, according to properties specified in the manifest. For example, the manifest may specify allowed positions and display properties, such as that when the artificial reality system enters a non-disturbing mode, all of the virtual containers can be placed in a minimized mode and moved out of the user's center of view. This system offers the advantage that a virtual container can be instantiated by the shell or another virtual container, but continue to exist independently.
[0052] Optionally, the process may register the virtual container for context factor notification, which may include assigning a virtual container identifier to each context factor on a list of context factors for which the virtual container is registered. The context factors for which the virtual container is registered may be selected based on a context specified in the manifest or may be selected based on other parameters set for the virtual container. For example, the process may analyze display modes defined for the virtual container to determine which context factors must be checked to determine whether to enable each display mode, and the process may further register the virtual container to be notified of changes to any of these context factors.
[0053] Optionally, additional initialization of the virtual container is performed, for example, the shell may add content items of the specified virtual container type to the virtual container.
[0054] Optionally, the process performs a virtual container placement procedure. Optionally, an initial virtual container placement is set before a handle is provided to the user for the user to update the placement. The placement procedure optionally includes setting a default location or a location specified in the request, such as a location based on the user's focus area, the same surface on which the requesting virtual container is attached, or a location relative to a requesting entity such as a surface defined for the user's hand or face associated with the request.
[0055] The placement procedure optionally includes making the virtual container invisible until the user selects a location. Optionally, when the user manually selects a placement location, the virtual reality system highlights valid locations for the virtual container's current display mode. For example, if the virtual container's current display mode specifies that the virtual container should be placed on a vertical surface, a surface established on a wall of the virtual reality environment may be highlighted as a visual indicator to the user so that the user knows where the virtual container can be placed.
[0056] According to the present invention, there is further provided a computer-readable storage medium storing instructions that, when executed by a computing system, cause the computing system to perform a process for providing context factors to virtual containers in a synthetic reality environment, the process including identifying a change or establishment of one or more context factors; identifying one or more virtual containers registered to receive notification of the change or establishment of the one or more context factors; and, in response to identifying the registered one or more virtual containers, providing notification regarding the one or more context factors to the registered one or more virtual containers, wherein providing the notification causes at least one of the one or more virtual containers to invoke corresponding logic or enable a corresponding display mode.
[0057] The disclosed technology may include or be implemented in conjunction with a virtual reality system as described. As used herein, "virtual reality," "extra reality," or "XR" refers to either VR, AR, MR, or any combination or hybrid thereof.
[0058] The systems and methods presented herein have several technical advantages over existing XR systems that provide an app-focused paradigm for presenting and interacting with virtual objects. However, these artificial reality systems offer limited functionality by simply mimicking a traditional user experience that uses "apps" and / or "windows" to oversee object presentation, functionality, placement, and interaction. By relying on app constructs designed for desktop computing and mobile device interaction, these existing systems prevent the user experience from being centered on people and objects. For example, by requiring users to pull up windows or app interfaces to create and modify objects, users lose the perception that the virtual objects are real.
[0059] Furthermore, existing systems' reliance on a central app to control all 3D objects the system creates wastes processing resources by constantly running unnecessary aspects of the app beyond what is necessary just to maintain the objects. This can be particularly wasteful if some of these objects are inactive. Such reliance on the original app to maintain the objects also results in the objects disappearing when the app is closed, reducing the flexibility and usability of the system.
[0060] Furthermore, if an app controls an object, the object can only react to context factors that the app is aware of. However, to maintain security, many systems may not provide context factor access to apps that cannot guarantee restrictions on sharing of those context factors.
[0061] Also, having an app as a second level of abstraction between the operating system and the object can be computationally expensive, requiring coordination to provide contextual factors to the app, which the app then passes on to the object.
[0062] Furthermore, existing systems fail to provide an adequate way to organize objects placed within a virtual reality environment and to control which objects can interact with each other.
[0063] The virtual reality systems and processes described herein, which use virtual containers (also called "augmentations") as underlying objects that exist separately from the entities that created them, overcome these problems associated with conventional virtual reality systems. In particular, the virtual reality systems and processes described herein enable more realistic interactions in virtual reality environments by eliminating the layer of interaction with application controls and allowing users to treat virtual objects more like real-world objects.
[0064] Additionally, the artificial reality system and process conserves processing resources by allowing extensions to exist independently without having to keep the application that created the extension running. Additionally, the artificial reality system and process is expected to enhance usability and flexibility by allowing individual virtual containers / augmentations to exist when the entity that created them closes.
[0065] These virtual reality systems and processes are also expected to provide greater security by directly controlling which augmentations receive context factors, while also reducing the overhead in coordinating context factor distribution by eliminating an additional layer of coordination. The virtual reality systems and processes are also expected to provide greater usability by providing a surface organization method and security by controlling information distribution through surface grouping.
[0066] In addition to providing these advantages in usability, flexibility, security, and conservation of processing resources, the virtual reality systems and processes described herein are rooted in computerized virtual reality systems and provide new core concepts specifically designed for object control and interaction in virtual reality environments.
[0067] Furthermore, while the artificial reality systems and processes described herein provide a user experience of interacting with virtual objects in a manner similar to real objects, the disclosed systems and processes are implemented with specialized data structures and interaction rules that resemble neither traditional computing interactions nor interactions with real objects.
[0068] Examples of the invention will now be described with reference to the accompanying drawings. [Brief explanation of the drawings]
[0069] [Figure 1] FIG. 1 is a block diagram illustrating an overview of a device in which some implementations of the present technology can operate. [Figure 2A] FIG. 1 is a wiring diagram illustrating a virtual reality headset that may be used in some implementations of the present technology. [Figure 2B] FIG. 1 is a wiring diagram illustrating a mixed reality headset that can be used in some implementations of the present technology. [Figure 3] FIG. 1 is a block diagram illustrating an overview of an environment in which some implementations of the present technology can operate. [Figure 4] FIG. 1 is a block diagram illustrating components that may be used in systems employing the disclosed technology in some implementations. [Figure 5] FIG. 1 is a block diagram illustrating an exemplary extension data structure used in some implementations of the present technology. [Figure 6A]FIG. 10 is a flow diagram illustrating a process used in some implementations of the present technology for a shell to respond to a request for a new extension. [Figure 6B] FIG. 1 is a flow diagram illustrating a process used in some implementations of the present technology to submit a request for a new extension to a virtual reality system shell. [Figure 7] FIG. 10 is a flow diagram illustrating a process used in some implementations of the present technology to enable extensions to respond to context by providing context factors to associated extensions. [Figure 8] FIG. 10 is a flow diagram illustrating a process used in some implementations of the present technology for an augmentation to interact with a virtual surface. [Figure 9] FIG. 10 is a flow diagram illustrating a process used in some implementations of the present technology for extensions to interact with other extensions. [Figure 10] FIG. 1 is a conceptual diagram showing an example of an extension unit in a virtual reality space controlled by a virtual reality system. [Figure 11] 3A-3C are conceptual diagrams illustrating further examples of augmentations in virtual reality space where the virtual reality system identifies virtual surfaces. [Figure 12] 3A-3C are conceptual diagrams continuing to illustrate an example of augmentations in a virtual reality space in which the virtual reality system receives a request for a new photo augmentation that is initially placed based on the user's line of sight. [Figure 13] 3A-3C are conceptual diagrams continuing to illustrate an example of an augmentation in a virtual reality space that is initially placed on a wall to provide a new, empty augmentation with additional placement visual affordances for the surface layout. [Figure 14] FIG. 10 is a conceptual diagram illustrating an example of an extension in a virtual reality space where new extensions are filled and moved to the second wall according to the available surface layout. [Figure 15] 3A-3C are conceptual diagrams continuing to illustrate an example of an augmentation in a virtual reality space where the augmentation is moved onto a horizontal surface and selects different display modes depending on corresponding placement context factors. [Figure 16]10A-10C are conceptual diagrams illustrating a further example of an extension in a virtual reality space selecting a different display mode in response to the extension being moved back onto a vertical wall surface with a second extension. [Figure 17] 3A-3C are conceptual diagrams illustrating further examples of augmentations in a virtual reality space, where the augmentation and a second augmentation select different display modes in response to receiving social graph context factors registered with the virtual reality system. [Figure 18] 3 is a conceptual diagram continuing to illustrate an example of augmentations in a virtual reality space, where the virtual reality system creates new augmentations in response to a user drawing generative elements from existing augmentations. [Figure 19] 3 is a conceptual diagram continuing to illustrate an example of augmentations in a virtual reality space, where the virtual reality system creates new augmentations in response to a user drawing generative elements from existing augmentations. DETAILED DESCRIPTION OF THE INVENTION
[0070] The technology introduced herein may be better understood by reference to the following detailed description, taken in conjunction with the accompanying drawings, where like reference numbers indicate identical or functionally similar elements and in which:
[0071] Aspects of the present disclosure are directed to a virtual reality system that provides a virtual reality environment with augmentations and surfaces. An "augmentation," also referred to herein as a "virtual container," is a 2D or 3D volume in the virtual reality environment that may contain presentation data, context, and logic. The virtual reality system can use augmentations as fundamental building blocks for displaying 2D and 3D content within the virtual reality environment. For example, an augmentation can represent people, places, and objects within the virtual reality environment and can respond to context, such as the current display mode, date or time, the type of surface the augmentation is on, and its relationship to other augmentations. A controller within the virtual reality system, sometimes referred to as a "shell," can control how virtual reality environment information is surfaced to the user, what interactions can be performed, and what interactions are provided to applications. The augmentations can continue to exist on the "surface" with contextual properties and layouts that cause the augmentations to be presented or interact with differently. Augments and other objects (real or virtual) can also interact with each other; these interactions can be mediated by the shell and controlled by rules within the augmentation evaluated based on contextual information from the shell.
[0072] An augmentation can be created by requesting the augmentation from the virtual reality system shell, with the request supplying a manifest that specifies the augmentation's initial properties. The manifest can specify parameters such as the augmentation title, the augmentation type, the augmentation's display properties (e.g., size, orientation, location, preferred location type) in different display modes or contexts, and contextual factors that the augmentation needs to be notified about to enable a display mode or invoke logic. The virtual reality system can supply the augmentation as a volume with the properties specified in the manifest for the requester to place in the virtual reality environment and write presentation data within the virtual reality environment. Further details regarding augmentation creation are provided below in conjunction with Figures 6A and 6B.
[0073] Extension "presentation data" may include anything that can be output by an extension, including visual presentation data, auditory presentation data, tactile presentation data, etc. In some implementations, presentation data can "exist" so that it matches external data by pointing to that external data or being a copy of it that is periodically updated. Presentation data can also be shared so that changes to the external data by another user or system can be propagated to the extension's output. For example, an extension can display live services and data while accepting interactions from a user or other extensions. As a more specific example, a user may select a photo shared on a social media platform to add as presentation data to an extension positioned on their wall. The owner of the post may modify the photo, and the modified version may be shown in the extension. Additional live social media content related to the photo may also be in the extension presentation data, such as an indication of "likes" or comments on the photo. The owner of the photo may also change access rights to prevent the photo from appearing in the extension.
[0074] The augmentation can track the current context based on context factors signaled to the augmentation by the virtual reality system. Context can include various context factors, such as the current mode of the virtual reality system (e.g., interactive mode, minimized mode, audio-only mode, etc.), other objects (real or virtual) in the virtual reality environment or within a threshold distance of the augmentation, characteristics of the current user, social graph elements associated with the current user and / or virtual reality environment objects, virtual reality environment conditions (e.g., time, date, lighting, temperature, weather, graphical mapping data), surface properties, movement characteristics of the augmentation or other objects, sounds, user commands, etc. As used herein, an "object" can be a real or virtual object, and can be an inanimate or animate object (e.g., a user). Context factors can be identified by the virtual reality system and signaled to the associated augmentation. Some context factors (e.g., the current virtual reality system mode) can be automatically provided to all augmentations. Other context factors can be registered to be delivered to a particular augmentation (e.g., at creation time, via a manifest, or via a subsequent context factor registration call). An extension may have variables that hold context factors for which the extension has logic. All extensions may inherit some of these variables from a base extension class, some of these variables may be defined in an extension class extension (e.g., various pre-established extension types), or some of these variables may be added to individual extensions at extension creation time (e.g., using a manifest) or via later declaration. In some cases, certain context factors may be tracked by the artificial reality system, allowing the artificial reality system to check extensions without having to push data to individual extensions. For example, the artificial reality system may maintain a time / date global variable that extensions can access without the artificial reality system constantly pushing the value of that variable to the extensions.
[0075] Extension logic (defined declaratively or implicitly) can cause the extension to modify its presentation data, properties, or perform other actions in response to context factors. Similar to variables that hold context factors, extension logic can be specified within a base class, an extension of a base class for an extension type, or individually for the extension (e.g., in a manifest). For example, every extension may be defined to have logic to redraw itself for different display modes, and the extension may be provided with different sized or shaped volumes to write to for different modes. As a further example, every extension of type "person" may have logic to provide notifications of posts by or incoming messages from that person. As yet another example, a particular extension may be configured with logic that responds to an area_type context factor for which the extension is registered to receive updates; the extension responds to that context factor having an "outside" value by checking whether the time context factor indicates a time between 6:00 a.m. and 7:00 p.m., and if so, switching to a darker display mode.
[0076] Further details regarding extension structure, such as presentation data, properties, and functions, are provided below in conjunction with Figures 5, 6A, and 6B. Further details regarding providing contextual factors to an extension and having the extension invoke corresponding display modes and / or logic are provided below in conjunction with Figures 5 and 7.
[0077] In some implementations, extensions exist independently of the extension that created them. Thus, child extensions do not necessarily close when a parent extension closes. However, such hierarchical functionality can be implemented, for example, if a child extension registers to receive context factors about the state of its parent extension and has logic to close itself upon receiving a signal that the parent extension is being closed.
[0078] Augments can be located within a virtual reality environment by being attached to a surface. A "surface" can be a point, a 2D area, or a 3D volume to which one or more augmentations can be attached. A surface can be world-locked or positioned relative to a user or other objects. A surface can be defined by a shape, a position, and possibly an orientation. In some implementations, a surface can have a specified type, such as a point, a wall (e.g., a vertical 2D area), a floor or counter (e.g., a horizontal 2D area), a surface, a volume, etc. Surfaces can be created in various contexts, such as a composite surface, a semantic surface, or a geometric surface.
[0079] Synthetic surfaces may be generated without the use of object recognition or room mapping. Examples of synthetic surfaces include bubbles (e.g., body-locked surfaces that are positioned relative to a user as the user moves through the artificial reality environment regardless of real-world objects), device-attached surfaces (e.g., artificial reality systems may include controllers, external processing elements, etc. that periodically update their position relative to the artificial reality system, allowing the surface to be positioned relative to the device), and floating surfaces (e.g., world-locked surfaces that have a specified location relative to the position of the artificial reality system, but that are adjusted to appear fixed when movement of the artificial reality system is detected, and thus are positioned without requiring any understanding of the physical world other than the movement of the artificial reality system).
[0080] Semantic surfaces can be positioned based on recognized objects (real or virtual), such as faces, hands, chairs, refrigerators, tables, etc. Semantic surfaces can be world-locked, adjusting their display in the field of view so that they appear at a constant relative position to the recognized object. Semantic surfaces can be shaped to fit the recognized object, or have other surface shapes positioned relative to the recognized object.
[0081] A geometric surface can be mapped to a structure in the world, such as a portion of a wall or floor, or can specify a single point in space. While a geometric surface can be a type of semantic surface, in other cases, a geometric surface may exist independently of ongoing object recognition because it is unlikely to be repositioned. For example, a portion of a wall may be mapped using a simultaneous localization and mapping (SLAM) system. Such a surface can then be used by the same or other virtual reality systems by determining their position within the map without the need to actively determine other object locations. Examples of geometric surfaces may include points, 2D regions (e.g., portions of a floor, counter, wall, door, window, etc.), or volumes relative to a structure (e.g., a cuboid, sphere, etc. positioned relative to a floor, wall, interior of a room, etc.).
[0082] In various implementations, surfaces may be created manually, semi-automatically, or automatically. Manual surface creation allows a user to explicitly define a surface, for example, by tracing a portion of a wall, placing a hand or controller on a flat surface, indicating the center point and radius of the surface, etc. Automatic surface creation may include identifying objects of a particular type (e.g., a face, a table) or with particular characteristics (e.g., a flat surface of a threshold size, a 2D surface with which the user has interacted a threshold amount, etc.). In some implementations, automatic surface creation may be aided by a machine learning model trained to identify surfaces (e.g., using user corrections to manually or automatically identified surfaces as training data). Semi-automatic surface creation may include automatically detecting surfaces that are suggested to the user for verification and / or modification.
[0083] In some implementations, a surface may have a designated layout that controls where extensions added to the surface may be placed. The layout assigned to a surface may be selected by a user or applied automatically (e.g., based on mapping surface characteristics such as size and shape to the layout). Layouts may be static (specifying specific locations within the layout where extensions may be placed) or dynamic (slots for extensions adjust depending on the size, number, type, etc., of extensions placed on the surface). Examples of layouts include a list layout, in which extensions are evenly spaced in horizontal lines; a stack layout, in which extensions are evenly spaced in vertical lines; a grid layout, which uses a defined grid to place extensions (which may be dynamic by specifying the x-, y-, and / or z-count of the grid based on the number of extensions on the surface); and a freeform layout, in which extensions remain where they were originally placed.
[0084] Once a surface is created, extensions may be added to it. In some cases, an extension may be automatically attached to a surface by, for example, creating the extension on the same surface as the extension that requested the creation of the new extension, or by attaching the extension to a surface that the user is focusing on. In other cases, an extension may have logic or a display mode that specifies the surface or surface type to which the extension should be attached (e.g., in response to various contextual factors). In other cases, an extension may be manually attached to a surface, for example, by a user selecting an extension and indicating to the virtual reality system that the extension should be attached to the surface. An extension may be manually placed into a particular slot in the surface's layout, or may be placed on the surface, allowing the surface to place the extension into the layout slot (e.g., by selecting the next slot in an order defined for the layout slots, selecting a slot based on where the extension was placed on the surface, selecting a slot that best fits the extension, combining or resizing slots to accommodate the extension, etc.). When an extension is attached to a surface, corresponding contextual factors may be provided to the extension or other extensions on the surface, such as the properties of the surface (e.g., type, orientation, shape, size), the number or details of other extensions on the surface, layout locations assigned to the extension, etc. Details of creating a surface, layout configuration, and adding extensions to a surface are provided below in connection with FIG.
[0085] In some implementations, extensions can interact with each other, for example, by having defined logic that takes parameters of context factors defined by the properties of other extensions. Extensions can register with the artificial reality system to receive context factors that specify the properties of other extensions (e.g., position, size, content defined by metadata tags, etc.). In various implementations, extensions can control which other extensions have permission to access various properties of their extensions. In some cases, for an extension to register to receive properties of other extensions, a specific relationship must exist between the extensions, such as one extension being an ancestor of the other, the extensions being attached to the same surface, or explicit user interaction that associates the extensions (e.g., dragging one extension over the other). In some implementations, registration of extensions to receive other extension properties occurs in the artificial reality system, such that the artificial reality system mediates and provides property sharing by identifying changes in context factors that the extensions can share. In other implementations, such registration can occur with the extensions, allowing extensions to pull / push properties from each other. Extensions can have defined logic for reacting to properties of other extensions. In some implementations, this logic can be defined for a particular extension or for a type of extension. For example, all "person" extensions can be defined to perform a specific action when placed near another person extension whose social graph defines a "friend" relationship between the people covered by the extension. Further details regarding interactions between extensions are provided below in connection with FIG. 9.
[0086] Embodiments of the disclosed technology may include or be implemented in conjunction with a virtual reality system. Virtual reality or added reality (XR) is a form of reality that is adjusted in some way before being presented to a user and may include, for example, virtual reality (VR), augmented reality (AR), mixed reality (MR), hybrid reality, or any combination and / or derivative thereof. Virtual reality content may include fully generated content or generated content combined with captured content (e.g., photographs of the real world). Virtual reality content may include video, audio, haptic feedback, or any combination thereof, any of which may be presented in a single channel or multiple channels (e.g., stereo video to create a three-dimensional effect for the viewer). Furthermore, in some embodiments, the virtual reality may be associated with, for example, applications, products, accessories, services, or some combination thereof, used to create content and / or used (e.g., performing activities) within the virtual reality. Virtual reality systems that provide virtual reality content may be implemented on a variety of platforms, including head-mounted displays (HMDs) connected to a host computer system, standalone HMDs, mobile devices or computing systems, "cave" environments or other projection systems, or any other hardware platform capable of providing virtual reality content to one or more viewers.
[0087] As used herein, "virtual reality" or "VR" refers to an immersive experience in which a user's visual input is controlled by a computing system. "Augmented reality" or "AR" refers to a system in which a user sees an image of the real world after passing through the computing system. For example, a tablet with a camera on its back can capture an image of the real world and then display the image on the tablet's screen opposite the camera. The tablet can process and adjust or "augment" the image as it passes through the system, such as by adding virtual objects. "Mixed reality" or "MR" refers to a system in which light entering the user's eye is partially generated by a computing system and partially assembled from light reflected from real-world objects. For example, an MR headset can be shaped as glasses with a see-through display, allowing light from the real world to pass through a waveguide through which light is simultaneously emitted from a projector within the MR headset, allowing the MR headset to present virtual objects mixed with real objects that the user can see. As used herein, "artificial reality," "extra reality," or "XR" refers to any of VR, AR, MR, or any combination or hybrid thereof.
[0088] Some implementations are discussed in more detail below with reference to the drawings. FIG. 1 is a block diagram illustrating an overview of a device in which some implementations of the disclosed technology can operate. The device may comprise the hardware components of a computing system 100 that provides a virtual reality environment with augmentations and surfaces. In various implementations, the computing system 100 may include a single computing device 103 or multiple computing devices (e.g., computing device 101, computing device 102, and computing device 103) that communicate via wired or wireless channels to distribute processing and share input data. In some implementations, the computing system 100 may include a standalone headset that can provide a computer-generated or augmented experience to a user without the need for external processing or sensors. In other implementations, the computing system 100 may include multiple computing devices, such as a headset and a core processing component (such as a console, mobile device, or server system), where some processing operations are performed on the headset and other processing operations are offloaded to the core processing component. An exemplary headset is described below in connection with FIGS. 2A and 2B. In some implementations, location and environmental data may be collected solely by sensors built into the headset device, while in other implementations, one or more non-headset computing devices may include sensor components capable of tracking environmental or location data.
[0089] Computing system 100 may include one or more processors 110 (e.g., a central processing unit (CPU), a graphics processing unit (GPU), a holographic processing unit (HPU), etc.). Processor 110 may be a single processing unit or multiple processing units within a device, or may be distributed across multiple devices (e.g., distributed across two or more computing devices 101-103).
[0090] Computing system 100 may include one or more input devices 120 that provide input to and communicate actions to processor 110. Actions may be mediated by a hardware controller that interprets signals received from the input devices and communicates the information to processor 110 using a communication protocol. Each input device 120 may include, for example, a mouse, keyboard, touchscreen, touchpad, wearable input device (e.g., haptic gloves, bracelets, rings, earrings, necklaces, watches, etc.), camera (or other light-based input device, e.g., infrared sensor), microphone, or other user input device.
[0091] The processor 110 may be coupled to other hardware devices using an internal or external bus, such as a PCI bus, a SCSI bus, or a wireless connection. The processor 110 may communicate with hardware controllers for devices such as a display 130. The display 130 may be used to display text and graphics. In some implementations, the display 130 includes an input device as part of the display, such as when the input device is a touchscreen or equipped with a line-of-sight monitoring system. In some implementations, the display is separate from the input device. Examples of display devices include an LCD display screen, an LED display screen, a projected, holographic, or augmented reality display (such as a head-up display device or a head-mounted device), etc. Other I / O devices 140, such as a network chip or card, a video chip or card, an audio chip or card, a USB, Firewire, or other external device, a camera, a printer, a speaker, a CD-ROM drive, a DVD drive, a disk drive, etc., may also be coupled to the processor.
[0092] Computing system 100 may include communication devices capable of wireless or wired communication with other local computing devices or network nodes. The communication devices may communicate with other devices or servers over a network using, for example, the TCP / IP protocol. Computing system 100 may utilize the communication devices to distribute operations across multiple network devices.
[0093] The processor 110 may have access to memory 150, which may be contained within one of the computing devices of the computing system 100 or distributed across multiple computing devices of the computing system 100 or other external devices. Memory may include one or more hardware devices for volatile or non-volatile storage and may include both read-only and writable memory. For example, memory may include one or more of random access memory (RAM), various caches, CPU registers, read-only memory (ROM), and writable non-volatile memory such as flash memory, hard drives, floppy disks, CDs, DVDs, magnetic storage devices, and tape drives. Memory is not a propagated signal separate from the underlying hardware; therefore, memory is non-transitory. Memory 150 may include program memory 160, which stores programs and software such as an operating system 162, a virtual reality system 164, and other application programs 166. Memory 150 may also include data memory 170, which may include augmentation data structures, surface data structures, augmentation context factor registers, artificial reality environment information, other augmentation and / or surface support data, social graph data, configuration data, settings, user options or preferences, etc., which may be provided to program memory 160 or any element of computing system 100.
[0094] Some implementations may be operational with numerous other computing system environments or configurations. Examples of computing systems, environments, and / or configurations that may be suitable for use with the present technology include, but are not limited to, XR headsets, personal computers, server computers, handheld or laptop devices, mobile phones, wearable electronics, game consoles, tablet devices, multiprocessor systems, microprocessor-based systems, set-top boxes, programmable consumer electronics, network PCs, minicomputers, mainframe computers, or distributed computing environments that include any of the above systems or devices.
[0095] 2A is a wiring diagram of a virtual reality head-mounted display (HMD) 200, according to some embodiments. The HMD 200 comprises a front rigid body 205 and a band 210. The front rigid body 205 includes one or more electronic display elements of an electronic display 245, an inertial motion unit (IMU) 215, one or more position sensors 220, a locator 225, and one or more computational units 230. The position sensors 220, the IMU 215, and the computational units 230 may be internal to the HMD 200 and may be invisible to the user. In various implementations, the IMU 215, the position sensors 220, and the locator 225 can track the movement and location of the HMD 200 in the real world and virtual environments with three degrees of freedom (3DoF) or six degrees of freedom (6DoF). For example, the locator 225 can emit an infrared light beam that creates a light spot on real objects around the HMD 200. One or more cameras (not shown) integrated with the HMD 200 can detect light points that can be used by a computation unit 230 in the HMD 200 to estimate the position and movement of the HMD 200 and to identify the shape and position of real objects surrounding the HMD 200.
[0096] Electronic display 245 may be integrated with front rigid body 205 and may provide image light to the user as commanded by computing unit 230. In various embodiments, electronic display 245 may be a single electronic display or multiple electronic displays (e.g., one for each user's eye). Examples of electronic display 245 include a liquid crystal display (LCD), an organic light emitting diode (OLED) display, an active matrix organic light emitting diode display (AMOLED), a display including one or more quantum dot light emitting diode (QOLED) subpixels, a projector unit (e.g., micro LED, laser, etc.), some other display, or some combination thereof.
[0097] In some implementations, the HMD 200 may be coupled to a core processing component, such as a personal computer (PC) (not shown) and / or one or more external sensors (not shown), which, in combination with output from the IMU 215 and position sensor 220, may be used by the PC to monitor the HMD 200 (e.g., via light emitted from the HMD 200) to determine the position and movement of the HMD 200.
[0098] In some implementations, the HMD 200 can communicate with one or more other external devices, such as controllers (not shown) that the user can hold in one or both hands. The controllers may have their own IMU units, position sensors, and / or emit additional light points. The HMD 200 or external sensors can track these controller light points. A computing unit 230 in the HMD 200 or core processing component can use this tracking, in combination with the IMU and position output, to monitor the position and movement of the user's hands. The controllers may also include various buttons that the user can activate to provide input and interact with virtual objects. In various implementations, the HMD 200 may also include additional subsystems, such as an eye-tracking unit, an audio system, and various network components. In some implementations, instead of or in addition to the controllers, one or more cameras included in or external to the HMD 200 may monitor the position and pose of the user's hands to determine gestures and other hand and body movements.
[0099] 2B is a wiring diagram of a mixed reality HMD system 250, including a mixed reality HMD 252 and a core processing component 254. The mixed reality HMD 252 and the core processing component 254 can communicate via a wireless connection (e.g., a 60 GHz link), as shown by link 256. In other implementations, the mixed reality system 250 includes only a headset without an external computing device, or includes other wired or wireless connections between the mixed reality HMD 252 and the core processing component 254. The mixed reality HMD 252 includes a see-through display 258 and a frame 260. The frame 260 may house various electronic components (not shown), such as a light projector (e.g., laser, LED, etc.), a camera, an eye-tracking sensor, MEMS components, networking components, etc.
[0100] The projector can be coupled to a transmissive display 258, for example, via optical elements, to display media to a user. The optical elements can include one or more waveguide assemblies, reflectors, lenses, mirrors, collimators, gratings, etc., to direct light from the projector to the user's eyes. Image data can be transmitted from the core processing component 254 to the HMD 252 via link 256. A controller within the HMD 252 can convert the image data into light pulses from the projector, which can be transmitted via optical elements to the user's eyes as output light. The output light can mix with light transmitted through the display 258, allowing the output light to present virtual objects that appear to exist in the real world.
[0101] Similar to HMD 200, HMD system 250 may also include motion and position tracking units, cameras, light sources, etc., which enable HMD system 250 to, for example, track itself with 3DoF or 6DoF, track parts of the user (e.g., hands, feet, head, or other body parts), map virtual objects so that they appear stationary as HMD 252 moves, and make virtual objects responsive to gestures and other real-world objects.
[0102] 3 is a block diagram illustrating an overview of an environment 300 in which some implementations of the disclosed technology can operate. The environment 300 may include one or more client computing devices 305A-305D, examples of which may include computing system 100. In some implementations, some of the client computing devices (e.g., client computing device 305B) may be HMD 200 or HMD system 250. The client computing device 305 may operate in a networked environment using logical connections to one or more remote computers, such as a server computing device, via a network 330.
[0103] In some implementations, server 310 may be an edge server that receives client requests and coordinates fulfillment of those requests through other servers, such as servers 320A-C. Server computing devices 310 and 320 may comprise computing systems, such as computing system 100. Although each server computing device 310 and 320 is logically represented as a single server, each server computing device may be a distributed computing environment encompassing multiple computing devices located in the same or different geographical physical locations.
[0104] Client computing device 305 and server computing devices 310 and 320 can each function as a server or client to other server / client devices. Server 310 can be connected to database 315. Servers 320A-C can each be connected to a corresponding database 325A-C. As noted above, each server 310 or 320 can correspond to a group of servers, each of which can share a database or have its own database. Although databases 315 and 325 are logically depicted as a single unit, databases 315 and 325 can each be a distributed computing environment encompassing multiple computing devices, located within their corresponding servers, or located in the same or different geographical physical locations.
[0105] Network 330 can be a local area network (LAN), a wide area network (WAN), a mesh network, a hybrid network, or other wired or wireless network. Network 330 may also be the Internet or some other public or private network. Client computing device 305 may be connected to network 330 via a network interface, such as a wired or wireless connection. Although the connections between server 310 and server 320 are shown as separate connections, these connections can be any type of local, wide area, wired, or wireless network, including network 330 or a separate public or private network.
[0106] In some implementations, one or more of servers 310 and / or 320 can be used as part of a social network. A social network can maintain a social graph and provide a social graph aspect to a virtual reality system that can perform various actions based on the social graph. A social graph can include a set of nodes (representing social networking system objects, also known as social objects) interconnected by edges (representing interactions, activities, or associations). A social networking system object can be a social networking system user, a non-person entity, a content item, a group, a social networking system page, a place, an application, a subject, a concept representation, or another social networking system object, such as a movie, a band, or a book. A content item can be any digital data, such as text, an image, audio, video, a link, a web page, a 3D or 2D model, minutia (e.g., a representation provided by a client device, such as a sentiment indicator, a status text snippet, or a location indicator), or other multimedia. In various implementations, a content item can be a social network item or a portion of a social network item, such as a post, a like, a mention, a news item, an event, a share, a comment, a message, other notification, etc. Subjects and concepts in the context of a social graph include nodes that represent any person, place, thing, or idea.
[0107] A social networking system may allow users to enter and display in their profiles information about their interests, age / date of birth, location (e.g., longitude / latitude, country, region, city, etc.), educational background information, life stage, relationship status, name, model of device typically used, languages the user is identified as fluent in, occupation, contact information, or other demographic or biographic information. Any such information may, in various implementations, be represented by nodes or edges between nodes in a social graph. A social networking system may allow users to upload or create pictures, videos, documents, songs, 3D objects, or other content items, and may allow users to create and schedule events. Content items may, in various implementations, be represented by nodes or edges between nodes in a social graph.
[0108] A social networking system may allow users to upload or create content items, interact with content items or other users, express interests or opinions, or perform other actions. A social networking system may provide various means for interacting with non-user objects within the social networking system. In various implementations, actions may be represented by nodes in a social graph or edges between nodes. For example, a user may form or join a group or become a fan of a page or entity within the social networking system. Furthermore, a user may create, download, view, upload, link, tag, edit, or play social networking system objects. A user may also interact with social networking system objects outside the context of the social networking system. For example, an article on a news website may have a "Like" button that a user can click. In each of these instances, the interaction between the user and the object may be represented by an edge in the social graph connecting the user's node to the object's node. As another example, a user may "check in" to a particular location using a location detection feature (such as a GPS receiver on a mobile device), and an edge may connect the user's node with the location's node in the social graph.
[0109] A social networking system may provide users with various communication channels. For example, a social networking system may allow a user to email, instant message, communicate within a virtual reality environment, send text / SMS messages, etc., with one or more other users. A social networking system may allow a user to post messages to the user's wall or profile or another user's wall or profile, or to interact with virtual objects created by or present in another user's virtual reality environment. A social networking system may allow a user to post messages to a group or fan page. A social networking system may allow a user to comment on images, wall posts, or other content items created or uploaded by the user or another user. A social networking system may also allow users to interact with objects or other avatars, such as within a virtual reality environment (via their personalized avatar). In some embodiments, a user may post a status message to the user's profile indicating current events, feelings, thoughts, emotions, activities, or any currently relevant communications. A social networking system may allow users to communicate both within and outside the social networking system.For example, a first user may send a second user a message within the social networking system, an email through the social networking system, an email outside of but originating from the social networking system, an instant message within the social networking system, an instant message outside of but originating from the social networking system, provide voice or video messaging between users, or provide a virtual environment in which users can communicate and interact through avatars or other digital representations of themselves. Further, a first user may comment on the second user's profile page or on an object associated with the second user, such as a content item uploaded by the second user.
[0110] Social networking systems allow users to associate themselves and establish connections with other users of the social networking system. When two users (e.g., social graph nodes) explicitly establish a social connection within a social networking system, they become "friends" (or "connections") within the context of the social networking system. For example, a friend request from "John Doe" to "Jane Smith" that is accepted by "Jane Smith" is a social connection. A social connection may be an edge within a social graph. Being friends or being within a threshold number of friend edges on a social graph may allow users to access more information about each other than would otherwise be available to unconnected users. For example, being friends may allow a user to view another user's profile, see another user's friends, or view another user's photos. Similarly, being friends within a social networking system may allow a user more access to communicate with another user, for example, by email (inside and outside the social networking system), instant messaging, text messaging, phone, or any other communication interface. Being friends may enable a user to view, comment on, download, recommend, or otherwise interact with another user's uploaded content items. Establishing connections, accessing user information, communication, and interaction within the context of a social networking system may be represented by edges between nodes representing two social networking system users.
[0111] In addition to explicitly establishing connections in a social networking system, users who share common characteristics may be considered connected for purposes of determining social context for use in determining topics of communication (e.g., soft or implicit connections). In some embodiments, users who belong to a common network may be considered connected. For example, users who attend a common school, work for a common company, or belong to a common social networking system group may be considered connected. In some embodiments, users who share common biographical characteristics are considered connected. For example, the geographic region in which the users were born or live, the users' ages, the users' genders, and the users' relationship statuses may be used to determine whether users are connected. In some embodiments, users who share common interests are considered connected. For example, the users' movie preferences, music preferences, political views, religious views, or any other interests may be used to determine whether users are connected. In some embodiments, users who take common actions within a social networking system are considered connected. For example, users who recommend or endorse a common object, comment on a common content item, or respond to a common event may be considered connected. Social networking systems can utilize social graphs to determine users who are connected to or similar to a particular user in order to determine or evaluate social context between users. Social networking systems can utilize such social context and common attributes to facilitate content delivery systems and content caching systems in predictably selecting content items for caching in caches associated with particular social network accounts.
[0112] 4 is a block diagram illustrating components 400 that, in some implementations, can be used within a system employing the disclosed technology. Component 400 can be included within one device of computing system 100 or distributed across multiple devices of computing system 100. Component 400 includes hardware 410, mediator 420, and specialized components 430. As described above, systems implementing the disclosed technology can use a variety of hardware, including a processing unit 412, working memory 414, input / output devices 416 (e.g., cameras, displays, IMU units, network connections, etc.), and storage memory 418. In various implementations, storage memory 418 can be one or more of a local device, an interface to a remote storage device, or a combination thereof. For example, storage memory 418 can be one or more hard drives or flash drives accessible via a system bus, or can be a cloud storage provider (e.g., in storage 315 or 325) or other network storage accessible via one or more communications networks. In various implementations, component 400 can be implemented within a client computing device, such as client computing device 305, or on a server computing device, such as server computing device 310 or 320.
[0113] Mediator 420 may include components that mediate resources between hardware 410 and specialized components 430. For example, mediator 420 may include an operating system, a service, a driver, a basic input / output system (BIOS), a controller circuit, or other hardware or software system.
[0114] Specialized components 430 may include software or hardware configured to perform operations for creating and managing augmentations and surfaces within a virtual reality environment. Specialized components 430 may include an augmentation creator 432, a context tracker 434, a context factor register 438, a surface creator 440, as well as components and APIs that can be used to provide a user interface, transfer data, and control the specialized components, such as interface 432. In some implementations, components 400 may be in a computing system distributed across multiple computing devices or may interface to a server-based application that executes one or more of specialized components 430. While depicted as separate components, specialized components 430 may be logical or other non-physical distinctions of function and / or sub-modules or code blocks of one or more applications.
[0115] The extension creator 432 can receive a new extension request associated with a manifest that can be used to create a new extension data structure. Further details regarding extension data structures are provided below in connection with FIG. 5. The extension creator 432 can return a handle to the extension data structure to the requestor, allowing the requestor to fill the extension with content items, place the extension in the virtual reality environment, set parameters, etc. In some implementations, the handle to the extension data structure can be provided to the requestor before the extension is fully initialized, allowing simultaneous initial extension manipulation (e.g., filling and / or placing) by the requestor while the virtual reality system completes augmentation initialization. For example, while the requestor is manipulating the extension, the extension creator 432 can complete initialization by, for example, registering the extension to receive context factors needed for the extension's logic and / or display mode to determine whether to execute the logic or enable the display mode. Further details of virtual reality systems that create extensions and allow requestors to manipulate the extensions are provided below in connection with FIGS. 6A and 6B.
[0116] The context tracker 434 can track a set of factors that define a context in the virtual reality environment. Examples of such context factors include the current virtual reality system mode, lighting, the position of an augmentation in the virtual reality environment, the position of a real-world object in the virtual reality environment, the time, the date, user interactions, detected sounds, etc. In some implementations, the context tracker 434 can identify when a context factor has been set or changed by a threshold amount and can provide those context factors to the associated augmentation.
[0117] In some cases, the context tracker 434 provides context factors to the augmentations based on the augmentations that registered to receive those context factors, e.g., during augmentation creation or later through a registration call by the augmentation to the artificial reality system. Further details regarding augmentation creation, including registering context factor signals and providing context factor notifications to augmentations, are provided below in conjunction with FIGS. 6A and 7. In other cases, an augmentation may be selected to receive context factors in response to the augmentation being placed on a surface. For example, properties of the surface or other augmentations or real-world objects on the surface may be provided to the augmentation. Further details regarding providing context factors to augmentations based on surface affiliation are provided below in conjunction with FIG. 8. In yet other cases, relationships between augmentations may be specified, where an event associated with the relationship may cause one or more of the augmentations to receive a context factor. For example, a relationship may be established when an augmentation is moved to touch another augmentation, when an augmentation has logic or a display mode that is conditional on the properties of another augmentation, or in response to a command issued to multiple augmentations. Further details regarding providing context factors to augmentations based on events related to specified relationships between augmentations are provided below in conjunction with FIG. 9. In any of these cases in which an augmentation is provided with a context factor or other property, the augmentation can use the value of the context factor to evaluate a condition for invoking logic or enabling a display mode. For example, a display mode may have a condition that evaluates to true when the context factor of the artificial reality system state indicates "audio-only mode," causing the augmentation to enter a display mode in which nothing is displayed by the augmentation and only audio presentation data is output. Further details regarding invocation logic and / or display modes based on received context factors are provided below in conjunction with blocks 708 of FIG. 7, 808 of FIG. 8, and 906 of FIG. 9.
[0118] The context factor registration unit 438 may store mappings between extensions and context factors that specify which extensions receive context factor signals when a context factor is set or changed. As described above, these mappings may be established based on registration by extension, extensions placed on a surface, or identification of relationships between extensions. Further details regarding registering extensions to receive context factors are provided below in connection with block 606 of FIG. 6A, 806 of FIG. 8, and 902 of FIG. 9.
[0119] The surface creator 440 can create surfaces for use within a virtual reality environment. In various implementations, surfaces can be (i) synthetic (e.g., not world-locked and automatically generated by the virtual reality system regardless of the environment), (ii) semantic (e.g., detected by a machine learning recognizer, such as a hand, face, table, or other specific object), or (iii) geometric (e.g., recognized geometric shapes in the environment, such as a floor, wall, etc.). Thus, the surface creator 440 can define a surface relative to a location in the virtual reality system, identify a specified surface geometry or object type to create a surface, or create a surface in response to user input (e.g., in response to a user performing an air tap, outlining a surface with a gesture, placing a hand, controller, or other peripheral device on a surface, defining a plane in the air with a hand to be used as a surface, attaching a surface to an object associated with a detected user interaction, etc.). Further details regarding surface creation are provided below in connection with FIG. 8.
[0120] FIG. 5 is a block diagram illustrating an example of an augmentation data structure 500. An augmentation is a volume in 3D space that can be filled with content or can output presentation data. An augmentation can hold data, respond to the current augmentation context, and have logic. An augmentation is created by sending a request to the virtual reality system shell with an augmentation manifest. The manifest can specify basic properties of the augmentation, such as the type or location of the surface on which the augmentation can be placed, and how the augmentation displays itself in different modes, initial locations, sizes, and orientations. In some implementations, an augmentation can have a specific predefined type (e.g., person, 2D media, post, event, or 3D model), and the manifest will have defaults for that type (e.g., layout, content). The shell creates the augmentation based on the manifest and returns a handle to it to the requester. The requester can then write content into the augmentation (including writing different versions for different display properties specified in the manifest). The shell can maintain control over where extensions can be displayed and what display properties are invoked, according to the allowed positions and display properties specified in the manifest. For example, when the artificial real estate system enters a do-not-disturb mode, all extensions can be placed in minimized mode and moved out of the user's center of view. An extension can be instantiated by the shell or another extension, but can then continue to exist on its own, independent of the requester.
[0121] The extension data structure 500 includes properties 502 and functions (“logic”) 504. Each of the items listed in the extension properties 502 and functions 504 is an example of an item that may be included in the extension data structure, and in various implementations, more, fewer, or other properties and functions may be included in the extension data structure. Additionally, the extension data structure may include properties and logic defined in different ways than shown in FIG. 5. For example, instead of or in addition to the implicitly defined functions, the extension logic may include declarative logic.
[0122] In the example 500 , the properties 502 include an extension ID 506 , an extension name 508 , an extension type 510 , a parent_augment 512 , display_modes 514 , a current location 524 , a current_display_mode 526 , a current_dimensions 528 , and an owner 530 .
[0123] The extension ID 506 may be set to the next available ID when the extension is created. The extension name 508, extension type 510, and display_modes 514 may be specified in an extension manifest provided with the initial request for the extension. The extension name 508 may be a string. The extension type 510 may be set to one of a predefined set of available types, such as person, 2D media, post, event, 3D model, freeform, etc. In some implementations, the extension type controls the class of the extension, allowing the extension to include properties and / or logic defined for that extension type. In some cases, these properties may be set automatically by selecting data corresponding to that type and parameters set in the extension manifest. For example, the extension manifest may specify that the extension type is "person" and the person ID is 488923. Upon receiving this request, the artificial reality system can create an instance of the person extension class with pre-set display_modes by executing a constructor function that pulls data from the social graph associated with the node with person ID 488923, such as an avatar or profile picture, and default UI elements, such as instant messaging controls. The resulting person extension can also include pre-defined person logic, such as a function to send an IM to the extension's person when an instant messaging UI control is activated, or a function to tag the extension's person in a post when the extension is positioned to touch a post-type extension.
[0124] Extension display modes 514 may include display modes defined in the extension manifest, a default display mode, or a type-specific display mode. A display mode can specify conditions under which the display mode is activated. In some cases, the conditions can specify values that certain context factors must have, using logic operators such as AND, OR, NOT, EQUAL_TO, LESS_THAN, GREATER_THAN, etc. A display mode can also specify characteristics that a surface must have for an extension to be added to that surface in that display mode, such as whether the surface is vertical or horizontal or the type of object the surface is associated with (e.g., a table, a hand, a face, etc.). A display mode can specify the shape (e.g., outline and size) of the extension when in that display mode. A display mode can include content variables that store presentation data for the extension when in that mode. For example, each content item added to an extension can specify in which display mode (or set of display modes) that content item is to be output as presentation data, and how it is to be displayed in that mode, e.g., the offset from the extension's origin, orientation, size, shape, volume, etc. A display mode can also specify whether the extension is movable when in that display mode. A display mode may include many other properties not shown here that define how the extension is to be output when the conditions of that display mode are true.
[0125] In some implementations, all extensions may have a default set of display modes, such as display modes that correspond to the synthetic reality system modes (e.g., an audio-only mode, a minimized or "glint" mode where the extension is reduced to its maximum size, an active mode where the extension is moved to the side of the user's field of view, or an interactive mode where the extension uses its full size and can be positioned anywhere within the synthetic reality environment. These display modes may be inherited from a base extension class. In some implementations, extensions of a particular type may have display modes defined for their type, for example, inherited from one of the extension type classes that extend the base extension class. In the manifest provided when the extension is requested, additional display modes may be defined. A display mode can be supplied. In some implementations, the display mode from the extension type can augment the default extension display mode. In some cases, the display mode from the manifest can augment the display mode from the default extension display mode or the extension type display mode. Augmenting the display mode can set additional condition factors under which the augmented display mode occurs and / or additional properties to use in configuring the augment's output. For example, interactive display mode 516 is enabled when the artificial reality system mode context factor indicates an "interactive" display mode, which sets the augmentation so that it can be placed on a vertical or horizontal surface and sets the shape of the augmentation. vertical_display mode 520 augments interactive display mode 516, meaning that the prerequisites for enabling vertical_display mode 520 are also true for interactive display mode 516. When vertical_display mode is enabled, the interactive mode's display properties are enabled, while vertical_display mode further restricts the augmentation to only vertical surfaces and sets a further shape for the augmentation (which cannot exceed the shape defined by interactive display mode 516).As this example demonstrates, a display mode that is augmented by another display mode can set constraints on display mode parameters (e.g., shape objects, surfaces the augmentation is on, or whether the augmentation is movable) that the augmented display mode cannot change or exceed.
[0126] In some implementations, when an augmentation is created, the virtual reality system can consider the context factors used in each of the display modes to determine which context factors have been modified to register and receive the augmentation. Further details regarding registering context factor augmentations are provided below in connection with FIG. 6A.
[0127] The extension ID 506 may be set to the next available ID when the extension is created. The parent_augment 512 may be set to the ID of the element that requested the creation of a new extension. The current_display_mode 526 may indicate which of the display modes 514 the extension is currently using. This may be initially set to the default display mode, a specific (e.g., first) display mode provided in the extension manifest, or a display mode that matches the current context factors. The current_dimensions 528 may be set based on the shape specified in the current display mode. The owner 530 may initially be set to the entity that requested the extension or the entity specified in the extension request. In some implementations, the ownership of the extension can later be changed by changing the entity indicated by the owner 530 variable, and the ownership may grant certain rights (e.g., to set certain extension properties and / or to invoke certain extension logic). In some implementations, other permissions may be set on extension properties and / or functions that specify which entities have permission to read / write / execute them. In some implementations, the virtual reality system maintains a hierarchy of extensions based on which extensions created and / or are owners of other extensions, with the root of the hierarchy being the shell. When an extension that is the owner of another extension is closed, its ownership may be passed to the owner of the closed extension.
[0128] The current location 524 can be initialized to the initial location set in the manifest, a default location (e.g., attached to a surface defined by the requesting user's hand, allowing the user to further position the augment), the location shown when a new augmentation request is made (e.g., the spot that is the user's focus at the time, or a location relative to the location of the requesting augment), or it can be uninitialized (hide the augment) until the requestor sets a location. Depending on whether the augmentation display mode allows repositioning of the augmentation ("isMoveable"), the current location of the augmentation can be changeable.
[0129] In example 500, functions 504 include a function 532 for adding content to the extension, a function 534 for removing content from the extension, a function 536 for setting the extension's location, a function 540 for setting the current display mode, and a function 542 for updating the extension owner.
[0130] In example 500, the addContent function takes a manifestForSpawning parameter. When this parameter is provided, the content added to the extension can be made executable to spawn a new extension; for example, when a user reaches for the extension and pulls a generatable content item, a request for the new extension is initiated. The manifest set in the manifestForSpawning parameter for the generatable content item is then used in the request for the new extension. In some implementations where a content item can spawn new extensions, a particular visual affordance can be provided to indicate to the user that it can be selected to create a new extension (e.g., a particular highlighting, coloring, animation, etc.). Similar to properties 502, the extension can have other logic elements (not shown) for setting or getting extension properties or for triggering extension actions. Also similar to properties 502, the extension's functions or other logic can be specified in the extension manifest, as logic specified in the extension class for the extension type or specified in the base extension class.
[0131] Those skilled in the art will appreciate that the components shown in Figures 1-4 above and in each of the flow diagrams discussed below may be modified in various ways. For example, the order of logic may be rearranged, substeps may be performed in parallel, illustrated logic may be omitted, other logic may be included, etc. In some implementations, one or more of the above components may perform one or more of the processes described below.
[0132] FIG. 6A is a flow diagram illustrating a process 600 used in some implementations of the present technology for a virtual reality system shell to respond to a request for a new extension. In various implementations, process 600 can be performed by the virtual reality system shell in response to an extension request (e.g., generated in process 650 of FIG. 6B). For example, the extension request can be generated from a UI control for creating an extension (e.g., a category of extensions can be selected from a launcher menu) or from a user's interaction with an existing extension (e.g., pulling a generatable element from an existing extension). As another example, the request can be in response to logic performed by an existing extension (e.g., if the extension generates a manifest and has logic to request the extension when a certain context occurs). In some implementations, the extension can set properties and / or logic in the manifest, or there can be a predefined manifest that the extension can search (e.g., certain extension types can have predefined manifests).
[0133] At block 602, process 600 can receive a request associated with a manifest for a new extension. As described above in connection with FIG. 5 , the manifest can specify properties and / or logic for the new extension, such as the display mode (e.g., one or more context factor values that must occur to enable the display mode; the type, location, shape, or orientation of the surface on which the extension may be placed in that display mode; whether the extension is movable; the volume of audio presentation data; etc.), the title, ID, and extension type, the extension owner, and the extension's initial location. In some implementations, default or inherited properties and / or logic can also be specified for the extension, such as all extensions including a certain display mode that corresponds to a virtual reality system mode (e.g., audio only, minimized, interactive, etc.). In some implementations, the display modes in the manifest can augment these default display modes, allowing the default display modes to set constraints on the augmented display modes. Examples of contextual factors that may specify conditions for various display modes include surface features, relationships with other real or virtual objects, movement characteristics, lighting, time, date, user interaction, detected sounds, artificial reality system modes, etc. Examples of predefined augmentation types may include people, 2D objects, 3D objects, posts, events, or freeforms. In some implementations, an extension type corresponds to a type of node in a social graph. In some implementations, an extension of a particular type may have defaults for that type, such as default properties, logic, and / or automatically added content items (e.g., a post extension may have predefined visual structure, controls, and content that are automatically added based on the node in the social graph that corresponds to the post).
[0134] At block 604, process 600 can generate an extension with values and / or logic set based on the manifest associated with the new extension request. In some implementations, this can include creating an extension data structure similar to data structure 500 (FIG. 5). In some implementations, default, type-based, or other values separate from the manifest can also be set in the extension data structure.
[0135] At block 606, process 600 may return a handle to the created augmentation in response to the request. This handle may enable the requestor to begin filling the augmentation and / or place the augmentation within the virtual reality environment. In particular, this may allow the requestor to begin filling the augmentation and / or place the augmentation before the augmentation is fully formed. For example, the augmentation may have default or type-specific content still being written by the virtual reality system shell, may not yet be registered for context factor notification, or may have other initialization procedures not yet completed when the handle is provided. Such additional portions of initialization may be completed while the requestor is using the provided extension handle. Thus, augmentation placement and content filling may be performed concurrently with the initialization procedures, providing significant efficiencies.
[0136] At block 608, process 600 may register the extension for context factor notification. Registering the extension for context factor notification may include assigning an identifier for the extension to each context factor on a list of context factors for which the extension is registered. Further details regarding notifying an extension of changes in context factors are provided below in connection with FIG. 7. The context factors for which the extension is registered may be selected based on the context specified in the manifest (or in other parameters configured for the extension). For example, process 600 may analyze the display modes defined for the extension to determine which context factors need to be checked to determine whether to enable each display mode, and may register the extension to be notified of changes to any of those context factors. Additional initialization of the extension, such as a shell that adds content items of the specified extension type to the extension, may also be performed at block 608.
[0137] In block 610, process 600 may perform an augmentation placement procedure. In some implementations, block 610 may be performed before block 606, e.g., to set an initial augmentation placement before the requestor provides a handle to update the placement. The placement procedure may include setting a default location or a location specified in the request received in block 602 (e.g., a location based on the user's focal area, the same surface to which the requesting augment is attached, or a location relative to the requesting entity, such as a surface defined for the user's hand or face associated with the request). In some implementations, the placement procedure may include making the augment invisible until the requestor selects a location. In some implementations in which the user is involved in manual selection of a placement location, the virtual reality system may highlight valid locations for the augmentation's current display mode. For example, if the augmentation's current display mode specifies that the augmentation must be placed on a vertical surface, surfaces established on the walls of the virtual reality environment may be highlighted as visual affordances so that the user knows where the augmentation can be placed. Following the configuration procedure of block 610 (or the context factor registration of block 608 if block 610 is executed first), process 600 may end.
[0138] FIG. 6B is a flow diagram illustrating a process 650 used in some implementations of the present technology to submit a request for a new extension to a virtual reality system shell. Process 650 may be performed by the shell or an existing extension, either of which may monitor for an extension creation event based on user interaction or contextual factors. In block 652, process 650 may identify an extension creation event. For example, a user may perform an interaction such as invoking a shell control (e.g., invoking an interface for extension selection and identifying one or more extensions to instantiate) or selecting a content item within an existing extension defined to generate a new extension (e.g., a visual affordance may be provided for content items when their selection can generate a new extension, such as when the content item is associated with a manifest). As a more specific example, a generatable content item may be a photo in a social media post extension, where a photo extension may be generated when a user performs a grab gesture on the photo and pulls it from the post extension.
[0139] Existing extensions can also execute logic based on the current context to generate new extension requests. As an example, a 3D model extension on a range top surface depicting a clock can update its display based on a global time variable. The clock extension can be registered with a virtual reality system to receive object context factor notifications when a user moves the clock extension into contact with an object. When such context factors are provided to the clock extension, it can invoke internal logic that determines that another object has been tagged as a food item and requests a new 3D model timer extension to be placed on top of the object. Upon receiving a handle to the timer extension, it can fill the extension with a countdown timer model with a set amount of time based on a mapping of food types to cooking times.
[0140] At block 654, process 650 may obtain a manifest corresponding to the extension creation event identified at block 652. In some implementations, the manifest may be a predefined manifest specified for the type of extension corresponding to the extension creation event. In other implementations, the extension creation event may be associated with an existing manifest or logic for generating a manifest. For example, a content item added to an extension may be associated with a manifest to use when the content item is selected to generate a new extension. As another example, the logic for an extension may have various manifest templates, one of which may be selected and filled based on user actions and / or other contextual factors.
[0141] In block 656, process 650 may send a request to the synthetic reality system shell for new extensions associated with the manifest obtained in block 654. The synthetic reality system shell may respond to this request using process 600 (FIG. 6A) again providing a handle to the new extensions, which are received in block 658.
[0142] As noted above, in various implementations, blocks of the processes described herein may be removed or rearranged, but block 660 is shown with a dashed line to indicate that block 660 may not be executed in some cases. For example, block 660 is not executed in a location where a new augmentation request to the shell to set the augmentation's location is provided, where the provided augmentation is not movable; otherwise, the augmentation's positioning is facilitated by the virtual reality system shell, such as via process 600. When block 660 is executed, process 650 can place the new augmentation (e.g., location and / or orientation) within the virtual reality environment. In some implementations, the augmentation may initially be attached to the user's hand, may be a default location, a location relative to the requesting augmentation, or the like. The requesting augmentation and / or the user can invoke a function of the new augment to place it within the virtual reality environment, such as where the user performs a gesture to move the augmentation (causing the augmentation's setLocation function to be called).
[0143] Additionally, once process 650 receives the extension's handle, it can begin adding content to the extension. In some implementations, the extension may be pre-filled with some content, such as added by the virtual reality system shell. In some implementations, process 650 can add content to the extension by calling a function on the extension (accessible via the handle) and passing information such as a reference to the content, the location within the extension where the content should be displayed, which display modes indicate the content, whether the content can generate new extensions, etc. In some cases, adding content to the extension may include adding new logic to the extension and / or registering the extension to receive additional context factor notifications. In some implementations, the virtual reality system shell can provide a handle to the extension before the extension is fully initialized, and extension placement and / or content filling can occur before the virtual reality system shell completes creation of the extension. After adding the extension content and / or extension placement, process 650 can end.
[0144] 7 is a flow diagram illustrating a process 700 used in some implementations of the present technology to enable an augmentation to respond to context by providing context factors to an associated augmentation. Process 700 may be performed by a portion of a virtual reality system that receives virtual reality environment and sensor data (e.g., SLAM data, data from an IMU or other sensor connected to the virtual reality system, camera data) and from a system that analyzes and classifies such data (e.g., a gesture recognizer, an object identification system, an environment mapping system, a surface identification system, etc.). This execution of process 700 by the virtual reality system may be in response to periodic context factor checks or based on triggers occurring on certain sensor, data analysis, or virtual reality environment events.
[0145] At block 702, process 700 may identify a change (or establishment) of one or more context factors. In some implementations, this may include determining a change in a context factor value that exceeds a threshold established for that context factor. For example, movement of an object may be considered a context factor when it is determined that the object has moved at least 0.5 inches. As another example, a change in an audio context factor may be identified when a change in audio volume exceeds 15 decibels.
[0146] At block 704, process 700 may identify extensions registered for notification of changed context factors. This may be determined based on a mapping of context factors to existing extensions, such as a mapping created through the iterations that execute block 608 (FIG. 6A). At block 706, process 700 may notify the extensions identified at block 704 of the context factor changes identified at block 702 for which they are registered to receive signals of those context factor changes.
[0147] In some implementations, providing these notifications to the extension can cause the extension to invoke corresponding logic. For example, the extension can determine whether the context factors provided to the extension match a conditional statement defined for a display mode and whether the values provided for these context factors, when used in evaluating the conditional statement, cause the conditional statement to evaluate to true, and enable the corresponding display mode. This can include applying the context factors to an ordered set of display modes. For example, this can include finding the deepest display mode in a hierarchy of display modes that extend each other, or traversing the display mode hierarchy and enabling each successive display mode that has a conditional statement that evaluates to true and whose parent display mode (which it extends) is enabled. In some implementations, providing the context factors can also cause the extension to invoke logic, such as executing a function that takes the context factors, mapped to a conditional statement or with a known value as a parameter.
[0148] As noted above, in various implementations, blocks of the processes described herein may be removed or rearranged, but block 708 is shown with a dashed line to indicate that block 708 may not be performed in some cases. For example, block 708 may not be performed if the virtual reality system shell does not perform a separate step to ensure that augmentations satisfy certain constraints, such as those that apply to a particular mode. Block 708 may not be necessary if the virtual reality system shell creates augmentations in such a way that all augmentations must enable a matching display mode when receiving context factors and by ensuring that the augmentations contain required logic and properties (e.g., display modes for a particular virtual reality system mode) that cannot be changed (e.g., by allowing only additional display modes to augment a required display mode without overriding constrained display properties when the display mode is augmented). However, block 708 may be performed in other situations, such as when the augmentation owner can provide an activatable display mode that does not conform to the system constraints. In block 708, process 700 can invoke augmentation properties to make the required display changes. This may include disabling an augmentation, switching an augmentation to a different display mode, or preventing an augmentation from outputting some of its current presentation data (e.g., changing the augmentation shape or clipping output outside a bounding area). For example, the artificial reality system may switch from an "interactive mode," in which augmentations are allowed to use their full volume in any permitted location, to an "active user mode," in which the center of the user's field of view is kept free and virtual objects are moved to surfaces docked to the side of the user's field of view. In this mode, the artificial reality system may clip any augmentations displaying content beyond the maximum augmentation size defined for this mode and ensure that all augmentation locations are set to side docking surfaces.After block 708 (or block 706 if block 708 is not performed), process 700 may end.
[0149] A surface is an area within a 3D virtual reality environment to which an augmentation can be attached. A surface can be a flat space (e.g., a wall, a table, etc.), a region or volume around an object (e.g., a user's face, a monitor, a book, etc.), or a region or volume within space (e.g., a point, a plane floating in space, or a volume anchored to a location). A surface can be defined by a user with various gestures or automatically by the system (e.g., upon recognizing a particular designated object or an object with which the user has interacted). For example, a surface can be an area (bubble) around a user, an identified flat surface, or a volume. In some implementations, a surface can be determined by both automated and user actions; e.g., the system identifies a space and the user updates or modifies surface properties. A surface can be automatically assigned some properties, such as size, orientation, shape, or metatags (based on object recognition), and the user can define other properties, which can be from a set of predefined property categories.
[0150] Extensions may be added to a surface, for example, by placing the extension on or near the surface. A surface may include a layout that controls how extensions attached to the surface will be arranged when placed on the surface. The surface layout may be user-selected or automatic (e.g., based on surface size, shape, or other surface characteristics, and / or based on the number, size, or type of extensions placed on the surface). In some cases, surfaces may be nested by adding one surface to another. When an extension is placed on a surface (or created on a surface, for example, when an app is opened while the user is focused on the surface), the surface's properties may be provided to the extension, which the extension can use to configure its display or actions. The app that created the extension can define rules for how the extension displays itself or how the extension behaves in the context of different surfaces.
[0151] 8 is a flow diagram illustrating a process 800 used in some implementations of the present technology for an augmentation to interact with a virtual surface. In some implementations, process 800 may be performed when an augmentation is associated with a surface, such as when the augmentation is initially created on the surface or when it is later placed there via user interaction, another augmentation's orientation, execution of the augmentation's logic, or a change in the augmentation's display mode that causes the augmentation to be added to a particular surface.
[0152] At block 802, process 800 can receive an identification of a surface. This can be an existing surface or a surface created to accommodate a new extension. In various implementations, the virtual reality system can create one or more surfaces. In various implementations, the surface can be (i) synthetic (e.g., automatically generated by the virtual reality system regardless of the environment, e.g., not world-locked), (ii) semantic (e.g., detected by a machine learning recognizer, such as a hand, face, table, or other specific object), or (iii) geometric (e.g., identified geometric shapes in the environment, such as a floor or wall). Thus, the virtual reality system can create a surface by defining it relative to the virtual reality system's location, by identifying a virtual reality environment surface geometry or object type designated for creating the surface, or in response to a user defining the surface (e.g., by performing an air tap, outlining a surface with a gesture, placing a hand, controller, or other peripheral device on the surface, defining a plane in the air with the hand to be used as a surface, interacting with an object type such as a bicycle handlebar to define a surface, etc.).
[0153] At block 804, process 800 may determine properties of the surface and / or associated context. The surface may have properties such as the type of object that may be placed on the surface, the surface shape, a location within the virtual reality environment, a list of extensions on the surface, metatags (e.g., machine learning tagging for recognizing real-world objects on the surface, surface type, etc.), a layout, or other characteristics. The surface layout may be selected by a user or automatically selected based on, for example, the surface size, the surface shape, the number, size, or type of extensions placed on the surface, etc. In some implementations, the layout may be dynamic, e.g., the first item added to the surface is centered, the second extension added moves toward the first, resulting in two side-by-side elements, and the third extension added moves toward the first and second, resulting in three evenly spaced side-by-side elements. Exemplary dynamic layouts include lists, e.g., horizontal lines of extensions spaced uniformly from each other, stacks, e.g., vertical lines of extensions spaced uniformly from each other, grids, e.g., 2D or 3D grids of extensions with x, y (and z) counts specified according to the number of extensions on the surface, and freeform surfaces, e.g., no set layout slots into which extensions sit where they are placed. In some implementations, one or more surface properties may be set to a default or may be set to a default selected based on a mapping of specified surface characteristics (e.g., orientation, object type, shape) to other surface characteristics (e.g., layout, meta tags, etc.).
[0154] At block 806, the process may identify one or more extensions associated with the surface. This may be an extension attached to the surface or within a threshold distance of the surface. In some implementations, the extension may be associated with the surface in response to a user placing the extension on the surface (or in response to executing an interaction to connect the extension to the surface, e.g., based on the user's attention, voice command, etc.). In other cases, the extension may be generated on the surface, for example, by another extension on the same surface. In still other cases, the extension's logic or the extension's display mode may attach the extension to a particular type of surface or the nearest surface.
[0155] In some implementations, surfaces can be a type of augmentation within a virtual reality environment, and some surfaces can be added to other surfaces, allowing surfaces to be nested within one another. In some implementations, a surface can have logic that automatically populates itself with augmentations based on, for example, the surface type, parameters and information known about the user, etc. For example, a refrigerator surface can automatically populate itself with recipes because it has a "food" meta tag, and the recipes can be based on the user's history of "liking" certain types of food identified in the social graph.
[0156] At block 808, process 800 may provide the properties and / or contextual factors determined at block 804 to the associated extension identified at block 806 so that the identified extension can invoke corresponding logic or display mode. For example, a surface may set its location property to indicate a location for the extension, such as an open slot in the surface's layout to which the extension can move itself. As another example, a property of the surface, such as whether it is a vertical or horizontal surface, may be indicated to the extension, allowing the extension to select a corresponding display mode. As yet a further example, other objects associated with the surface may be indicated to the extension, allowing the extension to invoke logic corresponding to those objects or the types assigned to those objects. As a more specific example, when a social media "Posts" extension is placed on a surface, it may indicate that there is also a "People" extension on that surface, thereby invoking logic defined for the Posts extension to tag people in posts if those people have extensions assigned to the same surface. After providing the properties and / or contextual factors to the determined extension at block 808, process 800 may end.
[0157] In some implementations, augmentations can interact with other objects (real and / or other augmentations) or events. For example, a "cooking" surface may have an egg timer extension, and when the extension is dragged into a real-world pot of water, the timer can automatically start counting. An extension may have logic and / or display modes defined for the type of extension that can be triggered by the extension creator and / or when certain parameters or contextual factors are provided to the extension. FIG. 9 is a flow diagram illustrating a process 900 used in some implementations of the present technology for an extension to interact with other objects. Process 900 may be performed in response to various events, such as the creation of an extension, adding an extension to a surface, a user specifying an interaction between extensions, or another event that forms a relationship between an extension and another object.
[0158] In some implementations, an extension can receive parameters about other extensions, such as their location, type, shape, content items written within them, handles for invoking logic within them, etc. At block 902, process 900 can register a relationship for sharing such parameters between two or more extensions.
[0159] In some cases, security and privacy policies can restrict which parameters of one extension can be surfaced to another extension, or can specify the circumstances under which such sharing can occur. For example, an extension may be provided access A) to features for extensions created by the same parent, B) only in response to a user action indicating interaction between the extensions (e.g., touching or dragging something from one extension to another), and / or C) only if the extensions are assigned to the same surface. In various implementations, the type of relationship can control which features can be exposed between extensions. For example, a user action that brings two extensions into contact can cause the sharing of a wide range of extension properties, while two extensions on the same surface may only share location and object type properties between the extensions.
[0160] In some cases, an extension can register with the shell of a virtual reality system to receive information about or parameters from other extensions. In other cases, the shell can determine which such properties to provide to the extension (e.g., determine the parameters the extension logic and / or display mode need to access based on an analysis of the manifest provided to the shell to create the extension). In some implementations, the shell can include security and privacy policies that control which properties the extension requests access to are provided to the extension. For example, an extension can register to receive lighting conditions, user location, and the identification of objects within its threshold distance. The shell can determine whether the extension is authorized to receive such information and, if authorized, complete the registration to provide those parameters as they are set or changed. In some implementations, the virtual reality system shell can have one or more global parameters from which the extension can derive values, such as a surface list, the current virtual reality system mode, or the current time or date.
[0161] At block 904, process 900 may identify an event associated with one or more extension parameters or context factors based on the relationship identified at block 902. For example, an event may be identified when a context factor that the extension registered to receive sets or changes value, when an extension is placed in contact with (or within a threshold distance of) another extension, when a new extension is created, or any other event that indicates the extension is responsive to another object.
[0162] At block 906, process 900 may provide one or more extension parameters or context factors for the event identified in block 904 to one or more of the extensions to which the event is associated. This allows receipt of the extension to invoke logic and / or enable a display mode corresponding to the received parameters or context factors. As described above, an extension creator may create logic or a display mode for an extension that may be invoked or enabled upon receiving a context factor or other information related to the logic or display mode, or that causes a condition of the logic or display mode to evaluate to true. In some implementations, this logic or display mode may be inherited, for example, based on the extension being created as an instance of a type of extension class that has predefined logic or display mode (e.g., a person extension class that extends an extension class may have predefined logic for interacting with the social media profile of a depicted person when a particular event occurs). After the parameters or context factors are provided to the extension, process 900 may end.
[0163] 10 is a conceptual diagram illustrating an example 1000 of an augmentation in a virtual reality space controlled by a virtual reality system. The virtual reality environment shown in example 1000 includes a room 1002 having walls 1004 and 1006 and a floor 1008. The virtual reality environment of example 1000 is a mixed reality environment that includes a real-world table 1010 and a real-world soccer ball 1014, as well as virtual objects such as a dog 1016, an apple 1012 on the table 1010, and a picture 1018. Example 1000 illustrates that properties can be assigned to both real and virtual objects, as indicated by the bounding boxes surrounding objects 1012-1018, and are identified (e.g., specifying location, shape, etc.) by the virtual reality system, which maintains corresponding data structures.
[0164] FIG. 11 is a conceptual diagram continuing the example 1000 of an augmentation in a virtual reality space in which the virtual reality system identifies virtual surfaces. In example 1000, the virtual reality system identifies geometric surfaces by automatically locating flat surfaces of at least a certain size. In this manner, the virtual reality system automatically identifies surfaces 1102 and 1104. The virtual reality system also identified the floor surface, but the user instructed the system to divide that surface into surfaces 1110 and 1112 (not shown). The user also caused the virtual reality system to create surface 1108 by placing their hand on the surface (not shown). Existing real and virtual objects located on these surfaces are automatically added to them.
[0165] 12 is a conceptual diagram continuing the example 1000 of an augmentation in a virtual reality space in which the virtual reality system receives a request for a new photo augmentation that is initially placed based on the user's gaze. In response to a user command (e.g., activating a UI element, not shown), the virtual reality system attaches a virtual tablet 1204 to the user's hand 1202, allowing the user to make various selections. In this example, the user selects picture option 1206 from tablet 1204 and selects a photo (not shown) to add to the virtual reality environment. Based on this selection, tablet 1204 (and the augmentation) creates a manifest for the picture augmentation and sends a request to the virtual reality system shell (e.g., by executing process 6B).
[0166] In FIG. 13 , the virtual reality system creates augmentation 1302 (e.g., by performing process 6A) in response to a new augmentation request. The virtual reality system also tracks the user's gaze direction 1208 ( FIG. 12 ) by monitoring head position using an IMU sensor and modeling the user's eye position using a camera. Based on the monitored user's gaze direction 1208, the system automatically identifies surface 1104 as the surface to which to add a new picture augmentation 1302 in slot 1324 (of slots 1304-1326 in the layout of surface 1104). The virtual reality system shell provides the new, empty augmentation 1302 and initially places it in slot 1324. A handle for augmentation 1302 is provided before augmentation 1302 is filled with content, allowing the user to make additional placement selections while the augmentation requester writes the content (the selected picture) into augmentation 1302. Additionally, while empty augmentation 1302 is initially placed in slot 1324, the virtual reality system identifies additional surfaces and layout slots where the augmentation may be placed, providing the user with visual affordances (1304-1350) indicating available spots for augmentation placement. In example 1000, these slots are identified because augmentation 1302's manifest indicates that the augmentation may be placed on any flat vertical surface or any flat horizontal surface that does not have a "floor" designation. In FIG. 14, new augmentation 1302 is being filled with picture 1402 selected by the user in FIG. 12 while simultaneously being moved to slot 1344, which has been selected by user gaze 1208 lingering on slot 1344 for a threshold time (e.g., 3 seconds).
[0167] FIG. 15 is a conceptual diagram continuing the example 1000 of an augmentation in a virtual reality space, in which the augmentation 1302 is moved onto a horizontal surface and selects a different display mode in response to a corresponding placement context factor. The user previously placed the augmentation 1302 on the surface of the wall 1004 (FIG. 14). The user can further move the augmentation, for example, by pointing the user's gaze at a new surface, performing a gesture (e.g., "dragging" the augmentation to a new location) along with a voice command, etc. In example 1000, the user selects to move the augmentation 1302 onto surface 1108. In response to the augmentation's movement, the virtual reality system provides surface details to the augmentation 1302 (e.g., by invoking process 800 of FIG. 8). The augmentation 1302 has multiple display modes. A first display mode is enabled due to the augmentation 1302 being on a vertical surface 1102, causing the augmentation to be shaped as a hanging wall. The second display mode has an alternative condition that is true when extension 1302 is on a horizontal surface, such as surface 1108. By enabling this second display mode in response to being placed on horizontal surface 1108, extension 1302 reconfigures itself to appear as an upright picture frame. When extension 1302 is placed on surface 1108, surface 1108 can identify a slot for the extension. In this example, surface 1108 has a layout with slots 1346, 1348, and 1350. Because slot 1350 already contains object 1012 and slot 1348 is too small for extension 1302 in the current picture frame shape, surface 1108 selects slot 1346 for extension 1302 and notifies extension 1302 of its location on surface 1108, allowing extension 1302 to set its location in the virtual reality environment within slot 1346.
[0168] FIG. 16 is a conceptual diagram continuing the example 1000 of augmentations in a virtual reality space, where augmentation 1302 returns to the first display mode in response to the user moving augmentation 1302 back onto vertical wall surface 1102. The user has also selected a second picture of the user 1604 to add to the virtual reality environment and placed the resulting picture augmentation 1602 within slot 1336 on surface 1102. The selection and placement of augmentation 1602 was accomplished in a manner similar to the selection and placement of augmentation 1302 (FIGS. 12-14) by selecting the same picture option 1206 from virtual tablet 1204 (FIG. 12). In example 1000, augmentations created by the same requestor are permitted to share information. Furthermore, the request resulting from selecting option 1206 includes manifest-specific logic for augmentations to interact in certain contexts. One such function is that, according to the social graph, if two pictures depicting married users are placed within a threshold distance of each other, the augmentations will stick together and appear as a single augmentation with a heart-shaped border. To determine when to execute this logic, the augmentations register themselves with the artificial reality system to receive information about the placement and content of other picture augmentations placed on the same surface (e.g., using one or more of processes 700-900 of FIGS. 7-9). In this example, when augmentations 1602 and 1302 are placed adjacent to each other on surface 1102, the artificial reality system determines that these augmentations are registered to be notified of surrounding augmentations created by the same requester and provides these contextual factors to each augmentation, providing the augmentation with the identities of the users 1402 and 1604 depicted in each augmentation, as well as access to the augmentation's social graph to determine the relationship type between the depicted users.
[0169] 17 is a conceptual diagram continuing the example augmentation in virtual reality space 1000 responsive to context factors received by augmentation 1302 and augmentation 1602. Logic executed by augmentation 1302 and 1602 causes augmentation 1602 to move itself to share slot 1338 with augmentation 1302 and change its display mode to display as half of a wall picture 1702 depicting users 1604 and 1402, with half of a heart 1704 surrounding them.
[0170] 18 and 19 are conceptual diagrams continuing the example 1000 of augmentations in a virtual reality space (focused on surface 1102) in which the virtual reality system creates a new augmentation 1902 in response to a user withdrawing a generatable content item 1402 from an existing augmentation 1702. In example 1000, the parent extension can be written with content, and the user can select the parent extension to create a new child extension, for example, by performing a gesture to withdraw the content from the parent extension. In some implementations, the content written to the extension is associated with a manifest (or a process for creating a manifest in response to selecting a content item). This can be a manifest created by the parent extension, a predefined manifest selected for the extension type selected by the parent extension (e.g., a default manifest for a "person" extension where a person identifier is supplied), or a default generic manifest. In some implementations, such content that can spawn other extensions can be provided in a parent extension by an affordance, signaling that it can be retrieved from the parent extension. When a user retrieves the content, an associated manifest can be sent to the virtual reality system shell, which then again provides a child extension that can write to or set properties (e.g., by providing properties related to the retrieved content).
[0171] In FIG. 18 , the integrated augmentation 1702 is selected, displaying visual affordances on content items that can be selected to generate other augmentations, shown here as content items depicted with dashed lines, but which could be other affordances such as changing color, hue, or shading, adding animation, or adding icons. The user's hand 1202 grasps the generatable content item 1402 and pulls it from the augmentation 1702. This causes the augmentation 1302 (which is the right half of the augmentation 1702, as described above) to request a new augmentation and provide a default manifest for the person augmentation with the specified person identifier associated with the content item 1402. In this example, pulling the content item from the parent augmentation does not remove the content item from the parent augmentation. In other implementations, the augmentation can be configured to remove the content item from the augmentation when the content item is pulled. The virtual reality system receives the new augmentation request with the manifest and creates the new augment. In this example, creating a new person extension involves retrieving a profile picture content item 1906 from a social media site that is associated with the person identifier specified in the manifest. The person extension 1902 is also populated with a message control content item 1904 that, when activated, displays a message interface for communicating with the depicted user. The extension 1902 is placed within the virtual reality environment depending on where the user's hand 1202 performs a release gesture after withdrawing the content item from the extension 1702, which in this case was within slot 1340 of surface 1102. The user can continue to perform actions within the virtual reality environment, such as creating additional extensions, interacting with extensions, defining surfaces, and placing extensions on surfaces, as the user interacts with the virtual reality system.
[0172] References herein to "implementations" (e.g., "several implementations," "various implementations," "one implementation," "an implementation," etc.) mean that a particular feature, structure, or characteristic described in connection with that implementation is included in at least one implementation of the present disclosure. Appearances of these phrases in various places herein do not necessarily all refer to the same implementation, nor are they mutually exclusive separate or alternative implementations from other implementations. Furthermore, various features are described that may be exhibited by some implementations but not by other implementations. Similarly, various requirements are described that may be requirements of some implementations but not other implementations.
[0173] As used herein, exceeding a threshold means that the value of the item being compared exceeds a specified other value, that the item being compared is between a certain specified number of items with a maximum value, or that the item being compared has a value within a specified upper percentage value. As used herein, falling below a threshold means that the value of the item being compared is below a specified other value, that the item being compared is between a certain specified number of items with a minimum value, or that the item being compared has a value within a specified lower percentage value. As used herein, being within a threshold means that the value of the item being compared is between two other specified values, that the item being compared is between a middle specified number of items, or that the item being compared has a value within a middle specified percentage range. Relative terms, such as high or insignificant, unless otherwise defined, can be understood to assign a value and determine how that value compares to an established threshold. For example, the phrase "selecting a high-speed connection" can be understood to mean selecting a connection having an assigned value corresponding to its connection speed that exceeds a threshold.
[0174] As used herein, the word "or" refers to any possible permutation of a set of items. For example, the phrase "A, B, or C" refers to at least one of A, B, and C, or any combination thereof, such as A; B; C; A and B; A and C; B and C; A, B, and C, or any plurality of items, such as A and A; B, B, and C; A, A, B, C, and C.
[0175] Although the subject matter has been described in language specific to structural features and / or methodological acts, it should be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. While specific embodiments and implementations are described herein for illustrative purposes, various modifications can be made without departing from the scope of the embodiments and implementations. The specific features and acts described above are disclosed as example forms of implementing the following claims. Accordingly, the embodiments and implementations are not limited except as by the appended claims.
[0176] Any patents, patent applications, and other references mentioned above are incorporated herein by reference. Aspects can be modified, if necessary, to employ systems, functions, and concepts from the various references described above to provide yet further implementations. In the event that a statement or subject matter in a document incorporated by reference conflicts with a statement or subject matter in this application, the present application shall control.
Claims
1. 1. A method for generating a virtual container for a virtual reality environment, said method comprising: receiving a request for a virtual container, the request being associated with a manifest that specifies one or more parameters of the virtual container; creating a data structure for the virtual container by performing a first part of an initialization procedure for the data structure, the initialization procedure including setting one or more properties based on the parameters specified in the manifest, the virtual container creating a data structure including a context responsive display mode and context responsive logic; in response to the request, providing a handle to the data structure that enables positioning of the virtual container in the artificial reality environment and adding content items to the virtual container; performing a second part of the initialization procedure, the second part of the initialization procedure being performed while the handle is being used to position the virtual container in the synthetic reality environment and add content items to the virtual container; A method comprising:
2. the virtual container receives one or more context factors following the initialization procedure; and the virtual container enables one of the context responsive display modes in response to evaluating a corresponding condition taking the one or more context factors; or the virtual container invoking at least a portion of the context response logic in response to evaluating a corresponding condition taking the one or more context factors; The method of claim 1. one or more content items are added to the virtual container using the handle while the second part of the initialization procedure is being performed; The second part of the initialization procedure comprises: registering said virtual container to receive context factors; and / or Identifying context factors that the virtual container should receive by determining which context factors are used in conditions corresponding to one or more of the context response display modes or portions of the context response logic; and registering the virtual container to receive the identified context factors. The method of claim 1.
4. The parameters of the virtual container specified in the manifest include at least: one of the context responsive display modes; one or more of a virtual container type, a container shape, a spatial orientation, a location within the virtual reality environment, a location type suitable for placing the virtual container, or any combination thereof; The method of claim 1 , comprising:
5. 2. The method of claim 1, wherein the request is generated as a result of a user performing an interaction with a content item that is in another, previously created virtual container and associated with another manifest, the interaction being previously defined to signal the creation of a new virtual container based on the content item.
6. the request is further associated with an indication of a user's gaze direction; the virtual container is initially positioned within the virtual reality environment based on the gaze direction of the user; The method of claim 1.
7. the virtual container receiving a context factor specifying a value of a current mode of a virtual reality system; one of the context responsive display modes corresponds to a condition that evaluates to true when provided with the value of the current mode of the virtual reality system; the virtual container enables the one of the context responsive display modes in response to a corresponding condition evaluating to true; and the enabling of the one of the context-responsive display modes causes the virtual container to be set to its maximum size and moved to a specific location corresponding to the current mode of the virtual reality system; and / or at least one of the context responsive display modes is added to the data structure by creating the data structure for one of the predefined type virtual containers specified in the request, each data structure of the predefined type configured to include the at least one of the context responsive display modes. The method of claim 1.
8. one or more augmented context-responsive display modes are augmentations of other of said context-responsive display modes; each of the one or more expanded context responsive display modes points to another of the context responsive display modes; a condition for enabling a particular expanded context responsive display mode is that a condition associated with the context responsive display mode referenced by the particular expanded context responsive display mode evaluates to true; The method of claim 1.
9. the data structure is created for the type of virtual container specified in the request; the method further comprising automatically adding one or more content items to the virtual container based on predefined rules for adding content items to the specified type of virtual container. The method of claim 1.
10. 1. A computing system for generating a virtual container for a virtual reality environment, the system comprising: one or more processors; one or more memories storing instructions that, when executed by the one or more processors, cause the computing system to perform a process, the process comprising: receiving a request for a virtual container, the request being associated with a manifest that specifies one or more parameters of the virtual container; creating a data structure for the virtual container by performing a first part of an initialization procedure for the data structure based on the manifest; In response to the request, providing the data structure with a handle that enables adding a content item to the virtual container; performing a second part of the initialization procedure, the second part of the initialization procedure being performed while the handle is being used to add one or more content items to the virtual container; Computing system.
11. The virtual container receives one or more context factors; and the virtual container enables a context-responsive display mode in response to evaluating a corresponding condition taking into account the one or more context factors; or the virtual container invoking context response logic in response to evaluating a corresponding condition taking the one or more context factors; The computing system of claim 10.
12. The initialization procedure includes setting properties in the data structure based on the manifest, the properties including at least: a context response display mode; and / or a container shape and / or location type suitable for placement of said virtual container; and The data structure is created for the type of virtual container specified in the request, and the process further comprising automatically adding one or more content items to the virtual container based on rules for adding content items to the specified type of virtual container. The computing system of claim 10.
13. 11. The computing system of claim 10, wherein the request is generated as a result of a user performing an interaction with a content item that is in another previously created virtual container and associated with another manifest, the interaction being previously established to signal the creation of a new virtual container based on the content item.
14. the virtual container receiving a context factor specifying a value of a current mode of a virtual reality system; a context-responsive display mode included in the data structure corresponds to a condition that evaluates to true when provided with the value of the current mode of the virtual reality system; and enabling the context responsive display mode in response to the virtual container evaluating a corresponding condition as true; The computing system of claim 10.
15. A computer-readable storage medium storing instructions that, when executed by a computing system, cause the computing system to perform the method of any one of claims 1 to 9.
Citation Information
Patent Citations
Generation of assembly instructions for structural element models
JP2014515962A
Methods and system for managing and displaying virtual content in a mixed reality system
US20190197785A1