søndag 18. april 2010

Demoscenen

En demo er et dataprogram som er laget for å vise frem imponerende bildeeffekter, animasjoner og musikk. Helt siden midten av 80-tallet har det eksistert en subkultur - demoscenen - hvor kreative sjeler har utforsket grensene for hva som er teknisk mulig å få til.

Demoscenen oppstod ved at pirater som knekket kopisperringer på spill la til en intro. Introen ble vist før spillet startet, og inneholdt musikk og grafiske effekter samt piratgruppens logo. En sentral del var også å sende hilsener til andre piratgrupper:


Denne kreative uttrykksformen utviklet seg fort til en egen kunstart, og årlig arrangeres det nå store samlinger verden over: Breakpoint i Tyskland, Assembly i Finland, The Gathering og Kindergarden i Norge - listen er LANG. Det største er Dreamhack i Sverige som ble besøkt av over 12.000 i 2009.

På Breakpoint 2009 konkurrerte man på flere plattformer: Commodore 64 (fra 1982), Commodore Amiga (1985), samt moderne PC-er. I tillegg var det åpen klasse hvor man også kunne bruke Nintendo DS, Sony Playstation Portable - eller kalkulatorer for den saks skyld. Det ble også konkurrert om beste animasjon og beste spill.

I demoscenens barndom var utfordringen i stor grad å forsøke å programmere maskinene til å gjøre ting som ingeniørene ikke hadde konstruert dem for.

For eksempel er det i utgangspunktet ikke mulig å vise verken tekst eller bilde i rammen på Commodore 64. Derfor var det en stor sensasjon første gang gruppen Flash klarte å "åpne" rammens øvre og nedre del. Ikke lenge etter sjokkerte 1001 Crew med Border Letter 1 hvor de demonstrerte en annen umulighet - open sideborder:

Legg også merke til munnhuggeriet med den
legendariske danske hackeren
Sodan.

Animert tredimensjonal (3D) grafikk står sentralt i mange demoer. Før 3D animasjon kan vises på dataskjermen må utseendet være beskrevet ned til minste detalj. Utgangspunktet er en polygonmodell (også kalt mesh), som er en liste x, y og z-koordinater (vertexer) og forbindelsene mellom dem:


Polygonmodell av delfin før den kles med teksturer.
Illustrasjonen er hentet fra Wikipedia.

Deretter annoteres meshen med materialegenskaper, deriblant teksturer, for å gi den en naturlig utseende overflate. Før objektene kan tegnes opp på dataskjermen (såkalt rendering) må vi også bestemme hvor lyskilder og kamera skal befinne seg.

Synsopplevelsen vi har i den virkelige verden er resultatet av et komplekst samspill av visuelle effekter: For eksempel kan en rød kopp både kaste skygge og få en hvit bordplate til å bli rød. Samtidig vil bordflatens refleksjon kunne ses på koppens blanke overflate. En naturtro rendering tar derfor hensyn til effekt av lyskilder, skygger, refleksjoner, bortvendte flater, objekter som står i veien, osv.

I dagens PC-er gjøres rendering i grafikkortet. Som en naturlig konsekvens fokuserer dagens demoer mer på koreografi, kameraføring og generell estetikk enn før. Både C64 og Amiga mangler støtte for 3D i maskinvare. På disse plattformene vil en figur som kaster skygge på seg selv være et uttrykk for programmererens dyktighet - på PC er det bare lame.

Mange liker den ekstra utfordringen som ligger i å kjempe mot begrensninger, og derfor har demokonkurransene egne klasser for 4k og 64k demo. En k er 1024 bytes - ergo er 4k det samme som 4096 bytes. En byte kan sammenliknes med én bokstav, slik at for å lagre teksten 'God dag!' kreves 8 bytes. For å sette dette i perspektiv er programfilen for notisblokk i Windows på 68k, og et bilde du tar med digitalkamera krever typisk noen megabyte (et par tusen k). 2 gigabyte med internminne (RAM) i PC-en tilsvarer ca. 2 millioner k.

De filmene vi skal kikke på under er opptak av noen utrolige demoer. Det beste er selvsagt å laste ned programfilene selv og kjøre dem på din egen PC. Vær klar over at noen av dem har høye krav til grafikkort eller internminne, og at enkelte krever helt spesifikke versjoner av DirectX installert.

Jeg anbefaler å koble datamaskinen til et stereoanlegg hvis du har mulighet.

Masagin: Invitasjon til NVision 2008 (PC Demo)
Grafikkortprodusenten Nvidia ønsket å sette av en del av NVision-messen i 2008 til demoscenen. Paniq i den legendariske gruppen Farbrausch fikk i oppdrag å lage invitasjonen, og resultatet ble en meget unik og fargerik demo som også vant førsteplass på Breakpoint samme år:



Pouet: Masagin.
Les mer i scenemagasinet Hugi: How Masagin Was Born.

Stargazer: 1. plass på NVision 2008 (PC Demo)
Dette er en av mine desidert største favoritter. Det er stemningsfullt, vakkert, teknisk imponerende, og frekt. Den rockete elektroniske musikken er godt synkronisert med bildet og løfter helheten mange hakk:



Demoen er sammensatt av flere mer eller mindre separate segmenter. Dette er helt typisk - for ofte handler det om utforskning og lek, vel så mye som å imponere konkurrenter. Jeg synes likevel alle overgangene fungerer bra, selv om statuen midtveis kommer litt brått på.

Troverdige animasjoner av vann har alltid vært en ekstra utfordring for grafikere og programmerere. Da James Cameron kom ut med The Abyss i 1989 (trailer) fikk han Oscar for de banebrytende spesialeffektene bak den vannbaserte livsformen nede i dypet. Selskapet Industrial Light & Magic brukte 6 måneder på å produsere de 75 sekundene skapningen opptrer i filmen.

Det unike med Stargazer - og demoer generelt - er at animasjonene blir til mens du ser på. De genereres i realtime.

Demoen er på 47 MB, og krever minimum NVidia GeForce 8800 eller ATI HD 2600.
Gruppenes nettsider: Orb, Andromeda.
Nedlasting og linker på pouet.net: Stargazer by Orb & Andromeda.

.the .product: 1. plass på The Party 2000 (64k demo)
Denne demoen er unik. På bare 64k har de fått plass til en avansert 3D verden og ikke minst et fantastisk lydspor som bildet er synkronisert med:



Rent teknisk består demoen av et program som driver musikk, animasjon og kameraføring fremover. I tillegg til programkoden må det være plass til landskapets polygonmodell og teksturer, og lydsporet trenger plass til både partitur og instrumenter.

Normalt lages landskapet i en 3D-editor som 3D Studio Max eller Maya, teksturene i Photoshop, musikken med f.eks. Milkytracker, og deretter komprimeres alt sammen med Upx. Denne exe-packeren (også kalt en cruncher) identifiserer likheter og mønstre i filen for å gjøre den mindre - det samme som Winzip gjør med dokumenter.

De 66 teksturene i .the .product ville sprengt grensen på 64k for lenge siden. Hver tekstur tar ca. 20k som JPEG-fil - totalt blir det nesten 1,5 MB. Komprimering kunne vært løsningen, men en JPEG-fil er allerede komprimert så det hjelper lite å forsøke å komprimere den en gang til.

Isteden er omtrent alt proseduralt generert: Mesh og teksturer genereres før demoen starter. Musikken er komponert med et program kalt Logic Audio, og selve partituret er lagret som en midi-fil. Instrumentene i låten produseres realtime av en egenutviklet synthesizer-plugin til Logic Audio!

Nøkkelen til de beskjedne plasskravene er altså at det er beskrivelsen av mesh og teksturer som ligger lagret i demoen; ikke selve polygonmodellen eller teksturene. Det samme gjelder instrumentene i låten - det er kun en beskrivelse av frekvenser og forløp som lagres, ikke et opptak.

Som cruncher brukte Farbrausch en nedstrippet utgave av Upx. Komprimeringen fungerte så bra at de faktisk hadde god plass til å skrive en lang rulletekst og fremdeles holde seg innenfor grensen på 65536 bytes. De skriver mer om dette i rulleteksten helt til slutt! :-)

Arbeidet med demoen tok omtrent tre måneder og involverte medlemmene fiver2, chaos, kb og ryg, med bidrag fra doj og yoda. Gruppen gjentok en gammel tradisjon og leide en leilighet de to siste ukene for å kunne sitte sammen under innspurten. Det var i dette tidsrommet at kb programmerte både GUI (brukergrensesnitt) og synthesizer plugin til Logic Audio, OG komponerte musikken til demoen.

Foruten å bruke proseduralt generert innhold gjorde Farbrausch enda en innovasjon med .the .product. Størstedelen av programmeringsarbeidet gikk med til å lage et verktøy kalt The Generator. Denne editoren lar deg beskrive hele demoen i et grafisk brukergrensesnitt.

På samme måte som menneskekroppens form og funksjon er beskrevet i kromosomenes DNA, er .the .product beskrevet vha. en graf med byggestener og operatorer i The Generator. The Generator ble forløperen til werkkzeug1 og werkkzeug3 - mer om dette under neste demo!

Gruppe: Farbrausch.
Pouet: fr-08: .the .product.
Demoen er såpass gammel at den kan kjøres på stort sett alle PC-er med DirectX 9.

http://www.theproduct.de/ kan du lese alle tekniske detaljer om demoen. Nederst på denne siden kan du laste ned et lite program på 37k som genererer totalt 140 MB med musikk i 44kHz, 16-bit stereo. Musikken er også med i fr-028: Brullwurfel, en "musikkdisk" på 64k. 2,3 og 7 er de beste låtene. 8 er ikke så verst, den heller.

debris.: 1. plass på Breakpoint 2007 (PC demo)
Med debris. klarte Farbrausch kunststykket å vinne klassen for PC demo med en programfil på bare 177k. Selv om de ikke fokuserte på en minimal filstørrelse, gav dette konkurrentene i utgangspunktet en stor fordel. Maksimalt tillatte filstørrelse var nemlig 64 MB.



Demoen er nå på førsteplass på topp-10 listen på pouet.net. Chaos, en av programmererne bak demoen, skriver i en kommentar på Pouet:
thanks for all the applause. it is a thrilling experience. unbelievable. and sorry that it took so long. our next demo will surely be smaller in scope and larger in filesize.

this is not a 64k intro that missed the size limit. we just wanted to see where we end with our intro technology if we don't care about size. no compromises, no months of tweaking, no throwing away of ideas because we need another kilobyte. in fact it is quite wasteful in terms of code size, and we won't fix that in a final version.

we asked the friendly glöperators to change the screenshot because it took away too much of the "story". it's no use to build up atmosphere for several minutes when everybody waits for the moment when things are blowing up. well, it worked for debris, but if you make screenshots of demos that evolve, please make sure that you only show the beginning stages. don't spoil it for the poor majority that wasn't able to see it at the party.

if you wonder about the great physics engine we've built, sorry, it's all faked. obviously. still we only use shader model 2.0, so we had to move all the particles by hand.

my personal thanks have to go to fiver2 aka theunitedstatesofamerica, who is of course the creative mind, artist and hard working craftsman of this production. also this demo would never have worked without ryg's dedication. he tuned and rewrote everything over and over again to the point where i don't understand it any more. and ronny really saved the day when he did the last minute soundtrack. we were so close to the edge.
Hele demoen ble designet i det egenutviklede verktøyet .werkkzeug3. Mesh, teksturer, 3D animasjoner, bilde postprosessering, tidslinjer - you name it. V2 Synthesizer System (også et Farbrauschprodukt) er brukt til musikken, og kkrunchy ble brukt som exe-packer.

Kkrunchy er skrevet fra bunnen av, og er ikke basert på upx. Den gjør bla. reversible transformasjoner på programkoden i demoen for å få den etterfølgende komprimeringen til å bli mer effektiv. Werkkzeug lagrer samme type operatorer etter hverandre fordi Kkruncy, som de fleste andre komprimeringsalgoritmer, er mer effektiv når det er mønstre i datastrømmen.

Werkkzeug1 er nå lagt ut til nedlasting, sammen med - hold deg fast - designfilen til fr-025: the.popular.demo! Ved å velge "export demo" fra menyen i wz1 kan du generere en fiks ferdig, kjørbar demo på din egen harddisk. Det er også en tutorial designfil som forklarer alle konseptene i verktøyet.

Werkkzeug3 er også tilgjengelig, men bare i en utgave begrenset til å lage prosedurale teksturer: .werkkzeug3 TE.

Hvis du vil lære mer kan du se disse seminarene med Dierk Ohlerich, aka chaos: A history of Farbrausch tools, og From .kkrieger to debris. Her sier han bl.a:
This is the problem with Farbrausch, almost everything we do, almost kills us. [...] For kkrieger and debris there was some serious pain going on, in getting it done! No matter what happens, it will never be worth the effort. But it was! That was the most amazing thing, after all the pain, after all the time, all the labor, it was still was worth the effort.
Download og teknisk info på scene.org.
Pouet: fr-041: debris.
Farbrausch: fr-041: debris.
Intervju med Farbrausch (på tysk): her.

Candytron: 2. plass på Breakpoint 2003 (64k demo)
Nok en utrolig Farbrausch produksjon. Neonbelyst tredimensjonal animasjon av en kvinnekropp, fengende musikk og talesyntese, alt sammen på under 64k!

NB! Om du tar anstøt av nakenhet kan jeg heller ikke anbefale neste demo, som viser en robot i blanke messingen.



Micropolis: 3. plass på Assembly 2004 (combined 4k)
4k er en oppsiktsvekkende liten filstørrelse for et dataprogram. Til sammenlikning krever teksten i dette innlegget mer enn fire ganger så stor plass. Prøv å beskrive det du ser i demoen - i detalj - med tekst, og se hvor langt du kommer på 4096 tegn.

Demoens visuelle preg minner meg litt om tidlige demoer på Amiga, der man ofte brukte tredimensjonale strektegninger med fylte flater, og der evaluering av lyspåvirkning ble gjort vha. midtnormalen på hver flate.



Den kjørbare filen til Micropolis kalles micropolis_compo.bat, men er egentlig en CAB-fil. Siden CAB-filer ikke er kjørbare, har man modifisert den til også være en lovlig .BAT-fil, som operativsystemet kan kjøre. BAT-filen pakker seg selv ut til en .EXE-fil, og kjører denne. Denne teknikken kalles cab dropping, og er fullt lovlig, om enn litt hårete.

Pouet: Micropolis by TBC & Mainloop

Elevated: 1. plass på Breakpoint 2009 (pc 4k)
Denne demoen er såpass drøy at jeg fremdeles har problemer med å tro at det er sant.



Kommentarene på Youtube gjenspeiler hvor vanvittig denne prestasjonen er:
[That's] what they are using the Large Hadron Collider for. Video streams from another [dimension] :)
It's impossible.
The program probably invokes a wormhole and streams the video from somewhere else.
It's impossible.
I tekstfilen som følger med demoen forklarer Iñigo Quílez (iq) hvordan han laget demoen:
for those wondering, this a (too) low density flat mesh displaced with a procedural vertex shader. there arent any texturemaps for texturing, instead texturing (and shading) is defferred and computed procedurally in a full screen quad. this means there is zero overdraw for the quite expensive material at the cost of a single geometry pass. then another second full screen quad computes the motion blur. camera movements are computed by a shader too and not in the cpu, as only the gpu knows the procedural definition of the landscape.
Det han forsøker å si er at stort sett alt gjøres i skjermkortets shadere, som gjør at man kan beskrive komplekse effekter på en veldig kompakt måte. Både mesh (høyden i terrenget) og teksturer (stein, snø og vann) er generert vha. Perlin Noise.

Perlin Noise ble oppfunnet av Ken Perlin i 1985, og i 1997 fikk han faktisk Oscar for sitt arbeid med prosedurale teksturer. Juryens begrunnelse:

To Ken Perlin for the development of Perlin Noise, a technique used to produce natural appearing textures on computer generated surfaces for motion picture visual effects. The development of Perlin Noise has allowed computer graphics artists to better represent the complexity of natural phenomena in visual effects for the motion picture industry.
Han var også med i teamet som lagde effektene til filmen Tron (1982). Mer om Perlin Noise på Ken Perlins egen side: Noise and Turbulence. Hugo Elias har en litt mer teknisk beskrivelse her: Perlin Noise.

Algoritmen for å lage Perlin Noise er pseudorandom, det vil si tilsynelatende tilfeldig. Man fôrer den med en liten mengde tall (parametre), og får tilbake en stor mengde tall (organisert støy). Pseudorandom-egenskapen garanterer at de samme parametrene gir eksakt samme støy. Dermed kan man sitte og justere til man får den skyen, landskapet, teksturen, etc., som man ønsker seg.

Iñigo Quílez holdt en presentasjon av teknologien i Elevated under Function 2009 i Budapest. Det er fascinerende lesing: Behind elevated. Han har også lagt ut en drøss med artikler om demorelatert programmering: strawberry.

Pouet: elevated by Rgba & TBC.

Puls: 1. plass på Riverwash 2009 (256b combined)
Hjernen låser seg bare når jeg prøver å beskrive denne demoen:



Pouet: Puls by Rrrola.

The golden path: 3. plass på Assembly 2009 (PC demo)
Kunstneriske individer imponerer meg - sikkert fordi jeg mangler dette genet selv. Men én ting er å finne inspirasjon - en helt annen ting er å klare å programmere det. Og en helt ANNEN ting er hvorvidt koffein var det eneste rusmiddelet involvert i produksjonen. Jeg sier ikke mer, kjør film:



Pouet: The golden path by United Force & Digital Dynamite
Starstruck: 1. plass på Assembly 2006 (combined demo)
Demoen er beregnet på Amiga 1200 med en 68060 CPU, men siden prosessorkortet gikk i stykker på vei til Assembly ble demoen vist i en Amiga-emulator (WinUAE) på PC. Ligger faktisk på 9. plass over tidenes 10 beste demoer på pouet:



Pouet: Starstruck by The Black Lotus

Til sammenlikning:

Kick Reset: En typisk intro på Amiga (1989)
Operativsystemet Kickstart på Amiga 500 ligger i ROM, og kan i utgangspunktet ikke oppdateres ved hjelp av et program. Dersom Razor 1911 hadde klart det, ville Kick Reset vært en sensasjon. Isteden er dette en bløff med en utrolig kul liten intro og snaxy musikk!



Blinkingen helt i starten (et halvt sekund) er forresten cruncheren som pakker ut demoen i minnet.

Pouet: kick reset by Razor 1911

-- ** --

Vi avslutter med å gå tilbake til røttene og kikke på resultatene av 25 års skaperglede.

Edge of Disgrace: 1. plass på X 2008 (c64 demo)
Denne demoen ble påbegynt i 2001, og er den flotteste demoen som noensinne er laget til Commodore 64. Et teknisk og audiovisuelt mesterverk. Commodore 64 er ikke istand til å gjøre det du ser i demoen, og jeg begynte faktisk å grine da jeg så den første gang.

Sannsynligvis behøver du ikke å ta frem lommetørkleet, men her er den i alle fall:

Del 1:


Del 2:


Det er en hel liten bok som forklarer alle tekniske detaljer omkring demoen her:
xplsv.tv // Edge of Disgrace by Booze design

Som alltid er demoen et resultat av teamarbeid. Dane, som lagde musikken, skriver:
a surprising amount of the music for this demo has been composed in public areas like libraries and coffee shops. i guess there is something creatively inspiring from changing setting and not just sit at home in your chair late at night. i would also like to name some sources of inspiration. while you won't find any downright covers, there are some acts and albums which have proved to be very inspiring to get in the mood.

in 2007, while i was doing random draft tunes, i was listening a lot to justice and alive 2007 from daft punk. there is a roboto-segment a few minutes in on side 1 where this should be quite apparent.

i also had this idea to think more along the lines of a movie soundtrack and not get stuck in pop formulas of verse`and chorus.

having said that, there still is a verse and a chorus or theme that keeps coming back in different mutations.
Pouet: Edge of Disgrace by Booze Design.
CSDb: Edge of Disgrace (2008)

Ingen kommentarer: