Patent Publication Number: US-11036182-B2

Title: Hologram location

Description:
PRIORITY APPLICATION 
     This application is a continuation of and claims priority to U.S. patent application Ser. No. 15/489,001, filed Apr. 17, 2017, the disclosure of which is incorporated herein in its entirety by reference. 
    
    
     TECHNICAL FIELD 
     The subject matter disclosed herein generally relates to the technical field of special-purpose machines that facilitate computer-generated imagery, including software-configured computerized variants of such special-purpose machines and improvements to such variants, and to the technologies by which such special-purpose machines become improved compared to other special-purpose machines that facilitate computer-generated imagery (e.g., within an augmented reality scene, or virtual reality scene, or both). Specifically, the present disclosure addresses systems and methods to facilitate hologram location. 
     BACKGROUND 
     A machine may be configured to interact with one or more users by generating and displaying an augmented reality scene or a virtual reality scene (e.g., in response to user input, such as user input that causes movement of the machine), or causing another machine (e.g., a user device) to generate and display the augmented reality scene or virtual reality scene. For example, the machine may be a user device (e.g., a tablet computer or a smart phone) with a display screen and a video camera, and the machine may be configured to generate live video with the video camera, generate some computer graphics (e.g., one or more computer-generated images), and cause a display screen to display a composited scene in which the computer graphics are superimposed upon the live video. Such a composited scene may be referred to as an augmented reality scene. Alternatively, if live video is omitted or otherwise absent from the composited scene, the composited scene may be referred to as a virtual reality scene. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       Some embodiments are illustrated by way of example and not limitation in the figures of the accompanying drawings. 
         FIG. 1  is a network diagram illustrating a network environment suitable for hologram location, according to some example embodiments. 
         FIG. 2  is a block diagram illustrating components of a hologram placement machine suitable for hologram location, according to some example embodiments. 
         FIG. 3  is a block diagram illustrating components of a user device suitable for hologram location, according to some example embodiments. 
         FIG. 4  is a conceptual diagram illustrating a real-world scene that includes a target user and a target device that is obscured by clothing worn by the target user, according to some example embodiments. 
         FIG. 5  is a conceptual diagram illustrating a user device displaying an augmented reality scene that includes the target user, according to some example embodiments. 
         FIG. 6  is a conceptual diagram illustrating the user device displaying the augmented reality scene that includes a target user, as well as multiple holograms located relative to the target device of the target user, according to some example embodiments. 
         FIG. 7  is a conceptual diagram illustrating geolocations and motion vectors corresponding to the holograms, the target device, and the user device, according to some example embodiments. 
         FIG. 8  is a conceptual diagram illustrating geolocations, offset vectors, an orientation vectors corresponding to the holograms, according to some example embodiments. 
         FIGS. 9-13  are flowcharts illustrating operations a method of hologram location, according to some example embodiments. 
         FIG. 14  is a block diagram illustrating components of a machine, according to some example embodiments, able to read instructions from a machine-readable medium and perform any one or more of the methodologies discussed herein. 
     
    
    
     DETAILED DESCRIPTION 
     Example methods (e.g., algorithms) facilitate hologram location, and example systems (e.g., special-purpose machines configured by special-purpose software) are configured to facilitate hologram location. Examples merely typify possible variations. Unless explicitly stated otherwise, structures (e.g., structural components, such as modules) are optional and may be combined or subdivided, and operations (e.g., in a procedure, algorithm, or other function) may vary in sequence or be combined or subdivided. In the following description, for purposes of explanation, numerous specific details are set forth to provide a thorough understanding of various example embodiments. It will be evident to one skilled in the art, however, that the present subject matter may be practiced without these specific details. 
     A machine (e.g., a server machine or a user device) may be configured to perform hologram location within a scene (e.g., an augmented reality scene or a virtual reality scene) to be generated for display by a user device (e.g., a viewing device). The placement of a hologram at a location within the scene may include determining the position (e.g., a geolocation, as indicated by global positioning system (GPS) coordinates, for example) of the hologram with respect to a target device, determining the speed of movement of the hologram with respect to the target device, determining the direction of movement of the hologram with respect the target device, determining the orientation of the hologram with the respect to the target device, or any suitable combination thereof. For example, any one or more of such determinations may be performed based on the position (e.g., geolocation) of the target device, the speed of movement of the target device, the direction of movement of the target device, or any suitable combination thereof. 
     As configured, the machine accesses target motion data that describes geolocation movement of the target device. Based on the target motion data, the machine determines (e.g., calculates or generates) a target motion vector that indicates a target speed of the target device. The target motion vector also indicates a target direction in which the target device is moving, at the target speed. Based on the target motion vector, the machine then determines a hologram motion vector for each hologram to be generated for display by a user device (e.g., viewing device). The hologram motion vector indicates a relative speed of a corresponding hologram (e.g., relative to the target device or relative to the user device), and indicates a relative direction of the corresponding hologram (e.g., relative to the target device or relative to the user device). 
     Based on the hologram motion vector, the machine causes the user device to generate a scene (e.g., augmented reality scene) in which the hologram moves at a speed (e.g., hologram speed) that is determined based on the target speed of the target device and based on the relative speed of the hologram (e.g., as indicated by the hologram motion vector). Furthermore, within the scene, the hologram moves in a direction (e.g., hologram direction) that is determined based on the target direction of the target device and based on the relative direction of the hologram (e.g., as indicated by the hologram motion vector). 
     According to various example embodiments, this may have the effect of determining the speed and direction in which a target device and its user are moving (e.g., walking) within the field of view of a user device, in order to then locate (e.g., place) and orient one or more holograms at or around the target device. For example, in a generated scene, a hologram of a science-fiction character (e.g., Darth Vader) may be located (e.g., placed) at the location of the target device (e.g., encapsulating and obscuring the target device and its user) and oriented in the direction in which the target device is moving, while holograms of science-fiction soldiers (e.g., stormtroopers) may be located at offset locations near the target device (e.g., walking behind Darth Vader) and oriented in the same direction in which the target device is moving. As another example, a city bus may be or include the target device, and the generated augmented reality scene may place holograms of birds, insects, or dragons at various offset locations behind and above the city bus. According to various example embodiments, such holograms may be dynamically updated (e.g., animated) to chase the city bus by flying in the same direction in which the city buses traveling. Moreover, the holograms in the generated scene may be animated in accordance with individual or group flight patterns (e.g., chaotic swarming or flying in formation). 
     As used herein, the term “hologram” refers to a machine-performed rendering of a virtual three-dimensional object in a three-dimensional environment. The virtual three-dimensional object may be or include a three-dimensional model (e.g., with or without texture mapping, such as one or more texture-mapped images), a three-dimensional cloud of points (e.g., a point cloud, with or without texture mapping), a three-dimensional volume of voxels (e.g., a voxel grid), or any suitable combination thereof. The three-dimensional environment (e.g., three-dimensional space) in which the three-dimensional object is rendered may be or include an augmented reality scene, a virtual reality scene, or both. 
     Once rendered, the virtual three-dimensional object is visible in the three-dimensional environment and appears to be occupying a portion of the three-dimensional environment (e.g., when a user views the three-dimensional environment using a viewing device, such as a smartphone or virtual reality goggles). Accordingly, rendering the virtual three-dimensional object may be referred to as generating the corresponding hologram (i.e., generating the rendering of the virtual three-dimensional object). 
     Furthermore, a hologram may be static (e.g., non-animated or otherwise motionless over time) or dynamic (e.g., animated or otherwise changing over time with respect to shape, size, color, brightness, transparency, location, orientation, or any suitable combination thereof). For example, a hologram may be or include a dynamic three-dimensional model of an animal or a person (e.g., a celebrity or a fictional character) that performs a series of movements (e.g., by the person&#39;s arms, legs, hands, or face) over a duration of time (e.g., with or without one or more corresponding audio tracks). 
       FIG. 1  is a network diagram illustrating a network environment  100  suitable for hologram location, according to some example embodiments. The network environment  100  includes a hologram placement machine  110 , a database  115 , a target device  130 , and user devices  140  and  150  (e.g., viewing devices), all communicatively coupled to each other via a network  190 . The hologram placement machine  110 , with or without the database  115 , may form all or part of a cloud  118  (e.g., a geographically distributed set of multiple machines configured to function as a single server), which may form all or part of a network-based system  105  (e.g., a cloud-based server system configured to provide one or more network-based services to the any one or more of the target device  130  and the user devices  140  and  150 ). The hologram placement machine  110 , the target device  130  and the user devices  140  and  150  may each be implemented in a special-purpose (e.g., specialized) computer system, in whole or in part, as described below with respect to  FIG. 14 . 
     Also shown in  FIG. 1  are users  132 ,  142 , and  152 . Any one or more of the users  132 ,  142 , and  152  may be a human user (e.g., a human being), a machine user (e.g., a robot or a computer configured by a software program to interact with a device), or any suitable combination thereof (e.g., a human assisted by a machine or a machine supervised by a human). The user  132  is associated with the target device  130  and may be a human user of the target device  130 . For example, the target device  130  (e.g., with an integrated geolocation sensor, such as a GPS receiver) may be a desktop computer, a vehicle computer, a tablet computer, a navigational device, a portable media device, a smart phone, or a wearable device (e.g., a smart watch, smart glasses, smart clothing, or smart jewelry) belonging to the user  132 . Similarly, the user  142  is associated with the user device  140  (e.g., a viewing device, with or without an integrated geolocation sensor) and may be a human user of the user device  140 . As examples, the user device  140  may be a desktop computer, a vehicle computer, a tablet computer, a navigational device, a portable media device, a smart phone, or a wearable device (e.g., a smart watch, smart glasses, smart clothing, or smart jewelry) belonging to the user  142 . Likewise, the user  152  is associated with the user device  150  and may be a human user of the user device  150 . As examples, the user device  150  (e.g., another viewing device, with or without an integrated geolocation sensor) may be a desktop computer, a vehicle computer, a tablet computer, a navigational device, a portable media device, a smart phone, or a wearable device (e.g., a smart watch, smart glasses, smart clothing, or smart jewelry) belonging to the user  152 . 
     Any of the systems or machines (e.g., databases and devices) shown in  FIG. 1  may be, include, or otherwise be implemented in a special-purpose (e.g., specialized or otherwise non-conventional and non-generic) computer that has been modified to perform one or more of the functions described herein for that system or machine (e.g., configured or programmed by special-purpose software, such as one or more software modules of a special-purpose application, operating system, firmware, middleware, or other software program). For example, a special-purpose computer system able to implement any one or more of the methodologies described herein is discussed below with respect to  FIG. 14 , and such a special-purpose computer may accordingly be a means for performing any one or more of the methodologies discussed herein. Within the technical field of such special-purpose computers, a special-purpose computer that has been specially modified (e.g., configured by special-purpose software) by the structures discussed herein to perform the functions discussed herein is technically improved compared to other special-purpose computers that lack the structures discussed herein or are otherwise unable to perform the functions discussed herein. Accordingly, a special-purpose machine configured according to the systems and methods discussed herein provides an improvement to the technology of similar special-purpose machines. 
     As used herein, a “database” is a data storage resource and may store data structured as a text file, a table, a spreadsheet, a relational database (e.g., an object-relational database), a triple store, a hierarchical data store, or any suitable combination thereof. Moreover, any two or more of the systems or machines illustrated in  FIG. 1  may be combined into a single system or machine, and the functions described herein for any single system or machine may be subdivided among multiple systems or machines. 
     The network  190  may be any network that enables communication between or among systems, machines, databases, and devices (e.g., between the hologram placement machine  110  and the target device  130 , or between the target device  130  and the user device  140 ). Accordingly, the network  190  may be a wired network, a wireless network (e.g., a mobile or cellular network), or any suitable combination thereof. The network  190  may include one or more portions that constitute a private network, a public network (e.g., the Internet), or any suitable combination thereof. Accordingly, the network  190  may include one or more portions that incorporate a local area network (LAN), a wide area network (WAN), the Internet, a mobile telephone network (e.g., a cellular network), a wired telephone network (e.g., a plain old telephone system (POTS) network), a wireless data network (e.g., a WiFi network or WiMax network), or any suitable combination thereof. Any one or more portions of the network  190  may communicate information via a transmission medium. As used herein, “transmission medium” refers to any intangible (e.g., transitory) medium that is capable of communicating (e.g., transmitting) instructions for execution by a machine (e.g., by one or more processors of such a machine), and includes digital or analog communication signals or other intangible media to facilitate communication of such software. 
       FIG. 2  is a block diagram illustrating components of the hologram placement machine  110 , according to some example embodiments. The hologram placement machine  110  is shown as including a target device interface  210 , a target analyzer  220 , a hologram manager  230 , and a user device interface  240 , all configured to communicate with each other (e.g., via a bus, shared memory, or a switch). Accordingly, in certain example embodiments, the hologram placement machine  110  is configured to perform one or more the methodologies described herein. 
     As shown in  FIG. 2 , the target device interface  210 , the target analyzer  220 , the hologram manager  230 , the user device interface  240 , or any suitable combination thereof, may form all or part of an application  200  (e.g., a software program) that is stored (e.g., installed) on the hologram placement machine  110  (e.g., responsive to or otherwise as a result of data being received from the database  115 ). Furthermore, one or more processors  299  (e.g., hardware processors, digital processors, or any suitable combination thereof) may be included (e.g., temporarily or permanently) in the application  200 , the target device interface  210 , the target analyzer  220 , the hologram manager  230 , the user device interface  240 , or any suitable combination thereof. 
       FIG. 3  is a block diagram illustrating components of the user device  140 , according to some example embodiments. The user device  150  may be similarly configured. In  FIG. 3 , the user device  140  is shown as including instances of the target device interface  210 , the target analyzer  220 , the hologram manager  230 , and a graphics manager  340 , all configured to communicate with each other (e.g., via a bus, shared memory, or a switch). Accordingly, in certain example embodiments, the user device  140  is configured to perform one or more the methodologies described herein. In some hybrid example embodiments, one or more of the methodologies described herein is performed by a combination of the hologram placement machine  110  and the user device  140 . 
     As shown in  FIG. 3 , the target device interface  210 , the target analyzer  220 , the hologram manager  230 , the graphics manager  340 , or any suitable combination thereof, may form all or part of an app  300  (e.g., a mobile app) that is stored (e.g., installed) on the user device  140  (e.g., responsive to or otherwise as a result of data being received from the database  115 ). Furthermore, one or more processors  299  (e.g., hardware processors, digital processors, or any suitable combination thereof) may be included (e.g., temporarily or permanently) in the application  200 , the target device interface  210 , the target analyzer  220 , the hologram manager  230 , the graphics manager  340 , or any suitable combination thereof. 
     Any one or more of the components (e.g., modules) described herein may be implemented using hardware alone (e.g., one or more of the processors  299 ) or a combination of hardware and software. For example, any component described herein may physically include an arrangement of one or more of the processors  299  (e.g., a subset of or among the processors  299 ) configured to perform the operations described herein for that component. As another example, any component described herein may include software, hardware, or both, that configure an arrangement of one or more of the processors  299  to perform the operations described herein for that component. Accordingly, different components described herein may include and configure different arrangements of the processors  299  at different points in time or a single arrangement of the processors  299  at different points in time. Each component (e.g., module) described herein is an example of a means for performing the operations described herein for that component. Moreover, any two or more components described herein may be combined into a single component, and the functions described herein for a single component may be subdivided among multiple components. Furthermore, according to various example embodiments, components described herein as being implemented within a single system or machine (e.g., a single device) may be distributed across multiple systems or machines (e.g., multiple devices). 
       FIG. 4  is a conceptual diagram illustrating a real-world scene  400  that includes the target user  132  and the target device  130 , according to some example embodiments. The real-world scene  400  is real and observable by cameras and human eyes directed at the real-world scene  400 , in contrast with an augmented reality scene or a virtual reality scene, either of which would include at least one machine-rendered (e.g., computer-generated) object that does not exist in the real-world scene  400 . 
     In the real-world scene  400  shown in  FIG. 4 , the target device  130  is present but obscured by clothing worn by the target user  132 . For example, the target device  130  may be traveling with the target user  132  (e.g., at any zero or nonzero speed, in any direction in three-dimensional space) by virtue of being placed in a coat pocket of the target user  132 . Accordingly, with respect to a fixed frame of reference (e.g., the surface of the planet Earth or any sub-region thereof), the target device  130  may be moving in the same direction as the target user  132  and moving with the same speed as the target user  132  in that direction. This movement may be detected by the target device  130  (e.g., via one or more geolocation sensors) and represented (e.g., encoded) as motion data (e.g., target motion data) that describes geolocation movement of the target device  130 . 
       FIG. 5  is a conceptual diagram illustrating the user device  140  (e.g., viewing device) displaying an augmented reality scene  500  that includes the target user  132 , according to some example embodiments. A display screen  141  of the user device  140  presents (e.g., displays) the augmented reality scene  500 , which is a composited blend of real-world visual data (e.g., live video or a still image of the real-world scene  400 , as captured by a camera of the user device  140 ) and one or more machine-rendered three-dimensional objects. As shown in  FIG. 5 , the augmented reality scene  500  is generated by adding one or more machine-rendered three-dimensional objects to live video captured by a camera of the user device  140  (e.g., within a field of view of the camera of the user device  140 ). In the example scenario shown  FIG. 5 , the target user  132  is largely within the field of view of the camera, and the augmented reality scene  500  accordingly includes a large portion of the target user  132 . In an alternative example scenario, the target user  132  is not within the field of view of the camera, and the augmented reality scene  500  would accordingly omit the target user  132 . 
       FIG. 6  is a conceptual diagram illustrating the user device  140  displaying the augmented reality scene  500  that includes the target user  132 , as well as multiple holograms  610  and  620  located (e.g., placed) relative to the target device  130  of the target user  132 , according to some example embodiments. As noted above, the display screen  141  presents the augmented reality scene  500 . As shown in  FIG. 6 , the augmented reality scene  500  has composited the holograms  610  and  620  into the live video that is captured by the camera of the user device  140 . As will be discussed in detail below, the holograms  610  and  620  have been placed and oriented based on the geolocation movement of the target device  130  (e.g., based on the direction and speed of the target device  130 , as the target device  130  travels with the target user  132 ). 
     In the example scenario shown in  FIG. 6 , the hologram  610  has been placed at an offset distance behind and to the left of the target user  132  (e.g., based on the geolocation of the target device  130 ), and the hologram  610  is rendered to appear as if traveling in the same direction as the target user  132  but with a slightly different speed as the target user  132 . Similarly, the hologram  620  has been placed at a different offset distance further behind and further to the left of the target user  132 , and the hologram  620  is rendered to appear as if traveling in a slightly different direction and with a slightly different speed as the target user  132  (e.g., a speed that is similar to the speed at which the hologram  610  is apparently traveling). 
       FIG. 7  is a conceptual diagram illustrating geolocations and motion vectors corresponding to the holograms  610  and  620 , the target device  130 , and the user device  140 , according to some example embodiments. The geolocations of the holograms  610  and  620 , the target device  130 , and the user device  140  may each respectively be specified by geolocation data, such as respective sets of GPS coordinates. 
     It may be helpful to next consider the target device  130 . As noted above, the target device  130  can be moving (e.g., traveling) within the real-world scene  400  (e.g., by virtue of being placed in a coat pocket of the target user  132 ), and this movement can be detected by the target device  130  and represented as target motion data. Furthermore, the target motion data may be used (e.g., by the hologram placement machine  110  or the user device  140 ) to determine (e.g., by generation, calculation, or translation) a target motion vector  730  that indicates a target speed (e.g., 0.5 meters per second) of the target device  130  and also indicates a target direction (e.g., 45 degrees North-East, at 3 degrees upward inclination) in which the target device  130  is moving at the target speed. According to some example embodiments, the target motion vector  730  is determined (e.g., by the hologram placement machine  110  or the user device  140 ) with respect to a fixed frame of reference (e.g., the real-world scene  400 , which may be or include the surface of the planet Earth or any sub-region thereof). In alternative example embodiments, the target motion vector  730  is determined with respect to the user device  140 , which may itself be in motion with respect to the fixed frame of reference. 
     In example embodiments in which the user device  140  is moving within the real-world scene  400  (e.g., by virtue of being carried in a hand of the user  142  as the user  142  is walking in the real-world scene  400 ). This movement can be detected by the user device  140  (e.g., provided one or more geolocation sensors) and represented as user motion data. Furthermore, the user motion data may be used (e.g., by the hologram placement machine  110  or the user device  140 ) to determine a user motion vector  740  that indicates a user speed (e.g., 0.6 meters per second) of the user device  140  and also indicates a user direction (e.g., 22.5 degrees North Northeast, at 5 degrees upward inclination) at which the user device  140  is moving at the user speed of the user device  140 . As shown in  FIG. 7 , whether the target device  130  is within the field of view of the camera of the user device  140  depends on the relative movement between the target device  130  and the user device  140 , as well as on the orientation of the user device  140  (e.g., in aiming its camera). 
     According to the methodologies discussed herein, hologram motion vectors  710  and  720  can be respectively determined (e.g., by the hologram placement machine  110  or the user device  140 ) for the holograms  610  and  620 , and such determinations may be based on the target motion vector  730  of the target device  130 . In the example embodiments illustrated in  FIG. 7 , the hologram motion vector  710  is a relative motion vector that indicates a relative speed of the hologram  610  with respect to the target motion vector  730  of the target device  130  and also indicates a relative direction in which the hologram  610  moves with respect to the target motion vector  730 . For example, the hologram motion vector  710  may indicate that the hologram  610  is moving in the same direction as the target device  130  but with a different speed compared to the target device  130 . Likewise, the hologram motion vector  720  is a relative motion vector that indicates a relative speed of the hologram  620  with respect to the target motion vector  730  of the target device  130  and also indicates a relative direction in which the hologram  620  moves with respect to the target motion vector  730 . For example, the hologram motion vector  720  may indicate that the hologram  620  is traveling in a different direction than the target device  130  but with a speed similar to the speed at which the hologram  610  is traveling relative to the target device  130 . 
       FIG. 7  additionally illustrates hologram motion vectors  711  and  721  that respectively correspond to the holograms  610  and  620 . In example embodiments in which the hologram motion vector  710  is a relative motion vector that indicates the relative speed and the relative direction of the hologram  610  with reference to the target motion vector  730  of the target device  130 , the hologram motion vector  711  may be an absolute motion vector that is or includes a vector sum of the target motion vector  730  and the hologram motion vector  710  of the hologram  610 . Thus, the hologram motion vector  711  may describe the actual speed (e.g., hologram speed) and actual direction (e.g., hologram direction) of the hologram  610  with respect to the same frame of reference (e.g., the surface of the planet Earth or any sub-region thereof) in which the target motion vector  730  describes the motion of the target device  130 . 
     Similarly, the hologram motion vector  721  may be an absolute motion vector that is or includes a vector sum of the target motion vector  730  and the hologram motion vector  720  of the hologram  620 . Thus, the hologram motion vector  721  may describe the actual speed and actual direction of the hologram  620  with respect to the same frame of reference (e.g., the surface of the planet Earth or any sub-region thereof) in which the target motion vector  730  describes the motion of the target device  130 . 
     As shown in  FIG. 7 , the geolocation of the target device  130  is represented by a set of axes that forms the origin of the target motion vector  730 . The geolocation of the user device  140  is represented by another set of axes that forms the origin of the user motion vector  740 . The real-world scene  400  and the augmented reality scene  500  may share a common frame of reference (e.g., relative to the surface of the planet Earth or a sub-region thereof). Accordingly, a virtual geolocation of the hologram  610  in the augmented reality scene  500  may coincide with a physical geolocation in the real-world scene  400 . In  FIG. 7 , the geolocation of the hologram  610  is represented by a set of axes that coincides with the origin of the hologram motion vector  710 . Similarly, the geolocation of the hologram  620  is represented by another set of axes that coincides with the origin of the hologram motion vector  720 . 
       FIG. 8  is a conceptual diagram illustrating geolocations, offset vectors, and orientation vectors corresponding to the holograms  610  and  620 , according to some example embodiments, as well as geolocations of the target device  130  and the user device  140 . As shown, the geolocation of the hologram  610  can be specified with respect to the geolocation of the target device  130  by an offset vector  810  (e.g., indicating one or more relative differences in GPS coordinates). The offset vector  810  is a relative offset vector that indicates a hologram offset distance between the target device  130  and the hologram  610  in the augmented reality scene  500  and also indicates a hologram offset direction of the hologram  610  with respect to the target device  130  within the augmented reality scene  500 . In some example embodiments, the offset vector  810  is a relative offset vector with respect to the target device  130 , while in alternative example embodiments, the offset vector  810  is a relative offset vector with respect to the user device  140 . 
     Similarly, the geolocation of the hologram  620  can be specified with respect to the geolocation of the target device  130  by another offset vector  820  (e.g., indicating one or more relative differences in GPS coordinates). The offset vector  820  is a relative offset vector that indicates a hologram offset distance between the target device  130  and the hologram  620  in the augmented reality scene  500  and also indicates a hologram offset direction of the hologram  620  with respect to the target device  130  within the augmented reality scene  500 . In some example embodiments, the offset vector  820  is a relative offset vector with respect to the target device  130 , while in alternative example embodiments, the offset vector  820  is a relative offset vector with respect to the user device  140 . As shown in  FIG. 8 , whether one or both of the holograms  610  and  620  are within the field of view of the camera of the user device  140  depends on the relative movement between each of the holograms  610  and  620  and the user device  140 , as well as on the orientation of the user device  140  (e.g., in aiming its camera). 
     In addition, as shown in  FIG. 8 , an orientation vector  811  of the hologram  610  indicates a direction in which the hologram  610  is oriented (e.g., facing or pointing). The orientation vector  811  may be a relative orientation vector that indicates a relative orientation direction of the hologram  610  with respect to the target device  130 , the target motion vector  730  of the target device  130 , or both. Likewise, an orientation vector  821  of the hologram  620  indicates a direction in which the hologram  620  is oriented, and the orientation vector  821  may be a relative orientation vector that indicates a relative orientation direction of the hologram  620  with respect to the target device  130 , the target motion vector  730  of the target device  130 , or both. In alternative example embodiments, one or both of the orientation vectors  811  and  821  indicate relative orientation directions with respect to the user device  140 , the user motion vector  740 , or both. 
       FIGS. 9-13  are flowcharts illustrating operations a method  900  of hologram location, according to some example embodiments. Operations in the method  900  may be performed by the hologram placement machine  110 , the user device  140 , or a combination of both, using components (e.g., modules) described above with respect to  FIG. 2  and  FIG. 3 , using one or more processors  299  (e.g., microprocessors or other hardware processors), or using any suitable combination thereof. However, for clarity of description with respect to  FIGS. 9-13 , the method  900  is generally described as if being performed by the user device  140 , unless otherwise specified. As shown in  FIG. 9 , the method  900  includes operations  910 ,  920 ,  930 , and  940 . 
     In operation  910 , the target device interface  210  accesses target motion data that describes geolocation movement of the target device  130  (e.g., as it moves from one geolocation to another geolocation, over a period of time). The target motion data may be generated by one or more sensors in the target device  130  (e.g., a GPS receiver). In some example embodiments, the target motion data is accessed directly from the target device  130  (e.g., via the network  190  or via direct peer-to-peer networking). In other example embodiments, the target motion data is uploaded by the target device  130  to the database  115  and accessed therefrom. 
     In operation  920 , the target analyzer  220  determines (e.g., generates, calculates, translates, or otherwise obtains) the target motion vector  730  that corresponds to the target device  130 . The determination of the target motion vector  730  is performed based on the target motion data accessed in operation  910 . For example, the target motion data may indicate that the target device  130  moved from a first geolocation to a second geolocation over a measured period of time, and the target motion vector  730  may be determined from the first and second geolocations and the measured period of time. As noted above, the target motion vector  730  indicates a target speed at which the target device  130  is moving within the real-world scene  400  (e.g., with respect to the surface of the planet Earth or any sub-region thereof) and also indicates a target direction in which the target device  130  is moving at the target speed within the real-world scene  400  (e.g., also with respect to the surface of the planet Earth or the same sub-region thereof). 
     In operation  930 , the hologram manager  230  determines (e.g., generates, calculates, translates, or otherwise obtains) the hologram motion vector  710  that corresponds to the hologram  610  (e.g., to be generated within the augmented reality scene  500  to be presented by the user device  140 ). The determination of the hologram motion vector  710  may be performed based on the target motion vector  730  that was determined in operation  920 , and the hologram vector  710  may accordingly be relative to the target motion vector  730 . 
     Since the target motion vector  730  indicates the direction and speed of the target device  130  within the real-world scene  400 , the hologram motion vector  710  may be considered as a relative motion vector that indicates a relative speed (e.g., a relative real-world speed, even though the hologram  610  will be generated in the augmented reality scene  500 ) of the hologram  610  with respect to the target device  130  itself and indicates a relative direction (e.g., a relative real-world direction, even though the hologram  610  will be generated in the augmented reality scene  500 ) in which the hologram  610  moves with respect to the target device  130  itself. In some example embodiments, performance of operation  930  includes accessing the relative speed of the hologram  610  from a hologram database (e.g., database  115 ) that correlates the relative speed with the hologram  610 , accessing the relative direction of the hologram  610  from the hologram database, or both. Analogous operations may be performed similarly for one or more additional holograms (e.g., hologram  620 ) to be generated in the augmented reality scene  500 . 
     In operation  940 , the graphics manager  340  of the user device  140  causes the user device  140  to generate the hologram  610  and display the augmented reality scene  500  that includes the hologram  610  and in which the hologram  610  moves. The motion of the hologram  610  within the augmented reality scene  500  may be based on (e.g., in accordance with) the hologram motion vector  710  determined in operation  930 . Furthermore, in example embodiments in which the hologram motion vector  710  is a relative motion vector with respect to the target motion vector  730 , the motion of the hologram  610  within the augmented reality scene  500  may also be based on (e.g., in accordance with) the hologram motion vector  711  (e.g., as described above with respect to  FIG. 7 ). 
     Accordingly, the graphics manager  340  causes the hologram  610  to move at a hologram speed that is determined (e.g., by the graphics manager  340 ) based on the target speed of the target device  130  and on the relative speed of the hologram  610  with respect to the target device  130 . Moreover, the graphics manager  340  causes the hologram  610  to move in a hologram direction that is determined (e.g., by the graphics manager  340 ) based on the target direction of the target device  130  and on the relative direction of the hologram  610  with respect to the target device  130 . Analogous operations would be performed similarly for one or more additional holograms (e.g., hologram  620 ) in the augmented reality scene  500 . 
     In example embodiments in which the method  900  is performed by the hologram placement machine  110 , operation  940  is performed by the user device interface  240 . In general, operations described as being performed by the graphics manager  340  of the user device  140  may be performed by the user device interface  240  of the hologram placement machine  110  itself or caused by the user device interface  240  to be performed elsewhere (e.g., by the graphics manager  340  of the user device  140 ). For example, the user device interface  240  may cause the user device  140  (e.g., via the graphics manager  340 ) to perform the generation of the hologram  610  and the display of the augmented reality scene  500  that includes the hologram  610  and in which the hologram  610  moves. 
     As shown in  FIG. 10 , in addition to any one or more of the operations previously described, the method  900  may include one or more of operations  1010 ,  1020 ,  1030 ,  1031 ,  1032 , and  1033 , according to various example embodiments. Operation  1010  may be performed at any point prior to operation  920 , in which the target analyzer  220  determines the target motion vector  730  of the target device  130 . In operation  1010 , the target analyzer  220  accesses user motion data that describes geolocation movement of the user device  140  (e.g., as it moves from one geolocation to another geolocation, over a period of time, relative to a fixed frame of reference, such as the surface of the planet Earth or any sub-region thereof). 
     According to certain example embodiments, the user motion data is accessed from the user device  140 , the database  115 , or both. Moreover, the accessing of the user motion data for the user device  140  may be based on (e.g., in response to) an indication that the user device  140  will display the augmented reality scene  500 . Such an indication may be received (e.g., by the app  300  or the application  200 ) as a result of user input (e.g., by the user  142 ) at the user device  140 , a result of user input (e.g., by the user  132 ) at the target device  130 , a result of the target device  130  being detected within the field of view of a camera of the user device  140 , or any suitable combination thereof. 
     Operation  1020  may be performed as part (e.g., a precursor task, a subroutine, or a portion) of operation  920 , in which the target analyzer  220  determines the target motion vector  730 . In operation  1020 , the target analyzer  220  determines the target motion vector  730  as a relative motion vector, and the relative motion vector may describe the motion of the target device  130  with respect to the user device  140 , which itself may be in motion with respect to the real-world scene  400 . Since the hologram speed of the hologram  610  may be determined based on the target motion vector  730 , the hologram speed of the hologram  610  may be determined with respect to the user device  140 . Similarly, since the hologram direction of the hologram  610  may be determined based on the target motion vector  730 , the hologram direction of the hologram  610  may also be determined with respect to the user device  140 . 
     One or both of operations  1030  and  1032  may be performed as part of operation  930 , in which the hologram manager  230  determines the hologram motion vector  710  of the hologram  610 . As noted above, the hologram motion vector  710  may be a relative motion vector that describes the motion of the hologram  610  with respect to the user device  140  that will generate the hologram  610  and present the augmented reality scene  500 . 
     In operation  1030 , the hologram manager  230  determines the relative hologram speed of the hologram  610  relative to the user device  140 . This determination may be based on the target speed of the target device  130  (e.g., with respect to the surface of the planet Earth or a sub-region thereof) and on the relative speed of the hologram  610  (e.g., with respect to the target device  130 ). 
     Operation  1031  may be performed as part of operation  1030 . In operation  1031 , the hologram manager  230  accesses the relative speed of the hologram  610  (e.g., with respect to the target device  130 ), and the relative speed of the hologram  610  may be accessed from the database  115  or another data source accessible via the network  190 . That is, the database  115  may store the relative speed of the hologram  610  with respect to any target device (e.g., target device  130 ), and this relative speed may be accessed in operation  1031 . 
     In operation  1032 , the hologram manager  230  determines the relative hologram direction of the hologram  610  relative to the user device  140 . This determination may be based on the target direction of the target device  130  (e.g., with respect to the surface of the planet Earth or the sub-region thereof used in operation  1030 ) and on the relative direction of the hologram  610  (e.g., with respect to the target device  130 ). 
     Operation  1033  may be performed as part of operation  1032 . In operation  1032 , the hologram manager  230  accesses the relative direction of the hologram  610  (e.g., with respect to the target device  130 ), and the relative direction of the hologram  610  may be accessed from the database  115  or another data source accessible via the network  190 . That is, the database  115  may store the relative direction of the hologram  610  with respect to any target device (e.g., target device  130 ), and this relative direction may be accessed in operation  1033 . 
     As shown in  FIG. 11 , in addition to any one or more of the operations previously described, the method  900  may include one or more of operations  1135 ,  1136 ,  1137 ,  1138 ,  1139 ,  1140 ,  1141 ,  1142 , and  1143 , according to various example embodiments. Operation  1135  may be performed at any point prior to operation  940 , in which the graphics manager  340  causes the user device  140  to generate the hologram  610  (e.g., along with one or more additional holograms, such as the hologram  620 ) and display the augmented reality scene  500 . In operation  1135 , the graphics manager  340  determines the field of view of a camera in the user device  140  (e.g., a camera that is being managed by the app  300 ). According to some example embodiments, this determination includes accessing (e.g., via a lookup) metadata that is stored by the user device  140  and describes the field of view of the camera. According to alternative example embodiments, this determination includes obtaining such metadata via the network  190  (e.g., from the database  115 ). 
     With or without operation  1135 , operation  1136  may be performed at any point prior to operation  940 . In operation  1136 , the target device interface  210  accesses target position data of the target device  130 . The target position data describes a geolocation of the target device  130  and may be accessed in a manner similar to that described above with respect to the accessing of the target motion data of the target device  130  in operation  910 . The target position data of the target device  130  may be generated by one or more sensors (e.g., a GPS receiver) in the target device  130 . In some example embodiments, the target position data is accessed directly from the target device  130  (e.g., via the network  190  or via direct peer-to-peer networking). In other example embodiments, the target position data is uploaded by the target device  130  to the database  115  and accessed therefrom. 
     In example embodiments that include operation  1135 , operation  1140  may be performed as part of operation  940 . In operation  1140 , the graphics manager  340  causes the user device  140  to display the hologram  610  within the field of view determined in operation  1135 . Furthermore, in some example embodiments where the target position data of the target device  130  was accessed in operation  1136 , operation  1140  may include detecting that the geolocation of the target device  130  is within the field of view of the camera of the user device  140 . Based on this detection, the graphics manager  340  may perform operation  1143  (e.g., as part of operation  940 ) by causing the user device  140  to include (e.g., encompass) the geolocation of the target device  130  in the augmented reality scene  500 . 
     Alternatively, in certain example embodiments where the target position data of the target device  130  was accessed in operation  1136 , operation  1140  may include detecting that the geolocation of the target device  130  is outside the field of view of the camera of the user device  140 . Based on this detection, the graphics manager  340  may perform operation  1142  (e.g., as part of operation  940 ) for causing the user device  140  to exclude (e.g., omit) the geolocation of the target device  130  from the augmented reality scene  500 . 
     In example embodiments that include operation  1136 , operation  1137  may be performed at any point prior to operation  940 , in which the graphics manager  340  causes the user device  140  to generate the hologram  610  (e.g., along with one or more additional holograms, such as the hologram  620 ) and display the augmented reality scene  500 . In operation  1137 , the hologram manager  230  determines (e.g., accesses, calculates, or otherwise obtains) the offset vector  810  of the hologram  610 , which may be a relative offset vector that indicates a relative offset distance for the hologram  610  and indicates a relative offset direction for the hologram  610 . The determination of the offset vector  810  may include accessing (e.g., via a lookup) the relative offset distance, the relative offset direction, or both, from the database  115 . In some example embodiments, the determination of the offset vector  810  is performed dynamically by execution of software (e.g., accessed from the database  115 ) that specifies or otherwise describes one or more translational movements of the hologram  610 . 
     As shown in  FIG. 11 , operation  1137  may include one or both of operations  1138  and  1139 . In operation  1138 , the hologram manager  230  determines (e.g., accesses or calculates) the relative offset distance of the hologram  610  (e.g., with respect to the target device  130 ). For example, the relative offset distance may be accessed from the database  115 . As another example, the relative offset distance may be dynamically calculated by execution of motion-generating or otherwise motion-specifying software (e.g., stored by the database  115  and accessed therefrom for execution). Similarly, in operation  1139 , the hologram manager  230  determines the relative offset direction of the hologram  610  (e.g., with respect to the target device  130 ). For example, the relative offset direction may be accessed from the database  115 . As another example, the relative offset direction may be dynamically calculated by execution of motion-generating or otherwise motion-specifying software (e.g., stored by the database  115  and accessed therefrom for execution). 
     In example embodiments that include operation  1137 , operation  1141  may be performed as part of operation  940 , in which the graphics manager  340  causes the user device  140  to generate the hologram  610  and display the augmented reality scene  500 . In operation  1141 , the graphics manager  340  causes the user device  140  to display the hologram  610  in accordance with the offset vector  810  of the hologram  610 . For example, the graphics manager  340  may cause the hologram  610  to appear in the augmented reality scene  500  at the relative offset distance indicated by the offset vector  810  and in the relative offset direction indicated by the offset vector  810 . As noted above, according to various example embodiments, the relative offset distance may have been determined in operation  1138 , and the relative offset direction may have been determined in operation  1139 . 
     As shown in  FIG. 12 , in addition to any one or more of the operations previously described, the method  900  may include one or more of operations  1237 ,  1239 ,  1240 , and  1241 . Operation  1237  may be performed at any point prior to operation  940 , in which the graphics manager  340  causes the user device  140  to generate the hologram  610  (e.g., along with one or more additional holograms, such as the hologram  620 ) and display the augmented reality scene  500 . In operation  1237 , the hologram manager  230  determines (e.g., accesses, calculates, or otherwise obtains) the orientation vector  811  of the hologram  610 , which may be a relative orientation vector that indicates a relative orientation direction in which the hologram  610  is oriented (e.g., relative to the target device  130 , the target motion vector  730 , or both). The determination of the orientation vector  811  may include accessing (e.g., via a lookup) the relative orientation direction from the database  115 . In some example embodiments, the determination of the relative orientation direction is performed dynamically by execution of software (e.g., accessed from the database  115 ) that specifies or otherwise describes one or more rotational movements of the hologram  610 . 
     As shown in  FIG. 12 , operation  1237  may include operation  1239 . In operation  1239 , the hologram manager  230  determines (e.g., accesses or calculates) the relative orientation direction of the hologram  610  (e.g., with respect to the target motion vector  730 ). For example, the relative orientation direction may be accessed from the database  115 . As another example, the relative orientation direction may be dynamically calculated by execution of rotation-generating or otherwise rotation-specifying software (e.g., stored by the database  115  and accessed therefrom for execution). 
     As shown in  FIG. 12 , operation  1240  may be performed as part of operation  940 , in which the graphics manager  340  causes the user device  140  to generate the hologram  610  and display the augmented reality scene  500 . In operation  1240 , the graphics manager  340  causes the user device  140  to display the hologram  610  with an orientation that is determined based on the target motion vector  730  of the target device  130 . In alternative example embodiments, the orientation is determined based on the user motion vector  740  of the user device  140 , and hybrid example embodiments may determine the orientation based on both the target motion vector  730  and the user motion vector  740 . 
     Furthermore, operation  1241  may be performed as part of operation  1240 . In operation  1241 , the graphics manager  340  causes the user device  140  to display the hologram  610  with an orientation that is determined based on the relative orientation direction (e.g., relative to the target device  130  or the target motion vector  730 ) determined in operation  1237 . 
     As shown in  FIG. 13 , in addition to any one or more of the operations previously described, the method  900  may include one or more of operations  1340 ,  1341 ,  1350 , and  1360 , according to various example embodiments. One or both of operations  1340  may be performed as part of operation  940 . In operation  1340 , the graphics manager  340  causes the user device  140  to access live camera data from a camera of the user device  140 . This may be performed by retrieving one or more frames of video from a memory that corresponds to the camera, as the camera captures at least a portion of the real-world scene  400 . 
     In operation  1341 , the graphics manager  340  causes the user device  140  to fully or partially generate the augmented reality scene  500  by generating composited video that includes the hologram  610  and at least some of the live camera data accessed in operation  1340 . This may have the effect of compositing the hologram  610  onto at least a portion of the live camera data to fully or partially generate the augmented reality scene  500 . 
     One or both of operations  1350  and  1360  may be performed after operation  940 , in which the graphics manager  340  causes the user device  140  to generate the hologram  610  (e.g., along with one or more additional holograms, such as the hologram  620 ) and display the augmented reality scene  500 . In operation  1350 , the graphics manager  340  causes the user device  140  to record at least a portion of the augmented reality scene  500 . This may be performed in response to user input (e.g., by the user  142 ), based on one or more user preferences (e.g., set by the user  142  and stored by the user device  140  or the database  115 ), or any suitable combination thereof. 
     The portion of the augmented reality scene  500  may be recorded to local storage at the user device  140 , uploaded to the database  115 , or both. The recorded portion of the augmented reality scene  500  depicts the hologram  610  moving in accordance with the hologram motion vector  710  determined in operation  930  and may depict one or more additional holograms (e.g., hologram  620 ) moving in accordance with their respective hologram motion vectors (e.g., hologram motion vector  720  determined in additional instances of operation  930 ). 
     In operation  1360 , the graphics manager  340  causes the user device  140  to communicate at least a portion of the displayed augmented reality scene  500  to another user device (e.g., user device  150 ). For example, the portion of the augmented reality scene  500  may be communicated from the user device  140  to the user device  150  via the network  190  or via direct peer-to-peer networking. In example embodiments that include operation  1350 , the portion communicated is or includes the portion that was recorded in operation  1350 . This may have the effect of enabling social sharing (e.g., by one or more social networks, such as social media sharing networks) of the augmented reality scene  500  or one or more portions thereof by the user  142  of the user device  140  with one or more friends, connections, followers, or other social networking contacts (e.g., user  152  of the user device  150 ). 
     According to various example embodiments, one or more of the methodologies described herein may facilitate static or dynamic location (e.g., placement) of one or more holograms within a generated augmented reality scene or within a generated virtual reality scene. Moreover, one or more of the methodologies described herein may facilitate determining the offset positions of one or more holograms, the speeds of movement of one or more holograms, the directions of movement of one or more holograms, the orientations of one or more holograms, or any suitable combination thereof, relative to a target device, for example, based on the speed of movement of the target device, the direction of movement of the target device, or both. Hence, one or more of the methodologies described herein may facilitate simple or complex, static or dynamic behavior of a hologram or a group of holograms, as well as generation, rendering, and display of augmented reality or virtual reality scenes that include such holograms, as compared to capabilities of pre-existing systems and methods. 
     When these effects are considered in aggregate, one or more of the methodologies described herein may obviate a need for certain efforts or resources that otherwise would be involved in hologram location. Efforts expended by a user (e.g., a hologram artist) in performing static or dynamic hologram location may be reduced by use of (e.g., reliance upon) a special-purpose machine that implements one or more of the methodologies described herein. Computing resources used by one or more systems or machines (e.g., within the network environment  100 ) may similarly be reduced (e.g., compared to systems or machines that lack the structures discussed herein or are otherwise unable to perform the functions discussed herein). Examples of such computing resources include processor cycles, network traffic, computational capacity, main memory usage, graphics rendering capacity, graphics memory usage, data storage capacity, power consumption, and cooling capacity. 
       FIG. 14  is a block diagram illustrating components of a machine  1400 , according to some example embodiments, able to read instructions  1424  from a machine-readable medium  1422  (e.g., a non-transitory machine-readable medium, a machine-readable storage medium, a computer-readable storage medium, or any suitable combination thereof) and perform any one or more of the methodologies discussed herein, in whole or in part. Specifically,  FIG. 14  shows the machine  1400  in the example form of a computer system (e.g., a computer) within which the instructions  1424  (e.g., software, a program, an application, an applet, an app, or other executable code) for causing the machine  1400  to perform any one or more of the methodologies discussed herein may be executed, in whole or in part. 
     In alternative embodiments, the machine  1400  operates as a standalone device or may be communicatively coupled (e.g., networked) to other machines. In a networked deployment, the machine  1400  may operate in the capacity of a server machine or a client machine in a server-client network environment, or as a peer machine in a distributed (e.g., peer-to-peer) network environment. The machine  1400  may be a server computer, a client computer, a personal computer (PC), a tablet computer, a laptop computer, a netbook, a cellular telephone, a smart phone, a set-top box (STB), a personal digital assistant (PDA), a web appliance, a network router, a network switch, a network bridge, or any machine capable of executing the instructions  1424 , sequentially or otherwise, that specify actions to be taken by that machine. Further, while only a single machine is illustrated, the term “machine” shall also be taken to include any collection of machines that individually or jointly execute the instructions  1424  to perform all or part of any one or more of the methodologies discussed herein. 
     The machine  1400  includes a processor  1402  (e.g., one or more central processing units (CPUs), one or more graphics processing units (GPUs), one or more digital signal processors (DSPs), one or more application specific integrated circuits (ASICs), one or more radio-frequency integrated circuits (RFICs), or any suitable combination thereof), a main memory  1404 , and a static memory  1406 , which are configured to communicate with each other via a bus  1408 . The processor  1402  contains solid-state digital microcircuits (e.g., electronic, optical, or both) that are configurable, temporarily or permanently, by some or all of the instructions  1424  such that the processor  1402  is configurable to perform any one or more of the methodologies described herein, in whole or in part. For example, a set of one or more microcircuits of the processor  1402  may be configurable to execute one or more modules (e.g., software modules) described herein. In some example embodiments, the processor  1402  is a multicore CPU (e.g., a dual-core CPU, a quad-core CPU, an 8-core CPU, or a 128-core CPU) within which each of multiple cores behaves as a separate processor that is able to perform any one or more of the methodologies discussed herein, in whole or in part. Although the beneficial effects described herein may be provided by the machine  1400  with at least the processor  1402 , these same beneficial effects may be provided by a different kind of machine that contains no processors (e.g., a purely mechanical system, a purely hydraulic system, or a hybrid mechanical-hydraulic system), if such a processor-less machine is configured to perform one or more of the methodologies described herein. 
     The machine  1400  may further include a graphics display  1410  (e.g., a plasma display panel (PDP), a light emitting diode (LED) display, a liquid crystal display (LCD), a projector, a cathode ray tube (CRT), or any other display capable of displaying graphics or video). The machine  1400  may also include an alphanumeric input device  1412  (e.g., a keyboard or keypad), a pointer input device  1414  (e.g., a mouse, a touchpad, a touchscreen, a trackball, a joystick, a stylus, a motion sensor, an eye tracking device, a data glove, or other pointing instrument), a data storage  1416 , an audio generation device  1418  (e.g., a sound card, an amplifier, a speaker, a headphone jack, or any suitable combination thereof), and a network interface device  1420 . 
     The data storage  1416  (e.g., a data storage device) includes the machine-readable medium  1422  (e.g., a tangible and non-transitory machine-readable storage medium) on which are stored the instructions  1424  embodying any one or more of the methodologies or functions described herein. The instructions  1424  may also reside, completely or at least partially, within the main memory  1404 , within the static memory  1406 , within the processor  1402  (e.g., within the processor&#39;s cache memory), or any suitable combination thereof, before or during execution thereof by the machine  1400 . Accordingly, the main memory  1404 , the static memory  1406 , and the processor  1402  may be considered machine-readable media (e.g., tangible and non-transitory machine-readable media). The instructions  1424  may be transmitted or received over the network  190  via the network interface device  1420 . For example, the network interface device  1420  may communicate the instructions  1424  using any one or more transfer protocols (e.g., hypertext transfer protocol (HTTP)). 
     In some example embodiments, the machine  1400  may be a portable computing device (e.g., a smart phone, a tablet computer, or a wearable device), and may have one or more additional input components  1430  (e.g., sensors or gauges). Examples of such input components  1430  include an image input component (e.g., one or more cameras), an audio input component (e.g., one or more microphones), a direction input component (e.g., a compass), a location input component (e.g., a GPS receiver), an orientation component (e.g., a gyroscope), a motion detection component (e.g., one or more accelerometers), an altitude detection component (e.g., an altimeter), a biometric input component (e.g., a heartrate detector or a blood pressure detector), and a gas detection component (e.g., a gas sensor). Input data gathered by any one or more of these input components may be accessible and available for use by any of the modules described herein. 
     As used herein, the term “memory” refers to a machine-readable medium able to store data temporarily or permanently and may be taken to include, but not be limited to, random-access memory (RAM), read-only memory (ROM), buffer memory, flash memory, and cache memory. While the machine-readable medium  1422  is shown in an example embodiment to be a single medium, the term “machine-readable medium” should be taken to include a single medium or multiple media (e.g., a centralized or distributed database, or associated caches and servers) able to store instructions. The term “machine-readable medium” shall also be taken to include any medium, or combination of multiple media, that is capable of storing the instructions  1424  for execution by the machine  1400 , such that the instructions  1424 , when executed by one or more processors of the machine  1400  (e.g., processor  1402 ), cause the machine  1400  to perform any one or more of the methodologies described herein, in whole or in part. Accordingly, a “machine-readable medium” refers to a single storage apparatus or device, as well as cloud-based storage systems or storage networks that include multiple storage apparatus or devices. The term “machine-readable medium” shall accordingly be taken to include, but not be limited to, one or more tangible and non-transitory data repositories (e.g., data volumes) in the example form of a solid-state memory chip, an optical disc, a magnetic disc, or any suitable combination thereof. A “non-transitory” machine-readable medium, as used herein, specifically does not include propagating signals per se. In some example embodiments, the instructions  1424  for execution by the machine  1400  may be communicated by a carrier medium. Examples of such a carrier medium include a storage medium (e.g., a non-transitory machine-readable storage medium, such as a solid-state memory, being physically moved from one place to another place) and a transient medium (e.g., a propagating signal that communicates the instructions  1424 ). 
     Certain example embodiments are described herein as including modules. Modules may constitute software modules (e.g., code stored or otherwise embodied in a machine-readable medium or in a transmission medium), hardware modules, or any suitable combination thereof. A “hardware module” is a tangible (e.g., non-transitory) physical component (e.g., a set of one or more processors) capable of performing certain operations and may be configured or arranged in a certain physical manner. In various example embodiments, one or more computer systems or one or more hardware modules thereof may be configured by software (e.g., an application or portion thereof) as a hardware module that operates to perform operations described herein for that module. 
     In some example embodiments, a hardware module may be implemented mechanically, electronically, hydraulically, or any suitable combination thereof. For example, a hardware module may include dedicated circuitry or logic that is permanently configured to perform certain operations. A hardware module may be or include a special-purpose processor, such as a field programmable gate array (FPGA) or an ASIC. A hardware module may also include programmable logic or circuitry that is temporarily configured by software to perform certain operations. As an example, a hardware module may include software encompassed within a CPU or other programmable processor. It will be appreciated that the decision to implement a hardware module mechanically, hydraulically, in dedicated and permanently configured circuitry, or in temporarily configured circuitry (e.g., configured by software) may be driven by cost and time considerations. 
     Accordingly, the phrase “hardware module” should be understood to encompass a tangible entity that may be physically constructed, permanently configured (e.g., hardwired), or temporarily configured (e.g., programmed) to operate in a certain manner or to perform certain operations described herein. Furthermore, as used herein, the phrase “hardware-implemented module” refers to a hardware module. Considering example embodiments in which hardware modules are temporarily configured (e.g., programmed), each of the hardware modules need not be configured or instantiated at any one instance in time. For example, where a hardware module includes a CPU configured by software to become a special-purpose processor, the CPU may be configured as respectively different special-purpose processors (e.g., each included in a different hardware module) at different times. Software (e.g., a software module) may accordingly configure one or more processors, for example, to become or otherwise constitute a particular hardware module at one instance of time and to become or otherwise constitute a different hardware module at a different instance of time. 
     Hardware modules can provide information to, and receive information from, other hardware modules. Accordingly, the described hardware modules may be regarded as being communicatively coupled. Where multiple hardware modules exist contemporaneously, communications may be achieved through signal transmission (e.g., over circuits and buses) between or among two or more of the hardware modules. In embodiments in which multiple hardware modules are configured or instantiated at different times, communications between such hardware modules may be achieved, for example, through the storage and retrieval of information in memory structures to which the multiple hardware modules have access. For example, one hardware module may perform an operation and store the output of that operation in a memory (e.g., a memory device) to which it is communicatively coupled. A further hardware module may then, at a later time, access the memory to retrieve and process the stored output. Hardware modules may also initiate communications with input or output devices, and can operate on a resource (e.g., a collection of information from a computing resource). 
     The various operations of example methods described herein may be performed, at least partially, by one or more processors that are temporarily configured (e.g., by software) or permanently configured to perform the relevant operations. Whether temporarily or permanently configured, such processors may constitute processor-implemented modules that operate to perform one or more operations or functions described herein. As used herein, “processor-implemented module” refers to a hardware module in which the hardware includes one or more processors. Accordingly, the operations described herein may be at least partially processor-implemented, hardware-implemented, or both, since a processor is an example of hardware, and at least some operations within any one or more of the methods discussed herein may be performed by one or more processor-implemented modules, hardware-implemented modules, or any suitable combination thereof. 
     Moreover, such one or more processors may perform operations in a “cloud computing” environment or as a service (e.g., within a “software as a service” (SaaS) implementation). For example, at least some operations within any one or more of the methods discussed herein may be performed by a group of computers (e.g., as examples of machines that include processors), with these operations being accessible via a network (e.g., the Internet) and via one or more appropriate interfaces (e.g., an application program interface (API)). The performance of certain operations may be distributed among the one or more processors, whether residing only within a single machine or deployed across a number of machines. In some example embodiments, the one or more processors or hardware modules (e.g., processor-implemented modules) may be located in a single geographic location (e.g., within a home environment, an office environment, or a server farm). In other example embodiments, the one or more processors or hardware modules may be distributed across a number of geographic locations. 
     Throughout this specification, plural instances may implement components, operations, or structures described as a single instance. Although individual operations of one or more methods are illustrated and described as separate operations, one or more of the individual operations may be performed concurrently, and nothing requires that the operations be performed in the order illustrated. Structures and their functionality presented as separate components and functions in example configurations may be implemented as a combined structure or component with combined functions. Similarly, structures and functionality presented as a single component may be implemented as separate components and functions. These and other variations, modifications, additions, and improvements fall within the scope of the subject matter herein. 
     Some portions of the subject matter discussed herein may be presented in terms of algorithms or symbolic representations of operations on data stored as bits or binary digital signals within a memory (e.g., a computer memory or other machine memory). Such algorithms or symbolic representations are examples of techniques used by those of ordinary skill in the data processing arts to convey the substance of their work to others skilled in the art. As used herein, an “algorithm” is a self-consistent sequence of operations or similar processing leading to a desired result. In this context, algorithms and operations involve physical manipulation of physical quantities. Typically, but not necessarily, such quantities may take the form of electrical, magnetic, or optical signals capable of being stored, accessed, transferred, combined, compared, or otherwise manipulated by a machine. It is convenient at times, principally for reasons of common usage, to refer to such signals using words such as “data,” “content,” “bits,” “values,” “elements,” “symbols,” “characters,” “terms,” “numbers,” “numerals,” or the like. These words, however, are merely convenient labels and are to be associated with appropriate physical quantities. 
     Unless specifically stated otherwise, discussions herein using words such as “accessing,” “processing,” “detecting,” “computing,” “calculating,” “determining,” “generating,” “presenting,” “displaying,” or the like refer to actions or processes performable by a machine (e.g., a computer) that manipulates or transforms data represented as physical (e.g., electronic, magnetic, or optical) quantities within one or more memories (e.g., volatile memory, non-volatile memory, or any suitable combination thereof), registers, or other machine components that receive, store, transmit, or display information. Furthermore, unless specifically stated otherwise, the terms “a” or “an” are herein used, as is common in patent documents, to include one or more than one instance. Finally, as used herein, the conjunction “or” refers to a non-exclusive “or,” unless specifically stated otherwise. 
     The following enumerated embodiments describe various example embodiments of methods, machine-readable media, and systems (e.g., machines, devices, or other apparatus) discussed herein. 
     A first embodiment provides a method comprising: 
     accessing, by one or more processors, target motion data that describes geolocation movement of a target device; 
     determining, by the one or more processors, a target motion vector that indicates a target speed of the target device and that indicates a target direction in which the target device is moving at the target speed, the target motion vector being determined based on the accessed target motion data;
 
determining, by the one or more processors, a hologram motion vector that indicates a relative speed of a hologram to be generated and that indicates a relative direction of the hologram to be generated, the relative speed and the relative direction being relative to the target device; and
 
causing, by the one or more processors, a user device to generate the hologram and display an augmented reality scene in which the hologram moves at a hologram speed determined based on the target speed of the target device and on the relative speed of the hologram and moves in a hologram direction determined based on the target direction of the target device and on the relative direction of the hologram.
 
     In some example embodiments, relative motion between devices is determined for purposes of hologram location. Accordingly, a second embodiment provides a method according to the first embodiment, wherein: 
     the accessed target motion data describes the geolocation movement of the target device relative to a planetary surface; and 
     the method further comprises: 
     accessing user motion data that describes geolocation movement of the user device relative to the planetary surface; and wherein 
     the determining of the target motion vector is further based on the accessed user motion data and determines a relative target motion vector that indicates a relative target speed of the target device relative to the user device and that indicates a relative target direction of the target device relative to the user device;
 
the hologram speed is a relative hologram speed of the hologram relative to the user device and is determined based on the relative target speed of the target device relative to the user device; and
 
the hologram direction is a relative hologram direction of the hologram relative to the user device and is determined based on the relative target direction of the target device relative to the user device.
 
     In some example embodiments, geolocation data (e.g., global positioning system data) is directly used for hologram location. Accordingly, a third embodiment provides a method according to the first embodiment or the second embodiment, wherein: 
     the accessed target motion data describes the geolocation movement of the target device in relation to a planetary surface; 
     the hologram speed of the hologram is relative to the planetary surface; and 
     the hologram direction of the hologram is relative to the planetary surface. 
     In some example embodiments, the hologram speed and hologram direction are explicitly determined. Accordingly, a fourth embodiment provides a method according to any of the first through third embodiments, wherein: 
     the determining of the hologram motion vector includes determining a relative hologram motion vector by: 
     determining the hologram speed of the hologram based on the target speed of the target device and on the relative speed of the hologram; and 
     determining the hologram direction of the hologram based on the target direction of the target device and on the relative direction of the hologram. 
     In some example embodiments, the hologram is included in a field of view of a camera of the user device. Accordingly, a fifth embodiment provides a method according to any of the first through fourth embodiments, further comprising: 
     determining a field of view of a camera of the user device; and wherein 
     the causing of the user device to display the augmented reality scene includes causing the user device to display the generated hologram within the determined field of view of the camera of the user device. 
     Moreover, the field of view of the camera of the user device may include both the target device and the hologram. Accordingly, a sixth embodiment provides a method according to the fifth embodiment, further comprising: 
     accessing target position data that describes a geolocation of the target device; and 
     detecting that the geolocation of the target device is within the field of view of the camera of the user device; and wherein 
     the causing of the user device to display the augmented reality scene includes causing the user device to encompass the geolocation of the target device within the augmented reality scene based on the geolocation of the target device being detected within the determined field of view of the camera of the user device. 
     Alternatively, the field of view of the camera of the user device may omit the target device, despite the field of view including the hologram. Accordingly, a seventh embodiment provides a method according to the fifth embodiment, further comprising: 
     accessing target position data that describes a geolocation of the target device; 
     detecting that the target device is outside the field of view of the camera of the user device; and wherein 
     the causing of the user device to display the augmented reality scene includes causing the user device to omit the geolocation of the target device from the augmented reality scene based on the geolocation of the target device being detected outside the determined field of view of the camera of the user device. 
     In some example embodiments, the hologram is oriented based on the target direction of the target device. Accordingly, an eighth embodiment provides a method according to any of the first through seventh embodiments, wherein: 
     the causing of the user device to display the augmented reality scene includes causing the user device to display the hologram oriented based on the target direction in which the target device is moving. 
     Moreover, the hologram may have its own distinct orientation relative to the target direction of the target device. Accordingly, a ninth embodiment provides a method according to the eighth embodiment, further comprising: 
     determining a hologram orientation vector that indicates a relative orientation of the hologram relative to the target direction in which the target device is moving; and wherein 
     the causing of the user device to display the augmented reality scene includes causing the user device to display the hologram oriented further based on the relative orientation of the hologram relative to the target direction in which the target device is moving. 
     In some example embodiments, the hologram is just one hologram in a group of multiple holograms (e.g., one bird within a flock of birds, one space soldier within a squad of space soldiers, or one dragon within a flight of dragons), each with its own corresponding motion vector. Accordingly, a tenth embodiment provides a method according to any of the first through ninth embodiments, wherein: 
     the hologram is included in a group of holograms; 
     the determining of the hologram motion vector of the hologram is performed as part of determining a group of hologram motion vectors that each correspond to a different hologram in the group of holograms; and 
     the causing of the user device to display the augmented reality scene includes causing the user device to display the group of holograms, each hologram in the group being displayed based on its corresponding determined hologram motion vector. 
     Moreover, each hologram in the group of holograms may be separately oriented relative to the target direction of the target device. Accordingly, the eleventh embodiment provides a method according to the tenth embodiment, further comprising: 
     determining a group of hologram orientation vectors that each indicate a corresponding relative orientation of a different hologram in the group of holograms, each relative orientation being relative to the target direction in which the target device is moving; and wherein
 
the causing of the user device to display the group of holograms includes causing each hologram in the group to be oriented based on its corresponding relative orientation that is relative to the target direction in which the target device is moving.
 
     In some example embodiments, the hologram is positionally offset in space relative to the target device. Accordingly, a twelfth embodiment provides a method according to any of the first through eleventh embodiments, further comprising: 
     accessing target position data that describes a geolocation of the target device; and 
     determining a relative offset vector that indicates a relative offset distance of the hologram and that indicates a relative offset direction of the hologram; and wherein 
     the causing of the user device to display the augmented reality scene includes causing the user device to display the hologram at the relative offset distance away from the geolocation of the target device and in the relative offset direction relative to the target direction in which the target device is moving. 
     Moreover, the positional offset of the hologram may be obtained from a database (e.g., a table stored in the database  115 ), such as by one or more lookup operations for static (e.g., time-invariant) information or by one or more API calls for dynamic (e.g., time-variant) information. Accordingly, a thirteenth embodiment provides a method according to the twelfth embodiment, wherein: 
     the determining of the relative offset vector includes: 
     accessing the relative offset distance of the hologram from a hologram database that correlates the relative offset distance with the hologram; and 
     accessing the relative offset direction of the hologram from the hologram database, the hologram database correlating the relative offset direction with the hologram. 
     In some example embodiments, the relative speed and relative direction of the hologram with respect to any target device is obtainable from a database (e.g., a table stored in the database  115 ), such as by one or more lookup operations for static (e.g., time-invariant) information or by one or more API calls for dynamic (e.g., time-variant) information. Accordingly, a fourteenth embodiment provides a method according to any of the first through thirteenth embodiments, wherein: 
     the determining of the hologram motion vector includes: 
     accessing the relative speed of the hologram from a hologram database that correlates the relative speed with the hologram; and 
     accessing the relative direction of the hologram from the hologram database, the hologram database correlating the relative direction with the hologram. 
     In some example embodiments, one or more portions of the augmented reality scene can be shared (e.g., via social media) from one user device to one or more other user devices. Accordingly, a fifteenth embodiment provides a method according to any of the first through fourteenth embodiments, wherein: 
     the user device is a first user device communicatively coupled to a second user device via a network; and the method further comprises: 
     causing the first user device to communicate at least a portion of the displayed augmented reality scene to the second device, the communicated portion depicting the hologram moving at the hologram speed determined based on the target speed of the target device and on the relative speed of the hologram and depicting the hologram moving in the hologram direction determined based on the target direction of the target device and on the relative direction of the hologram. 
     In some example embodiments, one or more portions of the augmented reality scene can be recorded by the user device (e.g., for storage by the user device or to a network-based data store, such as the database  115 ). Accordingly, a sixteenth embodiment provides a method according to any of the first through fifteenth embodiments, further comprising: 
     causing the user device to record at least a portion of the displayed augmented reality scene, the recorded portion depicting the hologram moving at the hologram speed determined based on the target speed of the target device and on the relative speed of the hologram and depicting the hologram moving in the hologram direction determined based on the target direction of the target device and on the relative direction of the hologram. 
     Moreover, a recorded portion of the augmented reality scene can then be shared (e.g., via social media, with or without editing by the user) from one user device to one or more other user devices. Accordingly, a seventeenth embodiment provides a method according to the sixteenth embodiment, wherein: 
     the user device is a first user device communicatively coupled to a second user device via a network; and the method further comprises: 
     causing the first user device to communicate the recorded portion of the displayed augmented reality scene to the second device. 
     In some example embodiments of a client-side implementation, an eighteenth embodiment provides a method according to any of the first through seventeenth embodiments, wherein: 
     the causing of the user device to generate the hologram and display the augmented reality scene includes accessing live camera data generated by a camera of the user device and generating composited video that depicts the hologram and at least some of the live camera data. 
     In some example embodiments of a server-side implementation, a nineteenth embodiment provides a method according to any of the first through seventeenth embodiments, wherein: 
     the causing of the user device to generate the hologram and display the augmented reality scene includes causing the user device to access live camera data generated by a camera of the user device and causing the user device to generate composited video that depicts the hologram and at least some of the live camera data. 
     A twentieth embodiment provides a machine-readable medium (e.g., a non-transitory machine-readable storage medium) comprising instructions that, when executed by one or more processors of a machine, cause the machine to perform operations comprising: 
     accessing target motion data that describes geolocation movement of a target device; 
     determining a target motion vector that indicates a target speed of the target device and that indicates a target direction in which the target device is moving at the target speed, the target motion vector being determined based on the accessed target motion data;
 
determining a hologram motion vector that indicates a relative speed of a hologram to be generated and that indicates a relative direction of the hologram to be generated, the relative speed and the relative direction being relative to the target device; and
 
causing a user device to generate the hologram and display an augmented reality scene in which the hologram moves at a hologram speed determined based on the target speed of the target device and on the relative speed of the hologram and moves in a hologram direction determined based on the target direction of the target device and on the relative direction of the hologram.
 
     A twenty-first embodiment provides a system (e.g., a computer system) comprising: 
     one or more processors; and 
     a memory storing instructions that, when executed by at least one processor among the one or more processors, cause the system to perform operations comprising: 
     accessing target motion data that describes geolocation movement of a target device; 
     determining a target motion vector that indicates a target speed of the target device and that indicates a target direction in which the target device is moving at the target speed, the target motion vector being determined based on the accessed target motion data;
 
determining a hologram motion vector that indicates a relative speed of a hologram to be generated and that indicates a relative direction of the hologram to be generated, the relative speed and the relative direction being relative to the target device; and
 
causing a user device to generate the hologram and display an augmented reality scene in which the hologram moves at a hologram speed determined based on the target speed of the target device and on the relative speed of the hologram and moves in a hologram direction determined based on the target direction of the target device and on the relative direction of the hologram.
 
     As noted above, in some example embodiments, relative motion between devices is determined for purposes of hologram location. Accordingly, a twenty-second embodiment provides a system according to the twenty-first embodiment, wherein: 
     the accessed target motion data describes the geolocation movement of the target device relative to a planetary surface; and 
     the operations further comprise: 
     accessing user motion data that describes geolocation movement of the user device relative to the planetary surface; and wherein 
     the determining of the target motion vector is further based on the accessed user motion data and determines a relative target motion vector that indicates a relative target speed of the target device relative to the user device and that indicates a relative target direction of the target device relative to the user device;
 
the hologram speed is a relative hologram speed of the hologram relative to the user device and is determined based on the relative target speed of the target device relative to the user device; and
 
the hologram direction is a relative hologram direction of the hologram relative to the user device and is determined based on the relative target direction of the target device relative to the user device.
 
     A twenty-third embodiment provides a carrier medium carrying machine-readable instructions for controlling a machine to carry out the method of any one of the first through nineteenth embodiments.