Jak to wszystko zmieści się w 64kb?

45

Jestem więc na zgromadzeniu w 2011 r. I zagrano to demo: http://www.youtube.com/watch?v=69Xjc7eklxE&feature=player_embedded

To tylko jeden plik, mówi to w zasadach. Powtarzam więc, w jaki sposób dopasowali to do tak małego pliku?

Samuli Lehtonen
źródło
Czy można pobrać to demo? Chciałbym zobaczyć, jak to działa, gdy jest uruchamiany lokalnie.
David,
1
Tak, możesz znaleźć to demo tutaj: ftp.untergrund.net/users/atzAdmin/fltatz_uncovering_static.zip
Samuli Lehtonen
Oczywiście tam kilka megabajtów bibliotek systemowych, bez których ta sprawa nie byłaby w stanie wyciągnąć jeden wielokąt ...
Hobbs
2
Jako ktoś, kto aktywnie tworzy intra 64kB, napisałem ten artykuł: ctrl-alt-test.fr/?p=494 (Jak produkcje demonstracyjne mogą być tak małe?). TL; DR: generowanie procedur, kompresja i dużo dodatkowej pracy.
Laurent
1
@TeamUpvote Nie, to wszystko C ++. Aby zejść poniżej 12kB, musisz pozbyć się standardowej biblioteki. Jeśli używasz Visual C ++, możesz znaleźć przykłady tutaj: github.com/laurentlb/Ctrl-Alt-Test/tree/master/F and iquilezles.org/code/framework64k/framework64k.htm .
Laurent

Odpowiedzi:

39

Jest oparty na procedurach . Treść nie jest zawarta w exe, tylko zasady jej rysowania. Po uruchomieniu program rysuje w czasie wykonywania to, czego potrzebuje, nie jest wstępnie renderowane ani zapisywane w żadnej formie.

Jest to ta sama metoda, której używa Elite, aby stworzyć ogromny wszechświat układów gwiezdnych itp.

To niesamowite, co jest dziś możliwe przy użyciu generowania procedur, myślę, że w grach będzie tego więcej w przyszłości.

Gary Willoughby
źródło
Pomyślałem, że tekstury są dość dokładne. Więc po prostu narysują go za pomocą kodu i chyba bez plików tekstur?
Samuli Lehtonen,
1
Tak to prawda.
Gary Willoughby,
1
W tego rodzaju demonstracjach dźwięk jest generowany również z kodu (bez próbek). Wszystko jest syntetyzowane w locie ... i oczywiście niektóre kredyty i sceny znikania pozwalają na ciężkie wstępne obliczenia :)
Karoly Horvath
2
Jako były artysta 3d od dawna chciałem, aby tekstury generowane przez procedury były dołączane jako standardowy zestaw narzędzi do głównych programów artystycznych 3d. Prawdopodobnie najbliższe jest użycie wbudowanego języka skryptowego ....
Darknight
Być może zainteresują Cię takie rzeczy jak Project Frontier i Procedural World , które są dwoma podejściami do tego samego problemu poprzez generowanie procedur.
Kyte
10

Jak mówi @Gary Willoughby, jest to bardzo proceduralne.

W grę wchodzi także znaczące ręczne asmkodowanie, a także duża wiedza na temat tego, ile okien / platform z wybranych systemów działa wewnętrznie.

Istnieje również kategoria demonstracyjna 4K, jeśli chcesz zobaczyć jeszcze bardziej ekstremalne przykłady kompaktowego kodu.

Niektóre grupy DemoScene wydają dema online, gdzie można je pobrać i odtworzyć, jeśli chcesz.

Spisek
farb-rausch

Zobacz także Wikipedię na temat historii DemoScene

Uwaga - wiele pokazów spowoduje, że Twój program antywirusowy przestraszy . Zasadniczo wydaje się, że prawie wszystkie wersje demonstracyjne używają spakowanych plików .exe, a większość grup demonstracyjnych tworzy własne pakiety. Niestety, ponieważ wiele firm AV jest kiepskich, ogólnie twierdzą, że każdy spakowany binarny plik wykonywalny jest pewnego rodzaju wirusem.

Zmyślone imię
źródło
1
Zastanawiam się, jaką firmę AV masz na myśli, jako że być może niesławną ...
Jerry Coffin
+1 Niesamowite rzeczy. Czy używają interfejsów API Nvidea, czy korzystają bezpośrednio z karty graficznej?
1
Zwykle konfigurują minimalną platformę OpenGL i uruchamiają shadery, aby zrobić resztę
Jasper Bekkers,
3
To naprawdę imponujące rzeczy. Myślę, że gdybym był około 15 lat młodszy, to właśnie spędzałbym wolny czas.
Oto niektóre dema montażu 2011: archive.assembly.org/2011
Samuli Lehtonen
4

Jak wszyscy mówią, w dużej mierze opiera się na generowanym przez procedury kodzie, ale w tym demie jest jeszcze więcej, jeśli zatrzymasz się i przyjrzysz się niektórym szczegółom, zobaczmy na przykład te ściany: spójrz na cegły i sposób, w jaki odbija się na nich światło. Wyglądają naturalnie.

To dlatego, że używają wielu shaderów wierzchołków i shaderów fragmentów, aby ożywić generowaną zawartość.

Spędziłem trochę czasu próbując zrozumieć, w jaki sposób robią takie rzeczy, i jestem zaskoczony każdym fragmentem kodu, który biorę z tych wersji demonstracyjnych.

BTW, robiąc te dema, używają również narzędzi do kompresji, aby wycisnąć jeszcze więcej. sprawdź ten proces kompilacji:

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
źródło
3

Jest to prezentacja PowerPoint , w jaki sposób renderowania zostało zrobione w tym konkretnym demo. Samo to nie wyjaśnia, jak wszystko mieści się w 64 kilobajtach, ale jest kluczem do tego, jak geometria została stworzona na tak małej przestrzeni.

Na jego blogu znajduje się również wiele interesujących lektur na temat jego innych produkcji demoscenicznych.

sprzedać
źródło
1

Jak już powiedzieli inni, wiele z nich zależy od zasobów generowanych proceduralnie.

Jest jeszcze jeden element, którym jest kompresja. Wersje demonstracyjne 4k i 64k używają wysoce wyspecjalizowanych kompresorów wykonywalnych. Najbardziej znane z nich to kkrunchy autorstwa farbrausch (dla 64ks) i crinkler od TBC & Loonies (dla 4ks). Co więcej, nowoczesne wersje demonstracyjne intensywnie korzystają z shaderów, które są zwykłym tekstem, a tym samym dramatycznie zmniejszają się po kompresji.

Jeśli chodzi o integrację z grami wideo, głównym problemem jest to, że wszystko to wymaga czasu. Generowanie treści proceduralnych zajmuje dużo czasu, a wyodrębnianie pliku wykonywalnego zajmuje dużo czasu. Ludzie mają na ogół więcej miejsca na dyskach twardych niż czas na czekanie na załadowanie się gry, więc nie sądzę, że w najbliższym czasie zobaczymy ich dużo w szeroko dostępnych grach.

Tarmil
źródło