Shell modifier, progress, help/feedback needed.

I’ve made some progress hacking together a shell modifier. It’s pretty simple so far, but basically functional.

Which is nice.

However I could use the advice of dev with a problem with following the subsurf modifier:
In Object mode it looks fine

However, when you enter edit mode the shell disappears

Anybody know why?

I’m splitting the development into three parts.
Basic shell modifier. This should:

  1. Optionally create a new surface displaced along vertex normals of old surface (choose amount of displacement)
  2. Optionally skin the the gap between the new surface and the original surface
  3. Optionally remove the original surface
  4. Optionally (default yes) flip the normals of the original surface
  5. Displace the original surface along it’s new normals (choose amount)

How does this sound?

Improved shell modifier
Add option to enter shell thickness (ie distance between faces rather than displacement along normals). Limit normal displacement to some multiple of shell thickness

Super Improved shell modifer
Multiply vertex displacement by vertex group weightings

It’s best to ask on the Blender dev. mailing list accessable here.

Asking on that list is the best way to get help from experienced developers and how to make sure your code isn’t hacky (they like proper implementations more than hacks)


After reading the other thread and thinking “man, that would be useful” I was afraid I would have to try to do this myself – which usually doesn’t go so well I might add.

If you post a patch folks could take a look and help out a bit.

Sounds good, but you seem to be assuming that the shell is added outside the original surface - it would seem more natural to me for the modelled surface to be the outside face and the shell added inside. That is, the new surface (not the old one) should (by default) have its normals flipped.

Best wishes,

Congratulations for getting into it!

I think it’s best to have an option to displace the mesh inwards or outwards separately. Sometimes this can be very useful. Another thing that is very important is for the displace of flat surfaces to keep the tickness constant, but an option for that is needed because it can lead to problems in some cases.


well in your screens it looks like the little icon that says, “hey show me during edit mode!” is not depressed. I am not sure though.
it is the little triangle looking button/toggle in the header part of the modifier.

Same problem whether the button is pressed or not. I’ll get it tidied up and then ask a dev.

As to whether you model the ‘inner’ or ‘outer’ surface it just seemed more logical to me to extrude along the face normals (ie you’re modelling the ‘inner’ one). It will allow you to either though.

I’d like to see the ability to control the shape of the skinned gap, maybe by entering a curve name. Also would be good for an option for the original mesh to define middle of the gap between the two surfaces.

yeah, that’s great… thanks for the effort! :slight_smile:


I hope there will also be an option to connect the faces of both shell parts to create a shell volume.

See point 2:

I always wanted a shell extrude…

Being able to specify which parts of the model to shell is pretty important, so vertex group support would be nice.

Is this a C/C++ thing or a python thing?

as its a modifier my moneys on C or C++

This is a new modifier so it should be hardcoded into Blender source code either in C or C++.

Felix was faster…

It’s in C with a very little bit of Python for the UI. Not having all the neat features of Python is taking a little bit of getting used to. If anybody knows a neat algorithim for finding non-manifold edges from an array of MVerts, MEdges and MFaces then I’d like to know it…

jester - go to #blendercoders channel on irc,, and try to find joeedh or briggs, they will know.

By the way - ideasman coded some shell script some time ago, it should be in the blender wiki repository, just for some inspiration might be nice.

another idea for super super improved shell modifier -
solve cases when in sharp angles the new surface intersects itself :wink:

??? I have no idea, count the verts into an array, then check how many faces each vert is atached to…I need to shut up as I certainly have no clue…lol
I have no idea about blender specific functions and includes, structs, classes, or any of it in general…I keep thinking I need to get into it though.

another very important thing you should know is that you should probably develop the modifier in the bmesh branch, since it will replace current mesh system relatively soon.

@Felix & Krizas, thanks for the answers guys. guess the C/++ guys really own the show.