Robo Ramen utilizes a procedural system to generate and assemble all of the parts that make up each robot. We're excited to share a look behind the scenes at how it all works:

Our robots are created in 3D software called Houdini. Looking inside, this is our master trait control node -- we've created an interface for this that allows us to quickly:

  • Add traits to our system and name them.
  • Assign trait rarity values
  • Export metadata.
  • Preview specific traits for internal use, using override buttons.

Trait Creation

Each individual trait is modeled by hand in 3D, then processed procedurally to generate useful data for the assembly of the robot.

Each of the nodes above represents an individual trait, and contains its 3D geometry. The “OUTPUT” nodes control which geometry gets loaded in for display, based on which traits are selected.

Each trait has a unique ID for internal purposes, which gets renamed for display in the metadata.

trait Selection

Our trait selection tool inside Houdini will pick random traits based on rarity:

  • We first define rarity by entering the number of each trait we want represented into our control node interface.
  • A list of 10k traits for each type gets generated and randomized using code.
  • We then use the current frame number from Houdini’s animation timeline to correspond with the NFT number.
  • This allows us to step through frame by frame to pull in traits from the list to build each robot individually.

Trait Assembly

Once we establish which traits are selected, we are ready to assemble! Our dynamic anchor point system works by having each trait extract data from neighboring parts to determine where to place itself.

  • Aesthetically we wanted the hips to sit as wide as possible without intersecting the arms. So we made the hips and legs automatically reposition themselves based on tolerance distance data taken from the arm models.
  • Shoulders will always sit on the top edge of the bowl, so we use the currently selected bowl's radius and height data as X and Y coordinates to determine their placement.
  • Toppings and broth will resize to fit any given bowl shape. And because this is all dynamic, any changes made to one trait will automatically update all others to fit accordingly.

finishing touches

Final adjustments to the geometry are made by procedurally subtracting the bowl from the base and shoulder joint geometry. This ensures perfectly interlocking pieces without any intersecting polygons.

For rendering the final bot, we created a network of different materials with Redshift and Houdini, which are then assigned procedurally to different sections of the geometry.

  • Colors are applied via color palette traits. Each palette consists of 5 colors that are assigned to various parts of the bowl and body.
  • Materials will then pick up the assigned colors and incorporate them within the material itself.

In order to add further variation to the entire collection, we added randomness within certain aspects of each trait.

  • Wood grains, wear and tear, and other patterns within materials are each given a different randomization seed.
  • The main colors of a palette will be randomly swapped with each other to apply to different areas of the body.
  • Chopsticks come in different variants and are stowed in different configurations.
  • Broth comes in different flavors/colors which are randomly selected. Steam coming off the toppings is varied and will change for each robot, etc.

Once everything is in place, lights are arranged in the scene and we can finally render the finished Robo Ramen!

- Ojee