Read the book: «Курс компьютерной графики»
ГЛАВА 1. ВВЕДЕНИЕ В КОМПЬЮТЕРНУЮ ГРАФИКУ
1.1. Что такое компьютерная графика
Компьютерная графика - это область информатики, занимающаяся созданием,
обработкой, анализом и визуализацией изображений с помощью вычислительных
систем. Она находится на стыке математики, физики, алгоритмов и аппаратного
обеспечения.
Основные задачи компьютерной графики:
- Синтез изображений (rendering) - создание картинки по описанию сцены
- Обработка изображений - фильтрация, улучшение, сжатие, анализ
- Геометрическое моделирование - описание формы объектов
- Анимация - создание движения
- Визуализация данных - представление научной и инженерной информации
1.2. Краткая история
1950-1960-е годы
- 1950 - Ben Laposky создаёт первые "осциллонные" абстрактные изображения
- 1961 - Spacewar! - одна из первых компьютерных игр (MIT)
- 1963 - Sketchpad Айвена Сазерленда: интерактивное черчение световым пером.
Эта работа считается рождением интерактивной компьютерной графики.
- 1968 - Сазерленд демонстрирует первый HMD (шлем виртуальной реальности)
1970-е годы
- Алгоритмы затенения Гуро (1971) и Фонга (1975)
- Z-буфер Эдвина Катмулла (1974)
- Первые системы CAD
- Появление персональных компьютеров с графическими возможностями
1980-1990-е
- Появление графических ускорителей (SGI, позже 3dfx Voodoo, NVIDIA, ATI)
- OpenGL (1992) и DirectX
- Фотореалистичный оффлайн-рендеринг в кино (Pixar, Industrial Light & Magic)
- Расцвет 3D-игр (Quake, Unreal)
2000-2020-е
- Программируемые шейдеры (DirectX 8/9, OpenGL 2.0)
- Физически корректный рендеринг (PBR)
- Аппаратный ray tracing (NVIDIA RTX, 2018)
- Нейросетевой рендеринг, Gaussian Splatting, генеративный ИИ
1.3. Основные направления
1. Синтез изображений (Computer-Generated Imagery, CGI)
Создание изображений "с нуля" по геометрическому и физическому описанию сцены.
2. Обработка и анализ изображений
Работа с уже существующими растрами: фильтрация, сегментация, распознавание,
компьютерное зрение.
3. Геометрическое моделирование
Способы представления формы: полигональные сетки, NURBS, неявные поверхности,
воксели, облака точек.
4. Компьютерная анимация
Ключевые кадры, скелетная анимация, физическая симуляция, motion capture.
5. Научная и информационная визуализация
Отображение многомерных данных, потоков, объёмных сканов (КТ, МРТ).
6. Виртуальная, дополненная и смешанная реальность (VR / AR / MR)
1.4. Области применения
- Кино и телевидение (визуальные эффекты, полная CGI-анимация)
- Компьютерные игры и интерактивные развлечения
- Промышленный дизайн, CAD/CAM/CAE
- Архитектура и строительство (BIM)
- Медицина (визуализация томографии, хирургические симуляторы)
- Научные исследования (молекулярная графика, астрофизика, CFD)
- Симуляторы (авиационные, автомобильные, военные)
- Реклама, дизайн интерфейсов, картография
- Образование и тренажёры
1.5. Базовые понятия
Пиксель (pixel) - наименьший элемент растрового изображения.
Разрешение - количество пикселей (например, 1920x1080).
Глубина цвета - сколько бит отведено на цвет одного пикселя (8, 24, 32 бит).
Кадр (frame) - одно полное изображение.
Частота кадров (FPS) - количество кадров в секунду.
Буфер кадра (framebuffer) - область памяти, в которой формируется изображение.
Конвейер рендеринга (graphics pipeline) - последовательность этапов
преобразования данных сцены в пиксели на экране.
Латентность (latency) - задержка между действием пользователя и обновлением
картинки (критично для VR и игр).
1.6. Программное и аппаратное обеспечение
Программное:
- Графические API: OpenGL, Vulkan, DirectX, Metal, WebGPU
- Движки: Unreal Engine, Unity, Godot, CryEngine
- Пакеты моделирования: Blender, Maya, 3ds Max, Cinema 4D
- CAD: SolidWorks, AutoCAD, FreeCAD
Аппаратное:
- GPU (Graphics Processing Unit) - специализированный процессор
- Видеопамять (VRAM)
- Дисплеи (LCD, OLED, мини-LED), VR-шлемы, графические планшеты
ГЛАВА 2. РАСТРОВАЯ И ВЕКТОРНАЯ ГРАФИКА
2.1. Растровая графика
Растровое изображение - это прямоугольная матрица пикселей. Каждый пиксель
хранит информацию о цвете (и иногда о прозрачности - альфа-канал).
Характеристики:
- Ширина и высота в пикселях
- Глубина цвета (bits per pixel, bpp)
- Цветовое пространство (sRGB, Adobe RGB, Display P3 и др.)
- Наличие альфа-канала
Преимущества:
+ Естественность для фотографий и сложных текстур
+ Простота отображения на растровых экранах
+ Поддержка сложных эффектов и фильтров
+ Хорошая поддержка прозрачности и полупрозрачности
Недостатки:
- Потеря качества при увеличении (пикселизация)
- Большой объём данных (особенно без сжатия)
- Сложность редактирования отдельных объектов сцены
- Зависимость от разрешения
Пример объёма данных:
Изображение 1920x1080, 24 бита на пиксель без сжатия:
1920 x 1080 x 3 байта ~ 6,2 МБ на один кадр.
При 60 кадрах в секунду - уже около 372 МБ/с (отсюда необходимость сжатия
и аппаратного ускорения).
Популярные форматы:
- BMP - простой, без сжатия (или RLE)
- PNG - сжатие без потерь + альфа-канал, идеален для графики с резкими краями
- JPEG - сжатие с потерями, отлично для фотографий
- GIF - до 256 цветов, поддержка простой анимации
- WebP / AVIF - современные форматы с лучшим сжатием
- EXR - HDR-изображения, используется в кино и VFX
- TGA, TIFF - часто применяются в промежуточных пайплайнах
2.2. Векторная графика
Векторное изображение описывается математическими примитивами:
- Точки
- Отрезки и ломаные
- Кривые Безье
- Многоугольники
- Текст (как набор контуров)
- Заливки и обводки
Преимущества:
+ Идеальная масштабируемость без потери качества
+ Компактность для схем, логотипов, иллюстраций
+ Лёгкость редактирования отдельных объектов
+ Возможность точного позиционирования
Недостатки:
- Сложность представления фотореалистичных изображений
- Более высокая вычислительная нагрузка при растеризации сложных сцен
- Ограниченная естественность для органических форм (хотя современные
инструменты сильно продвинулись)
Форматы:
- SVG - стандарт для веба, текстовый XML-формат
- AI - Adobe Illustrator
- EPS - Encapsulated PostScript
- PDF - может содержать как вектор, так и растр
- DXF - обмен данными CAD
Пример SVG (простой круг):
<svg width="100" height="100">
<circle cx="50" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
</svg>