Железнодорожный tileset 2.0

С год назад выпустил я пост, про модель построения железнодорожной сети на квадратных тайлах: вот этот. И вроде как обычно, никому он был не нужен, пока в анналах пикабу не откопал его за своим интересом товарищ @milk66regBRZ, который очень верно раскритиковал некоторые моменты предложенной мной модели, вот в этом посте, и в стремлении избежать оных, для своих нужд создал модель построения ж/д сетки на шестиугольных тайлах, то бишь гексах. И получилось весьма удачно, надо признать. Но всегда есть но. И это "но" состоит в том, что при построении на гексах, дорога может быть прямой только по шести направлениям или же по трём осям. Тем не менее, такая модель находит свою реализацию в игровых проектах и вполне доказала своё право на жизнь, в первую очередь своей простотой. Ж/Д сетка на квадратных же тайлах имеет то премущество, что у неё 8 направлений или же 4 оси, то есть на одну больше, нежели у гексовой, благодаря чему она становится куда приятней глазу и интуитивно понятней. Такая модель как раз используется в OTTD, Factorio и многих других играх с железными дорогами.

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

Перевести гексовый tileset на 4 оси задачка явно со звёздочкой, так что попробуем просто выпилить баги в квадратном.

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

Железнодорожный tileset 2.0 Gamedev, Железная дорога, Длиннопост

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

Решаем одну проблему, получаем следующую: октагон не является фигурой замощения плоскости. Буквально, если попытаться замостить плоскость восьмиугольниками, то между ними останутся пустые квадраты:

Железнодорожный tileset 2.0 Gamedev, Железная дорога, Длиннопост

Это вам не гексы.

Само собой напрашивается, что надо вводить дополнительные квадратные тайлы:

Железнодорожный tileset 2.0 Gamedev, Железная дорога, Длиннопост

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

Вообще, можно очень просто избавиться от этих дополнительных квадратов. Располовинить их и присоединить к основным тайлам:

Железнодорожный tileset 2.0 Gamedev, Железная дорога, Длиннопост

Теперь это более сложные многоугольники.

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

Железнодорожный tileset 2.0 Gamedev, Железная дорога, Длиннопост

Выглядит странно, но это только пока что. Дальше ещё страннее.

А вот уже полный набор из 10 основных тайлов, с комбинациями и отражениями:

Железнодорожный tileset 2.0 Gamedev, Железная дорога, Длиннопост

Вообще, как выяснилось в процессе, тайлы не обязаны быть одинаковыми, чтобы всё работало.

Как видим, теперь сетка строится ещё проще, плюс перекрёстки на диагоналях не сделать. То есть и функционал не подорван, и баги пофикшены; цель достигнута:

Железнодорожный tileset 2.0 Gamedev, Железная дорога, Длиннопост

Перекрёсток не создать из-за того, что получается наслоение тайлов.

Ну а если всё-таки очень хочется, то на этот случай есть вот такие штуки:

Железнодорожный tileset 2.0 Gamedev, Железная дорога, Длиннопост

Тоннели!

С ними вообще хорошо, а главное, ещё ближе к тому, как решаются проблемы прокладки путей в реальности:

Железнодорожный tileset 2.0 Gamedev, Железная дорога, Длиннопост

Тоннели только прямые, чтоб путаницы не вышло.

Такая вот доработанная получилась штука. SVG с тайлами для поиграться тут.

Вот, кстати, ещё развязка на 8 направлений, раз уж я её сделал:

Железнодорожный tileset 2.0 Gamedev, Железная дорога, Длиннопост

На гексах развязка получается только на 6 направлений, это в качестве частного примера "на пальцах".

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