← Zpět na přehled EGG
PŘEDNÁŠKA #1 Petr Pauš, Jan Matoušek ANI-EGG 🥚

Úvod do herních enginů a jejich architektura

Herní smyčka, rendering, správa paměti a moderní architektura

Unity 6
Unreal Engine 5
Godot 4

Co je to herní engine?

Formální definice

Herní engine je komplexní softwarová architektura poskytující univerzální abstraktní vrstvu nad hardwarovými prostředky počítače (CPU, GPU, paměť, zvuková karta, vstupní zařízení).

Abstrakce HW

Jednotné rozhraní (API) umožňující spouštění stejného kódu na PC, konzolích, mobilních zařízeních i VR bez přepisování nízkoúrovňových volání.

Znovupoužitelnost

Není třeba znova programovat hotové věci. Matematika, fyzika, formáty textur a zvuk jsou vyřešeny a prověřeny v praxi.

Produktivita

Integrované vývojové prostředí (IDE) s vizuálními editory pro správu scén, animací, fyzikálních materiálů, shaderů a ladění za běhu.

Description

Trocha statistických údajů (Steam 2024)

Trocha čísel ze studií Video Game Insights (2025)
Description

Vlastní nebo komerční engine?

Pozitiva komerčního engine

  • Okamžitý start – Možnost začít hned, místo budování vlastního engine.
  • Známá kvalita – Komerční enginy mají prověřenou kvalitu z hlediska výkonu a grafické věrnosti.
  • Nižší náklady na vývoj – Mnohem levnější než udržování vlastního enginu v podobné kvalitě.
  • Snadnější nábor zaměstnanců – Také množství dokumentace a školících materiálů.

Negativa komerčního engine

  • Nárůst cen – Dominance na trhu umožňuje několika málo enginům diktovat cenovou politiku.
  • Požadavek na úpravy – Mnohé projekty stále vyžadují rozsáhlé úpravy, což snižuje úsporu práce.
  • Náklady na změnu engine – Studia s existujícími staršími enginy a zkušenými zaměstnanci vyžadují k přechodu značnou časovou investici.
  • Řešení na míru – Vlastní engine pro konkrétní žánr může být efektivnější a poskytnout konkurenční výhodu.
  • Nedostatek kontroly – Závislost na jiné společnosti a její vizi (roadmapě) pro vývoj nových funkcí.

Evoluce vývojových nástrojů

1980–1995

1. Éra bez enginů

  • Kód psaný přímo na míru dané hardwarové architektuře (Assembler, C).
  • Přímý zápis do registrů a paměti grafických/zvukových čipů.
  • Hry jako Doom (1993) využívaly specifické matematické triky: BSP stromy (Binary Space Partitioning) – rekurzivní binární dělení prostoru pro okamžité určení pořadí vykreslování stěn (zepředu dozadu) bez nutnosti náročného Z-bufferu.
1995–2010

2. Modulární systémy

  • Jasná separace grafického renderovacího jádra od herní logiky.
  • Vznik legendárních enginů: Quake Engine (id), Unreal Engine 1 (Epic), Source (Valve).
  • Zahájení licencování jader jiným studiím (např. Half-Life na bázi Quake, Deus Ex na Unreal Engine 1, Titanfall & Vampire: Bloodlines na Source enginu).
2010+

3. Demokratizace & Visual IDE

  • Nástup zdarma dostupných nástrojů s licenčními modely dle úspěchu (Unity, Godot, Unreal Engine).
  • Zpřístupnění špičkových AAA technologií nezávislým (indie) tvůrcům.
  • Kompletní vizuální editory a asset ekosystémy.
Přesný rok vzniku prvních enginů není jasný, některé 2D enginy existovaly už před 1995. U 3D enginů se to dá považovat za celkem verohodné.

Hlavní podsystémy herního enginu

HERNÍ LOGIKA (C# Scripts / C++ / Blueprints / GDScript)
Renderovací Engine
Fyzikální Engine
Audio Engine
AI & Navigace
Resource Manager / Asset Pipeline / Serializace
Abstrakce HW (OS, Vulkan, DirectX 12, Metal, WebGPU, POSIX)
HARDWARE (CPU, GPU, RAM, VRAM, Audio Device, Gamepad/Mouse)

Renderovací podsystém

Zpracování geometrie, materiálů, světel, stínů, post-processingu a odesílání příkazů (Draw Calls) na GPU.

Fyzikální engine

Numerická integrace Newtonovské mechaniky, detekce srážek (CCD/Broadphase) a řešení kloubů (Joints).

Skriptovací vrstva

Uživatelský kód řídící pravidla hry, napojený přes bindings na optimalizované C++ jádro enginu.

Renderovací podsystém & Klíčové pojmy

1. Geometrie & Sítě (Meshes)

  • Vertexy & Buffery: Vrcholy definované 3D pozicí, normálou (směr povrchu), tangenty a UV souřadnicemi pro textury.
  • Index Buffer: Pole indexů spojující vrcholy do trojúhelníků (triangles).
  • Transformační matice: Převod z Local Space \(\to\) World \(\to\) View (Camera) \(\to\) Clip Space (MVP matice).

2. Materiály, Textury & Shadery

  • Shadery: Programy běžící masivně paralelně na GPU (Vertex Shader počítá pozice, Fragment/Pixel Shader počítá barvu pixelu).
  • PBR Materiály: Fyzikální parametry povrchu (Albedo/BaseColor, Roughness, Metallic, Normal mapa pro iluzi detailů).

3. Světla & Stíny (Shadow Mapping)

  • Typy světel: Directional (slunce), Point (žárovka), Spot (kužel/baterka), Area lights.
  • Shadow Maps: Render hloubky scény z pozice světla do textury \(\to\) porovnání vzdálenosti pixelu k určení, zda je ve stínu.

4. Draw Calls & Post-processing

  • Draw Call: Příkaz CPU odeslaný GPU k vykreslení objektu (hlavní limit CPU výkonu, řeší se Batchingem a Instancingem).
  • Post-processing: Filtry aplikované na hotový 2D snímek (Bloom, Tone Mapping, Color Grading, SSAO, Motion Blur).

Fyzikální engine: Integrace & Kolize

1. Numerická integrace pohybu

Výpočet zrychlení, rychlosti a pozice ze sil podle 2. Newtonova zákona: \[\vec{a} = \frac{\sum \vec{F}}{m}\]

  • Explicit Euler: \(\vec{x}_{t+\Delta t} = \vec{x}_t + \vec{v}_t \Delta t\) – jednoduchý, ale nestabilní a energeticky diverguje.
  • Semi-implicit Euler: Nejprve spočte novou rychlost, z ní novou pozici. Standard pro většinu herních enginů.
  • Verletova integrace: Počítá bez explicitní rychlosti z předchozích dvou pozic – ideální pro simulaci látek (Cloth) a provazů.

2. Detekce a řešení kolizí

Broad Phase
AABB / BVH
➜
Narrow Phase
GJK / SAT
➜
Solver
Impulsy & Vazby
  • Broad Phase: Rychlé vyloučení vzdálených těles pomocí AABB obálek a prostorových stromů (BVH, SAP) v čase \(\mathcal{O}(N \log N)\).
  • Narrow Phase: Přesný výpočet kontaktních bodů a hloubky průniku (algoritmy GJK, SAT).
  • Solver & Constraints: Aplikace korekčních impulsů, tření (friction), odrazu (restitution) a vazeb kloubů (Joint / Ragdoll).

Skriptovací vrstva & Herní logika

1. Propojení s C++ jádrem (Native Bindings)

  • Engine Core (C/C++): Maximální rychlost, správa paměti, rendering a fyzika přímo nad hardwarem.
  • Foreign Function Interface (FFI): Překlenovací vrstva (P/Invoke v .NET, PyBind, JNI, C API) umožňující skriptům volat C++ jádro a naopak.
  • Marshaling: Přenos a konverze datových struktur mezi spravovanou (managed) pamětí skriptu a nativní (unmanaged) pamětí C++.

2. Modely provádění skriptů

  • Interpreted & Bytecode VM (GDScript, Lua): Rychlé načítání, minimální paměť, bezpečný sandbox, snadný Hot-Reload za běhu.
  • JIT & AOT (C# Mono / CoreCLR / IL2CPP): Překlad mezikódu (CIL) do nativního strojového kódu CPU před spuštěním či za běhu.
  • Vizuální grafy (Blueprints): Interpretované virtuálním strojem nebo automaticky nativizované do C++ před kompilací.
Proč oddělovat skriptování od jádra? Umožňuje designérům upravovat kód hry v reálném čase (hot-reload) bez rekompilací celého enginu a izoluje herní chyby od stability enginu.

Anatomie herní smyčky (Game Loop)

Srdcem každého enginu je nekonečná smyčka řídící synchronizaci vstupů, simulace a vykreslování:

1. Input
OS Event Polling
➜
2. Fixed Update
Physics & Determinism
➜
3. Update Logic
Gameplay & \(\Delta t\)
➜
4. Render Frame
GPU Draw Calls
1. Process Input: Sběr událostí ze vstupních zařízení (klávesnice, myš, gamepad, síťové pakety).
2. Fixed Update: Výpočet pevných fyzikálních kroků a kolizí s konstantním časovým krokem.
3. Update Logic: Aktualizace animací, umělé inteligence (AI), herního stavu a uživatelského rozhraní.
4. Render: Culling neviditelných objektů, sestavení Command Buffers a finální rasterizace na GPU.

Herní smyčka v Unity (Order of Execution)

Unity 6 / MonoBehaviour
1. Initialization
Awake ➜ OnEnable ➜ Start
➜
2. Physics (50 Hz)
FixedUpdate ➜ PhysX ➜ Collisions
➜
3. Game Logic
Update ➜ Coroutines
➜
4. Camera & Render
LateUpdate ➜ URP/HDRP

Životní cyklus MonoBehaviour

  • Awake() / Start(): Awake() se volá ihned při inicializaci prefabu (i neaktivního). Start() až před prvním snímkem.
  • FixedUpdate(): Běží nezávisle na FPS s konstantním krokem (\(\Delta t = 0.02\,\text{s}\)). Může se zavolat 0×, 1× i vícekrát za render frame. Určeno pro Rigidbody síly.
  • Update(): Volá se jednou za renderovací snímek s proměnným Time.deltaTime. Zde se čtou vstupy z klávesnice/myši.
  • LateUpdate(): Spustí se až po dokončení všech Update(). Klíčové pro follow-kamery, aby nedocházelo k trhání (jittering).
Ve FixedUpdate() nikdy nenásobit síly Time.deltaTime (fyzika to řeší interně). V Update() naopak násobit vždy.

Příklad: PlayerController.cs

using UnityEngine;

public class PlayerController : MonoBehaviour {
    [SerializeField] private Rigidbody rb;
    [SerializeField] private Transform camRig;
    private Vector3 moveInput;

    void Awake() {
      rb = GetComponent<Rigidbody>();
    }

    // 1. Čtení vstupu každý vykreslený snímek (Variable FPS, starý Input System)
    void Update() {
        moveInput = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
    }

    // 2. Fyzika s fixním krokem (např. 50 Hz, deterministické)
    void FixedUpdate() {
        rb.AddForce(moveInput.normalized * 15f, ForceMode.Acceleration);
    }

    // 3. Zarovnání kamery až po pohybu všech objektů a fyziky
    void LateUpdate() {
        camRig.position = transform.position;
    }
}

Herní smyčka v Godotu (SceneTree Order)

Godot 4 / GDScript
1. Node Tree Init
_enter_tree ➜ _ready (bottom-up)
➜
2. Input Events
_input ➜ GUI ➜ _unhandled_input
➜
3. Physics (60 TPS)
_physics_process(delta)
➜
4. Frame & Render
_process(delta) ➜ RenderingServer

Životní cyklus uzlů (Node)

  • _ready(): Volá se po vložení do stromu zdola nahoru (potomci jsou připraveni dříve než rodič).
  • _unhandled_input(event): Zpracuje vstupy pouze tehdy, pokud je neabsorbovalo UI (např. kliknutí na tlačítko v inventáři).
  • _physics_process(delta): Synchronizováno s interním Physics Serverem (default 60 Hz). Deterministický pohyb a move_and_slide().
  • _process(delta): Běží každý renderovaný snímek (variabilní delta). Vhodné pro vizuální efekty a UI logiku.
  • call_deferred() & queue_free(): Bezpečné asynchronní modifikace scény a mazání uzlů na konci frame.

Příklad: player.gd (CharacterBody3D)

extends CharacterBody3D

const SPEED = 5.0
var move_dir := Vector3.ZERO

func _ready() -> void:
    # Uzel je plně inicializován ve stromu scén
    set_physics_process(true)

# 1. Čtení gameplay vstupu (pouze pokud nebyl zkonzumován UI)
func _unhandled_input(event: InputEvent) -> void:
    var input := Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
    move_dir = Vector3(input.x, 0, input.y).normalized()

# 2. Fixní fyzikální krok (konstantní delta, 60 TPS)
func _physics_process(delta: float) -> void:
    velocity.x = move_dir.x * SPEED
    velocity.z = move_dir.y * SPEED
    if not is_on_floor():
        velocity += get_gravity() * delta
    move_and_slide()

# 3. Vizuální aktualizace renderu každý grafický snímek
func _process(delta: float) -> void:
    $VisualModel.rotate_y(2.0 * delta)

Časování smyčky: Variable vs Fixed TimeStep

Aby hra běžela stejnou rychlostí na různě výkonném hardwaru, využívá se koncept \(\Delta t\) (DeltaTime):

1. Variable TimeStep (\(\Delta t\))

Reálná doba trvání předchozího snímku ($t$ je čas): \[\Delta t = t_{\text{current}} - t_{\text{previous}}\]

Korekce rychlosti posunu ($\vec{p}$ je vektor pozice): \[\vec{p}_{\text{new}} = \vec{p}_{\text{old}} + \vec{v} \cdot \Delta t\]

// Příklad v C# (Unity):
void Update() {
    transform.position += transform.forward * speed * Time.deltaTime;
}
  // Příklad v Godotu
  func _process(delta: float) -> void:
    global_position -= global_transform.basis.z * speed * delta

2. Fixed TimeStep (Fyzika)

Fyzikální simulátory vyžadují přísně deterministické chování.

  • Při variabilním \(\Delta t\) způsobuje velký propad FPS chyby numerické integrace (např. tunelování skrz zdi).
  • Fyzika proto běží na pevné frekvenci (např. 50 Hz \(\to \Delta t = 0.02\text{ s}\)) nezávisle na renderovacích FPS.
  • Pokud snímek trvá déle, engine v jednom snímku provede více kroků fyziky.

Časový rozpočet snímku (Frame Budget)

Pro udržení plynulé snímkové frekvence musí součet operací CPU i GPU skončit v daném časovém okně ($T$ = 1 / FPS):

Cílová frekvence Max. čas na 1 snímek Typické využití v praxi
30 FPS 33.33 ms Mobilní hry, náročné konzolové hry.
60 FPS 16.66 ms Standardní plynulost pro moderní PC a konzolové hry.
120 FPS 8.33 ms E-sport, rychlé kompetitivní střílečky a závodní hry
90–120 FPS (VR) 8.33 – 11.11 ms Virtuální realita (kritické pro prevenci kinetózy / nevolnosti)
Příklad rozpadu rozpočtu 16.66 ms (60 FPS):
Input
Physics 3.0ms
Game Logic 4.0ms
Render Prep 3.0ms
GPU Execution 6.1ms

Renderovací architektury: Forward vs Deferred

Efektivní výpočet barvy pixelu pro \(O\) objektů a \(L\) světel.

Forward Rendering

\(\mathcal{O}(O \times L)\)
[Mesh] ➜ [Vertex + Pixel Shader (Všechna světla)] ➜ [Frame]
Příklad v praxi: Scéna se 100 objekty a 20 světly.
Pro každý z 100 objektů se spustí Pixel Shader, který počítá vliv všech 20 světel (\(100 \times 20 = 2000\) operací). Pokud je vzdálený objekt později překryt jiným (overdraw), čas strávený jeho nasvícením byl zbytečný.
  • Výhody: Nízké nároky na paměť VRAM, přirozená transparentnost, rychlé MSAA vyhlazování.
  • Nevýhody: Velmi špatně škáluje s desítkami/stovkami dynamických světel.

Deferred Rendering

\(\mathcal{O}(O) + \mathcal{O}(L)\)
[Mesh] ➜ [G-Buffer] ➜ [2D Lighting Pass nad viditelnými pixely]
Příklad v praxi: Stejná scéna (100 objektů, 20 světel).
1. Geometry Pass: 100 objektů se bez světel vykreslí 1× do G-Buffer (pozice, normály, albedo).
2. Lighting Pass: 20 světel se aplikuje jako 2D post-pass pouze na reálně viditelné pixely (\(100 + 20 = 120\) průchodů). Žádný overdraw.
  • Výhody: Stovky dynamických světel na scéně bez ztráty FPS.
  • Nevýhody: Vysoké paměťové nároky (VRAM bandwidth), složité řešení průhlednosti.

Pokročilé grafické techniky moderních enginů

1. Virtual Geometry (UE5 Nanite)

Automatická mikro-polygonální geometrie streamovaná v reálném čase. Vykresluje pouze pixely odpovídající reálnému rozlišení obrazovky a eliminuje nutnost ruční tvorby LOD.

2. Real-time Ray Tracing & Lumen

Hardwarově akcelerovaný výpočet reálných odrazů a dynamického globálního osvětlení (GI). Nahrazuje staticky zapečené lightmapy (Lightmap) plně dynamickým modelem.

3. PBR (Physically Based Rendering)

Standardizovaný materiálový model založený na fyzice zachování energie (Albedo, Metallic, Roughness, Normal, Ambient Occlusion).

4. AI Super Sampling (DLSS / FSR / XeSS)

Interní renderování v nižším rozlišení (např. 1080p) a rekonstrukce obrazu do 4K pomocí neuronových sítí a temporálních vektorů na GPU.

Fyzikální engine a prostorové dělení

Detekce kolizí

  • Discrete Collision Detection (DCD): Testuje překryv těles v diskrétních časech \((t_0, t_1)\). Riziko prolétnutí rychlých objektů bez detekce kolize.
  • Continuous Collision Detection (CCD): Počítá swept-volume objemy po trajektorii tělesa v čase.
  • Raycasting: Vrhání paprsků z kamery či zbraně pro okamžitou detekci prvního zasaženého objektu.

Prostorové dělení

\(\mathcal{O}(N \log N)\)

Bez prostorových struktur vyžaduje testování kolizí \(N\) těles naivní složitost \(\mathcal{O}(N^2)\).

  • Octree / Quadtree: Rekurzivní hierarchické dělení 3D prostoru na 8 krychlí (resp. 4 ve 2D).
  • BVH (Bounding Volume Hierarchy): Hierarchie obalových těles (AABB kuliček a kvádrů) umožňující rychlé vyloučení vzdálených objektů.

Správa paměti a Garbage Collection

Problém GC Spikes: Periodické spouštění Garbage Collectoru na spravované haldě (Heap) způsobuje náhodná zamrznutí herní smyčky a propady FPS.

Managed Memory (Unity C# / Godot C#)

  • Alokace objektů probíhá na řízené haldě (.NET GC).
  • Vysoká bezpečnost kódu (žádné use-after-free, memory leaks jsou vzácnější).
  • Nevýhoda: Neřízené okamžiky čištění paměti.

Manual / Unmanaged (Unreal C++)

  • Přímá správa paměti, Custom arena allocator.
  • Reference counting a garbage collection přes UPROPERTY() a chytré ukazatele (TSharedPtr).
  • Výhoda: Nulové nečekané záseky při správném návrhu.
Object Pooling vzor
Při startu scény alokovat pool např. 100 nábojů
➜
Při výstřelu aktivovat náboj z poolu
➜
Po dopadu deaktivovat a vrátit do poolu

Objektový přístup (OOP) a Pointer Chasing

Dědičnost a Náhodná paměť (Godot příklad)

Tradiční stromová hierarchie: Node \(\to\) CanvasItem \(\to\) CharacterBody2D \(\to\) Enemy.

# Godot GDScript - pole instancí
var enemies: Array[Enemy] = []

func _process(delta: float):
    for e in enemies:
        # Každý 'e' je pointer na náhodné místo v RAM!
        e.position += e.velocity * delta
  • Monolitické objekty: Každý Enemy v paměti nese desítky položek (jméno, textury, AI stav, transform, script metadata).

Co je to „Pointer Chasing“?

Paměťová fragmentace (Heap Fragmentation):
Pole enemies neobsahuje samotná data, ale pouze adresy (pointery). Objekty byly alokovány v různém čase na náhodných adresách RAM.
  • Cache Miss: Při iteraci procesor nemůže předvídat další adresu v paměti. L1/L2 Cache selže.
  • Stall procesoru: CPU musí čekat 100–300 cyklů na načtení 64B řádku z hlavní RAM namísto okamžitého výpočtu.
  • \(90\%\) výkonu CPU se ztratí čekáním na sběrnici RAM!

Entity Component System (ECS) a DOTS

Data-Oriented Design

Data-Oriented přístup (Unity C# Příklad)

Data jsou uložena v souvislých polích (Contiguous Memory):

// 1. Komponenty = Čistá data bez metod (žádný overhead)
public struct Position : IComponentData { public float3 Value; }
public struct Velocity : IComponentData { public float3 Value; }

// 2. Systém = Logika iterující nad souvislým polem struktur
public partial class MovementSystem : SystemBase {
    protected override void OnUpdate() {
        float dt = SystemAPI.Time.DeltaTime;

        // Blesková iterace přes pole v L1 CPU Cache:
        Entities.ForEach((ref Position pos, in Velocity vel) => {
            pos.Value += vel.Value * dt;
        }).ScheduleParallel();
    }
}
💡 Entities.ForEach automaticky rozdistribuuje výpočet na všechna dostupná CPU jádra a data proudí přímo přes L1/L2 cache bez RAM stallů.

Unity DOTS & Unreal Mass

Unity DOTS (Data-Oriented Tech Stack):
  • Entities: Ryzí ECS model s alokací po souvislých 16KB blocích (Chunks).
  • C# Job System: Bezpečný multithreading bez race conditions napříč všemi CPU vlákny.
  • Burst Compiler: LLVM kompilátor překládající C# do vektorových SIMD instrukcí (AVX/NEON).
Unreal Mass Entity (MassFramework):
  • Data-oriented framework v UE5 pro simulaci masivních davů (desítky tisíc chodců a vozidel v Matrix Awakens) s minimální režií procesoru.

Textový kód vs Vizuální skriptování

Textový kód (C#, C++, GDScript)

void TakeDamage(float amount) {
    health -= amount;
    if (health <= 0) Die();
}
  • Výhody: Maximální výkon, perfektní pro komplexní matematiku a AI, skvělé verzování v Gitu (diffy, mergování).
  • Nevýhody: Vyšší práh vstupu pro level designéry a umělce.

Vizuální uzly (Unreal Blueprints)

[Event TakeDamage] ➜ [Subtract Health]
                          │
                          ▼
                   [Branch (<= 0)] ➜ [Die]
  • Výhody: Bleskové prototypování, nemožnost udělat syntaktickou chybu, intuitivní pro designéry.
  • Nevýhody: Náročnější verzování (binární soubory), riziko vzniku nepřehledného "Spaghetti kódu".

Asset Pipeline & Optimalizace

Pipeline & Performance

Automatizovaný převod surových dat od grafiků a zvukařů do nativních GPU/CPU binárních formátů:

🎨 Zdrojová data (.FBX, .PNG, .WAV)
➜
⚙️ Import, Komprese & Build Krok
➜
⚡ Engine Asset (.UASSET / .META)
1. GPU Bloková komprese textur (BC7, ASTC)

Formáty PNG/JPG jsou pro GPU nepoužitelné — musely by se celé dekomprimovat do obrovské nekomprimované VRAM (1 textura 4K = 64 MB). Blokové formáty (BC1–BC7 na PC/konzolích, ASTC na mobilech) komprimují bloky 4×4 pixelů v poměru 4:1 až 8:1 a GPU je čte přímo z VRAM bez nutnosti dekomprese do RAM.

2. Mipmapping & Šetření propustnosti

Předpočítaná řada zmenšených verzí textury (\(1/2, 1/4, 1/8\dots\)) stojící pouze \(+33\%\) VRAM. Zabraňuje třepetání pixelů (aliasing / texture shimmering) a šetří propustnost GPU sběrnice načítáním miniaturních textur pro vzdálené polygony.

3. Kompilace shaderů & PSO (Pipeline States)

Překlad vyšších jazyků (HLSL/GLSL) do binárního GPU mezikódu (SPIR-V, DXIL). V moderních API (D3D12, Vulkan) se stavy pipeline předkompilují do PSO objektů, což zabraňuje zásekům při prvním spatření nového efektu ve hře (Shader Compilation Stutter).

4. LOD (Level of Detail) & Nanite

Klasické diskrétní stupně (LOD0–LOD3) redukují počet polygonů vzdálených modelů. Moderní enginy (UE5 Nanite) přecházejí na mikro-polygonální geometrii (Meshlets), která plynule streamuje detail sítě odpovídající přesně hustotě pixelů na obrazovce.

Přehled „Velké trojky“ na trhu

Srovnání platform

Hernímu průmyslu dnes dominantně vládne trojice prověřených univerzálních enginů:

UNITY 6

- Absolutní dominance na mobilním trhu (Android / iOS)
- Excelentní 2D i 3D podpora v jednom balíku
- Lídr v oblasti VR, AR a XR headsetů
- Obrovský Asset Store a trh práce (C# ekosystém)
- Data-Oriented Technology Stack (DOTS / ECS)
- Rychlý iterační cyklus a snadný vstup pro začátečníky

UNREAL ENGINE 5

- Průmyslový standard pro AAA hry a high-end konzole
- Špičkový fotorealismus (Nanite geometrie, Lumen GI)
- Využití ve filmovém průmyslu (Virtual Production)
- Kompletní přístup k C++ zdrojovému kódu na GitHubu
- Robustní vizuální skriptování v Blueprintech
- Integrované AAA podsystémy (Chaos Physics, GAS, Mass)

GODOT 4

- Rychle rostoucí Indie scéna a aktivní komunita
- 100% Free a Open-Source (MIT): nulové poplatky
- Extrémně lehký (~60 MB portable editor)
- Čistá a intuitivní stromová architektura (Node Trees)
- Nativní dedikovaný 2D engine bez 3D projekce
- Jazyk GDScript s podporou C# a C++ (GDExtension)

Unity 6: Všestranný ekosystém

Nejrozšířenější herní engine světa pohánějící přes \(50\%\) všech mobilních titulů a více než 25 platforem.

Hlavní výhody (Pros)

  • Vysoká produktivita v C#: Moderní .NET CoreCLR / IL2CPP, rychlý vývoj a silný typový systém.
  • Dominance v 2D, Mobile & VR: Bezkonkurenční optimalizace pro iOS, Android a Meta Quest.
  • Bohatý Asset Store & Komunita: Statisíce hotových pluginů, modelů, shaderů a tutoriálů.
  • Flexibilní architektura: Volitelný přechod z klasického OOP (MonoBehaviour) na vysoce výkonný DOTS (ECS).

Hlavní nevýhody (Cons)

  • Fragmentace renderovacích pipeline: Přechod mezi Built-in, URP a HDRP způsobuje nekompatibilitu materiálů.
  • Garbage Collection záseky: Správa paměti v C# vyžaduje pečlivý pooling, jinak hrozí periodické propady FPS.
  • Uzavřený C++ zdrojový kód: Přístup ke zdrojovému kódu jádra vyžaduje nákladnou Enterprise licenci.
  • Nestabilita API balíčků: Časté deprecations a experimentální stavy nových modulů v Package Manageru.
Známé tituly: Hollow Knight, Genshin Impact, Cuphead, Beat Saber, Ori and the Will of the Wisps, Subnautica

Unreal Engine 5: Špičkový fotorealismus

Nezpochybnitelný standard pro AAA herní produkci, filmový průmysl a vizualizace vyvíjený společností Epic Games.

Hlavní výhody (Pros)

  • Fotorealismus v základu: Nanite (neomezená geometrie bez ručních LODů) & Lumen (dynamické GI a odrazy).
  • 100% přístup k C++ kódu: Kompletní zdrojový kód na GitHubu s možností přímých úprav a debugování.
  • Bezkonkurenční Blueprints: Plnohodnotný visual scripting umožňující vytvořit kompletní hru i bez psaní C++.
  • Kompletní sada AAA nástrojů: Niagara (částice), Chaos (fyzika), Control Rig (animace), Mass AI.

Hlavní nevýhody (Cons)

  • Extrémní HW nároky: Vyžaduje špičkový vývojářský počítač (výkonné vícejádrové CPU, rychlé NVMe, 32GB+ RAM).
  • Masivní velikost: Instalace >100 GB; finální herní balíčky mají běžně desítky až stovky gigabajtů.
  • Strmá křivka učení: Komplexní C++ makra (UCLASS, UPROPERTY), dlouhé kompilace shaderů a C++ kódu.
  • Nevhodný pro lehké 2D & casual mobily: Příliš velký engine overhead pro jednoduché a minimalistické hry.
Známé tituly: Fortnite, S.T.A.L.K.E.R. 2, Cyberpunk (nový díl), The Witcher 4, Black Myth: Wukong, Tekken 8

Godot 4: Open-source autonomie

Komunitou tvořený, nezávislý a 100% open-source engine vydaný pod plně svobodnou MIT licencí.

Hlavní výhody (Pros)

  • 100% Free & MIT Licence: Žádné licenční poplatky, žádné povinné odvody, úplné vlastnictví vytvořeného díla.
  • Extrémně lehký (~60 MB): Rychlé spuštění, portable bez instalace, běží i na starším hardwaru.
  • Prvotřídní dedikovaný 2D engine: Skutečný pixelový 2D renderer s vlastními souřadnicemi (nikoliv 3D projekce).
  • Strom uzlů (Node Trees): Vše je uzel a vnořená scéna; maximálně intuitivní a modulární návrh.
  • GDScript a C#: Jazyk navržený pro herní vývoj s rychlým hot-reloadingem.

Hlavní nevýhody (Cons)

  • 3D grafika zaostává za AAA: Chybí ekvivalenty Nanite/Lumen, 3D renderer je vhodný spíše pro stylizované hry.
  • Chybí přímý export na konzole: Kvůli open-source povaze nelze šířit uzavřená SDK (PlayStation/Xbox vyžaduje partnery).
  • Menší ekosystém Assetů: Asset Library je podstatně menší než komerční obchody Unity a Unrealu.
  • Méně pracovních nabídek: Většina velkých herních studií stále vyžaduje primárně Unity nebo Unreal C++.
Známé tituly: Brotato, Cassette Beasts, Dome Keeper, Slay the Spire 2, Buckshot Roulette, Roadwarden

Srovnání technických parametrů

Technický přehled
Technický parametr Unity 6 Unreal Engine 5 Godot 4
Architektura scén GameObjects & Components / DOTS Entities Actors & Components / Mass Entity Strom uzlů (Node Trees & hierarchie scén)
Hlavní programovací jazyky C# (.NET 8 / CoreCLR / IL2CPP) C++20, Blueprints (Visual Scripting), Verse GDScript, C# (.NET 8), C++ (GDExtension)
Renderovací jádro & Pipeline URP (Forward+/Deferred), HDRP, APV Nanite (micropolygony), Lumen (GI), VSM, RHI Forward+ (Vulkan), Mobile (D3D12), Compatibility
Fyzikální engine (Physics) PhysX 4.1 / Havok Physics / Box2D Chaos Physics Engine (nativní multi-thread) GodotPhysics 2D/3D (volitelně Jolt 3D plugin)
2D herní vývoj Dedikované nástroje (Tilemapy, 2D Lights, SpriteShape) Omezená podpora (Paper2D, primárně 3D engine) Nativní 2D engine (pixel-space, 2D světla)
Data-Oriented Tech (ECS) Unity DOTS (Entities 1.0, Job System, Burst) MassFramework (Mass Entity) Standardně OOP uzly (experimentální pluginy)
Multiplayer & Networking Netcode for GameObjects (NGO) / Netcode for Entities Robustní Client-Server model & GAS (Gameplay Ability) High-level Multiplayer API & RPC replikace
Velikost instalace / Editoru ~15–30 GB > 60–120 GB ~60 MB (portable bez instalace)
C++ Zdrojový kód Pouze s Enterprise licencí Plný přístup (GitHub) Open-Source (MIT Licence)
Licenční model Předplatné per seat (Personal do $200k / Pro $2k+) 5 % royalty z tržeb nad $1,000,000 100% Zdarma (žádné poplatky)

Licenční a finanční modely

Při volbě technologie je nutné kalkulovat i finanční dopad při budoucím komerčním úspěchu:

Unity

Předplatné (Per Seat)
  • Personal edice je zdarma do limitu $200k ročních příjmů.
  • Při překročení limitu povinnost platit Unity Pro $2,000+ / rok za každého vývojáře v týmu.

Unreal Engine

5% Royalty Fee
  • Kompletní nástroje i kód jsou zdarma pro všechny.
  • Epic si nárokuje 5 % z hrubých tržeb, ale až poté, co hra vydělá první $1,000,000 USD.

Godot Engine

MIT Licence
  • 0 % poplatků, navždy zdarma.
  • Žádné sledování příjmů, žádné royalty podmínky, absolutní vlastnictví vytvořeného díla.

Jaký engine zvolit pro váš projekt?

Typ projektu a cíle týmu
2D Hra / Indie 3D / Menší tým
Godot
Open-source, bez poplatků, rychlý vývoj
Unity
C# ekosystém, bohatý Asset Store
AAA 3D / Fotorealismus / Velký tým
Unity
Mobilní tituly, AR/VR, multiplatform
Unreal
Nanite, Lumen, Blueprints, film
Vyberte nástroj podle silných stránek vašeho týmu a cílové platformy, nikoliv pouze podle nejnovějších grafických ukázek.