Трёхмерная компьютерная графика
Новосибирск, осень 2017
Описание
Курс посвящён программированию интерактивной трёхмерной графики. Программа затрагивает, как теоретические основы построения изображений объёмных сцен без привязки к какому-либо аппаратному или программному обеспечению, так и практические аспекты их реализации на современных GPU. Областями приложения навыков, полученных в курсе, являются компьютерные игры, интерактивные геоинформационные системы, системы трёхмерного моделирования.
На лекциях рассматриваются математические основы трёхмерной графики (однородные координаты, проекционные матрицы, моделирование камеры, симуляция освещения). Разбирается устройство конвейера растеризации видеокарт и его программирование (пиксельные и вершинные шейдеры, буферизация, устройство памяти). Проводится знакомство с API доступа к функционалу графических ускорителей – DirectX 11. Изучаются такие алгоритмы, как скелетная анимация, т.н. «bump mapping» и его модификации, фильтрация изображений на видеокарте, отложенное затенение (англ. «deffered shading»), виртуализация видеопамяти (т.н. «mega texture»). Показываются приёмы построения теней, рендеринга полупрозрачный объектов и некоторые идеи оптимизации скорости отрисовки.
Для успешного прохождения курса желательны навыки программирования на языке C++. Так же необходимо владение аппаратом линейной алгебры и аналитической геометрии на уровне первого курса соответствующих факультетов (физический, маханико-математический или информационных технологий).
Сайт курса: https://sites.google.com/view/nsk-cg-csc/
Преподаватели
Список лекций
Описание правил игры курса. Проецирование трёхмерных точек на плоскость экрана: однородные координаты, построение матриц проекции и камеры.
Абстракция вершинного конвейера видеокарты: буферы вершин и индексов, вершинный шейдер, буфер глубины и отсечение, растеризация. API: инициализация DirectX11, основы языка HLSL, выделение ресурсов.
Уравнение освещения. Модель Фонга: рассеянное и зеркальное освещение. Источники света: бесконечно удалённый, точечный, конусный.
Абстракция пиксельного конвейера видеокарты: пиксельный шейдер, буфер шаблона (англ. stencil buffer). Текстуры: виды, текстурные координаты, фильтрация.
Построение 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/.
Решение небольших индивидуальных задач, рассмотрение на уровне идей некоторых алгоритмов глобального освещения, знакомство с проф. деятельностью лектора.