Как оптимизировать рисование многих (например, 50 000) MeshRenderers или SpriteRenderers в Unity? - PullRequest
0 голосов
/ 03 января 2019

Есть ли способ оптимизировать, когда столько рендереров?Условие состоит в том, что средства визуализации имеют свои собственные анимации, и каждый цвет может меняться.Я пытался объединить несколько вещей в одну, но у меня проблема в том, что вышеуказанные условия не выполняются.

На изображении ниже 20 000 MeshRenderers.

введите описание изображения здесь


[Добавлено]

Я применил динамическое размещение, но улучшилось только от 3 до 5 кадров.
Я использовал MeshRenderer и применил Quad.

В шейдере используется очень простой шейдер, который вводит цвет и выводит его как излучение.

enter image description here enter image description here

Shader "Custom/Only Emission" {
    Properties{
        _Color("Color", Color) = (1,1,1,1)
    }
    SubShader{
        Tags { "RenderType" = "Opaque" }

        CGPROGRAM
        #pragma surface surf Lambert

        fixed4 _Color;

        struct Input {
            float4 color;
        };

        void surf(Input IN, inout SurfaceOutput o) {
            o.Emission = _Color.rgb;
        }
        ENDCG
    }

}

1 Ответ

0 голосов
/ 03 января 2019

Одним из решений, которое вы можете найти, является соблюдение правил Dynamic Batching :

  • В настоящее время упаковываются только средства рендеринга сетки, рендеры трасс, линейные рендеры, системы частиц и спрайт рендеры. Это означает, что скелетные сетки, ткани и другие типы компонентов рендеринга не объединяются.

  • пакетная обработка применяется только к сеткам, содержащим не более 900 атрибутов вершин (поэтому, если ваш шейдер использует 3 прохода, ваша сетка может иметь максимум 300 вершин для работы пакетной обработки)

  • Пакетирование не будет работать, если ваши объекты GameObject не имеют одинакового масштаба.

Еще один способ - убедиться, что вы используете GPU Instantiated материал. Экземпляр GPU отображает только идентичные сетки с каждым вызовом отрисовки, но каждый экземпляр может иметь разные параметры (например, цвет или масштаб), чтобы добавить вариацию и уменьшить появление повторений.

И, наконец, да объединение сеток во время выполнения может помочь в некоторых случаях. Но это нарушит настройку отсева при окклюзии, поскольку при просмотре только одной части также будут отображаться невидимые части.

...