Бывают случаи, особенно при импорте из сторонних пакетов, когда кривые анимации в Blender оказываются буквально забиты множеством контрольных точек, большая часть которых практически не влияет на общую форму кривой. Большое количество точек на кривой увеличивает сложность сцены и утяжеляет расчет анимации. Однако, при необходимости количество точек на кривых анимации можно легко уменьшить.
Уменьшить количество точек на кривой анимации можно вручную.
Для этого в рабочей области Graph Editor нужно выделить нужную кривую анимации и в меню выбрать:
Key – Density – Decimate (Ratio)
После чего движением мышки подобрать приемлемый коэффициент от 0.0 – ни одна точка не будет удалена, до 1.0 – будут удалены все точки, кроме двух крайних. В соответствии с выбранным значением количество точек будет равномерно уменьшено.
То же самое можно сделать и при помощи Blender Python API.
За уменьшение количества точек на кривых анимации отвечает оператор
|
1 |
bpy.ops.graph.decimate(mode, factor) |
Давайте для примера уменьшим количество точек на кривой анимации перемещения дефолтного куба по оси X.
Оператор graph.decimate() контекстно-зависимый. Это значит, что для того, чтобы вызвать его из окна текстового редактора Text Editor, необходимо временно переопределить контекст.
Получим указатель на рабочую область Graph Editor:
|
1 2 3 |
area = next((area for area in bpy.context.screen.areas if area.type == 'GRAPH_EDITOR')) # <bpy_struct, Area at 0x0000020BFBFA1FC0> |
Теперь мы можем переопределяя контекст при помощи temp_override() вызвать нужный нам оператор graph.decimate():
|
1 2 3 4 5 |
with bpy.context.temp_override(area=area): bpy.ops.graph.decimate( mode='RATIO', factor=0.7 ) |
В параметрах оператора graph.decimate() мы указываем режим работы “RATIO” – процентное соотношение количества точек к общей длине кривой, и фактор равный 0.7 – это как раз то число, которое мы подбирали ранее мышкой. Т.е при factor равным 0.0 кривая не будет упрощаться совсем, а при factor равный 1.0 – удаляться все точки, кроме крайних. Используемое нами значение 0.7 оптимально в нашем случае, чтобы получить упрощение, но и в то же время сильно не исказить кривую анимации.
После выполнения кода количество точек на кривой анимации перемещения куба по оси Х будет уменьшено.

.blend file on Patreon