HLFX.Ru Forum Страницы (2): [1] 2 »
Показать все 17 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Скорость шевеления ног (https://hlfx.ru/forum/showthread.php?threadid=5516)


Отправлено JPEG 22-05-2020 в 13:40:

Question Скорость шевеления ног

Замедлил скорость передвижения игрока, сделал звуки шагов реже в PM_UpdateStepSound (pmove->flTimeStepSound = fWalking ? 500 : 400, настроил, чтобы по-умолчанию игрок шёл, а cl_movespeedkey наоборот ускорял движение (мне так удобнее), подобрал волшебное число в CStudioModelRenderer::StudioProcessGait, чтобы звук совпадал с анимацией ног

C++ Source Code:
1
// calc gait frame
2
if (pseqdesc->linearmovement[0] > 0)
3
{
4
  m_pPlayerInfo->gaitframe += (m_flGaitMovement * [B]1.33[/B] / pseqdesc->linearmovement[0]) * pseqdesc->numframes;
5
}
6
else
7
{
8
  m_pPlayerInfo->gaitframe += pseqdesc->fps * dt;
9
}


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

Поэтому в CStudioModelRenderer::StudioEstimateGait подобрал множитель

C++ Source Code:
if ( m_fGaitEstimation )
{
  VectorSubtract( m_pCurrentEntity->origin, m_pPlayerInfo->prevgaitorigin, est_velocity );
  VectorCopy( m_pCurrentEntity->origin, m_pPlayerInfo->prevgaitorigin );
  m_flGaitMovement = Length( est_velocity * [B]1.63[/B] );


теперь при беге и duck звук синхронизирован, но при ходьбе анимация ровно в два раза быстрее

На видео на 0:09 видно, как при ходьбе анимация проигрывается в два раза быстрее, чем нужно (возможно звук при записи не очень синхронизировался)



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

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено Ku2zoff 22-05-2020 в 15:06:

Yo Den без переделки анимации - дуля. Потому что motion extraction. Но у меня есть для тебя рецепт, сам лично использовал:
1. Уменьшаешь модель в джедсе, например в 0.5. В Дядьмишином модельвьювере не прокатит - он корректно всё делает.
2. Затем декомпилишь её, берёшь от неё нужную секвенцию, и подсовываешь исходной полноразмерной модели. В qc файле указываешь нужной секвенции scale 2.0, если уменьшал на 0.5.
3. Компилишь с помощью studiomdl.

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


Отправлено JPEG 22-05-2020 в 16:45:

Цитата:
Ku2zoff писал:
Yo Den без переделки анимации - дуля. Потому что motion extraction. Но у меня есть для тебя рецепт, сам лично использовал:
1. Уменьшаешь модель в джедсе, например в 0.5. В Дядьмишином модельвьювере не прокатит - он корректно всё делает.
2. Затем декомпилишь её, берёшь от неё нужную секвенцию, и подсовываешь исходной полноразмерной модели. В qc файле указываешь нужной секвенции scale 2.0, если уменьшал на 0.5.
3. Компилишь с помощью studiomdl.

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

огромнейшее спасибо, всё работает. Не представляю, как ты придумал такой способ

__________________
МОЙ НОВЫЙ ПАБЛИК ПО ХЛ))

перехожу на другой двиг


Отправлено Crystallize 22-05-2020 в 16:57:

похоже на опцию которая могла бы пригодиться в явном виде в компиляторе\вьювере


Отправлено Ku2zoff 22-05-2020 в 17:08:

Цитата:
Yo Den писал:
Не представляю, как ты придумал такой способ

Я совершенно случайно обнаружил этот баг. По-моему, это происходит из-за неправильного скейлинга в джедсе. Если вдруг кто помнит, я раньше тоже уменьшал хуллы и все объекты в своём моде. Так вот. У меня остались уменьшенные (через джедс) модели игроков. Мне было лень перелопачивать заново кучу анимаций, поэтому я тупо перекомпилил модели с ключом scale 2.0 для всей модели. И заметил, что игроки перестали очень быстро дрыгать ногами, начали нормально ими двигать. Дело в том, что у меня были анимации из DoD, а там скорость игрока весьма ниже, чем в халфе. Поначалу, я это решал как-то программно, вроде бы тоже уменьшал m_flGaitMovement. А потом вот наткнулся на такую интересную вещь.
Если вдруг кому понадобиться, могу подсказать, как зеркалить анимации в милке. Именно зеркалить одну анимацию, а не всю модель, как делает gFlip, например. На игроках, по крайней мере неплохо работает.


Отправлено Дядя Миша 22-05-2020 в 17:19:

Не проще ли зарескейлить значение из linearmovement чем всё это загадочное дрочево?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 22-05-2020 в 17:24:

Дядя Миша ну не знаю. Это "загадочное дрочево" позволяет замедлить только одну анимацию, а другие не трогать. Это если скорости передвижения слишком отличаются. Если же нужно замедлить все анимации и сразу, тогда да, можно скейлить linearmovement.


Отправлено Дядя Миша 22-05-2020 в 18:06:

Ku2zoff а linearmovement по-твоему к чему относится?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 23-05-2020 в 05:45:

Дядя Миша по-моему, linearmovement относится к конкретной секвенции. Это внутренний параметр. И этот вектор для каждой секвенции разный. Если скейлить значение в коде, то это будет применяться ко всем секвенциям. Или ты предлагаешь индусскую фильтрацию, как в примере с 9-way блендингом?

C++ Source Code:
if (m_pPlayerInfo->gaitsequence == ANIM_WALK_SEQUENCE)
  pseqdesc->linearmovement[0] /= 2.0;


Отправлено Дядя Миша 23-05-2020 в 08:02:

Я предлагаю написать консольную утилитку, ну или добавить это во встроенный эдитор модельвьювера. Чтобы редактировать этот параметр внутри самой модели, для выбранной секвенции, очевидно же.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 23-05-2020 в 08:36:

Цитата:
Дядя Миша писал:
Чтобы редактировать этот параметр внутри самой модели, для выбранной секвенции, очевидно же.

Цитата:
Crystallize писал:
похоже на опцию которая могла бы пригодиться в явном виде в компиляторе\вьювере

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


Отправлено Дядя Миша 23-05-2020 в 10:11:

Только это такое, необратимое действие. Можно задавать фактор, а можно числами. Но фактор при каждом новом открытии модели скинется на один, очевидно же. Т.е. идея в том, чтобы сам вектор не менялся, но пользователь видел абсолютное значение.

Цитата:
Ku2zoff писал:
заставить фошыстов из TheGate бегать медленнее

а ты уверен, кстати, что это не завязано на fps секвенции?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 23-05-2020 в 10:37:

Цитата:
Дядя Миша писал:
а ты уверен, кстати, что это не завязано на fps секвенции?

Не особо, надо проверить. Я когда-то давно подсовывал в халфу модели террористов из Condition Zero Deleted Scenes. Так вот, они бегали так же медленно, как обычные гранты, но ногами перебирали раза в три шустрее. Если честно, я уже немного запутался и забыл, что влияет на величину flMove в функции CBaseMonster::MonsterThink (или как её там).


Отправлено Дядя Миша 23-05-2020 в 12:30:

Если монстр шустро бегает, это ж еще не значит, что он так же шустро думает. Я никада в халфовском аи особенно не разбирался, но у меня какое-то смутное знание осталось, что AI вызывается только когда закончится секвенция бега или ходьбы. Т.е. пока монстр идёт - он не думает. Сделал шаг, ну там 5-8 юнитов - огляделся. И конечно когда секвенция играет достаточно быстро, он думает 10 раз в секунду. Или там баг какой-то был, не помню уже. Ну вообщем, если халфовским монстрам поставить 20 фпс, то они активнее ботов становятся. Хрен укроешься.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено thambs 23-05-2020 в 13:25:

Цитата:
Т.е. пока монстр идёт - он не думает. Сделал шаг, ну там 5-8 юнитов - огляделся.

Вспомнилось Half-Life but the npc's explode every time their ai fails:

__________________
http://www.moddb.com/mods/monorail-quest


Временная зона GMT. Текущее время 16:24. Страницы (2): [1] 2 »
Показать все 17 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024