Технології рендерингу та графіки в сучасних слотах
1. читання символів і виграшів, 2. стабільні 60 FPS без перегріву, 3. легкий бандл і швидкий старт, 4. «вау-ефекти» без компромісу з чесністю результату (все візуальне - поверх вже розрахованого результату).
Нижче - системний гайд за технологіями, пайплайном і метриками.
1) Рендер-стек: з чого він складається
2D/WebGL/Canvas — PixiJS, Phaser, in-house движки (HTML5/WebView).
2. 5D/3D - Unity (WebGL/мобайл), PlayCanvas, Three. js.
WebGPU (з'являється) - приріст в шейдерах/пост-процесі і контролі пам'яті.
Аудіо/таймлайн - WebAudio/Unity Audio + таймлайн анімацій (GSAP/Spine/Unity Timeline).
Асети - атласи спрайтів, SDF/MSDF шрифти, Spine/DragonBones, відео/веб-кодеки, текстури з компресією.
Інструменти - Spector. js/DevTools/Unity Profiler, атлас-пакери, компресори ASTC/ETC2/BCn.
2) Графічні моделі: 2D, 2. 5D і помірне 3D
Чисте 2D: плоскі барабани, UI на шарах, фільтри та маски. Швидко і передбачувано.
2. 5D: перспективні барабани, паралакс, нахил/округлення, 3D-елементи поверх 2D UI. Найкраще співвідношення «вау/перформанс».
Повноцінне 3D: сцени бонусів/інтро, колеса удачі, «камера навколо». Вимагає дисципліни: LOD, обмеження матеріалів, спрощений лайтинґ.
Рекомендація: у слоті ключова читаність - на 2D/UI-шарах; 3D - для інтро і рідкісних сет-писів.
3) Шейдери і пост-ефекти (безпечно і економно)
Типові шейдерні блоки:- Glow/Outline для символів/виграшів (SDF/блюр в рендер-таргет).
- Color Grading/HSV Shift для тематичних фаз (день/ніч, бонус).
- Distortion/Heatwave на тлі, щоб не заважало тексту.
- Additive particles для феєрверків (дешеве по блендингу).
- Masks/Stencils для «вікна» на барабани, заощадження overdraw.
Пост-процес розумного рівня: Bloom з downsample chain, Vignette, Chromatic aberration (мінімально). На мобільних - відключаємо/спрощуємо по LOD.
4) Анімації: таймлайни, спини і «почуття виграшу»
Таймлайн: state machine'Idle → Spin → Stop → Count → Celebrate', анімації - детерміновані за часом, результат вже відомий.
Скелетна анімація (Spine/DragonBones): герої/символи-маскоти, економно по пам'яті, легко міняти кліпи.
Tweening (GSAP/Animator): числові анімації інтерфейсу і лічильників виграшу (easeOutExpo для «почуття зростання»).
Синхронізація з аудіо: ключові моменти (стоп барабана/комбо) - через маркери в таймлайні, а не за кадровою логікою.
Motion-доступність: режим «менше руху», відключення шийків/паралаксу.
5) Текстури, атласи і компресія
Атласи спрайтів: великі атласи (2048-4096) для зниження перемикань текстур; групуємо по блендингу.
Компресія:- ASTC (iOS/сучасний Android), ETC2 (Android), BCn (десктоп/WebGL2), fallback WEBP/PNG.
- Зберігаємо mip-рівні для 3D і великих фонів (зменшує shimmering).
- Премультиплірований альфа-канал: коректне змішування і менше ореолів.
- MSDF/SDF шрифти: чіткі заголовки/цифри з контуром/світінням без величезних текстур.
6) Частинки (GPU-friendly)
Білборди з атласом + GPU instancing (в 3D) або батчинг (в 2D).
Additive/Alpha-blend по шарах; обмежуємо тривалість емітерів.
Тонке дозування: частинки «підказують» перемогу, але не перекривають символи.
Pooling об'єктів, щоб не плодити GC-спайки.
7) Композиція сцени і порядок відмальовки
Шари: Back → Reels → Symbols → FX → UI → Overlay.
Спочатку непрозорі, потім напівпрозорі.
Маски/стенсили на барабанах - щоб фон не рендерився «під» прозорі області.
Чіткий Z-порядок, відключення глибини в 2D, щоб не було зайвих тестів.
8) Пайплайн асетів і завантаження
Генерація атласів (TexturePacker/Spine Export), автоматичне різання, імена по хешу ('icon. ab12. png`).
Відкладене завантаження бонус-сцен і важких FX (lazy).
Форматування шрифтів (MSDF), експорт кривих анімацій.
CDN & кеш-бастинг: immutable-асети, короткий TTL у маніфесту.
WebCodecs/WebAssembly для прискореного декодування, OffscreenCanvas для рендеринга поза main thread (де доступно).
9) Продуктивність: цілі та виміри
Цілі: 60 FPS на референс-девайсах; First Playable <5-10 з веб/< 10 з мобайл; Стабільна температура.
Ключові SLI:- Draw calls (більше батчингу, менше перемикань текстур).
- Overdraw (теплова карта - уникаємо прозорих «простирадл»).
- GPU time/CPU time кадру (таймінг рендера і логіки окремо).
- Memory/VRAM (піки, витоки).
- Розмір бандла і p95 завантаження асетів.
- Stutters/GC (кількість і тривалість).
Інструменти: Spector. js, Chrome DevTools/Performance, Safari Web Inspector, Xcode/Android GPU Inspector, Unity Profiler/Frame Debugger.
10) Оптимізації, які «роблять погоду»
Батчинг: групуємо за матеріалами/атласами/блендінгом; в Pixi -'ParticleContainer '/' Geometry'патерни.
LOD: вимикаємо важкі шейдери/частинки на слабких пристроях; альтернативні атласи меншого дозволу.
Піксель-снап і цілочисельні позиції - менше розмиттів при скроллі барабанів.
Зниження прозорості: замінюємо великі альфа-плашки на сплюснуті міші/маски.
Кешуємо рендер цілей (RTT) для повторюваних ефектів.
Скорочуємо шрифти: один MSDF-набір з динамічними стилями замість десятка PNG-шрифтів.
Пост-процес на половинній роздільній здатності (quarter/half res) + білатеральний апскейл.
Анімації лічильників: фрейм-кламп (не більше N оновлень в секунду).
Розумна фізика: ніяких «важких» симуляцій - тільки заздалегідь приготовані криві.
11) Колір, гама і читаність
sRGB/лінійний рендер: коректні кольори і змішування.
Контраст UI: виграшні числа - високий контраст і тіні/аутлайн.
Color-blind friendly: уникати критичних комбінацій (червоний/зелений без доп-кодингу формою).
Фірмовий color grading - обережно, не вбити читабельність символів.
12) Синхронізація графіки з геймплеєм і аудіо
Результат спіна/бонусу обчислюється до анімації; графіка лише відтворює сценарій.
Точки «крещендо» (стоп барабана, мега-виграш) - мітки в таймлайні; звук і вібро прив'язані до них.
Duration budget: стопи барабанів <1. 2–1. 6 с, підрахунок виграшу - швидкий і з можливістю «скіп».
13) Тестування якості графіки
Візуальні снапшоти (regression): символи, шрифти, позиціонування.
Матриця девайсів: бюджетні Android (Mali/Adreno), старі iPhone/iPad, десктопи.
Теплові карти overdraw і профілі GPU.
Юзабіліті на читаність: 3-5 респондентів, різні діагоналі/яскравості, glare-умови.
Доступність: «менше руху», великі CTA, режим високого контрасту.
14) Міні-рецепти (готові шаблони)
А. Барабан з псевдо-3D
Плоска стрічка символів + маска вікна.
Фон з легким паралаксом (дві текстури, різні швидкості).
Шейдер «округлення» країв і легка тінь всередині вікна.
Перемикання анімаційних станів за таймлайном, не за логікою RNG.
B. ефект «великий виграш»
Scale-bounce заголовка (0. 9 → 1. 1 → 1. 0, easeOutElastic).
Additive-частинки феєрверків 0. 8–1. 2 с.
Glow SDF тексту + soft bloom на пів-дозволу.
Кнопка «Пропустити» завжди доступна.
C. «Дешевий» ритм каскадів
Один композитний звук з маркерами; графіка лише «підморгує».
Лічильник X росте кроками, контур символів - через MSDF outline.
Post-ефекти відключаються по LOD на слабких девайсах.
15) Часті помилки і як їх уникнути
Величезні прозорі спрайти → дикий overdraw. Рішення: різати «за формою «/маски/RTT.
Занадто багато шрифтів/стилів → VRAM-вибухи. Рішення: один MSDF-пак, стилі в шейдері.
Відеофони без компресії/паузи → дропи кадрів/нагрів. Рішення: короткі цикли, низький бітрейт, стоп при згортанні.
Випадковий GC під час підрахунку виграшу. Рішення: object pools, prewarm емітерів.
Таймінг по кадрах замість часу → розсинхрон. Рішення: прив'язка до «deltaTime »/таймлайну.
Занадто яскравий bloom → «мило». Рішення: downsample chain + ліміт інтенсивності.
Важкі пост-ефекти на всіх. Рішення: LOD/прапори по девайсу.
16) Чек-лист графічного релізу
Перформанс
- 60 FPS на референсах; піковий кадр <цільового бюджету
- Draw calls в коридорі; батчинг за атласами/матеріалами
- Overdraw не «червоний» на барабанах і UI
- Пам'ять/VRAM в бюджеті, без витоків
Асети
- Атласи по хешам, компресії: ASTC/ETC2/BCn + fallback
- SDF/MSDF шрифти, один набір на проект
- LOD-версії ефектів/фонових сцен
Анімації/таймлайн
- Всі ключові події - за маркерами, «скіп» доступний
- Синхронізовано з аудіо/вібро
- Motion-reduced режим включається
Тести
- Візуальні снапшоти зелені
- Профайли GPU/CPU на матриці девайсів
- Навантажувальні сцени (мульти-виграші, «багато частинок»)
Дистрибуція
- CDN прогрітий, кеш-бастинг працює
- Lazy-loading бонусів і важких FX
- Бандл в ліміті, First Playable в цілі
Графіка в слотах - це баланс естетики та інженерії: шейдери і ефекти для емоцій, батчинг і компресія для швидкості, таймлайни для керованої драми, доступність для всіх гравців. Команди перемагають, коли проектують візуал data-driven, міряють все від draw calls до overdraw, тримають бандли легенями і дають гравцеві «вау» без втрати FPS і читабельності. Саме так народжуються сучасні слоти: красиві, швидкі і чесні.