Skip to content

procedural city

Kiryha edited this page Oct 23, 2024 · 19 revisions

Intro

This project aims to design and implement procedural workflow for city modeling.

Workflow

Building profile.

The Building Profile is a starting point for building creation that defines building shape. If we extrude the Building Profile on a certain distance (building height) we get the building "Mass Model".

Building Profile example:

Facades

We split the building mass model into facades. A facade is a part of a building between two corners.

In Houdini, we split Building Profile into primitives (see Building Profile example image above that has 4 primitives: 0, 1, 2, 3) and each primitive will be a facade base. Extruding the facade base will give us a facade.

Shape Grammar

We split the facade into levels. Each level design is defined by shape grammar stored in a "BDF" JSON file. Level can contain one or more floors.

BDF stands for Building Definition File and contains building style and assembly data:

{
"levels": 
    "0": {
        "Level_index": 0,
        "Level_height": 3.2,
        "Level_rule": {
            "F0": ["C|(A)|C", "C|(B)|(C-D)*|(B)|C"],
            "S0": ["C|(W)|C", "(A)"]
            }
    },
"modules": {
    "A": {
        "width": 2.4
    }
  }
}

Solaris and USD

Import USD to Solaris

  • From "Geo" context: Scene Import (All) or Sop Import nodes.
  • From USD File: Sublayer or Asset Reference nodes

Unpack USD

  • The SOP Modify node, Unpack USD Primitives to Polygons check box
  • The SOP Modify node, go inside, and create the Unpack USD node.

Export USD from Solaris

The USD ROP node, set Save Style to Flatten Stage

Material assignment

Create material: Quick Surace Material and then Assign Material or Material Linker. Add node Name to geometry nodes to get different objects in USD

USD/Solaris geometry prep: define material assignment by Houdini groups (create a group for each material on geometry), then if you add a "Name" node after groups, USD file will contain mesh divided by groups and in Solaris, you will be able to assign materials by those groups.

Remove internal edges of a polygon: Divide SOP > Remove Shared Edges

Clone this wiki locally