Поделиться через


Отрисовка оболочки

Состояние оболочки компонента переопределения иерархического состояния — это эффект прозрачности. В отличие от прозрачной отрисовки видимым остается только передний слой объектов, как и при непрозрачной отрисовке. Кроме того, нормальный внешний вид объектов можно изменить при отрисовке в виде оболочек. Этот эффект предназначен для случаев, когда пользователь не должен пристально всматриваться в неважные детали, но при этом необходимо сохранить пространственное ощущение всей сцены.

Вы можете настроить внешний вид объектов, отрисованных с помощью оболочки, используя глобальное состояние ShellRenderingSettings. Все объекты, использующие отрисовку оболочки, будут применять одинаковые настройки. Отдельных параметров для объекта нет.

Примечание.

Эффект отрисовки оболочки не может применяться к точкам облаков.

Параметры ShellRenderingSettings

Класс ShellRenderingSettings содержит параметры, относящиеся к глобальным свойствам отрисовки оболочки.

Параметр Тип Описание
Desaturation с плавающей запятой Показатель уменьшения насыщенности цвета, которое будет применено к обычному итоговому цвету объекта, в диапазоне от 0 (отсутствие уменьшения насыщенности) до 1 (полное уменьшение насыщенности)
Opacity с плавающей запятой Непрозрачность объектов, отрисованных с помощью оболочки, в диапазоне от 0 (невидимый) до 1 (полностью непрозрачный)

В следующей таблице приведены примеры эффектов параметров при применении к целой сцене.

0 0,25 0,5 0.75 1.0
Уменьшение насыщенности Desaturation-0.0 Desaturation-0.25 Desaturation-0.5 Desaturation-0.75 Desaturation-1.0
Непрозрачность Opacity-0.0 Opacity-0.25 Opacity-0.5 Opacity-0.75 Opacity-1.0

Эффекты оболочки применяются к окончательному непрозрачному цвету, в котором в противном случае была бы отрисована сцена. Сюда входит переопределение иерархического состояния оттенков.

Пример

В следующем коде показан пример использования состояния ShellRenderingSettings через API.

void SetShellSettings(RenderingSession session)
{
    ShellRenderingSettings shellRenderingSettings = session.Connection.ShellRenderingSettings;
    shellRenderingSettings.Desaturation = 0.5f;
    shellRenderingSettings.Opacity = 0.1f;
}
void SetShellSettings(ApiHandle<RenderingSession> session)
{
    ApiHandle<ShellRenderingSettings> shellRenderingSettings = session->Connection()->GetShellRenderingSettings();
    shellRenderingSettings->SetDesaturation(0.5f);
    shellRenderingSettings->SetOpacity(0.1f);
}

Производительность

Функция отрисовки оболочки содержит небольшие постоянные издержки по сравнению со стандартной непрозрачной отрисовкой. Она выполняется значительно быстрее, чем при использовании прозрачных материалов в объектах или прозрачной отрисовке. Производительность может снизиться сильнее, если только части сцены переведены на отрисовку с помощью оболочки. Это ухудшение может возникать из-за дополнительно обнаруженных объектов, нуждающихся в отрисовке. В этом случае производительность ведет себя аналогично функции Вырезать плоскости.

Следующие шаги