Rendering terrain patches

Systems, methods, and computer storage mediums are provided for blending custom terrain patches onto a terrain of a virtual three-dimensional environment. A method includes accessing terrain data that describes a mesh representing the surface of the terrain of the three-dimensional environment. The mesh is constructed of primitives that are defined by a terrain altitude at each vertex. A surface grid is determined from the primitives such that each point in the surface grid includes the terrain altitude where the point falls on the mesh. Custom terrain data is also accessed that includes a custom grid of terrain altitudes. A patch grid is determined from the custom grid such that each point in the patch grid includes a terrain altitude derived from the custom grid. The patch and surface grids are blended such that each terrain altitude in the patch grid modifies its corresponding terrain altitude in the surface grid.

FIELD

The embodiments described herein generally relate to generating and rendering three-dimensional environments.

BACKGROUND

Geographic information systems allow users to download, view, and interact with geo-referenced data. The geo-referenced data may be provided to a user through a three-dimensional environment displayed on the user's computer system. The user may interact with the geo-referenced data by selecting geographic features, navigating through the three-dimensional environment, or selecting layers or sets of data for display. The geo-referenced data may be stored at a shared geographic database that is accessed by one or more geographic information servers. Layers or sets of data that may be displayed with the three-dimensional environment may be created by the user or provided by a third party. The layers or sets of data, however, may not allow the user to modify the terrain of the environment.

BRIEF SUMMARY

The embodiments described herein include systems, methods, and computer storage mediums for blending custom terrain patches onto a surface of a terrain of a three-dimensional environment. A method includes accessing terrain data that describes a mesh representing the surface of the terrain of the three-dimensional environment. The mesh is constructed of primitives and each primitive is defined by a terrain altitude at each of the primitive's vertices. A surface grid is determined from the primitives that overlap an area defined by a custom terrain grid. The surface grid is determined such that each point in the surface grid includes the terrain altitude according to where the point in the surface grid falls on the mesh. Custom terrain data is also accessed. The custom terrain data includes a plurality of terrain altitudes arranged in a custom terrain grid. The boundary of the custom terrain grid defines an area of the surface. A patch grid is determined from the custom terrain grid such that each point in the patch grid includes a terrain altitude derived from the custom terrain grid. A resolution and an area of the patch grid corresponds to a resolution and an area of the surface grid such that each point in the patch grid aligns with a point in the surface grid. The patch grid and the surface grid are blended such that each terrain altitude in the patch grid modifies its aligned terrain altitude in the surface grid.

Further features and advantages of the embodiments described herein, as well as the structure and operation of various embodiments, are described in detail below with reference to the accompanying drawings.

DETAILED DESCRIPTION

Embodiments described herein may be used to blend custom terrain patches onto a surface of a terrain of a three-dimensional environment. Terrain patches may be inserted or otherwise included in a three-dimensional environment in order to modify the terrain of the three-dimensional environment in some way. For example, a user of the three-dimensional environment may want to use a terrain patch as an educational tool to show various features or layers of the terrain. To accomplish this, the user may design a terrain patch that represents an individual peak of a mountain range rendered in the three-dimensional environment such that half of the peak is flat. Such an example is represented inFIG. 1A. The user may also design a terrain patch that renders the peak with various colors that represent layers of geological features. Such an example is represented inFIG. 1B. Other uses for terrain patches may include, for example, modifying the height of the terrain of the three-dimensional environment to show geological shift or erosion over time. These uses are merely provided as examples and are not intended to limit the embodiments described herein.

The following detailed description, references to “one embodiment,” “an embodiment,” “an example embodiment,” etc., indicate that the embodiment described may include a particular feature, structure, or characteristic. Every embodiment, however, may not necessarily include the particular feature, structure, or characteristic. Thus, such phrases are not necessarily referring to the same embodiment. Further, when a particular feature, structure, or characteristic is described in connection with an embodiment, it is submitted that it is within the knowledge of one skilled in the art to effect such feature, structure, or characteristic in connection with other embodiments whether or not explicitly described.

The following detailed description refers to the accompanying drawings that illustrate example embodiments. Other embodiments are possible, and modifications can be made to the embodiments within the spirit and scope of this description. Those skilled in the art with access to the teachings provided herein will recognize additional modifications, applications, and embodiments within the scope thereof and additional fields in which embodiments would be of significant utility. Therefore, the detailed description is not meant to limit the embodiments described below.

This Detailed Description is divided into sections. The first section describes examples of a three-dimensional environment with a terrain patch as well as various stages of deriving a terrain patch. The second and third sections describe example system and method embodiments, respectively, that may be used to blend custom terrain patches onto a surface of a terrain of a virtual three-dimensional environment. The fourth section describes an example computer system that may be used to implement the embodiments described herein.

Example Terrain Patches

FIG. 1Aillustrates an example three-dimensional (3D) environment100rendered with a terrain patch according to an embodiment. Environ ent100shows a terrain110that includes a mountain rendered from terrain data acquired from a geographic information system. Terrain110is comprised of a mesh of primitives where each primitive is a triangle. The triangles that make up the mesh are described by the terrain data. While triangles are used in environment100to create the mesh for terrain110, other polygons may also be used. Environment100also includes terrain patch120that, when applied to the terrain of environment100, flattens some of the terrain around and including the mountain. Terrain patch120is rendered from a mesh of primitives derived from custom terrain data retrieved from a storage device. The custom terrain data defines a custom grid that includes terrain altitudes at each point on the custom grid.

The terrain patch120is applied to terrain110by converting the mesh of primitives in terrain110to a surface grid. The surface grid is derived by determining a terrain altitude at the location of the mesh that corresponds to a point of the surface grid. The custom grid is converted to a patch grid that matches the resolution of the surface grid. The patch grid is derived by interpolating the terrain altitudes included in the custom grid based on the difference between the resolution of the custom grid and the patch grid. The terrain altitudes of the surface grid and patch grid are then blended using one of any number of blending techniques. Here, the blending technique replaced the terrain altitude of the surface grid with the corresponding terrain altitude from the patch grid.

FIG. 1Billustrates an example three-dimensional environment150rendered with an alternative terrain patch160according to an embodiment. Environment150includes a terrain patch160that describes color values that, when applied to the terrain, represent geological features and layers of a volcano. The color values are included in the custom terrain data along with terrain altitudes (e.g., height values) that approximate the unmodified terrain of environment150. Terrain patch160is applied to the terrain using a similar method used in environment100except that color data from the custom terrain data is blended with the terrain to show the geological features and layers.

FIGS. 2A-Fillustrate diagrams showing the process for generating and rendering a terrain patch in a three-dimensional environment according to an embodiment.FIG. 2Aillustrates a diagram200that includes tiles202a-dthat are a level of a quad tree structure. Each of tiles202a-drepresent a three-dimensional environment that includes a terrain rendered from terrain data received from a geographic information system. The terrain data describes primitives (e.g., triangles) that, when rendered, make up a mesh that represents the surface of the three-dimensional environment.

FIG. 2Billustrates a diagram210that includes tiles202a-d. In diagram210, however, the terrain mesh of tile202ais converted to surface grid212. Surface grid212includes terrain altitudes for one or more points of the terrain mesh. Surface grid212includes multiple rows and columns that may either be evenly spaced based on a distance or variably spaced between each row and/or column. In diagram210, the rows and columns are represented by the horizontal and vertical lines and the points are represented where each horizontal and vertical line intersect. The distance between the rows and columns may represent a distance in the three-dimensional environment or may represent a number of pixels used to render the environment.

The terrain altitude for a point in surface grid212is determined from the terrain mesh by applying surface grid212to the terrain mesh. One or more points in surface grid212are then determined by calculating the altitude or height of the terrain mesh where a point from the surface grid aligns with the terrain mesh. The point may be determined by interpolating the vertices of one or more primitives closest to where the point aligns with the terrain grid.

FIG. 2Cillustrates diagram220that represents custom terrain grid222derived from custom terrain data. The custom terrain data may be provided by a user, another third party, or the geographic information system. Custom terrain grid222includes multiple rows and columns represented by the horizontal and vertical lines. Custom terrain grid222also includes a terrain altitude at each point in the grid. The terrain altitude may be defined by either an absolute value or a relative value. Each point in custom terrain grid222may also include one or more alpha values that describe how the terrain altitudes are to be blended with the terrain altitudes from the surface grid. Color values and color blending value may also be included for each point.

FIG. 2Dillustrates diagram230that includes custom terrain grid222and patch grid232. Patch grid232is generated from custom terrain grid222. Patch grid232includes multiple rows and column represented by the horizontal and vertical lines. Patch grid232also includes points represented by where each horizontal and vertical line intersect. Patch grid232includes more rows, columns, and points than custom terrain grid222because patch grid232is created to match the resolution of the surface grid that the patch grid will be blended with. Here, patch grid232has the same resolution as surface grid212inFIG. 2B. The points in patch grid232include terrain altitudes derived from custom terrain grid222and may also include alpha values and color values also derived from custom terrain grid222. The terrain altitude, alpha value, and color value derived for each point may be determined by interpolating the points in the custom terrain grid that most closely align with a point in the patch grid. In diagram230, patch grid232corresponds to the same geographic area as custom terrain grid222. In some embodiments, however, the geographic area of patch grid232may be larger or smaller than the geographic area of custom terrain grid222. Additionally, patch grid232's geographic area may correspond to the geographic area of a tile of a quad tree structure that includes the geographic area of custom terrain grid222.

FIG. 2Eillustrates diagram240that includes blended grid242that results from blending surface grid212with patch grid232. Patch grid232may be blended with surface grid212by blending the terrain altitude of each two aligning points. The altitude values of the two aligning points may be blended based on the alpha value associated with the point from the patch grid. Color values from the patch grid may either be blended with or replace the color values associated with the surface grid.

FIG. 2Fillustrates diagram250that includes terrain mesh252. Terrain mesh252is derived from terrain grid242by generating primitives between the location of the points in terrain grid242. The location of a point in terrain grid242may thus be used as a vertex of a primitive. The altitude or height of the vertex is determined by using the terrain altitude from the corresponding point in terrain grid242. Here, terrain mesh252is made up of squares but terrain mesh252may instead be made of other types of primitives such as, for example, triangles.

FIGS. 1A-Band2A-F are provided as examples and are not intended to limit the embodiments described herein.

Example System Embodiments

FIGS. 3A and 3Beach illustrate example systems300and350, respectively that may be used to blend custom terrain patches onto a surface of a terrain of a three-dimensional environment. System300describes a client embodiment while system350describes a server embodiment. Each of systems300and350includes a respective computing device302, display device316, custom terrain database320, network330, and GIS server340. In system300, client device302includes data retriever304, surface terrain processor306, custom terrain manager308, custom terrain processor310, terrain blender312, and terrain renderer314. In system350, however, data retriever304, surface terrain processor306, custom terrain manager308, custom terrain processor310, and terrain blender312are each included in GIS server340instead of computing device302.

Computing device302may be implemented on any computing device capable of rendering a three-dimensional environment. Computing device302may include, for example, a mobile computing device (e.g. a mobile phone, a smart phone, a personal digital assistant (PDA), a navigation device, a tablet, or other mobile computing devices). Computing device302may also include, but is not limited to, a central processing unit, an application-specific integrated circuit, a computer, workstation, a distributed computing system, a computer cluster, an embedded system, a stand-alone electronic device, a networked device, a rack server, a set-top box, or other type of computer system having at least one processor and memory. A computing process performed by a clustered computing environment or server farm may be carried out across multiple processors located at the same or different locations. Hardware can include, but is not limited to, a processor, memory, and a user interface display.

Terrain renderer314, included in computing device302, is configured to render at least a portion of a three-dimensional environment that is displayed at display device316. Terrain renderer314may be implemented in software or may be implemented, at least in part, in hardware by, for example, computing device302's video card or graphics processor. Display device316may be implemented using any display or monitor that can display a video signal received from computing device302. While display device is shown in systems300and350as a separate device, some embodiments may include display device316in computing device302. Such embodiments may include, for example, laptop computers, tablet devices, and smart phones.

Network330may include any network or combination of networks that can carry data communication. These networks may include, for example, a local area network (LAN) or a wide area network (WAN), such as the Internet. LAN and WAN networks may include any combination of wired (e.g., Ethernet) or wireless (e.g., Wi-Fi, 3G, or 4G) network components.

GIS server340may include any geographic information system capable of serving geo-referenced data that includes terrain data. The geo-referenced data may also include, for example, maps, satellite images, information layers, three-dimensional globes, navigable paths, and any other type of geographic data. The geo-referenced data may be served using any number of communication protocols such as, for example, Hypertext Transfer Protocol (“HTTP”), Hypertext Transfer Protocol Secure (“HTTPS”), Web Map Service (“WMS”), Web Map Tile Service (“WMTS”), Web Feature Service (“WFS”), Web Coverage Service (“WCS”), Web Processing Service (“WPS”), or Web Catalog Service (“CWS”). The geo-referenced data may be retrieved from a geographic databases such as, for example, GIS database342. The geographic database may be implemented using a file storage application executed on GIS server340, a stand-alone database server, or a network of database servers.

GIS server340and GIS database342may be implemented using a single computer server system or a distributed network of computer server systems. Computer server systems may include computing devices with, for example, one or more central processing units, memory units, and/or application-specific integrated circuits. Examples of computer server systems may include a computer, a workstation, a distributed computing system, a computer cluster, an embedded system, a stand-alone electronic device, a networked device, a rack server, a set-top box, or another type of computer system having at least one processor and memory.

A. Data Retriever

Data retriever304is configured to access terrain data. The terrain data may be included with the geo-referenced data available from, for example, GIS server340or GIS database342. The terrain data describes a mesh that represents the surface of a terrain of a virtual three-dimensional environment. The mesh is constructed of primitives that are each defined by at least a location within the mesh and a terrain altitude. In some embodiments, the location of a primitive within the mesh is defined by a coordinate system such as, for example, x/y or latitude/longitude. In some embodiments, the terrain altitude for a primitive may include one value for the primitive or may include a value for each of the primitive's vertices.

Primitives that may be described by the terrain data include, for example, triangles, squares, or other polygons. For example, in embodiments where the terrain data describes triangles, each of the three vertices of a triangle may include a coordinate that describes the location of the vertex within the mesh and an altitude value that describes the height of the vertex. The terrain data may also include color data for at least a portion of a primitive. Alternatively, color data may be provided separately for one or more primitives.

B. Custom Terrain Manager

Custom terrain manager308is configured to access custom terrain data. The custom terrain data may be accessed from a custom terrain database such as, for example, custom terrain database320. Custom terrain database320may be implemented on an internal storage device included in computing device302, an external storage device operatively connected to computing device302, or as a networked storage device. Networked storage devices may include, for example, a storage server device accessible via a LAN or a storage server accessible via a WAN such as, for example, the Internet. In some embodiments, the custom terrain data may be associated with a user profile that includes privacy settings that control who may access and/or edit the custom terrain data.

The custom terrain data includes at least a plurality of terrain altitudes arranged in a custom terrain grid. A boundary of the custom terrain grid defines an area of the mesh that represents the surface of the virtual three-dimensional environment. The custom terrain grid may utilize the same coordinate system as the terrain data or may utilize a different coordinate system. If the coordinate systems utilized by the terrain data and the custom terrain data differ, custom terrain manager308, for example, may translate the custom terrain grid's coordinate system to a system compatible with the terrain data's coordinate system.

In some embodiments, the custom terrain grid may be defined by rows and columns where each row and column correspond to, respectively, a specific x/y or latitude/longitude coordinate. In some embodiments, each row and column may correspond to an essentially equivalent distance interval. In some embodiments, each row may correspond to an essentially equivalent distance interval while each column corresponds to a different essentially equivalent distance interval. In some embodiments, each row or column may correspond to a specific distance interval that may differ from an adjacent row's or column's distance interval. The distance intervals for the rows and columns may be included with the custom terrain data or may be associated with the custom terrain data as metadata.

In some embodiments, the custom terrain data also includes one or more alpha values for at least a portion of the terrain altitudes. The alpha values may be used to determine how much weight to give to an associated terrain altitude when blending the terrain altitudes, as will be described below. In some embodiments, the custom terrain data also includes color data and/or color blending data that describes one or more colors or coloring methods that may be applied to the custom terrain grid.

C. Surface Terrain Processor

Surface terrain processor306is configured to determine a surface grid from the primitives in the mesh that overlap the area defined by the custom terrain grid. The overlap between the custom terrain grid and the surface grid may be established, at least in part, based on user input. For example, computing device302may include a user interface that allows the user to load a custom terrain grid that can be selected and moved around the three-dimensional environment. As the user moves the custom terrain grid, the terrain of the three-dimensional environment may be patched and updated accordingly.

The resolution of the surface grid may be the same as the resolution used to render the terrain data, may match the resolution of the custom terrain grid, or may be a different resolution. In some embodiments, the area of the mesh that overlaps the area defined by the custom terrain grid may include one or more tiles at multiple depths of a quad tree structure, a portion of a single tile, or one or more portions of multiple tiles at the same level. If the overlapping area includes multiple tiles, a surface grid for each tile or a portion of each tile may be determined.

The surface grid is determined such that some of the points in the surface grid include a terrain altitude according to where the point in the surface grid falls on the mesh. Similar to the custom terrain grid, the surface grid includes rows and columns where the distance between each row and column may be essentially equivalent or specific for each row and/or column. In some embodiments, the distance between each row and/or column are based on the resolution of the terrain data such that each pixel rendered from the terrain data corresponds to a unique row and column (e.g., point).

Any number of methods may be used to determine the surface grid from the mesh. In embodiments where the terrain data and the surface grid utilize the same resolution, the terrain altitude of each vertex on the mesh may be copied to its corresponding point in the surface grid. If a point of the surface grid does not correspond to a vertex, however, a value may be inserted to indicate that no vertex was available. Alternatively, instead of inserting a “no vertex” value, a terrain altitude may be calculated by interpolating the terrain altitudes from the closest vertices in the mesh. Interpolation methods may also be used in embodiments where the surface grid utilizes a different resolution than the terrain data. For example, the terrain altitude for a point in the surface grid may be calculated by interpolating terrain altitudes of vertices from the primitives in the mesh that are closest to the point in the surface grid.

Once the surface grid is determined, a mesh of primitives derived from the surface grid may replace the corresponding area of the mesh derived from the terrain data. If the area defined by the surface grid corresponds to an entire tile of a quad tree structure, the terrain of the surface grid may replace the terrain of the tile. In some embodiments, if the area of the surface grid does not correspond to a single tile, the surface grid may be expanded to include the terrain of the entire tile. In some embodiments, a surface grid may be integrated into a tile or into neighboring tiles by forming new primitives around the edges of the surface grid that blend the mesh defined by the terrain data with the mesh defined by the surface grid.

D. Custom Terrain Processor

Custom terrain processor310is configured to determine a patch grid from the custom terrain grid such that each point in the patch grid includes a terrain altitude derived from the custom terrain grid. The area of the patch grid corresponds to the same area as the custom terrain grid but the patch grid may utilize a different resolution such as, for example, the resolution utilized by the surface grid. In cases where the surface grid and the patch grid utilize the same resolution, each point in the patch grid will align with a point in the surface grid.

Each point in the patch grid may be derived by interpolating terrain altitudes from points in the custom terrain grid. In some embodiments, custom terrain processor310is configured to interpolate the terrain altitudes from a group of points in the custom terrain grid that are closest to the location of the point in the surface grid. For example, if the custom terrain grid utilizes a lower resolution than the surface grid, the patch grid may be created such that it has same resolution as the surface grid. The patch grid may include the same number of rows and columns as the surface grid and each row and column may specify a coordinate that indicates the location of the point at each row and column. For each point in the patch grid, a group of points from the custom terrain grid that are closest to the location of a point in the patch grid may be identified. The terrain altitude of the point in the patch grid may then be derived by interpolating the identified group of points from the custom terrain grid based on the location and the terrain altitude of each point in the identified group.

A similar method may be used when the patch grid is at a lower resolution than the custom terrain grid. Alternatively, if the location of a point in the custom terrain grid matches the location of a point in the patch grid, the terrain altitude at the point in the custom terrain grid may be inserted into the matching point in the patch grid. If the resolution of the custom terrain grid matches the resolution of the surface grid, the step of creating a patch grid may be optional and instead, the terrain altitude at each point in the custom terrain grid may be inserted into the point in the surface grid with the same location.

In some embodiments, each point of the patch grid may also include an alpha value that is derived from the custom terrain grid. The alpha value may be determined from alpha values of points in the custom terrain grid using a similar interpolation method used to determine a terrain altitude. The alpha value may be used to determine the amount of weight to apply to an associated terrain altitude when blending the terrain altitude with a terrain altitude from a point of the surface grid. In some embodiments, an alpha value may be included only for points along the edge of the patch grid so the edge of the patch grid may be smoothly blended with the existing terrain.

In some embodiments, each point of the patch grid may also include a color value that is derived from the custom terrain grid. The color value may be determined from color values of points in the custom terrain grid using a similar interpolation method used to determine the terrain altitude. The color value may be used to establish an endpoint of a color range that may be used to blend color between vertices of a polygon.

Terrain blender312is configured to blend the patch grid and the surface grid such that each terrain altitude in the patch grid modifies its aligned terrain altitude in the surface grid. In embodiments where the resolution of the custom terrain grid matches the resolution of the surface grid, terrain blender312may be configured to modify terrain altitudes in the surface grid with corresponding terrain altitudes from the custom terrain grid. In this way, terrain blender312obtains a blended surface grid that combines, at least in part, the terrain altitudes from the surface and patch grids. In some embodiments, the extent to which a terrain altitude from the patch grid modifies its corresponding terrain altitude in the surface grid is based on an alpha value associated with the terrain altitude from the patch grid. For example, if a point of the patch grid has an alpha value representing 50 percent, the associated terrain altitude may be blended with the corresponding terrain altitude from the surface grid such that the blended terrain value is half way between the terrain altitudes from the surface grid and the terrain altitude from the patch grid.

Terrain blender312may also blend color values associated with corresponding points from the surface and patch grids. In some embodiments, a color value from the patch grid may replace the corresponding color value from the surface grid. In some embodiments, a color value from the patch grid may be blended with a color value from the surface grid using the alpha value associated with the point that includes the color value. In some embodiments the color value may be associated with an alpha value distinct from the alpha value used to blend terrain altitudes.

Various aspects of embodiments described herein can be implemented by software, firmware, hardware, or a combination thereof. The embodiments, or portions thereof, can also be implemented as computer-readable code. The embodiment in systems300and350are not intended to be limiting in any way.

Example Method Embodiments

FIG. 4is a flowchart illustrating a method400that may be used to blend custom terrain patches onto a surface of a terrain of a virtual three-dimensional environment according to an embodiment. While method400is described with respect to an embodiment, method400is not meant to be limiting and may be used it other applications. Additionally, method400may be carried out by, for example, system300inFIG. 3Aor system350inFIG. 3B.

Method400accesses terrain data that describes a mesh representing the surface of the terrain of the virtual three-dimensional environment (stage410). The mesh is constructed of primitives and each primitive is defined by a terrain altitude at each of the primitive's vertices. Primitives that make up the mesh may include triangles, squares, or other polygons. Stage410may be carried out by, for example, data retriever304embodied in systems300and350.

Method400also accesses custom terrain data (stage420). The custom terrain data includes a plurality of terrain altitudes arranged in a custom terrain grid. The custom terrain data may also include alpha values color values or other data that defines the custom terrain. The custom terrain grid defines an area of the surface of the three-dimensional environment. The area may be defined by a coordinate range of the three-dimensional environment. Stage420may be carried out by, for example, custom terrain manager308embodied in systems300and350.

Method400also determines a surface grid from the primitives that overlap the area defined by the custom terrain grid such that each point in the surface grid includes the terrain altitude according to where the point in the surface grid falls on the mesh (stage430). The terrain altitude for the point in the surface grid may be determined by interpolating the altitude or height of the vertices closest to the location where the point aligns with the mesh. Stage430may be carried out by, for example, surface terrain processor306embodied in systems300and350.

Method400also determines a patch grid from the custom terrain grid such that each point in the patch grid includes a terrain altitude derived from the custom terrain grid (stage440). The area of the patch grid corresponds to the area of the custom terrain grid and the resolution of the patch grid corresponds to the resolution of the surface grid such that each point in the patch grid aligns with a point in the surface grid. The patch grid may also include alpha values or other data for each point that is derived from the custom terrain grid. The data for each point in the patch grid may be determined by interpolating the points in the custom terrain grid that most closely align with the point in the patch grid. Stage440may be carried out by, for example, custom terrain processor310embodied in systems300and350.

Finally, method400blends the patch grid and the surface grid such that each terrain altitude from the patch grid modifies its aligned terrain altitude from the surface grid (stage450). The terrain altitude from the patch grid may be blended with the terrain altitude from the surface grid based, at least in part, on an alpha value associated with the terrain altitude from the patch grid. Stage450may be carried out by, for example, terrain blender312embodied in systems300and350.

Example Computer System

FIG. 5illustrates an example computer500which the embodiments described herein, or portions thereof, may be implemented as computer-readable code. For example, data retriever304, surface terrain processor306, custom terrain manager308, custom terrain processor310, terrain blender312, or terrain renderer314may each be implemented in one or more computer systems500using hardware, software, firmware, computer readable storage media having instructions stored thereon, or a combination thereof.

One of ordinary skill in the art may appreciate that embodiments of the disclosed subject matter can be practiced with various computer system configurations, including multi-core multiprocessor systems, minicomputers, mainframe computers, computers linked or clustered with distributed functions, as well as pervasive or miniature computers that may be embedded into virtually any device.

For instance, a computing device having at least one processor device and a memory may be used to implement the above described embodiments. A processor device may be a single processor, a plurality of processors, or combinations thereof. Processor devices may have one or more processor “cores.”

As will be appreciated by persons skilled in the relevant art, processor device504may be a single processor in a multi-core/multiprocessor system, such system operating alone, or in a cluster of computing devices operating in a cluster or server farm. Processor device504is connected to a communication infrastructure506, for example, a bus, message queue, network, or multi-core message-passing scheme. Computer system500may also include display interface502and display unit530.

Computer system500also includes a main memory508, for example, random access memory (RAM), and may also include a secondary memory510. Secondary memory510may include, for example, a hard disk drive512, and removable storage drive514. Removable storage drive514may include a floppy disk drive, a magnetic tape drive, an optical disk drive, a flash memory drive, or the like. The removable storage drive514reads from and/or writes to a removable storage unit518in a well-known manner. Removable storage unit518may include a floppy disk, magnetic tape, optical disk, flash memory drive, etc. which is read by and written to by removable storage drive514. As will be appreciated by persons skilled in the relevant art, removable storage unit518includes a computer readable storage medium having stored thereon computer software and/or data.

In alternative implementations, secondary memory510may include other similar means for allowing computer programs or other instructions to be loaded into computer system500. Such means may include, for example, a removable storage unit522and an interface520. Examples of such means may include a program cartridge and cartridge interface (such as that found in video game devices), a removable memory chip (such as an EPROM, or PROM) and associated socket, and other removable storage units522and interfaces520which allow software and data to be transferred from the removable storage unit522to computer system500.

Computer system500may also include a communications interface524. Communications interface524allows software and data to be transferred between computer system500and external devices. Communications interface524may include a modem, a network interface (such as an Ethernet card), a communications port, a PCMCIA slot and card, or the like. Software and data transferred via communications interface524may be in the form of signals, which may be electronic, electromagnetic, optical, or other signals capable of being received by communications interface524. These signals may be provided to communications interface524via a communications path526. Communications path526carries signals and may be implemented using wire or cable, fiber optics, a phone line, a cellular phone link, an RF link or other communications channels.

In this document, the terms “computer storage medium” and “computer readable storage medium” are used to generally refer to media such as removable storage unit518, removable storage unit522, and a hard disk installed in hard disk drive512. Computer storage medium and computer readable storage medium may also refer to memories, such as main memory508and secondary memory510, which may be memory semiconductors (e.g. DRAMs, etc.).

Computer programs (also called computer control logic) are stored in main memory508and/or secondary memory510. Computer programs may also be received via communications interface524. Such computer programs, when executed, enable computer system500to implement the embodiments described herein. In particular, the computer programs, when executed, enable processor device504to implement the processes of the embodiments, such as, for example, the stages in the method illustrated by flowchart400ofFIG. 4, described above. Accordingly, such computer programs represent controllers of computer system500. Where an embodiment is implemented using software, the software may be stored in a computer storage medium and loaded into computer system500using removable storage drive514, interface520, and hard disk drive512, or communications interface524.

Embodiments of the invention also may be directed to computer program products including software stored on any computer readable storage medium. Such software, when executed in one or more data processing device, causes a data processing device(s) to operate as described herein. Examples of computer readable storage mediums include, but are not limited to, primary storage devices (e.g., any type of random access memory) and secondary storage devices (e.g., hard drives, floppy disks, CD ROMS, ZIP disks, tapes, magnetic storage devices, and optical storage devices, MEMS, nanotechnological storage device, etc.).

Conclusion

The Summary and Abstract sections may set forth one or more but not all exemplary embodiments as contemplated by the inventor(s), and thus, are not intended to limit the present invention and the appended claims in any way.

The breadth and scope of the present invention should not be limited by any of the above-described exemplary embodiments.