Niantic Patent | Data hierarchy protocol for data transmission pathway selection
作者 映维 · 分类 Niantic · 2023年01月19日 15:24:58
Patent: Data hierarchy protocol for data transmission pathway selection
Assignee: Niantic
A dataflow hierarchy protocol is implemented by one or more devices to optimize how the one or more devices process datagrams for network communications. The dataflow hierarchy considers various available network pathways for dataflow. A device implementing the dataflow hierarchy selects one or more of the available network pathways to provide low latency in data communication with other devices. The device may sample various available network pathways to determine pathway metrics (e.g., latency) and select one or more network pathways based on the metrics. The available network pathways can include pathways through one or more intermediary nodes, such as pathways through a game server, pathways through a cell tower, and pathways through a network.
1.A system comprising: a game server maintaining a master state of a shared augmented reality (AR) environment for a plurality of client devices of a parallel reality game; a plurality of intermediate nodes communicatively coupled to the server, wherein each of the plurality of intermediate nodes maintains a local state of the shared AR environment, and synchronizes the local state with the master state; and the plurality of client devices communicatively coupled to each of the plurality of intermediate nodes, wherein a first one of the client devices is configured to: determine, for each of the plurality of intermediate nodes, a pathway score based on a response received by the first client device to a test data packet transmitted by the first client device to the intermediate node; transmit, based on the pathway scores, a datagram including data regarding an action in the shared AR environment by the first client device to one of the plurality of intermediate nodes having a highest pathway score; apply a first update to a local state of the shared AR environment maintained at the first client device based on the transmitted datagram; and receive, from the one of the plurality of intermediate nodes, conflict information indicating that the first update conflicts with one of: (i) the local state of the shared AR environment maintained at the intermediate node, or (ii) the master state of the shared AR environment maintained at the server.
2.The system of claim 1, wherein the one of the plurality of intermediate nodes is configured to: receive the datagram from the first client device; determine whether the first update based on the received datagram conflicts with the local state of the shared AR environment maintained at the intermediate node; apply the first update to the local state of the shared AR environment maintained at the intermediate node in response to determining that the first update does not conflict; and transmit the conflict information to the first client device in response to determining that the first update conflicts with the local state of the shared AR environment maintained at the intermediate node.
3.The system of claim 2, wherein the first one of the client devices is further configured to revoke the first update to the local state of the shared AR environment maintained at the first client device in response to receiving the conflict information from the intermediate node.
4.The system of claim 2, wherein the one of the plurality of intermediate nodes is further configured to, in response to determining that the first update does not conflict with the local state of the shared AR environment maintained at the intermediate node: transmit the local state applied with the first update to the plurality of client devices communicatively coupled to the intermediate node; determine whether the local state applied with the first update conflicts with the master state maintained at the server based on the synchronizing; revoke the first update to the local state of the shared AR environment maintained at the intermediate node in response to determining that the local state applied with the first update conflicts with the master state; and transmit the local state with the first update revoked to the plurality of client devices.
5.The system of claim 1, wherein the first client device is further configured to determine, for each of the plurality of intermediate nodes, the pathway score by: transmitting the test data packet from the first client device to an endpoint via the intermediate node; and receiving a response test data packet from the endpoint via the intermediate node.
6.The system of claim 5, wherein the endpoint is another one of the plurality of client devices that is an intended recipient of the datagram from the first client device.
7.The system of claim 1, wherein the first client device is further configured to determine, for each of the plurality of intermediate nodes, the pathway score using one or more detected performance metrics.
8.The system of claim 7, wherein the one or more detected performance metrics include one or more of latency, jitter, data loss, connection strength, or bandwidth availability.
9.The system of claim 1, wherein the first client device is further configured to transmit, based on the pathway scores, the datagram to a subset of the plurality of intermediate nodes, the subset corresponding to a predetermined number of the intermediate nodes having highest pathway scores.
10.The system of claim 9, wherein the first client device is further configured to determine whether bandwidths of the subset of intermediate nodes are above a bandwidth threshold, and wherein the first client device transmits the datagram to each of the subset of intermediate nodes in response to determining that the bandwidths are above the bandwidth threshold.
11.The system of claim 1, wherein the first client device is further configured to: redetermine, for each of the plurality of intermediate nodes, the pathway score; and transmit the datagram based on the redetermined pathway score.
12.The system of claim 1, wherein the first client device is further configured to transmit, based on the pathway scores, an additional copy of the datagram to another one of the plurality of intermediate nodes having a pathway score higher than intermediate nodes other than the one intermediate node.
13.A computer-implemented method for a client device of a system including a game server maintaining a master state of a shared augmented reality (AR) environment of a parallel reality game, and a plurality of intermediate nodes communicatively coupled to the server, each of the plurality of intermediate nodes maintaining a local state of the shared AR environment, and synchronizing the local state with the master state, the method comprising: determining, by the client device and for each of the plurality of intermediate nodes, a pathway score based on a response received by the client device to a test data packet transmitted by the client device to the intermediate node; transmitting, by the client device and based on the pathway scores, a datagram including data regarding an action in the shared AR environment by the client device to one of the plurality of intermediate nodes having a highest pathway score; applying, by the client device, a first update to a local state of the shared AR environment maintained at the client device based on the transmitted datagram; and receiving, by the client device and from the one of the plurality of intermediate nodes, conflict information indicating that the first update conflicts with one of: (i) the local state of the shared AR environment maintained at the intermediate node, or (ii) the master state of the shared AR environment maintained at the server.
14.The method of claim 13, wherein the one of the plurality of intermediate nodes generated the conflict information by a process comprising: receiving, by the one of the plurality of intermediate nodes, the datagram from the client device; determining, by the one of the plurality of intermediate nodes, whether the first update based on the received datagram conflicts with the local state of the shared AR environment maintained at the intermediate node; applying, by the one of the plurality of intermediate nodes, the first update to the local state of the shared AR environment maintained at the intermediate node in response to determining that the first update does not conflict; and transmitting, by the one of the plurality of intermediate nodes, the conflict information to the client device in response to determining that the first update conflicts with the local state of the shared AR environment maintained at the intermediate node.
15.The method of claim 14, further comprising revoking, by the client device, the first update to the local state of the shared AR environment maintained at the client device in response to receiving the conflict information from the intermediate node.
16.The method of claim 14, wherein, in response to determining that the first update does not conflict with the local state of the shared AR environment maintained at the intermediate node, the one of the plurality of intermediate nodes: transmits the local state applied with the first update to a plurality of client devices communicatively coupled to the intermediate node; determines whether the local state applied with the first update conflicts with the master state maintained at the server based on the synchronizing; revokes the first update to the local state of the shared AR environment maintained at the intermediate node in response to determining that the local state applied with the first update conflicts with the master state; and transmits the local state with the first update revoked to the plurality of client devices.
17.The method of claim 13, further comprising determining, by the client device and for each of the plurality of intermediate nodes, the pathway score by transmitting the test data packet from the client device to an endpoint client device via the intermediate node, and receiving a response test data packet from the endpoint client device via the intermediate node.
18.The method of claim 13, further comprising determining, by the client device and for each of the plurality of intermediate nodes, the pathway score using one or more performance metrics from among a group of performance metrics including latency, jitter, data loss, connection strength, and bandwidth availability.
19.A non-transitory computer-readable medium storing instructions executable by a computing device of a system including a game server maintaining a master state of a shared augmented reality (AR) environment of a parallel reality game, and a plurality of intermediate nodes communicatively coupled to the server, each of the plurality of intermediate nodes maintaining a local state of the shared AR environment, and synchronizing the local state with the master state, the instructions causing the computing device to perform operations comprising: determining, for each of the plurality of intermediate nodes, a pathway score based on a response received by the computing device to a test data packet transmitted by the computing device to the intermediate node; transmitting, based on the pathway scores, a datagram including data regarding an action in the shared AR environment by the computing device to one of the plurality of intermediate nodes having a highest pathway score; applying a first update to a local state of the shared AR environment maintained at the computing device based on the transmitted datagram; and receiving, from the one of the plurality of intermediate nodes, conflict information indicating that the first update conflicts with one of: (i) the local state of the shared AR environment maintained at the intermediate node, or (ii) the master state of the shared AR environment maintained at the server.
20.The non-transitory computer-readable medium of claim 19, wherein the instructions further cause the computing device to perform operations comprising determining, for each of the plurality of intermediate nodes, the pathway score by transmitting the test data packet from the computing device to an endpoint client device via the intermediate node and receiving a response test data packet from the endpoint client device via the intermediate node.
CROSS REFERENCE TO RELATED APPLICATIONS
The application is a continuation of U.S. Nonprovisional application Ser. No. 17/127,999, filed Dec. 18, 2020, which claims the benefit of U.S. Provisional Application No. 62/951,926, filed Dec. 20, 2019, which is incorporated by reference in its entirety.
The present disclosure relates to computer network protocols, and in particular to protocols for providing low-latency wireless communication between devices within physical proximity of each other.
Computer networks are interconnected sets of computing devices that exchange data, such as the Internet. Communication protocols such as the User Datagram Protocol (UDP) define systems of rules for exchanging data using computer networks. UDP adheres to a connectionless communication model without guaranteed delivery, ordering, or non-duplicity of datagrams. A datagram is a basic unit for communication and includes a header and a payload. The header is metadata specifying aspects of the datagram, such as a source port, a destination port, a length of the datagram, and a checksum of the datagram. The payload is the data communicated by the datagram. Computing devices communicating using UDP transmit datagrams to one another via the computer network.
Connectionless communication protocols such as UDP generally have lower overhead and latency than connection-oriented communication protocols like the Transmission Control Protocol (TCP), which establish connections between computing devices before transmitting data. However, existing connectionless communication protocols are inadequate for data transfers that require less latency than is accommodated by the existing art. For example, an augmented reality (AR) environment streaming at 60 frames per second (FPS) may require latency an order of magnitude lower than provided by current techniques. In such an AR environment, the frames might be spaced at approximately sixteen millisecond intervals, while current network protocols typically provide latency of approximately one hundred milliseconds (or more).
As such, with existing techniques, a user may encounter some degree of latency when interacting in the AR environment. This latency may cause interactions with an old state of AR positional data. For example, in a parallel-reality game, a player may see an AR object at an old location (e.g., where the object was 100 milliseconds previously), while the AR positional data in fact has a new location for the object (e.g. the AR object has been moved by another player). This latency in communication between the client and a server hosting or coordinating the parallel-reality game may lead to a frustrating user experience. This problem may be particularly acute where more than one user is participating in the parallel-reality game because the latency may cause a noticeable delay between the actions of one player showing up in other players' views of the AR environment. Moreover, as the number of players increases, the mismatch due to delay can further compound.
Augmented reality (AR) systems supplement views of the real world with computer-generated content. Incorporating AR into a parallel-reality game may improve the integration between the real and virtual worlds. AR may also increase interactivity between players by providing opportunities for them to participate in shared gaming experiences in which they interact. For example, in a tank battle game, players might navigate virtual tanks around a real-world location, attempting to destroy each other's tanks. The movement of the tanks may be limited by real-world geography (e.g., the tanks move more slowly through rivers, move more quickly on roads, cannot move through walls, etc.).
Existing AR session techniques involve a server maintaining a master state and periodically synchronizing the local state of the environment at clients to the master state via a network (e.g., the internet). However, synchronizing a device's local state may take a significant amount of time (e.g., ˜100 s of milliseconds), which is detrimental to the gaming experience. The player is, in effect, interacting with a past game state rather than the current game state. This problem may be particularly acute where more than one user is participating in the parallel-reality game because the latency causes a noticeable delay between the actions of one player showing up in other players' views. For example, if one player moves an AR object in the world, other players may not see it has moved until one hundred milliseconds (or more) later, which is a human-perceptible delay. As such, another player may try to interact with the object in its previous location and be frustrated when the game corrects for the latency (e.g., by declining to implement the action requested by the player or initially implementing the action and then revoking it when the player's client next synchronizes with the server).
This and other problems may be addressed by implementing a dataflow hierarchy protocol that optimizes how one or more devices process datagrams. The dataflow hierarchy includes various network pathways for dataflow. A device implementing the dataflow hierarchy may utilize one or more of the network pathways to ensure low latency in data communication with other devices. In some embodiments, the device samples various network pathways to determine a network pathway of minimal latency for use in data communication through an intermediary node. The various network pathways may include pathways through one or more intermediary nodes, such as pathways through the game server, pathways through a cell tower, and pathways through a network. The network pathways may also include a direct connection (e.g., using Bluetooth) between the devices. Using the dataflow hierarchy protocol may improve latency to the order of milliseconds, e.g., less than 5 milliseconds. Furthermore, the dataflow hierarchy may optimize bandwidth use according to bandwidth availability.
BRIEF DESCRIPTION OF DRAWINGS
FIG. 1 illustrates a network environment in which a dataflow hierarchy protocol may be implemented, according to an embodiment.
FIG. 2 is a block diagram illustrating a client, according to one embodiment.
FIG. 3 is a block diagram illustrating a game server, according to one embodiment.
FIG. 4 is a block diagram illustrating the cell tower, according to one embodiment.
FIG. 5 illustrates a process for using the dataflow hierarchy protocol, according to an embodiment.
FIG. 6 illustrates a process for transmitting data between clients within a geographic region surrounding a cell tower, according to an embodiment.
FIG. 7 is a high-level block diagram illustrating an example computer suitable for use within the computer network shown in FIG. 1, according to an embodiment.
The figures and the following description describe certain embodiments by way of illustration only. One skilled in the art will readily recognize from the following description that alternative embodiments of the structures and methods may be employed without departing from the principles described. Reference will now be made to several embodiments, examples of which are illustrated in the accompanying figures. Wherever practicable similar or like reference numbers are used in the figures to indicate similar or like functionality. Where elements share a common numeral followed by a different letter, the elements are similar or identical. The numeral alone refers to any one or any combination of such elements.
DETAILED DESCRIPTIONNetwork Environment
As disclosed herein, a dataflow hierarchy protocol may provide reduced computer network latency relative to previous approaches (e.g., in one embodiment, the latency is −10 milliseconds). FIG. 1 illustrates a computer network 100 that communicates using the dataflow hierarchy protocol, according to one embodiment. The figure illustrates a simplified example using block figures for purposes of clarity. The computer network 100 includes two clients 110, a game database 115, a game server 120, a cell tower 130, and a local-area network (LAN) 140. In other embodiments the computer network may include fewer, additional, or other components, such as additional clients 110, additional game servers 120, additional cell towers 130, or other network nodes. The clients 110 communicate with the game server 120 which hosts a parallel-reality game. Clients 110 communicate with one another during the parallel-reality game as players interact with other players of the parallel-reality game.
A client 110 is a computing device such as a personal computer, laptop, tablet computer, smartphone, or so on. Clients 110 can communicate with one another using the dataflow hierarchy protocol, e.g., while playing the parallel-reality game. In an embodiment, each client 110 includes a local AR module and the game server 120 includes a master AR module. Each local AR module communicates AR data to local AR modules upon other clients 110 and/or the master AR module upon the game server 120. The client 110 will be further described in FIG. 2.
The game server 120 is similarly a computing device that hosts the parallel-reality game played by various clients 110. The game server 120 establishes connections between clients 110 to receive and transmit information of parallel-reality game states. The game server 120 stores player profiles, game states, maps (real and virtual), and other information relevant to the parallel-reality game in the game database 115. The game server 120 will be further described in FIG. 3.
The cell tower 130 is a network configured for data communication between clients 110. The cell tower 130 may facilitate data transfer between clients 110, e.g., via UDP. In one or more embodiments, the cell tower 130 has a local AR module that is configured to aid in hosting the parallel-reality game between clients 110 connected to the cell tower 130. The cell tower 130 may share game states to the game server 120, e.g., periodically or in real-time. The cell tower 130 is further described in FIG. 4.
The LAN 140 is a local network onto which clients may connect. The LAN 140 comprises one or more routers to which clients 110 may connect. The LAN 140 operates with Wi-Fi and Ethernet. The LAN 140, similarly to the cell tower 130 may comprise a local AR module configured to aid in hosting the parallel-reality game between clients 110 connected to the LAN. The LAN 140, likewise, may share game states to the game server 120
Clients 110 may communicate with one another using the dataflow hierarchy protocol, or other protocols in other embodiments. To communicate with one another, two or more clients transmit data via one or more pathways. As shown in FIG. 1, there are three pathways present in the computer network 110 between client 110A and client 110B. In a first pathway, clients 110 may communicate with one another via the game server 120, e.g., using TCP. In a second pathway, the clients 110 may communicate with one another via the cell tower 130, e.g., using TCP or UDP. In a third pathway, the clients 110 may communicate with one another via the LAN 140, e.g., using TCP or UDP. In other embodiments (not shown), there may be other pathways for communication between the clients, e.g., via Ethernet, Bluetooth, near-field communication (NFC), etc. In each of the pathways, the clients 110 communicate via an intermediary node, e.g., the game server 120, the cell tower 130, or the LAN 140. The dataflow hierarchy protocol evaluates available communication pathways between clients 110 and optimizes which one or more pathways to use in communicating data between clients 110.
In an embodiment, client 110 communications may be routed through the game server 120 or peer-to-peer (P2P). Communications routed through the game server 120 may go from a first client 110A to the game server 120 via the cell tower 130 and then back through the cell tower 130 to a second client 110B. In contrast, P2P communication may go from the first client 110A to the cell tower 130 and then directly to the second client 120B. Note that in some cases, the communications may pass through other intermediary devices, such as signal boosters. As used herein, a communication is considered P2P if it is routed to the target client 110B without passing through the game server 120. For example, a message (e.g., a datagram) may be sent P2P if the target client 110B is connected to the same cell tower 130 as the sending client 110A and routed via the game server 120 otherwise. In another embodiment, clients 110 communicate entirely using P2P. Furthermore, in some embodiments, UDP hole punching or other techniques for P2P communication involving network address translation (NAT) may be used to establish a connection among two or more clients 110.
In one embodiment, the clients 110 use a coordination service (e.g., hosted at the game server 120 and communicated via TCP) to synchronize IP addresses. The clients 110 can then communicate (e.g., via UDP) using public facing IP addresses or the LAN 140. For example, a first client 110A might send a request via TCP to the coordination service to join a local AR shared environment. The coordination service may provide the first client 110A with the IP address of a second client 110B connected to the AR environment (e.g., via the same cell tower 130). The coordination service may also provide the first client's IP address to the second client 110B or the first client 110A may provide it directly using the second client's IP address (as provided by the coordination service). In some embodiments, the coordination service may prompt the second client 110B to approve the first client 110A (e.g., by requesting user confirmation or checking a list of approved clients 110 to connect with the second client 110B) before the second client's IP address is provided.
In one embodiment, the clients 110 communicate via UDP with public facing IP addresses and the communications are secured with public-key cryptography. In particular embodiments, elliptic curve cryptography (ECC) is implemented. ECC uses an elliptic curve over a finite field that is a unidirectional and deterministic function to encrypt a private key to be publicly provided to other computing systems and networks. One benefit of ECC over other public-key cryptography methodologies is that ECC is a simpler function, allowing for smaller key sizes, consequentially reducing bandwidth usage.
FIG. 2 is a block diagram of the client 110, according to an embodiment. A client 110 can be any portable computing device that can be used by a player to interface with the game server 120. For instance, a client 110 can be a wireless device, a personal digital assistant (PDA), portable gaming device, cellular phone, smart phone, tablet, navigation system, handheld GPS system, wearable computing device, a display having one or more processors, or other such device. In another instance, the client 110 includes a conventional computer system, such as a desktop or a laptop computer. Still yet, the client 110 may be a vehicle with a computing device. In short, a client 110 can be any computer device or system that can enable a player to interact with the game server 120. As a computing device, the client 110 can include one or more processors and one or more computer-readable storage media. The computer-readable storage media can store instructions which cause the processor to perform operations. The client 110 is preferably a portable computing device that can be easily carried or otherwise transported with a player, such as a smartphone or tablet.
The client 110 communicates with the game server 120 to provide the game server 120 with sensory data of a physical environment. The client 110 includes a camera assembly 210 that captures image data in two dimensions of a scene in the physical environment where the client 110 is located. The client 110 also includes a depth estimation model 130 that is a machine learning model, e.g., trained by the game server 120. In the embodiment shown in FIG. 1, each client 110 includes software components such as a gaming module 220 and a positioning module 230. The client 110 may include various other input/output devices for receiving information from and/or providing information to a player. Example input/output devices include a display screen, a touch screen, a touch pad, data entry keys, speakers, and a microphone suitable for voice recognition. The client 110 may also include other various sensors for recording data from the client 110 including but not limited to movement sensors, accelerometers, gyroscopes, other inertial measurement units (IMUs), barometers, positioning systems, thermometers, light sensors, etc. The client 110 can further include a network interface for providing communications over the network 105. A network interface can include any suitable components for interfacing with one more networks, including for example, transmitters, receivers, ports, controllers, antennas, or other suitable components.
The camera assembly 210 captures image data of a scene of the environment where the client 110 is in. The camera assembly 210 may utilize a variety of varying photo sensors with varying color capture ranges at varying capture rates. The camera assembly 210 may contain a wide-angle lens or a telephoto lens. The camera assembly 210 may be configured to capture single images or video as the image data. Additionally, the orientation of the camera assembly 210 could be parallel to the ground with the camera assembly 210 aimed at the horizon. The camera assembly 210 captures image data and shares the image data with the computing device on the client 110. The image data can be appended with metadata describing other details of the image data including sensory data (e.g. temperature, brightness of environment) or capture data (e.g. exposure, warmth, shutter speed, focal length, capture time, etc.). The camera assembly 210 can include one or more cameras which can capture image data. In one instance, the camera assembly 210 comprises one camera and is configured to capture monocular image data. In another instance, the camera assembly 210 comprises two cameras and is configured to capture stereoscopic image data. In various other implementations, the camera assembly 210 comprises a plurality of cameras each configured to capture image data.
The gaming module 220 provides a player with an interface to participate in the parallel-reality game. The game server 120 transmits game data to the client 110 for use by the gaming module 220 at the client 110 to provide local versions of the game to players at locations remote from the game server 120. The game server 120 can include a network interface for providing communications the various pathways described in FIG. 1. A network interface can include any suitable components for interfacing with one more networks, including for example, transmitters, receivers, ports, controllers, antennas, or other suitable components.
The gaming module 220 executed by the client 110 provides an interface between a player and the parallel-reality game. The gaming module 220 can present a user interface on a display device associated with the client 110 that displays a virtual world (e.g. renders imagery of the virtual world) associated with the game and allows a user to interact in the virtual world to perform various game objectives. In some other embodiments, the gaming module 220 presents image data from the real world (e.g., captured by the camera assembly 210) augmented with virtual elements from the parallel-reality game. In these embodiments, the gaming module 220 may generate virtual content and/or adjust virtual content according to other information received from other components of the client. For example, the gaming module 220 may adjust a virtual object to be displayed on the user interface according to a depth map (e.g., determined by the depth estimation model 130) of the scene captured in the image data.
The gaming module 220 can also control various other outputs to allow a player to interact with the game without requiring the player to view a display screen. For instance, the gaming module 220 can control various audio, vibratory, or other notifications that allow the player to play the game without looking at the display screen. The gaming module 220 can access game data received from the game server 120 to provide an accurate representation of the game to the user. The gaming module 220 can receive and process player input and provide updates to the game server 120 over the network 105. The gaming module 220 may also generate and/or adjust game content to be displayed by the client 110. For example, the gaming module 220 may generate a virtual element based on depth information (e.g., as determined by the depth estimation model 130).
The positioning module 230 can be any device or circuitry for monitoring the position of the client 110. For example, the positioning module 230 can determine actual or relative position by using a satellite navigation positioning system (e.g. a GPS system, a Galileo positioning system, the Global Navigation satellite system (GLONASS), the BeiDou Satellite Navigation and Positioning system), an inertial navigation system, a dead reckoning system, based on IP address, by using triangulation and/or proximity to cellular towers or Wi-Fi hotspots, and/or other suitable techniques for determining position. The positioning module 230 may further include various other sensors that may aid in accurately positioning the client 110 location. In some embodiments, the client 110 stores a portion of the map used in the parallel reality game locally. The positioning module 230 can position the client 110 relative to the locally stored map. The positioning module 230 can also periodically synchronize the locally stored (or cached) map with map data maintained by the game server 120.
As the player moves around with the client 110 in the real world, the positioning module 230 tracks the position of the player and provides the player position information to the gaming module 220. The gaming module 220 updates the player position in the virtual world associated with the game based on the actual position of the player in the real world. Thus, a player can interact with the virtual world simply by carrying or transporting the client 110 in the real world. In particular, the location of the player in the virtual world can correspond to the location of the player in the real world. The gaming module 220 can provide player position information to the game server 120 over the network 105. In response, the game server 120 may enact various techniques to verify the client 110 location to prevent cheaters from spoofing the client 110 location. It should be understood that location information associated with a player is utilized only if permission is granted after the player has been notified that location information of the player is to be accessed and how the location information is to be utilized in the context of the game (e.g. to update player position in the virtual world). In addition, any location information associated with players will be stored and maintained in a manner to protect player privacy.
The dataflow module 240 communicates other computing components. The dataflow module 240 may establish communication using any type of wired and/or wireless connection, using a variety of communication protocols (e.g. TCP/IP, HTTP, SMTP, FTP), encodings or formats (e.g. HTML, XML, JSON), and/or protection schemes (e.g. VPN, secure HTTP, SSL).
In one or more embodiments, the dataflow module 240 communicates with the game server 120. The dataflow module 240 provides actions, updates to game states, requests for various content items (e.g., for the parallel-reality game) or other communications to the game server 120. The dataflow module 240 establishes a connection, e.g., via TCP, with the game server 120. TCP provides a robust manner in transmitting data. With TCP, the dataflow module 240 can detect lost packets during transmission of data and request resending the lost packets. Moreover, TCP allows for reconstruction of sequential data packets received out of order to generate the intended message.
The dataflow module 240 also manages communication with one or more other clients 110. The dataflow module 240 identifies one or more pathways for communicating with another client 110. The pathways available to the client 110 at a given time may include any combination of: a pathway through the game server 120, a pathway through the cell tower 130, a pathway through the LAN 140, another pathway through another network, and a direct connection (e.g., via Bluetooth). The dataflow module 240 implements the dataflow hierarchy protocol to select one or more available pathways for use in transmitting data between clients 110. In situations with a single available pathway, the dataflow hierarchy protocol instructs transmission of data via the sole identified pathway.
In situations with multiple available pathways, the dataflow hierarchy protocol selects one or more of the available pathways to improve latency in communicating data. The dataflow module 240 calculates one or more metrics of the available pathways that are indicative of data transmission performance by the available pathway (i.e., performance metrics). Metrics include latency (ping), jitter, data loss, connection strength (stability of the connection), bandwidth, another data transmission metric, etc. In one embodiment, the dataflow hierarchy protocol selects the pathway (or some number of pathways) with the lowest latency for use in communicating data. In other embodiments, the dataflow hierarchy protocol considers one or more other metrics in addition to or in the alternative to latency. For example, the dataflow hierarchy protocol may combine one or more metrics for each pathway in order to determine an overall score for each pathway (i.e., a pathway score). The pathway scores may be used to rank the available pathways and to select a pathway (e.g., the highest ranked pathway) or multiple pathways (e.g., some number of the highest ranked pathways),
If multiple pathways are selected based on the dataflow hierarchy protocol, the multiple selected pathways may each be used to transmit separate copies of the same data in order to improve a data transmission rate. However, in such cases, there is a tradeoff to using more pathways in that sending multiple copies of the same data via different pathways increases bandwidth usage. In some embodiments, the dataflow hierarchy protocol periodically samples available pathways to re-evaluate which pathway(s) is optimal for use. For example, the dataflow hierarchy protocol evaluates the available pathways at a regular interval (e.g., every 30 seconds) to determine an optimal set of one or more pathways for use in communication. The dataflow hierarchy protocol may sample an available pathway by transmitting data to an endpoint of the available pathway, such as from the client 110A to the client 110B. Additionally, or alternatively, the dataflow hierarchy protocol may sample one or more available pathways by transmitting data to an intermediary node connected to many endpoints, such as from the client 110A to the game server 120 or the cell tower 130. In some embodiments, the dataflow hierarchy protocol selects all available pathways for use in communication. The dataflow hierarchy protocol may adjust pathway selection according to bandwidth availability. For example, in a high bandwidth availability circumstance, the dataflow hierarchy protocol may instruct selection of all available pathways. In contrast, when bandwidth availability is limited, the dataflow hierarchy protocol may select the optimal pathway (e.g., the lowest-latency pathway).
In some embodiments, the dataflow module 240 encrypts data being transmitted between clients, e.g., during a shared AR experience in the parallel reality game. The dataflow module 240 may implement various cryptography methodologies. In particular implementations, ECC is implemented to secure UDP transmissions between clients 110, e.g., via the cell tower 130 or via the LAN 140.
FIG. 3 is a block diagram illustrating the game server, according to an embodiment. The game server 120 can be any computing device and can include one or more processors and one or more computer-readable storage media. The computer-readable storage media can store instructions which cause the processor to perform operations. The game server 120 can include or can be in communication with a game database 115. The game database 115 stores game data used in the parallel reality game to be served or provided to the client(s) 120.
The game data stored in the game database 115 can include: (1) data associated with the virtual world in the parallel reality game (e.g. imagery data used to render the virtual world on a display device, geographic coordinates of locations in the virtual world, etc.); (2) data associated with players of the parallel reality game (e.g. player profiles including but not limited to player information, player experience level, player currency, current player positions in the virtual world/real world, player energy level, player preferences, team information, faction information, etc.); (3) data associated with game objectives (e.g. data associated with current game objectives, status of game objectives, past game objectives, future game objectives, desired game objectives, etc.); (4) data associated virtual elements in the virtual world (e.g. positions of virtual elements, types of virtual elements, game objectives associated with virtual elements; corresponding actual world position information for virtual elements; behavior of virtual elements, relevance of virtual elements etc.); (5) data associated with real world objects, landmarks, positions linked to virtual world elements (e.g. location of real world objects/landmarks, description of real world objects/landmarks, relevance of virtual elements linked to real world objects, etc.); (6) Game status (e.g. current number of players, current status of game objectives, player leaderboard, etc.); (7) data associated with player actions/input (e.g. current player positions, past player positions, player moves, player input, player queries, player communications, etc.); and (8) any other data used, related to, or obtained during implementation of the parallel reality game. The game data stored in the game database 115 can be populated either offline or in real time by system administrators and/or by data received from clients 110.
The game server 120 can be configured to receive requests for game data from a client 110 (for instance via remote procedure calls (RPCs)) and to respond to those requests. For instance, the game server 120 can encode game data in one or more data files and provide the data files to the client 110. In addition, the game server 120 can be configured to receive game data (e.g. player positions, player actions, player input, etc.) from a client 110. For instance, the client 110 can be configured to periodically send player input and other updates to the game server 120, which the game server 120 uses to update game data in the game database 115 to reflect any and all changed conditions for the game.
In the embodiment shown, the server 120 includes a universal gaming module 310, a data collection module 320, and an event module 330. As mentioned above, the game server 120 interacts with a game database 115 that may be part of the game server 120 or accessed remotely (e.g., the game database 115 may be a distributed database accessed over a network). In other embodiments, the game server 120 contains different and/or additional elements. In addition, the functions may be distributed among the elements in a different manner than described. For instance, the game database 115 can be integrated into the game server 120.
The universal game module 310 hosts the parallel reality game for all players and acts as the authoritative source for the current status of the parallel reality game for all players. As the host, the universal game module 310 generates game content for presentation to players, e.g., via their respective clients 110. The universal game module 310 may access the game database 115 to retrieve and/or store game data when hosting the parallel reality game. The universal game module 310 also receives game data from client 110 (e.g. depth information, player input, player position, player actions, landmark information, etc.) and incorporates the game data received into the overall parallel reality game for all players of the parallel reality game. The universal game module 310 can also manage the delivery of game data to the client 110 over the network 105. The universal game module 310 may also govern security aspects of client 110 including but not limited to securing connections between the client 110 and the game server 120, establishing connections between various clients 110, and verifying the location of the various clients 110.
The game server 120 can further include a data collection module 320. The data collection module 320, in embodiments where one is included, can be separate from or a part of the universal game module 310. The data collection module 320 can manage the inclusion of various game features within the parallel reality game that are linked with a data collection activity in the real world. For instance, the data collection module 320 can modify game data stored in the game database 115 to include game features linked with data collection activity in the parallel reality game. The data collection module 320 can also analyze data collected by players pursuant to the data collection activity and provide the data for access by various platforms.
The event module 330 manages player access to events in the parallel reality game. Although the term "event" is used for convenience, it should be appreciated that this term need not refer to a specific event at a specific location or time. Rather, it may refer to any provision of access-controlled game content where one or more access criteria are used to determine whether players may access that content. Such content may be part of a larger parallel reality game that includes game content with less or no access control or may be a stand-alone, access controlled parallel reality game.
FIG. 4 is a block diagram illustrating a cell tower, according to an embodiment. In the embodiment shown, the cell tower 130 includes a routing module 410, a data ingest module 420, an AR environment module 430, a map processing module 440, an authority check module 450, and a local data store 460. The cell tower 130 also includes hardware and firmware or software (not shown) for establishing connections to the game server 120 and clients 110 for exchanging data. For example, the cell tower 130 may connect to the game server 120 via a fiberoptic or other wired internet connection and clients 110 using a wireless connection (e.g., 4G or 5G). In other embodiments, the cell tower 130 may include different or additional components. In addition, the functions may be distributed among the elements in a different manner than described. In one or more embodiments, the LAN 140 may comprise similar modules to those described for the cell tower 130, such that the LAN may likewise aid in hosting the parallel reality game.
The routing module 410 receives data packets and sends those packets to one or more recipient devices. In one embodiment, the routing module 410 receives datagrams from clients 110 sends the received datagrams to appropriate destinations. The routing module 410 may also receive data packets from the server addressed to either particular clients 110 or all clients that are connected to the cell tower 130. The routing module 410 forwards the data packets to the clients 110 to which they are addressed. In some embodiments, the routing module 410 receives information indicating a pathway selected by a sending client 110 for routing a data packet (e.g., information within the data packet), such as directly to another client 110 or through the game server 120. In this case, the routing module 410 the data packet using the selected pathway.
The data ingest module 420 receives data from one or more sources that the cell tower 130 uses to provide a shared AR experience to players via the connected clients 110. In one embodiment, the data ingest module 420 receives real-time or substantially real-time information about real-world conditions (e.g., from third party services). For example, the data ingest module 420 might periodically (e.g., hourly) receive weather data from a weather service indicating weather conditions in the geographic area surrounding the cell tower. As another example, the data ingest module 420 might retrieve opening hours for a park, museum, or other public space. As yet another example, the data ingest module 420 may receive traffic data indicating how many vehicles are travelling on roads in the geographic area surrounding the cell tower 130. Such information about real-world conditions may be used to improve the synergy between the virtual and real worlds.
The AR environment module 430 manages AR environments in which players in the geographic area surrounding the cell tower 130 may engage in shared AR experiences. In one embodiment, a client 110 connects to the cell tower 130 while executing a parallel-reality game and the AR environment module 430 connects the client to an AR environment for the game. All players of the game who connect to the cell tower 130 may share a single AR environment or players may be divided among multiple AR environments. For example, there may be a maximum number of players in a particular AR environment (e.g., ten, twenty, one hundred, etc.). Where there are multiple AR environments, newly connecting clients 110 may be placed in a session randomly or the client may provide a user interface (UI) to enable the player to select which session to join. Thus, a player may elect to engage in an AR environment with friends. In some embodiments, players may establish private AR environments that are access protected (e.g., requiring a password or code to join).
In various embodiments, to enable AR objects (e.g., creatures, vehicles, etc.) to appear to interact with real world features (e.g., to jump over obstacles rather than going through them), the AR environment module 430 provides connected clients 110 with map data representing the real world in the proximity of the client (e.g., stored in the local data store 460). The AR environment module 430 may receive location data for a client 110 (e.g., a GPS location) and provide map data for the geographic area surrounding the client (e.g., within a threshold distance of the client's current position).
The received map data can include one or more representations of the real world. For example, the map data can include a point cloud model, a plane matching model, a line matching model, a geographic information system (GIS) model, a building recognition model, a landscape recognition model, etc. The map data may also include more than one representation of a given type at different levels of detail. For example, the map data may include two or more point cloud models, each including different numbers of points.
The client 110 may compare the map data to data collected by one or more sensors to refine the client's location. For example, by mapping the images being captured by a camera on the client 110 to a point cloud model, the client's location and orientation may be accurately determined (e.g., to within one centimeter and 0.1 degrees). The client 110 provides the determined location and orientation back to the AR environment module 430 along with any actions taken by the player (e.g., shooting, selecting a virtual item to interact with, dropping a virtual item, etc.). Thus, the AR environment module 430 can update the status of the game for all players engaged in the AR environment.
The map processing module 440 updates map data based on current conditions (e.g., data from the data ingest module 420). Because the real world is not static, the map data in the local data store 460 may not represent current real-world conditions. For example, the same park trail in Vermont may look very different in different seasons. In summer, the trail might be clear and the surrounding trees will be covered in foliage. In contrast, in winter, the trail may be blocked by drifts of snow and the trees may be bare. The map processing module 440 may transform the map data to approximate such changes.
In one embodiment, the map processing module 440 retrieves current condition data to identify a transformation and applies that transformation to the map data. The transformations for different conditions may be defined by heuristic rules, take the form of trained machine-learning models, or use a combination of both approaches. For example, the map processing module 440 might receive current weather condition data, select a transformation for the current weather conditions, and apply that transformation to the map data. Alternatively, the map processing module 440 may pre-calculate the transformed maps and store them (e.g., in the local data store 460). In this case, when a client 110 connects to the cell tower, the map processing module determines the current conditions, selects the appropriate pre-calculated version of the map data, and provides that version to the client.
The authority check module 450 maintains synchronization between game states of different clients 110. In one embodiment, the authority check module 450 confirms that game actions received from clients 110 are consistent with the game state maintained by the AR environment module 430. For example, if two players both try to pick up the same in-game item, the authority check module 450 determines which player receives the item (e.g., based on timestamps associated with the requests). As described, the use of a P2P protocol and local processing at the cell tower may significantly reduce the latency of a player's actions being seen at other players' clients 110. Therefore, the likelihood (and number) of instances of such conflicts arising and being resolved by the authority check module 450 is reduced. Therefore, the AR experience may be improved.
The authority check module 450 may also maintain synchronization between its copy of the state of the AR environment (the intermediate node state) and a master state maintained by the game server 120. In one embodiment, the authority check module 450 periodically (e.g., every 1 to 10 seconds) receives global updates regarding the state of the AR environment from the game server 120. The authority check module 450 compares these updates to the intermediate node state and resolves any discrepancies. For example, if a player's request to pick up an item was initially approved by the authority check module 450 but a game update from the game server 120 indicates the item was picked up by another player (or otherwise made unavailable) before the player attempted to pick it up, the authority check module 450 might send an update to the player's client 110 indicating the item should be removed from the player's inventory.
This process may provide value for clients 110 located close to a boundary between coverage provided by two or more different cell towers 130. In this case, players whose client devices 110 are connected to different cell towers 130 may both be able to interact with the same virtual element. Thus, each individual cell tower 130 might initially approve conflicting interactions with the element from the different clients 110. In this case, the server 120 can detect the conflict after synchronizing with the different cell towers 130, and send updates to resolve the conflict (e.g., instructing one of the cell towers to revoke its initial approval of the action and update its local state accordingly).
The local data store 460 is one or more non-transitory computer-readable media configured to store data used by the cell tower. In one embodiment, the stored data may include map data, current conditions data, a list of currently (or recently) connected clients 110, a local copy of the game state for the geographic region, etc. Although the local data store 460 is shown as a single entity, the data may be split across multiple storage media. Furthermore, some of the data may be stored elsewhere in the communication network and accessed remotely. For example, the cell tower 130 may access current condition data remotely (e.g., from a third-party server) as needed.
Example Methods
FIG. 5 illustrates a process 500 for using the dataflow hierarchy protocol, according to an embodiment. The steps of FIG. 5 are illustrated from the perspective of a client 110A performing the method 500. However, some or all of the steps may be performed by other entities or components. In addition, some embodiments may perform the steps in parallel, perform the steps in different orders, or perform different steps.
The client 110A identifies 510 one or more available network pathways for data transmission. The client 110A identifies such network pathways by determining which of a set of predetermined pathways to a target client 110B are currently available to the client 110A. If the client 110A can establish a connection with the game server 120 and the target client 110B is also connected to the game server 120), then the client 110A identifies a network pathway to another client 110 via the game server 120. If the client 110A is connected to the cell tower 130, then the client 110 may determine whether the other client 110B is likewise connected to the cell tower 130. If so, then the client 110A identifies another network pathway through the cell tower 130. Moreover, if the client 110A and the other client 110B are connected to the same LAN 140, then the client 110A may identify a network pathway through the LAN 140. The client 110A may identify other networks or pathways that connect both clients 110 as other available network pathways (e.g., a direct connection between the clients 110, such as a Bluetooth connection). One or more of the network pathways may implement UDP for data transmission. For UDP pathways, the client 110 may utilize public-key cryptography for encryption of data. In particular, the client 110 may implement ECC.
The client 110A detects 520 one or more performance metrics for each of the available network pathways. The client 110A detects performance metrics by sending test data packets through the available network pathways. The data packets may request sending back another test data packet from the other client 110B. Based on the successful transmission of these test packets, the client 110A can calculate (or detect) metrics of the network pathway. Metrics include latency (ping), jitter, data loss, connection strength, bandwidth availability, etc.
The client 110A selects 530 one or more available network pathways for use in data transmission according to the detected metrics. The client 110A may consider one or more particular metrics when selecting network pathways. In one embodiment, the client 110A only considers latency (ping). In another embodiment, the client 110A considers latency and connection strength. As described previously, the client 110A may select the "best" pathway or pathways (as indicated by one or more metrics) or also select all available network pathways for use in data transmission.
The client 110A transmits 540 data via the one or more selected network pathways. In the context of a parallel reality game, the client 110A transmits game data to other clients 110 and the game server 120. Client-to-client communication is particularly efficient when holding shared AR experiences in the parallel reality game, where multiple players on their clients 110 may be interacting with one another and with the game server 120. Some of the interactions may be locally hosted by clients 110 or other networks (e.g., the cell tower 130 or the LAN 140), such that game states are not required to be synchronized by the game server 120. Locally hosting an AR experience provides for a more streamlined AR experience with low latency.
The client 110A may iterate the process 500 to periodically sample available pathways and iteratively optimize which pathways to use in maintaining the data transmission between devices.
FIG. 6 illustrates a method 600 for transmitting data between clients 110 within a geographic region surrounding a cell tower, according to an embodiment. The steps of FIG. 6 are described from the perspective of a cell tower 130 performing the method 600 to provide P2P communication between client devices 110 in a geographic region. However, some or all of the steps may be performed by other entities or components. In addition, some embodiments may perform the steps in parallel, perform the steps in different orders, or perform different steps.
In the embodiment shown in FIG. 6, the cell tower 130 provides 610 P2P communication via a network pathway for clients 110s within a geographic region surrounding the cell tower. For example, the cell tower 130 may provide P2P communication for clients s=110 providing a parallel-reality game (e.g., hosted by the game server 120). The cell tower 130 receives 620 data from a first client 110A via the network pathway. In particular, the network pathway is selected by the first client 110A from available network pathways based on one or more metrics for each of the available network pathways. For example, the first client device may select the network pathway providing P2P communication using a dataflow hierarchy protocol, as described above. The data received from the first client 110A may be associated with virtual content of an AR environment, such as AR data corresponding to geographic positions within the geographic region.
Using the network pathway, the cell tower 130 transmits 630 the data to a second client 110B within the geographic region. For example, if the data describes an update to virtual content of an AR environment associated with a parallel-reality game, the cell tower 130 may provide the update to some or all of the clients 110 of the parallel-reality game that are connected to the cell tower 130. As another example, the data may be specifically addressed to the second client 110B, such as a message or interaction with virtual content associated with a player using the second client.
Example Computer
FIG. 7 is a high-level block diagram illustrating an example computer 600 suitable for use within the computer network shown in FIG. 1, according to an embodiment. The example computer 700 includes at least one processor 702 coupled to a chipset 704. The chipset 704 includes a memory controller hub 720 and an input/output (I/O) controller hub 722. A memory 706 and a graphics adapter 712 are coupled to the memory controller hub 720, and a display 718 is coupled to the graphics adapter 712. A storage device 708, keyboard 710, pointing device 714, and network adapter 716 are coupled to the I/O controller hub 722. Other embodiments of the computer 700 have different architectures.
In the embodiment shown in FIG. 7, the storage device 708 is a non-transitory computer-readable storage medium such as a hard drive, compact disk read-only memory (CD-ROM), DVD, or a solid-state memory device. The memory 706 holds instructions and data used by the processor 702. The pointing device 714 is a mouse, track ball, touch-screen, or other type of pointing device, and is used in combination with the keyboard 710 (which may be an on-screen keyboard) to input data into the computer system 700. The graphics adapter 712 displays images and other information on the display 718. The network adapter 716 couples the computer system 700 to one or more computer networks.
The types of computers used by the entities of FIG. 1 can vary depending upon the embodiment and the processing power required by the entity. For example, a game server 120 might include a distributed database system comprising multiple blade servers working together to provide the functionality described. Furthermore, the computers can lack some of the components described above, such as keyboards 710, graphics adapters 712, and displays 718.
Those skilled in the art can make numerous uses and modifications of and departures from the apparatus and techniques disclosed herein without departing from the described concepts. For example, components or features illustrated or described in the present disclosure are not limited to the illustrated or described locations, settings, or contexts. Examples of apparatuses in accordance with the present disclosure can include all, fewer, or different components than those described with reference to one or more of the preceding figures. The present disclosure is therefore not to be limited to specific implementations described herein, but rather is to be accorded the broadest scope possible consistent with the appended claims, and equivalents thereof.
Additional Considerations
The foregoing description of the embodiments has been presented for the purpose of illustration; it is not intended to be exhaustive or to limit the patent rights to the precise forms disclosed. Persons skilled in the relevant art can appreciate that many modifications and variations are possible in light of the above disclosure.
Some portions of this description describe the embodiments in terms of algorithms and symbolic representations of operations on information. These algorithmic descriptions and representations are commonly used by those skilled in the data processing arts to convey the substance of their work effectively to others skilled in the art. These operations, while described functionally, computationally, or logically, are understood to be implemented by computer programs or equivalent electrical circuits, microcode, or the like. Furthermore, it has also proven convenient at times, to refer to these arrangements of operations as modules, without loss of generality. The described operations and their associated modules may be embodied in software, firmware, hardware, or any combinations thereof.
Any of the steps, operations, or processes described herein may be performed or implemented with one or more hardware or software modules, alone or in combination with other devices. In one embodiment, a software module is implemented with a computer program product comprising a computer-readable medium containing computer program code, which can be executed by a computer processor for performing any or all of the steps, operations, or processes described.
Embodiments may also relate to an apparatus for performing the operations herein. This apparatus may be specially constructed for the required purposes, and/or it may comprise a general-purpose computing device selectively activated or reconfigured by a computer program stored in the computer. Such a computer program may be stored in a non-transitory, tangible computer readable storage medium, or any type of media suitable for storing electronic instructions, which may be coupled to a computer system bus. Furthermore, any computing systems referred to in the specification may include a single processor or may be architectures employing multiple processor designs for increased computing capability.
Embodiments may also relate to a product that is produced by a computing process described herein. Such a product may comprise information resulting from a computing process, where the information is stored on a non-transitory, tangible computer readable storage medium and may include any embodiment of a computer program product or other data combination described herein.
As used herein, any reference to "one embodiment" or "an embodiment" means that a particular element, feature, structure, or characteristic described in connection with the embodiment is included in at least one embodiment. The appearances of the phrase "in one embodiment" in various places in the specification are not necessarily all referring to the same embodiment. Similarly, use of "a" or "an" preceding an element or component is done merely for convenience. This description should be understood to mean that one or more of the element or component is present unless it is obvious that it is meant otherwise.
Where values are described as "approximate" or "substantially" (or their derivatives), such values should be construed as accurate +/−10% unless another meaning is apparent from the context. From example, "approximately ten" should be understood to mean "in a range from nine to eleven."
As used herein, the terms "comprises," "comprising," "includes," "including," "has," "having" or any other variation thereof, are intended to cover a non-exclusive inclusion. For example, a process, method, article, or apparatus that comprises a list of elements is not necessarily limited to only those elements but may include other elements not expressly listed or inherent to such process, method, article, or apparatus. Further, unless expressly stated to the contrary, "or" refers to an inclusive or and not to an exclusive or. For example, a condition A or B is satisfied by any one of the following: A is true (or present) and B is false (or not present), A is false (or not present) and B is true (or present), and both A and B are true (or present).
Upon reading this disclosure, those of skill in the art will appreciate still additional alternative structural and functional designs that may be used to employ the described techniques and approaches. Thus, while particular embodiments and applications have been illustrated and described, it is to be understood that the described subject matter is not limited to the precise construction and components disclosed. The scope of protection should be limited only by the following claims.
Finally, the language used in the specification has been principally selected for readability and instructional purposes, and it may not have been selected to delineate or circumscribe the patent rights. It is therefore intended that the scope of the patent rights be limited not by this detailed description, but rather by any claims that issue on an application based hereon. Accordingly, the disclosure of the embodiments is intended to be illustrative, but not limiting, of the scope of the patent rights, which is set forth in the following claims.
Niantic Patent | Reducing latency in anticheat dataflow
Niantic Patent | Low latency datagram-responsive computer network protocol
Niantic Patent | Augmented reality hat