Делал свой Minecraft — и понял, почему Minecraft устроен именно так
В этом году я делаю Антику — игру в духе Minecraft: воксельный мир из блоков, процедурный рельеф, постройки.

Антика, февраль 2026: процедурный рельеф — река, берег и горы.
Щель у воды. Целый день я потратил на одну мелочь: чтобы, когда опускаешься в воду, на экране не было щели между водой и не-водой. Пока камера пересекает поверхность, часть кадра уже под водой, а часть ещё над ней, и граница между ними обычно рвётся. Я придумал хитрый алгоритм через пересечение плоскостей — плоскости воды и ближней плоскости камеры, — и граница стала ровной. В самом Minecraft эта щель, насколько я вижу, до сих пор есть.

Отладка в редакторе Unity: камера стоит прямо на поверхности воды, жёлтым — её пирамида видимости.

Тот же алгоритм в отладке: пирамида камеры красным и многоугольник, который получается из пересечения плоскостей.
Дальше я разбирался с остальным: деление мира на чанки, освещение, генерация рельефа и построек. И пришёл к выводу, что ничего лучше, чем в Minecraft, тут не придумаешь. Все их решения связаны друг с другом.
Освещение. Это не рейтрейсинг, а заливка от источника света примерно на 16 блоков: свет растекается от блока к блоку и затухает. Так сохраняется баланс — работает достаточно быстро, а качество приемлемое.
Чанки на всю высоту. Логичнее, казалось бы, делать чанки 16×16×16. Но для освещения нужно всегда знать, какой блок самый верхний: где кончается небо. Я сначала так и начал — генерировал кубами по 16 блоков и думал, что по связанным чанкам смогу обойти поверхность. Но гарантировать этого нельзя: формула ландшафта может выдать что-то ещё выше, над «потолком», и тогда непонятно, не в пещере ли я. Поэтому чанк приходится генерировать целиком, на всю высоту мира, — это затрудняет, но иначе свет не посчитать.

Генерация по чанкам в отладке, вид из-под мира: рамками показаны чанки.
Деревни и идемпотентность. С постройками своя история. С какой бы стороны игрок ни пришёл к месту, где должна стоять деревня, она должна получиться той же самой. А деревня не строится по формуле от ландшафта, как рельеф: она растёт рекурсивно от одной точки — улочки, домики и всё прочее. Значит, нужно заранее знать координату этой точки, и эта координата зашита в регион.
Блок, чанк, регион. Хранение тоже получилось логичным: иерархия блок → чанк → регион, и регион целиком сохраняется в один файл. Ничего промежуточного добавлять не нужно.
И отдельно — уважение к оптимизации, которую Minecraft сделал, когда переделывал пещеры. Видно, что всё работает очень быстро и что они действительно постарались. Похоже, под капотом у них всё же есть чанки поменьше — чисто технически, чтобы мешер на них быстро работал.
Что я из этого вынес: прежде чем изобретать своё, разберись, почему у лидера сделано именно так. В Minecraft одно решение тянет другое: освещение диктует высоту чанка, генерация построек — регион, регион — формат хранения.