Пиксель. История одной точки - Элви Рэй Смит
Шрифт:
Интервал:
Я описывал весь процесс так, как будто для всего изображения существует одно значение альфы (непрозрачности). Собственно, это и показано на рисунке 7.28. Но, вводя альфа-канал в каждый пиксель, мы допускаем разную непрозрачность, то есть та же формула применима к каждому пикселю изображения. Некоторые пиксели переднего плана могут быть прозрачными, некоторые — непрозрачными, а некоторые — частично непрозрачными. Соответственно, фоновый пиксель может частично просвечиваться в этих местах. Таким образом, пиксель RGBA сохраняет цвет сцены в каналах RGB и указывает, насколько этот цвет имеет значение для общей картинки с помощью канала A, или альфа-канала. Так что 32-битные пиксели стали нашей нормой.
Альфа, используемая попиксельно, показана на рисунке 7.29. Объект переднего плана — это просто круглый красный диск без фона. Все пиксели за его пределами прозрачны (или частично прозрачны по краю диска). Крайнее правое изображение — это красный диск, наложенный на левое квадратное изображение. Это делается с помощью альфа-канала красного диска попиксельно. В остальном последовательность изображений аналогична приведенной выше: глобальная альфа используется для постепенного наложения одного изображения на другое — в данном случае изображения круга на квадратный фон.
Альфа-канал — идея довольно тривиальная. По крайней мере, так мы думали тогда. Мы додумались до нее первыми только потому, что у нас было сколько угодно пиксельной памяти. Идея оказалась настолько простой, что на следующее утро я полностью реализовал ее, добавив несколько страниц в наше общее руководство по программированию. Новый тип пикселей описывался как RGBA для красного, зеленого и синего цветов и альфа-канала — это название используется до сих пор. Эд тоже быстро выполнил свою часть работы, изменив программу расчета скрытых поверхностей, чтобы она сохраняла четвертое значение (непрозрачность) для каждого пикселя переднего плана в новом формате RGBA.
Чтобы запустить свои тесты, Эду пришлось выполнить лишь следующие шаги. (1) Использовать мою «старую» 24-битную программу восстановления, чтобы загрузить любое фоновое RGB-изображение b в кадровый буфер. Предполагалось, что фон везде непрозрачен. (2) Использовать мою новую 32-битную программу восстановления, чтобы получить в том же буфере RGBA-изображение f переднего плана, которое его программа сохранила в новом формате. Программа восстановления выполняла формулу «альфа f плюс один минус альфа b» для каждого пикселя, где A каждого пикселя на изображении переднего плана содержало значение альфа (непрозрачности), которое вычислила программа Эда. И фоновое изображение проступало в тех местах, где альфа-«ручка» меняла изображение переднего плана с непрозрачного на прозрачное.
Рис. 7.28
Рис. 7.29
Новый альфа-канал упростил размещение персонажей переднего плана поверх фоновых изображений. Части персонажа, заполненные сплошным цветом, непрозрачны. Отсканированные кривые, очерчивающие цветные области, имели «мягкие» края, то есть были частично прозрачны. Это позволяло им изящно сочетаться с задним планом. Все остальные части цифрового целлулоидного листа прозрачны — с альфой, равной нулю.
В программе «сканируй и раскрашивай» создать альфа-канал для карандашного рисунка не так уж и сложно. Сам рисунок и есть собственный альфа-канал (ну или, если быть точнее, негатив рисунка). Рисунок делается черным карандашом на белом фоне, поэтому его негатив будет белым на черном фоне. Предположим, отсканированный рисунок находится в 8-битном кадровом буфере, где 255 (все биты равны единице) соответствуют белому пикселю, а 0 (все биты равны нулю) — черному. Оттенки серого на отсканированном рисунке находятся в диапазоне от 254 до 1. Давайте выберем один из них, например значение серого 100. Чтобы получить альфа-канал для рисунка, нужно вычесть каждый пиксель из белого (255) — так и создается негатив изображения. Таким образом, белый пиксель в альфа-канале имеет значение 255–255, или 0. Он прозрачен. Черный пиксель в альфа-канале имеет значение 255–0, или 255. Он непрозрачен. А серый, например 100, в альфа-канале принимает значение 255–100, или 155, что соответствует частичной непрозрачности (разделим 155 на 255 и получим примерно 61 % непрозрачности). Любые области, залитые непрозрачным цветом, будут, конечно, полностью непрозрачными, с альфой 255.
Идея альфа-канала кажется тривиальной, но на самом деле очень глубока. Мне потребовалось много лет, чтобы осознать всю ее глубину. Следующий шаг в ее развитии несколько лет спустя сделали наши коллеги из Lucasfilm Том Портер и Том Дафф, которые добавили к новому каналу «алгебру» — нетривиальное расширение элементарной идеи. И еще они заметили, что, если сохранять в пикселе цвета, «предварительно умноженные» на альфу, вместо необработанных, получится сэкономить огромное количество умножений, которые не нужно будет делать каждый раз, когда изображение восстанавливается в кадровый буфер. Тогда умножение еще оставалось медленным и дорогим. Мы вчетвером получили премию Технической академии за совместный вклад в цифровое кинопроизводство — универсальный метод комбинирования цифровых изображений.
Многие популярные программы без альфа-канала не стали бы сегодня такими, какие они есть. На ум сразу приходят Adobe Photoshop и Microsoft PowerPoint. Но даже операционные системы вроде Windows и MacOS используют альфа-канал для создания всплывающих значков, закругленных углов и частично прозрачных окон.
Компания Altamira Software, которую я основал много лет спустя, после Pixar, строилась на идее, вытекающей из улучшенного алгоритма альфа-канала: цифровое изображение не обязательно должно быть прямоугольным. Предварительное умножение на альфу позволяет нам свергнуть тиранию прямоугольника. Рассмотрим красный диск на рисунке выше. Его форма определяется ненулевыми значениями пикселей его альфа-канала. Для любых практических целей пикселей с альфой, равной нулю, просто не существует. Диск — это круглый объект. Это спрайт (или фигурное изображение), состоящий из пикселей, а не из геометрии. Мы с коллегами написали программу для композитных изображений Altamira Composer, основанную на этой идее, и продали ее (и компанию) в 1995 году фирме Microsoft.
В альфе нет ничего, требующего подчинения Центральной Догме, хотя альфу, безусловно, часто используют и в ритуалах, связанных с ее почитанием. Однако программы для рисования и их родственники, такие как Photoshop, не подпадают под действие Центральной Догмы, равно как и Altamira Composer.
Трехмерная графика набирает обороты
Неудивительно, что, обладая таким количеством сотрудников с университетским образованием, Лаборатория компьютерной графики в Нью-Йоркском технологическом институте напоминала академическую кафедру.
Поделиться книгой в соц сетях:
Обратите внимание, что комментарий должен быть не короче 20 символов. Покажите уважение к себе и другим пользователям!