AU Class
AU Class
class - AU

Booleans: True or False?

Share this class

Description

In this session, we'll take an in-depth look at the new Boolean and Array modifiers within 3ds Max 2024 software, and we'll explore how their non-destructive workflows can improve the flexibility of your project pipeline. We'll discuss both modifiers in detail, compare them with the existing tools, and provide practical examples. Would you like to improve your process—or not?

Key Learnings

  • Learn how to use the new Boolean modifier.
  • Learn how to use the new Array modifier.
  • Discover the importance of non-destructive workflows.
  • Learn faster modeling methods for conceptual to final model production.

Speaker

  • Stephen Gabriel
    As a 22-year veteran of Team D3, Stephen holds a degree in architecture, and has industry experience in both architectural design and construction and in industrial manufacturing and production. He has assisted a variety of clients with Autodesk Revit and is most recognized as an expert in 3ds Max. Drawing from his experience in both architecture and manufacturing, Stephen leads our team in the creation of technical animations ranging from walk through and construction sequencing to assembly, maintenance and operation animations. In addition to performing the work, Stephen also trains users and provides project support for our clients. Stephen has been an Autodesk Certified Instructor since 2007 and has spoken at Autodesk University and other local seminars. Stephen was selected as the ACI Instructor of the Year FY23 for Media & Entertainment products.
Video Player is loading.
Current Time 0:00
Duration 58:24
Loaded: 0.28%
Stream Type LIVE
Remaining Time 58:24
 
1x
  • Chapters
  • descriptions off, selected
  • en (Main), selected
Transcript

STEPHEN GABRIEL: Welcome to Booleans, True or False. We're going to be introducing a new Boolean modifier and changes to the array modifier in 2024.

Safe harbor statement. Basically what this is saying is that if we present anything that is for a new or future release, it may or may not be actually there. It may not be developed. It may be developed. We're not going to say one way or another or give any hard results upon that.

Second thing is that I am not with Autodesk. I'm with an Autodesk partner. What I say reflects my opinions and my positions, not that of Autodesk.

My name is Stephen Gabriel. I'm a design technology specialist in specialized services at Team D3. I'm an Autodesk Certified Instructor, 3ds, Max, and Revit. I've been a consultant for 3ds, Max, Revit, and Dynamo. I've got over 22 years experience teaching and helping others, through either consulting or through actual execution of rendering projects.

My background, I'm a recovering architect. I have spent 32 years, 7 months, and 12 days since I last practiced, but hey, who's counting? I'm former IT. And in addition to studying architecture, I studied Comp Sci and math at college, so I have the scars to bear for the math education there. I'm also a veteran US Air Force, so quite a few things I've done across the years.

What am I going to cover today? We're going to cover the Boolean and array modifiers. The Boolean is new to 2024. The array modifier has been around since 2023. We're going to look at the changes that have come around to that and explore some of the things that the array tool can bring to us, as well as the Boolean.

I'll introduce those tools and I'll demonstrate suggested workflows and reasons why we're going to use them. I'll talk about pros and cons of each tool. It's no good to know just what works. We should also know what's not going to work, and why.

I will not talk about every single setting and every single rollout of every tool. If I did that, I would fall asleep and you'd come out looking like The Walking Dead. So we're not going to go through every single setting. If you need information on that, see the PDF class handout for details on each tool.

It also will contain the demonstrations that I'm doing step by step and you'll have access to those files after the class. There will be no math. OK, I lied. It's all math. So just something we have to get used to in our industry is everything we do is math inside here. Shouldn't scare anybody. But it's going to be there.

So Booleans, true or false? What are we talking about? First thing we're talking about is our Boolean modifier. What is a Boolean? We're going to discuss what that is.

We're going to discuss comparing the Boolean modifier to the Boolean and ProBoolean compound objects, which have been in Max for quite some time. We're going to talk about types of operations that we can do with Boolean.

Then we're going to talk about the array modifier. The array modifier, we're going to talk about the various types of arrays that we can use. And we're going to demonstrate most of them. We're going to talk about the fact that they're parametric operations. And we're going to tell you what's new inside 2024 versus 2023.

So our first topic, the Boolean modifier. Let's get on with the show. On with the show. What is a Boolean? Well, the origin came from George Boole, 1815 to 1864. He was an English math professor. He was self-taught because there weren't a lot of schools teaching math at that time.

He was what they call a polymath. His knowledge was extensive and spanned multiple numbers of topics. So it wasn't just math. He also studied things like languages. He spoke English, French, German, Latin, and Greek.

He spoke the first four by the time he was 12 and taught himself Greek. When he was 14, he translated a Greek Epic poem and nobody would believe that a 14-year-old child could do this. So he was a bit ahead of his curve.

He wrote a book called The Laws of Thought in 1854, while he was the professor of mathematics at Queen's College in Cork, Ireland. The importance of that is The Laws of Thought covers the foundation for set theory and digital logic, true and false, and set combinations of union, intersect, subtraction. He defined those in 1854.

That is the basis for all computer logic and programming used in the current world. So he was only about 90 years ahead of his time. Boolean operations in 3ds Max, we have the original two methods. First one is the Boolean compound object. We go-- we take an object. We put a compound object on it called Boolean.

And then we go ahead and select operands and make operations. When it's in the modifier stack, looks pretty much like the image on the right. You have the Boolean and then we're going to have a reference of the objects below it, in this case, the sphere that it was Booleaned with.

The ProBoolean compound object was introduced probably back around 2008, 2009. This is a Boolean object that is a little more advanced. It has more editability and it is a little more successful at doing most Boolean operations. But neither of them will do everything.

So sometimes we'll have to use a Boolean, sometimes we'll have to use a ProBoolean. The problem is neither of them are parametric. I can get two operands inside to there, but I have to extract them manually, make my changes to the extracted instance, and then it will update in the ProBoolean.

But certain things can't be updated easily. So that causes us problems. Along comes the Boolean modifier. It allows us to do all the operations, union, intersect, subtract, et cetera. It allows us to track the operands. And this is a parametric modifier, which means it sits in the modifier stack above the object.

So it does not consume the object. I can always go back down to the object and work on it. It preserves that parent object. It is editable. At any point in time, I can go back in and change things around to make them be the way I want them to be. That's something I cannot do with Boolean compound or ProBoolean compound.

They're reorderable. I can come in here and I can change any of the items in the list in any order I want, beyond the first. The base object always has to remain at the top. Everything below there can be moved, edited, grouped, whatever I need to do with it.

It retains material and UVW assignments just like the other two do. While they both retain material assignments, they don't retain UVW assignments. In this case, if I cut an object with another object, object B is Boolean or a UVW map will be applied to the Boolean surface on object A so that map will be controlling it. That's very, very useful when doing certain types of operations.

Using Booleans, when do we use Booleans? Quick conceptual models. So I need to make a quick concept model, I can use Booleans to quickly cut the object apart, combine things, subtract things, intersect things. Complicated forms that are not easily created with, say, a straight solid or with poly-modeling, maybe it just takes too long to develop that out initially.

We're just going through the concept phase. We don't want to go ahead and do all the work we're going to need to do to create a low poly-model of that. When do we not use Booleans? This is more important. Any time we require UVW unwrap. This is the unwrap of that rim we just saw.

This is a horrifying mess. I'm not going to be able to get good mapping on here. I don't have good quads. Actually, I don't have much in the way of quads. This is not going to be a workable solution for me if I'm UVW unwrapping. So Booleans do not do an UVW unwrap.

Deforming animation, in this case, a turbosmooth was applied to that same rim. And look at the nightmare mess it creates out of that. The same is going to be if I'm doing any deforming modifiers above the Boolean. So anything that causes deformation of the object is definitely something we want to avoid doing with a Boolean.

And the reason why is it does not produce a quad-based output. Even if I use two quad-based items to subtract one from another or add one to another, I'm not going to get clean quads at the junctures. And that's going to cause problems when I do any type of deformative animation or modifier.

If I'm putting out to AR/VR or real time engines, definite no. And the reason why, all those engines want to see quad-based geometry so that it renders better. If I don't have quad-based geometry in there it causes me nightmares inside of the AR/VR or real time engines when I'm going ahead and running it as light plays across surfaces and things like that.

And again, any time quad-based output is required because we don't produce quad-based output. So very big caveat there is, we're going to use it for conceptual models, for very complex things that we want to model quickly, that we do not need to animate. But if we need to do any deformation, any animation, any advanced mapping, or output to a game engine, definitely don't use the Booleans.

And that's all three of the Booleans, the Boolean in ProBoolean compound objects as well as the Boolean modifier. So Booleans and Inventor. Inventor's a special place in our heart because of the way it brings it in. So imported geometry, when I bring that in from Inventor, I have a choice of body object or mesh.

As far as body object goes, we don't want to use that because the truth is, it's not really editable. We always have to reduce that down to a polymesh to go ahead and edit it. And it doesn't matter if I edit it I. Can't send that back to Inventor.

The other problem it comes up with is Ngons galore. There's going to be Ngons, meaning multi-sided polygons for almost all these surfaces. As a result, if I go ahead and I do something with it, it's going to cause problems.

Now at least they're welded now. So it comes in and looks solid and stuff. But I'm not going to be able to do something like Boolean this. So if I Boolean this half up, I get this kind of nightmare mess. This is something we've been used to a long time inside of 3ds Max with Inventor files. It still applies. Do not Boolean an Inventor import.

So how do I do it? How do I work with Inventor? First thing we do is we go into Inventor. We export as a STEP. And this applies not just to Inventor. This applies to SolidWorks, CATIA, Pro-E, pretty much any of the other parametric modelers for manufacturing.

We're going to want to STEP it out and then we're going to want to STEP it back into Max. That brings it in as a polygon object. So we're going to have all the right polygonization on there. It may be triangulated polygons, but at least it's good polygons. And then I can go ahead and I can do things like Boolean it and any other operations I want to do.

So the Boolean modifier itself, as you can see, it sits above the editable mesh that I'm working with. It's applied in the modifier stack. So it's just an operation inside of there. I've got four roll-outs that I'll use to control it. So Add Operands, Operands, Options, and Display.

The fifth one, Create, doesn't control my output. It has another function. So it's editable like any other modifier. I can come in here and make changes inside of it. I can move the Boolean operator. I can copy and paste it. I can delete it.

I can do whatever I want with it. It doesn't consume that main object. Just note that if I delete it, it'll delete all the consumed objects in the operands list. It'll just leave the base object there.

I can edit any of the parameters that I want inside of there. And the Create tab, at the very bottom, will actually allow me to create geometry that is the result of the Boolean. The nice thing about this is, I can create that as geometry. Now I can go ahead and I can model over the top of that or re-topology that into a quad base so that it looks right.

Once I have time and I have approval that Yeah, we're going through with this. So the Create tab is very, very useful for us. It doesn't control our output but it does generate a polygon or a editable geometry after the fact. And when you do create this, it'll create the objects you need and it'll take the original Boolean and hide it. So you don't lose the original Boolean. It just creates another copy of all the objects.

So Boolean operands, we're going to quick review a couple of these. The first one, Union, joins A to B, A being the cube, B being the sphere. Those become one. Any faces in between them are just eliminated. And they're welded at that joint.

Intersect only covers where object A and B overlap one another. And again, it goes ahead and welds everything solid so that we end up with a solid. Subtraction removes item A or item B from item A and again, welds it shut. And you can notice that it's passing the material off wherever it's Booleaning.

Now one thing to be aware of is that the Boolean wants to have solid objects. If I use an open object, an object with holes in it or objects with edges out on it that have no polygons on one side, it's not going to work predictably if it works at all. This is a real way to-- a quick way to have a nightmare. So make sure your objects are enclosed and fully welded, whereas we'd say for the 3D printing world, water tight.

We have additional ones like Split, which splits the faces on A with B where B intersects. Merge, which combines them into two objects with everything in between still sitting inside there. So it'll retain the center or intersected portion.

We have Attached, which just joins them as the same object. This is like using an attached and editable poly or editable mesh. They're both considered one object but they're not-- there's no action between them, no interaction between the surfaces.

And then Insert, it's just like the intersect except it retains all of item A. So we'll have item A plus the trunk that item B cuts out. All right. So now we're going to come in here we take a look at the first demonstration. We're going to look at a Boolean object. I'm going to go ahead and open my file here. All right.

It's going to take a second because it's got a background inside of it that takes forever to load. So there's my object. I've got an HDRI image in the background so people can see some stuff inside there. Let me switch to my front view. And I'm just going to go ahead and turn off my cameras and lights. I don't really want to see those.

So I've got a guy who comes to me and says, designer says, I want to make a wheel rim. And it's going to have these cutouts like this. And he gives me a flat pattern drawing, which I go ahead and I convert to a flat pattern drawing. So I'm just going to go ahead and unhide the objects.

So in this case, I want to unhide my-- nope, my cut inner or my cut outer. I want to hide those. And this is what my cutouts look like. Now, he just gave me the surface cutouts but he noted that the smaller cutouts on the inside would flare outward and the larger inside-- cutouts on the inside would flare inward.

That would make it a really hard thing to go ahead and model polygons inside of here. I don't have that time. And since I'm working at a shop that makes wheels, we know that, hey, we're going to be using a lot of consistent tools.

So in this case, I know that I've got a consistent tool that I use in here that is called a blank spoke or a spoke blank. So basically, it's just a cylinder that says, I'm about the right diameter of my rim, and I'm about the right thickness for the spokes, and you can use me to start modeling.

Now, before I do anything with any of this, I'm just going to select all of those and open up my Material Editor where I've got some information in here. So I've got a material here for the rim. I'm going to apply that. And you notice that they turn colors. And the reason why is when we do wheels like this, it is not unusual for us to color the sloped sides of the rim something different than the main part, or change the finish on it.

So I need to have a separate material on that. By assigning the material 2 to all the cut portions, and 1 to the main portion of the rim, that assures that any place where the B or the cut operand cuts the A operand, we're going to have the B operand material. So if my slug's selected there, I'm just going to come in, I'm going to go ahead and I'm going to add a Boolean operator out of the modifier stack.

And there we go. We got my Boolean modifier sitting on top there. We've got my add operands, my operand list, use material. All those good things are all set up and ready to go. So I'm just going to start with the subtract operation. I click the subtract. I click my objects and it Booleans out pretty quickly.

Now what's important to note is that the subtract remains active until I deactivate it. I do that by right clicking. If I don't right click, I'm going to keep Booleaning objects out of here, which is not what I want to do. I want to make sure that I just grab the ones I need. So I've got that sitting inside there.

Return my camera view. At this point, I'm ready to come in and take a look at my rim. So I'm going to come down, we've got my rim right here. Unhide that. OK, that doesn't look right. And the reason it doesn't look right is because this rim is flared at the outer edge not straight out.

So the slug doesn't intersect it properly. If I'm doing the traditional Boolean compound or ProBoolean compound, at this point, I'd have to go back in and extrude or extract this part as an instance and go ahead and make corrections. Because I'm in the Boolean modifier, I can just select the cylinder, my original object, and I get my parameters there.

So I can take that to 12. And I can take this down to 1.8 to narrow it in, so it's just below the edge of the rim. There we go. That looks good. I'm able to do that on the fly while working with this without having to sit here and extract operands, and make operations, and hide things. We're able to drill into those and work on them.

I could actually work on my cuts, as well. As you can see, as I select each one it consists of an array and an editable poly under it. All of those are directly edible in the stack whenever I select them down here. So in here, one of the problems I'm looking at now too is we've got a lot of excess on the inside of this rim.

We may be doing shots of just the rim. So we're going to want to get rid of that. Again, constant operation that we have to do in the design of a wheel. So unhide by name. And if I take a look at here, we have got a cut rim object. I can go ahead and subtract that as well.

My rim is now cut down. It's starting to look pretty good like a wheel. I need to check to see how it's going to work with my other components in here. So inside of the list, I know I've got bolts, I got a caliper, and I got a disk. When I add those on, we can see that we're starting to get interference.

The hub for the disk is running into the center of my rim. I've got a caliper over here that's probably going to intersect with portions of my spokes. I can't even see my bolts. They're buried someplace inside of there. So I need to start getting things controlled like that.

I have two objects that are going to help me do that, as well. These are both preset. The first is my cut break and the second is my lug hole. So I'm going to expose those two and then just make sure I'm in my Boolean, start my subtract, drop that in. That cuts out everything I need in the background. That looks fine now.

And I'm going to grab my lugholes. Well, lugholes look pretty good there except for one, slight little problem. The wheel uses a five bolt pattern. And I've cut a four bolt pattern on that slug hole. Not to be worried about. I'm just going to come back into my stack, grab my lughole, take my array, increase to 5, and we're done.

So totally non-destructive. Allows me to go ahead and correct out all these mistakes that I've had. Things that would take me a long time to do inside a Boolean or ProBoolean, this just eats it up right away. And again, non-destructive. I still have my editable poly object left that I can go ahead and work with down at a base level.

Last thing I'm looking at here is I've got a problem with my hub. That hub needs to be round so it sits properly on the hub for the brake. I'm going to go ahead and grab my last operator for that. So unhide my blank hub. And I need to Union this together.

So I'm going to select my Boolean, start my Union operation, click on that. Make sure to right click. So I'd get out of it. Only problem now is that I don't have lugholes here anymore. My lugholes are gone. My cut is gone because I've added this back in on top.

How am I going to take care of that? It's actually pretty simple. I'm going to come over here to the stack and just take, if it'll let me grab it-- let's get down to the right one first-- grab my blank hub and I take it up two levels so that it sits above my cut brake.

Now, it cuts my brake and my holes after the addition of the blank hub. So I can reorder this at any point in time I want and get it to work properly for me without having to sit here and undo operations and redo operations, do all sorts of things like that. Inside of here, it's just simply drag and drop inside of here.

So under the options, from other things we can go ahead and do with here, we got the use materials. So it's going to-- if I turn that off, it won't use the material of the Boolean object that I take on that operation. Turn it on. [INAUDIBLE] instructed operating [INAUDIBLE] to the base object.

So if I have a operand that I'm attaching, either a subtraction or a Union, it's going to move its pivot point. My output method is set to mesh. In display right now, it's selected operands are displayed and they're displayed as wire and shaded. So that means if I come in here and I say lughole, I can see my lugholes.

I can change how that works and say just wire, just displace the wire frame, or just shaded, which displays a shaded mesh, or back to all of them. I can do just my results. I do my operands, which shows me all my operands, or I can do selected operands, which is the typical default method. And last option on there is the Create. And we'll look at that in a minute.

Remember when we talked earlier we'd said, we do not ever want to go ahead and do a deformative operation on this. So common thing we do is the guys could come and say, I want filleted edges on those. Those all need to be round. Our normal solution for this is to come into the modifier list and grab a turbosmooth. And that's what happens.

And that's like, ouch, what happened to my rim? The reason why that happens, if I turn that off, is because these are not polygon-- rectangular polygons. They're not quad polygons. So it's trying to divide that up with the turbosmooth into a form it can understand. It gets really nasty in here when I have an outer circle and then a bunch of inner circles.

Because it's not quad-based geometry, turbosmooth, other deformative operators are not going to work well inside of here. So I could go ahead and I could come down to my Create tab and do that or I can come back to my solution method here, Mesh, and change it to openvdb. What is the VDB?

This is a volume database or Voxel database. What it's going to do is it's going to fill the area with a group of voxels or cubes of a specific size. And then it's going to average those out to fill the surface. This is what we typically use for things like clouds and fire and flowing fluids. The issue with it right now is my Voxel size is really big.

And for something that's small, that's way too big. So I'm just going to reduce it to 0.1 inch. When I do that, it's going to refine the solution, make it look a lot nicer. You notice that while the solution is quad-based, it doesn't have edge loops. So we're not getting proper looping or proper closure of the edges.

This is just giving us an approximation of there. In this case, I can take this down even farther, go down to 0.03. It'll take a second to generate because it's a lot of math it's doing inside of there. And you can see the level of detail we're getting there. So I went back to my camera view here.

Now let's go ahead and turn off my F-4. We can see that we have a fairly smooth looking disk there. So those are looking really pretty nice for us. Might do for a concept shot, probably not going to do for a series of finished shots for advertisement, marketing, things like that. We're definitely going to want to go back and do it the other way, where we take the mesh.

And at that point, once I have that mesh, I'm going to come down here to Create and I'm going to say create objects. If you take a look at my scene explorer, we can see that my blank spokes object is hidden. And now I've got blank spoke zero one, this object here. If I isolate that selection we can see it is an editable poly object and it is non quad-based still.

So I still do not have quads on any of my top surfaces on top of there. But at least it gives me a surface that I could go ahead and model over the top of. And it still retains my blank spokes Boolean object, so I haven't lost anything at all. This is a very, very nice nondestructive workflow. It's very good for building quick concepts, not suitable for final product that are going to be utilizing any sort of advanced mapping or require quad-based geometry.

I'm just going to unhide all so we can see what our tire looks like. And there we are with the tire on top of our wheel. So somebody is going to have a lot of fun in a sports car with this. All right. Now, we're going to talk about our array modifier. Again, the array modifier has been around since 2023. We're going to be looking at a lot of the array tools inside of there, as well as the new things that we're going to have.

So this is a parametric modifier, just like the Boolean was, which is a nice change. It replaces a number of other tools. The first tool is, obviously, the array tool. So we don't have to go select the object, go to tools, array, put in all of our data, get the results out, realize we made a mistake, undo, undo, go back in, redo it, et cetera. This is parametric. It's going to allow us to go back and forth.

It also replaces the spacing tool. If you are not familiar with this one, this is a tool that allows us to scatter objects along the length of a line and control how that distribution looks. Very, very useful tool. This one is even more powerful because not only does it have the ability to space, it can go ahead and do so parametrically, and can even do offsets of additional copies in x and y and z as we're working with it.

It replaces the scatter compound object for surface-based distributions only. Scatter compound object was one of those fun ones where you select an object, you go into the compound objects, select scatter, select a surface or a volume, and you scatter objects across the surface or inside the volume. Because we're dealing with this volume-- surface volume here, it only scatters across the top of the surface.

So if you need to scatter within a volume you still need to use the scatter compound object. But for surfaces, this works a lot better. It allows the generation of five different types of arrays. We'll talk about those in a moment. Some new features in 3ds Max for 2024. First one is phyllotaxis.

Phyllotaxis is a term that allows us-- or basically refers to an organic distribution. It's a spiral pattern found in nature common in outside things like flowers, seashells, petals, leaf arrangements, things like that. This is pretty useful for building various things.

The other thing is the First Middle Last methods that allow us to go ahead and scatter objects based upon their position within a source object or a multi-sub object material. So the array distributions, first one, rectilinear. We're going to talk about this. We're going to demonstrate this.

This is just our standard XYZ Euclidean geometry array. Radial arcs and circles. Radial does arcs and circles, but it allows us to not only do a radius of once, but allows us to push to the outside multiple copies, and build up in the z-axis, as well.

Spline distribution, this allows us to lay out objects along the spline. Because this is parametric and editable, I can move that spline and the objects will move along with it. Surface distribution, this allows us to distribute objects across the surface by face center, edge center, or vertex.

And then we have phyllotaxis, our newest one. It's an organic distribution. Again, helps us make flower like objects, which you may not think we really need a lot of, but we run into it on occasions. Especially useful when I'm working with logos.

All right. The first thing we're going to look at in an array is going to be a grid array. So I'm going to open up a file for this. This is my grid cans. We've got a can. We've got a store shelf. We need to put cans on the shelf. So I'm going to select my object. I'm going to go into my modify tab and I can just come down, find array. There we go.

Hey, we've got a grid array. Relative offset is its current setting. I have others like total dimension and fill. My count here in x is five. I know that I can fit 11 of these cans across this shelf. The problem is right now I just shoved it across another shelf. So I'm just going to click center. And that's going to center my pattern about the origin of the original object selected. It's going to build out from that point in all directions.

I'm going to need to have some in y, or depth. So I'm going to go to four. But to see what happens there is, it shoves them forward to back. Now, the spacing on these is set to offset of one. What that means is that one unit is the box dimensions of the object. So if I have a can that's four inches across, the x and y are both going to be at four inches out. And that's how it spaces it.

If I reduce that to zero, they bop back into there and then I can come in and use a manual number. I could put four or six. And it's useful to have both of these available. And we'll look at that in just a moment. So I'm going to go to one for offset. I'm a little off the edge of the shelf.

So I'm going to go down to my transform tab and this allows me to apply additional transforms to it. So in here, I'm going to go ahead and move that to about six inches. And that should put my cans just on my shelf. OK, that looks pretty cool.

Now, what I'm going to do with this is I'm going to have some fun. I need to fill all the shelves. So I'm going to come in here and I'm going to go ahead and I'm going to put another array modifier on that array. And I'm going to say, I only need three shelves. Sorry, let's leave that at one.

And let's do a spacing offset of two on here. All right. So now we've got all across the shelves that looks good. And I need to fill the shelves going vertically. So I'm going to take it to four. In this case, I'm going to zero that offset out because I know the distance shelf to shelf is 12 inches. And now, all of my cans are on my shelves.

Unfortunately, all my cans look identical. So I'm going to come down into my original array, close up my transform. And I'm going to come down to my material ID rollout. Material ID rollout allows me to go across all the elements of an array and assign a different material ID to them. In this case, I'm going to come in here and I'm going to say I want it to start at two and I want it to go to six.

And the reason I'm doing that-- so I look in my material editor. This is my material for my cans. I put the items that don't change first in the list, 1, 2, and 3, if I had three objects or three materials that are not going to change copy to copy.

I then put the one that is going to change below it. The reason I put the ones below it is, I may have to add another one. If I add another one and all of my static items were at the end of the list, I'd have to go rearrange all my material IDs and everything like that. So we put the static at the front and then at the back, we just say, hey, start with this one. Go on. If I need to add more I have space to add more. It's not a problem.

Now this is randomized, my arrays. And you notice they're all looking the same. And that's because I arrayed this array, and all the array in here are going to be the same as this array. And it doesn't matter where I apply that randomization. It's still going to be the same across all of them.

Other things you can do inside of here, ordered. Now sometimes when we do this, it doesn't always update automatically. So you might have to go back to there. And now I can see, it's going 1, 2, 3, 4, 5 or actually 2, 3, 4, 5, 6, 2, 3, 4, 5, 6. And then it starts the next row back. So everything's looking pretty much like it's supposed to be.

I can order x. And now each row in x is ordered straight back. I could do that in y as well. Now all the Y's are the same. I could do it in z. All the Z's are the same. Unfortunately, because this is an array, a secondary array, that second array is making all of these the same under z.

So let me go back to x and change this to random. Regenerate my array. And there we go. We have random to cans. I actually want to go to ID. There we go. Now it's all random all over the place and scattered up. So it allows us to go ahead and create a lot of things inside there.

If I want to treat each one of those differently, I need to delete that first array and then I need to clone this. So I'm going to go to my top view. Take a look in wireframe. Just lock my selection on my object. Go to move. Make sure my snap is set on. And make sure I'm locked only to x.

Now I can create copies, two of those. That way I'm able to address each of them individually. And on this one, again, select all of them. Lock them. Make sure my y-axis is active. And I need three copies. Oh, no cameras.

So back in here, we've got all of our cans inside of here. Now we can come through each one of these individually and I can change them. So if I wanted to, I could come in here and change the seat on this. And change the seat on this. And so on through here so all of them will look differently.

The other thing I can go ahead and do with this, I'm just going to go ahead and make a copy of this one, and take that, move down to 4 inches. As I say, we want to do a little bit of playing around with this. So I'm going to come back up into my main transform here. I'm going to drop it down to about 10 cans by about three cans. I'm going to put about a 2 inch separation between all those cans.

So we come down into the randomization tab and go ahead and make some changes in here. I can say, let's do this 2 inches in x and 2 inches in y. And you see how it rearranges and randomizes the cans. Down here, let's go 180 in rotation.

So the shelf is starting to look like a two-year-old kid just got on it and played with all the cans on there. This allows us to break up the patterns. So if we're doing, say, a bed of flowers or we're doing a distribution of some object where we just need to make things look like they're scattered all over the place, this is a great way to do it.

We could also remove our copies inside of there. So I can come in and say, let's remove 25% of my copies and they disappear right away. So again, we're doing all of this non-destructively. If I come back in here and take a look at my editable poly, I still have that one can. But I have access to all the controls on each of these arrays and it allows me to go ahead and make a lot of changes to them and get them to look the way I need them to look.

Another thing we can do inside of here-- don't need to save that-- is, in this particular one, I need to make a linear array of this again. And the thing is what I want to do is I want to scatter and randomized these books. And if I look at this, this is a single editable poly object. OK. Each L object inside of here is an element.

So if I go to element mode, we can see that we have different elements for each one of these. They're all assigned the same material because of the way this model was built. So come down in here-- well, I'm sorry. Each one, the cover's one material and then the pages are a second material.

If I take a look at my Material Editor, when you see what we've got here. We've got the M, and this is the image that comes out with it. So all the covers and all the-- well, let's see if I can get this to look right.

Moss does not want to cooperate with me here. So down in this corner I've got my pages, page edges, and then my covers. So those are all set up. And what I need to do is I need to make an array of this and control it. So I'll put my array modifier on top of there, set to grid. That's fine. Relative offset, that's OK.

My count, I'm going to actually increase this count to 11. And the reason I'm doing that is because there's 11 books in the sequence. But instead of arraying it as it is, I'm going array by element, right here. So I'm going to change this to ordered. And I'm going to set it to center by x.

Now what this means is it's going to space the books, x units, or a unit of x, equal to the width of the first element inside of there. So if all my books are not the same size, I'm going to end up with gaps inside there. So I might want to go in and take that book and tilt it so it looks appropriate when it comes in.

Just be careful with that. It's nothing worse than seeing a tilted book next to a tilted book and one of them is leaning against nothing. So this is ordered. I'm going to my move tool. I'm going to make a copy of this array. And in this case, I'm going to change it back to random.

So we see that now my books are all changing, and if I play with my seed I can keep changing the values and changing the appearance of my book. But one of the new features we have inside of 3ds Max 2024 is the ability to come in here and say, First Middle Last.

And what that does is, the first book is the same as the first one in the order. The last book is the same as the last one in the order. But everything else is going to change. So if I play with my seed now, you can see the first and last are staying the same, while all the ones in the middle are going ahead and changing.

So there's times when we need sequences like that and this is a quick way of doing it. This allows us to build out a bookshelf full of books. And I'm not limited to just the number that I have in there. I could go to 18. It adds out those books but it stays with my first middle last inside of there. Maybe I don't like that combination. Let's go ahead and just try a couple different.

But the array by element has been in there since 2023. The big new addition to it is First Middle Last and the ability to use that. And this can be applied by array by element, as well as by materials. So we can do the same thing if we're dealing with materials.

All right. Radial rays are another fun thing we get to play with a lot. This is a spiral staircase. Radial ray makes the most sense. It's not difficult to set this up. It's probably harder to create your geometry.

On the array, we're just going to come in, we're going to go under the standard array tool. We're going to switch this from array to radial. So now I've got my radial. I happen to know that for this one, we need to have 14 stairs in here for the spiral.

Well, two things are looking bad right now. The first is, it's not rotating about the pivot point of my post. It's rotating about an offset of that. And that is right here. The radius here is set to 10 inches. I'm just going to take that to zero. Now all my posts will align.

So how do I get them to go up? Do I go ahead and I add a z value on here? No, not really. That'll just go ahead and shift multiple copies. To do this, I need to go down to my transformation. And up here at the top for radial, we have axial.

And what this is the distance from the start object to the end object. In this case, I've got 14 steps. There's 8 inches apart. That's 112 inches. I pop that value in and now I have my spiral staircase assembled and ready to go.

The big problem I'm facing with right now is, it's the same material step on every stair. So while that may look like a minor detail, I can assure you the designer is going to notice it. I'm going to notice it. Whenever I look at this, the only thing I'm going to see is all the stairs are identical. Everything else will mean nothing.

So I'm going to go down into my material ID, take a look in my M. So I've got a material here set up. It's got one is my post and metal materials, and then two through six are my steps, just like we've done before. So I'm just going to come down into here, grab my material.

I'm going to go ahead and say one from two six. Now all my stairs are randomly assigned to material in there. If I don't like the arrangement, I can just play with my seed and go ahead and change the pattern around. So the material ID, very, very powerful across all types of arrays we do. It really helps us in breaking up the uniformity of these.

We could even do materials for other objects and stuff that'll also break those up. But radial rays, very, very useful for us. Spline arrays are also important, too. So here's our spline array. This is going to replace our spacing tool. I've got a telephone poll here I need to put along a line.

So to do that, again, same thing as last time, put the array tool on here. In this case, though, we're going to go ahead and change that to a spline based. And in this case, I'm going to go ahead and say relative offset. And what that's going to do is it's saying, we're going to use the offset distance between these to define how far apart they are.

In this case, my pick spline, I'm going to click my pick spline button. That puts it on there. We've got five of them, relative offset of five. I'm going to can that out and say, I need that to be 50 feet. Well, 50 inches isn't quite 50 feet, so let's put 50 feet in. And there we are, 50 feet apart. I can actually increase my array by one. That looks fine.

Oh, all my telephone poles are facing the wrong way. That's not going to work too well. So I'm just going to go ahead down to my transform and into my Z transform local, put 90 degrees. Now my poles are facing the right way. So far, so good. Looks pretty nice.

So I'm going to come back in here and right about this time is when they come in and tell me, hey, the telephone pole's moved. So I'm going to go into my Vertex mode. Grab that. Tow that out. Grab that. Tow that over there. And you notice that everything's updating automatically as I move these points around. So I don't have to sit here and redo things.

I can just go ahead and adjust my spline and have all my objects follow it. The only thing I might need to do, let's come back into my array-- let's get out of sub-object mode first-- come back into my array, take my elements up to seven.

So this gives us nice and it works really well if I'm on flat terrain. What happens when I have hilly terrain underneath it? So I've got a very messed up surface down below here. You can see what that looks like. That's pretty nasty. I'll make a couple minor edits to my line here real quick so that all my poles are over my surface.

So there we go. Got all my poles over my surface. So inside my array, I can come in here and down here. I have picked surface. If I pick the surface button and click the surface, it drops all the poles down to be on the surface, which is really kind of neat.

What's really awesome about this is I'm just going to go ahead and take my time slider to 100, turn on my auto, grab my vertex. I'm going to say this one's going to move over here. And say, this one's going to move over here. So there's my new line layout. That looks awesome.

I'm going to select my plane here. I got a noise on there. So I'm going to go into my Material Editor, copy my noise as an instance. And at that point, I'm in the right place. So I'm just going to put one in there, which records that. I can turn off autoplay. And as I scroll backwards, my spline moves and my ground moves and all my poles continually move along with the spline and up and down to adapt to it.

So very, very adaptive workflow, much faster than the old way of having to sit there and manually place things down on the surface. And we really don't care if they move where the line is. We don't care if they move the surface. This is going to take care of it for us. This is a great, great tool for spacing things along a surface, especially when we're dealing with uneven surfaces and we need objects to move with it.

Another common thing we get is, we need to move an object along a closed spine and we need to have it filled with all the objects available. So I need this tread piece to move along that spline. So I'm going to start with an array modifier.

I'm going to switch that to spline based, pick my spline. And you can see it places them out there. And I'm going to change my method from count to fill. So now it fills all the way around, edge to edge on those, based on the envelope dimensions of the object.

My big problem, now, once again, I've got to get those things turned the right way over. So this will be x. Oh, it should have been 180 not 90. There we are. So now they're-- there they are. Problem is, how do we animate something like this?

This type of animation is going to be good if I don't need to show proper linkage between them, if all I'm seeing is the surface. If I need to show proper linkage between them, I'm still going to have to follow the old method of placing down two dummy objects, having them both follow the path, and having one look at the other. That will retain all my linkage orientation.

In this case, I'm going to go ahead and I'm going to use a simple function inside of here. So I go to 100. And I make sure that I have auto key turned on. And all I'm going to do is, up here under the main rollout, is I'm going to go down to here and say 100%.

Now it records and it doesn't look like anything changed. But if I take my time slider, it starts animating my belt in the way I wish it to go. So this is a quick way of animating a series of objects along a recirculating track, whether it's an escalator, a conveyor belt, or anything like that. As long as I'm not really caring about what's on the inside and how they link together, this is a very good method of doing it.

Other things we can do inside of here, continue. And what this is really saying is, what's going to happen when I hit the end of the line? Continue will just continue it off the end at a straight. Loop loops the start to the end. End, it'll just have the one-- everything accumulate at the end. And remove just removes them or deletes that instance of the object as it hits there.

But the loop one is kind of fun to play with because we can make these nice, closed loops to allow us to animate treads and stuff rather than sitting here and going through the long process of actually rigging it together.

All right, the last exercise we're going to go ahead and look at is phyllotaxis. So what we got here is I've got two pieces of a flower. So I open up my scene explorer. We've got a petal and a stigma. The stigma is the inner portion of the flower that is actually the female portion of the flower.

In most flowers this is buried, or the stamen, which is the male portion, is buried beneath it. So that the bee has to dig over the top of that to get to it, which causes it to deposit pollen from its body onto the stigma. In this case, I want to create a flower out of this. And it's going to be modeled somewhat off of a dahlia.

So we're going to go ahead and we're going to start with our array. And first thing we do, phyllotaxis. You notice phyllotaxis doesn't have any sub-method under it. It's going to generate a hundred of these.

We're not seeing any because my start radius is 100 inches, meaning it's scattering these things way over. Because of what I'm going to do later on, I can enter zero here. And now it looks like I still have one. All right. My axial, I'm going to set this to -0.03. And what that says is, each individual copy is 1/32 of an inch below the copy next to it.

So it's going to spiral this downward. I'd love to zoom in on this, but it's so small that Max clips it out before I get to it. But I do need to do, down here, is I need to come in to y and I'm going to tilt this out by like total 45 degrees. Well, that's a little too much.

And it's all-- doing them all the same. What I want that to do is I want to do it by object progressively. So when I do it by progressive, I now get this little knot that sits there. And that is going to show, basically, a cone-shaped. We can go to front view here. Turn off my grid.

Unfortunately, this is really small. Now we can see the cone and how the phyllotaxis cone is building it up. And that is looking pretty much appropriate for what I want. I now need to do my petals. So I'm going to put a separate array modifier on there because I need to have other things going on with it.

So again, go down to phyllotaxis. I'm going to get my end radius at about 0.1. I don't need it moving out too far. So there we go. We got petals going out all over the place. Axial, let's go with -0.03 again so that the petals go downward as they spread out.

And the transform, I'm going to come down here. And in this case, I'm going to do a scale operation on it. So I'm going to go progressive. I'm going to go 200 in x, 200 in y, and 50 in z. And the reason why is as the petals get farther down, they're going to get wider and longer, but they're going to get flatter.

The curvature is going to start disappearing on the inside of the petal and they'll just produce a more flatter output. The only problem with this right now is it looks a little too dense. So I'm going to come down here. We'll take that back to 75. And if I take a close look at here, you can see we're going to have gaps in there.

So I can change that by taking my radial bias down. By doing that negative, it forces things towards the inside. In this case, when I say 0.5 should close the hole up in the center completely. And now my flower is pretty much ready to go. And that consists of two arrays, both non-destructive.

So we can go in at any time and edit them or do whatever we need to them to make our flower look right. So if I make a field of these, I can go ahead and randomize the seeds and other things so we can change the appearance on there, and then render. If I need to have a single flower output, I can go ahead and into my create I can say create objects.

At that point now, I can come in, select it that-- Oh sorry. Did one. I got to create the other one, as well. Create that object. Looks like a petal, doesn't matter which one. Just go ahead and attach everything. Match my material IDs. Oops, should have checked my material IDs before I matched them.

But it allows us-- Oh, I see what it did, too. That's Control Z back on that. My mistake here. I forgot to make this unique. You can see by bold that this is an instance. So when I attach it, it's going to attach the center of the flower to every individual petal. So I'm just going to make that unique. Now I can come in and say attach, control all, maximum material IDs. And I end up with a single flower here.

Blue dahlia, going to move that out of the way. And I come back in and turn on my other two arrays. And there we are. So those are still editable. This is not. I'd like to thank you for watching this session. I hope you learned some information on it. If you're at AU, please have a good time and attend as many sessions as you can get in. Thank you.