Ru/Decals: Difference between revisions
(More translation) |
(Fixes and more translation) |
||
Line 3: | Line 3: | ||
|en=Decals | |en=Decals | ||
}} | }} | ||
[[File:Decal06.jpg|thumb|Декаль, размещенная дизайнером уровней.]] [[File:Decal03.jpg|thumb|Следы от пуль сгенерированные игрой автоматически.]] | |||
Когда игрок стреляет из своего оружия в стену, на ней остается след, который называется декаль (decal). Легче всего представить это как невидимый объект, который прикреплен к поверхности. Плакаты, дырки от пуль, буквы на стенах могут быть созданы с помощью декалей. Декали "прилепают" к объектам, на которые они помещены. К примеру декаль на лестнице каскадом спроецируется вниз, а не будет висеть в воздухе. Вы можете так же использовать декали для нанесения трафаретных букв на стены, чтобы помечать какие-либо места на вашей карте. | Когда игрок стреляет из своего оружия в стену, на ней остается след, который называется декаль (decal). Легче всего представить это как невидимый объект, который прикреплен к поверхности. Плакаты, дырки от пуль, буквы на стенах могут быть созданы с помощью декалей. Декали "прилепают" к объектам, на которые они помещены. К примеру декаль на лестнице каскадом спроецируется вниз, а не будет висеть в воздухе. Вы можете так же использовать декали для нанесения трафаретных букв на стены, чтобы помечать какие-либо места на вашей карте. | ||
{{note:ru|Каждая декаль влияет только на одну энтити ([[The_world|Мир]] это тоже одна большая энтити)}} | |||
Создать декаль не сложно: это обычный материал, у которого есть ''альфа-канал'' и который использует <code>[[DecalModulate]]</code>. | Создать декаль не сложно: это обычный материал, у которого есть ''альфа-канал'' и который использует <code>[[DecalModulate]]</code>. | ||
До того как читать дальше эту статью рекомендуем вам ознакомится со статьей про [[ | До того как читать дальше эту статью рекомендуем вам ознакомится со статьей про [[Creating_a_Material:ru|создание материалов]]. | ||
== Обычные декали == | == Обычные декали == | ||
Line 31: | Line 36: | ||
; <code>$decalscale <[[float]]></code> | ; <code>$decalscale <[[float]]></code> | ||
: Параметр, который отвечает за разрешение декали. По умолчанию 1 пиксель изображения принимается за один дюйм в игре. Если исходная текстура декали 128 пикселей по ширине, то ее ширина в игре при настройке <code>$decalscale 0.1</code> будет 12.8 дюймов в игре. | : Параметр, который отвечает за разрешение декали. По умолчанию 1 пиксель изображения принимается за один дюйм в игре. Если исходная текстура декали 128 пикселей по ширине, то ее ширина в игре при настройке <code>$decalscale 0.1</code> будет 12.8 дюймов в игре. | ||
:{{tip:ru|Декаль не может быть отображена с большим разрешением, чем поверхность к которой она прикреплена. [[ | :{{tip:ru|Декаль не может быть отображена с большим разрешением, чем поверхность к которой она прикреплена. [[Hammer_Overlay_Tool|Оверлеи]] могут, но они больше нагружают процессор.}} | ||
; <code>$translucent <bool></code> | ; <code>$translucent <bool></code> | ||
: См. <code>[[ | : См. <code>[[$translucent]]</code>. | ||
; <code>$modelmaterial <material></code> | ; <code>$modelmaterial <material></code> | ||
: Материал <code>[[VertexLitGeneric]]</code>, который будет применяться к моделям | : Материал <code>[[VertexLitGeneric]]</code>, который будет применяться к моделям | ||
Line 41: | Line 46: | ||
: Задержка перед исчезновением декали | : Задержка перед исчезновением декали | ||
; <code>$decalsecondpass</code> | ; <code>$decalsecondpass</code> | ||
: {{ | : Если выключено, то всегда рендерить эту декаль поверх остальных. Если две декали с этим параметром установленным в <code>true</code> пересекаются, то они ведут себя также, как декали без этого параметра. | ||
; <code>$fogscale <float></code> | |||
: {{note:ru|Найдено в L4D2 <code>decals/checkpoint01_black.vmt</code> (использует DecalModulate шейдер)}} | |||
Декали не поддерживают [[$bumpmap]] и [[$envmap]]. | |||
== Декали на моделях == | == Декали на моделях == | ||
{{note:ru|Декали которые должны проецироваться на [[Model:ru|модели]] (например кровь) должны использовать <code>[[VertexLitGeneric]]</code> или <code>[[DecalModulate]]</code>. <code>[[LightmappedGeneric]]</code> будет работать только с [[brush:ru|брашами]].}} | {{note:ru|Декали, которые должны проецироваться на [[Model:ru|модели]] (например кровь) должны использовать <code>[[VertexLitGeneric]]</code> или <code>[[DecalModulate]]</code>. <code>[[LightmappedGeneric]]</code> будет работать только с [[brush:ru|брашами]].}} | ||
=== Hammer === | === Hammer === | ||
Line 52: | Line 61: | ||
*Объект [[info_projecteddecal:ru|info_projecteddecal]] может быть использован для проецирования декали на любые браши или модели. | *Объект [[info_projecteddecal:ru|info_projecteddecal]] может быть использован для проецирования декали на любые браши или модели. | ||
== C++ == | |||
Декали могут быть созданы на клиенте с помощью функции <code>C_BaseEntity::AddDecal()</code>. Изнутри она вызывает <code>AddStudioDecal()</code> или <code>AddBrushModelDecal()</code> в зависимости от того, имеет ли энтити браш или модель. Параметры для этих функций: | Декали могут быть созданы на клиенте с помощью функции <code>C_BaseEntity::AddDecal()</code>. Изнутри она вызывает <code>AddStudioDecal()</code> или <code>AddBrushModelDecal()</code> в зависимости от того, имеет ли энтити браш или модель. Параметры для этих функций: | ||
Line 74: | Line 83: | ||
int UTIL_PrecacheDecal( const char *filename, bool preload );</source> | int UTIL_PrecacheDecal( const char *filename, bool preload );</source> | ||
== | == Использование модуляции == | ||
For decals intended to mimic the look of pock marks or dents in a surface, the <code>[[DecalModulate]]</code> (a.k.a. mod2x) shader is especially suitable: it lightens destination pixels for every source pixel that is over mid-range gray (128) and darkens any destination pixels for every source pixel that is below mid-range gray. This effect can be used to give the impression of depth when applied to a surface. | For decals intended to mimic the look of pock marks or dents in a surface, the <code>[[DecalModulate]]</code> (a.k.a. mod2x) shader is especially suitable: it lightens destination pixels for every source pixel that is over mid-range gray (128) and darkens any destination pixels for every source pixel that is below mid-range gray. This effect can be used to give the impression of depth when applied to a surface. | ||
Line 89: | Line 98: | ||
== См. также == | == См. также == | ||
* | * [[Decals in Photoshop]] | ||
* | * [[Decals in GIMP]] | ||
* | * [[infodecal]] | ||
* | * [[info_projecteddecal]] | ||
* | * [[info_overlay]] | ||
[[Category:Material System:ru]] | [[Category:Material System:ru]] | ||
[[Category:Glossary:ru]] | [[Category:Glossary:ru]] | ||
[[Category:Russian]] | [[Category:Russian]] |
Revision as of 06:37, 9 June 2018
Когда игрок стреляет из своего оружия в стену, на ней остается след, который называется декаль (decal). Легче всего представить это как невидимый объект, который прикреплен к поверхности. Плакаты, дырки от пуль, буквы на стенах могут быть созданы с помощью декалей. Декали "прилепают" к объектам, на которые они помещены. К примеру декаль на лестнице каскадом спроецируется вниз, а не будет висеть в воздухе. Вы можете так же использовать декали для нанесения трафаретных букв на стены, чтобы помечать какие-либо места на вашей карте.
Создать декаль не сложно: это обычный материал, у которого есть альфа-канал и который использует DecalModulate
.
До того как читать дальше эту статью рекомендуем вам ознакомится со статьей про создание материалов.
Обычные декали
Самый популярный тип декалей - это декали, которые выглядят как нанесенное через трафарет изображение. Ниже вы можете увидеть исходное изображение, его альфа-канал и финальный вид в игре:
Параметры материала
Настройки материала для декали должны выглядеть примерно так:
LightmappedGeneric { $basetexture decals\mydecal $decal 1 $decalscale 0.1 $translucent 1 $modelmaterial decals\mydecal_model }
$decal <bool>
- Помечает материал как декаль. Без этой метки декаль нельзя будет прикрепить к объекту и спроецировать на него.
$decalscale <float>
- Параметр, который отвечает за разрешение декали. По умолчанию 1 пиксель изображения принимается за один дюйм в игре. Если исходная текстура декали 128 пикселей по ширине, то ее ширина в игре при настройке
$decalscale 0.1
будет 12.8 дюймов в игре. - Template:Tip:ru
$translucent <bool>
- См.
$translucent
. $modelmaterial <material>
- Материал
VertexLitGeneric
, который будет применяться к моделям $decalfadeduration <float>
- Время исчезновения декали. Требует
$vertexcolor
. $decalfadetime <float>
- Задержка перед исчезновением декали
$decalsecondpass
- Если выключено, то всегда рендерить эту декаль поверх остальных. Если две декали с этим параметром установленным в
true
пересекаются, то они ведут себя также, как декали без этого параметра. $fogscale <float>
- Template:Note:ru
Декали не поддерживают $bumpmap и $envmap.
Декали на моделях
Hammer
- Декали могут быть помещены на браши в Hammer с помощью инструментов оверлеев или декалей. Эти декали будут отображаться сразу после загрузки карты.
- Объект info_projecteddecal может быть использован для проецирования декали на любые браши или модели.
C++
Декали могут быть созданы на клиенте с помощью функции C_BaseEntity::AddDecal()
. Изнутри она вызывает AddStudioDecal()
или AddBrushModelDecal()
в зависимости от того, имеет ли энтити браш или модель. Параметры для этих функций:
void C_BaseEntity::AddDecal( const Vector& rayStart, const Vector& rayEnd, const Vector& decalCenter,
int hitbox, int decalIndex, bool doTrace, trace_t& tr, int maxLODToDecal );
void C_BaseEntity::AddBrushModelDecal( const Ray_t& ray, const Vector& decalCenter,
int decalIndex, bool doTrace, trace_t& tr );
void C_BaseEntity::AddStudioDecal( const Ray_t& ray, int hitbox, int decalIndex,
bool doTrace, trace_t& tr, int maxLODToDecal );
Это может быть достигнуто и на сервере с помощью функции engine->StaticDecal
:
void IVEngineServer::StaticDecal( const Vector &originInEntitySpace, int decalIndex, int entityIndex, int modelIndex, bool lowpriority );
Индексы декалей могут быть получены вызовом decalsystem->GetDecalIndexForName
или UTIL_PrecacheDecal()
:
int IDecalEmitterSystem::GetDecalIndexForName( char const *decalname ); // Valid decalnames are defined in scripts/decals_subrect.txt
int UTIL_PrecacheDecal( const char *filename, bool preload );
Использование модуляции
For decals intended to mimic the look of pock marks or dents in a surface, the DecalModulate
(a.k.a. mod2x) shader is especially suitable: it lightens destination pixels for every source pixel that is over mid-range gray (128) and darkens any destination pixels for every source pixel that is below mid-range gray. This effect can be used to give the impression of depth when applied to a surface.
To begin, create a source image whose color channel will be used for the modulation's source values. Again, light values will lighten pixels they're drawn over, while dark values will darken the destination pixels. Mid-gray values will be treated as translucent.
Next, create an alpha channel that defines a mask for the decal. Because modulation cannot have an exact middle value currently, the mask is necessary to prevent "bordering" from occurring around the decal.


Finally, you must create a material that uses the DecalModulate
shader. Neither $translucent
nor $decal
are needed this time.