HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > S2GConverter: перенос моделей с Source на Goldsource
Конвертирует (почти) любые модели с Source на GoldSource
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
Glaster
Новичок

Дата регистрации: Mar 2022
Проживает: Иркутск
Сообщений: 3
Возраст: 21

Рейтинг



Half-Life S2GConverter: перенос моделей с Source на Goldsource

Что за утилита?

Автоматический конвертер моделей с движка Source на GoldSource. Поддерживает модели с большим количеством полигонов (на тестах максимум был 80K полигонов, потом у меня закончились высокополигональные модели). Кроме того, конвертер переносит и все анимации.

На данный момент не поддерживаются следующие типы моделей:
1) Модели с анимациями больше 64Кб
2) Модели с числом костей больше 128


Примеры результатов:




Как использовать?

1) У вас должен быть установлен Python версии 3.*
2) Установите пакет Pillow, введя в командной строке следующее:

code:
pip install Pillow


3) Создайте новую папку, перенесите в неё все файлы модели, а именно: .mdl, .vtf, .vmt, .vtx, .vvd
4) Перейдите в папку со скаченной утилитой, откройте командную строку и введите:

code:
python S2GConverter.py -i путь\к\модели.mdl


5) Найдите результат в папке с исходной моделью. К названию модели будет добавлен постфикс _goldsource. Пример названия: v_knife_goldsource.mdl
6) Profit!


Благодарности:

Дядя Миша - автор используемого studiomdl.exe
Nem - VTFLib


ССЫЛКА: https://github.com/mrglaster/S2GConverter

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

Старое сообщение 20-03-2022 10:09
- За что?
Aynekko
Маппер

Дата регистрации: Jun 2016
Проживает: г. Подольск, Россия
Сообщений: 1002
Возраст: 31

Рейтинг



Спасибо огромное. Работает. Очень пригодится.

__________________
Мой мод на Xash

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

Старое сообщение 20-03-2022 12:15
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



Такой вопрос: переносит ли эта штука сорс-специфичные возможности, которые я добавил в своём расширенном формате?

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

Потому что корректно сдекомпилировать сорсовские модели как правило невозможно, особенно если там есть дельта-анимации.
А вот переконвертить без потери данных - реально.

Добавлено 20-03-2022 в 16:51:

Цитата:
Glaster писал:
1) Модели с анимациями больше 64Кб
2) Модели с числом костей больше 128

Это не данный момент, увы. Это в принципе. Ограничение голдсорсовского формата. Можно снять, но сломается бинарная совместимость.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 20-03-2022 13:51
-
Glaster
Новичок

Дата регистрации: Mar 2022
Проживает: Иркутск
Сообщений: 3
Возраст: 21

Рейтинг



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

По поводу "на данный момент" есть у меня пара мыслей на решение сей проблемы. Для П1 можно пытаться как-то пытаться группировать кости в одну (результат будет сомнительный), так же можно пытаться как-то определять кости, используемые (условно) для контроля поведения волос (видел такое в модели Орнштейна из Dark Souls аддона к GMod'у) или нечто подобное и выпиливать их.

Для П2 можно попробовать безбожно вырезать фреймы. Для Idle анимаций такое может и прокатывает (сам при конвертировании моделей Doom Eternal из GMod'a так делал), однако если речь идёт о каких-то сложных анимациях - приведёт черт знает к чему.

Отредактировано Glaster 20-03-2022 в 15:35

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

Старое сообщение 20-03-2022 15:25
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



А мне казалось, что в сорсе и так лимит на 128 костей

C++ Source Code:
1
struct mstudioboneweight_t
2
{
3
  DECLARE_BYTESWAP_DATADESC();
4
  float	weight[MAX_NUM_BONES_PER_VERT];
5
  char	bone[MAX_NUM_BONES_PER_VERT];
6
  byte	numbones;
7
};

Правда это для Source 2007.

Добавлено 20-03-2022 в 20:14:

С анимациями, если интересно, расскажу в чём там замута.
Потому что в голдсорсе и в сорсе оффсеты 16-битные, но у первого лимит на 64 килобайта, а у второго - практически без ограничений.
Смысл вот в чём.
В голдсорсе хидер анимации хранит оффсеты для всех блендов, всех кадров и всех степеней свободы. Т.е. сделано по-простому. Все бленды, все кадры и все степени свободы должны влезть в лимит 64 килобайта. Обычно оно влезает, но когда много костей, много блендов, то не вариант.

В сорсе умнее сделано. Во первых, поскольку там есть хидер самой анимации (в голдсорсе нет, там только хидер секвенции), то можно сохранять их независимо. Анимация от секвенции отличается тем, что одна секвенция может содержать несколько анимаций. Например для блендинга их кол-во может колебаться от 2 до 9 или даже больше, ну понятно.
Так вот, первая оптимизация в Сорсе - это то, что анимации всегда используют оффсеты только для своих кадров. Соседняя анимация для этой же секвенции будет использовать другие локальные оффсеты. Таким образом убирается зависимость на лимит при использовании большого кол-ва блендов. Но это не всё.
Второй немаловажный момент - между оффсетами хранятся 6DOF только для одной кости! Все кадры анимации, но только для одной кости.
В голдсорсе же между оффсетами надо впихнуть все кадры для всех костей для всех степеней свободы и для всех блендингов.
Для перехода к следующей кости используется еще один локальный оффсет, к сожалению это уже требует изменения структуры mstudioanim_t, поэтому я и говорю, что бинарная совместимость.
В теории, исходя из вышеописанного, можно попробовать немного изменить структуру репрезентации анимдаты и отодвинуть лимит примерно вдвое. Но я не готов сказать насколько это реально сделать с сохранением бинарной совместимости, не помню уже просто.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 20-03-2022 17:14
-
Crystallize
Житель форума

Дата регистрации: Jul 2007
Проживает: Новосибирск
Сообщений: 4415
Возраст: 34

Рейтинг



Запускаю на семерке, питон 3.8

code:
C:\Users\HOME>python c:\users\home\downloads\s2gconverter\s2gconverter.py -i c:\ users\home\downloads\s2gconverter\sonic\sonic.mdl Analyzing .vmt files Detected material: _Tail Detected material: chr_sonic_cloth_dif Detected material: chr_sonic_scarf_dif Detected material: body Detected material: _Tail Detected material: chr_tails_eye_white Detected material: chr_tails_eye_white Detected material: _Tail Detected material: _Tail Detected material: _Tail Detected material: _Tail Detected material: _Tail Detected material: _Tail Detected material: chr_tails_eye_white Detected material: chr_tails_eye_white Detected material: _Tail Detected material: _Tail Detected material: _Tail Detected material: _Tail Detected material: _Tail Detected material: _Tail VTX Detected: True VTF Detected: True VMT Detected: True VVD Detected: True Traceback (most recent call last): File "c:\users\home\downloads\s2gconverter\s2gconverter.py", line 374, in <mod ule> main() File "c:\users\home\downloads\s2gconverter\s2gconverter.py", line 371, in main convert_model(input_data) File "c:\users\home\downloads\s2gconverter\s2gconverter.py", line 241, in conv ert_model convert_to_bmp_folder(os.path.dirname(path_to_model)) File "c:\users\home\downloads\s2gconverter\s2gconverter.py", line 46, in conve rt_to_bmp_folder subprocess.call(args) File "C:\Users\HOME\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 340, in call with Popen(*popenargs, **kwargs) as p: File "C:\Users\HOME\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 858, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, File "C:\Users\HOME\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 1311, in _execute_child hp, ht, pid, tid = _winapi.CreateProcess(executable, args, FileNotFoundError: [WinError 2] Не удается найти указанный файл

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

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

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

Рейтинг



У Питона вообще чудесный вывод ошибок, он меня ещё в кварке пугал.
Столько мусора выдаёт не поделу.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 17-10-2023 18:52
-
Crystallize
Житель форума

Дата регистрации: Jul 2007
Проживает: Новосибирск
Сообщений: 4415
Возраст: 34

Рейтинг



Ему нужны абсолютные пути чтобы запустить эксешники.

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

Старое сообщение 18-10-2023 14:56
- За что?
Crystallize
Житель форума

Дата регистрации: Jul 2007
Проживает: Новосибирск
Сообщений: 4415
Возраст: 34

Рейтинг



Пересел с 7 на 10ку.
Студиомодел надо оба раза вызывать по абсолютному пути(иначе он записывает путь к директории юзера с двойными бакслешами и ищет там студиомодел):
shutil.copy("e:\s2gconverter\studiomdl.exe ", os.getcwd() )
arguments = "e:\s2gconverter\studiomdl.exe " + qc_file

Тогда он доходит до упаковки мешей и падает с out of memory, командная строка потребляет 110 мб.

code:
Part 59 of sumbodel 0 was successful written ==================================================================================================== Writing part: 1 Part 1 of sumbodel 0 was successful written Writing part: 2 Part 2 of sumbodel 0 was successful written WARNING! SMD data parsing error! It can cause some problems! Excepted: e:\s2gconverter\sonic\mdldecompiler_delta.smd Writing part: 1 Part 1 of sumbodel 0 was successful written WARNING! SMD data parsing error! It can cause some problems! Excepted: e:\s2gconverter\sonic\sonic_physics.smd Writing part: 1 Part 1 of sumbodel 0 was successful written P2:Savior Studio Model Compiler XashXT Group 2018(c) grabbing: sonic_decompiled_part_nr_1_submodel_0.smd [mesh] grabbing: sonic_decompiled_part_nr_2_submodel_0.smd [mesh] grabbing: sonic_decompiled_part_nr_3_submodel_0.smd [mesh] grabbing: sonic_decompiled_part_nr_4_submodel_0.smd [mesh] grabbing: sonic_decompiled_part_nr_5_submodel_0.smd [mesh] grabbing: sonic_decompiled_part_nr_6_submodel_0.smd [mesh] grabbing: sonic_decompiled_part_nr_7_submodel_0.smd [mesh] (тут все примерно одинаково) grabbing: sonic_lod3_decompiled_part_nr_4_submodel_0.smd [mesh] grabbing: scarf_lod3_decompiled_part_nr_1_submodel_0.smd [mesh] grabbing: hand_r_lod3_decompiled_part_nr_1_submodel_0.smd [mesh] grabbing: hand_l_lod3_decompiled_part_nr_1_submodel_0.smd [mesh] grabbing: shoes_r_lod3_decompiled_part_nr_1_submodel_0.smd [mesh] grabbing: shoes_r_lod3_decompiled_part_nr_2_submodel_0.smd [mesh] grabbing: shoes_l_lod3_decompiled_part_nr_1_submodel_0.smd [mesh] grabbing: shoes_l_lod3_decompiled_part_nr_2_submodel_0.smd [mesh] grabbing: sonic_lod4_decompiled_part_nr_1_submodel_0.smd [mesh] grabbing: sonic_lod4_decompiled_part_nr_2_submodel_0.smd [mesh] grabbing: sonic_lod4_decompiled_part_nr_3_submodel_0.smd [mesh] grabbing: scarf_lod4_decompiled_part_nr_1_submodel_0.smd [mesh] grabbing: hand_r_lod4_decompiled_part_nr_1_submodel_0.smd [mesh] grabbing: hand_l_lod4_decompiled_part_nr_1_submodel_0.smd [mesh] grabbing: shoes_r_lod4_decompiled_part_nr_1_submodel_0.smd [mesh] Fatal Error: out of memory!

Отредактировано Crystallize 26-10-2023 в 09:31

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

Старое сообщение 26-10-2023 09:27
- За что?
Тема: (Опционально)
Ваш ответ:



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


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

Временная зона GMT. Текущее время 17:27. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > S2GConverter: перенос моделей с Source на Goldsource
Конвертирует (почти) любые модели с Source на GoldSource
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

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

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

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

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