reckfellENGINE

CompositorEffect

Базовый ресурс callback для стадии compositor.

На этой странице
class CompositorEffectReckfellSharpНаследует Resource

Создайте C#-подкласс, переопределите _RenderCallback и добавьте ресурс в Compositor.CompositorEffects. По умолчанию эффект включён, стадия PostTransparent, все флаги дополнительных данных выключены. Без собственного callback базовый ресурс не создаёт визуального результата.

Forward+ вызывает пять стадий; текущий Mobile — только PreOpaque, PreTransparent и PostTransparent. Запрос PostOpaque в Mobile выдаёт предупреждение; PostSky там не вызывается. PostTransparent выполняется перед последующей постобработкой и tonemapping. Не используйте Max как стадию.

Полный проверенный диагностический класс. Он считает callback и кадры с действующими RID всех view, но не выполняет compute shader и не меняет изображение:

C#
using System.Threading;
using Reckfell;

[GlobalClass]
public partial class BufferProbeEffect : CompositorEffect
{
    private int callbacks;
    private int validFrames;
    public int CallbackCount => Volatile.Read(ref callbacks);
    public int ValidFrameCount => Volatile.Read(ref validFrames);

    public BufferProbeEffect()
    {
        EffectCallbackType = EffectCallbackTypeEnum.PostTransparent;
    }

    public override void _RenderCallback(int effectCallbackType, RenderData renderData)
    {
        if (effectCallbackType != (int)EffectCallbackTypeEnum.PostTransparent)
            return;

        Interlocked.Increment(ref callbacks);
        if (renderData.GetRenderSceneBuffers() is not RenderSceneBuffersRD buffers)
            return;

        Vector2I size = buffers.GetInternalSize();
        if (size.X <= 0 || size.Y <= 0 || buffers.GetViewCount() == 0)
            return;

        for (uint view = 0; view < buffers.GetViewCount(); view++)
        {
            if (!buffers.GetColorLayer(view).IsValid || !buffers.GetDepthLayer(view).IsValid)
                return;
        }
        Interlocked.Increment(ref validFrames);
    }
}

RenderData и буферы заимствованы у рендерера. Не сохраняйте их после callback, не освобождайте чужие RID и не меняйте дерево Entity с render thread. Размер берите из GetInternalSize(), обрабатывайте все GetViewCount() слои. Для GPU-работы нужен основной RenderingDevice; local device не владеет RID кадра.

Диспетчеризация, действующие RID и Enabled проверены в Windows/Vulkan Forward+ и Mobile. Предупреждение неподдерживаемого PostOpaque сохранено в исходном отчёте. Дополнительные буферы и MSAA сверены по исходникам; их содержимое, shader, XR, resize и производительность этим прогоном не проверены.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы1

CompositorEffectКонструктор
# CompositorEffect
C#
public CompositorEffect();

Создаёт включённый базовый эффект на PostTransparent со всеми дополнительными флагами false. Базовый callback сам не изменяет изображение; переопределите _RenderCallback в подклассе.

Свойства7

AccessResolvedColorСвойство
# AccessResolvedColor
C#
public bool AccessResolvedColor { get; set; }

Запрос обычного цветового буфера после resolve MSAA перед промежуточной стадией; изначально false. Не отключает MSAA и не преобразует формат в LDR. В Inspector скрыт для PostTransparent. Запрашивайте только при необходимости; действующий RID не означает, что ранняя стадия уже содержит готовый цвет сцены.

AccessResolvedDepthСвойство
# AccessResolvedDepth
C#
public bool AccessResolvedDepth { get; set; }

Запрос глубины после resolve MSAA, изначально false. Поддержка зависит от renderer и устройства; true не гарантирует доступность resolved depth во всех конфигурациях. В Inspector скрыт для PostTransparent. Это не линейная глубина и не переключатель reverse-Z.

EffectCallbackTypeСвойство
# EffectCallbackType
C#
public CompositorEffect.EffectCallbackTypeEnum EffectCallbackType { get; set; }

Стадия вызова, по умолчанию PostTransparent. Forward+ вызывает PreOpaque, PostOpaque, PostSky, PreTransparent и PostTransparent. В текущем Mobile выполняются только PreOpaque, PreTransparent и PostTransparent: PostOpaque выдаёт предупреждение, PostSky не вызывается. PostTransparent предшествует последующей постобработке и tonemapping. Max — служебное значение, не допустимая стадия.

EnabledСвойство
# Enabled
C#
public bool Enabled { get; set; }

Включён ли эффект; по умолчанию true. False исключает его из диспетчеризации, но не удаляет ресурс или созданные им GPU-объекты. Изменение действует без повторного назначения массива CompositorEffects; уже поставленные кадры могут завершиться со старым состоянием.

NeedsMotionVectorsСвойство
# NeedsMotionVectors
C#
public bool NeedsMotionVectors { get; set; }

Запрашивает подготовку векторов движения в Forward+; изначально false. Это потребность эффекта, а не подтверждение наличия буфера в любом renderer. Включение может изменить подготовку рендеринга; не запрашивайте неиспользуемые данные.

NeedsNormalRoughnessСвойство
# NeedsNormalRoughness
C#
public bool NeedsNormalRoughness { get; set; }

Запрашивает normal/roughness в Forward+ и влияет на подготовку prepass; изначально false. Не делает эти данные доступными в Mobile автоматически. Проверяйте подходящий буфер и стадию перед использованием.

NeedsSeparateSpecularСвойство
# NeedsSeparateSpecular
C#
public bool NeedsSeparateSpecular { get; set; }

Запрашивает отдельный specular в Forward+ на PostSky; изначально false. Для других стадий свойство скрыто в Inspector. Mobile не вызывает PostSky в текущей реализации. Это запрос данных, а не автоматический визуальный эффект.

Методы15

GetAccessResolvedColorbool
# GetAccessResolvedColor
C#
public bool GetAccessResolvedColor();

Возвращает значение CompositorEffect.AccessResolvedColor.

Возвращает bool

Текущее значение CompositorEffect.AccessResolvedColor; чтение флага не подтверждает доступность соответствующего буфера.

GetAccessResolvedDepthbool
# GetAccessResolvedDepth
C#
public bool GetAccessResolvedDepth();

Возвращает значение CompositorEffect.AccessResolvedDepth.

Возвращает bool

Текущее значение CompositorEffect.AccessResolvedDepth; чтение флага не подтверждает доступность соответствующего буфера.

GetEffectCallbackTypeCompositorEffect.EffectCallbackTypeEnum
# GetEffectCallbackType
C#
public CompositorEffect.EffectCallbackTypeEnum GetEffectCallbackType();

Возвращает значение CompositorEffect.EffectCallbackType.

Возвращает CompositorEffect.EffectCallbackTypeEnum

Выбранная стадия. Её выполнение зависит от renderer и подключения compositor.

GetEnabledbool
# GetEnabled
C#
public bool GetEnabled();

Возвращает значение CompositorEffect.Enabled.

Возвращает bool

True, если эффект включён; это не подтверждение фактического callback для активной камеры.

GetNeedsMotionVectorsbool
# GetNeedsMotionVectors
C#
public bool GetNeedsMotionVectors();

Возвращает значение CompositorEffect.NeedsMotionVectors.

Возвращает bool

Текущее значение CompositorEffect.NeedsMotionVectors; чтение флага не подтверждает доступность соответствующего буфера.

GetNeedsNormalRoughnessbool
# GetNeedsNormalRoughness
C#
public bool GetNeedsNormalRoughness();

Возвращает значение CompositorEffect.NeedsNormalRoughness.

Возвращает bool

Текущее значение CompositorEffect.NeedsNormalRoughness; чтение флага не подтверждает доступность соответствующего буфера.

GetNeedsSeparateSpecularbool
# GetNeedsSeparateSpecular
C#
public bool GetNeedsSeparateSpecular();

Возвращает значение CompositorEffect.NeedsSeparateSpecular.

Возвращает bool

Текущее значение CompositorEffect.NeedsSeparateSpecular; чтение флага не подтверждает доступность соответствующего буфера.

SetAccessResolvedColorvoid
# SetAccessResolvedColor
C#
public void SetAccessResolvedColor(bool enable);

Назначает значение CompositorEffect.AccessResolvedColor.

Параметры
ИмяТипПо умолчанию
enablebool—
enable

Новое значение запроса CompositorEffect.AccessResolvedColor.

SetAccessResolvedDepthvoid
# SetAccessResolvedDepth
C#
public void SetAccessResolvedDepth(bool enable);

Назначает значение CompositorEffect.AccessResolvedDepth.

Параметры
ИмяТипПо умолчанию
enablebool—
enable

Новое значение запроса CompositorEffect.AccessResolvedDepth.

SetEffectCallbackTypevoid
# SetEffectCallbackType
C#
public void SetEffectCallbackType(CompositorEffect.EffectCallbackTypeEnum effectCallbackType);

Назначает значение CompositorEffect.EffectCallbackType.

Параметры
ИмяТипПо умолчанию
effectCallbackTypeCompositorEffect.EffectCallbackTypeEnum—
effectCallbackType

Допустимая стадия с учётом renderer; не Max. Текущий Mobile не выполняет PostOpaque и PostSky.

SetEnabledvoid
# SetEnabled
C#
public void SetEnabled(bool enabled);

Назначает значение CompositorEffect.Enabled.

Параметры
ИмяТипПо умолчанию
enabledbool—
enabled

True для включения, false для исключения из callback; свойство CompositorEffect.Enabled.

SetNeedsMotionVectorsvoid
# SetNeedsMotionVectors
C#
public void SetNeedsMotionVectors(bool enable);

Назначает значение CompositorEffect.NeedsMotionVectors.

Параметры
ИмяТипПо умолчанию
enablebool—
enable

Новое значение запроса CompositorEffect.NeedsMotionVectors.

SetNeedsNormalRoughnessvoid
# SetNeedsNormalRoughness
C#
public void SetNeedsNormalRoughness(bool enable);

Назначает значение CompositorEffect.NeedsNormalRoughness.

Параметры
ИмяТипПо умолчанию
enablebool—
enable

Новое значение запроса CompositorEffect.NeedsNormalRoughness.

SetNeedsSeparateSpecularvoid
# SetNeedsSeparateSpecular
C#
public void SetNeedsSeparateSpecular(bool enable);

Назначает значение CompositorEffect.NeedsSeparateSpecular.

Параметры
ИмяТипПо умолчанию
enablebool—
enable

Новое значение запроса CompositorEffect.NeedsSeparateSpecular.

_RenderCallbackvoid
# _RenderCallback
C#
public virtual void _RenderCallback(int effectCallbackType, RenderData renderData);

Hook рендерера для выбранной стадии. Переопределяйте в подклассе, не вызывайте вручную вместо рендеринга. RenderData и его буферы используйте только в пределах callback; не сохраняйте их на следующий кадр и не освобождайте чужие RID. Не меняйте дерево Entity и UI на render thread. Для XR обрабатывайте каждый view, размер берите из RenderSceneBuffersRD.GetInternalSize().

Параметры
ИмяТипПо умолчанию
effectCallbackTypeint—
renderDataRenderData—
effectCallbackType

Номер фактически вызванной стадии; сравнивайте с EffectCallbackTypeEnum. Это не число эффектов и не индекс кадра.

renderData

Заимствованные данные текущего прохода; действуют только внутри callback. Получите RenderSceneBuffers и проверьте конкретный тип.

CompositorEffect.EffectCallbackTypeEnum

ЗначениеОписание
Max = 5

Представляет размер перечисления CompositorEffect.EffectCallbackTypeEnum.

PostOpaque = 1

Обратный вызов выполняется после прохода рендеринга непрозрачности, но до рендеринга неба.

PostSky = 2

Обратный вызов вызывается после того, как наше небо отрисовано, но до создания наших обратных буферов (и, если они включены, до подповерхностного рассеивания и/или отражений в пространстве экрана).

PostTransparent = 4

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

PreOpaque = 0

Обратный вызов выполняется перед нашим проходом рендеринга непрозрачности, но после предварительного прохода глубины (если применимо).

PreTransparent = 3

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

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.