Optimizing Facet Arrangement for a Smoother Optical Surface

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)

Hi @crz_06,

You explain what you want in terms of the target directions, but you don’t explicitly state the incident direction(s). Could you expand on this aspect?


Hi @jeremy5 , I am using a pointsource as the start for the incident rays. They are directed towards the projected centerpoints the facets on the CPlane. So from the given image, I take the pixel as as points, and using a ‘inverse’ Snell’s formulate I calculate the orientation of each facet. Below an example of a lens using a flashlight as light source. This all works fine, but now I want to make the lens less ‘jagged’ and more ‘smooth’. Hopefully this will reduce the spill of light as a result of internal reflections (the blurry light between the icons). In addition this might also opens alternative (more cheaper) ways of fabricating the optics.

Let me borrow these image made by @chris.pm from this topic Modify surface with galapagos so normals hit 1 specific point

This is already a better example of what I sort of try to achieve as at least in 1 direction the facets are aligned.

My attached example file does not include all this, as it currently requires an external plugins to work (was faster to execute than using expression component or python), and the file is still work-in-progress (a big freaking spagetti monster) so not suitable to share :wink:

There are know methods (way more professional), but I don’t understand the mathematics of these papers to implement them: link 1 or this one link 2 which is patented

1 Like