Ru/Detail props: Difference between revisions
No edit summary |
m (Small change in article layout) |
||
Line 3: | Line 3: | ||
[[File:Dear-esther henge.jpg|thumb|250px|Detail prop на этом скриншоте взят из [[Dear Esther]].]] | [[File:Dear-esther henge.jpg|thumb|250px|Detail prop на этом скриншоте взят из [[Dear Esther]].]] | ||
[[File:Orion june2009 prev01.jpg|thumb|250px|Detail props отражается на воде в [[Orion]] скрине. Обратите внимание на склон холма вдали, который находится за пределами затухания | [[File:Orion june2009 prev01.jpg|thumb|250px|Detail props отражается на воде в [[Orion]] скрине. Обратите внимание на склон холма вдали, который находится за пределами затухания.]] | ||
.]] | |||
[[File:Prison Island flora.jpg|thumb|250px|Detail props смешан с [[prop_static|static props]] в [[Prison Island]].]] | [[File:Prison Island flora.jpg|thumb|250px|Detail props смешан с [[prop_static|static props]] в [[Prison Island]].]] | ||
'''Detail props''' это [https://developer.valvesoftware.com/wiki/Cheap дешевые], бесплотные объекты, которые случайным образом появляются на поверхности специальных [https://developer.valvesoftware.com/wiki/Material:ru материалов]. Они исчезают из вида на определенном расстоянии от игрока (по умолчанию это 1200 юнитов). Это значит, что они годятся только для небольших объектов, таких как трава или прочая мелкая растительность. | '''Detail props''' это [https://developer.valvesoftware.com/wiki/Cheap дешевые], бесплотные объекты, которые случайным образом появляются на поверхности специальных [https://developer.valvesoftware.com/wiki/Material:ru материалов]. Они исчезают из вида на определенном расстоянии от игрока (по умолчанию это 1200 юнитов). Это значит, что они годятся только для небольших объектов, таких как трава или прочая мелкая растительность. | ||
Detail props бывает двух типов: | Detail props бывает двух типов: | ||
; [https://developer.valvesoftware.com/wiki/Sprite Спрайты] | ; [https://developer.valvesoftware.com/wiki/Sprite Спрайты] | ||
: | : Двух полигональный плоский квадрат, использующий параметр [[$translucent]] внутри материала. Объект может быть настроен так, чтобы он всегда “смотрел” в сторону камеры игрока, покачивался на ветру (что уже будет ресурсоемко) и прогибался под шагами идущего. Спрайт не может проходить сквозь [https://developer.valvesoftware.com/wiki/Water водную поверхность]. | ||
; [https://developer.valvesoftware.com/wiki/Model Модели] | ; [https://developer.valvesoftware.com/wiki/Model Модели] | ||
: 3д модели следует использовать очень редко, если вообще использовать. Каждая модель расходует видео ресурсы DirectX, вне зависимости от того, сколько у модели полигонов, нагрузка всегда будет выше приемлемой. | : 3д модели следует использовать очень редко, если вообще использовать. Каждая модель расходует видео ресурсы DirectX, вне зависимости от того, сколько у модели полигонов, нагрузка всегда будет выше приемлемой. | ||
== Использование == | == Использование == | ||
Типы покрытия detail prop ("detail types") определяются скриптом файла . | Типы покрытия detail prop ("detail types") определяются скриптом файла .VBSP (Формат ANSI), и описаны в материалах с помощью параметра ''%detailtype''. Затем [[VBSP]] рандомно генерирует detail props на поверхностях, покрытых этим материалом, при компиляции карты. | ||
Detail props могут быть размещены в ручную в паре с [[prop_detail]] и [[prop_detail_sprite]] энтити, но это редкая практика. | Detail props могут быть размещены в ручную в паре с [[prop_detail]] и [[prop_detail_sprite]] энтити, но это редкая практика. | ||
{{tip|Стандартный VBSP файл находится в root\detail.vbsp (например Half-life 2/ep2/detail.vbsp), но вы можете создать и свой собственный, только не забудьте изменить в Valve Hammer переменную “Detail vbsp file” во вкладке (Map > Map Properties… | {{tip|Стандартный VBSP файл находится в root\detail.vbsp (например Half-life 2/ep2/detail.vbsp), но вы можете создать и свой собственный, только не забудьте изменить в Valve Hammer переменную “Detail vbsp file” во вкладке (Map > Map Properties… | ||
}} | |||
{{tip|Используйте брашевую энтити {{l4D add|[[func_detail_blocker]]}} | {{tip|Используйте брашевую энтити {{l4D add|[[func_detail_blocker]]}} (впервые появился в Left 4 Dead) для подавления генерации detail sprites в нежелательных зонах. | ||
}} | |||
== Базовые типы detail== | == Базовые типы detail== | ||
Эти типы detail доступны | Эти типы detail доступны [[Source SDK Base]]: | ||
:{| class=standard-table | :{| class=standard-table | ||
! Type || View | ! Type || View | ||
|- | |- | ||
| swamp_land_002 || | | swamp_land_002 || | ||
|- | |- | ||
| grass01 || [[File:Grass01.jpg|250px]] | | grass01 || [[File:Grass01.jpg|250px]] | ||
|- | |- | ||
| grass02 || [[File:Grass02.jpg|250px]] | | grass02 || [[File:Grass02.jpg|250px]] | ||
Line 85: | Line 80: | ||
== Новые типы detail== | == Новые типы detail== | ||
Здесь отображен пользовательский VBSP файл. Требуется | Здесь отображен пользовательский VBSP файл. Требуется [[#Shapes|поддержка detail shape]]. Используется [[:File:Detail forest.png|эта текстура]] с этим шаблоном. | ||
<div style="max-height:30em;overflow:auto;"><source lang=ini> | <div style="max-height:30em;overflow:auto;"><source lang=ini> | ||
detail | detail | ||
Line 190: | Line 186: | ||
</source></div> | </source></div> | ||
Его синтаксис: | |||
<source lang=ini> | <source lang=ini> | ||
Line 212: | Line 208: | ||
</source> | </source> | ||
Обозначение команд | Обозначение команд: | ||
; Detail type | ; Detail type | ||
: Это имя дитейла указанного в VMT материала <code>%detailtype</code>. | : Это имя дитейла указанного в VMT материала <code>%detailtype</code>. | ||
:; <code>density <[[float]]></code> | :; <code>density <[[float]]></code> | ||
:: Плотность генерации detail пропов на поверхности материала. {{tip|<code> | :: Плотность генерации detail пропов на поверхности материала. | ||
{{tip|<code>Density 1000000</code>означает, что на каждом юните будет по 1 пропу. Средняя плотность детейлов 1000-1500. (128 юнитов - 2 пропа - 256 плотность) | |||
}} | }} | ||
; Group | ; Group | ||
Line 224: | Line 221: | ||
:: Значение сдвига alpha, при котором генерируется данная группа detail проп. Каждый раз при генерации detail проп VBSP выбирает группу с ближайшим значением alpha к текущему в данной локации (месте). Если alpha не определена, все группы появятся во всех областях. | :: Значение сдвига alpha, при котором генерируется данная группа detail проп. Каждый раз при генерации detail проп VBSP выбирает группу с ближайшим значением alpha к текущему в данной локации (месте). Если alpha не определена, все группы появятся во всех областях. | ||
; Prop | ; Prop | ||
: Определяет detail prop. И хотя у него есть уникальное имя, нет возможности ссылаться на существующий проп позже в .VBSP: | : Определяет detail prop. И хотя у него есть уникальное имя, нет возможности ссылаться на существующий проп позже в .VBSP: он должен быть переопределен всякий раз, когда он нужен. И все же использовать понятные имена это неплохая идея. | ||
=== Prop настройки === | === Prop настройки === | ||
Line 234: | Line 231: | ||
; <code>minangle <float></code> | ; <code>minangle <float></code> | ||
; <code>maxangle <float></code> | ; <code>maxangle <float></code> | ||
: Регулирует генерацию на крутых поверхностях. Стандартное значение для обоих 180 градусов (без ограничений) | : Регулирует генерацию на крутых поверхностях. Стандартное значение для обоих 180 градусов (без ограничений). {{tip|Если выставить 180 и 180 (min-max) Ваша трава будет расти даже на потолке. Если выставить 0 и 180, трава будет расти всюду, кроме потолка. 45 и 180, стена под косым углом ВНИЗ - редкая растительность. 180 и 45, стена под косым углом ВВЕРХ - редкая растительность. Значение 0 и 90 - трава только на земле и склонах, но на прямой стене и потолке её не будет.}} | ||
}} | |||
==== Спрайты ==== | ==== Спрайты ==== | ||
; <code>sprite <[[int]]|X, Y, W, H, VTF width></code> | ; <code>sprite <[[int]]|X, Y, W, H, VTF width></code> | ||
: Это координаты на общей VTF текстуре, откуда берется рендер каждой отдельной травинки. | : Это координаты на общей VTF текстуре, откуда берется рендер каждой отдельной травинки. | ||
:* X/Y | :* X/Y это горизонтальная и вертикальная координаты. | ||
:* W/H это размеры (ширина, высота) в [https://developer.valvesoftware.com/wiki/Texel текстелях] | :* W/H это размеры (ширина, высота) в [https://developer.valvesoftware.com/wiki/Texel текстелях] | ||
{{bug|Любая пользовательская текстура растительности должна быть краткой дефолтной <code>detail\detailsprites</code> Иначе будет искривление рендера ! [https://developer.valvesoftware.com/wiki/Detail_props/Aspect_ratio_fix исправить это можно здесь]}} | {{bug|Любая пользовательская текстура растительности должна быть краткой дефолтной <code>detail\detailsprites</code> Иначе будет искривление рендера ! [https://developer.valvesoftware.com/wiki/Detail_props/Aspect_ratio_fix исправить это можно здесь]}} | ||
Line 252: | Line 248: | ||
:* 0: Не вращается. | :* 0: Не вращается. | ||
:* 1: спрайт всегда смотрит в камеру игрока, даже когда игрок стоит над спратом, тот словно наклоняется. | :* 1: спрайт всегда смотрит в камеру игрока, даже когда игрок стоит над спратом, тот словно наклоняется. | ||
:* 2: | :* 2: Спрайт всегда смотрит в камеру игрока, однако вращается только вокруг Z оси, по кругу. | ||
==== Шейпы-сложные формы ==== | ==== Шейпы-сложные формы ==== | ||
Line 264: | Line 260: | ||
Detail shapes доступны всего в нескольких играх, например, [[Day of Defeat: Source]], [[Counter-Strike: Source]], [[Counter-Strike: Global Offensive]], [[Garry's Mod]] и в коде SDK. Если вы попытаетесь создать шейпы в игре, где нет их поддержки, то detail props вообще не будут сгенерированы. | Detail shapes доступны всего в нескольких играх, например, [[Day of Defeat: Source]], [[Counter-Strike: Source]], [[Counter-Strike: Global Offensive]], [[Garry's Mod]] и в коде SDK. Если вы попытаетесь создать шейпы в игре, где нет их поддержки, то detail props вообще не будут сгенерированы. | ||
{{tip| Для включения шейпов в свой мод, или скомпилируйте его с <code>SDK_DLL</code> или откройте<code>\game\client\detailobjectsystem.cpp</code> | {{tip| Для включения шейпов в свой мод, или скомпилируйте его с <code>SDK_DLL</code> или откройте<code>\game\client\detailobjectsystem.cpp</code> и удалите <code>#ifdef</code> в 27 строке.}} | ||
; <code>sprite_shape <choices></code> | ; <code>sprite_shape <choices></code> | ||
: Создает набор спрайтов под разными углами, разрешая эффект псевдо-3D. | : Создает набор спрайтов под разными углами, разрешая эффект псевдо-3D. | ||
:; <code>tri</code> | :; <code>tri</code> | ||
:: | :: три спрайта посажены на одинаковом расстоянии друг от друга по углам треугольника. | ||
:; <code>cross</code> | :; <code>cross</code> | ||
:: Два спрайта пересекают друг друга крестиком по центру. | :: Два спрайта пересекают друг друга крестиком по центру. | ||
; <code>sway <[[normal]]></code> | ; <code>sway <[[normal]]></code> | ||
: Процент от <code>cl_detail_max_sway</code> определяющий насколько проп может наклониться (по умолчанию?) | : Процент от <code>cl_detail_max_sway</code> определяющий насколько проп может наклониться (по умолчанию?) | ||
{{tip|Не обязательно указывать <code>sprite_shape</code> | {{tip|Не обязательно указывать <code>sprite_shape</code> чтобы шейп покачивался, но обязательно нужна поддержка шейпов в вашей игре.}} | ||
; <code>shape_angle <[[float]]></code> | ; <code>shape_angle <[[float]]></code> | ||
: Актуально только для варианта tri (sprite_shape). Число градусов снаружи, под которыми повернуты отдельные спрайты. Внешний угол, под которым повернуты отдельные спрайты. К сожалению, нельзя указать внутренний угол по некоторым причинам! Полезные значения параметра от 0-45. | : Актуально только для варианта tri (sprite_shape). Число градусов снаружи, под которыми повернуты отдельные спрайты. Внешний угол, под которым повернуты отдельные спрайты. К сожалению, нельзя указать внутренний угол по некоторым причинам! Полезные значения параметра от 0-45. | ||
; <code>shape_size <normal></code> | ; <code>shape_size <normal></code> | ||
: Актуально только для варианта tri (sprite_shape). Процент ширины спрайта, определяющий расстояние от центра треугольника до спрайтов. 0 означает, что все спрайты будут расти из 1 точки. | : Актуально только для варианта tri (sprite_shape). Процент ширины спрайта, определяющий расстояние от центра треугольника до спрайтов. 0 означает, что все спрайты будут расти из 1 точки. | ||
Line 304: | Line 300: | ||
{{tip|Если вы коддер и вам нужно разрешить модели использовать шейдер | {{tip|Если вы коддер и вам нужно разрешить модели использовать шейдер <code>VertexLitGeneric</code>, откройте файл <code>game\client\detailobjectsystem.cpp</code> и удалите блок <code>CDetailObjectSystem::UnserializeModelDict()</code>.}} | ||
== Новые detail материалы == | == Новые detail материалы == | ||
Line 311: | Line 307: | ||
Несколько важных условий: | Несколько важных условий: | ||
* | * Нужно оставлять хотя бы 1 пиксель между двумя изображениями растительности внутри общего кастомного detailsprites, иначе в игре будет заметен переход по краям двух спрайтов. | ||
* Материал должен использовать шейдер <code>[[UnlitGeneric]]</code>. Возможно Вам пригодятся и другие переменные [[$vertexcolor]], [[$receiveflashlight]], [[$nocull]] и [[$translucent]]. | * Материал должен использовать шейдер <code>[[UnlitGeneric]]</code>. Возможно Вам пригодятся и другие переменные [[$vertexcolor]], [[$receiveflashlight]], [[$nocull]] и [[$translucent]]. | ||
* Если Вы решили заменить стандартный <code>detail\detailsprites.vmt</code>, не забудьте указать в свойствах карты ''Map > Map Properties...'' путь и имя новой текстуры. | * Если Вы решили заменить стандартный <code>detail\detailsprites.vmt</code>, не забудьте указать в свойствах карты ''Map > Map Properties...'' путь и имя новой текстуры. | ||
{{bug| Любая пользовательская текстура растительности должна быть краткой дефолтной | {{bug| Любая пользовательская текстура растительности должна быть краткой дефолтной detail\detailsprites! Иначе будет искривление рендера. [https://developer.valvesoftware.com/wiki/Detail_props/Aspect_ratio_fix Править это можно вот тут].}} | ||
== Блокировка Detail props в нежелательных зонах == | == Блокировка Detail props в нежелательных зонах == |
Revision as of 09:42, 7 February 2020


Detail props это дешевые, бесплотные объекты, которые случайным образом появляются на поверхности специальных материалов. Они исчезают из вида на определенном расстоянии от игрока (по умолчанию это 1200 юнитов). Это значит, что они годятся только для небольших объектов, таких как трава или прочая мелкая растительность.
Detail props бывает двух типов:
- Спрайты
- Двух полигональный плоский квадрат, использующий параметр $translucent внутри материала. Объект может быть настроен так, чтобы он всегда “смотрел” в сторону камеры игрока, покачивался на ветру (что уже будет ресурсоемко) и прогибался под шагами идущего. Спрайт не может проходить сквозь водную поверхность.
- Модели
- 3д модели следует использовать очень редко, если вообще использовать. Каждая модель расходует видео ресурсы DirectX, вне зависимости от того, сколько у модели полигонов, нагрузка всегда будет выше приемлемой.
Использование
Типы покрытия detail prop ("detail types") определяются скриптом файла .VBSP (Формат ANSI), и описаны в материалах с помощью параметра %detailtype. Затем VBSP рандомно генерирует detail props на поверхностях, покрытых этим материалом, при компиляции карты.
Detail props могут быть размещены в ручную в паре с prop_detail и prop_detail_sprite энтити, но это редкая практика.


Базовые типы detail
Эти типы detail доступны Source SDK Base:
Эти типы detail присутствуют, но доступны только на 3D моделях:
- swamp_land_001
- swamp_water_001
- grassland1
- grassland2
- grassland3
- rocks3
- test
- coast_pebbles
- street_junk
Новые типы detail
Здесь отображен пользовательский VBSP файл. Требуется поддержка detail shape. Используется эта текстура с этим шаблоном.
detail
{
forest_floor_01
{
density 1600
GrassTex
{
alpha 0
RoseFlower
{
sprite "0 0 83 128 512"
spritesize "0.5 0.05 7 13"
spriterandomscale .3
amount 0.02
detailorientation 2
sway 0.2
upright 1
maxangle 70
}
FernShrub
{
sprite "120 0 136 256 512"
spritesize "0.5 0.05 17 28"
spriterandomscale .15
amount 0.03
sprite_shape tri
shape_size 0
sway 0.3
upright 1
maxangle 50
}
GrassTuft
{
sprite "0 199 120 57 512"
spritesize "0.5 0 20 10"
spriterandomscale .2
amount .6
sprite_shape cross
sway .1
maxangle 95
}
PinkFlower
{
sprite "83 0 38 128 512"
spritesize "0.5 0 6 18"
spriterandomscale .1
amount 0.02
detailorientation 2
sway 0.3
upright 1
maxangle 70
}
LushShrub
{
sprite "256 128 172 128 512"
spritesize "0.5 0 32 21"
spriterandomscale .3
amount 0.01
sprite_shape tri
shape_size 0.1
sway 0.1
maxangle 40
}
}
LeavesTex
{
alpha 1
DriedGrass
{
sprite "256 0 92 120 512"
spritesize "0.5 0 13 17"
spriterandomscale .15
amount .3
sprite_shape cross
sway .3
maxangle 95
}
GrassTuft
{
sprite "0 199 120 57 512"
spritesize "0.5 0 20 10"
spriterandomscale .2
amount .6
sprite_shape cross
sway .1
maxangle 95
}
RoseFlower
{
sprite "0 0 83 128 512"
spritesize "0.5 0.05 7 13"
spriterandomscale .3
amount 0.02
detailorientation 2
sway 0.2
upright 1
maxangle 70
}
}
}
}
Его синтаксис:
detail
{
<Detail type>
{
density <float>
<Group>
{
alpha <normal>
<Prop>
{
<settings>
}
}
}
}
Обозначение команд:
- Detail type
- Это имя дитейла указанного в VMT материала
%detailtype
.density <float>
- Плотность генерации detail пропов на поверхности материала.

Density 1000000
означает, что на каждом юните будет по 1 пропу. Средняя плотность детейлов 1000-1500. (128 юнитов - 2 пропа - 256 плотность)
- Group
- Даже если вам требуется определить всего один detail prop, вам все равно необходимо создать группу (group). Имя вряд ли где-то используется, оно нужно просто для справки.
Примечание: поверхности Non-displacement используют только первую группу detail!
alpha <normal>
- Значение сдвига alpha, при котором генерируется данная группа detail проп. Каждый раз при генерации detail проп VBSP выбирает группу с ближайшим значением alpha к текущему в данной локации (месте). Если alpha не определена, все группы появятся во всех областях.
- Prop
- Определяет detail prop. И хотя у него есть уникальное имя, нет возможности ссылаться на существующий проп позже в .VBSP: он должен быть переопределен всякий раз, когда он нужен. И все же использовать понятные имена это неплохая идея.
Prop настройки
amount <normal>
- Доля от общего числа всех моделей (спрайтов) относительно указанной плотности из переменной
density
Обычно 0.1. upright <bool>
- Если указано (не важно какое значение) модель всегда будет “смотреть” вверх. Если переменной нет, модель будет ориентироваться относительно материала поверхности на которой она должна генерироваться. (расти из земли вертикально)
minangle <float>
maxangle <float>
- Регулирует генерацию на крутых поверхностях. Стандартное значение для обоих 180 градусов (без ограничений).
Совет:Если выставить 180 и 180 (min-max) Ваша трава будет расти даже на потолке. Если выставить 0 и 180, трава будет расти всюду, кроме потолка. 45 и 180, стена под косым углом ВНИЗ - редкая растительность. 180 и 45, стена под косым углом ВВЕРХ - редкая растительность. Значение 0 и 90 - трава только на земле и склонах, но на прямой стене и потолке её не будет.
Спрайты
sprite <int|X, Y, W, H, VTF width>
- Это координаты на общей VTF текстуре, откуда берется рендер каждой отдельной травинки.
- X/Y это горизонтальная и вертикальная координаты.
- W/H это размеры (ширина, высота) в текстелях

detail\detailsprites
Иначе будет искривление рендера ! исправить это можно здесь [нужно проверить в ?]spritesize <normal|U, V> <float|W, H>
- Размеры спрайта в самой игре, (U/V) - смещение.относительно точки опоры и (W/H)
spriterandomscale <normal>
- Ширина и высота спрайта. (U/V лучше не трогать)
Размер спрайта не должен быть указан как 1 и 1, его не будет в игре. Оптимальный размер от 10 до 20.
detailOrientation <int>
- Будет ли спрайт поворачиваться своим “лицом” к камере игрока:
- 0: Не вращается.
- 1: спрайт всегда смотрит в камеру игрока, даже когда игрок стоит над спратом, тот словно наклоняется.
- 2: Спрайт всегда смотрит в камеру игрока, однако вращается только вокруг Z оси, по кругу.
Шейпы-сложные формы
Шейпы это пропы, где два или три спрайта собраны в трехмерную форму. Они могут покачиваться на ветру или под воздействием проходящего игрока

Detail shapes доступны всего в нескольких играх, например, Day of Defeat: Source, Counter-Strike: Source, Counter-Strike: Global Offensive, Garry's Mod и в коде SDK. Если вы попытаетесь создать шейпы в игре, где нет их поддержки, то detail props вообще не будут сгенерированы.

SDK_DLL
или откройте\game\client\detailobjectsystem.cpp
и удалите #ifdef
в 27 строке.sprite_shape <choices>
- Создает набор спрайтов под разными углами, разрешая эффект псевдо-3D.
tri
- три спрайта посажены на одинаковом расстоянии друг от друга по углам треугольника.
cross
- Два спрайта пересекают друг друга крестиком по центру.
sway <normal>
- Процент от
cl_detail_max_sway
определяющий насколько проп может наклониться (по умолчанию?)

sprite_shape
чтобы шейп покачивался, но обязательно нужна поддержка шейпов в вашей игре.shape_angle <float>
- Актуально только для варианта tri (sprite_shape). Число градусов снаружи, под которыми повернуты отдельные спрайты. Внешний угол, под которым повернуты отдельные спрайты. К сожалению, нельзя указать внутренний угол по некоторым причинам! Полезные значения параметра от 0-45.
shape_size <normal>
- Актуально только для варианта tri (sprite_shape). Процент ширины спрайта, определяющий расстояние от центра треугольника до спрайтов. 0 означает, что все спрайты будут расти из 1 точки.
Есть также несколько консольных команд, которые воздействуют на шейпы:
cl_detail_avoid_force
- Избегать генерации при воздействии игрока.
cl_detail_avoid_radius
- Радиус вокруг спрайта; если игрок находится в его пределах, спрайт не будет сгенерирован.
cl_detail_avoid_recover_speed
- определяет насколько быстро восстанавливается спрайт после взаимодействия с игроком.
cl_detail_max_sway
- Амплитуда покачиваний detail prop.
Если в игре вы не нашли этих команд, значит, игра не поддерживает шейпы.
Модели
Помните, что модели отнимают намного больше ресурсов, чем спрайты. Используйте их крайне осторожно.
Хорошими кандидатами для 3д флоры являются, маленькие камушки, упавшие ветви, продолговатые растения, как плющ или кусты сложной формы. Для простой вертикальной растительности лучше выбирать спрайты.
model <string>
- Чтобы модель могла быть использована как Prop Detail, внутри её QC должна быть строка $staticprop, а материал vmt должен использовать шейдер UnlitGeneric.
Размещайте модели в папке Models и не путайтесь в путях.

VertexLitGeneric
, откройте файл game\client\detailobjectsystem.cpp
и удалите блок CDetailObjectSystem::UnserializeModelDict()
.Новые detail материалы

Несколько важных условий:
- Нужно оставлять хотя бы 1 пиксель между двумя изображениями растительности внутри общего кастомного detailsprites, иначе в игре будет заметен переход по краям двух спрайтов.
- Материал должен использовать шейдер
UnlitGeneric
. Возможно Вам пригодятся и другие переменные $vertexcolor, $receiveflashlight, $nocull и $translucent. - Если Вы решили заменить стандартный
detail\detailsprites.vmt
, не забудьте указать в свойствах карты Map > Map Properties... путь и имя новой текстуры.

Блокировка Detail props в нежелательных зонах
Если вам нужно исключить генерацию пропов в определенной зоне, воспользуйтесь энтити func_detail_blocker (Доступно только в Portal 2, Alien Swarm, Left 4 Dead 2, Counter-Strike: Global Offensive, и Garry's Mod.)