Стриминг уровней

Пост на правах идеи — реализации пока нет даже в черновом виде, поэтому пока сложно сказать, появится ли эта фича в следующей версии Dagon.

Стриминг уровней — это способ реализации игр с большим миром, который не может быть загружен в память целиком. Система стриминга загружает и выгружает фрагменты игрового мира по мере того, как игрок путешествует по нему.

Я планирую написать систему, предназначенную для перемещений преимущественно на плоскости — как правило, по поверхности планеты. Мир разбивается на 2D сетку с каким-то заданным шагом — например, 100×100 метров. Каждая ячейка сетки представляет собой отдельный ресурс, который можно создать и загрузить независимо от остальных. По умолчанию игра загружает только «домашнюю» ячейку, в которой находится игрок в начале пути, а также 8 соседних ячеек. Таким образом, видимыми и интерактивными для игрока одновременно являются 9 ячеек. В зависимости от размера ячейки и особенностей игры этот параметр, скорее всего, можно будет настраивать — также, возможно, для далеких ячеек можно будет отображать LOD’ы. Когда игрок перемещается в соседнюю ячейку, игра подгружает необходимые отсутствующие в памяти ячейки, если они существуют, и выгружает ячейки, ставшие слишком далекими. Загрузка будет происходить в фоновом потоке, по возможности без прерывания геймплея.

Особенность системы будет в том, что ячейка, в которой находится игрок, всегда рисуется в центре мировых координат. Позиция игрока пересчитывается при пересечении границ ячеек — иными словами, он всегда перемещается в фиксированной области пространства, поэтому точность координат не будет падать по мере движения по миру. Потенциально это позволяет продлевать мир бесконечно. На практике интересным решением было бы создать замкнутую топологию мира, имитирующую сферическую поверхность планеты — если долго идти по прямой в любом направлении, то вернешься в исходную точку.

Сжатие текстур, часть I. S3TC

Я как-то обещал написать пост с подробным разбором всех форматов сжатия текстур и соответствующего инструментария — и вот, наконец, начинаю публиковать частями. Сегодня рассмотрим один из старейших и самых популярных — S3TC (DXTn).

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

(далее…)