text:
User-defined shaders are constructed from fragments. The shaders are identified by tags. At run-time, the tag is used to determine whether the user-defined shader has been previously compiled. If it has, the compiled version is executed. If it has not, the fragments are assembled to form the shader and the shader is run-time compiled. The compiled shader can be stored for subsequent reuse, with the tag serving as an index to the compiled version.
1. A method for compiling shaders for implementing graphics operations, at least one shader comprising two or more fragments, the method comprising:
determining, based on a tag that specifies one or more functions of the at least one shader, whether the shader has been previously compiled;
responsive to a determination that the shader has been previously compiled, retrieving the previously compiled shader;
responsive to a determination that the shader has not been previously compiled:
based on the tag, assembling the fragments included in the shader, the fragments implementing graphics operations that are part of the shader's function, and
run-time compiling the assembled fragments, and
providing the compiled shader for real-time execution on a graphics system.
2. The method of
3. The method of
4. The method of
the shader comprises two or more constituent shaders, each constituent shader comprising at least one fragment; and
the tag identifies the constituent shaders.
5. The method of
the shader comprises two or more constituent shaders, the constituent shaders selected from a set of constituent shaders; and
the tag includes a state vector that identifies which of the constituent shaders in the set of constituent shaders are included in the shader.
6. The method of
assembling the fragments included in the constituent shaders.
7. The method of
the step of determining, based on the tag, whether the shader has been previously compiled comprises:
determining whether the tag is contained in a table, the table having records associating previously compiled shaders with their corresponding tags; and
further responsive to a determination that the shader has not been previously compiled:
adding a record to the table, the record associating the shader after compilation with its corresponding tag.
8. The method of
9. The method of
10. The method of
11. The method of
12. The method of
13. The method of
14. The method of
the shader comprises two or more constituent shaders, the constituent shaders selected from a set of constituent shaders; and
for a substantial number of graphics operations that are implemented by both a standard operation and by the set of constituent shaders, there is a one to one correspondence between the standard operations and the constituent shaders in the set of constituent shaders.
15. The method of
16. The method of
executing the compiled shader in real time.
17. A computer program product for compiling shaders for implementing graphics operations, at least one shader comprising two or more fragments, the computer program product comprising instructions to direct a processor to implement a method as in any of the
18. A system for compiling shaders for implementing graphics operations, at least one shader comprising two or more fragments, the system comprising:
control logic for determining, based on a tag that specifies one or more functions of the at least one shader, whether the shader has been previously compiled;
a library of fragments; and
a fragment assembler coupled to the control logic and capable of accessing the library of fragments for, responsive to a determination that the shader has not been previously compiled, based on the tag, assembling the fragments included in the shader, the fragments implementing graphics operations that are part of the shader's function.
19. The system of
a run-time compiler coupled to the fragment assembler for, responsive to a determination that the shader has not been previously compiled, run-time compiling the assembled fragments.
20. The system of
21. The system of
22. The system of
the shader comprises two or more constituent shaders, each constituent shader comprising at least one fragment; and
the tag identifies the constituent shaders.
23. The system of
the shader comprises two or more constituent shaders, the constituent shaders selected from a set of constituent shaders; and
the tag includes a state vector that identifies which of the constituent shaders in the set of constituent shaders are included in the shader.
24. The system of
25. The system of
a table accessible by the control logic, the table having records associating previously compiled shaders with their corresponding tags; wherein:
the control logic determines whether the tag for the shader is contained in the table, and
further responsive to a determination that the shader has not been previously compiled, the control logic adds a record to the table, the record associating the shader after compilation with its corresponding tag.
26. The system of
27. The system of
a second library of fragments, wherein the fragment assembler is further capable of accessing the second library of fragments and the shader is associated with one of the libraries.
28. A method for executing graphics operations on a graphics system having a programmable mode and a fixed function mode, wherein the fixed function mode is for performing graphics operations selected from a predefined set of standard operations and the programmable mode is capable of executing shaders, the method comprising:
determining whether a set of graphics operations is to be executed in programmable mode or in fixed function mode;
responsive to a determination that the set of graphics operations is to be executed in fixed function mode, performing one or more standard operations that implement the set of graphics operations; and
responsive to a determination that the set of graphics operations is to be executed in programmable mode:
determining, based on a tag that specifies a function of a shader that implements the set of graphics operations, whether the shader has been previously compiled;
responsive to a determination that the shader has been previously compiled, retrieving and executing the previously compiled shader in real time; and
responsive to a determination that the shader has not been previously compiled:
based on the tag, assembling fragments included in the shader, wherein the shader comprises two or more fragments, the fragments implementing graphics operations that are part of the shader's function,
run-time compiling the assembled fragments, and executing the run-time compiled shader in real time.
29. The method of
30. The method of
31. The method of
the shader comprises two or more constituent shaders, the constituent shaders selected from a set of constituent shaders; and
for a substantial number of graphics operations that are implemented by both a standard operation and by the set of constituent shaders, there is a one to one correspondence between the standard operations and the constituent shaders in the set of constituent shaders.
32. The method of
selecting fixed function mode if the set of graphics operations can be executed in fixed function mode.
33. The method of
the set of graphics operations comprises at least one constituent shader; and
the step of determining whether a set of graphics operations is to be executed in programmable mode or in fixed function mode comprises:
determining, based on a state vector that identifies the constituent shaders, whether the set of graphics operations can be implemented by one or more standard operations.
34. A computer program product for executing a set of graphics operations on a graphics system having a programmable mode and a fixed function mode, wherein the fixed function mode is for performing graphics operations selected from a predefined set of standard operations and the programmable mode is capable of executing shaders, the computer program product comprising instructions to direct a processor to implement a method as in any of the
1. Field of the Invention
This invention relates generally to computer graphics and, more particularly, to user-defined shaders that implement graphics operations.
2. Description of the Related Art
Ever since 3D computer graphics evolved beyond wireframe rendering, shading has been a principal area of research and development. In the early days, shading primarily concerned processes by which pixel colors were applied to a surface. These days, the terms shading and shader are much broader and generally refer to any types of 3D graphics operation. Code which implements such graphics operations is commonly referred to as a shader. Examples of graphics operations that can be implemented by shaders include coordinate transformation, lighting, and determining the pixel colors across a surface. Shaders can also be used to produce geometric effects, such as skeletal animation, particle systems, or other dynamics such as textile modeling. Shaders are widely used for simulating the reflectance properties of surfaces, ranging from simple shaders describing a pattern on a surface to more sophisticated shaders modeling human skin, granite, velvet, etc. Shaders can also be used to simulate the optics in a camera lens through which a scene is viewed or to simulate the illumination properties of lights in a scene. Other examples will be apparent.
In 1988, Pixar's Renderman renderer became available. Renderman was the first widely used rendering application that supported programmable shading, although the technique was introduced commercially by Pixar with their Chap Reyes rendering system in 1986 and academically by Robert L. Cook in 1984 ("Shade Trees", Robert L. Cook, Computer Graphics Siggraph 1984 proceedings). Prior to programmable shading, a user of a graphics system (e.g., an applications developer) was limited to a predefined set of shading operations, which shall be referred to as "standard operations." All graphics had to be rendered using only the standard operations. If an effect was not supported by the standard operations, then the user either had to skip the effect or, if the effect was important enough, lobby the manufacturer of the graphics system to expand the set of standard operations to include the desired effect. In contrast, programmable shading allowed users to mathematically define shading functions using their own code. This resulted in a nearly infinite number of shading possibilities to simulate virtually every conceivable type of surface, lighting, atmosphere or other effect. Essentially, users could define their own shaders.
The shading techniques described above were typically first implemented as software running on general purpose computers. Such rendering software is generally used for off-line rendering, in which rendering times for each frame of a computer graphics movie can vary from seconds to days, depending on the processor performance and scene complexity. Later, as semiconductor performance increased, many shading techniques were implemented in hardware for real-time applications. In real-time applications, scenes must be rendered at interactive rates, which is usually somewhere between 10 and 100 Hz.
Due to the difficulty in meeting this performance requirement, advances in shading technology are implemented in off-line rendering systems significantly before they reach real-time renderingsystems. For example, an early implementation of real-time texture mapping occurred in the 1980's in General Electric's CompuScene III real time image generator. An early implementation of rudimentary real-time programmable shading was nVidia's Geforce3 accelerator, released in 2001. These dates are significantly later than the corresponding dates for off-line rendering systems.
Like their off-line rendering ancestors, prior to programmable shading, real-time graphics systems were based upon a predefined set of standard operations and a corresponding application programming interface (API). This predefined set of operations is also known as the fixed-function pipeline. It will also be referred to as the fixed-function mode for the graphics system. Examples of APIs that include a fixed function pipeline are OpenGL 1.1 and DirectX. Older APIs include IRISGL (SGI's API prior to OpenGL), Glide (by 3dfx), and PHIGS. The OpenGL specification describes a pipelined architecture for real-time 3D rendering. The pipeline includes stages for vertex processing, primitive processing, rasterization, texture mapping, and fragment processing. Each stage in the pipeline can implement a finite number of standard operations and the operations to be performed are described by states that are set by the user (including, for example, matrices, and lighting and material parameters).
For example, in the geometry processing stage (a combination of vertex processing and primitive assembly), the user might set state(s) to describe how texture coordinates are generated. Texture coordinates may, for example, be explicitly specified in source geometry, derived by means of a linear equation from the vertex positions of source geometry, transformed by a matrix, etc. The user sets the appropriate state(s) for the generation of texture coordinates and the graphics processor then executes the corresponding standard operation(s).
One important property of the standard operations is that they are typically "orthogonal." Two graphics operations are orthogonal if the state of one operation does not affect the state of the other operation. For example, consider texture coordinate generation and texture coordinate transformation. The former describes how texture coordinates are initially generated; the latter describes a matrix transformation applied to the coordinates. These two operations are orthogonal because the transformation operation functions the same regardless of how the texture coordinates are initially generated, and vice versa.
One advantage of orthogonality for users is that it simplifies the use of the graphics system because the interplay between different graphics operations is reduced. This makes it easier to understand the graphics system and also makes incremental development possible. One disadvantage of orthogonality for manufacturers of graphics systems is that each additional graphics operation supported by the fixed function pipeline geometrically increases the number of combinations of possible states that the user may set.
Take the geometry processing stage as an example. Here, the addition of new graphics operations and the corresponding proliferation of states have led to the adoption of "fast paths." Modern geometry processing stages are typically implemented using programmable processors that execute microcode. The microcode implements the standard operations of the geometry processing stage of the fixed function pipeline. It is fixed function because the user cannot easily alter the microcode (e.g., it may be preloaded by the graphics system manufacturer) and therefore can only perform the standard operations supported by the microcode. The microcode authors usually start by creating a "slow path," which is an all-inclusive microprogram that is capable of handling every possible combination of states supported by the fixed function pipeline. This generalized microprogram is not optimized. For example, if the user disables texture coordinate transformation, rather than skipping this operation, the generalized microprogam typically would still perform the coordinate transformation but set the transformation matrix to the identity matrix so that no actual coordinate transformation occurred.
Because most applications use only a small subset of the possible combinations of states, the microcode authors often implement "fast path" microprograms for specific cases. For example, if flat-shaded wireframe rendering is used frequently in CAD applications, the authors may create an optimized microprogram to implement this combination of states more efficiently. Or if a popular computer game renders textured polygons with one diffuse light and fog enabled, the authors may create another optimized microprogram to implement this combination. The graphics driver typically chooses the appropriate fast path by analyzing the state settings made by the application. If no fast path is available, the generalized slow path is executed.
The programmable pipeline or programmable mode goes one step further. In the fixed function mode, the user sets states and, based on the states, a fast path microprogram is executed if one is available. In the programmable mode, the user supplies his own microprogram (i.e., a user-defined shader). The programmable pipeline simplifies the graphics system manufacturer's job because the user (e.g., an application developer) can create shaders optimized for his particular application and can also create shaders to implement graphics operations which are not supported by the fixed function pipeline. Furthermore, the user does this without affecting the fixed function pipeline or the corresponding graphics API. Early examples of the programmable pipeline include Direct3D Vertex Shaders (a.k.a. Vertex Programs in OpenGL) and Direct3D Pixel Shaders (a.k.a. Texture Shaders and Register Combiners in OpenGL). These allow the user to write shaders (vertex shaders and pixel shaders in the examples given above) that essentially bypass the API abstraction layer and operate directly with the underlying graphics hardware (or which are optimized to run on general CPUs if there is no direct hardware support).
While the programmable pipeline gives users the flexibility to create custom shaders, it comes at a price.
In other words, using shaders and the programmable pipeline shifts the burden of managing many of the features of the graphics pipeline from the graphics system manufacturer to the user. The problem of proliferating graphics operations and states now becomes the user's problem. As a result, there is a substantial barrier to entry to using shaders and there is a need for an approach which allows users to take advantage of the flexibility of the programmable pipeline while significantly reducing this barrier to entry.
The present invention overcomes the limitations of the prior art by providing user-defined shaders that are constructed from fragments. The shaders are identified by tags. At run-time, the tag is used to determine whether the user-defined shader has been previously compiled. If it has, the compiled version is executed. If not, the fragments are assembled to form the shader and the shader is run-time compiled. The compiled shader can be stored for subsequent reuse, with the tag serving as an index to the compiled version.
The present invention is particularly advantageous because it provides a way for real-time graphics applications to be constructed using programmable shading technology while maintaining the advantages of orthogonality. Furthermore, it provides the automatic creation of "fast-paths" for different combinations of states. It also allows users to use multiple shaders in tandem, as well as combine shaders with functionality equivalent to that provided by the fixed function pipeline. This approach also scales efficiently as the number of possible shaders multiplies exponentially. It is applicable to graphics applications based on a variety of application architectures, including scene graphs.
Specific implementations may include one or more of the following variations. In one variation, the tag includes a state vector indicating which fragment(s) are included in the shader. In another variation, a table contains records that associate previously compiled shaders with their corresponding tags. The table is consulted to determine whether it contains the tag of the current shader. If it does, it means there is a previously compiled version. If it does not, after compiling the current shader, its tag is added to the table. In one implementation, the table is a hash table. In another variation, the shader and tag represent the combination of two or more constituent shaders that are to be applied to an object.
In another aspect of the invention, a system for compiling user-defined shaders for implementing graphics operations includes control logic, a library of fragments and a fragment assembler. The control logic determines, based on the tag identifying the shader, whether the shader has been previously compiled. The fragment assembler communicates with the control logic and can access the library of fragments. If the shader has not been previously compiled, the fragment assembler assembles the fragment(s) included in the shader. The system optionally also includes a run-time compiler that compiles the assembled fragment(s).
In another aspect of the invention, a library of fragments is for building user-defined shaders which are compatible with a predefined set of standard operations (e.g., as for a fixed function pipeline). For those graphics operations that are implemented by both a standard operation and by the library of fragments, there is a substantial one to one correspondence between the standard operations and fragments in the library.
In yet another aspect of the invention, a set of graphics operations is to be performed by a graphics system having a programmable mode and a fixed function mode. The fixed function mode is for performing a predefined set of standard operations. The programmable mode is capable of executing user-defined shaders. It is determined whether the set of graphics operations is to be executed in programmable mode or in fixed function mode. If the fixed function mode is selected, the appropriate standard operations are executed. If the programmable mode is selected, the appropriate user-defined shader is executed using the techniques described above. In one implementation, a state vector identifies the specific graphics operations to be performed and the state vector is used to determine whether the set of graphics operations can be implemented by one or more standard operations.
The invention has other advantages and features which will be more readily apparent from the following detailed description of the invention and the appended claims, when taken in conjunction with the accompanying drawings, in which:
Computer system 100 includes one or more central processing units (CPU), such as CPU 102, and one or more graphics subsystems, such as graphics pipeline 112. One or more CPUs 102 and one or more graphics pipelines 112 can execute software and/or hardware instructions to implement the graphics functionality described herein. Graphics pipeline 112 can be implemented, for example, on a single chip, as part of CPU 102, or on one or more separate chips. Each CPU 102 is connected to a communications infrastructure 101, e.g., a communications bus, crossbar, network, etc. Those of skill in the art will appreciate after reading the instant description that the present invention can be implemented on a variety of computer systems and architectures other than those described herein.
Computer system 100 also includes a main memory 106, such as random access memory (RAM), and can also include input/output (I/O) devices 107. I/O devices 107 may include, for example, an optical media (such as DVD) drive 108, a hard disk drive 109, a network interface 110, and a user I/O interface 111. As will be appreciated, optical media drive 108 and hard disk drive 109 include computer usable storage media having stored therein computer software and/or data. Software and data may also be transferred over a network to computer system 100 via network interface 110.
In one embodiment, graphics pipeline 112 includes frame buffer 122, which stores images to be displayed on display 125. Graphics pipeline 112 also includes a geometry processor 113 with its associated instruction memory 114. In one embodiment, instruction memory 114 is RAM. The graphics pipeline 112 also includes rasterizer 115, which is communicatively coupled to geometry processor 113, frame buffer 122, texture memory 119 and display generator 123. Rasterizer 115 includes a scan converter 116, a texture unit 117, which includes texture filter 118, fragment operations unit 120, and a memory control unit (which also performs depth testing and blending) 121. Graphics pipeline 112 also includes display generator 123 and digital to analog converter (DAC) 124, which produces analog video output 126 for display 125. Digital displays, such as flat panel screens can use digital output, bypassing DAC 124. Again, this example graphics pipeline is illustrative of the context of the present invention and not intended to limit the present invention.
Shader 200 is an example written in the assembly language used in nVidia OpenGL Vertex Programs. In alternate embodiments, the shader may be written in other assembly languages or in a higher level shading language such as those supported by compilers such as the Stanford Shading Compiler or SGI's OpenGL Shader system. The vertex shader 200 computes the per-vertex attributes for cubic reflection mapping. For the purposes of this example, the shader 200 has been decomposed into eight shader fragments 211A–211H, surrounded by a standard header 201 and footer 202. Generally speaking, user-defined shaders can include one or more shader fragments. One advantage of defining shaders as a combination of shader fragments is that shader fragments can be reused. They also simplify the process of combining shaders, as will be further explained below.
In shader 200, the three fragments 211A–C implement graphics operations which are part of the fixed function pipeline (i.e., they implement standard operations). It is also expected that many different user-defined shaders will use these shader fragments. The four fragments 211D–G implement graphics operations which do not map uniquely to any part of the fixed function pipeline but which are expected to be frequently used in other shaders nonetheless. Fragment 211H is specific to this shader 200 and it is unlikely that other shaders would use this code.
Shaders can be decomposed into shader fragments in more than one way. For example, shader 200 could have been decomposed into a different number of shader fragments and/or differently defined shader fragments. The decomposition of a shader into its constituent fragments can be done by hand but preferably is automated. For example, nVidia's NVASM shader assembler is advertised as being able to perform this task. Shaders preferably will be decomposed into shader fragments in a manner that permits significant reuse of shader fragments, fast compilation, combining and execution of shaders, and consistency between shader fragments and the standard operations of the fixed function pipeline (see
In decomposing shaders into their constituent fragments, several issues typically are important. First, it is important to identify conflicts between different shaders. For example, two shaders might use the same texture coordinate for different purposes or in an inconsistent manner. These conflicts typically must be resolved before the shaders are compiled and preferably before run time. If the conflict between the shaders cannot be resolved through automated means, then human intervention may be required to resolve the conflict. It is even possible that the conflict is unresolvable, meaning that the shaders cannot both be used and an alternate solution is required. Second, in order to increase the modularity of the shader fragments, it is important to identify commonalities and differences between the shaders. Commonly used graphics operations preferably are coded once as a single fragment that will be included in multiple shaders. Fragments 211A–G are examples of this type of fragment. Differences are coded as fragments that are unique to one shader. In the example of
As mentioned previously, the use of shaders and the programmable pipeline has many advantages. For example, the programmable pipeline has more flexibility and freedom, allowing the user to implement new graphical effects. The flexibility of vertex shaders allows users to implement graphics operations such as procedural geometry (e.g., cloth simulation and soap bubbles), advanced vertex blending for skinning and vertex morphing (i.e., tweening), particle systems, advanced lighting models, advanced keyframe interpolation (e.g., for complex facial expressions and speech), and real-time modifications of the perspective view (e.g., lens effects). Another advantage is that shaders can be more portable than applications based on the fixed function pipeline. The shader approach can more easily take advantage of advances in hardware capability and the addition of new instructions and registers.
First consider each component individually. The control logic 310 generally controls the process of compiling and executing shaders, in this example according to method 400. The control logic 310 does not necessarily have sole control over the entire process. At various points, control may be shared or transferred to other components. In some embodiments, the control logic 310 may also detect and/or resolve conflicts at run time. It may also combine multiple shaders into a larger shader and then execute the larger shader (which shall be referred to as a composite shader) instead of the many constituent shaders. For example, if multiple shaders are to be applied to the same object, the control logic 310 might construct a single composite shader that has the same effect as the original multiple shaders. The fragment assembler 320 is responsible for assembling shaders to be executed from their constituent fragments. The run-time compiler 330 is responsible for compiling shaders at run time. The graphics engine 340 executes the compiled shaders.
With respect to implementation, graphics engine 340 typically is implemented in hardware, although it could be a software implementation or a combination of hardware and software (e.g., a chip and a low level driver). Examples of graphics engine 340 include graphics processors, DSPs and general-purpose microprocessors (especially if optimized for graphics processing or coupled with graphics drivers). The three components 310, 320, 330 typically are implemented in software. This software could run on the graphics engine 340 or on other processors.
Turning to the data structures, the fragment library 350 is a data structure that contains the shader fragments that will be used to build shaders. The compiled shaders database 360 contains shaders which have been previously compiled. The table 370 is an index into the compiled shaders database 360. In one implementation, each shader is identified by a tag and each record in table 370 lists a tag 372 and a pointer 374 to the location in database 360 of the corresponding compiled shader. The data structures 350, 360 and 370 are referred to as library, database and table, but this is solely for convenience. They can be implemented using any appropriate type of data structures, including for example arrays, linked-lists or hash tables.
The tag can also take different forms. It can be a descriptive label or some other name, for example "Lighting" for a shader that implements lighting. In an alternate embodiment, the tag includes a state vector that indicates which fragments are included in the shader. For composite shaders, the tag may define the shader by identifying its constituent shaders.
Once the control logic 310 receives 410 the tag, it determines 420, based on the tag, whether the corresponding shader has been previously compiled. In architecture 300, the records in table 370 contain the tags for shaders that have been previously compiled. In this case, control logic 310 references the table 370 and determines whether the tag for the current shader is already contained in table 370. If it is, then the shader has been previously compiled. The control logic 310 retrieves 430 the previously compiled shader from database 360 and provides 440 the compiled shader to the graphics engine 340, which executes 450 the shader in real time.
If the tag is not in table 370, the shader must be compiled before it can be executed. In this case, the control logic 310 instructs the fragment assembler 320 to retrieve the appropriate fragments from fragment library 350 and assemble 460 the fragments in the correct order. The fragment assembler 320 may also add syntax such as headers and footers.
The run-time compiler 330 compiles 470 the assembled shader and provides 440 the compiled shader to the graphics engine 340 for execution 450 in real time. The control logic 310 also stores 480 the compiled shader in database 360 and adds 480 a corresponding record to table 370. Hence, if the same shader is encountered later, it can be retrieved from the database 360 rather than recompiled.
Method 400 is applied to each shader in the application. If the implementation is pipelined, multiple shaders can be processed concurrently.
The data structures are implemented as follows. In this system, shaders executed in the programmable pipeline are assigned handles, also known as id's. The compiled shaders are stored by driver 530 in program memory 560 and the handles are passed back to the user software module via the OpenGL API. In other words, the compiled shader database 360 is implemented in program memory 560 and maintained by driver 530. The tags for shaders are bit-based state vectors, as will be further described below, and table 370 associates the state vectors (i.e., tags) with the corresponding handles (i.e., pointers). If there are a large number of state vectors, a hash table 570A can be used to index into the complete table 570B. The control logic software 510 maintains the hash table 570A and the complete table 570B. The fragment library 350 is implemented as a library 550 of individual ASCII files, one file per fragment. The fragments are defined prior to run time and loaded into the fragment library 550 for use at run time.
System 500 includes a fixed function mode as well as a programmable mode.
In this implementation, the state vector is bit-based. Each bit (or group of bits) indicates whether certain shaders are enabled. For example, if there are 32 possible different shaders, the state vector could be a 32-bit state vector. Each bit corresponds to a shader, which in turn includes one or more fragments. The value of the bit indicates whether that shader (and the corresponding fragments) are included in the composite shader, thus representing over 4 billion (232) possible composite shaders. For example, bit 7=1 might indicate that shader 7 is included in the composite shader and bit 7=0 indicates that shader 7 is not included. If shader 7 includes fragments A, B and C, then bit 7=1 would cause fragments A, B and C to be included in the composite shader. If bit 7=0, fragments A, B and C will not be included unless another enabled shader calls for their inclusion. In an alternate embodiment, the shaders can be mapped to the state vector in different ways. In a common approach, multiple bits may be used to represent groups of shaders. For example, if the application is limited to one light in a scene, but there are three different shaders representing three different light types (e.g., directional diffuse, local specular/diffuse, and ambient only), then only two bits are needed to represent which light, if any, is enabled. For example, 00 could mean no lighting, 01 directional diffuse lighting, 10 local specular/diffuse, and 11 ambient only. Not all bits in the state vector need be assigned, thus allowing the future addition of new shaders and fragments. In a preferred embodiment, bits are used in order, starting with the least significant bit.
Each bit of the state vector is determined by querying or otherwise determining the state that the application has specified should be applied. In scenegraph applications, this data is readily available from a state manager or node data structure. In an application built directly on top of a lower-level graphics API such as OpenGL, it is possible to query the driver immediately prior to object rendering to obtain object state associated with the fixed-function pipeline, if the data is not available through more efficient means. The result of each state query is inserted into the corresponding bit(s) of the state vector.
In this implementation, the control software 510 also combines multiple shaders that are to be applied to the same object, forming a single state vector that represents all of the graphics operations to be applied to the object. In this process, fragments that appear in more than one shader typically will appear only once in the combined shader. Conflicts between shaders typically are resolved at this stage if they have not been resolved before run time. Fragment assembler 520 maintains information on which fragments are included in each shader, including any requirements on the order in which fragments must be executed. Fragments that are not required by any of the constituent shaders are not included in the composite shader, thus making the entire process more efficient.
Returning to
If the programmable pipeline is used, execution proceeds according to
If there is no match for the state vector, then the required shader is run-time compiled. The fragment assembler 520 retrieves and assembles 460 the fragments indicated by the state vector. In this implementation, the assembler 520 does so by traversing the list of fragments required if all shaders are enabled and assembling only those required by shaders enabled in the state vector. It is usually important to preserve the order of the fragments since some fragments may depend on the output of other fragments. If the vector state represents the combination of multiple shaders, the order of the fragments in the combined shader preferably is consistent with the order in the individual shaders. Continuing the example of
In compilation 470, a handle for the user-defined shader is requested from the driver 530 and the assembled fragments are handed to the driver 530. The driver 530 includes a run-time compiler that compiles 470 the shader, which can then be executed 450. The driver 530 also returns the handle to the control software 510.
The control software 510 indexes the state vector and corresponding handle into the hash table 570 for future use. Other objects in the same scene may reuse the compiled shader in the same frame and any object, including the original object, may reuse the compiled shader in subsequent frames. If all objects requiring the compiled shader disappear from view, the compiled shader may remain in the hash table 570 and program memory 560 (this is generally preferred). Alternately, a garbage collection scheme may be used to clean out shaders that are no longer needed. Because most graphics drivers that have a programmable mode automatically allocate scarce resources to shaders which are in use, it is generally more efficient to retain compiled shaders in case they are needed again later.
The process described above is repeated for each object in the scene that may have shaders applied. The various data structures are maintained on a global basis, rather than on a per-object basis, and may be used by multiple objects. It may be desirable to have multiple sets of data structures, corresponding to different sets of fragments. For example, one class of objects may have certain characteristics that are best served by a certain library of fragments, with its corresponding data structures 550, 560 and 570. Another class of objects may be better served by a different library of fragments, as opposed to expanding the first library to cover both classes of objects. This approach reduces the size of the state vectors and works well when the two libraries are significantly different.
Shader parameters, such as light colors, positions, bump-map scales, etc. are managed using a state management system in parallel with the fixed-function pipeline state management infrastructure of the application. For example, if the application uses a scenegraph with hierarchical state management (i.e., state attributes can be at any level in the graph), custom attributes for shader-specific parameters are added, and some fixed-function attributes may be supplemented with attributes that map the fixed-function parameters into parameters addressable by the shader engine (referred to as program parameters by nVidia's OpenGL Vertex Programs, for example). An example of states defined by the fixed-function pipeline is texture coordinate generation mode. A stock scenegraph supporting different texture coordinate generation modes includes a mechanism for keeping track of what texture coordinate generation mode is used for each object in the scene. States associated with specific user-defined shaders (e.g., index of refraction) are not known to such a stock scenegraph. The scenegraph is extended to support user-defined states. For an application using a scenegraph or other scene structure with leaf-node state management (such as SGI's IrisPerformer's geoState mechanism), additional parameters may be added to the "geoStates" to support user-defined shaders.
For the example of OpenGL Vertex Programs, states are passed to user-defined shaders through 96 program parameter registers, each of which comprises four IEEE floating-point components. Both fixed-function and user-defined states are mapped into this address space such that each shader fragment may access the parameters that affect its operation. The available shader parameter address space can be allocated as necessary for all the possible shader combinations. This is achieved by filling in the address space starting with zero with the parameters for all the shaders that may be used concurrently. If there are several disjoint sets of shaders, wherein each set describes some subset of all the shaders that may be used concurrently, each set may have its own parameter mapping. This is only necessary if the number of parameters needed by all the shaders exceeds the available address space.
Returning to
For example, assume that there are three standard operations A, B and C, each of which has two subparts as follows:
State vector 810 requires graphics operations A, C and E. Since E is a user-defined operation, state vector 810 is executed via the programmable pipeline. The composite shader defined by shaders X, Z and E is executed. Now assume that the user (e.g., an applications programmer) makes a change to state vector 810 by disabling operation E. The resulting state vector 820 only requires operations A and C, both of which are standard operations. As a result, the state vector 820 can be executed by the fixed function pipeline. The transition from programmable pipeline to fixed function pipeline is efficient due to the one to one correspondence between fragments X–Z and standard operations A–C.
Although the invention has been described in considerable detail with reference to certain preferred embodiments thereof, other embodiments will be apparent. Therefore, the scope of the appended claims should not be limited to the description of the preferred embodiments contained herein. For example, the functionality described here can be implemented in various combinations of hardware and software, including implementation in software of different levels.
As another example, vertex shaders are used in many of the examples but other types of shaders are also suitable for use with the invention. For example, pixel shaders can be processed in an analogous manner. Furthermore, the invention can also be used with other shaders, such as clipping, fragment or camera projection shaders, including shaders which are not currently available today. If multiple types of shaders are in use, a correlation between different types of shaders can be established since there may be a correspondence between fragments. For example, if a pixel shader fragment for per pixel normal perturbation via a "bump map" texture is used, a corresponding vertex shader fragment may be required to set up the vertex parameters properly. As a result, it is possible to have different types of shaders share common bits in the shader state vector.
Patent Citations
Non-Patent Citations
Referenced by
Legal Events
Original Image


text:
Start Your Own T-shirt Business for Fun and Profit
Get My FREE 5-Part T-shirt Business Startup Training
Whether you're pressing shirts from your garage, kitchen table or spare bedroom, you too can cash in on the BILLION dollar t-shirt craze!
Your FREE T-shirt Business Start-up Training Includes:
Get an understanding on how the heat press machine and all of it's attachments work. This in-depth tutorial will breakdown all the things you're able to press designs onto (including the front and back of t-shirts, hoodies, long sleeve tees, printing onto 'sleeves', and a whole lot more).
Everything you need to know about screen printed transfer paper and regular iron-on heat transfers. In this training, I cover the pros and cons to using either method. I also reveal a source where you can purchase screen printed transfer paper from today.
I got PROOF that people will buy the t-shirt design ideas you have twirling around in your head… In this FREE training, I reveal how you can easily take your t-shirt design ideas and turn it into a business model that pays you over and over again.
There's a lot of false information going around about how you can get started in this business. I clear it all up in this training. For example, you don't have to know how to draw to be successful — I'll reveal a work-around for those of you who can't draw. You also don't need a lot of t-shirt designs to get started — you can easily start with one t-shirt design and add-on as you go. You don't need an office to start either — I started from my bedroom. I'll also show you how to find a heat press for pennies on the dollar — it's all covered in this training!
Wanna sell your tees to a worldwide audience? Then this training is for you. This is where most people screw up the website piece… In this training, we cover the proper formats to layout your t-shirt. Including must-have sections on your website if you wish to wholesale and setup accounts for retailers and specialty boutiques. I also reveal a little secret for getting people to come back to buy from your site over and over again — this method allowed us to drastically increase revenue during slow periods.
Get My FREE 5-Part T-shirt Business Startup Training
Whether you're pressing shirts from your garage, kitchen table or spare bedroom, you too can cash in on the BILLION dollar t-shirt craze!
Leave Only Your First Name & E-mail Address
to Get Our FREE Training
Just One of Your T-shirt Designs Could Free You From Your Job
Over the next few minutes, I'm going to show you how to turn your t-shirt design ideas into a revenue generating model that could literally free you … [Read More]
Heat Press Machines
Heat Press Machine 101
What is a Heat Press? A heat press is a machine that operates pretty much like an iron. A typical heat press machine can heat up to as much as 450 … [Read More]
News, Interviews and Podcasts About Starting a T-shirt Business
Start a T-shirt Business with ONE Shirt
In last weeks tutorial, I talked about making t-shirts with just ONE color. Today, it's about starting and building a business around just ONE t-shirt. Nothing says you need 12, 24 or 48 designs... I suggest you start with one because for most people, … [Read More...]
Top 3 Ways to Make Quality T-shirts For Your Tshirt Business
There's screen printing, plastisol transfers (screen printed transfers) and direct to garment (DTG) printing. Watch the video to find out which method could work best for your t-shirt business. Screen Printing Process for T-shirts Notice all of … [Read More...]
Can You Easily Sell 1,669 of These Dog T-shirts?
In the video below, I breakdown an easy and affordable way to get started in the t-shirt business ... even if you don't have a heat press. Play the video below to discover how we found an online store that easily sold over 1,600 t-shirts -- the results … [Read More...]
Girls Can't Start a T-shirt Business???????
Gretchen Cawthon was tired of being told "Girls Can't" so she started a t-shirt business to empower girls! Her company is Girls Can't What and she designs shirts that show Girls Can! Check out the video interview below she did with Shelia Butler of … [Read More...]
College Student's Political T-Shirt Causes Controversy
Amid town hall meetings, tea parties, and controversial activists, one area college student stands apart. Her name is Ashleigh Kenny and she's created a t-shirt that's causing quite a stir, not only in Valdosta, but across the nation. Eyewitness News … [Read More...]
17 Year Old Starts T-shirt Business Out of Garage and Meets the President
Alrighty folks... This young kid starts his own t-shirt line right out of his garage using a t-shirt heat transfer press. Not only that, he enters the National Young Entrepreneur Competition and wins it! The cash prize was $10,000.00 and a trip to the … [Read More...]

subset: commoncrawl


text:
A fiber optic saturable absorber for processing optical signals comprises an optical fiber from which a portion of the cladding is removed to form a facing surface. A light-absorbing substance having non-linear light-absorbing characteristics is applied to the facing surface such that a portion of the optical signal energy is transferred from the fiber to the substance where it is absorbed. The device selectively attenuates the optical signal and noise, and can be used to reduce pulse waveform distortion caused by pulse broadening and by amplification of system noise.
1. A fiber optic saturable absorber, for processing an input optical signal having at least two optical signal intensity levels within a range of optical intensity levels, comprising:
an optical fiber having a core and a cladding, the cladding forming a surface at a selected location on the fiber, which is in close proximity to the core for exposing the evanescent field of said input optical signal at said selected location; and
a light-absorbing substance applied to the surface at said selected location on the fiber, said light-absorbing substance comprising a plurality of atoms having first and second energy levels, said first energy level being a stable energy level and said second energy level being an unstable energy level, said atoms absorbing light energy and transitioning from said first energy level to said second energy level, said atoms thereafter transitioning back to said first energy level without emitting radiation, the amount of light energy absorbable by said plurality of atoms and causing transitions to said second energy level determined by the concentration of said atoms in said substance, said concentration selected for said range of input optical intensities so that said light-absorbing substance has nonlinear light-absorbing characteristics for said range of input optical intensities thereby causing selective attenuation of said input optical signal propagating within said optical fiber, such that the percentage of absorption of said input optical signal by said light-absorbing substance decreases as the intensity of said input optical signal increases.
2. The fiber optic saturable absorber as defined in claim 1, wherein the surface at the selected location on the optical fiber is formed on one side only of said fiber to provide a facing surface at which the evanescent field of said input optical signal within the fiber is exposed to said light-absorbing substance.
3. The fiber optic saturable absorber as defined in claim 2, wherein the light-absorbing substance comprises a solution of an index-matching material and a saturable light-absorbing dye.
4. The fiber optic saturable absorber as defined in claim 3, wherein the light-absorbing substance has characteristics such that the percentage of said input optical signal absorbed is substantially constant below a threshold signal intensity, and wherein the percentage of said input optical signal absorbed decreases as the signal intensity increases above the threshold level.
5. The fiber optic saturable absorber as defined in claim 1, wherein the percentage of said input optical signal absorbed by the substance decreases nonlinearly as the intensity of the input optical signal increases.
6. A method of processing an input optical signal having first and second different signal levels, comprising the steps of:
propagating said input optical signal through a single, continuous, uninterrupted length of optical fiber; and
selectively attenuating the intensity of said first and second signal levels at a selected location along said single, continuous, uninterrupted length of optical fiber so that the difference between said first and second signal levels, expressed as a percentage of one of said signal levels, is increased.
7. The method of processing an input optical signal as defined in claim 6, wherein said step of selectively attenuating the intensity of said first and second signal levels comprises removing a percentage of the intensity of said signal from said optical fiber, said percentage decreasing as the intensity of the signal increases.
8. The method of processing an input optical signal as defined in claim 7, wherein said percentage of intensity decreases nonlinearly as the intensity of the signal increases.
9. The method of processing an input optical signal as defined in claim 7, wherein said removing step comprises absorbing said percentage of intensity by applying a light-absorbing substance to said selected location.
10. The method of processing an input optical signal as defined in claim 9, additionally comprising:
circulating said light-absorbing substance across a surface at said selected location on the fiber; and
controlling the temperature of said light-absorbing substance to maintain a substantially constant temperature.
11. The method of claim 6, wherein said first and second signal levels correspond to first and second data information states.
12. A method of manufacturing a selective attenuator for an optical fiber data system, comprising the steps of:
providing an optical fiber having a surface which exposes the evanescent field of an optical signal propagating therethrough; and
applying a light-absorbing substance having nonlinear light-absorbing characteristics to the surface to cause absorption of a percentage of the optical energy from said evanescent field, said substance being a saturable absorbing material selected to attenuate said optical signal such that said percentage decreases as the intensity of said optical energy in said optical signal increases.
13. The method of manufacturing a selective attenuator as defined in claim 12 further including the step of combining an index-matching material with a light-absorbing dye to form the light-absorbing substance.
14. In an optical fiber system having an input optical signal propagating therein, said input optical signal having optical energy at first and second signal levels corresponding to first and second data information states, said first signal level lower than said second signal level, said input optical signal having a shape defined (1) by the percentage difference in said first and second signal levels, said percentage difference being the difference in said signal levels expressed as a percentage of one of said signal levels, and (2) by transitions between said first and second signal levels, wherein said percentage difference in said first and second signal levels decreases as said input optical signal propagates in said optical fiber system thereby causing said shape to change, a method of restoring the shape of said input optical signal comprising the steps of:
exposing a portion of the optical energy of said input optical signal to a light-absorbing material having nonlinear light-absorbing characteristics; and
absorbing a percentage of the optical energy of said input optical signal, the percentage of said optical energy absorbed being relatively greater for optical energy near said first signal level than for optical energy near said second signal level, so that said first signal level is decreased by a greater percentage than said second signal level and said percentage difference between said first and second signal levels is thereby increased.
The invention relates to the field of optical signal conditioners, and, specifically, to the art of attenuating optical signals using a saturable absorbing substance.
In recent years, a number of optical fiber systems have been disclosed which replace mechanical and electrical devices. For instance, optical fiber gyroscopes have been developed which provide an accuracy and range comparable to mechanical systems, without requiring the use of moving parts. Optical fiber systems have been used extensively in the field of communications, and are being used increasingly in the field of computations.
One particular use of an optical fiber system is in splice-free optical fiber recirculating memory/delay lines such as described in U.S. Pat. No. 4,373,270, issued on Sept. 25, 1984 and as described in U.S. Pat. No. 3,479,701, issued on Oct. 30, 1984; both of which are incorporated herein by reference. The referenced devices utilize passive optical fiber components to achieve data recirculation within an optical fiber loop. In order to achieve a larger number of recirculations, an amplifier can be inserted into the fiber loop to maintain the recirculating pulses at a usable level. Fiber dispersion and the use of active devices to amplify the signal pulses within the loop can cause distortion of the pulses and can also result in extraneous noise signals, thus resulting in the possible loss of recirculating data. Additionally, amplification of the recirculating signal can result in loss of data by causing the leading and trailing edges of the pulse signal to increase in amplitude, thus broadening the pulse width and therefore reducing the maximum data rate of the recirculating device. Accordingly, there is a need in the art for a signal conditioner which restores the pulse shape after amplification and fiber dispersion and which reduces amplified noise.
The present invention comprises an in-line fiber optic saturable absorber, which accomplishes nonlinear filtering of signals and noise in an optical fiber system. This saturable absorbing device comprises an optical fiber having a core and a cladding. A portion of the cladding is removed to form a facing surface on the fiber. A light-absorbing substance, having nonlinear light-absorbing characteristics, such as a saturable absorbing dye, is applied to the facing surface. A sufficient amount of cladding is removed from the fiber such that the evanescent field of an optical signal propagating through the fiber penetrates the facing surface for absorbtion by the light-absorbing dye. The absorbing characteristics of the dye are such that the percentage of absorption of the optical signal decreases as the intensity of the optical signal increases.
At low optical signal intensities, a significant fraction of the light signal passing through the optical fiber in the area of the saturable dye is absorbed by the dye. At higher signal intensities, a smaller percentage of the optical signal is absorbed. Since the leading and trailing edges of a data pulse signal which has been broadened by amplification and fiber dispersion have substantially lower signal levels than the data pulse, the absorbing dye will absorb a much larger fraction of the leading and trailing edges than of the data pulse itself. Thus, through selective attenuation, the width of the data pulse will be reduced toward its original width. Similarly, the above-described nonlinear filter characteristics of the saturable absorber cause the low-level noise between data pulses to be attenuated relatively more than the high-level data pulses.
FIG. 1 is an elevation view of the saturable absorber of the invention, in partial cross-section, showing the fiber and fiber holder, and schematically illustrating the absorbing dye solution applied thereto;
FIG. 2 is a perspective view of the fiber and fiber holder of the saturable absorber;
FIG. 3 is a partial cross-sectional view of the fiber and holder of FIG. 2 taken along the line 3--3 in FIG. 2;
FIG. 4 is a graph of oil drop test results, utilized to determine the amount of cladding to remove;
FIG. 5 shows the absorber of FIG. 3 with the addition of a recirculation pump and temperature control unit;
FIG. 6 illustrates the energy levels of a typical atom of an exemplary solute such as a saturable absorbing dye;
FIG. 7 is a graph of percentage of transmission through the saturable absorber as a function of the relative signal intensity of the optical data signal;
FIG. 8 illustrates the use of the present invention in a recirculating memory device;
FIG. 9 represents an exemplary ideal data signal output from the optical fiber recirculating memory device of FIG. 8; and
FIG. 10 illustrates an exemplary non-ideal data signal output from the optical fiber recirculating memory device of FIG. 8, illustrating the effect of noise and distortion on the data signal and the effect of the present invention in attenuating the noise and distortion.
Referring to FIG. 1, the preferred embodiment of the invention comprises an optical fiber waveguide 20, mechanically affixed to a fiber holder 22. The fiber 20 comprises a commercially available fiber of quartz glass which is doped to have a central core (not shown) and an outer cladding. By way of example, the diameter of the cladding may be on the order of 100 micrometers, and the core may have a diameter of about 5 to 10 micrometers. The fiber 20 is preferably made of a relatively pure silica (SiO2), with a core of relatively large refractive index surrounded by a cladding of relatively low refractive index. It is desirable to use a fiber 20 with a very low concentration of impurities, such as the transition elements iron and copper, as well as very low concentrations of other impurities such as OH- ions. Such impurities within the structure of the fiber can cause absorption and scattering losses.
A portion of the cladding of the fiber 20 is removed by polishing, or other suitable means, to form a facing surface 28 which is coplanar with the upper surface 26 of the holder 22. The facing surface 26 is covered with a solution 30 of a solute such as a saturable absorbing dye dissolved in a suitable index-matched solvent. By way of specific example, the solvent may be 1,2 dichloroethane and the dye may be Eastman No. 9860.
Referring to FIG. 2, in the preferred embodiment, the fiber holder 22 has an upper surface 26 in which a longitudinal, arcuate groove 24 is formed. The groove 24 has a radius of curvature of approximately 25 centimeters, which is much larger than the diameter of the fiber 20. The width of the groove 24 is slightly larger than the diameter of the fiber 20. The depth of the groove 24 varies from a minimum at the center of the block 22 to a maximum at the edges of the block 22. When the fiber 20 is mounted in the groove 24, the fiber 20 conforms to a path defined by the bottom surface of the groove 24, and the fiber 20 gradually converges with the surface 26 toward the center of the block 22 and diverges from the surface 26 toward the edges of the block 22. This eliminates any sharp bends or abrupt curves in the direction of the fiber 20 which could cause power loss through mode perturbation. In the preferred embodiment illustrated, the groove 24 is shown as rectangular in cross-section, but it will be understood that the groove 24 could have any other suitable cross-section, such as a U-shape or a V-shape. Techniques for forming the groove 24 are well known in the art.
The fiber 20 is affixed, e.g. by a suitable adhesive, in the groove 24 of the block 22. The block 22 and the adhesive are preferably of the same approximate coefficient of thermal expansion and the same approximate hardness as the fiber 20.
In the preferred embodiment, the fiber 20 and holder 22, as described above, comprise one half of a directional coupler to which the solution 30 is applied. The structure of the coupler half is described in detail in U.S. Pat. No. 4,493,528, issued on Jan. 15, 1985; and in U.S. Pat. No. 4,536,058, issued on Aug. 20, 1985; both of which are incorporated herein by reference. A brief description of the construction of a coupler half follows.
It can be seen from FIG. 3 that a portion 40 of the cladding 36 is removed to form the facing surface 28 as previously discussed in connection with FIG. 2. This portion of cladding 40 can be removed by any method which can precisely control the amount of cladding removed; however, it is important that precise control over the amount of cladding removed be maintained so that the core 34 is not exposed. Typically, the removal is accomplished by simultaneously polishing the fiber 20 with the entire upper surface 26 until the required portion 40 of cladding 36 has been removed.
The polishing of the surface 16 forms the oval, planar facing surface 28 on the fiber 20. The facing surface 28 can be brought closer to the core 34 by continued polishing of the upper surface 26 until a sufficient amount of material of the upper surface 16 and a corresponding amount of material in the cladding 36 has been removed. However, once too much material has been removed, (i.e, the facing surface 28 reaches the core 34), it is not possible to add cladding material back onto the fiber 20. Thus, a technique is required for terminating the polishing prior to that occurrence.
The dashed lines 38 in FIG. 3 represent the relative electric field distribution 38 of a light wave traveling in the fiber 10 and its relationship to the core 34, and the cladding 36. In the embodiment shown, the diameter of the core 34 is selected to support only one mode in the wavelength range of the optical signal throughout the fiber 20 and is typically less than te nmicrometers. The mathematical derivation of the electromagnetic field distribution 38 involves solutions of Maxwell's equations. Many variables are involved and no attempt will be made here to characterize the field distribution, as this derivation is well known in the art.
It can be seen in FIG. 3 that the evanescent field 38 outside the diameter of the core 34 decreases rapidly with distance into the cladding. Enough cladding material 40 must be removed such that the evanescent field portion 44 extends substantially beyond the facing surface 28 of the fiber 20. To determine how much cladding material should be removed to accomplish this result, an "oil drop" test is used.
Referring to FIG. 4, there is shown a series of curves 80, 82, 84, 86, each of which represents a different amount of removal of the cladding portion 40 (FIG. 3), i.e., a different closeness of the surface 28 to the core 34. The curves plot radiation losses at the surface 28 as a function of the refractive index of an ordinary index matching oil 87, placed on the facing surface 28, as shown in FIG. 3 in phantom lines. Such losses are indicative of the extent of penetration of the evanescent field 44 (FIG. 3). FIG. 4 was obtained by measuring the amount of optical output power (Pout) from the fiber 20 for a given amount of input power when oil drops having different indices of refraction are placed on the facing surface 28 as compared to the optical power transmitted in the absence of the oil (Pmax). For example, if the signal output without the oil (i.e., Pmax) is 100 milliwatts, the 3-db point on the loss scale represents a loss of approximately 50 milliwatts at the facing surface (i.e., lossdb =-10 log10 (Pout /Pmax)=-10log10 (50 milliwatts/100 milliwatts)=-10log10 (0.5)=3 dB). Similarly, the 20-dB point represents a loss of approximately 99 milliwatts (i.e., lossdB =10 log10 (1 milliwattt/100 milliwatts)=-10 log10 (0.01)=20 dB). The test results illustrated in FIG. 4 were obtained using a Corning Glass fiber with a core having a diamter of six micrometers and a refractive index of about 1.46. The radius of curvature of the half coupler groove 24 is 25 centimeters. The wave length of the light was 1.064 micrometers and the input power was 0.7 milliwatts. The index of refraction is varied by using oils of different refractive indexes.
The curve 80 shows the radiation losses at the face 28 with a small amount of the cladding portion 40 removed. When the index of the oil is slightly below the index of the core, then complete internal reflection with little or no loss will occur. This corresponds to the region on the horizontal axis between the index 1.42 and the index 1.46 designated by the reference numeral 83 in FIG. 4. As the index of the oil approaches the index of the core, no loss occurs until the index of the oil approximately reaches the indx of the core. This is illustrated by the abrupt upward transition line 88 around the index value 1.46 in FIG. 4. The curve 80 illustrates that, if a small amount of cladding is removed, the losses for oil index values of 1.46 and higher are less than approximately 3 dB. The losses peak at index values slightly greater than 1.46, and then become slightly less for higher index values. These losses result from the penetration of the evanescent field 44 (FIG. 3) past the facing surface 28 resulting in radiation loss. Since the curve 80 represents a removed portion 40 of the cladding which is small, the evanescent portion 44 (FIG. 3) of the electromagnetic field distribution 38 extends out of the cladding by only a small amount, and the losses are correspondingly small.
The curve 82 in FIG. 4 represents losses experienced when approximately one more micrometer of cladding 40 is removed. This corresponds to a facing surface 28 (FIG. 3) which is closer to the core 34 toward the peak of the electromagnetic field distribution 38. It will be recalled from FIG. 3 that a movement of the facing surface 28 toward the core 34 results in more evanescent field portion outside the facing surface 28 because the strength of the evanescent field 44 protruding past the facing surface 28 increases as the facing surface 28 gets closer to the core 34. As the index of the oil on the facing surface 28 is increased until it matches or slightly exceeds the core index, the losses increase to approximately 12 or 13 dB, as shown by the curve 82 in FIG. 4. For oil with higher index values, the losses decrease to about 5 dB for an oil of index 1.7. In the present invention, a substantial portion 44 of the electromagnetic field distribution 38 (FIG. 3) should preferably extend past the facing surface 28, so as to provide adequate absorption when the dye solution 30 is applied to the facing surface 28. By way of example, sufficient cladding may be removed such that the facing surface 28 is close enough to the core to result in a loss of between 40 and 65 dB when the oil index is approximately equal to the core index. The curves 84 and 86 in FIG. 4 satisfy this requirement and correspond to positions for the facing surface 28 relative to the core 34 for adequate absorption when a dye solution 30 is placed in contact with the facing surface 28.
The curves 80, 82, and 84 correspond to one micrometer increments of removal of the cladding portion 40. However, it is apparent from FIG. 4 that for the curve 84, the losses at the transition line 88 for an oil index of slightly above 1.46 are 45 dB, which exceeds the loss found on the curve 82 at the line 88 by more than 30 dB for an oil of substantially the same index. This nonlinearity results from the bell shaped distribution of the electric field magnitude illustrated by the curve 38 in FIG. 3. That is, as the facing surface 28 approaches closer to the core 34 in equal increments of distance, the amount of loss at the surface 18 increases by a substantially greater margin for each additional increment.
No absolute value for the distance of the facing surface 28 from the core 34 can be specified, because the amount of evanescent field 44 extending past the facing surface 28 depends upon the wave length of the light in the core 34 as well as the core diameter and the relative indexes of the core 34 and cladding 36. For example, the amount of penetration of the evanescent field 44 into the cladding 36 generally becomes greater as the diameter of the core 34 becomes smaller. Monomode fibers are preferably for the absorption device of the present invention because they have a greater percentage of the electromagnetic field 38 in the cladding 36, as compared to multimode fibers.
As indicated above, a relatively high transmission loss on the order of 40 to 65 dB, as determined by the oil drop test, is desirable, because it indicates that a relatively substantial penetration of the evanescent field 44 past the facing survace 28 has occurred. However, if too much cladding is removed such that the facing surface 28 touches or penetrates the outer perimeter of the core 34, very high and unacceptable losses will result, due to mode perturbation. Thus, care should be taken not to polish so far that the facing surface 28 comes into contact with the core 34.
As shown in FIGS. 1, 2, and 3, the facing surface 28 is formed on one side of the fiber 20. Thus, the saturable absorber described herein can be formed on a single, congtinuous, uninterrupted length of optical fiber which requires no splices or connections.
After the proper amount of cladding has been removed--e.g. so that only about one micrometer of cladding covers the fiber core at the center of the facing surface 28 as shown in FIG. 3--the block 22 and fiber 20 are cleaned, to remove the oil and any contaminants, and the facing surface 28 is covered with the solution 30 (FIG. 1) of a saturable absorbing material such as dye, e.g. Eastman No. 9860. As discussed above, the dye is dissolved in a suitable index-matched solvent such as 1,2 dichloroethane. The Eastman dye has an absorption peak at 1.051 micrometers. Preferably, the dye should not appreciably change the refractive index of the solvent which, in the embodiment shown, is approximately 1.444. Since the refractive index of the fiber core 34 of the preferred embodiment is typically 1.454, the optical signal is well guided through the core 34 in the area of the facing surface 28, yet the evanescent field 44 of the light in the fiber core 34 extends past the facing surface 28, as illustrated in FIG. 3.
As shown in FIG. 5, the dye 30 may be contained by means of a dye cavity 112, mounted to the upper surface 26 of the fiber holder 22. The dye cavity 112 comprises a box-like structure which, by way of example, can be formed of glass or other suitable material, which is sealed to the surface 26 and which retains the dye solution 30 in contact with the facing surface 28. In constructing the half coupler which forms the base for the device, the groove 24 should preferably be filled with a suitable adhesive 32, such as epoxy, such that the upper surface 26 is uniformly flat, as this facilitates sealing the dye cavity 112 to the upper surface 26.
The dye cavity 112 may be interconnected by tubing with a recirculation pump and temperature control unit 110. This recirculation pump and temperature control unit 110 is conventional, and any apparatus which is capable of circulating the dye solution 30 to and from the facing surface 28 on the half coupler 22 will be adequate.
The recirculation pump and temperature control unit 110 serves at least two beneficial purposes. One purpose is to maintain the refractive index of the dye at a constant value. The absorption process causes the dye solution 30 to absorb energy from the light, thus causing the temperature to gradually rise. As the temperature rises, the refractive index of the dye solution 30 decreases and reduces the penetration of the evanescent field 44 of the optical signal into the dye solution. Since less light energy extends into the dye solution 30 less light energy is absorbed and the transmission increases. The recirculation pump and temperature control unit 110 tends to maintain the temperature of the dye solution 30 at a relatively constant level, thus avoiding the change in refractive index and concomitant change in attenuation.
The other purpose of the recirculation pump and temperature control unit 110 is to replenish the dye molecules in the solution 30. The light-absorbing dye in the dye solution 30 is typically a large organic molecule which may break down after a finite number of excitations by light energy. After a molecule has broken down, it can no longer absorb light energy. Thus, if the same dye solution 30 is allowed to remain in contact with the facing surface 28, the dye solution 30 would quickly lose its light-absorbing characteristics.
The recirculating pump and temperature control unit 110 typically has a dye solution reservoir (not shown) which has a capacity much greater than the capacity of the dye cavity 112. The dye solution 30 from the dye cavity 112 is constantly returned to the reservoir in the recirculating pump and temperature control unit 110 where the dye molecules which have broken down are mixed with usable molecules. Because of the large capacity of the reservoir, the concentration of the unusable dye molecules remains insignificantly small. Thus, the light-absorbing characteristics of the dye solution 30 remain substantially constant. The usable lifetime of the dye solution 30, of course, depends upon the frequency, duty cycle, and intensity of optical pulses propagating through the device and upon the size of the reservoir.
FIG. 6 is a simplified illustration of the energy states of typical atoms in the dye. With no light impinging on the dye, substantially all of the atoms in the dye solution are found in the lowest energy levels indicated as S0. When an atom (not shown) in state S0 absorbs light energy (illustrated by the reference numeral 104), its energy level will make the transition 100 from state S0 to state S1. After the relaxation time of the dye, (e.g., 9.1�10-12 seconds for Eastman No. 9860), the atom of the dye will exit the excited state, S1, and make a nonradiative transition 102 back to the lower energy state, S0. The atom will then be able to absorb further light energy.
For any concentration of dye, only a finite number of atoms will be available to absorb light energy, namely those atoms in the low energy state, S0. As the intensity of the impinging light increases, the atoms spend a larger percentage of their time in the higher energy levels, S1. Thus, there are less atoms in the lower energy states, S0, to absorb further light energy. Thus, as the intensity of the light increases, a decreasing percentage of the light is absorbed. Therefore, the percentage transmission of the light signal in the fiber increases as the signal intensity increases.
The percentage of light absorbed at low signal intensities is determined by the concentration of the dye in the solution 30. For example, the concentration may be adjusted such that at low signal intensities, the percentage of absorption is approximately 50 percent of the signal energy. The remaining 50 percent of the signal energy continues to pass through the fiber 20 (FIG. 3). As the relative signal intensity increases, the percent of absorption decreases due to saturation of the atoms in the dye, as explained above. Thus, as the relative signal intensity increases, the percentage of transmission also increases.
The foregoing is illustrated in FIG. 7 which shows the percentage of transmission as a function of relative (or normalized) signal intensity for an exemplary dye solution. By way of example, if the maximum signal intensity is 100 watts and has a normalized value of 1.0, a relative signal intensity of 0.2 would correspond to a signal intensity of 20 watts. The relative signal intensity is plotted on a logarithmic scale to more clearly illustrate that at low relative signal intensities (e.g., below 0.01), the percentage of absorption in an examplary device is substantially constant (e.g., approximately 50 percent). As the relative signal intensity approaches a normalized value of 1.0, the percentage of transmission increases (e.g., approaches approximately 80 percent). As indicated by FIG. 7, the percentage of transmission is a nonlinear function of the relative signal intensity, thus providing the desired nonlinear attenuating characteristics.
At low signal intensities (i.e., below one percent of the maximum relative intensity), the absorption characteristics of the light-absorbing dye remain substantially constant. Thus, for the example presented above (i.e., a maximum intensity of 100 watts), the absorption at intensities of one watt or less is approximately 50 percent. When the signal intensity begins increasing above one watt, the percent of absorption begins decreasing and, thus, the percent of transmission increases as illustrated in FIG. 7. As will be seen below, the noise levels of interest are typically less than one percent of the data signal intensity and are therefore attenuated by 50 percent as compared to only 20 percent attenuation for the higher level data signal.
An examplary use for the saturable absorber of the present invention is illustrated in FIG. 8. The absorber 1 is formed on a loop 14 of a recirculating memory device such as that described in U.S. Pat. No. 4,479,701, issued on Oct. 30, 1984, which is incorporated herein by reference. The loop 14 also has an amplifier 3 formed on the loop. The amplifier 3 may be a fiber optic amplifier such as is described in U.S. Pat. No. 4,546,476, issued on Oct. 8, 1985, which is also incorporated by reference. An optical signal 200, e.g. in the form of a pulse, enters the recirculating memory device through the input end of the fiber 12. An optical coupler 5 having a coupling ratio of 95 percent couples the input portion of the fiber 12 to the loop 14, and discards approximately 95 percent of the input light 200 as discard signal 104. The remaining 5 percent of the input light continues in fiber 12 as signal 202 to coupler 7, which couples the loop 14 and the output portion of the fiber 12. Ninety-five percent of signal 202 is coupled by the coupler 7 to the loop 14 as signal 208. The remaining 5 percent is output at the output end of the device as signal 206. The signal 208 propagates through the loop 14, then passes through the amplifier 3, where it emerges as the signal 210. This signal 210 then passes through the absorber 1, where it emerges as the signal 212, for propagation to the coupler 5. Ninety-five percent of signal 212 is coupled by coupler 5 from the loop 14 to the fiber 12 to provide the signal 202. Five percent of signal 202 is output as signal 206 and 95 percent returns to loop 14 as signal 208. Thus, the light makes multiple recirculations through the loop 14 to provide multiple signals 206 at the output of the memory device.
The signals 206 at the output will be a series of pulses identical to the input pulse 200. However, unless amplified by the amplifer 3, the signal 206 will be degraded with time, due to light lost at the couplers 5, 7 and attenuation in the loop 14, and will thus eventually become too small to be usable. In order to increase the number of usable signals, amplifer 3 advantageously amplifies the signal 208 to provide compensation for the attenuation of the loop and for the 5 percent of the signal lost in the coupler 5 and the 5 percent output from the coupler 7 during each recirculation of light in the loop. However, the amplifier 3 may cause the introduction of noise and degradation of the pulse shape, as discussed below in reference to FIGS. 9 and 10.
FIG. 9 illustrates an exemplary ideal pulse train in a recirculating memory device. Pulses 300, 302, 304 are exemplary data pulses having a Gaussian energy distribution. As shown for the pulse 302, approximately 68 percent of the light energy is between the points a and a', approximately 95 percent of the light energy is between points b and b', and over 99 percent of the light energy is between points c and c'. The zero signals 306, 308 between the data pulses 300, 302, 304 represent ideal zero levels having no light energy. Thus, a device connected to the output of an ideal recirculating memory device having the signals illustrated in FIG. 9 would receive clearly distinguishable high and low energy levels.
FIG. 10 illustrates non-ideal data pulses 300', 302', 304' corresponding to data pulses 300, 302, 304 of FIG. 9. (Data pulses 300, 302, 304 are shown in dashed lines for comparison.) These non-ideal data pulses 300', 302' and 304' are distorted relative to the ideal pulses 300, 302 and 304, respectively. Such distortion may be caused by fiber dispersion or during amplification of the pulses by the amplifier 3 (FIG. 8). As shown, the non-ideal data pulse 302' contains an increased percentage of light energy in the leading portions 310 and trailing portions 312 (i.e., before b and after b'), relative to that of the ideal pulse 302. Although exaggerated in FIG. 10 for clarity, the intensity of pulse 302' before c and after c' is typically less than one percent of the intensity at the center 314 of pulse 302'; however, further amplification of pulse 302' (e.g. due to multiple circulations in the loop 14 of FIG. 8) will cause the intensity in the leading portion 310 and trailing portion 312 to increase. Thus, after continued recirculation and amplification, pulse 302' will broaden until it becomes unuseable for applications where the pulse width is important.
As also illustrated in FIG. 10, amplifier 3 may also cause the zero signals 306', 308' between the data pulses 300', 302', 304' to have a small amount of noise energy, e.g. due to imperfections in the fiber, the amplifier, or other components in the recirculating memory device. Although the noise is exaggerated in FIG. 10 for clarity, the noise levels are typically less than one percent of the maximum amplitude of the pulse 302'. However, if this noise is allowed to recirculate in the device, the noise energy in the zero signals 306', 308' will be amplified to increased levels which can be detected as signal levels.
The saturable absorber 1 (FIG. 8) of the present invention reduces the amplitude of the leading portion 310, trailing portion 312 and zero signals 306', 308' by selectively attenuating the signals. As explained before with respect to FIG. 7, the saturable absorber attenuates a higher percentage of low-level signals than high-level signals. In a typical recirculating memory device, the data pulse 302' could have a maximum intensity of several watts while the levels of the energy in the leading portion 310, trailing portion 312, and zero signals 306', 308' are much less than one watt. Thus, the leading portion 310, trailing portion 312 and zero portions 306', 308' will be attenuated by, for example, 50 percent while the center portion 314 is attenuated by, for example, only 20 percent (i.e., 80 percent of the center portion 314 is transmitted and 50 percent of the leading portion 310, trailing portion 312 and noise portions 316, 318 are transmitted). This is illustrated in FIG. 10 (in dashed lines) as data pulse 302" and zero signals 306", 308".
When data pulse 302" is again amplified, the center portion 314 typically will be restored to its original amplitude with the remaining portions of the pulse 302" amplified by the same percentage. However, since the leading portion 310, trailing portion 312, and zero signals 306", 308" have been attenuated by a larger percentage, they will be restored to amplitudes that are less than their respective amplitudes prior to attenuation. Thus, energy that occurs in the leading portion 310, trailing portion 312, or zero portions 306, 308 will be attenuated before it increases to an amplitude which causes distortion of the data signals.
The foregoing may be further illustrated in reference to the exemplary memory device of FIG. 7, by way of example. Assuming that absorber 1 attenuates high signals by 20 percent and low signals by 50 percent, the amplitude of the pulse 212 will be reduced by the absorber 1 to approximately 80 percent of the amplitude of pulse 210. The amplitude of the pulse 202 will be reduced by 5 percent from the amplitude of pulse 212, i.e., 77 percent of pulse 210; and the amplitude of pulse 208 will be reduced by 5 percent from the amplitude of pulse 202, i.e., to approximately 73 percent of pulse 210. The loop 14 will also have some losses which will further reduce the amplitude of the pulse entering the amplifier 3 to approximately 70 percent, for example. Thus, the amplifier will have an amplification factor of approximately 143 percent (i.e., 1.0/0.70) in order to restore the pulse 210 to the amplitude it had on the previous circulation through the loop. During the same circulation, noise energy will have been reduced to 50 percent of its amplitude by the absorber 1, and to 47 percent and 45 percent by couplers 5 and 7, respectively. With the amplification factor of the amplifier 3 set to 143 percent, the amplitude of the noise energy will be amplified to approximately 64 percent of its amplitude from the previous circulation through the loop. Thus, even with further amplification of the noise, the absorber 1 has substantially inhibited the gradual increase in noise energy which would occur if the absorber was not present.
Although the operation of the device has been described above with regard to a recirculating memory device, the same operational principals apply to the selective attenuation of noise and signal levels in other optical fiber systems where signal conditioning or reshaping is important, such as re-entrant gyroscopes, data systems, and communication systems.
Patent Citations
Non-Patent Citations
Referenced by
Legal Events
Original Image


text:
The station curenetly featuresProgressive Rock Music and a lot of Acoustic Guitar featuring the stations founder Guitarist David Doig. I am interested in growing the station so I am actively looking for eclectic artists to submit their music! Thanks!
Psychedelic Shamanism - Astral Ascension - Open the Minds Eye - Collective Consciousness - The Awakening Of Mankind - Humanity's Transmutational Genesis - The Shift of the Ages - Timewave Zero - Aztec Calender - 2012 - The Divine Plan - The Golden Dawn


text:
Featured car - TG's budget buy: Audi RS6
TG's budget buy: Audi RS6
Audi releases entry-level RS6. So affordable...Read more about the Audi RS6
Latest news
Bring it on, California
Turkish-designed USD GT-S takes the fight to Ferrari's GTRead about the Turkish delight
Rendered useless
Design student draws up futuristic Ferrari. Enzo turns in his graveRead more about the Husmen 699 GTO
Dark horse
Tweaked Ferrari 599 packs an eye-watering 673bhpRead about the Ferrari 599
New Ferrari steals the show
Front-engined 599 GTB sports car is styled by PininfarinaRead how the Ferrari 599 GTB stole the show in Detroit


text:
Home » Local News » Gov. Rick Snyder believes anti-bridge proposal, others could 'turn back progress' in Michigan
Posted on 06 September 2012. Tags: Antibridge, back, believes, could, Gov., Michigan, others, Progress, proposal, Rick, Snyder, turn
Gov. Rick Snyder wants Michigan voters to do their due dilligence by thoroughly researching ballot proposals he believes could "turn back progress" in the state.
Full News here – Detroit News
You agree to these terms & conditions when posting!English + no HTML please. We email you once your post is live.
English + no HTML please. We email you once your post is live.
Big City Informer | Politics Informer | Bank Informer | Contact Us | Terms Of Use | Submit Your Feed | Advertise With Us | Netventure24
© 2015 Detroit Informer.


text:
It took three tries.
RhodeIslandLady 56-60, F 2 Answers 0 May 26, 2014 in Community
Seems desperate.
Best Answer
Well you're persistent, I try once and move on..
Best Answer
Related Questions
Why or why not?Whateverrrrr 36-40, F 14 Answers 4 Jan 12, 2013 in Marriage
blowyamind 22-25, F 14 Answers 1 Dec 19, 2013 in Dating & Relationships
If you were a true friend wouldn't you tell them when they are being stupid? Or is this pointing out their flaws wrong?jlimones 26-30, F 6 Answers 0 Dec 30, 2013 in Friendship
I'm disgusted. My friend wouldn't clean her babies carseat so my mom did and it was covered in mold...And ya wonder why your baby stinks?
Paradoxalintent 36-40, F 5 Answers 0 Mar 18, 2014 in Community
Do y'all agree?
Wouldn't it suck if EP tried to force you to be friends with certain people like your parents did when you were young?
It's my birthday. My ex-fiancee hasn't tried to wish me a hbd? I expected she wouldn't, but why is my ego so hurt?
Have you ever tried to be a nice person to someone you didn't care for but your mouth just wouldn't cooperate ?:Dvickieprince 51-55, F 19 Answers 7 Sep 19, 2014 in Doing Good


text:
I hope this finds you all well and enjoying the Maine outdoors as I am. As I write this, our neighborhood fox continues to tend to her kits. She has moved away from the original den site to underneath an abandoned structure not far away. The Essex Street Marsh produced some opportunities to photograph an eastern …
Posts Tagged 'warbling vireo'
By Dave Small on May 16, 2012, at 1:42 p.m.


text:
Famous quotes by Ernesto "Che" Guevara:Sort:PopularA - Z
|...because it is the very nature of Imperialism to turn humans into beasts.
|Rate it:
|At the risk of sounding ridiculous, a true revolutionary is guided by great feelings of love.
|Rate it:
Share your thoughts on Ernesto "Che" Guevara's quotes with the community:
Quote of the Day
Would you like us to send you a FREE inspiring quote delivered to your inbox daily?
Use the citation below to add this author page to your bibliography:
"Ernesto "Che" Guevara Quotes." Quotes.net. STANDS4 LLC, 2015. Web. 29 May 2015. <http://www.quotes.net/authors/Ernesto "Che" Guevara>.


text:
Q. "Why the 2 different size threads for the drain attachments?"
A. Most sinks use a 1-1/2" drain system, but some larger sinks use a 2" drain system to expedite draining the volume of water from the sink.
Q. "What is the size of the overflow tube?"
A. The overflow tube is 1-1/4" OD chrome plated tubular brass.
We hope that we have helped you on this page with Fisher waste & drain products,
and thank you for helping to make PlumbingSupply.com® the most famous Internet plumbing supplier.
Is there something else that you are looking for?
OR - find plumbing supplies starting with: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z


text:
CHICAGO – The legacy of public housing is one of the strangest forces of karma in the City of Chicago. For example, sites that were once some of the roughest and most neglected housing for the poor now contain luxury condos. It is the people of those former hellholes that still remember the sorrowful history of what they once called home. The American Theater Company (ATC) have gathered these stories for the poignant and extraordinary "The Projects."
Frederick Koehler
In Purely Exploiting Gratuitous Violence, Paul W.S. Anderson's 'Death Race' Remake Kills All Comedic ValueSubmitted by HollywoodChicago.com on August 22, 2008 - 2:56pm
CHICAGO – While 2008's "Death Race" makes no secret about being a remake of 1975's "Death Race 2000" with David Carradine as the title character Frankenstein and Sylvester Stallone as his archrival Machine Gun Joe Viterbo, what's perhaps less obvious but still clear is how the film steals from others.


text:
Home » Gallery » Image
If you are the rightful owner of this image and are not credited, contact us.
Uploaded: 2010-12-20 Size: 2336 x 3504 pixels Views: 424
3 squared nathan walter jim disner object three squared matt king
Our mission is to inform jazz fans and alert them to local concerts, while improving audience attendance and building active jazz communities in nearly 250 cities worldwide.
© 2015 All About Jazz | Privacy Policy
Check your bulk or spam folder if you do not see a message in your inbox.