Decal
Наследует: VisualInstance3D < Node3D < Node < Object
Узел, который проецирует текстуру на MeshInstance3D.
Описание
Decals-ы используются для проецирования текстуры на Mesh в сцене. Используйте Decals, чтобы добавить детали к сцене, не затрагивая базовую Mesh. Они часто используются для добавления выветривания к зданию, добавления грязи или ила на землю или добавления разнообразия к реквизиту. Decals можно перемещать в любое время, что делает их подходящими для таких вещей, как тени-капли или точки лазерного прицела.
Они сделаны из AABB и группы Texture2D, определяющих Color, normal, ORM (окклюзия окружения, шероховатость, металлик) и излучение. Декали проецируются в пределах их AABB, поэтому изменение ориентации декали влияет на направление, в котором они проецируются. По умолчанию декали проецируются вниз (т. е. от положительного Y к отрицательному Y).
Texture2D-ы, связанные с Decal, автоматически сохраняются в атласе текстур, который используется для рисования декалей, чтобы все декали можно было нарисовать одновременно. Godot использует кластеризованные декали, то есть они хранятся в кластерных данных и рисуются при рисовании сетки, а не рисуются как эффект постобработки после.
Примечание: Декали не могут влиять на прозрачность базового материала, независимо от его режима прозрачности (альфа-смешивание, альфа-ножницы, альфа-хеш, непрозрачный предварительный проход). Это означает, что полупрозрачные или прозрачные области материала останутся полупрозрачными или прозрачными, даже если на них нанесена непрозрачная декаль.
Примечание: Декали поддерживаются только в методах рендеринга Forward+ и Mobile, а не Compatibility. При использовании метода рендеринга Mobile на каждом ресурсе сетки может отображаться только 8 декалей. Попытка отобразить более 8 декалей на одном ресурсе сетки приведет к мерцанию декалей при движении камеры.
Примечание: При использовании метода рендеринга Mobile декали будут правильно влиять только на сетки, видимость AABB которых пересекается с AABB декали. Если используется шейдер для деформации сетки таким образом, что она выходит за пределы AABB, GeometryInstance3D.extra_cull_margin должен быть увеличен на сетке. В противном случае декаль может быть не видна на сетке.
Свойства
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Методы
get_texture(type: DecalTexture) const |
|
void |
set_texture(type: DecalTexture, texture: Texture2D) |
Перечисления
enum DecalTexture: 🔗
DecalTexture TEXTURE_ALBEDO = 0
Texture2D соответствует texture_albedo.
DecalTexture TEXTURE_NORMAL = 1
Texture2D соответствует texture_normal.
DecalTexture TEXTURE_ORM = 2
Texture2D соответствует texture_orm.
DecalTexture TEXTURE_EMISSION = 3
Texture2D соответствует texture_emission.
DecalTexture TEXTURE_MAX = 4
Максимальный размер перечисления DecalTexture.
Описания свойств
Смешивает альбедо Color декали с альбедо Color базовой сетки. Это можно установить на 0.0, чтобы создать декаль, которая влияет только на нормаль или ORM. В этом случае текстура альбедо все еще требуется, так как ее альфа-канал определит, где будут переопределены нормаль и ORM. См. также modulate.
Указывает, на какой VisualInstance3D.layers будет проецироваться эта декаль. По умолчанию Decals влияет на все слои. Это используется, чтобы вы могли указать, какие типы объектов получают Decal, а какие нет. Это особенно полезно, чтобы вы могли гарантировать, что динамические объекты случайно не получат Decal, предназначенный для ландшафта под ними.
float distance_fade_begin = 40.0 🔗
Расстояние от камеры, на котором декаль начинает исчезать (в 3D-единицах).
bool distance_fade_enabled = false 🔗
Если true, декали будут плавно исчезать при удалении от активной Camera3D, начиная с distance_fade_begin. Декаль будет исчезать через distance_fade_begin + distance_fade_length, после чего она будет отбракована и вообще не отправлена в шейдер. Используйте это, чтобы уменьшить количество активных декалей в сцене и тем самым повысить производительность.
float distance_fade_length = 10.0 🔗
Расстояние, на котором декаль исчезает (в 3D-единицах). Декаль постепенно становится более прозрачной на этом расстоянии и полностью невидимой в конце. Более высокие значения приводят к более плавному переходу затухания, что больше подходит для случаев, когда камера движется быстро.
Множитель энергии для текстуры излучения. Это заставит декаль излучать свет с большей или меньшей интенсивностью, независимо от цвета альбедо. См. также modulate.
Устанавливает кривую, по которой декаль будет исчезать по мере удаления поверхности от центра AABB. Допустимы только положительные значения (отрицательные значения будут ограничены 0.0). См. также upper_fade.
Color modulate = Color(1, 1, 1, 1) 🔗
Изменяет Color декали, умножая цвета альбедо и излучения на это значение. Альфа-компонент учитывается только при умножении цвета альбедо, а не цвета излучения. См. также emission_energy и albedo_mix, чтобы изменить интенсивность излучения и альбедо независимо друг от друга.
Затемняет декаль, если угол между AABB декали и целевой поверхностью становится слишком большим. Значение 0 проецирует декаль независимо от угла, значение 1 ограничивает декаль поверхностями, которые почти перпендикулярны.
Примечание: Установка normal_fade на значение больше 0.0 имеет небольшие затраты производительности из-за дополнительных вычислений угла нормали.
Vector3 size = Vector3(2, 2, 2) 🔗
Устанавливает размер AABB, используемый наклейкой. Все размеры должны быть установлены на значение больше нуля (они будут ограничены 0.001, если это не так). AABB изменяется от -size/2 до size/2.
Примечание: Чтобы повысить эффективность отбраковки наклеек «твердой поверхности», установите их upper_fade и lower_fade на 0.0 и установите компонент Y size как можно ниже. Это уменьшит размер AABB наклеек, не влияя на их внешний вид.
void set_texture(type: DecalTexture, texture: Texture2D)
Texture2D get_texture(type: DecalTexture) const
Texture2D с базовым Color Decal. Либо это, либо texture_emission должно быть установлено, чтобы Decal был видимым. Используйте альфа-канал как маску, чтобы плавно смешать края decal с базовым объектом.
Примечание: В отличие от BaseMaterial3D, режим фильтра которого можно настраивать для каждого материала, режим фильтра для текстур Decal устанавливается глобально с помощью ProjectSettings.rendering/textures/decals/filter.
void set_texture(type: DecalTexture, texture: Texture2D)
Texture2D get_texture(type: DecalTexture) const
Texture2D с излучением Color Decal. Либо это, либо texture_albedo должно быть установлено, чтобы Decal был видимым. Используйте альфа-канал как маску, чтобы плавно смешать края decal с нижележащим объектом.
Примечание: В отличие от BaseMaterial3D, режим фильтра которого можно настраивать для каждого материала, режим фильтра для текстур Decal устанавливается глобально с помощью ProjectSettings.rendering/textures/decals/filter.
void set_texture(type: DecalTexture, texture: Texture2D)
Texture2D get_texture(type: DecalTexture) const
Texture2D с попиксельной картой нормалей для декали. Используйте это, чтобы добавить дополнительную детализацию к декалям.
Примечание: В отличие от BaseMaterial3D, режим фильтра которого можно настраивать для каждого материала, режим фильтра для текстур Decal устанавливается глобально с помощью ProjectSettings.rendering/textures/decals/filter.
Примечание: Установка только этой текстуры не приведет к появлению видимой декали, так как texture_albedo также должен быть установлен. Чтобы создать декаль только для нормалей, загрузите текстуру альбедо в texture_albedo и установите albedo_mix на 0.0. Альфа-канал текстуры альбедо будет использоваться для определения того, где должна быть переопределена карта нормалей базовой поверхности (и ее интенсивность).
void set_texture(type: DecalTexture, texture: Texture2D)
Texture2D get_texture(type: DecalTexture) const
Texture2D сохраняет окружающее затенение, шероховатость и металл для декали. Используйте это, чтобы добавить дополнительную детализацию к декалям.
Примечание: В отличие от BaseMaterial3D, режим фильтра которого можно настраивать для каждого материала, режим фильтра для текстур Decal устанавливается глобально с помощью ProjectSettings.rendering/textures/decals/filter.
Примечание: Установка только этой текстуры не приведет к появлению видимой декали, так как texture_albedo также должен быть установлен. Чтобы создать декаль только для ORM, загрузите текстуру альбедо в texture_albedo и установите albedo_mix на 0.0. Альфа-канал текстуры альбедо будет использоваться для определения того, где должна быть переопределена карта ORM подстилающей поверхности (и ее интенсивность).
Устанавливает кривую, по которой декаль будет исчезать по мере удаления поверхности от центра AABB. Допустимы только положительные значения (отрицательные значения будут ограничены 0.0). См. также lower_fade.
Описания метода
Texture2D get_texture(type: DecalTexture) const 🔗
Возвращает Texture2D, связанный с указанным DecalTexture. Это удобный метод, в большинстве случаев вам следует обращаться к текстуре напрямую.
Например, вместо albedo_tex = $Decal.get_texture(Decal.TEXTURE_ALBEDO), используйте albedo_tex = $Decal.texture_albedo.
Один случай, когда это лучше, чем прямой доступ к текстуре, — это когда вы хотите скопировать текстуры одной Decal в другую. Например:
for i in Decal.TEXTURE_MAX:
$NewDecal.set_texture(i, $OldDecal.get_texture(i))
for (int i = 0; i < (int)Decal.DecalTexture.Max; i++)
{
GetNode<Decal>("NewDecal").SetTexture(i, GetNode<Decal>("OldDecal").GetTexture(i));
}
void set_texture(type: DecalTexture, texture: Texture2D) 🔗
Устанавливает Texture2D, связанный с указанным DecalTexture. Это удобный метод, в большинстве случаев вам следует обращаться к текстуре напрямую.
Например, вместо $Decal.set_texture(Decal.TEXTURE_ALBEDO, albedo_tex), используйте $Decal.texture_albedo = albedo_tex.
Один случай, когда это лучше, чем прямой доступ к текстуре, — это когда вы хотите скопировать текстуры одной Decal в другую. Например:
for i in Decal.TEXTURE_MAX:
$NewDecal.set_texture(i, $OldDecal.get_texture(i))
for (int i = 0; i < (int)Decal.DecalTexture.Max; i++)
{
GetNode<Decal>("NewDecal").SetTexture(i, GetNode<Decal>("OldDecal").GetTexture(i));
}