So this evening I had a thought of how it could be done and I wrote an example:
The idea: to write geometry’s index and vertices into data textures and then, in vertex shader of
PointsMaterial, perform raycasting from each vertex of
THREE.Points() against faces of an arbitrary geometry in textures, using the same principle, like in this example: How fill a loaded STL mesh ( NOT SIMPLE SHAPES LIKE CUBE ETC) with random particles and animate with this geometry bound in three.js, but in shaders, so I found an answer on SO:
and use it with slight modifications.
PS I perfectly understand that this approach is imperfect, and I bet that there are many other ways to achieve the same visual result
PPS Thank @marquizzo for such cool and interesting questions