Guys, hello everyone !!!
I had a free minute and decided to put together a small guide to interviewing a 3D graphics programmer for GameDev companies. I myself work in this field and communicate a lot with various people, those who are just coming for interviews and those who have been working for a long time and have more than one completed project and many resolved work issues and tasks behind them. If you are interested in this topic, then I ask everyone under the cat.
For most companies, it is customary to divide this profession / direction into two:
The first is a specialist in game graphics and the second is a specialist in computer graphics. What's the difference? Let's just say that the first is a natural continuation of the second, but not always. For example, you start working as a VFX specialist, create particle effects, "screw" 3D models to them, assemble all the parts, write a shader and work with a codebase. That is, here you are more focused on the visual design of the game and its individual elements. Your tasks include the development of visual effects at an "acceptable" level, taking into account the general style of the game, its genre, color design (horor, mathc-3d, farm, sandbox, etc.). Optimization issues are important here, but they are not so global;
- , (//). , , , , , , , (, , , - (, ..), .
, , . , , , , , : , VFX, , , ..;
, , (Unity / Unreal / Cryengine) , , , gamedev ( ) , .
. , , . , , ;
, , : (++, #, Python), (, , , , , ); (3D , /, , , ); (, , , ), . , , , - beginner, junior, middle, senior lead. ;
++
- , delete. , , . . const, volatile, statistic, Virtual. , , ;
- , ?;
: 1. , ; 2. ; 3. ; 4. ;
- , . : 1. ; 2. : , , , ; 3. ++;
- ?;
() . , , , , , , . , /. : , . ;
- inline - ?;
inline , . , , , . , , ;
- : 1100 0000 0000 0011?;
"" , ;
- ?
, , , . : , , , , ;
- ++, ?;
- ;
/ - , , , , , "", (thread). , ;
- ?;
, , std::terminate();
- , ?;
, , "" , . , (, ..) . .
virtual. - , : 1. , , ; 2. ;
- VFX ?;
, , 3D/2D , , , , , : , , , ;
- (MSAA, MLAA, FXAA, TXAA) - ?
SSAA (Super-Sampling) - . (4) , , . , , , . : 19201080, 4 — 38402160. ;
MSAA (Multisample anti-aliasing) — SSAA, . . , 8 MSAA 4 SSAA ;
CSAA CFAA (Coverage Sampling anti-aliasing Custom-filter anti-aliasing) — MSAA, «» , . 8x CSAA/CFAA 8 x MSAA , , 4 MSAA. – ;
FXAA (Fast approXimate anti-aliasing) — . . , "" , . ;
MLAA (MorphoLogical anti-aliasing) — FXAA. Z, L U - , , . , , fps . , FXAA. – «»;
SMAA (Subpixel Morphological anti-aliasing) — FXAA MLAA - MLAA, . , MLAA, , FXAA, . FXAA, 2 x MSAA. ;
TXAA(Temporal antialiasing) — «» . MSAA SMAA, , , , . . . ;
- Paralax Mapping, , , Post-processing?
Paralax Mapping - bumpmapping, . Parallax mapping 3D- .
- V-Sync – . ;
Post processing - , 3D- ;
- . , , . 3D-;
- ?;
, — , . , , . , , multiple render targets — MRT, .
, , . , , , , ;
- 2D-3D (Houdini, Maya, Blender, Nuke, Substance Painter, Photoshop) ?
, / /, Artstation, Behance, . , , , , , , ;
, , , , . - / , "" , , ;
, ( «») -, 2D 3D . - , UV-, , , - , " " - , , Houdini, Maya, 3dsMax, Clarisse .. , , , , .. Redshift, Arnold, V-Ray, Mantra. GPU , ;
- - ?;
PBR (Physical Based Rendering) - , , . PBR , -;
- BRDF ?
- 3- :
1. ;
2. ;
3. ;
, . , . , , . , , .
- Vulkan API OpenGL?;
- , , , . , , , ;
- Forward vs Deferred ?;
Forward render - , , , Deffered Rendering. , / .
Deffered rendering . , GBuffer. GBuffer . Deffered Rendering , GBuffer, ;
- ?;
1. , / , / ( ), / ; 2. , ; 3. blur, glow "" ; 4. - /, , (normal/roughness/metalness/emission/diffuse/..); 5. / , , ; 6. , , ;
, , ;
- , /?;
: Siggraph, TotalChaos, GTC Nvidia, European Association of Rendering and CG : habr.com, arrXive.org ..;
- RenderDoc?;
RenderDoc - () MIT, Vulkan, D3D11, OpenGL, OpenGL ES, D3D12 Windows 7-10, Linux, Android, Stadia Nintendo Switch. Doom CyberPunk;
- SSAO, HDR, SSR?;
Screen Space Ambient Occlusion — . SSAO Ambient Occlusion . SSAO , GPU Ambient Occlusion .
SSAO post process. SSAO , : , , , , CPU. SSAO Crytek CryEngine 2, Crysis 2007 .
HDR - , . , , , , , . HDR . . HDR , .
Server-Side Rendering (SSR) . backend API HTML .
- ?;
1. Vertex/index buffer -> input assembler ( , , ) ->
2. Vertex shader ( ) ->
3. Tessellation ( ) ->
4. Geometry shader ( ) ->
5. Rasterisation ( , - , . , , , , , ) ->
6. Fragment shader ( , . , ) ->
7. Color blending ( , . .) ->
8. Frame buffer;
, .
- API GPU?;
CUDA SDK (NVidia), Vulkan (MoltenVK), DirectX SDK;
- GPU CUDA?;
: 1. ; 2. ; 3. ; 4. ; 5. .
CUDA Runtime API, CUDA Driver API CUDA Libraries. Runtime Driver API . , , – , - ;
- - L1, L2?;
- L1 — , , , , , 256 - 2 . : . , , , ;
L2 , L1, . 256 8 . , , , ;
- SIMD Muti-threading, ?;
SIMD -" , " , , CPU , (, ADD, MULTIPLY, AND, XOR) ;
, , CPU, . , SIMD, . , , , .
, , . , ;
- . , ;
- NSight (NVidia) ?;
NSight - . - . , , . , , , , . NSight;
- : , , ?;
, , , . , (). . , , . ;
- ( (, , ), , , ?;
, , ( ). - , ; - , ; / - , ; - ;
- ?;
– , ;
- ?;
- . (+ , , ), - (Git, Mercurial, Bazaar, Darcs), ( , , - SPOF - SVN, CVS, Perforce). Git SHA-1 , , ;
- /GUI /?;
SourceTree, GitKraken, , ;
- merg, rebase, fetche, pull, push?;
$git fetch <remote-name> , ;
$git fetch <remote-name> ;
$git pull ;
$git push <remote-name><brach-name> ;
$git merge - ;
$git rebase -
Merge - , ; Rebase - , , , . Rebase , , merge;
- ?;
, . , , . . . Source Tree ;
Of course, these questions can be expanded with additional ones, but here I tried to sanctify only the main points.