This page includes tips and ideas for how to make the most of the Voyager for POVray model.
| How to use the Voyager model |
| Lighting considerations |
This section is included in the extensive comments section at the start of the Voyager Source Code, and is reproduced here so you'll get an idea how to use it before you download the code!
Scaling factors
I am assuming (actually, I'm suggesting) that your planetary fly-by scenes in which you will be using Voyager are set to a scale of 1 POV unit = 1 kilometre. There are many practical reasons for this - first, it makes it much easier to scale real-life distances if you have a simple scale like this. Second, you will probably find that you'll have to use a scale like this because if you use 1 POV unit = 1 metre you will hit what I call the 'translation limit'. This limit is reached when objects are translated too far (usually over a few million units) from the camera - beyond this they seem to just 'disappear', and you can't find them no matter how far you zoom in even if you were looking right at them before. I suspect this limit exists because of inherent limitations to the raytracing process itself. Whatever the reason, planetary scenes where the scale is set at 1 POV unit = 1 metre simply do not appear to work. Thus, I recommend that you use a scale of 1 POV unit = 1 kilometre for all the objects (planets, moons and vehicles) in your fly-by scenes, because you are much more likely to avoid this translation limit then. And besides, Voyager is by default scaled to fit into such scenes so you'd be making your life easier... ;-)
However, there remains a frustrating difficulty here - at the 1 POV unit = 1 kilometre scale there are bounding box problems that may cause parts of Voyager (most obviously the Dish) to disappear when rendered. If you render it with Bounding Boxes turned off, most of the parts re-appear but the rendering time is much longer. This seems to be an inherent limitation within POVray, and the only way around this appears to be to scale Voyager up by a factor of 10. I have not done this within the code though, I'll leave this up to users to apply when they see fit.
Two scale factors have been applied to Voyager within the Source Code (on lines 1394 and 1398). The first - scale 0.622 - scales Voyager down so that 1 POV unit = 1 metre (1:1 scaling). The second - scale 0.001 - scales Voyager down by a further (cumulative) factor of 1000 so that 1 POV unit = 1 kilometre. The dish, which is actually 1.80 metres in diameter, is therefore 1.8 units (metres) in diameter after the 0.622 scaling, and 0.0018 units (kilometres) in diameter after the extra 0.001 scaling.
If you need to use Voyager in scenes where 1 POV Unit = 1 metre (for example, I have rendered such a scene with Voyager on the ground to scale with a 6ft tall human) then simply add scale 1000 to the Voyager object to restore the dish to a diameter of 1.8 units/metres.
Animation and rotation parameters
This model includes full support for Scan Platform rotation around the x/y axes. These can now be set from within the POV scene file in which the Voyager object is being used. Since you'll have to rotate Voyager itself around its dish-axis (which should always point towards the Sun) if you want to make realistic animations, there is a term (ybodyrot) set aside specifically for that task.
To use these parameters, you must #declare them BEFORE the #include="voyager.inc" statement at the start of the scene file. Even if you're not planning to do any rotations (which means the craft will be rendered in the default orientation) you MUST set them to zero, otherwise they'll be undefined in the #include file and you'll get an error message.
To illustrate this, here is some example code showing how to render Voyager 'on the ground'. I used this code with a life-sized 'mannequin' object (not included here) to show how big Voyager was compared to a 6ft tall human. This should give you the right idea anyway... try changing the values if you wish to rotate anything:
//DECLARE ROTATION PARAMETERS FOR VOYAGER/SCAN PLATFORM
#declare ybodyrot = 0 //Voyager body rotation around dish axis
#declare xrot = 0 //scan platform x rotation
#declare yrot = 0 //scan platform y rotation
//-THEN- INCLUDE VOYAGER OBJECT
#include "Voyager.inc"
camera {location <3, 2.5, 20>
direction <0, 0, 1.5>
look_at <3, 2.5, 0>}
light_source {<50, 10, 50> color White}
light_source {<-50, 10, 0> color Grey}
object {Voyager
scale 1000 // scales Voyager to 1 POV unit = 1 metre (Dish = 1.8 units diameter)
rotate <0,ybodyrot,0> // Here's where you use ybodyrot
translate <0,1.2,0>}
Change the following parameters to rotate the appropriate parts of the spacecraft. Clock values should also be used here for animations.
ybodyrot: This rotates the whole spacecraft around the central body/dish/antenna (y) axis. This is done primarily for the particles and fields experiments which require measurements in various orientations (these experiments cannot themselves move independently of the main bus of Voyager), and also to move the scan platform boom round to the side facing a target if the body of Voyager should obstruct the view during the fly-by. Note that the HGA (antenna) dish must always point towards the Earth. ybodyrot is not part of the Voyager Sourcecode - rather, it must be added in a rotate statement with the Voyager object itself in the POV Scene File as shown in the example above.
xrot: This rotates the Scan Platform around an axis defined by the wide horizontal cylinder in the Scan Platform object. This allows the whole platform to track targets behind or in front of the spacecraft (for inflight purposes only, 'behind' is defined as being the Sun/Earthward direction that the dish faces). It is used on line 1368 of the Voyager for POVray source code, but must actually be declared in the POV Scene File that references the source code, before the Voyager object is #included, as shown above. POSITIVE xrot rotates the scanplatform DOWNWARDS when viewed from above (the dish).
yrot: This rotates the whole Scan Platform around the thin cylindrical strut that connects it to the main rectangular Camera Boom (the strut itself defines the rotational axis). This allows the instruments on the platform to track targets as Voyager passes them. It is used on line 1373 of the Voyager for POVray source code, but must actually be declared in the POV Scene File that references the source code, before the Voyager object is #included, as shown above. +y rotation is CLOCKWISE when viewed from above (the dish).
xrot and yrot can and should be used together for perfect realism, but I can imagine that Voyager camera tracking is going to be an extremely tricky business to get absolutely right! One obvious thing to bear in mind is that the Scan Platform is not going to be used when the whole body of the spacecraft is rotating (otherwise you'd get very blurred pictures from the cameras! ;-)). There is also probably a limiting angle for the xrot and yrot parameters, defined by the field of view blocked off by other parts of Voyager (i.e. the body itself in the case of yrot, or the Camera Boom in the case of xrot). Valid values of xrot are probably in the range of +90 to -90 degrees. For now, you'll have to figure out the yrot limits for yourself, but they should be easy to determine. Anyway, the capability for truly realistic movement is there should you require it...
Dish Orientation
On its journey through the Solar System, the white HGA dish of Voyager always pointed towards the Earth - if not, communication between the craft and home would be broken and it would be difficult (though not impossible, there were automatic safeguards onboard such as star trackers) to re-establish contact. That being the case, this should be simulated in POVRay by having the dish always facing the Sun/light source.
In reality however, the Sun and the Earth are not in exactly the same place as seen from Voyager - the Earth can actually be at a significant angular distance from the Sun because of its orbital path around it. For instance, after checking the Solar System Simulator I found that at the time of the Voyager 1 flyby of Jupiter in 1979 the Earth was 15.3 degrees to the right of the Sun as seen from Voyager 1 - by comparison, the angular diameter of the Moon in our sky is about half a degree, so that amounts to the equivalent of thirty times the diameter of the Moon in our sky! This was actually the greatest extent of the Earth-Sun angular separation as seen from either of the Voyagers during their fly-bys. In practice though, I'd imagine it would be easier to orient Voyager so that the dish always faces the Sun, but I figured that I should let you know what happens in reality anyway ;-)
Radiosity and ambient settings
Since the dish always points towards the Sun, this means that Voyager's main body (or 'Bus') is never exposed to sunlight, so a lot of the detail there is going to be in shadow. Also, that there is usually no 'ambient' light in space (go deep out into the countryside as far as possible from the lights of human habitation on a perfectly clear night when the Moon isn't up and you'll see that starlight alone doesn't really illuminate as much as you'd think!). Technically, you should be able to simulate light reflected from nearby planetary bodies if you use the Radiosity setting in POVray; however, I haven't got this to work too well in practice - there's only a very slight difference even when I place a large fully illuminated planet right behind Voyager, and I'm sure that should difference should be more visible - that said, this could be because I haven't experimented enough with the radiosity global_settings. I also find that a 'Radiosity-enabled' scene does weird things to the inside of the HGA Dish... You may be able to represent reflection from nearby bodies using the ambient setting, but I can't think of way to do this particularly accurately - you'll just have to guess!