I was wondering, if CityEngine has capabilities to
simulate buildings with interior. What I have in mind is
procedural generation of interior.
Or maybe if anyone has any idea how to do that. I woud
be very thankful for any suggestion.
Yes, this is possible. You can write procedural rules for many interior items such as walls and furniture. You can also choose to insert assets for complex furniture.
For example, you could partition space using the split operation to get walls between rooms. The offset, setback, shapeL, shapeU, and shapeO operations could also be helpful in dividing floors into rooms. Alternatively, the walls could be set up on a graph network, and a wall rule can be applied to the street shapes.
Simple furniture such as tables and bookshelves can be made entirely procedurally, or at the other extreme, you can write rules that allow the user to choose from a set of complex assets. Furniture placement can also either be coded into the rules, or you can create individual initial shapes for each table and chair.
By using procedural rules to generate the interior, there is the benefit of being able to change the model interactively. The user can pull on a handle to change the bookshelf dimensions, for example.
Hello, thanks for helpful guidance.
I was reading your reply and I am wondering the way to create interactive graph networks within procedurally generated shapes such as walls. Is it possible to create a graph network for each procedurally generated shape?
Thanks in advance
No, you cannot create a graph network from within a rule that is applied to a shape.
Graph networks can be drawn manually, imported from data, or grown procedurally (Graph -> Grow Streets). Then, from the edges and nodes, shapes are automatically created. These are dynamic shapes because if you move the network (edges or nodes), then the shapes move along with it.
For example, street shapes exist along the edges of the graph network. You cannot apply rules to the graph network directly, but you can apply rules to the street shapes. So, you could apply a wall rule, which could be as simple as Street --> extrude(wall_height), on the street shapes. Since there are a few different types of street shapes, you'll probably want to put your rule on shapes with start names Street, Joint, Crossing, Junction. You'll probably also want to set the sidewalk widths to 0 so that Sidewalk shapes are not generated.
Oh, I see. Thanks for the help.
That's an interesting approach, though street network in a floor would not be connected to the floor shape.
I think it's a CGA++ issue to link two different shapes together.
Yes, the street network would not be connected to the floor shape (for example, if you create the floor shape starting from a building footprint which has a building rule on it).
However, you could also use the dynamic block shapes of the network as the room footprints instead of having separate floor shapes.
The disadvantage of using the street networks is that they can't be created within a rule, so the building rule cannot create street networks. If you want to have a building rule that creates the appropriate building shape and floors, then I would try to stick with creating the walls with splits and other cga operations instead of using street networks. However, if you just need to make one floor plan, using the street networks to represent walls would be a good option.
Thanks for all answers. Basically, I am not interested in furniture etc. I would like to automatically generate each
building's outer 3D shape and in the interior, simulate each floor as realistic as possible (halls, rooms...).
Is it possible to write floors to shape (footprint of each room (unique id for room), hight of floor and hight
of room. Is anything of that possible?
I am also really not familiar with CityEngine so an example would be great.
Yes, it is possible to report different values for each room. You can do this with reports if you can calculate the values in the code. You can report the room height for example. It is also possible to export the room footprints to GDB, for example, and this automatically adds a unique object attribute called OBJECTID to each exported shape. In the GDB export (File -> Export Models -> Esri FileGDB), there are options to export object attributes and reports on each shape.