_______________________________________________________________________
Introduction & Motivation
As an innovative iterative design process that integrates algorithms to optimize the outcome, generative design has been gaining attention over the past couple of years in the designer field, especially when it comes to mechanical design and engineering. With the majority of generative design software in the area of the conventional design environment, the need of implementing generative design processes in the immersive environment, especially augmented reality (AR), is rapidly increasing.

Our project is to develop the user interface system for generative design software in AR to help designers interact with the software graphically. With this user interface, designers can view the outcome of their design regarding the constraints and requirements in a more visualizing and feed-forwarding manner.

I took a charge of developing the 3D space customization system and graphic component.
System Description
Our design of a 3D user interface system for generative design software in the AR environment is based on a costumed 3D space with a virtual horizontal plane as the “ground”. Users can select from the list of objects and planes that they want to put into the space and add constraints to them by interacting with the UI. With the analysis of the graphical position of objects and planes in the space, real-time design constraints will be generated automatically and they can be exported into a csv file for future integration with other softwares or backend functions. With our new UI, the designers can avoid the trouble of changing to another scene for adding and deleting constraints as well as viewing the current constraints in a graphical way instead of getting feedback after the final generation of solutions based on the whole constraint list.
The Initial User Interface
Implementation
We use Unity as the development platform with the integration of APIs from an official extended package named Input System. For this prototype, our system uses a mouse click to interact with the user interface. To interpret the constraint from the position of objects correctly, we implemented a Constraint class, which contains all the constraint types we provided for now (see Algorithm 1). We also have a global object dictionary and a global plane dictionary. In the object dictionary, each object corresponds to an instance of Constraint, which stores the relationship between this object and other objects. In this way, we can easily obtain the current constraints on one specific object. The plane dictionary contains a list of objects on each plane. To generate the overall constraint list, we need to iterate through two dictionaries. There are duplicate constraints stored in the object dictionary, so it’s also important to avoid duplicate constraints while generating. Algorithm 1 shows the pseudo-code of the interactive process of our system.​​​​​​​
__________________________________________________________________

ALGORITHM 1: Interactive Process

Class Constraint {
    attach_to_vertical_plane: bool
    attach_to_horizontal_plane: bool
    same_vertical_plane_with: list of objects
    same_horizontal_plane_with: list of objects
    align_x_with: list of objects
    align_y_with: list of objects
    align_z_with: list of objects }
object_dictionary = { object: Constraint }
plane_dictionary = { plane: list of objects }

while true:
    if add a plane:
        add key to plane_dictionary
    if add an object:
        add key to object_dictionary
        add constraint to object_dictionary and plane_dictionary
    if remove an object:
        remove this object’s constraints from object_dictionary and plane_dictionary
        remove key from object_dictionary
    if move an object:
        remove object
        add object again
    if generate constraint:
        iterate through object_dictionary and plane_dictionary
        generate constraints without duplication
end
__________________________________________________________________
Demo Video
Back to Top