3D avatar rendering
By reducing the detail level of the avatar component by component, the problem of excessive resource consumption when merging multiple avatars in the prior art is solved, and the effect of efficient rendering of multiple avatars on mobile devices is achieved.
Patent Information
- Application Number
- CN202510000981.8
- Authority / Receiving Office
- CN · China
- Patent Type
- Applications(China)
- Current Assignee / Owner
- Priority Date
- 2018-10-31
- Filing Date
- 2019-10-31
- Publication Date
- 2025-05-06
AI Technical Summary
The prior art requires the execution of complex graphics processing operations when merging multiple avatars into a game, resulting in excessive resource consumption, especially on mobile devices, which is difficult to implement without sacrificing user experience.
By reducing the level of detail of the avatar component by component, the amount of resources required to merge multiple avatars is reduced. Specific methods include reducing the number of skeleton bones in the avatar and treating the bones associated with a specific texture separately.
Significantly reduces the overall resource requirements required by the application to combine avatars, allowing multiple avatars to be rendered and animated on mobile devices, improving game performance and user experience.
Smart Images

Figure CN119941938A_ABST
Abstract
Description
[0001] This application is a divisional application of the Chinese patent application “3D avatar rendering” with application number 201980071579.1 (filing date is October 31, 2019).
[0002] Priority claim
[0003] This application claims priority to U.S. patent application Ser. No. 16 / 177,325, filed on Oct. 31, 2018, the benefit of which is hereby claimed and is incorporated herein by reference in its entirety. Technical Field
[0004] The present disclosure relates generally to avatar rendering, and more particularly to reducing the complexity of avatar rendering. Background Art
[0005] Avatars are widely used in many different applications with different resource needs (e.g., different processing power and storage requirements). For example, messaging applications use fewer device resources (e.g., less storage) than gaming applications, leaving more resources available for processing avatars. This allows such messaging applications to provide a rich feature set for avatars with minimal impact on the user experience. On the other hand, gaming applications use a large amount of resources that need to be shared with avatar processing. Therefore, gaming applications often need to balance resource allocation between the game itself and avatar processing. BRIEF DESCRIPTION OF THE DRAWINGS
[0006] In the drawings, which are not necessarily drawn to scale, like numbers may describe similar components in different views. To easily identify the discussion of any particular element or action, the most significant digit or digits in a reference number refer to the figure number in which the element is first introduced. In the figures of the accompanying drawings, some embodiments are shown by way of example and not limitation, in which:
[0007] Figure 1 is a block diagram illustrating an example messaging system for exchanging data (eg, messages and related content) over a network according to an example embodiment.
[0008] Figure 2 is a schematic diagram illustrating data that may be stored in a database of a messaging server system according to an example embodiment.
[0009] Figure 3 is a schematic diagram illustrating a message structure generated by a messaging client application for communication according to an example embodiment.
[0010] Figure 4-5 is a flow chart illustrating example operations of an avatar processing system according to an example embodiment.
[0011] Figure 6 Illustrative components of an avatar with first and second levels of detail are shown in accordance with some embodiments.
[0012] Figure 7 Illustrative facial textures featuring different expressions with a second level of detail are shown in accordance with some embodiments.
[0013] Figure 8 is a block diagram illustrating a representative software architecture that may be used in conjunction with the various hardware architectures described herein, according to an example embodiment.
[0014] Fig. 9 is a block diagram illustrating components of a machine capable of reading instructions from a machine-readable medium (eg, a machine-readable storage medium) and performing any one or more of the methodologies discussed herein according to example embodiments. DETAILED DESCRIPTION
[0015] The following description includes systems, methods, techniques, instruction sequences, and computing machine program products that embody illustrative embodiments of the present disclosure. In the following description, for the purpose of explanation, many specific details are set forth to provide an understanding of various embodiments. However, it will be apparent to those skilled in the art that embodiments may also be practiced without these specific details. Typically, well-known instruction instances, protocols, structures, and techniques need not be shown in detail.
[0016] Incorporating avatars into applications greatly enhances the overall user experience. This is particularly true in multiplayer video games where users interact and communicate with each other. That is, using avatars to represent users in a video game makes communication and play more fun and interesting for players. As such games become more popular on mobile devices with limited available resources, application developers seek to improve graphics processing techniques used to incorporate avatars into games. In particular, application developers seek ways to incorporate avatars without sacrificing user experience or introducing latency.
[0017] One such technique that developers use to incorporate avatars into games involves reducing the overall level of detail of the avatars (e.g., reducing the visual quality of the avatars). While this technique allows the game to use more of the graphics engine resources of the mobile device, reducing the overall level of detail of the avatars still requires performing complex graphics processing operations related to 3D modeling. This limits the application of this technique on devices with a large amount of available resources or in games that contain a small number of avatars (e.g., a single avatar). That is, when applied to a large multiplayer video game that requires incorporating multiple avatars (e.g., incorporating eight avatars), this technique may not be effective, especially in mobile devices.
[0018] The disclosed technology improves the functionality of gaming application software and systems by reducing the amount of resources required to incorporate multiple avatars (e.g., eight avatars) into a given application (e.g., a game). In particular, the disclosed technology reduces the level of detail of the components of the avatar on a component-by-component basis. An avatar is typically constructed by combining various components (e.g., a skeleton (rig), a geometric model, and a texture). The skeleton includes a skeleton, which has multiple bones or parts and represents how different bones or parts interact with each other during animation. The geometric model is a three-dimensional surface representation of the avatar, which can be called a skin or mesh. The three-dimensional (3D) model uses a collection of points in 3D space to represent the physical body, and these points are connected by various geometric entities (e.g., triangles, lines, and surfaces); in addition, each bone in the skeleton is associated with some part of the geometric model. The texture of the avatar includes more detailed features of the geometric model, such as skin color, hair color, glasses, etc. According to the disclosed embodiments, to reduce the amount of resources required to incorporate multiple avatars, the number of bones in the skeleton of the avatar can be reduced separately from the number of triangles in the geometric model of the avatar (e.g., one at a time or in parallel using different processing elements). In addition, bones in the skeleton corresponding to facial hair, hats, hair, or glasses are embedded with the texture of the facial hair, hats, hair, or glasses separately from the bones in the skeleton corresponding to the avatar's head or clothing texture.
[0019] When a given application requests an avatar with certain components at a reduced level of detail, the components that have had their level of detail reduced are retrieved and assembled into the requested avatar. This approach significantly reduces the overall resource requirements (e.g., processing and storage resources) required for an application to combine avatars. That is, unlike conventional approaches in which an application must reduce the level of detail of an avatar as a whole (e.g., during the rendering and merging of the avatar), an application in accordance with the disclosed embodiments simply requests that a server fetch the previously reduced level of detail components and assemble them into an avatar to provide to the application. This enables multiple avatars (e.g., eight avatars) to be rendered and animated simultaneously for presentation to a user in a given game.
[0020] In certain embodiments, the animation of the avatar is further optimized to make more processing and storage resources available to the application (e.g., game), thereby allowing more avatars to be incorporated. Specifically, according to the disclosed embodiments, the expression of the avatar is animated (e.g., animating the avatar's expression from happy to sad) by taking a series of facial textures (e.g., facial textures with lips curved upward, facial textures with lips straight, and facial textures with lips curved downward) at reduced levels of detail corresponding to the animated expression. The facial textures are assembled into the avatar one at a time at reduced levels of detail and swapped according to the order to animate the desired expression.
[0021] Figure 1 1 is a block diagram illustrating an example messaging system 100 for exchanging data (e.g., messages and associated content) over a network 106. The messaging system 100 includes a plurality of client devices 102, each client device hosting a plurality of applications including a messaging client application 104. Each messaging client application 104 is communicatively coupled to other instances of the messaging client application 104 and a messaging server system 108 via a network 106 (e.g., the Internet).
[0022] Thus, each messaging client application 104 is able to communicate and exchange data with another messaging client application 104 and a messaging server system 108 via the network 106. The data exchanged between messaging client applications 104 and between messaging client applications 104 and messaging server systems 108 includes functions (e.g., commands to call functions) and payload data (e.g., text, audio, video, or other multimedia data).
[0023] Each messaging client application 104 can also communicate with one or more network-based game application servers 107. Each network-based game application server 107 hosts HTML5-based games (or any other suitable network-based games or games based on markup languages). In particular, the messaging client application 104 starts a network-based game by accessing HTML5 files from the network-based game application server 107 associated with the game. In some embodiments, a software development kit (SDK) stored on a game application platform 124 provided by the messaging server system 108 is used to program the game hosted by the network-based game application server 107 with JavaScript. The SDK includes an application programming interface (API) having functions that can be called by a network-based game application. In some embodiments, the game application platform 124 includes a JavaScript library that provides a given game application with access to certain user data of the messaging client application 104. According to some embodiments, HTML5 is used as an example technology for programming a game, but games programmed based on other technologies can be used.
[0024] In order to integrate the functions of the SDK into the game, the SDK is downloaded from the messaging server system 108 by the network-based game application server 107, or received by the network-based game application server 107. After downloading or receiving, the SDK is included as a part of the application code of the network-based game. Then, the code of the network-based game can call certain functions of the SDK to integrate the functions of the messaging client application 104 into the network-based game application. Certain functions that the network-based game application and the messaging client application 104 in the SDK can call are discussed in detail in the U.S. patent application entitled "MESSAGING AND GAMING APPLICATIONS COMMUNICATION PLATFORM" jointly owned and assigned by Alexander R. Osborne et al., which is incorporated herein by reference.
[0025] As an example, in response to the game application calling the fetch-avatar-image function, the user's avatar from the messaging application can be made available to the game application. Specifically, the game application may determine that the user's avatar needs to be included next to the score information presented in the game application. In this scenario, the game application calls the fetch-avatar-image function after startup, which passes a message with the user's identification information to the messaging application. The messaging application then generates a response message that includes an image representing the user's avatar obtained from the messaging application (or a link to the avatar image), and provides the response to the game application through the game application platform 124. The game application then incorporates the user's avatar by displaying the avatar in the game interface.
[0026] In some embodiments, a game may request an avatar with a specific level of detail (e.g., a second level of detail that is lower than a first level of detail) via the SDK. In this case, the game may specify the composition of the avatar (e.g., textures including face and body textures) and the given level of detail. The game application platform 124 may process the request and obtain components previously generated at the requested level of detail corresponding to the requested components. For example, the game application platform 124 may communicate with the avatar processing system 125 to obtain and generate a given avatar with the requested components at the requested level of detail. The avatar processing system 125 may assemble the requested components with the requested level of detail into the avatar, and provide the requested avatar with the requested level of detail to the game application via the game application platform 124.
[0027] In some embodiments, the avatar processing system 125 stores avatar components at two or more levels of detail. In some embodiments, the avatar processing system 125 stores an assembled avatar with a given identifier at a first level of detail, and stores each component in the assembled avatar at a second level of detail separately from the assembled avatar. For example, the avatar processing system 125 stores an avatar skeleton (skeleton) at a first level of detail with 216 bones, and stores the same avatar skeleton at a second level of detail with 16 bones. Alternatively, the avatar processing system 125 stores a complete avatar that has been assembled at a first level of detail, where the avatar skeleton and all other components of the avatar have the first level of detail, and stores only the skeletal portion of the avatar separately at a second level of detail. The avatar processing system 125 stores an avatar model at a first level of detail with 10,000 triangles, and stores the same model of the avatar in a second level of detail with 2000 triangles. Alternatively, the avatar processing system 125 stores the complete avatar that has been assembled at a first level of detail, where the avatar model has the first level of detail, and only stores the model portion of the avatar separately at a second level of detail. The avatar processing system 125 stores the textures of the avatar (e.g., facial hair, facial features, clothing, hat, glasses, etc.) at the first level of detail with a full set of blended shapes and rich levels of detail, and stores the same textures at a second level of detail with minimal geometry and minimal levels of detail. Alternatively, the avatar processing system 125 stores the complete avatar that has been assembled at a first level of detail, where the textures have the first level of detail, and only stores the textures of the avatar at the second level of detail. That is, the textures of the avatar with the first level of detail are not stored separately from the assembled avatar with the first level of detail. Upon receiving a request, the avatar processing system 125 assembles the avatar by taking the skeleton, model, and textures corresponding to the second level of detail, and assembling the individual components into the complete avatar with the second level of detail.
[0028] In some embodiments, the avatar processing system 125 reduces the level of detail of each avatar component separately from other avatar components. For example, the avatar processing system 125 obtains a skeleton with 216 bones for a given avatar, and reduces the level of detail of the skeleton to 16 bones separately from reducing the level of detail of the avatar model and / or the texture of the avatar. The skeleton with a reduced second level of detail can be stored separately from the skeleton with the first level of detail. In some embodiments, the skeletons with these two levels of detail can be associated with the same avatar reference or identifier. This allows a given application to request an avatar with a given level of detail by specifying the identifier of the avatar, without having to specifically identify the skeleton with a lower level of detail corresponding to the requested avatar. In some embodiments, the nomenclature of the skeleton blocks is retained between the first and second levels of detail. That is, the names of the head joints common to the two skeletons with the first level of detail and the second level of detail can remain the same. In this way, the same process used to animate a skeleton with 216 bones can be used to animate a skeleton with 16 bones.
[0029] In some embodiments, portions of the avatar skeleton having the second level of detail are individually associated with textures. For example, a head joint in the skeleton having the second level of detail is associated with facial hair, hair, a hat, and glasses, while the entire skeleton of the avatar is associated with clothing and the head. This allows the avatar processing system 125 to quickly and efficiently assemble a given avatar at a second level of detail that is lower than the level of detail of an avatar having the first level of detail by picking and selecting individual components of previously generated avatars.
[0030] In some embodiments, the avatar processing system 125 takes a model of a given avatar and reduces the level of detail of the model separately from reducing the level of detail of the avatar skeleton and / or the avatar's texture. For example, the avatar processing system 125 takes a model of a given avatar having 10,000 triangles and reduces the level of detail of the model to 2000 triangles. In some embodiments, the avatar processing system 125 receives a user input that specifies the number of triangles and vertices for a second level of detail. In response to receiving the user input, the avatar processing system 125 automatically takes the model of the avatar at the first level of detail and generates the model at the second level of detail having the number of triangles and vertices specified by the user input. The model with the reduced second level of detail may be stored separately from the model with the first level of detail. In some embodiments, the models with two levels of detail may be associated with the same avatar reference or identifier. This allows a given application to request an avatar with a given level of detail by specifying the identifier of the avatar without having to specifically identify the lower level of detail model corresponding to the requested avatar.
[0031] In some embodiments, the avatar processing system 125 retrieves one or more textures for a given avatar and reduces the level of detail of the retrieved textures separately from reducing the level of detail of the avatar skeleton and / or the model of the avatar. For example, the avatar processing system 125 retrieves clothing, body, face, facial hair, and / or hair at a first level of detail and reduces the level of detail by downsampling, resizing, and quantizing the clothing, body, face, facial hair, and / or hair. The textures having a reduced second level of detail may be stored separately from the textures having the first level of detail. In some embodiments, the textures having two levels of detail may be associated with the same avatar reference or identifier. This allows a given application to request an avatar having a given level of detail by specifying the avatar's identifier without having to specifically identify a lower level of detail texture corresponding to the requested avatar.
[0032] In some embodiments, the avatar processing system 125 may store the newly assembled avatar at the requested level of detail for future requests. For example, the avatar processing system 125 may receive a request for an avatar with a specified level of detail (a second level of detail that is lower than the first level of detail). The avatar processing system 125 may determine whether the components of the avatar with the specified level of detail have been previously assembled and stored. In response to determining that the requested avatar with the components of the specified level of detail have been pre-assembled and stored, the avatar processing system 125 may retrieve the previously assembled avatar and provide the avatar with the requested level of detail to the game via the game application platform 124. In response to determining that the requested avatar has not been pre-assembled and stored, the avatar processing system 125 may retrieve each component specified in the request with the specified level of detail and assemble the components into an avatar. The avatar processing system 125 may then return the assembled avatar to the game at the specified level of detail.
[0033] The SDK stored on the gaming application platform 124 effectively provides a bridge between the network-based gaming application and the messaging client application 104. This provides users with a seamless experience of communicating with their friends on the messaging client application 104, thereby maintaining the look and feel of the messaging client application 104 while playing the network-based gaming application. In order to bridge the network-based gaming application and the messaging client application 104, in some embodiments, the SDK facilitates communication between the network-based gaming application server 107 and the messaging client application 104. In some embodiments, the WebViewJavaScriptBridge running on the client device 102 establishes two one-way communication channels between the network-based gaming application and the messaging client application 104. Messages are sent asynchronously between the network-based gaming application and the messaging client application 104 through these communication channels. Each SDK function call is sent as a message, and the callback of each SDK function is implemented by constructing a unique callback identifier and sending a message with the callback identifier.
[0034] In some embodiments, each network-based game application server 107 provides the HTML5 file corresponding to the network-based game application to the messaging server system 108. The messaging server system 108 can add a visual representation of the game in the messaging client application 104. The visual representation can be the box art (boxart) of the game application, or it can be just the text with the title of the game application. The box art (or cover art) includes artworks as illustrations or photos, which visually identify, describe and / or promote the game application. The box art is artistically connected to the game application and is created by the creator of the game application with art. Once the user selects the visual representation or commands the messaging client application 104 to start the game (as described below) through the GUI of the messaging client application 104, the messaging client application 104 obtains the HTML5 file and starts all the resources required to start the game. In some cases, the messaging client application 104 accesses the corresponding network-based game application server 107 to start the game.
[0035] The messaging server system 108 provides server-side functions to specific messaging client applications 104 via the network 106. Although certain functions of the messaging system 100 are described herein as being performed by the messaging client application 104 or by the messaging server system 108, it should be understood that the location of certain functions within the messaging client application 104 or the messaging server system 108 is a design choice. For example, it may be technically preferable to first deploy certain technologies and functions within the messaging server system 108 and then migrate the technologies and functions to the messaging client application 104 where the client device 102 has sufficient processing power.
[0036] The messaging server system 108 supports various services and operations provided to the messaging client applications 104. Such operations include sending data to the messaging client applications 104, receiving data from the messaging client applications 104, and processing data generated by the messaging client applications 104. As examples, the data may include message content, client device information, geolocation information, media annotations and overlays, virtual objects, message content persistence conditions, social network information, and live event information. The data exchange in the messaging system 100 is called and controlled through functions available through the user interface (UI) of the messaging client applications 104.
[0037] Turning now specifically to the messaging server system 108, an application programming interface (API) server 110 is coupled to and provides a programming interface to an application server 112. The application server 112 is communicatively coupled to a database server 118, which facilitates access to a database 120 in which data associated with messages processed by the application server 112 is stored.
[0038] In particular, the API server 110 is handled, which receives and sends message data (e.g., commands and message payloads) between the client device 102 and the application server 112. Specifically, the API server 110 provides a set of interfaces (e.g., routines and protocols) that can be called or queried by the messaging client application 104 and the network-based gaming application server 107 in order to call functions of the application server 112. The API server 110 exposes various functions supported by the application server 112, including: account registration; login functionality; sending messages from a particular messaging client application 104 to another messaging client application 104 via the application server 112; sending media files (e.g., images or videos) from a messaging client application 104 to a messaging server application 114 for possible access by another messaging client application 104; setting of collections of media data (e.g., stories); retrieval of such collections; retrieval of a friend list of a user of a client device 102; retrieval of messages and content; adding and removing friends from a social graph; the position of friends in a social graph; access to user conversation data; access to avatar information stored on the messaging server system 108; and opening application events (e.g., related to a messaging client application 104).
[0039] The application server 112 hosts multiple applications and subsystems, including a messaging server application 114, an image processing system 116, a social networking system 122, a gaming application platform 124, and an avatar processing system 125. The messaging server application 114 implements multiple message processing techniques and functions, which particularly relate to the aggregation and other processing of content (e.g., text and multimedia content) included in messages received from multiple instances of the messaging client application 104. As will be described in further detail, text and media content from multiple sources can be aggregated into collections of content (e.g., referred to as stories or galleries). The messaging server application 114 then makes these collections available to the messaging client application 104. Given the hardware requirements of such processing, the messaging server application 114 can also perform other processor and memory intensive processing of the data on the server side.
[0040] The application server 112 also includes an image processing system 116 that is dedicated to performing various image processing operations, typically with respect to images or videos received within the payload of messages at the messaging server application 114 .
[0041] The social networking system 122 supports various social networking functions and services and makes these functions and services available to the messaging server application 114. To do so, the social networking system 122 maintains and accesses an entity graph within the database 120. Examples of functions and services supported by the social networking system 122 include identifying other users of the messaging system 100 with whom a particular user has a relationship or is "following," and also identifying other entities and interests of a particular user. Such other users may be referred to as friends of the user.
[0042] The application server 112 is communicatively coupled to a database server 118 , which facilitates access to a database 120 where data associated with messages processed by the messaging server application 114 is stored.
[0043] Figure 2 2 is a schematic diagram 200 illustrating data that may be stored in a database 120 of a messaging server system 108 according to certain example embodiments. Although the contents of the database 120 are illustrated as including a plurality of tables, it should be appreciated that the data may be stored in other types of data structures, such as an object-oriented database.
[0044] The database 120 includes message data stored in a message table 214. The entity table 202 stores entity data including an entity graph 204. The entities for which records are maintained in the entity table 202 may include individuals, corporate entities, organizations, objects, places, events, etc. Regardless of the type, any entity about which the messaging server system 108 stores data may be a recognized entity. Each entity has a unique identifier and an entity type identifier (not shown).
[0045] The entity graph 204 also stores information about relationships and associations between entities. Such relationships may be social, professional (e.g., working in the same company or organization), interest-based, or activity-based, by way of example only.
[0046] The message table 214 may store a collection of conversations between a user and one or more friends or entities. The message table 214 may include various attributes of each conversation, such as a list of participants, the size of the conversation (e.g., number of users and / or number of messages), the chat color of the conversation, a unique identifier of the conversation, and any other features related to the conversation. Information from the message table 214 may be provided to a given network-based gaming application in a limited form and on a limited basis based on functions of the messaging client application 104 called by the network-based gaming application.
[0047] The database 120 also stores annotation data in the form of an example of a filter in the annotation table 212. The database 120 also stores the received annotated content in the annotation table 212. The filter for which data is stored in the annotation table 212 is associated with a video (for which data is stored in the video table 210) and / or an image (for which data is stored in the image table 208) and is applied to the video and / or image. In one example, the filter is displayed as an overlay superimposed on an image or video during presentation to the recipient user. The filter can be of various types, including a user-selected filter from a filter library presented to the sender user by the messaging client application 104 when the sender user is composing a message. Other types of filters include geographic location filters (also referred to as geographic filters) that can be presented to the sender user based on geographic location. For example, based on geographic location information determined by a global positioning system (GPS) unit of the client device 102, the messaging client application 104 can present a geographic location filter specific to a neighborhood or a specific location within the UI. Another type of filter is a data filter, which may be selectively presented to the sender user by the messaging client application 104 based on other input or information collected by the client device 102 during the message creation process. Examples of data filters include the current temperature at a particular location, the current speed at which the sender user is traveling, the battery life of the client device 102, or the current time.
[0048] Other annotation data that may be stored in the image table 208 is so-called "shot" data. A "shot" may be real-time special effects and sounds that may be added to an image or video.
[0049] As described above, the video table 210 stores video data that, in one embodiment, is associated with a message for which a record is maintained within the message table 214. Similarly, the image table 208 stores image data associated with a message for which message data is stored within the entity table 202. The entity table 202 may associate various annotations from the annotation table 212 with the various images and videos stored in the image table 208 and the video table 210.
[0050] The avatar component 207 stores various components at different levels of detail. The avatar processing system 125 accesses the avatar components stored in the avatar component 207 with a first level of detail, reduces the level of detail, and stores the avatar components in the avatar component 207 with a second level of detail. The avatar component 207 may pre-store assembled avatars with the first and / or second levels of detail. The avatar component 207 stores the association between the first and second levels of detail of the various components and their corresponding avatars. For example, a given avatar may be associated with both a first level of detail component and a second level of detail component. That is, an avatar skeleton with a first and second level of detail may be associated with a common avatar identifier.
[0051] The game application API function 209 stores a plurality of functions of the SDK stored on the game application platform 124. The game application API function 209 stores the code that is executed when the network-based game application, or the messaging client application 104, or the messaging application simulator 105 calls a given function of the API.
[0052] The story table 206 stores data related to a collection of messages and associated images, video, or audio data that are compiled into a collection (e.g., a story or gallery). The creation of a particular collection can be initiated by a particular user (e.g., each user for whom a record is maintained in the entity table 202). A user can create a "personal story" in the form of a collection of content that the user has created and sent / broadcast. To this end, the UI of the messaging client application 104 may include a user-selectable icon to enable the sending user to add specific content to his or her personal story. The UI of the messaging client application 104 may include a selectable option to enable the sending user to add a modified video clip with a virtual object to his or her personal story.
[0053] A collection may also constitute a "live story," which is a collection of content from multiple users that is created manually, automatically, or using a combination of manual and automatic techniques. For example, a "live story" may consist of a curated stream of user-submitted content from various locations and events. For example, a user whose client device has location services enabled and who is at a common location event at a particular time may be presented with an option via the UI of the messaging client application 104 to contribute content to a particular live story. A live story may be identified to a user by the messaging client application 104 based on his or her location. The end result is a "live story" told from the perspective of the community.
[0054] Another type of content collection is called a "location story," which enables users whose client devices 102 are located within a particular geographic location (e.g., on a college or university campus) to contribute to a particular collection. In some embodiments, contributions to location stories may require secondary authentication to verify that the end user belongs to a particular organization or other entity (e.g., is a student on a university campus).
[0055] Figure 3 is a schematic diagram illustrating the structure of a message 300 generated by a messaging client application 104 for communication with another messaging client application 104 or a messaging server application 114 according to some embodiments. The content of a particular message 300 is used to populate a message table 214 stored in a database 120 accessible to a messaging server application 114. Similarly, the content of the message 300 is stored in memory as "in-transit" or "in-flight" data of a client device 102 or an application server 112. The message 300 is shown as including the following components:
[0056] Message identifier 302 : a unique identifier that identifies the message 300 .
[0057] Message text payload 304 : The text to be generated by the user through the user interface of the client device 102 and included in the message 300 .
[0058] Message image payload 306 : Image data captured by a camera component of the client device 102 or retrieved from the memory of the client device 102 and included in the message 300 .
[0059] Message video payload 308 : Video data captured by a camera component or retrieved from a memory component of the client device 102 and included in the message 300 .
[0060] Message audio payload 310 : audio data captured by a microphone or retrieved from a memory component of the client device 102 and included in the message 300 .
[0061] Message annotation 312: Annotation data representing an annotation (eg, a filter, sticker, or other enhancement) to be applied to the message image payload 306, the message video payload 308, or the message audio payload 310 of the message 300.
[0062] Message duration parameter 314: A parameter value indicating the amount of time in seconds that the content of a message (eg, message image payload 306, message video payload 308, message audio payload 310) is to be presented to or made accessible to a user via the messaging client application 104.
[0063] Message geolocation parameter 316: Geolocation data (e.g., latitude and longitude coordinates) associated with the content payload of the message. Multiple message geolocation parameter 316 values may be included in the payload, with each of these parameter values being associated with a respective content item included in the content (e.g., a specific image within a message image payload 306, or a specific video within a message video payload 308).
[0064] Message story identifier 318: An identifier value that identifies one or more content collections (e.g., "stories") associated with a particular content item in the message image payload 306 of the message 300. For example, multiple images within the message image payload 306 may each be associated with multiple content collections using an identifier value.
[0065] Message tags 320: Each message 300 may be tagged with a plurality of tags, each tag indicating the subject of the content included in the message payload. For example, where a particular image included in the message image payload 306 depicts an animal (e.g., a lion), a tag value indicating the relevant animal may be included within the message tags 320. The tag values may be manually generated based on user input, or may be automatically generated using, for example, image recognition.
[0066] • Message sender identifier 322: An identifier (eg, a messaging system identifier, an email address, or a device identifier) that indicates the user of the client device 102 on which the message 300 was generated and from which the message 300 was sent.
[0067] Message recipient identifier 324: An identifier (eg, a messaging system identifier, an email address, or a device identifier) indicating the user of client device 102 to which message 300 is addressed. In the case of a conversation between multiple users, the identifier may identify each user involved in the conversation.
[0068] The content (e.g., value) of each component of message 300 may be a pointer to a location in a table storing content data values. For example, the image value in message image payload 306 may be a pointer (or address) to a location in image table 208. Similarly, the value in message video payload 308 may point to data stored in video table 210, the value stored in message annotation 312 may point to data stored in annotation table 212, the value stored in message story identifier 318 may point to data stored in story table 206, and the values stored in message sender identifier 322 and message recipient identifier 324 may point to user records stored in entity table 202.
[0069] Figure 4-5 400-500 in performing the processes 400-500 according to an example embodiment. The processes 400-500 may be embodied in computer-readable instructions to be executed by one or more processors so that the operations of the processes 400-500 may be performed in part or in whole by the functional components of the messaging server system 108; therefore, the processes 400-500 are described below by reference to examples thereof. However, in other embodiments, at least some of the operations of the processes 400-500 may be deployed on various other hardware configurations. Therefore, the processes 400-500 are not intended to be limited to the messaging server system 108, but may be implemented in whole or in part by any other component.
[0070] In operation 401, a first avatar having a first level of detail including a first plurality of components is stored in a database. For example, the avatar processing system 125 stores the avatar at the first level of detail in the avatar component 207. The avatar may be stored in the avatar component 207 in an assembled form, wherein all avatar components (e.g., skeletons, models, and textures) having the first level of detail have been combined together. Alternatively, the components of the avatar having the first level of detail may be stored separately to be assembled into a complete avatar at a later time.
[0071] At operation 402, the level of detail of each component in the first plurality of components is reduced separately from each other. For example, the avatar processing system 125 obtains a first component from a first avatar (e.g., a skeleton) and reduces the level of detail of the obtained first component separately from a second component (e.g., an avatar model). Reducing the level of detail of all components of the first avatar generates a second plurality of components having a second level of detail. For example, an avatar skeleton (skeleton) having a first level of detail of 216 bones can be reduced to an avatar skeleton having a second level of detail of 16 bones. As another example, an avatar model having a first level of detail of 10,000 triangles can be reduced to a model having a second level of detail of 2000 triangles.
[0072] At operation 403, a second plurality of components is stored that includes the reduced level of detail for each component in the first plurality of components. For example, the avatar processing system 125 stores the reduced level of detail components as a second plurality of components in the avatar components 207. The avatar processing system 125 associates the reduced level of detail components with the same avatar identifier having the first level of detail. For example, an avatar having the first level of detail may be associated with a given unique identifier (e.g., a unique name or number), and the reduced level of detail components may be associated with the same unique identifier. Specifically, the database may store a reference to the reduced level of detail components for the unique avatar identifier, and may store a reference to the assembled avatar at the first level of detail.
[0073] At operation 404, a request is received for a first avatar with a second level of detail, the second level of detail including a level of detail lower than the first level of detail. For example, a game may request a given avatar with a specified (e.g., reduced) level of detail from a game application platform 124. The game may provide an identifier of the avatar and / or an identifier of each component in a list of components of the requested avatar. In some implementations, the game may need to present multiple avatars (e.g., eight different avatars) at the same time. In this case, the game may request each avatar with a second level of detail from the game application platform 124. This allows the game to quickly and efficiently present and animate multiple three-dimensional avatars while retaining device resources for processing the game. In some implementations, the game may, for example, present certain avatars at the first level of detail and present certain other avatars at the second level of detail based on priority and / or based on the identity of the user. For example, a leader or user may have an avatar presented at a first level of detail between other avatars, the first level of detail being greater than the level of detail presenting other avatars. The game may provide the identities of all avatars that it needs to present to the game application platform 124 at the same time, including the specific level of detail of each avatar. The game application platform 124 may then communicate with the avatar processing system 125 to retrieve avatars with different levels of detail for the game to be presented simultaneously.
[0074] In response to receiving the request, a second plurality of components are assembled to generate a second avatar having a second level of detail at operation 405. For example, the game application platform 124 may communicate a request for an avatar having a reduced level of detail to the avatar processing system 125. The avatar processing system 125 takes the components having the requested level of detail (e.g., the second level of detail) and assembles them into an avatar having the second level of detail. The avatar processing system 125 provides the avatar having the second level of detail to the game application platform 124, which then provides the requested avatar to the game.
[0075] In some embodiments, to further optimize the avatar animation, the game and messaging application can animate the avatar expression by swapping different facial feature textures according to the expression order. For example, to animate a given avatar from happy to sad at a second level of detail, the avatar processing system 125 may select three different facial textures (e.g., one facial texture with the sides of the lips raised, a second facial texture with the sides of the lips straight, and a third facial texture with the sides of the lips down). The avatar processing system 125 may determine the expression order to represent the avatar's expression changing from happy to sad. The avatar processing system 125 may provide the game with three different facial textures and instructions on the order of swapping facial textures to change the expression from happy to sad (e.g., first presenting a facial texture with the sides of the lips raised, then swapping that facial texture with the sides of the lips straight, followed by a facial texture with the sides of the lips down).
[0076] At operation 501, a first facial texture of an avatar (eg, an avatar component) is retrieved at a second level of detail lower than the first level of detail. For example, the avatar processing system 125 retrieves a facial texture characterized by sideways lifting of the lips.
[0077] At operation 502, a second facial texture of the avatar is obtained at a second level of detail. For example, the avatar processing system 125 obtains a facial texture featuring lips facing sideways downward.
[0078] At operation 503, the avatar is assembled at a second level of detail using the first facial texture. For example, the avatar processing system 125 assembles the avatar with a facial texture featuring sideways raised lips. In some embodiments, the avatar may have a three-dimensional head and / or body, and the facial texture may be two-dimensional. The two-dimensional facial texture may be used to assemble a three-dimensional avatar to reduce processing and storage resource requirements for a given device.
[0079] At operation 504, an order of facial textures associated with the requested expression is determined. For example, the avatar processing system 125 may receive a request from a game to animate an expression from happy to sad. In response, the avatar processing system 125 identifies an expression order of facial textures from the set of expression orders or multiple expression orders. The order may identify a first facial texture in a first position followed by a second facial texture in a last position.
[0080] At operation 505, the first facial texture in the combined avatar is swapped with the second facial texture based on the determined order to animate the requested expression in the avatar. For example, to animate the avatar expression from happy to sad, the avatar processing system 125 first presents a facial texture in which the side of the lips is raised (e.g., the first facial texture), and then the avatar processing system 125 swaps the first facial texture with the second facial texture (with the side of the lips facing down). By swapping the facial textures, the processing resources of the device are reduced to a simple swap operation. This avoids having to expend processing resources to make the avatar as a whole go from having one expression to having another expression, thereby significantly improving performance and computational efficiency. This allows multiple avatars with reduced levels of detail to be presented and rendered simultaneously in the game.
[0081] Figure 6 An illustrative assembly of an avatar having first and second levels of detail is shown in accordance with some embodiments. For example, Figure 6 The components shown in FIG. 6 include an avatar skeleton 601 and an avatar model 611. Figure 6 As shown, an avatar skeleton 601 having a first level of detail (e.g., having 216 bones) is reduced to a skeleton 602 having a second level of detail (e.g., having 16 bones). Figure 6 As shown, an avatar model 611 having a first level of detail (eg, having 10,000 triangles) is reduced to an avatar model 612 having a second level of detail (eg, having 2000 triangles).
[0082] Figure 7 An illustrative facial texture 700 featuring different expressions with a second level of detail is shown in accordance with some embodiments. For example, different two-dimensional facial textures 703, 702, and 704 can be assembled onto a three-dimensional head 701 at a reduced level of detail relative to a first level of detail to generate an avatar with a reduced level of detail. In some embodiments, the facial texture with the first level of detail and the reduced level of detail facial texture are both two-dimensional, but the reduced level of detail facial texture has a reduced image quality relative to the first level of detail. In some embodiments, the first level of detail facial texture is three-dimensional and is converted to a two-dimensional facial texture to reduce the level of detail.
[0083] Facial texture 702 represents a two-dimensional expression with lips curved or raised upward. Facial texture 703 represents a two-dimensional expression with lips in a neutral straight position. Facial texture 704 represents a two-dimensional expression with lips curved or downward. The avatar processing system 125 may receive a request from a game to animate a given avatar from happy to sad, the avatar having a second level of detail lower than the first level of detail. In response, the avatar processing system 125 may identify an expression request that identifies a set of facial textures 700 and an order for representing the animation from happy to sad. For example, the expression order may indicate that facial textures 703, 702, and 704 correspond to the requested expression and need to be presented in the following order: facial texture 702 first, then facial texture 703, and then facial texture 704. The avatar processing system 125 may provide the three facial textures and the three-dimensional head 701 to the game along with other textures and components and an order for presenting the facial textures. Then, according to the specified order, the game can animate the requested expression from happy to sad by swapping facial texture 702 with facial texture 703, and then swapping facial texture 703 with facial texture 704. Alternatively, the avatar processing system 125 can assemble the avatar with different facial textures according to the specified order, and provide the avatar with the updated facial textures to the game when swapping different facial textures to animate the avatar expression.
[0084] Figure 8 is a block diagram illustrating an example software architecture 806 that may be used in conjunction with the various hardware architectures described herein. Figure 8 is only a non-limiting example of software architecture 806, and it will be appreciated that a variety of other architectures may be implemented to facilitate the functionality described herein. Software architecture 806 may be implemented in a variety of environments such as Fig. 9 900, which includes, among other things, a processor 904, a memory 914, and input / output (I / O) components 918. A representative hardware layer 852 is shown and may represent, for example, Fig. 9 The machine 900 of the embodiment of the present invention. The representative hardware layer 852 includes one or more processing units 854 having associated executable instructions 804. The executable instructions 804 represent executable instructions of the software architecture 806, including implementations of the methods, components, etc. described herein. The hardware layer 852 also includes a memory and / or storage module 856 also having executable instructions 804. The hardware layer 852 may also include other hardware 858.
[0085] exist Figure 8In the example architecture of , software architecture 806 can be conceptualized as a stack of layers, each of which provides specific functionality. For example, software architecture 806 may include layers such as operating system 802, library 820, framework / middleware 818, application 816, and presentation layer 814. In operation, applications 816 or other components within these layers may call API call 808 through the software stack, and receive message 812 in response to API call 808. The layers shown are representative in nature, and not all software architectures have all layers. For example, some mobile or dedicated operating systems may not provide framework / middleware 818, while other operating systems may provide such layers. Other software architectures may include additional or different layers.
[0086] The operating system 802 can manage hardware resources and provide public services. The operating system 802 may include, for example, a kernel 822, services 824, and drivers 826. The kernel 822 may act as an abstraction layer between the hardware and other software layers. For example, the kernel 822 may be responsible for memory management, processor management (e.g., scheduling), component management, networking, security settings, etc. Services 824 may provide other public services to other software layers. Drivers 826 are responsible for controlling or interfacing with the underlying hardware. For example, drivers 826 include display drivers, camera drivers, drives, flash drives, serial communications drivers (such as Universal Serial Bus (USB) drivers), drivers, audio drivers, power management drivers, etc., depending on the hardware configuration.
[0087] The library 820 may provide a common infrastructure that may be used by the application 816 and / or other components and / or layers. The library 820 generally provides the following functions: allowing other software components to perform tasks in an easier manner than by directly interfacing with the basic operating system 802 functions (e.g., kernel 822, service 824, and / or driver 826). The library 820 may include a system library 844 (e.g., a C standard library) that may provide functions such as memory allocation functions, string manipulation functions, mathematical functions, and the like. In addition, the library 820 may include an API library 846 such as a media library (e.g., a library for supporting the presentation and operation of various media formats (e.g., MPEG4, H.264, MP3, AAC, AMR, JPG, PNG)), a graphics library (e.g., an OpenGL framework that may be used to present two-dimensional and three-dimensional graphics content on a display), a database library (e.g., SQLite that may provide various relational database functions), a network library (e.g., WebKit that may provide network browsing functions), and the like. The library 820 may also include a variety of other libraries 848 to provide a variety of other APIs to the application 816 and other software components / modules.
[0088] Framework / middleware 818 (sometimes also referred to as middleware) provides a high-level, general-purpose infrastructure that can be used by applications 816 and / or other software components / modules. For example, framework / middleware 818 can provide various graphical user interface (GUI) functions, advanced resource management, advanced location services, etc. Framework / middleware 818 can provide a wide range of other APIs that can be used by applications 816 and / or other software components / modules, some of which may be specific to a particular operating system 802 or platform.
[0089] Applications 816 include built-in applications 838 and / or third-party applications 840. Examples of representative built-in applications 838 may include, but are not limited to, contact applications, browser applications, book reader applications, location applications, media applications, messaging applications, and / or game applications. Third-party applications 840 may include applications that are created by entities other than the vendor of a particular platform using Android TM or iOS TM Applications developed with a software development kit (SDK) can be developed on mobile operating systems (such as iOS TM 、Android TM , Third-party applications 840 may call API calls 808 provided by a mobile operating system (such as operating system 802) to facilitate the functionality described herein.
[0090] Applications 816 may utilize built-in operating system functionality (e.g., kernel 822, services 824, and / or drivers 826), libraries 820, and framework / middleware 818 to create a UI to interact with a user of the system. Alternatively or additionally, in some systems, interaction with the user may occur through a presentation layer such as presentation layer 814. In these systems, the application / component "logic" may be separated from aspects of the application / component that interact with the user.
[0091] Fig. 9 900 is a block diagram of components of a machine 900 according to some example embodiments, which components are capable of reading instructions from a machine-readable medium (e.g., a machine-readable storage medium) and performing any one or more of the methodologies discussed herein. Specifically, Fig. 9A diagrammatic representation of a machine 900 in the form of an example computer system is shown, in which instructions 910 (e.g., software, programs, applications, applet, application programs, or other executable codes) for causing the machine 900 to perform any one or more of the methods discussed herein may be executed. In this way, the instructions 910 may be used to implement the modules or components described herein. The instructions 910 convert a general, unprogrammed machine 900 into a specific machine 900 that is programmed to perform the functions described and shown in the described manner. In alternative embodiments, the machine 900 operates as a standalone device, or may be coupled (e.g., networked) to other machines. In a network deployment, the machine 900 may operate as a server machine or a client machine in a server-client network environment, or as a peer machine in a peer-to-peer (or distributed) network environment. The machine 900 may include, but is not limited to, a server computer, a client computer, a personal computer (PC), a tablet computer, a laptop computer, a netbook, a set-top box (STB), a personal digital assistant (PDA), an entertainment media system, a cellular phone, a smart phone, a mobile device, a wearable device (e.g., a smart watch), a smart home device (e.g., a smart appliance), other smart devices, a network appliance, a network router, a network switch, a network bridge, or any machine capable of executing instructions 910 in sequence or otherwise, which specify actions to be taken by the machine 900. In addition, while only a single machine 900 is shown, the term "machine" should also be construed to include a collection of machines that individually or collectively execute instructions 910 to perform any one or more of the methodologies discussed herein.
[0092] The machine 900 may include a processor 904, a memory / storage device 906, and an I / O component 918, which may be configured to communicate with each other, for example, via a bus 902. In an example embodiment, the processor 904 (e.g., a central processing unit (CPU), a reduced instruction set computing (RISC) processor, a complex instruction set computing (CISC) processor, a graphics processing unit (GPU), a digital signal processor (DSP), an application specific integrated circuit (ASIC), a radio frequency integrated circuit (RFIC), another processor, or any suitable combination thereof) may include, for example, a processor 908 and a processor 912 that may execute instructions 910. The term "processor" is intended to include a multi-core processor 904 that may include two or more independent processors (sometimes referred to as "cores") that may execute instructions simultaneously. Although Fig. 9 Multiple processors 904 are shown, and the machine 900 may include a single processor with a single core, a single processor with multiple cores (e.g., a multi-core processor), multiple processors with a single core, multiple processors with multiple cores, or any combination thereof.
[0093] The memory / storage 906 may include a memory 914, (such as a main memory, or other memory storage device) and a storage unit 916, which may be accessed by the processor 904, such as via the bus 902. The storage unit 916 and the memory 914 store instructions 910 that embody any one or more of the methodologies or functions described herein. During execution by the machine 900, the instructions 910 may also reside, in whole or in part, within the memory 914, within the storage unit 916, within at least one of the processors 904 (e.g., within a cache memory of the processor), or any combination thereof. Thus, the memory 914, the storage unit 916, and the memory of the processor 904 are examples of machine-readable media.
[0094] I / O components 918 may include a variety of components to receive input, provide output, generate output, send information, exchange information, collect measurements, etc. The specific I / O components 918 included in a particular machine 900 will depend on the type of machine. For example, a portable machine such as a mobile phone will likely include a touch input device or other such input mechanism, while a headless server machine will likely not include such a touch input device. It should be understood that I / O components 918 may be included in Fig. 9 918. The I / O components 918 are grouped according to function only for the purpose of simplifying the following discussion, and the grouping is by no means limiting. In various example embodiments, the I / O components 918 may include output components 926 and input components 928. The output components 926 may include visual components (e.g., displays such as plasma display panels (PDPs), light emitting diode (LED) displays, liquid crystal displays (LCDs), projectors, or cathode ray tubes (CRTs)), acoustic components (e.g., speakers), tactile components (e.g., vibration motors, resistor mechanisms), other signal generators, etc. The input components 928 may include alphanumeric input components (e.g., keyboards, touch screens configured to receive alphanumeric input, optical keyboards, or other alphanumeric input components), point-based input components (e.g., mice, touch pads, trackballs, joysticks, motion sensors, or other pointing instruments), tactile input components (e.g., physical buttons, touch screens that provide touch position and / or force or touch gestures, or other tactile input components), audio input components (e.g., microphones), etc.
[0095] In further example embodiments, the I / O component 918 may include a biometric component 930, a motion component 934, an environmental component 936, or a position component 938, among a variety of other components. For example, the biometric component 930 may include a component for detecting expressions (e.g., hand expressions, facial expressions, voice expressions, body postures, or eye tracking), measuring bio-signals (e.g., blood pressure, heart rate, body temperature, sweat, or brain waves), identifying a person (e.g., voice recognition, retinal recognition, facial recognition, fingerprint recognition, or EEG-based recognition), etc. The motion component 934 may include an acceleration sensor component (e.g., an accelerometer), a gravity sensor component, a rotation sensor component (e.g., a gyroscope), etc. Environmental component 936 may include, for example, an illumination sensor component (e.g., a photometer), a temperature sensor component (e.g., one or more thermometers that detect ambient temperature), a humidity sensor component, a pressure sensor component (e.g., a barometer), an acoustic sensor component (e.g., one or more microphones that detect background noise), a proximity sensor component (e.g., an infrared sensor that detects nearby objects), a gas sensor (e.g., a gas detection sensor that detects concentrations of hazardous gases for safety or measures pollutants in the atmosphere), or other components that may provide indications, measurements, or signals corresponding to the surrounding physical environment. Position component 938 may include a position sensor component (e.g., a GPS receiver component), an altitude sensor component (e.g., an altimeter or barometer that detects the altitude from which the air pressure can be obtained), an orientation sensor component (e.g., a magnetometer), etc.
[0096] A variety of technologies may be used to achieve communication. I / O components 918 may include a communication component 940 that is operable to couple machine 900 to network 932 or device 920 via coupling 924 and coupling 922, respectively. For example, communication component 940 may include a network interface component or other suitable device that interfaces with network 932. In further examples, communication component 940 may include a wired communication component, a wireless communication component, a cellular communication component, a near field communication (NFC) component, Components (e.g. Low energy consumption), Device 920 may be another machine or any of a variety of peripheral devices (eg, a peripheral device coupled via USB).
[0097] In addition, the communication component 940 can detect an identifier or include a component operable to detect an identifier. For example, the communication component 940 may include a radio frequency identification (RFID) tag reader component, an NFC smart tag detection component, an optical reader component (e.g., an optical sensor for detecting one-dimensional barcodes such as universal product codes (UPC) barcodes, multi-dimensional barcodes (e.g., Quick Response (QR) codes, Aztec codes, data matrix, digital graphics, Max codes, PDF417, Super codes, UCC RSS-2D barcodes), and other optical codes), or an acoustic detection component (e.g., a microphone for identifying a tagged audio signal). In addition, various information can be obtained via the communication component 940, such as obtaining a location via Internet Protocol (IP) geolocation, ... Signal triangulation to obtain location, obtaining location via detection of NFC beacon signals that can indicate a specific location, etc.
[0098] Glossary
[0099] As used herein, "carrier signal" refers to any intangible medium capable of storing, encoding, or carrying transient or non-transient instructions for execution by a machine, and includes digital or analog communications signals or other intangible media to facilitate communication of such instructions. Instructions may be sent or received over a network using a transient or non-transient transmission medium through a network interface device and using any of a number of well-known transmission protocols.
[0100] In this context, a "client device" refers to any machine that interfaces with a communication network to obtain resources from one or more server systems or other client devices. A client device may be, but is not limited to, a mobile phone, desktop computer, laptop computer, PDA, smart phone, tablet computer, ultrabook, netbook, notebook computer, multiprocessor system, microprocessor-based or programmable consumer electronics, game console, set-top box, or any other communication device that a user can use to access a network.
[0101] In this context, a "communication network" refers to one or more parts of a network, which may be an ad hoc network, an intranet, an extranet, a virtual private network (VPN), a local area network (LAN), a wireless local area network (WLAN), a wide area network (WAN), a wireless wide area network (WWAN), a metropolitan area network (MAN), the Internet, a part of the Internet, a part of the public switched telephone network (PSTN), a plain old telephone service (POTS) network, a cellular telephone network, a wireless network, A network, another type of network, or a combination of two or more such networks. For example, the network or a portion of a network may include a wireless or cellular network, and the coupling may be a code division multiple access (CDMA) connection, a global system for mobile communications (GSM) connection, or another type of cellular or wireless coupling. In this example, the coupling may implement any of a variety of types of data transmission technologies, such as single carrier radio transmission technology (1xRTT), evolution data optimized (EVDO) technology, general packet radio service (GPRS) technology, enhanced data rates for GSM evolution (EDGE) technology, the third generation partnership project (3GPP) including 3G, fourth generation wireless (4G) networks, universal mobile telecommunications system (UMTS), high speed packet access (HSPA), world wide interoperability for microwave access (WiMAX), long term evolution (LTE) standards, other standards defined by various standards development organizations, other remote protocols, or other data transmission technologies.
[0102] In this context, a "transient message" is a message that is accessible for a time-limited duration. A transient message can be text, an image, a video, etc. The access time for a transient message can be set by the sender of the message. Alternatively, the access time can be a default setting or a setting specified by the recipient. Regardless of the setting technique, the message is transient.
[0103] In this context, "machine-readable medium" refers to a component, device, or other tangible medium capable of temporarily or permanently storing instructions and data, and may include, but is not limited to, random access memory (RAM), read-only memory (ROM), buffer memory, flash memory, optical media, magnetic media, cache, other types of storage devices (e.g., erasable programmable read-only memory (EPROM)), and / or any suitable combination thereof. The term "machine-readable medium" should be considered to include a single medium or multiple media (e.g., centralized or distributed databases, or associated caches and servers) capable of storing instructions. The term "machine-readable medium" should also be understood to include any medium or combination of multiple media capable of storing instructions (e.g., code) executed by a machine so that the instructions, when executed by one or more processors of the machine, cause the machine to perform any one or more of the methods described herein. Therefore, "machine-readable medium" refers to a single storage device or device, as well as a "cloud-based" storage system or storage network including multiple storage devices or devices. The term "machine-readable medium" itself does not include signals.
[0104] In this context, "component" refers to a device, physical entity, or logic with boundaries defined by function or subroutine calls, branch points, APIs, or other techniques that provide partitioning or modularization of specific processing or control functions. Components can be combined through their interfaces with other components to perform machine processes. A component can be a packaged functional hardware unit designed to be used with other components and a part of a program that generally performs a specific function of related functions. A component can constitute a software component (e.g., code embodied on a machine-readable medium) or a hardware component. A "hardware component" is a tangible unit that can perform certain operations and can be configured or set in a certain physical manner. In various example embodiments, one or more computer systems (e.g., stand-alone computer systems, client computer systems, or server computer systems) or one or more hardware components of a computer system (e.g., a processor or a group of processors) can be configured by software (e.g., an application or an application portion) as a hardware component that operates to perform certain operations described herein. Hardware components can also be implemented mechanically, electronically, or any suitable combination thereof. For example, a hardware component may include a dedicated circuit or logic that is permanently configured to perform certain operations. A hardware component can be a dedicated processor, such as a field programmable gate array (FPGA) or an ASIC. The hardware component may also include programmable logic or circuits that are temporarily configured by software to perform certain operations. For example, the hardware component may include software executed by a general-purpose processor or other programmable processor. After being configured by such software, the hardware component becomes a specific machine (or a specific component of the machine) that is specifically customized to perform the configured function, and is no longer a general-purpose processor. It is understood that the decision to implement the hardware component mechanically in a dedicated and permanently configured circuit or in a temporarily configured circuit (e.g., configured by software) can be driven by cost and time considerations. Therefore, the phrase "hardware component" (or "hardware-implemented component") should be understood to include a tangible entity that is physically constructed, permanently configured (e.g., hardwired) or temporarily configured (e.g., programmed), an entity that operates or performs certain operations described herein in a certain manner. Considering embodiments in which the hardware component is temporarily configured (e.g., programmed), each hardware component does not need to be configured or instantiated at any time. For example, in the case where the hardware component includes a general-purpose processor that is configured by software to become a special-purpose processor, the general-purpose processor can be configured as different special-purpose processors (e.g., including different hardware components) at different times. Therefore, software correspondingly configures a particular processor or processors, for example, to constitute a particular hardware component at one time and to constitute another different hardware component at another different time.
[0105] Hardware components can provide information to other hardware components and receive information from other hardware components. Therefore, the described hardware components can be considered to be communicatively coupled. In the case of multiple hardware components being present at the same time, communication can be achieved by signal transmission (e.g., through appropriate circuits and buses) between two or more hardware components. In embodiments where multiple hardware components are configured or instantiated at different times, communication between such hardware components can be achieved, for example, by storing and obtaining information in a memory structure accessible to multiple hardware components. For example, a hardware component can perform an operation and store the output of the operation in a memory device to which it is communicatively coupled. Then, another hardware component can access the memory device at a later time to obtain and process the stored output.
[0106] The hardware component may also initiate communication with an input or output device and may operate on a resource (e.g., a collection of information). The various operations of the example methods described herein may be performed at least in part 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 a processor-implemented component that operates to perform one or more operations or functions described herein. As used herein, a "processor-implemented component" refers to a hardware component implemented using one or more processors. Similarly, the methods described herein may be implemented at least in part by a processor, wherein a specific processor or processor is an example of hardware. For example, at least some of the operations of a method may be performed by one or more processors or processor-implemented components. In addition, one or more processors may also be operable to support the execution of relevant operations in a "cloud computing" environment or as "software as a service" (SaaS). For example, at least some of the operations may be performed by a group of computers (as an example of a machine including a processor), wherein the operations may be accessed via a network (e.g., the Internet) and via one or more appropriate interfaces (e.g., APIs). The execution of certain operations may be distributed among processors, not only residing in a single machine, but also deployed across multiple machines. In some example embodiments, the processor or processor-implemented components may be located in a single geographic location (e.g., in a home environment, an office environment, or a server farm). In other example embodiments, the processor or processor-implemented components may be distributed across multiple geographic locations.
[0107] In this context, a "processor" refers to any circuit or virtual circuit (a physical circuit emulated by logic executed on an actual processor) that manipulates data values according to control signals (e.g., "commands," "opcodes," "machine codes," etc.) and produces corresponding output signals suitable for operating a machine. A processor may be, for example, a central processing unit (CPU), a reduced instruction set computing (RISC) processor, a complex instruction set computing (CISC) processor, a graphics processing unit (GPU), a digital signal processor (DSP), an ASIC, a radio frequency integrated circuit (RFIC), or any combination thereof. A processor may further be a multi-core processor having two or more independent processors (sometimes referred to as "cores") that can execute instructions simultaneously.
[0108] In this context, a "timestamp" refers to a series of characters or coded information that identifies when a particular event occurred, such as giving a date and time, sometimes accurate to a fraction of a second.
[0109] Changes and modifications may be made to the disclosed embodiments without departing from the scope of the present disclosure. These and other changes or modifications are intended to be included within the scope of the present disclosure as expressed by the appended claims.
Claims
1. A method comprising: storing, by one or more processors, a first avatar having a first level of detail in a database; generating a first facial texture and a second facial texture of the first avatar having a second level of detail based on the first level of detail of the first avatar; and A second avatar is assembled using the first facial texture, wherein during display of the second avatar, the first facial texture and the second facial texture in the assembled second avatar are swapped to animate the second avatar.
2. The method according to claim 1, wherein: The first avatar includes a first plurality of components, the method further comprising: reducing the level of detail of each component in the first plurality of components separately from each other; and A second plurality of components is stored, the second plurality of components comprising a reduced level of detail of each component in the first plurality of components.
3. The method according to claim 1, further comprising: receiving a request for the first avatar having the second level of detail, the second level of detail comprising a lower level of detail than the first level of detail; determining a first identity of a first user associated with the second avatar and a second identity of a second user associated with a third avatar; as well as Based on the determined first identity and the determined second identity, the second avatar having the second level of detail and the third avatar having the first level of detail are displayed.
4. The method according to claim 3, wherein: The second identity indicates that the second user is a leader in a game, the method further comprising causing the third avatar having a greater level of detail than the second avatar to be presented along with the second avatar for the leader in the game.
5. The method according to claim 1, further comprising: Separately from the skeleton or geometric model of the first avatar, at least one texture of the first avatar is downsampled, resized, and quantized.
6. The method according to claim 1, wherein: The first avatar includes a first plurality of components, the method further comprising: The same names are maintained for bones that are common to the skeletons of the first plurality of components and the skeletons of the second plurality of components.
7. The method according to claim 1, further comprising: A request is received for an emoticon associated with the second avatar.
8. The method according to claim 7, further comprising: Determining an order of facial textures associated with the expression, the order comprising the first facial texture followed by the second facial texture, wherein swapping the first facial texture with the second facial texture results in a change in an expression represented by the second avatar from a given expression to the received requested expression.
9. The method according to claim 1, wherein: The second avatar is a three-dimensional avatar, and the first facial texture and the second facial texture are two-dimensional textures.
10. The method according to claim 1, further comprising: A plurality of avatars including the second avatar are presented, wherein the plurality of avatars are presented at different levels of detail based on priorities associated with the plurality of avatars.
11. The method according to claim 1, further comprising: Associating less than all of the skeleton of the first avatar with a texture of the first avatar.
12. A system comprising: A processor configured to perform operations comprising: storing a first avatar having a first level of detail in a database; generating a first facial texture and a second facial texture of the first avatar having a second level of detail based on the first level of detail of the first avatar; and A second avatar is assembled using the first facial texture, wherein during display of the second avatar, the first facial texture and the second facial texture in the assembled second avatar are swapped to animate the second avatar.
13. The system according to claim 12, wherein: The first avatar includes a first plurality of components, and the operations further include: reducing the level of detail of each component in the first plurality of components separately from each other; and A second plurality of components is stored, the second plurality of components comprising a reduced level of detail of each component in the first plurality of components.
14. The method according to claim 12, wherein: The operations also include: receiving a request for the first avatar having the second level of detail, the second level of detail comprising a lower level of detail than the first level of detail; determining a first identity of a first user associated with the second avatar and a second identity of a second user associated with a third avatar; and Based on the determined first identity and the determined second identity, the second avatar having the second level of detail and the third avatar having the first level of detail are displayed.
15. The system of claim 14, wherein: The second identity indicates that the second user is a leader in a game, the operations further comprising causing the third avatar having a greater level of detail than the second avatar to be presented along with the second avatar for the leader in the game.
16. The system of claim 12, wherein: The operations also include: Separately from the skeleton or geometric model of the first avatar, at least one texture of the first avatar is downsampled, resized, and quantized.
17. The system of claim 12, wherein: The first avatar includes a first plurality of components, and wherein the operations further include maintaining the same names for bones that are common to a skeleton of the first plurality of components and a skeleton of a second plurality of components.
18. The system of claim 12, wherein: The operations also include: A request is received for an emoticon associated with the second avatar.
19. 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: storing a first avatar having a first level of detail in a database; generating a first facial texture and a second facial texture of the first avatar having a second level of detail based on the first level of detail of the first avatar; and A second avatar is assembled using the first facial texture, wherein during display of the second avatar, the first facial texture and the second facial texture in the assembled second avatar are swapped to animate the second avatar.
20. The non-transitory machine-readable storage medium of claim 19, wherein: The first avatar includes a first plurality of components, wherein the operations further include: reducing the level of detail of each component in the first plurality of components separately from each other; and A second plurality of components is stored, the second plurality of components comprising a reduced level of detail of each component in the first plurality of components.