Wilds of graphics or how to get an interview for a computer graphics programmer at GameDev

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;





Effects can be very different (smoke, fire, lava, magic, slime, explosions, etc.), the development and quality is entirely on the shoulders of a game graphics specialist
(, , , , , ..)

- , (//). , , , , , , , (, , , - (, ..), .





, , . , , , , , : , VFX, , , ..;





, , (Unity / Unreal / Cryengine) , , , gamedev ( ) , .





. , , . , , ;





Here, the questions come to the fore, how well and correctly everything is displayed (shadows, rendering, lighting, deep work with layers, ray tracing, texture smoothing quality, etc.)
, (, , , , , ..)

, , : (++, #, Python), (, , , , , ); (3D , /, , , ); (, , , ), . , , , - beginner, junior, middle, senior lead. ;





++





- ?;





- , delete. , , . . const, volatile, statistic, Virtual. , , ;





C ++ destructor
++

- , ?;





() - / , / (- -) - , , .





: 1. , ; 2. ; 3. ; 4. ;





- , . : 1. ; 2. : , , , ; 3. ++;





C ++ is the programming standard along with C # and Python at GameDev
C++ # Python GameDev

- ?;





() . , , , , , , . , /. : , . ;





- inline - ?;





inline , . , , , . , , ;





 Account   .   GetBalance , Deposit  Withdraw   , inline,
Account . GetBalance , Deposit Withdraw , inline,

- : 1100 0000 0000 0011?;





"" , ;





- ?





- , . : , , , , , , , -;





, , , . : , , , , ;





C++      ,           ,
C++ , ,

- ++, ?;





- , , . : & () - , * () - ;





- ;





- , ( C++). , , 10 ;





/ - , , , , , "", (thread). , ;





- ?;





, , std::terminate();





- , ?;





, , "" , . , (, ..) . .





virtual. - , : 1. , , ; 2. ;









- VFX ?;





, , 3D/2D , , , , , : , , , ;





     Vulkan API
Vulkan API

- (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, . , , , , , , ;





, , , , . - / , "" , , ;





Artstation -          ,      ,   ,   , , ,
Artstation - , , , , , ,

- , , Unity?;





, ( «») -, 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?;





- , , , . , , , ;





  Vulkan  OpenGL  AMD Radeon  NVidia
Vulkan OpenGL AMD Radeon NVidia

- 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;





RenderDoc   dota2
RenderDoc dota2

- 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 . , ,  – , - ;





 GPU   CUDA
GPU CUDA

- - L1, L2?;





- L1 — , , , , , 256 - 2 . : . , , , ;





L2 , L1, . 256 8 . , , , ;





- SIMD Muti-threading, ?;





SIMD -" , " , , CPU , (, ADD, MULTIPLY, AND, XOR) ;





, , CPU, . , SIMD, . , , , .





, , . , ;





- . , ;





- NSight (NVidia) ?;





NSight - . - . , , . , , , , . NSight;





Cuda NSight  VisualStudio
Cuda NSight VisualStudio





- : , , ?;





, , , . , (). . , , . ;





- ( (, , ), , , ?;





, , ( ). - , ; - , ; / - , ; - ;





- ?;





– , ;





- , 4 . - . , , , ;









- ?;





- . (+ , , ), - (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 ;





Version control system based on GUI Source Tree
Version control system based on GUI Source Tree

Of course, these questions can be expanded with additional ones, but here I tried to sanctify only the main points.








All Articles