Many modern software applications display three-dimensional representations of graphical objects and scenes as part of a user interface. Three-dimensional (3D) graphics are used in a wide range of applications including video games, simulations, virtual reality applications, geospatial information applications, and applications for mapping and navigation. In many applications, 3D graphics are more useful than two-dimensional (2D) graphics at depicting real-world environments and locations because the normal interaction between humans and the real-world occurs in three dimensions.
In one form of 3D graphics, different objects in a scene are formed from a large number of polygons. The polygons form shapes and structures in a 3D scene. Since most computing devices only display graphics with a two-dimensional display, the 3D graphics are converted into a rasterized array of two-dimensional pixels for display. The 2D display depicts portions of the three-dimensional scene in a similar manner to how a camera takes a two-dimensional photograph of 3D scenes in the real world. Many 3D graphics systems and application programming interfaces (APIs) including the Open Graphics Library (OpenGL) and the Direct 3D APIs provide common structures and interfaces to specialized graphics hardware for generation of 3D images in an efficient manner. The 3D software interacts with general purpose and specialized digital computing hardware that generates the 3D graphics in an efficient manner. In particular, graphical processing units (GPUs) are hardware components that are configured to generate polygons and other graphical effects that form a 3D scene. Modern computing devices typically execute software with a combination of instructions for a central processing unit (CPU) and the GPU to generate the 3D scene and enable interaction with the 3D scene in some software applications. In some hardware embodiments, the functionality of the CPU and GPU are merged together, physically and optionally logically, into a single a system on a chip (SoC) device.
Realistic rendering of 3D scenes is an important part of making 3D graphics useful in modern computing systems. Making 3D scenes more realistic can have aesthetic benefits, but can also improve the accuracy of information that is depicted in display of a 3D environment. For example, if a 3D environment realistically depicts the illumination of objects with lights and shadows, users of the 3D application can distinguish features more quickly and more accurately than if the lighting that illuminates the scene is generated in an unrealistic manner.
Modern 3D hardware and software implementations illuminate objects in the virtual environment using both direct and indirect lighting techniques. Direct lighting refers to the direct appearance of an object when light from an illumination source strikes the object. For example, the sun or light bulbs are direct illumination sources. An object that is illuminated by the direct illumination source reflects a portion of the light, and various properties of the object including color and textures applied to the object affect the appearance of the object in the 3D environment. The intensity and color temperature of the direct illumination source also affect the appearance of the object. Indirect illumination refers to light beams that emanate from a source other than a direct illumination source and strike an object. For example, light beams from a direct illumination source strike objects in a scene, and then the objects in the scene re-emit some of the light from the direct illumination source. The re-emitted light then strikes other objects, which in turn re-emit even more light in a repeating manner. In practical scenarios, some of the light is absorbed when each light beam strikes an object and a finite number of secondary reflections are visible to the human eye. Environments with highly reflective objects typically display greater changes when illuminated by indirect lighting compared to lower-reflectivity objects.
Modern 3D graphics hardware and software systems include various techniques for rendering indirect light. Many indirect lighting techniques include tradeoffs between accuracy and performance. For example, ray-tracing techniques model the paths of light beams from a direct illumination source through multiple indirect reflections from illuminated objects in a virtual environment. While ray-tracing is considered to be highly realistic, the modeling process for ray-tracing consumes a large amount of processing power and is usually reserved for pre-rendered 3D animations. Another technique for generating indirect illumination is referred to as the “virtual point light” (VPL) technique. In a VPL system, a direct illumination source casts light onto one or more objects in a virtual environment. At selected intersections between the light from the direct source and the objects, the 3D graphics system generates a “virtual” point light that simulates the indirect light that is reflected from the object. The VPL then emanates light from the object to simulate the effects of indirect lighting in the virtual environment. The 3D graphics system generates a selected number of VPLs to simulate indirect light with the number and arrangement of VPLs being selected to provide a suitable balance between accuracy and processing computational performance in the 3D graphics system.
Commercially available 3D graphics hardware including GPUs that are used in desktop and server computers are capable of rendering complex virtual environments including indirect lighting using VPL techniques and other indirect lighting techniques that are known to the art. While powerful 3D graphics hardware is commercially available, an increasing number of mobile electronic devices including smartphones, tablets, and handheld GPS navigation devices are being used as hardware platforms that implement 3D graphics. The hardware implementations in mobile electronic devices are often less sophisticated than in larger stationary computing devices due to limitations in size, weight, power consumption, and heat output that are inherent to smaller mobile electronic devices. While mobile electronic devices include CPU and GPU hardware processors that can generate 3D graphics, the processors are often either unable to produce sophisticated 3D graphics displays, or consume unacceptably large amounts of power while generating the 3D graphics. In particular, many forms of indirect lighting including VPLs are either too computationally intensive for use with some mobile electronic devices, or result in an unacceptable loss in battery life due to the increased power consumption of the processor to render the virtual environment. Consequently, improvements to 3D graphics systems that enable generation of graphics that include indirect lighting effects on hardware devices with limited 3D graphics processing capabilities would be beneficial.