Если для системы частиц, испускаемых объектом, в качестве источника используется коллекция с набором различных мешей, при помощи Blender Python API можно определить, какой именно объект является источником каждой частицы.
Для того чтобы получить доступ к частицам в их текущем состоянии, сначала нужно “просчитать” сцену – получить ее “evaluated” версию, в которой ко всем объектам, в том числе и к частицам, применены все воздействия и модификаторы. Это делается при помощи depsgraph.
1 |
dg = bpy.context.evaluated_depsgraph_get() |
Из просчитанного depshgraph мы можем получить список инстансов сцены, которые одновременно являются и объектами системы частиц.
1 |
psi = (p for p in dg.object_instances if p.particle_system) |
Получаем его в виде итератора, чтобы не изменять состояние объектов в нем.
Теперь мы можем пройдя итератором по частицам вывести объект – источник этой частицы, а также текущие координаты частицы в сцене.
1 2 3 4 5 6 7 8 9 |
for particle in psi: print( particle.instance_object, particle.matrix_world.translation ) # <bpy_struct, Object("Suzanne") at 0x000001CA5E174F08, evaluated> Suzanne <Vector (8.3390, -0.5906, -1.7259)> # <bpy_struct, Object("Torus") at 0x000001CA5DFC4808, evaluated> Torus <Vector (6.8404, -0.6114, -0.8238)> # ... |