Как работает трафик в C:S

    Перевод статьи с сайта gamasutra.com, сделанный пользователем Hitzu.

    ____________________________________________________________________________

    Кто: программисты Антти Лето, Дамьен Морелло, ведущий дизайнер Каролиина Корппоо

    Мы работаем в Colossal Order, финской независимой студии, и специализируемся на играх-симуляторах для ПК. С момента основания в 2009 и мы выпустили три игры: Cities in Motion, игра-симулятор общественного транспорта, CIties in Motion 2, её сиквел, и Cities: Skylines, олдскульный градосимулятор. В нашей команде всего 13 человек, и мы все очень любим тортики и синих пичуг.

Серия игр Cities in Motion была обращена к довольно небольшой, но очень преданной аудитории, в то время как Skylines обратила на себя взоры намного более обширной части игроков, не все из которых знакомы с симуляторами. Мы гордимся тем, что поклонникам градосимуляторов игра понравилась и рады тому, как моддеры быстро принялись улучшать игру. Нашей целью является поощрять моддинг и стереть границу между игрой и творчеством так, чтобы люди почувствовали игру своей.

Что: Транспортная система в Cities: Skylines

Регулирование транспорта – одна из главных целей в игре, возможно наиважнейшая. Есть несколько разных типов дорог, и каждый важен по-своему. Инструмент дорог достаточно гибок, чтобы игроки могли создать сложные дорожные развязки и таким образом регулировать транспортный поток, но и довольно простой, чтобы обычная прокладка дорог не превратилась в тяжкую повинность.

CitiesSkylines05.jpg

Существует предел того, сколько жителей и машин может быть смоделировано на улицах одновременно. Если лимит не пройден, жители могут решить попутешествовать. У горожан есть несколько мест, которые они хотят посетить. Когда эти заведения заполнятся, то спрос на новые такие заведения возрастёт. Когда житель выходит на улицу, то он выбирает самый быстрый способ добраться до места назначения.

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

Когда автомобили спланируют свой маршрут, то они “прилипнут” к нему. Они не будут пересчитывать его посередине дороги, ели только на их пути ничего не изменилось. Если по какой-то причине они не могут найти дорогу в выбранное место, то телепортируются в место отбытия.

Машины принадлежат жителям или зданиям, так что они всегда должны куда-либо вернуться. Некоторые приезжают из-за пределов карты и возвращаются туда, если потеряются по пути. Транспорт загодя выбирает ту полосу для движения, которая нужна для поворота в ту сторону, куда ему нужно.

Почему?

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

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

CitiesSkylines07.jpg

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

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

Как

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

Узлы (известные также как контрольные точки) содержат позиции начала и конца сегмента, а сам сегмент содержит направление начала и конца. Затем эта структура конвертируется в кривую Безье с помощью создания дополнительных контрольных точек из заданный позиций и напрвлений.

CitiesSkylines04.jpg

Геометрия дороги затем создаётся при помощи стандартного меша, тесселяции в совокупности с вершинным шейдером, который преобразует меш согласно данным сплайна. Это эффективно, так как данные вершин для дорог могут быть общими для дорог одного типа. UV карты также рассчитываются в вершинном шейдере на основе длины сплайна.

Перекрёстки создаются похожим образом. Их сегменты содержат данные о соединениях с соседними сегментами, а также тип дорог. Зная тип дороги, каждому сегменту теперь известно о доступных ему полосах, что и определяет их количество и смещение от центра.

Учитывая всё сказанное выше, машины и грузовики знают где им можно ездить по дороге. Вместо того, чтобы задействовать наивную интерполяцию вдоль сплайна, мы сделали весь транспорт настоящими физическими объектами со своей скоростью, которые стараются двигаться через множество точек привязки, следуя кривой. Это позволяет предсказать поведение на крутых поворотах и перекрёстках, перед которыми надо замедляться или затормозить в зависимости от обстоятельств. Максимальная скорость задаётся типом дороги по которой движется транспорт.

Когда житель хочет выбрать новое место назначения, его путь будет просчитан от его текущей позиции, принимая в расчёт ходьбу пешком, езду на машине и на общественном транспорте… который, кстати, сделан настолько круто, что жители могут менять транспорт, переходя пешком от одной автобусной остановки до другой. Во время расчёта поиска пути, создаётся счёт того, сколько сегментов/полос надо пройти, учитывая состояние пробок, скоростной предел и направление.

CitiesSkylines06.jpg

Трафик симулируется по правилу кто первый, тот и едет. Используя точки привязки, упоминаемые ранее, транспорт создаёт на своём пути так называемые “берегись-сегменты” – когда два разных таких сегмента пересекаются, мы знаем, что здесь будет столкновение, так что данные о скорости и дистанции до этого сегмента используются для того чтоб определить кто поедет, а кто притормозит чтобы пропустить. Светофоры – это исключение из правила. Они просто предотвращают появление точек привязки на перекрёстке, заставляя транспорт сбросить скорость и затормозить до тех пор, пока не загорится зелёный.

Конечно есть ещё другие факторы, влияющие на поведение транспорта, но в основном, всё крутится вокруг этих простых правил.

С точки зрения производительности невозможно сэмулировать всё это для каждой машины каждый кадр. Секрет хорошей производительности в том, чтобы распределить вычисления по времени насколько это возможно. В нашем случае движение автомобилей просчитывается примерно 4 раза в секунду, а рендеринг берёт из этого два кадра, чтобы получить гладкое перемещение, вращение и скорость. Более сложные решение вычисляются ещё реже, но благодаря разглаживанию это выглядит так, будто симуляция постоянно обновляется.

Результат

Некоторые игроки считают игру слишком лёгкой из-за наличия телепортации. Это действительно делает игру проще без перекрывающего дорогу самому себе транспорта, но это действительно необходимо ради умеренной кривой обучения. Если бы не было телепортации, то время реакции для того, чтобы заметить и решить проблему до тех пор, пока она не усилится лавинообразно, становится слишком маленьким. Есть мод, который убирает телепортацию из игры, так что игроки, получающие большее удовольствие от такого вызова, не будут скучать. В конце концов, количество людей, причитающих о проблемах трафика, относительно невелико, поэтому мы считаем, что выбрали правильное решение.

Несмотря на это, трафик является самой сложной частью игры для большинства игроков. Выбор полосы движения водителями заранее может выглядеть странно. Машины собираются в очередь всего на одной полосе, а все остальные пустуют и транспорт на них мчится мимо. Строго говоря, переполненная полоса говорит игроку о том, что где-то впереди находится пересечение, которое не даёт транспорту двигаться непрерывно, но глядя на длинную вереницу машин, некоторые игроки принимают это за баг.

Главная загвоздка сейчас – научить игроков как работать с транспортом, мы смотрим на обсуждения на форумах и видим, что эта тема игрокам интересна. Ухватив основы, множество игроков находит занимательным и получает множество удовольствия, оптимизируя транспортные потоки и управляя ими.

5


Отзывы пользователей


как сейчас с 6ти полосной односторонней все поворачивают из одной полосы, длинным стадом, так дальше и будут.

верно я их мысли понял?

0

Поделиться комментарием


Ссылка на комментарий
Поделиться на других сайтах

Идея: вместо Телепортации пожно заставить Жителей, "попавших в пробку", пересчитывать заново Путь от текущей Позиции до Точки Назначения, и при наличии альтернативного пути и свободной Полосы, менять Полосу и ехать дальше.

0

Поделиться комментарием


Ссылка на комментарий
Поделиться на других сайтах

Идея: вместо Телепортации пожно заставить Жителей, "попавших в пробку", пересчитывать заново Путь от текущей Позиции до Точки Назначения, и при наличии альтернативного пути и свободной Полосы, менять Полосу и ехать дальше.

Да, хорошая идея, только нужно некоторые временные рамки стояния в пробке (например машина стоит 5 минут, а уже потом начинает думать). Иначе будет пробка только из-за мудаков прыгающих по полосам.

0

Поделиться комментарием


Ссылка на комментарий
Поделиться на других сайтах

 

Идея: вместо Телепортации пожно заставить Жителей, "попавших в пробку", пересчитывать заново Путь от текущей Позиции до Точки Назначения, и при наличии альтернативного пути и свободной Полосы, менять Полосу и ехать дальше.

Да, хорошая идея, только нужно некоторые временные рамки стояния в пробке (например машина стоит 5 минут, а уже потом начинает думать). Иначе будет пробка только из-за мудаков прыгающих по полосам.

 

 

Ещё проще ) "Думать" надо вместо Телепортации.

0

Поделиться комментарием


Ссылка на комментарий
Поделиться на других сайтах

Дайте ссылку пожалуйста на мод для отключение телепортации трафика. Я что-то не  смог найти его :(

0

Поделиться комментарием


Ссылка на комментарий
Поделиться на других сайтах

присоединяюсь к выше сказанному оратору. что это за мод такой? С радостью себе поставлю. люблю разбирать жесть на дорогах )))

И обажаю большие пробки )

0

Поделиться комментарием


Ссылка на комментарий
Поделиться на других сайтах

присоединяюсь к выше сказанному оратору. что это за мод такой? С радостью себе поставлю. люблю разбирать жесть на дорогах )))

И обажаю большие пробки )

Дадада)) Тоже кайф получаю, когда пробки во всю карту :D Спасибо за мод))

0

Поделиться комментарием


Ссылка на комментарий
Поделиться на других сайтах
Геометрия дороги затем создаётся при помощи стандартного меша, тесселяции в совокупности с вершинным шейдером, который преобразует меш согласно данным сплайна.  

Шикарное предложение! XD

0

Поделиться комментарием


Ссылка на комментарий
Поделиться на других сайтах

Лучше бы он нормально по разметке ездил, тогда бы и телепортироваться не пришлось.

0

Поделиться комментарием


Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Поддержите Transport Games!

    Transport Games - некоммерческий проект. Мы существуем только ради вас и благодаря вашей поддержке!
    RUB
  • Категории

  • Последние новости

  • Новые файлы

  • Форум

    • Как они выглядят-то хоть? У меня есть одно предположение, но без демонстрации проблемы визуально нет уверенности, что это предположение истинно.
    • Как уменьшить частоту и количество раздражающих вспышек зданий
    • Дорогие друзья, пришло время овладеть невероятной мощью сильнейших бойцов DRAGON BALL! Соревнуйтесь с противниками в стремительных зрелищных схватках с потрясающей графикой. Используйте приёмы, полюбившиеся поклонникам аниме и игр: столкновение лучей, атаки в натиске, невероятно быстрые движения и абсолютные атаки, способные стирать целые планеты с лица галактики. Выигрывайте захватывающие битвы, следуя оригинальному сюжету, или ищите новые приключения для своих героев. Переживайте любимые эпизоды в видеороликах, которые можно просматривать с точки зрения восьми персонажей.
    • 280.33N и 260.51D для Айхальского ГОК. Почти готовы.
    • Дорогие друзья, состоялся релиз новейшей игры в одной из самых популярных медиа-вселенных последних лет — SWORD ART ONLINE Fractured Daydream! В ALfheim Online появилась «Галаксия» — новая система, позволяющая игрокам пережить прошлое. Однако «Галаксия» вышла из-под контроля, в результате чего игроки со всего времени и пространства переместились! Чтобы восстановить хронологию событий, Кирито придется объединить силы с павшими друзьями... и врагами. Следуя традициям серии SWORD ART ONLINE, присоединяйтесь к отряду, отправляйтесь в рейд и вместе сражайтесь с могущественными боссами! Подготовка к бою станет ключом к победе!
       
    • Финальная версия карты готова.  Возникли пока только трудности с загрузочным экраном: планировал сделать так, чтобы во время загрузки менялись изображения(всего их 5),но пока не выходит. Поэтому пока используется только первое изображение.  Убран мод на отечественный декоративный транспорт с целью облегчения карты. Присутствует развитие до 2020 года и ещё мелкие фиксы. Возможны ошибки и недочёты. Если будут иметься,то буду исправлять.
    • Идеальный Гандам ждет вас в новой игре серии Gundam Breaker! Участвуйте в разнообразных эпичных битвах против мощных соперников в компании других игроков или в одиночку и проверяйте своего меха на прочность. Сражайтесь вместе с друзьями, применяйте новые умения, чтобы вырваться вперед, и уничтожайте врагов! В игре доступно более 250 базовых наборов. Комбинируйте их элементы и создавайте модели Ганпла на свой вкус. Подбирайте окраску, состаривайте покрытие и добавляйте наклейки, чтобы выделить свою модель среди других, а потом делитесь результатами в сети с помощью нового режима диорамы. Встречайте рассвет новой эры для серии Gundam Breaker и будьте готовы КРУШИТЬ, СТРОИТЬ И СРАЖАТЬСЯ! Также до 3 сентября проходит распродажа издателя, на которой вы можете приобрести другие игры по вселенной Gundam и не только!
    • Итоги работы за полмесяца: доделаны и переработаны районы посёлка Тарного, Мкрн. Билево, района ул. Ленинградской за ж/д мостами. Практически готов Юго-Восточный жилой район Югов. А теперь скриншоты. Пос. Тарный и Зелёный Городок, присутствующий теперь с 1985 года.  Мкрн. Билево-0/1. Остальные части микрорайона не влезли. Жилой комплекс, за ж/д мостами на ул. Ленинградской. Здесь попробовал организовать детские площадки закрытого типа. Результат можно увидеть.
    • Привет, друзья!
      Рискну представить весьма необычный симулятор на базе платформы 1С (клиент-серверный вариант). 
      В нём реализована модель централизованного управления отраслью авиаперевозок, а за основу взят опыт и множество статистических данных МГА СССР.
      Не исключено, что эта штуковина заинтересует тех, кто фанатеет от таблиц, графиков и сложных форм ввода информации.
      Симулятор работает в режиме реального времени и рассчитан на коллективное пользование. Устанавливать на ПК ничего не нужно, доступ предоставляется через обычный веб-браузер.
      В отличие от других онлайновых игр и симуляторов, которые базируются преимущественно на основе примитивной рыночной модели, в нашем симуляторе все подчинено не деньгам, а производственным показателям. Задача пользователя и проста и сложна одновременно - взять под своё управление какое-либо авиапредприятие и заниматься его развитием, обеспечивая высокий налёт часов на одно среднесписочное воздушное судно, высокий коэффициент занятости кресел и максимальное использование свободного тоннажа. Для получения доступа проще всего связаться с администрацией проекта по тлг или ватсапу +79852228924
      Проект любительский, потому пока бесплатный )
       
    • Дорогие друзья, новейшая игра в одной из самых популярных медиа-вселенных последних лет выходит уже 4 октября! В ALfheim Online появилась «Галаксия» — новая система, позволяющая игрокам пережить прошлое. Однако «Галаксия» вышла из-под контроля, в результате чего игроки со всего времени и пространства переместились! Чтобы восстановить хронологию событий, Кирито придется объединить силы с павшими друзьями... и врагами. Следуя традициям серии SWORD ART ONLINE, присоединяйтесь к отряду, отправляйтесь в рейд и вместе сражайтесь с могущественными боссами! Подготовка к бою станет ключом к победе! Обратите внимание на то, что в качестве бонуса за оформление предварительного заказа вы можете получить костюм «Король демонов»!