Т.е. ты тупо копируешь данные из памяти в память, а потом ещё и в свой рендерер, расходуя её в х3 больше Эффективней будет читать .blend напрямую из памяти, тогда расход уменьшится до х2, но это сложно...
Я загружаю в С++ модуль bpy, модуль загружает блендфайл, я даю команду передать данные первого кадра, получаю данные,
обнуляю PyObject :
Py_XDECREF(pyResult);
Далее, в следующих кадрах анимированные объекты заменяются. Я не копирую, а преобразую, удаляя прообраз.
А, что касается рендера, то да, но это издержки всех рендеров. Рендеру не нужны индексы вершин, индексы нормалей и прочая хрень. Рендеру нужна точная информация. Это происходит и в интернале, он вычисляет на основе индексов и координат вершин все координаты каждой вершины, поэтому потребление памяти при просчёте возрастает. Если у тебя вершина принадлежит четырём фейсам, в Блендере в четырёх фейсах будет один индекс, указывающий на эту вершину. В рендере фейсы записывают все конкретные координаты вершин, иначе, как считать trace?
Здесь можно использовать два варианта: херовый комп и крутой комп. Для одного из них инфу можно сразу укладывать в форму для рейтрейсера. И, использовать указатели, не копируя.