|
|
|
|
|
|
| |
| |
|
|
|
|
| |
| |
|
|
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
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Perhaps you can consider doing something like:
http://bugman123.com/Physics/index.html
https://nylander.wordpress.com/category/physics/magnetism/
I don't immediately see any POV-Ray code, but perhaps you can decipher the
Mathematica code to get an idea of what he's doing.
Maybe what you're running into with your scene is similar to
http://www.econym.demon.co.uk/holetut/
where there are an astronomical number of ray intersection tests that need to be
done.
See one of Mike's solutions - defining a single object as an isosurface.
http://www.econym.demon.co.uk/holetut/holes2.htm
Perhaps you can use a similar solution by taking advantage of variable
substitution in the isosurface to create "copies" of your torus while having the
isosurface still be a single object:
http://www.econym.demon.co.uk/isotut/substitute.htm
(see near the bottom where he uses the mod() operator.
I hope maybe this helps some.
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"j13r" <buc### [at] gmxat> 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
|
|
| |
| |
|
|
|
|
| |
| |
|
|
On 11/24/18 10:09 PM, j13r 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.
>
...
> 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
>
Hello.
With respect to performance and the current approach you can speed
things up some by not having a light source in each of your glowarc
shapes. At 130 of them I think you might be near the limit for light
sources - but I don't immediately remember that limit. In any case some
method to use fewer lights would help. These are only to light the disk.
You can also speed things up by not doing the differences to create half
torus shapes(1). Instead of:
#declare arc=
difference {
torus {
5, 0.04 // major and minor radius
rotate -90*x // make vertical
}
box {<-6,-6,-1>, <6,0,1>}
}
use:
#declare arc=
torus {
5, 0.04 // major and minor radius
rotate -90*x // make vertical
}
(1) - Your approach 'would' avoid a potential shadow calculation issue
with POV-Ray where surfaces intersect, but you have clear textures so it
shouldn't matter to use the torus shapes straight up.
With respect to better approaches, I cannot think of any at the moment
which are easier.
Rather than many lights using radiosity with your emitting media will at
some point be the better way to go. Further, using df3 files to create
complex media would give you the flexibility in density control - even
color with some set ups - but you have to figure you how to create the
df3 files. There have been several threads related to df3's used in such
a fashion in the last year or two.
As another idea. Given you have started with torus shapes there was a
macro posted by Bruno Cabasson back in March of 2006 which can create a
blob based torus shape. If you are running a pre-release of v3.8, blobs
now support a potential pattern which can be used to create glowing
media. I posted an image to povray.binaries.images (p.b.i) under the
subject "Example of potential pattern use with emitting media" in
October of 2016 which makes use of this newer technique. Combining the
macro and potential pattern might be a way to handle the media as one
large blob contained and blob-potential for the media density.
That rambling done, the bad news is your scene is a pretty good example
showing current POV-Ray solver/solver set up issues with secondary rays.
In all approaches where the media density is not at 0.0 near surface
tangents(2) we today too often get media artifacts due the media
intervals being wrongly determined and mostly that gets to how the
solvers are working. I've been working most of this year with the
solvers and related code trying to clean up some of these long standing
issues. I'll post comparison of the existing master branch to my
'better' working branch to p.b.i. and add your scene as one of my test
scenes. Today, you can 'sometimes' clean up many of the artifacts by
scaling the entire scene up (or down) by 100 or 1000x.
(2) - The full story is much more complicated.
Bill P.
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Le 18-11-24 à 22:09, j13r a écrit :
> 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
>
You use a lot of lights and it does cause a big slowdown.
Proposition :
1) Remove all those lights.
2) Use only full torus, not segments.
3) Enable radiosity.
4) In the radiosity block, add media on to allow your emissive media to
participate.
Suggested radiosity block :
global_settings{
radiosity{
pretrace_end 0.01
count 15000 33333
nearest_count 4 20
error_bound 0.7
low_error_factor 0.3
media on
}
}
Add to your scene :
#default radiosity{importance 0.01}
// get an average of 150 samples for most of the elements of the scene
Add to your emissive torus :
importance 1
// Use the full amount of samples for the very bright emissive objects
Finally, adjust the emission value to get reasonable illumination.
#declare glowarc= object{
//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 } }// reduce emission as needed
importance 1
}
#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))
} }
importance 0.7
// less bright, but narrower
}
// 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)} }
importance 0.5
// not as bright, can do away with slightly less samples
}
#end
}
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Thank you all for your suggestions. I hope to implement them soon.
(And sorry for forgetting to set a subject)
Cheers!
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Am 25.11.2018 um 17:00 schrieb William F Pokorny:
> With respect to performance and the current approach you can speed
> things up some by not having a light source in each of your glowarc
> shapes. At 130 of them I think you might be near the limit for light
> sources - but I don't immediately remember that limit. In any case some
> method to use fewer lights would help. These are only to light the disk.
I don't think we have any such limit. Not in current 3.8.0-alpha
versions at any rate.
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
|
|