Page MenuHome

Solidify Modifier "Rim Only" Mode
AbandonedPublic

Authored by Campbell Barton (campbellbarton) on Aug 13 2014, 1:17 PM.

Details

Summary

added "offset only" option and automatically flip normals when even thickness and noshell options are set (in case offset and offset_fac signs are not equal) otherwise visual errors may occur in mesh

updated modifier for current master, 2.71.1

Merge remote-tracking branch 'refs/remotes/origin/master' into mod_solidify_rim

Diff Detail

Repository
rB Blender
Branch
mod_solidify_rim

Event Timeline

Martin Felke (scorpion81) retitled this revision from to Solidify Modifier "Rim Only" Mode.Aug 13 2014, 1:17 PM
Martin Felke (scorpion81) updated this object.
Martin Felke (scorpion81) updated this revision to Diff 2419.
  • adaption to newer changes (like BLI_Bitmap stuff) and fix of even thickness bug with offsets != (1, -1) -> had wrong angles
Campbell Barton (campbellbarton) requested changes to this revision.
Campbell Barton (campbellbarton) added inline comments.
source/blender/makesdna/DNA_modifier_types.h
844

Rather not add this option, if its only offsetting then its just a displace modifier, and we have an existing displace modifier for that.

source/blender/modifiers/intern/MOD_solidify.c
317

Why add the extra loop when MOD_SOLIDIFY_RIM isn't used?

514

Code style, applies to other lines too: http://wiki.blender.org/index.php/Dev:Doc/Code_Style#Braces

This revision now requires changes to proceed.Aug 14 2014, 1:02 AM
Martin Felke (scorpion81) updated this revision to Diff 2428.
  • - removed offset only option as requested

Looks quite good, left some feedback still

source/blender/modifiers/intern/MOD_solidify.c
274

I think there should be some boolean defined here,

const bool no_shell = ((smd->flag & MOD_SOLIDIFY_RIM) || (smd->flag & MOD_SOLIDIFY_NOSHELL));

Since there is opportunity for errors if MOD_SOLIDIFY_NOSHELL is tested and the rim isnt set.

497

*picky*. naming, already a bit confusing to newVerts, numVerts ... now nVerts... try have something a bit more identifiable?

687

Would rather split this into its own block.

if (no_shell) {
    unsigned int start; ... etc
}
else {
    .... existing code ....
}
704

same as above.

Martin Felke (scorpion81) updated this revision to Diff 2429.
  • added no_shell boolean, renamed nVerts to allVerts and some code cleanup

The displacement modifier does NOT provide the same result as the solidify modifier.

  1. it has no even thickness option
  2. you cannot work with unites

this makes the displacement modifier for my line of work useless.
logically it makes more sense to include the surface off-set command into the solidify modifier.


This option is filling lacks of displace modifier on borders. Without it , faces of plane surfaces are doubled and it gives wrong results at render.

@claas eicke (cekuhnendev)

I could try to re-add the offset only option... as it clearly is not the same as the displace modifier, but it probably will remain in a branch for some time then, until its accepted.

@ronan ducluzeau (zeauro)

hmm, seems the entire modifier would need a remove doubles step, maybe optional even so double verts or faces would be merged.
I could try to add one, but unsure whether it will be accepted, since this double face behavior is present without the new option checked as well.
A quick and dirty way would be to use the according bmesh operator for this, but converting the derivedmesh to bmesh and back causes a performance hit and wont be accepted i think.
Currently i am not aware of another easy way to solve this directly on derivedmesh level.

@claas eicke (cekuhnendev)
I could try to re-add the offset only option... as it clearly is not the same as the displace modifier, but it probably will remain in a branch for some time then, until its accepted.

I would hope so - I do not know what it was assumed to be the same as displace because it is not.
If the displace modifier could work with unites and also have haven thickness great, but I do not think this is
what the displacement modifier is intended for.

The solidify modifier is more the off-set tool, but offset could be used for both, off-setting the surface, adding thickness
or just only having the surface interactively offset and not showing the original surface like what displace does.

Maybe it would be wise to make a separate Offset modifier based on the current solidify but without the nonsense option like fill rim, index offset etc. The think is that the simple offset doesnot generate any geometry so it should be in the deform category and not in generate together with solidify.

Maybe it would be wise to make a separate Offset modifier based on the current solidify but without the nonsense option like fill rim, index offset etc. The think is that the simple offset doesnot generate any geometry so it should be in the deform category and not in generate together with solidify.

I would not call offsetting a surface a deformation. Displaced does deform offset generates if you follow the logic of the end result.

However I can see the value in just a surface offset modifier.

@claas eicke (cekuhnendev), @Martin Felke (scorpion81)

Why not add an Even Thickness option to the displace modifier? (this can use the same method as solidify uses - scaling the displacement by vertex-angles)

@claas eicke (cekuhnendev), @Martin Felke (scorpion81)
Why not add an Even Thickness option to the displace modifier? (this can use the same method as solidify uses - scaling the displacement by vertex-angles)

The problem is that the displace modifier uses strange parameter (Strenght) for displacement. User usually wants to input the offset distance in BU - like in the solidify modifier...

@Marek Moravec (marek) - the strength is in blender units too.

Set the strength of a plane to 1.0 and the mid-level to 0.0, it moves 1.0 blender unit.

@Marek Moravec (marek) - the strength is in blender units too.
Set the strength of a plane to 1.0 and the mid-level to 0.0, it moves 1.0 blender unit.

That might be true, it is still not logical and I cannot enter 25cm or 0.25" or 5/16" into the strength.
Also in offset strength does not make sense when describing distance like in offset and midlevel
makes no sense when dealing with the baseline offset.

And even thickness option for the displacement modifier would provide the needed off-set functionality but because all my entries are often imperial and metric it would make it a hassle to use the strength.

I can see in the sense of Blender that displace might be a fit being an interactive deform tool, while solidify by what it does is more a fit when comparing how other cad programs structure the work.
Bend is considered a deform task, offset a geometry generation task.

However considering that Blender is not a CAD system I could see this work either way Solidify or displace. But for displace to be useful naming and unites have to change and work which is why I think solidify is just a better fit.

@claas eicke (cekuhnendev), IMHO this is a UI issue, we can just make the setting work in a similar way to solidify.

  • Basically, if its not very obvious how to set the value - we should fix that.

@claas eicke (cekuhnendev), IMHO this is a UI issue, we can just make the setting work in a similar way to solidify.

  • Basically, if its not very obvious how to set the value - we should fix that.

If it is just an UI problem perfect!