Моделирование по фотографиям
Моделирование по фотографиям
Вступление
Очень часто возникает потребность смоделировать реально существующий объект. Но, даже если этот объект находится на рабочем столе, могут возникнуть большие сложности с переносом его в 3D-сцену.
Если это что-то простое, доступное для инструментального измерения, проблем не возникает. Но если объект имеет сложную форму, например органическую, то остается моделить либо «на глаз», либо по фотографиям.
Фотографии можно использовать в качестве бэкграунда для моделирования, но при этом неизбежно возникают проблемы из-за перспективных искажений. Бороться с перспективой можно по-всякому. Самый простой и очевидный метод - применить модификатор Taper к готовой модели. Но это не спасет от искажения пропорций на этапе моделирования.
Мне гораздо больше нравится другой метод, который я здесь и изложу.
Суть метода заключается в создании на сцене камер, соответствующих положениям фотоаппарата при съемке. Этот метод также позволяет легко наложить фототекстуры. Итак, приступим.
Шаг 1. Заготовка фотографий
В качестве примера я возьму моделирование резиновой лягушки.
Сперва надо сделать снимки с разных ракурсов.
Фотографии, естественно, должны быть без дисторсии, с известным эквивалентным фокусным расстоянием (первое можно поправить в фотошопе, второе высчитать экспериментальным путем). Для этого урока я использовал цифровую камеру с фикс-объективом 50мм (для моей камеры экспериментальным путем вычислено ЭФР 88.473мм). Надо сделать снимки с таких ракурсов, чтобы каждая деталь была видна как минимум на двух снимках. Для облегчения юстировки виртуальных камер я поместил объект на отпечатанную на принтере сетку.
У меня получились вот такие фотографии:
Для моделирования их надо перевести в удобный для работы вид - понизить контраст, выровнять и привести к двоичному размеру. С контрастом все понятно (это для удобства редактирования, чтобы сетка была видна), а ресайз требует внимательности. Дело в том, что, когда мы вырезаем часть фотографии, мы меняем угол зрения. Поэтому надо сперва вырезать нужную квадратную часть изображения, высчитать полученный угол зрения и записать. Не стоит определять угол зрения по пропорциям! Линейный и угловые размеры связаны тригонометрической функцией.
Угол вычисляется так:
HFOV = 2*arctan((36*B)/(2*A*F))
Где:
HFOV - угол зрения для вырезанного кадра;
A - размер исходного кадра по горизонтали в пикселях;
B - размер кадра после обрезки в пикселях (сторона квадрата);
F - эквивалентное фокусное расстояние фотоаппарата.
Потом кадр подгоняется под двоичный размер (1024*1024, 512*512 и т.д.) для комфортной работы с ним видеокарты.
И еще - если вы будете накладывать фототекстуру, отдельно сохраните обрезанные и выровненные кадры, но в оригинальном масштабе и цвете.
Вот что у меня вышло:
Для этих фотографий углы зрения равны 16.78 и 13.41 градусов. Высокая точность определения углов имеет большое значение.
Шаг 2. Подготовка сцены
Первое, что надо сделать для своего удобства - задать аспект камеры 1:1. Я для этого в окне Render ввожу одинаковые значения ширины и высоты кадра.
Потом надо создать мульти-материал с количеством слотов по количеству фотографий. Каждому подматериалу надо указать соответствующую диффузную текстуру и 100% самосветимость.
Далее я создал на сцене копию своей юстировочной сетки, на которой я фотографировал объект:
Шаг 3. Установка камер
Выберем самый «удобный» кадр из референсов. В данном случае это вид справа.
Поставим на сцену Target Camera, укажем соотвутствующий FOV, дадим камере название, перекликающееся с выбранной фотографией.
Добавим также Spot Light, расположенный в той же точке, что и камера, и смотрящий в том же направлении. Зачем? Пригодится при текстурировании, об этом позже. «Привяжем» лампочку к камере и деактивируем.
Перед камерой, на достаточном расстоянии от нее, чтобы не задевать объект, надо создать Plane, присвоить ему мульти-материал и соответствующий подматериал.
Размер Plane вычисляется по формуле:
Size = 2*D*tan(HFOV/2)
Где:
Size - размер Plane (длина стороны);
D - расстояние от камеры до Plane;
HFOV - угол зрения камеры.
Теперь в одном из вьюпортов включим изображение с камеры и, при необходимости, активируем режим Show Safe Frame, чтобы не терять поле зрения камеры.
Plane со своей текстурой должен точно совпасть с кромкой изображения в камере. «Привяжем» Plane к камере. Теперь, как бы мы ни двигали камеру, изображение всегда останется привязанным к ней.
Теперь примерно выберем точку, в которую поставим цель камеры, и переместим камеру так, чтобы юстировочная сетка совпала с изображением в камере.
Для точной доводки можно использовать кнопки управления камерой :
(обратите внимание, что у многих кнопок есть несколько режимов, можно использовать только те, что здесь показаны).
Можно также аккуратно менять координаты и Roll камеры с помощью полей в нижней части рабочего окна.
Процедуру надо повторить для других нескольких камер (в моем случае виды сверху и слева):
Теперь можно проверить юстировку камер, для чего провести линии через некоторые точки модели (я провел через нос и самые выдающиеся пальцы):
Убедившись, что точки совпадают для всех камер, можно начинать моделирование.
Шаг 4. Наконец, моделинг
При моделировании очень удобно ставить режим движения в плоскости экрана Screen:
Также удобно использовать Axis Constraints.
Я предпочитаю работать со сплайнами и модификатором Surface. По мере работы добавляю остающиеся камеры. При работе с полигонами присваиваю им материал с режимом Wire, чтобы не заслонять фон.
(На этом изображении монтаж - в перспективном виде присвоен обычный материал, в остальных - Wire )
Если требуется увеличить изображение, можно скопировать соответствующую камеру и переключиться на нее. Теперь можно менять угол зрения и поворачивать скопированную камеру относительно себя, но нельзя ее двигать. Нельзя изменять параметры исходной камеры! Можно также менять угол зрения исходной камеры. Удобно использовать кнопки:
(обратите внимание, что у многих кнопок есть несколько режимов, можно использовать только те, что здесь показаны).
Шаг 5. Текстуринг
Действуя по подобной методике можно также полностью затекстурить объект со всех сторон. Но сперва надо сделать развертку. Как делать развертку - я здесь уточнять не буду, у каждого свой метод.
После того, как развертка готова, начинается самое интересное:
Берем лампочку, привязанную к интересующей нас камере, и начинаем настраивать. В настройках Advanced Effects включаем Ambient Only. В настройках Spotlight Parameters указываем тип Rectangle и аспект 1. Ставим галочку Overshot, задаем угол Falloff/Field равный углу зрения камеры. В качестве Projector Map выбираем Bitmap фотографию с оригинальным разрешением и контрастом. Красим объект в 100% белый цвет и включаем лампочку.
Отныне эта лампочка работает как прожектор, накладывающий цвет на объект с учетом перспективы (в отличие от Planar Mapping).
Теперь при помощи рендера убеждаемся, что «текстура» легла куда надо:
Осталось превратить освещение в текстуру: выделяем наш объект и вызываем окно Render To Texture. Там добавляем элемент CompleteMap, ставим желательный нам размер (рекомендую 2048, потом можно ужать), убеждаемся, что выбран режим Use Existing Channel, проверяем, чтобы был указан именно тот канал UVW, в котором хранится наша развертка, и ставим галочку Render To Files Only. Теперь Render. Сохраняем полученную картинку и выключаем лампочку. Повторяем для всех остальных камер. Теперь у нас есть куча текстур.
Открываем их все в фотошопе, сбрасываем в один документ как разные слои и микшируем:
Полученный файл - наша текстура. Остается подкорректировать текстурные координаты, и готово!
Важные примечания:
- При управлении камерами с помощью кнопок ни в коем случае нельзя ошибаться.
Для настройки исходной камеры можно использовать кнопки: Dolly Camera, Roll Camera, Orbit Camera, Truck Camera.
Для настройки камеры, скопированной с основной для увеличения можно использовать кнопки: Field-of-View, Pan Camera, Roll Camera.
- На изготовленной таким образом текстуре сохранятся блики от вспышки в разных местах.
- При движении точки в одной из камер она движется по нескольким осям в других. Поэтому каждую точку приходится двигать несколько раз, пока она не окажется именно там, где надо.
- Камеры никак не привязаны к вьюпортам, их может быть сколь угодно много, возможно для каждой мелкой детали. В каждом вьюпорте можно включать любую камеру, перспективный или изометрический вид без опасности сбить бэкграунд.
Если будут какие-либо вопросы я с удовольствием отвечу на них.