![]() |
Nuclide
Software Development Kit for id Technology (BETA)
|
Shaders are referring to GPU-oriented pieces of a program, performing shading and rendering related functions instead of letting the engine handle it.
In FTE you can specify a custom GLSL or HLSL shader using the program command inside a Material.
This is a primitive shader file. It includes the vertex and fragment program.
It will respond to the diffusemap only, which is loaded into the d_f variable. It can be modified from that point onwards. The commented out line will turn all of the output red.
Give it a try, or something!
When we pass program <shadername>
in our Material, the engine will load glsl/<shadername>.glsl
to handle the material for us.
The shader in question needs to define a main
function for both a vertex and a fragment shader. That's what the ifdef pre-processor chunks are for in the above example.
At some point in the main
function, we do have to set gl_Position
and gl_FragColor
respectively. Those can not be undefined.
You can not have separate files handle vertex/fragment programs.
While Nuclide sets up the viewport by itself, it still uses the regular compositing path provided by the engine. So like in most FTE games you can set the console variable r_postprocshader
to a material of your choice.
For example, if you define a material called postproc_test
with this text inside <gamedir>/scripts/postproc.shader
:
... and the shader it is referencing located at <gamedir>/glsl/postproc_dither.glsl
:
Followed by setting the post-processing material via set r_postprocshader postproc_test
in the console (SHIFT+ESC), you will now be processing all framebuffer output through the postproc_test
material and the postproc_dither
shader.
Of course, a Nuclide game might decide to override the ncView class in such a way to prevent FTE's own post-processing system from being used.
vid_reload
to reload your material/shader changes while in game! This will save you a lot of time iterating upon them.