In the credits section of the games I play, there are names of graphics programmers. If they used a game engine, why do they need a graphics programmer? Isn't the game engine doing their job?
Even with an engine, getting something to display on the screen the way you want it is not always trivial. There will be many instances where someone with programming knowledge is required to make the graphics display correctly. These people may be called graphics programmers in the credits (graphics programmer is not a certified or protected title, and the difference between different titles can vary a lot by company).
Let's bring a concrete example. We need an animated rotating circle, as follows:
Some of our options are:
1 Put the circle on a billboard, write a script to rotate the billboard.
2 Use an animated gif as the source.
3 Do the whole thing in a shader, which allows 2 different options:
- Rotate the billboard in the vertex shader
- Draw a rotated circle in the fragment shader.
In 1. someone needs to write that script, which is some kind of programming task that has to do with graphics. For 2. we don't need a programmer, unless the engine - like most - doesn't support import of animated gifs, in which case somebody needs to program that part. In 3. someone has to program the shader, which could be an artist or a programmer.
EDIT to address downvotes:
The downvotes seem to be because the effect is too simple and thus wouldn't be implemented by a "real" graphics programmer. I don't really know who else it would be implemented by if there is a dedicated graphics programmer on the team, and I occasionally do implement such rotation effects in shaders - although usually the rotation is just a part of a bigger whole, as in this example.
Game engines are like kitchens, and developers (i.e. programers) are like cooks.
Game engines offer possibilities, while the programmers exploit these possibilities to the needs of the game.
Thus, game companies need graphics programmers to tailor the engine's graphics possibilities to the game's needs.
If the game engine were to manage everything, without tweaking, all the games produced by that engine would look like they come out of the same mould: the artists can produce different 3D models and 2D art tailored to the vision of the designers, but the in-game customization to these graphics will be limited to what the engine offers out of the box.
Note that while they let you change the art used, some game engines don't offer the possibility to tailor the other graphic aspects to the needs of the game. I think RPG Maker was like that: it let you change the art but you were limited in terms of how you could tweak your game to give it a very distinctive touch. This may have changed in the past years as I have not touched that software for a while.
The specific meaning of most titles in the games industry vary widely from studio to studio, so keep that in mind. What constitutes "graphics programming" in one studio may really mean just making shader or material tweaks, where in another studio it might mean doing relatively low-level optimization work near the underlying graphics API, et cetera.
That said, in larger studios it's relatively rare to take some engine middleware and use it without making any modifications whatsoever. Most of the time, specific aspects of the engine will need to be tweaked because it doesn't quite meet requirements, or because there is a bug in that version and the company cannot yet upgrade to a newer version that may fix the bug, et cetera.
Graphics are one such area where people tend to do a fair bit of tweaking. It might not involve rewriting the use of Direct3D or similar within the engine, but could still involve work customizing or optimizing shaders, improving graphics resource management to better account for the usage profiles of the specific game, adding new rendering features or options, streamlining the graphics asset pipeline to better suit the studio's workflow, et cetera.
Further, there are many cases where a studio will want to take integrations of additional graphics-related middleware. There are middleware packages like Granite, Enlighten, and TrueSky which offer various graphics-related features (texture streaming, global illumination, sky simulation and rendering, et cetera). All of these middleware packages integrate with Unreal, but work is required to integrate them. Some of them may conflict with each other or need some tweaking to work nicely together, since they're all developed by different companies. Graphics programmers will likely be involved in that kind of work as well.
You can ship games without a graphics programmer pretty easily now-a-days because of all the engines. What you generally need a graphics programmer for are things like
A graphics programmer would know and/or learn how a particular engine works and be able to direct the artists or modify the materials or merge models or use other techniques etc to get better performance from the engine.
understanding and instruction
A artist wants to achieve a certain effect. The graphics programmer who understands how the engine works can explain how to achieve that effect.
customizations and effects
Certain effects might require programming. Much of the rendering of Bound is custom.
This is no different than movies. With 100s of programmers, a large budget and bad writing you might get Star Wars: The Phantom Menace. With no programmers and good writing you might get Primer. Programmers (or other technical people) can allow new things. Programmers brought CG mud to Shrek, CG hair to Monsters Inc, Bullet Time to The Matrix, etc. But, movies themsevels are not about the effects and it's fully possible to make amazing movies without effects or new custom tech.
The same is more or less true for games now. Graphics programmers might allow the fluids in Pixel Junk Shooter or all the dynamic geometry of Bound but plenty of games can be made with standard engine tech and no graphics programmers.
A lot of times, game engines would not fulfill 100% of the requirements and specifications of a game project. This is especially true for triple-A titles that are always pushing the boundaries of games technology. If some of the graphics part of the game engine does not match what the artists and designers want to achieve out-of-the-box, they might hire a graphics programmer/specialist that can help them figure out whether their expectation is feasible, and if it is, how to achieve it. It might involve tweaking the shader/art assets, or reworking parts of the rendering, or even using a middleware. Or a combination of them.
Most standard techniques will be implemented in any decent commercial engine, like FXAA, lighting, cel shading, normal mapping etc, but not all.
In the case where a game designer has specified that a particular effect has to happen, you either build it out of what is already there, or you code a new shader, or modify the graphics engine to allow it. In both scenarios, a graphics programmer is required.
Define engine, then define graphics engine. If your using an existing engine to make a game then that isn't the same as writing a game from scratch in code. If through code one can define what is graphics or engine, doesn't matter what you call it if your code is strong. Creating games in said engine, its limits and or its strong points are based purely on the programmer(s) ability. Using something like Unity or even Unreal or any other pro engine doesn't define your ability, game engines are just abstractions coding in say pure C++ is not. You can for example hire programmers hell even artists but you would be limited to the vision or limits of the engine. So it is better to code from scratch then use something already in existence. Problem is you won't find answers online like the Stackexchange I doubt many people have even bothered to code a game let alone finished a 2d project. I'm just procrastinating a little, meaning that not many self serving answers spell it out. The best way is study and practice!