The simplest way to simulate rope or string is using a Soft Body simulation on a row of vertices and add thickness with Skin and Subdivision Surface modifiers. You can use the Soft Body Goal to pin one end to the spindle - similar to your example.
Looking at your Blend file it appears that there is a problem with your parenting of the 'hook' point - it appears to pass through the surface of the spindle and this could be interfering with your simulation (as it will drag the 'string' through the surface rather than resting on it.
The accuracy of the simulation is determined by the number of vertices in the soft body mesh (more vertices will give a better simulation but will take longer to calculate) and the Soft Body Solver settings (in particular the number of 'steps' and the 'Error Limit').
Start by creating the 'string' of vertices. The simplest way of achieving this is to create a Path (Add/Curve/Path) and convert it to a mesh (Object/Convert To/Mesh from Curve). Create a Plane for it to fall on, with Collision enabled in the Physics properties.
Rotate the string by a slight amount so that the vertices don't falls exactly onto each other (or it will unnaturally balance each vertex onto the next), then add Soft Body in the Physics properties. Disable the Soft Body Goal and run the simulation.
To make the string interact with itself, enable the Soft Body Self Collision.
Adjust the Collision settings until you get the desired effect (eg, increase the Size for a thicker string).
Add a Skin modifier and a Subdivision Surface modifier to give the string some thickness, setting the vertex Mean Radius X and Y when in Edit mode to control the thickness of the Skin modifier.
It's important to note here that the 'collision' is not with the actual skinned 'rope' - rather it is with the 'core' of vertices that runs through the middle. The self-collision (rope with rope) is controlled within the Soft Body Self Collision settings but the collision with the 'floor' surface is controlled by the Collision set on that surface (the 'Outer' Soft Body and Cloth property). This means that this method is only applicable to circular soft body objects and that all soft body objects must have the same radius (ie, you can't have two ropes of differing thicknesses).
All that now remains is to pin the rope onto the spindle and this is achieved using the Soft Body Goal and to explain this fully we need to understand how the Soft Body simulation works.
The Soft Body simulation moves the soft body vertices independently of the 'actual' mesh position. This means that the Soft Body vertices can move away from where the mesh vertices that 'spawned' them actually reside. Each soft body vertex has forces applied to it based on a number of factors (such as the distance to its neighbors, proximity to surfaces, etc.) and the simulation engine determines its new location for each frame by resolving these forces - as if springs were pushing and pulling in different directions. One such 'spring' is the Goal - a spring connecting the soft body vertex with the position of the actual object mesh vertex. With the goal enabled the soft body vertex is constantly pulled towards that location. By hooking the vertex to another location this allows us to drag the associated soft body vertex to that location - which can then be pinned to, say, a rotating spindle. The strength and presence of these 'goal' springs can be controlled by a Vertex Group.
In the example blend file I notice that the Empty used to pin the rope to the spindle is parented to a Vertex, not the parent object. As vertices do not convey any rotation data (they are simply a point in space), this means that the movement of the empty does not properly follow the expected motion around the spindle - it starts outside the spindle but crosses to inside as it travels around. Because it passes inside the spindle mesh this will interfere with the collision and causes unexpected issues with the soft body passing through the spindle. To resolve this, change the Parent Relation from 'Vertex' to 'Object' or '3 Vertices' and re-position the empty back to its start location (both these options include rotational data and so will keep the hook point relative to the outer surface of the rotating spindle). The hook point should now correctly move around the outside of the spindle.
To hook a vertex of the soft body simulation requires the following further steps.
- Select the soft body mesh and go into Edit mode (Tab). Select the vertex to act as the hook, create a new Vertex Group, assign that vertex to the Vertex Group.
In Object mode, select the Empty to use as the hook. Hold Shift and click the soft body to select it (you should now have both the empty and the soft body mesh selected). Go into Edit mode (Tab) and select the vertex to hook and press Ctrl+H to bring up the Hook menu, select 'Hook to Selected Object'. And back to Object mode (Tab).
In the Soft Body, enable the Goal settings and set the Vertex Group to the Vertex Group created in the first step.
Check the order of the Modifiers on the Soft Body object - the Hook modifier must be above the Soft Body modifiers for the Soft Body Goal to take account of it's hooked location.
Rotating the spindle should now drag the soft body vertex around the spindle. Assuming the Spindle has been given suitable Collision properties the rope should lay on its surface and wrap around, colliding with itself (due to the Self Collision) as it accumulates on the spindle.
If the simulation is not accurate then there are a number properties that can be adjusted to help. It's a good idea to always adjust a single property at a time, evaluating the result before adjusting anything else (otherwise you won't know what had the effect). This also means that if you change something that makes the simulation worse it's easy to take a step back to try something else.
- If the Soft Body rope is too angular as it wraps around, subdivide the mesh further to provide more vertices.
- If the rope between vertices are passing through the spindle or the rope passes into itself, enabled Collision Edge in the Soft Body Edges settings.
- If the simulation is erratic, adjust the Soft Body Solver settings (one at a time). eg, decrease the Error Limit, increase Max Step, increase Min Step - these settings can significantly affect calculation times for the simulation. It's not uncommon to adjust these settings by a factor of 10 or more to improve the simulation. eg, Error limit 0.01 or even 0.005 or lower, Max Step 3000 or more, Min Step 100 or more. The trick is to increase them enough to improve the simulation while still keeping the calculation time within acceptable limits.
In addition to this it may help to adjust the Soft Body settings to improve stability. Again, adjust one thing at a time - by small amounts initially try progressively larger amounts if necessary.
Soft Body Goal - can increase 'Default' somewhat to make the goal 'spring' stronger (so it's tied more firmly to the goal), adjust Stiffness and/or Damping to prevent 'bouncing' around the goal.
Soft Body Edges - increase the Push and Pull springs to make them less flexible (so there's less stretch). Damping can slow down 'bouncing', Bending will make the rope less flexible. Enable 'Edge' collision for better collision detection (make edges collide rather than just vertices) - this can cause the simulation to take considerably longer to calculate.
Another thing to note is the Collision physics Soft Body settings. For small objects or fast moving vertices these become very important.
Note the Soft Body and Cloth settings - Outer and Inner - it's important to understand what they mean. For the Soft Body simulation, Blender calculates the new location of each vertex on each 'Step' of the animation. If the new location is within a surface then Blender will apply a repulsive force along the surface normal to repel that vertex. The 'Outer' setting controls how far off the surface the repulsive force starts to have an effect. The 'Inner' setting controls how far below the surface the repulsive force has an effect. For a vertex collision to take place it must 'hit' these collision zones otherwise it will pass straight through (if it's moving too fast, for example) - so larger zones usually produce a better simulation. However, it's also important that zones do not overlap. In the case of a small object like a spindle you should ensure that the Inner collision zone is not too deep as it can cause unexpected behaviour (see below).
Finally, fine tune the Self Collision, the Spindle Collision Outer, and the Skin radii to adjust the thickness of the 'rope' and its interaction with the surface.
Using your Blend as a start point I produced the following animation (after creating a fresh rope as detailed above and changing the parenting of the hook point to 'object') :
This was using the following Soft Body settings :
Spindle collision :
Spindle hook point parenting :
Note that I reduced the 'Inner' setting of the collision of the spindle - since the spindle is only 0.21 blender units in diameter, the default collision properties of 0.2 results in the collision zones from the front and back faces to overlap to that the opposite side 'inner' ends just 0.01 units below the upper surface. This means that if the 'rope' intersects with the spindle by by more 0.01 then it will be considered further below the opposite surface that it is below the upper surface and is dragged through the spindle. Reducing the Inner to 0.1 removes the overlap, giving a better simulation.
In addition, a stretchy and/or heavy soft body simulation will store up a lot more energy as it falls which can drag the upper vertices further through the spindle, further compounding the collision issue. This can be reduced by either decreasing the Mass of the soft body (in the main 'Soft Body' properties) or increasing the Soft Body Edges Pull/Push Springs closer to 1.0.
Blend file attached.