3
$\begingroup$

I am working with a 3D scan of an object that has convex ridges. Here is a screenshot of the object:

enter image description here

I am trying to use the interior of the model to create a space for a video game. As you can see in this image, the ridges of the model are concave when viewing the interior of the model:

enter image description here

If you imagine flipping a sock inside out, that's what I'm trying to do with this model. Is there a way to flip the model inside out so that the ridges are convex, rather than concave, when viewing the model from the inside? To be clear, I am not talking about flipping normals: if you were to do what I am imagining with a model of a human head, when viewing the interior of the head the nose would be pointing inside.

I already tried to do this with a cloth simulation and a collider around the bottom edge of the model, but that ended up smoothing out the ridges I am trying to preserve.

Thank you, and let me know if I can clarify anything.

EDIT: This is what the flipped mesh looks like following cmomoney's suggestion:

enter image description here

$\endgroup$
  • $\begingroup$ Have you tried if inverting scale (S-1) helps? $\endgroup$ – m.ardito Jan 31 '17 at 14:06
  • $\begingroup$ Hi @m.ardito, I tried that, it flips the model but isn't turning it inside out in the way that I am trying to do. $\endgroup$ – Miles Jan 31 '17 at 14:11
  • $\begingroup$ You're not going to use the 3d scan in the game, are you? $\endgroup$ – cmomoney Jan 31 '17 at 14:44
  • $\begingroup$ @cmomoney Yes I plan to, why? $\endgroup$ – Miles Jan 31 '17 at 14:46
  • $\begingroup$ Well, 3D scans are usually terribly high poly, also I needed this info to formulate an answer. $\endgroup$ – cmomoney Jan 31 '17 at 14:49
1
$\begingroup$

This could be achieved by baking a displacement map in Blender Render engine from your mesh to a simplified unwrapped version of your mesh, then using a subdivision and displacement modifier on the simple mesh with the baked image as the texture and a negative strength.

$\endgroup$
  • $\begingroup$ This seems like the most straightforward approach right now. I'll give this a try and let you know how it works out. Thank you! $\endgroup$ – Miles Jan 31 '17 at 16:39
  • $\begingroup$ I added a screenshot to my post showing what happens when I follow your suggestion. It seems like the resulting mesh is the same as scaling the original by -1 on the Z-axis, i.e. the ridges that were convex in the original are still convex on the plane displaced with negative strength. Maybe I am missing something? $\endgroup$ – Miles Jan 31 '17 at 17:16
  • $\begingroup$ If you rotate your result so that its upright like the original, then invert the normals, is it still not right? $\endgroup$ – cmomoney Jan 31 '17 at 17:47
  • $\begingroup$ Unfortunately no, it's the same as the original. $\endgroup$ – Miles Jan 31 '17 at 17:51
  • 1
    $\begingroup$ retried and edited answer. $\endgroup$ – cmomoney Jan 31 '17 at 20:22
1
$\begingroup$

Technically: probably. Realistically: I don't think so.

I think what you want to do is mirror each part of the surface across an arbitrary axis. The axis you'd choose would likely be some smoothed/averaged version of the convex mesh. Relating to your face example, you'd choose one axis for the nose that's just inside the nose, and mirror the nose across that to get it pointed inward, but you'd choose a slightly different axis across which to mirror each eye, another one for each ear, and so on. If you could use a shell that's sort of a REALLY smoothed out head, you could mirror each part of the mesh across the shell and get something that's flipped like you're talking about.

Generating a mesh that you can use as a mirroring axis is not all that difficult. Duplicating your mesh and adding a couple of smoothing levels (maybe decimate first, but whatever) should get your pretty close.

The trick is finding a way to actually do the flip in Blender. I don't know of any tools that can do this sort of mirroring. The reason I say "technically possible" at the top is that Blender allows users to write addons with Python, so technically speaking you could probably write an operating system in Blender. It's certainly possible to write a tool that will do this, but depending on your coding ability, it may be out of reach.

$\endgroup$
  • 1
    $\begingroup$ I'm not sure if this method does what I think it does, but closest_point_on_mesh seems to fit the description. Looping over all vertices of the original vertices and mirroring them at the closest point on the smoothed surface? $\endgroup$ – binweg Jan 31 '17 at 15:20
  • 1
    $\begingroup$ Yes, that seems like a reasonable approach. Note that there are a number of different ways to determine which point to mirror across. You may want the closest vertex (because you need a normal), or you might be able to use the closest surface point, or you may be able to just project along the normal until it intersects a point on the mirror-axis-mesh and use that point. Each of these has its own pros and cons. Especially with complex meshes like this (with lots of tiny detail) the closest point is often NOT the one you want to mirror across. I'd love to see your results. $\endgroup$ – Matt Jan 31 '17 at 15:27
  • $\begingroup$ Thanks so much for the suggestion. I'm going to try to code this in Python and I'll post my results. $\endgroup$ – Miles Jan 31 '17 at 17:46
  • $\begingroup$ Awesome! That's not the kind of thing that just any body can dive into, I'm glad you're going to give it a shot. $\endgroup$ – Matt Feb 1 '17 at 20:00

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.