Chicos, hola a todos !!!
Tuve un minuto libre y decidí armar una pequeña guía para entrevistar a un programador de gráficos 3D para empresas de GameDev. Yo mismo trabajo en esta área y me comunico mucho con varias personas, los que solo vienen para entrevistas y los que han estado trabajando durante mucho tiempo y tienen más de un proyecto terminado y muchos problemas de trabajo y tareas resueltos detrás de ellos. Si está interesado en este tema, le pregunto a todos los que están debajo del gato.
Para la mayoría de las empresas, es habitual dividir esta profesión / dirección en dos:
El primero es un especialista en gráficos de juegos y el segundo es un especialista en gráficos por computadora. ¿Cual es la diferencia? Digamos que el primero es una continuación natural del segundo, pero no siempre. Por ejemplo, comienzas a trabajar como especialista en VFX, creas efectos de partículas, les "atornillas" modelos 3D, ensamblas todas las partes, escribes un sombreador y trabajas con una base de código. Es decir, aquí estás más enfocado en el diseño visual del juego y sus elementos individuales. Tus tareas incluyen el desarrollo de efectos visuales a un nivel "aceptable", teniendo en cuenta el estilo general del juego, su género, diseño de color (horor, mathc-3d, farm, sandbox, etc.). Los problemas de optimización son importantes aquí, pero no son tan globales;
- , (//). , , , , , , , (, , , - (, ..), .
, , . , , , , , : , 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 ;
Por supuesto, estas preguntas se pueden ampliar con otras adicionales, pero aquí traté de santificar solo los puntos principales.