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

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

Полезные материалы и статьи по играм на движках 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(компилятор) и mdldec(декомпилятор), взять их можно тут: Вы должны зарегистрироваться, чтобы видеть ссылки.

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

В качестве примера рассмотрим одну из моделей девушек. Возьмем тут: Вы должны зарегистрироваться, чтобы видеть ссылки.


Как видим, модели абсолютно идентичные, но имеют разную "раскраску" т.е. скин. Так спрашивается, зачем нам две модели (в сумме 3.3 мб.), когда можно в одну добавить скин другой модели и сократить общий размер почти в два раза.

Берем первую модель "vipcatgirl_ct_N.mdl" и перетаскиваем на наш декомпилятор "mdldec.exe" - процесс пошел. Видим куча всего, но нам нужен всего лишь один файл: "vipcatgirl_ct_N.qc" в нем и содержится вся информация о модели.


Теперь берем вторую модель "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" следующим образом:


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



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

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

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


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


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


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



Итоговый размер модели: 2.41 мб, сократили: 1.63 мб.
P.s. модели из CSO поэтому в ней содержатся ненужные анимации, которые не используются в CS 1.6 Удалив их, мы еще больше сможем сократить итоговой размер модели.
Аватара пользователя
Selpsan
 
Сообщения: 10
Зарегистрирован: 14 мар 2016, 16:29
Благодарил (а): 4 раз.
Поблагодарили: 13 раз.
Языки программирования: 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
Модератор
 
Сообщения: 2164
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 176 раз.
Поблагодарили: 602 раз.
Языки программирования: Counter-Strike 1.6

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

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

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

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

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

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

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

Лимиты на количество бодей в группе. Лимиты на количество бодей в игре, лимиты на количество текстур в модели, количество костей и т.д. Там тонна всяких лимитов на всё подряд, по этому эти объединения выглядят легко только на начальном этапе. Когда модель начнет жиреть, проблемы посыпятся одна за другой :-)
Аватара пользователя
SISA
 
Сообщения: 252
Зарегистрирован: 28 ноя 2009, 01:46
Благодарил (а): 19 раз.
Поблагодарили: 111 раз.
Языки программирования: 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 раз.
Поблагодарили: 13 раз.
Языки программирования: Counter-Strike 1.6


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

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

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