¿Cómo puede todo esto encajar en 64kb?

45

Entonces, estoy aquí en la asamblea 2011 y se jugó esta demostración: http://www.youtube.com/watch?v=69Xjc7eklxE&feature=player_embedded

Es un solo archivo, lo dice en las reglas. Entonces repito, ¿cómo han hecho que esto se ajuste a un archivo tan pequeño?

Samuli Lehtonen
fuente
¿Se puede descargar esta demo? Me gustaría ver cómo funciona cuando se ejecuta localmente.
David
1
Sí, puede encontrar esa demostración aquí: ftp.untergrund.net/users/atzAdmin/fltatz_uncovering_static.zip
Samuli Lehtonen
Por supuesto que son varios megabytes de bibliotecas del sistema sin la cual esto no sería capaz de dibujar un polígono simple ...
Hobbs
2
Como alguien que crea activamente introducciones de 64kB, he escrito este artículo: ctrl-alt-test.fr/?p=494 (¿Cómo pueden ser tan pequeñas las producciones de demoscene?). TL; DR: generación de procedimientos, compresión y mucho trabajo extra.
Laurent
1
@TeamUpvote No, todo es C ++. Para ir por debajo de 12kB, debe deshacerse de la biblioteca estándar. Si usa Visual C ++, puede encontrar ejemplos aquí: github.com/laurentlb/Ctrl-Alt-Test/tree/master/F e iquilezles.org/code/framework64k/framework64k.htm .
Laurent

Respuestas:

39

Está basado en procedimientos . El contenido no está incluido en el exe, solo las reglas de cómo dibujarlo. Cuando se inicia, el programa dibuja lo que necesita en tiempo de ejecución, no se renderiza ni se guarda previamente de ninguna forma.

Este es el mismo método utilizado por Elite para crear un vasto universo de sistemas estelares, etc.

Es bastante sorprendente lo que es posible hoy usando la generación de procedimientos, creo que los juegos contarán con más de esto en el futuro.

Gary Willoughby
fuente
Solo pensé que las texturas son bastante precisas. Entonces, ¿lo dibujan con código y sin ningún archivo de textura, supongo?
Samuli Lehtonen
1
Si eso es correcto.
Gary Willoughby
1
Para este tipo de demostraciones, el sonido también se genera a partir del código (sin muestras). Todo se sintetiza sobre la marcha ... y, por supuesto, algunos créditos y escenas desvanecidas permiten una precomputación pesada :)
Karoly Horvath
2
Como ex artista 3D, he estado esperando que las texturas generadas por procedimientos se incluyan como un conjunto de herramientas estándar en los programas de arte 3D convencionales durante mucho tiempo. Probablemente lo más cercano es usar el lenguaje de script incorporado ...
Darknight
Puede interesarle cosas como Project Frontier y Procedural World , que son dos enfoques para el mismo problema a través de la generación de procedimientos.
Kyte
10

Como dice @Gary Willoughby, es ampliamente procesal.

Además, hay una importante asmcodificación manual involucrada, junto con un amplio conocimiento de cuántos de los sistemas de Windows / plataforma de elección funcionan internamente.

También hay una categoría de demostración 4K, si desea ver ejemplos aún más extremos de código compacto.

Algunos de los grupos DemoScene lanzan sus demos en línea, donde puede descargarlas y reproducirlas si lo desea.

Conspiración
farb-rausch

Ver también Wikipedia sobre la historia de la DemoScene

Nota: muchas de las demostraciones harán que tu antivirus se asuste . Básicamente, parece que casi todas las demostraciones usan archivos .exe empaquetados, y la mayoría de los grupos de demostración lanzan sus propios empacadores. Desafortunadamente, debido a que muchas compañías de AV son poco convincentes, generalmente afirman que cualquier ejecutable binario empaquetado es un virus de algún tipo.

Nombre falso
fuente
1
Me pregunto qué compañía audiovisual tienes en mente, ya que posiblemente no sea cojo ...
Jerry Coffin
+1 cosas increíbles. ¿Utilizan las API de Nvidea o dibujan directamente a la tarjeta gráfica?
1
Por lo general, configuran un marco OpenGL mínimo y lanzan algunos sombreadores para hacer el resto
Jasper Bekkers
3
Es algo realmente impresionante. Creo que si fuera unos 15 años más joven, esto sería lo que dedicaría mi tiempo libre.
Aquí hay algunas demostraciones de la asamblea 2011: archive.assembly.org/2011
Samuli Lehtonen
4

Como todo el mundo dice que depende en gran medida del código generado por el procedimiento, pero hay aún más sobre esta demostración en particular, si hace una pausa y mira algunos detalles, veamos, por ejemplo, esas paredes: mire esos ladrillos y cómo la luz se refleja en ellos. Se ven naturales.

Esto se debe a que están utilizando muchos sombreadores de vértices y sombreadores de fragmentos para dar vida al contenido generado.

Pasé un tiempo tratando de comprender cómo hacen esas cosas, y me sorprendí con cada código que tomé de esas demostraciones.

Por cierto, al hacer esas demostraciones también usan herramientas de compresión para exprimir aún más. verifique este proceso de compilación:

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
fuente
3

Hay una presentación de PowerPoint de cómo se realizó el renderizado en esta demostración específica. Esto por sí solo no explica cómo todo encaja en 64 kilobytes, pero es la clave de cómo se creó la geometría en tan poco espacio.

También hay muchas lecturas interesantes en su blog sobre sus otras producciones de demoscene.

msell
fuente
1

Como ya han dicho otros, mucho de esto se basa en activos generados por procedimientos.

Hay otro elemento, que es la compresión. Las demostraciones 4k y 64k utilizan compresores ejecutables altamente especializados. Los más famosos son kkrunchy de farbrausch (para 64ks) y crinkler de TBC & Loonies (para 4ks). Además, las demostraciones modernas hacen un uso intensivo de los sombreadores, que son texto sin formato y, por lo tanto, se reducen drásticamente después de la compresión.

Ahora, en lo que respecta a la integración en los videojuegos, el principal problema es que todo esto lleva tiempo. Generar contenido procesal lleva tiempo, y extraer el ejecutable lleva una gran cantidad de tiempo. Y las personas generalmente tienen más espacio en sus discos duros que el tiempo para esperar a que se cargue el juego, por lo que no creo que veamos mucho de esto en los juegos ampliamente disponibles en el corto plazo.

Tarmil
fuente