[HL2/CSS] Прокси-материалы
В этой статье Вы узнаете, что такое прокси-материалы и как их использовать.
Если Вы не знаете, что такое материалы в Source, то лучше почитайте
эту статью о создании материалов.
Прокси-материалы позволяют манипулировать параметрами материалов во времени, такими как цвет, прозрачности, величиной масштабирования. Благодаря прокси-материалам стало возможным создание материалов без дополнительных усилий, таких как как вода, шит комбайнов, силовое поле, эффекты для камер и множество других.
Материалы также можно поворачивать, прокручивать в разных направлениях, изменять значение непрозрачности, налаживать шум, управлять анимацией материала, использовать математические функции, определять свои переменные и издеваться над бедными материалами многими другими способами

. Полный список можно найти
здесь.
Прокси-материал определяется как блок текста, в котором используется схема параметра и соответствующего ему значения. Всё это пишется в VMT файле. Прокси-материалы разрешены для всех стандартных материалов.
Вот пример определения прокси-материалов:
Code:
"LightmappedGeneric"
{
"$basetexture" "shadertest/LightmappedTexture"
// внутри следующих фигурных скобок мы определяем прокси-материлы
"Proxies"
{
// Это синусоидный прокси-материал
"Sine"
{
// Это информация для прокси-материала
// Обратите внимание, что здесь у переменных отсутствует в начале знак ‘’$’’.
"resultVar" "$alpha"
"sineperiod" 8
"sinemin" 0
"sinemax" 1
}
}
}
Теперь подробнее.
"resultVar" "$alpha" – эта строка определяет, на что будет действовать прокси-материал, в данном случае на прозрачность("$alpha"). resultVar это аналог оператора return из С++, который возвращает результат обработки данных функцией ( в нашем случае эта функция “Sine”) в главную программу(Source).
"sineperiod" 8 – устанавливает период колебаний, равный восьми.
Следующие две строки задают соответственно минимальные и максимальные пределы колебания:
"sinemin" 0
"sinemax" 1
Возможно создание нескольких прокси-материалов в одном vmt-файле.
Делается это так:
Code:
"Proxies"
{
// Этот будет выполнен первым
"A"
{
. . .
}
// А этот вторым
"B"
{
. . .
}
}
Переменные.
Также как и в обычном языке программирования, в прокси-материалах можно объявлять локальные переменные, которые могут быть использованы далее.
Переменные определяются вне прокси-блока и их значения выставляются справа от имени самой переменной.
Code:
"LightmappedGeneric"
{
"$basetexture" "shadertest/LightmappedTexture"
//Локальная переменная для этого материала, начальное значение которой 0.5.
"$myScale" 0.5
"Proxies"
{
. . .
}
}
Ограничений по количеству объявлений локальных переменных практически нет.
Переменные могут быть использованы для вставки или вывода числовых значений из стандартных переменных в прокси-материалах. Они также часто используются для хранения результата вычислений математических функций(таких как Add, Substract и т.д.).
Следующие значения наиболее часто используются в переменной
$resultVar
$alpha – изменение прозрачности (0- прозрачность, 1-непрозрачность)
$color – модуляция цвета(R, G, B) (1, 1, 1) = белый (0, 0, 0) =чёрный
$envmapmaskscale – величина масштабирования маски карты окружения
$frame – номер кадра для анимированной текстуры
$envmaptint – модуляция цвета для карты окружения
$selfillumtint – модуляция цвета для self-illumination
Примечания.
1) Значения параметров $alpha и $color находятся в пределах 0 и 1.
2) К таким переменным как $color и $baseTextureOffset можно обращаться как к массивам. Например строка "$color[0]" даёт доступ к красной составляющей.
3) Значения переменных, определённых в vmt-файле, можно изменять прямо в процессе игры, используя специальную энтитю material_modify_control и систему I/O.
4) Для углубления знаний можете посмотреть vmt, лежащие в папках materials\Effects и materials\shadertest.
Вот и всё. Желаю вам удачного препарирования текстур!
Взято с
developer.valvesoftware.com.
В аттачах лежат:
1) GiF-анимашка c тремя эффектами.
2) 3 vmt к ним.
3) Перевод списка и описания всех прокси-операторов.