Problems with subsurface and intersecting geometry, finding it hard to completely eliminate pinching and distortions, seeking a better workflow or order of operations

I tried getting help on reddit with this, but no luck so far, so I thought I'd try here.

I'm currently working on my first project and am using that as a way to advance my learning away from tutorials for a while. Not that it matters, but I'm modeling the APC from Aliens, because it's awesome. It's unusual for a vehicle in that it's more angular and boxy than smooth. I do have subsurf on it because it has a few edges that need some smooth curve.

My main approach has been to use a crease/mark sharp/autosmooth workflow with a bevel shader applying nice rounded edges at the render level. That has worked really well up until today when I was modeling the front turret. On the particular section where the barrels come into the turret body, there's a lot of stuff going on that precludes the use of creasing, and using a bevel weight modifier to establish a smooth union between the barrel and body is only mostly working. Mostly. It doesn't look awful, but this was after much time was spent massaging everything as best I could get it. Since I'm using this for learning and my goal is knowing how to do any particular thing to perfection and in an efficient manner, I feel stuck.

What I did in this case was shrinkwrap project a circle onto that section of the turret, apply it, deleted any faces that touched the circle, then joined them and manually connected the geometry up and extruded from there to form the barrel.

My question is: how would you have handled where the barrel connects to the body of the turret in order for it to be seamless, without pinching and distortion? The only thing I can think of is to not join the meshes together at all and just stick a cylinder through the turret body, join them into one object, and let the bevel shader do its magic where the two objects meet. That feels like cheating, though. I did try using the shrinkwrap modifier with vertex groups on the barrel excluded, but I couldn't get that to look right either. Any insights/thoughts would be appreciated.



  • spalermini replied

    This seems like a place for using the Boolean Modifier. You can use one shape to either cut or join with the other. So, you could use the barrel section to cut out the turret section to exactly the overlapping shape. The below example uses Difference. The modifier is on the body that I'm keeping, and use the cubes as the Boolean object. It should play nice with the subsurface modifier as well. 


  • eromivus replied

    Thanks for the response. I'll admit I haven't used booleans more than a few times because I'm usually using subsurf and have heard it's strictly a nonsubd technique. It's possible I've missed a step or misunderstood you, but when I have subd turned on I get  bad shading artifacts:


  • spalermini replied

    Nope...you're exactly right. That subsurface causes no end of problems. Smooth shading in general, seems to be a major issue here. I know I had a reference somewhere on how to do this. I'll see if I can find it. That being said, your initial solution of just letting the shader do it's work may be ideal, especially depending on how close you're going to get your camera.  

    EDIT: The reference I was thinking of, which does basically accomplish what you're looking for, was in the Sci-Fi Helmet tutorial, but it relied heavily on the Remesh Tool and Sculpting to achieve the final product.

  • eromivus replied

    Subsurface does seem to be at the heart of every problem I encounter with hard surface modeling. I did a test render using the bevel shader to make it look like the objects were joined, and it actually looked perfect. Man did I feel gross having geometry just jammed inside of other geometry, though. Let's call that Plan D.


    It's funny that you mention the sci-fi helmet, as it's one of the few courses I skipped because I didn't want to get into sculpting yet. I'll check it out. I was actually looking at the 2017 advanced course on modeling the motorcycle today and noticed he was effortlessly and crisply cutting into his subd surface and mentioned kind of offhand that the edge split modifier let him get away with that. That is apparently a legacy modifier, as you're now supposed to customize your normals instead...whatever that means. I suppose I need to get underneath the hood and dive into normals more.


    Thanks for your help!

  • spalermini replied

    I couldn't seem to let this go and yourNormals comment triggered something. Here's what I was able to do with Booleans, Subsurf, a couple control edges and Normals (Auto Smooth).  This is set to Shade Smooth. If you subsurf and use control edges on the Boolean object you can get the inside of the cut totally smooth as well. This might be more than you actually need to do for this project, but it might come in handy in the future!

  • eromivus replied

    Thanks for following up and for setting that up. So some good news/bad news/great news.

    The good news is after reading your response I went back and gave booleans another try. At first I got terrible shading artifacts again, but after some poking around in the Object Data Properties tab I noticed my Auto Smooth angle number was dimmed out. I could still change the number, so I thought maybe it was just a minor visual bug. Then under Geometry Data I noticed that there was a Clear Custom Split Normals Data button. I clicked that and suddenly my boolean difference with subd looked flawless. I vaguely remember in a moment of frustration flailing away under the Mesh > Normals options and probably didn't undo everything.

    The bad news is that after playing around for a while I realized this wasn't actually going to achieve the effect I wanted. To have barrels coming out of the turret body and have a nice little bevel to simulate a light welding effect where they join, I'd have to use the Union boolean and apply it. Union wasn't quite as flawless as difference, and in order to get the render effect I had to apply it. When I apply a boolean it all goes to hell again with subsurf. I'll definitely have to do a better deep dive on booleans in the future to see what you can and can't get away with when using subd. There seems to be some hope there, but it's finicky as hell.

    The great news is that while playing around with the shrinkwrap modifier I got the perfect blend of being lazy with the bevel shader without having unnecessary geometry in unwanted places. I created a cylinder, gave it the desired subsurf, shrinkwrap project (Y, positive), create a vertex group on the edge ring that would be attaching to the barrel, have the project on the shrinkwrap affect only that vertex group, apply, join the objects, render:


    I think there is one more workflow I can think of that might work here, and that involves the Data Transfer modifier. I'm going to have to go dig up the video where I saw this technique, but it worked kind of like shrinkwrap in that you're duplicating your base object and transferring its mesh data over to the dupe and then...you do stuff...and it ignores distortions.