Source Filmmaker

Source Filmmaker

103 次評價
Материалы с прозрачностью.
由 MARK2580 發表
Краткое руководство, описывающее работу альфы / прозрачности.
Попробую описать все приёмы получения прозрачной текстуры и избавления от пропадания прозрачных текстур. на фоне других прозрачных поверхностей.
   
獎勵
加入最愛
已加入最愛
移除最愛
Основы.
Для создания текстуры с прозрачностью, нам потребуется графический редактор, который умеет работать с прозрачностью и альфа каналом.
Я лично предпочитаю использовать Adobe Photoshop.

Начну с азов. Так-же делаются обычные спреи с прозрачностью.
Для примера берём классический логотип Half-Life 2 с прозрачностью.


> Текстура с обычной прозрачностью <

Конвертируем в vtf. Как это сделать, читайте в моём предыдущем гайде.
http://steamoss.com/sharedfiles/filedetails/?id=807476997
Мы уже получили базовый тип текстуры с прозрачностью. Но это всего лишь прозрачность элементов, где есть понятие "видно" и "не видно".

> Текстура с альфа каналом <


Находим в фотошопе вкладку "Каналы". Создаём новый канал если нету.
Канал будет называться как "Альфа".
Для сохранения альфы я рекомендую сохранять в формате TGA с 32 бит, 24 бита удаляет альфа канал

Альфа канал, это более продвинутый тип прозрачности, но не только прозрачности, альфа канал может работать например как маска.

Тип работы альфа канала:
Чёрный цвет т.е. RGB - 0 0 0 - это 100% прозрачность текстуры, т.е. текстуру в этом месте не будет видно вообще.
Белый цвет т.е. RBG - 1 1 1 - это полная противоположность чёрному, т.е. 100% видимость текстуры.
Все промежуточные вариации цветов от чёрного до белого будут давать разные степени прозрачности текстуры.


Давайте рассмотрим пример текстуры с применённым альфа каналом. В альфа канале я нарисовал обычный градиент. Сверху белый и текстура хорошо видна, ниже постепенный переход в чёрный цвет и текстура становится еле видна.
Так-же я добавил текст + зоны только чёрный цвет или только белый цвет.
Альфа канал знает только цвета от чёрного до белого. Т.е. если вы даже нарисуете там что-то зелёным цветом, то он автоматически конвертируется в ЧБ вариант, и будет почти чёрным.


Прописываем материал VMT.
Для примера я буду описывать значения для базовых материалов, т.е.
VertexLitGeneric (шейдер для моделей) и LightmappedGeneric (для брашей, текстуры, которые использует редактор Hammer).

Параметры VMT используемые в обоих шейдерах одинаковые.
Рассмотрим самый "бюджетный" вариант отображения прозрачности, именно прозрачности т.к. этот режим способен отображать только резкий переход.

"$AlphaTest" "1"
Данный режим подойдёт для прозрачности. 1 - включить 0 - выключить.
По умолчанию в шейдере прописан 0, если этой строки не будет.
"$alphatestreference" "0.5"
Дополнительный режим $alphatest. Даёт некоторый разброс качества "краёв" прозрачности.
Параметр принимает числа от 0 до 1. По умолчанию - 1.
"$nocull" "1"
Позволяет отображать текстуру с 2х сторон полигона, а не только с 1й. Очень полезно для волос, плащей, кусков ткани и.т.п.
"$translucent" "1"
Аналог $alphatest, имеет максимальное качество отображения прозрачности. Но имеет огромное количество недостатков. Подходит для отображения прозрачности на основе альфа канала текстуры. 1 - включить 0 - выключить. По умолчанию выключен.
"$additive" "1"
Режим отображения альфы, на основе чёрного цвета текстуры. Т.е. например есть картинка какого-то спрайта, но место прозрачности его фон просто чёрный цвет. Этот параметр заставляет шейдер воспринимать чёрный фон как прозрачность. Используется в основном для спрайтов. Качество отображение аналогично $alphatest с минимальным качеством.

$AlphaTest + $alphatestreference НЕ СОВМЕСТИМЫ с $translucent
Т.е. вы используете только 1е два или только $translucent
$nocull - совместим со всеми параметрами.
"VertexlitGeneric" { $basetexture" "nate159\mec\faith\t_hair_black_d" $bumpmap "nate159\mec\faith\t_hair_black_n" $nocull 1 $alphatest 1 $alphatestreference 0.7 }
Ниже вы можете увидеть пример отображения прозрачности при различных параметрах на основе самой заметной текстуры - волосы.

Ниже можно увидеть, как плохо подходит $alphatest для "плавной" прозрачности через альфа канал текстуры
Проблемы отображения $translucent
$translucent 1 позволяет отображать плавные градиенты, мягкие края но имеет очень глючный режим отображения, особенно когда смотришь на модель с такой текстурой через другую модель с прозрачностью. Примерный эффект вы видите на скриншоте ниже.

Вот как может выглядеть модель, если применить фикс, используя параметр в QC для компиляции.

Если кратко описать проблему, то другие модели с прозрачностью при определённых углах обзора как будто проходят сквозь модель перед игроком и выглядит это отвратительно.
О этой проблеме даже написано в VALVe Developer Wiki - https://developer.valvesoftware.com/wiki/$translucent
Прописываем параметры в QC (для модели).
Вот и добрались до самого продвинутого. От параметров компиляции модели тоже многое зависит. Существует 2 интересных параметра для QC:

$mostlyopaque
честно говоря я очень плохо понял перевод с WIKI но этот параметр в большинстве случаев помогает решить ошибку описанную в предыдущем разделе.
$opaque
аналогичный параметр. Использует какой-то другой метод отображения.

Здесь нету 100% уверенности, пробуйте на угад тот или другой парметр, вдруг поможет.

http://steamoss.com/sharedfiles/filedetails/?id=268248487
Решение проблемы с Source Filmmaker
В Source Filmmaker так-же есть проблемка с отображением $translucent текстур. Они в большинстве случаев просто вообще пропадают.
Для этого в VMT текстуры надо указать параметр "$ambientocclusion" "0"
Он отключает применение AO на эту текстуру, что решает проблему.
Этот параметр по умолчанию включен т.е. "$ambientocclusion" "1"
11 則留言
Thousand Shells 2021 年 12 月 18 日 上午 11:46 
Спасибо Марк , меня друг научил сегодня))) добра)) лайк поставил топ
MARK2580  [作者] 2021 年 12 月 18 日 上午 6:51 
Thousand Shells 2021 年 12 月 18 日 上午 1:36 
Ну хотя бы один из методов :( а то никак моделькам не могу глаза сделать нормально
MARK2580  [作者] 2021 年 12 月 17 日 下午 4:25 
Ууууу это сложно, я сам глаза делаю так сказать методом тыка, 100% всегда рабочего способа так и не нашёл.
Thousand Shells 2021 年 12 月 17 日 上午 11:26 
Отличные гайды, был бы рад увидеть отдельный гайд по тому , как сделать движение глаз у моделей.
Mrs. Brisby 2021 年 5 月 15 日 上午 11:35 
Спасибо.
MARK2580  [作者] 2020 年 9 月 24 日 上午 11:06 
хз я подобные параметры вообще в самое начало пихаю после путя/именимодели
First Mouse 2020 年 9 月 24 日 上午 7:52 
Если в другом месте поставить, может не скомпилировать (хз, но у меня так было).
MARK2580  [作者] 2020 年 9 月 24 日 上午 7:29 
"после параметра $cdmaterials"
а что это даёт ? :lunar2019deadpanpig:
First Mouse 2020 年 9 月 24 日 上午 5:15 
Хорошая статья, спасибо! Параметр $opaque очень помог! И кстати, его лучше ставить после параметра $cdmaterials