TLDR; I am considering using Speckle for generative design purposes.
In particular, I am currently developing a system that builds upon and enhances tools like the DesignExplorer for design space exploration. I am considering whether the Speckle ecosystem would be suitable for storing, retrieving and 3D viewing a large number of design variations.
My plan is to create multiple streams for each generated design and to combine them all under a single project. I realize that this is not what Speckle was intended for but I am motivated that the interoperability provided by Speckle can be great in easing the move from design exploration into design refinement and finishing. It will also create a common infrastructure for design sharing and collaboration within a firm regardless of the process followed.
I am using Grasshopper/Rhino. Currently, a stream is created only when the Sender component is dragged to the canvas. Then a random steam ID is assigned to it. Instead, I want to be able to create new streams programmatically. Either I would provide those IDs or they are created whenever a new design is sent.
In a generative design process, you would create possibly hundreds of variations each of which would have its geometry and user data. So I want to create a different stream for each design variation. I realize this can quickly go out of hand and so it would be an experimental feature (perhaps a fork or a separate branch from the SpeckleRhino repo). Another option is to combine all the generated alternatives into a single stream but I am not in favor of this option.
Finally, the process would be like this:
- Sign in to Speckle in Rhino
- Use a plugin like Colibri to systemically vary input parameters.
- For each generated design variation, assign a new Speckle stream under a unified project.
- On the frontend of a design exploration tool (like DesignExplorer) request all the streams under a project and parse the JSONs to get the data + geometry for each.
What do you think of this idea? Have anyone tried or want something similar? And do you have suggestions on how to best approach it?