Quick Tip: Correctly Setting Fluid Mesh Normals

So you make a cool paint splash like the one above and you are happy with the look. But when you look closely at the render something is wrong with the mesh. There are black marks on the bright red shader but the mesh is smoothed enough and its not bumps so it has to be broken normals.

When the mesh was built the adaptivity parameter on the convert VDB or Partilce Fluid Surface was used to get a decimated mesh with fewer polygons in the flatter areas. The adaptivity slider on the VDB Convert sop is great for keeping the poly count of fluid meshes in check. And it helps smooth little bumps in flat areas which are hard to smooth but it can lead to artifacts like this.

Its clearly visible in the viewport as well.

These are patches with flipped or ill formed polygons and I tend to get them from time to time when using adaptivity. You could turn it of but then you have a much heavier mesh, or remesh the mesh but that is a whole other step where things could go wrong so lets fix it instead.


These are patches with flipped or ill formed polygons and I tend to get them from time to time when using adaptivity. You could turn it of but then you have a much heavier mesh, or remesh the mesh but that is a whole other step where things could go wrong so lets fix it instead.

The first thought would be to just drop down a normal sop that gives you a even worse result like the mesh below, whether setting it to point or vertex normals.

Its the right idea but the weighting method holds the key, changing it to By Face Area will change everything. Now the artifacts are removed and the mesh looks as smooth as it should be and that is it problem solved.

But why though? When setting the normal sop to compute the normals by face area the vertices contribution to normal calculation are weighted by the face area of the normal they belong. That limits the contribution of ill form polygons and accounts for the vast difference in polygon sizes on the decimated mesh giving a smooth looking mesh. To finish here is the help definition:

When set to By Face Area, the behaviour is similar to __Each Vertex Equally_, except that vertices on faces with more area will be given more weight when computing point normals.

2 Replies to “Quick Tip: Correctly Setting Fluid Mesh Normals”

Leave a Reply

Your email address will not be published. Required fields are marked *