Пиксель. История одной точки - Элви Рэй Смит
Шрифт:
Интервал:
Рассмотрим популярную программу обработки текстов Microsoft Word, с помощью которой я пишу вот эту страницу. Как пользователю, вам достаточно символов на клавиатуре или значков в меню — терминов языка Word. У вас нет необходимости знать длинные последовательности бессмысленных шагов в вашем компьютере, которые вызывает каждый из них. Об этом вообще мало кто задумывается. Нажмем на клавишу с буквой «А». По сути, она запускает длинную последовательность шагов, которые помещают букву «А» нужного шрифта, нужного размера и нужного цвета в нужное местоположение на нужной странице и запускают рендеринг буквы, чтобы она отобразилась. Если вы вставите букву в уже напечатанное слово, то базовые инструкции переместят буквы в модели страницы, чтобы освободить место для новой. При вводе «А» происходит очень много операций, но вас, как пользователя, они не заботят. Вам достаточно знать, что, нажав на клавишу с буквой «A», вы получите букву «А» в нужном местоположении. Точно так же «Вырезать», «Копировать» и «Вставить» — это термины на языке Word, из-за которых происходят удивительные действия, скрытые от вас. По аналогичному принципу работают и такие термины, как «Вставить изображение», «Вставить гиперссылку» и так далее.
Кук и Перлин, создавая язык затенения, двинулись по магистральному направлению в информатике, которое возникало по мере того, как закон Мура позволял компьютерным вычислениям проникнуть во все новые и новые сферы. Суть в том, что поле исследований кристаллизуется созданием компьютерного языка, который фиксирует его формальные алгоритмизированные описания. В середине 1980-х Кук и Перлин применили идею языка описаний к обширной неизведанной территории: обобщили закономерности затенения, создав для него специальный язык.
Мы уже рассмотрели несколько методов затенения: наложение текстур, наложение рельефа, затенение по Гуро, затенение по Фонгу, прозрачность и факторы внешнего вида материала. Можно и дальше объяснять различные техники по отдельности. Прорывной характер идеи Кука и Перлина заключался в возможности воздействовать на затенение визуализируемой поверхности при помощи любого алгоритма компьютерных расчетов.
Предположим, я хочу наложить текстуру и рельефную карту на треугольник. Или, предположим, я хочу сделать поверхность неровной и придать ей окрас латуни. Или скомбинировать все вышеперечисленное. Язык затенения обобщил понятие затенения, или шейдинга. На нем можно написать бесконечное количество программ для затенения. В этом и заключается суть компьютерных вычислений — чудо Гибкости.
Как визуализировать трехмерную сцену
Пришло время разобраться, как виртуальная сцена, описанная с помощью трехмерной геометрии и подробно заданного затенения, преобразуется в двумерное цветное изображение, например в один кадр цифрового фильма. Мы уже рассматривали, как визуализировать треугольники, составляющие сцену, но при этом не говорили о цвете и ограничивались только их очертаниями.
Затем мы рассматривали визуализацию цветных треугольников, которые были значительно больше расстояния между пикселями. Здесь мы остановимся на практически современном случае с сотнями маленьких треугольников, способных провалиться в зазоры между пикселями.
Давайте придерживаться той же стратегии, что и раньше. Я покажу вам, насколько проста основная идея для каждого пикселя. Затем я позволю Усилению, волшебству Эпохи 2, позаботиться об огромном количестве вычислений, необходимых для реализации этой идеи для всего оставшегося кадра или в конечном итоге для всего полнометражного фильма. Здесь начинается нечеловеческая часть работы, но ее нетрудно понять, если вы разберетесь, как устроены основные вычисления.
Итак, представьте, что камера — это вы. Смотрите на мир, удерживая глаза в фиксированном положении. Вы видите мир в двух измерениях и в перспективе (для конкретности предположим, что у вас один глаз закрыт, поэтому камера — это только один глаз). Виртуальная камера в компьютерной графике делает то же самое. «Мир», который она видит, — это невидимая геометрия. Но она досконально изучена, и математика, которая проецирует ее на двумерный кадр, хорошо известна.
Другими словами, мы знаем достаточно, чтобы вычислить, какой треугольник находится перед другим треугольником в модели сцены, которую мы визуализируем. Следовательно, используя упрощение, согласно которому все модели — наборы из (возможно, миллионов) треугольников, мы можем вычислить, в каком порядке визуализировать треугольники.
Я не собираюсь излишне упрощать. Упорядочивание треугольников предполагает колоссальную вычислительную работу, но значительную ее часть выполняют наши верные компьютеры. Нам нужно лишь понять, что определить, какой из двух треугольников находится впереди, довольно просто, если смотреть из виртуальной камеры. Какие треугольники видит камера? Мы обсудили два подхода к поиску видимых поверхностей (из множества возможных): буферизация по глубине и геометрическая сортировка.
Основная проблема заключается в отображении того, что видит виртуальная камера, в геометрическом мире в виде кадра из цветных пикселей, которые становятся видимыми при визуализации. Вот простой способ осознать проблему: представьте, что вы смотрите на мир через окно с москитной сеткой. Она делит двумерный видимый мир на квадратики. Осторожно, еще раз напоминаю: это не пиксели! Но в качестве первого приближения к решению проблемы давайте предположим, что каждый из крошечных квадратиков действительно становится пикселем в итоговом изображении. Такое упрощение часто использовали в старые недобрые времена, из-за чего возникло заблуждение даже среди практикующих специалистов в области компьютерной графики, будто пиксель — это маленький квадратик.
Таким образом, проблема рендеринга общего вида сцены сводится к проблеме визуализации одного пикселя для каждой ячейки сетки-экрана. Какой один цвет представляет все треугольники или все части треугольников, попадающие в этот крошечный квадрат, видимый виртуальной камерой?
Я пишу эти строки, сидя на опрятной кухне в прекрасной квартире в Гамла-Стане, на острове в старинном центре Стокгольма. Я смотрю на мир и вижу бело-голубую посуду на синей полке, специи на другой, стаканы на третьей, черные сковородки и медную посуду над маленькой газовой плитой, сухие цветы, вешалку с блестящими ножами из нержавеющей стали, сушилку для посуды рядом с раковиной и так далее. Слева от меня есть большое окно. На широком подоконнике цветут белая герань и другие растения. Снаружи я вижу каштан, частично заслоняющий желтоватые здания старого Стокгольма, а за ним — голубое небо с кучевыми облаками.
Затем я представляю сетку-экран, отделяющую меня от сцены, которую я только что описал. Моя работа состоит в том, чтобы выбрать только один цвет для визуальной сцены, видимой через каждую ячейку. Представьте себе четырехгранную пирамиду с вершиной в моем глазу, которая проходит через ячейку,
Поделиться книгой в соц сетях:
Обратите внимание, что комментарий должен быть не короче 20 символов. Покажите уважение к себе и другим пользователям!