Перейти к основному содержимому

Разработка графики — итоги

Разработчику Архитектору

Краткое резюме раздела 4.18. Если пункт неясен — откройте главу из оглавления или чек-лист.


Резюме конвейера

  1. Модель — числа в RAM (x, y, hp, флаги)
  2. Update — логика + dt + ввод
  3. Render — команды API (fillRect, draw, drawArrays)
  4. Прослойки — Skia, SDL, ANGLE
  5. Графический API — OpenGL, Vulkan, DirectX
  6. GPU + VRAM — шейдеры, текстуры, framebuffer
  7. Swap + V-Sync — целый кадр на монитор
  8. Растр по кабелю — HDMI/DP, 60–144 Гц

Графический код читается проще, когда каждая строка отнесена к одному из этих этапов.


FAQ

Вопрос. Почему в одном файле и физика, и ctx.arc?

Ответ. Исторически один проект — экономия файлов. Логически это три слоя: модель, update, render. При рефакторинге их разделяют. См. 1, 2.

Вопрос. Модель сама рисует себя на экране?

Ответ. Нет. Модель — только данные. Пока render() не прочитает координаты, пиксели не меняются.

Вопрос. Почему каждый кадр стирают весь canvas?

Ответ. Canvas хранит только пиксели, без списка объектов. Без clearRect останутся следы старых позиций. См. 3.

Вопрос. DOM или Canvas для игры?

Ответ. Игровое поле — Canvas/WebGL. Меню и текст — часто DOM/HTML поверх. См. 2, 7.

Вопрос. Чем Canvas 2D отличается от WebGL?

Ответ. Canvas — команды "нарисуй фигуру", растеризация через Skia. WebGL — треугольники и шейдеры на GPU. См. 7, 11.

Вопрос. Что такое SDL и при чём Pygame?

Ответ. SDL — C-библиотека окна и ввода. Pygame — Python-обёртка над SDL2. См. 8.

Вопрос. Почему круг в 3D — это треугольники?

Ответ. GPU растеризует только треугольники. Окружность — аппроксимация mesh. См. 11.

Вопрос. Что делает ANGLE для WebGL?

Ответ. В Chrome на Windows WebGL идёт через ANGLE → DirectX. Объясняет различия между браузерами и платформами. См. 10.

Вопрос. Почему игра тормозит при 30 FPS, хотя CPU не загружен?

Ответ. Возможно узкое место на GPU или V-Sync cap. Смотрите frame time и профиль GPU. См. 12, 13.

Вопрос. Что такое tearing?

Ответ. Разрыв кадра при swap во время сканирования монитора. Лечится V-Sync или G-Sync. См. 13.

Вопрос. 16.7 ms — откуда цифра?

Ответ. 1000 / 60 ≈ 16.7 ms — бюджет кадра при 60 FPS. Превышение → просадка FPS. См. 13.

Вопрос. Y вверх или вниз?

Ответ. Canvas и большинство 2D API — Y вниз, (0,0) сверху слева. В математических графиках и части движков — Y вверх. См. 2, 5.

Вопрос. Нужен ли Vulkan начинающему?

Ответ. Для старта — Canvas, Pygame или Unity, затем OpenGL/WebGL. Vulkan — для движков и инженеров. См. 11.

Вопрос. Frustum culling — это только 3D?

Ответ. Идея общая: не рисовать невидимое. В 2D — отсечение по границам экрана. См. 4.

Вопрос. Unity Update и render — где граница?

Ответ. Логика в Update; движок рендерит сцену после всех Updates. Кастомная графика — OnRenderObject / URP passes. См. 9, 3.


Терминология раздела

ТерминСмысл
МодельЧисла в RAM — координаты, HP, флаги; без команд рисования
Update / renderЛогика меняет модель; render читает модель и вызывает API
Draw callКоманда GPU «нарисуй этот примитив»; дорогие при тысячах в кадре
Retained modeПлатформа хранит дерево сцены (DOM, Unity)
Immediate modeПрограммист каждый кадр заново отдаёт команды (Canvas, классический GL)
РастризацияПеревод геометрии в сетку пикселей
ШейдерПрограмма на GPU (vertex / fragment)
VRAMВидеопамять — текстуры, буферы кадра
Double bufferingРисование в back buffer, показ front buffer
V-SyncСинхронизация swap с частотой монитора
Frame timeМиллисекунды на полный кадр; 60 FPS ≈ 16,7 ms
FPSКадров в секунду
CullingПропуск невидимых объектов до draw call
HiDPIdevicePixelRatio — физические vs CSS-пиксели canvas
Skia / ANGLE2D-движок Canvas в Chrome; транслятор WebGL → DirectX/Vulkan

Подробнее по этапам — главы 614.


Типичные ошибки

ОшибкаСледствиеЧто делать
Нет clear перед drawшлейф объектовclearRect / fill фон
Без dt в движенииразная скорость на разных FPSумножать на delta time
Рисование в updateсмешение слоёвтолько в render
Игнор devicePixelRatioразмытый canvas на Retinaмасштабировать размер canvas
Upload текстуры каждый кадрCPU/GPU stallзагрузить один раз
Тысячи draw callsузкое место CPUbatching, atlas
Глобальный GL stateслучайный blend/depthVAO, PSO, discipline

Карта раздела

#Тема
1От чисел к картинке
2Модель, update, render
3Цикл и FSM
4Структуры сцены
5Математика
6High-Level API
7Веб
8Python / SDL
9C# / Unity
10Skia / ANGLE
11Графические API
12VRAM / GPU
13Буферизация
14Монитор

Самопроверка — чек-лист. Термины — терминология раздела.