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


Отрисовка Single-sided

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

Чтобы гарантированно избежать такой проблемы, можно применять двустороннюю отрисовку треугольников. Так как отказ от исключения задних поверхностей ухудшает производительность, служба "Удаленная отрисовка Azure" по умолчанию включает двустороннюю отрисовку только для тех сеток, которые пересекаются с плоскостью сечения.

Параметр отрисовки single-sided позволяет изменить это поведение.

Внимание

Отрисовка single-sided в настоящее время считается экспериментальной функцией. Возможно, она будет позднее удалена. Не изменяйте значение по умолчанию, если это не требуется для решения критически важной проблемы в приложении.

Необходимые компоненты

Параметр отрисовки single-sided влияет только на те сетки, которые были преобразованы с указанием значения opaqueMaterialDefaultSidedness для параметра SingleSided. По умолчанию этот параметр имеет значение DoubleSided.

Параметр отрисовки Single-sided

Поддерживаются три разных режима.

Нормально. В этом режиме сетки всегда отображаются по мере их преобразования. Это означает, что сетки, для которых параметр opaqueMaterialDefaultSidedness имел при преобразовании значение SingleSided, всегда будут отображаться с исключением задних поверхностей, даже при пересечении с плоскостью сечения.

DynamicDoubleSiding: в этом режиме, когда плоскость вырезания пересекает сетку, она автоматически переключается на двусторонняя отрисовка. Этот режим используется по умолчанию.

AlwaysDoubleSided: принудительно выполняет отрисовку всех односторонней геометрии в любое время. Этот режим предоставляется в основном для того, чтобы сравнить производительность отрисовок single-sided и double-sided.

Изменить параметры отрисовки single-sided можно следующим образом.

void ChangeSingleSidedRendering(RenderingSession session)
{
    SingleSidedSettings settings = session.Connection.SingleSidedSettings;

    // Single-sided geometry is rendered as is
    settings.Mode = SingleSidedMode.Normal;

    // Single-sided geometry is always rendered double-sided
    settings.Mode = SingleSidedMode.AlwaysDoubleSided;
}
void ChangeSingleSidedRendering(ApiHandle<RenderingSession> session)
{
    ApiHandle<SingleSidedSettings> settings = session->Connection()->GetSingleSidedSettings();

    // Single-sided geometry is rendered as is
    settings->SetMode(SingleSidedMode::Normal);

    // Single-sided geometry is always rendered double-sided
    settings->SetMode(SingleSidedMode::AlwaysDoubleSided);
}

Документация по API

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