Teman-teman, halo semuanya!!!
Saya memiliki waktu luang dan memutuskan untuk menyusun panduan kecil untuk mewawancarai seorang programmer grafis 3D untuk perusahaan GameDev. Saya sendiri bekerja di bidang ini dan banyak berkomunikasi dengan berbagai orang, mereka yang baru saja datang untuk wawancara dan mereka yang telah bekerja untuk waktu yang lama dan memiliki lebih dari satu proyek yang diselesaikan dan banyak masalah pekerjaan dan tugas yang diselesaikan di belakang mereka. Jika Anda tertarik dengan topik ini, maka saya bertanya kepada semua orang di bawah kucing.
Bagi sebagian besar perusahaan, biasanya membagi profesi / arahan ini menjadi dua:
Yang pertama adalah spesialis dalam grafik game dan yang kedua adalah spesialis dalam grafik komputer. Apa bedanya? Anggap saja yang pertama adalah kelanjutan alami dari yang kedua, tetapi tidak selalu. Misalnya, Anda mulai bekerja sebagai spesialis VFX, membuat efek partikel, "mengunci" model 3D, merakit semua bagian, menulis shader, dan bekerja dengan basis kode. Artinya, di sini Anda lebih fokus pada desain visual game dan elemen individualnya. Tugas Anda mencakup pengembangan efek visual pada tingkat yang "dapat diterima", dengan mempertimbangkan gaya umum permainan, genre, desain warna (horor, mathc-3d, pertanian, kotak pasir, dll.). Masalah pengoptimalan penting di sini, tetapi tidak begitu 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 ;
Tentu saja, pertanyaan-pertanyaan ini dapat diperluas dengan pertanyaan tambahan, tetapi di sini saya hanya mencoba menguduskan poin-poin utama.