Use photo-realistic ray tracing kernels for modelling of solar thermal power plants
I work in the field of solar thermal power plants and have a question concerning photo-realistic ray tracing.
So far we use simple Monte Carlo raytracers to calculate the efficiency of solar thermal power plants. Herefore sun rays are reflected at mirrors and focussed on absorbing structures (cylinders filled with oil, water,...)
Since the raytracing tools we using to date are really simple, I thought of using a sophisticated raytracing kernel.
The approach so far is - the sun is modelled as a disc, its rays are not parallel, rays from the outer rim have other angles, the frequency of the rays is set concerning the shape of the sun - each sun ray contributes a specific amount of energy - the reflective elments absorb ~ 5% of the rays - the reflective element's surfaces contributes an error to the angle of the reflected ray - the sun rays reaching one specific area, the absorbing area, are multiplied by their energy and the in combination with their intersection of that area a energy flux figure is calculated
Is such a "ray-centered" procedure possible using an unmodified version of Embree or other similar raytracing kernels? Does one have access to the ray properties and its intersections with a selected surfaces?
Yes the Embree ray tracing kernels will exactly fit your needs. You probably implemented your own procedure to find the closest intersection of a ray with the scene geometry. This same functionality is provided by the ray tracing core of Embree (rtcore folder). And yes you have access to the ray data and the intersection result with the surfaces. If your applications spends much time in tracing rays then you should see some nice speedup when using Embree.
well that sounds great. So, I guess I have to prepare a small, working example on this for my company.
I downloaded Embree's source code and will try to compile it tomorrow. Since our raytracing software so far is more or less just click'n'play, could you tell my how to prepare a small example? I hope some of the following questions do not sound too stupid :)
For my purpose, do I need to use the Embree.exe as described in the docs or is Embree just for rendering images and I have to use some other component like the raytracing kernel separately?
Well, I guess it is not too difficult to set up the geometry using the xml-files. Is the xml-format specific for Embree or is it a common definition for a scene that could also be used by other raytracing software?
How would the interaction with the rays work? Can I define a surface in the xml-file and export all rays hitting that surface and the coordiantes of the intersection? Is there an example somewhere?
And how would one define the sun as lightsource? So far we use an intensity distribution by setting an angle (usually mrad, milli-radians) from the sun's center, to define where the rays come from. Like
0 mrad: 1 (center) 1 mrad: 0.8 2 mrad: 0.7 3 mrad: 0.2 4 mrad: 0.0002 (rim of the sun= and no intensity
And is it possible to add a Gaussian error to the reflection on a surface?
Well, I would be glad if you could help me with these questions. Is there other literature avaliable besides the pdf included in the download of the source?
The renderer of Embree is only for rendering images. One could principally try to misuse it to also do your simulation, but I guess the best for you is to write a small simulation program yourself that is optimized to your special case.
Best compile the source code of the rtcore into your project. The documentation of Embree describes its dependencies to other files, which will help you to isolate it.
The geometry you provide directly to the ray tracing core, see rtcore.h file. You can then call the intersect function with a ray to find an intersection with your scene geometry.
Everything else, such as sampling and correct handling of the propagated energy, you have to implement yourself.
I had a look into the code and especially section 4.3 "Extracting the Ray Tracing Kernels" of the manual but there are some things I could not figure out. I hope that you can help me with them.
What exactly is the component rtcore capable of? Could I pass an xml-file to it or just triangles? Is a preprocessing of the xml-files necessary before they can be passed to it?
So far my idea would be to build an exe-file of rtcore and control this exe using MatLab to process xml-geometry files that were created by MatLab and write to results to a txt-file. Would rtcore alone be able to do this?