Hello,

IHello, I’m working on designing a refractive/reflective optical surface that redirects light rays to a specific target pattern using basic expressions such as Snell’s law. The current design consists of numerous individual facets, each aligned to a designated point (Fig 1). My goal is to rearrange these facets to create a smoother overall configuration (Fig 2 and 3) while maintaining the target pattern and respecting the boundary plane.

I attempted a multicriteria optimization analysis, but the search space was too large with 10,000 facets and reference points, yielding no useful results after a 2-day run. I’m looking for a more efficient algorithmic approach to solve this problem.

I’ve provided a simplified model that clusters target points into three groups and calculates corresponding surfaces by finding the shortest distance in the surface collection and rotating them in 3D space (Fig 4-7). My new approach has started with filtering the frames/surfaces by their orientation, but I’m unsure how to proceed from here.> see gh file

Any suggestions, guidance, or references on how to rearrange these facets to create a smoother optical surface while maintaining the target pattern would be greatly appreciated. I’m open to using plugins or solvers to accomplish this task.

example of facetted optical surface

rearrange individual facets and combining them by orientation. Up to a set maximum height

acets with similar orientations are combined and stacked up to a certain height, whilst also respectecting the target destination pattern as best as possible

example gh file, 3 clusters of points and corresponding facets as seen from top

view from side

view form as zoom in, showing the differently aligned /oriented faces

and possible example how I these facets could be rearranged, to form a more smooth surface. The topology of this smooth surface is arbritray for me, just need to work with the given conditions of facets with a certain orienation and the target points

Please find the .gh file here

Facet_Rearrange.gh (794.6 KB)