Для начала нам нужна blend-текстура травы.
В VMT текстуры травы нужно приписать строчку
Код: Выделить всё
"%detailtype" "название_которое_будет_в_vbsp"
Затем создать новый vbsp или изменить уже существующий
Пример detail_sawmill.vbps
Код: Выделить всё
detail
{
tf_granary_grass
{
"density" "3000.0"
Group1
{
"alpha" "1.0"
}
Group2
{
"alpha" "0.1"
}
Group3
{
"alpha" "0.0"
Model1
{
"sprite" "0 0 164 256 512"
"spritesize" "0.5 0.0 18 27"
"amount" "0.2"
"detailOrientation" "2"
}
Model2
{
"sprite" "197 77 151 180 512"
"spritesize" "0.5 0.0 28 36"
"spriterandomscale" "0.3"
"amount" "0.8"
"detailOrientation" "2"
}
Model3
{
"sprite" "376 0 112 256 512"
"spritesize" "0.5 0.0 16 22"
"amount" "0.4"
"detailOrientation" "2"
}
"alpha" "1.0"
Model14
{
"upright" "1.0"
"model" "models/props_foliage/grass_02_detailmodel.mdl"
"amount" "0.025"
}
}
}
tf_forest_grass
{
"density" "3000.0"
Group1
{
"alpha" "1.0"
Model1
{
"sprite" "0 0 164 256 512"
"spritesize" "0.5 0.0 21 48"
"spriterandomscale" "0.2"
"amount" ".3"
"detailOrientation" "0"
}
Model2
{
"sprite" "200 85 94 172 512"
"spritesize" "0.5 0.0 16 37"
"spriterandomscale" "0.2"
"amount" ".2"
"detailOrientation" "0"
}
Model3
{
"sprite" "354 161 148 96 512"
"spritesize" "0.5 0.0 32 32"
"spriterandomscale" "0.2"
"amount" ".3"
"detailOrientation" "0"
}
Model4
{
"sprite" "32 416 64 96 512"
"spritesize" "0.5 0.0 12 16"
"spriterandomscale" "0.2"
"amount" ".3"
"detailOrientation" "0"
}
Model5
{
"sprite" "217 472 68 40 512"
"spritesize" "0.5 0.0 18 12"
"spriterandomscale" "0.2"
"amount" ".7"
"detailOrientation" "0"
}
Model6
{
"sprite" "418 424 43 88 512"
"spritesize" "0.5 0.0 11 22"
"spriterandomscale" "0.2"
"amount" ".3"
"detailOrientation" "0"
}
}
Group2
{
"alpha" "0.5"
Model4
{
"sprite" "32 416 64 96 512"
"spritesize" "0.5 0.0 12 16"
"spriterandomscale" "0.2"
"amount" "0.2"
"detailOrientation" "2"
}
Model5
{
"sprite" "217 472 68 40 512"
"spritesize" "0.5 0.0 18 12"
"spriterandomscale" "0.2"
"amount" "0.5"
"detailOrientation" "2"
}
}
Group3
{
"alpha" "0.25"
}
Group4
{
"alpha" "0.0"
}
}
tf_forest_grass_temp
{
"density" "3000.0"
Group1
{
"alpha" "1.0"
Model1
{
"sprite" "0 0 164 256 512"
"spritesize" "0.5 0.0 21 48"
"spriterandomscale" "0.2"
"amount" "0.04"
"detailOrientation" "0"
}
Model2
{
"sprite" "200 85 94 172 512"
"spritesize" "0.5 0.0 16 37"
"spriterandomscale" "0.4"
"amount" "0.05"
"detailOrientation" "0"
}
Model3
{
"sprite" "354 161 148 96 512"
"spritesize" "0.5 0.0 32 32"
"spriterandomscale" "0.4"
"amount" "0.2"
"detailOrientation" "0"
}
Model4
{
"sprite" "32 416 64 96 512"
"spritesize" "0.5 0.0 12 16"
"spriterandomscale" "0.3"
"amount" "0.1"
"detailOrientation" "0"
}
Model5
{
"sprite" "217 472 68 40 512"
"spritesize" "0.5 0.0 18 12"
"spriterandomscale" "0.4"
"amount" "0.25"
"detailOrientation" "0"
}
Model6
{
"sprite" "418 424 43 88 512"
"spritesize" "0.5 0.0 11 22"
"spriterandomscale" "0.05"
"amount" "0.1"
"detailOrientation" "0"
}
}
Group2
{
"alpha" "0.5"
Model4
{
"sprite" "32 416 64 96 512"
"spritesize" "0.5 0.0 12 16"
"spriterandomscale" "0.3"
"amount" "0.1"
"detailOrientation" "2"
}
Model5
{
"sprite" "217 472 68 40 512"
"spritesize" "0.5 0.0 18 12"
"spriterandomscale" "0.4"
"amount" "0.25"
"detailOrientation" "2"
}
}
Group3
{
"alpha" "0.0"
}
}
}
tf_granary_grass - Название, которое было введено к "%detailtype" в VMT текстуры травы
"density" "3000.0" - Плотность спрайтов
Затем создаются группы со значениями alpha (тоесть blend'а 2 текстур).
К каждой группе указаны разные спрайты или модели.
Для указывания каждого отдельного спрайта/модели группы делятся на так называемые "модели"
Каждая текстура с таким же названием как и vbsp файл делится на спрайты.
Деление происходит через комманду
где:
1 число - x координата верхнего левого угла спрайта
2 число - y координата верхнего левого угла спрайта
3 число - Ширина спрайта
4 число - Высота спрайта
5 число - размер текстуры по ширине
"spritesize" - Начало спрайта и его размеры по ширине и высоте
"spriterandomscale" - Насколько разным может быть размер спрайта
"amount" - Число спрайтов на определенной площади (возможно расстояние от одного такого спрайта до другого)
"detailOrientation" - 0 - спрайт не крутится, 1 - , 2 - спрайт вращается по отношению к камере/игроку
Если использовать модель заместо спрайта, то будут такие комманды:
"upright" - Если значение 1, то модель будет расположена всегда вверх (если 0 то по отношению к брашу/дисплейсменту)
"model" - Путь к модели
"amount" - То же что и у спрайтов
Статья на
Valve Developer Wiki