Shader: Difference between revisions
mNo edit summary |
(Major re-write to clarify information, removed stub / pov templates) |
||
Line 1: | Line 1: | ||
==Introduction== | |||
A shader is a program that runs on the graphics hardware (GPU) rather than the CPU. There are two variations of shaders, [[Pixel shader]]s and [[Vertex shader]]s, each of which performs a different task in the rendering pipeline. Shaders form a replacement for the fixed function pipeline and allow developers greater control over rendering output by providing the ability to modify pixels and vertices dynamically. | |||
There are currently three main shader languages, [[HLSL]], [[CG]] and [http://en.wikipedia.org/wiki/GLSL GLSL]. The [[Source Engine]] uses [[HLSL]] based shaders, however [[CG]] is so similar that most [[CG]] shaders can be quickly and easily ported to [[HLSL]]. | |||
[[ | For information on authoring shaders for use in the [[Source Engine]], please see [[Authoring_Shaders|here]]. | ||
==Source Shader Types== | |||
[ | The [[Source Engine]] provides for two seperate forms of shaders, Postprocess and Per-Object, the majority of the effects and materials used within the [[Source Engine]] rely heavily on their [[Pixel shader]] components. | ||
===Postprocess=== | |||
A Postprocess shader is typically a [[Pixel shader]] that works on a quad rendered across the entire screen. The quad is textured with a copy of the frame buffer, the [[Pixel shader]] can than alter and modify the rendered output to create a variety of effects, such as basic colour modification to more advanced processes such as motion blur and bloom. | |||
The Source SDK provides an example of this form of shader in the sdk_postprocess files (<code>sdk_postprocess.cpp</code>, <code>sdk_postprocess_vs20.fxc</code>, and <code>sdk_postprocess_ps20.fxc</code>) | |||
== | ===Per-Object=== | ||
A Per-Object shader in the [[Source Engine]] is used on any object with the shader referenced in the relevant [[VMT]] file, such as a model or piece of brushwork. A Per-Object shader could be used to create a refractive material, modify a models vertices dynamically or other advanced rendering effects. | |||
The Source SDK provides an example of a Per-Object shader in the sdk_lightmap files ( <code>sdk_lightmap.cpp</code>, <code>sdk_lightmap_vs20.fxc</code>, and <code>sdk_lightmap_ps20.fxc</code>) | |||
==Further Reading== | |||
* [[Wikipedia:Shader]] | * [[Wikipedia:Shader]] | ||
* [http://developer.nvidia.com/object/gpu_gems_home.html GPU Gems] | |||
* [http://developer.nvidia.com/object/gpu_gems_2_home.html GPU Gems 2] | |||
* [http://developer.nvidia.com/object/cg_tutorial_home.html The CG tutorial] | |||
* [http://wraiyth.freesuperhost.com/development/tutorials/postprocess.htm Simple Post-Process Shader tutorial] | * [http://wraiyth.freesuperhost.com/development/tutorials/postprocess.htm Simple Post-Process Shader tutorial] | ||
* [http://wraiyth.freesuperhost.com/development/tutorials/nvidiaconvert.htm Converting nVidia SDK shaders to HL2 (sample)] | * [http://wraiyth.freesuperhost.com/development/tutorials/nvidiaconvert.htm Converting nVidia SDK shaders to HL2 (sample)] | ||
[[category:Programming]] [[category:Glossary]] [[category:Technical]] |
Revision as of 07:17, 25 July 2006
Introduction
A shader is a program that runs on the graphics hardware (GPU) rather than the CPU. There are two variations of shaders, Pixel shaders and Vertex shaders, each of which performs a different task in the rendering pipeline. Shaders form a replacement for the fixed function pipeline and allow developers greater control over rendering output by providing the ability to modify pixels and vertices dynamically.
There are currently three main shader languages, HLSL, CG and GLSL. The Source Engine uses HLSL based shaders, however CG is so similar that most CG shaders can be quickly and easily ported to HLSL.
For information on authoring shaders for use in the Source Engine, please see here.
Source Shader Types
The Source Engine provides for two seperate forms of shaders, Postprocess and Per-Object, the majority of the effects and materials used within the Source Engine rely heavily on their Pixel shader components.
Postprocess
A Postprocess shader is typically a Pixel shader that works on a quad rendered across the entire screen. The quad is textured with a copy of the frame buffer, the Pixel shader can than alter and modify the rendered output to create a variety of effects, such as basic colour modification to more advanced processes such as motion blur and bloom.
The Source SDK provides an example of this form of shader in the sdk_postprocess files (sdk_postprocess.cpp
, sdk_postprocess_vs20.fxc
, and sdk_postprocess_ps20.fxc
)
Per-Object
A Per-Object shader in the Source Engine is used on any object with the shader referenced in the relevant VMT file, such as a model or piece of brushwork. A Per-Object shader could be used to create a refractive material, modify a models vertices dynamically or other advanced rendering effects.
The Source SDK provides an example of a Per-Object shader in the sdk_lightmap files ( sdk_lightmap.cpp
, sdk_lightmap_vs20.fxc
, and sdk_lightmap_ps20.fxc
)