Мне нужна стратегическая помощь, чтобы начать работу.
Мне нужно анимировать большую сеть 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
равномерное )
[мне кажется лучший вариант]
- выгрузите все данные в графический процессор изначально, либо с несколькими пользовательскими атрибутами, либо с одним очень большим буферным массивом, и выполните итерацию и интерполяцию в шейдере
[может быть еще лучше , если возможно; Я знаю, что могу установить смещение для массива буфера для каждой вершины, но не уверен, что это работает так, как я думаю ...]
- сделать что-то промежуточное, например, загрузить данные за один день в виде фрагмента вместо всех данных или почасовых данных
Имеют ли смысл сценарий и идеи? Если так:
- Какой самый подходящий способ сделать это?
- Я ценю любые дополнительные советы.