Моделирование по фотографиям

Моделирование по фотографиям

Вступление

Очень часто возникает потребность смоделировать реально существующий объект. Но, даже если этот объект находится на рабочем столе, могут возникнуть большие сложности с переносом его в 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.

- На изготовленной таким образом текстуре сохранятся блики от вспышки в разных местах.

- При движении точки в одной из камер она движется по нескольким осям в других. Поэтому каждую точку приходится двигать несколько раз, пока она не окажется именно там, где надо.

- Камеры никак не привязаны к вьюпортам, их может быть сколь угодно много, возможно для каждой мелкой детали. В каждом вьюпорте можно включать любую камеру, перспективный или изометрический вид без опасности сбить бэкграунд.

Если будут какие-либо вопросы я с удовольствием отвечу на них.

355 0 850 33
16
2006-10-16
Оригинально...
2006-10-16
real arhangel (3D Work) 16.10.2006 18:45 Оригинально... Согласен :) небанально.
2006-10-16
К сожалению, урок оказался действительно слишком комплексным, основан на "неуставном" =) использовании средств макса, написан достаточно сумбурно и подразумевает хорошее знание макса и умение моделить. К тому-же нацелен на Low-Poly.
2006-10-17
Вторая часть - по текстурингу, и впрямь, оригинальна. А вот первая - по моделингу, мне показалась неудобной. Но ежели автору так проще - это его дело. Возникает другой вопрос - а есть ли смысл вообще заморачиваться с таким сетапом сцены?..
2006-10-17
Здесь без первой части вторая ну никак не получится :) А смысл, к сожалению, есть. Я вот делал Low-Poly кузнечика и сколию (на картинке к уроку), и на них перспективные искажения НУ ОЧЕНЬ заметны, из за них даже приходилось некоторые части делать на глаз. Теперь делаю акриду и богомола - по новой методике оно, конечно, медленно, но зато точно. А текстуру по этому методу удобно использовать как шаблон для нарисования новой.
2006-10-17
Дмитрий Бурков - А не пробовали для этого использовать спецсофтины, типа Realviz Imagemodeler или Photomodeler Pro?
2006-10-17
С первого раза не всё понятно, но способ, я думаю, неплохой.
2006-10-18
Дмитрий Бурков - при всем уважении - подумайте, какое кол-во людей сможет определить, где у этого кузнечика "искаженная" геометрия? Я это к тому, что 3D это фикция, и к ней стоит подходить не с позиции "100% реалистичность", а с позиции "100% узнаваемость". Это разные вещи.
2006-10-18
Конечно, нормальный человек не найдет искажений в насекомом. Но вот если делать, например, модель какого-нибудь ювелирного изделия, то заказчик точно увидит разницу. Да и с насекомыми засада - как на "примерную" модель наложить фототекстуру? А спецпроги не использовал, т.к. не знал, что такие есть. Теперь знаю, вот качаю демку.
2006-10-18
Дмитрий Бурков Что за проги если не секрет
2006-10-18
Modeller1989 - См. ниже. Я их правда не видел еще...
2006-10-18
Д.Б. - я спросил потому что думал, что они Вас чем-то не устроили. Я хочу посвятить немножко материала в новой книжке как раз IM, но пока получается не так гладко, как в туторе к нему. А в PM я вообще не въехал, хотя по возможностям (например, автоматическая генерация по облаку точек, как в прогах к сканерам) он, похоже, покруче будет. Но фейс.... Ужос :)
2006-10-18
Ven - полдцать примерно лет назад делали презентационный ролик про-не-скажу-что, главное требование было - поразить кого-надо. Первая версия ролика была забракована создателем не-скажу-чего - и тут не так, и это так не строят, и здесь пропорции не такие, и блестит слишком, а тут наоборот... В общем, все пришлось переделывать...
2006-10-27
Уф. Серьёзный подход. Но у меня тоже большие сомнения, что он оптимален даже для такой задачи. Я нейтрализую перспективные искажения фотографированием для чертежей с максимального расстояния и максимальным зумом. Благо 12х на фотоаппарате при 5 МП - можно спокойно фотать с 30% размером объекта от ширины кадра. Главное камеру держать чётко по центру. Если искажения всё равно слишком велики выходят - можно фотографировать кусками, а потом склеить воедино Когда все размеры известны как в данном случае, то вообще лепота - в Кореле подогнал фронтальные виды под размер, отрисовал в векторе, после "свёл" линии и скинул чертежи в Макс. И никаких заморочек с настройками камер и высчитыванием фокусного. И тут автор использовал сетку. Хороший ход. А если сетку нельзя подложить? Натурное образмеривание куда точнее. Недавно сам использовал подобную технику моделлинга. Но дело было в том, что кроме габаритных размеров, ширины базы и колеи чертежей вовсе не было. Было несколько хороших фото без данных о фокусе и без чётких фронтальных видов. Сделал примерные чертежи, болванку. Выставил колёса, ширину-высоту-длину. Затем выбирал кадр, сводил на глазок персективу камеры (чтобы колёса совпадали) и корректировал Poly-сетку с видом прямо из камеры (кстати со сплайновой в данном случае посложнее). И все равно приходилось одну и ту же точку несколько раз подвигать, чтобы на всех видах она стояла правильно. При этом более-менее ручаться можно только точки, что проходят по оси симметрии объекта либо лежат в плоскости перпендикулярной одной из осей. Вообщем на мой взгляд данный способ (основа способа вернее) хорош только в случаях, когда объект трудно померять и сфотографировать как нужно самому. И как способ получения текстур довольно интересный.
2007-04-22
Очень интересный подход...
2009-03-16
Сначала кто-то забивает гвозди микроскопом, потом еще урок пишет, как это делать. А люди всерьез учатся по этому уроку :)
RENDER.RU