HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Декали и анимация
Декали и анимация
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
Jerry
Новичок

Дата регистрации: Jun 2017
Проживает: unk
Сообщений: 12

Рейтинг



Half-Life Декали и анимация

Как в hl1 происходит наложение декалей?
прошу объяснить просто алгоритм (как трассировать пулю, и найти поверхность на которую надо наложить( в контексте не измененной структуры bsp файла).
Я смотрел исходники xash но толком не чего не понял.

Также интересует как работает анимация в hl2.
К примеру я хочу взять анимацию одного из игроков cs:s, с геометрией проблем нет, а вот вся(наверное вся. мне бы хоть ее вытащить) анимация лежит в файле cs_player_shared.

Так вот. Как я понял анимацию там надо смешивать.
К примеру:


  1. walk_lower(из 9 разных анимаций выбираются четыре, они смешиваются)
  2. Walk_BodyOffset_FAMAS
  3. Walk_Aim_FAMAS
  4. Walk_HandPos_FAMAS


Вот только как?

И как декомпилировать?
К примеру mdldecompiler разбирает в мало связные данные.
Crowbar декомпилит лучше( там хотя бы weightlist есть, с ними можно часть анимаций восстановить ).

Вся проблема( на данный момент ) в delta(subtract).
Crowbar вообще не создает его, в mdldecompiler есть некий файл mdldecompiler_delta.smd(вроде так), но что с ним делать не ясно.
Плюс ко всему файлы smd исполюзующие subtrac Отличаются в Crowbar'е и mdldecompil'е.





Прошу ответить, хочу доделать проект.

Добавлено 10-06-2017 в 18:14:

К примеру я определили плоскость с которой пересекается трассирующая линия.
В том месте определил конечную точку( функция pm_trace.c/PM_RecursiveHullCheck в Xash ).
Рисую на ней декаль.
Декаль на расстоянии находится( как будто это дополнительная невидимая плоскость ).
Перебираются только clipnodes (из бсп карты).
Как определить видимую поверхность?

Добавлено 10-06-2017 в 19:00:

С декалями я вроде разобрался.
Нужно было перебирать nodes а не clipnodes.
И в коде
C++ Source Code:
if ( nodeIndex < 0 ) {
  if ( map.bsp.leafs[ ~nodeIndex ].contents !== CONTENTS_SOLID ) {}
  }

вместо
C++ Source Code:
if ( nodeIndex < 0 ) {
  if ( nodeIndex !== CONTENTS_SOLID ) {}
  }

В остальном же все также как и в PM_RecursiveHullCheck

[ Вложение ]
загружено.jpg

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

Старое сообщение 10-06-2017 16:00
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



Цитата:
Jerry писал:
Как в hl1 происходит наложение декалей?

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

Цитата:
Jerry писал:
Также как работает анимация в hl2.

Да точно так же как и в hl2 + свежие навороты, типа инверсной кинематики, дельты.

Цитата:
Jerry писал:
Вся проблема( на данный момент ) в delta(subtract).

Это нерешаемая проблема на уровне декомпиляции. Дельта - это когда из какой-то анимации вычли базовую. Упоминание о базовой анимации в модель не попадает. То есть в готовой модели у нас есть дельта-анимация, из которой вычли какую-то. Какая это анимация - никто не знает. Ну можно предположить, что idle, но это далеко не всегда верно. Может и BindPose. Чтобы лучше понять суть - допустим у нас есть число 42, которое получено в результате вычитания одного числа из другого.
Но мы никак не сможем узнать каким было второе число, поскольку не знаем и первого. Уравнение с двумя неизвестными имеют бесконечное множество решений, которые с точки зрения математики будут верными.

Цитата:
Jerry писал:
И как декомпилировать?

ДА НЕ КАК

Добавлено 10-06-2017 в 19:06:

Цитата:
Jerry писал:
Нужно было перебирать nodes а не clipnodes.

Nodes это точечный хулл, он копируется в clipnodes[0].

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 10-06-2017 16:06
-
Jerry
Новичок

Дата регистрации: Jun 2017
Проживает: unk
Сообщений: 12

Рейтинг



Дядя Миша Спасибо.

Цитата:
Дядя Миша писал:
Это нерешаемая проблема на уровне декомпиляции. Дельта - это когда из какой-то анимации вычли базовую. Упоминание о базовой анимации в модель не попадает. То есть в готовой модели у нас есть дельта-анимация, из которой вычли какую-то. Какая это анимация - никто не знает. Ну можно предположить, что idle, но это далеко не всегда верно. Может и BindPose. Чтобы лучше понять суть - допустим у нас есть число 42, которое получено в результате вычитания одного числа из другого.
Но мы никак не сможем узнать каким было второе число, поскольку не знаем и первого. Уравнение с двумя неизвестными имеют бесконечное множество решений, которые с точки зрения математики будут верными.

Думаю вы не полностью поняли что я хочу.
Мне не нужно иметь оригинальный смд.
Можно уже и с вычтенной анимацией.
Я хотел узнать как его использовать.( как использовать от mdldecompilera или от crowbar).
На данный момент я открываю в моделвьювере модель, ставлю анимацию с delta subtrac( например Walk_Aim_FAMAS ) и вижу совсем другое, нежели в своем вьювере.

Добавлено 11-06-2017 в 18:08:

Притом что остальные(walk_lower, Jump , Run_lower и т.д., а также бленд из ( walk_lower + Walk_BodyOffset_FAMAS )) воспроизводятся нормально

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

Старое сообщение 11-06-2017 15:08
- За что?
tolerance
Житель форума
Девойс

Дата регистрации: Feb 2013
Проживает: (void)
Сообщений: 739
Возраст: 32

Рейтинг



Цитата:
Дядя Миша писал:
Находится поверхность, создаётся полигон

А gl_polyoffset? Ну, типа когда полигон декали "оттодвинут" от полигона мапы.

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

Старое сообщение 11-06-2017 15:42
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



Цитата:
Jerry писал:
Я хотел узнать как его использовать.( как использовать от mdldecompilera или от crowbar).

Попробуй модификатор delta.

tolerance это просто чтобы обойти погрешность з-буффера.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 12-06-2017 13:29
-
Jerry
Новичок

Дата регистрации: Jun 2017
Проживает: unk
Сообщений: 12

Рейтинг



Цитата:
Дядя Миша писал:
Попробуй модификатор delta.

Опять вы меня не поняли.
Я пишу свой вьювер(куда там delta'у ставить? )
Мне нужно узнать алгоритм смешивания этой (вычтенной , или из нее надо вычесть текущую и т.д. ) анимации с другими.
Т.к. даже просто анимация без смешивания не соответствует анимации в hlmv я и думаю что дело в substrac( что декомпиляторы не всю информацию достают , или формат информации таков, что не может быть сохранен в smd(даже с модификациями из qc(вроде weightlist ) ) ).

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

Старое сообщение 13-06-2017 06:55
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



Цитата:
Jerry писал:
Я пишу свой вьювер(куда там delta'у ставить?

Эпидемия прямо на вьюверы. Я вот тоже свой написал. И разработал новый формат моделей, совместимый с голдсорсом, смотреть тут. Так что по счастливому стечению обстоятельств, я про эту дельту как раз таки в курсе.
Цитата:
Jerry писал:
Мне нужно узнать алгоритм смешивания этой (вычтенной , или из нее надо вычесть текущую и т.д. ) анимации с другими.

в hl2_sdk есть файлег public\bone_setup.cpp и там наглядно, как смешивать дельта-анимации с обычными. Гуглить по слову STUDIO_DELTA и STUDIO_ANIM_DELTA. Если в крации - обычная анимация полностью оверрайдит дефолтные значения костей, а дельта прибавляется к ним.
Но тут еще один ньюанс - ни кровбар ни кэннонфодер нормально эту дельту не извлекают из модельки. То есть декомпил-компил портит модель однозначно.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 13-06-2017 13:55
-
Jerry
Новичок

Дата регистрации: Jun 2017
Проживает: unk
Сообщений: 12

Рейтинг



Цитата:
Дядя Миша писал:
в hl2_sdk есть файлег public\bone_setup.cpp и там наглядно, как смешивать дельта-анимации с обычными. Гуглить по слову STUDIO_DELTA и STUDIO_ANIM_DELTA. Если в крации - обычная анимация полностью оверрайдит дефолтные значения костей, а дельта прибавляется к ним.

Спасибо(пойду читать, думаю то что надо).

Цитата:
Дядя Миша писал:
Но тут еще один ньюанс - ни кровбар ни кэннонфодер нормально эту дельту не извлекают из модельки. То есть декомпил-компил портит модель однозначно.

Иными словами не существует декомпилятора который бы восстанавливал эту дельту и мне надо самому парсить mdl так?

Добавлено 13-06-2017 в 21:32:

Цитата:
Дядя Миша писал:
Эпидемия прямо на вьюверы. Я вот тоже свой написал. И разработал новый формат моделей, совместимый с голдсорсом, смотреть тут. Так что по счастливому стечению обстоятельств, я про эту дельту как раз таки в курсе.


Я пишу мини игру(типа cs, думаю взять карту из cs1.6, а модели игроков/оружия из cs:s) для браузера.

Отредактировано Jerry 13-06-2017 в 18:43

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

Старое сообщение 13-06-2017 18:32
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



Цитата:
Jerry писал:
Иными словами не существует декомпилятора который бы восстанавливал эту дельту и мне надо самому парсить mdl так?

Почему всем так хочется парсить smd вместо mdl?

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 13-06-2017 19:00
-
KiQ
Житель форума

Дата регистрации: Aug 2010
Проживает: Смоленск, Москва
Сообщений: 2087

Рейтинг



Дядя Миша может потому-что smd - это текстовый формат, удобный для парсинга, а mdl по сути - дамп структуры, удобный для быстрого проталкивания в оперативку?

__________________
-Brain is dead-

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

Старое сообщение 13-06-2017 19:29
- За что?
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4133

Рейтинг



Цитата:
KiQ писал:
mdl по сути - дамп структуры

Ну вот, его даже парсить не надо.

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

Старое сообщение 13-06-2017 19:46
- За что?
Jerry
Новичок

Дата регистрации: Jun 2017
Проживает: unk
Сообщений: 12

Рейтинг



Цитата:
Дядя Миша писал:
Почему всем так хочется парсить smd вместо mdl?

1.) Описание smd я знаю.
2.) Парсер уже сделал.
3.) Я не хочу завязывать игру на конкретном движке(модели из css я беру потому как точно хочу знать что такой уровень игра держит, а так модели можно и из cs1.6 взять и т.д.).

В smd можно из чего угодно портировать( я про разнообразные плагины для 3d редакторов ).

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

Старое сообщение 13-06-2017 19:48
- За что?
KiQ
Житель форума

Дата регистрации: Aug 2010
Проживает: Смоленск, Москва
Сообщений: 2087

Рейтинг



nemyax ну как бы есть языки без memcpy, например

__________________
-Brain is dead-

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

Старое сообщение 14-06-2017 13:53
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



KiQ мемкпю это часть CRT, а не языка.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 14-06-2017 14:15
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4133

Рейтинг



KiQ
Уж структ по переменным распихать можно каким угодно языком.

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

Старое сообщение 14-06-2017 14:32
- За что?
Тема: (Опционально)
Ваш ответ:



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


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

Временная зона GMT. Текущее время 23:26. Новая тема    Ответить
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Декали и анимация
Декали и анимация
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

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

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

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

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