Modding Blender for Interior Design - Andrew Peel

Modding Blender for Interior Design – Andrew Peel



like exporting and stuff like that can you move okay now we have to collect this yes there is some jóvenes for HD yeah I wonder if there's a way to change the resolution where are you from from yes supporting us yeah us what USA feel here I love it yes first time in Europe for the butter Congress yeah it's definitely a copy Oh what's there was psycho suicide you are I run the west coast so Morgan where school Oregon Oh my god what is it I don't know okay so there will be no questions at all at the end and you have to feed yourself in 20 minutes or 20 minutes yes looking at the schedule you know okay we won't try to rush through it we had like 25 or so before remember this one is working this 1,000 three six six this is the standard yeah it's what see if we can go it depends on the predictor yeah the doofus okay but this is the optimal solution Full HD for age days of tomorrow for project or value it doesn't matter let's just see what happens no it's good it's pictures no pictures probably oh yeah it seems great so you can start okay so now we're starting hello okay let's just make sure this is working here all right hello everyone my name is Andrew Peele and this is my good friend and co-worker Ryan Montes and the title of the talk that we're gonna be presenting is titled modding blender for interior design and the main concept that we're gonna be focusing on is how you can create specialized applications with blender and the way that we're gonna be explaining this is by walking you through the project that we've been working on which is called fluid designer so just to get an idea who knows about this project who doesn't know that's probably a better question asker okay cool well just to get you guys up to speed fluid designer is an application that's obviously built on top of blender and the main focus is to give an intuitive and efficient way to design interior spaces and the main keywords there are intuitive and efficient so we're basically trying to make blender quick and easy to use and since we are focusing on the specific functionality of creating interior spaces it allowed us to design features around the workflow of designing interiors and so we had to build features like drag-and-drop so just to give users a quick way of appending data into the scenes we had to simplify the user interface like by starting up or by changing the default static file and then including new interfaces like the right-click properties we had to develop some new data structures to give users a streamlined way to create parametric assets and we also had to automate several time-consuming and complex procedures so I'm gonna be talking about how we did the development of those features and then Ryan's gonna do a live demonstration of how those features work but before we get into that let's talk about just a quick overview of how this project got started so fluid designer was funded by a company called microphone and microphone is a software company that I've been working for since 2004 and we developed design and manufacturing software for the woodworking industry and we primarily work with cabinet makers and so the idea with food designer was to develop a workflow to allow them to quickly design their interior spaces for kitchens bathrooms in those types of spaces and then allow them to directly pull that information into our manufacturing tools and so if we were to take a look at a timeline of this project Ryan and I started development on August 2012 and at this point we had a good understanding of how blender worked but we were still trying to figure out basically what sort of modifications we can make with the blender Python API what sort of changes we can make just modifying the source code directly and so we just worked on our own times basically nice and weekend's trying to develop the project and after several months of working we decided to show the project to microphone and on February 2013 we presented the project to them and they were really excited about it they liked the progress that we were making and so right then they put us on full-time development of the application and so this was exciting for us because now we get to come to work every day and build new features for blender so that was awesome but we had a lot of work ahead of us and so we developed the features for about a year before we even showed it to anybody and when we started development on this we kind of thought we were building a specialized application for microfilms users for microphone users and as we continued the development we were developing things like library management and parametric assets and things like that and we thought that these features could probably be useful for the blender community as well and so on February 2014 we showed our progress to the blender community and we got a very positive response and it was all good things so that got us all pumped up which was good because a few months after that we were gonna be demonstrating this functionality at the iwf show in Atlanta on August 2014 and so this was the this is a woodworking convention that Mike Relm attends and this is where our target user group was and so we got to demonstrate the features live and everyone was really excited about it we got a very positive response from them as well and the tradeshow organisers even put us on the front cover of the magazine that they hand out every day which was kind of cool because we were able to demonstrate the you know ability for users to quickly design their kitchens and then not only that they can also view their kitchens in the oculus rift and so they can not only give them or our users can not only give their clients renderings but also a virtual walkthrough of the kitchen of their design so that was quite cool to demonstrate so that was all good things and then here we are today just at the blender conference presenting our project do you nice people so that's kind of a overview of what we've been doing so let's go and talk about the development so we obviously know that blender is an open source application which allows developers to modify and extend the functionality which is a great but when developers do this it's typically known as creating a fork of blender but I don't like to consider fluid designer a fork and we really tried hard not to do this and they the main reason being when you develop a fork a blender blenders constantly being developed by a lot of really talented people and so we wanted to make sure we can utilize all of that feature all those features and functionality and when you create a fork you run the risk of possibly developing code that can't easily be merged in with the default code of blender and so early on we decided that we didn't want to create a fork and we would only modify the source code where we absolutely had to and other than that all the functionality that we would develop would be developed in Python and so all the functionality I'm gonna be showing you today is all functionality that we've developed using the Python API with the exception of a few things and I'll point those out as we go through them so first library management that was a big feature that we had to include and blender or two implements the ability to link and append data within the scene which is great and we use that functionality but there was no way of really managing those assets on your hard drive it's up to the user to determine where they need to be located and all that stuff which is great but for our users they needed to have that all set up for them so with the default installation of fluid designer we automatically include the library management system in order to display that information we use the browser space and this worked out quite well because with the file browser space we have the panel and left which we included some tabs to allow the user to switch between the different library types which is awesome and then up at the top we have a header which is just some pulldown menus which which allows the user to change the categories within that library and not only that the file browser also implements the ability to display the images as thumbnails so it just gives the user a good visual representation of all those files so that's how we so we use the file browser space for those reasons but not only that we also use the file browser space because it implements the ability for drag-and-drop and blender implements all this functionality by default which is awesome and a lot of people I don't think know about this in fact if you open up just the default version of blender here I'm just gonna go ahead and split my space and set it up kind of the way that we have the default user interface for fluid just kind of organize some information and set it to display the thumbnails and then also filter out the information to only display the images this is kind of is what we do behind the scenes within blender but if you take just the default blender scene and drag a image onto the default cube you get a texture on there which is pretty cool but it's not a Cycles material so it's a little bit limited but at least demonstrates a functionality that that drag-and-drop is already there so we didn't really have to do any of the heavy lifting you can also see that in the 3d viewport it sets that image as the background image so it's awesome that's really cool functionality and there's even different functionality within the different spaces within blender and so here in the node editor you can see you can just drag images and it automatically adds in that image node for you so that's where the cool functionality whoever did it awesome so the only problem that we had with this functionality was that all of the operators and everything that was being called were defined in the compiled C code and we really wanted this functionality within the Python API and so all we did is basically that event that fires when you drop the image on to the viewport we just call an operator that's defined in Python which is great because that allows us to define different functionality for each of the library types and so here we have all the different library texts defined and depending on what type of image or what type of library you're in different drag-and-drop functionality will be used and so here if we're gonna be dragging objects into the scene you can see as you drag that image we automatically append that information in the invoke function and then we use the raycast system to allow the user to move their mouse and then we just determine where that object needs to be placed in the 3d environment so it works for pretty much everything and it's quite nice very intuitive for users and it works well apart from that the materials are the same thing so instead of just pending that image texture we add the cycles material to the scene and then as the user selects the objects we automatically add that material to that object and for materials for objects with multiple material slots we bring up this interface here that allows the user to select the different you know our guest whatever material slot they want to apply that image to so it works out quite well for appending materials as well for the world environment and that was a pretty simple implementation we just appended that world environment and then we add that environment as the active world for that scene that you're working on so it's pretty simple functionality and that's how we implement it for most of the default blender types but we also include products inserts and parts and I'll talk about these more a little bit here but just to see how the functionality works within fluid designer once we do that we append all the information that we need and then as you hover your cursor over the different walls we can snap to that or we can snap to the floor but then once you left-click then we just append that information and send it once you hover over a another product then we can use the right-click Mouse to kind of determine where that's gonna be placed and then you can see how that works out well apart from just selecting somewhere if you right-click within the environment we get this placement dialog option which allows you to place on the left right or we can fill the gap that you're working on we can add multiple quantities and so there's a lot of functionality that we can do for the user just to kind of help them place those objects within the scene automatically for parts parts are just basically things that make up products so here for the door panels we give the user a representation of where that's going to be added to the product and so as they select these items that allows them to switch out the different door panels and things like that for the products and so it just gives them a a little bit more flexibility when they're designing their rooms if you take a look at a different product type here we have some doors and windows and so again we do the same thing we just match the walls rotation and then when you select we just append that information but for these we're doing a little bit more we're also adding in the boolean operations for the wall so we automatically cut the hole and things like that just saving the user time so they don't have to automatically do that so let's talk more about these groups so we have the products inserts and parts and these are just standard groups that we have inside blender and so we know that blender implements groups and groups are just collections of objects so you have meshes empties curves lights and you can create groups from these and that's all great and from what I know groups are pretty much just used for particle systems and linking data between scenes so particle systems you can instance those objects in that group and that all works well but for fluid designer we wanted to implement specific data structures that were used in order to define what group you're creating and so just to give you an idea of some of the data structures that we have here all of the products are built on the same structure so it all starts from the base point and the base point is just a mesh object and this mesh object is meant to be the parent of all the other objects and by default we just have it as a single vertex but obviously it can be modeled into whatever you want and this contains all the other objects now apart from that the other objects that are needed are three empties to control the objects x y&z dimension so we use these empties their parent to the base point as you would imagine and that just gives the user basically the bounds of the group that they're going to be creating and so as you move the x y and z dimension so as you move those you can see that it's gonna update the representation of the group that you're creating just giving the user a little bit more understanding of the space that they have to work when they're building those objects and you can obviously add as many objects as you want to those to build the types of information that you need now with these groups we can do some pretty cool things and this is pretty much how we implemented the right-click property so no matter what object you have selected in this group if you right-click that is going to call an operator and we can display this information so operators inside blender usually operate on the data and your scene but in this case we're really just using operators to display information and so in the invoke function we check to see what is selected and we look for that structure we look for the base point and those XY and Z empties in order to determine if it's a group or not and if it is then we say ok great we found a group let's go ahead and display that information to the user and you can see that we're splaying the size of the group that you're creating based on those empties and then the location and the rotation based on the base point and so it makes it quite easy for users to modify those groups in just one single interface now apart from that if you're looking at one of our default just or one of our groups that we've created so this is just a one door base cabinet that we use quite a bit if you were to right-click on this object you would get this interface which is pretty similar we have that same information but we also have some operators below that which allow you to allow the user to see the custom properties that are assigned to that group and these are very similar to the custom properties within blender but within fluid designer we call these prop and pretty much the same thing but we have a little bit more functionality added to them so we can organize them into groups and so here for this one dough base we have carcass options we have door options and shelf options and then if you were to select let's say the door options you would see this interface here so it allow you to display or view the options about that specific category and apart from just that we also have different control types that are implemented so we have you know combo boxes checkboxes value sliders and things like that that just help the user be able to work with the products and things that they're working on so let's talk really quick about why products inserts in parts so they all share the same structure with that base point in those three empties so why do we need to have those three different group types and the main reason being that we there's a specific way that these groups can be nested together and the idea being that you create simple part groups and then you can bind those part groups into inserts and then you can use those inserts and parts to define products another reason why we use this structure is because it matches a similar structure that microbiome uses for its data and one of the key things that this project needed to be able to do was be able to marry up with microphones manufacturing technology and so when we're trying to pull all the information from the design application being blender or fluid designer we can have a similar structure that we're using when we're trying to get the manufacturing information and apart from that we also have library maintenance so rather than developing every product as just a single object or a group or whatever we develop the components that are needed for that group so taking the cabinet library as an example they're all made out of the same type of component so we have a cabinet carcass we have doors we have shelves things like that and we just build those components and then we combine them together into products and then we have simple ways of allowing the user to modify let's say what door style they want to use and then that just changes that one single part and then that allows the user to update their entire library based on that change and so we have some tools that just allow the users to maintain the library rather than building single products one-off so just to give you an idea so this the furniture product that Ryan made and this just all we're doing is switching out different parts for this group and then changing the size of what it is and it just allows for a lot of different flexibility so it's kind of cool and actually pretty easy to develop this sort of stuff so last thing I want to talk about is automating blenders functionality I've been kind of talking about this the whole time really but just to give you another example we use the same thing when we're using the draw wall operator so obviously with interior designs you're gonna need to draw some walls and you might think that okay well drawing a wall is pretty simple it's just creating a simple mesh cube but it's actually little bit more complicated than that in fact when you create a wall you will need to run all of these steps because we use the same structure for walls that we do for all of the other groups so it has a base point it's got a X dimension object Y dimension object and things like that and by creating walls this way it allows us to use some pretty cool things so when the user is drawing multiple walls we can automatically append those walls together and we use a constraint system in order or the blender constraint system in order to do this so as you draw a wall we automatically check to see if a previous wall is selected and if it is then we add a constraint to the base point of that object and then constrain it to the X dimension of the previous wall so it's very simple so if you change one wall then not a back and we will just change all the other walls so it just makes for a little bit more intuitive we can also automate the process of drawing floors which is simple but you know the same sort of functionality to where we just calculate the bounds in that room and then we draw a floor so nothing too crazy but just helps the user out and makes it easy from so anyway that's really all I wanted to talk about with you know the development work now I really want to show you the features and Ryan's gonna be doing the demonstration and we're gonna be showing something quite a bit different I mean obviously this was all kind of revolving around cabinets and interiors and architecture and things like that but we wanted to do something that we thought would be a little bit funner and so we're gonna be working on this science fiction scene here and so Ryan developed just a library specific for what we needed so we'll go ahead and let Ryan take over and show us something else all right cool so what we're gonna do here is I'm just gonna pretty much we can shuck this thing that you see here so we're gonna do is just go ahead and open up the application all right so let's go ahead and open up the application here and what I've got here is just a so something we got to do to make a tour extends this monitor so just trying to try sect opinion all right I knew something was gonna happen all right cool well let's pick up where we left off now go ahead and open up the application what we have here is just a blank scene here is a light and a camera that's already set up for me and so we're gonna do is gonna go ahead and start drawing some walls in here so as you can see we've got a nice visual preview of what's gonna be happening here with our wireframe we'll all right then that's nice and because I select these presets right here do you left right straightest I'm somebody you left here I draw another wall go to the right you know last wall we're going to use can be a little bit longer yeah you can go ahead and change the dimensions of one of these walls and using the constraint system we're gonna be able to update the rest of these walls with it so I'm just gonna go ahead and change the X dimension at this wall we'll do something around 10 now it looks good next thing we need in here is a 4 so be here my product library I have a full tile I'm gonna drag that in I'm gonna pop over this wall and then go ahead and place this on the left of this wall and then using the prompt system as you saw before using the prompt system for the cabinets he changed the amount of shelves or whether the door swings out from the left or the right and use the same thing here but I'm gonna change the town of this floor so we can have a cover the entire space I've ever seen so that looks nice another thing you can do is uh you know resize this if you wanted this to be a different size but I'm just gonna go ahead and leave it as it is now we've got a good starting point yeah so I'm gonna go ahead and start putting some stuff on all these walls it's just that this first one right over here first time I drag a column on him I'm gonna place that I'm gonna do something a lot in this demonstration it's called bumping so use the left and right arrows to bump to the left or bump to the right and are the cool thing about using our product peeps that we have is that they kind of know their own dimensions and the location on this wall so if I bump this wall here you can see that it goes right up against that next cone instead of going all the way to the end of the wall so it's a really useful thing to have and another thing you can do here is we can hover over something that we want to put this next wall next to you and I can select what I want to do in a locked right center I'm going to do the left here then we call not what was looking pretty good to move on to this next one here as you can see from the camera we don't really see this wall that much so all I'm gonna really get into you is put a column here and bump it down and then I don't really want to see this ball I want it to get in the way so I'm gonna open up my properties panel on the right here we can go to our viewport options I'm gonna select this to be wire so now we can see that this is uh this wall is not in the way since we're not really gonna be using it that much we're go ahead and move on to this next wall we have right here some I dragged a door onto this and you can right click options where there's a place that left right or Center I'm gonna place this on the center of the spots gonna make it nice and easy for me to put it right in the middle of this wall one more thing I want to show you about this door that I'm not really gonna use since this is gonna be a stove entered image but can be useful things that suppose things such as animations or possibly even making a level on a game so I have some have a prompt here that controls the opening of this notice I can open the door as you can see the we have a boolean operation happening where cuts out the hole in the wall so does anything nice and easy for us you can see as we did the furniture piece before you saw an animated what we going did there is we just animated just add a keyframe saw these properties or prompts that are on those products so I'm gonna set this back to 0 because I'm not really going to use that door opening right now we're gonna go ahead and move on see this last summer drag a column in bumper to the light going to right click and then go to the left we're gonna sit we're gonna say 2 for the quantity by right clicking by right clicking on the left myself the quantity of 3 you can see how these que job just kind of show us a visual representation of what we're gonna be seeing the longest at the end of this wall so what do you one more calm someplace on the left celebrity okay let's take a look at this from our camera view it looks like I'm getting pretty close to almost having this scene finish the one thing with this scene is that every wall looks the same and so we kind of want to break that up by putting in different different pieces to these parts as you saw earlier we kind of Andrew demonstrated using that on cabinet doors but as far as with placing in with different ones so what I have here is a product that's made of three parts so it's got this top top section here has a mid section that has this bottom section so my parts library here you can see I've created a couple different parts and I have a few different midsections that I couldn't place it so I'm gonna drag in this mid section you can see that's what hovering over each part shows us where it's gonna go so I'm gonna right click here it's gonna replace that then I'm also gonna go no place this wall right here kind of breaks it up makes everything not look the same also have a bottom section it's a little bit different someone put those in the middle here all right cool well apparently winning out I'm here something to show you what this looks like wait not here in the undergrad and it's not quite a complete scene the things that we're missing here is the environment of the space outside I also had a big window that would've been pretty cool to show you guys all right right now I'm just going to go ahead and show you the final rendered image of what this would come out to be and just let you know how much longer it would take or probably only take me another four or five minutes just to complete the scene out so anyway this is the final vetted image of what we see so hopefully this demo has shown that you know fuller designer is more than a one-trick pony and can be used for other subject manner other than kitchens and cabinets and could also be used for animations and if you guys have any questions just come up and talk to me it's like we're out of time but um you know I think that this project can be used for a lot of other things so if you have any questions about how it might be implemented into yours yet we'll be here all the whole time so come up and talk to us we'd love to talk to all you guys okay so I'll next speaker either Donal so I went a little my Revolution


5 thoughts on “Modding Blender for Interior Design – Andrew Peel

  1. That became a better tutorial on how to use than the tutorials. For ME. But how can I get that package, where is it?

Leave a Reply

Your email address will not be published. Required fields are marked *