|
 |
"j13r" <buc### [at] gmx at> wrote:
> Hi all,
>
> I would like to make a image of magnetic field loops (similar to these:
>
https://ichef.bbci.co.uk/news/304/media/images/58947000/jpg/_58947314_162169main_trace_solar_flare_lg-1.jpg
> https://martianchronicles.files.wordpress.com/2010/05/loops.gif
> http://www.space.com/images/i/000/015/747/original/sun-as-art-swirls.jpg
> more information here: https://en.wikipedia.org/wiki/Coronal_loop
> )
> The only difference is that I want them on a disk.
>
> So far I tried to make the loops with multiple "torus" elements,
> which are light sources at the same time.
> I added more of these in larger sizes to give it a glow/halo effect.
> This is all very similar to the lightsabre object example.
>
> However, already with a few of these (8, see code below), the rendering is
> getting slow. I think the reason is that the ~130 torus objects are overlapping
> each other. This leads to a lot of root tests (742109138, see output below).
> I was wondering if you could suggest a smarter technique?
>
> It would also be good to be more flexible than with the torus.
> I attached my code below.
>
> Cheers,
> Johannes
>
> $ povray +W400 +H400 -V +Olightarc.png +WT4 -d lightarc.pov
> .....
> ----------------------------------------------------------------------------
> Render Statistics
> Image Resolution 400 x 400
> ----------------------------------------------------------------------------
> Pixels: 160000 Samples: 0 Smpls/Pxl: 0.00
> Rays: 301581 Saved: 0 Max Level: 1/5
> ----------------------------------------------------------------------------
> Ray->Shape Intersection Tests Succeeded Percentage
> ----------------------------------------------------------------------------
> Box 401896791 652287 0.16
> Cone/Cylinder 89831 70491 78.47
> CSG Intersection 401896791 120763539 30.05
> Torus 401896791 129236959 32.16
> Torus Bound 401896791 141316940 35.16
> Bounding Box 742109138 532510992 71.76
> ----------------------------------------------------------------------------
> Roots tested: 141316940 eliminated: 16711239
> Media Intervals: 125201 Media Samples: 1627613 (13.00)
> Shadow Ray Tests: 17116032 Succeeded: 16027193
> Shadow Cache Hits: 363
> Transmitted Rays: 141581
> ----------------------------------------------------------------------------
> ----------------------------------------------------------------------------
> Render Time:
> Photon Time: No photons
> Radiosity Time: No radiosity
> Trace Time: 0 hours 3 minutes 56 seconds (236.095 seconds)
> using 4 thread(s) with 781.471 CPU-seconds total
>
>
>
> Code:
>
> // Magnetic field on a disk
> //
> #include "colors.inc"
> #include "rand.inc"
>
> // options of this script
> #declare number_of_subarcs=8;
> #declare number_of_arcs=8;
> #declare disk_radius=4;
>
> camera {
> location <4,1,4>
> look_at <0,0,0>
> }
> background {color Black}
>
> // set up disk
> cylinder {
> <0,0,0>
> <0,-0.04,0>
> disk_radius
> pigment { color White }
> finish { phong 0 diffuse 0.2 ambient 0 }
> }
>
> // a single arc is a thin half-torus
> #declare arc=
> difference {
> torus {
> 5, 0.04 // major and minor radius
> rotate -90*x // make vertical
> }
> box {<-6,-6,-1>, <6,0,1>}
> }
> // this thicker torus is used to make a halo glow around the thing arcs
> #declare thickarc=
> difference {
> torus {
> 5, 0.5
> rotate -90*x
> }
> box {<-6,-6,-1>, <6,0,1>}
> }
>
> #declare r1=seed(5); // defines the shape
> // now comes the combination of objects
> #declare glowarc= union {
> light_source { <0, 5, 0> color rgb <0,0,.5> }
> // bright white arc
> object {arc pigment{Clear} hollow
> interior { media{ emission <1,1,1>*100 } }
> }
> /*object {
> thickarc pigment{Clear} hollow
> interior { media{emission <.01,.01,1>*2 density { spherical scale <5,100,100> }
> } }
> translate <0,0.01,0>
> }*/
> // fainter blue arcs
> #declare i=0;
> #while (i<number_of_subarcs)
> #declare i = i + 1;
> // we jitter them slightly
> #declare myscale = 1/Rand_Normal(1,0.05,r1);
> #declare xrot = Rand_Normal(0, 7, r1);
> #declare yrot = Rand_Normal(0, 3, r1);
> #declare zrot = 0;
> object {
> arc pigment{Clear} hollow
> scale myscale
> rotate <xrot,yrot,zrot>
> interior { media{
> emission <0,0,1>*pow(10,1+1*rand(r1))
> } }
> }
> // make fuzzy, weak halos with thickarc objects
> object {
> thickarc pigment{Clear} hollow
> scale myscale
> rotate <xrot,yrot,zrot>
> interior { media{emission <.01,.01,1>*(0.4/number_of_subarcs)} }
> }
> #end
> }
>
> #declare r2=seed(2); // defines the locations
>
> // now we can create a couple of these
> #declare i=0;
> #while (i<number_of_arcs)
> // find a uniform location on the disk to put it
> #declare myx = (rand(r2)-0.5)*3*2;
> #declare myy = (rand(r2)-0.5)*3*2;
> #declare d = sqrt(pow(myx,2)+pow(myy,2));
> #declare phi = atan2(myy,myx);
> // make sure the radius is not outside the disk
> #if (d < disk_radius-1)
>
> // orient the arc so it tends to point to the disk center
> #declare phi2 = phi + 45*(rand(r2)-0.5)/180*3.14;
> object{ glowarc
> scale 0.05+0.1*rand(r2)
> rotate y*(phi2/3.14*180+90)
> translate <d*sin(phi),0,d*cos(phi)>
> }
> #declare i = i + 1;
> #end
> #end
the slow-down is the light_source in the union. comment it out and there is an
approximately fifty-fold speedup (with my first guess, using whole tori, same as
b.eagle's 'difference' suspicion, which was a ~25% speed-up.)
Post a reply to this message
|
 |