Компьютерная графика
Все объяснения, задачи и лабораторная в одном месте.
Можно сохранить страницу в PDF через печать браузера. Для печати разборы ответов раскрываются автоматически.
1. Vectors, matrices и coordinate spaces
Объяснение
Векторы описывают направление и величину, матрицы — линейные преобразования. Homogeneous coordinates позволяют включить перенос. Порядок умножения матриц важен и зависит от принятой конвенции.
Задача для самостоятельного решения
Одинаковы ли «повернуть, затем перенести» и обратный порядок?
Показать разбор ответа
Нет: перенос тоже может повернуться. Проверяйте преобразование на простой точке и документируйте row/column-vector convention.
2. Geometry pipeline и rasterization
Объяснение
Rasterization превращает примитивы в фрагменты экрана. Depth test выбирает видимую поверхность по глубине. Clipping и perspective divide происходят до обычного экранного рисования.
Задача для самостоятельного решения
Почему без depth buffer дальний треугольник может перекрыть ближний?
Показать разбор ответа
Результат зависит от порядка рисования. Depth test сравнивает глубины, позволяя выбрать ближний фрагмент независимо от такого порядка для непрозрачной геометрии.
3. Shaders и GPU programming
Объяснение
Shader — программа стадии GPU pipeline. Vertex shader преобразует вершины, fragment shader вычисляет значения фрагментов. Работа каждого shader должна соблюдать ограничения доступа и синхронизации.
Задача для самостоятельного решения
Где вычислять цвет по освещению для каждого пикселя?
Показать разбор ответа
Обычно во fragment shader с интерполированными нормалью и координатами. Нормаль после интерполяции часто нужно нормализовать.
4. Textures, sampling и materials
Объяснение
Текстура хранит дискретные samples, фильтрация восстанавливает значение между ними. Mipmaps уменьшают aliasing при уменьшении. Цветовые текстуры и числовые данные требуют разной интерпретации gamma.
Задача для самостоятельного решения
Почему normal map не следует читать как обычный sRGB-цвет?
Показать разбор ответа
Её каналы кодируют числовое направление. Gamma-преобразование исказит вектор и освещение.
5. Lighting, shadows и physically based rendering
Объяснение
Освещение зависит от геометрии, материала и источников. PBR-модель стремится к согласованному энергетическому поведению, но остаётся приближением. Shadow map сравнивает глубины из точки зрения света.
Задача для самостоятельного решения
Откуда берётся shadow acne?
Показать разбор ответа
Из-за точности и самозатенения при сравнении глубины. Bias помогает, но слишком большой отрывает тень от объекта.
6. Optimization, profiling и visual debugging
Объяснение
GPU-профилирование различает стоимость draw calls, геометрии, fill rate и памяти. Оптимизация без определения bottleneck может не менять frame time. Средний FPS скрывает длинные кадры.
Задача для самостоятельного решения
Почему уменьшение полигонов не ускорило сцену?
Показать разбор ответа
Ограничением могли быть тяжёлые fragment shaders или overdraw. Измерьте GPU stages и сравните frame time после контролируемого изменения.
Лабораторная работа
Подготовка
Python 3 для проверки преобразования; затем собственный graphics project.
Учебный пример
def translate(point, offset):
return tuple(a+b for a,b in zip(point,offset))
def scale(point, factor):
return tuple(a*factor for a in point)
print(translate(scale((1,1),2),(3,0)))
print(scale(translate((1,1),(3,0)),2))Как работает пример и что ожидать
Результаты (5,2) и (8,2) различаются. Порядок преобразований влияет на положение объекта. Этот опыт нужно повторить матрицами в конвенции выбранного graphics API до отладки большой сцены.
Итоговая работа
Реализуйте треугольник, камеру, depth test, текстуру и свет. Добавьте тест изменения aspect ratio, правильную интерпретацию color/data textures и GPU-профиль. Опишите, какой этап ограничивает frame time.
Проверка результата
1. Опишите исходные данные и условия запуска, чтобы другой человек мог повторить работу.
2. Приложите результат обычного сценария и сравните его с ожидаемым.
3. Проверьте неверный вход, граничный случай и отказ зависимости, если она есть.
4. Объясните выбранное решение и известное ограничение.
5. Сохраните исправления после самопроверки вместе с примером, который раньше не работал.
Как оценить работу
По каждому пункту поставьте 0 (не выполнено), 1 (выполнено с пробелами) или 2 (результат воспроизводим и объяснён). Если обязательный сценарий не работает, вернитесь к нему независимо от общей суммы. Это рубрика самопроверки: сайт не исполняет присланный код и не выдаёт автоматическую оценку проекта.