Wilds of graphics o cómo obtener una entrevista para un programador de gráficos por computadora en GameDev

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;





Los efectos pueden ser muy diferentes (humo, fuego, lava, magia, limo, explosiones, etc.), el desarrollo y la calidad está completamente sobre los hombros de un especialista en gráficos de juegos.
(, , , , , ..)

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





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





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





. , , . , , ;





Aquí, las preguntas pasan a primer plano, qué tan bien y correctamente se muestra todo (sombras, renderizado, iluminación, trabajo profundo con capas, trazado de rayos, calidad de suavizado de texturas, etc.)
, (, , , , , ..)

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





++





- ?;





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





Destructor de C ++
++

- , ?;





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





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





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





C ++ es el estándar de programación junto con C # y Python en GameDev
C++ # Python GameDev

- ?;





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





- inline - ?;





inline , . , , , . , , ;





El constructor de la cuenta es una función en línea.  Las funciones de miembro GetBalance, Deposit y Withdraw no se especifican como, en línea, pero se pueden implementar como funciones en línea
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 ;





Sistema de control de versiones basado en GUI Source Tree
Sistema de control de versiones basado en GUI Source Tree

Por supuesto, estas preguntas se pueden ampliar con otras adicionales, pero aquí traté de santificar solo los puntos principales.








All Articles