База Рецептов Minecraft
Наш опрос
Оцените мой сайт
Всего ответов: 308
Главная » 2011 » Август » 31 » Интересное письмо Нотча
13:16
Интересное письмо Нотча




Ах#енчик! Прямиком из моей головы, вот список главных фишек:

Влияние изменения высоты:

- Влияние на память: Исходя из внутреннего устройства чанков, единственный относительно простой путь увеличения высоты уровня - удвоить её. В результате, потребление памяти может очень быстро выйти из под контроля при увеличении количества битов, доступных в оси Y. Недальновидно будет указывать, что это полностью управляется в синглплеере, но, практически, мультиплеер это уже осиное гнездо в плане потребления RAM,  и единственный путь увеличить высоту уровня - это удвоить объём памяти. Довольно хреново.

- Влияние на CPU: Генерация чанков происходит кусками на X/Z плоскости, но считается, что чанк полностью заполнен в высоту, от админиума до неба. На самом деле, это можно смягчить, так как любой ландшафт выше определённой точки полностью предполагается как воздух, и весь ландшафт ниже другой определённой точки предполагается как камень, тем самым отбивая необходимость для просчёта температуры, влажности, биомов выше или ниже этой точки. Тем не менее, это всё ещё засорение кеша и забивание памяти. Что ещё хуже, так как подземные фичи  генерируются в каждом чанке, то чтобы поддерживать равномерное распределение руды, нужно будет удвоить число вызовов, сделанных к определённому генератору, после каждого удвоения высоты. Это относительно ненапряжно для штук, типа руды, но вот генерация пещер происходит вдоль всей оси высоты, и, будучи рекурсивной функцией, она очень быстро станет ресурсоёмкой.

- Влияние на жёсткий диск: Всё, что хранится в памяти, требуется переносить на диск и обратно. Исходя из факта, что в синглплеере самый главный убийца производительности - даже на моём зверском компьютере - это ввод/вывод диска, серьёзно встаёт вопрос об удвоении записываемой на диск информации. Я не совсем уверен, сжимаются ли чанки перед записью на диск, или это происходит только при передаче их через сеть, но если они сжимаются, то это бесполезно - сжатие облегчает работу диска, но в то же время загружает CPU.
- Влияние на сеть: В мультиплеере чанки нужно передавать гораздо большему количеству людей и гораздо большее количество раз, чем в синглплеере. Это само собой разумеется с точки зрения клиента, сколько данных надо распихать серверу, и, хотя сетевые пакеты и сжимаются, это по прежнему дополнительная нагрузка сети и CPU.

Касательно изменения высоты уровня, это было "легко" в той степени, что это заняло у меня окло 4 часов вчерашнего утра чтобы сделать это, но только потому, что я ковырялся во внутренностях движка с января и психически отслеживал все предположения по поводу этого. Сверху вниз:

- Найдите по коду "11" и "7", замените их "12" и "8" по мере необходимости.

- Найдите по коду 128, это откроет большинство мест, относящихся к высоте карты, т.к. она равна 128.
- Когда меняете места, указанные выше, сохраните себе время рекомпиляции и убедитесь, что изменили все переменные от байтов до коротких целочисленных и т.д., если вы увеличиваете их больше 128. Будучи С++ кодером, я постоянно забывал, что в Java все переменные со знаком.
- Найдите по коду 127, это откроет оставшиееся места, относящиеся к высоте.
- Найдите "64" и "63", это места, где указывается уровень моря - 64, а также лимит высоты железной руды. Лично я поднял уровень воды до 96, вместо того, чтобы удваивать до 128, чтобы иметь 32 тайла дополнительной высоты воды, зато целых 96 дополнительной высоты земли.
- Поправьте генераторы редстоуна, алмазов, золота и т.д.
- Сделайте "grep" через все классы генератора, удваивая RNG baseline и распространяя для каждого.
- Исправьте пару "32768" на "65536", чтобы соответствовать 16*256*16, вместо 16*128*16.
- Я не уверен сколько из этого - результат JAD и сколько - собственно, код, но есть ещё парочка "char whatever = ‘\200’;” в MCP коде, исправьте это на short или int, содержащую 256 вместо 128.

Надо сказать, что игра шла довольно за#%ись с высотой, поднятой до 256. Я думаю 512 не будет сильно напрягать моего железного зверя, но 1024 точно поставит его на колени. Ещё, одна из моих целей, просто для прикола, посмотреть, не смогу ли я сделать Nether с 0-127 блоков, обычный мир с 128-255, небо с 256-383, а потом новое измерение одной из групп моддеров, Aether, с 384-511. Это будет эпично.

Ещё, есть один мод, который делает чанки 16х16х16, но он мне не нравится. Список багов такой же длинный, как хрен Джигурды, и ещё он не изменяет размеры генераторов всяких объектов, так что вы не получите ничего, типа такого:



Просмотров: 446 | Добавил: oOoScarletoOo | Теги: Minecraft 1.7.2, Minecraft | Рейтинг: 0.0/0
Всего комментариев: 0
minecraft-db.3dn.ru
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]