PDA

Просмотр полной версии : Скриптовая раскачка. Идеи и обсуждение



proton2
02.02.2013, 11:50
Меня очень интересует раскачка кабины скриптом. Физическая анимация дело понятное - можно задать какую угодно траекторию. Но гораздо интереснее когда не нужно заморачиваться с физической анимацией, а можно сделать скриптом.

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

В исходной версии качалки от Tram'a на небольших скоростях раскачки вообще не ощущалось. Тем не менее коглда едешь на реальном локе колебания кабины есть и на небольших скоростях. Этого очень не хватает в TRS, не может лок на малой скорости ехать как по ровной плоскости.
Этот скрипт раскачивает лок и кабину, но не раскачивает тень. В итоге на больших скоростях при качании тень выпирает...

Вот исходный вариант качалки Трама:

thread void K_loop()
{
Bogey[] bog_l = GetBogeyList();

float R_level, J_level=0;

while(1)
{
float veh_vel=Math.Fabs(GetVelocity())*3.6;

if(veh_vel>20)
{
float maxAmpl=0.15*Math.Fmin(0.00015*(veh_vel-20),0.045); //амплитуду менять тут
R_level=R_level+Math.PI*Math.Rand(0.10,0.15);
int a= (int)(R_level/(2*Math.PI));
R_level=R_level-2*a*Math.PI;

float value1=maxAmpl* sin(R_level);

SetMeshOrientation("default",0,value1,0);
bog_l[0].SetMeshOrientation("default",0,-value1,0);
bog_l[1].SetMeshOrientation("default",0,-value1,0);

J_level=J_level+Math.PI*Math.Rand(0.11,0.13);
a= (int)(J_level/(2*Math.PI));
J_level=J_level-2*a*Math.PI;

maxAmpl=maxAmpl*1.2;

value1=maxAmpl*sin(J_level);
SetMeshTranslation("default",0,0,value1);
bog_l[0].SetMeshTranslation("default",0,0,-value1);
bog_l[1].SetMeshTranslation("default",0,0,-value1);
}

else if(veh_vel>19)
{
SetMeshOrientation("default",0,0,0);
SetMeshTranslation("default",0,0,0);
}
Sleep(0.05);
}
}

Меня очень интересует эта тема и я попробовал ее поковырять.
Во-первых изменил амплитуду. Раньше там была величина 0.00015, я ее увеличил до 0.00035

float ampl_const = 0.00035;
float maxAmpl=0.15*Math.Fmin(ampl_const*(veh_vel-20),0.045);

Раскачка изменила свое поведение. На малых скоростях стало ощущаться колебание кабины, похожее на реальность. По мне так это здорово добавило реализма. Колебания кабины очень не хватало.

Вот полный исходный код чуть измененной функции раскачки на которой катаюсь я.
На сколько я понял (и отразил в коментариях) суть этой скриптовой раскачки - поворот на заданную величину У и одновременное подпрыгивание на заданную величину по оси Z. Если я не до конца понял суть, пожалуйста, поправьте меня.

thread void K_loop() // качание
{
Bogey[] bog_l= GetBogeyList();
float R_level=0; //rotate level?
float J_level=0; // jump level?

while(1)
{
float ampl_const = 0.00035;
float veh_vel=Math.Fabs(GetVelocity())*3.6; // для расчета амплитуды берем скорость

if(veh_vel>20) // с какой скорости начинаем качку
{
float maxAmpl=0.15*Math.Fmin(ampl_const*(veh_vel-20),0.045); //формула регулировки апмлитуды
R_level=R_level+Math.PI*Math.Rand(0.10,0.15);
int a= (int)(R_level/(2*Math.PI));
R_level=R_level-2*a*Math.PI; //rotate level по оси У

float value1=maxAmpl* sin(R_level); // расчет величины для оси У

// если правильно понимаю - rotation корпуса по оси у
SetMeshOrientation("default",0,value1,0);

//rotation телег по оси У
bog_l[0].SetMeshOrientation("default",0,-value1,0);
bog_l[1].SetMeshOrientation("default",0,-value1,0);

J_level=J_level+Math.PI*Math.Rand(0.11,0.13);
a= (int)(J_level/(2*Math.PI));
J_level=J_level-2*a*Math.PI;

maxAmpl=maxAmpl*1.2;

value1=maxAmpl*sin(J_level); // расчет значения для оси Z, подпрыгивание по оси Z?
SetMeshTranslation("default",0,0,value1); //смещение корпуса по оси Z
bog_l[0].SetMeshTranslation("default",0,0,-value1);
bog_l[1].SetMeshTranslation("default",0,0,-value1);
}
else
if(veh_vel>19)
{
SetMeshOrientation("default",0,0,0);
SetMeshTranslation("default",0,0,0);
}
Sleep(0.05);
}
}

В качестве идеи дальнейшего обсуждения:

можно задать несколько условий скорости, и для каждого из условий использовать свою константу амплитуды, например:

if (veh_vel>10 and veh_vel<19) ampl_const = 0.00045;
else if (veh_vel>19 and veh_vel<50) ampl_const = 0.00035;
else if ((veh_vel>50 and veh_vel<80) ampl_const = 0.00025;

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

У кого какие будут интересные идеи по улучшению качалки?

Попробуйте на каком-нибудь локе поставить функцию качалки с моей измененной величиной амплитуды. Не знаю кому как, а лично мне после этих изменений кататься с раскачиванием очень понравилось.

TRam_
02.02.2013, 11:57
У кого какие будут интересные идеи по улучшению качалки?в 12ой версии можно определять скорость вращения кузова относительно оси z (другими словами кривизну кривой). Если потратиться на ресурсы, то можно сделать чтоб лок в прямых не раскачивался, а в кривых "колбасило", особенно когда их проходят с превышением...


Еще как идея - а может в зависимости от той или иной величины скорости можно вообще задавать разные математические функции расчета траектории?можно написать всё что угодно. Моя раскачка написана для вагонов, чтобы одновременно раскачивать все движущиеся вагоны на карте - чего-то более простого чем эта придумать сложно. А усложнить для уточнения всегда можно :) .

proton2
02.02.2013, 12:11
Я не имею ввиду что качалка TRam'а плохая. Честно говоря именно этот метод лично мне нравится больше всего - не нужно мучиться с анимацией в максе да и код скрипта простой и понятный.
Люблю когда все просто и понятно - значит любой может использовать.

Лично для моего восприятия такого раскачивания кабины вполне хватает для игровой имитации.


в 12ой версии можно определять скорость вращения кузова относительно оси z (другими словами кривизну кривой).
За эту мысль большое спасибо. Для сбора идей я и созывал консилиум :)
А какой функцией и как это можно сделать? Есть где-нибудь пример?

Эрендир
02.02.2013, 12:21
Вот только не задача, эта раскачка чувствительна для fps. На что делать с помощью неё раскачку кабины, по меньшей мере глупо. Лучше потратить своё время и сделать полноценную анимацию качания в максе, что будет и реалистичнее для конкретного лока, и меньше будет есть ресурсы.

proton2
02.02.2013, 12:26
За информацию спасибо. Хорошо когда известны все плюсы и минусы.

Есть у кого-нибудь наглядные результаты сравнения - какой fps выдает игра при включенной качалке и какой при выключенной качалке? Интересно взглянуть на сколько эта качалка жрет fps.

TRam_
02.02.2013, 12:29
Лучше портратить своё время и сделать полноценную анимацию качания в максекачание в максе нельзя сделать одинаковой частоты при различной амплитуде (либо перебрасывать анимацию с кадра на кадр, как делается сейчас). Хотя как вариант можно наделать кучу файлов с анимацией раскачивания и затухания этого раскачивания, в виде эффектов.

Опять же мне не нравится, что локомотив не отображается из кабины... Ну когда я наконец смогу выглянуть из окна? (это требует синхронной анимации кузова и кабины)

Рома
02.02.2013, 13:41
А есть скриптовая раскачка не чувствительная к фпс? Как ее вообще отвязать от фпс?

TRam_
02.02.2013, 13:52
Как ее вообще отвязать от фпс?она слабо чувствительна к fps. Другое дело что если раскачивать кузов, которому привязана кабина (как сделано выше), то камера вместе с кабиной раскачиваются почти синхронно, но с дрожанием (эффект прислонения головы к стенке). Решение - отделить точку привязки кабины в отдельную мешь, установить в 0,0,0 кузова, и скриптом задавать раскачку отдельно кузову, отдельно кабине (когда пользователь в ней сидит). Получится как в 2010ом, где был такой же эффект, и раскачивание в кабине выглядело плавным.

Рома
02.02.2013, 13:57
У меня дрожать начинает когда скорость выше 110-120 км/ч. До этого все плавно

---------- Сообщение добавлено в 16:57 ---------- Предыдущее сообщение размещено в 16:56 ----------

Кстати, можно ли как-то убрать дрожь, если отвязать точку кабины от лока нет возможности?

TRam_
02.02.2013, 14:00
если отвязать точку кабины от лока нет возможности?возможность есть - в hex редакторе попортить имя точки. желания написать это пока нет - для отображения кабины и кузова в виде "1" нужно сделать убираемой мешь low-poly кабины.

Рома
02.02.2013, 14:23
А что, у многих локомотивов она уже убираемая ( любой лок, у которого есть дневная и ночная кабины)

proton2
02.02.2013, 17:17
Попробовал я сам покататься на модифицированной качалке.
Изменения в том, что я в зависимости от интервала скорости ставил ту или иную величину поправки к амплитуде. В итоге небольшая умеренная качка появилась на малых скоростях (там, где ее раньше не было и машина ехала не естественно ровно), а на большой скорости качка не стала чрезмерно выколбашивать кабину. В итоге качка как бы уравнялась - на маленьких скоростях чуть увеличилась, на больших скоростях поубавилась. Все изменения в коде пометил красным.

Может кто-нибудь попробует на 2тэ116 или на каком нибудь другом локе, а потом отпишется тут как и что в итоге получилось?


thread void K_loop() // качание
{
Bogey[] bog_l= GetBogeyList();
float R_level=0;
float J_level=0;
float ampl_const = 0.00035; // амплитуду регулируем этой переменной.

while(1)
{
float veh_vel=Math.Fabs(GetVelocity())*3.6; // для расчета амплитуды берем скорость

if (veh_vel>30 and veh_vel<60) ampl_const = 0.00025;
if (veh_vel>60) ampl_const = 0.00015;



if(veh_vel>10) // с какой скорости начинаем качку
{
float maxAmpl=0.15*Math.Fmin(ampl_const*(veh_vel-20),0.045); //формула регулировки апмлитуды
R_level=R_level+Math.PI*Math.Rand(0.10,0.15);
int a= (int)(R_level/(2*Math.PI));
R_level=R_level-2*a*Math.PI;

float value1=maxAmpl* sin(R_level);

SetMeshOrientation("default",0,value1,0);
bog_l[0].SetMeshOrientation("default",0,-value1,0);
bog_l[1].SetMeshOrientation("default",0,-value1,0);

J_level=J_level+Math.PI*Math.Rand(0.11,0.13);
a= (int)(J_level/(2*Math.PI));
J_level=J_level-2*a*Math.PI;

maxAmpl=maxAmpl*1.2;

value1=maxAmpl*sin(J_level);
SetMeshTranslation("default",0,0,value1);
bog_l[0].SetMeshTranslation("default",0,0,-value1);
bog_l[1].SetMeshTranslation("default",0,0,-value1);
}
else
if(veh_vel<10)
{
SetMeshOrientation("default",0,0,0);
SetMeshTranslation("default",0,0,0);
}
Sleep(0.05);
}
}

CFM
02.02.2013, 18:05
Боря, попробуй ввести увеличение амплитуды и частоты при проезде леверов. Как расширение можно создать маркеры состояния пути, в соответствии со значением которых выбиралась бы амплитуда и частота. Мысль - на деревянном пути ход мягче, поэтому амплитуда больше, а частота чуть меньше. На бетонных наоборот.
А какие виды перемещений в этом скрипте? Вертикальные, горизонтальные поперечные? А вращательные вдоль оси кузова?

proton2
02.02.2013, 20:34
Боря, попробуй ввести увеличение амплитуды и частоты при проезде леверов. Как расширение можно создать маркеры состояния пути, в соответствии со значением которых выбиралась бы амплитуда и частота. Мысль - на деревянном пути ход мягче, поэтому амплитуда больше, а частота чуть меньше. На бетонных наоборот.
А какие виды перемещений в этом скрипте? Вертикальные, горизонтальные поперечные? А вращательные вдоль оси кузова?

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

Корпус, телеги и кабина вращаются на заданную величину вокруг оси У и одновременно подпрыгивают и опускаются по оси Z.
Величина смещения и ротации рассчитывается в зависимости от скорости и величины поправки.

SHEP Rom
02.02.2013, 20:43
proton2, попробуй вот такую настройку. Это настройка Вовиной конфигурации.

float sin(float x)
{
int a= (int)(x/(2*Math.PI));
x=x-2*a*Math.PI;
a=1;
if(Math.PI<x and x<=2*Math.PI)
{
x=x-Math.PI;
a=-a;
}
if(Math.PI/2<x and x<=Math.PI)
{
x=Math.PI-x;
}
return a*(x-x*x*x/6+x*x*x*x*x/120-x*x*x*x*x*x*x/5040+x*x*x*x*x*x*x*x*x/362880);
}
thread void K_loop()
{
Bogey[] bog_l= GetBogeyList();
float R_level=0;
float J_level=0;
bool IsNight=false;
int j=0;
Bogey[] bog=GetBogeyList();
while(1)
{
j++;
bool j_work=false;
bool TZ_work=false;
float veh_vel=Math.Fabs(GetVelocity())*3.6;
if(veh_vel>10)
{
float maxAmpl=0.33*Math.Fmin(0.00015*(veh_vel-20),0.045); //амплитуду менять тут
R_level=R_level+Math.PI*Math.Rand(0.07,0.12);
int a= (int)(R_level/(2*Math.PI));
R_level=R_level-2*a*Math.PI;
float value1=maxAmpl* sin(R_level);

SetMeshOrientation("default",0,value1,0);
bog_l[0].SetMeshOrientation("default",0,-value1,0);
bog_l[1].SetMeshOrientation("default",0,-value1,0);


J_level=J_level+Math.PI*Math.Rand(0.06,0.11);
a= (int)(J_level/(2*Math.PI));
J_level=J_level-2*a*Math.PI;
maxAmpl=maxAmpl*2.18;
value1=maxAmpl*sin(J_level);
SetMeshTranslation("default",0,0,value1);
bog_l[0].SetMeshTranslation("default",0,0,-value1);
bog_l[1].SetMeshTranslation("default",0,0,-value1);
}
else
if(veh_vel>19)
{
SetMeshOrientation("default",0,0,0);
SetMeshTranslation("default",0,0,0);
}

if(j>300)
j=0;
Sleep(0.035);
}
}

CFM
03.02.2013, 02:14
Корпус, телеги и кабина вращаются на заданную величину вокруг оси У и одновременно подпрыгивают и опускаются по оси Z.
Величина смещения и ротации рассчитывается в зависимости от скорости и величины поправки.
Думаю, нужны поперечные горизонтальные перемещения (ось Х, да?).
Кстати, я давно думал на одну тему. Огромный шаг в реалистичности был бы, если имитировать перемещения головы машиниста, вызванные ускорениями кабины по трём осям. Суть идеи в том, что на голову машиниста действуют две противоположные силы - ускорения перемещения кабины и обратного ускорения головы машиниста из-за инерции. Их результирует коэффициент упругости тела машиниста. Если бы оно было абсолютно упругим (жёстко связывало кабину и голову), то голова полностью повторяла бы ускорения кабины. Если бы оно было абсолютно неупругим (связь головы с кабиной отсутствовала), оно бы полностью подчинялось силе инерции и не повторяла бы перемещения кабины. Подбирая коэффициент, добиваемся оптимального соотношения сил.

Nemo
03.02.2013, 02:39
А в чём, получается, состоит чисто техническое отличие в способах задания качки, для того чтобы голова машиниста двигалась и не двигалась?

CFM
03.02.2013, 04:01
Ты имеешь в виду, почему сейчас кабина качается, а камера - нет?

TRam_
03.02.2013, 15:16
почему сейчас кабина качается, а камера - нет?наклон камеры относительно горизонта не поддерживается. Но вот в 12ой версии кабина и камера качаются синхронно (если раскачивать кузов), в результате возникает "дрожание" (за счёт ошибок округления при рендеринге изменившегося положения камеры с положением камины). В 2010ой камера была неподвижной.

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

CFM
03.02.2013, 16:18
Так что да, в 12ке, если отвязать точку кабины от кузова, и написать алгоритм синхронизации кузова и кабины, можно раскачивать камеру (голову машиниста) отдельно от всего остального, двигая отвязанную точку привязки кабины.
То есть на точку привязки кабины вешаются точки привязки камер? А на что вешаются остальные точки привязки кабины?

TRam_
03.02.2013, 17:08
То есть на точку привязки кабины вешаются точки привязки камер?да.

CFM
03.02.2013, 20:52
А на что тогда вешается сама кабина?

Суть идеи в том, что на голову машиниста действуют две противоположные силы - ускорения перемещения кабины и обратного ускорения головы машиниста из-за инерции. Их результирует коэффициент упругости тела машиниста. Если бы оно было абсолютно упругим (жёстко связывало кабину и голову), то голова полностью повторяла бы ускорения кабины. Если бы оно было абсолютно неупругим (связь головы с кабиной отсутствовала), оно бы полностью подчинялось силе инерции и не повторяла бы перемещения кабины. Подбирая коэффициент, добиваемся оптимального соотношения сил.
Продолжу мысль. Система состоит из двух точек - верхней и нижней. На нижнюю крепится верхняя, на верхнюю крепится камера. Расстояние между ними = расстояние между глазами машиниста и точкой опоры его тела на кабину (он может сидеть на кресле или стоять на ногах). Нижняя точка, полностью повторяя ускорение кабины в плоскости какой-либо оси, поворачивает верхнюю точку в противоположную сторону в плоскости той же оси (двигаясь, камера будет оставаться параллельно горизонту, как люлька на чертовом колесе). Предельный угол поворота - 90° (или в условиях тесноты - 45°, или любой другой). С увеличением угла поворота сила упругости возрастает (осмелюсь предположить, что нелинейно). Диапазон между нулевой и максимальной силой упругости зависит от коэффициента упругости. Диапазон, естественно, располагается в пределах между нулевым и максимальным углом поворота.

proton2
05.02.2013, 22:09
Было высказано опасение что скриптовая раскачка жрет fps.
Точно об этом можно будет утверждать только тогда, когда кто-нибудь это протестирует и покажет на скринах разницу в fps.

Потом.

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

Nemo
05.02.2013, 22:55
скриптовая раскачка жрет fps
С чего бы вообще? Жрать может, когда много вагонов надо раскачивать, а когда один лок - fps не должен жраться.



скриптовую раскачку можно отключать если расстояние между локом и камерой превышает заданную дистанцию включения раскачки. Аналогично включению лодов на определенном отдалении от камеры.
Лоды включаются игрой автоматически. Скриптом вроде нельзя определить расстояние от камеры до цели. Или можно? Это тогда было бы полезно как раз для вагонов, которых много.

Эрендир
06.02.2013, 01:50
Невозможно определить положение камеры в игровом пространстве. Только в пределах одного тайла.

TRam_
06.02.2013, 14:29
Можно включать процедуру скриптовой раскачки только для того лока, в кабине которого ты в данный момент находишься.пока что это самое большее что возможно.

CFM
06.02.2013, 15:28
Продолжу мысль. Система состоит из двух точек - верхней и нижней. На нижнюю крепится верхняя, на верхнюю крепится камера. Расстояние между ними = расстояние между глазами машиниста и точкой опоры его тела на кабину (он может сидеть на кресле или стоять на ногах). Нижняя точка, полностью повторяя ускорение кабины в плоскости какой-либо оси, поворачивает верхнюю точку в противоположную сторону в плоскости той же оси (двигаясь, камера будет оставаться параллельно горизонту, как люлька на чертовом колесе). Предельный угол поворота - 90° (или в условиях тесноты - 45°, или любой другой). С увеличением угла поворота сила упругости возрастает (осмелюсь предположить, что нелинейно). Диапазон между нулевой и максимальной силой упругости зависит от коэффициента упругости. Диапазон, естественно, располагается в пределах между нулевым и максимальным углом поворота.
Что важно. Тут, кроме того, что получим боковые перемещения и камера перестанет быть неподвижной относительно пути (или лока), мы также получим и продольные перемещения, что будет очень полезно для восприятия ускорений и замедлений. Скажу по опыту, при торможении для машиниста не менее визуального (иногда более), важно восприятие поезда "своей спиной". А этого очень не хватает в симуляторе.

Рома
12.02.2013, 20:54
К союалению отделение точек кабин от меши кузова не сильно помогло. В общем и целом стало лучше, но когда приближаешь камеру, например чтоб посмотреть показания приборов, то начинает жутко сильно дрожать. На скорости до 80 еще терпимо, после 110 уже нереально следить за приборами

CFM
24.03.2013, 18:50
Я тут что подумал. Все перемещения кузова при раскачке сводятся к его ВРАЩЕНИЮ вокруг трёх осей: вертикальной (нам кажется, что кабину бросает из стороны в сторону), продольной (воспринимается как есть) и поперечной (нам кажется, что кабину кидает вверх-вниз). Расчитывая и комбинируя эти вращения, можем получить похожую на правду болтанку.

TRam_
24.03.2013, 19:12
ну почему же. Ещё вертикальные поступательные перемещения. Ещё реакции в составе (т.е. поступательные вперёд-назад) . А ещё, если превысить скорость при прохождении кривых, появляются поступательные вправо-влево (удары гребней по рельсам). То есть все 6 степеней свободы абсолютно твёрдого тела участвуют.

CFM
24.03.2013, 19:43
Ещё реакции в составе (т.е. поступательные вперёд-назад)
Я специально упустил перемещения подвижной единицы относительно колеи, чтобы разделить их с перемещениями кузова относительно подвески, о которой и вёл речь.


Ещё вертикальные поступательные перемещения
Т.е. все точки кузова двигаются в одном направлении? Но для этого нужно, чтобы силы, перемещающие кузов прилагались строго в центре, либо по разные стороны от него с одинаковой величиной. Не могу представить, как это возможно в реальности. Ведь вагон наезжает на "ухаб" или "яму" вначале передней тележкой. Передний конец вагона подпрыгивает, а задний, соответственно, проседает и всё это происходит вокруг поперечной оси.


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

TRam_
24.03.2013, 21:45
Ведь вагон наезжает на "ухаб" или "яму" вначале передней тележкой. Передний конец вагона подпрыгивает, а задний, соответственно, проседаетпочему же? Задний проседает меньше чем подпрыгивает передний (так как кузов хоть и обладает значительной массой, но от толчка начинает не только вращаться, но и двигаться вверх).А значит будет сложение вращения со смещением. Чистое вращение было бы, если б масса вагона была сконцентрирована в его центре (тогда момент инерции был бы очень маленький, соответственно вся энгергия толчка ушла бы во вращение). Но масса вагона распределена равномерно по всей длинне, поэтому вертикальным перемещением пренебречь нельзя.

Kompozitor
03.06.2013, 23:48
Можно ли сделать раскачку трамвайного вагона зависимой от динамики движения, кривых, а также мелких неровностей профиля?

TRam_
04.06.2013, 15:34
можно. Только для этого нужна математическая модель раскачивания и время. А ещё несколько одновременно движущихся трамваев будут серьёзно жрать ресурсы (потому что возможностей отключения работы скриптов у того что вне поля зрения до сих пор нет.)

Kompozitor
04.06.2013, 16:30
потому что возможностей отключения работы скриптов
А отключения скриптов у всех трамваев, кроме того, который выбрал игрок?

Если раскачивается не сам локомотив, а кабина или салон, то кабина же работает только в виде "1" на выбранном игроком локомотиве. Тогда скрипты кабины отключаются на других локомотивах? Другой вопрос, что в большинстве трамваев в игре салоны сделаны внешними.

Просто в недавних поездках в харьковских трамваях пришел к выводу, что трамваи - это самый на сегодняшний день нереалистичный вид подвижного состава в Trainz. Ну не знаю, может, есть интересные иностранные модели.

ATL
05.06.2013, 03:01
" Просто в недавних поездках в харьковских трамваях пришел к выводу, что
трамваи - это самый на сегодняшний день нереалистичный вид подвижного
состава в Trainz. Ну не знаю, может, есть интересные иностранные модели." думаю, еслибы трамвайная тема интересовала больше скриптеров и моделлеров, было б счастье для любителей данного вида транспорта.

Kompozitor
05.06.2013, 17:34
А чем Trainz не трамвайный симулятор? Большой протяженности карты строить не нужно, сложные системы маршрутизаиции тоже не нужны.

artazinon
24.06.2013, 14:16
Доброго времени суток.
Подскажите, если мне просто для корпуса раскачку нужно сделать (без кабины), то как исходный текст будет выглядеть?

KarpovDima
13.12.2020, 22:08
Мужики , помогите настроить скрипт . Это скрипт сделан под тепловозу ТУ7 . В скриптах я так ничего не понял , тему прочитал , пробовал крутить настройки , но никакого эффекта это не дает . По сути что я хотел сделать что бы было раскачивание на малых скоростях начиная буквально с 5-10 км/ч ну и где то до 30-35 км/ч . Может есть тут кто то опытный у кого это займет не много времени подкорректировать скрипт .
Файл скрипта GS - https://yadi.sk/d/DcriKruXev-RgA

Donate with PayPal button

New New