"Self-shadowing" is a term that describes the circumstance in which one part of an object casts a shadow on itself. Examples of self-shadowing include the shadow cast by a human nose on the face or upper lip when the light source comes from above, or the shadow cast by the seat of a chair on the legs of the chair. When the term is used in computer graphics — specifically computer graphics programming — it is a reference to shadows that are cast by a scene's three-dimensional (3D) objects on themselves, or shadows that are cast by dynamic objects on themselves and objects around them. The nature of real-time 3D computer graphics programming causes many applications to use techniques that often remove the possibility of rendering self-shadows in favor of other optimizations, although, as the speed and capabilities of computers increases, real-time self-shadowing methods have become more accessible. There are several methods of rendering real-time self-shadowing objects, but hardware limitations usually produce results that have some drawbacks, such as inaccurate shadows, shadows with artificially hard edges, or scenes that render very slowly on graphics cards that are not incredibly fast.
One distinction to make when talking about self-shadowing is the difference between static and dynamic objects in real-time graphics. Static objects are 3D objects in a scene that do not move and do not have any part of their geometry changed over the course of rendering. A dynamic object, on the other hand, is an object that is not directly attached to the scene in any way and can be different from one frame to the next. For the most part, most static objects and non-real-time scenes do self-shadow, either because of the rendering engine or because of other graphics tricks that can be used.
Several optimizations that are used to render real-time 3D graphics make implementing dynamic self-shadowing difficult. Some examples include a graphics engine that only applies lighting effects to a static background, ignoring dynamic objects such as characters in a scene, or an engine that treats objects only as silhouettes, with no awareness of internal geometry. With the increase in graphics processors and computers, new techniques allow self-shadowed objects to appear in a real-time scene, with some limitations and tradeoffs.
Shadow volumes are one way that self-shadowing can be implemented in a 3D scene. This method essentially creates 3D objects that occupy an enclosed volume in a scene where a shadow is cast, allowing the renderer or shader to perform tests on whether any point is within a shadowed volume to determine how it is lit. Other methods create shadow maps, or approximate shadows from vertex positions, to create very diffuse shadows that do not necessarily follow the fidelity of an edge.
Nearly all methods of self-shadowing have to exchange either speed or quality to get an acceptable result. Quality issues can occur through the use of fast but low-resolution or fuzzy techniques that might make some self-shadows seem wrong or out of place. Speed issues occur when the algorithms used require too much overhead per frame or attempt to calculate shadow projections too accurately. Though there is no single standard self-shadow-producing algorithm, some graphics cards include native acceleration for different methods that can increase the speed of some techniques.