Внимание!

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

OMSI Сплайны - спецификация, OMSI Spline Specification

OMSI Сплайны - спецификация, OMSI Spline Specification

Сообщение Wizard » 07 фев 2013, 13:41

Spoiler!
По неизвестным мне причинам топик по сплайнам был безжалостно затерт, кем, пока понять не могу. Достал его из бэкапа предыдущего форума. Тема была написана 22 декабря 2011 в 10:56

Автор - Den_rain

Добрый день друзья автолюбители!

Здесь я попытаюсь полностью разжевать Сплайн файлы ОМСИ.

А также, если хватит запала , покажу примеры создания своих сплайнов, редактирования чужих ну и выложу свой скрипт импорта/экспорта сплайн файлов в 3ds max, естественно, когда и если он будет мною дописан до удобоваримого состояния.

Прошу эту тему не засорять лишними постами, для обсуждения, вопросов и прочего, добро пожаловать сюда: Обсуждение Сплайнов OMSI.


P.S. Если я на что то из этого у меня не хватит желания или времени, прошу не бесноваться
Wizard
Заяц
 
Сообщения: 1090
Зарегистрирован: 08 ноя 2010, 18:10

Re: OMSI Сплайны - спецификация, OMSI Spline Specification

Сообщение Wizard » 07 фев 2013, 13:42

Ну начнем не торопясь)

Делать было нечего, дело было вечером)
И я подумал, а не создать ли мне карту своего города, на парочку маршрутов..., не долго думая, решил что это будет карашо!
Пораскинув мозгами, я понял, что для создания Российских городов нету практически ничего)
И если с объектами вроде все понятно, есть информация в сети, есть какие никакие мануалы, конверторы, то по сплайнам нету абсолютно ничего!
Ну и так как, ни один из имеющихся сплайнов меня совершенно не впечатлил в контексте Российской глубинки, пришлось самому вдоль и поперек обкуриться этим форматом)

Итак пример разбираемого нами сплайна можно забрать здесь.
Сплайн довольно ужасный по своей форме и виду. Рисовал в 3ds max на скоряк, чтобы проверить скрипт экспорта из 3ds max
Текстурки для него стандартные, найти их каждому у себя в OMSI не составит труда.

Разбор спецификации будем проводить поблочно:
- Height Profiles
- Textures
- Graphical Lanes
- Paths

Ну а дальше посмотрим) Сначала это нужно осилить, превратить знания в длинный текст)
Wizard
Заяц
 
Сообщения: 1090
Зарегистрирован: 08 ноя 2010, 18:10

Re: OMSI Сплайны - спецификация, OMSI Spline Specification

Сообщение Wizard » 07 фев 2013, 13:45

Перед описанием первого блока, следует заметить несколько вещей:

- Сплайн это НЕ трехмерная фигура! Сплайн это двумерная фигура. Это Профиль (Например если вы произведете геометрическое сечение трубы, вы получите ее профиль - окружность. Если представить профиль куба - квадрат/прямоугольник. Профиль швеллера - буква П. И так далее...).
То есть если мы говорим о сплайне в стандартной системе координат (x - вправо/влево, y - от себя/на себя, z - высота), то точки сплайна имеют только две координаты - x и z.

- Файл сплайна в ОМСИ описывает сразу 2 (два) сплайна!
Один сплайн - так называемый Height Profile. Описываемый парами точек. Для чего он нужен, об этом история пока умалчивает. Но сплайн (профиль) в общем работает и без этого блока и вовсе. Я лично, не нашел никакой разницы - есть этот профиль, или его нету
Второй сплайн - так называемый Graphical Lanes, это главный сплайн (профиль) описываемый блоками по 2 и более точек с текстурными координатами. То есть это и есть сплайн из которого экструдируется меш который мы и видим, и по которому ездим и который затекстурирован. Без этого сплайна (профиля) сплайн работать не будет.

Если вы будете использовать Height Profile, во избежании всяких "упс, а шо это тут как то не так и не то" советую делать так, чтобы геометрия обоих сплайнов была идентична. Как собственно во всех дефолтных сплайнах и сделано.

Естественно все это лишь мои умозаключения на основании многократных тестов и вдумчивых размышлений, как оно на самом деле знают только они...

- Все координаты указываются в метрах! Кроме конечно текстурных координат и параметра тайлинга текстуры.

Итак Height Profiles
Этот блок описывает сплайн, который, пока не известно для чего нужен вовсе ).

Вот его код:
Код: Выделить всё
---------------------------
      Height Profiles
---------------------------

[heightprofile]
-10.9814
-7.98231
-0.958721
0.940671

[heightprofile]
-7.44915
-7.44915
0.940671
0.0

[heightprofile]
7.44915
7.44915
0.0
0.940671

[heightprofile]
7.98231
10.9813
0.940671
-0.958721


Этот блок обычно стоит в самом начале файла (смену позиции блоков в файле пока не проверял)
Начинается блок заголовком:
Код: Выделить всё
---------------------------
      Height Profiles
---------------------------


Дальше, строго по порядку, прописываются двумерные точки сплайна по парно, каждый блок двух точек имеет заголовок:
[heightprofile] .
В общем, блок пары точек выглядит так:
Код: Выделить всё
[heightprofile]
-10.9814    // координата X первой точки
-7.98231    // координата X второй точки
-0.958721  // координата Z первой точки (высота)
0.940671   // координата Z второй точки (высота)


Итого имеем первую линию сплайна, состоящую из двух точек в двумерной системе координат:
X = -10.9814
Z = -0.958721
и
X = -7.98231
Z = 0.940671
Как вы уже должны были понять, через эти координаты можно провести линию. Это и есть первая линия нашего сплайна.
Можно сказать даже точнее - это часть "тротуара")

Дальнейшие пары точек, также описывают линии, и из них складывается профиль (сплайн) для построения меша.
Выглядит это примерно вот так:
[позже добавлю картинку]

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


Если нужно что то описать подробнее, или есть вопросы по этому блоку, добро пожаловать сюда!

P.S. Продолжение следует...
Wizard
Заяц
 
Сообщения: 1090
Зарегистрирован: 08 ноя 2010, 18:10

Re: OMSI Сплайны - спецификация, OMSI Spline Specification

Сообщение Wizard » 07 фев 2013, 13:48

Блок Textures

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

Выглядит он следующим образом:
Код: Выделить всё
---------------------------
         Textures
---------------------------

[texture]
str_gehweg_grass02.bmp

[texture]
str_asphdrk.bmp

Каждая используемая в сплайне текстура объявляется с помощью заголовка [texture]
и, следующего за ним на новой строке, имени текстуры.
Код: Выделить всё
[texture] // заголовок
str_gehweg_grass02.bmp // имя текстуры


Текстуры, объявленные здесь должны лежать рядом со сплайн файлом, в папке texture .
Пример:
Сплайн файл находится здесь:
Omsi\Splines\test\export-test-new.sli
Значит текстуры должны находится здесь:
Omsi\Splines\test\texture\str_gehweg_grass02.bmp
Omsi\Splines\test\texture\str_asphdrk.bmp


Текстуры могут быть в форматах jpg, png, tga, dds, bmp (точно не проверено)
Альфа канал (прозрачность и т.п.) в текстурах сплайнов НЕ поддерживается.
Однако разработчики обещали добавить это в следующих версиях/патчах.

*Это интересно:
В дальнейшем, нам понадобится использовать порядковый номер текстуры в блоке объявления. Нумерация начинается с НУЛЯ.
Пример:
Код: Выделить всё
#0
[texture]
str_gehweg_grass02.bmp

#1
[texture]
str_asphdrk.bmp

#2
// и так далее ...


P.S. Продолжение следует...
Wizard
Заяц
 
Сообщения: 1090
Зарегистрирован: 08 ноя 2010, 18:10

Re: OMSI Сплайны - спецификация, OMSI Spline Specification

Сообщение Wizard » 07 фев 2013, 13:53

Блок Graphical Lanes

Пожалуй самый сложный для понимания и объяснения и самый замороченый блок )))
Но зато он самый главный)

Блок Graphical Lanes описывает главный сплайн для построения меша дороги. Вместе с этим он описывает и текстурирование получаемого меша из этого сплайна.

В этом блоке поддерживаются комментарии в виде текста, оканчивающегося двоеточием.
Примерчик:
Код: Выделить всё
My super comments:


Нужно бы проверить, поддерживаются ли комментарии в остальных местах файла )
UPD: комментарии поддерживаются во всем файле, в виде обычного текста. То есть если это не слово в скобках [] и следующие за ним значения - то это комментарий.

Блок имеет заголовок вида:
Код: Выделить всё
---------------------------
     Graphical Lanes
---------------------------


Итак, как мы уже сказали, здесь описывается сплайн. Значит снова двумерные точки. Только теперь к каждой двумерной точке прибавляется текстурная координата (U) и параметр масштабирования (тайлинга) текстуры по оси Y (текстурная координата V).
О дополнительных параметрах дополнительно ниже. (вот жеж туфтология то )
Итого мы получаем что каждая двумерная точка сплайна будет иметь 4 параметра.
X, Y, текстурная координата (U), масштабирование по Y (V).

Описание сплайна происходит блоками по текстурированию. В каждом блоке может быть от двух и более точек. Но при этом точек должно быть четное количество.

В общем блок пары точек выглядит так:
Код: Выделить всё
[profile] // заголовок блока из двух точек, составляющих линию сплайна
0 // порядковый номер текстуры, для текстурирования элемента меша, строящегося на основании линии сплайна, описываемой точками в этом блоке
[profilepnt] // заголовок блока одной из точек
-10.9814 // координата X двумерной точки линии сплайна
-0.958721 // координата Z двумерной точки линии сплайна (высота)
0.514 // Текстурная координата (в текстуре по горизонтали) (U)
0.200 // масштабирование текстуры по оси Y. (тайлинг) (V)

[profilepnt] // заголовок блока одной из точек
-7.98231 // координата X двумерной точки линии сплайна
0.940671 // координата Z двумерной точки линии сплайна (высота)
0.973 // Текстурная координата (в текстуре по горизонтали) (U)
0.200 // масштабирование текстуры по оси Y. (тайлинг) (V)


Как мы видим, каждый блок из пары точек сплайна имеет заголовок [profile].
Далее, на новой строке мы видим 0 (Ноль). Что это за ноль? Откуда он и зачем? Одни вопросы)
Итак, этот самый ноль, это порядковый номер текстуры из блока Textures, для текстурирования элемента меша, строящегося на основании кривой сплайна, описываемой точками в этом блоке.
Далее следуют непосредственно под-блоки точек.
Каждый под-блок имеет заголовок [profilepnt] .
После которого, непосредственно, следуют четыре параметра точки, каждый на новой строке.
Рассмотрим этот блок поподробнее:
Код: Выделить всё
[profilepnt] // заголовок блока одной из точек
-10.9814 // координата X двумерной точки линии сплайна
-0.958721 // координата Z двумерной точки линии сплайна
0.514 // Текстурная координата (в текстуре по горизонтали) (U)
0.200 // масштабирование текстуры по оси Y. (тайлинг) (V)

-10.9814 // координата X двумерной точки линии сплайна
-0.958721 // координата Z двумерной точки линии сплайна

С первыми двумя параметрами уже должно быть все понятно. Обычная двумерная точка на плоскости. По аналогии Height Profiles.

0.514 // Текстурная координата (в текстуре по горизонтали) (U)
Текстурная координата для точки сплайна. На текстуре по горизонтали. В обычном понятии 3д моделинга - текстурная координата U.
Нужно тут пояснить: текстурные координаты задаются в нормализованном виде. То есть от 0 до 1.
Например:
текстура 512*512
0.0 = 0 пикселов по горизонтали
1.0 = 512 пикселов по горизонтали.
Если мы хотим, чтобы этот элемент меша текстурировался только половинкой текстуры, текстурные координаты для этих двух точек сплайна в этом блоке мы задаем:
0.0 и 0.5
Второй пример, уже на основании нашего сплайна:
текстура 512*512
для первой точки линии сплайна текстурная координата:
0.514
для второй:
0.973
Это значит, что для текстурирования элемента меша, получаемого на основании линии сплайна, определяемой двумя точками в этом блоке будет использоваться кусок текстуры
начиная от 263 пикселя и до 498 пикселя по горизонтали.

[позже постараюсь вставить картинку, чтобы нагляднее было]

0.200 // масштабирование текстуры по оси Y. (тайлинг) (V)
В обычном понятии 3д моделинга - текстурная координата V.
Пожалуй самый сложно объясняемый параметр в контексте именно ОМСИ сплайнов))
Будьте предельно внимательны)
Четвертый параметр, масштабирование текстуры по оси Y(V) или, так называемый, тайлинг текстуры по оси Y(V) (в длину нашего элемента меша дороги).
Этот параметр указывает, насколько нужно разделить текстуру по вертикали, чтобы затекстурировать один метр меша в длину (ось Y(V)).
к примеру текстура 256*256
Если параметр равен 1, значит количество пикселей текстуры по вертикали нужно умножить на 1 (256*1=256), что будет означать что на текстурирование одного метра в длину уйдет 256 пикселей текстуры по вертикали, то есть вся текстура по вертикали. Также это означает, что текстура в длину меша будет повторяться каждый метр.
Если параметр равен 0.5, значит количество пикселей текстуры по вертикали нужно умножить на 0.5 (256*0.5=128), что будет означать, что на текстурирование одного метра в длину уйдет 128 пикселей текстуры по вертикали, то есть ее половина. Из чего делаем вывод, что текстура будет повторяться каждые два метра.
Пример:
Мы взяли в редакторе наш сплайн, и задали ему длину 10 метров.
(по сути это будет уже не сплайн а меш. Редактор на основании нашего сплайна/профиля просто создаст полноценный трехмерный объект. Для тех кто знаком с 3д моделированием будет знаком модификатор Extrude)
Текстура у нас 256*256
Параметр, как мы видим стоит 0.200
Считаем: 256 * 0.2 = 51 пиксель будет использоваться для текстурирования 1 метра.
Длинна у нас 10 метров. 10 * 51 = 510 пикселей.
510 пикселей делим на разрешение нашей текстуры: 510 / 256 = 1.99, что означает, что на 10 метров наша текстура повторится практически два раза.

[позже постараюсь вставить картинку, чтобы нагляднее было]

Уф... надеюсь кто то что то поймет :hi:


Ну а далее мы повторяем блоки точек, чтобы получить требуемый профиль сплайна для построения меша.
Исходя из этого, весь блок будет выглядеть так:
Код: Выделить всё
---------------------------
     Graphical Lanes
---------------------------

Left slope:

[profile]
0
[profilepnt]
-10.9814
-0.958721
0.514
0.200

[profilepnt]
-7.98231
0.940671
0.973
0.200

Left Border:

[profile]
0
[profilepnt]
-7.98231
0.940671
0.973
0.200

[profilepnt]
-7.44915
0.940671
0.995
0.200

[profile]
0
[profilepnt]
-7.44915
0.940671
0.973
0.200

[profilepnt]
-7.44915
0.0
0.995
0.200

Center:

[profile]
1
[profilepnt]
-7.44915
0.0
0.995
0.167

[profilepnt]
7.44915
0.0
0.005
0.167

Right Border:

[profile]
0
[profilepnt]
7.44915
0.0
0.995
0.200

[profilepnt]
7.44915
0.940671
0.973
0.200

[profile]
0
[profilepnt]
7.44915
0.940671
0.995
0.200

[profilepnt]
7.98231
0.940671
0.973
0.200

Right slope:

[profile]
0
[profilepnt]
7.98231
0.940671
0.973
0.200

[profilepnt]
10.9814
-0.958721
0.514
0.200


*Это интересно:
Если у текстур в фотошопе (или ,естественно, в любой другой графической программе) обрисовать края, то можно наглядно в редакторе смотреть, что происходит с текстурами при экспериментировании с параметрами.


P.S. Продолжение следует...
Wizard
Заяц
 
Сообщения: 1090
Зарегистрирован: 08 ноя 2010, 18:10

Re: OMSI Сплайны - спецификация, OMSI Spline Specification

Сообщение Wizard » 07 фев 2013, 13:57

Ну и последний блок Paths

Как думаю все догадываются, в этом блоке определяются проезжие и пешеходные пути для АИ траффика.

Как и каждый блок, этот тоже имеет свой заголовок:
Код: Выделить всё
---------------------------
          Paths
---------------------------


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

[path] // заголовок блока определения проезжих и пешеходный путей
0 // тип пути
-3.68633 // координата центра пути по оси X
0.0 // координата центра пути по оси Z (высота)
6.99802 // ширина пути в метрах
0 // направление пути

[path] // заголовок блока определения проезжих и пешеходный путей
0 // тип пути
3.686 // координата центра пути по оси X
0.0 // координата центра пути по оси Z (высота)
6.99802 // ширина пути в метрах
1 // направление пути


По сути, чтобы лучше понять происходящее, этот путь можно тоже назвать сплайном в одну горизонтальную линию. По сути он и есть именно такой сплайн, и на его основании также потом в недрах симулятора создается 3д объект с необходимой длиной и завитушками .
Этот сплайн можно определить совершенно независимо от двух наших главных сплайнов. Например где-то справа или слева от сплайна дороги, или под ней или над ней.
Соответственно и АИ траффик будет ездить/ходить именно там, где мы определим эти сплайны и из них построятся "дорожки".

Давайте разберем блок сплайна пути по порядку:
Код: Выделить всё
[path] // заголовок блока определения проезжих и пешеходный путей
0 // тип пути
-3.68633 // координата центра пути по оси X
0.0 // координата центра пути по оси Z (высота)
6.99802 // ширина пути в метрах
0 // направление пути


0 // тип пути
1 - люди, 0 - машины, 2 - поезда, 3 - самолеты. Думаю здесь все ясно)

-3.68633 // координата центра пути по оси X
0.0 // координата центра пути по оси Z (высота)
6.99802 // ширина пути в метрах


По сути, так как это сплайн состоящий всегда из одной горизонтальной линии, мы должны видеть две двумерные точки. А мы видим нечто другое. Но ничего страшного! Сейчас я покажу вам, как из этих трех значений можно получить две наших точки для сплайна:
С координатой центра по высоте (ось Z) и так все понятно. Эта координата будет использоваться для обоих точек.
А вот как нам получить две точки по оси X ?
У нас есть центр и есть ширина. Математика)
X1 = Xcenter - Widght / 2
X2 = Xcenter + Widght / 2
где:
X1 и X2 - наши получившиеся две координаты по оси X
Xcenter - координата центра по оси X
Widght - ширина
Итого получили две точки:
X1 = -7.181
Y1 = 0.0
X2 = -0.191
Y2 = 0.0

0 // направление пути
0 - в одну сторону, 1 - в другую сторону, 2 - в обе стороны.
Да да, для машин тоже можно поставить двоечку, в обе стороны)
Правда ни к чему хорошему это не приведет)
Машины встанут лоб в лоб и собственно на этом все и закончится)

[если совсем не обленюсь, позже и сюда картинку вставлю]

*Это интересно:
А нету тут ничего интересного) Если только создание невидимых визуально путей как для машин, так и для людей во любые стороны. Но об этом напишу позже.... Пока можно сказать, что для этого используется заголовок [onlyeditor], при этом блок Height Profiles и вовсе отсутствует.


P.S. Далее мы поговорим о редактировании и создании собственных сплайнов. Но это уже не сегодня)
Жду комментов, вопросов, поправок и добавлений с теме обсуждения сплайнов.
Wizard
Заяц
 
Сообщения: 1090
Зарегистрирован: 08 ноя 2010, 18:10

Re: OMSI Сплайны - спецификация, OMSI Spline Specification

Сообщение Wizard » 07 фев 2013, 14:00

Обновлена информация в предыдущих постах.

Дополнительные параметры ОМСИ сплайн файлов, которые удалось найти/определить.

Параметр [onlyeditor]
Записывается в начале файла и выглядит вот так:
Код: Выделить всё
[onlyeditor]


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

Параметр [length]
Что делает, и зачем нужен этот параметр, мне, к сожалению, пока не известно.
Записывается он в начале файла и выглядит так:
Код: Выделить всё
[length]
10


Число естественно означает какую то длину. А вот какую и для чего она? Пока не известно.
Вот описание на немецком, может кто нибудь поймет?
Код: Выделить всё
Zunдchst geben wir die Lдnge an, sie wird benцtigt, damit das Programm die kьrzeste Einheit kennt.


Параметр [halfcantwidth]
Что делает, и зачем нужен этот параметр, мне, к сожалению, пока не известно.
Записывается он в начале файла и выглядит так:
Код: Выделить всё
[halfcantwidth]
2


Число естественно означает что то. А вот что и для чего? Пока не известно.
Вот описание на немецком, может кто нибудь поймет?
Код: Выделить всё
Halbbreite des Bereiches, welcher in Kurven ьberhцht wird:
Wizard
Заяц
 
Сообщения: 1090
Зарегистрирован: 08 ноя 2010, 18:10


Вернуться в FAQ для OMSI

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1