Второй принцип требует соответствия элементов сцены друг другу. Человек сначала формирует представление о картине в целом, а уже потом рассматривает детали, и важно, чтобы эти детали не вступали в противоречие с первым впечатлением. Если, скажем, вы изображаете стол доисторического людоеда, то мобильный телефон среди обглоданных костей неуместен. Конечно, я утрирую, обычно ситуации менее очевидны: например, к избушке, в которой кто-то живет, обязательно ведет тропинка; на окнах, как правило, висят занавески; дверь рядом с ручкой темнеет от частых прикосновений… Словом, художник должен немного пожить в сцене, чтобы как можно меньше подобных нюансов ускользнуло от его внимания.
   Отражающие поверхности в сцене создают впечатление «связанности». Грубо говоря, если есть две картинки и на одной присутствует «лишнее» отражение (его не должно быть по законам физики, или оно должно быть менее заметно), а на другой «нужного» отражения нет, то зритель охотнее «верит» первой — естественно, при прочих равных условиях. Конечно, и здесь перебарщивать не стоит; не нужно делать предметы сплошь хромированными и зеркальными, достаточно лишь обозначить способность предметов к отражению. Напомню, что нашему мозгу трудно определить, правильное отражение или неправильное, особенно на сложных поверхностях.
   Характерной чертой нашего мира является полное отсутствие острых углов, да, именно полное, все предметы при достаточном увеличении имеют скругленные углы. А в 3D-модели угол может быть точным, и при любом увеличении будет оставаться таковым. Из-за этого переход цвета на углах становится слишком резким и неестественным. Чтобы избежать этого эффекта, приходится «снимать фаску» с углов, заменять прямой угол на несколько тупых, тогда граница цвета становится более «мягкой» и уже не режет глаз.
   Продолжая тему несовершенства нашего мира, вспомним вездесущих спутников человека: пыль и грязь. В какой-то мере все подвержено негативному воздействию окружающей среды. И если художник изобразит мир «стерильным», это вполне может вызвать отторжение у зрителя. Вы никогда не обращали внимания, что машины на автомобильных выставках и салонах выглядят совсем не так, как на улицах города? Поэтому для достижения реалистичности придется не только создать предмет, но и «загрязнить» его и даже состарить. Многие предметы покрыты не только пылью и грязью, но и ржавчиной, гнилью или трещинами. И если ржавчину и гниль реализовать довольно легко (создаваться они будут одинаковыми методами), то трещины придется делать отдельно. Все это не только позволяет придать вещам более правдоподобный вид, но и добавить в картинку детали, на которых глаз может задержаться. Однако не забывайте о чувстве меры: полусгнивший драндулет на скоростном шоссе, кузов которого зияет дырами, смотрится ничуть не реальнее, чем новехонькая, с иголочки машина без единой пылинки.
   Напомню также, что бесконечно тонких предметов в природе не бывает, всё, даже папиросная бумага имеет толщину, а вот поверхность толщиной в один полигон имеет толщину равную нулю. Создавая такие поверхности, 3D-художник рискует не только потерей достоверности изображения, но и корректностью рендеринга. В самом деле, откуда программе знать, какая из сторон такой поверхности является лицевой. Совет прост: если вы не хотите проблем, не создавайте незамкнутые (именно они имеют нулевую толщину) поверхности.
Использование растровых карт при моделировании
   Для создания «плоских» объектов, таких как окна и двери, очень хорошо подходит метод моделирования по растровым картам, проще говоря, по фотографии, которая используется и как чертеж для создания геометрии, и как текстура. Пусть нам надо смоделировать дверь. На фотографии она имеет перспективные искажения, ее форма далека от прямоугольника, тогда как 3D-модель двери должна быть прямоугольной. Для этого искажения убираются при помощи перспективного преобразования (в Adobe Photoshop Transform > Perspective). Теперь мы имеем выровненную фотографию. Она уже подходит для моделирования формы, но еще не годится для использования в качестве текстуры.
   На фотографии видны блики от вспышки (иногда и отражение фотографа попадает в кадр) и некоторые другие детали, которые не должны попасть на текстуру финальной модели. Дверные ручки тоже нужно удалить со снимка, если, конечно, мы не хотим, чтобы они были нарисованы прямо на поверхности модели. Все это следует «подчистить», для чего обычно используется инструмент клонирования (Clone Tool).
   После того как все необходимые операции проделаны, можно приступать к моделингу. Фотография загружается в качестве фона в 3D-редактор, и по ней, как по шаблону, вырисовывается вся геометрия. Начать следует с рамы; толщину и форму в поперечном сечении выбираем исходя из собственного опыта или используя реальные данные. При моделировании избегаем острых углов и делаем модель рамы замкнутой (помните пункты 4 и 6?), а также не используем поверхности, перпендикулярные плоскости окна: текстура на них будет «размазываться». После того как модель рамы готова, на нее можно наложить текстуру самым простым планарным методом (Planar Mapping).
   Теперь приступаем к моделированию стекла. Оно может быть сделано из единственного параллелепипеда, «прошивающего» все перемычки рамы насквозь. Если мы хотим сохранить загрязнения на стекле, на текстуре придется «вычистить» и стекла, чтобы исчезло все, что просвечивает сквозь них, и остались только те загрязнения, которые нам нужны. Эту текстуру стоит «положить» не только в цветовой канал, но и использовать ее как карту прозрачности и отражения, тогда стекло не будет прозрачным и отражающим в загрязненных участках. А если положить ее и в канал неровностей (Bump Mapping), грязь будет выглядеть еще и шероховатой, что тоже добавит реализма. Теперь мы можем вставить стекло в раму, и наше окно будет выглядеть точно так же, как на фотографии!
Мозаичные текстуры и модели
   Часто при текстурировании моделей требуется заполнить большую площадь повторяющимся рисунком: простейший пример — кирпичная стена. Можно, конечно попытаться найти или сделать самому текстуру сразу на всю стену, как мы поступали с окном, но тогда уменьшение масштаба кирпичей потребует новой текстуры. Есть другой, более универсальный путь. Создается так называемая бесшовная (мозаичная) текстура, и поверхность стены «обклеивается» ими как обоями со стыкующимся рисунком.
   Бесшовными такие текстуры называются потому, что при наложении подряд шов между ними становится невидим. В Интернете существуют обширные библиотеки подобных текстур, но использовать их не всегда удобно: во-первых, эти текстуры обычно представлены в недостаточном разрешении; во-вторых, они доступны всем, и зритель может узнать текстуру, которую он видел в другой работе, что сильно испортит впечатление.
   Сейчас мы посмотрим, как самому сделать бесшовную текстуру при помощи цифрового фотоаппарата и графического редактора. Для начала надо сфотографировать интересующий нас объект, например ту самую кирпичную стену. Первое правило при съемке текстур: старайтесь, чтобы цвет всего кадра был равномерным, не должно быть блика от вспышки или неравномерного освещения, а также чтобы линии кладки шли в кадре горизонтально. Но даже если нам не удалось снять стену идеально, большинство огрехов можно поправить в графическом редакторе.
   Теперь надо выделить фрагмент кадра, который впоследствии мы будем размножать. Нам нужно, чтобы как можно больше границ между кирпичами (полосок раствора) попало на края фрагмента и чтобы в него попала ровно половина шва. Затем изображение необходимо циклически сдвинуть (Adobe Photoshop — фильтр Offset) примерно на 50% по горизонтали и вертикали. На изображении возник крест. Если его «замазать» (обычно это делается инструментом Clone), то получится бесшовная текстура. Результат можно проверить повторным сдвигом — никаких швов возникать не должно.
   Теперь размножаем фрагмент кирпичной кладки на требуемую площадь. В отличие от текстур модель может быть не квадратной, то есть мы можем сделать фрагмент кладки, в которой швы будут проходить только между кирпичами. Такой способ разбивки сильно облегчает создание модели.
Карты смещения
   Иногда требуется большую площадь замостить множеством мелких, причем неодинаковых объектов. Эту задачу можно решить при помощи мозаичных моделей. Но если, например, надо создать лужайку, на которой лежит мяч, приминающий траву, то мозаичные модели помогут едва ли — придется вручную «пригибать травинки». Карты смещения позволяют решить эту проблему проще.
   Допустим, наши объекты отличаются друг от друга только небольшим числом параметров. Если их три, то информацию о каждом можно хранить в графическом RGB-файле, в котором каждому объекту соответствует один пиксел. Удобство хранения информации — не главное преимущество карт смещения. Главное — это удобство редактирования. Вы можете «придавить» траву в каком-то участке лужайки прямо в графическом редакторе, изменив яркость тех пикселов, которые соответствуют травинкам под мячом. Также карты смещения могут хранить и смещение объектов (эта функция и дала им название).
Особенности моделирования природной среды
   При моделировании природной среды особое внимание следует уделять отсутствию повторяющихся элементов, единственное повторение может сильно испортить общее впечатление. Однако рисовать каждый листочек на дереве нет ни времени, ни желания. Для этого все объекты обычно разбивают на группы в соответствии с удалением от камеры. Листья на ближнем плане будут хорошо видны, поэтому их форма и текстура должны быть тщательно проработаны, в то время как листья на среднем и дальнем планах могут быть просто нужного цвета и напоминать лист по форме. Для листьев переднего плана создается некоторое количество шаблонов геометрии и текстур. Соответственно, если и того и другого по пять экземпляров, получаем двадцать пять различных типов листа. Обычно сюда входят пожелтевшие, завернувшиеся и больные листья.
   При создании 3D-деревьев сложной формы проблемы обычно возникают на стадии наложения текстуры. С другой стороны, каждая ветка дерева по существу является цилиндром. Для более удобного наложения текстуры дереву приходится менять форму, для этого чаще всего создается скелет, как у компьютерного персонажа. При помощи костей дерево приводится к виду, когда все ветки торчат параллельно стволу, а затем на дерево накладывается текстура посредством цилиндрического проецирования (Cylindrical Mapping), и наконец, дереву придается первоначальная форма. Таким образом, на каждой веточке текстура аккуратно лежит вдоль направления роста.
   Разнообразить картину позволяют капельки росы, насекомые, упавшие листья и ветки. И, конечно же, нужно следить, чтобы сцена не выглядела стерильной, немного «пыли» не помешает.
   В сценах, изображающих природную среду, часто встречаются водные объекты: пруды, лужи и пр. Они не должны выглядеть ни зеркалами, ни бассейнами с идеально чистой водой. Во-первых, поверхность пруда может быть геометрически плоской, и тогда эффекты ряби будут создаваться за счет текстур и освещения. Или же рябь придется создавать с помощью геометрии. Для тихого пруда в лесу подойдет первый способ, если же нужно сделать быстро бегущий ручей, то струи воды придется рисовать полностью.
   Для того чтобы передать глубину пруда, воду стоит сделать как объемный объект, то есть так, как она бы выглядела, если водоем полностью заморозить и достать весь лед. Далее следует тщательно подобрать свойства воды: величины прозрачности, преломления и отражения можно посмотреть в физическом справочнике. Существенно улучшит эффект наличие на дне растительности или каких-то предметов, только часть которых находится над водой: таким образом зритель увидит эффект преломления.
Урбанистические сцены
   При создании урбанистических сцен моделирование (создание геометрии) обычно проще, чем в предыдущем случае. Сказывается обилие правильных форм: прямых линий и окружностей. Зато зритель, особенно горожанин, куда чаще видит подобную среду, и его гораздо труднее обмануть. В чем вы скорее заметите ошибку: в форме листа березы или банки кока-колы? Соответственно моделирование должно быть более точным, да и подбор текстур несмотря на их количество (большинство из них можно сфотографировать, не отходя далеко от дома) не стал проще.
   Улицы города буквально покрыты следами жизнедеятельности людей: будь то брошенный окурок, тормозной след или масляное пятно на асфальте. Соответственно и 3D-реконструкция должна впитать в себя это влияние человека. Так же большинство предметов на улицах сильно изношены, что добавляет кучу проблем художнику.
   Ржавчина — неотъемлемая черта города. И не во всех местах она одинакова: углы и стыки ржавеют быстрее. Не стоит оставлять без внимания дожди и брызги, которые летят от автомобилей. Из-за брызг мусорные контейнеры со стороны дороги всегда более грязные. А пятна ржавчины имеют потеки из-за дождей.
   Городские лужи тоже сильно отличаются от тех, что можно встретить на природе. Почти наверняка ее поверхность будет покрыта хорошо знакомыми радужными пятнами. Дна, скорее всего, не видно, и вода в ней может быть грязной и неоднородной.
Трюки
   Фотография всегда была эталоном для компьютерных художников. Постепенно она стала эталоном реальности и для зрителя. Теперь многие 3D-работы включают в себя и недостатки фототехники, от которых могли бы легко избавиться. Я имею в виду конечную глубину резкости. Некоторые части кадра сознательно размываются, чтобы приблизить результат к фотографии. 3D-работы стилизуют под старые кадры, добавляя шум и царапины. Иногда применяется эффект «нечестного» отражения и окружения. Например, для визуализации автомобиля не всегда создается 3D-окружение. Достаточно бывает использовать некий аналог панорамной фотографии, установленный «вокруг» автомобиля. В результате машина будет находиться в той местности, что запечатлена на фото, и даже отражения и блики на кузове будут выглядеть натурально. Эта технология называется HDRI.
   Обычные панорамные фотографии можно представить как развернутую поверхность цилиндра, раскрашенного таким образом, что если смотреть из его центра, то создается эффект присутствия. HDRI же представляет собой развертку сферы, на которую кроме изображения накладывается карта источников света и карта отражающей способности. Для создания таких файлов применяются программы, похожие на те, что прилагаются ко многим моделям цифровых камер для получения панорамных снимков.
Зачем все это нужно?
   В отличие от классического искусства, 3D далеко не всегда столь самостоятельно. Подавляющее большинство художников работает в индустрии кино и рекламы. И здесь они перестают быть деятелями искусств и превращаются в наемных рабочих. В этих областях обычно их задача сводится к экономии денег. Большинство кадров, которые в кинофильмах делаются при помощи компьютерной графики, с тем или иным успехом можно было бы снять и без использования 3D. Например, в недавнем фильме «Дневной дозор» сцену, в которой автомобиль Mazda RX8 ездит по фасаду гостиницы «Космос», можно было бы отснять на специально сделанной декорации фасада дома или используя уменьшенную модель автомобиля. Но гораздо дешевле и проще обойтись 3D, тем более что и качество ничуть не пострадало от такого решения.
   Получается, что, стремясь к фотореализму, компьютерные художники не только достигают творческих высот, но и существенно расширяют область применения своего труда. До недавнего времени в кинематографе крупные планы с лицами главных героев оставались недоступными для компьютерной графики, но в конце концов и этот рубеж пал (в фильме «Кинг-Конг» главную роль играет полностью компьютерная обезьяна). В недалеком будущем могут появиться полностью компьютерные фильмы, неотличимые по качеству от снятых традиционным способом. И, конечно же, наступит время, когда, подобно живописи, копирование окружающего мира перестанет быть интересным и 3D-, и кинохудожникам.

«Ну совсем как у больших» описал домашний (или для совсем маленьких офисов) файл-сервер с возможностями принт-сервера: DS-101 от Synology. Торговали тогда ими в Spline, но Сергей Васюк, менеджер по маркетингу D-Link’а, сообщил, что и у них должны вот-вот появиться похожие устройства, — и, заботясь о многообразии, я попросил, как появится, выдать мне для тестирования. Время пришло, я привез домой маленькую (10х14х3 см) коробочку, выполненную в фирменном D-Link’овском дизайне (серое с алюминиевым серебром и вставками цвета морской волны), по имени Network Storage Adapter DNS-120 и по цене (на price.ru) в районе 80 долларов. На коробочке был вход для питания, вход для сетевого кабеля и, наконец, два USB-гнезда, предназначенных исключительно для внешних Storage-устройств: в отличие от DS-101, как не предусмотрено место для вставного винчестера, так и невозможно подключать к USB-гнездам принтеры. То есть подключать, конечно, можно — только толку не будет.
   На момент привоза в моем распоряжении не было ни одного USB-винчестера, — так что я вставил в гнезда оба своих флэш-драйва, запустил утилитку поиска с прилагаемого компакт-диска, которая рассказала мне, какой IP-адрес автоматически присвоился новому устройству, и… И, в общем-то, всё: по этому адресу на всех компьютерах моей домашней сети обнаружились обе флэшки, и поскольку из веб-интерфейса я разрешил не только считывание с них информации, но и запись, — стали полноценно работать независимо от того, какие компьютеры домашней сети в настоящий момент включены, а какие — выключены. Тут же я провел эксперимент по подключению к одному из гнезд пусть маленького, однако хаба: одна из моих флэшек имеет встроенный кардридер для MMC, — и, когда в него вставляешь карточку, на компьютере появляется два диска вместо одного. Сработало и тут, так что на два USB-устройства обнаружилось три внешних диска.
   Особого удовольствия я, правда, ожидал не от давно уже испробованных «независимых деталей», а от возможности устроить на одном из подключенных устройств ftp-сервер: все-таки, пока ты дома, даже и компьютер лишний включить — задача не чрезмерная, — а вот когда в отъезде… Слава богу, у меня есть собственный домен, указывающий на «Компьютерру», — и там уже давным-давно я организовал ftp-сервер, так что, когда надо закачать сотню мегабайтов картинок на верстку или получить шестисотмеговый дистрибутив последней Ulead MediaStudio, я проделываю это с достаточным комфортом. Но особенно начинаю этот комфорт ценить, пребывая в отъезде: из дома до редакции, на худой конец, можно и доехать, а вот из Нижнего Тагила… Разумеется, у редакции есть и свой ftp-сервер, но с ним у меня почему-то не складывалось: то пароль поменяют сисадмины, то список доступа, то политику. А тут — свое! Разумеется, чтобы этот самый ftp-сервер был доступен из любой точки нашего шара, снабженной выходом в Интернет, надо хитрым образом отслеживать и преобразовывать переменный IP-адрес, выдаваемый «Стримом», в адрес постоянный, — но таких сервисов в Сети достаточно, а технологию как-то описал Сергей Голубицкий в «Голубятне», посвященной его радостям от включения веб-камеры.
   Поскольку DNS-120, как и многие домашние устройства от D-Link’а, — ориентирован на компьютерных ламеров (включил — и заработало), вроде бы никаких проблем не должно было возникнуть и тут: advanced > FTP Server — и дальше, против пустого окошка под заглавием Path, нажимаешь на кнопочку Open (все коротко, внятно, по шагам и даже по-русски описано в «Руководстве»), — после чего остается только выбрать желаемый (из подключенных к DNS-120) диск или каталог на нем. Однако не тут-то было: я нажимал на кнопку, выскакивало совершенно пустое окошко с кнопкой OK поблизости, — и все дела. Я пытался вписывать то в материнское окошко, то в дочернее какие-то пути — ничего не держалось и не подключалось. Припомнив, что сетевая видеокамера от того же D-Link’а, описанная в «Огороде» «…И вращает головой!», показывала картинку только в Internet Explorer’е и отказывалась делать это в стоящем у меня по умолчанию Mozilla Firefox’е, я и тут вызвал IE. Но там дело пошло еще хуже: при нажатии на кнопочку Open что-то, правда, щелкало, — однако дочернего окна, пусть пустого, — не появлялось вообще. Еще раз внимательно перечитав «Руководство», я принялся названивать в D-Link и дальнейшие полчаса провел в содержательной беседе с техническим консультантом Романом Михневичем.
   Для начала мы выяснили, что куда надо вписать, чтобы задать путь к FTP-серверу даже при забастовке дочерних окошек (оказывается, все же возможно, хотя отнюдь не очевидно), потом стали выяснять причину забастовки. Она крылась в ошибке Java-программы, которая отвечала за выдачу дерева подключенных к DNS-120 дисков, что обнаружилось при вызове из Firefox’а консоли JavaScript: «Элемент доступен по идентификатору/имени в глобальной области видимости. Используйте вместо этого соответствующий стандарту W3C метод document.getElemenById().» Все понятно? Роман посоветовал обновить Java-машину, но тут же выяснилось, что у меня и так последняя версия. Тогда он посоветовал ее отключить и воспользоваться микрософтовской. Отключил. И впрямь: в IE тут же появилось нужное деревце, и, выбрав из него папку, я назначил ее FTP-сервером. На Firefox же отключение не подействовало, и я снова начал получать советы пользоваться методом, соответствующим стандарту W3C.