8. The Anatomy of Ray


8.1 Physical Parameters

8.2 Component Parameters

8.3 Pointer Parameters

8.4 Graphical Parameters

8.5 Flag Parameters


Chapter 8 serves as a reference about the various parameters of LensLab's Ray object. Ray objects hold the results of the ray-tracing operation. Each Ray object contains rules holding information about a particular surface intersection point. There are five categories of parameters stored in Ray: physical parameters, component parameters, pointer parameters, graphical parameters, and flag parameters. Here is a complete listing of the Ray parameters.

BirthPoint                           RayLabel
ComponentIncrement                   RayLength
ComponentNumber                      RayLineRGB
ConfinedNumber                       RayLineStyle
ConfinedPosition                     RayLineThickness
DiffractionMismatch                  RayPointRGB
DiffractionOrderNumber               RayPointSize
FreezeIncrement                      RayPointStyle
GenerationNumber                     RayStart
HoleBoundary                         RayTilt
HoleOffset                           RefractiveIndex
Intensity                            RotationMatrix
InternalDirectionChange              SurfaceBoundary
IntersectionNumber                   SurfaceCoordinates
IntrinsicMedium                      SurfaceIncrement
NewAuthorizedOptions                 SurfaceNormalMatrix
OffAxis                              SurfaceNumber
OpticalLength                        Temperature
OpticalMedium                        UnconfinedPath
Polarization                         UnconfinedPosition
RayCurve                             WaveLength

Parameters of the Ray object.

In addition to the built-in ray parameters, you can add your own ray parameters to work with your new ray-tracing functions.  For the remainder of this chapter, we will separately consider each of the five categories of built-in ray parameters.

Go to list of topics

8.1 Physical Parameters

Physical parameters describe the physical characteristics about the particular ray/surface intersection point. These parameters give important optical information about the ray trace. Not all parameters are used in every ray trace. Some parameters, such as DiffractionMismatch, are only included for specific ray-tracing functions. Here is a table of names for the physical parameters.

BirthPoint                OpticalMedium    RefractiveIndex
DiffractionMismatch       Polarization     RotationMatrix
DiffractionOrderNumber    RayEnd           SurfaceCoordinates
Intensity                 RayLength        Temperature
IntrinsicMedium           RayStart         WaveLength
OpticalLength             RayTilt

Names of physical parameters stored in the Ray object.

Next, we define the physical parameters.

BirthPoint gives the three-dimensional spatial coordinates of the original light source.

DiffractionMismatch is returned by diffractive components that denote the mismatch fraction of the diffracted ray.

DiffractionOrderNumber is returned by diffractive components and relates to the diffraction order of the ray.

Intensity gives the ray's intensity value.

IntrinsicMedium gives a label that identifies the background optical medium surrounding components.

OpticalLength gives the total optical path length of the ray segment from the beginning of its creation.

OpticalMedium identifies the optical material medium being traversed by the ray.

Polarization ->{horizontal, vertical, phaseangle} is a rule of Ray specifying the direction of polarization of the ray segment as measured in the plane transverse to the axis of propagation.

Definitions of physical parameters stored in the Ray object, part one.

RayEnd gives the spatial ending coordinate of a ray showing the three-dimensional coordinate point where the ray intersects with the next component surface.

RayLength gives the geometric length of the ray segment running between two optical surfaces.

RayStart gives the spatial starting coordinate of a ray showing the three-dimensional coordinate point where the ray intersected with a component surface.

RayTilt is a three-dimensional coordinate designating the direction in which the ray segment is pointing in space.

RefractiveIndex gives the refractive index value for the ray in the local environment and uses ModelRefractiveIndex to calculate its value.

RotationMatrix gives a 3 x 3 matrix of spatial rotations invoked on the original object coordinate system by Move functions.

SurfaceCoordinates gives the parametric coordinate of the last surface function to intercept the ray.

Temperature denotes the temperature of a component surface given in degrees Celsius.

WaveLength describes the ray's optical wavelength (in microns).

Definitions of physical parameters stored in the Ray object, part two.

Go to list of topics

8.2 Component Parameters

Component parameters stored in Ray give information about the particular component surface being encountered by the ray. This information often describes physical characteristics about the surface, but may not directly relate to important optical characteristics. This information is used by LensLab for ray-tracing and rendering operations. The UnconfinedPath parameter is more fully discussed in Sections 2.1 and 10.5. Next, we define the Component parameters.

HoleBoundary gives the hole aperture dimensions for the last surface to intercept the ray.

HoleOffset gives the offset dimensions of a hole aperture for the last surface to intercept the ray.

OffAxis->{xoffset, yoffset} is an option specifying an offset of the axis of symmetry for curved surfaces.

SurfaceBoundary->aperture gives a list of numbers describing a surface boundary.

SurfaceNormalMatrix gives a matrix containing a unit normal vector of the surface as its first element as well as the two unit-tangent vectors for the point at the ray/surface intersection.

UnconfinedPath gives the slot positions for entrance surfaces within ConfinedPaths.

Definitions of Component parameters stored in the Ray object.

Go to list of topics

8.3 Pointer Parameters

As part of the stored information, each Ray holds pointers that mark its position in the ray-tracing result. When a Ray fails to intersect with a surface, some pointers that target a new surface get incremented. Here is a table of the ray pointers.

ComponentIncrement   ConfinedNumber       SurfaceIncrement

ComponentNumber      GenerationNumber     SurfaceNumber

ConfinedPosition     IntersectionNumber   UnconfinedPosition

Names of pointer parameters stored in the Ray object.

You can use these pointers during the postray-tracing analysis for selecting particular intersection points for closer study. Although these pointers have important roles during the ray tracing, some of these pointers are more useful than others in the postselection process. Of the nine pointers, you will find ComponentNumber, SurfaceNumber, and IntersectionNumber to be the most useful. You may also find ConfinedPosition to be useful for Ray selection. The remaining pointers are rarely used in postray-tracing analysis, but are discussed below for completeness.

ComponentNumber and SurfaceNumber

ComponentNumber and SurfaceNumber are among the most useful for Ray selection in postray-tracing analysis.

ComponentNumber is a rule of Ray indicating the slot position of the affected component being encountered by the ray segment.

SurfaceNumber is a rule of both Ray and Component denoting the slot positions being used within Surfaces of Component.

ComponentNumber points to the Component being targeted by Ray, while SurfaceNumber points to the particular surface within Component being targeted by Ray. By using ComponentNumber as a selection property, you can selectively extract Ray objects from a particular component encounter. By using SurfaceNumber in combination with ComponentNumber, you can selectively examine Ray objects from a particular surface encounter within a particular component. It is important to realize that SurfaceNumber identifies a distinct surface instead of recording the surface level reached by Ray in Component. Otherwise you may prefer to use ConfinedPosition.

Go to list of topics

IntersectionNumber and GenerationNumber

Each Ray also contains pointers that indicate the generation in which Ray was created, which is referenced to the start of the ray trace. The pointers are defined below.

IntersectionNumber gives the total number of surface intersections encountered for the creation of the specified Ray object.

GenerationNumber specifies the maximum valued IntersectionNumber found within the global system of Ray objects at the creation of the specified Ray object.

Of these two pointers, IntersectionNumber is the most useful as a ray selection property since it tells how many surfaces have been encountered by a specific ray leading to the creation of the particular Ray.

GenerationNumber works on a more global scale by indicating the maximum IntersectionNumber value found for all Ray objects present at the time of the particular Ray object's creation. In general, the GenerationNumber value of a particular Ray object will always be greater than or equal to the IntersectionNumber value given. Although their values are sometimes the same, IntersectionNumber is more reliable than GenerationNumber as a Ray selection criterion.

ConfinedPosition and ConfinedNumber

Two pointers indicate the present Ray position within the confined migration path. These are ConfinedPosition and ConfinedNumber. You will sometimes find ConfinedPosition to be a useful parameter in Ray selection.

ConfinedPosition gives the present slot position of the inner-nested element within ConfinedPaths of Component.

ConfinedNumber gives the present slot position of the outer-nested element within ConfinedPaths of Component.

ConfinedPosition indicates a particular slot position along a confined pathway, while ConfinedNumber indicates the particular confined path traversed by Ray.

Go to list of topics

SurfaceIncrement and ComponentIncrement

Although SurfaceIncrement and ComponentIncrement are very important pointers used during ray tracing, these parameters are almost never used in postray-tracing analysis.

SurfaceIncrement gives the rate of increment used to step through component surfaces. SurfaceIncrement->+1 increments ConfinedPosition by 1, while SurfaceIncrement->-1 increments ConfinedPosition by -1. ConfinedPosition locations can be skipped by forcing SurfaceIncrement to be some integer >1 or <1.

ComponentIncrement->value forces a change in the next generated Ray object's component target. ComponentIncrement->Automatic causes Ray to proceed in the same direction through the component listing according to SurfaceIncrement, a related parameter. ComponentIncrement->integer forces an immediate change of the component being targeted by Ray, by the amount given by integer.

As rays propagate through the optical system, each time a ray intersects with a new surface, a new Ray object is created that gets a modified copy of the previous Ray object's parameter contents and whose ConfinedPosition parameter value gets incremented by the parameter SurfaceIncrement. When a Ray object targets a new Component, ComponentNumber gets incremented by ComponentIncrement.


UnconfinedPosition is a Ray pointer rarely used as a selection property for postanalysis.

UnconfinedPosition specifies the present slot position being used within the UnconfinedPath parameter stored in Ray.

Go to list of topics

8.4 Graphical Parameters

The graphical parameters of Ray are used for ray rendering. The RayLabel parameter is used for selection of rays and is discussed in Section 6.1. Here is a table of names for the graphical parameters.

RayCurve RayLabel
RayLineRGB RayLineStyle
RayLineThickness RayPointRGB
RayPointSize RayPointStyle

Names of graphical parameters stored in the Ray object.

Here are definitions of the physical parameters.

RayCurve is composed of a list of three-dimensional points composing a curved ray trajectory in space.

RayLabel->raylabel is used to assign a descriptive label to the ray.

RayLineRGB denotes the color used in rendering the rays

RayLineStyle carries a list of user-expressed graphics styles for the rendering of ray lines.

RayLineThickness-># supplies AbsoluteThickness[#] thickness values for rendering the ray.

RayPointRGB designates the color used in rendering the ray/surface intersection points.

RayPointSize passes information to AbsolutePointSize for the rendering of ray/surface intersection points.

RayPointStyle carries a list of user-expressed graphics styles for the rendering of ray/surface intersection points.

Definitions of graphical parameters stored in the Ray object.

Go to list of topics

8.5 Flag Parameters

Flag parameters are used internally by LensLab during the actual ray tracing. These parameters are used with ray-tracing functions and are seldom useful for postray-tracing analysis. Here are definitions of the flag parameters.

FreezeIncrement[component, options] causes the ray to remain targeted to the same surface for successive propagation generations.

InternalDirectionChange is an internal flag variable used by PropagateSystem to indicate an internal reflection inside a double-surfaced component.

NewAuthorizedOptions gives a list of Ray option names authorized in addition to the names listed in Options[Ray] for propagating several generations.

Definitions of flag parameters used in the ray-tracing process.

Go to list of topics

Copyright Statement

LensLab is a trademark of Optica Software.
Mathematica ® is a registered trademark of Wolfram Research, Inc. All other product names mentioned are trademarks of their producers. Mathematica is not associated with Mathematica Policy Research, Inc. or MathTech, Inc.
Copyright ©1995-2005 by Optica Software, Urbana, Illinois, Champaign, Illinois.

All rights reserved. No part of this document may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, electronic, mechanical, photocopying, recording or otherwise, without prior written permission of the author, Optica Software.

Optica Software is the holder of the copyright to the LensLab package software and documentation ("Product") described in this document, including without limitation such aspects of the Product as its code, structure, sequence, organization, "look and feel", programming language and compilation of command names. Use of the Product, unless pursuant to the terms of a license granted by Optica Software. or as otherwise authorized by law, is an infringement of the copyright.

Optica Software makes no representations, express or implied, with respect to this Product, including without limitations, any implied warranties of merchantability or fitness for a particular purpose, all of which are expressly disclaimed. Users should be aware that included in the terms and conditions under which Optica Software is willing to license the Product is a provision that the author, Optica Software and distribution licensees, distributors and dealers shall in no event be liable for any indirect, incidental or consequential damages, and that liability for direct damages shall be limited to the amount of the purchase price paid for the Product.

In addition to the foregoing, users should recognize that all complex software systems and their documentation contain errors and omissions. Optica Software shall not be responsible under any circumstances for providing information on or corrections to errors and omissions discovered at any time in this document or the package software it describes, whether or not they are aware of the errors or omissions. Optica Software does not recommend the use of the software described in this document for applications in which errors or omissions could threaten life, injury or significant loss.

Go to list of topics

Created by Mathematica  (November 3, 2005)