📚 Hub Books: Онлайн-чтение книгРазная литератураПиксель. История одной точки - Элви Рэй Смит

Пиксель. История одной точки - Элви Рэй Смит

Шрифт:

-
+

Интервал:

-
+
1 ... 102 103 104 105 106 107 108 109 110 ... 170
Перейти на страницу:
факультет компьютерной графики, впоследствии ставший не менее влиятельным, чем Университет Юты.

Рис. 7.13

В 1967 году Ружло и Шумахер уже делали трехмерную визуализированную графику в реальном времени. Но их система зависела от неисчерпаемых ресурсов NASA и использовала специализированное оборудование. Я различаю анимацию в реальном времени и анимацию для цифрового кино, где вычисление каждого кадра занимает столько времени, сколько необходимо. «Корнеллский фильм» сделали обычные люди из университета на компьютерах общего назначения. Можно ли считать его первой трехмерной компьютерной анимацией?

Есть и другие претенденты на это звание. Например, односекундная анимация 1971 года с лицом, превращающимся в летучую мышь, — о ней писал Эд Катмулл, в то время аспирант Университета Юты. Или анимированная рука, которую Эд программировал, как он пишет, в январе, а продемонстрировал в августе 1972 года (рис. 7.13, слева). Или анимированное человеческое лицо, созданное одноклассником Эда Фредом Парком в том же 1972 году (рис. 7.13, в центре). Или «Корнеллский фильм», работу над которым, по словам Марка Левоя, ученика Дона Гринберга, завершили в середине осени 1972-го (рис. 7.13, справа). Из них только «Корнеллский фильм» был цветным. Анимация Эда с рукой, завершенная в конце 1971-го или, возможно, в начале января 1972-го, и анимированное лицо Фреда, созданное, по-видимому, примерно тогда же и в рамках того же задания, одерживают победу в этой гонке. Будем считать результат ничьей. Но в очередной раз за один-единственный год произошла замечательная технологическая конвергенция. 1972-й стал для компьютерной графики тем же, чем 1895-й — для кинематографа.

Больше одного треугольника

Самые интересные модели содержат множество треугольников, часто — миллионы. Вспомните «проволочные» чайники из шестой главы с сотнями треугольников. Или здания в кампусе Корнелла из «Корнеллского фильма». Если присмотреться, то можно заметить, что треугольники часто перекрывают друг друга. А если они непрозрачные, то, как правило, один треугольник скрывается за другим. Возможно, из всех головоломных вопросов компьютерной графики в те первые дни наибольшее внимание привлекала проблема видимой поверхности (или скрытых поверхностей). Суть одна и та же: какие из треугольников модели в конкретной сцене попадут в видоискатель виртуальной камеры согласно Центральной Догме?

Сам смысл понятия «геометрия» подразумевает, что мы точно знаем, где находится каждая точка треугольника — в любом месте на его поверхности, — то есть что мы можем это вычислить. Мы также знаем, где находится виртуальная камера и в какую сторону она смотрит.

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

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

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

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

Между прочим, буферизацию глубины предложил в своей знаменитой докторской диссертации Эд Катмулл в декабре 1974-го. Немного раньше, в апреле того же года, похожую идею выдвинул в своей диссертации Вольфганг Штрассер. Но Штрассер писал на немецком, поэтому Катмулл не знал о его работе.

Рис. 7.14

Рис. 7.15

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

Но пересекающиеся треугольники нельзя расположить в порядке глубины. Каждый из них частично расположен глубже другого, а частично нет. В таком случае вам придется разделить их на более мелкие треугольники, которые не пересекаются (рис. 7.15). Независимо от того, используете ли вы буферизацию глубины для полностью видимых поверхностей или упорядоченных по глубине (непересекающихся) треугольников, только магия Усиления обеспечит повторение вычислений для миллионов треугольников. Огромное количество вычислений не предполагает высокой сложности, особенно когда каждое из них так же легко понять, как буферизацию глубины.

Тени

Центральная Догма утверждает, что цифровые объекты отбрасывают тени так же, как и объекты реального мира. Компьютерная графическая модель изначально содержала только описания объектов и расположение виртуальной камеры. Но понятие модели вскоре расширилось, пополнившись еще и источниками света, такими как лампы. В первые дни источник света был очень простым. Он располагался в одной точке и излучал белый свет во все стороны. Это был точечный источник света. По мере роста вычислительной мощности источники света становились все более причудливыми и все более тщательно имитировали настоящие. У них появились протяженность (то есть они располагались на некоторой площади, а не в идеальной точке), цвет и другие свойства реальных ламп, фонарей и даже солнца.

Проблема расположения теней, по сути, практически не отличается от проблемы скрытой поверхности. Это особенно очевидно, если рассмотреть пример с одним простым точечным источником света. Представьте, что виртуальная камера расположена там же, где и он. Любая поверхность, которая не видна оттуда, должна находиться в тени.

Таким образом, вычисление теней — это хорошо отлаженный, хотя

1 ... 102 103 104 105 106 107 108 109 110 ... 170
Перейти на страницу:

Комментарии

Обратите внимание, что комментарий должен быть не короче 20 символов. Покажите уважение к себе и другим пользователям!

Никто еще не прокомментировал. Хотите быть первым, кто выскажется?