Questão:
Como os dados mundiais são armazenados no Minecraft?
Lincoln Bergeson
2012-06-15 03:49:00 UTC
view on stackexchange narkive permalink

Os mundos do Minecraft são enormes; supostamente, quase 130 quatrilhões de blocos. (Diminua um pouco o zoom nesse site e você verá.) De qualquer forma, olhei na pasta Salvar (C: \ Usuários \ nome de usuário \ AppData \ Roaming.minecraft \ saves) e o mundo em que estou jogando no momento tem uma pasta com o mesmo nome de meu mundo. Esta pasta tem apenas 12 Mb. O Minecraft realmente armazena 130 quatrilhões de blocos em 12 Mb ou há algum tipo de codificação de nível insano acontecendo? Mesmo que haja uma codificação maluca ("Salvando pedaços", seja lá o que isso signifique) no próprio jogo, não se simplesmente encaixam 130 quatrilhões de blocos em menos de um gigabyte de memória física.

Como o Minecraft armazena o mundo dados? Como um programador, eu entendo os mapas de blocos que representam 1 ou mais blocos (em um sentido 2D) por byte e dados mundiais desse tipo, mas eu simplesmente não consigo entender como 130 quatrilhões de blocos ocupam tão pouca memória.

verifique o wiki sobre ele http://www.minecraftwiki.net/wiki/Anvil_file_format trechos são explicados [aqui] (http://www.minecraftwiki.net/wiki/Chunks)
"não se encaixam simplesmente 130 quatrilhões de blocos em menos de um gigabyte" .. Você acabou de fazer meu dia, senhor.
Cinco respostas:
Matthew Scharley
2012-06-15 03:58:58 UTC
view on stackexchange narkive permalink

Não há 130 quatrilhões de blocos em um salvamento de mundo típico. O mundo é gerado conforme necessário e apenas as áreas geradas são salvas. Isso significa que você está salvando apenas alguns pedaços. Um pedaço no Minecraft é uma área de 16 x 16 x altura mundial blocos de tamanho (atualmente 65536 blocos, anteriormente 32768).

Mas, teoricamente, você acabará por explorar todos os 130 quatrilhões de blocos, certo? Obviamente, isso levaria centenas de horas, mas não importa. Nesse caso, os dados de nível seriam apenas massivos?
@LincolnBergeson: Sim. Mas explorar todo o mundo do minecraft não é fisicamente possível sem algum mod para acelerá-lo ou algo assim.
@MathhewScharley: OK. No jogo, os blocos são armazenados em pedaços? Parece que com coisas como iluminação dinâmica (dada a iluminação pré-computada encontrada em blocos) você precisaria de alguma outra estrutura de dados para dados mundiais.
@LincolnBergeson: A maneira mais fácil de provar isso a si mesmo é iniciar um novo mapa no modo criativo e voar em uma direção e observar seu arquivo salvo crescer
@LincolnBergeson: Agora você está entrando no reino do gamedev.SE. Não estou 100% no interior, mas sei que o Minecraft carrega e descarrega um certo número de pedaços ao seu redor (10 [?]), Que é um pouco mais longe do que você pode ver. Isso cuidaria dos problemas de iluminação, etc.
@MathhewScharley: Minecraft carrega e descarrega 10 pedaços ao meu redor a cada quadro? Estou impressionado que meu sistema pode lidar com isso a uma taxa de quadros decente.
vamos [continuar essa discussão no chat] (http://chat.stackexchange.com/rooms/3777/discussion-between-lincoln-bergeson-and-matthew-scharley)
Na verdade, o que está armazenado são arquivos de região de 256x256 x altura, não arquivos de pedaços.
@kotekzot: Não tenho certeza do formato desses arquivos embora. Essas regiões inteiras não são geradas e salvas, são?
@kotekzot: qual é a diferença entre arquivos de região e arquivos de bloco?
@LincolnBergeson: Uma região é apenas outro delineamento de uma área. Você pode pensar nisso como um grupo de blocos, onde um bloco é um grupo de blocos. Especificamente, uma região é um grupo de blocos de 16x16.
@LincolnBergeson - Só porque ninguém mais tratou disso explicitamente, SIM, o arquivo do mundo seria enorme (medido em gigabytes se não em terabytes) se você gerasse todos os pedaços possíveis. No entanto, não há maneira viável de fazer isso no jogo durante a vida humana.
Tenho certeza de que os pedaços só serão salvos se algo for construído ou destruído nele.Caso contrário, o gerador de terreno reconstrói conforme necessário ...
jhow
2014-06-28 00:09:07 UTC
view on stackexchange narkive permalink

O mundo inteiro é gerado usando valores iniciais. Apenas dados de bloco modificados pelo usuário são armazenados, bem como a semente. No meu motor, tenho o que é chamado de região. É composto por pedaços de 16x16x16 que são cubos de 16x16x16. 4.096 cubos por bloco, 4.096 blocos por região. Um algoritmo determina quais faces dos cubos são visíveis e as adiciona a um buffer de vértice. Apenas pedaços dentro da visualização são construídos. Para gerar um mundo infinito, pedaços são reciclados e construídos conforme você se move. O número de blocos nunca muda. Os cubos são armazenados como uma matriz de bytes, permitindo que você tenha 255 tipos de bloco. Nenhum outro dado é armazenado, uma vez que os normais de face e outras coisas são feitas de forma programática. Um ruído perlin e um algoritmo de worm perlin são usados ​​para gerar novos dados mundiais conforme você se move usando os valores iniciais. Espero que isso ajude alguém.

Isso não está totalmente correto.Os pedaços são salvos assim que são gerados.Do contrário, atualizar seu mundo para uma versão que mudou a geração de terras mudaria todo o seu mundo.
Jeremy
2015-02-04 20:34:15 UTC
view on stackexchange narkive permalink

Tecnicamente, o ar não existe, portanto, os dados do bloco para o ar são armazenados como falsos ou nulos, o que significa que o Minecraft não precisa gerar nada que permita que o tamanho do arquivo seja muito menor. E, como outras pessoas disseram antes, apenas os pedaços que você vê estão carregados, mas isso não é totalmente verdade. Os pedaços de Spawn são sempre carregados, portanto, sempre salvos, o resto é apenas compactado e salvo.

False ou null ainda precisa ser armazenado.É muito pequeno em comparação com outros blocos e oferece eficiência para algoritmos de compressão.
Jesse King
2013-10-25 22:35:38 UTC
view on stackexchange narkive permalink

Tenha em mente que o Minecraft quase certamente armazena seus dados mundiais usando alguma forma de compressão, como RLE (Run Length Encoding), que representa uma string de blocos idênticos como (R16, A65, R1, W15), que basicamente diz :

Os próximos 16 blocos da matriz são rochas, seguidos por 65 blocos de ar, seguidos por um bloco de rocha, seguido por 15 blocos de água ... e assim por diante. p> Dadas as enormes faixas de material homogêneo normalmente gerado em um pedaço do Minecraft (especialmente no ar), esse tipo de formato pode reduzir enormemente a quantidade de espaço necessária para armazená-lo. A construção do jogador tende a fragmentar este espaço e torná-lo menos eficiente, criando matrizes complexas de blocos e espaços - mas mesmo assim, na maioria dos lugares, seria necessário muito menos espaço de armazenamento para representar o pedaço médio desta forma.

Existem otimizações adicionais que você pode empregar, mas esta é provavelmente a mais simples e direta para um mundo como o Minecraft.

O formato do arquivo salvo é [bem documentado] (http://minecraft.gamepedia.com/Anvil_file_format). Ele usa [Zlib para compactar dados de bloco dentro de blocos] (http://minecraft.gamepedia.com/Region_file_format#Chunk_Data), que usa o mesmo algoritmo de compactação de arquivos Zip e imagens PNG.
Better
2012-06-15 05:24:08 UTC
view on stackexchange narkive permalink

Não é 130 quatrilhões porque o limite do céu é de 42 blocos e o limite do solo é 50 e o limite da terra é 136x2 (ambos os lados) faça as contas, não 130 quatrilhões (38841600 blocos)

O tamanho do mundo mudou várias vezes ao longo da vida do Minecraft, e 'limites' são impostos apenas por alguns geradores de mundo. Os números são grandes e irrelevantes para a questão, dado o tamanho do arquivo observado. Além disso, 'ar' ainda é um bloqueio: especificamente, é a falta de um bloqueio. Esse vazio ainda precisa ser armazenado em algum formato, e o Minecraft o faz (o ar é bloco id 0).


Estas perguntas e respostas foram traduzidas automaticamente do idioma inglês.O conteúdo original está disponível em stackexchange, que agradecemos pela licença cc by-sa 3.0 sob a qual é distribuído.
Loading...