Patent Publication Number: US-11393132-B2

Title: Mesh compression

Description:
CROSS-REFERENCE TO RELATED APPLICATION AND CLAIM OF PRIORITY 
     This application claims priority under 35 U.S.C. § 119(e) to U.S. Provisional Patent Application No. 62/815,076 filed on Mar. 7, 2019; U.S. Provisional Patent Application No. 62/820,942 filed on Mar. 20, 2019; U.S. Provisional Patent Application No. 62/870,438 filed on Jul. 3, 2019; U.S. Provisional Patent Application No. 62/909,532 filed on Oct. 2, 2019; and U.S. Provisional Patent Application No. 62/910,895 filed on Oct. 4, 2019. The above-identified provisional patent applications are hereby incorporated by reference in its entirety. 
    
    
     TECHNICAL FIELD 
     This disclosure relates generally to multimedia data. More specifically, this disclosure relates to an apparatus and a method for compressing meshes. 
     BACKGROUND 
     Three hundred sixty degree (360°) video is emerging as a new way of experiencing immersive video due to the ready availability of powerful handheld devices such as smartphones. 360° video enables immersive “real life,” “being there” experience for consumers by capturing the 360° view of the world. Users can interactively change their viewpoint and dynamically view any part of the captured scene or object they desire. Display and navigation sensors can track head movement of the user in real-time to determine the region of the 360° video that the user wants to view. Multimedia data that is three-dimensional (3D) in nature, such as point clouds, can be used in the immersive environment. 
     Advances in 3D technologies have spurred a new wave of innovation in the creation, transmission, and rendering of Virtual Reality (VR) Augmented Reality (AR), and Mixed Reality (MR). Point clouds meshes are common in a variety of applications such as gaming, 3D maps, visualizations, medical applications, augmented reality, virtual reality, autonomous driving, multi-view replay, 6 degrees of freedom (DoF) immersive media, to name a few. Point clouds meshes, if uncompressed, generally require a large amount of bandwidth for transmission. Due to the large bitrate requirement, point clouds and meshes are often compressed prior to transmission. Compressing a 3D object such as a point cloud or mesh often requires specialized hardware. The specialized hardware is often expensive 
     SUMMARY 
     This disclosure provides mesh compression. 
     In one embodiment a decoding device for mesh decoding is provided. The decoding device includes a communication interface and a processor. The communication interface is configured to receive a compressed bitstream. The processor is configured to separate a first bitstream and a second bitstream from the compressed bitstream. The processor is also configured to decode, from the second bitstream, connectivity information of a three dimensional (3D) mesh. The processor is further configured to decode, from the first bitstream, a first frame and a second frame that both include one or more patches. The one or more patches included in the first frame represent vertex coordinates of the 3D mesh and the one or more patches included in the second frame represent a vertex attribute of the 3D mesh. The processor is additionally configured to reconstruct a point cloud based on the first and second frames. Additionally, the processor is configured to apply the connectivity information to the point cloud to reconstruct the 3D mesh. 
     In another embodiment an encoding device for mesh encoding is provided. The encoding device includes a processor and a communication interface. The processor is configured to separate connectivity information of a three dimensional (3D) mesh from vertex coordinates and a vertex attribute, wherein the 3D mesh includes vertex indices. The processor is also configured to generate a first frame and a second frame that both include one or more patches. The one or more patches included in the first frame represent the vertex coordinates of the 3D mesh and the one or more patches included in the second frame represent the vertex attribute of the 3D mesh. The processor is further configured to encode the first and second frames to generate a first bitstream. The processor is additionally configured to encode the connectivity information to generate a second bitstream. Additionally, the processor is configured to generate a compressed bitstream by multiplexing the first bitstream and the second bitstream. The communication interface is configured to transmit the compressed bitstream. 
     In yet another embodiment a method for mesh decoding is provided. The method for mesh decoding includes receiving a compressed bitstream. The method also includes separating, from the compressed bitstream, a first bitstream and a second bitstream. The method further includes decoding, from the second bitstream, connectivity information of a three dimensional (3D) mesh. The method additionally includes decoding, from the first bitstream, a first frame and a second frame that include patches. The patches included in the first frame represent vertex coordinates of the 3D mesh and the patches included in the second frame represent a vertex attribute of the 3D mesh. The method also includes reconstructing a point cloud based on the first and second frames. Additionally, the method also includes applying the connectivity information to the point cloud to reconstruct the 3D mesh. 
     Other technical features may be readily apparent to one skilled in the art from the following figures, descriptions, and claims. 
     Before undertaking the DETAILED DESCRIPTION below, it may be advantageous to set forth definitions of certain words and phrases used throughout this patent document. The term “couple” and its derivatives refer to any direct or indirect communication between two or more elements, whether or not those elements are in physical contact with one another. The terms “transmit,” “receive,” and “communicate,” as well as derivatives thereof, encompass both direct and indirect communication. The terms “include” and “comprise,” as well as derivatives thereof, mean inclusion without limitation. The term “or” is inclusive, meaning and/or. The phrase “associated with,” as well as derivatives thereof, means to include, be included within, interconnect with, contain, be contained within, connect to or with, couple to or with, be communicable with, cooperate with, interleave, juxtapose, be proximate to, be bound to or with, have, have a property of, have a relationship to or with, or the like. The term “controller” means any device, system or part thereof that controls at least one operation. Such a controller may be implemented in hardware or a combination of hardware and software and/or firmware. The functionality associated with any particular controller may be centralized or distributed, whether locally or remotely. The phrase “at least one of,” when used with a list of items, means that different combinations of one or more of the listed items may be used, and only one item in the list may be needed. For example, “at least one of: A, B, and C” includes any of the following combinations: A, B, C, A and B, A and C, B and C, and A and B and C. 
     Moreover, various functions described below can be implemented or supported by one or more computer programs, each of which is formed from computer readable program code and embodied in a computer-readable medium. The terms “application” and “program” refer to one or more computer programs, software components, sets of instructions, procedures, functions, objects, classes, instances, related data, or a portion thereof adapted for implementation in a suitable computer-readable program code. The phrase “computer-readable program code” includes any type of computer code, including source code, object code, and executable code. The phrase “computer-readable medium” includes any type of medium capable of being accessed by a computer, such as read-only memory (ROM), random access memory (RAM), a hard disk drive, a compact disc (CD), a digital video disc (DVD), or any other type of memory. A “non-transitory” computer-readable medium excludes wired, wireless, optical, or other communication links that transport transitory electrical or other signals. A non-transitory computer-readable medium includes media where data can be permanently stored and media where data can be stored and later overwritten, such as a rewritable optical disc or an erasable memory device. 
     Definitions for other certain words and phrases are provided throughout this patent document. Those of ordinary skill in the art should understand that in many if not most instances, such definitions apply to prior as well as future uses of such defined words and phrases. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       For a more complete understanding of the present disclosure and its advantages, reference is now made to the following description taken in conjunction with the accompanying drawings, in which like reference numerals represent like parts: 
         FIG. 1  illustrates an example communication system in accordance with an embodiment of this disclosure; 
         FIGS. 2 and 3  illustrate example electronic devices in accordance with an embodiment of this disclosure; 
         FIGS. 4A, 4B, and 4C  illustrate the relationship between the components of a mesh in accordance with an embodiment of this disclosure; 
         FIG. 4D  illustrates example point clouds, point meshes and scenery in accordance with an embodiment of this disclosure; 
         FIG. 4E  illustrate an example 3D point cloud in accordance with an embodiment of this disclosure; 
         FIG. 4F  illustrates example 2D frames that include patches representing the 3D point cloud of  FIG. 4E  in accordance with an embodiment of this disclosure; 
         FIG. 4G  illustrates an example 2D frame representing the 3D point cloud of  FIG. 4E  in accordance with an embodiment of this disclosure; 
         FIG. 4H  illustrates a point cloud that is surrounded by multiple projection planes in accordance with an embodiment of this disclosure; 
         FIG. 4I  illustrates an example portion of a mesh file in accordance with an embodiment of this disclosure; 
         FIG. 5A  illustrates a block diagram of an example environment-architecture in accordance with an embodiment of this disclosure; 
         FIGS. 5B and 5C  illustrate block diagrams of encoders in accordance with an embodiment of this disclosure; 
         FIG. 5D  illustrates example indexes in accordance with an embodiment of this disclosure; 
         FIG. 5E  illustrates a block diagram of an encoder in accordance with an embodiment of this disclosure; 
         FIGS. 5F, 5G, and 5H  illustrate block diagrams of decoders in accordance with an embodiment of this disclosure; 
         FIGS. 6A and 6B  illustrate a detailed block diagrams encoders in accordance with an embodiment of this disclosure; 
         FIG. 6C  illustrates a detailed block diagram of a decoder in accordance with an embodiment of this disclosure; 
         FIGS. 7A and 7B  illustrate an example adaptive mesh and a method of generating the adaptive mesh in accordance with an embodiment of this disclosure; 
         FIG. 8  illustrates a diagram of inner patch connectivity in accordance with an embodiment of this disclosure; 
         FIG. 9A  illustrates example method for encoding a point cloud in accordance with an embodiment of this disclosure; and 
         FIG. 9B  illustrates example method for decoding a point cloud in accordance with an embodiment of this disclosure. 
     
    
    
     DETAILED DESCRIPTION 
       FIGS. 1 through 9B , discussed below, and the various embodiments used to describe the principles of the present disclosure in this patent document are by way of illustration only and should not be construed in any way to limit the scope of the disclosure. Those skilled in the art will understand that the principles of the present disclosure may be implemented in any suitably-arranged system or device. 
     AR is an interactive experience of a real-world environment where objects that reside in the real-world environment are augmented with virtual objects, virtual information, or both. VR is a rendered version of a visual scene, where the entire scene is computer generated. MR is the combination of real and virtual worlds such that physical and digital objects coexist and interact in real-time. In certain embodiments, AR, VR, and MR include both visual and audio experiences. A visual rendering is designed to mimic the visual stimuli, and if available audio sensory stimuli, of the real world as naturally as possible to an observer or user as the user moves within the limits defined by the application or the AR or VR scene. For example, VR places a user into immersive worlds that respond to the head movements of a user. At the video level, VR is achieved by providing a video experience that covers as much of the field of view (FOV) as possible together with the synchronization of the viewing angle of the rendered video with the head movements. 
     Many different types of devices are able to provide the immersive experience associated with AR or VR. One example device is a head-mounted display (HMD). A HMD represents one of many types of devices that provide AR and VR experiences to a user. A HMD is a device that enables a user to view the VR scene and adjust the displayed content based on movements of the head of the user. Typically, a HMD relies either on a dedicated screen that is integrated into a device and connected with an external computer (tethered) or on a device, such as a smartphone, that is inserted into the HMD (untethered). The first approach utilizes one or more lightweight screens and benefits from a high computing capacity. In contrast, the smartphone-based systems utilize higher mobility and can be less expensive to produce. In both instances, the video experience generated is the same. It is noted that as used herein, the term “user” may denote a human or another device (such as an artificial intelligent electronic device) using the electronic device. 
     A point cloud is a virtual representation of an object in three dimensions. For example, a point cloud is a collection of individual points in 3D space, and each point is positioned in a particular geometric location within 3D space and includes one or more attributes such as color, texture, reflectance, and the like. Similarly, a mesh is a virtual representation of an object in three dimensions. For example, a mesh is a collection of vertices (which are similar to the points of a point cloud) and edges which form faces. 
     A point cloud and a mesh can be similar to a virtual object in a VR, AR, and MR environment. A point cloud or a mesh can be an object, multiple objects, a virtual scene (which includes multiple objects), and the like. Point clouds and meshes are commonly used in a variety of applications, including gaming, 3D mapping, visualization, medicine, AR, VR, autonomous driving, multi-view replay, 6 DoF immersive media, to name a few. 
     Point clouds and meshes represent volumetric visual data. Point clouds consist of multiple points positioned in 3D space, where each point in a 3D point cloud includes a geometric position represented by 3-tuple (X, Y, Z) coordinate values. When each point is identified by the three coordinates, a precise location in 3D environment or space is identified. The location in a 3D environment or space of each point can be relative to an origin, other points of the point cloud, or a combination thereof. The origin is a location where the X, Y, and Z axis intersect. In some embodiments, the points are positioned on the external surface of the object. In other embodiments, the points are positioned throughout both the internal structure and external surface of the object. In yet other embodiments, the points are positioned along the surface of the object and can be positioned within the internal area of the point cloud. Similarly, a mesh includes multiple vertices which are similar to the points of a point cloud.  FIG. 4A , described in greater detail below illustrates example vertices. 
     In addition to the geometric position of a point (the location of the point in 3D space), each point in the point cloud can also include attributes such as color (also referred to as texture), reflectance, intensity, surface normal, and the like. In some embodiments, a single point of a 3D point cloud can have multiple attributes. In some applications, point clouds can also be used to approximate light field data in which, each point includes multiple view-dependent, color information (R, G, B or Y, U, V triplets). Similarly, the faces of a mesh can include attributes such as color (also referred to as texture), reflectance, intensity, surface normal, and the like. In some embodiments, a single face of a mesh can include multiple attributes.  FIG. 4C , described in greater detail below illustrates example faces. 
     A single point cloud can include billions of points, with each point associated with a geometric position and one or more attributes. A geometric position and each additional attribute that is associated with a point occupy a certain number of bits. For example, a geometric position of a single point in a point cloud can consume thirty bits. For instance, if each geometric position of a single point is defined with an X value, a Y value, and a Z value, then each coordinate (the X, the Y, and the Z) uses ten bits, totaling the thirty bits. Similarly, an attribute that specifies the color of a single point can consume twenty-four bits. For instance, if a color component of a single point is defined based on a Red value, Green value, and Blue value, then each color component (Red, Green, and Blue) uses eight bits, totaling the twenty-four bits. As a result, a single point with a ten-bit geometric attribute data, per coordinate, and an eight-bit color attribute data, per color value, occupies fifty-four bits. Each additional attribute increases the bits required for a single point. If a frame includes one million points, the number of bits per frame is fifty-four million bits (fifty-four bits per point times one million points per frame). Additionally, the number of points, their positions, and their attributes may vary from one frame to another, such as when the object represented by the point cloud or mesh moves. If the frame rate is thirty frames per second and undergoes no compression, then 1.62 gigabytes per second (fifty-four million bits per frame times thirty frames per second) are to be transmitted from one electronic device to another in order for the second device to display the point cloud. Therefore, transmitting an uncompressed point cloud from one electronic device to another uses significant bandwidth due to the size and complexity of the data associated with a single point cloud. As a result, the point cloud is compressed prior to the transmission. It is noted that a mesh can include even more information than a point cloud, since the mesh comprises not only vertices (which are similar to the points of a point cloud), but also edges. 
     Embodiments of the present disclosure take into consideration that compressing a point clouds and meshes is necessary to expedite and improve transmission of the point cloud from one device (such as a source device) to another device (such as a display device) due to the bandwidth necessary to transmit the point cloud. Certain dedicated hardware components can be used to meet the real-time demands or reduce delays or lags in the transmitting and rendering a 3D point cloud or mesh; however such hardware components are often expensive. Additionally, many video codecs are not able to encode and decode 3D video content, such as a point cloud or mesh. Compressing and decompressing a point cloud or mesh by leveraging existing 2D video codecs enables the encoding and decoding of a point cloud or mesh to be widely available without the need for new or specialized hardware. According to embodiments of the present disclosure, leveraging existing video codecs can be used to compress and reconstruct a point cloud, when the point cloud is converted from a 3D representation to a 2D representation. Additionally, according to embodiments of the present disclosure, leveraging existing video codecs can be used to compress and reconstruct a mesh by separating the vertices information from the connectivity information of a mesh, such as the edges, faces and the like. The vertices information can then be encoded in a similar manner as a point cloud. In certain embodiments, the conversion of a point cloud or mesh from a 3D representation to a 2D representation includes projecting clusters of points (of a point cloud) or (vertices of a mesh) onto 2D frames by creating patches. Thereafter, video codecs such as HEVC, AVC, VP9, VP8, VVC, and the like can be used to compress the 2D frames representing in a similar manner to that of a 2D video. 
     To transmit a mesh from one device to another, the vertices of a mesh are represented as patches on 2D frames. The 2D frames can include projections of the mesh with respect to different projection planes. The frames can also represent different attributes of the mesh, such as one frame includes values representing geometry positions of the vertices and another frame includes values representing color information associated with each of the vertices. A decoder reconstructs the patches within the 2D frames into the mesh, such that the mesh can be rendered, displayed, and then viewed by a user. When the mesh is deconstructed to fit on multiple 2D frames and compressed, the frames can be transmitted using less bandwidth than used to transmit the original mesh.  FIGS. 4E, 4F, and 4G , which are described in greater detail below, illustrate a mesh that is projected onto 2D frames by creating patches.  FIG. 4H  illustrates the process of projecting a mesh onto different planes. 
     Embodiments of the present disclosure provide systems and methods for converting a mesh into a 2D representation that can be transmitted and then reconstructed into the mesh for rendering. In certain embodiments, a mesh is deconstructed into multiple patches, and multiple frames are generated that include the patches. In certain embodiments, a frame includes patches of the same attributes. The vertices of the mesh that are represented in one patch in one frame correspond to the same vertices that are represented in another patch in a second frame when the two patches are positioned at the same coordinates. For example, a pixel at the position (u, v) in a frame that represents geometry is the geometry position of a pixel at the same (u, v) position in a frame that represents an attribute such as color. In other embodiments, the patches in one frame represent multiple attributes associated with the vertices of the mesh, such as a geometric position of the vertices in 3D space and color. 
     Embodiments of the present disclosure provide systems and methods for improving the compression and decompression of a mesh. For example, an encoder separates the vertices from the connectivity information of a mesh. The encoder groups (or clusters) the vertices with respect to different projection planes, and then stores the groups of vertices as patches on a 2D frames. The patches representing the geometry and attribute information are packed respectively into geometry video frames and attribute video frames, where each pixel within any of the patches corresponds to a vertex in 3D space. The geometry video frames are used to encode the geometry information, and the corresponding attribute video frames are used to encode the attribute (such as color) of the mesh. The two transverse coordinates (with respect to the projection plane) of a vertex corresponds to the column and row indices in the geometry video frame (u, v) plus a transverse-offset which determines the location of the entire patch within the video frame. The depth of the vertices is encoded as the value of the pixel in the video frame plus a depth-offset for the patch. The depth of the vertices depends on whether the projection of the 3D point cloud is taken from the XY, YZ, or XZ coordinates. 
     The 2D frames can be compressed by leveraging various video compression codecs, image compression codecs, or both. For example, the encoder first generates and then compresses the geometry frames using a 2D video codec such as HEVC. To encode an attribute frame (such as the color of the mesh), the encoder decodes the encoded geometry frame and which is used to reconstruct the 3D coordinates of the mesh. The encoder smooths the reconstructed vertices. Thereafter the encoder interpolates the color values of each vertex from the color values of input coordinates. The interpolated color values are then packed into a color frame which is compressed. 
     In certain embodiments, the encoder can also generate an occupancy map which shows the location of projected vertices in the 2D videos frames. The occupancy map frame can subsequently be compressed. The compressed geometry frames, the compressed color frames (and any other attribute frame), and the occupancy map frame can be multiplexed to generate a first bitstream. 
     The encoder that generated and compressed the frames can also encode the connectivity information to generate a second bitstream. In certain embodiments another encoder encodes the connectivity information. A bitstream is formed by multiplexing the first bitstream (representing the compressed geometry frames, the compressed attribute frame(s), and the occupancy map) and the second bitstream (representing the connectivity information). The encoder or another device then transmits the bitstream that includes the 2D frames to a different device. 
     A decoder receives the bitstream, decompresses the bitstream. The decoder reconstructs the vertices based on the information within the frames and applies the connectivity information to reconstruct the mesh. After the mesh is reconstructed, it can be rendered and displayed for a user to observe. 
       FIG. 1  illustrates an example communication system  100  in accordance with an embodiment of this disclosure. The embodiment of the communication system  100  shown in  FIG. 1  is for illustration only. Other embodiments of the communication system  100  can be used without departing from the scope of this disclosure. 
     The communication system  100  includes a network  102  that facilitates communication between various components in the communication system  100 . For example, the network  102  can communicate IP packets, frame relay frames, Asynchronous Transfer Mode (ATM) cells, or other information between network addresses. The network  102  includes one or more local area networks (LANs), metropolitan area networks (MANs), wide area networks (WANs), all or a portion of a global network such as the Internet, or any other communication system or systems at one or more locations. 
     In this example, the network  102  facilitates communications between a server  104  and various client devices  106 - 116 . The client devices  106 - 116  may be, for example, a smartphone, a tablet computer, a laptop, a personal computer, a wearable device, a HMD, or the like. The server  104  can represent one or more servers. Each server  104  includes any suitable computing or processing device that can provide computing services for one or more client devices, such as the client devices  106 - 116 . Each server  104  could, for example, include one or more processing devices, one or more memories storing instructions and data, and one or more network interfaces facilitating communication over the network  102 . As described in more detail below, the server  104  can transmit a compressed bitstream, representing a point cloud or mesh, to one or more display devices, such as a client device  106 - 116 . In certain embodiments, each server  104  can include an encoder. 
     Each client device  106 - 116  represents any suitable computing or processing device that interacts with at least one server (such as the server  104 ) or other computing device(s) over the network  102 . The client devices  106 - 116  include a desktop computer  106 , a mobile telephone or mobile device  108  (such as a smartphone), a PDA  110 , a laptop computer  112 , a tablet computer  114 , and a HMD  116 . However, any other or additional client devices could be used in the communication system  100 . Smartphones represent a class of mobile devices  108  that are handheld devices with mobile operating systems and integrated mobile broadband cellular network connections for voice, short message service (SMS), and Internet data communications. The HMD  116  can display a 360° scene including one or more 3D point clouds or meshes. In certain embodiments, any of the client devices  106 - 116  can include an encoder, decoder, or both. For example, the mobile device  108  can record a video and then encode the video enabling the video to be transmitted to one of the client devices  106 - 116 . In another example, the laptop computer  112  can be used to generate a virtual 3D point cloud or mesh, which is then encoded and transmitted to one of the client devices  106 - 116 . 
     In this example, some client devices  108 - 116  communicate indirectly with the network  102 . For example, the mobile device  108  and PDA  110  communicate via one or more base stations  118 , such as cellular base stations or eNodeBs (eNBs). Also, the laptop computer  112 , the tablet computer  114 , and the HMD  116  communicate via one or more wireless access points  120 , such as IEEE 802.11 wireless access points. Note that these are for illustration only and that each client device  106 - 116  could communicate directly with the network  102  or indirectly with the network  102  via any suitable intermediate device(s) or network(s). In certain embodiments, the server  104  or any client device  106 - 116  can be used to compress a point cloud or mesh, generate a corresponding bitstream, and transmit the bitstream to another client device such as any client device  106 - 116 . 
     In certain embodiments, any of the client devices  106 - 114  transmit information securely and efficiently to another device, such as, for example, the server  104 . Also, any of the client devices  106 - 116  can trigger the information transmission between itself and the server  104 . Any of the client devices  106 - 114  can function as a VR display when attached to a headset via brackets, and function similar to HMD  116 . For example, the mobile device  108  when attached to a bracket system and worn over the eyes of a user can function similarly as the HMD  116 . The mobile device  108  (or any other client device  106 - 116 ) can trigger the information transmission between itself and the server  104 . 
     In certain embodiments, any of the client devices  106 - 116  or the server  104  can create a mesh, compress the mesh, transmit the mesh, receive the mesh, render the mesh, or a combination thereof. For example, the server  104  receives a mesh, separates vertices from the connectivity information, decomposes the vertices to fit on 2D frames, compresses the frames and the connectivity information to generate a bitstream. The bitstream can be transmitted to a storage device, such as an information repository, or one or more of the client devices  106 - 116 . For another example, one of the client devices  106 - 116  can receives a mesh, separates vertices from the connectivity information, decomposes the vertices to fit on 2D frames, compresses the frames and the connectivity information to generate a bitstream that can be transmitted to a storage device, such as an information repository, another one of the client devices  106 - 116 , or to the server  104 . 
     Although  FIG. 1  illustrates one example of a communication system  100 , various changes can be made to  FIG. 1 . For example, the communication system  100  could include any number of each component in any suitable arrangement. In general, computing and communication systems come in a wide variety of configurations, and  FIG. 1  does not limit the scope of this disclosure to any particular configuration. While  FIG. 1  illustrates one operational environment in which various features disclosed in this patent document can be used, these features could be used in any other suitable system. 
     Although  FIG. 1  illustrates one example of a communication system  100 , various changes can be made to  FIG. 1 . For example, the communication system  100  could include any number of each component in any suitable arrangement. In general, computing and communication systems come in a wide variety of configurations, and  FIG. 1  does not limit the scope of this disclosure to any particular configuration. While  FIG. 1  illustrates one operational environment in which various features disclosed in this patent document can be used, these features could be used in any other suitable system. 
       FIGS. 2 and 3  illustrate example electronic devices in accordance with an embodiment of this disclosure. In particular,  FIG. 2  illustrates an example server  200 , and the server  200  could represent the server  104  in  FIG. 1 . The server  200  can represent one or more encoders, decoders, local servers, remote servers, clustered computers, and components that act as a single pool of seamless resources, a cloud-based server, and the like. The server  200  can be accessed by one or more of the client devices  106 - 116  of  FIG. 1  or another server. 
     The server  200  can represent one or more local servers, one or more compression servers, or one or more encoding servers, such as an encoder. In certain embodiments, the encoder can perform decoding. As shown in  FIG. 2 , the server  200  includes a bus system  205  that supports communication between at least one processing device (such as a processor  210 ), at least one storage device  215 , at least one communications interface  220 , and at least one input/output (I/O) unit  225 . 
     The processor  210  executes instructions that can be stored in a memory  230 . The processor  210  can include any suitable number(s) and type(s) of processors or other devices in any suitable arrangement. Example types of processors  210  include microprocessors, microcontrollers, digital signal processors, field-programmable gate arrays, application-specific integrated circuits, and discrete circuitry. In certain embodiments, the processor  210  can encode a mesh stored within the storage devices  215 . In certain embodiments, when the mesh is encoded by an encoder, the encoder also decodes the encoded mesh to ensure that when the mesh is reconstructed, the reconstructed mesh matches the original mesh. 
     The memory  230  and a persistent storage  235  are examples of storage devices  215  that represent any structure(s) capable of storing and facilitating retrieval of information (such as data, program code, or other suitable information on a temporary or permanent basis). The memory  230  can represent a random access memory or any other suitable volatile or non-volatile storage device(s). For example, the instructions stored in the memory  230  can include instructions for separating the vertices and the connectivity information, decomposing the vertices into patches, instructions for packing the patches on 2D frames, instructions for compressing the 2D frames, as well as instructions for encoding 2D frames in a certain order in order to generate a bitstream. The instructions stored in the memory  230  can also include instructions for rendering a 360° scene, as viewed through a VR headset, such as HMD  116  of  FIG. 1 . The persistent storage  235  can contain one or more components or devices supporting longer-term storage of data, such as a read-only memory, hard drive, Flash memory, or optical disc. 
     The communications interface  220  supports communications with other systems or devices. For example, the communications interface  220  could include a network interface card or a wireless transceiver facilitating communications over the network  102  of  FIG. 1 . The communications interface  220  can support communications through any suitable physical or wireless communication link(s). For example, the communications interface  220  can transmit a bitstream containing a mesh to another device such as one of the client devices  106 - 116 . 
     The I/O unit  225  allows for input and output of data. For example, the I/O unit  225  can provide a connection for user input through a keyboard, mouse, keypad, touchscreen, or other suitable input device. The I/O unit  225  can also send output to a display, printer, or other suitable output device. Note, however, that the I/O unit  225  can be omitted, such as when I/O interactions with the server  200  occur via a network connection. 
     Note that while  FIG. 2  is described as representing the server  104  of  FIG. 1 , the same or similar structure could be used in one or more of the various client devices  106 - 116 . For example, a desktop computer  106  or a laptop computer  112  could have the same or similar structure as that shown in  FIG. 2 . 
       FIG. 3  illustrates an example electronic device  300 , and the electronic device  300  could represent one or more of the client devices  106 - 116  in  FIG. 1 . The electronic device  300  can be a mobile communication device, such as, for example, a mobile station, a subscriber station, a wireless terminal, a desktop computer (similar to the desktop computer  106  of  FIG. 1 ), a portable electronic device (similar to the mobile device  108 , the PDA  110 , the laptop computer  112 , the tablet computer  114 , or the HMD  116  of  FIG. 1 ), and the like. In certain embodiments, one or more of the client devices  106 - 116  of  FIG. 1  can include the same or similar configuration as the electronic device  300 . In certain embodiments, the electronic device  300  is an encoder, a decoder, or both. For example, the electronic device  300  is usable with data transfer, image or video compression, image or video decompression, encoding, decoding, and media rendering applications. 
     As shown in  FIG. 3 , the electronic device  300  includes an antenna  305 , a radio-frequency (RF) transceiver  310 , transmit (TX) processing circuitry  315 , a microphone  320 , and receive (RX) processing circuitry  325 . The RF transceiver  310  can include, for example, a RF transceiver, a BLUETOOTH transceiver, a WI-FI transceiver, a ZIGBEE transceiver, an infrared transceiver, and various other wireless communication signals. The electronic device  300  also includes a speaker  330 , a processor  340 , an input/output (I/O) interface (IF)  345 , an input  350 , a display  355 , a memory  360 , and a sensor(s)  365 . The memory  360  includes an operating system (OS)  361 , and one or more applications  362 . 
     The RF transceiver  310  receives, from the antenna  305 , an incoming RF signal transmitted from an access point (such as a base station, WI-FI router, or BLUETOOTH device) or other device of the network  102  (such as a WI-FI, BLUETOOTH, cellular, 5G, LTE, LTE-A, WiMAX, or any other type of wireless network). The RF transceiver  310  down-converts the incoming RF signal to generate an intermediate frequency or baseband signal. The intermediate frequency or baseband signal is sent to the RX processing circuitry  325  that generates a processed baseband signal by filtering, decoding, and/or digitizing the baseband or intermediate frequency signal. The RX processing circuitry  325  transmits the processed baseband signal to the speaker  330  (such as for voice data) or to the processor  340  for further processing (such as for web browsing data). 
     The TX processing circuitry  315  receives analog or digital voice data from the microphone  320  or other outgoing baseband data from the processor  340 . The outgoing baseband data can include web data, e-mail, or interactive video game data. The TX processing circuitry  315  encodes, multiplexes, and/or digitizes the outgoing baseband data to generate a processed baseband or intermediate frequency signal. The RF transceiver  310  receives the outgoing processed baseband or intermediate frequency signal from the TX processing circuitry  315  and up-converts the baseband or intermediate frequency signal to an RF signal that is transmitted via the antenna  305 . 
     The processor  340  can include one or more processors or other processing devices. The processor  340  can execute instructions that are stored in the memory  360 , such as the OS  361  in order to control the overall operation of the electronic device  300 . For example, the processor  340  could control the reception of forward channel signals and the transmission of reverse channel signals by the RF transceiver  310 , the RX processing circuitry  325 , and the TX processing circuitry  315  in accordance with well-known principles. The processor  340  can include any suitable number(s) and type(s) of processors or other devices in any suitable arrangement. For example, in certain embodiments, the processor  340  includes at least one microprocessor or microcontroller. Example types of processor  340  include microprocessors, microcontrollers, digital signal processors, field-programmable gate arrays, application-specific integrated circuits, and discrete circuitry. 
     The processor  340  is also capable of executing other processes and programs resident in the memory  360 , such as operations that receive and store data. The processor  340  can move data into or out of the memory  360  as required by an executing process. In certain embodiments, the processor  340  is configured to execute the one or more applications  362  based on the OS  361  or in response to signals received from external source(s) or an operator. Example, applications  362  can include an encoder, a decoder, a VR or AR application, a camera application (for still images and videos), a video phone call application, an email client, a social media client, a SMS messaging client, a virtual assistant, and the like. In certain embodiments, the processor  340  is configured to receive and transmit media content. 
     The processor  340  is also coupled to the I/O interface  345  that provides the electronic device  300  with the ability to connect to other devices, such as client devices  106 - 114 . The I/O interface  345  is the communication path between these accessories and the processor  340 . 
     The processor  340  is also coupled to the input  350  and the display  355 . The operator of the electronic device  300  can use the input  350  to enter data or inputs into the electronic device  300 . The input  350  can be a keyboard, touchscreen, mouse, trackball, voice input, or other device capable of acting as a user interface to allow a user in interact with the electronic device  300 . For example, the input  350  can include voice recognition processing, thereby allowing a user to input a voice command. In another example, the input  350  can include a touch panel, a (digital) pen sensor, a key, or an ultrasonic input device. The touch panel can recognize, for example, a touch input in at least one scheme, such as a capacitive scheme, a pressure-sensitive scheme, an infrared scheme, or an ultrasonic scheme. The input  350  can be associated with the sensor(s)  365  and/or a camera by providing additional input to the processor  340 . In certain embodiments, the sensor  365  includes one or more inertial measurement units (IMUs) (such as accelerometers, gyroscope, and magnetometer), motion sensors, optical sensors, cameras, pressure sensors, heart rate sensors, altimeter, and the like. The input  350  can also include a control circuit. In the capacitive scheme, the input  350  can recognize touch or proximity. 
     The display  355  can be a liquid crystal display (LCD), light-emitting diode (LED) display, organic LED (OLED), active-matrix OLED (AMOLED), or other display capable of rendering text and/or graphics, such as from websites, videos, games, images, and the like. The display  355  can be sized to fit within a HMD. The display  355  can be a singular display screen or multiple display screens capable of creating a stereoscopic display. In certain embodiments, the display  355  is a heads-up display (HUD). The display  355  can display 3D objects, such as a 3D point cloud and a mesh. 
     The memory  360  is coupled to the processor  340 . Part of the memory  360  could include a RAM, and another part of the memory  360  could include a Flash memory or other ROM. The memory  360  can include persistent storage (not shown) that represents any structure(s) capable of storing and facilitating retrieval of information (such as data, program code, and/or other suitable information). The memory  360  can contain one or more components or devices supporting longer-term storage of data, such as a read-only memory, hard drive, Flash memory, or optical disc. The memory  360  also can contain media content. The media content can include various types of media such as images, videos, three-dimensional content, VR content, AR content, 3D point clouds, meshes, and the like. 
     The electronic device  300  further includes one or more sensors  365  that can meter a physical quantity or detect an activation state of the electronic device  300  and convert metered or detected information into an electrical signal. For example, the sensor  365  can include one or more buttons for touch input, a camera, a gesture sensor, an IMU sensors (such as a gyroscope or gyro sensor and an accelerometer), an eye-tracking sensor, an air pressure sensor, a magnetic sensor or magnetometer, a grip sensor, a proximity sensor, a color sensor, a bio-physical sensor, a temperature/humidity sensor, an illumination sensor, an Ultraviolet (UV) sensor, an Electromyography (EMG) sensor, an Electroencephalogram (EEG) sensor, an Electrocardiogram (ECG) sensor, an IR sensor, an ultrasound sensor, an iris sensor, a fingerprint sensor, a color sensor (such as a Red Green Blue (RGB) sensor), and the like. The sensor  365  can further include control circuits for controlling any of the sensors included therein. 
     As discussed in greater detail below, one or more of these sensor(s)  365  may be used to control a user interface (UI), detect UI inputs, determine the orientation and facing the direction of the user for three-dimensional content display identification, and the like. Any of these sensor(s)  365  may be located within the electronic device  300 , within a secondary device operably connected to the electronic device  300 , within a headset configured to hold the electronic device  300 , or in a singular device where the electronic device  300  includes a headset. 
     The electronic device  300  can create media content such as generate a 3D point cloud, a mesh, or capture (or record) content through a camera. The electronic device  300  can encode the media content to generate a bitstream, such that the bitstream can be transmitted directly to another electronic device or indirectly such as through the network  102  of  FIG. 1 . The electronic device  300  can receive a bitstream directly from another electronic device or indirectly such as through the network  102  of  FIG. 1 . 
     When encoding media content, such as a mesh, the electronic device  300  can separate the vertices from the connectivity information. When the vertices and the connectivity information are separated, the vertices are similar to points of a point cloud. The electronic device  300  can also segment the vertices into multiple segments that form the patches that are presented in the 2D frame, via a point cloud encoder. For example, a cluster of vertices of the mesh can smoothed and then be grouped together to generate a patch. A patch can represent a single aspect of the mesh, such as geometry (a geometric position of a vertex), or an attribute such as color, reflectance, and the like) that are associated with a vertex. Patches that represent the same attribute can be packed into the same 2D frame. The 2D frames are then encoded to generate a bitstream. Similarly, the connectivity information is also encoded to generate another bitstream. The two bitstreams can be multiplexed together and transmitted to another device as a single bitstream. During the encoding process additional content such as metadata, flags, occupancy maps, and the like can be included in any of the bitstreams. 
     Similarly, when decoding media content included in a bitstream that represents a mesh, the electronic device  300  separate&#39;s the received bitstream into encoded connectivity information and encoded vertex information. The bitstream can also include an occupancy map, frames, auxiliary information, and the like. A geometry frame can include pixels that indicate geographic coordinates of vertices in 3D space. Similarly, an attribute frame can include pixels that indicate the RGB (or YUV) color (or any other attribute) of each vertex in 3D space. The auxiliary information can include one or more flags, or quantization parameter size, one or more thresholds, or any combination thereof. After reconstructing the mesh, the electronic device  300  can render the mesh in three dimensions via the display  355 . 
     Although  FIGS. 2 and 3  illustrate examples of electronic devices, various changes can be made to  FIGS. 2 and 3 . For example, various components in  FIGS. 2 and 3  could be combined, further subdivided, or omitted and additional components could be added according to particular needs. As a particular example, the processor  340  could be divided into multiple processors, such as one or more central processing units (CPUs) and one or more graphics processing units (GPUs). In addition, as with computing and communication, electronic devices and servers can come in a wide variety of configurations, and  FIGS. 2 and 3  do not limit this disclosure to any particular electronic device or server. 
       FIGS. 4A, 4B, and 4C  illustrate the relationship between the components of a mesh in accordance with an embodiment of this disclosure.  FIG. 4A  illustrates the vertices  400   a . A vertex, such as the vertex  402 , is a geometric coordinate in 3D space. Each vertex is similar to a point of a 3D point cloud.  FIG. 4B  illustrates the edges  400   b . An edge, such as the edge  404 , is a connection between two of the vertices  400   a . The edges represent the connectivity information of a mesh as they connect one vertex to another vertex.  FIG. 4C  illustrates the faces  400   c . A face, such as the face  406 , is a set of edges that when closed form a polygon. A face can represent connectivity information of a mesh as it is formed by connecting multiple vertices together. A triangle face  406 , as is illustrated in  FIG. 4C , is composed of three different edges. It is noted that a face can be a variety of polygons such as a quad face which is composed of four edges. 
     In certain embodiments, in addition to each vertex, such as the vertex  402 , having a geometric location, each vertex can have one or more attributes. The attributes associated with a face can be a weighted combination of the attributes of the vertices that are connected to the edges which form the face. 
       FIG. 4D  illustrates example point clouds, meshes, and scenery in accordance with an embodiment of this disclosure. For example,  FIG. 4D  illustrates an example point cloud  410  and an example mesh  412  in accordance with an embodiment of this disclosure. 
     The point cloud  410  depicts an illustration of a point cloud. The point cloud  410  includes multiple points that visually define an object in 3D space. Each point of the point cloud  410  represents an external coordinate of the object, similar to a topographical map. Each point includes a geographical location and one or more attributes. The attributes of each point can also include texture, color, intensity, texture, motion, material properties, reflectiveness, and the like. 
     Similarly, the mesh  412  depicts an illustration of a 3D mesh. The mesh  412  illustrates the external structure of an object that is built out of polygons. For example, the mesh  412  is a collection of vertices (similar to the vertices  400   a  of  FIG. 4A ), edges (similar to the edges  400   b  of  FIG. 4B ), and faces (similar to the faces  400   c  of  FIG. 4C ) that define the shape of an object. The mesh  412  is defined by many polygonal or triangular interconnectivity of information between the various points. Each polygon of the mesh  412  represents the external surface of the object. The vertices of each polygon are similar to the points in the point cloud  410 . Each polygon can include one or more attributes such as texture, color, intensity, texture, motion, material properties, reflectiveness, and the like. 
     The mesh  414  illustrates a triangular mesh. Triangular meshes are polygonal meshes in which the faces of the mesh are triangles similar to the face  406 . The scenery  416  illustrates that a point cloud or point mesh can include multiple items or a scene instead of a solitary figure. 
     As discussed above, the data corresponding to a mesh and a point cloud are often too large to transmit to another without first compressing the data. During compression of a mesh, the vertex coordinates and attribute(s) are separated from the connectivity information, such as the edges. When the edges of a mesh are separated from the vertices, the vertices can be encoded in a similar manner as a point cloud. As such, to compress the mesh  412  of  FIG. 4D  the connectivity information is separated from the vertices yielding the point cloud  410  and the connectivity information. The vertices (also referred to as points of a point cloud) can be projected onto multiple projection planes to create patches. 
       FIGS. 4E, 4F, and 4G  illustrate an example point cloud  430   a  and  430   b  (collectively point cloud  430 ) and frames  440 ,  445 ,  450 , and  455  that represent the point cloud  430  in accordance with an embodiment of this disclosure. In particular,  FIG. 4F  illustrates the frames  440  and  450  that includes patches representing the point cloud  430  of  FIG. 4E . Similarly,  FIG. 4G  illustrates the frames  445  and  455  that include a single raw patch representing the point cloud  430  of  FIG. 4E . 
     The point cloud  430   a  and the point cloud  430   b  illustrate the same virtual object but viewed from different directions (points of view). As such, when the point cloud is represented on the frames  440  and  450 , all 360° of the virtual object is present on the frames. It is noted that the point cloud  430  can be similar to any mesh that lacks its connectivity information. 
     The frame  440  represents the geometric position of points of the point cloud  430 . As illustrated, the frame  440  includes multiple patches (such as a patch  442  and a raw patch  444 ). The patch  442  represents the depth values of multiple vertices, while the raw patch  444  represents all of the geometric coordinates of particular vertices of the point cloud  430 . It is noted that the patch  442  preserve the shape of the input mesh while the raw patch  444  does not preserve the shape of the input mesh. The value of each pixel in the patch  442  is represented as a lighter or darker color and corresponds to a distance each pixel is from the projection plane. When projecting the point cloud  430  onto the 2D frames various patches are generated such as the patch  442 , while other vertices are inadvertently missed and not included in any of the patches within the frame  440 . As such, the raw patch  444  includes the geometric coordinates of any vertex which is not included in any of the patches. The raw patch  444  explicitly signals X, Y, Z geometry coordinates of certain point, such that the points can be packed into the raw patch  444  in any arbitrary order. A raw patch can take any visual form since the values (such as a geometric coordinates or color values) are simply packed into a patch. In certain embodiments, a raw patch is rectangular can stretch the length of a frame, as shown in  FIGS. 4F and 4G . In contrast the pixels of the patch  442  are packed in a particular order based on projecting the point cloud onto different projection planes. There may be other types of patches different than a patch  442  and raw patches  444 , such as patches created by projecting multiple points into a single pixel at the same time in frame  440 . It is noted that this disclosure considers patches created by projecting multiple points into a single pixel as a patch  442 . The patch  442  is also called a regular patch. 
     Similarly, the frame  450  that represents the color (or another attribute) associated with points of the point cloud  430 . As illustrated, the frame  450  includes multiple patches (such as a patch  452  and a raw patch  454 ). The patch  452  represents the color values of multiple vertices, while the raw patch  454  represents the colors of particular vertices of the point cloud  430 . It is noted that the patch  452  preserve the shape of the input mesh, while the raw patch  454  does not preserve the shape of the input mesh When projecting the point cloud  430  onto the 2D frames various patches are generated such as the patch  452 , while other vertices are inadvertently missed and not included in any of the patches within the frame  450 . As such, the raw patch  454  includes the color values of any vertex which is not included in any of the patches. There might be other types of patches different than a patch  452  and raw patches  454 , such as patches created by projecting multiple points into a single pixel at the same time in frame  450 , but this disclosure considers this type of a patch as a patch  452 . The patch  452  is also called a regular patch. 
     Each pixel of color in the frame  450  corresponds to a particular geometry pixel in the frame  440 . For example, a mapping is generated between each pixel in the frame  440  and the frame  450 . The location of the patches within the 2D frames  440  and  450  can be similar for a single position of the 3D point cloud. As shown in the frames  440  and  450 , some of the pixels correspond to valid pixels that represent the point cloud  430  while other pixels (the black area in the background) correspond to invalid pixels that do not represent any aspect of the point cloud  430 . In some embodiments, not illustrated in the frames  440  and  450  the invalid pixels that do not represent any aspect of the point cloud  430  can include padding which softens the edges of the patches to increase the compression efficiency. 
     The frame  445  of  FIG. 4G  represents the geometry of the point cloud  430  and the frame  455  of  FIG. 4G  represent represents the color (or another attribute) associated with points of the point cloud  430 . The frame  445  is similar to the frame  440  as each frame represents geometry the point cloud  430 . Similarly, the frame  455  is similar to the frame  450  as each frame represents an attribute, such as color, of the point cloud  430 . However, the frames  445  and  455  include a single raw patch instead of the multiple patches as illustrated in the frames of  FIG. 4F . The single raw patch of the frame  445  represents a list of the geometry coordinates of each vertex of the point cloud  430 , while the single raw patch of the frame  455  represents a list of the color values of each vertex of the point cloud  430 . 
     In certain embodiments, a point cloud encoder generates multiple frames such as the frames  440  and  450  when compressing the point cloud  430 . In certain embodiments, a point cloud encoder generates multiple frames such as the frames  445  and  455  when compressing the point cloud  430 . In other embodiments, a point cloud encoder generates both types of frames (such as the frames  440  and  445  as well as  450  and  455 ) when compressing the point cloud  430 . 
       FIG. 4H  illustrates a point cloud  410   a  and multiple projection planes. The point cloud  410   a  can is similar to the point cloud  410  of  FIG. 4D  as well as the mesh  412  of  FIG. 4D  (since the point cloud  410  can be the mesh  412  without the connectivity information). The point cloud  410   a  is surrounded by multiple projection planes, such as the projection plane  460 ,  462 ,  464 ,  466 ,  468 , and  470 . The projection plane  460  is separated from the projection plane  462  by a predefined distance. For example, the projection plane  460  corresponds to the projection plane XZ 0  and the projection plane  462  corresponds to the projection plane XZ 1 . Similarly, the projection plane  464  is separated from the projection plane  466  by a predefined distance. For example, the projection plane  464  corresponds to the projection plane YZ 0  and the projection plane  466  corresponds to the projection plane YZ 1 . Additionally, the projection plane  468  is separated from the projection plane  470  by a predefined distance. For example, the projection plane  468  corresponds to the projection plane XY 0  and the projection plane  470  corresponds to the projection plane XY 1 . It is noted that additional projection planes can be included and the shape of that the projection planes form can differ. The point cloud  410   a  is then projected onto the multiple projection planes  460 ,  462 ,  464 ,  466 ,  468 , and  470 . To generate the patches  442  and  452  of the frames  440  and  450  respectively. 
       FIG. 4I  illustrates an example portion of a mesh file  480  in accordance with an embodiment of this disclosure. The mesh file  480 , which describes a mesh, includes a header  482 , vertex information  484 , and face information  486 . 
     The vertex information  484  is an index that lists information about each vertex of the mesh. Each row of the vertex information  484  describes a different vertex of the mesh. Each of the vertices (each row of the vertex information  484 ) can include an index number (not illustrated) that identifies each particular vertex of the mesh and is used to relate each vertex to a face that is described the face information  486 . 
     The vertex information  484  includes a list of the coordinates  490 , the normal  491 , and the color  492  that is associated with each vertex of the mesh. The coordinates  490  lists the coordinates, such as the coordinates  493  for each vertex. A vertex described by the coordinates  493  can be similar to the vertex  402  of  FIG. 4A . For example, the vertex described by the coordinates  493 , is located in 3D space at the ( 247 ,  163 ,  22 ) corresponding to (X, Y, Z) coordinate location. The vertex described by the coordinates  493  includes two attributes that of normal  491  and color  492 . It is noted that in other meshes, more or less attributes can be included. The vertex described by coordinates  493  can include a normal position such as (−1.170, −1.0608, −5.7584), corresponding to (NX, NY, NZ). The vertex described by coordinates  493  can include the color (133, 116, 102) corresponding to (red, green, blue). The number  255  indicates the number of colors between 0 and 255. 
     The face information  486  is an index that lists information about each of the faces of the mesh. Each row of the face information  486  describes a different face of the mesh. In certain embodiments, each of the faces (each row of the face information  486 ) can include an index number (not illustrated) that identifies each particular face of the mesh. 
     The face information  486  specifies the number of edges  495  that form each face of the mesh and the particular vertex indices  494  that comprise each face. The number of edges  495  indicates how many edges form a particular face of the mesh. As illustrated, each face includes three edges. It is noted that each of the faces (each row of the face information  486 ) is described by the index of three separate vertices, such as the three indices  496 . For example, a vertex with the index number  1148  can be the vertex described by the coordinates  493 . The index number  1148  corresponds to one of three vertices (indicated by the three indices  496 ) that describe a particular face of the mesh. The index numbers  1796  and  1139  correspond to different vertices that are included the vertex information  484 . 
     As discussed in greater detail below, to compress and transmit a mesh, the connectivity information can be separated from the vertex information. Therefore, Embodiments of the present disclosure maintain a relationship between the index number of each vertex and the index number of each face, since each face is defined by the particular vertices. 
     Although  FIGS. 4A, 4B, 4C, 4D, 4E, 4F, 4G, 4H, and 4I  illustrate example point clouds, meshes, and 2D frames various changes can be made to  FIGS. 4A, 4B, 4C, 4D, 4E, 4F, 4G, 4H, and 4I . For example, the patches included in the 2D frames can represent other attributes, such as luminance, material, and the like.  FIGS. 4A, 4B, 4C, 4D, 4E, 4F, 4G, 4H , and  4 I do not limit this disclosure to any particular 3D object(s) and 2D frames representing the 3D object(s). 
       FIGS. 5A, 5B, 5C, 5E, 5F, 5G, 5H, 6A, 6B, and 6C  illustrate block diagrams in accordance with an embodiment of this disclosure. In particular,  FIG. 5A  illustrates a block diagram of an example environment-architecture  500  in accordance with an embodiment of this disclosure. The  FIGS. 5B, 5C, 5D, 6A, and 6B  illustrate example block diagrams of the encoder  510  of  FIG. 5A . The  FIGS. 5F, 5G, 5H, and 6C  illustrate example block diagrams of the decoder  550  of  FIG. 5A .  FIG. 5D  illustrates example indexes in accordance with an embodiment of this disclosure. The embodiments of  FIGS. 5A through 6C  are for illustration only. Other embodiments can be used without departing from the scope of this disclosure. 
     As shown in  FIG. 5A , the example environment-architecture  500  includes an encoder  510  and a decoder  550  in communication over a network  502 . The network  502  can be the same as or similar to the network  102  of  FIG. 1 . In certain embodiments, the network  502  represents a “cloud” of computers interconnected by one or more networks, where the network is a computing system utilizing clustered computers and components that act as a single pool of seamless resources when accessed. Also, in certain embodiments, the network  502  is connected with one or more servers (such as the server  104  of  FIG. 1 , the server  200 ), one or more electronic devices (such as the client devices  106 - 116  of  FIG. 1 , the electronic device  300 ), the encoder  510 , and the decoder  550 . Further, in certain embodiments, the network  502  can be connected to an information repository (not shown) that contains a VR and AR media content that can be encoded by the encoder  510 , decoded by the decoder  550 , or rendered and displayed on an electronic device. 
     In certain embodiments, the encoder  510  and the decoder  550  can represent the server  104 , one of the client devices  106 - 116  of  FIG. 1 , or another suitable device, and include internal components similar to that of the server  200  of  FIG. 2  and the electronic device  300  of  FIG. 3 . In certain embodiments, the encoder  510  and the decoder  550  can be a “cloud” of computers interconnected by one or more networks, where each is a computing system utilizing clustered computers and components to act as a single pool of seamless resources when accessed through the network  502 . In some embodiments, a portion of the components included in the encoder  510  or the decoder  550  can be included in different devices, such as multiple servers  104  or  200 , multiple client devices  106 - 116 , or other combination of different devices. In certain embodiments, the encoder  510  is operably connected to an electronic device or a server while the decoder  550  is operably connected to an electronic device that includes a display. In certain embodiments, the encoder  510  and the decoder  550  are the same device or operably connected to the same device. 
     The encoder  510  is described with more below in  FIGS. 5B, 5C, 5E, 6A , and  6 B. Generally, the encoder  510  receives 3D media content, such as a mesh, from another device such as a server (similar to the server  104  of  FIG. 1 , the server  200  of  FIG. 2 ) or an information repository (such as a database), or one of the client devices  106 - 116 . In certain embodiments, the encoder  510  can receive media content from multiple cameras and stitch the content together to generate a 3D scene that includes one or more point clouds. 
     In certain embodiments, the encoder  510  can include two separate encoders a connectivity encoder and a point cloud encoder that is configured to encode a point cloud using a video encoder. The encoder  510  demultiplexes, or separates, the vertex information (vertex coordinates and vertex attribute(s)) from the vertex connectivity information. The vertex information is similar to a point cloud, such as the point cloud  410  of  FIG. 4D . 
     The connectivity encoder encodes the connectivity information of the mesh. In certain embodiments, the connectivity encoder can be similar to a Triangle-FAN (TFAN) encoder, an Edgebreaker encoder or the like. The point cloud encoder encodes the vertex information such as the vertex coordinates and the vertex attributes. 
     The point cloud encoder projects the vertices of the mesh onto different planes such as an XY plane, a YZ plane, and an XZ plane, to create patches. When a vertex is projected onto a 2D frame, it is denoted as a pixel and identified by the column and row index in the frame indicated by the coordinate (u, v), instead of the (X, Y, Z) coordinate value of the vertex in 3D space. Additionally, ‘u’ and ‘v’ can range from zero to the number of rows or columns in the projected 2D image, respectively. The point cloud encoder  510  packs the patches representing the geometry of the vertices onto 2D video frames, and thereafter encodes the frames. It is noted that most of the vertex coordinates are projected onto the regular patches (such as the patch  442  of  FIG. 4F ) while some of the vertex coordinates could be projected onto the raw patches (such as the raw patch  444  of  FIG. 4F ). 
     In certain embodiments, the point cloud encoder also generates an occupancy map based on the geometry frame(s) to indicate which pixels within the frames are valid. Generally, the occupancy map indicates, for each pixel within a geometry frame, whether the pixel is a valid pixel or an invalid pixel. For example, if a pixel in the occupancy map at coordinate (u, v) is valid, then the corresponding pixel in a geometry frame at the coordinate (u, v) is also valid. If the pixel in the occupancy map at coordinate (u, v) is invalid, then the decoder  550  skips the corresponding pixel in the geometry frames at the coordinate (u, v). In certain embodiments, the occupancy map is binary, such that the value of each pixel is one or zero. For example, when the value of a pixel at position (u, v) of the occupancy map is one indicates that a pixel at (u, v) of the geometry frame is valid. In contrast, when the value of a pixel at position (u, v) of the occupancy map is zero indicates that a pixel at (u, v) of the geometry frame is invalid. 
     The point cloud encoder can compress both a geometry frame and a corresponding occupancy map frame. Thereafter the point cloud encoder can decode and reconstruct the geometry frames and the occupancy map frames. The reconstructed geometry and occupancy map frames are used to generate the one or more attribute frames. After generating the attribute frames, the attribute frames are compressed. The encoder  510  then multiplexes the encoded connectivity information with the encoded frames to generate a bitstream that can be transmitted to another device via the network  502 . 
     The decoder  550 , which is described with more below in  FIGS. 5F, 5G, 5H , and  6 C, receives a bitstream that represents media content. The bitstreams can include two separate bitstreams that are multiplexed together such as the connectivity information and the vertex coordinates and attribute(s). The decoder  550  can include two decoders, a point cloud decoder configured to decode a point cloud using a video decoder and a connectivity decoder. The point cloud decoder can decode multiple frames such as the geometry frame, the one or more attribute frames, and the occupancy map. The connectivity decoder decodes the connectivity information. The decoder  550  then reconstructs the mesh from the multiple frames and the connectivity information. The reconstructed mesh can then be rendered and viewed by a user. 
       FIG. 5B  illustrates a block diagram of the encoder  510   a . Similarly,  FIG. 5C  illustrates a block diagram of the encoder  510   b . The encoders  510   a  and  510   b  are similar to the encoder  510  of  FIG. 5A . The encoders  510   a  and  510   b  receive a mesh  505 . The encoder  510   a  generates a bitstream  549   a  while the encoder  510   b  generates a bitstream  549   b . The bitstreams  549   a  and  549   b  include data representing the mesh  505 . The bitstreams  549   a  and  549   b  can include multiple bitstreams and can be transmitted via the network  502  of  FIG. 5A  to another device, such as the decoder  550  or an information repository. The encoder  510   a  includes a demultiplexer  512 , a point cloud encoder  520 , a vertex index updater  540 , a connectivity encoder  544 , a reverse mapper  546 , a reordering encoder  547   a , and a multiplexer  548   a . The encoder  510   b  includes a patch a demultiplexer  512 , a point cloud encoder  520 , a vertex index updater  540 , a connectivity encoder  544 , a reordering encoder  547   b , and a multiplexer  548   b.    
     The encoder  510   a  of  FIG. 5B  is similar to the encoder  510   b  of  FIG. 5C . However, the encoder  510   a  generates and encodes the reverse vertex traversal map while the encoder  510   b  generates and encodes the traversal map. Since the encoder  510   a  generates the reverse vertex traversal map, the decoder  550   a  of  FIG. 5F  decodes and reconstructs the mesh  595 . In contrast, since the encoder  510   b  generates the reverse vertex traversal map, the decoder  550   b  of  FIG. 5G  decodes and reconstructs the mesh  595 . The reconstructed meshes in  FIG. 5F  and  FIG. 5G  are identical. 
     The mesh  505 , of  FIGS. 5B and 5C , can be stored in memory (not shown) or received from another electronic device (not shown). The mesh  505  can be a single 3D object (similar to the mesh  412 , and  414  of  FIG. 4D  as well as the point cloud  430   a  and  430   b  of  FIG. 4E ), or a scenery (similar to the  416  of  FIG. 4D ). The mesh  505  can be a stationary object or an object which moves. 
     The demultiplexer  512 , of  FIGS. 5B and 5C , separates the connectivity information  514  of the mesh  505  from the vertex coordinates and attribute information  513 . The connectivity information  514  relates one vertex to another such as the face information  486  of  FIG. 4I  while the vertex coordinates and attribute information  513  can include the vertex information  484  of  FIG. 4I . 
     The point cloud encoder  520 , of  FIGS. 5B and 5C , encodes the vertex coordinates and attribute information  513  to generate reconstructed vertices  539   a  and a bitstream  539   b . To generate the reconstructed vertices  539   a  and a bitstream  539   b , the point cloud encoder  520  segments the vertex coordinates (geometry) into patches (such as the patch  442  of  FIG. 4F ). The point cloud encoder  520  then packs the patches into 2D geometry video frames (such as the frame  440  of  FIG. 4F ). The point cloud encoder  520  then compresses the geometry video frame using a 2D video codec such as HEVC. In certain embodiments, the point cloud encoder  520  encodes the vertices in the order that they are packed into the frames, which can be different than the order of the connectivity information  514 . 
     In certain embodiments, the point cloud encoder  520  fills the area between the patches of the geometry video frame with padding before the frame is compressed. Filling the area between patches with padding reduces the compression bitrate. In certain embodiments, the point cloud encoder  520  does not fill the area between the patches of the geometry video frame. 
     To encode the vertex attributes (such as the color, the normal, the material property, reflectance etc. of each vertex), the point cloud encoder  520  first decodes the encoded geometry video frames and then reconstructs the 3D coordinates. After reconstructing the geometry coordinates, the point cloud encoder  520  interpolates the color values for each reconstructed vertex from the color values of the vertices of the mesh  505 , since the geometric coordinates of each vertex can shift when the point cloud is reconstructed. The point cloud encoder  520  then packs the generated colors into a 2D attribute video frame and then compresses the attribute video frame using a 2D video codec such as HEVC. A mapping exists between the pixels of the geometry video frame and the attribute video frame. 
     In certain embodiments, the point cloud encoder  520  smooths the reconstructed geometry coordinates before interpolating the color values for each reconstructed vertex. In certain embodiments, smoothing the reconstructed geometry coordinates is not performed. In certain embodiments, the point cloud encoder  520  fills the area between the patches of the attribute video frame with padding before the frame is compressed. Filling the area between patches with padding reduces the compression bitrate. In certain embodiments, the point cloud encoder  520  does fill the area between the patches of the attribute video frame. 
     In certain embodiments, the point cloud encoder  520  can compare the geometry coordinates of each reconstructed vertex to the geometry coordinates of the mesh  505 . For each missing point (vertex) of the reconstructed point cloud, the point cloud encoder  520  identifies the geometry position of that point and includes that information in a raw points patch (such as the raw patch  444  of  FIG. 4F ). Similarly, the point cloud encoder  520  identifies the corresponding color (and any other attribute value) of the missing point and interpolates the new color value and includes that information in the raw points patch (such as the raw patch  454  of  FIG. 4F ). 
     The point cloud encoder  520  also generates and encodes a binary occupancy map to show the location of projected points in the geometry and attribute video frames. The compressed video frames are multiplexed together with metadata information used for patch creation, to generate the bitstream  539   b .  FIG. 6A , discussed in greater detail below, describes the point cloud encoder  520  in greater detail. 
     The connectivity information  514  is defined with respect to the order of the vertices of the mesh  505 . When the point cloud encoder  520  reconstructs the geometry coordinates, the order of the reconstructed vertices in the reconstructed mesh can change and therefore be different than the order of the vertices in the mesh  505  (and subsequently the connectivity information  514 ). That is, the order of the reconstructed vertices may not match the order of the vertices of the connectivity information  514 , due to the point cloud encoder  520  reconstructing the mesh. Therefore, before the connectivity information  514  can be encoded (by the connectivity encoder  544 ) the order of the vertices is updated to correspond to the new order of the reconstructed vertices  539   a , by the vertex index updater  540 . Therefore, the vertex index updater  540  updates the vertex indices of the mesh  505  to match the new order of the reconstructed vertices. 
     The vertex index updater  540 , of  FIGS. 5B and 5C , receives the reconstructed vertices  539   a  from the point cloud encoder  520 , the vertex coordinates and attribute information  513 , and the connectivity information  514 . An example of index relating the vertex coordinates and attribute information  513 , the reconstructed vertices  539   a , and the connectivity information  514  is illustrated in  FIG. 5D . 
     The vertex index updater  540  maps the vertices from the vertex coordinates and attribute information  513  (which is based on the mesh  505 ) to the vertex indices of the reconstructed vertices  539   a . For example, as illustrated in  FIG. 5D , the vertex 1 of the vertex coordinate and attribute information  513  indicates that it is positioned at ( 247 ,  173 ,  22 ) and vertex 1 of the reconstructed vertices  539   a  indicates that it is positioned at ( 247 , 163 , 22 ). As indicated the vertex 1 of the vertex coordinates and attribute information  513  does not correspond to the same vertex as index  1  of the reconstructed vertices  539   a . However, vertex 1 of the vertex coordinates and attribute information  513  corresponds to index  4  of the reconstructed vertices  539   a . That is, the vertex 1 of the vertex coordinates and attribute information  513  corresponds to the same vertex as indicated by vertex 4 of the reconstructed vertices  539   a . Similarly, vertex 2 of the vertex coordinates and attribute information  513  corresponds to vertex 1 of the reconstructed vertices  539   a . Vertex 3 of the vertex coordinates and attribute information  513  corresponds to vertex 2 of the reconstructed vertices  539   a . Vertex 4 of the vertex coordinates and attribute information  513  corresponds to vertex 5 of the reconstructed vertices  539   a . Finally, vertex 5 of the vertex coordinates and attribute information  513  corresponds to vertex 3 of the reconstructed vertices  539   a.    
     After mapping the vertices from the vertex coordinates and attribute information  513  to the vertex indices of the reconstructed vertices  539   a , the vertex index updater  540  generates a new index  542 . The new index relates the connectivity information  514  that specifies the vertices that form each face of the mesh (which is based on the vertex coordinates and attribute information  513  and the mesh  505 ) to the reconstructed vertices  539   a . For example, as illustrated in  FIG. 5D , face  1  of the connectivity information  514 , is formed by three edges that connect the three vertices such as vertex 1, vertex 2, and vertex 5 as defined in the vertex coordinates and attribute information  513 . That is, the face index number  1  of the connectivity information  514  is formed by the vertex 1, vertex 2, and vertex 5, which corresponds to the vertices at positions ( 247 ,  173 ,  22 ), ( 247 ,  163 ,  22 ), and ( 213 ,  465 ,  80 ), respectively. The vertex index updater  540  generates a new index  542  based on the mapped vertices from the vertex coordinates and attribute information  513  to the vertex indices of the reconstructed vertices  539   a . Since the vertex 1, vertex 2, and vertex 5 of the vertex coordinates and attribute information  513  correspond to the vertex 4, vertex 1, and vertex 3 of the reconstructed vertices  539   a , respectively, the new index  542  specifies that the face index number  1  would correspond to the vertex 4, vertex 1, and vertex 3 of the reconstructed vertices  539   a , to maintain the same connectivity information. 
     In certain embodiments, the vertex index updater  540  uses a searching mechanism such as a KD tree to map and relate the reconstructed vertices  539   a  to the input vertices of the mesh  505  (indicated by the vertex coordinates and attribute information  513 ). Then the identified correspondence is used to update the vertex indices according to the order of the reconstructed points. 
     The connectivity encoder  544  of  FIGS. 5B and 5C  encodes the connectivity information  514  as indicated by the new index  542 . If the new index  542  includes all of the connectivity information  514 , albeit in a different order, then the connectivity encoder  544  encodes the new index  542 . 
     The encoder  510   a  of  FIG. 5B  and the encoder  510   b  of  FIG. 5C  both use the connectivity encoder  544  to encode the connectivity information  542 . The order by which the vertices are traversed by the connectivity encoder  544  can be different than the order of vertices presumed in the connectivity information as indicated by the new index  542 . As such, the encoder  510   a  generates and transmits a reverse vertex traversal map to the decoder, such as the decoder  550   a  of  FIG. 5F . The reverse vertex traversal map maps the traversal order of vertices defined by the connectivity encoder  544  back to the order of vertices presumed in the connectivity information as indicated by the new index  542 . The reordering encoder  547   a  encodes the output of the reverse mapper  546 , such as a reverse vertex traversal map. The decoder  550   a  of  FIG. 5F  decodes and uses the reverse vertex traversal map to update the vertex indices to match the order of the vertices of the reconstructed geometry coordinates. Similarly, the encoder  510   b  generates and encodes (via the ordering encoder  547   b ) a traversal map  545   c , which is then transmitted to the decoder, such as the decoder  550   b  of  FIG. 5G . The traversal map  545   c  maps the order of vertices presumed in the connectivity information as indicated by the new index  542  to the traversal order of vertices defined by the connectivity encoder  544 . The decoder  550   b  uses the traversal map to update the order of the vertices of the reconstructed geometry and attribute to match the order of vertices presumed in the vertex indices of the connectivity information. 
     In certain embodiments, the connectivity encoder  544  encodes the connectivity information  514  as auxiliary data. In certain embodiments, the connectivity encoder  544  uses a coding technique such as Edgebreaker to encode the connectivity information  514 . In certain embodiments, the connectivity encoder  544  uses a coding technique such as TFAN to encode the connectivity information  514 . 
     The connectivity encoder  544 , of  FIG. 5B , generates a connectivity bitstream  545   a  and a vertex traversal map  545   b . Similarly, the connectivity encoder  544 , of  FIG. 5C , generates a connectivity bitstream  545   a  and a vertex traversal map  545   c . The connectivity bitstream  545   a  represents the encoded connectivity information such as the connectivity information  514  based on the order indicated by the new index  542 . 
     The connectivity encoder  544  does not preserve the order of vertices. Since the connectivity information is encoded (by the connectivity encoder  544 ) in a different order than the vertex coordinates and attributes (which are encoded by the point cloud encoder  520 ), the vertex traversal map  545   b  is signaled to relate the vertex indices to their corresponding vertex coordinates. That is, the vertex traversal map  545   b  represents the relationship between the vertex indices and their corresponding vertex coordinates can be signaled via a lookup table. 
     In certain embodiments, as described in  FIG. 5B , a reverse order of the vertex traversal map  545   b  is included in the bitstream  549   a , such that the reverse order of the vertex traversal map  545   b  is transmitted to the decoder  550 . As illustrated, if the vertex order was (1, 2, 3, 4, 5, 6, 7), the vertex traversal map  545   b  may be (1, 3, 7, 6, 2, 4, 5). The reverse mapper  546  generates a reverse vertex traversal map. The reverse vertex traversal map relates the vertex order to the vertex traversal map in reverse. For example, to relate, the vertex order to the vertex traversal map  545   b , the reverse mapper  546  generates a reverse vertex traversal map which is encoded as a reordered bitstream  546   a . The reverse vertex traversal map (which relates in reverse the vertex order to the vertex traversal map), represented as the reordered bitstream  546   a , would then be (1, 5, 2, 6, 7, 4, 3). It is noted that the connectivity encoder  544  is not limited to 7 vertices and any number of vertices can be encoded by the connectivity encoder  544 . Similarly, the vertex traversal map and the reverse vertex traversal map are not limited to a particular size. 
     As illustrated, the first position in the vertex order is vertex 1, and the first position in the vertex traversal map  545   b  is vertex 1. Since both indices have vertex 1 in the first position, then the reverse mapper  546  specifies that the first position of the reordered bitstream  546   a  is the vertex 1. The second position in the vertex order is vertex 2, and the second position in the vertex traversal map  545   b  is vertex 3. Since the second position relates to two different vertices, the reverse mapper  546  identifies that the vertex 2 is located at the fifth position in the vertex traversal map  545   b . Therefore, the reordered bitstream  546   a  includes the value 5 in the second position. Similarly, the third position in the vertex order is vertex 3, and the third position in the vertex traversal map  545   b  is vertex 7. Since the third position relates to two different vertices, the reverse mapper  546  identifies that the vertex 3 is located at the second position in the vertex traversal map  545   b . Therefore, the reordered bitstream  546   a  includes the value 2 in the third position. Additionally, the fourth position in the vertex order is vertex 4, and the fourth position in the vertex traversal map  545   b  is vertex 6. Since the fourth position relates to two different vertices, the reverse mapper  546  identifies that the vertex 4 is located at the sixth position in the vertex traversal map  545   b . Therefore, the reordered bitstream  546   a  includes the value 6 in the fourth position. The reverse mapper  546  continues mapping in this manner until the reordered bitstream  546   a  is generated. The reordering encoder  547   a  encodes the reordered bitstream  546   a.    
     The multiplexer  548   a , of  FIG. 5B , combines the bitstream  539   b , the connectivity bitstream  545   a , and the reordered bitstream  546   a  to generate the bitstream  549   a . It is noted that when the reverse vertex traversal map (represented as the reordered bitstream  546   a ) is generated and included in the bitstream  549   a , the reverse vertex traversal map is applied to the connectivity information in the decoder  550 , (such as the decoder  550   a  of  FIG. 5F ). 
     In certain embodiments, as illustrated by the encoder  510   b  of the in  FIG. 5C , the vertex traversal map  545   c , which is encoded, by the reordering encoder  547   b  and then included in the bitstream  549   b  (instead of the reverse vertex traversal which is represented as the reordered bitstream  546   a ). For example, the vertex traversal map  545   c  is encoded by the reordering encoder  547   b  and directly transmitted to the decoder  550 . The encoded vertex traversal map is combined with the connectivity bitstream  545   a  and the bitstream  539   b , by the multiplexer  548   b , to generate the bitstream  549   b . That is, the multiplexer  548   b  combines the encoded vertex traversal map, the connectivity bitstream  545   a , and the bitstream  539   b , generate the bitstream  549   b . It is noted that when the encoded vertex traversal map is generated and included in the bitstream  549   b , the vertex traversal map is applied to the vertex coordinates and attributes in the decoder  550  (such as the decoder  550   b  of  FIG. 5G ). The reordering encoder  547   a  of  FIG. 5B  and the reordering encoder  547   b  of  FIG. 5C  are similar as both encode the reordering information, such as the vertex traversal map and the reverse vertex traversal map. 
       FIG. 5E  illustrates a block diagram of the encoder  510   c . The encoder  510   c  receives a mesh  505  and generates a bitstream  549   c . The mesh  505  is similar to the mesh  505  of  FIGS. 5B and 5C . The bitstream  549   c  includes data representing the mesh  505 . The bitstream  549   c  can include multiple bitstreams and can be transmitted via the network  502  of  FIG. 5A  to another device, such as the decoder  550  or an information repository. The encoder  510   c  includes a demultiplexer  512   a , a point cloud encoder  520   a , a connectivity encoder  544   a , and a multiplexer  548   c.    
     The demultiplexer  512   a , is similar to the demultiplexer  512  of  FIGS. 5B and 5C . The demultiplexer  512   a  separates the connectivity information  514   a  of the mesh  505  from the vertex coordinates and attribute information  513   a . The connectivity information  514   a  and the vertex coordinates and attribute information  513   a  are similar to the connectivity information  514  and the vertex coordinates and attribute information  513  of  FIGS. 5B and 5C . 
     To encode the mesh  505 , the encoder  510   c  encodes the connectivity information  514   a  prior to encoding the vertex coordinates and attribute information  513   a , while the encoders  510   a  and  510   b  of  FIGS. 5B and 5C  perform the encoding in the opposite order. 
     The connectivity encoder  544   a  is similar to the connectivity encoder  544  of  FIGS. 5B and 5C . For example, the connectivity encoder  544   a  encodes the connectivity information  514   a  to generate the connectivity bitstream  545   d  and a vertex traversal map  545   e . As illustrated, the vertex traversal map  545   e  can be in a different order than the vertex order that is included in the connectivity information  514   a . For example, if the vertex order of the connectivity information  514   a  is (1, 2, 3, 4, 5, 6, 7) then the vertex traversal map  545   e  can be in a different order such as ( 1 ,  3 ,  7 ,  6 ,  2 ,  4 ,  5 ). The connectivity bitstream  545   d  is similar to the connectivity bitstream  545   a  of  FIGS. 5B and 5C . 
     In certain embodiments, the connectivity encoder  544   a  uses a coding technique such as Edgebreaker to encode the connectivity information  514   a . In certain embodiments, the connectivity encoder  544  uses a coding technique such as TFAN to encode the connectivity information  514   a.    
     The point cloud encoder  520   a  encodes the vertex coordinates and attribute information  513   a  based on the order of the vertex traversal map  545   e  and generates the bitstream  539   c . The point cloud encoder  520   a  packs vertex coordinates into a raw patch of a geometry frame (similar to the raw patch of the frame  445  of  FIG. 4G ) and packs the vertex attribute into a raw patch of an attribute frame (similar to the raw patch of the frame  455  of  FIG. 4G ). A raw patch explicitly stores the information associated with each vertex (such as the X, Y, Z geometry coordinates of each vertex and the R, B, G, color values of each vertex) such that the vertices can be packed in any arbitrary order. For example, the vertex coordinates are packed in the traversal order of the encoded connectivity information into a geometry frame and each attribute is packed in the traversal order of the encoded connectivity information into a respective attribute frame. The point cloud encoder  520   a  encodes the frames that include the raw patches and generates the bitstream  539   c  which represents the point cloud bitstream. 
     By packing the vertex coordinates and attribute information  513   a  as a raw patch instead of individual patches, the point cloud encoder  520   a  simplifies encoding as compared to the point cloud encoder  522  of  FIGS. 5B and 5C . For example, the point cloud encoder  520   a  does not need to generate patches since the vertices are not partitioned into different patches. Additionally, the point cloud encoder  520   a  does not need to pack the individual patches into a frame, fill the inter-patch space of a frames with image padding, perform geometry smoothing, perform color smoothing, generate and compress an occupancy map, generate and compress auxiliary patch information, and the like. 
     Additionally, by packing the vertex coordinates and attribute information  513   a  as a raw patch based on the order of the vertex traversal map  545   e , the encoder  510   c  does not include the reordering information in the bitstream  549   c . The point cloud encoder  520   a  may not be as efficient as the point cloud encoder  520  of  FIGS. 5A and 5B , however the overall bits of the bitstream  549   c  can be smaller than the bitstream  549   a  and  549   b  since the reordering information is omitted in the bitstream  549   c , given the same input data. 
     The multiplexer  548   c  combines the bitstream  539   c  and, the connectivity bitstream  545   d  to generate the bitstream  549   c . The multiplexer  548   c  does not combine any reordering information since both the connectivity information  514   a  and the vertex coordinates and attribute information  513   a  are encoded in the same order. 
       FIG. 5F  illustrates a block diagram of the decoder  550   a  in accordance with an embodiment of this disclosure. The decoder  550   a  is similar to the decoder  550  of  FIG. 5A . The decoder  550   a  includes a demultiplexer  552 , a connectivity decoder  560 , a vertex index updater  562 , reordering information decoder  565 , a point cloud decoder  570 , and a multiplexer  590 .  FIG. 6C , below, describes decoder  650  in greater details. 
     The decoder  550   a  receives a bitstream  549   a . The bitstream  549   a  is the bitstream that was generated by the encoder  510   a  of  FIG. 5B . The demultiplexer  552  separates bitstream  549   a  into compressed connectivity information, compressed reordering information, and the compressed vertex coordinates and attributes. The connectivity decoder  560  decodes the compressed connectivity information to generate reconstructed connectivity information. The reordering information decoder  565  decodes the compressed reordering information to generate reconstructed reordering information. The point cloud decoder  570  decodes the compressed vertex coordinates and attributes to generate the reconstructed vertex coordinates and attributes. The reconstructed vertices resemble a point cloud, since the vertex coordinates correspond to points located in 3D space. 
     After the reordering information decoder  565  decodes the compressed reordering information, the vertex index updater  562 , updates the indices associated with the reconstructed connectivity information. The vertex index updater  562  updates the index associated with the reconstructed connectivity information such that the index matches the index of the reconstructed vertex coordinates and attributes. That is, the reverse vertex traversal map of  FIG. 5B  is applied to the connectivity information. 
     Once the vertices associated with the reconstructed connectivity information and the reconstructed vertex coordinates and attributes are related by similar indices, the multiplexer  590  combines the reconstructed vertex coordinates and attributes with the connectivity information to reconstruct and generate the mesh  595 . The reconstructed mesh  595  is similar to the mesh  505 . 
       FIG. 5G  illustrates a block diagram of the decoder  550   b  in accordance with an embodiment of this disclosure. The decoder  550   b  is similar to the decoder  550  of  FIG. 5A . The decoder  550   a  includes a demultiplexer  552 , a connectivity decoder  560 , a reordering information decoder  565 , a point cloud decoder  570 , a vertex index updater  564 , and a multiplexer  590   
     The decoder  550   b  receives the bitstream  549   b . The bitstream  549   b  is the bitstream that was generated by the encoder  510   b  of  FIG. 5C . The demultiplexer  552  separates bitstream  549   b  into compressed connectivity information, compressed reordering information, and the compressed vertex coordinates and attributes. The connectivity decoder  560  decodes the compressed connectivity information to generate reconstructed connectivity information. The reordering information decoder  565  decodes the compressed reordering information to generate reconstructed reordering information. The point cloud decoder  570  decodes the compressed vertex coordinates and attributes to generate the reconstructed vertex coordinates and attributes. The reconstructed vertices resemble a point cloud, since the vertex coordinates correspond to points located in 3D space. 
     After the reordering information decoder  565  decodes the compressed reordering information, the vertex index updater  564 , updates the vertex index associated with the reconstructed vertex coordinates and attributes. The vertex index updater  564  updates the index associated with the reconstructed vertex coordinates and attributes such that the index matches the index of the reconstructed connectivity information. That is, the traversal map of  FIG. 5C  is applied to the vertex coordinates and attributes. 
     Once the vertices associated with the reconstructed connectivity information and the reconstructed vertex coordinates and attributes are related by similar indices, the multiplexer  590  combines the reconstructed vertex coordinates and attributes with the connectivity information to reconstruct and generate the mesh  595 . The reconstructed mesh  595  is similar to the mesh  505 . 
       FIG. 5H  illustrates a block diagram of the decoder  550   c  in accordance with an embodiment of this disclosure. The decoder  550   c  is similar to the decoder  550  of  FIG. 5A . The decoder  550   c  includes a demultiplexer  552 , a connectivity decoder  560 , a point cloud decoder  570 , and a multiplexer  590 . 
     The decoder  550   c  receives the bitstream  549   c . The bitstream  549   c  is the bitstream that was generated by the encoder  510   c  of  FIG. 5E . The demultiplexer  552  separates bitstream  549   b  into compressed connectivity information and the compressed vertex coordinates and attributes. The connectivity decoder  560  decodes the compressed connectivity information to generate reconstructed connectivity information. The point cloud decoder  570  decodes the compressed vertex coordinates and attributes to generate the reconstructed vertex coordinates and attributes. The reconstructed vertices resemble a point cloud, since the vertex coordinates correspond to points located in 3D space. 
     Since the vertex coordinates and attributes were encoded in a raw patch in the order of the connectivity information, the vertex indices of the connectivity information and the vertex coordinates and attributes are similar. Therefore the multiplexer  590  combines the reconstructed vertex coordinates and attributes with the connectivity information to reconstruct and generate the mesh  595 . The reconstructed mesh  595  is similar to the mesh  505 . 
       FIGS. 6A and 6B  illustrate detailed block diagrams of the encoders  610   a  and  610   b , respectively, in accordance with an embodiment of this disclosure. The encoder  610   a  is similar to the encoder  510  of  FIG. 5A  and the encoder  510   a  of  FIG. 5B . The encoder  610   b  is similar to the encoder  510  of  FIG. 5A  and the encoder  510   c  of  FIG. 5E .  FIG. 6C  illustrates a detailed block diagram of a decoder  650  in accordance with an embodiment of this disclosure. For example, the decoder  650  is similar to the decoder  550  of  FIG. 5A , the decoder  550   a  of  FIG. 5F , the decoder  550   b  of  FIG. 5G , and the decoder  550   c  of  FIG. 5H . 
     The encoder  610   a  of  FIG. 6A  receives the mesh  505  and generates a bitstream  549   a . The bitstream  549   a  can include multiple bitstreams and can be transmitted via the network  502  of  FIG. 5A  to another device, such as the decoder  550  or an information repository. The encoder  610   a  includes a patch generator  622 , a frame packing  624 , various frames (such as one or more geometry frames  626 , one or more attribute frames  636 , and one or more occupancy map frames  628 ), one or more encoding engines  630 , a vertex index updated  640 , a connectivity encoder  644 , a reordering encoder  644   a , and a multiplexer  638 . 
     A demultiplexer, such as the demultiplexer  512  of  FIG. 5B  separates the connectivity information of the mesh  505  from the vertex coordinates and attributes. The patch generator  622  generates patches by taking projections of the vertices of the mesh  505 . In certain embodiments, the patch generator  622  splits the geometry attribute and each attribute of each point of the mesh  505 . The patch generator  622  can use two or more projection planes, to cluster the vertices of the mesh  505  to generate the patches. The geometry attribute and each attribute are eventually packed into respective geometry frames  626  or the attribute frames  636 . 
     The vertex coordinates are clustered using one or more criteria. The criteria include a normal direction, a distance to projected frames, contiguity, and the like. After the vertices are clustered, the geometry attribute for each vertex is projected onto planes, such as the XY plane, the YZ plane, or the XZ plane. 
     The frame packing  624  sorts and packs the geometry patches into the geometry frames  626 . The geometry frames  626  are similar to the frame  440  of  FIG. 4F . The frame packing  516  also generates one or more occupancy map frames  628  based on the placement of the patches within the geometry frames  626 . 
     The geometry frames  626  include pixels representing the geometry values of the vertices of the mesh  505 . The geometry frames  626  represent the geographic location of each vertex of the mesh  505 . In certain embodiments, padding is included in the geometry frames  626 . 
     The occupancy map frames  628  represent occupancy maps that indicate the valid pixels in the geometry frames  626 . For example, the occupancy map frames  628  indicate whether each pixel in a frame is a valid pixel or an invalid pixel. The valid pixels correspond to pixels that represent vertices of the mesh  505 . The invalid pixels are pixels within a frame that do not represent vertices of the mesh  505  and correspond to inter-patch spaces. For example, when the frame packing  624  generates the occupancy map frames  628 , the occupancy map frames include predefined values, such as zero or one, for each pixel. When the value of a pixel in the occupancy map at position (u, v) is zero, then the pixel at (u, v) in the geometry frame  626  is invalid. When the value of a pixel in the occupancy map at position (u, v) is one, then the pixel at (u, v) in the geometry frame  626  is valid. 
     After the geometry frames  626  and the occupancy map frame  628  are generated, the frames are encoded using the encoding engines  630 . In certain embodiments. In certain embodiments, the frames (such as the geometry frames  626  and the occupancy map frames  628 ) are encoded by independent encoders. For example, one encoding engine  630  can encode the geometry frames  626  and another encoding engine  630  can encode the occupancy map frames  628 . In certain embodiments, the encoding engines  630  can be configured to support an 8-bit, a 10-bit, a 12-bit, a 14-bit, or a 16-bit, precision of data. The encoding engine  630  can be a video or image codec such as HEVC, AVC, VP9, VP8, VVC, and the like to compress the 2D frames representing the 3D point cloud. 
     After the geometry frames  626  and the occupancy map frames  628  are encoded by the encoding engines  630 , they are decoded and reconstructed. The encoder  610   a  reconstructs the vertices of the mesh  505  to generate the attribute frames. For example, the reconstructed geometry frames  632  and the reconstructed occupancy map frames  634  are used to reconstruct the vertices in 3D space. Each attribute associated with the mesh are interpolated based on the location of the vertices in the reconstructed mesh and the mesh  505 , since the vertices of the can shift reconstructed mesh can shift when the frames are encoded and subsequently decoded. 
     The frame packing  624  uses the same patches that were used in the geometry frames to generate the attribute patches. For example, for each vertex of the mesh  505  that is represented by a pixel in a geometry patch, can be similarly represented by a pixel in a color patch. For example, a vertex that is represented by a pixel value at position (u, v) in the geometry frame can also be represented by a pixel at position (u, v) in the attribute frame that is assigned a value representing the color. Color represents a single attribute of each vertex of a given mesh. For example, if the geometry frame  626  indicates where each vertex of the mesh  505  is in 3D space, then each corresponding attribute frame  636  indicates a corresponding attribute of the mesh  505 . In certain embodiments, for each geometry frame  626  at least one corresponding attribute frame  636  is generated. 
     The vertex index update  640  is similar to the vertex index update  540  of  FIG. 5B . For example, the vertex index updater  640  generates a map relating the vertices from the vertex attribute information of the mesh  505  to the vertex indices of the reconstructed geometry frames  632 . 
     The connectivity encoder  644  is similar to the connectivity encoder  544  of  FIG. 5B . For example, the connectivity encoder  644  encodes the connectivity information of the mesh  505  based on the index order mapping generated by the vertex index updater  640 . The connectivity encoder  644  generates the encoded connectivity information  656   a.    
     The reordering encoder  644   a  can include the reverse mapper  546  of  FIG. 5B , which reverses vertex traversal map. The reordering encoder  644   a  can also encode the reordering information. 
     The multiplexer  638  can be similar to the multiplexer  548   a  of  FIG. 5B . For example, the multiplexer  638  combines the encoded geometry frames  626 , the encoded occupancy map frames  628 , the encoded attribute frames  636 , the encoded connectivity information  645   a , and the encoded reordering information that was generated by the reordering encoder  644   a , to create a bitstream  549   a . In certain embodiments, after reconstructed geometry frames  632  are reconstructed, the encoder  610   a  can perform geometry smoothing. The geometry smoothing parameters can be multiplexed by the multiplexer  638  and included in the bitstream  549   a . In certain embodiments, the encoder  610   a  can also perform attribute smoothing for each attribute. Attribute smoothing parameters can then be multiplexed by the multiplexer  638  and included in the bitstream  549   a.    
     The encoder  610   b  of  FIG. 6B  receives the mesh  505  and generates a bitstream  549   c . The bitstream  549   c  can include multiple bitstreams and can be transmitted via the network  502  of  FIG. 5A  to another device, such as the decoder  550  or an information repository. The encoder  610   b  includes a raw patch generator  625 , one or more geometry frames  626  and one or more attribute frames  636 , one or more encoding engines  630 , a vertex index updated  640 , a connectivity encoder  644 , a reordering encoder  644   a , and a multiplexer  638 . 
     A demultiplexer, such as the demultiplexer  512   a  of  FIG. 5E  separates the connectivity information of the mesh  505  from the vertex coordinates and attributes. The raw patch generator  625  generates a raw patch that represents the vertex coordinates and stores the raw patch in the geometry frames  626   a . The geometry frames  626   a  that include the raw patch can be similar to the frame  445  of  FIG. 4G . 
     After the geometry frames  626   a  are generated, the frames are encoded using the encoding engines  630 . The encoding engine  630  can be a video or image codec such as HEVC, AVC, VP9, VP8, VVC, and the like to compress the 2D frames representing the 3D point cloud. 
     After the geometry frames  626   a  are encoded by the encoding engines  630 , they are decoded and reconstructed. The encoder  610   a  reconstructs the vertices of the mesh  505  to generate the attribute frames  636   a . For example, the reconstructed geometry frames  632   a  are used to reconstruct the vertices in 3D space. Each attribute associated with the mesh are interpolated based on the location of the vertices in the reconstructed mesh and the mesh  505 , since the vertices of the can shift reconstructed mesh can shift when the frames are encoded and subsequently decoded. The interpolated values are stored in the raw patch of the attribute frames  636   a . The encoding engine  630  then encodes the attribute frames  636   a.    
     The raw patch generator  625  represents the attributes of the mesh  505  as a raw patch. For example, for each geometry frame  626   a  a corresponding attribute frame  636   a  is generated and includes a raw patch representing a single attribute of the mesh  505 . 
     The vertex index update  640  is similar to the vertex index update  540  of  FIG. 5B . For example, the vertex index updater  640  generates a map relating the vertices from the vertex attribute information of the mesh  505  to the vertex indices of the reconstructed geometry frames  632 . 
     The connectivity encoder  644  is similar to the connectivity encoder  544  of  FIG. 5B . For example, the connectivity encoder  644  encodes the connectivity information of the mesh  505  based on the index order mapping generated by the vertex index updater  640 . The connectivity encoder  644  generates the encoded connectivity information  656   a.    
     The reordering encoder  644   a  can include the reverse mapper  546  of  FIG. 5B , which reverses the vertex traversal map. The reordering encoder  644   a  can also encode the reordering information. 
     In certain embodiments, the connectivity encoder  644  encodes the connectivity information prior to the raw patch generator  625  generating the raw patch for the geometry frames  626   a . When the connectivity encoder  644  encodes the connectivity information prior to the raw patch generator  625  generating the raw patch for the geometry frames  626   a , then the raw patch generator  625  generates a raw patch based on the traversal order that the connectivity information is encoded. Therefore, when the raw patch generator  625  generates a raw patch based on the traversal order that the connectivity information is encoded, the vertex index update  640  and the reordering encoder  644   a  can be omitted from the  FIG. 5B . 
     The multiplexer  638   a  can be similar to the multiplexer  548   c  of  FIG. 5E . For example, the multiplexer  638   a  combines the encoded geometry frames  626   a , the encoded attribute frames  636   a , the encoded connectivity information  645   a , and the encoded reordering information that was generated by the reordering encoder  644   a , to create a bitstream  549   b.    
     It is noted that the encoder  610   a  of  FIG. 6A  and the encoder  610   b  of  FIG. 6B  are similar, as both encoders include a point cloud encoder and a connectivity encoder. However the point cloud encoder of the encoder  610   a  generates multiple patches that represent the mesh  505 , while the encoder  610   b  generates a single raw patch. 
     The decoder  650  of  FIG. 6C  receives a bitstream  549  and generates a mesh  595 . The bitstream  549  can be similar to the bitstream  549   a  of  FIGS. 5B, 5F, and 6A , the bitstream  549   b  of  FIGS. 5C, 5G , or the bitstream  549   c  of  FIGS. 5E and 5H . The bitstream  549  can include multiple bitstreams. 
     The demultiplexer  652  is similar to the demultiplexer  552  of  FIGS. 5F, 5G , and  5 H. The demultiplexer  652  separates bitstream  549  into one or more bitstreams representing the different frames, the connectivity information, and the reordering information. 
     For example, the demultiplexer  552  separates various streams of data such as the geometry frame information  670 , attribute frame information  672 , the occupancy map information  674  (if the occupancy map information as included in the bitstream), the encoded connectivity information  682 , and the encoded reordering information  684  (if the reordering information as included in the bitstream). 
     The decoding engines  676  decode the geometry frame information  670  to generate the geometry frames  626   a . The decoding engines  676  decode the attribute frame information  672  to generate the attribute frames  636   a . Similarly, the decoding engines  676  decode the occupancy map information  674  to generate the occupancy map frames  628   a . In certain embodiments, a single decoding engine  676  decodes the geometry frame information  670 , the attribute frame information  672 , and the occupancy map information  674 . In certain embodiments, the bitstream  649  does not include the occupancy map information  674 . 
     After the geometry frame information  670 , the attribute frame information  672 , and the occupancy map information  674  are decoded, the reconstruction engine  680  reconstructs the vertices of the mesh  505 . The reconstructed vertices of the mesh resemble a point cloud, since the vertices are points located in 3D space. When geometry smoothing parameters are included in the bitstream  549 , the decoder  610  performs geometry smoothing after the geometry and attribute of the vertices are reconstructed. Similarly, when attribute smoothing parameters are included in the bitstream  549 , the decoder  610  performs attribute smoothing. The attribute smoothing is performed after geometry smoothing. 
     The connectivity decoder  660  is similar to the connectivity decoder  560  of  FIGS. 5F, 5G, and 5H . The connectivity decoder  560  decodes the compressed connectivity information to generate reconstructed connectivity information. 
     When the reordering information  684  is included in the bitstream  549 , then the reordering information decoder  665  decodes the reordering information  684 . Reordering information decoder  665  is similar to the reordering information decoder  565  of  FIGS. 5F  and  5 G. It is noted that the reordering information  684  may not be included in the bitstream  549 , such as the bitstream  549   c  of  FIG. 5E . 
     The vertex index updater  640  updates the connectivity information. The vertex index updater  640  is similar to the vertex index updater  562  of  FIG. 5F  or the vertex index updater  564  of  FIG. 5G . The vertex index updater  640  updates the vertices associated with the reconstructed vertex coordinates. 
     The decoder  650  uses the connectivity information  688  and the reconstructed vertices to generate the mesh  595 . For example, the decoder  650  applies the connectivity information to the corresponding vertices such that the mesh can be reconstructed. 
     Although  FIGS. 5A-6C  illustrate examples of transmitting a point cloud various changes may be made to  FIGS. 5A-6C . For example, additional components can be included in the encoder  510  and the decoder  550 . For another example, components can be omitted from the encoder  510  and the decoder  550 . 
       FIG. 7A  illustrates an example adaptive mesh in accordance with an embodiment of this disclosure. In particular,  FIG. 7A  illustrates a portion of a mesh  710  and a portion of an adaptive mesh  730 . The mesh  710  can be a portion of a larger mesh such as the mesh  505  of  FIGS. 5B, 5C, 5E, 6A, and 6B . Similarly, the adaptive mesh  730  can be a portion of the mesh  595  of  FIGS. 5F, 5G, 5G, and 6C . It is noted that although the mesh  710  and  730  are illustrated in two dimensions, the mesh is three dimensions. 
       FIG. 7B  illustrates an example method  750  of generating the adaptive mesh  730  in accordance with an embodiment of this disclosure. The method  750  can be performed by the server  104  or any of the client devices  106 - 116  of  FIG. 1 , the server  200  of  FIG. 2 , the electronic device  300  of  FIG. 3 , the encoder  510  of  FIG. 5A  the encoder  510   a  of  FIG. 5B , the encoder  510   c  of  FIG. 5C , the encoder  510   c  of  FIG. 5E , the encoder  610   a  of  FIG. 6A , the encoder  610   b  of  FIG. 6B , or any other suitable device or system. For ease of explanation, the method  750  is described as being performed by the encoder  510  of  FIG. 5A . 
     As illustrated the mesh  710  includes vertices, such as the vertices  712 ,  714 ,  716 , and  718 . The mesh  710  also includes the connectivity information such as the edge  720  and  722 . The edge  720  connects the vertices  712  and  714  and the edge  722  connects the vertices  716  and  718 . The edges, such as the edge  720  and the edge  722  represent the connectivity information the edges provide the information as to which vertex is connected to another vertex. 
     An encoder (such as the encoder  510 ) can determine not to encode and transmit all of the vertex connectivity information for a given mesh. Rather, an encoder can select certain connectivity information. When the encoder does not transmit a portion of the connectivity information, then an adaptive mesh  730  is reconstructed by the decoder (such as the decoder  550  of  FIG. 5A and 650  of  FIG. 6C ). 
     In certain meshes, the vertices may not be evenly distributed, as such, the length of each edge can vary throughout a mesh, and subsequently the area of each face can vary throughout a mesh. The encoder can determine to selects certain connectivity information to be transmitted with the vertices. Similarly, the encoder can determine not to select certain connectivity information. For example, the bitrate of a mesh can be reduced for areas of the mesh that include a high point density by dropping the connectivity and encoding that area of the mesh as point cloud. The rendering quality improves for areas of a mesh with low point density by keeping the connectivity information and encoding the 3D object as a mesh 
     In certain embodiments, the encoder can identify for vertices that are evenly distributed (such as the areas  732  and  734 ) and determine not to transmit the connectivity information, such as the areas  732  and  734 . At the decoder, the connectivity for those areas is restored using a surface reconstruction technique. However, the encoder can also identify vertices that are not evenly distributed, such as the area  736 , and determine to transmit to a decoder the connectivity information for a portion of the mesh that corresponds to the area  736 . 
     In certain embodiments, as described in the method  750  of  FIG. 7B  an encoder (such as the encoder  510  of  FIG. 5A ) can compare the area of each face of the mesh to a threshold when determining whether to transmit the mesh connectivity information. In step  752 , the encoder identifies all of the polygons. A polygon is similar to the face as illustrated in  FIG. 4C . In step  754 , the encoder then compares the area of each polygon to a threshold. 
     When the area is of the polygon is larger than a threshold, then in step  756 , the encoder determines to transmit both the vertices and the connectivity information. When transmitting the vertices and the connectivity information the reconstructed mesh will be similar to the area  736  of  FIG. 7A  and resemble a mesh. For example, when the area of the polygon is large, indicates a low point density (vertex density) and therefore the connectivity information will improve the visual appearance of the mesh. 
     When the area is less than the threshold, then in step  758 , the encoder determines to transmit vertices but not transmit the connectivity information. When only the vertices for certain polygons are transmitted, the reconstructed mesh for that area will be similar to the areas  732  and  734  of  FIG. 7A  and resemble a point cloud. For example, when the area of the polygon is smaller than the threshold indicates that the point density (vertex density) is high, and therefore the connectivity information does not improve the visual appearance of the mesh. 
     In certain embodiments, a local smoothness factor is used to determine rendering a local region of a mesh as a mesh or point cloud. An encoder (such as the encoder  510  of  FIG. 5A ) can determine to send certain vertices and certain connectivity information based on the local smoothness factor. For example, a large flat area, such as a wall, can be rendered as a single polygon rather than a point cloud or many smaller polygons. 
     Although  FIGS. 7A and 7B  illustrate one example of an adaptive mesh and a method thereof, various changes may be made to  FIGS. 7A and 7B . For example, while the method  750  is shown as a series of steps, various steps in  FIG. 7B  could overlap, occur in parallel, or occur any number of times. 
       FIG. 8  illustrates a diagram of inner patch connectivity in accordance with an embodiment of this disclosure. In particular,  FIG. 8  illustrates a patch  800  and a derived mesh  810 . The patch  800  can be a patch of the point cloud  410  of  FIG. 4D , or a portion of the adaptive mesh  730  of  FIG. 7A  or a patch of the mesh where the connectivity information was not transmitted in the bitstream. The derived mesh  810  can be similar to the mesh  595  of  FIGS. 5F .  5 G.  5 H, and  6 C. 
     An encoder, such as the encoder  510  of  FIG. 5A , can encode the inter-patch connectivity information of each patch (generated by the point cloud encoder, such as the point cloud encoder  520  of  FIGS. 5B and 5C ) independently. The inter-patch connectivity information is the connectivity information that connects the vertices of one patch to another patch. In certain embodiments, the encoder may not transmit the inter-patch connectivity information of each patch. For example, when the inter-patch connectivity information is not transmitted, a decoder interconnects the neighboring pixels of each patch to reconstruct the mesh. 
     An encoder, such as the encoder  510  of  FIG. 5A , can encode the inner-patch connectivity information of each patch (generated by the point cloud encoder, such as the point cloud encoder  520  of  FIGS. 5B and 5C ) independently. Inner-patch connectivity information is the connectivity information that connects each vertex within a single patch. 
     In certain embodiments, the encoder can signal whether each patch (as generated by a point cloud encoder) is fully connected, not connected, or partially connected. A fully connected patch is a portion of the mesh, while a patch that is not connected is a point cloud. A partially connected patch can be similar to the adaptive mesh  730  of  FIG. 7A . 
     For a patch that is partially connected, an encoder will transmit the inner-patch connectivity. For a patch that is fully connected, the encoder can transmit an indication that the patch, when reconstructed, it is to be a mesh. That is, the encoder can transmit an indication that the patch, when reconstructed, is to be a mesh (and not a point cloud) even though the encoder does not transmit the connectivity information for that particular patch. Transmitting the indication instead of the connectivity information can reduce the size of the bitstream. When the decoder receives the indication that a particular patch is a mesh and does not receive any connectivity information associated with the patch, the decoder reconstructs the inner-patch connectivity information for that particular patch. To reconstruct the inner-patch connectivity information for that particular patch, the decoder can use a surface reconstruction technique such as Poisson surface reconstruction, parameterization-free projection for geometry reconstruction, and the like. In other embodiments, to reconstruct the inner-patch connectivity information for that particular patch, the decoder can use a 2D point traversal technique such as triangle strips. 
     For example, the patch  800  of  FIG. 8  can be decoded by a decoder, along with an indication that the patch is to be a mesh. The patch  800  includes multiple vertices (points), such as the vertex  802  and the vertex  804 . It is noted that when the decoder does not receive connectivity information for the patch  800 , the decoder derives the connectivity information, and generates the derived mesh  810 . The decoder uses the vertices of the patch, such as the vertex  802   a  and the vertex  804   a  to derive the connectivity information such as the edge  806 . 
     In certain embodiments, a flag is signaled per polygon to indicate whether the predicted connections such as the connectivity information that was derived as illustrated in the derived mesh  810  are the right connections. If the flag is set to true, then the predicted connections are used to reconstruct the polygon connectivity in the decoder, else the actual connection information is sent. 
       FIG. 9A  illustrates example method  900  for encoding a point cloud in accordance with an embodiment of this disclosure. The method  900  can be performed by the server  104  or any of the client devices  106 - 116  of  FIG. 1 , the server  200  of  FIG. 2 , the electronic device  300  of  FIG. 3 , the encoder  510  of  FIG. 5A , the encoder  510   a  of  FIG. 5B , the encoder  510   b  of  FIG. 5C , the encoder  510   c  of  FIG. 5E , the encoder  610   a  of  FIG. 6A , the encoder  610   b  of  FIG. 6B , or any other suitable device or system. For ease of explanation, the method  900  is described as being performed by the encoder  510  of  FIG. 5A . 
     In step  902 , the encoder  510  separates the connectivity information of a mesh from the vertex coordinates and the vertex attribute. The mesh includes vertex indices that relate the connectivity information to each vertex. When the connectivity information is separated from the vertices, the vertices resemble a point cloud. 
     In step  904 , the encoder  510  generates a first frame and a second frame that include one or more patches. The patches within a frame can be multiple regular patches, a raw patch, or a combination thereof. A regular patch visually represents a portion of the mesh, while a raw patch is visually represented as a block in data in the frame. The patch or patches included in the first frame represent the vertex coordinates of the mesh, while the patch or patches included in the second frame represent an attribute of the vertices of the mesh. For example, the patches in the frames can include at least one regular patch and no raw patches. For another example, the patches in the frames can include at least one regular patch and a raw patch. For yet another example, the frames can include a single raw patch and no regular patches. 
     In step  906 , the encoder  510  encodes the first and second frames using a video encoder. The video encoder can be configured to encode point clouds. In certain embodiments, the encoder  510  encodes the first frame that represents the vertex coordinates, and then decodes the first frame. After decoding the first frame, the encoder  510  reconstructs the vertices. The encoder  510  uses the reconstructed vertices to interpolate the attribute values from the original mesh and then generates the second frame based on the interpolated values. After the frames are encoded, the encoder  510  can multiplex the frames into a first bitstream. 
     In step  908 , the encoder  510  encodes the vertex connectivity information and generates a second bitstream. In certain embodiments, the connectivity information is encoded based on the order that the vertex coordinates were encoded. For example, after the first frame is encoded and decoded, the encoder  510  reconstructs the vertex coordinates based on the decoded first frame. The encoder  510  then updates the vertex index coordinates from the reconstructed vertex coordinates. The encoder  510  uses the updated vertex index when the connectivity information is encoded. 
     When the connectivity information is encoded using the updated vertex index (which is based on the reconstructed vertex coordinates), the encoder  510  can generate a vertex traversal map. The vertex traversal map relates the traversal order of the encoded connectivity information to a vertex order of the updated vertex indices. In certain embodiments, the encoder  510  then modifies the vertex traversal map by reverse mapping the vertex traversal map. In other embodiments, the encoder  510  does not modify the vertex traversal map via reverse mapping. If the vertex traversal map is reversed, the reversed traversal map is included in the second bitstream. Alternatively, if the vertex traversal map is not reversed, then the vertex traversal map is included in the second bitstream. 
     In certain embodiments, the encoder  510  encodes the connectivity information before generating the first and second frames. When the connectivity information is encoded first, the encoder  510  generates the frames that include a raw patch and no regular patches. The raw patch is based on the traversal order of the encoded connectivity information. 
     In certain embodiments, the encoder  510  selects and encodes a subset of the connectivity information, while another subset of the connectivity information is not encoded. The portion of the connectivity information that is encoded is included in the generated second bitstream. 
     For example, the processor is configured to compare the area of each polygon of the mesh to a threshold. Based on the comparison, the encoder  510  determines whether to include the connectivity information for that polygon in the compressed bitstream. When the area is larger than the threshold, the encoder  510  will encode the connectivity information for that polygon. When the area is smaller than the threshold, the encoder  510  may determine not to encode connectivity information for that polygon. Any connectivity information that is not encoded is not included in the second bitstream and subsequently not included in the compressed bitstream that is generated in step  910 . 
     For another example, the encoder  510  identifies whether a patch is fully connected. A patch is fully connected when connectivity information relates each vertex to another vertex. A patch is not fully connected when a portion of the connectivity information is absent. For instance, certain portions of the mesh may not include connectivity information. When a patch is not fully connected, then the encoder  510  encodes the available encoded connectivity information. Alternatively, when the patch is fully connected, the encoder can determine not to encode connectivity information for that patch. When the connectivity information for a patch is not encoded, it is not transmitted to a decoder, such as the decoder  550 , such that the decoder  550  would derives the mesh. 
     In step  910 , the encoder  510  generates a compressed bitstream by combining the first bitstream and the second bitstream. In certain embodiments, the encoder  510  does not include the second bitstream, or includes a portion of the second bitstream, when generating the compressed bitstream. In step  912 , the encoder  510  transmits the bitstream. The bitstream can be ultimately transmitted to a decoder, such as the decoder  550  of  FIG. 5B . 
       FIG. 9B  illustrates example method  950  for decoding a point cloud in accordance with an embodiment of this disclosure. The method  950  can be performed by the server  104  or any of the client devices  106 - 116  of  FIG. 1 , the server  200  of  FIG. 2 , the electronic device  300  of  FIG. 3 , the decoder  550  of  FIG. 5A , the decoder  550   a  of  FIG. 5F , the decoder  550   b  of  FIG. 5G , the decoder  550   c  of  FIG. 5H , the decoder  650  of  FIG. 6C , or any other suitable device or system. For ease of explanation, the method  950  is described as being performed by the decoder  550  of  FIG. 5A . 
     The method  950  begins with the decoder  550  receiving a compressed bitstream (step  952 ). The received bitstream can include encoded connectivity information, the encoded point cloud that was mapped onto multiple 2D frames. In step  954 , the decoder  550  separates the compressed bitstream into two bitstreams. The first bitstream can include the encoded vertex coordinates and attributes and the second bitstream can include the connectivity information. 
     In step  956 , the decoder  550  decodes the connectivity information from the second bitstream. In step  958 , the decoder  550  decodes the first and second frames. The first and second frames include regular patches, raw patches, or a combination thereof. A regular patch visually represents a portion of the mesh, while a raw patch is visually represented as a block in data in the frame. The decoder  550  can use a connectivity decoder to decode the connectivity information and a video decoder to decode the first and second frames. The video decoder can be configured to decode a point cloud. The first frame and the second frame can include patches. The patches in the first frame can represent the coordinate location of the vertices of the mesh and the patches in the second frame can represent an attribute of the mesh. 
     In step  960 , the decoder  550  reconstructs the point cloud based on the first and second frames. For example, the decoder  550  using a using the video decoder configured to reconstruct a point cloud, identifies the coordinates for each vertex based on the location and value of the pixels pixel in the first frame, and places the vertex in 3D space to generate a point cloud. The decoder  550  can then apply the attribute to each vertex. 
     In certain embodiments, when the first and second frames include a raw patch and no regular patches, then decoder  550  reconstructs the point cloud using the raw that that is organized based on the traversal order of the connectivity information. 
     In certain embodiments, the decoder  550  determines from the connectivity information whether any of the patches are fully connected. The decoder can determine that a patch is fully connected when no connectivity information for that patch is included in the second bitstream. In response to determining that a patch is fully connected, the decoder  550  reconstructs the inner patch connectivity information using triangle fans to fill connections for the first patch. 
     In certain embodiments, before the connectivity information is applied to the point cloud (in step  962 , below), the vertex index needs to be updated such that the index of the connectivity information matches the index of the reconstructed point cloud. 
     For example, the decoder  550  can separate and identify from the compressed bitstream a reverse vertex traversal map or a traversal map. When the reverse vertex traversal map is identified, the decoder  550  updates the vertex indices associated with the connectivity information based on the reverse vertex traversal map. When the traversal map is identified, the decoder  550  updates an ordering of the vertex coordinates and the vertex attribute associated with the reconstructed point cloud based on the vertex traversal map. It is noted that when the vertex traversal map or the reverse vertex traversal map is identified, the first and second frames include regular patches or a combination of regular patches and a raw patch. 
     In step  962 , the decoder  550  applies the connectivity information to the reconstructed point cloud to reconstruct the mesh. For example, the decoder  550  generates the mesh based on the frame representing the vertex coordinates, the frames representing a vertex attribute and the connectivity information. For example, the connectivity information connects the vertices in 3D space. Then the decoder  550  applies weighted attribute information of each vertex to its associated face. 
     Although  FIG. 9A  illustrates one example for mesh encoding, and  FIG. 9B  illustrates one example for mesh decoding, various changes may be made to  FIGS. 9A and 9B . For example, while shown as a series of steps, various steps in  FIGS. 9A and 9B  could overlap, occur in parallel, or occur any number of times. 
     Although the figures illustrate different examples of user equipment, various changes may be made to the figures. For example, the user equipment can include any number of each component in any suitable arrangement. In general, the figures do not limit the scope of this disclosure to any particular configuration(s). Moreover, while figures illustrate operational environments in which various user equipment features disclosed in this patent document can be used, these features can be used in any other suitable system. 
     Although the present disclosure has been described with an exemplary embodiment, various changes and modifications may be suggested to one skilled in the art. It is intended that the present disclosure encompass such changes and modifications as fall within the scope of the appended claims. None of the description in this application should be read as implying that any particular element, step, or function is an essential element that must be included in the claims scope. The scope of patented subject matter is defined by the claims.