Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Редактор Автомобилей #42

Open
2 tasks done
VodkaNET opened this issue Mar 16, 2024 · 0 comments
Open
2 tasks done

Редактор Автомобилей #42

VodkaNET opened this issue Mar 16, 2024 · 0 comments
Labels
enhancement New feature or request

Comments

@VodkaNET
Copy link
Contributor

VodkaNET commented Mar 16, 2024

Please describe, is your feature request related to a problem?

Предисловие

Поднимая вопрос необходимости адекватного транспорта для всех игроков и желающих воплощать свои идеи в реальность, хотелось бы начать свой Issue с этого маленького предисловия.
Я работаю над настройкой транспорта в X-Ray с 2021 года, имею богатый опыт и желание развивать эту тему для остальных модификаций и модмейкеров. Несмотря на уже откровенно устаревший физический движок, который к тому же был дополнительно покорёжен не в ту сторону, я не могу назвать транспорт в игре плохим. Наоборот - он очень даже неплох, а его функционал, который имеется в оригинальной игре работает весьма неплохо. Всё это достигается путём долгой и муторной настройки, на которую по сей день нет адекватных инструкций и гайдов. Неудобство настройки - первое что отпугнёт модмейкера, а второе - это отсутсвие какой-либо информации на этот счёт. Лишь единицы не поленились поперебирать каждый из параметров, и поизучать его действие на автомобиль.
Но иллюзия ужасности и неуместности уже создана. Спасибо PlayGround, за великую авто-зону, которую используют кто не лень. Все настройки выполнены отвратительно, выставлены наугад, машины переворачивается от любого уклона поверхности более чем в 2 геометрических градуса, а ощущение что ты ездишь на автомобиле пропадает из-за топорной и деревянной настройки модели, которую делали наугад, не упираясь совершенно ни на что. И вот, начиная с момента выхода первой автозоны - транспорт в игре считается смешным и неуместным позором. Я думаю что настало время исправить это.

Предисловие - Физическая модель автомобиля

Не будем углубляться в большие подробности касательно привязки модели. Представим, что она уже привязана по аналогии оригинальной машины, и вот-вот ждёт себя в модификации модмейкера который решил предоставить уникальную модель своим игрокам. Он, довольный, и счастливый, экспортирует эту машину в Actor Editor, указывает конфиг уже существующей машины, правит название костей и уже торопится запускать игру дабы посмотреть на своё творение.

Ага, хрен там плавал.

Она даже не поехала. Колёса крутятся против своей оси, руль решил принять солнечную орбиту и выполнять обороты на 180 вместо земли, а сама машина плетётся еле-еле, хотя конфиг полностью совпадает с рабочей машиной. Собственно это и есть проблема №1 - Которая сведёт модейкера который не желает этим заниматься с ума. Настройка автомобиля разделена на 2 этапа - саму физическую модель, и игровой конфиг. В оригинальном сталкере, для того чтобы проверить физическую модель, нужно заново переэкспортить её в папку с игрой, переоткрыть игру, и испытать все настройки в игре. И ладно бы этих параметров было 2-3 (Например ни у кого же вызывает проблем настройки физической двери), их в районе 10-15 (Учитывая настройки массы каждого шейпа), и естественно, они играют важную роль в работе колёс, развесовки и мирового веса авто, а без адекватного настроенного центра массы машины превратится в кулич на колёсах из авто-зоны. В среднем, на первый этап доводки физической модели уходит большего времени, но если автор захочет подкорректировать настройки модели под свой конфиг - это отнимет у него ещё половину его же времени. Открыть -> Поменять циферку -> Экспортнуть, и повторять этот цикл до тех пор, пока в голове не появится ВААС, с фразой "Я уже говорил тебе, что такое безумие?"

Предисловие - Игровой конфиг автомобиля

Здесь к счастью всё попроще, но так же местами запутано. За максимальную мощность машины отвечают не очевидные параметры, некоторые параметры хоть и имеют формулы альтернативные с реальностью, но работают совершенно не так. За максимальную скорость, разгон, и тому подобное отвечает буквально один параметр - а всё остальное это так, доводка, для желающих повозиться. Спешу отметить что эта часть напоминает разработку какого-нибудь конфига DriftCar-а из каких-либо не безизвестных гоночных игр, но к сожалению, вместо открытия тестового полигона после смены каждого параметра приходится полностью перезапускать игру. На это так же уходит много времени, а экспериментируя с теми или иными настройками по отдельности - времени убивается ещё больше, ведь порой, некоторые из них требует комплексной настройки, которая может быть не совместимой. Всё это для любого модмейкера с длинным носом будет увлекательным до момента появления следующей фразы в голове: "Я уже говорил тебе, что такое безумие?"

Подводим итог

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

Describe the solution you would like

1. Редактор игровой модели в Real-Time (В настоящем времени и прямо в игре)

Состав:

  • ImGui Редактор, имеющий возможность взаимодействовать с рядом параметров для шейпов и костей
  • ImGui Редактор, имеющий возможности работы с BindPose, BindRotationPose каждой из костей
  • ImGui Редактор, имеющий возможность отобразить или скрыть действующий скелет автомобиля
  • ImGui Редактор, имеющий возможность отобразить или скрыть действущие ОСИ каждой из костей
  • ImGui Редактор, имеющий возможность корректировать центр массы модели
  • Дальнейший вывод всей полученной информации в GameLog или отдельный текстовый файл

2. Редактор игрового конфига модели в Real-Time (В настоящем времени и прямо в игре)

Состав:

  • ImGui Редактор, имеющий возможность изменения параметров всех настроек автомобиля
  • ImGui Редактор, имеющий возможность получать отклонения камеры относительно центра автомобиля (Настройка камеры авто)
  • ImGui Редактор, имеющий возможность взаимодействовать с партиклами, и физическими частями автомобиля (Настройка поломки, повреждений, и партиклов авто)
  • ImGui Редактор, имеющий работать со звуками модели
  • Дальнейший вывод всей полученной информации в GameLog или отдельный текстовый файл

3. Дополнительные редакторы

Состав:

  • Система присестов для автомобиля (Легковой, Грузовой) с возможностью их подзагрузки у других пользователей (Полезно для тех, кто не хочет настраивать свой автомобиль)
  • Возможность дать импульс автомобилю любого типа (Урон или простой толчок)
  • Справочник работы формул из комментариев оригинальных конфигов
  • Подсказки, вкратце объясняющие действие каждого из параметров

4. Параметры применяемые в модели авто:

Классическая кость (Rigid)

Name - Имя кости
Game Material - Материал удара об что-либо
Mass - Вес кости
Center of Mass - Центр массы
Bind Position
Bind Rotation

Колесо-руль (Wheel [Steer-X/Roll-Z)

Name - Имя кости
Game Material - Материал удара об что-либо
Mass - Вес кости
Breakble - Есть, но работает не коректно
Center of Mass - Центр массы
Bind Position
Bind Rotation
Friction - Сцепление (Чем больше - тем лучше хват колёс. Выглядит скорее как ограничитель скорости)
Spring Factor - Клиренс машины (Чем больше, тем выше колесо)
Damping Factor - Фактор прыгучести (Люфта)
Steer (Limits Min, Limits Max) - Угол поворота рулевого колеса

Custom Data
User Data - Сам конфиг авто

5. Параметры применяемые в секции авто:

Классы
C_NIVA - Движковая машина
SCRPTCAR - Скриптовая машина (Не работает в ЗП)

Пример секции:

(system.ltx)
[m_car]
GroupControlSection = spawn_group
discovery_dependency =
$spawn = "vehicles\car"
cform = skeleton
class = C_NIVA
inv_weight = 1000
cost = 100000
inv_grid_width = 1
inv_grid_height = 1
remove_time = 99999999999
script_binding = bind_car.init

[niva_car]:m_car
$spawn = "vehicles\niva_car"
visual = dynamics\vehicles\car\niva_car.ogf

6. Параметры применяемые в конфигурации авто

[car_definition]

camera_pos = -0.35, 1.5, 0.0 ;смещение камеры в кабине влево-вправо, вверх-вниз, вперед-назад
camera_pos_firsteye = -0.35, 1.5, 0.0
camera_pos_lookat = 0.1, 2.5, -4.2
camera_pos_free = 0.1, 2.5, -4.2

driving_wheels = back_left_wheel,back_right_wheel,front_left_wheel,front_right_wheel ; ведущие колёса
steering_wheels = front_left_wheel,front_right_wheel ; рулевые колёса
breaking_wheels = front_left_wheel,front_right_wheel,back_left_wheel,back_right_wheel ; тормозящие колёса
doors = left_door,right_door ; двери
steer = stearing_wheel ; руль
driver_place = seat_left, seat_right ; место водителя
exhausts = exhausts ; выхлопная труба
;exhaust_particles = vehiclefx\exhaust_1

;-------------------------------------------------------------------------------
;------ Factory parameters of Engine -------------------------------------------

power_increment_factor = 0.05 ;Плавность ввода мощности
power_decrement_factor = 0.10 ;Плавность вывода мощности
rpm_increment_factor = 0.05 ;Плавность ввода оборотов
rpm_decrement_factor = 0.10 ;Плавность вывода мощности
m_power_neutral_factor = 1 ;Сила в нейтральном значение

fuel_tank = 40 ; Объём топливного бака
fuel_consumption = 12 ; Потребление топлива

;-------------------------------------------------------------------------------
;------ Engine settings -------------------------------------------

engine_power = 84 ; Количество лошадишнных сил
max_engine_rpm = 5500 ;Максимально возможные обороты двигателя(С учётом местности и т.д)
max_power_rpm = 5000 ;Максимально возможные обороты, выдаваемые двигателем(Т.е после нажатия кнопки "Газ")
max_torque_rpm = 4500 ;Используются в просчётах
idling_engine_rpm = 550 ;Холостые обороты двигателя

;-------------------------------------------------------------------------------
;------ Adjustment a wheel -----------------------------------------------------

ph_mass = 500
reference_radius = 0.26 ; Радиус колеса, используемый при просчёте двигателя
axle_friction = 0.001 ; Ослабление скорости в неетральной позиции. (Nm)
steering_speed = 0.63 ; Время поворота рулевого колеса, в максимум. rps (1)
steering_torque = 1000000 ; Сила гидроусилителя руля. (N
m)
break_torque = 0.005 ; Сила тормозных колодок. (N*m)
break_time = 2.8 ; время нарастания силы торможения до максимума, при подтормаживании (стрелка назад)
hand_break_torque = 0.015 ; сила торможения пробелом (по умолчанию = break_torque)

;-------------------------------------------------------------------------------
;------ Gearbox ----------------------------------------------------------------

main_gear_ratio = 7.8 ; Передаточное отношение
auto_transmission = off ; Автоматическая коробка (on/off)

[transmission_gear_ratio]
; shift down/ shift up. (rpm, необходимое для переключения)
R = 3.80
N1 = 3.90
N2 = 2.20
N3 = 1.50
N4 = 1.10

;-------------------------------------------------------------------------------
;------ Rest Adjustment --------------------------------------------------------

[lights] ; Световые приборы
headlights = f1, f2, f3, f4, pribor_panel_light_1, pribor_panel_light_2

[f1]
bone = left_light
color = 1.0,1.0,1.0,1.0
range = 35
cone_angle = 60
spot_texture = internal\internal_light_torch_r2
glow_texture = glow\glow_Yellow
glow_radius = 1.5

[f2]
bone = right_light
color = 1.0,1.0,1.0,1.0
range = 35
cone_angle = 60
spot_texture = internal\internal_light_torch_r2
glow_texture = glow\glow_Yellow
glow_radius = 1.5

[f3]
bone = stop_light_left
color = 0.25,0,0,0.1
range = 2.1
cone_angle = 60
spot_texture = internal\internal_light_torch_r2
glow_texture = glow\glow_torch_r2
glow_radius = 1.5
is_point = true

[f4]
bone = stop_light_right
color = 0.25,0,0,0.1
range = 2.1
cone_angle = 60
spot_texture = internal\internal_light_torch_r2
glow_texture = glow\glow_torch_r2
glow_radius = 1.5
is_point = true

[car_sound]
snd_volume = 1.0
snd_name = car\car1
engine_sound_start_dellay = 0.5
engine_start = car\veh_niva\engine_start
engine_stop = car\veh_niva\engine_stop
transmission_switch = car\veh_niva\gearchange
explosion_sound = weapons\heli_explosion
relative_pos = 0.1, 1.3, 1.6 ; Смещение звука двигателя (Например на капот)
;-------------------------------------------------------------------------------
;------ animations params ------------------------------------------------------

[animations]
driver_animation_type = 0 ;тип анимаций актера для данной машины.

;-------------------------------------------------------------------------------
;------ damage params ----------------------------------------------------------

[damage_particles]

explosion_particles = explosions\expl_car
car_damage_particles1 = explosions\expl_car_smoke_small
car_damage_particles2 = explosions\expl_car_smoke_big
wheels_damage_particles1 = vehiclefx\exhaust_1
wheels_damage_particles2 = vehiclefx\exhaust_1

particle_bones1 = front_bamper
particle_bones2 = root

;-------------------------------------------------------------------------------
;------ particle bones ---------------------------------------------------------

[particle_bones]
root = 0,-0.5,1
front_bamper = 0,0,0

[damage_items]

[collision_damage]

[damage_bones] ;аналогично секции в актере, но без анимаций
;bone_name = <hit_scale>,<-1>,<wound_scale>
;<hit_scale> - коэфф. изменения хита (уменьшения здоровья)
;<wound_scale> - коэфф. изменения величины открытой раны - незадействован

default = 1, -1, 0.1

[immunities]
burn_immunity = 0.0 ;коэффициенты иммунитета
strike_immunity = 0.0
shock_immunity = 0.0
wound_immunity = 0.0
radiation_immunity = 0.0
telepatic_immunity = 0.0
chemical_burn_immunity = 0.0
explosion_immunity = 0.0
fire_wound_immunity = 0.0

[explosion]
blast = 1
blast_r = 15
blast_impulse = 350
frags = 15
frags_r = 30
frag_hit = 0.5
frag_hit_impulse = 350
hit_type_blast = explosion
hit_type_frag = fire_wound
up_throw_factor = 0.25
wm_size = 0.1
explode_particles = explosions\expl_car
light_color = 0.6,0.5,0.3
light_range = 15.0
light_time = 0.5
fragment_speed = 76
fragment_tracer_max_length = 3
explode_duration = 50
snd_explode = weapons\heli_explosion
wallmark_section = explosion_marks

[explode_effector]
effect_sect_name= effector_explode_hit

;-------------------------------------------------------------------------------
;------ Others params ----------------------------------------------------------

[air_resistance] ;Сопротивление воздуха. Помогает сделать машину более склонной к заносу
linear_factor = 250.f ;
angular_factor = 250.f ;

[collide]
not_collide_parts = 1

;-------------------------------------------------------------------------------
;------ destroyed part ---------------------------------------------------------

[destroyed]

[autoremove_parts]
time = 30

Концепт редактора

imgui
bones

Describe alternatives you've considered

No response

Additional context

Остаюсь открытым для вопросов касательно работы автомобилей:

Мои контакты:
https://vk.com/dapatenok
Discord - ultimate2000
Или этот Issue

Agreements

@VodkaNET VodkaNET added the enhancement New feature or request label Mar 16, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant