Advanced lighting and material effects like reflection mapping and bump mapping are stored in effect files. Effect files (with the extension .fx) is a standard DirectX technology for storing render states, vertex shaders and pixel shaders into a single file. This technology makes it easier to share effects between applications. Effect files are also called shaders or simply FX.
BluffTitler comes with a collection of more than 70 effects, ready to use and specially designed for video titling.
From the Media menu, choose Change Effect.... For example if you want your text to be reflection mapped you choose Media > Change Effect... and select the file ReflectionMap.fx. Alternatively you can press the Change Effect... button on the tool window.
Every layer can have its own effect file. Some effects have been created with a specific layer in mind (for example the filter effects work best in the picture layer), but technically any effect can be applied to any layer. Feel free to experiment.
Choose Media > Change Effect... or press <F9> for more information about the effect of the active layer.
Some effects require a graphics card that supports Pixel Shader 2.0 or even 3.0. In the effect dialog (menu item Media > Change Effect...) you can find out if your graphics card can handle the effect of the active layer.
All modern graphics cards support shader version 3.0 so you don't have to worry when you buy a new computer.
Here is a list of older cards. Please consult the technical specs of your graphics card for the exact details.
|Graphics Card||Shader Model|
|NVIDIA GeForce 2||1.1|
|NVIDIA GeForce 3||1.1|
|NVIDIA GeForce 4||1.1|
|NVIDIA GeForce 5||2.0|
|NVIDIA GeForce 6||3.0|
|NVIDIA GeForce 7||3.0|
|NVIDIA GeForce 8||4.0|
|ATI Radeon 8500||1.1|
|ATI Radeon 9000||1.1|
|ATI Radeon 9600||2.0|
|ATI Radeon 9700||2.0|
|ATI Radeon 9800||2.0|
Some effects add new properties to a layer. For example the filters / blur.fx effect file adds the property FX Blur Factor that controls the amount of blur. Effect properties can be recognized by the FX prefix.
When you select an effect file in the camera layer, that effect will be used as a fullscreen post-processing effect. All filter effects can be used as post-processing effect.
Effects work in close cooperation with textures. For example the bump effect requires a bump texture.
For convenience BluffTitler associates texture filenames with effects. For example if you load a texture containing the word reflection (as in ReflectionMap_Silver.jpg) BluffTitler automatically loads the effect file ReflectionMap.fx.
|Part of the texture filename||Associated effect|
|reflection or spheremap||ReflectionMap.fx|
|cube and .dds||CubeMapDDS.fx|
|bump or normalmap||BumpMap.fx|
|gradientwipe or alphamagic||GradientWipe.fx|
These associations are always used when loading textures or effects with the buttons on the tool window, but can be switched off with the checkbox Try to keep textures and effect matched in the dialog that is displayed when you choose Media > Change Effect....
Some effects require 2 textures. This is called multi-texturing. You can set the textures in dialog that is displayed after choosing Media > Change Texture...
Any picture can be used as a colour map.
Colour maps can easily be created with a digital photo camera.
When you apply this texture to a text layer it looks like this.
You can load a texture with the menu item Media > Change Texture... or with the corresponding button on the tool window.
This is the same effect, only not lightened. Notice that the sides of the text are now as bright as the front.
You can load the Not_Lightened.fx effect with the menu item Media > Change Effect... or with the corresponding button on the tool window.
With this effect the text becomes a window through which you can see a 2D fullscreen textured background. Notice that the texture is always 2D, no matter how you rotate the text.
This is a multi-texture effect that combines 2 colour maps. The second texture (the alien) is rendered transparently on top of the first texture.
There's no button on the tool window to select the second texture, but you can do this by choosing Media > Change Texture....
Reflection mapping, also called environment mapping, is a powerful way to create reflection effects.
A correct sphere map looks like the picture on the left, but as long as you do not use sphere-like shapes you can use any picture you like as a sphere map.
This effect makes the object 100% reflective.
This example uses the texture file ReflectionMap_Silver.jpg.
This is the same effect, only rendered with additive blending.
Additive blending is used to simulate transparency or translucency.
This effect combines reflection mapping with lighting. Notice that the side of the text is darker than the front.
With the FX Lighting Factor property you can fine tune the effect from 100% reflected to 100% lightened.
This multi-texture effect combines reflection mapping with colour mapping. The colour map used is a photo of a wooden floor. This results in a nice shiny wooden surface!
You can select the 2 textures in the dialog that is displayed when choosing Media > Change Texture....
Sphere mapping is the easiest reflection mapping technique, but has some drawbacks that become noticeable when using round, sphere-like shapes. Cube mapping solves all those problems resulting in perfect reflections!
A cube map contains 6 square pictures representing the 6 sides of a cube. Technologies to create 360 degree photos include IPIX and Apple's QuickTime VR. You can use Bixorama to convert the 6 pictures into a single .DDS file.
This effect requires a cube map texture in the DirectX .DDS format.
This example uses the texture CubeMap.dds.
Bump mapping is a powerful technique that simulates rough or bumped surfaces.
This is how a bumpmap (normalmap) looks like. The surface normals are RGB encoded. For example the colour #88f means the vector (0,0,1) and represents a flat surface. The NVIDIA Photoshop plug-in can be used to create bump maps.
When you apply this bumpmap to a text layer it looks like this.
This example uses the file bumpmap_crusty.png.
This multi-texture effect combines colour mapping with bump mapping. The colours are taken from the first texture and the bumps from the second.
With the Specularity property of the text and picture layers you can adjust the reflective quality of the bumps. And with the Texture Scale property you can adjust the size of the bumps.
This multi-texture effect combines reflection mapping with bump mapping. The first texture is used as a reflection map and the second as a bumpmap.
A cartoon map looks like this. It is a horizontal gradient from dark (left) to bright (right).
Cartoon maps can easily be created by using the gradient tool of your paint program.
This is how a text looks like with the cartoon effect. Notice that the hard transitions from black to red to white correspond to the transitions in the texture.
This example uses the file cartoon_red.bmp.
With tonal art mapping (TAM), also known as realtime hatching, you can make your texts look very artistic.
BluffTitler uses 4 hatching levels. Level 1 (brightest) is rendered as white, the next 3 levels are RGB encoded. BluffTitler comes with 3 TAMs: dots, lines and crisscross.
This is how the result looks like.
This example uses the file tonalartmap_crisscross.png.
This multi-texture effect combines colour mapping with tonal art mapping. The first picture is used as the colour map (in this example a picture of Bix) and the second texture is used as a tonal art map.
This effect works amazingly well applied to the video capture layer.
The animation folder contains some animations effects including Bouncer, Bubbler, Jumper, WaveMorpher and this Mrs. Wiggle effect that turns your text into a breakdancer.
This effect has been inspired by the Mr. Wiggle effect from NVIDIA's FX Composer.
The Waving Flag effect turns a picture layer into a flag waving in the wind.
Filter effects are like the filters you find in paint programs. The big difference is that BluffTitler filter effects work in realtime and can be applied not only to static pictures, but also to videos, including live video coming from your webcam!
Most filter effects require a graphics card that supports pixel shader 2.0, some require 3.0. Select the effect file and press F9 for the details.
This effect limits the number of colours.
This effect replaces every pixel with the average of the surrounding pixels.
This effect turns your picture into a charcoal drawing.
This effect inverts all colours.
This effect blows up and deflates your picture in a constant loop.
This effect makes your texture look as if it is seen through frosted glass.
This shader renders a texture as vertical lines. The thickness of the line depends on the brightness.
This effect replaces every pixel with the median of the surrounding pixels. The median is the number dividing the higher half of a collection of samples from the lower half.
Adds a white border to your picture.
This effect combines colour mapping with cartoon mapping. It renders your picture in the colours of a cartoon map (second texture) that is using the brightness of a colour map (first texture) as the input.
This example uses the cartoon map cartoon_red.bmp.
The morphing folder contains effects can morph picture layers into mathematical shapes including cubes, cylinders, donuts and spheres. You can use the FX Morphing Stage property to animate the effect.
Effect files are text files. When you open an .fx file in a text editor (like Notepad) you can see the source code. If you have some coding experience and know your vector math you can adjust existing effects or create new ones.
Please note: you do not have to understand the following information in order to be able to USE effects. The following information is only meant for software engineers who would like to edit existing effects or create new ones from scratch.
BluffTitler uses the following vertex format:
|float3||NORMAL (not normalized)|
Meshes created with the Tubular Square, Tubular Round, Wireframe, Light Discs, Light Bulbs and Comb text layer effects abuse the tangent field to store special info: (bulb/bulbs, contour, contours)
The following parameters can be used:
|texture||MyTexture0||The first texture|
|texture||MyTexture1||The second texture|
|float4||ImageResolution0||The original image resolution of the first texture (width, height, depth)|
|float4||ImageResolution1||The original image resolution of the second texture (width, height, depth)|
|float4||TextureResolution0||The texture resolution of the first texture (width, height, depth)|
|float4||TextureResolution1||The texture resolution of the second texture (width, height, depth)|
|float4||ExportResolution||The resolution of the exported video file (width,height,view)|
|float4||UVBounds0||The minimum and maximum texture coordinates of the first texture (umin,umax,vmin,vmax)|
|float4||UVBounds1||The minimum and maximum texture coordinates of the second texture (umin,umax,vmin,vmax)|
|float4x4||World||The world matrix (transforming the model coordinates into the world coordinates).|
|float4x4||WorldA||The world matrix of the text layer without the Text Position and Text Rotation properties. You can use this matrix to find out the position of the letter in the text.|
|float4x4||WorldB||The world matrix of the text layer taking only the Text Position and Text Rotation properties into account. WorldA * WorldB = World.|
|float4x4||View||The view matrix (transforming the world coordinates into the camera coordinates).|
|float4x4||Projection||The projection matrix (transforming the 3D camera coordinates into the 2D screen coordinates).|
|float4x4||WorldView||The world * view matrix|
|float4x4||ViewProjection||The view * projection matrix|
|float4x4||WorldViewProjection||The world * view * projection matrix|
|float4x4||WorldInverseTranspose||Use this matrix to transform the normals|
|float4x4||WorldInverseTransposeA||Use this matrix to transform the normals|
|float4x4||WorldInverseTransposeB||Use this matrix to transform the normals|
|float4||AmbientCol||Ambient light colour * ambient material colour (r,g,b,a)|
|float4||DiffuseCol||Diffuse light colour * diffuse material colour (r,g,b,a)|
|float4||SpecularCol||Specular light colour * specular material colour (r,g,b,a)|
|float4||LightPos||The light position|
|float4||LightPosModelSpace||The light position in model space|
|float||Power||Specular reflection power|
|float4||EyePos||The eye (camera) position|
|float4||EyePosModelSpace||The eye (camera) position in model space|
|float||Time||The show time in seconds|
|float4||LocalTime||The local time (hours, minutes, seconds, milliseconds)|
|float4||TissueDensity||Used in the voxel layer to make the Tissue Density property available to the FX file|
|float4||CharacterIndex||This parameter is used by the text, picture, video and video capture layers (when using the Model Repeat prop) and contains the following information: (current character index, string length, unicode value current index, not used)|
|float||ParticleAge||This parameter is used by the particle layer and contains the age of the current particle in seconds|
The following variables are currently supported, but will be removed in a future version:
|float4 MyTextureResolution0||The original image resolution of the first texture (width, height, depth)|
|float4 MyTextureResolution1||The original image resolution of the second texture (width, height, depth)|
The Media > Change Effect... dialog displays the description variable:
string description = "bla bla bla";
An effect file can add 10 extra properties to a layer by using the following annotations:
|UIName||The property name as it wil appear in the GUI|
|UIMin||The minimum value|
|UIMax||The maximum value|
|UIDefault||The default value|
|UISliders||Number of sliders (1,2 or 3)|
|UIScale||Scale to GUI factor|
|UIInteger||Set to true for integer variables|
|UIWidget||Use 2 for a colour dialog, 0 for all other types of variables|
The 10 extra properties must be of the type float4 and have to be named Prop0 to Prop9. Here's an example of how you can define an extra property:
float4 Prop0 < string UIName="Max Iterations"; float UIMin=0; float UIMax=200; float3 UIDefault=float3(30,0,0); int UISliders=1; float UIScale=1; bool UIInteger=true; int UIWidget=0; > = float4(30,0,0,0);
If an effect has a second technique, this technique will be used for alpha channel rendering. This can be used for special alpha effects or for effects that have to set the ColorWriteEnable renderstate.
You can use ANSI and UTF-8
Most DirectX HLSL compiler bugs can be worked around by turning off all optimizations. When BluffTitler finds the variable optimization set to false, it turns off all optimizations. This should be a preprocessor directive, but since HLSL does not support this we have implemented it as follows:
The HLSL language specs can be found in the DirectX SDK that can be freely downloaded from Microsoft.
We prefer typing our effects in Notepad, but if you are looking for a development environment you could try the following applications: