Tribute to Future Crew
I was in the middle of implementing some sub-systems into the Xona System 8 engine:
I happened to notice my subscribers was at 360. My original plan for my YouTube channel was to release games that related to the number of subscribers at interesting numbers (such as 100, 250, 500, 1000). I was already at 170 when I had this idea, and 250 came and went before I prepared. Should I let 360 pass as well? How about a quick demo relating to 360°?
I had recently watched Future Crew‘s Second Reality. It has a rotozooming effect (rotation and zooming) of a really cool image drawn by the artist, Pixel. Therefore, I made a quick bi-linear texture-mapping rotation demo in tribute to Future Crew:
VGA Mode 13h (and Mode-X) resolution is 320×200, fitted to a 4:3 aspect ratio screen, meaning it had 5:6 sized pixels (taller than wider). I don’t respect that here. My apologies to Pixel (a 20% distortion is not appropriate).
You need quite high resolutions to showcase a 320×200 non-square 6:5 pixel ratio image perfectly. 1600×1200 is the minimum. Given that my demo is running in 1920×1080, I could have shown most of the image, but my engine, and my demos, and my tribute to Future Crew, are all based on the low-resolution VGA mode.
CPU vs GPU
My demo uses the GPU. I am not calculating each pixel individually, nor am I using assembly language. But, I did “invent” bilinear texture mapping several years before Second Reality: I programmed the Mode 7 graphics of F-Zero in GW-BASIC, and it only took 30 minutes to render a single frame. I could watch and count the pixels begin drawn one-by-one.
Second Reality drops to a lower resolution (160×100, from the original 320×200) to enable full-screen frame-rate (less pixel updates), which is 70 Hz for VGA. Using Mode-X you can write to 2 pixels at once, and also you can double the repeat scan from 2 to 4 (VGA 320×200 has 400 actual scan lines, double scan is the default per scanline). At the time, in 1993, most video cards couldn’t even handle a full 64,000 byte copy into video memory in 1/70th of a second. So you just could not achieve such frame rates! It was a big deal to see full-framerate animations.
Later demos (1994) shows an improved speed of rotozooming, full-screen, at near frame-rate on fast video cards, in full 320×200 resolution (HeartQuake comes to mind). Such demos led me to understand memory cache, and why texturing the whole screen a full line at a time is not an efficient use of reading memory — as the bilinear scan of the source texels goes all over memory, especially when rotated. It is far better to texture 8×8 sections… more complex code, more instructions, but much faster! Given CPU speeds today, this is crucial for writing performance critical code.
I had been chasing after assembly language since I was 7, when I first programmed on my TI-99/4A. I knew the real power in this machine, and my later Tandy 1000 SX, was extracted via assembly language, and BASIC was just not up to the challenge. My first Mode-7 demo took 30 minutes to render a single frame. I needed assembly.
But I didn’t have it.
Enter Second Reality.
Second Reality Impact
Second Reality was my introduction to the demoscene. However, this introduction was not what you may think. I didn’t know of software cracking, graphics demos, or the demoscene. I was merely shown Second Reality… with the ridiculous explanation that there was an “assembly language” competition, and some Finnish kids decided to show off their assembly language skills, and showed up with Second Reality — a full-fledged multi-media demo that showcases a dozen effects simply not possible on a 486, most at the full frame rate (70 Hz), in Dolby surround sound (which isn’t even possible on the Gravis Ultrasound hardware they were using). My jaw dropped both watching the demo and wondering how they blew away their competition.
I later learned this was the demoscene. Second Reality was entered into a “demo party” or “demo compo” called “Assembly ’93” (a pun on “assembly language” and “assembly of people”). It was not an “assembly language competition”, it was a graphics demo competition, where mostly everyone had programmed similar effects, to music, in their own multi-media presentations. Even after learning this, I was still amazed. It still seemed impossible. Their presentation was well beyond what other demos showcased. And I knew I needed to get my hands on assembly language…