A shader is an extra bit of code that is added to a render of a scene (or any other post production method). Shaders can alter visuals by changing the way textures and lighting are displayed, sometimes in ways that would be impossible with other techniques.
Shaders were originally designed to alter just the actual shading(referring to light) in a final scene, hence the name.
This has since evolved to alter all kinds of effects such as hue and saturation, bloom, contrast, and motion blur.
A shader is developed to use the computer’s GPU to add these effects, taking strain off the CPU for other tasks (such as calculating physics interactions). It feeds the vertex and texture information to the GPU which then gives back the lighting and color information.
Any real time render engine, and even some traditional renderers in 3D software packages will use shaders to calculate the lighting using physical based rendering (PBR).
Most shaders will be pre-sets within the software you decide to use. For example, if you use Unreal Engine 4 for designing a video game, the post processes object will give you options of which shaders you want to turn on or off in your game.
You can then open these up for even more options on how they will look in the build.
These types of shaders are called vertex shaders. However, more complex types of shaders exist called geometry and tessellation shaders.
These other types of shaders can actually change the base geometry of a mesh to give better results in certain instances. For example, tessellation shaders are slowly replacing LOD (level of detail) models as they can optimize a mesh in real-time depending on its distance to the camera. This can help save storage space as only one mesh is used instead of 3 or 4.
Shaders are a very powerful tool. Their applications and abilities change rapidly as technology improves over time.
A base level of understanding of what they are and what they can do is always good to have, but the vast majority of people do not need to know how they work in detail. This is because the presets in most software will usually cover any basics you may need.
If the software you use doesn’t have a shader you want, or if you can’t change a parameter to the way you need it to be, it is possible to learn to create your own shaders. Though some development knowledge is required to do this.
There are some tutorials on this topic, but note it’s very complex and takes a lot of practice to really understand what goes into actually making something for yourself.
Writing shaders is usually considered a specialized job on films, video games, and other big production studios. In fact, sometimes people are hired by large studios to only work on custom shaders. So if you’re good enough at designing shaders you could make a career out of it!