Demo effect
Lua error in package.lua at line 80: module 'strict' not found.
Lua error in package.lua at line 80: module 'strict' not found.
Demo effects are computer-based real-time visual effects found in demos created by the demoscene.
The main purpose of demo effects in demos is to show off the skills of the programmer. Because of this, demo coders have often attempted to create new effects whose technical basis cannot be easily figured out by fellow programmers.
Sometimes, particularly in the case of severely limited platforms such as the Commodore 64, a demo effect may make the target machine do things that are supposedly beyond its capabilities. The ability to creatively overcome major technical limitations is greatly appreciated among demosceners.
Modern demos are not as focused on effects as the demos of the 1980s and 1990s. Effects are rarely stand-alone content elements anymore, and their role in programmer showcase has diminished, particularly in PC demos. As for today, PC demosceners are more likely to demonstrate their programming skills with procedural content generation or 3D engine features than with superior visual effects.
Contents
Hardware considerations
There are demos written for many different devices that vary considerably in their graphical features and data processing capabilities. The variability in hardware also reflects in types of effects invented for each platform as well as in the methods used in the implementation.
The demoscene took off on home computers such as the Commodore 64 and the Amiga, which had relatively advanced and very "hackable" custom chips and CPUs. Before the widespread use of advanced computer aided design for integrated circuits, chips were designed by hand and so often had many undocumented or unintended features. A lack of standardisation also meant that hardware design tended to reflect the designers own ideas and creative flair. For this reason, most "old school" demo effects were based on the creative exploitation of the features of particular hardware. A lot of effort was put into the reverse-engineering of the hardware in order to find undocumented possibilities usable for new effects.
The IBM PC compatibles of the 1990s, however, lacked many of the special features typical for the home computers, instead using standard parts. This was compensated for with a greater general-purpose computing power. The possibility of advanced hardware trickery was also limited by the great variability of PC hardware. For these reasons, the PC democoders of the DOS era preferred to focus on pixel-level software rendering algorithms.
Democoders have often looked for challenge and respect by "porting" effects from one platform to another. For example, during the "golden age" of the Amiga demos, many well-known Amiga effects were remade with Atari ST, Commodore 64 and PC, some of which were considered inferior in the key features required in the effects in question. Since the mid-1990s, when the PC had become a major platform, demos for the Amiga and the C-64 started to feature PC-like "pixel effects" as well.
Early history
The earliest computer programs resembling demo effects predate the demoscene for several decades. Perhaps the earliest example of these so-called display hacks is a program called Bouncing Ball on the Whirlwind computer in the early 1950s. Another famous display hack, munching squares, was originally created on the PDP-1 in ca. 1962.
"Old school" effects
These effects were typical in the 1980s and the early 1990s and were first implemented on either the Commodore 64, Atari ST or the Amiga. They often relied on the systems custom hardware or were considered difficult because of it. For example, 3D objects rendered in dots are somewhat tricky on systems without byte-per-pixel displays or limited video memory bandwidth, or systems with slow and/or limited (e.g. 8 bit, no FPU) CPUs.
- Raster bars, also called copper bars on the Amiga.
- Scrollers of various kinds.
- Moving sprites, with the competition usually focused on the number of visible sprites per frame.
- Starfields, such as parallax-scrolling and perspective starfields.
- Smooth horizontal waving of graphics images in a per-scanline basis
- Shadebobs
- Infinite bobs
- Plasma effect
- Kefrens bars
- Moire patterns, particularly circles
- Text zoomers
- Simple rotating 3D objects rendered in dots, lines or filled polygons.
- Spline effect
- Vector graphics
- Glenz, partially see-through models with a "diamond-like" look. Named by Photon from the Swedish word "Gläns" (glisten or glitter)[1]
- Blenk, shiny metallic aluminum-like models, from Swedish "Blänk" (shiny)
- Rubber, Twisting and/or elastic models. Also sometimes referred to as Gel
Chunky-pixel effects
Effects based on software rendering into chunky-pixel framebuffers were typical in the mid and late 1990s and were usually first implemented on the PC or Falcon030. They became popular as systems with pixel-addressable high speed video memory and faster processors (to allow for more demanding real-time calculations) became common.
- Effects based on static screen-to-texture lookup tables
- Texture-mapped tunnels and other objects rotating around their axis of symmetry
- Wobblers, rotators and other similar effects for 2D images
- Objects that reflect or refract underlying bitmap images
- Texture-mapped tunnel with freely moving camera, typically based on realtime raytracing
- Rotozoomer
- Mandelbrot zoomer
- Fire effect and other effects based on 2D filters and feedback
- Heightfield landscape (often called "voxel landscape")
- 2D bump mapping
- Metaballs
Some of these effects were later ported to planar pixel machines such as the Amiga, without relying on chunky to planar conversion. For example, the group Sanity implemented a rotozoomer using a combination of pre-rendered planar bitmaps and copper effects.
3D rendering
3D computer graphics has been featured in demos since the late 1980s. Nowadays, a general-purpose 3D engine is an integral part of most new demos.
In the late 1980s and early 1990s, rotating 3D objects were considered effects in their own right due the difficulty of calculating and rendering them. In particular, most systems did not have a floating point unit. Rather than general-purpose 3D algorithms, democoders often used special-purpose tricks highly optimized for the rotation and rendering of a particular object such as a cube or a sphere. Since even drawing dots, lines or filled polygons was a difficult task in itself competition often revolved around simply optimising the drawing routines while using pre-calculated maths.
To a casual viewer, many demo effects look like something attainable by a general-purpose 3D engine. However, classic effects with an apparent 3D look often have no real-time 3D calculation whatsoever. For example, static screen-to-texture look-up tables can be used with symmetrical 3D objects that rotate around their axis of symmetry.
Before the advent of mass-marketed 3D acceleration hardware, democoders often focused on lighting and shading techniques in software 3D engines, including Gouraud shading, Phong shading, texture mapping, bump mapping, environment mapping, radiosity and even real-time ray tracing.
General-purpose 3D engines are very seldom called "effects", although the rendered scenes often contain something that can be regarded as such.