Prevent GP Strokes From Clipping into a mesh

Using GP to define a model's facial features? You'll likely run into issues where the GP strokes clip into the mesh. This method should hopefully solve those issue.

When It comes to modeling faces, generally you would create eye sockets and a mouth, as though you were making a real person. This has held true for both Photorealistic and NPR styles in modeling. However, with the introduction of Grease Pencil into the more recent versions of Blender, we gained access to an incredibly powerful tool. Opening new ways to breath life into our models.

First off, why would we want to incorporate GP strokes into our 3D models? There are many reasons why. Maybe the model needs that extra edge to look 2D, maybe you don’t want to learn the more traditional ways to model a face, maybe there are smaller details needed, but modelling would take too long or look messy, or any number of reasons, really.

While GP has drastically opened up how we can stylize our models, it’s not always as simple as simply placing a stroke onto the desired spot on the model and calling it a day. That can work for certain parts of a model, like permanent in-lines on particular edges, but it can also lead to issues where the GP stroke clips into the model, particularly when the GP features get bigger in size.

  • An example of how thicker GP strokes can clip into the model they’re intended to enhance.

This isn’t an issue that can be solved by carefully placing the GP stroke points away from the model. That will cause the strokes to look less like part of the model, and more like they’re floating in front of the model, particularly if you intend to use the model at multiple camera angles. We will fix this by adjusting two things

  1. We will build the model to better host GP strokes.

  2. We will adjust the how we make the GP elements in a way that better suits 3D models.

A Note, the above steps do not need to be used for every single GP stroke you plan to have on the model, but it will help when using GP for bigger features that are meant to be “in” the model or if the strokes will be animated alongside the model, like eyebrows and eyes

First, Lets adjust the model so that it is ready to have 2D elements placed on top of it. In the model seen above, I placed the GP strokes on or near a series of edges that correspond to where I need the strokes. This may work on a model that is generally flatter, but a face has many sudden angle changes, that may be even more exaggerated depending on the style you’re going for. So, we will be adjusting our edges so that our GP elements don’t have to worry about a sudden change in angles, which contributes to the clipping issue.

What does this mean? It means that, instead of placing GP strokes on portions of a single edgeflow, we will be using two edgeflows to define an “area” our GP strokes will occupy. Then we can manipulate this area to be as flat as possible. This area will be hidden by the GP elements, so we don’t need to worry about the audience seeing a strange form to our models.

These edges essentially create flat planes our GP strokes can occupy. As long as our GP elements are within these planes, we don’t need to worry about clipping as much. If you use the loop cut tool to establish the second edge loop, you may need to adjust the position of the new vertex points along a certain axis to really create the flat area that works well with GP strokes.

With that first step taken care of, the model is now ready for us to introduce Gp elements, but we can take this further by changing how we make GP elements.

Previously, we simply used a single GP stroke to define the eyelids and brows, but what if the rounded look to a standard stroke doesn’t fit our style? Or we don’t like how the stroke can break the model’s silhouette? As seen below.

Well, we can fix this by using the fill setting in the GP material’s settings, instead of the stroke setting. Now, if you were to simply change the material of the existing GP points, it wouldn't exactly work. When you use a fill stroke, blender will fill all the space between the first and last GP point of a stroke, and since our stroke wraps around the model, the filled space would actually be inside the model, creating clipping issues again. Even if there are more GP points between the start and end of a stroke, these issues will persist.

We can fix this by breaking up the larger GP piece into individual planes for the GP fill setting to work with. The GP points should line up with the edges of the areas we created for the GP elements to occupy. By breaking up the larger form like this, we ensure that each part of the feature is as parallel as possible to that area of the model, preventing almost any and all clipping issues.

Here is an example of how the method looks when complete and how the individual GP planes are broken up.

This method is also animation ready. You just need to make sure that the weight paint values between the GP point and its corresponding vertex on the mesh are equal towards the desired bone. You essentially move the area the feature occupies along with the GP points themselves. The equal weight paint values ensure that they move in identical ways, preventing extra clipping.

To prevent ALL clipping, you can move the GP points to be a little bit in front of the model. Only a very small amount is needed, which means your model won't see a break in its silhouette, like in the previous method.