9
$\begingroup$

Pointy meshes pierce cloth sim. How can I get around this while also keeping the physical qualities of my cloth (e.g. mass, stiffness, etc.)?

Here is a simple example of the problem I'm having:

Example

I've already tried increasing the collision quality, the distance, and the repel distance, but to no avail.

[ADDENDUM] I've found that an increase in collision quality can fix this (at least in 2.8--they may have adjusted things since 2.79). The only thing is, you can't just up it a few notches (which is why I previously didn't see benefit from it), you need to crank that number--enough that render time can become ridiculous but if it works it works.

$\endgroup$
  • $\begingroup$ You could try using face collision, but that slows things down allot... Serge’s answer seems to be a good solution to the problem. $\endgroup$ – Bigfoot Blondy Mar 31 at 11:50
  • $\begingroup$ @BigfootBlondy Render time isn't a big concern. What is face collision and how do I use it? I can't find anything in the blender manual on it. $\endgroup$ – thepufferfish Mar 31 at 21:16
  • $\begingroup$ Apologies, I only had my phone last night. Face collision is only available on soft bodies. I will post an answer shortly $\endgroup$ – Bigfoot Blondy Mar 31 at 23:00
5
+25
$\begingroup$

As far as I can see, there are two issues causing this problem.

Keep in mind I am using an early 2015 MacBook air to do this so I cannot go to as high samples as you or others reading this can.

  1. Blender calculates most of its collisions through vertices. As they come within close proximity of one another, it slows the vertices velocity. If it is moving fast or there are more vertices pulling it down (As in your mesh), blender has a tenancy to let the vertex pass. So to fix this we need to increase the number of collision vertices. This also can be done using two changes. One is to up the number subdivisions of the cloth mesh and the other method is to up the number of vertices of the point.

Subdividing the mesh is simple enough. Hit subdivide. But to get performance, you may need to select the area close to the point and subdivide that a lot, as I have done in my image below.

Adding more vertices on the point. This can be done by adding a sphere or icosphere to the point of the object. This needs to be small enough that it won't be noticeable from the distance you are rendering at. If it is far, it can be quite large, if it is close, you will need to make it smaller. I have made an example, though it is of low resolution, it still fixes the problem. If you don't want the ball in the render, turn it off in the Outliner window.

Scene Setup

  1. The quality steps and collision steps. They will only do so much to the quality of your simulation, but it does help. In my final output, I set my quality steps to 25 and collision steps to 5. The one that made the most difference was the quality, but I think both should be increased.

Here is my result:

Simulation Result

Remember, this is on a low power laptop. It took around 1 min to produce the first 58 frames. Yours may be at the same by the time you up the quality. In my render, you can see the change in mesh in the final result between High subdivisions and low subdivisions. If you want to minimise that effect, subdivide on an ever-shrinking area so it fades into the higher quality point of contact.

Hope I helped and best of luck with your project,

BFB

$\endgroup$
  • $\begingroup$ I suppose this means if I wanted to make a "low poly" cloth, I would have to find a way of "locking" the vertices of the area together to give it the appearance of a single larger face. Any idea of how I could go about that? Also, in a "gaming" context, where the exact area of collision is not certain, would you just have to use a ridiculously high amount of verts? $\endgroup$ – thepufferfish Apr 2 at 10:07
  • 1
    $\begingroup$ If you wanted to make a low poly cloth, do this then either remedy it or decimate it. And in a gaming context that is different. Game engines usually handle collisions differently. I am not sure about blenders engine but I know unity does it differently. A high number of verts is a bad idea in games $\endgroup$ – Bigfoot Blondy Apr 2 at 10:11
  • $\begingroup$ Sorry, in my above comment I am referring to the remesh modifier and decimate modifier. Was a little unclear with 'remedy' ;p $\endgroup$ – Bigfoot Blondy Apr 2 at 11:30
  • 1
    $\begingroup$ @Rich Sedman I tried soft body but I found it didn’t collide correctly. The collision on the point was worsened. And because I am on a low power computer, when I tuned on face collisions my blender froze with the good old spinning wheel of death. The performance drop was way to much for me to even mention the method. But you could try it. I don’t see why it wouldn’t work. Just cpu intensive, that’s all. The upside would be you could create effects such as balloon/balloon popping in one object. As you said, more versatile, but quite performance intensive. $\endgroup$ – Bigfoot Blondy Apr 3 at 8:49
  • 1
    $\begingroup$ Thank you @RichSedman for trying the soft body method. Makes it difficult for me to help people with the limitations I have :) $\endgroup$ – Bigfoot Blondy Apr 3 at 11:47
3
$\begingroup$

enter image description here

Use Pin option

  • Create vertex group for single vertex of cloth, where you expect spike to collide (it is Hook in my example)
  • Parent Empty to Spike object and relocate it at the peak. This will be a hook object to deform Cloth with respect to sharp Spike
  • Add Vertex Weight Mix, Hook modifiers before Cloth sim
  • By animating influence slider you can control both pinning and hooking. In this case value of 1 will clear vertex group and release physics simulation, while 0 doing the opposite.
  • Influence should be keyframed right before Spike is going to collide Cloth

enter image description here

$\endgroup$
  • $\begingroup$ This solution does work, but I have two big problems with it. Firstly, the cloth doesn't fall on the object and fit its form, it just sort of hovers around it like an umbrella. Secondly, I would much prefer a method where I don't have to specify where the collision is about to happen. Something I can apply across the entire thing so that any collision between the cloth and spike will not cause the meshes to overlap. $\endgroup$ – thepufferfish Mar 31 at 22:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.