Gráficos selvagens ou como conseguir uma entrevista para um programador de computação gráfica na GameDev

Pessoal, olá a todos !!!





Eu tinha um minuto livre e decidi montar um pequeno guia para entrevistar um programador de gráficos 3D para empresas GameDev. Eu mesmo trabalho nesta área e me comunico muito com várias pessoas, aquelas que estão vindo para entrevistas e aquelas que estão trabalhando há muito tempo e têm mais de um projeto concluído e muitos problemas de trabalho resolvidos e tarefas por trás deles. Se você está interessado neste tópico, pergunto a todos sob o gato.





Para a maioria das empresas, é comum dividir esta profissão / direção em duas:





O primeiro é especialista em computação gráfica e o segundo é especialista em computação gráfica. Qual é a diferença? Digamos apenas que o primeiro é uma continuação natural do segundo, mas nem sempre. Por exemplo, você começa a trabalhar como um especialista em VFX, cria efeitos de partículas, "aparafusa" modelos 3D a eles, monta todas as partes, escreve um sombreador e trabalha com uma base de código. Ou seja, aqui você está mais focado no design visual do jogo e em seus elementos individuais. Suas tarefas incluem o desenvolvimento de efeitos visuais em um nível "aceitável", levando em consideração o estilo geral do jogo, seu gênero, design de cores (horor, mathc-3d, farm, sandbox, etc.). As questões de otimização são importantes aqui, mas não são tão globais;





Os efeitos podem ser muito diferentes (fumaça, fogo, lava, magia, limo, explosões, etc.), o desenvolvimento e a qualidade dependem inteiramente de um especialista em gráficos de jogos
(, , , , , ..)

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





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





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





. , , . , , ;





Aqui, as questões vêm à tona, quão bem e corretamente tudo é exibido (sombras, renderização, iluminação, trabalho profundo com camadas, traçado de raio, qualidade de suavização de textura, etc.)
, (, , , , , ..)

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





++





- ?;





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





Destruidor C ++
++

- , ?;





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





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





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





C ++ é o padrão de programação junto com C # e Python na GameDev
C++ # Python GameDev

- ?;





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





- inline - ?;





inline , . , , , . , , ;





O construtor de conta é uma função embutida.  As funções de membro GetBalance, Deposit e Withdraw não são especificadas como inline, mas podem ser implementadas como funções 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 é um dos maiores sites hoje para a colocação de portfólios, tanto de projetos residenciais quanto comerciais, há muitas seções, um sistema de navegação conveniente, lojas, master classes, uma enorme comunidade em quase todas as seções de desenvolvimento gráfico
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 vs OpenGL benchmark para AMD Radeon vs 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 no projeto 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 . , ,  – , - ;





Arquitetura de GPU usando CUDA como exemplo
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 no 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 controle de versão baseado em GUI Source Tree
Sistema de controle de versão baseado em GUI Source Tree

Claro, essas questões podem ser expandidas com outras, mas aqui tentei santificar apenas os pontos principais.








All Articles