Description
Key Learnings
- Solve a practical problem of converting non-BIM geometry to a BIM model
- Learn how to use FormIt as a container to translate geometry to Revit
- Learn how we used a Dynamo script to map surfaces to native Revit elements
- Learn how to iterate design options using Project Fractal
Speakers
- RGReeti GuptaReeti Gupta is the Director of Practice Technology and BIM Manager at HKS. Her 16 years of professional experience includes Architecture Design, Visualization, Computation Design with expertise in tools such as Revit, 3dsMax, Dynamo, Generative Components, dRofus to name a few. She currently works on improving processes for Designers through innovation in data centric workflows, expanding the use of Virtual Reality, BIM Management & Training for Revit. She has a Bachelor’s Degree in Architecture from Academy of Architecture, Mumbai and a Master’s Degree in Digital Arts and Sciences from University of Florida, Gainesville. She has won awards for her work in Renderings, Designed the Dubai Towers Dubai Project using Computation Design amongst other international projects, authored unique healthcare space planning tools using Computation Design, participant at Smart Geometry Conferences, engages with project teams to teach the use of AR & VR to name a few of her accomplishments.
- TLTimothy LoganTimothy Logan is currently a computational designer and applications developer with HKS, Inc., a large AE firm based out of Dallas, TX. He has over 10 years of experience within the field of architecture and has spent much of that time customizing design software and developing project specific workflows for projects ranging in scale from small pavilions to large sports stadiums.
REETI GUPTA: All right. Welcome everyone. Good afternoon. OK, it's 4:30 so we're going to start. So you guys ready for this class? I kind of had a little fun with the title, almost sounds like a rap. So Sketch-it, Form-It, Dyno-BIM-It. It's exactly that, it's a rap.
Between these softwares, we're going to go through Sketch-Up use FormIt as a container, move it into Dynamo and then into Revit. So let's see how exciting that can get.
A little bit about us. Myself and Tim, we're from HKS, and HKS an architectural design firm. We have about 24 offices worldwide, and close to 1,400 employees. About myself-- I've had about 18 years of work experience, ranging from architectural design practice to technology and design technology. I'm currently leading a small group called Practice Technology. We're a bunch of extremely smart innovators, individuals contributing towards the advancement of our processes using technology and AEC. And, Tim?
TIM LOGAN: Tim Logan. I'm a computational designer at HKS. I work with our LINE studio, which is an acronym that stands for Laboratory for Intensive Exploration. We're a design studio first and foremost, but we also act as an applied research and development group within the firm. I'm basically a professional tinker at this point in my life, which is a lot of fun for me. But yeah.
REETI GUPTA: So I'm sure you all have gone through the learning objectives, and besides that I just wanted to recap a few things on the thought processes that really made this project or class come up.
So thinking about making things. It's a two-way street. Thinks that we've done out of changing, things like when we created the car, or the automobile, it changed the society of car culture, created the car culture. And then when we created the cell phone, we started communicating remotely.
So similarly with social media, we're trying to connect with each other of course digitally. So looking to kind of change how we do things with the tools we have, we probably want to even revise our tools. So the bottom line is that whatever tools we use, we can change things for better or worse.
So we're questioning some of these tools that have been developed many years ago, whether they're still viable. And what do we need to do to push the early design stage tools forward and be able to create a design solution better together. So I'm hoping that traversing through these different platforms is obviously not the perfect process. But it's a way we found to be able to answer a few questions that were constantly coming up in our workflows.
So how many of you have been sketching for conceptual design modeling for many years? It's quite a lot. So that's awesome. I think that's primarily the best tool, and gives us a lot of creative freedom. So one can get into the macro to the micro level.
Like right here one of our designers, he was thinking about how the design embraces the surrounding and the site, as well as on the same sketch, on the same sheet, he had the macro-level detail of the coursing on the bricks and how he'd create the ribbon pattern. So how the brain works and analyzes what the design needs to be and throws it quickly down on paper is amazing, but not everybody has that artistic ability. It is a fading skillset.
So the pros of idea generation and being able to communicate design, they're great. But then the cons is a lot of wastage of paper, and unless you're one of those designers who can nail it in a couple of napkin sketches, then great. But otherwise you're going to be totally over it. And of course, there's no data or validation as well in that process.
So we were faced with a challenge. We got a Sketch-Up model that needed to be converted to Revit overnight. Were we able to do it? No. We did not have any solution at the time, so this question of converting the non-BIM geometry to a BIM model became very important.
And that's why we decided that, OK, let's move from sketching down and on paper to sketching up using Sketch-Up but then dumped that and move forward with just trying to get all that geometry into Revit. Because some of our designers are still in Sketch-Up and it's just an ugly truth. So I'm just going to state that. I'm sure many of you feel the pain as well.
So here we go. We're going to go from Sketch-Up to Revit, using FormIt and Dynamo in the middle. So we figured that using pure surfaces, we can bring in the Sketch-Up geometry to Revit, but it's going to be non-intelligent. It's not going to have any information in it. It's not going to be your native Revit elements. So you could technically just use the conceptual Sketch-Up model in Revit to view it, probably rotate around. But really nothing else more than that.
Now, here's the painful part. I'm sure many of you share this pain and agony with me. Going through a Sketch-Up model that you've not created-- some designer has created it-- I'm clicking away, clicking away, opening all the different layers. There's CAD layers, there's site layers. There's [? CARS, ?] [? Entourage, ?] probably not named accurately, but you see nothing.
What you see on the top right is what should appear, but it's still not appearing. And I don't know any more than why things are grouped and are on Layer 0, but Layer 0 is supposedly the magical layer that makes things appear. So we have that.
Another frustrating part, I really never ever thought that I'd be showing something more than just pushing and pulling surfaces in Sketch-Up, or sharing this tool with my 9-year-old to explain what 3D modeling is, but here we are. I'm showing how we've taken the unorganized Sketch-Up model, reorganized it, and thought through what we need to be converted to a floor, to a wall, to a curtain wall tied to a roof, and organized all that geometry that was on multiple layers on Layer 0 and then remapped it-- or changed the layers to assign it to a more methodical approach.
So once you do that, you'll have a lot of unnecessary geometry that'll be sticking around in that Sketch-Up model, so you want to go into Model Info and then purge the unused layers. So we've gone from sketching down from on paper to Sketch-Up, and now we're going to be in FormIt.
So, some quick steps over here, we have two methods of getting your Sketch-up model to FormIt. One is to use a Revit add-in, and later on we figured out that there was actually a direct Sketch-Up import to FormIt. So once you get the model into FormIt you want to check the layers. And one of the reasons we want to go through FormIt is because it keeps your layers from Sketch-Up organized, your components from Sketch-Up organized as groups inform it.
And when you export that FormIt file which has a [? .AXN ?] format to Revit, it's going to convert each object into a mass family. And then a similar component is going to be an instance of that mass family. If you have a large file with a lot of components, we advise that once you've gotten that file into FormIt, you want the ability to export each layer one at a time.
So you can create a curtain wall type 1 .AXM file, curtain wall type 2 .AXM file, and then push it into Revit. That way you'll be able to handle the geometry a little slowly and it'll be a cleaner effort.
And then the last, fourth step, that's where Tim's going to focus on using his awesome Dynamo script to assign categories in Revit. So one other neat feature-- again, we found out later on-- was that within the groups, when you import the geometry, sometimes you'll get an error message saying that there are some uneven surfaces. And this was pointed out to us and we kind of drilled down deep into the group which had that uneven surface. So you'll see there'll be some triangulation that'll come up in a second.
So this doesn't translate very well when you take this to a wall category in Revit, but there's a little button, which says Fix Faces, and then you'll get a success message on top, and it'll fix the geometry for you. So if you want to control some of these facets and triangulation right here in FormIt before you push it out to Revit, that's an option.
OK. So the next part, it's going to be highly technical. Lot of cool Dynamo scripts, and I think most of those are made available to the class and the materials as well, so I will give it off to Tim.
TIM LOGAN: OK. Thanks. Right, so we've got a FormIt file now, and we need a Revit file. So there is no built-in FormIt importer for Revit, so you have to get a plug-in. It's really easy to find, it's on the FormIt web page. You can also find it on your Autodesk account, under Product Updates where they have all the other plug-ins.
I assume they're both kept up to date-- I didn't actually verify that, but it should be either one is fine. A lot of times the plug-ins don't get updated a whole lot between versions. But once you install it, you'll get this handy FormIt converter panel that shows up on your Add-Ins tab.
There's two buttons to it, one which says Reload Families. It's got a little down arrow that implies there's more tools there. And then About FormIt, which just takes you back to the FormIt website, which if you just installed it, you already know where that is, so you can ignore that one.
But the second one's where all the magic happens. And there's four commands, you know, RFA to FormIt, Sketch-Up to FormIt, FormIt to Revit, and then Reload Families. The only one I'm going to be interested in this case is going to be the Import FormIt into Revit.
And if you look at the Tool Tip, if it's legible up there, it does say you have to import it into an existing project file, so you have to open a new file with a template and import it that way. You can't just create something like you can with, say, an IFC file.
So I made a little video of showing what it looks like to import something. This is importing the entire model, it's a pretty small model. I sped it up so you don't have to sit there and watch the whole thing in real time. But it's going to be importing. It takes about two minutes to go through the whole thing.
And at the end of it, as you would expect, it's going to throw some errors at you. The error has one option which is to cancel, which usually in Revit means cancel everything that you just did. In this case it's basically the same thing as an OK button.
If you look at it, it says it couldn't import geometry. It points out group number six-- I have no idea what that is off the top of my head-- but if I go back to the FormIt file, I can find group six and I can figure out what that is and see if there's something else I need to do to get that across if it's important. But for this class, I just ignored it and said that's fine.
And then you turn on Shaded View, and you've got a pretty legit looking Revit model at this point. It looks like curtain walls, and roofs, and walls, and floors, and all that fun stuff. But as Reeti said, everything comes in as masses, which isn't terribly useful as an actual BIM file.
And that's sort of the heart of what this class is about, as Reeti was talking about. How do you go from a non-BIM to a BIM workflow? And there's very specific ways that Revit wants you to create a wall, or a window, or a roof, or a floor, or not allowed to create a ceiling automatically yet. So there's limitations and there's certain ways you have to do things in a way that Revit expects, to be able to get proper elements.
And I can take these masses and I can do Wall by Face, and Floor by Mass or Floor by Face from that. But nobody really wants to have to edit a Wall by Face for a typical wall, because it's a hassle. You don't want to have to modify a mass family to change a rectangular wall.
So that's where we decided, like, OK, well how can we start breaking this down and use Dynamo to help us translate all these things? But because this is really about interoperability and going from one platform to another, and we've already crossed two thresholds to get from Sketch-Up to FormIt, and then FormIt it to Revit, now, there's going to be some inaccuracies. Just the nature of digital tools, everything is only so accurate.
And in this case, it starts off as a Sketch-Up file that was just kind of arbitrarily placed on the site as near as I can tell. You can see it's a little bit crooked in the plan view, nobody wants to do your Project North as a crooked model. That's just going to be horrible. It's just floating between levels. It's not near an origin point. So you want to fix that stuff before you go through.
So the first thing I do is I group everything up, just to make it easier to do these large transforms to everything, and not worry about whether I'm remembering to grab everything on whichever view. And then the first thing I do is I'll just fix the levels and make sure the elevations are right.
So for the first level I identify it, and then all I'm going to do is just move the entire building down-- use the Align tool, Move tool, doesn't really matter. But for the next levels, you don't want to just align level 2 to the top of the floor because it's probably not going to be accurate. It was drawn in Sketch-Up, there are going to be imprecisions in the numbers. So you always dimension it and get the rounded dimension of what it's going to be.
And then you just type in 18 feet instead of moving it. That way you know it's at 18 feet not, you know, some messy number and it looks fine. So if you actually look at it, if you do move it up, it's kind of 18 feet, but after about 10 decimal points of precision you've got some messy numbers. And that's why we type the number in instead of just moving it or aligning it, because you get a nice clean 18 feet which you expect.
And then you basically follow through for the rest of them, you just dimension from your level where everything is, what the offsets are going to be, and then I just use the Level tool with the Pick Lines tool. This is just a complete manual process, it doesn't take that long, it's totally fine. You could try to automate it if you wanted to, but it just didn't seem worthwhile in this case. And we've got an elevation that looks sort of halfway decent.
So we still have, you've got to fix your rotation. It's 0.81 degrees off, so fix that. The longer you wait to fix things like that, the worse it's going to be for you. It's really difficult to change Project North after a model is well underway.
And then just move it to an origin, something that makes sense-- like this is the site boundary, I'm imagining a property line. There's no grids or anything, like I know all of the model elements are going to change, so using any part of this model as the origin point is probably going to be a bad thing because it's not going to be really that well located. So just think about if you have a property line or something else, use that.
There was a great class I saw at-- I think it was the BILT conference, it used to be RTC-- by this guy named Krigh Bachmann in Toronto, like a year or two ago. If you want to know everything about coordinates in Revit, it's an awesome class. I've never heard anyone from Autodesk be able to explain it, but this guy totally nailed it.
Anyway, so we fixed our model, it all looks great, so we can actually move forward to creating decent geometry out of it now. And just good housekeeping again, we don't need this group anymore. Get rid of the group. Ungroup it and then take the five seconds to delete the instance or the definition of the group so it's not carried through the rest your model's lifetime just taking up space.
OK, so how do we actually make Revit elements out of all this mess? And I wanted to start with like a previous translation that I did. And this wasn't a Sketch-Up or a FormIt one, this was just probably a more typical workflow that I have to use in my studio. The other designers in my group use Rhino pretty heavily on the early design side, but all roads lead to Revit. So we're always going to Revit at some point.
So we've done tons and tons of translations from Rhino to Revit, so doing Sketch-Up performance for Revit, it's kind of the same thing. You just have to think of a strategy. So I just wanted to present this as another strategy might have to do, and how you have to think about the problem. Because it's just about problem solving at the end of the day.
So this was a children's hospital in the Middle East. It's massive, I think it's 100 feet long or 300 and some-odd meters long. There's big volume space with a podium and weird shapes all over it. But we were contracted to do just through SD on this project. So at the end of SD we had to deliver a full on legit Revit file that we could hand off to the architect of record who was going to be carrying it forward, and we would have a pretty minimal impact on it after that.
So we had to figure out how do we make this translatable as quickly as possible. So we had to start thinking about the problem, and I'll show the podium because it's a pretty straightforward process and it sort of breaks down also how we did the shade screen, and how we did some of the other elements too. But because this was all sort of computational design oriented, there's always like the base surface that we start with that everything gets articulated and built from.
So we still had this on our Rhino file, and I wanted to keep that because the surfaces are all shaped kind of weird. I knew I was going to have to use adaptive components, even though I'm not a huge fan of adaptive components because they're really easy to use in interoperability, because you just need points. But they're a hassle to place and deal with. But in this case that was the only thing that made sense.
But I didn't want them to just be free-floating adaptive components, because if you pulled one off you're never going to get in the right spot again, it's just going to be floating somewhere. So we wanted to host it to the UV, so I extracted all the corner points of these macro faces, sent it through the ether. In this case, we were using a service called Flux, which no longer exists-- but it doesn't really matter, it's just points xyz values in a list. You could do with a text file if you really wanted to.
Text file the points to be read in, we would take those points in Dynamo and then generate a mass. So this is all a single mass family that has all of this placed in it. It's just surfaces all automatically generated. And then we would do the same thing for the corner points of the actual panels. This is a coarser articulation than what it really is, but it's just a little clearer to see.
Send those through the ether-- which you may be able to see some little blue dots-- and then we place families on it. And it's a nice way to go about it. It's really easy to do, it's sort of like you just say update, and it goes through and updates it.
It's by no means a quick process. There's a lot of these panels on the actual building. When you hit go, it's going to take about two hours. An hour if you have a really, really nice machine, but most people who are working off of laptops, it took about two hours. The full translation would take about a day for the entire building with the shade screen, with this, with the roofs, all that stuff. So it's easier, we could do it when the designers change things, but it's still not something that you're going to get instant feedback and response from. It just takes a long time to generate Revit elements sometimes.
So we had something that looked like this, and we had sort of similar methodologies that we worked through. And then we generated a Revit file that looked like this, that was actually useful for the design team going forward through the rest of the phases of the project. So that's sort of like one crazy extreme.
We have a little bit more of a typical project, and how do we actually go about doing that? So I'm going to be using the one that I imported and showed you a moment ago, and I'm going to talk about one of the Dynamo scripts in full. And I'm going to talk about the floors, because they're really easy to talk about. They're pretty straightforward, like the algorithm to generate a floor based on these masses.
But I do have documentation in the handout, I think, talking about all the other Dynamo scripts-- and you can email me if you have questions, too. But to start with I wanted to look, OK, well if I'm going to start with floors, how do I create a floor in Dynamo, which is going to tell you how Revit's API expects you to build a floor.
There's two floor creation nodes that are in Dynamo natively. They both have the exact same name. The only difference is one takes a polycurve and one takes a list of curves, but basically the same inputs other than that. So as long as you have a list of curves that go around the outside, or polycurve, you're good to go.
That also is implicitly saying that you can't have internal voids in your sketch, either. You can only do the outside boundary, because it only takes one polycurve. So with that in mind, you start thinking, OK, well, how do I get a polycurve based on these sort of mass objects? You always start just look at one item, you don't want to go through and try to deal with everything at once.
So I'll isolate one and I'll start looking at how we can go about using it. And I've got-- this is my floor. It was a little bit hard when I was looking at it to determine if it was a floor with a slab edge detail around it, or if it was a floor with a ceiling plenum space attached to it. I wasn't really sure, so I wanted to look at the bottom and the top and make sure I could get either one in case I needed to.
So the bottom looks like this, but if I get the top piece, it gives me the surface [? grade. ?] I've got the complete surface, if I look at the bottom thing and try to get the surface from the bottom as well I get this weird shard. It goes back to the triangulation that Reeti was talking about, that hopefully that can get cleaned up in FormIt.
I did try it once and it just told me no. So it can't fix everything for you, so there's some situations where you may still have to deal with these problems. But what that means is it just complicates your workflow and what you have to do to be able to go through it.
So this is my dead simple definition to select a surface and generate a floor. So pick a surface, get the edges, and then define a level and define a floor type and it makes a floor. If I have to do it in pieces, it's like three or four times as long. Because it's a lot longer of a process to like, OK, grab all of the elements, join them together, find just the edges that make sense and throw all the other edges away, and then use that to create a floor. It's a more involved process. The nice thing is, if you go to the effort to make something like this, whether it's one surface or 10 surfaces that make it up, it works the same. So if you go to more detail, it's a little bit more usable.
So this is sort of the completed floor generator that I made. It's got four major groups. It's got two inputs, one for the floor families, and then one for the floor type. Everything else it figures out on its own. This isn't the only way to do this, this is just the way that made sense for this one project. I'll talk about some other things where I may deviate on other projects, but I'll step through this definition and talk about what-all it's doing.
So this first group is the Find Upwards Pointing Surfaces, so I just want the top surfaces. Or if I wanted the bottom surfaces, I would be the downwards pointing ones. And what that means, you want to get the normal vector and make sure that the vectors pointing up. If it's a floor, it's most likely going to be pointing up unless it's sloping, and then you have a sort of special edge case you have to deal with.
But what is that algorithm actually doing, that chunk of code? So I've got this arbitrary surface, and I'm going to say, OK, we'll grab a face, and what's the normal vector? What's perpendicular to that face? And then I'm going get a Z-vector, and then I'm going to measure the angle between the two-- in this case, I've got 90 degrees, because it's pointing out to the side somewhere, and it's pointing up.
Grab some other arbitrary surface, get the perpendicular normal vector, Z-vector, measure the angle-- same thing, it's 90 degrees. So no matter where it is around that surface, it's going to be 90 degrees in a typical sort of extruded floor thing.
When you grab the top, and you get the normal vector in the Z-axis, it's going to be 0 degrees. And that's like, OK, well, that's pointing in the same direction. So it's finding it based on the angle before anything else. You can do other things, like find out the top surface just elevation-wise, which may work, instead of just the Z-vector. But sometimes you may not want just the top surface for different reasons, but that's sort of where the next part comes in.
So this is the Find Top PolySurface. In this case I am finding the top one, but I wanted to be able to choose-- if I needed to-- a top one. There was like a little slab built up on top of it, it was raised up, it had a curve or something. I might have something that's a little bit higher elevation. So I needed to be able to deal with that.
So basically the way this one's working, I've got my little cube here. Let's say I've got two surfaces that point upwards. How do I find the right one? In this case I just get a point on the surface and get the coordinates of them. The only thing that really matters here is the Z-coordinate. Just find the Z and then choose the top one, or choose the bottom one, whichever one is appropriate for what you're doing.
You could also say find the one with the biggest area. A lot of times they'll just sort the faces of a floor family by area and choose the two largest ones, which is usually the top and bottom, and then you choose the top one. It all just kind of depends on what you're working with.
OK, so Naked Edges. Naked Edges are the boundary edges of a mesh-like object. It's the boundary edges versus an interior edge. And that's the sort of extra effort I had to go through to get just the right boundaries. And again, what that looks like, let's pretend we have this surface. It's tessellated, it's triangulated, and then there's some topology tools inside of Dynamo that you can look at.
What are the faces that are attached to each edge, and you basically count the number of faces. Is there one face or two faces that's attached to the edge? If there's two faces you throw it away. You don't need that edge. If it's one face you know it's a boundary. And that's how we get those.
And then the last major chunk here is finding the closest level, and another little gif-- or jif, if you do it properly, which I never do. Find a point on the surface again, just get the elevation, nothing else really matters for it. And then you look at all your levels. OK, I've got these levels in my model.
Do a really quick calculation. 17 feet, which is my height, minus the elevation, get the absolute value of that and then sort the results, and then the levels with them. And you find out that level 2 is the closest one because it's a foot off, and then that's the one that it chooses to use as the level. So that one little chunk gets copied in every single definition, I think, that I've provided.
And then the last step is just make the floors using the built-in tool. There's nothing particularly fancy about it. And then sort of what it looks like if you actually run it, I ran all these things through Dynamo Player. But essentially I'm just isolating the floors. I could have done it by choosing the top surfaces, and maybe it would have been a little bit easier. But I wanted to be able to just select all the floor objects and then make floors out of them.
So I isolate them first, because the Select Model Elements tool in Dynamo only window selects, I think. At least that's all I've ever seen. So you sort of have to isolate something like this so you can make sure you're only selecting those objects. Choose the floor type. I just chose a generic floor type because it's pretty early on in the design. It's probably not really set yet, so I just need something in place. And you push play and then it makes floors. It's fantastic.
So at that point, you know, you go through and there's a couple of other definitions to make walls, to make curtain walls, to make the roof. I think I've got two versions of the wall tool, one for tessellated, one for untessellated. And I go into detail about how they all work and the trade-offs that you have to deal with when you're using them. They may work for some situations, they may not work for others. They worked great for this one little project, but I've been on lots of projects where I wouldn't be able to use them as-is. I would have to tweak them and modify them.
But yeah, these are the six scripts, basically creating walls, creating columns, creating roofs, creating floors. On the left is the FormIt masses that got imported, on the right is all the Revit geometry. And the whole point of it is to make proper objects that at the end of the day, the masses don't matter anymore. You can throw the masses away, you can delete them, purge them out of your file, and you've got regular floors and walls just like someone would manually draft.
Does that mean it's clean and great? Absolutely not. There's all kinds of weird little gaps that show up in here. Just because the Sketch-Up model was messy, or there were things about the Sketch-Up model-- like with curtain wall, it's got mullions and things that you can't really account for, so there's gaps between all the curtain wall corners. Floors are going through the walls, and that's just because that's the way it modeled in Sketch-Up. There's things like that that you just have to deal with, that's just part of the process.
And now back to Reeti.
REETI GUPTA: So we're going to switch a little bit off track here and get into Fractal, but if you all had any questions pertaining to what you all just saw so far, then maybe you want to--
TIM LOGAN: Yeah. Sure.
REETI GUPTA: --go through that before I actually--
AUDIENCE: So you were using Sketch-Up kind of as your conceptual design tool, have you explored using FormIt instead [INAUDIBLE].
TIM LOGAN: So the question, just for the recording, is using Sketch-Up as a conceptual design tool, have we looked at using FormIt for that instead? Absolutely. Convincing the designers to do that is a whole other thing. They've got a decade-plus of experience using it. They're pretty happy with it.
At the end of the day I'm not terribly concerned with which tool they choose to use. I think it's more about training them when it's appropriate to stop using it and move to something else. We've got lots of projects where elevations are done in Sketch-Up because they like the rendered elevation, and then the Revit model lags behind a little bit so the floor plans don't look right because they're trying to do two at once. Things like that I don't think should happen, but getting them to stop using Sketch-Up-- at this stage I've given up that fight.
REETI GUPTA: Yeah, and we'll continue on. But, yeah, so there are other options. I mean we've used multiple other softwares like Rhino as well, for conceptual design. And now we're trying to say that, even with the next example, how can we leverage iterative, generative design along with something that's more massing and pushing-pulling oriented?
So I'll talk a little more about where we are with FormIt, and that's all. I'll continue with this presentation. So the famous quote by Marshall McLuhan about how we shape our tools and our tools then shape us. So, you know, since the beginning of human mankind we've created, and we've thrived on what we've created. So we've been able to synthesize, iterate. And this has become a foundation, really, in being able to ideate and make sense out of what we've created, and get informed in return.
So we're very lucky to be in this profession. We're very lucky to be a human being, really, because we have the cognitive abilities. And I honestly think that everyone here who's been in the design and make and architecture profession, we have a great responsibility to shape our future world. So we should definitely put in all our efforts to make sure that we participate and encourage better tools to be created for us so that we can inform our world better.
So those are some of my thoughts, and I looked at Project Fractal and I was a little bit encouraged in the beginning that, OK, you know, we have some way of taking the Dynamo scripts onto the web and just kind of allow an end user who doesn't want to deal with Dynamo-- even though it's awesome-- to be able to just push some sliders up and down to create multiple design iterations. So maybe some of us can do the heavy lifting in the background and be able to provide the design team-- or even the client in some cases-- with just parameters that they can push and some outputs towards what they're looking for.
So the next example that we tried out-- before I get there, I just wanted to kind of make everyone aware. We just realized in Autodesk University two days ago that there is another project that has started up, and it's called Project Refinery. The development on Project Fractal-- as we know, most projects, they can just totally shut down. So I've heard that they may not be proceeding with developing Fractal. I don't know if it's going to live, but it's going to change at least to Refinery. Refinery currently is not a cloud-based web platform, so any kind of design iterations that you do will be saved on your hard drive. And that's that, so. OK.
And one additional thing I wanted to point out is that even if Fractal goes away, you see the last part where it's FormIt, any work that we've done in Dynamo Studio can be actually used in FormIt. So that's a pretty good advantage, to be able to think about developing your design options in Dynamo.
So here what we've done is taken-- basically this is if you're in a massing stage, and this is where what Tim mentioned, that we want our designers to kind of stop where they should. In this particular case, the design of the building had a ribbon facade. There were two ribbons and they just they just had one static shape. That's it. They probably tried two or three others, but then whatever appealed to the designer, and they just stopped there.
So the argument that I'm trying to make here with them is that, look, you can iterate through multiple design iterations and get millions of options just by creating or by thinking about what are the parameters that you would like to create to make those changes. So we began with exporting an FBX file out of Sketch-Up and bringing that in to Dynamo Studio.
So these are some typical notes that you'd use to bring it in. You'll get two meshes, and they come in with their diffuse colors and that's the way we kind of were able to isolate one of them. And we were dealing with just the tower, so I removed the bottom mesh. Next thing, we want to figure out the top vertices and the bottom vertices, and then figure out which ones are top and create two lists, just the top ones together and the bottom ones together.
So as you see over here, it's quite mixed up. The vertices are not organized properly. So you have either the 85.368 or the 415.499. So this operation where it's identifying and creating an average, xy, is making two lists. One is in the In one's in the Out. So tracing the bottom edge is above, and I'm kind of showing how all the z values over here are just for the bottom one, and then the little group of nodes below is for the top edge.
So over here I actually went through the vertices, just figured out what index it was at, and manually typed the 8 and the 7 to kind of stop the line at those points, and then created the horizontal line that will basically bookend the top and the bottom extent of the facade. So for the top one it's a different vertex.
So now we have the top and the bottom edges, and then we're going to figure out the extent of that ribbon. Are we going to create the width of the ribbon the same as the length of that line, the horizontal on the top and the bottom? Or are we going to be able to change it at will? So again, this is a parameter that we can put in, and we use pointed parameters so we could even have a different one on top and a different one at the bottom. So the sliders can help you do that. So I've kind of gone to the border of it and left the other part out, so that's that.
So the second step is generating the actual ribbon facade. So over here, this little grouping will show how we're going to create the surface on top of that area that we've defined. So we're basically piping in the vertical lines, and then we're going to divide those vertical lines into parts. So in this case, I've divided those into three parts, and there's that parameter over here.
And then at those control points we're going to have our triggers of varying lengths. And the sliders that you see down below here-- you just missed those, it'll come back-- that will allow you to create a NURB spline over it, and be able to change it based on how you space and what the lengths of those outriggers are. So again, we've combined those two NURBS curves into one list, then we've lofted it using the surface loft.
The next thing I just did was create UV divisions. Again, there's the sliders that I've used to be able to divide those quickly and be able to understand if we do have curtain panels and we know the dimensions of it, then what that facade is going to look like. So these are the sliders that I was talking about, and we're just dragging them, figuring out what are the different iterations that we can do. I mean this is the moment where I can just spend a couple of minutes enjoying myself, feeling good about what I've created, so. It's a good feeling. All right.
So then we look at the left facade, and I've gone a little bit different in this just so that, you know, if y'all are going through the scripts you'll know that there's many ways of doing this. Over here I pretty much took that little niche over here. So that's the extent of my left facade. The pointer would help, right? That.
So those two vertical bookends are going to be made, and it's going to be using the length of the line that we had already created for the right ribbon, so it's going to match that. And in this case I did not use the same way of dividing the vertical lines, by parameter along the curve and stepping it at a certain rate. Instead I've used planes and I've created five planes along the line. You can change that to 15, depends on-- that's right here-- the 10 remaining divisions.
So that's just another method, another way of dividing up the vertical axis, or vertical line. And then the control points are generated-- and again, it's the same concept. There'll be some outriggers coming out from here-- so, continue on. And these are of varying lengths. We're attaching points at the end of those, and then we're going to create two of them.
We're just going to copy-translate it over to a certain distance. That distance can be manipulated as well, so it can be wide or narrow depending on what you want to do. So there's another option of creating more designs. And then again we combine those two curves into one list. Surface loft, same thing. Create UV divisions, and in this case I quit the sliders and I just said I want 16 and 8. So it just depends on how you want to continue on with your script.
OK, so we had the geometry and facade design option created, and then the next step was to actually send that information to the web to acquire it by Project Fractal. So I'd started to do that and I got messages that you're not going to be able to do that, because this node definition, that node definition, and the other one is not going to work. So I realized that, oh my god, I have to do this again, with another way of thinking.
So the first one that did not work which makes sense, is that my FBX file was coming from my C drive. So obviously the web doesn't know my C drive, and I don't think it's connected to BIM 360 that I can link it from there. So Tim helped us create this, Points to Copy for Fractal Preparation, and we've got the xyz coordinates for both the top and the bottom points. Let me just go through this. It's a little lengthy, but what happens at the end of it is going to allow us to continue.
So it's capturing all the curves and then it's going to create it as one group, it'll group up all the points together. So that'll make up the right ribbon and the left ribbon. And then a code block will basically concatenate everything together-- that happens over here at the end-- and it'll produce one string that we decided to create a text file output. Now again, it's a file output. We're not going to link that file back again to another Dynamo script, but we're just going to copy-paste that information over when we create a brand new file for Dynamo. So we'll show that.
So that's the text file. So it's point by coordinates and then it's got a number of coordinates that we will be able to use in our fresh file so we can send it up to the web. So in essence, I mean, there's a lot of things that we've discovered, and we just wanted to keep the class raw so that you all learn from what not to do. And so this is the code block, this is where we just copy-pasted the information and then started piping that to create the vertices, and then the lines that connect them.
So after you've connected those, we had to flatten them and create cleaner lists. And then we pretty much followed the same process to create these two ribbons that you already saw, so I'm not repeating the whole process here to explain. But essentially, the input for the end user is the left-driven curve control points and the right driven curve control points. So we have this one here for the left one.
So what one really neat thing that I could visually see-- and I've got it on another slide, actually at the end, so I'll probably just go with that later on. What we decided to do over here was to create slabs. So that I could explain what happens when we want to get information out of these design iterations, we wanted to get information about if we were to decide on a curve, curvature, like this for the left side and a curvature like that for the right side, then what is the floor area that we're adding to the building mass?
So I think in this video I'm just kind of playing with the sliders and then I'll show how we've got the outputs generated. And then in preparation for sending this up to the web, we also have to make sure that this Is Input has a check mark against it. If it doesn't, it's not going to export it as a parameter or a slider for the end user. So make sure the ones that you want an end user to experiment with or to play with has the Is Input available.
So this is a definition that's basically showing on how we've created the floor slabs. Again, just on planes at a certain distance and cut the surface geometry into curves, and then created the floors or the floor boundaries and extruded them. And on the right-hand side over here, I've created the surface area. So I've got a math.sum for the left one and the math.sum for the right one, and then I also have a sum of the sum. So we've got the floor area added total, and we've got the right side floor area total, and the left side floor area total.
It's very important that we name these watch nodes. So these were watch nodes, essentially, but we haven't named them. If we do not name them, they're not going to be outputs available in Fractal. So once we name them it will show up in Fractal.
So before we get into Fractal, and this was what I was talking about, that even if Fractal is not there and you only have FormIt, here's a great example of how we can have our designers actually utilize just pushing, pulling, building masses, know subtracting, Booleaning. Whatever they do in their Sketch-Up world, they can probably follow the same suit in FormIt, but if they do have a facade that they want to experiment with, then they can create that geometry on the side in Dynamo and then bring it in.
So once you send it to web, which I think should be here. No. So this is just going FormIt. So you send it to wherever that definition is available to you in the Dynamo tab, in FormIt, and then you just select one of them. So over here, you can see I've got ribbon options one, two, three, and then finally I got the demo facade fractal. I mean, there was some experimentation here.
And then if you want to access the parameters that you just saw in the Dynamo script, you have to actually double-click on that blue selector geometry, the Dynamo script file, and then you will get in to the sliders. So it's a group property, it doesn't come up just by clicking it once, and it's frustrating because I tried and I was like, wait. I was told that I will get the sliders, but I don't see them. So you've got to double-click in it, and you've got to enter into the group. So same thing here, you can play with, enjoy. It will take a little bit longer, it's kind of going through the server and the cloud and that way you can have a fusion of both, just block modeling as well as generative design.
So as I said, we do need an evolution in our design tools. I don't know what the next steps are, but I'm going to keep my eyes and your ears open and try to adopt as much as possible and create better workflows. So stepping into Project Fractal and how we use that to iterate design options. So I went through this, but this is the procedure to send it to the web. You can just go to your Dynamo Studio and then type in a name and then hit Publish, and it's going to give you a web link. You can copy-paste that web link in a web browser, or you could sign into Fractal.live, and you can select the demo facade Fractal and then start playing with it. So I'll pause it a little bit over here.
So what you see here on top basically are the engineering options, and then on the right, the orange lines, they're the output. So those are the floor areas calculations. And then obviously these are the parameters that you've been seeing. The variations, that's an option, so even if you have used the Is Input on any of these and then later on you decide, hey, you know what, I don't want three million design options, I just want to limit those. And I do not want anything to change on the right ribbon, I just want to see the left ribbon changed, then you can just uncheck these boxes.
And if you want more options on the left ribbon, you can actually increase this number from three to four. So when it's three it's basically saying that I'm going to stop at number 1, 50, and 100, if the range is from 0 to 100. So if you let it go-- so here I'm just kind of limiting some of the design options. The number is changing down here. So it's now up to 675 designs. Again I'm changing it to 243. Obviously it's going to take more time with more number of options.
So I was like, OK, you know what, let me just start generating 576 design options. So it quickly drops these individual thumbnails based on the view that is available to it in this viewer on the right-hand side. If this view is small, that thumbnail is going to be small, so I'd recommend to go zoom into it and make sure it's the orientation that you want to look at.
And on top you'll see that certain things are changing. So I kind of stopped the iterations over here, and then I'm going to decide that, hey, I just want to limit my total floor area to be between 60 thousand and 70 thousand. And I want my, I guess, left floor area, left-driven area, to be between, I guess, it's 30 to 40 thousand. So as soon as I do that I've got these two boxes. I'm definitely limiting what I need to see, and those are the five options that I can do so that we have the output maintained at what I want it to be.
And then you can always sort your design options, you can mark them as favorites or star them. So you've got multiple ways of filtering out the number of iterations. And then I think in terms of output, we could save this back as a Dynamo file. I haven't seen this going back to Revit, but I know it goes back to FormIt it, so that's it, I guess, on that.
Yep. So this is basically showing some documentation that I just talked about, that once you have that published version you can go into the website. You can go to My Workspaces, and the list of the definitions that you have published or sent to web will be available for you down here, and then you can pick which one you want to play with in Fractal or in FormIt.
So this is more in detail on what these individual areas are called, so these are your option engineering variations. These are the output watch nodes, you've got your sorting previews, variables, your mean preview and your start marks or thumbnail favorites.
So the one thing I was pointing out while the Dynamo script was going on was that I kind of like to see this as a visual trick to understand what that section profile is for the curvature. So these little slider buttons. They kind of visually show me. oh, OK, my left ribbon is going to have that kind of a profile and my right it's going to have that kind of a profile. And I talked about this already. So you can limit your design options with your sliders and Fractal and change the number of variations you want.
OK, how are we doing on time? Good.
So in theory and conclusion, I think we do need to streamline our design processes from taking them to documentation. We have several softwares that do wonderful things with geometry, but getting the data with the "I" in BIM as an additional layer that's something that we're still thinking of an additional add-on. Revit does have some neat conceptual design tools. Some of us are successful in it, some of us aren't. So I don't know, probably needs to get better.
And in general, when I have conversations with our designers in the office, I always get like, hey, we need to have complete freedom. Our creative processes need to be whatever we feel like, and if there's a tool that allows us to express that more freely we are going to use that. So my point is that yes, that's true, but we do need to understand that there needs to be some logic and some analytical aspect. So if a computer is allowing you to do that, why not. So let's think of it and kind of analyze how we are going to look at our designs and figure out what are the important parameters and be able to compute that using generative design tools like Dynamo.
OK so, in essence I think interoperability is still a thing, and we would love to move to a better future for early design stage and documentation processes. Any questions or comments? Yes.
AUDIENCE: [INAUDIBLE] would you only use out of the box [INAUDIBLE]?
TIM LOGAN: There are-- so I try to use some packages. It's definitely, I was doing things that out of the box couldn't always do. There were a few things I think I tried to use Wombat for, but it wasn't working quite as well as I wanted in some cases. So I actually wrote a package just to make walls-- wall by boundary, and then wall openings, because there weren't tools for those.
So that's part of their-- I think I have a GitHub repo link in the handout, too, that shows you where to find it if you're curious. But generally there's Python in there, there's compiled nodes, there's Dynamo script-- just design scripts I guess-- just to throw a little bit of everything at it. Just to give you a feel for what all the different ways you can do things are. Yeah.
AUDIENCE: [INAUDIBLE]
TIM LOGAN: So are the Dynamo scripts one-off for the design. I think it depends on which Dynamo scripts. So the one she was showing with the ribbon, that's pretty much a one-off. It's just, we do a lot of very project-specific scripts that live and die in the project. The stuff I was showing with the translation of surfaces to BIM elements, those have a life afterwards. It's not always the exact same file, it's sometimes like pulling out pieces and replacing things, and whatever is appropriate for what you're trying to do. But they sort of carry on, there's a lineage and a history to a lot of these things, of things we've done before.
It's a lot about sort of building up an experience of how Revit it wants things to be made, in a way that's useful for the design team after they're made. Because some things just aren't as useful.
REETI GUPTA: Yeah, and one of the things that I want to push for is the methodology. So if somebody has used the ribbon aspect, or the Dynamo script for that ribbon facade, well, they will understand in the future if they're doing another project that they can divide a line into 5 parts or 15 parts and be able to drop splines over it. So you saw, what if this was a vertical surface, if they're doing a skylight or a roof that's going to have a curvature to it, they'll have to start thinking that way. So that's what I'm pushing for is, let's start thinking more analytically and be able to extract what we are generating to some data and validate it.
TIM LOGAN: Yes.
AUDIENCE: [INAUDIBLE]
TIM LOGAN: Yeah. Yeah, I mean, it's definitely got some-- I dug into it a lot more in the last two months, I think, than I had before. I get brought in a lot to deal with just interoperability problems. It's something I've dealt with for a long time now. But I hadn't had as much opportunity to play with FormIt, but it definitely had some nice tools, and I really like the way it translates into it to Revit. It's a much cleaner way than just sort of a typical CAD import, which is the main reason why we were trying to push it and use it, even if it is a go-between from Sketch-Up to Revit. Yeah.
AUDIENCE: [INAUDIBLE]
TIM LOGAN: For Dynamo. Yeah.
AUDIENCE: [INAUDIBLE]
TIM LOGAN: Yeah, so the question for posterity is, do we have company standards for grouping and coloring and style of the Dynamo scripts? Not really. And a lot of it's just because, well, I will say not really from the standpoint of scripts, especially ones that are for projects. Because they tend to be so project-specific. It's like one person working on them, maybe two people working on them.
For something that I know I'm going to be giving out to someone else in the office, I definitely try to follow an organization to it. I put lots of notes in them. I group things and name the groups. And I don't necessarily follow color codes very easily-- or very well-- but I try to keep some organization in there, because I know I'm going to get questions about it anyways. But just trying to make it a little bit easier on people. Yeah.
AUDIENCE: [INAUDIBLE]
TIM LOGAN: So the question was, when I was creating the floors, was I creating the floor plan views on Revit. No, because the floor plan views are controlled by the level itself. So when I added the levels in the earlier correction to adjust the orientation and all that, that's when it created the floor plan to use. If you wanted to have it kick off and create other additional floor plans you could, but it would be a separate node that sort of gets strung along in there.
AUDIENCE: [INAUDIBLE]
TIM LOGAN: Yeah, if you wanted to. Yeah, you can create ceiling plans. The Revit API does not support creating ceilings, though. It irritates me to no end. It's been like that for years. It's the same thing as a floor or a roof, but for some reason you can't create a ceiling programmatically. Unless they changed it in 2019, but I don't think they did. So it's a weird limitation. You can create the view, I'm pretty sure, you can't create an actual ceiling. That has to be done manually. Yeah.
AUDIENCE: Kind of showed the two methodologies, one where you more or less open [INAUDIBLE] Sketch-Up [INAUDIBLE] and then kind of struggled to convert it into Revit [INAUDIBLE] And then the other one was more of a conceptual [INAUDIBLE] Are you finding a preference for [INAUDIBLE] one approach versus the other?
TIM LOGAN: Is there a preference for, like, an over-model facade that you have to fix, versus a simpler one that sort of articulated?
AUDIENCE: I'm just asking [INAUDIBLE].
TIM LOGAN: Absolutely. It's one of those things, like, if it's going to be a sort of heavily-articulated something that can benefit from a visual scripting thing, like Dynamo-- or if it's Grasshopper, or if it's whatever in the world-- I think it makes a lot of sense, because it sort of builds the history of the object that changes and sort of affects really well together. It's a lot easier to deal with that, especially if you have the base condition, that you can sort of build up if you have to build it up in another application.
If you're starting with fully articulated mullions and bolts and everything, which sometimes happens-- oftentimes happens-- it's really difficult to start filtering all that stuff out. You spend a lot of time getting rid of the noise to distill down to what you can actually use. So if you can start at a better place, it's way easier. But that's not always the task that I have. Anything else? All right. Thanks everyone. Cheers.
REETI GUPTA: Thank you very much!