Hitzu

Как работает трафик в Cities: Skylines

15 сообщений в этой теме

skylines_wide.jpg

Оригинальная статья с 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 раза в секунду, а рендеринг берёт из этого два кадра, чтобы получить гладкое перемещение, вращение и скорость. Более сложные решение вычисляются ещё реже, но благодаря разглаживанию это выглядит так, будто симуляция постоянно обновляется.

 

Результат

 

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

 

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

 

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

6

Поделиться сообщением


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

Я успел построить уже четыре города, и проблем с пробками не сильно ощущал. :) У меня были одни двухсторонние дороги во всех городах (иногда я строил бульвары для красоты), я сносил развязки и делал перекрестки из съездов с шоссе, строил город кварталами (квадратами). Может именно поэтому, у меня не было пробок? :)

0

Поделиться сообщением


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

@rodnikur, может быть. А может потому что правильно располагал зоны и ОТ. :)

0

Поделиться сообщением


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

Я строил так, что бы было красиво, не сильно задумываясь об расположении зон. Ну промышленность я, естественно, располагал подальше от жилых зон, отделяя их парками и коммерцией (эта привычка пошла у меня с СимСити). :) А линии ОТ, пытался строить по опыту прокладывания таковых в Cities in Motion, соединяя жилые зоны с коммерцией и промышленными зонами. Охватывая как можно больше домов, а не на тяп-ляп, как это делали многие обзорщики на Ютубе. А ж противно смотреть было на то, как они прокладывают линии ОТ. :D

0

Поделиться сообщением


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

А линии ОТ, пытался строить по опыту прокладывания таковых в Cities in Motion, соединяя жилые зоны с коммерцией и промышленными зонами. Охватывая как можно больше домов, а не на тяп-ляп, как это делали многие обзорщики на Ютубе. А ж противно смотреть было на то, как они прокладывают линии ОТ.

Ох, на реддите такое огромное и толковое руководство выложил один civil engineer! Я хотел его перевести, но оно уж больно массивное и наполнено сленгом, что я не решился.

0

Поделиться сообщением


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

Много летний опыт (более 15 лет) в градостроительные и транспортные симуляторы решает эту проблему )).

1

Поделиться сообщением


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

@Hitzu, хоть ссылку дай, гугльтранслеййтером прочту :D :D :D

0

Поделиться сообщением


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

@12cccccr, вот тут http://imgur.com/a/z1rM1

Там много картинок, так может и без объяснения можно обойтись.

 

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

Вот что значит как правильно искать причины.

0

Поделиться сообщением


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

@Sonik, а, ну круто! Я не видел ещё.

0

Поделиться сообщением


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

И, всё-таки, мне непонятно, почему если с магистрали есть ответвление, например, направо, то за полкилометра весь трафик с крайней правой полосы упорно начинает перестраиваться на один ряд влево, когда спокойно мог бы проехать прямо по своей полосе - его ведь никто не заставляет поворачивать направо. А впечатление такое, что там знак стоит - движение только направо...

0

Поделиться сообщением


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

И, всё-таки, мне непонятно, почему если с магистрали есть ответвление, например, направо, то за полкилометра весь трафик с крайней правой полосы упорно начинает перестраиваться на один ряд влево, когда спокойно мог бы проехать прямо по своей полосе - его ведь никто не заставляет поворачивать направо. А впечатление такое, что там знак стоит - движение только направо...

Да. И перестроения через две полосы на магистрали - обычное дело для ИИ, а с модами новых дорог и через три-четыре полосы под углом 90 градусов. Также выезд на магистраль сразу в крайнюю левую полосу - это вообще нарушение ПДД. В стиме есть форум на английском. Может кто передаст пожелания насчет перестроения машин и выезда на магистрали?

0

Поделиться сообщением


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

А ещё одна особенность нынешнего трафика - почему спецмашины (пожарные, скорые, полиция) стоят на светофорах с включенными сиренами и мигалками... и ждут "зелёного"?! И почему когда они едут, им никто не уступает дорогу? У меня так маленькое здание сгорело... потому что из пожарной части (что в двух кварталах от места пожара) машина попала на "красный свет" в трёх местах....

 

Ну и при Т-образном пересечении маленькой дороги и большой всегда получается полноценный перекрёсток с переходами и светофорами... хотя это всего лишь выезд из жилой зоны... где достаточно знака "Уступи дорогу" и "STOP" (а переходы там вообще ни к чему).

 

А ещё (но это уже не совсем к трафику отношение имеет) не хватает таких разветвлений:

post-7963-0-47918500-1450426399_thumb.jpg

0

Поделиться сообщением


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

Ну и при Т-образном пересечении маленькой дороги и большой всегда получается полноценный перекрёсток с переходами и светофорами... хотя это всего лишь выезд из жилой зоны... где достаточно знака "Уступи дорогу" и "STOP" (а переходы там вообще ни к чему).

модом Traffic Manager + Improved AI можно убирать светофоры и выставлять вручную знаки приоритета, к тому же есть дороги (модом добавляемые), так называемые пешеходные pedestrian road, они при пересечении с двусторонней дорогой автоматически строятся без светофора и с правильными приоритетами

 

а с картинками "недостающих" дорог я согласен, их не хватает, но практически 1 в 1 можно получить такие же развязки, опять же с использованием вышеупомянутого мода (там есть возможность на каждой полосе вручную назначить направление движения)

0

Поделиться сообщением


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

(там есть возможность на каждой полосе вручную назначить направление движения)

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

Т.е. наличие "знака" "движение прямо и направо" интерпретируется в игре как "движение только направо".

P.S. Они скоро обещают выпустить "погодное" дополнение.. снегопады со снежными заносами на дорогах, дожди, туманы... ох чую.. это будет просто задница и полный коллапс на дорогах... :blink:

1

Поделиться сообщением


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

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

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

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

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


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

Войти

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


Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу