А теперь расскажу, что было сделано в новой системе.
При разработке всех фич движка, я всегда исхожу из данных с которыми предстоит работать той, или иной фиче. Так, что этот пост будет посвящен данным.
Как уже было сказано ранее, данные частицы хранились в отдельной структуре, которая была довольно неповоротлива в обслуживании и расширении.
Что, если мне не нужны какие то данные для эффекта или мне нужно добавить новые поля для хранения?
Я обратил внимание на то, что структура по своей сути состоит из набора float и vec различной размерности (vec2, vec3, vec4).
И тут меня осенило! А что если сделать плоский буфер float значений. У этого подхода есть ряд очевидных плюсов:
1. Структура может быть подвижной! Мы можем не задумываться какие данные мы хотим там хранить!
2. Очень плотное выравнивание! Нет больше проблем с выравниванием памяти в структуре. Все данные будут храниться очень плотно, что положительно скажется на потреблении и скорости доступа к данным.
3. Буфер передаваемый в GPU тоже состоит из набора float'ов, а значит все это можно унифицировать.
Очевидно у такого подходе есть и жирный минус. Связан он с определенным неудобством доступа к ячейке параметра в виде необходимости хранить оффсеты. Однако это можно нивелировать на уровне редактора.
А дальше Остапа понесло! В следующем посте я раскажу как модифицировал систему модификаторов исходя из новой формы хранения данных.