Цветные модельки

Garey

ninjaCow
Сообщения
411
Реакции
1,051
Помог
10 раз(а)
Автор статьи: Garey

Привет! в данной статье я расскажу как переделать модельку игрока так что-бы клиент (либо сервер) мог задавать цвет модельки с помощью команд bottomcolor/topcolor аналогично мультиплеерным моделям из Half-Life

Для этого нам надо будет переименовать текстурку игрока названием DM_Base.bmp и переставить индексы цветов которые должны заменяться в определенную зону в файле.

0. Рекомендуемые программы:
  1. Компилятор studiomdl.exe и декомпилятор MDL by Kratisto (Если будет использоваться уже готовая моделька)
  2. GIMP (или Photoshop)
  3. Milkshape 3D
  4. ASeprite
    * XnView

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

Я буду использовать свобоный редактор GIMP и если вы пользуетесь Photoshop'ом то там должен быть похожий функционал, если его нет то можно скачать программу с официального сайта: https://www.gimp.org

Milkshape 3d Используется для перераспределения текстур если в вашей моделе используется больше одной - из нескольких в одну.

XnView используется для того чтобы преобразовать из любого цветного в цветное 256 цветов ( Можете использовать любую другую )

Компилятор, декомпилятор и ASeprite я запаковал в архив и вы можете скачать их в конце поста


1. Декомпиляция модели:

Данный шаг можно пропустить если у вас модель уже имеется в формате SMD либо если вы уже умеете декомпилировать модели

1.1 Создаем папку где будет декомпилярованные ресурсы модельки и копируем туда .mdl модельку
1.2 Открываем decompiler.bat и перетаскиваем mdl из новой папки в окно и жмем Enter
1.3 На вопрос какой тип модельки - выбираем Reference (1) и жмем Enter и ждем пока моделька декомпилится​

Моделька должна сдекомпилироваться, 1-ый этап закончен


2. Объединение и перераспределение текстур в модели

Если текстур в модельке использовано более одной и эти текстуры должны участвовать в перераспределении цветов - объединяем эти текстуры в одну, для этого с начало открываем любой редактор изображений (можно даже Paint) и размещаем текстуры из каждого файла в один файл и переименовываем готовый файл в имя: DM_Base.bmp
Пример до и после:
57dd6a8171633_2016-05-2706_27_58.png.ea1889cb08c8ee76519abcc95ec0cead.png 57dd6b2e7e7d1_2016-05-2706_28_10.png.f23ffc8cb3a00611855a83b742d47ebf.png

2.1 Далее надо будет перераспределить текстуру в Milkshape 3D:
  • Импортируем smd файл или файлы(если модель разбита на несколько групп)
  • Нажимаем справа на вкладку Materials и вместо родных текстур меняем все на DM_Base.bmp созданный ранее:
  • Теперь наносим текстуру на модель - Выделяем нужную группу (если их несколько) и Жмем Ctrl+T, масштабируем и двигаем ее на нужную область текстуры как все закончено, закрываем окошко.
    57dd6b7e43a32_2016-05-2706_34_59.png.454b0ee063e9ff6017ce471f16c65d2a.png
  • Все тоже самое проделать для каждой группы - каждой модельки.

3. Ограничиваем количество цветов:

  • С начало открываем GIMP (либо Photoshop хотя не уверен есть ли там такая функция)
  • Открываем ранее созданый DM_Base.bmp
  • Переведите изображение в режим RGB (Изображение->Режим->RGB)
  • Далее опять переведите в режим Индексированный (Изображение->Режим->Индексированный)
  • Выбираем создать оптимальную палитру и выбираем Максимальное число цветов - 128 (неуверен есть ли такая функция в Photoshop)
  • Сохраняем (Экспортируем в BMP)

4. Переиндексация цветов в ASeprite
  • Открываем DM_Base.bmp
    *Если будет ругаться и не сможет откройте например в XnView и преобразуйте в цветное 256 цветов
  • Теперь видна палитра изображения и непосредственно само изображение
  • Теперь с помощью левого окошка (где палитра) перераспределите нужные цвета в Индексы 160-191( bottomcolor ), 192-223(topcolor)

Для этого можно сначало выделить все цвета и рассортировать их по нужному параметру например по освещености для этого выделяем все цвета и нажимамем на маленькую стрелочку и выбираем Sort by Luminance на картинке все цвета поплывут для того чтобы все цвета перераспределились - нажимаем Remap

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

- Перетащите цвета в начала диапазнов для bottom и topcolor(160 и 192), рассортируйте по яркости и неиспользуемые цвета преобразуйте в градиент от вашего цвета до черного для этого выделите последний используемый цвет и растяните выделение дл 191 или 223 и нажмите на стрелочку -> Gradient

Результат должен выглядеть примерно так:
57dd6bc47e329_2016-05-2707_22_31.png.890f12002c4875a12d03646754ff988f.png


5. Компилируем модельку обратно в MDL

  • Открываем Compiler.bat
  • Открываем папку куда мы декомпилировали и перетаскиваем файл *.qc в окошко

Смотрим результат в игре:
57dd6c69ad80d_BeFunkyCollage.jpg.7eee34ac6a5c5ab55d801ec6c8ec9d2c.jpg
 

Download all Attachments

Сообщения
67
Реакции
85
Garey, Это гениально.
Большое спасибо за статью.
 

Garey

ninjaCow
Сообщения
411
Реакции
1,051
Помог
10 раз(а)
igor_grusha, оказывается можно, в аттаче пример цветной модельки дигла, у себя на клиенте просто менять topcolor/bottomcolor команды, вероятно на сервере просто infokey также менять topcolor/bottomcolor :-) (в примере только topcolor)
 

Вложения

Сообщения
462
Реакции
430
Предупреждения
8
Помог
7 раз(а)
Не совсем понятно работа с прогой asprite. Видео или картинками покажите лучше.
 
Сообщения
462
Реакции
430
Предупреждения
8
Помог
7 раз(а)
Все сделал. Но на скинах не работает установка цветов. (Работает только на первом скине)

$texturegroup skinfamilies
{
{ "DM_Base.bmp" }
{ "DM_Base_skin1.bmp" }
{ "DM_Base_skin2.bmp" }
{ "DM_Base_skin3.bmp" }
{ "DM_Base_skin4.bmp" }
}
 

Garey

ninjaCow
Сообщения
411
Реакции
1,051
Помог
10 раз(а)
Vaqtincha, Назови текстурку как "Remap#_LLL_MMM_HHH####"
LLL-MMM будут пороги для палитры topcolor
MMM-HHH для bottomcolor.
# - любые символы, поидее вместо "_" тоже можно любой символ. Главное чтобы текстура была 22 символа длинной, начиналась с "Remap",
К примеру: "RemapA_160_191_223_asd"
 
Сообщения
462
Реакции
430
Предупреждения
8
Помог
7 раз(а)
Garey, сайлент уже подсказал про ремап. Я просто переименовал все текстуры на DM_Base (благо паранойя вювер этого позволяет) в игре работает но будет утечка из-за этого пришлось делать костыль.
28 Ноя 2022
Правда не очень поняли для чего нужен remap вообще.
 

Download all Attachments

  • Нравится
Реакции: Murz

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу