Three-dimensional (3D) virtual worlds (for example, World Of Warcraft, Second Life, Runescape, etc.) allow users to enter and move about, as well as interact with other users and objects, within a three-dimensional virtual environment. Such 3D virtual worlds systems generally operate in the following manner:
1) They require a 3D rendering engine to be resident on the client's system in order to render a user's viewport into the 3D world.
2) The 3D rendering software further requires that the client machine have certain graphics processing capabilities which allow the 3D world to be rendered on the local machine. The more complex the world, the more powerful the client device's graphics capabilities must be.
3) In order for a user to view a scene on her local system, the 3D rendering engine must have access to the assets necessary to build the scene accurately. Such assets typically include geometry mesh data (vertices, index and attribute buffers), material and shader definitions (including procedural shaders), and texture maps. As scene complexity increases, the amount of data required to render a scene on a local client increases as well. Assets for such complex virtual worlds are often included in a download or DVD that the user must first install before the 3D rendering engine on the local client can begin rendering a scene. Therefore, the more complex and dense the virtual world, the more data the user must either have installed or download on their system. Instantaneous virtual world rendering systems that depend on streaming render assets for client-side rendering may introduce objectionable visual artifacts as a viewport is procedurally refreshed with new textures and meshes that replace placeholder versions.
4) Virtual world systems generally use a centralized server system to persistently maintain the state of the world. State data from these servers are continuously sent to each client when needed (including position, orientation, velocity and dynamics of objects within the world) in order for each viewport to remotely render the scene on the client's local machine. If all clients have the same assets, and the same hardware graphics capabilities, visual parity across each client viewport is possible.
However, the overhead of synchronizing states across each user's viewport when the client systems are not homogenous can become problematic in many cases, as the visual representation of the same viewport may vary across each client, based on the client's local graphics capabilities. For example, if a faceted 3D object is tessellated and smoothed in hardware on a client system which supports curved patch tessellation, the silhouette of the object may appear to be significantly different than the silhouette of the same object on a client that does not support tessellation. In the latter case, the client would be forced to render the 3D object with a faceted outline. These differences can create objectionable discontinuities among remotely rendered viewports in cases where collision detection is performed by the server on the aforementioned 3D object. If the server performs collision detection using the smooth tessellated version of the object, and then transmits this singular result to each client, the visual representation of the point of impact and bounce vector from the collision may not appear to correspond to a valid point and slope on the surface of the object from the point of view of a user displaying the scene without tessellation. This can become even more objectionable, when the tessellation is performed on a macroscopic object such as terrain, where control of vehicles or avatars depends heavily on an accurate representation of the ground surface. These types of discontinuities between the state of world on the server, and the visual representation on an arbitrary client, increases significantly as a 3D virtual world becomes more complex, and the range of client devices that need to be supported expands to mobile phones, TV set top boxes and other hardware that may have limited or no 3D graphics capabilities on the local machine.