Zozo's contact solver is an open-sourced physics engine developed by a Chinese textile company that enables Blender to perform cloth simulations without self-intersection, supporting multiple fabrics interacting with each other, complex pinning systems, and material properties like Young's modulus and friction through TOML configuration files. The solver uses a PPF (Projective Penetration-Free) methodology that creates shape keys for each frame to prevent intersections, allowing even dense cloth with thousands of vertices to collapse naturally without glitching through itself.
Deep Dive
Prerequisite Knowledge
- No data available.
Where to go next
- No data available.
Deep Dive
ZoZos Contact Solver - The ultimate Blender cloth simulatorAdded:
If you've ever done cloth simulations, you understand how big of a deal these animations I'm showing you are that don't have self- intersection and are just doing things that like Blender's cloth solver couldn't where you have super close contact yet no intersections, multiple fabrics dealing with each other, twisting and stuff like this. And recently this has become accessible in Blender using something called Zozo's contact solver. From what I understand, there's some Chinese textile company that part of what they do is they simulate their clothes for ads or whatever it is they do. They've taken their physics engine and open- sourced it and made the license very permissive. Not only that, but they made a Blender add-on that lets you kind of connect the two Blender to this solver.
So, let me show you how to do that.
Assuming that I remember, I'm going to put this link in the description. This is the GitHub repo where you can get the solver. You're going to see that there's like a very, very long explanation, but I'm hoping that I can do that for you.
Go to releases. This is where you can get the code, the simulator, and the add-on and all this. And you want to pick up both the Blender extension and the corresponding contact solver, which again is going to be in assets. By default, this is much easier to run on Windows. And make sure these match because a newer version of the add-on doesn't necessarily play nice with a older solver. When you extract the zip, you're going to get a folder like this.
And also, you have the add-on which you install like any other add-on in Blender 5.0 Plus. Once you've installed the add-on, you're going to see it in your end panel here, which can be like, you know, somewhat overwhelming, but let me simplify the process for you. First of all, I'm going to Why am I using my thumb? First of all, I'm going to show Blender where the solver is so that they can communicate with each other. Second of all, pew pew, I'm going to set up a very basic scene for cloth simulation.
Thirdly, I'm going to use this add-on bridge to send it to the solver. And then fourth, I'm going to take that animation and bake it into Blender.
Starting with the connection, I'm going to go to the type and I'm going to go to Windows native. If you have Windows, this is the easiest way to do it. If you have other stuff, you're going to use Docker. Once you have Windows native, you have to say where is my solver path.
I am just going to go to the folder that PPF contact whatever. You don't need to go into any subdirectory. Just the parent folder is good enough. And I can give this a project name like demo.
Before doing anything else, I'm going to establish a connection by hitting connect. And you're going to see it's running. It's waiting for data cuz I haven't sent it anything yet. Let's start with a really basic scene. So, I'm going to add a plane that I'm going to subdivide a few times. This is going to act as my cloth. Note that this is infinitely thin unlike a cloth that could be something like this. So this is infinitely thin. You get to skip most of this and go directly to dynamic groups.
Create a group. And this is where I say what objects should be simulated. What is their behavior? Stuff like this. So with the plane selected, I'm going to add selected objects. Note that this goes into group one, which I can call cloth or whatever. And you can kind of separate this visually using these overlays. Now, when I send this into the Zozo solver, it's going to know that I want to simulate the plane. Now, because this is infinitely thin, we're going to need to go into the group type, of which there are four. Solid, shell, rod, and static. And I'm going to select shell.
Solid means you have a watertight mesh.
Something with thickness essentially.
Shell basically means you have a one-sided surface, which is the case with fabrics and stuff like this. And this is why it's so impressive that it can handle this. And rod we we just don't care about, but it's for like strings and ropes and rods. And static is very useful cuz it's going to be our collider. You don't necessarily simulate, but you say cloth. Kind of act against that. Speaking of static and all this, I'm going to add a collider like a UV sphere. I'm just going to apply scale. So we have a mesh. And then I don't want to add this here necessarily, but I'm going to create a new group collider. Making sure to say this is of the static type. Add selected objects.
And there you go. So this is kind of as basic as you can get. Now that we have our scene set up, we're going to transfer that data over to the Zozo solver, which sends it back. In the solver, I'm going to click transfer.
You're going to see this works automatically. However, if you have a very big scene with a lot of polygons, it's normal to wait for a few minutes.
That happens. Once you've transferred it, you just hit run. And the super cool thing about this is not only does it run the simulator, but you can play live.
And here you can see we're getting a super uh simple draping animation. And it's kind of hard to see because it's low poly, but nothing is intersecting.
I'm going to terminate this. And now it plays back nicely in here. How is this possible? Well, what it's doing under the hood is it's creating a it's called a PC to cache and it's bringing that into Blender and applying it. If I don't want this cache modifier, just hit bake animation on this plane. So, bake animation, bake all, and now we have this on the mesh itself. And I can do anything I want to it as a post-processing. Like I can add a subdivision surface, shade smooth, bring it up just a little. And now we have this super, you know, basic but working simulation. I want you to notice that if I turn on face orientation, which will show me both sides of the mesh, nothing is intersecting itself. How is it possibly baking this without using a cache of any kind? What it's actually doing is it's creating a lot of shape keys where on every single frame, it's going like shape key by shape key, if that makes sense. So now I want to do a different simulation. And when you do that, you want to delete this remote data. That's the data in the solver. And I'm also going to clear local animation.
What I want to do now is I want to talk about pinning, keeping things stationary while other stuff is simulated. It is a hard constraint. You're going to notice that inside our cloth group, there is an option for pins. Pins are basically a vertex group that defines what should and shouldn't move. I'm going to create a pin group based on this selection. And you're going to see we get this overlay that shows that it is working and it moves with it. Although it doesn't move with animation, and we're going to talk about that soon. Now that we have our pins, all I need to do is transfer this data again. Hit run. And then you're going to see very soon this is pinned.
It's doing our collisions and stuff like that. Clear this again and let's do something with a bit more resolution. So now when I run this or do the transfer, you're going to see it takes a while compared to usual. And by the way, if you don't like this overlay, even as this simulates, you can totally just turn it off. So turn off overlay color and then in the collider also turn off overlay color. And here you can see how close they get into contact while still technically not intersecting each other.
And if I play this back, it's, you know, it's a cloth simulation, but we haven't done anything impressive yet. What I'm going to do is I'm going to take this cloth and bring it up a notch. So, literally bring it up, make a few copies. This would not work with Blender's cloth simulator. There would be like intersections and stuff like this. I'm just adding a tiny bit of variance here. And you're going to notice that these new ones do not have pins or anything like that. And that is because these new objects are not in the cloth. So, select all of them. I'm going to add selected objects. And now they all exist in the cloth. Go one by one on these objects. I can create new pin groups. So this is going to be pin two.
This is going to be pin number three.
And would you believe it when I say wait for it, wait for it. This is going to be pin group number four. And it's cool that you can separate these because they can have different properties which we haven't talked about yet. Now we expect the transfer to take a bit longer. Not in the first two seconds. I mean that's still pretty fast. And here is where it gets seriously seriously impressive.
You're going to see as you expect more kind of complexity where these overlay on each other, it's going to get a bit slower, but they are not going to intersect. And I'm going to show you that that is the case in a second. Here I'm showing that the cloths are different colors. And when I click play, you can see there's no intersection.
They're overlapping and they're all playing nicely together. If you have like a layered clothing system like a skirt or whatever, this is the key to doing stuff like that. Now, I want you to notice kind of the surface properties of this simulation. I don't know, my cloth. Is this cotton? I'm not sure. I haven't talked about this yet, but this is totally something you can control.
Inside of the dynamics group, in this case, the fabric shell. Under pins, you're going to see we also have something called material parameters.
You can upload certain material properties that are complicated like young modulus and the friction and stuff like this. The way you specify these settings is in a tol I'm going to call it toml file. Generally the format looks like this. These are basically saying the cloth is a shell object with a certain kind of simulator. And these numbers a lot of them you can find online. I made a toml file for denim, cotton, silk. I believe those are the main ones for now. You can get that over on my website. Those are numbers more configured. For now, I'm going to load in that silk option that I showed you before. These are falling again pretty much the same way, which you would expect. We expect the behavior to be different during these contact points.
And while this is running, I should mention that this is called a PPF solver. You might have noticed that in the folder that stands for like projective penetrationfree dynamics or something like that. So, it's using a different simulation methodology that makes this crazy stuff possible. It's a bit more subtle, but this is acting differently. And if we were to make this a dress or a skirt, it probably is more obvious. Now, I want to talk about something that was complicated for me and it took me a while to figure out.
Here is a cloth that I wanted to attach to a certain object as if it is pinned to it. In other words, these pins need to be animated onto an object. One thing I tried is I made a hook object. This is basically an empty that controls the position of these. However, you're going to see that these pins do not move. They don't move with the mesh. In fact, if I do kind of like a basic animation over here. So here you can see they're moving. The pins do not come along for the ride. So when I simulate this now, you're seeing that it's it's as if it doesn't actually care that the pins were moved at all. This was very frustrating cuz what this means is that it doesn't care about any kind of modifiers. Even if I put this before, I've tried that.
It also doesn't care about constraints.
It also doesn't care about if I make it an Olympic cache. But there is a clever workaround which I will show you now. If you go to your object and go into edit mode, that was the key insight. you're going to see that the pins get more options, specifically key frames. So, what I can do is I can make a key frame, go 30 frames down, and I can move these pins, which now you can see kind of map with the movement. Make another key frame. And even though you do not see this update in the viewport, this method now tells Zozo solver that this is going to be key framed over time and to stay with the pins. And now when I do the solve, you can see the pins are animated and the fabric is acting accordingly.
Here is what that might uh look like.
Let's go over one more crazy example.
Here I have a super dense cloth. If I zoom in, you can see that that is the case. And I want it to fall on the ground and basically collapse. Blender's cloth simulator would choke, especially because this is perfectly vertical. Like there's no bias or way to say, "Oh, go this way and then that way." It will all just kind of collide with itself and glitch through itself in a really bad way. This is where Zozo's contact solver shines. First of all, I'm going to specify this cloth as a shell and all this. But there is a second way to create this collider over here. If I go into invisible colliders, and we haven't talked about all these settings over here that let you add forces and stuff like this. I can add a invisible collider, in this case, a wall collider, which you can see it adds this overlay, which is super nice. Think of this not necessarily as this grid, but it spans infinitely far in every single direction, which is nice cuz now you don't need to make that solid thing. You can move its position or whatever, change the thickness, the friction this experiences. I'm going to do full friction. And let's kind of give it this worst case scenario. So, I'm going to transfer. This is going to take a while.
I've had this take like 10 minutes. I really have. I think technically it is better to export this scene and bring it into the solver directly. Although I would imagine it does something kind of similar to what this is doing now. If I was to get to like a million vertices, I don't know how long the transfer would take because this is like 10,000 vertices. So I have cantaloupe. Well, very little cantaloupe to eat. The good thing is this is super super stable and eventually does finish. So this is 30,000 vertices. I'm going to run this nightmare scenario and hope for the best. I didn't even notice it has begun.
So to get the most out of this visually, I'm going to turn off the overlay. I can also turn off the wireframe. And look at that. This has zero intersections, which again is absolutely insane. So I'm going to shade smooth. I can also apply a subdivision surface modifier on top of this, but I'm just going to let this bad boy run. I do want to mention there is this like Jupiter lab export option.
This plays much nicer, I think, with the solver. So you don't have to do this live Blender integration. By the way, when I apply subdivision surface, you can see it cleans it up much uh more nicely while still having zero self- intersection. And by the way, you can get this contact to be much much closer if you go into the actual solver settings. And it is fun to kind of see the data of what is streaming in. So the number of contacts is basically how many self intersections is it avoiding as far as I understand it. And that was pretty fast. So let let's see what this result looks like. It collapses. It collapses.
And amazing. just incredibly the fact that you can use this with animated static meshes and all this. Again, out of the scope of this video, but look at how close the contact gets to, you know, letting itself touch. I could always add modifiers on top of this that kind of capture wrinkles and micro detail, but you know, I mean that that what else is there to say? I hope this was understandable and a good introduction to the Zozo contact solver. As a final note, again, you can go to my website, get all those tomill presets for denim, cotton, silk, rubber. I'll see what else there is. I'll upload them there. I know coincidentally that a cloth dynamics node was added to 5.2 geo nodes and I was going to talk about that but this is just like next level. It doesn't have tearing though which I guess is a shame.
Thank you for watching CG Matter. Over and out.
Related Videos
Agentforce NOW AMA: Build with React and Salesforce Multi-Framework
SalesforceDevs
490 viewsβ’2026-05-28
How agent o11y differs from traditional o11y β Phil Hetzel, Braintrust
aiDotEngineer
450 viewsβ’2026-05-28
WEB TECHNOLOGIES UNIT-2 | Degree 4th sem BCOM Computers web technologies unit-2 full explanationπ―β
LearnwithSahera
1K viewsβ’2026-05-29
More tests are always better? How to use AI to identify tests that bring little value
Alliance4Qualification
335 viewsβ’2026-05-29
Search Algorithms Explained in 60 Seconds! π€π¨
samarthtuliofficial
218 viewsβ’2026-06-01
People of Game of Thrones using JavaScript DOM
AltCampus
296 viewsβ’2026-05-30
Introduction to Problem Solving Part - 1 | Lecture 1 | Intermediate DSA
ascensionix
107 viewsβ’2026-05-29
So What's Odin Lang Even Good For
TechOverTea
131 viewsβ’2026-06-01











