Русское сообщество по скриптингу

Объединяем модели игроков в одну

Полезные материалы и статьи по играм на движках GoldSrc и Source (Half-Life, Counter-Strike 1.6, Half-Life 2, Counter-Strike: Source, Team Fortress 2, Left 4 Dead, Left 4 Dead 2 и т.д.).
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

Объединяем модели игроков в одну

Сообщение Selpsan » 14 авг 2016, 19:03

Предисловие:
В последние время стал задумываться, как можно сократить размер моделей, чтобы в совокупности приходилось меньше скачивать игрокам. Да, это может показаться странным, ведь в наше время скорость позволяет. Но нет, товарищи. В регионах по-прежнему все плохо (по себе знаю) и мне бы не хотелось их обделять (в общем, задумываются те, у кого всё хреново =D ), да и это не основная причина того, чтобы объединять модели. Для меня это ещё и удобно. Некоторые администраторы объединяют модели оружия (w_, p_) в одну, дабы сохранить лимит 512 и не отправлять в прекэш кучу моделей, а всего лишь одну.

Для работы с моделями нам потребуются две программы: StudioMDL (компилятор) и MDL decompiler (декомпилятор), взять их можно Вы должны зарегистрироваться, чтобы видеть ссылки. или во вложениях, в конце статьи.

Часть 1. Объединение с использованием Skin'ов (не совсем по теме объединения, скорее дополнение, но думаю, стоит рассказать)

В качестве примера рассмотрим одну из моделей девушек c разными скинами.

1.png

Как видим, модели абсолютно идентичные, но имеют разную "раскраску", т.е. скин. Так спрашивается, зачем нам две модели (в сумме 3.3 Мбайт), когда можно в одну добавить скин другой модели и сократить общий размер почти в два раза. Берём первую модель "vipcatgirl_ct_N.mdl" и перетаскиваем на наш декомпилятор "mdldec.exe" - процесс пошёл. Видим кучу всего, но нам нужен всего лишь один файл: "vipcatgirl_ct_N.qc", в нём и содержится вся информация о модели.

2.png

Теперь берём вторую модель "vipcatgirl_tt_N.mdl" и с помощью программы "Jed's Half-Life Model Viewer" экспортируем все текстуры, кроме одной: "T_W_D_R01_F01.bmp" - это фэйс, и он не менялся (не разукрашивался, так сказать). Экспортируемые текстуры желательно переименовать, скажем, добавив в конце наименование цвета текстуры, в нашем случае, "Red". После чего скопируем текстуры к нашей прежней "декомпилируемой" модели и в итоге получим следующий общий список текстур:

Код: Выделить всё
T_W_S_Cats_C.bmp
T_W_S_Cats_G.bmp
T_W_S_Cats_L.bmp
T_W_S_Cats_S.bmp
T_W_S_Cats_U.bmp
T_W_S_Cats_C_Red.bmp
T_W_S_Cats_G_Red.bmp
T_W_S_Cats_L_Red.bmp
T_W_S_Cats_S_Red.bmp
T_W_S_Cats_U_Red.bmp

Теперь нам осталось добавить новые текстуры в первую модель, а именно в файл "vipcatgirl_ct_N.qc" следующим образом:

3.png

Теперь нам необходимо скомпилировать модель. Берём "vipcatgirl_ct_N.qc" и перетаскиваем на наш компилятор "studiomdl.exe" - процесс завершён.

4.png
5.png

Итоговый размер модели: 2.07 Мбайт, сократили: 1.23 Мбайт. При использовании на сервере, скажем, 5-10 моделей, можно достаточно сэкономить.

P.S: Существуют одиночные модели, но в тех или иных случаях, необходимо две раскраски для CT и TT дабы, хоть как-то понимать, за какую команду выступает игрок. В этом случае можно выдернуть текстуры модели, раскрасить их и залить обратно в виде дополнительно скина.

Часть 2. Объединение с использованием SubModel

Бывают случаи, когда необходимо объединить две разные модели в одну, в таком случае Skin'ы нам не помогут, и на помощь нам приходит SubModel =D

В качестве примера, возьмем две разные модели:

6.png

Закидываем обе модели в одну директорию и с помощью уже известного декомпилятора прогоняем две модели по очереди.

Затем открываем "police_ct.qc", чтобы посмотреть, какие меши используется в данной модели.

7.png

Теперь открываем "alice.qc" и добавляем туда меш предыдущей модели, объединив их в группу следующим образом:

8.png

И последним делом компилируем "alice.qc" и получаем две модели в одной:

9.png
10.png

Итоговый размер модели: 2.41 Мбайт, сократили: 1.63 Мбайт.

P.S. модели из CSO, поэтому в них содержатся ненужные анимации, которые не используются в CS 1.6. Удалив их, мы ещё больше сможем сократить итоговой размер модели.

Ссылки:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Selpsan
 
Сообщения: 10
Зарегистрирован: 14 мар 2016, 16:29
Благодарил (а): 4 раз.
Поблагодарили: 14 раз.
Языки программирования: Counter-Strike 1.6

Re: Объединяем модели игроков в одну

Сообщение Leonidddd » 24 ноя 2016, 16:43

Спасибо, очень полезная статья.

Желательно дополнить статью ещё об объединении с *T.mdl моделью(или, вернее, ее избавлению).

Т.е. иногда для работы модели требуется ещё дополнительная модель с таким же названием и в конце с добавлением символа T, где символ означает, что там хранятся текстуры для основной модели(если я правильно перевел с alliedmods).

Вы должны зарегистрироваться, чтобы видеть ссылки.:
1. Open up the half-life model viewer and click on Tools -> Configure Tools
2. Fill in both paths to your studiomdl.exe and mdldec.exe files, click ok.
3. Go to Tools -> Decompile Model. Point to the model file and choose the one without the T in the filename named *T.mdl (the asterix is your model name)
4. Go into the folder or location where you kept your model files, and look for a file named *.qc
5. Open up the qc file with notepad and remove the line that says "$externaltextures". Close the file and save.
6. Go back into the half-life model viewer, click on Tools -> Compile Model. Point to the edited qc file, click ok. And your done! Go back into your folder and check for a larger sized *.mdl. Delete the *T.mdl and see if the new mdl file works in either cs or the model viewer.


Вольный перевод с комментариями от меня:
1. Открыть half-life model viewer и выбрать Tools -> Configure Tools
2. Заполнить пути к studiomdl.exe и mdldec.exe files, нажать ок.
3. Выбрать в model viewer Go to Tools -> Decompile Model. Выбрать модель без T
4. Зайти в папку, где вы храните модель и найдите файл с названием вашей модели и форматом .qc, т.е. modelname.qc(я поиск по .qc врубаю, чтобы быстрее найти)
5. Открыть qc файл нотепадом(можете и чем-либо другим, блокнотом, но не проверял лично) и удалите строчку с $externaltextures. Сохраните и выйдите из qc файла.
6. Потом заходите обратно в half-life model viewer, выбираете Tools -> Compile Model, находите и выбираете qc файл, который вы редактировали, нажимаете okey и теперь он сохранится в той же папке(либо заменит существующий, как в моей случае) и спокойно загружаете на сервер без *T.mdl.


По нему все сделал и тестировал 20 минут назад. Сервер не лег и все работает корректно.
Все анимации сохранились.
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2557
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 192 раз.
Поблагодарили: 718 раз.

Re: Объединяем модели игроков в одну

Сообщение Selpsan » 24 ноя 2016, 17:34

Leonidddd, ну, Вы уже написали/дополнили. ) Правда я по другому избавлялся от нее. ) Декомплилировал модель, удалял лишнюю строчку и заново компилировал. )
Аватара пользователя
Selpsan
 
Сообщения: 10
Зарегистрирован: 14 мар 2016, 16:29
Благодарил (а): 4 раз.
Поблагодарили: 14 раз.
Языки программирования: Counter-Strike 1.6

Re: Объединяем модели игроков в одну

Сообщение SISA » 28 ноя 2016, 02:55

Многие не написано :-)

Для объдинения больших моделей нужен патченный компилятор.
Для объединения моделей нужны идентичные или очень схожие кости скелета
А потом лимиты, лимиты и лимиты...

Лимиты на количество бодей в группе. Лимиты на количество бодей в игре, лимиты на количество текстур в модели, количество костей и т.д. Там тонна всяких лимитов на всё подряд, по этому эти объединения выглядят легко только на начальном этапе. Когда модель начнет жиреть, проблемы посыпятся одна за другой :-)
Аватара пользователя
SISA
 
Сообщения: 284
Зарегистрирован: 28 ноя 2009, 01:46
Благодарил (а): 19 раз.
Поблагодарили: 126 раз.
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Team Fortress II
Left 4 Dead

Re: Объединяем модели игроков в одну

Сообщение Selpsan » 11 дек 2016, 18:56

SISA, не сталкивался с такими проблемами, поэтому не в курсе всего. ) Что знал, тем и поделился. ) Есть чем дополнить, буду очень рад, в частности про лимиты. )
Аватара пользователя
Selpsan
 
Сообщения: 10
Зарегистрирован: 14 мар 2016, 16:29
Благодарил (а): 4 раз.
Поблагодарили: 14 раз.
Языки программирования: Counter-Strike 1.6


Вернуться в Статьи по играм на движках GoldSrc/Source

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2