Трёхмерная компьютерная графика

Новосибирск, осень 2018

Описание

Курс посвящён программированию интерактивной трёхмерной графики. Программа затрагивает, как теоретические основы построения изображений объёмных сцен без привязки к какому-либо аппаратному или программному обеспечению, так и практические аспекты их реализации на современных GPU. Областями приложения навыков, полученных в курсе, являются компьютерные игры, интерактивные геоинформационные системы, системы трёхмерного моделирования.

На лекциях рассматриваются математические основы трёхмерной графики (однородные координаты, проекционные матрицы, моделирование камеры, симуляция освещения). Разбирается устройство конвейера растеризации видеокарт и его программирование (пиксельные и вершинные шейдеры, буферизация, устройство памяти). Проводится знакомство с API доступа к функционалу графических ускорителей – DirectX 11. Изучаются такие алгоритмы, как скелетная анимация, т.н. «bump mapping» и его модификации, фильтрация изображений на видеокарте, отложенное затенение (англ. «deffered shading»), виртуализация видеопамяти (т.н. «mega texture»). Показываются приёмы построения теней и некоторые идеи оптимизации скорости отрисовки.

Для успешного прохождения курса желательны навыки программирования на языке C++. Так же необходимо владение аппаратом линейной алгебры и аналитической геометрии на уровне первого курса соответствующих факультетов (физический, маханико-математический или информационных технологий).

Сайт курса: https://sites.google.com/view/nsk-cg-csc/

Преподаватели

Список лекций

Введение. Расчёт матриц камеры и проекции

Описание правил игры курса. Проецирование трёхмерных точек на плоскость экрана: однородные координаты, построение матриц проекции и камеры.

Вершинный конвейер. Введение в DirectX 11

Абстракция вершинного конвейера видеокарты: буферы вершин и индексов, вершинный шейдер, буфер глубины и отсечение, растеризация. API: инициализация DirectX11, основы языка HLSL, выделение ресурсов.

Анимация. Программирование освещения

Анимация морфированием. Скелетная анимация. Уравнение освещения. Модель Фонга: рассеянное и зеркальное освещение. Источники света: бесконечно удалённый, точечный, конусный.

Пиксельный конвейер. Управление текстурами

Абстракция пиксельного конвейера видеокарты: пиксельный шейдер, буфер шаблона (англ. stencil buffer). Текстуры: виды, текстурные координаты, фильтрация.

Микрорельеф: bump mapping и модификации

Построение TBN-базиса, алгоритмы bamp mapping, parallax mapping, relief mapping.

Фильтрация изображений на граф. ускорителе

Рендеринг в текстуру, фильтрация изображений в пиксельном шейдере, примеры простейших фильтров.

Семинар

Семинар

Организация и оптимизация вершинных данных

Алгоритмы «pseudo instancing» и «instancing». Схема «ping-pong», параллельные чтение и запись в один буфер.

Построение теней. Отложенное закрашивание

1) Буфер шаблона (англ. «strncil buffer»). Проекционные тени на плоскости. Построение теней через т.н. «теневые карты» (англ. «shadow maps»).

2) Алгоритмы отложенного затенения (англ. «deffered shading») и т.н. «light prepass rendeing».

Визуализация спецэффектов системами частиц

Варианты применения систем частиц. Смешивание и сортировка, ориентация к наблюдателю, приёмы оптимизаций, сглаживание мест пересечения со сценой (англ. soft particles), перенос вычислений на GPU.

Алгоритм виртуализации текстурной памяти

Mega texture: построение текстурной развёртки, организация текстурного атласа и таблицы страниц. Примеры игр, где реализовано.

Обработка квадродеревьев на видеокарте

Возможности современных графических ускорителей на примере алгоритма обработки квадро-деревьев: геометрические шейдеры (англ. «geometry shaders»), hull & domain shaders (реферат статьи «Quadtrees on GPU»; авторы: Jonathan Dupuy, Jean-Claude Iehl и Pierre Poulin; альманах GPU Pro 5).

Приёмы рендеринга полупрозрачных объектов

Алгоритм «depth peeling», независящие от порядка рендеринга формулы смешивания, по-пиксельные связные списки. Реферат статьи «Weighted Blended Order-Independent Transparency»: http://jcgt.org/published/0002/02/09/.