Все мы любим игры с открытым миром. Наша игра, «Смертная казнь» тоже его будет. Но большой мир ставит много технических вопросов.
Если посмотреть на игру в wireframe режиме, то можно увидеть, что мир состоит из треугольников. Множества треугольников. Каждый из которых надо описать. Для каждого из них нужно несколько битов памяти. Страшно представить, сколько нужно ее, чтобы описать наш мир площадью более 8 квадратных километров =) Так как же это обойти? Для этого целесообразно использовать процедурную генерацию. Суть в том, что самого ландшафта нет. Есть только определенный алгоритм, который описывает, как отражать его.
Математикой запахло?
Кто еще не закрыл страницу, могу утешить. Именно для ландшафта математики почти не требуется. Весь ландшафт можно процедурно генерировать с помощью карты высот.
Такой черно-белой картинки, где черный цвет - это долина, а белый - вершина. Согласно серый цвет - это нечто промежуточное. И в зависимости от оттенка, можно вычислить налета высоту каждой точки. Таким образом, наш ландшафт занимает всего каких-то 124 Мб. Более того, нет ограничения в форме. Главное задать, какая высота - белый цвет, а какая - черный.
Более оперативной ест только хром!
Сгенерировать мир - не проблема. А вот уровень храниться будет именно в оперативной памяти. А это еще хуже, чем на жестком диске, ведь оперативки в разы меньше. В таком случае наш ландшафт не имеет загружаться все. А должно генерироваться только несколько метров вокруг. Чтобы так было, нужно просто разбить большую картинку на много маленьких. Таким образом можно очень легко загружать каждую под уровень, и процедурно его генерировать, а когда отходишь на достаточное расстояние - просто изымать его.
Вот и все, что следует сказать о ландшафте. В следующем выпуске будет интересна тема о текстуры и шейдеры. И где же прячется "мыльце". Хочется спросить, нравится такой формат статей ли стоит что-то изменить?
Также будем рады за поддержку проекта в
«Смертная казнь» - дневник разработки # 1
Источник: