Стратегия обработки данных / пользовательских цветов в ShaderMaterial - PullRequest
0 голосов
/ 03 мая 2018

Мне нужна стратегическая помощь, чтобы начать работу.

Мне нужно анимировать большую сеть THREE.LineSegments (около 150 тыс. Сегментов, статическая) с помощью пользовательских (вершинных) цветов (RGBA). Для каждого сегмента у меня есть 24 измеренных значения за 7 дней
[так 5.04 × 10^7 измеренные значения или 2.016 × 10^8 vec4 размер массива цветного буфера, около 770 МБ в float32array размере].

Анимация проходит каждый час для каждого дня с шагом 2,5 секунды и должна применять интерполированный цвет к каждому сегменту для каждого кадра (через время delta). Чтобы иметь возможность применить альфа-значение к цветам вершин, мне нужно использовать THREE.ShaderMaterial с атрибутом цвета vec4.

Я не могу понять, как лучше всего обрабатывать такое количество данных на вершину. Некоторые идеи

  • рассчитать значения RGBA в цикле рендеринга (между текущим цветовым массивом и массивом на следующий час с помощью интерполяции со временем delta) и обновить атрибут буфера color
    [Я ожидаю значительного снижения частоты кадров ]
  • имеют атрибут буфера currentColor и nextColor (текущий час и следующий час), загружают оба заново на каждом шаге (2,5 секунды) в графический процессор и выполняют интерполяцию в шейдере (с дополнительным временем delta равномерное )
    [мне кажется лучший вариант]
  • выгрузите все данные в графический процессор изначально, либо с несколькими пользовательскими атрибутами, либо с одним очень большим буферным массивом, и выполните итерацию и интерполяцию в шейдере
    [может быть еще лучше , если возможно; Я знаю, что могу установить смещение для массива буфера для каждой вершины, но не уверен, что это работает так, как я думаю ...]
  • сделать что-то промежуточное, например, загрузить данные за один день в виде фрагмента вместо всех данных или почасовых данных

Имеют ли смысл сценарий и идеи? Если так:

  • Какой самый подходящий способ сделать это?
  • Я ценю любые дополнительные советы.
...