diff options
author | Lukas Tönne <lukas.toenne@gmail.com> | 2022-06-29 22:50:35 +0300 |
---|---|---|
committer | Lukas Tönne <lukas.toenne@gmail.com> | 2022-06-29 22:50:35 +0300 |
commit | fa2084ae58a77b1201289b6bedac427f73c762d1 (patch) | |
tree | fd99401eb8e742415f59332d115f0f34699f92b6 /release/scripts/startup/nodeitems_builtins.py | |
parent | 0ea282f7462070041b2599389ba61c7ef50426b5 (diff) |
Geometry Nodes: Experimental rigid body integration.
This is an exploration of how geometry nodes might be coupled with
rigid bodies and iterative simulations in general. It's a very
rough-and-ready implementation, not meant as a final version, but rather
to prove the possiblity and to find challenging areas where redesign is
needed.
The core additions are:
- Geometry nodes to flag points and/or instances as rigid bodies.
- Depsgraph integration to ensure the necessary order of operations
between modifiers and rigid body pre/post simulation updates.
- Simple cache feature to store arbitrary geometry and loop back into
the next iteration.
Diffstat (limited to 'release/scripts/startup/nodeitems_builtins.py')
-rw-r--r-- | release/scripts/startup/nodeitems_builtins.py | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py index 21bb3d01616..18475106450 100644 --- a/release/scripts/startup/nodeitems_builtins.py +++ b/release/scripts/startup/nodeitems_builtins.py @@ -246,7 +246,7 @@ def point_node_items(context): # Generic node group items generator for shader, compositor, geometry and texture node groups. -def node_group_items(context): +def node_group_items(context, tree_types=None): if context is None: return space = context.space_data @@ -261,6 +261,8 @@ def node_group_items(context): ntree = space.edit_tree if not ntree: return + if not tree_types: + tree_types = {ntree.bl_idname,} yield NodeItemCustom(draw=lambda self, layout, context: layout.separator()) @@ -275,7 +277,7 @@ def node_group_items(context): return False for group in context.blend_data.node_groups: - if group.bl_idname != ntree.bl_idname: + if group.bl_idname not in tree_types: continue # filter out recursive groups if contains_group(group, ntree): @@ -732,7 +734,23 @@ geometry_node_categories = [ NodeItem("GeometryNodeVolumeCube"), NodeItem("GeometryNodeVolumeToMesh"), ]), - GeometryNodeCategory("GEO_GROUP", "Group", items=node_group_items), + GeometryNodeCategory("GEO_SIMULATION", "Simulation", items=[ + NodeItem("SimulationNodeAddCollisionShapes"), + NodeItem("SimulationNodeAddRigidBodies"), + NodeItem("SimulationNodeRemoveRigidBodies"), + NodeItem("SimulationNodeSetRigidBodyCollisionResponse"), + NodeItem("SimulationNodeSetRigidBodyDynamics"), + NodeItem("SimulationNodeSetRigidBodyEffectorWeights"), + NodeItem("SimulationNodeSetRigidBodyShape"), + NodeItem("SimulationNodeRigidBodyMass"), + NodeItem("SimulationNodeRigidBodyVelocity"), + NodeItem("SimulationNodeSetRigidBodyVelocity"), + NodeItem("SimulationNodeSetRigidBodyAngularVelocity"), + NodeItem("SimulationNodeAddRigidBodyImpulse"), + NodeItem("SimulationNodeApplyRigidBodyForce"), + NodeItem("SimulationNodeApplyRigidBodyTorque"), + ]), + GeometryNodeCategory("GEO_GROUP", "Group", items=lambda context: node_group_items(context, {'GeometryNodeTree', 'SimulationNodeTree'})), GeometryNodeCategory("GEO_LAYOUT", "Layout", items=[ NodeItem("NodeFrame"), NodeItem("NodeReroute"), |