Como isso tudo se encaixa em 64kb?

45

Então, eu estou aqui na montagem 2011 e houve uma demonstração: http://www.youtube.com/watch?v=69Xjc7eklxE&feature=player_embedded

É apenas um arquivo, diz isso nas regras. Então, repito: como eles fizeram isso para caber em um arquivo tão pequeno?

Samuli Lehtonen
fonte
Esta demonstração pode ser baixada? Gostaria de ver como funciona quando executado localmente.
David
1
Sim, você pode encontrar essa demonstração aqui: ftp.untergrund.net/users/atzAdmin/fltatz_uncovering_static.zip
Samuli Lehtonen
Claro que há são vários megabytes de bibliotecas do sistema, sem que esta coisa não seria capaz desenhar um único polígono ...
hobbs
2
Como alguém que cria ativamente introduções de 64kB, escrevi este artigo: ctrl-alt-test.fr/?p=494 (Como as produções de demosceno podem ser tão pequenas?). TL; DR: geração processual, compactação e muito trabalho extra.
Laurent
1
@TeamUpvote Não, é tudo C ++. Para ficar abaixo de 12kB, você precisa se livrar da biblioteca padrão. Se você usa o Visual C ++, pode encontrar exemplos aqui: github.com/laurentlb/Ctrl-Alt-Test/tree/master/F e iquilezles.org/code/framework64k/framework64k.htm .
Laurent

Respostas:

39

É baseado em procedimentos . O conteúdo não está incluído no exe, apenas as regras de como desenhá-lo. Quando iniciado, o programa desenha o que precisa no tempo de execução e não é pré-renderizado ou pré-salvo de qualquer forma.

Este é o mesmo método usado pela Elite para criar um vasto universo de sistemas estelares, etc.

É incrível o que é possível hoje usando a geração procedural, acho que os jogos apresentarão mais disso no futuro.

Gary Willoughby
fonte
Eu apenas pensei que as texturas são bastante precisas. Então eles desenham com código e sem nenhum arquivo de textura, eu acho?
Samuli Lehtonen
1
Sim está certo.
Gary Willoughby
1
Para esses tipos de demos, o som também é gerado a partir do código (sem amostras). Tudo é sintetizado na mosca ... e, claro, alguns créditos e cenas de fade permitir precomputation pesado :)
Karoly Horvath
2
Como um ex-artista 3d, eu queria que as texturas geradas procedurais fossem incluídas como conjunto de ferramentas padrão nos principais programas de arte 3d por um longo tempo. Provavelmente, o mais próximo é usando o built-in linguagem de script ....
Darknight
Você pode estar interessado em coisas como Project Frontier e Procedural World , que são duas abordagens para o mesmo problema por meio da geração de procedimentos.
Kyte
10

Como @Gary Willoughby diz, é extensivamente processual.

Além disso, há uma asmcodificação manual significativa envolvida, juntamente com amplo conhecimento de quantos sistemas de janelas / plataformas de escolha trabalham internamente.

Há também uma categoria de demonstração em 4K, se você quiser ver exemplos ainda mais extremos de código compacto.

Alguns dos grupos DemoScene lançam suas demos online, onde você pode baixá-las e reproduzi-las, se quiser.

Conspiração
farb-rausch

Veja também a Wikipedia sobre a história do DemoScene

Nota - muitas das demos farão com que o seu antivírus surte . Basicamente, parece que todas as demos usam arquivos .exe compactados e a maioria dos grupos de demonstração lança seus próprios empacotadores. Infelizmente, como muitas empresas de antivírus são coxas, elas geralmente afirmam que qualquer executável binário compactado é algum tipo de vírus.

Nome falso
fonte
1
Estou se perguntando o que a empresa AV você tem em mente como possivelmente até mesmo ser não-coxos ...
Jerry Coffin
+1 coisas impressionantes. Eles usam as APIs da Nvidea ou desenham diretamente na placa de vídeo?
1
Eles costumam estabelecer um quadro OpenGL mínimo e pontapé de saída alguns shaders para fazer o resto
Jasper Bekkers
3
São coisas realmente impressionantes. Eu acho que se eu fosse uns 15 anos mais novo, seria o que eu passaria meu tempo livre fazendo.
Aqui estão algumas demos da montagem 2011: archive.assembly.org/2011
Samuli Lehtonen
4

Como todo mundo está dizendo que confia amplamente no código processual gerado, mas há ainda mais sobre essa demonstração em particular, se você parar e olhar para alguns detalhes, vamos ver, por exemplo, essas paredes: veja essas peças e como a luz reflete nelas. Eles parecem naturais.

Isso ocorre porque eles usam muitos shaders de vértice e shaders de fragmento para dar vida ao conteúdo gerado.

Passei algum tempo tentando entender como eles fazem essas coisas e me sinto impressionado com cada pedaço de código que pego nessas demos.

BTW, ao fazer essas demos, eles também usam ferramentas de compressão para espremer ainda mais. verifique este processo de compilação:

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

Há uma apresentação em PowerPoint de como a renderização foi feita nesta demonstração específica. Isso por si só não explica como tudo se encaixa em 64 kilobytes, mas é a chave para como a geometria foi criada em tão pouco espaço.

Também há muitas leituras interessantes em seu blog sobre suas outras produções demoscenas.

msell
fonte
1

Como outros já declararam, muito disso depende de ativos gerados processualmente.

Há outro elemento nele, que é a compactação. As demonstrações de 4k e 64k usam compressores executáveis ​​altamente especializados. Os mais famosos são kkrunchy de farbrausch (por 64ks) e crinkler por TBC & Loonies (por 4ks). Além disso, as demos modernas fazem uso pesado de shaders, que são texto simples e, assim, ficam dramaticamente menores após a compactação.

Agora, no que diz respeito à integração em videogames, o principal problema é que tudo isso leva tempo. A geração de conteúdo processual leva tempo e a extração do executável leva uma quantidade enorme de tempo. E as pessoas geralmente têm mais espaço em seus discos rígidos do que tempo para esperar o jogo carregar, então não acho que veremos muito disso em jogos amplamente disponíveis em breve.

Tarmil
fonte