Поздравляем железнодорожников с их профессиональным праздником!
Новости TractionSim:
1. Отказались от сплайновых дорог. Совсем.
В ходе тестирования реалистичных конфигураций путей стало ясно, что сплайны это тупиковый путь. С первого взгляда кажется, что сплайны - удобно. Можно отметить точки в пространстве, и сплайновая кривая магически пройдет через них.
Но нет, и вот почему.
- Они не обеспечивают точности пути. Круговая кривая становится похожей только если прибить много точек. Удобно? Нет.
- Большая зависимость от длины соседних сегментов. Источник беды - касательные.
Обычно используют Катмул-Ром, где касательные вычисляются как вектор направления между двумя соседними точками.
Это нормально работает в идеальных и тонко подстроенных случаях. То есть тебе надо понавставлять точек в "специальные" места пути, чтобы касательные и вообще поведение кривой было ожидаемым. Иначе закругленные хвостики, ненужные формы изгибов обеспечены. Если использовать Безье, строительство еще сложнее и превращается в игру с точками и касательными.
- Неравномерность движения. Следует из природы сплайна. В принципе борется вычислительно ресемплингом через равномерные интервалы, но встает вопрос интерполяции между равномерно-распределенными точками. Или между точками делать тоже Катмул-Ром, но геометрия при этом изменяется, или интерполировать линейно, что в общем отстойно выглядит - заметные изгибы в точках.
- Физика движения. У сплайна казалось бы кривизну получить проще некуда - вторая производная.
Однако проблема в том, что она изменяется (ладно, проинтегрируем), но в добавок она изменяется не так как ожидается подвижной единицей:) В правой кривой легко получить отрицательную кривизну в некоторых точках вместо положительной (примем + для правых), ну и саму кривизну в кривой R=500м (примерно) колбасит как будто она варьируется от R = -100 до 2000.
Физика движения будет отвратительной и приблизить ее к реальной будет практически невозможно, а кривизна для физики важна.
Поэтому мы закрыли эксперименты с сплайнами, оставив их для чисто визуальных линейных объектов, а железные дороги строить будем как в реале - из прямых, круговых кривых, клотоид (переходные кривые в русскоязычной литературе).
Это в плане. А в профиле будут прямые и переходные вертикальные сопрягающие кривые.
Опытный в сплайнах человек может возразить, что на каждую такую особенность можно найти несколько обходных путей, и как-то выжить. Даже для физики кривизну брать не через производную, а интегрировать более длинные участки, а обратную отбрасывать, не знаю что-нибудь такое. На это возразим, а зачем мучать, когда можно усилия потратить на более прямолинейный подход из круговых кривых, разбавив его инструментарием? Так что тут мы с Trainz расходимся. Интересно кстати, как Trainz считает физику в кривых.
Встает вопрос - как удобно подгонять. А вот есть отличный способ - биарк (пока не поняли как принято называть в русскоязычной литературе, biarc). Метод постулирует, что две любые заданные точки с векторами направления могут быть соединены двумя круговыми кривыми, причем таких пар бесконечное множество, они отличаются протяженностью и радиусами. В общем выбирай какие хочешь. Это классный алгоритм.
Рекомендуем лонгрид на этот счет
https://www.redblobgames.com/articles/curved-paths/Так прошли две прошедшие недели, почему и показывать было нечего, одна теория и эксперименты.
Поговорим об инструментах. Внезапно (на самом деле нет) можно отлично проложить горловину используя простые хелперы - продолжения траектории путей под углом 1/9 и 1/11 радиан:)
А еще внезапно (на самом деле тоже нет) кривые используются типовых радиусов. Конечно не всегда, местные условия бывают разные, но хелпер в виде продолжения траектории одного из типовых радиусов помогает.
2. Реализовали подложку с аэрофотосъемками, но это типовой инструмент. Играемся с импортом из OSM. Кто не знает - есть проект
https://www.openrailwaymap.org/ и кто-то обновляет информацию по Санкт-Петербургу, даже скорости стали появляться. Конечно, это не для точной прокладки.
Подход выбрали такой - в первую фазу выставляем опорные точки, не думая о геометрии. Эти точки можно и импортировать, если есть откуда.
Пока что речь идет только о плане пути.
Дорога уже есть, но касательные сломаны, что отражается красным цветом - по ним ездить еще нельзя.
Во вторую фазу уточняем геометрию - заменяем некоторые отрезки подходящими кривыми или биарками, чтобы не было разрывов касательных. Компьютер активно помогает. Некоторые опорные точки должы быть неизменяемыми, поскольку автор уверен, что путь обязан проходить через них, отмечаем их. Остальное компьютер может заменить подходящими кривыми.
В третью фазу редактируем или импортируем профиль.
Что было еще:
3. Задизайнили систему обдува стрелок.
4. Пересобрали устройство стрелки, чтобы было проще реализовывать сжатые горловины и стрелки, находящиеся в кривой. В предыдущих постах писали, что стрелки не будут процедурными, поэтому стрелка ставится объектом + опциональные закрестовинные участки.
5. Сделали сбрасывающий остряк. Как-то надо ограждать выход с подъездных путей.
6. Ручные стрелки. Они повсюду, даже в нескольких сотнях метров от перрона Московского вокзала - в Комсомольском парке. Поэтому переиграли план разработки, и сделали их сразу.
7. Нарисовали логотип. Просим обратной связи, читаем он или нет.
Всё! Надеемся подготовили достойный подарок к празднику и слишком не утомили чтением. С днем железнодорожника! Ура!