Наша группа в контакте - VK.com/MirSimCity. В данный момент происходит поиск модераторов на этот сайт, для заполнения
сайта тематичными материалами и публикациями .Все кто хочет стать модератором с
такими условиями ,просьба писать на эл .почту - man455@yandex.ru
У кого есть общедоступные для просмотра альбомы со снимками своих городов, просьба писать о них на man455@yandex.ru
Приветствую всех! Меня зовут Грег Андервуд (Greg Underwood), я программист,
отвечающий за систему областей в SimCity. Система областей, которая
используется для размещения зданий, заменила собой сетку из предыдущих
игр серии.
Строительство города – во многом геометрическая задача. Дороги и здания
нужно разместить в мире так, чтобы город как единое целое развивался
естественно и правдоподобно.
Для этой цели раньше использовалась сетка, которая делила пространство
на квадратные ячейки. Каждое здание и дорога занимали определенное число
ячеек. Сетка упрощала размещение зданий и делала строительство города
похожим на «Тетрис».
Извилистые дороги и полностью трехмерный мир SimCity перевернули игру и
заставили искать новый способ рассчитывать размещение зданий и рост
города. Так появилась система областей. В ее основе лежат дороги.
Построив дорогу, вы можете размещать здания и создавать области для
жилых, коммерческих или промышленных зданий. Когда вы строите дорогу, в
недрах движка создается ряд участков:
Участки служат для разделения пространства и представляют собой
своеобразную сетку, выровненную вдоль созданных извилистых дорог.
Создавая жилые, коммерческие и промышленные области с помощью
инструмента создания областей, вы можете видеть их форму.
Когда есть место для строительства жилого, коммерческого или
промышленного здания, система областей пытается подыскать группу
участков. Сложность в том, что наша сетка не является регулярной и
квадратной. Из-за того, что участки повторяют форму дороги, они зачастую
сужены или расширены с одного конца и нередко накладываются друг на
друга. Другими словами, группа участков далеко не всегда имеет
прямоугольную форму. Ниже представлены скриншоты, сделанные в режиме
отладки. На них можно видеть, какие участки соответствуют различным
областям. Как видите, группы участков приобретают весьма интересные
очертания при использовании дорог разной формы.
Мы имеем дело с интересной вычислительной задачей: по заданному контуру
здания нужно определить, помещается ли это здание в полигональную
форму, образованную группой участков. Математически эта задача
называется «Размещение объектов». Простыми словами ее можно
сформулировать так: «Сколько разных способов нужно применить, чтобы
узнать, поместится ли одна фигура внутри другой?» Поскольку существует
бесконечное множество форм, решение может быть очень сложным, а его
реализация может оказаться весьма затратной. Но в случае с SimCity эта
задача значительно упрощается:
Во-первых, нам известно направление здания – его фасад направлен к
дороге. Во-вторых, мы знаем форму здания – она всегда представляет собой
прямоугольник.
Эта информация позволяет свести решение задачи к паре простых тестов, за
счет чего мы можем быстро размещать здания вдоль городских улиц.
Конечно,
есть целый ряд подводных камней: нужно учитывать пересечения (и
наложение участков друг на друга), крутые склоны, мосты, берега водоемов
и скалы. Немало хлопот доставляют и здания – особенно здания с
собственными дорогами и модулями, которые можно размещать рядом с ними.
Все здания в игре учитываются системой областей и взаимодействуют между
собой. Правдоподобное и реалистичное взаимодействие всех зданий в
постоянно развивающемся городе, когда нужно учитывать множество
факторов, – пожалуй, самая интересная и увлекательная проблема, с
которой мне приходилось сталкиваться в своей карьере. Надеюсь, результат
понравится вам не меньше, чем мне нравится работать над этой задачей!