Comment tout cela peut-il tenir dans 64 Ko?

45

Donc, je suis ici à l'assemblée 2011 et il y a eu cette démo: http://www.youtube.com/watch?v=69Xjc7eklxE&feature=player_embedded

C'est un seul fichier, c'est écrit dans les règles. Alors, je le répète, comment ont-ils fait en sorte que cela rentre dans un si petit fichier?

Samuli Lehtonen
la source
Cette démo peut-elle être téléchargée? Je voudrais voir comment cela fonctionne lorsqu'il est exécuté localement.
David
1
Oui, vous pouvez trouver cette démo ici: ftp.untergrund.net/users/atzAdmin/fltatz_uncovering_static.zip
Samuli Lehtonen
Bien sûr, il y a plusieurs mégaoctets de bibliothèques système sans lesquelles cette chose ne pourrait pas dessiner un seul polygone ...
hobbs
2
En tant que créateur actif d’intro de 64 Ko, j’ai écrit cet article: ctrl-alt-test.fr/?p=494 (Comment des productions de demoscene peuvent-elles être aussi petites?). TL; DR: génération procédurale, compression et beaucoup de travail supplémentaire.
Laurent le
1
@TeamUpvote Non, tout est en C ++. Pour aller au-dessous de 12 Ko, vous devez vous débarrasser de la bibliothèque standard. Si vous utilisez Visual C ++, vous pouvez trouver des exemples ici: github.com/laurentlb/Ctrl-Alt-Test/tree/master/F et iquilezles.org/code/framework64k/framework64k.htm .
Laurent le

Réponses:

39

C'est basé sur la procédure . Le contenu n'est pas inclus dans l'exe, seulement les règles pour le dessiner. Une fois lancé, le programme dessine ce dont il a besoin au moment de l'exécution, il n'est ni pré-rendu ni pré-enregistré, sous aucune forme.

C'est la même méthode utilisée par Elite pour créer un vaste univers de systèmes stellaires, etc.

C'est assez incroyable ce qui est possible aujourd'hui en utilisant la génération procédurale, je pense que les jeux en présenteront davantage dans le futur.

Gary Willoughby
la source
Je pensais juste que les textures sont assez précises. Donc, ils ne font que dessiner avec du code et sans aucun fichier de texture, je suppose?
Samuli Lehtonen
1
Oui c'est vrai.
Gary Willoughby
1
Pour ce type de démonstration, le son est également généré à partir de code (pas d’échantillons). Tout est synthétisé à la volée ... et bien sûr des crédits et des fondus permettent un pré-calcul lourd :)
Karoly Horvath
2
En tant qu'ancien artiste 3D, je souhaitais depuis longtemps que les textures générées par procédure soient incluses dans les outils standard des programmes d'art 3D classiques. Le plus proche est probablement le langage de script intégré ....
Darknight
Vous pourriez être intéressé par des projets tels que Project Frontier et Procedural World , deux approches du même problème via la génération de procédures.
Kyte
10

Comme @Gary Willoughby le dit, le processus est très développé.

En outre, le asmcodage manuel est important , de même qu'une connaissance approfondie du nombre de systèmes de fenêtres / plates-formes de choix fonctionnant en interne.

Il existe également une catégorie de démonstration 4K, si vous souhaitez voir des exemples encore plus extrêmes de code compact.

Certains des groupes DemoScene lancent leurs démos en ligne, où vous pouvez les télécharger et les lire si vous le souhaitez.

Complot
farb-rausch

Voir aussi Wikipedia sur l'histoire du DemoScene

Remarque: de nombreuses démos feront paniquer votre antivirus . En gros, il semble que pratiquement toutes les démos utilisent des fichiers .exe emballés, et la plupart des groupes de démos lancent leurs propres programmes de compression. Malheureusement, comme beaucoup de sociétés audiovisuelles sont boiteuses, elles prétendent généralement que tout fichier exécutable binaire emballé est un virus.

Faux nom
la source
1
Je suis à me demander ce que l' entreprise AV vous avez à l' esprit que même peut - être non boiteux ...
Cercueil Jerry
+1 truc génial. Utilisent-ils les API Nvidea ou dessinent-ils directement sur la carte graphique?
1
Ils mettent généralement en place un framework OpenGL minimal et lancent quelques shaders pour faire le reste
Jasper Bekkers
3
C'est vraiment impressionnant. Je pense que si j’avais environ 15 ans de moins, c’est ce que je ferais de mon temps libre.
Voici quelques démonstrations de montage 2011: archive.assembly.org/2011
Samuli Lehtonen
4

Comme tout le monde le dit, ils font largement appel au code généré par les procédures, mais cette démo est encore plus intéressante, si vous observez quelques détails, regardez par exemple ces murs: regardez ces briques et comment la lumière les réfléchit. Ils ont l'air naturel.

En effet, ils utilisent beaucoup de vertex shaders et de fragment shaders pour donner vie au contenu généré.

J'ai passé un certain temps à essayer de comprendre comment ils réalisent de telles choses et je suis émerveillé par chaque morceau de code que je récupère dans ces démos.

En passant, lors de ces démos, ils utilisent également des outils de compression pour compresser encore plus. vérifier ce processus de compilation:

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
la source
3

Il existe une présentation PowerPoint de la manière dont le rendu a été effectué dans cette démo spécifique. Cela seul n'explique pas comment tout se situe dans 64 kilo-octets, mais constitue la clé de la création de la géométrie dans un espace aussi réduit.

Il y a aussi beaucoup de lectures intéressantes sur son blog à propos de ses autres productions de demoscene.

msell
la source
1

Comme d'autres l'ont déjà indiqué, cela repose en grande partie sur des actifs générés de manière procédurale.

Il y a un autre élément, la compression. Les démos 4k et 64k utilisent des compresseurs exécutables hautement spécialisés. Les plus célèbres d'entre eux sont kkrunchy by farbrausch (pour 64ks) et crinkler par TBC & Loonies (pour 4ks). De plus, les démos modernes font un usage intensif des shaders, qui sont du texte brut et deviennent donc considérablement plus petits après compression.

Maintenant, en ce qui concerne l'intégration dans les jeux vidéo, le principal problème est que tout cela prend du temps. La génération de contenu procédural prend du temps et l'extraction de l'exécutable prend énormément de temps. Et les gens ont généralement plus d'espace sur leurs disques durs que d'attendre le chargement du jeu. Je ne pense donc pas que nous verrons cela bientôt dans des jeux largement disponibles.

Tarmil
la source