To see usage sample, you should have a look at the tutorial videos posted on YouTube:
Sorry for the lack of information provided bellow.
Create a render plugin
For the ones confortable with .NET languages, you can try creating a new class library project, adding reference to IScenePlugin.dll which is in the root folder of Studio Post-Effect application and create a class which implement the IScene interface. Then
copy your dll to plugins folder and restart Studio Post-Effect.
Exploiting data of the project file
Hereafter is the description of Studio Post-Effect project file format.
The project file (.efxprj) is juste a simple xml file, and thus anybody can exploit its data, for exemple creating a converter that generates Ogre Engine compistor files from Studio Post-Effect composition workflows.
In this project file, you can see the "effects" markup, as well as the "textures" markup. These xml containers respectively contain the effects (pixel shaders) and the textures (image such as png, jpeg, etc...). The "file" attribute
contains the location of the file relative to the current project xml file.
The most important and interesting part is the "compositions" markup. This element contains all the workflows information. The child items are "composition" containers which are named from Studio Post-Effect application.
Each of these containers stores "items", which are workflow items such as pixel shaders, textures, inputs, output, etc... and "links", which are the links that connect the workflow elements and thus describes the way the composition behaves.
The "items" element stores only "item" child element, and "links" elements stores only "link" elements.
- "id" : This is unique identifier among the current composition, it is used in the "links" to reference the proper linked item,
- "x" : The location of the effect item on the workflow UI, along the x axis (not interesting for exporters/converters),
- "y" : The location of the effect item on the workflow UI, along the y axis (not interesting for exporters/converters),
- "texture" : If present, tells the item is a texture. It is identified by it's location path (unnamed element),
- "pass" : If present, tells the item is an effect. it is identified using the technique name and the pass name, concatenated using a dot character. With this type of item, there may be child elements named "param" which describes the
shader parameters involved in this pass (described later). Note that there are pass items with no parameters.
- "primitive" : If present, tells the item is a primitive elements of the application, such as inputs and output. The existing elements are :
- "scene" : Represents the standard scene render,
- "prevframe" : Represents the previous frame (useful for some effects such as motion blur),
- "result" : Represents the final render.
(an "item" element can have only one "texture", "pass" or "primitive" attribute.)
About the "param" elements (child elements of "item" elements representing a pass) :
- "name" : This is the name of the parameter as coded in the related pixel shader,
- "value" : This is the value, and there might be several values. Values are separated by a semicolon (';'). The value do not provide information about the parameter type,
- "min" : This represents the minimum values bound for Studio Post-Effect parameter box. (not interesting for exporters/converters),
- "max" : This represents the maximum values bound for Studio Post-Effect parameter box. (not interesting for exporters/converters).
- "out" : This is the identifier of the "item" used as first element of the link (the link is plugged to the 'output' of that "item"),
- "in" : This is the identifier of the "item" used as second element of the link (the remaining link bound is plugged to the 'input' of that "item"),
- "param" : If present, describes the full name of the input parameter in which the link is plugged.
So in the exemple above, let's describe the workflow textually to ensure the correspondance, in the same order as "link" elements appear :
"The scene is plugged to the first parameter (Horizontal.SourceTexture) of the horizontal blur effect",
"The horizontal blur effect is plugged to the first parameter (Vertical.SourceTexture) of the vertical blur effect",
"The vertical blur effect is plugged to the output (final render)",
"The pattern texture is plugged to the second parameter (Horizontal.PatternTexture) of the horizontal blur effect",
"The pattern texture is plugged to the second parameter (Vertical.PatternTexture) of the vertical blur effect",
As this description shows, the order of the "link" elements as no relationship with the workflow running sequence order.