Ru/Detail props: Difference between revisions

From Valve Developer Community
< Ru
Jump to navigation Jump to search
No edit summary
m (Setting bug notice hidetested=1 param on page where the bug might not need tested in param specified)
 
(34 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{lang|Detail_props}}
{{LanguageBar}}
{{update}}


[[File:Dear-esther henge.jpg|thumb|250px|Detail prop на этом скриншоте взят из [[Dear Esther]].]]


[[File:Orion june2009 prev01.jpg|thumb|250px|Detail props отражается на воде в [[Orion]] скрине. Обратите внимание на Дальний склон холма, за пределами исчезающего расстояния.]]
[[File:Dear-esther henge.jpg|thumb|250px|Detail prop на этом скриншоте взят из {{L|Dear Esther}}.]]
[[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 материалов]. They fade out at a distance (by default 1200 [[unit]]s), so are only good for small, surface-hugging features like grass and shrubs.
[[File:Orion june2009 prev01.jpg|thumb|250px|Detail props отражается на воде в {{L|Orion}} скрине. Обратите внимание на склон холма вдали, который находится за пределами затухания.]]
[[File:Prison Island flora.jpg|thumb|250px|Detail props смешан с {{L|prop_static|static props}} в {{L|Prison Island}}.]]


There are two types of detail prop:
'''Detail props''' это [https://developer.valvesoftware.com/wiki/Cheap дешевые], бесплотные объекты, которые случайным образом появляются на поверхности специальных [https://developer.valvesoftware.com/wiki/Material:ru материалов]. Они исчезают из вида на определенном расстоянии от игрока (по умолчанию это 1200 юнитов). Это значит, что они годятся только для небольших объектов, таких как трава или прочая мелкая растительность.


; [[Sprite]]
Detail props бывает двух типов:
: Two [[polygon]]s forming a square, covered with a [[$translucent]] material. The prop can be configured to rotate so that it always faces the camera, to sway in the breeze (which soon becomes costly), and/or to bend as players brush past. Cannot cross the surface of [[water]].
; [[Model]]
: 3D models should be used sparsely, if at all. There is a per-object DirectX overhead that becomes more and more pronounced as the number of models increases, regardless of how many polygons are being drawn.


== Usage ==
; [https://developer.valvesoftware.com/wiki/Sprite Спрайты]
: Двух полигональный плоский квадрат, использующий параметр {{L|$translucent}} внутри материала. Объект может быть настроен так, чтобы он всегда “смотрел” в сторону камеры игрока, покачивался на ветру (что уже будет ресурсоемко) и прогибался под шагами идущего. Спрайт не может проходить сквозь [https://developer.valvesoftware.com/wiki/Water водную поверхность].
; [https://developer.valvesoftware.com/wiki/Model Модели]
: 3д модели следует использовать очень редко, если вообще использовать. Каждая модель расходует видео ресурсы DirectX, вне зависимости от того, сколько у модели полигонов, нагрузка всегда будет выше приемлемой.
== Использование ==


Types of detail prop cover ("detail types") are defined in a <code>.vbsp</code> script file (in ANSI format), and referenced in materials with the '''<code>%detailtype</code>''' parameter. [[VBSP]] then generates detail props on the material randomly when the map is compiled.
Типы покрытия detail prop ("detail types") определяются скриптом файла .VBSP (Формат ANSI), и описаны в материалах с помощью параметра ''%detailtype''. Затем {{L|VBSP}} рандомно генерирует detail props на поверхностях, покрытых этим материалом, при компиляции карты.


Detail props ''can'' be placed manually with the [[prop_detail]] and [[prop_detail_sprite]] entities, but doing so is rare.
Detail props могут быть размещены в ручную в паре с {{L|prop_detail}} и {{L|prop_detail_sprite}} энтити, но это редкая практика.


{{tip|The default VBSP file is <code>root\detail.vbsp</code>, but you can create your own as long as you remember to change the corresponding [[worldspawn]] setting (Map > Map Properties...). See [[#New detail types|New detail types↓]].}}
{{tip|Стандартный VBSP файл находится в root\detail.vbsp (например Half-life 2/ep2/detail.vbsp), но вы можете создать и свой собственный, только не забудьте изменить в Valve Hammer переменную “Detail vbsp file” во вкладке (Map > Map Properties…
}}


{{tip|Place {{l4D add|[[func_detail_blocker]]}} to suppress detail sprites.}}
{{tip|Используйте брашевую энтити {{l4D add|{{L|func_detail_blocker}}}} (впервые появился в Left 4 Dead) для подавления генерации detail sprites в нежелательных зонах.
}}


== Stock detail types==
== Базовые типы detail==
 
These types are available in [[Source SDK Base]]:


Эти типы detail доступны {{L|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 66: Line 68:
|}
|}


These types are present but rely on unavailable models:
Эти типы detail присутствуют, но доступны только на 3D моделях:


* swamp_land_001
* swamp_land_001
Line 78: Line 80:
* street_junk
* street_junk


== New detail types==
== Новые типы detail==


Here is a custom .VBSP file. It requires [[#Shapes|detail shape support]]. Use [[:File:Detail forest.png|this detail texture]] with it.
Здесь отображен пользовательский 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>
Line 186: Line 188:
</source></div>
</source></div>


The syntax is:
Его синтаксис:


<source lang=ini>
<source lang=ini>
Line 208: Line 210:
</source>
</source>


The commands are:
Обозначение команд:


; Detail type
; Detail type
: The name for use in <code>%detailtype</code>.
: Это имя дитейла указанного в VMT материала <code>%detailtype</code>.
:; <code>density <[[float]]></code>
:; <code>density <{{L|float}}></code>
:: How frequently to generate detail props on surfaces using this type. The equation is (surface area * density * 0.000001). {{tip|<code>density 1000000</code> means one detail prop per [[unit]]. Values of 1000 to 1500 are generally used.}}
:: Плотность генерации detail пропов на поверхности материала.  
{{tip|<code>Density 1000000</code>означает, что на каждом юните будет по 1 пропу. Средняя плотность детейлов 1000-1500. (128 юнитов - 2 пропа - 256 плотность)
}}
; Group
; Group
: Even if you are only defining one detail prop, you must create a group. The name doesn't seem to be used anywhere; it's just for reference. {{note|Non-displacement surfaces use only the first detail group!}}
: Даже если вам требуется определить всего один detail prop, вам все равно необходимо создать группу (group). Имя вряд ли где-то используется, оно нужно просто для справки. {{note| поверхности Non-displacement используют только первую группу detail!}}
:; <code>alpha <[[normal]]></code>
:; <code>alpha <{{L|normal}}></code>
:: The [[displacement]] alpha value on which the current prop group prefers to be generated. Every time a detail prop is generated, VBSP will choose from the group with the closest alpha value to the one at the current location. If <code>alpha</code> is undefined, all groups will appear in all areas.
:: Значение сдвига alpha, при котором генерируется данная группа detail проп. Каждый раз при генерации detail проп VBSP выбирает группу с ближайшим значением alpha к текущему в данной локации (месте). Если alpha не определена, все группы появятся во всех областях.
; Prop
; Prop
: Defines a detail prop. Although uniquely named, there is no way to reference an existing prop later on in the .VBSP: it must be redefined every time it's needed. It's still a good idea to use descriptive names, though!
: Определяет detail prop. И хотя у него есть уникальное имя, нет возможности ссылаться на существующий проп позже в .VBSP: он должен быть переопределен всякий раз, когда он нужен. И все же использовать понятные имена это неплохая идея.


=== Prop settings ===
=== Prop настройки ===


; <code>amount <[[normal]]></code>
; <code>amount <{{L|normal}}></code>
: The proportion of the group that this model (or sprite) will account for. If the <code>amount</code> values of a group add up to less than 1, fewer detail props will be emitted than specified by <code>density</code>.
: Доля от общего числа всех моделей (спрайтов) относительно указанной плотности из переменной <code>density</code> Обычно 0.1.
; <code>upright <[[bool]]></code>
; <code>upright <{{L|bool}}></code>
: If present (with any value), the model will always point directly upwards. If not present, the model will orient itself to the angle of the surface it sits on.
: Если указано (не важно какое значение) модель всегда будет “смотреть” вверх. Если переменной нет, модель будет ориентироваться относительно материала поверхности на которой она должна генерироваться. (расти из земли вертикально)
; <code>minangle <float></code>
; <code>minangle <float></code>
; <code>maxangle <float></code>
; <code>maxangle <float></code>
: Used to control emission on steep surfaces. Default values for both are 180 (no restriction). {{tip|By setting a high <code>minangle</code> you can target overhangs.}}
: Регулирует генерацию на крутых поверхностях. Стандартное значение для обоих 180 градусов (без ограничений). {{tip|Если выставить 180 и 180 (min-max) Ваша трава будет расти даже на потолке. Если выставить 0 и 180, трава будет расти всюду, кроме потолка. 45 и 180, стена под косым углом ВНИЗ - редкая растительность. 180 и 45, стена под косым углом ВВЕРХ - редкая растительность. Значение 0 и 90 - трава только на земле и склонах, но на прямой стене и потолке её не будет.}}


==== Sprites ====
==== Спрайты ====
 
; <code>sprite <{{L|int}}|X, Y, W, H, VTF width></code>
; <code>sprite <[[int]]|X, Y, W, H, VTF width></code>
: Это координаты на общей VTF текстуре, откуда берется рендер каждой отдельной травинки.
: The subregion of the map's detail material to use for this prop.
:* X/Y это горизонтальная и вертикальная координаты.
:* X/Y are the top-left position
:* W/H это размеры (ширина, высота) в [https://developer.valvesoftware.com/wiki/Texel текстелях]
:* W/H are the dimensions of the prop in [[texel]]s
{{bug|hidetested=1|Любая пользовательская текстура растительности должна быть краткой дефолтной <code>detail\detailsprites</code> Иначе будет искривление рендера ! [https://developer.valvesoftware.com/wiki/Detail_props/Aspect_ratio_fix исправить это можно здесь]}}
:* VTF width is the X-axis resolution of the whole detail texture. {{bug|In Valve's code any custom texture must be of the same aspect ratio as <code>detail\detailsprites</code>! [[Detail props/Aspect ratio fix|Get the fix here.]]}}
; <code>spritesize <normal|U, V> <{{L|float}}|W, H></code>
; <code>spritesize <normal|U, V> <[[float]]|W, H></code>
: Размеры спрайта в самой игре, (U/V) - смещение.относительно точки опоры и (W/H)
: The origin (U/V) and size in [[unit]]s (W/H) of the sprite when it is in the world.
; <code>spriterandomscale <normal></code>
; <code>spriterandomscale <normal></code>
: The sprite's size will vary from 100% by this degree. A value of 1 means that the sprite could be generated at anything between 0% and 200% of its normal size.
: Ширина и высота спрайта. (U/V лучше не трогать)
Размер спрайта не должен быть указан как 1 и 1, его не будет в игре. Оптимальный размер от 10 до 20.
; <code>detailOrientation <int></code>
; <code>detailOrientation <int></code>
: How the sprite will react to the camera:
: Будет ли спрайт поворачиваться своим “лицом” к камере игрока:
:* 0: It will not rotate.
:* 0: Не вращается.
:* 1: It will rotate around its origin to always face the camera head-on
:* 1: спрайт всегда смотрит в камеру игрока, даже когда игрок стоит над спратом, тот словно наклоняется.
:* 2: It will rotate around its Z-axis only to face the camera. This is the most common setting, as it foreshortens the sprite while keeping it otherwise head-on.
:* 2: Спрайт всегда смотрит в камеру игрока, однако вращается только вокруг Z оси, по кругу.


==== Shapes ====
==== Шейпы-сложные формы ====


[[File:Detail shape tri.jpg|thumb|200px|<code>sprite_shape tri</code>]]
[[File:Detail shape tri.jpg|thumb|200px|<code>sprite_shape tri</code>]]
[[File:Detail shape cross.jpg|thumb|200px|<code>sprite_shape cross</code>]]
[[File:Detail shape cross.jpg|thumb|200px|<code>sprite_shape cross</code>]]
Shapes are props where two or three sprites are arranged in a 3D shape. They can be made to sway as if in a breeze, and can bend away from intersecting players.
Шейпы это пропы, где два или три спрайта собраны в трехмерную форму. Они могут покачиваться на ветру или под воздействием проходящего игрока


{{warning|Shapes place more load on the GPU, while sway places more load on the CPU. Use both as sparingly as possible. (The [[Dear Esther]] team have developed GPU-accelerated sway which is faster and more realistic, but their code is unreleased.)}}
{{warning|Генерация шейпов сильнее грузят GPU, в то время покачивание шейпов нагружает CPU. Используйте их как можно меньше. (Команда разработчиков Dear Esther разработала покачивания шейпов с обработкой на GPU, они более реалистичные и быстрые, но их код не вошел в релиз.)}}


Detail shapes are only available in some games, for example [[Day of Defeat: Source]], [[Counter-Strike: Source]], [[Counter-Strike: Global Offensive]], [[Garry's Mod]] and the SDK source code. If you try to create shapes in a game without support for them, the detail props will not be created at all.
Detail shapes доступны всего в нескольких играх, например, {{L|Day of Defeat: Source}}, {{L|Counter-Strike: Source}}, {{L|Counter-Strike: Global Offensive}}, {{L|Garry's Mod}} и в коде SDK. Если вы попытаетесь создать шейпы в игре, где нет их поддержки, то detail props вообще не будут сгенерированы.


{{tip|To enable shapes in your mod, either compile with <code>SDK_DLL</code> or open <code>\game\client\detailobjectsystem.cpp</code> and remove the <code>#ifdef</code> from line 27.}}
{{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>
: Creates a set of sprites at different angles, allowing for a pseudo-3D effect.
: Создает набор спрайтов под разными углами, разрешая эффект псевдо-3D.
:; <code>tri</code>
:; <code>tri</code>
:: Three sprites sitting equidistant from each other in a triangle formation.
:: три спрайта посажены на одинаковом расстоянии друг от друга по углам треугольника.
:; <code>cross</code>
:; <code>cross</code>
:: Two sprites which cross over one another in the middle.
:: Два спрайта пересекают друг друга крестиком по центру.
; <code>sway <[[normal]]></code>
; <code>sway <{{L|normal}}></code>
: Percentage of <code>cl_detail_max_sway</code> that the prop bends to. {{tip|The prop doesn't need a <code>sprite_shape</code> to sway, but you ''do'' need shape support in your game.}}
: Процент от <code>cl_detail_max_sway</code> определяющий насколько проп может наклониться (по умолчанию?)
; <code>shape_angle <[[float]]></code>
{{tip|Не обязательно указывать <code>sprite_shape</code> чтобы шейп покачивался, но обязательно нужна поддержка шейпов в вашей игре.}}
: ''sprite_shape tri only.'' Number of degrees outward at which to angle the individual sprites. Unfortunately it is not possible to angle inward, for some reason! Useful range is 0-45.
; <code>shape_angle <{{L|float}}></code>
: Актуально только для варианта tri (sprite_shape). Число градусов снаружи, под которыми повернуты отдельные спрайты. Внешний угол, под которым повернуты отдельные спрайты. К сожалению, нельзя указать внутренний угол по некоторым причинам! Полезные значения параметра от 0-45.
; <code>shape_size <normal></code>
; <code>shape_size <normal></code>
: ''sprite_shape tri only.'' Percentage of the sprites' width to put between them and the centre of the triangle. 0 means that the sprites cross at the prop's origin.
: Актуально только для варианта tri (sprite_shape). Процент ширины спрайта, определяющий расстояние от центра треугольника до спрайтов. 0 означает, что все спрайты будут расти из 1 точки.


There are several console commands which affect shapes:
Есть также несколько консольных команд, которые воздействуют на шейпы:


; <code>cl_detail_avoid_force</code>
; <code>cl_detail_avoid_force</code>
: Force with which to avoid players.
: Избегать генерации при воздействии игрока.
; <code>cl_detail_avoid_radius</code>
; <code>cl_detail_avoid_radius</code>
: Radius around sprite to avoid players.
: Радиус вокруг спрайта; если игрок находится в его пределах, спрайт не будет сгенерирован.
; <code>cl_detail_avoid_recover_speed</code>
; <code>cl_detail_avoid_recover_speed</code>
: How fast to recover position after avoiding players.
: определяет насколько быстро восстанавливается спрайт после взаимодействия с игроком.
; <code>cl_detail_max_sway</code>
; <code>cl_detail_max_sway</code>
: Amplitude of the detail prop sway.
: Амплитуда покачиваний detail prop.


If you can't find these, then there is no detail shape support.
Если в игре вы не нашли этих команд, значит, игра не поддерживает шейпы.


==== Models ====
==== Модели ====


Remember that models have a performance overhead that sprites do not. Use them only when needed!
Помните, что модели отнимают намного больше ресурсов, чем спрайты. Используйте их крайне осторожно.


Good candidates for models are contiguous objects that need to spread out along the ground, like small rocks, fallen branches and ground-covering plants including ivy and brambles. Things that stand upright are better off as sprites or shapes.
Хорошими кандидатами для 3д флоры являются, маленькие камушки, упавшие ветви, продолговатые растения, как плющ или кусты сложной формы. Для простой вертикальной растительности лучше выбирать спрайты.


; <code>model <[[string]]></code>
; <code>model <{{L|string}}></code>
: A [[model]] to use; must be [[$staticprop]] and <code>[[UnlitGeneric]]</code> (ALL skins). Include <code>\models</code> and <code>.mdl</code> in the path.
: Чтобы модель могла быть использована как Prop Detail, внутри её QC должна быть строка $staticprop, а материал vmt должен использовать шейдер UnlitGeneric.
Размещайте модели в папке Models и не путайтесь в путях.


{{tip|To allow <code>[[VertexLitGeneric]]</code> models, open <code>game\client\detailobjectsystem.cpp</code>
and remove the conditional block from <code>CDetailObjectSystem::UnserializeModelDict()</code>.}}


== New detail materials ==
{{tip|Если вы коддер и вам нужно разрешить модели использовать шейдер <code>VertexLitGeneric</code>, откройте файл <code>game\client\detailobjectsystem.cpp</code> и удалите блок <code>CDetailObjectSystem::UnserializeModelDict()</code>.}}
 
== Новые detail материалы ==


[[File:Detail forest.png|thumb|200px|The [[#New detail types|sample .VBSP]]'s detail texture.]]
[[File:Detail forest.png|thumb|200px|The [[#New detail types|sample .VBSP]]'s detail texture.]]


There are a few hoops to jump through when creating new detail sprite materials:
Несколько важных условий:
 
* Нужно оставлять хотя бы 1 пиксель между двумя изображениями растительности внутри общего кастомного detailsprites, иначе в игре будет заметен переход по краям двух спрайтов.
* Leave at least a one-pixel gap between subregions, or you may find parts of one sprite bleeding over into the next.
* Материал должен использовать шейдер <code>{{L|UnlitGeneric}}</code>. Возможно Вам пригодятся и другие переменные {{L|$vertexcolor}}, {{L|$receiveflashlight}}, {{L|$nocull}} и {{L|$translucent}}.
* The material must be <code>[[UnlitGeneric]]</code>. You'll probably want to use the [[$vertexcolor]], [[$receiveflashlight]], [[$nocull]] and [[$translucent]] parameters.
* Если Вы решили заменить стандартный <code>detail\detailsprites.vmt</code>, не забудьте указать в свойствах карты ''Map > Map Properties...'' путь и имя новой текстуры.
* Unless you are overwriting <code>detail\detailsprites.vmt</code>, mappers must remember to select the correct material in ''Map > Map Properties...''.
 
{{bug|In Valve's code, detail textures at custom locations must be of the same aspect ratio as <code>detail\detailsprites</code>. [[Detail props/Aspect ratio fix|You can fix this if you are shipping your own binaries.]]}}


== Blocking detail props ==
{{bug|hidetested=1| Любая пользовательская текстура растительности должна быть краткой дефолтной detail\detailsprites! Иначе будет искривление рендера. [https://developer.valvesoftware.com/wiki/Detail_props/Aspect_ratio_fix Править это можно вот тут].}}


If you do not want to have detail props being generated in a specific area, use [[func_detail_blocker]] (Only available in [[Portal 2]], [[Alien Swarm]], [[Left 4 Dead 2]], [[Counter-Strike: Global Offensive]], and [[Garry's Mod]].)
== Блокировка Detail props в нежелательных зонах ==


[[Category:Level Design]]
Если вам нужно исключить генерацию пропов в определенной зоне, воспользуйтесь энтити {{L|func_detail_blocker}} (Доступно только в {{L|Portal 2}}, {{L|Alien Swarm}}, {{L|Left 4 Dead 2}}, {{L|Counter-Strike: Global Offensive}}, и {{L|Garry's Mod}}.)
{{ACategory|Level Design}}

Latest revision as of 07:18, 20 May 2025

English (en)Русский (ru)Translate (Translate)
Broom icon.png
This article or section needs to be updated to include current information regarding the subject.
Remember to check for any notes left by the tagger at this article's talk page.


Detail prop на этом скриншоте взят из Dear Esther(en).
Detail props отражается на воде в Orion(en) скрине. Обратите внимание на склон холма вдали, который находится за пределами затухания.
Detail props смешан с static props(en) в Prison Island(en).

Detail props это дешевые, бесплотные объекты, которые случайным образом появляются на поверхности специальных материалов. Они исчезают из вида на определенном расстоянии от игрока (по умолчанию это 1200 юнитов). Это значит, что они годятся только для небольших объектов, таких как трава или прочая мелкая растительность.

Detail props бывает двух типов:

Спрайты
Двух полигональный плоский квадрат, использующий параметр $translucent(en) внутри материала. Объект может быть настроен так, чтобы он всегда “смотрел” в сторону камеры игрока, покачивался на ветру (что уже будет ресурсоемко) и прогибался под шагами идущего. Спрайт не может проходить сквозь водную поверхность.
Модели
3д модели следует использовать очень редко, если вообще использовать. Каждая модель расходует видео ресурсы DirectX, вне зависимости от того, сколько у модели полигонов, нагрузка всегда будет выше приемлемой.

Использование

Типы покрытия detail prop ("detail types") определяются скриптом файла .VBSP (Формат ANSI), и описаны в материалах с помощью параметра %detailtype. Затем VBSP(en) рандомно генерирует detail props на поверхностях, покрытых этим материалом, при компиляции карты.

Detail props могут быть размещены в ручную в паре с prop_detail(en) и prop_detail_sprite(en) энтити, но это редкая практика.

Tip.pngСовет:Стандартный VBSP файл находится в root\detail.vbsp (например Half-life 2/ep2/detail.vbsp), но вы можете создать и свой собственный, только не забудьте изменить в Valve Hammer переменную “Detail vbsp file” во вкладке (Map > Map Properties…
Tip.pngСовет:Используйте брашевую энтити Template:L4D add (впервые появился в Left 4 Dead) для подавления генерации detail sprites в нежелательных зонах.

Базовые типы detail

Эти типы detail доступны Source SDK Base(en):

Type View
swamp_land_002
grass01 Grass01.jpg
grass02 Grass02.jpg
coastline_grass01 Coastline grass01.jpg
coastline_grass02 Coastline grass02.jpg
coastline_redgrass01 Coastline redgrass01.jpg
coastline_redgrass02 Coastline redgrass02.jpg
coastline_redgrass03 Coastline redgrass03.jpg
citygrass01 Citygrass01.jpg
redgrass Redgrass.jpg
redgrass_light Redgrass light.jpg
short_redgrass Short redgrass.jpg
canal_reeds Canal reeds.jpg
PerfTest1
lostcoast_grass
lostcoast_grass2

Эти типы 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(en)>
Плотность генерации detail пропов на поверхности материала.
Tip.pngСовет:Density 1000000означает, что на каждом юните будет по 1 пропу. Средняя плотность детейлов 1000-1500. (128 юнитов - 2 пропа - 256 плотность)
Group
Даже если вам требуется определить всего один detail prop, вам все равно необходимо создать группу (group). Имя вряд ли где-то используется, оно нужно просто для справки.
Note.pngПримечание: поверхности Non-displacement используют только первую группу detail!
alpha <normal(en)>
Значение сдвига alpha, при котором генерируется данная группа detail проп. Каждый раз при генерации detail проп VBSP выбирает группу с ближайшим значением alpha к текущему в данной локации (месте). Если alpha не определена, все группы появятся во всех областях.
Prop
Определяет detail prop. И хотя у него есть уникальное имя, нет возможности ссылаться на существующий проп позже в .VBSP: он должен быть переопределен всякий раз, когда он нужен. И все же использовать понятные имена это неплохая идея.

Prop настройки

amount <normal(en)>
Доля от общего числа всех моделей (спрайтов) относительно указанной плотности из переменной density Обычно 0.1.
upright <bool(en)>
Если указано (не важно какое значение) модель всегда будет “смотреть” вверх. Если переменной нет, модель будет ориентироваться относительно материала поверхности на которой она должна генерироваться. (расти из земли вертикально)
minangle <float>
maxangle <float>
Регулирует генерацию на крутых поверхностях. Стандартное значение для обоих 180 градусов (без ограничений).
Tip.pngСовет:Если выставить 180 и 180 (min-max) Ваша трава будет расти даже на потолке. Если выставить 0 и 180, трава будет расти всюду, кроме потолка. 45 и 180, стена под косым углом ВНИЗ - редкая растительность. 180 и 45, стена под косым углом ВВЕРХ - редкая растительность. Значение 0 и 90 - трава только на земле и склонах, но на прямой стене и потолке её не будет.

Спрайты

sprite <int(en)|X, Y, W, H, VTF width>
Это координаты на общей VTF текстуре, откуда берется рендер каждой отдельной травинки.
  • X/Y это горизонтальная и вертикальная координаты.
  • W/H это размеры (ширина, высота) в текстелях
Icon-Bug.pngБаг:Любая пользовательская текстура растительности должна быть краткой дефолтной detail\detailsprites Иначе будет искривление рендера ! исправить это можно здесь
spritesize <normal|U, V> <float(en)|W, H>
Размеры спрайта в самой игре, (U/V) - смещение.относительно точки опоры и (W/H)
spriterandomscale <normal>
Ширина и высота спрайта. (U/V лучше не трогать)

Размер спрайта не должен быть указан как 1 и 1, его не будет в игре. Оптимальный размер от 10 до 20.

detailOrientation <int>
Будет ли спрайт поворачиваться своим “лицом” к камере игрока:
  • 0: Не вращается.
  • 1: спрайт всегда смотрит в камеру игрока, даже когда игрок стоит над спратом, тот словно наклоняется.
  • 2: Спрайт всегда смотрит в камеру игрока, однако вращается только вокруг Z оси, по кругу.

Шейпы-сложные формы

sprite_shape tri
sprite_shape cross

Шейпы это пропы, где два или три спрайта собраны в трехмерную форму. Они могут покачиваться на ветру или под воздействием проходящего игрока

Warning.pngПредупреждение:Генерация шейпов сильнее грузят GPU, в то время покачивание шейпов нагружает CPU. Используйте их как можно меньше. (Команда разработчиков Dear Esther разработала покачивания шейпов с обработкой на GPU, они более реалистичные и быстрые, но их код не вошел в релиз.)

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

Tip.pngСовет: Для включения шейпов в свой мод, или скомпилируйте его с SDK_DLL или откройте\game\client\detailobjectsystem.cpp и удалите #ifdef в 27 строке.
sprite_shape <choices>
Создает набор спрайтов под разными углами, разрешая эффект псевдо-3D.
tri
три спрайта посажены на одинаковом расстоянии друг от друга по углам треугольника.
cross
Два спрайта пересекают друг друга крестиком по центру.
sway <normal(en)>
Процент от cl_detail_max_sway определяющий насколько проп может наклониться (по умолчанию?)
Tip.pngСовет:Не обязательно указывать sprite_shape чтобы шейп покачивался, но обязательно нужна поддержка шейпов в вашей игре.
shape_angle <float(en)>
Актуально только для варианта 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(en)>
Чтобы модель могла быть использована как Prop Detail, внутри её QC должна быть строка $staticprop, а материал vmt должен использовать шейдер UnlitGeneric.

Размещайте модели в папке Models и не путайтесь в путях.


Tip.pngСовет:Если вы коддер и вам нужно разрешить модели использовать шейдер VertexLitGeneric, откройте файл game\client\detailobjectsystem.cpp и удалите блок CDetailObjectSystem::UnserializeModelDict().

Новые detail материалы

The sample .VBSP's detail texture.

Несколько важных условий:

  • Нужно оставлять хотя бы 1 пиксель между двумя изображениями растительности внутри общего кастомного detailsprites, иначе в игре будет заметен переход по краям двух спрайтов.
  • Материал должен использовать шейдер UnlitGeneric(en). Возможно Вам пригодятся и другие переменные $vertexcolor(en), $receiveflashlight(en), $nocull(en) и $translucent(en).
  • Если Вы решили заменить стандартный detail\detailsprites.vmt, не забудьте указать в свойствах карты Map > Map Properties... путь и имя новой текстуры.
Icon-Bug.pngБаг: Любая пользовательская текстура растительности должна быть краткой дефолтной detail\detailsprites! Иначе будет искривление рендера. Править это можно вот тут.

Блокировка Detail props в нежелательных зонах

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