Garry's Mod

Garry's Mod

220 ratings
Как сделать спрей (spray) - переливающийся, анимированный и прозрачный
By CLazStudio
Пошаговое руководство по созданию анимированных спреев (sprays) с прозрачным фоном, которые в это же время могут переливаться (faded spray).
   
Award
Favorite
Favorited
Unfavorite
Введение

Для тех, кто не хочет делать все вручную, существует веб-приложение:
VTF-Editor[rafradek.github.io](Старая ссылка[mishcatt.github.io])


При создании спрея стоит учитывать следующие условия
  • Итоговый файл текстуры спрея (VTF) не должен быть тяжелее 512КБ
  • Размеры исходных изображений (ширина и высота) должны быть степенями двойки (т.е. например 32, 64, 128, 256, 512, но не 200, 500, 150)
  • При установленном флаге Point Sampling не будет работать эффект переливания
C ограничением веса файла ничего не поделать, поэтому придется подгонять наши размеры кадров и их количество так, чтобы файл вышел весом меньше 512КБ.

Примерно так можно вычислить вес в КБ для форматов DXT3 и DXT5:
(ширина*высота*кадры + 80) * 1.336 / 1024
Можно заранее вычислить это значение и проверить превысит ли размер спрея 512КБ.

На протяжении всего руководства я буду делать спрей и отсылаться на свой вариант в качестве примера. Исходная гифка из примера:

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

Уточнение некоторых понятий, которые я использую в тексте руководства:
  • мипмапа (от англ. MIP mapping) - уменьшенная копия оригинального изображения, которая будет отображаться на более дальнем расстоянии от спрея в игре. (подробнее[ru.wikipedia.org])
  • набор кадров - (может состоять и из одного кадра, если вы делаете спрей без анимации) это несколько изображений, которые являются кадрами анимации спрея. Я даю этим наборам некоторые номера: первый набор кадров - это кадры, которые будут видны при самом ближнем рассмотрении спрея, чем выше номер, тем дальше расстояние до спрея (если рассматривать спрей уже в игре).
  • ги́фка (от англ. GIF) - или GIF изображение, GIF анимация - не знаю как дать понятное определение, это же и так очевидно, зачем я вообще включил это слово в этот список.
  • прозрачный спрей - под этим словами я подразумеваю не полностью прозрачный спрей, а частично прозрачный, с прозрачным фоном и некоторыми областями, возможно даже полупрозрачный...
  • переливающийся спрей - название связано со свойством спрея под углом показывать изображения для разных расстояний (на логотипе руководства демонстрируется этот эффект)
Подготовка
Для создания спрея нам понадобятся программы VTFEdit, VIDE и какой-нибудь растровый графический редактор.

VTFEdit
Это первая программа, которая нужна для создания файла текстуры нашего спрея

Для работы программы требуется .NET Framework v2.0 и Visual C++ 2005 SP1, если программа не будет запускаться, то, скорее всего, нужно установить их (на странице скачивания программы есть ссылки).


VIDE (Valve Integrated Development Environment)
Вторая программа, при помощи нее мы сможем изменять изображение текстуры для разных расстояний (мипмапы).

Графические редакторы
Для редактирования кадров и мипмапов нам понадобится какой-нибудь растровый графический редактор, который умеет работать с Alpha каналом (т.е. не MS Paint)
Если кадров будет много (например если вы хотите сделать только анимированный спрей) может пригодиться программа xnConvert[www.xnview.com], чтобы проделывать одни и те же действия над несколькими изображениями.

EZGIF.COM
Этот сайт нужен нам, чтобы разбивать GIF файл на кадры, а так же там можно подогнать размер гифки под требуемые степени двойки
Обработка исходных изображений
Теперь давайте разберёмся какой спрей мы хотим.

Можно нарисовать все кадры и мипмапы[ru.wikipedia.org] в графическом редакторе. В этом случае можно пропустить этапы разбиения гифки на кадры и подгонку размеров к степеням двойки и нарисовать всё уже в правильных размерах.

Так же можно найти подходящюю гифку, для примера я искал гифки тут:

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

Разбиение GIF анимации на кадры
  1. Заходим на страницу https://ezgif.com/split и выбираем там либо уже скачанную гифку с компьютера, либо указываем ссылку
  2. Нажимаем на кнопку Upload!
  3. Выбираем в Split Options пункт Output images in PNG format
  4. Нажимаем на кнопку Split to frames
  5. Когда процесс разбиения на кадры завершится мы сможем скачать zip (кнопка Download frames as ZIP) архив с кадрами и распаковать его в удобном месте на компьютере.


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



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

Изменение размеров изображения или холста в Paint NET

В моём случае ширина кадра уже была равна 128 (т.е степень двойки 2^7), а вот высота была равна 96 пикселям. я решил увеличить её до 128.

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

Так как в гифке было всего два кадра, можно увеличить разрешение изображения и уместиться в 512 КБ. Более высокое разрешение важно в моём случае, т.к. при низком разрешении пиксельное изображение в игре превратится в размазню.
Следующей по величине степенью двойки идём 2^8 = 256, такой размер и сделаем

Если у вас тоже пиксель-арт изображение, то при увеличении размера стоит выбрать Метод соседних пикселей, чтобы у нас не было размытого изображения.

Теперь можно сохранить изменения.
При сохранении вылезет окошко с параметрами сохранения, там нужно указать 32-битную глубину цвета, если мы хотим прозрачный спрей.

Те же действия проделаем с оставшимися кадрами...

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

Стоит так же учитывать, что, кадры предназначенные для дальних расстояний должны быть меньшего размера, по сравнению с теми, что предназначены для ближних. Например Исходный размер всех кадров, которые будут видны при ближнем рассмотрении спрея, 256x256, следующий набор кадров должен быть размера 128x128, то есть в два раза меньше. И так далее, чем больше наборов кадров, тем красивее, но, как правило, для того, чтобы был заметен эффект переливания, больше двух наборов кадров не требуется.
Если вам нужен простой эффект (с двумя наборами кадров), то второй набор кадров лучше сделать такого же размера, что и первый (я имею в виду разрешение изображения) и потом на этапе подмены мипмап нужно действовать немного по-другому.
Этот этап достаточно креативный, и каждый может сделать мипмапы по-своему, поэтому буду описывать свои действия.
Originally posted by CLazStudio:
Я в своём примере изменил оттенок исходного изображения (В Paint NET Коррекция -> Оттенок и насыщенность) на 120 единиц (т.к 120*3=360, это нужно для того, чтобы переход был красивым и равномерным. Кому интересно, можно почитать про цветовую модель HSB[ru.wikipedia.org])
Потом я уменьшил размер изображения в два раза (до 128x128) и сохранил под другим именем, чтобы не перезаписывать изменения в первом наборе кадров.
Такие же действия я проделал и со вторым кадром.

Для красоты я решил сделать еще один набор кадров уже размера 64x64 и опять изменил оттенок на 120 (а потом можно будет зациклить, то есть использовать для 32x32 изображение из 256x256)

Теперь у меня есть три набора кадров, по 2 кадра в каждом.
Создание текстуры спрея
Приступим к созданию текстуры спрея.

Форматы текстуры
Далее нам понадобится выбирать формат текстуры, для спреев в основном используются следующие варианты:
  • DXT1: Для непрозрачных спреев. Самое сильно сжатие.
  • DXT3: Для прозрачных спреев, где есть резкие переходы в прозрачности.
  • DXT5: Для прозрачных спреев, где есть плавные переходы в прозрачности. Универсальный формат для спрея, если не можете определиться, выбирайте этот.
Реже используются эти форматы, т.к. у них нет сжатия. Выбирайте этот формат только если у вас непереливающийся спрей без анимации, когда нужно хорошее качество изображения.
  • BGR888: Для непрозрачных спреев
  • BGRA8888: Для прозрачных спреев

Открываем программу VTFEdit, в ней File -> Import и выбираем первый набор кадров.
Если вам нужен простой эффект (всего лишь два набора кадров для ближнего и дальнего расстояния), то на этом шаге нужно выбрать второй набор кадров (то есть тот, который предназначен для дальнего расстояния).



Откроется окно параметров текстуры. Ниже я привел скриншоты моих параметров. Там, где помечено красным, нужно установить такое же значение, за исключением Aplha format (здесь можно выбрать тот формат, который вам нужен), остальное можно оставить без изменений.
Если вам не нужен эффект переливания, то можно убрать галочку Generate Mipmaps и сократить вес файла примерно в 2 раза.


После установки параметров текстуры можно нажать на кнопку Ок

На вкладке Image можно (но не в моём примере) установить флаг Point sampling, если не важен эффект переливания и нужно, чтобы границы пикселей чётко прорисовывались.

На вкладке Info показывается вес файла текстуры (Size). Тут можно проверить не превышает ли он 512 КB. Если так получилось, что вес выше 512КБ, еще не поздно Сделать Import заново, выбрать меньше кадров или указать другой формат текстуры. Если по прежнему не получается уложиться, придётся уменьшать размер изображений (в два раза). Проще всего это сделать при установке параметров текстуры на первой вкладке General поставить галочки Resize и Clamp и указать нужный размер.


Теперь можно выбрать File -> Save, сохранить файл текстуры в удобном месте и выйти из программы.

Изменение мипмап
Следующие действия можно не выполнять, если вам НЕ нужен эффект переливания.

Открываем программу VIDE. В панели меню выбираем Tools -> VTF editor
Откроется еще одно окно с заголовком VTF Editor. В нём выбираем File -> Open и открываем файл текстуры, который мы создали на предыдущем этапе.

Тут главное - не запутаться. На вкладке Layout мы можем просматривать и изменять все наборы кадров, самый первый набор находится внизу списка и имеет самый большой размер. Остальные наборы кадров копируют первый, но с уменьшенным в два раза размером изображения. Нам нужно подменить уменьшенные копии первого набора на свои изображения, тогда на разных расстояниях наш спрей будет выглядеть по-разному

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

Разворачиваем второй снизу набор кадров, нажимаем правой кнопкой мыши на первый кадр (Frame 0) в развёрнутом списке и выбираем пункт From file...
В открывшемся окне выбираем подготовленный нами заранее первый кадр второго набора

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

В списке осталось еще несколько наборов кадров вплоть до размера 1x1. Там можно воспользоваться пунктом From Image... и, так сказать, зациклить наборы кадров. То есть четвёртый набор кадров будет уменьшенной в 8 раз (2^3, т.к. "циклятся" три набора кадров) копией первого набора

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

Теперь можно сохранить изменения в файле текстуры File -> Save, закрыть программу и установить спрей в игру.
Установка спрея в Garry's mod
Чтобы игра увидела наш файл текстуры спрея, нужно создать файл материала (VMT), создадим его!

Раз у нас уже есть программа VTFEdit, опять открываем её и выбираем File -> New. В текстовое поле вставляем следующее. вместо ИМЯ_ФАЙЛА_ТЕКСТУРЫ нужно написать имя файла текстуры без .vtf
"LightmappedGeneric" { "$basetexture" "vgui/logos/ИМЯ_ФАЙЛА_ТЕКСТУРЫ" "$translucent" 1 }
Теперь выбираем File -> Save и сохраняем в рядом с .vtf файлом (в той же папке) под таким же именем.
Originally posted by CLazStudio:
В моём случае это будет файл slime.vtf (файл текстуры) и файл slime.vmt с содержимым
"LightmappedGeneric" { "$basetexture" "vgui/logos/slime" "$translucent" 1 }
Теперь оба файла нужно переместить в папку игры. Чтобы туда попасть нужно открыть Steam, в нём зайти в раздел БИБЛИОТЕКА -> Игры, В списке игр нажать правой кнопкой мыши (ПКМ) по игре Garry's mod и выбрать Свойства. В открывшемся окне на вкладке Локальные файлы нужно нажать на кнопку Просмотреть локальные файлы

Откроется папка с игрой, в ней нужно зайти в в папку "garrysmod\materials\vgui\logos". Именно сюда и переместим наши два файла. Дополнительно можно скопировать уже перенесенный VMT файл в папку ui.

Осталось только зайти в игру, в главном меню зайти в настройки, на вкладке Other выбрать из списка свой новый спрей и нажать OK.


Протестировать работоспособность спрея можно на любом сервере (например Начать новую игру -> 2 игрока -> Начать игру -> G). Вот такой вот радужный слизень.
Возможные проблемы и их решение
В этом разделе руководства перечислены возможные проблемы, с которыми вы можете столкнуться при создании или проверке спрея. Если вашей проблемы тут нет или ни одно из решений не помогло, пишите в комментарии.

Ошибка "VIDE: Unable to set working directory"

Возможно, в пути к VIDE.exe есть пробелы или нелатинские символы (русские буквы например) или программа запущена прямо из архива. Распакуйте из архива папку с программой в нормальное место (не рабочий стол) куда-нибудь в корень жесткого диска, например, чтобы вышло как-нибудь так "D:/MySprays/VIDE/VIDE.exe".


Переливающийся спрей не переливается или переливается не плавно
Эта проблема может возникнуть либо у всех зрителей спрея или только у некоторых.
  • Если никто не видит, что спрей переливается (и вы тоже), то скорее всего допущена ошибка при создании спрея. Убедитесь, что у спрея НЕ установлен флаг "Point Sampling ". И проверьте изменены ли у него мипмапы.

  • Если спрей не переливается или переливается не плавно только у вас или только у некоторых игроков, то скорее всего у вас или у них в настройках выключена Анизотропная фильтрация[ru.wikipedia.org].
    В настройках игры на вкладке Video нажмите на кнопку Advanced... В открывшемся окошке найдите выпадающий список Filtering mode. Для лучшего качества выберите Anisotropic, Если у вас слабый компьютер, но переливание спреев вам всё равно нужно, можно выбрать Bilinear или Trilinear.

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


Спрей не видно, но звук распыления слышно
Эта проблема может возникнуть по разным причинам.
  • Ваш спрей тяжелее 512кб. Придется удалять кадры или мипмапы, уменьшать формат или размеры спрея.

  • Вы зашли в одиночную игру. В одиночной игре спреи выключены. Создайте локальный сервер с одним игроком или зайдите на какой-нибудь сервер и проверьте там.

  • Возможно вы установили неподдерживаемый игрой формат спрея. Форматов DXT1, DXT3, DXT5, BGR888, GRA8888 должно хватить на все случаи жизни. Почитать подробнее про форматы можно в разделе создания текстуры спрея

  • Может быть спреи выключены вашими настройками игры. Чтобы включить их, выполните эти команды в консоли:
    cl_playerspraydisable 0 r_decals 200 r_spray_lifetime 2
Могут быть и другие причины, но о них я и сам не знаю, обычно создание текстуры и материала спрея заново помогало.


Спрей видно как чёрно-розовую шахматную доску
Скорее всего допущена ошибка при создании материала спрея. Такая розово-чёрная текстура показывается когда игра не может найти текстуру. Возможно вы не указали путь к текстуре спрея в .vmt файле, проверьте.
Заключение
На этом наконец-то всё, надеюсь, было хоть что-то понятно, я не запутал вас лишними уточнениями, и у вас всё заработало с первой попытки.

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

Если сильно нужно, могу попытаться записать видео по этому руководству, может кто-то так лучше понимает и усваивает.

Скачать спрей из примера можно тут: https://gamebanana.com/sprays/74972
73 Comments
трансформатор Aug 5, 2024 @ 3:31pm 
спасибо автор:steamthumbsup:
susech Apr 17, 2023 @ 12:24pm 
лан я сам разобрался
susech Apr 17, 2023 @ 9:10am 
если я просто гифку хочу
ProMEDICForever Nov 19, 2022 @ 12:31am 
а только ща понял, что у меня спрей 1024х1020.... хотя от слова это дело раньше работало)

попробую размер поменять
CLazStudio  [author] Nov 19, 2022 @ 12:27am 
Проверь не превышает ли твой спрей весом 512кб и что его высота и ширина являются степенями двойки. Спреи могут еще быть выключены у других игроков (поэтому они не видят все спреи, включая твой)
ProMEDICForever Nov 18, 2022 @ 10:47pm 
А что делать, если другие слышат звук, но спрей не видят(просто картинка, не гифка)?

У меня всë коректно работает, а большенство их не видит
ProMEDICForever Nov 17, 2022 @ 3:56am 
эта команда не помогает если этот пункт с галочкой, я проверял
CLazStudio  [author] Nov 16, 2022 @ 11:55pm 
SpaceTrader, про это уже написано
cl_playerspraydisable 0
ProMEDICForever Nov 16, 2022 @ 8:15am 
добавь, что если делаешь спрей в тф2, то должен быть отключен пункт -отключить спреи- в расширенных настройках

я так час ебался с спреем в 1024х1020)))
CLazStudio  [author] Nov 9, 2022 @ 9:58am 
С какой скоростью анимация не знаю, не засекал, но это всё равно невозможно настроить, насколько мне известно.
В других играх на движке source должно работать