Sphere mapping

From HandWiki
Revision as of 17:18, 6 March 2021 by imported>Rtexter1 (linkage)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

In computer graphics, sphere mapping (or spherical environment mapping) is a type of reflection mapping that approximates reflective surfaces by considering the environment to be an infinitely far-away spherical wall. This environment is stored as a texture depicting what a mirrored sphere would look like if it were placed into the environment, using an orthographic projection (as opposed to one with perspective). This texture contains reflective data for the entire environment, except for the spot directly behind the sphere. (For one example of such an object, see Escher's drawing Hand with Reflecting Sphere.)

To use this data, the surface normal of the object, view direction from the object to the camera, and/or reflected direction from the object to the environment is used to calculate a texture coordinate to look up in the aforementioned texture map. The result appears like the environment is reflected in the surface of the object that is being rendered.

Usage example

In the simplest case for generating texture coordinates, suppose:

  • The map has been created as above, looking at the sphere along the z-axis.
  • The texture coordinate of the center of the map is (0,0), and the sphere's image has radius 1.
  • We are rendering an image in the same exact situation as the sphere, but the sphere has been replaced with a reflective object.
  • The image being created is orthographic, or the viewer is infinitely far away, so that the view direction does not change as one moves across the image.

At texture coordinate [math]\displaystyle{ (x, y) }[/math], note that the depicted location on the sphere is [math]\displaystyle{ (x, y, z) }[/math] (where z is [math]\displaystyle{ \sqrt{1 - x^2 - y^2} }[/math]), and the normal at that location is also [math]\displaystyle{ \langle x, y, z \rangle }[/math]. However, we are given the reverse task (a normal for which we need to produce a texture map coordinate). So the texture coordinate corresponding to normal [math]\displaystyle{ \langle x, y, z \rangle }[/math] is [math]\displaystyle{ (x, y) }[/math].

See also

  • Skybox (video games)
  • HEALPix, mapping with little distortion, arbitrary precision, and equal-sized fragments