Wie kann das alles in 64kb passen?

45

Also, ich bin hier bei der Versammlung 2011 und es wurde diese Demo gespielt: http://www.youtube.com/watch?v=69Xjc7eklxE&feature=player_embedded

Es ist nur eine einzige Datei, das steht in den Regeln. Also wiederhole ich, wie haben sie das gemacht, damit es in eine so kleine Datei passt?

Samuli Lehtonen
quelle
Kann diese Demo heruntergeladen werden? Ich würde gerne sehen, wie es funktioniert, wenn es lokal ausgeführt wird.
David
1
Ja, diese Demo finden Sie hier: ftp.untergrund.net/users/atzAdmin/fltatz_uncovering_static.zip
Samuli Lehtonen
Natürlich gibt es mehrere Megabyte an Systembibliotheken, ohne die dieses Ding kein einziges Polygon zeichnen könnte ...
hobbs
2
Als jemand, der aktiv 64-KB-Intros erstellt, habe ich folgenden Artikel geschrieben: ctrl-alt-test.fr/?p=494 (Wie können Demoscene-Produktionen so klein sein?). TL; DR: Prozedurale Generierung, Komprimierung und viel zusätzliche Arbeit.
Laurent
1
@ TeamUpvote Nein, es ist alles C ++. Um 12kB zu unterschreiten, müssen Sie die Standardbibliothek entfernen. Wenn Sie Visual C ++ verwenden, finden Sie Beispiele hier: github.com/laurentlb/Ctrl-Alt-Test/tree/master/F und iquilezles.org/code/framework64k/framework64k.htm .
Laurent

Antworten:

39

Es basiert auf Prozeduren . Der Inhalt ist nicht in der exe enthalten, nur die Regeln für das Zeichnen. Beim Start zeichnet das Programm, was es zur Laufzeit benötigt, es wird nicht vorgerendert oder in irgendeiner Form vorgespeichert.

Dies ist die gleiche Methode, die Elite verwendet , um ein riesiges Universum von Sternensystemen usw. zu erschaffen.

Es ist ziemlich erstaunlich, was heutzutage mit prozeduraler Generierung möglich ist. Ich denke, dass Spiele in Zukunft mehr davon bieten werden.

Gary Willoughby
quelle
Ich dachte nur, dass die Texturen ziemlich genau sind. Also zeichnen sie es einfach mit Code und ohne Texturdateien, denke ich?
Samuli Lehtonen
1
Ja, das ist richtig.
Gary Willoughby
1
Für diese Art von Demos wird der Sound auch aus Code generiert (keine Samples). Alles wird on the fly synthetisiert ... und natürlich erlauben einige Credits und Fade-Szenen eine starke Vorberechnung :)
Karoly Horvath
2
Als ehemaliger 3D-Künstler wollte ich schon lange, dass prozedural erzeugte Texturen als Standardwerkzeug in die gängigen 3D-Kunstprogramme aufgenommen werden. Wahrscheinlich ist der nächste mit der eingebauten Skriptsprache ....
Darknight
Vielleicht interessieren Sie sich für Dinge wie Project Frontier und Procedural World , die zwei Ansätze zur Lösung desselben Problems durch prozedurale Generierung darstellen.
Kyte
10

Wie @Gary Willoughby sagt, ist es weitgehend prozedural.

Es ist auch eine erhebliche asmHandcodierung erforderlich, zusammen mit einem umfassenden Wissen darüber, wie viele der Fenster / Plattformen der Wahlsysteme intern funktionieren.

Es gibt auch eine 4K-Demo-Kategorie, wenn Sie noch extremere Beispiele für kompakten Code sehen möchten.

Einige der DemoScene-Gruppen veröffentlichen ihre Demos online, wo Sie sie herunterladen und abspielen können, wenn Sie möchten.

Verschwörung
farb-rausch

Siehe auch Wikipedia zur Geschichte der DemoScene

Hinweis - Viele der Demos führen dazu, dass Ihr Virenschutz nicht mehr funktioniert . Grundsätzlich scheinen so ziemlich alle Demos gepackte .exe-Dateien zu verwenden, und die meisten Demo-Gruppen rollen ihre eigenen Packer. Da viele AV-Unternehmen lahm sind, behaupten sie im Allgemeinen, dass jede komprimierte ausführbare Binärdatei ein Virus ist.

Falscher Name
quelle
1
Ich frage mich, welche AV-Firma Sie als möglicherweise nicht lahm empfinden ...
Jerry Coffin
+1 Super Zeug. Verwenden sie die Nvidea-APIs oder zeichnen sie direkt auf die Grafikkarte?
1
Normalerweise richten sie ein minimales OpenGL-Framework ein und starten einige Shader, um den Rest zu erledigen
Jasper Bekkers,
3
Es ist wirklich beeindruckend. Ich denke, wenn ich ungefähr 15 Jahre jünger wäre, würde ich meine Freizeit damit verbringen.
Hier einige Demos zu Assembly 2011: archive.assembly.org/2011
Samuli Lehtonen
4

Wie jeder sagt, verlassen sie sich weitgehend auf prozedural erzeugten Code, aber es gibt noch mehr über diese Demo, insbesondere wenn Sie innehalten und sich einige Details ansehen, sehen Sie sich zum Beispiel diese Wände an: Schauen Sie, wie Ziegelsteine ​​aussehen und wie Licht auf sie reflektiert. Sie sehen natürlich aus.

Das liegt daran, dass sie viele Vertex-Shader und Fragment-Shader verwenden, um den generierten Inhalt zum Leben zu erwecken.

Ich habe einige Zeit damit verbracht , zu verstehen, wie sie solche Dinge herstellen, und war erstaunt über jeden Code, den ich aus diesen Demos hole.

Übrigens, wenn sie diese Demos machen, verwenden sie auch Komprimierungswerkzeuge, um noch mehr zu komprimieren. Überprüfen Sie diesen Kompilierungsprozess:

all:
nasm -f bin -o intro main.asm
nasm -f bin -o stub stub.asm
gzip -n --best intro
advdef -z -4 intro.gz
cat stub intro.gz > intro
chmod +x intro
rm intro.gz
rm stub
Fernando Meyer
quelle
3

In einer PowerPoint-Präsentation wird gezeigt, wie das Rendern in dieser speziellen Demo durchgeführt wurde. Dies allein erklärt nicht, wie alles in 64 Kilobyte passt, sondern ist der Schlüssel dafür, wie die Geometrie auf so kleinem Raum erstellt wurde.

In seinem Blog ist auch viel Interessantes über seine anderen Demoszenenproduktionen zu lesen .

msell
quelle
1

Wie andere bereits ausgeführt haben, hängt ein Großteil davon ab, wie verfahrenstechnisch Vermögenswerte generiert werden.

Es gibt noch ein anderes Element, nämlich die Komprimierung. 4k- und 64k-Demos verwenden hochspezialisierte ausführbare Kompressoren. Die bekanntesten davon sind kkrunchy von farbrausch (für 64k) und crinkler von TBC & Loonies (für 4k). Darüber hinaus verwenden moderne Demos Shader, die nur aus Text bestehen und daher nach der Komprimierung erheblich kleiner werden.

Was die Integration in Videospiele betrifft, ist das Hauptproblem, dass all dies Zeit in Anspruch nimmt. Das Generieren von prozeduralen Inhalten nimmt Zeit in Anspruch, und das Extrahieren der ausführbaren Datei nimmt sehr viel Zeit in Anspruch. Und die Leute haben im Allgemeinen mehr Speicherplatz auf ihrer Festplatte als Zeit, um auf das Laden des Spiels zu warten. Ich glaube daher, dass wir in Kürze nicht mehr viel davon in allgemein verfügbaren Spielen sehen werden.

Tarmil
quelle