๐ŸŽฎ GAME & DEV/ํ”„๋กœ๊ทธ๋ž˜๋ฐ

2017 ์–ธ๋ฆฌ์–ผ ์„œ๋ฐ‹ ํ”„๋ฆฌ๋ฏธ์—„

Blue Sky! 2017. 10. 31. 15:06

 

์•„๋ž˜ ๋‚ด์šฉ์€ ํšŒ์‚ฌ ์ปจ๋ฒ„๋Ÿฐ์Šค ์ •๋ฆฌ๊ธ€์„ ํŽŒํ•œ ๋‚ด์šฉ.

 

์–ธ๋ฆฌ์–ผ ์—”์ง„ 4 ์…ฐ์ด๋”, ๋” ๊นŠ์ด ์ดํ•ดํ•˜๊ธฐ

์…ฐ์ด๋”

  • ์–ธ๋ฆฌ์–ผ์˜ ์…ฐ์ด๋”๋Š” USH(Unreal Shader Headers)์™€ USF(Unreal Shader Files)๋กœ ๊ตฌ์„ฑ๋จ
  • HLSL ์ฝ”๋“œ๋กœ ์ž‘์„ฑ๋˜๋Š” USF๋Š” FShaderType์œผ๋กœ ๊ด€๋ฆฌ๋จ
  • Global / Material / MeshMaterial 3๊ฐ€์ง€ ํƒ€์ž…์ด ์กด์žฌํ•จ
  • FShaderType์ด ์ปดํŒŒ์ผ๋˜์–ด FShader ์…ฐ์ด๋” ์ธ์Šคํ„ด์Šค๊ฐ€ ๋จ
  • ๋ฉ”์‹œํŠน์„ฑ์€ VertexFactory๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋˜๋Š”๋ฐ, ํ˜„์žฌ๋Š” ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๊ฐ€๋Šฅํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ

๋จธํ‹ฐ๋ฆฌ์–ผ

  • Material์˜ ๊ฐ ๋…ธ๋“œ๋“ค์ด ๋ฒˆ์—ญ๋˜๋ฉด์„œ ๋…๋ฆฝ๋œ usf ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ๋จ
  • ์ปค์Šคํ…€ ๋…ธ๋“œ๋Š” HLSL์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ์ง€๋งŒ, ์ฝ”๋“œ์ตœ์ ํ™”๊ฐ€ ์ˆ˜ํ–‰๋˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ ๊ฐ€๊ธ‰์  ์•ˆ์“ฐ๋Š”๊ฒŒ ์ข‹์Œ

UE4 Shader Plugin

์…ฐ์ด๋” ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ GlobalShader๋ฅผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๋Š” ์‹ค์Šด(?)
์š”์•ฝํ•˜์ž๋ฉด ์–ธ๋ฆฌ์–ผ ์…ฐ์ด๋” ๊ฐœ๋ฐœ ๋ฌธ์„œ์˜ ๋‚ด์šฉ์ด ๋œ๋‹ค.

๋ชจ๋ฐ”์ผ ์˜คํ”ˆ์›”๋“œ ์•„ํŠธ ์ปจํ…์ธ  ์ œ์ž‘ ๋ฐ ์ตœ์ ํ™”

  • ์•„ํŠธ ๋ฆฌ์†Œ์Šค ๋‹ค์ด์–ดํŠธ ๋ฐฉ๋ฒ•๋“ค์„ ์†Œ๊ฐœ. ๋ป”ํ•˜๋‹ค
  • ๋ชจ๋ฐ”์ผ์—์„œ ๋žœ๋“œ์Šค์ผ€์ดํ”„ ์‚ฌ์šฉ์‹œ ์ปดํฌ๋„ŒํŠธ ์‚ฌ์ด์ฆˆ๋ฅผ ๋งŽ์ด ์ค„์ž„
  • ๋žœ๋“œ์Šค์ผ€์ดํ”„ ํ…์Šค์ณ ์ˆ˜๋ฅผ 3๊ฐœ ์ดํ•˜๋กœ ํ•ด์•ผ GLES 2.0 ๋””๋ฐ”์ด์Šค์—์„œ ์ œ๋Œ€๋กœ ๋Œ์•„๊ฐ
  • ์Šคํƒœํ‹ฑ ๋ฉ”์‹œ๋“ค์€ HLOD๋ฅผ ์ ์šฉํ•จ

๊ผญ ์•Œ์•„๋‘์–ด์•ผ ํ•  ์–ธ๋ฆฌ์–ผ ์—”์ง„ 4 ๋ชจ๋ฐ”์ผ ๊ธฐ๋Šฅ A-Z

์„ฑ๋Šฅ ๊ฐœ์„ ํ•˜๊ธฐ

  • ์…ฐ์ด๋” ์บ์‹œ ์‚ฌ์šฉํ•˜๊ธฐ -> ์…ฐ์ด๋” ํžˆ์น˜๋ฅผ ์ค„์ž„ (์ฒซ ํ”Œ๋ ˆ์ด์‹œ๋Š” ์–ด์ฉ” ์ˆ˜ ์—†๋‹ค)
  • ๋ชจ๋ฐ”์ผ ์ž์œจ์‹œ์  MMO๋ผ๋ฉด Precomputed visibility volume์„ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋“
  • ๋จธํ„ฐ๋ฆฌ์–ผ์—์„œ Static Switch ์“ฐ๋ฉด ํŒจํ‚ค์ง•์‹œ ๋จธํ„ฐ๋ฆฌ์–ผ ์ข…๋ฅ˜๊ฐ€ ๋Š˜์–ด๋‚˜๋‹ˆ ๋‚จ์šฉ ๊ธˆ์ง€
  • Material instance ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๊ธฐ
  • ๋†’์€ LOD์—๋Š” Material baking์œผ๋กœ GPU์—ฐ์‚ฐ ์ค„์ด๊ธฐ

Slate UI ์ตœ์ ํ™”

  • 2D UI๋“ค์€ ๋ฐฐ์น˜ํ”„๋กœ์„ธ์‹ฑ๋จ
  • ๋™์ผ ๋จธํ„ฐ๋ฆฌ์–ผ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉ
  • ๋™์ผ Layer ID์— ๋ฐฐ์น˜ํ•˜๊ธฐ
  • Invalidation Pannel๋กœ ์บ์‹œ ์ตœ๋Œ€ํ™”ํ•˜๊ธฐ

์–ธ๋ฆฌ์–ผ ์—”์ง„ 4 ์ตœ์ ํ™”์™€ ํผํฌ๋จผ์Šค ์—…๋ฐ์ดํŠธ

Shader Library

  • ์ค‘๋ณต๋œ ์…ฐ์ด๋”๋“ค (๋จธํ„ฐ๋ฆฌ์–ผ ๋…ธ๋“œ๋“ค), ๋ฉ”๋ชจ๋ฆฌ์— ์ค‘๋ณต ๋กœ๋”ฉ๋˜์ง€๋Š” ์•Š์ง€๋งŒ ๋””์Šคํฌ์— ์ค‘๋ณต๋˜์–ด ํŒจํ‚ค์ง•๋จ
  • Shader library๋Š” ๋จธํ‹ฐ๋ฆฌ์–ผ ๋…ธ๋“œ๋ฅผ usf์ฝ”๋“œ๋กœ ๋ฐ”๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๋Œ€์‹  ์…ฐ์ด๋” ํŒŒ์ผ key๋กœ ๋งคํ•‘์‹œ์ผœ๋‘ 
  • ๊ทธ ํ›„ ๋จธํ‹ฐ๋ฆฌ์–ผ ์‚ฌ์šฉ์‹œ ๋งค์นญ๋˜๋Š” key์˜ usf๋ฅผ ์ปดํŒŒ์ผ & ๋กœ๋”ฉ
  • ์ „์ฒด usfํŒŒ์ผ ์‚ฌ์ด์ฆˆ๊ฐ€ 1/5 ์ˆ˜์ค€์œผ๋กœ ์ค„์–ด๋“ฆ
  • DLC์— ์‚ฌ์šฉ๋˜๋Š” ๋จธํ‹ฐ๋ฆฌ์–ผ์—๋Š” ์ง€์› ๋ถˆ๊ฐ€
  • 4.18๋ถ€ํ„ฐ ๋น„๋™๊ธฐ ์…ฐ์ด๋” ๋กœ๋”ฉ์ด ์ง€์›๋จ

LLM (Low Level Memory Tracker)

  • ๊ฒŒ์ž„์—์„œ ํ• ๋‹นํ•˜๋Š” ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํŠธ๋ž˜ํ‚น
  • ์Šค์ฝ”ํ”„ ํƒœ๊ทธ๋ฅผ ๋ถ™์ด๋ฉด ์Šค์ฝ”ํ”„ ๋‚ด ํ• ๋‹น๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ํƒœ๊น…
cpp
{
    LLM_SCOPE(LLMTag::Material)
    //์ฝ”๋“œ๋“ค
}
  • ํƒœ๊ทธ๋ฅผ ๋ถ™์ด์ง€ ์•Š์•„๋„ Untaged ๋ฉ”๋ชจ๋ฆฌ๋กœ ํŠธ๋ž˜ํ‚น์€ ๋จ
  • -LLM ์˜ต์…˜์œผ๋กœ ๊ฒŒ์ž„ ์‹คํ–‰, stat llmfull ์ฝ˜์†” ๋ช…๋ น์œผ๋กœ ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Œ
  • -LLMCSV ์˜ต์…˜์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉด ๋งค ํ”„๋ ˆ์ž„ ๋ฉ”๋ชจ๋ฆฌ ํŠธ๋ž˜ํ‚น ์ •๋ณด๋ฅผ csvํŒŒ์ผ๋กœ ๋คํ”„๋– ์คŒ

PGO (Profile Guided Optimization)

  • ์ปดํŒŒ์ผ ์ตœ์ ํ™” ๊ธฐ๋ฒ•
  • ๋‹ค์Œ์˜ ๊ณผ์ •์œผ๋กœ ์ตœ์ ํ™”๊ฐ€ ์ง„ํ–‰๋จ
    1. PGO๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž… ํ›„ ์ปดํŒŒ์ผ
    2. ํ”Œ๋ ˆ์ด -> ํ”Œ๋ ˆ์ด ๊ธฐ๋ก DB๊ฐ€ ์ƒ์„ฑ๋จ
    3. DB๋ฅผ ๋ถ„์„ํ•ด ์ฝ”๋“œ๋ฅผ ์ตœ์ ํ™”
    4. ๋‹ค์‹œ ์ปดํŒŒ์ผ
  • ๋Œ€๋žต์ ์ธ ๊ธฐ๋Šฅ๋“ค
    • inline ์ตœ์ ํ™”
    • ๋ ˆ์ง€์Šคํ„ฐ ์ตœ์ ํ™”
    • ๋ถ„๊ธฐ๋ฌธ ์ตœ์ ํ™”
    • size / speed trade-off ํ•จ์ˆ˜๋ณ„ ์ตœ์ ํ™”
    • function layout ์ตœ์ ํ™”

๋„คํŠธ์›Œํ‚น ์ตœ์ ํ™”

  • ์—ํ”ฝ์€ PNBR ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ๋Œ€๊ทœ๋ชจ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๊ฒŒ์ž„ ์ฒ˜์Œ ๋งŒ๋“ค์–ด๋ด„
  • Network relevance view mode ์‚ฌ์šฉํ•ด์„œ ๋””๋ฒ„๊น…
  • replication ์ฝ”๋“œ์— ์ตœ์ ํ™” ํ•  ์š”์†Œ๋“ค์ด ๋งŽ์•˜๋‹ค
    • serialization ์ฝ”๋“œ์— TArray ๋™์ ํ• ๋‹น ํ•˜๋˜ ๋ถ€๋ถ„๋“ค TInlineAllocator ์‚ฌ์šฉ์œผ๋กœ ๋™์ ํ• ๋‹น ์ตœ์†Œํ™”
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธ์ง€์ค‘์ธ ์„œ๋ธŒ๋ ˆ๋ฒจ์„ ์„œ๋ธŒ๋ ˆ๋ฒจ๋‹น RPCํ•œ ๋ฒˆ ๋ณด๋‚ด๋˜ ๊ฑธ ์„œ๋ธŒ๋ ˆ๋ฒจ ๋ฐฐ์—ด์„ ๋ณด๋‚ด๋„๋ก ๋ณ€๊ฒฝ
    • ํ•‘์„ ๋”
    • replicate ๋˜๋Š” ๊ตฌ์กฐ์ฒด๋“ค Bit Field๋กœ ๋‹ค์ด์–ดํŠธ
    • ๊ทธ์™ธ ์ด๊ฒƒ์ €๊ฒƒ..
  • ์ž์ฃผ ์“ฐ์ด๋Š” ์•กํ„ฐ/์ปดํฌ๋„ŒํŠธ๋“ค (StaticMeshComponent, SceneComponent, Character ๋“ฑ๋“ฑ) ๋‹ค์ด์–ดํŠธ
  • ์ด๋Ÿฐ๊ฒƒ๋“ค์ด ๋ชจ๋‘ 4.18/.19 ๋ฆด๋ฆฌ์ฆˆ์— ๋“ค์–ด์˜ฌ ์˜ˆ์ •

์–ธ๋ฆฌ์–ผ ์—”์ง„ 4 ์—…๋ฐ์ดํŠธ์™€ ๋กœ๋“œ๋งต

4.18 ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ์˜ ๋‚ด์šฉ์„ ์žฅํ™ฉํ•˜๊ฒŒ ์„ค๋ช