Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Decal

Успадковує: VisualInstance3D < Node3D < Node < Object

Node, яка продає текстуру на MeshInstance3D.

Опис

Decal використовується для проекту текстури на Mesh на сцені. Використовуйте пропозиції, щоб додати деталі до сцени, не впливаючи на основу Mesh. Вони часто використовуються, щоб додати погодні споруди, додати бруд або грязь на землю, або додати різноманітні пропси. Декалі можна переміщати в будь-який час, роблячи їх придатними для речей, таких як тіні бобові або лазерні точки зору.

Вони виготовляються з AABB і групи Texture2D, вказавши Color, нормальний, ORM (універсальна оклюзія, грубість, металік), і емісія. Декаль продаються в межах їх AABB, тому змінюючи спрямованість Декаль впливає на напрямок, в якому вони продаються. За промовчанням, пропозиції продаються вниз (тобто від позитиву Y до негативного Y).

Texture2D, пов'язані з Decal, автоматично зберігаються в текстурі атласу, який використовується для малювання декалі, так що всі декалі можуть бути зроблені одночасно. Godot використовує кластерні декалі, що означає, що вони зберігаються в кластерних даних і намальовані при намальовуванні сітки, вони не намальовані як після обробки.

Примітка: Опитування не може впливати на прозорість основного матеріалу, незалежно від його режиму прозорості (альфа-змішувач, альфа-ссісар, альфа-холе, передчасний прохід). Це означає напівпрозорі або прозорі ділянки матеріалу залишаються непрозорими або прозорими, навіть якщо на них наноситься непрозора декаль.

Примітка: Ознаки підтримуються лише в методах переадресації + та мобільних рендерингів, не сумісності. При використанні методу мобільного рендерингу можна відобразити лише 8 декалі. Припустимо, щоб відобразити більше 8 декальцій на одному сітчастому ресурсі призведе до декалі, що мерехтять і виходиться в якості камери.

Примітка: При використанні методу мобільного рендерингу, декалі будуть тільки коректно впливати на сітки, видимість AABB взаємозаражує з AABB. При використанні шейдера для деформування сітки таким чином, що робить його поза її AABB, GeometryInstance3D.extra_cull_margin необхідно збільшити на сітці. В іншому випадку на сітці не видно декаль.

Властивості

float

albedo_mix

1.0

int

cull_mask

1048575

float

distance_fade_begin

40.0

bool

distance_fade_enabled

false

float

distance_fade_length

10.0

float

emission_energy

1.0

float

lower_fade

0.3

Color

modulate

Color(1, 1, 1, 1)

float

normal_fade

0.0

Vector3

size

Vector3(2, 2, 2)

Texture2D

texture_albedo

Texture2D

texture_emission

Texture2D

texture_normal

Texture2D

texture_orm

float

upper_fade

0.3

Методи

Texture2D

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 enum.


Описи властивостей

float albedo_mix = 1.0 🔗

  • void set_albedo_mix(value: float)

  • float get_albedo_mix()

Підходить альбедо Color декаль з альбедо Color базової сітки. Це можна встановити до 0.0 для створення декаль, який тільки впливає на нормальну або ORM. У цьому випадку текстура альбедо все ще потрібна як його альфа-канал буде визначати, де нормаль і ORM буде передаватися. Дивись також modulate.


int cull_mask = 1048575 🔗

  • void set_cull_mask(value: int)

  • int get_cull_mask()

Визначає, що VisualInstance3D.layers цей декаль буде проектуватися. За замовчуванням, пропозиції впливають на всі шари. Це використовується так, що ви можете вказати, які види об'єктів отримують Декаль і які не є. Це особливо корисно для того, щоб динамічні об'єкти не випадково отримували Декаль, призначений для місцевості під ними.


float distance_fade_begin = 40.0 🔗

  • void set_distance_fade_begin(value: float)

  • float get_distance_fade_begin()

Відстань від камери, при якому Декаль починає відторгуватися (в 3D-пакетах).


bool distance_fade_enabled = false 🔗

  • void set_enable_distance_fade(value: bool)

  • bool is_distance_fade_enabled()

Якщо true, декаль плавно згорнеться, коли далеко від активних Camera3D, починаючи з відстань_fade_begin. Декаль з'явиться над відстань_fade_begin + відстань_fade_довжина, після чого він буде культивований і не відправлений на шейкер на всіх. Використовуйте це, щоб зменшити кількість Активних Декальцій на сцені та підвищити продуктивність.


float distance_fade_length = 10.0 🔗

  • void set_distance_fade_length(value: float)

  • float get_distance_fade_length()

Відстань від якого відхиляється декаль (в 3D одиниці). Декаль стає повільним більш прозорим над цією дистанцією і повністю непомітним на кінці. Більшість значень призводить до плавлення виходу з ладу, який більш підходить, коли камера рухається швидко.


float emission_energy = 1.0 🔗

  • void set_emission_energy(value: float)

  • float get_emission_energy()

Мультиплікатор енергії для текстури емісії. Це зробить декаль випромінювати світло на більш високій або меншій інтенсивності, незалежно від кольору альбедо. Дивись також modulate.


float lower_fade = 0.3 🔗

  • void set_lower_fade(value: float)

  • float get_lower_fade()

Налаштовує криву, над якою декаль буде вигорнути, як поверхня отримує далі від центру AABB. Тільки позитивні значення дійсні (негативні значення будуть зафіксовані до 0.0). Дивись також upper_fade.


Color modulate = Color(1, 1, 1, 1) 🔗

  • void set_modulate(value: Color)

  • Color get_modulate()

Змінює Color Декаль шляхом розмноження альбедо і емісійних кольорів з цим значенням. alpha компонент враховується тільки при розмноженні альбедо кольору, а не кольору емісії. Дивись також emission_energy і albedo_mix для зміни емісії та інтенсивності альбедо незалежно від одного.


float normal_fade = 0.0 🔗

  • void set_normal_fade(value: float)

  • float get_normal_fade()

Відкриває декаль, якщо кут між Декаль AABB і цільовою поверхнею стає занадто великим. Значення 0 проектів Декаль незалежно від кута, значення 1 обмежує Декаль на поверхні, які майже перпендикулярні.

Примітка: Встановлення normal_fade до значення більше, ніж 0.0 має невелику вартість виконання через додані нормальні обчислення кута.


Vector3 size = Vector3(2, 2, 2) 🔗

  • void set_size(value: Vector3)

  • Vector3 get_size()

Задає розмір AABB, який буде використовуватися міткою. Всі розміри повинні бути встановлені на значення більше нуля (якщо це не так, вони будуть затиснуті до 0.001). AABB змінюється від -розмір/2 до розмір/2.

Примітка: Щоб покращити ефективність відсіювання міток з "твердою поверхнею", встановіть для них upper_fade і lower_fade значення 0.0 і встановіть Y-компонент size якомога нижчим. Це зменшить розмір AABB міток, не впливаючи на їхній зовнішній вигляд.


Texture2D texture_albedo 🔗

Texture2D з основою Color мітки. Для того, щоб наклейку було видно, необхідно встановити або цей параметр, або texture_emission. Використовуйте альфа-канал як маску, щоб плавно змішати краї наклейки з основним об'єктом.

Примітка: На відміну від BaseMaterial3D, режим фільтрації якого можна налаштувати для кожного матеріалу, режим фільтрації для текстур Decal задається глобально за допомогою ProjectSettings.rendering/textures/decals/filter.


Texture2D texture_emission 🔗

Texture2D з випромінюванням Color мітки. Для того, щоб наклейку було видно, потрібно встановити або цей параметр, або texture_albedo. Використовуйте альфа-канал як маску, щоб плавно змішати краї наклейки з основним об'єктом.

Примітка: На відміну від BaseMaterial3D, режим фільтрації якого можна налаштувати для кожного матеріалу, режим фільтрації для текстур Decal задається глобально за допомогою ProjectSettings.rendering/textures/decals/filter.


Texture2D texture_normal 🔗

Texture2D з попіксельною картою нормалей для наклейки. Використовуйте його, щоб додати додаткову деталізацію до етикеток.

Примітка: На відміну від BaseMaterial3D, режим фільтрації якого можна налаштувати для кожного окремого матеріалу, режим фільтрації для текстур Decal задається глобально за допомогою ProjectSettings.rendering/textures/decals/filter.

Примітка: Встановлення лише цієї текстури не призведе до створення видимої наклейки, оскільки також має бути встановлено texture_albedo. Щоб створити лише звичайну наліпку, завантажте альбедо-текстуру до texture_albedo і встановіть albedo_mix на 0.0. Альфа-канал альбедо-текстури буде використано для визначення місця перевизначення карти нормалей базової поверхні (та її інтенсивності).


Texture2D texture_orm 🔗

Texture2D storing ambient occlusion, roughness, and metallic for the decal. Use this to add extra detail to decals.

Note: Unlike BaseMaterial3D whose filter mode can be adjusted on a per-material basis, the filter mode for Decal textures is set globally with ProjectSettings.rendering/textures/decals/filter.

Note: Setting this texture alone will not result in a visible decal, as texture_albedo must also be set. To create an ORM-only decal, load an albedo texture into texture_albedo and set albedo_mix to 0.0. The albedo texture's alpha channel will be used to determine where the underlying surface's ORM map should be overridden (and its intensity).

Note: Due to technical limitations, modifying the underlying surface's roughness using texture_orm does not affect screen-space reflections (Environment.ssr_enabled), reflections from VoxelGI, and reflections from SDFGI (Environment.sdfgi_enabled). Only reflections from ReflectionProbes are affected.


float upper_fade = 0.3 🔗

  • void set_upper_fade(value: float)

  • float get_upper_fade()

Задає криву, за якою мітка буде зникати по мірі віддалення поверхні від центру 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.

Один випадок, де це краще, ніж доступ до текстури безпосередньо, коли ви хочете скопіювати текстуру одного Декала до іншого. Наприклад:

for i in Decal. TEXTURE_MAX:
$NewDecal.set_texture(i, $СтарийDecal.get_texture(i))

void set_texture(type: DecalTexture, texture: Texture2D) 🔗

Налаштовує Texture2D, пов'язану з вказаною DecalTexture. Це зручний спосіб, в більшості випадків ви повинні отримати доступ до текстури безпосередньо.

Наприклад, замість $ Декаль.set_texture(Decal.TEXTURE_ALBEDO, albedo_tex), використання $Decal.texture_albedo = albedo_tex.

Один випадок, де це краще, ніж доступ до текстури безпосередньо, коли ви хочете скопіювати текстуру одного Декала до іншого. Наприклад:

for i in Deca. TEXTURE_MAX:
$NewDecal.set_texture(i, $СтарийDecal.get_texture(i))