Программы компьютерной графики

Обновлено: 23.11.2024

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

Выпускники этой программы успешно достигают следующих результатов обучения:

  • Определить и продемонстрировать процессы, используемые для создания и изменения цифровых иллюстраций.
  • Планирование проекта с использованием этапов проектирования с письменными, эскизными и окончательными чертежами.
  • Управление файлами и организацией папок, а также форматами файлов для соответствующего использования
  • Определение и обсуждение цветовых режимов компьютера: RGB, CMYK, оттенки серого и растровое изображение.
  • Понимать основные элементы, влияющие на размер изображения при создании цифрового изображения.
  • Используйте стандартное отраслевое программное обеспечение для создания иллюстраций и макетов.
  • Используйте навыки работы с векторной и растровой графикой и определите, как лучше всего ее использовать.
  • Подготовка к работе начального уровня в области компьютерной графики.

Программы

Нажмите на программу, чтобы получить дополнительную информацию.

Компьютерная графика AAS — Степень

ААС в компьютерной графике

Чтобы начать работу по индивидуальному академическому плану, посетите страницу академического планирования или запланируйте встречу с консультантом.

Обзор карьеры и перспективы работы

Успешное завершение этой программы может привести к различным возможностям трудоустройства, большинство из которых требуют продолжения высшего образования на университетском уровне. Ниже приведены примеры связанных профессий и среднегодовая заработная плата в Аризоне согласно отчету о занятости и заработной плате штата за май 2020 года, подготовленному Бюро трудовой статистики США.

Изобразительные художники, в том числе живописцы, скульпторы и иллюстраторы
Создавайте оригинальные произведения искусства, используя самые разнообразные материалы и техники.
$47 050
Графические дизайнеры
Разрабатывают или создают графику для удовлетворения конкретных коммерческих или рекламных потребностей, таких как упаковка, дисплеи или логотипы. Может использовать различные средства для достижения художественных или декоративных эффектов.
$59 530
Веб-разработчики
Разработка и внедрять веб-сайты, веб-приложения, базы данных приложений и интерактивные веб-интерфейсы. Оцените код, чтобы убедиться, что он правильно структурирован, соответствует отраслевым стандартам и совместим с браузерами и устройствами. Оптимизируйте производительность веб-сайта, масштабируемость, код и процессы на стороне сервера. Может разрабатывать инфраструктуру веб-сайтов и интегрировать веб-сайты с другими компьютерными приложениями.
$69 230
Дизайнеры цифровых интерфейсов
Цифровой дизайн пользовательские интерфейсы или веб-сайты. Разрабатывайте и тестируйте макеты, интерфейсы, функции и навигационные меню, чтобы обеспечить совместимость и удобство использования в разных браузерах и устройствах. Может использовать приложения веб-фреймворка, а также клиентский код и процессы. Может оценивать веб-дизайн в соответствии со стандартами сети и доступности, а также может анализировать показатели использования сети и оптимизировать веб-сайты для повышения их конкурентоспособности и рейтинга в поисковых системах. Может разрабатывать и тестировать интерфейсы, облегчающие взаимодействие человека с компьютером и максимально повышающие удобство использования цифровых устройств, веб-сайтов и программного обеспечения с акцентом на эстетику и дизайн. Может создавать графику, используемую на веб-сайтах, и управлять содержимым и ссылками веб-сайтов.
69 230 долларов США

Контактная информация

Брэд Пиз
Заведующий отделением изящных искусств
Профессор компьютерной графики и изящных искусств
(928) 344-7707
Офис: AB 101

Я хотел бы получать электронные письма от UCsanDiegoX и узнавать о других предложениях, связанных с компьютерной графикой.

Научитесь создавать изображения 3D-сцен как в реальном времени, так и с реалистичной трассировкой лучей в этом вводном курсе по компьютерной графике.

Посмотреть видео

Воспроизвести видео для компьютерной графики

Воспроизвести видео для компьютерной графики

Доступен один сеанс:

Я хотел бы получать электронные письма от UCsanDiegoX и узнавать о других предложениях, связанных с компьютерной графикой.

Компьютерная графика

Зарегистрироваться сейчас

Сегодня компьютерная графика занимает центральное место в нашей жизни: в фильмах, играх, автоматизированном проектировании, виртуальных симуляторах, средствах визуализации и даже в продуктах и ​​камерах для обработки изображений. Этот курс обучает основам компьютерной графики, применимым ко всем этим областям.

Учащиеся научатся создавать компьютерные изображения 3D-сцен, в том числе пролеты объектов, создавать средство просмотра сцен в реальном времени и создавать очень реалистичные изображения с помощью трассировки лучей. Мы начнем с простого примера наблюдения за чайником из любой точки пространства, поняв основы математики размещения виртуальной камеры. Далее вы узнаете, как использовать языки программирования графики в реальном времени, такие как OpenGL и GLSL, для создания собственного средства просмотра сцен, позволяющего вам летать и манипулировать 3D-сценами. Наконец, мы научим вас создавать реалистичные изображения с отражениями и тенями с помощью трассировки лучей. CSE167x обучает основам компьютерной графики.

Этот курс длится 6 недель и состоит из четырех сегментов. Каждый сегмент включает в себя индивидуальное задание по программированию:

  1. Обзор и основы математики (домашнее задание 0: 10 % от оценки)
  2. Преобразования (домашнее задание 1: 20 % оценки)
  3. OpenGL и освещение (домашнее задание 2: 35 % оценки)
  4. Трассировка лучей (домашнее задание 3: 35 % оценки)

В этом семестре учащиеся, набравшие в общей сложности 50 % или более, завершат курс и могут получить сертификат Калифорнийского университета в Сан-ДиегоX.

Часто задаваемые вопросы

Какой формат урока?

Занятие будет состоять из лекций, коротких упражнений и домашних заданий. В каждом из четырех сегментов курса будет по 2-3 лекции. Каждая лекция включает в себя 3-5 лекционных видеороликов продолжительностью от 10 до 20 минут. После каждого видео-лекции будет небольшое упражнение, которое поможет вам проверить свое понимание материала.

Ваша оценка будет полностью определяться заданиями по программированию, по которым вы немедленно получите отзыв от автооценщика. Вы можете отправить свое задание на автооценку несколько раз; будет учитываться только ваша последняя отправка.

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

Будет ли доступен текст лекций?

Да. Стенограммы всех наших лекций будут синхронизированы с видео.

Нужно ли мне смотреть лекции в прямом эфире?

Нет. Вы можете смотреть лекции на досуге. Вы можете «работать на опережение», если хотите двигаться быстрее, чем сроки. И наоборот, вы можете прогрессировать более медленными темпами. Обратите внимание, что сертификаты будут выдаваться только тем учащимся, которые наберут необходимый балл, сдав задания в установленные сроки.

Сколько стоит пройти курс?

Ничего: курс бесплатный. Если вы планируете в будущем много заниматься программированием графики, мы бы порекомендовали руководства по программированию OpenGL и GLSL, но покупать их ни в коем случае не обязательно. По этим темам существует множество бесплатных онлайн-ресурсов, и мы будем публиковать ссылки на них.

Какая компьютерная система мне нужна для курса?

Материал курса включает переносимое программирование на C++/OpenGL/GLSL. Мы предоставляем скелетный код для всех основных платформ (Windows, Mac OS, Linux). Это современный курс, связанный с программируемыми шейдерами, но любая машина, построенная за последние несколько лет, должна подойти. Мы даем много советов и советов по компиляции, а Домашнее задание 0 предназначено для того, чтобы убедиться, что вы можете компилировать и работать с автогрейдером. Вам нужна какая-то среда разработки C++; мы предоставляем несколько ресурсов, которые помогут вам приступить к домашнему заданию 0. В крайне маловероятном случае, если вы не сможете заставить свою машину работать, мы надеемся, что у вас будет достаточно времени, чтобы найти другую систему.

Буду ли я изучать Maya/DirectX/3D Studio Max и т. д.?

Этот курс посвящен основам компьютерной графики и охватывает концепции, а не тонкости конкретного программного пакета. Тем не менее, вы сможете писать сложные интерактивные и автономные программы для трехмерной графики в конце курса на C++, OpenGL и GLSL.

Могу ли я связаться с инструктором или ассистентами?

Да, но не напрямую. Дискуссионные форумы являются подходящим местом для вопросов о курсе. Инструкторы будут следить за дискуссионными форумами и стараться отвечать на самые важные вопросы; во многих случаях реакция других учащихся и сверстников будет адекватной и более быстрой.

У меня инвалидность (зрение/слух и т. д.). Могу ли я пройти курс?

В большинстве случаев да. Мы предоставляем стенограммы всех лекций. Многие ведущие исследователи компьютерной графики страдали такими нарушениями зрения, как дальтонизм.Однако, поскольку это курс компьютерной графики, основанный на сравнении визуальных изображений, мы, вероятно, не можем обеспечить адекватную поддержку для тех, кто официально признан слепым.

Этой осенью у меня плотный график. Могу ли я пройти курс?

Курс требует около 12 часов работы в неделю, а задания (где вам дается две недели) требуют времени. Сертификаты достижения требуют проходной балл. Конечно, вы можете просто пройти лекции или попробовать выполнить некоторые задания, если вы не заинтересованы в сертификате; мы надеемся предоставить что-то для всех.

Ключевые слова: 3D, ракурс, стереоскопическое зрение, начало координат, координаты, система координат, 3D-сцена, топология, модель, сетка, многоугольник, вершины, ребра, перспективная проекция, усеченная видимость, перспективное деление, подобные треугольники, экран пробел, нормализовать.

Понять, как это работает!

Scratchapixel доступен для всех. Это уроки для всех уровней. Конечно, это требует минимум знаний в программировании. Хотя мы планируем написать краткий вводный урок по программированию в ближайшем будущем, миссия Scratchapixel заключается не в том, чтобы научить вас программированию. Тем не менее, пока вы будете изучать применение различных методов, используемых для создания CGI, вы также, вероятно, улучшите свои навыки программирования в процессе и узнаете несколько приемов программирования. Считаете ли вы себя новичком или экспертом в программировании, вы найдете здесь всевозможные уроки, адаптированные к вашему уровню. Начните с простого, с базовых программ и продвигайтесь вперед. Пока мы говорим о сложности, если вы посмотрите на список уроков для каждой категории, вы увидите математическую метку, за которой следует ряд плюсов (знак «+»). Чем больше плюсов, тем сложнее уроки математики (максимум три плюса).

Нежное введение в программирование компьютерной графики

Вы хотите изучать компьютерную графику. Во-первых, вы знаете, что это такое? Во втором уроке этого раздела вы сможете найти определение компьютерной графики, а также узнать, как она вообще работает. Возможно, вы слышали о таких терминах, как моделирование, геометрия, анимация, 3D, 2D, цифровые изображения, 3D-окно просмотра, рендеринг в реальном времени, композитинг, но вы не знаете, что они означают и, что более важно, как они связаны друг с другом. Второй урок этого раздела ответит на эти вопросы. После этого вы должны немного знать о программировании компьютерной графики, но иметь общее представление о компьютерной графике и различных инструментах и ​​процессах, связанных с созданием компьютерной графики.

Что дальше? Наш мир принципиально трехмерен. По крайней мере, насколько мы можем ощущать это своими чувствами. К чему некоторые люди любят добавлять измерение времени. Время играет важную роль в CGI, но мы вернемся к этому позже. Тогда объекты из реального мира трехмерны. Мы думаем, что с этим фактом мы все можем согласиться, не прибегая к его доказательству. Однако, что интересно, так это то, что зрение, одно из чувств, с помощью которых можно познавать этот трехмерный мир, в основном представляет собой двухмерный процесс. Мы могли бы, может быть, сказать, что образ, созданный в нашем уме, безразмерен (мы еще не очень хорошо понимаем, как образы «появляются» в нашем мозгу), но когда мы говорим об образе, он обычно означает для нас плоскую поверхность, на в котором размерность объектов уменьшена с трех до двух измерений (поверхность холста или поверхность экрана). Единственная причина, по которой это изображение на холсте действительно кажется нашему мозгу точным, заключается в том, что объекты становятся меньше по мере удаления от того места, где вы стоите, — эффект, называемый ракурсом. Если вы еще не убеждены, думайте об изображении как о не более чем зеркальном отражении. Поверхность зеркала совершенно плоская, и все же мы не можем провести различие между взглядом на изображение сцены, отраженной от зеркала, и взглядом непосредственно на сцену: вы не воспринимаете отражение, а только объект. Только благодаря тому, что у нас есть два глаза, мы можем видеть вещи в 3D, что мы называем стереоскопическим зрением. Каждый глаз смотрит на одну и ту же сцену под немного другим углом, и мозг может использовать эти два изображения одной и той же сцены для приблизительного определения расстояния и положения объектов в трехмерном пространстве относительно друг друга. Однако стереоскопическое зрение весьма ограничено, поскольку мы не можем очень точно измерить расстояние до объектов или их размер (что могут сделать компьютеры). Человеческое зрение — довольно сложный и впечатляющий результат эволюции, но это, тем не менее, трюк, и его легко обмануть (на этом основаны многие трюки фокусников). В какой-то степени компьютерная графика является средством, с помощью которого мы можем создавать образы искусственных миров и представлять их мозгу (посредством зрения) как переживание реальности (то, что мы называем фотореализмом), точно так же, как зеркало. отражение.Эта тема довольно распространена в научной фантастике, но технологии не так уж далеки от того, чтобы сделать это возможным.

На самом деле здесь важно сказать, что, хотя может показаться, что мы больше сосредоточены на процессе создания этих изображений, который мы называем рендерингом, компьютерная графика предназначена не только для создания изображений, но и для разработки методов имитации таких вещей, как движение жидкостей, движение мягких и твердых тел, поиск способов анимации объектов и аватаров таким образом, чтобы их движение и все эффекты, возникающие в результате этого движения, точно имитировались (например, когда вы идете, форма ваших мышц меняется, и общая внешняя форма вашего тела является результатом деформации этих мышц ? чтобы создать реалистичный аватар, вам нужно найти способы имитации этих эффектов. Мы также узнаем об этих методах на Scratchapixel.

Что мы уже узнали? Что мир трехмерен, то, как мы смотрим на него, двумерно, и что если вы можете воспроизвести форму и внешний вид объектов, мозг не сможет сделать разницу между прямым взглядом на эти объекты и взглядом на них. на изображении этих объектов. Компьютерная графика не ограничивается созданием фотореалистичных изображений, но, хотя создавать нефотореалистичные изображения легче, чем совершенно фотореалистичные, целью компьютерной графики явно является реализм (в большей степени в том, как вещи движутся, чем в том, как они выглядят).

Все, что нам нужно сделать сейчас, это узнать, каковы правила создания такого фотореалистичного изображения, и это то, что вы также узнаете здесь, на Scratchapixel.

Описание объектов, составляющих виртуальный мир

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

Рисунок 1: двухмерная декартова система координат, определяемая двумя ее осями (x и y) и началом координат. Эту систему координат можно использовать в качестве эталона для определения положения или координат точек на плоскости.

Рисунок 2: прямоугольник можно описать, указав координаты его восьми углов в декартовой системе координат.

Одним из самых простых и важных понятий, которые мы изучаем в школе, является представление о пространстве, в котором можно определить точки. Положение точки обычно определяется относительно начала координат. На линейке это обычно галочка, отмеченная цифрой ноль. Если мы используем две линейки, одну перпендикулярную другой, мы можем определить положение точек в двух измерениях. Добавьте третью линейку, перпендикулярную первым двум, и вы сможете определить положение точек в трех измерениях. Фактические числа, представляющие положение точки относительно одной из линеек дерева, называются координатами точки. Мы все знакомы с концепцией координат, чтобы отметить, где мы находимся относительно некоторой контрольной точки или линии (например, Гринвичского меридиана). Теперь мы можем определять точки в трех измерениях. Давайте представим, что вы только что купили компьютер. Этот компьютер, вероятно, поставлялся в коробке, а у этой коробки восемь углов (извините за очевидное). Один из способов описать эту коробку — измерить расстояние между этими 8 углами и одним из углов. Этот угол действует как начало нашей системы координат, и, очевидно, расстояние от этого эталонного угла по отношению к самому себе будет равно 0 во всех измерениях. Однако расстояние от эталонного угла до остальных семи углов будет отличаться от 0. Представим, что наш прямоугольник имеет следующие размеры:

угол 1: ( 0, 0, 0) угол 2: (12, 0, 0) угол 3: (12, 8, 0) угол 4: ( 0, 8, 0) угол 5: ( 0, 0) , 10) угол 6: (12, 0, 10) угол 7: (12, 8, 10) угол 8: ( 0, 8, 10)

Рисунок 3: прямоугольник можно описать, указав координаты его восьми углов в декартовой системе координат.

Первое число обозначает ширину, второе число — высоту, а третье — глубину угла. Угол 1, как вы можете видеть, является исходной точкой, от которой были измерены все углы. Все, что вам нужно сделать отсюда, это каким-то образом написать программу, в которой вы определите концепцию трехмерной точки и используете ее для хранения координат восьми точек, которые вы только что измерили. В C/C++ такая программа могла бы выглядеть так:

Как и в любом языке, всегда есть разные способы сделать одно и то же. Эта программа показывает один из возможных способов на C/C++ для определения концепции точки (строка 1) и сохранения углов блока в памяти (в этом примере в виде массива из восьми точек)

Вы каким-то образом создали свою первую 3D-программу. Он еще не создает изображение, но вы уже можете хранить описание 3D-объекта в памяти. В компьютерной графике набор этих объектов называется сценой (сцена также включает в себя концепцию камеры и света, но об этом мы поговорим в другой раз). Как было сказано ранее, нам не хватает двух очень важных вещей, чтобы сделать процесс действительно полным и интересным. Во-первых, чтобы представить коробку в памяти компьютера, в идеале нам также нужна система, которая определяет, как эти восемь точек соединяются друг с другом, образуя грани коробки. В CG это называется топологией объекта (объект также называется моделью). Об этом мы поговорим в разделе Геометрия и в разделе Базовый рендеринг 3D (в уроке по рендерингу треугольников и полигональных сеток). Топология относится к тому, как точки, которые мы обычно называем вершинами, соединяются друг с другом, образуя грани (или плоские поверхности). Эти грани также называются многоугольниками. Коробка будет состоять из шести граней или шести полигонов, а набор полигонов образует то, что мы называем полигональной сеткой или просто сеткой. Второе, чего нам не хватает, — это системы для создания образа этой коробки. Для этого необходимо спроецировать углы коробки на воображаемый холст. Этот процесс мы называем перспективной проекцией.

Создание образа этого виртуального мира

Рис. 4. Если вы соедините углы холста с глазом, который по умолчанию выровнен с нашей декартовой системой координат, и продолжите линии дальше вглубь сцены, вы получите своего рода пирамиду, которую мы называем усеченной пирамидой. . Любой объект, находящийся внутри усеченного конуса (или перекрывающий его), виден и будет отображаться на изображении.

Процесс проецирования трехмерной точки поверхности холста на самом деле включает в себя специальную матрицу, называемую матрицей перспективы (не беспокойтесь, если вы не знаете, что такое матрица). Использование этой матрицы для проецирования точки не является абсолютно необходимым, но значительно упрощает задачу. Однако на самом деле вам не нужны математика и матрицы, чтобы понять, как это работает. Вы можете видеть изображение или холст как некую плоскую поверхность, расположенную на некотором расстоянии от глаза. Проведите четыре линии, начиная от глаза и заканчивая каждым из четырех углов холста, и продолжайте эти линии дальше в мир (насколько вы можете видеть). Вы получаете пирамиду, которую мы называем усеченной пирамидой (а не усеченной пирамидой). Усеченная пирамида обзора определяет некий объем в трехмерном пространстве, а сам холст — всего лишь плоскостное сечение этого объема, перпендикулярное линии взгляда. Поместите коробку перед холстом. Затем проведите линию от каждого угла коробки к глазу и отметьте точку, где линия пересекает холст. Найдите на холсте точки, соответствующие каждому из двенадцати краев коробки, и проведите линию между этими точками. Что ты видишь? Изображение коробки.

Рис. 5. Коробка перемещается перед камерой. Координаты углов блока выражаются относительно этой декартовой системы координат.

Рисунок 6: соединение углов коробки с ушком.

Рисунок 7: точки пересечения между этими линиями и холстом являются проекцией углов блока на холст. Соединяя эти точки друг с другом, создается каркасное изображение коробки.

Три линейки, используемые для измерения координат угла коробки, образуют то, что мы называем системой координат. Это система, в которой точки могут быть измерены. Координаты всех точек относятся к этой системе координат. Обратите внимание, что координата может быть как положительной, так и отрицательной (или нулевой) в зависимости от того, находится ли она справа или слева от начала координат линейки (значение 0). В компьютерной графике эту систему координат часто называют мировой системой координат, а точку (0,0,0) — началом координат.

угол 1: ( 1, -1, -5) угол 2: ( 1, -1, -3) угол 3: ( 1, 1, -5) угол 4: ( 1, 1, -3) угол 5: (-1, -1, -5) угол 6: (-1, -1, -3) угол 7: (-1, 1, -5) угол 8: (-1, 1, -3)< /p>

Рисунок 8: координаты точки P', проекция P на холст может быть вычислена с помощью простой геометрии. Говорят, что прямоугольники ABC и AB'C' подобны.

Давайте посмотрим на нашу установку сбоку и проведем линию от одного из углов к исходной точке (точке обзора). Мы можем определить два треугольника: ABC и AB'C'. Как видите, эти два треугольника имеют одинаковое начало координат (А). Они также в некотором роде копии друг друга в том смысле, что угол, определяемый ребрами AB и AC, равен углу, определяемому ребрами AB', AC'. Такие треугольники называются подобными. Подобные треугольники обладают интересным свойством: отношение между их смежными и противолежащими сторонами одинаково. Другими словами:

Поскольку холст находится на расстоянии 1 единицы от начала координат, мы знаем, что AB' равно 1. Мы также знаем положение B и C, которые представляют собой координаты z (глубина) и y (высота) соответственно угла. Если мы подставим эти числа в приведенное выше уравнение, мы получим:

Где y' на самом деле координата y точки, где линия, идущая от угла к точке обзора, пересекает холст, то есть, как мы говорили ранее, точка, из которой мы можем нарисовать изображение коробки на холсте. холст. Таким образом:

Как видите, проекция координаты y угла на холст представляет собой не что иное, как координату y угла, деленную на его глубину (координату z). Вероятно, это одно из самых простых и фундаментальных соотношений в компьютерной графике, известное как z или перспективное деление. Точно такой же принцип применяется к координате x. Координата x точки проекции (x') – это координата x угла, деленная на его координату z.

Обратите внимание, что, поскольку координата z точки P в нашем примере отрицательна (мы объясним, почему это всегда так, в уроке из раздела «Основы 3D-рендеринга», посвященном матрице перспективной проекции), когда x- координата положительна, координата x спроецированной точки станет отрицательной (аналогично, если Px отрицательно, P'.x станет положительной. Та же проблема возникает с координатой y). В результате изображение 3D-объекта зеркально отображается как по вертикали, так и по горизонтали, а это не тот эффект, который нам нужен. Таким образом, чтобы избежать этой проблемы, вместо этого мы разделим координаты P.x и P.y на -P.z; это сохранит знак координат x и y. В итоге получаем:

Теперь у нас есть метод для вычисления фактического положения углов по мере их появления на поверхности холста. Это двумерные координаты точек, проецируемых на холст. Давайте обновим нашу базовую программу для вычисления этих координат:

С тех пор, как я открыл свои личные сообщения и пригласил всех задавать мне вопросы, связанные с компьютерной графикой, в Твиттере, мне очень часто задают вопрос "Как мне начать программировать графику?". Поскольку я устал отвечать на один и тот же вопрос снова и снова, я соберу в этом посте сводку всех моих советов по этому вопросу.

Совет 1. Начните с трассировки лучей и растеризации

За прошедшие годы появилось довольно много API для кодирования аппаратного обеспечения GPU: Direct3D, OpenGL, Vulkan, Metal, WebGL и т. д. С этими API может быть сложно начать работу, поскольку они часто требуют большого количества шаблонного кода, и я считаю, что они совсем не подходят для начинающих. В этих API даже понимание того, как нарисовать один треугольник, является серьезной задачей для новичка в графике. Конечно, альтернативой является использование игрового движка, такого как Unity и Unreal Engine. В этом случае игровой движок будет выполнять утомительную работу по общению с графическим API за вас. Но я думаю, что даже игровой движок - это слишком сложно для полного новичка, и это время следует потратить на что-то более простое.

Вместо этого я рекомендую новичкам написать самостоятельно либо трассировщик лучей, либо программный растеризатор (или и то, и другое!). Проще говоря, трассировщик лучей — это программа, которая рендерит 3D-сцены, посылая лучи от каждого пикселя на экране, и выполняет целую кучу расчетов пересечений и расчетов физического освещения, чтобы определить окончательный цвет каждого пикселя. Программный растеризатор визуализирует 3D-сцены (которые в большинстве случаев представляют собой просто набор треугольников) следующим образом: для каждого треугольника, который мы хотим нарисовать, мы выясняем, какие пиксели на экране покрывает этот треугольник, а затем для каждого такого пикселя. , мы вычисляем, как свет взаимодействует с точкой на треугольнике, которая соответствует пикселю. Из этого расчета взаимодействия света мы получаем окончательный цвет пикселя. Растеризация намного быстрее, чем трассировка лучей, и это алгоритм, который современные графические процессоры используют для рисования 3D-сцен. А программная растеризация просто означает, что мы выполняем эту растеризацию на ЦП, а не на ГП.

И растеризация, и трассировка лучей на самом деле представляют собой два довольно простых алгоритма, и новичку гораздо проще реализовать их, чем разобраться с современными графическими API. Кроме того, реализуя один или оба из них, новичок познакомится со многими концепциями, которые являются фундаментальными для компьютерной графики, такими как точечные произведения, кросс-произведения, матрицы преобразования, камеры и т. д., без необходимости тратить время на борьбу с современной графикой. API: с. Я считаю, что эти разочаровывающие графические API отталкивают многих новичков от графики, и превращение вашего первого проекта компьютерной графики в растеризатор или трассировщик лучей — хороший способ обойти это начальное препятствие.

Обратите внимание, что одним большим преимуществом написания программного растеризатора перед изучением графического API является то, что становится намного проще отлаживать вещи, когда что-то неизбежно где-то пойдет не так, поскольку эти API в основном просто предоставляют интерфейс для графического процессора. растеризатор (примечание для педантиков: да, это большое упрощение, поскольку они также предоставляют доступ к таким вещам, как компьютерные шейдеры). Поскольку вы знаете, как эти API работают за кулисами, отладка вашего кода становится намного проще.

Для написания трассировщика лучей я всегда рекомендую читать книги Питера Ширли. Для написания программного растеризатора см. следующие ресурсы: 1, 2, 3, 4.

Совет 2: изучите необходимую математику

Мой следующий совет: вам следует изучить математику, необходимую для компьютерной графики. Количество математических понятий и методов, которые я использую в своей повседневной работе в качестве программиста графики, на удивление мало, так что это не так много работы, как вы думаете. Когда вы новичок в графике, область математики под названием «линейная алгебра» будет вашим основным инструментом. Концепции линейной алгебры, которые вы в основном будете использовать, перечислены ниже

  • Дополнительный продукт
  • Перекрестный продукт
  • Сферические координаты
  • Матрица преобразования (подсказка: в качестве графического программиста вы в основном будете использовать только матрицы 4x4, поэтому не тратьте время на изучение больших матриц)
  • Матрица вращения, матрица масштабирования, матрица переноса, однородные координаты, кватернионы
  • Ортонормированная базовая матрица
  • Расчеты пересечений. В основном такие вещи, как вычисление пересечения между лучом и сферой, или плоскостью, или треугольником.
  • Порядок столбцов и строк — это деталь, которая, по моему опыту, сбивает с толку многих новичков, поэтому убедитесь, что вы полностью понимаете это. Прочтите эту статью, чтобы получить хорошее объяснение.
  • Как смоделировать камеру с помощью матрицы обзора и матрицы преобразования перспективы. Это то, с чем сталкиваются многие новички, поэтому эту тему следует изучить тщательно и глубоко. Матрицу перспективы смотрите в этом руководстве. Матрицу просмотра см. здесь.

От начального до среднего уровня вы, как правило, не столкнетесь с какой-либо другой математикой, кроме приведенной выше. Как только вы доберетесь до таких тем, как физически обоснованное затенение, область математики под названием «исчисление» также станет полезной, но это история для другого дня :-).

Я перечислю некоторые ресурсы для изучения линейной алгебры. Хороший онлайн-учебник по математике на эту тему — иммерсивная линейная алгебра. Хорошая серия видео по теме, позволяющая наглядно представить многие понятия, — Сущность линейной алгебры. Кроме того, в этом учебнике по OpenGL есть полезные объяснения элементарных, но полезных концепций линейной алгебры. Еще один ресурс — The Graphics Codex.

Совет 3. Советы по отладке при рисовании первого треугольника

После того как вы напишете трассировщик лучей или растеризатор, вы почувствуете себя более уверенно при изучении графического API. Привет, мир изучения графического API — это просто нарисовать треугольник на экране. На самом деле начертить свой первый треугольник может быть на удивление сложно, поскольку обычно требуется большое количество шаблонов, а отладка графического кода, как правило, затруднена для новичков. Если у вас возникли проблемы с рисованием вашего первого треугольника и вы получаете черный экран вместо треугольника, ниже я приведу несколько советов по отладке. Это краткое изложение шагов, которые я обычно выполняю, когда сталкиваюсь с той же проблемой.

  • Обычно проблема кроется в матрицах проекции и представления, так как в них легко ошибиться. В вершинном шейдере к каждой вершине вы сначала применяете матрицу модели, затем матрицу вида, а затем матрицу проекции, а затем, наконец, выполняете разделение перспективы (хотя это последнее деление обычно обрабатывается за кулисами, а не то, что вы делаете явно). Попробуйте выполнить этот процесс вручную, чтобы проверить работоспособность ваших матриц.Если вы ожидаете, что вершина будет видна, то после разделения перспективы вершина будет находиться в нормированных координатах устройства, а x должен быть в диапазоне [-1, +1], y в диапазоне [-1, +1] и z в диапазоне [-1,+1], если OpenGL (z в диапазоне [0,1] для Direct3D). Если значения координат не находятся в этом диапазоне, то вершина, которую вы ожидали увидеть, не видна (поскольку все, что находится за пределами этого диапазона, обрезается аппаратным обеспечением), и, вероятно, что-то не так с вашими матрицами.
  • Вы не забыли очистить буфер глубины до разумных значений? Например, если вы используете функцию сравнения глубины D3DCMP_LESS(Direct3D), а затем очистите буфер глубины до 0, тогда ничего никогда не будет отрисовано, потому что ничто никогда не пройдет проверку глубины! Подводя итог, убедитесь, что вы полностью понимаете тест глубины и настроили разумные параметры тестирования глубины.
  • Убедитесь, что вы правильно загружаете свои матрицы (например, матрицы вида и проекции) в графический процессор. Нетрудно случайно не загрузить эти данные в GPU. Вы можете проверить загруженные матрицы в отладчике графического процессора, таком как RenderDoc. Точно так же убедитесь, что вы правильно загрузили все данные вершин. Распространенной ошибкой является загрузка только части данных вершин из-за просчетов.
  • Отбраковка обратной стороны — еще одна деталь, которая сбивает с толку многих новичков. В OpenGL, например, все треугольники, обращенные назад, отбрасываются по умолчанию, и если вы создали треугольник, обращенный назад, и визуализировали его, он вообще не будет отображаться. Я рекомендую временно отключить отсечение обратной грани, когда вы пытаетесь визуализировать свой первый треугольник.
  • Проверьте все коды ошибок, возвращаемые функциями графического API, поскольку они могут содержать полезную информацию. Если у вашего API есть доступ к какому-либо уровню отладки, например Vulkan, вам следует включить его.
  • Для любой отладки графики я настоятельно рекомендую изучить какой-либо инструмент отладки графического процессора, например RenderDoc или Nsight. Эти инструменты предоставляют вам обзор текущего состояния графического процессора для каждого шага вашего графического приложения. Они позволяют вам легко увидеть, правильно ли вы загрузили свои матрицы, проверить настройки буфера глубины и сравнения глубины, настройки отсечения задней поверхности и т. д. Все состояние, которое вы можете установить в графическом API, можно легко проверить в таких программах. Еще одна функция RenderDoc, которая мне очень нравится и которую я часто использую, заключается в том, что она позволяет вам выполнять фрагментный шейдер пикселя (хотя на момент написания эта функция кажется эксклюзивной для Direct3D). Вы просто щелкаете по пикселю, и RenderDoc позволяет вам пройти через фрагментный шейдер, который был оценен, и присвоил пикселю его текущее значение цвета. Эта функция показана на гифке ниже. Я щелкаю по оранжевому пикселю, а затем выполняю вычисления фрагментного шейдера, в результате которых пикселю присваивается этот цвет. Посетите канал Baldur Karlsson на YouTube, если хотите увидеть больше функций RenderDoc.

Совет 4. Хорошие проекты для начинающих

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

  • Создайте сферическую сетку, используя сферические координаты, и визуализируйте ее.
  • Реализовать шейдер для простого рассеянного и зеркального затенения.
  • Направленные источники света, точечные источники света и точечные источники света
  • Визуализация карты высот
  • Напишите простой анализатор для простого формата сетки, такого как Wavefront .obj, импортируйте его в свою программу и визуализируйте. В частности, попробуйте импортировать и визуализировать сетки с текстурами.
  • Реализовать простой модуль визуализации Minecraft. Рендерить миры, похожие на Minecraft, на удивление просто, а также очень познавательно.
  • Визуализировать отражения с помощью кубических карт
  • Визуализация теней с использованием карт теней.
  • Реализовать отбраковку усеченного представления. Это простой, но очень практичный метод оптимизации.
  • Реализовать отрисовку систем частиц.
  • Узнайте, как реализовать гамма-коррекцию.
  • Реализовать сопоставление нормалей
  • Узнайте, как эффективно рендерить большое количество сеток с помощью экземплярного рендеринга.
  • Анимируйте сетки с помощью скиннинга сетки.

А вот еще несколько более продвинутых методов:

  • Различные эффекты постобработки. Как Блум (с использованием размытия по Гауссу), фоновая окклюзия с SSAO, сглаживание с FXAA.
  • Внедрить отложенное затенение — метод, полезный для рендеринга многих источников света.

На этом статья заканчивается. Вот и все советы, которые я мог дать по этой теме.

Читайте также: