View Full Version : How symmetry manufacture polygon model?

09 September 2004, 10:10 AM
Hi Everyone !

XSI.How symmetry manufacture polygon model?
The left and right sides is manufacture moreover .
I am much obliged.

09 September 2004, 03:05 PM
I'm pretty new myself with XSI, but I think I know where coming from. If you want to know how to create a 3d object that has symmetrical geometry and want to model on side and have the geometry replicated on the other side there's an interesting tutorial at 3D palace (modelling the Feisar ship from Wipeout) that shows a method.

You may find it a little hard to follow...The crux of it is that you need to make a "Model" of your geometry, create an instance of it and then flip (Transform with a minus value) it.

Hope this helps.

09 September 2004, 12:05 AM
it's pretty easy to do in the end. When u decide that it's time to move into mirror mode, simple make sure you have a seam edge going all the way through your object (add one if you don't) then select all the polygons on one half and delete them. Then Create->Model->New Model from the modelling toolbar, now go to edit and find instanstiate single. Now select the instance and u'll have to invert it on mirror axis, normally happens to be the x. So select scale and change the x value to -1.

Now when your finished modelling, delete the instance, make sure that the middle line is complete open and then select Modify->PolyMesh->Symmetry and you should now have a complete model with the centre vertices welded.

Hope this is what you were after.


09 September 2004, 01:00 AM
Or clone your half object and do a poly-symmetrize on that. Then make it unselectable and subdivide it if you wish while you work away on your original half object. When done, just freeze the clone.

Heh, we really need a FAQ... this question comes up every couple of days.

09 September 2004, 09:15 AM
thank! all.
XSI Instance Duplicate is wath? The both sides manufacture moreover ,XSI Symmetry Map,Extrude poly face XSI Symmetry Map bad.

09 September 2004, 11:15 AM
With an instance you are actually working on just one object, so any changes made, including new geometry (like extruded polys) will be replicated (or more correctly, seen) on the other instance. With Cloning & duplicating you have more options and levels of independence.

09 September 2004, 04:47 PM
Give the cloning method a try. You might find that you like being able to see your merged, subdivided object throughout the modeling process. If there's a difference in interaction speed between working with a single clone with just a CopyOp and Symmetrize polygons in its history, and an inverted instance - (which fails to show you the merged result while working) it's small enough to be insignificant.

09 September 2004, 10:05 AM
I realize know , and thank all

09 September 2004, 11:57 AM
You also could give 'symmetrize polygons' a try, I like working with it very much, as I always have the finished object. You can either select one half of the object or even only a few polygons and symmetrize them, of course you have to delete the parts that you want to be replaced first. Very nice and direct. It's a new tool of XSI 4.0. btw.

09 September 2004, 05:51 PM
Hello Everyone,

I just wrote a symmetry modeling script last night that creates a symmetry modeling rig. The purpose of the rig is to enable any topology transformations and the addition/subtraction of new components. I'm new to XSI and VB so Beware it's not fully tested and could break easily.


Select the right hemisphere of a polygon object and run the script.
The script creates a model named "symModel" containing the Symmetry Rig.
A property panel is created under the "symModel" with basic Symmetry perimeters.
The rig is based on the "Clone" tool technique. Any changes made to the "right side" will carry symmetry to the left side. But any changes made to the "left side" will only affect the "left side" while maintaining symmetry with the "right side"

*note. You will need to manually change the name of "symModel" in order to run the script on a second object. (i could'nt figure out how to set a model variable name in VB)

Let me know what you guys think.

Votch Levi
VFX Artist

here is the script in VB

' Anything Goes Symmetry Modeling
' By Votch Levi (
' V.02
' 09-23-04

dim i,newObj,ltSide,rtSide,merged
mySelection = selection.item(0)
set newObj = Duplicate (mySelection, , 2, 1, 1, 0, 0, 1, 0, 1, , , , , , , , , , , 0)
SetValue mySelection&".visibility.viewvis", False
'DeleteObj mySelection
set ltSide = Clone (newObj,1, 1, 0, 0, 1, 0, 1,1,-1)
set rtSide = Clone (newObj,1, 1, 0, 0, 1, 0, 1,1,1)
ApplyGenOp "MeshMerge",, ""&ltSide&","&rtSide&"", 3, siPersistentOperation, siKeepGenOpInputs
merged = selection.item(0)
'SetValue ltSide&".visibility.selectability", False
SetValue rtSide&".visibility.selectability", False
SetValue merged&".visibility.selectability", False
SetValue ltSide&".visibility.rendvis", False
SetValue rtSide&".visibility.rendvis", False
SetValue newObj&".visibility.rendvis", False
SetValue ltSide&".visibility.viewvis", False
SetValue rtSide&".visibility.viewvis", False
MakeLocal ltSide&".display", siNodePropagation
SetValue ltSide&".display.staticsel", 0
SetValue ltSide&".display.intsel", 0
SetValue ltSide&".display.playbacksel", 0
SetValue ltSide&".display.staticunselnear", 0
SetValue ltSide&".display.intunselnear", 0
SetValue ltSide&".display.playbackunselnear", 0
SetValue ltSide&".display.staticunselfar", 0
SetValue ltSide&".display.intunselfar", 0
SetValue ltSide&".display.playbackunselfar", 0
MakeLocal rtSide&".display", siNodePropagation
SetValue rtSide&".display.staticsel", 0
SetValue rtSide&".display.intsel", 0
SetValue rtSide&".display.playbacksel", 0
SetValue rtSide&".display.staticunselnear", 0
SetValue rtSide&".display.intunselnear", 0
SetValue rtSide&".display.playbackunselnear", 0
SetValue rtSide&".display.staticunselfar", 0
SetValue rtSide&".display.intunselfar", 0
SetValue rtSide&".display.playbackunselfar", 0
MakeLocal newObj&".display", siNodePropagation
SetValue newObj&".display.staticsel", 0
SetValue newObj&".display.intsel", 0
SetValue newObj&".display.playbacksel", 0
SetValue newObj&".display.staticunselnear", 0
SetValue newObj&".display.intunselnear", 0
SetValue newObj&".display.playbackunselnear", 0
SetValue newObj&".display.staticunselfar", 0
SetValue newObj&".display.intunselfar", 0
SetValue newObj&".display.playbackunselfar", 0
SetValue "Camera.camdisp.mixviewmode,Views.ViewA.UserCamera.camdisp.mixviewmode,Views.ViewA.TopCamera.camdisp.mixviewmode,Views.ViewA.FrontCamera.camdisp.mixviewmode,Views.ViewA.RightCamera.camdisp.mixviewmode,Views.ViewA.SpotCamera.camdisp.mixviewmode,Views.ViewB.UserCamera.camdisp.mixviewmode,Views.ViewB.TopCamera.camdisp.mixviewmode,Views.ViewB.FrontCamera.camdisp.mixviewmode,Views.ViewB.RightCamera.camdisp.mixviewmode,Views.ViewB.SpotCamera.camdisp.mixviewmode,Views.ViewC.UserCamera.camdisp.mixviewmode,Views.ViewC.TopCamera.camdisp.mixviewmode,Views.ViewC.FrontCamera.camdisp.mixviewmode,Views.ViewC.RightCamera.camdisp.mixviewmode,Views.ViewC.SpotCamera.camdisp.mixviewmode,Views.ViewD.UserCamera.camdisp.mixviewmode,Views.ViewD.TopCamera.camdisp.mixviewmode,Views.ViewD.FrontCamera.camdisp.mixviewmode,Views.ViewD.RightCamera.camdisp.mixviewmode,Views.ViewD.SpotCamera.camdisp.mixviewmode", Array(True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True)
CreateModel ,"symModel"
ParentObj "symModel", rtSide
ParentObj "symModel", ltSide
ParentObj "symModel", newObj
ParentObj "symModel", merged
SelectObj "symModel"
AddProp "Custom_parameter_list", , , "Symmetry_Controls"
SIAddCustomParameter "symModel.Symmetry_Controls", "Blend_Tolerance", siDouble, .5, 0, 5, , 5, 0, 2
SIAddCustomParameter "symModel.Symmetry_Controls", "Blend", siBool, 1, 0, 1, , 5, 0, 1
SIAddCustomParameter "symModel.Symmetry_Controls", "Show_Left_Cage", siBool, 0, 0, 1, , 5, 0, 1
SIAddCustomParameter "symModel.Symmetry_Controls", "Show_Right_Cage", siBool, 1, 0, 1, , 5, 0, 1
SIAddCustomParameter "symModel.Symmetry_Controls", "Cage_SubD_Level", siInt4, 0, 0, 7, , 5, 0, 0
SIAddCustomParameter "symModel.Symmetry_Controls", "Merge_SubD_Level", siInt4, 0, 0, 7, , 5, 0, 0
SetExpr "symModel."&merged&".polymsh.mergemesh.tolerance", "symModel.Symmetry_Controls.Blend_Tolerance"
SetExpr "symModel."&merged&".polymsh.mergemesh.blend", "symModel.Symmetry_Controls.Blend"
SetExpr ltSide&".visibility.viewvis", "symModel.Symmetry_Controls.Show_Left_Cage"
SetExpr ltSide&".visibility.rendvis", "symModel.Symmetry_Controls.Show_Left_Cage"
SetExpr ltSide&".visibility.selectability", "symModel.Symmetry_Controls.Hide_Left_Cage"
SetExpr newObj&".visibility.viewvis", "symModel.Symmetry_Controls.Show_Right_Cage"
MakeLocal rtSide&".geomapprox", siDefaultPropagation
MakeLocal ltSide&".geomapprox", siDefaultPropagation
MakeLocal newObj&".geomapprox", siDefaultPropagation
SetExpr rtSide&".geomapprox.gapproxmosl", "symModel.Symmetry_Controls.Cage_SubD_Level"
SetExpr rtSide&".geomapprox.gapproxmordrsl", "symModel.Symmetry_Controls.Cage_SubD_Level"
SetExpr ltSide&".geomapprox.gapproxmosl", "symModel.Symmetry_Controls.Cage_SubD_Level"
SetExpr ltSide&".geomapprox.gapproxmordrsl", "symModel.Symmetry_Controls.Cage_SubD_Level"
SetExpr newObj&".geomapprox.gapproxmosl", "symModel.Symmetry_Controls.Cage_SubD_Level"
SetExpr newObj&".geomapprox.gapproxmordrsl", "symModel.Symmetry_Controls.Cage_SubD_Level"
SetExpr "symModel."&merged&".geomapprox.gapproxmosl", "symModel.Symmetry_Controls.Merge_SubD_Level"
SetExpr "symModel."&merged&".geomapprox.gapproxmordrsl", "symModel.Symmetry_Controls.Merge_SubD_Level"
SelectObj newObj
InspectObj "SymModel.Symmetry_Controls"
SetDisplayMode "Camera", "shaded"

09 September 2004, 02:56 PM
Ill try it when i get home. Anyone else have the chance to try it?

09 September 2004, 02:26 AM
The way I like to work in symmetry is first clone one half of the model, scale it -1 in what ever axis you're working in to mirror it, then select both the original and the clone and merge them. This third, merged object I move to one side and hit + twice to see it subdivided.

Then I put the original unsubdivided mesh in my left viewport and the merged subdvidided model in my right viewport. Now turn on Immed mode. The merged version will follow any changes you make to the original, including changing the topology.

I found this the most efficient way of working because you have instant feedback on how your final subdivided mesh will look, no need to constantly press + or - on your original one. Move one vert on the original, and just watch the merged one for the change, very nice :)

Another thing, in the merge settings I choose a pretty high setting for tolerance so that even if I move the centerline verts a bit off axis, the merged version will stay together.

I don't really see a need to write a script to automate this simple setup, I mean it takes <15 seconds to set up, and it's not like you need to repeat it every 5 minutes.

09 September 2004, 02:56 AM

That's pretty much what that script does. But in addition to automating the process it creates the PPG so you don't have to navigate between the different models to set properties such as blend tolerance etc... The script also hides and sets unnecessary objects unselectable.

But more importantly i think that's one of the best symmetry modeling methods in XSI.

09 September 2004, 08:02 AM
Nice technique Nocturn (should work nicely with dual monitors), I can see I'm going to enjoy working with XSI...

CGTalk Moderation
01 January 2006, 08:00 AM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.