Genome
RSS< Twitter< etc

<< Selection Modifiers

Select Faces By Area

While 3ds Max provides some Graphite tools to select faces by area interactively, there is no native 3ds Max modifier to perform this dynamically on the stack.

  • Start a new 3ds Max scene, create a Cylinder with Radius 20.0 and Height 100.0, 20 Height Segments.
  • Add a Bend modifier and set it to 90.0 degrees.
  • Add a Genome modifier and set it to "Faces" iteration mode.
  • Press Ctrl+[O] to add a new Output node and make sure it is set to FaceSelection channel.
  • Press SHIFT+[A] to create a FaceArea channel input.
  • With the FaceArea input selected, press [L] [G] to create a Logic > Greater operator.
  • With the Greater operator selected, press Ctrl+[1] to create and connect a Float input with value of 1.0. 
  • Check the "Exposed" option of the Float input.
  • Set the value to 20.0 to select the band of larger faces on the back of the bent cylinder.

RESULT: The faces with Area greater than 20.0 square units are now selected. 

Since we operate on triangles, the edges of our selection are jagged. We can select the whole quads by adding a TurnToPoly modifier to the stack above the Genome - if a quad has a selected and a non-selected face, the new quad polygon will be selected:

 

Respecting Incoming Face Selection

As you can see from the above images, we selected the faces that became larger due to the Bend modifier, but we also got the cap faces of the cylinder which have no really changed in size. They just happen to be above the threshold by birth.

One way to counter-act this would be to increase the number of cap segments to make them smaller, but this might not be a good solution in cases where the polygons are already defined and cannot be modified.

A possible solution would be to respect the incoming selection of the cylinder and only select/deselect faces that were selected previously. 

  • Select the Greater operator and press [L] [A] to insert a LogicalAnd operator into the flow.
  • With the LogicalAnd operator selected, press SHIFT+[S] to create a FaceSelection channel input.
  • In the 3ds Max Modify Panel, add a Mesh Select modifier underneath the Genome modifier and enter Face mode.
  • Since the side faces have Material ID 3, just enter 3 in the Select By Materail ID group of controls and press the "Select' button - the side faces will become selected.
  • Go back to the top of the stack 

RESULT: The Cap Faces of the Cylinder will not be considered for selection anymore because they were not selected in the incoming face selection stream. Using the LogicalAnd operator, we produce the "intersection" of the two selections and select only previously selected faces whose area is greater than 20.0 square units!

 

Filtering By Face Properties 

The above solution was very general because it allows our Genome modifier to respect existing selections coming up the stack. Unfortunately, selecting faces explicitly makes this solution topology-dependent.

In this special case, knowing the side faces have Material ID 3 would have been useful in creating a custom solution that is completely procedural. One way would be to use a VolumeSelect modifier instead of a MeshSelect modifier, and select faces by Mat.ID 3.

The other solution would be to modify the Genome flow to read the Face MtlIndex channel which represents the Material ID and make the selection dependent on it. 

  • Select the FaceSelection input channel node and switch it to MtlIndex channel.
  • Press [L] and [E] to create an Equal operator.
  • Press [2] to create an Integer Input Value with a value of 2 (internally, the Material ID is 0-based).
  • Check "Exposed" in the Integer input and try setting it to 0, 1 and 2 

RESULT: Now the modifier operates on faces with a specified Matrerial ID which is exposed in the User Interface. Other than the VolumeSelect modifier, this value can be keyframed over time to switch the selection in the middle of an animation sequence from using ID 0 to 1 to 2 and back.