HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > [Xash3D/XashXT] смешивание анимаций.
Blending.
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
ILZM
LAW

Дата регистрации: Oct 2011
Проживает: Mega City One
Сообщений: 301

Рейтинг



[Xash3D/XashXT] смешивание анимаций.

Добрый день!
Ответьте на и объясните, пожалуйста, некоторые вопросы:
1. Почему иногда код в движке и в моде повторяется? Например, StudioSetupBones. Код как-будто делает тоже самое.
2. Есть такой код:

C++ Source Code:
1
if( pseqdesc->numblends > 1 )
2
{
3
  float	s;
4
 
5
  panim += m_pStudioHeader->numbones;
6
  StudioCalcRotations( pos2, q2, pseqdesc, panim, f );
7
 
8
  float dadt = StudioEstimateInterpolant();
9
  s = (m_pCurrentEntity->curstate.blending[0] * dadt + m_pCurrentEntity->latched.prevblending[0] * (1.0f - dadt)) / 255.0f;
10
 
11
  StudioSlerpBones( q, pos, q2, pos2, s ); // смешивание одной и той же анимации на одном и том же кадре с интерполянтом s?
12
 
13
  if( pseqdesc->numblends == 4 )
14
  {
15
    panim += m_pStudioHeader->numbones; // зачем всё время прибавлять?
16
    StudioCalcRotations( pos3, q3, pseqdesc, panim, f ); // а эт зачем??
17
 
18
    panim += m_pStudioHeader->numbones;
19
    StudioCalcRotations( pos4, q4, pseqdesc, panim, f );
20
 
21
    s = (m_pCurrentEntity->curstate.blending[0] * dadt + m_pCurrentEntity->latched.prevblending[0] * (1.0f - dadt)) / 255.0f;
22
    StudioSlerpBones( q3, pos3, q4, pos4, s );
23
 
24
    s = (m_pCurrentEntity->curstate.blending[1] * dadt + m_pCurrentEntity->latched.prevblending[1] * (1.0f - dadt)) / 255.0f;
25
    StudioSlerpBones( q, pos, q3, pos3, s );
26
  }
27
}

Чё так все сложно? Ничего не понятно...
3.
C++ Source Code:
1
if( m_fDoInterp && m_pCurrentEntity->latched.sequencetime && ( m_pCurrentEntity->latched.sequencetime + 0.2f > m_clTime ) && ( m_pCurrentEntity->latched.prevsequence < m_pStudioHeader->numseq ))
2
{
3
  static Vector	pos1b[MAXSTUDIOBONES];
4
  static Vector4D	q1b[MAXSTUDIOBONES];
5
  float		s;
6
 
7
  // blend from last sequence
8
  // g-cont. blending between sequences should be done in 0.1 secs. See Xash3D cl_frame.c code for details
9
  pseqdesc = (mstudioseqdesc_t *)((byte *)m_pStudioHeader + m_pStudioHeader->seqindex) + m_pCurrentEntity->latched.prevsequence;
10
  panim = StudioGetAnim( m_pRenderModel, pseqdesc );
11
 
12
  // clip prevframe
13
  StudioCalcRotations( pos1b, q1b, pseqdesc, panim, m_pCurrentEntity->latched.prevframe );
14
 
15
  if( pseqdesc->numblends > 1 )
16
  {
17
    panim += m_pStudioHeader->numbones;
18
    StudioCalcRotations( pos2, q2, pseqdesc, panim, m_pCurrentEntity->latched.prevframe );
19
 
20
    s = (m_pCurrentEntity->latched.prevseqblending[0]) / 255.0f;
21
    StudioSlerpBones( q1b, pos1b, q2, pos2, s );
22
    ....

Цитата:
g-cont. blending between sequences should be done in 0.1 secs. See Xash3D cl_frame.c code for details
Не нашёл...

А всё это к сводится к одному вопросу: как сделать смешивание анимасый ног?

Сообщить модератору | | IP: Записан
Сообщение: 136479

Старое сообщение 18-04-2014 06:52
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
ILZM писал:
Почему иногда код в движке и в моде повторяется?

Потому что мод может не экспортировать студийный интерфейс.
Цитата:
ILZM писал:
смешивание одной и той же анимации на одном и том же кадре с интерполянтом s?

Ты не видишь, что там разные переменные?
Цитата:
ILZM писал:
// зачем всё время прибавлять?

Про арифметику указателей читал?

__________________

Сообщить модератору | | IP: Записан
Сообщение: 136480

Старое сообщение 18-04-2014 07:12
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
ILZM писал:
Почему иногда код в движке и в моде повторяется? Например, StudioSetupBones. Код как-будто делает тоже самое.

Ну это ты Вальву спроси, почему они допускают существование модов с отсутствующим экспортом HUD_GetStudioModelInterface. например Opposing Force. Иными словами, если отрезать клиентский вариант, то движок включит свой, точно такой же. Просто это редко случается.
Цитата:
ILZM писал:
// смешивание одной и той же анимации на одном и том же кадре с интерполянтом s?

Ну вообще-то там несколько анимаций в одной. Для того же барника, который целится, там анимация "пистолет поднят" и "пистолет опущен".
При смешивании в равных пропорциях получается "пистолет по центру".
Цитата:
ILZM писал:
// зачем всё время прибавлять?

ну очевидно чтобы получить доступ к следующей позе. Этож массив
[положение костей]
[положение костей]
[положение костей]
вот мы по нему двигаемся.
Цитата:
ILZM писал:
// а эт зачем??

вот как раз, чтобы посчитать из относительных смещений и углов эйлера - кватернионы и реальную позицию, а потом переконвертить их в матрицы костей.
Цитата:
ILZM писал:
Не нашёл...

CL_UpdateStudioVars
C++ Source Code:
1
// sequence has changed, hold the previous sequence info
2
if( newstate->sequence != ent->curstate.sequence )
3
{
4
  if( ent->index > 0 && ent->index <= cl.maxclients )
5
    ent->latched.sequencetime = ent->curstate.animtime + 0.01f;
6
  else ent->latched.sequencetime = ent->curstate.animtime + 0.1f;
7
 
8
  // save current blends to right lerping from last sequence
9
  for( i = 0; i < 2; i++ )
10
    ent->latched.prevseqblending[i] = ent->curstate.blending[i];
11
  ent->latched.prevsequence = ent->curstate.sequence; // save old sequence
12
}

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | | IP: Записан
Сообщение: 136483

Старое сообщение 18-04-2014 08:11
-
ILZM
LAW

Дата регистрации: Oct 2011
Проживает: Mega City One
Сообщений: 301

Рейтинг



Теперь более менее всё понятно.

C++ Source Code:
1
if( pseqdesc->numblends > 1 )
2
{
3
  float    s;
4
 
5
  panim += m_pStudioHeader->numbones; // это итерация на следующую анимацию смешивания
6
  StudioCalcRotations( pos2, q2, pseqdesc, panim, f );
7
 
8
  float dadt = StudioEstimateInterpolant();
9
  s = (m_pCurrentEntity->curstate.blending[0] * dadt + m_pCurrentEntity->latched.prevblending[0] * (1.0f - dadt)) / 255.0f;
10
 
11
  StudioSlerpBones( q, pos, q2, pos2, s );
12
  ...


А зачем эти строки, если они не используются?
C++ Source Code:
1
if( pseqdesc->numblends == 4 )
2
{
3
  panim += m_pStudioHeader->numbones;
4
  StudioCalcRotations( pos3, q3, pseqdesc, panim, f );
5
 
6
  panim += m_pStudioHeader->numbones;
7
  StudioCalcRotations( pos4, q4, pseqdesc, panim, f );
8
 
9
  s = (m_pCurrentEntity->curstate.blending[0] * dadt + m_pCurrentEntity->latched.prevblending[0] * (1.0f - dadt)) / 255.0f;
10
  StudioSlerpBones( q3, pos3, q4, pos4, s );
11
 
12
  s = (m_pCurrentEntity->curstate.blending[1] * dadt + m_pCurrentEntity->latched.prevblending[1] * (1.0f - dadt)) / 255.0f;
13
  StudioSlerpBones( q, pos, q3, pos3, s );
14
}

Ведь в смешивании учавствует 2 анимации, а не 4.

--------------

В ̶̶с̶в̶и̶т̶к̶а̶х̶ ̶9̶ ̶п̶у̶т̶е̶й̶ ̶н̶и̶н̶д̶з̶я̶ исходниках 9-путёвого смешивания есть функция LookupAnimation ( iSeq, iBlend ), т. е. там можно указывать под-анимацию. Это же сделано при помощи
C++ Source Code:
panim += m_pStudioHeader->numbones;
? А то самой функции не нашёл.

Сообщить модератору | | IP: Записан
Сообщение: 136797

Старое сообщение 24-04-2014 06:17
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
ILZM писал:
Ведь в смешивании учавствует 2 анимации, а не 4.

это от моделлёра зависит. Если ты в QC укажешь 4 анимации, то будет четыре.

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | | IP: Записан
Сообщение: 136799

Старое сообщение 24-04-2014 06:20
-
ILZM
LAW

Дата регистрации: Oct 2011
Проживает: Mega City One
Сообщений: 301

Рейтинг



Дядя Миша, лол. А что будет если для игрока сделать 4 путёвый блендинг да и ищо оставить контроллеры

Сообщить модератору | | IP: Записан
Сообщение: 136803

Старое сообщение 24-04-2014 06:57
- За что?
Ghoul [BB]
МРАЗЬ ОПАСНАЯ

Дата регистрации: Jan 2006
Проживает: ...и прожигает...
Сообщений: 2567

Рейтинг



Зачем вообще тебе этот блендинг сдался, вот вопрос.

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo

Сообщить модератору | | IP: Записан
Сообщение: 136804

Старое сообщение 24-04-2014 07:30
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Цитата:
ILZM писал:
А что будет если для игрока сделать 4 путёвый блендинг да и ищо оставить контроллеры

Наклоны и повороты модели игрока с помощью контроллеров выглядят вырвиглазно, не зря вальва в сорсе везде, где можно, юзает 9-ти путёвый блендинг, не зря в продвинутых мультиплеерных модах под ГС он юзается.
Контроллеры хорошо годятся для рта и поворотов головы, на моделях турелей, техники и всякого такого, где можно вертеть отдельную бодигруппу. Если бонеконроллерами вертеть, к примеру, кости позвоночника, это выглядит ну очень страшно

Вообще, рендерер студиомоделек в халфе - очень классная вещь, он много чего позволяет с ними делать. Особенно приятно, что в своё время на клиенте была сделана копипаста из движка, это открывает огромный простор для модмейкеров. Тут можно и модельки к друг другу аттачить, и что-то другое к моделькам, и эффекты всякие без доступа к движковому рендереру делать, вроде светящихся в темноте полигонов на оружии. Даже фейковые зеркала а-ля Дюк Нукем делать можно (см. спирит).
Большой минус - нет нормального примера серверной настройки костей, хотя интерфейс для этого существует и заюзан всё в тех же мультиплеерных модах с 9-ти путёвым блендингом моделек игрока. Я много времени потратил на попытки написания ответной части на сервере. И до появления кое-каких исходников КС 1.6 у меня так ничего и не получалось. Я до сих пор толком не разобрался с этим механизмом, но подвижки есть, серверная часть почти соответствует клиентской. Если бы я не был гуманитарием...
Цитата:
Ghoul [BB] писал:
Зачем вообще тебе этот блендинг сдался, вот вопрос.

Конечно, можно реализовать все эти наклоны и повороты при прицеливании бонеконтроллерами, но это будет вырвиглазно шопипец, особенно на стандартных модельках халфы. К тому же, есть ограничение на количество этих самых контроллеров.
А вообще, если уж на то пошло, то для полного счастья, нам инверсной кинематики недостаёт. Вспомните Академию Джедаев, как там ноги могут на разной высоте стоять, если одна, например, на камне, а другая просто на земле.
Сейчас Дядя Миша меня упрекнёт наверное, но хотелось бы такое в Ксаше Лишь бы кто-нибудь эти все фичи использовал.

Цитата:
ILZM писал:
Ведь в смешивании учавствует 2 анимации, а не 4.

Тоже удивился, когда первый раз увидел. Возможно, сначала вальва планировала юзать блендинг из четырёх анимаций: 2 по вертикали и 2 по горизонтали. Но потом почему-то они сделали горизонталь бонеконтроллерами. Механизм довольно прост: определяем углы поворота энтити, а потом, соответственно этим углам, выбираем нужный бленд. То есть, блендов может быть хоть 20 штук, по одному на каждую конкретную позицию (учитывая ограничения компилятора на кол-во анимаций). Но достаточно девяти: верх-лево, верх-право, середина-лево, середина-право, низ-лево, низ-право, середина-верх, середина-центр, середина-низ. Промежуточные позиции создаются засчёт смешивания девяти базовых в определённых пропорциях.

Отредактировано Ku2zoff 24-04-2014 в 08:15

Сообщить модератору | | IP: Записан
Сообщение: 136806

Старое сообщение 24-04-2014 08:09
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
Ku2zoff писал:
А вообще, если уж на то пошло, то для полного счастья, нам инверсной кинематики недостаёт

Для реализации инверсной кинематики нам надо хранить матрицу костей отдельно, от её угла и позиции, иначе мы не сможем ничего инвертировать.
В mstudiobone_t её не запишешь, совместимость поломается. Видимо придется заводить еще одну структуру костей (копию) и использовать её, это единственный выход. Но вообще я много над этим размышляю.
Из хл2-шных моделек нам требуется не так уж и много:
-процедурная симуляция отдельных костей (jiggle bones)
-инверсная кинематика
-аттач вертекса к нескольким костям
вот вроде бы и всё. Больше я в хл2-шных модельках ничего интересного не обнаружил. Если, вы знаете что-то еще - напишите сюда.

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | | IP: Записан
Сообщение: 136814

Старое сообщение 24-04-2014 11:12
-
ILZM
LAW

Дата регистрации: Oct 2011
Проживает: Mega City One
Сообщений: 301

Рейтинг



А как это нога на выступе просчитывается?
И ещё кто-нибудь знает или видел код или пример продвинутой ходьбы, ну там влево и вправо имеют разные анимации?

Сообщить модератору | | IP: Записан
Сообщение: 136825

Старое сообщение 24-04-2014 15:19
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



http://ru.wikipedia.org/wiki/Инверсная_кинематика

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | | IP: Записан
Сообщение: 136830

Старое сообщение 24-04-2014 15:42
-
ILZM
LAW

Дата регистрации: Oct 2011
Проживает: Mega City One
Сообщений: 301

Рейтинг



Дядя Миша, складывание анимаций, например. Вздрагивание от боли реализовано складыванием анимаций. http://www.youtube.com/watch?v=YJHuyjrB0FU, ну и сразу косяк с ними http://www.youtube.com/watch?v=rUOvaSvpV94.

Ku2zoff, http://www.hlfx.ru/forum/showthread...=&threadid=4374 классный тутор!) Но меня смущает это

C++ Source Code:
1
extern "C" _declspec(dllexport) int Server_GetBlendingInterface( int version, sv_blending_interface_t **pinterface, server_studio_api_t *pstudio, float ***rotationmatrix, float ****bonetransform )
2
{
3
  if (version != SV_BLENDING_INTERFACE_VERSION)
4
    return 0;
5
 
6
  *pinterface = &sv_blending;
7
 
8
  IEngineStudio.Mem_Calloc = pstudio->Mem_Calloc;
9
  IEngineStudio.Cache_Check = pstudio->Cache_Check;
10
  IEngineStudio.LoadCacheFile = pstudio->LoadCacheFile;
11
  IEngineStudio.Mod_Extradata = pstudio->Mod_Extradata;
12
 
13
  g_pRotationMatrix = (float (*)[3][4])rotationmatrix;
14
  g_pBoneTransform = (float (*)[MAXSTUDIOBONES][3][4])bonetransform;
15
 
16
  ALERT(at_console, "Server_GetBlendingInterface exported.\n");
17
 
18
  return 1;
19
}


Как вынести функцию в Xash'e? Просто же?

Сообщить модератору | | IP: Записан
Сообщение: 136837

Старое сообщение 24-04-2014 19:01
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 10:05. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > [Xash3D/XashXT] смешивание анимаций.
Blending.
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

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