Информация: Уважаемые посетители! В течение нескольких месяцев на форуме существовала проблема с регистрацией новых пользователей, о которой администрации стало известно недавно. Если вы ранее пытались зарегистрироваться на форуме, но не получили на ваш e-mail письмо с ссылкой для подтверждения регистрации, просим вас зарегистрироваться повторно. Приносим извинения за доставленные неудобства. Если вы все еще испытываете проблемы с регистрацией на форуме, обратитесь за помощью на e-mail: mr.angelo@railroadsim.net

Skif
 
Сообщения: 3361
Зарегистрирован: 01.10.2009, 17:42
Имя: Дмитрий
Блог: Просмотр блога (3)
Поиск в блогах

Универсальный стрелочный привод

Постоянная ссылка Skif 02.07.2018, 15:43

Поговорим сегодня об элементах железнодорожного пути, которым в железнодорожном симуляторе уделили до обидного мало внимания - о стрелочных переводах и их приводах.

Если процедурная генерация пути (и особенно стрелок и пересечений) - одна из самых крутых механик Train simulator, присутствующих в нем с первого релиза игры в 2007-ом году, то реализация стрелочных механизмов выглядит настолько убого, что губит на корню всю идею.

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

Постановка задачи:

1. Мы хотим иметь модели стрелочных приводов, никоим образом не зависящие от правила пути, использованного для укладки.
2. Приводы должны быть анимированы и озвучены, анимация должна быть синхронизирована с положением и скоростью движения стрелочных остряков.
3. Мы хотим, чтобы переводные механизмы, оснащенные индикаторами положения стрелки, корректно указывали это положение вне зависимости от:
3.1. Стороны установки привода относительно оси пути
3.2. Направления отклонения стрелки (а на симметричных и тройных указатель указывает два отклонения)
4. По возможности, хотелось бы использовать один и тот же привод для разного типа путей.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Реализация.

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

1. "Рычаг" для стрелки, перевод которой доступен игроку через интерфейс (в терминологии игры Manual junction), выполняется в виде невидимой в игре области триггера, клик по которой переводит стрелку.
2. Для сценарных стрелок (в терминологии игры Automatic junction) этот объект можно не моделировать вовсе. Все равно клики по ним не обрабатываются.
3. Привод представляет собой анимированный scenery-объект, который можно устанавливать на стрелку с привязкой к рельсам.
4. Для работы анимации и корректного определения положения применяется линковка модели к трем путям, образующим стрелку.
5. Сама модель может быть совершенно любой - вплоть до того, что может представлять собой целую стрелку воедино с верхним строением пути и приводом. Ее анимация и озвучка запускаются управляющим скриптом.

Отсюда скачиваем тестовый проект, забрасываем его в папку Source, открываем в Blueprint Editor-е и начинаем разбирать: Ссылка на репозиторий проекта-примера
--------------------------------------------------------------------------------------------------------------------------------------------------------

Проект состоит из следующих элементов:

Sounds - в папке лежат звуковые файлы перевода механизма (для ручного - про запас), файл звукового блюпринта и его прокси-контрол.
Textures - традиционно папка для текстур привода. Там же лежит текстура для тестовой модельки триггера для правила пути. Сам триггер тоже прилагается, о нем ниже.

m_trigger.IGS - геометрия модели триггера. Это простая плоскость произвольных размеров с самым простым шейдером. Обратите внимание - геометрические размеры этого
объекта определяют область, клик мышкой по которой заставляет стрелку переводиться. Не делайте очень большим или наоборот, очень мелким.

m1L_old.IGS - собственно, геометрия привода для ЛЕВОЙ стороны от оси пути
m1l_old_anim.IA - анимация для этого привода

m1R_old.IGS - аналогично, геометрия привода для установки на ПРАВОЙ стороне относительно оси пути
m1r_old_anim.IA - и его анимация.

Здесь важно сделать небольшую паузу, выдохнуть, и немного определиться с теорией. Сделать привод нетрудно - труднее его засинхронизировать с положением остряков реальной стрелки. По умолчанию, все стрелки в игре при их сборке устанавливаются случайным образом, поэтому приводу важно знать, в каком положении находятся остряки. В ТРС эта проблема в моем рельспакете решена путем принудительной синхронизации приводов в положении ВЛЕВО вне зависимости от типа стрелок. Здесь, после обсуждения со Светой, был применен тот же подход, он оттестирован, хорошо работает, поэтому если вам не нравится, придумайте и реализуйте в рамках скрипта собственный.

Тестовые модели приводов в примере как раз анимированы исходя из того, что привод в первом кадре анимации переведен НА ЛЕВЫЙ ПУТЬ. Все стрелки моей разработки будут унифицированы по этому же принципу. Это важно. Это надо запомнить, чтобы позже не запутаться.

Моя система именования объектов стрелок:

m1R - это МОТОР для установки на ПРАВОЙ стороне стрелочного перевода вне зависимости от его направления
m1L - это МОТОР для установки на ЛЕВОЙ стороне стрелочного перевода вне зависимости от его направления

h1RR - это РУЧНОЙ (Hand, а не Manual, чтобы не путать с моторами) привод, для установки на ПРАВОЙ стороне ПРАВОЙ СТРЕЛКИ (т.е. отклонение такой привод показывает ВПРАВО)
h1RL - это РУЧНОЙ привод для установки на ПРАВОЙ стороне ЛЕВОЙ СТРЕЛКИ (т.е. отклонение такой привод показывает ВЛЕВО)

h1LL - это РУЧНОЙ привод для установки на ЛЕВОЙ стороне ЛЕВОЙ СТРЕЛКИ (т.е. отклонение такой привод показывает ВЛЕВО)
h1LR - это РУЧНОЙ привод для установки на ЛЕВОЙ стороне ПРАВОЙ СТРЕЛКИ (т.е. отклонение такой привод показывает ВПРАВО)

h1LS - это ручной привод СИММЕТРИЧНОЙ СТРЕЛКИ (на два отклонения), устанавливаемый СЛЕВА от оси пути
h1RS - то же самое, но для ПРАВОЙ стороны относительно оси пути

Флажки приводов симметричной стрелки устанавливаются так, чтобы поворачиваться на 45 градусов в сторону перевода. Как выглядит на такой стрелке фонарь, я не знаю.


h1LB, h1RB - это ручной привод, прикрывающий БАРЬЕР (или сбрасыватель), устанавливаемый соответственно СЛЕВА или СПРАВА. Основное его отличие - фонарь красного света на флюгарке, а на приводах без ночного режима - знак "конец пути", аналогичный устанавливаемому в тупиках, или красный знак остановки, прямоугольной формы. Не устанавливается на стрелках (если это не сбрасыватель, который по сути - недоделанная стрелка).

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


Продолжим описание объектов проекта.

Исходники геометрии моторов и триггера для 3ds MAX 2015 и выше для самостоятельного раскуривания технологии. Можно использовать в собственных проектах, я приводы буду все равно переделывать на более современные модели.
motor_L_old-ready.max
motor_R_old-ready.max
point_marker.max

motor_L_old.xml
motor_R_old.xml


Блюпринты класса Anim procedural scenery blueprint , содержащие описание моделей приводов.

Procedural - означает, что данный объект не нуждается в отображаемом имени и не отображается в списке объектов в редакторе. Очень удобно, когда какую-либо геометрию вы не хотите использовать как scenery объект, доступный для установки руками. Это мы будем делать иначе - через родительский блюпринт, унифицированный для всех моделей приводов.
Anim - означает, что блюпринт поддерживает анимацию геометрии, которая должна быть прописана в Anim Set контейнере.

motor_trigger.xml - блюпринт для триггера стрелки. В блоге мы его затрагиваем по ходу действия. В общем, это заменитель "рычага" для правила пути, где он и используется.

singly_motor_L_old.xml
singly_motor_R_old.xml


Блюпринты класса Signal blueprint , содержащие собственно описание объектов приводов. В ранних версиях TS отсутствует блюпринт Anim signal blueprint, поэтому, если вам нужна обратная совместимость, лучше собрать все воедино по старой технологии - через чайлды. Примерно так же собраны и работают в игре механические семафоры.


Поскольку все исходники у вас в руках, отлажены и готовы к работе, разжевывать настройки я не буду. Для корректной работы достаточно сделать как дядя Дима и тетя Света. :tort:




ИСПОЛЬЗОВАНИЕ В ИГРЕ:

1. В редакторе маршрута разрешить автора DmitriSkif и продукт 750mm_KOLEJ . Если вы создали свою копию, что делать, знаете сами.
2. Уложить стрелочный перевод любыми рельсами и любым правилом. Лишь бы у него был рычаг, чтобы его перевести.
3. Отодвинуть геометрию рычага в сторону, чтобы не мешалась, она нам понадобится исключительно для перевода стрелки. Поэтому я и создал невидимый (ладно, вру - пока только маскируемый) рычаг-триггер.
4. Используя Tab для привязки объекта к рельсам, уложить на стрелке один из двух моторов: R_old для установки СПРАВА от оси пути, L_old для установки СЛЕВА. Модели совершенно идентичны с точки зрения анимации, у них только разнится геометрия. При установке убедитесь, что привод стоит с нужной стороны от оси пути (определяется "против шерсти" стрелки, смотреть от остряков на крестовину), иначе анимация будет работать "в противофазе".
5. Установить линковку от объекта привода в следующем порядке:

- Линк 0 установить так, чтобы он был за пределами красного треугольника на рельсах (начала стрелки) и указывал ПРОТИВ ШЕРСТИ.
- Линк 1 установить на ЛЕВЫЙ путь стрелки ПРОТИВ ШЕРСТИ
- Линк 2 установить на ПРАВЫЙ путь стрелки ПРОТИВ ШЕРСТИ

Если указатели на стрелке смотрят в пошерстном направлении, их можно развернуть кликом мышкой по ним. Пример правильной линковки:

Изображение

6. После линковки можно откорректировать положение приводного механизма по острякам и линков на рельсах более точно.
7. Если положение остряков не совпадает с положением тяги привода, нужно провести синхронизацию.
8. Для синхронизации достаточно однократно запустить игровую сессию (заодно сохранив проект), после чего приводы установятся в одно положение с остряками.
9. При возвращении в редактор либо в сценарий, приводы будут находиться в том же положении, что и остряки. Используйте это состояние, чтобы точно отпозиционировать привод
относительно остряков. В любом случае, привод и стрелка синхронизируются в игровой сессии в режиме машиниста по положению игровых остряков (т.е. не вызывают переводов стрелок). И в дальнейшем переводятся корректно.

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



Приводы будут корректно работать только с правилом и рельсовым объектом, под которые создавались. Критичные параметры: Junction properties рельсов (задают ход и длину остряков) и Transition time (время перевода стрелки) в Track rule, разделы Manual junction entry и Automatic junction entry. Анимация стрелок проигрывается со стандартной скоростью 30 кадров/сек.
Анимация стрелки содержит 60 кадров (следовательно, в обычном режиме проигрывается за 2 секунды ), в скрипте есть корректирующий множитель 2.0 для ее ускорения с целью совместимости с тестовым проектом.


На этом все. Надеюсь, этот наш со Светой небольшой вклад помог приблизить вид путевых объектов в игре в сторону реальных. Не знаю как вас, а меня всегда бесила невозможность использовать разные типы переводных устройств с одним правилом пути, не прибегая к пляскам с бубном и дурацким костылям для обхода ограничений движка. :baby:
Последний раз редактировалось Skif 06.07.2018, 12:04, всего редактировалось 4 раз(а).

1 комментарий 70 просмотров
Комментарии

Re: Универсальный стрелочный привод

Постоянная ссылка i2GR 03.07.2018, 15:07

Интересно, насколько будет востребовано, и что это может дать сигналке
Аватара пользователя
i2GR
 
Сообщения: 492
Зарегистрирован: 04.09.2008, 16:59
Имя: Игорь
Блог: Просмотр блога (4)

Кто сейчас на конференции

Зарегистрированные пользователи: Alexa [Bot], Bing [Bot], Igor Mashinist