Уроки: 3ds Max

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

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

Вступление

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

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

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

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

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

109335 Автор:
Актуальность: 211
Качество: 369
Суммарный балл: 580
Выбор Публики
Голосов: 66 оценки

Отзывы посетителей:

аватар
 
De_Nis 2 0
Сначала кто-то забивает гвозди микроскопом, потом еще урок пишет, как это делать. А люди всерьез учатся по этому уроку :)
аватар
 
Maks76 1 0
Очень интересный подход...
аватар
 
nailgun 586 0
Уф. Серьёзный подход.

Но у меня тоже большие сомнения, что он оптимален даже для такой задачи.

Я нейтрализую перспективные искажения фотографированием для чертежей с максимального расстояния и максимальным зумом. Благо 12х на фотоаппарате при 5 МП - можно спокойно фотать с 30% размером объекта от ширины кадра. Главное камеру держать чётко по центру. Если искажения всё равно слишком велики выходят - можно фотографировать кусками, а потом склеить воедино

Когда все размеры известны как в данном случае, то вообще лепота - в Кореле подогнал фронтальные виды под размер, отрисовал в векторе, после "свёл" линии и скинул чертежи в Макс. И никаких заморочек с настройками камер и высчитыванием фокусного. И тут автор использовал сетку. Хороший ход. А если сетку нельзя подложить? Натурное образмеривание куда точнее.

Недавно сам использовал подобную технику моделлинга. Но дело было в том, что кроме габаритных размеров, ширины базы и колеи чертежей вовсе не было. Было несколько хороших фото без данных о фокусе и без чётких фронтальных видов. Сделал примерные чертежи, болванку. Выставил колёса, ширину-высоту-длину. Затем выбирал кадр, сводил на глазок персективу камеры (чтобы колёса совпадали) и корректировал Poly-сетку с видом прямо из камеры (кстати со сплайновой в данном случае посложнее). И все равно приходилось одну и ту же точку несколько раз подвигать, чтобы на всех видах она стояла правильно. При этом более-менее ручаться можно только точки, что проходят по оси симметрии объекта либо лежат в плоскости перпендикулярной одной из осей.

Вообщем на мой взгляд данный способ (основа способа вернее) хорош только в случаях, когда объект трудно померять и сфотографировать как нужно самому.
И как способ получения текстур довольно интересный.



аватар
 
BorisK 22 0
Ven - полдцать примерно лет назад делали презентационный ролик про-не-скажу-что, главное требование было - поразить кого-надо. Первая версия ролика была забракована создателем не-скажу-чего - и тут не так, и это так не строят, и здесь пропорции не такие, и блестит слишком, а тут наоборот... В общем, все пришлось переделывать...
аватар
 
BorisK 22 0
Д.Б. - я спросил потому что думал, что они Вас чем-то не устроили. Я хочу посвятить немножко материала в новой книжке как раз IM, но пока получается не так гладко, как в туторе к нему. А в PM я вообще не въехал, хотя по возможностям (например, автоматическая генерация по облаку точек, как в прогах к сканерам) он, похоже, покруче будет. Но фейс.... Ужос :)

аватар
 
Дмитрий Бурков 17 0
Modeller1989 - См. ниже. Я их правда не видел еще...
аватар
 
Modeller1989 2 0
Дмитрий Бурков
Что за проги если не секрет
аватар
 
Дмитрий Бурков 17 0
Конечно, нормальный человек не найдет искажений в насекомом. Но вот если делать, например, модель какого-нибудь ювелирного изделия, то заказчик точно увидит разницу. Да и с насекомыми засада - как на "примерную" модель наложить фототекстуру? А спецпроги не использовал, т.к. не знал, что такие есть. Теперь знаю, вот качаю демку.
аватар
 
Ven 235 0
Дмитрий Бурков - при всем уважении - подумайте, какое кол-во людей сможет определить, где у этого кузнечика "искаженная" геометрия? Я это к тому, что 3D это фикция, и к ней стоит подходить не с позиции "100% реалистичность", а с позиции "100% узнаваемость". Это разные вещи.
аватар
 
SKIFF 112 0
С первого раза не всё понятно, но способ, я думаю, неплохой.
аватар
 
BorisK 22 0
Дмитрий Бурков - А не пробовали для этого использовать спецсофтины, типа Realviz Imagemodeler или Photomodeler Pro?
аватар
 
Дмитрий Бурков 17 0
Здесь без первой части вторая ну никак не получится :)
А смысл, к сожалению, есть. Я вот делал Low-Poly кузнечика и сколию (на картинке к уроку), и на них перспективные искажения НУ ОЧЕНЬ заметны, из за них даже приходилось некоторые части делать на глаз. Теперь делаю акриду и богомола - по новой методике оно, конечно, медленно, но зато точно.
А текстуру по этому методу удобно использовать как шаблон для нарисования новой.
аватар
 
Ven 235 0
Вторая часть - по текстурингу, и впрямь, оригинальна. А вот первая - по моделингу, мне показалась неудобной. Но ежели автору так проще - это его дело. Возникает другой вопрос - а есть ли смысл вообще заморачиваться с таким сетапом сцены?..
аватар
 
Дмитрий Бурков 17 0
К сожалению, урок оказался действительно слишком комплексным, основан на "неуставном" =) использовании средств макса, написан достаточно сумбурно и подразумевает хорошее знание макса и умение моделить. К тому-же нацелен на Low-Poly.
аватар
  vip
Skif 2787 0
Администратор 3D галереи
real arhangel (3D Work) 16.10.2006 18:45
Оригинально...


Согласен :) небанально.
аватар
 
real arhangel 46 0
Оригинально...
Зарегистрируйтесь, чтобы добавить комментарий.
Эту страницу просмотрели: 1334 уникальных посетителей