]> git.mxchange.org Git - flightgear.git/commitdiff
Synchronize doc
authorfredb <fredb>
Mon, 29 Mar 2010 07:33:46 +0000 (07:33 +0000)
committerTim Moore <timoore33@gmail.com>
Tue, 30 Mar 2010 10:22:37 +0000 (12:22 +0200)
docs-mini/README.effects

index f6d2b3159eb69d7f4d8e765b44c78089c09cd88c..550163f29d9de3c4fa2eddf70c9f8b581e3964a8 100644 (file)
@@ -38,15 +38,15 @@ property - returns the boolean value of a property
 shader-language - returns the version of GLSL supported, or 0 if there is none.
 
 The proper way to test whether to enable a shader-based technique is:
 shader-language - returns the version of GLSL supported, or 0 if there is none.
 
 The proper way to test whether to enable a shader-based technique is:
-    <predicate>
-      <and>
-        <property>/sim/rendering/shader-effects</property>
-        <less-equal>
-          <value type="float">1.0</value>
-          <shader-language/>
-        </less-equal>
-      </and>
-    </predicate>
+       <predicate>
+         <and>
+               <property>/sim/rendering/shader-effects</property>
+               <less-equal>
+                 <value type="float">1.0</value>
+                 <shader-language/>
+               </less-equal>
+         </and>
+       </predicate>
 
 
 A technique can consist of several passes. A pass is basically an Open
 
 
 A technique can consist of several passes. A pass is basically an Open
@@ -60,11 +60,11 @@ can be based on a parameter in the parameters section of the
 effect. For example, effects that support transparent and opaque
 geometry could have as part of a technique:
 
 effect. For example, effects that support transparent and opaque
 geometry could have as part of a technique:
 
-      <blend>
-        <active><use>blend/active</use></active>
-        <source>src-alpha</source>
-        <destination>one-minus-src-alpha</destination>
-      </blend>
+         <blend>
+               <active><use>blend/active</use></active>
+               <source>src-alpha</source>
+               <destination>one-minus-src-alpha</destination>
+         </blend>
 
 So if the blend/active parameter is true blending will be activated
 using the usual blending equation; otherwise blending is disabled.
 
 So if the blend/active parameter is true blending will be activated
 using the usual blending equation; otherwise blending is disabled.
@@ -75,84 +75,87 @@ Values of Technique Attributes
 Values are assigned to technique properties in several ways:
 
        * They can appear directly in the techniques section as a
 Values are assigned to technique properties in several ways:
 
        * They can appear directly in the techniques section as a
-        constant. For example:
-      <uniform>
-        <name>ColorsTex</name>
-        <type>sampler-1d</type>
-        <value type="int">2</value>
-      </uniform>
-        * The name of a property in the parameters section can be
-        referenced using a "use" clause. For example, in the technique
-        section: 
-      <material>
-        <ambient><use>material/ambient</use></ambient>
-      </material>
-        Then, in the parameters section of the effect:
-  <parameters>
-    <material>
-      <ambient type="vec4d">
-        0.2 .2 0.2 1.0
-      </ambient>
-    </material>
-  </parameters>
-
-        It's worth pointing out that the "material" property in a
-        technique specifies part of OpenGL's state, whereas "material"
-        in the parameters section is just a name, part of a
-        hierarchical namespace.
-
-        * A property in the parameters section doesn't need to contain
-        a constant value; it can also contain a "use" property. Here
-        the value of the use clause is the name of a node in an
-        external property tree which will be used as the source of a
-        value. If the name begins with '/', the node is in
-        FlightGear's global property tree; otherwise, it is in a local
-        property tree, usually belonging to a model [NOT IMPLEMENTED
-        YET]. For example:
-  <parameters>
-    <chrome-light><use>/rendering/scene/chrome-light</use></chrome-light>
-  </parameters>
-        The type is determined by what is expected by the technique
-        attribute that will ultimately receive the value. [There is
-        no way to get vector values out of the main property system
-        yet; this will be fixed shortly.] Values that are declared
-        this way are dynamically updated if the property node
-        changes.
+               constant. For example:
+               <uniform>
+                       <name>ColorsTex</name>
+                       <type>sampler-1d</type>
+                       <value type="int">2</value>
+               </uniform>
+               * The name of a property in the parameters section can be
+               referenced using a "use" clause. For example, in the technique
+               section:
+               <material>
+                       <ambient><use>material/ambient</use></ambient>
+               </material>
+               Then, in the parameters section of the effect:
+               <parameters>
+                       <material>
+                               <ambient type="vec4d">0.2 0.2 0.2 1.0</ambient>
+                       </material>
+               </parameters>
+
+               It's worth pointing out that the "material" property in a
+               technique specifies part of OpenGL's state, whereas "material"
+               in the parameters section is just a name, part of a
+               hierarchical namespace.
+
+               * A property in the parameters section doesn't need to contain
+               a constant value; it can also contain a "use" property. Here
+               the value of the use clause is the name of a node in an
+               external property tree which will be used as the source of a
+               value. If the name begins with '/', the node is in
+               FlightGear's global property tree; otherwise, it is in a local
+               property tree, usually belonging to a model [NOT IMPLEMENTED
+               YET]. For example:
+               <parameters>
+                       <chrome-light><use>/rendering/scene/chrome-light</use></chrome-light>
+               </parameters>
+               The type is determined by what is expected by the technique
+               attribute that will ultimately receive the value. [There is
+               no way to get vector values out of the main property system
+               yet; this will be fixed shortly.] Values that are declared
+               this way are dynamically updated if the property node
+               changes.
 
 OpenGL Attributes
 -----------------
 
 The following attributes are currently implemented in techiques:
 alpha-test - children: active, comparison, reference
 
 OpenGL Attributes
 -----------------
 
 The following attributes are currently implemented in techiques:
 alpha-test - children: active, comparison, reference
-         Valid values for comparision:
-             never, less, equal, lequal, greater, notequal, gequal,
-             always 
+                Valid values for comparision:
+                        never, less, equal, lequal, greater, notequal, gequal,
+                        always 
 
 blend - children: active, source, destination, source-rgb,
 
 blend - children: active, source, destination, source-rgb,
-         source-alpha, destination-rgb, destination-alpha
-         Each operand can have the following values:
-             dst-alpha, dst-color, one, one-minus-dst-alpha,
-             one-minus-dst-color, one-minus-src-alpha,
-             one-minus-src-color, src-alpha, src-alpha-saturate,
-             src-color, constant-color, one-minus-constant-color,
-             constant-alpha, one-minus-constant-alpha, zero
+                source-alpha, destination-rgb, destination-alpha
+                Each operand can have the following values:
+                        dst-alpha, dst-color, one, one-minus-dst-alpha,
+                        one-minus-dst-color, one-minus-src-alpha,
+                        one-minus-src-color, src-alpha, src-alpha-saturate,
+                        src-color, constant-color, one-minus-constant-color,
+                        constant-alpha, one-minus-constant-alpha, zero
 
 cull-face - front, back, front-back
 
 lighting - true, false
 
 material - children: active, ambient, ambient-front, ambient-back, diffuse,
 
 cull-face - front, back, front-back
 
 lighting - true, false
 
 material - children: active, ambient, ambient-front, ambient-back, diffuse,
-         diffuse-front, diffuse-back, specular, specular-front,
-         specular-back, emissive, emissive-front, emissive-back, shininess,
-         shininess-front, shininess-back, color-mode
+                diffuse-front, diffuse-back, specular, specular-front,
+                specular-back, emissive, emissive-front, emissive-back, shininess,
+                shininess-front, shininess-back, color-mode
 
 polygon-mode - children: front, back
 
 polygon-mode - children: front, back
-        Valid values:
-              fill, line, point
+               Valid values:
+                         fill, line, point
 
 program
 
 program
-        vertex-shader
-        fragment-shader
+               vertex-shader
+               geometry-shader
+               fragment-shader
+               attribute
+               geometry-vertices-out: integer, max number of vertices emitted by geometry shader
+               geometry-input-type - points, lines, lines-adjacency, triangles, triangles-adjacency
+               geometry-output-type - points, line-strip, triangle-strip
 
 render-bin - (OSG) children: bin-number, bin-name
 
 
 render-bin - (OSG) children: bin-number, bin-name
 
@@ -162,25 +165,25 @@ shade-model - flat, smooth
 
 texture-unit - has several child properties:
        unit - The number of an OpenGL texture unit
 
 texture-unit - has several child properties:
        unit - The number of an OpenGL texture unit
-        type - This is either an OpenGL texture type or the name of a
-        builtin texture. Currently supported OpenGL types are 1d, 2d,
-        3d which have the following common parameters:
+               type - This is either an OpenGL texture type or the name of a
+               builtin texture. Currently supported OpenGL types are 1d, 2d,
+               3d which have the following common parameters:
                image (file name)
                image (file name)
-                filter
-                mag-filter
-                wrap-s
-                wrap-t
-                wrap-r
-        The following builtin types are supported:
-                white - 1 pixel white texture
-                noise - a 3d noise texture
-        environment
-                mode
-                color
+                       filter
+                       mag-filter
+                       wrap-s
+                       wrap-t
+                       wrap-r
+               The following built-in types are supported:
+                       white - 1 pixel white texture
+                       noise - a 3d noise texture
+               environment
+                       mode
+                       color
 uniform
 uniform
-        name
-        type - float, float-vec3, float-vec4, sampler-1d, sampler-2d,
-        sampler-3d
+               name
+               type - float, float-vec3, float-vec4, sampler-1d, sampler-2d,
+               sampler-3d
 
 vertex-program-two-side - true, false
 
 
 vertex-program-two-side - true, false
 
@@ -211,8 +214,49 @@ those parameters in its "techniques" section. The derived effect
 overrides any default values that might be in the base effect's
 parameters section.
 
 overrides any default values that might be in the base effect's
 parameters section.
 
+Generate
+--------
+
+Often shader effects need tangent vectors to work properly. These 
+tangent vectors, usually called tangent and binormal, are computed 
+on the CPU and given to the shader as vertex attributes. These 
+vectors are computed on demand on the geometry using the effect if 
+the 'generate' clause is present in the effect file. Exemple :
+
+       <generate>
+               <tangent type="int">6</tangent>
+               <binormal type="int">7</binormal>
+               <normal type="int">8</normal>
+       </generate>
+
+Valid subnodes of 'generate' are 'tangent', 'binormal' or 'normal'.
+The integer value of these subnode is the index of the attribute 
+that will hold the value of the vec3 vector.
+
+The generate clause is located under PropertyList in the xml file.
+
+In order to be available for the vertex shader, these data should 
+be bound to an attribute in the program clause, like this :
+
+       <program>
+               <vertex-shader>my_vertex_shader</vertex-shader>
+               <attribute>
+                       <name>my_tangent_attribute</name>
+                       <index>6</index>
+               </attribute>
+               <attribute>
+                       <name>my_binormal_attribute</name>
+                       <index>7</index>
+               </attribute>
+       </program>
+
+attribute names are whatever the shader use. The index is the one 
+declared in the 'generate' clause. So because generate/tangent has 
+value 6 and my_tangent_attribute has index 6, my_tangent_attribute 
+holds the tangent value for the vertex.
+
 Default Effects in Terrain Materials and Models
 Default Effects in Terrain Materials and Models
----------------------------------------
+-----------------------------------------------
 
 Effects for terrain work in this way: for each material type in
 materials.xml an effect is created that inherits from a single default
 
 Effects for terrain work in this way: for each material type in
 materials.xml an effect is created that inherits from a single default
@@ -233,12 +277,12 @@ variation possible from the OSG model loaders than from the terrain
 system. The parameters created are: 
 
        * material active, ambient, diffuse, specular, emissive,
 system. The parameters created are: 
 
        * material active, ambient, diffuse, specular, emissive,
-        shininess, color mode
-        * blend active, source, destination
-        * shade-model
-        * cull-face
-        * rendering-hint
-        * texture type, image, filter, wrap-s, wrap-t
+               shininess, color mode
+               * blend active, source, destination
+               * shade-model
+               * cull-face
+       * rendering-hint
+       * texture type, image, filter, wrap-s, wrap-t
 
 Specifying Custom Effects
 -------------------------
 
 Specifying Custom Effects
 -------------------------
@@ -260,3 +304,30 @@ Examples
 
 The Effects directory contains the effects definitions; look there for
 examples. Effects/crop.eff is a good example of a complex effect.
 
 The Effects directory contains the effects definitions; look there for
 examples. Effects/crop.eff is a good example of a complex effect.
+
+Application
+-----------
+
+To apply an effect to a model or part of a model use:
+
+       <effect>
+               <inherits-from>Effects/light-cone</inherits-from>
+               <object-name>Cone</object-name>
+       </effect>
+
+where <inherits-from> </inherits-from> contains the path to the effect you want to apply.
+The effect does not need the file extension.
+
+NOTE:
+
+Chrome, although now implemented as an effect, still retains the old method of application:
+
+       <animation>
+                       <type>shader</type>
+                       <shader>chrome</shader>
+                       <texture>glass_shader.png</texture>
+                       <object-name>windscreen</object-name>
+       </animation>
+
+in order to maintain backward compatibility.
+