Совмещение фотографии и 3d
Оригинал статьи лежит на моем сайте
Итак, самое первое, что нам необходимо, это фотография, например какого нибудь дивана, который мы впоследствии будем вставлять в интерьер. Пусть мы будем работать с такой моделью.
Хочу сразу сделать замечание, если фотография сделана, например, с расстояния 2м от обьекта, то при совмещении фотографии и 3d, Вы получите рендер с такого же расстояния. Лишь в малом диапазоне Вы можете корректировать положение камеры, иначе непременно получите искажение модели.
Обьясняется это тем, что камера по мере удаление от обьекта вносит коррективы в отображение формы обьекта. На картинке снизу два куба размерами 1х1х1м, наложеные друг на друга, для наглядности.
Фотография темного куба, сделана с расстояния 1м, а оранжевого с расстояния 2м, но увеличенного до размеров первого для наглядности.
Видите, как изменился обьект в зависимости от сьемочного расстояния. Это значит что физически будет не правильно, если вставить фотографию обьекта в 3d окружение на расстояние, отличное от сьемочного. Другими словами, интерьер является 3D обьектом и его искажение будет контролироваться в соответствии с положением камеры в 3d пространстве, а фотография не может быть скорректировна, так как не является 3d обьектом.
Запомните, это правило. Иначе вы получите либо искажение самой модели, либо "разрыв" осей фотографии и интерьера.
Надеюсь, что с этим всё понятно и продолжим далее.
Еще нам понадобится черно-белая маска изображения дивана. Сделать её можно в любом графическом редакторе. Черным цветом зальем все вокруг дивана, а белым сделаем сам диван. Вот такого вида:
Открываем редактор 3ds max. Зайдите в настройки рендера Render Setup и в свитке Assigned Render выберите в качестве Production рендера Default Scanline Renderer. Он наc вполне устроит, так как достаточно быстрый.
Для того чтобы получить в редакторе камеру с параметрами соответствующей сьемочной, воспользуемся скриптом Camera Match .
Перетягиваем скрипт в окно редактора, в любую проекцию. В появившемся меню выбираем исходную фотографию.
В окнах проекции появится plane с картинкой и сплайн осей. Сдвиньте, но не закрывайте, окно скрипта, он нам еще понадобится.
Перейдите в окно фронтальной проекции и выберите режим отображения Smooth+highlights. Теперь нам предстоит самая ответственная работа, от которой зависит качество совмещения фотографии и 3d. С помощью вертексов нам нужно выставить оси, которые позволят правильно настроить расположение камеры. Соответствие сегментов сплайна осям можно увидеть на картинке:
После расстановки вертексов, как на картинке, нажимаем кнопку SOLVE
И скрипт создаст 2 камеры, камера с именем 111_cm_camera нам не нужна, её можно удалить. А вот камера 111_cm_cameraAligned настроена на нужный ракурс, она нам и потребуется в дальнейшем.
Удалите plane с фотографией, сплайн осей и закройте окно скрипта, больше они не нам не нужны.
Выберите камеру в окне Perspective. Нажмите комбинацию ALT+B, и загрузите изображение в Background Source. Расставьте галки в соответствии с картинкой:
Теперь фотография обьекта у нас на заднем фоне. Создайте примитив Box, переведите его в Edit Poly. Установите флажок See-Through на вкладке Display, это сделает обьект полупрозрачныи и сделает более удобным подгонку обьекта к фотографии.
Перемещяя вертексы, сделайте так, чтобы габаритные размеры Box были чуть-чуть больше габарита дивана.
Теперь наша задача создать материал, для Box.
Откройте Material editor, выберите любой слот с материалом, например первый, и в слот Diffuse вставьте карту Camera Map Per Pixel
Нажмите на слот Camera в карте Camera Map Per Pixel и выберите в окне проекций камеру 111_cm_cameraAligned. Теперь в слот Texture установите фотографию дивана, которую Вы ставили на скрипт и задний фон.
Скопируйте эту карту в слот Opacity того же материала, откройте скопированную карту и замените файл в слоте Texture, на картинку с черно-белой маской для дивана. Параметр Self Illumination выставьте на 100. Вот так должно быть:
Примените материал на Box. Выберите окно проекции камеры. и нажмите F9 (рендер). Если Вы все сделали правильно, у вас должен появится рендер дивана:
Такое чудо получилось благодаря Camera Map Per Pixel в слоте Difuse материала, т.е. Вы создали своего рода проектор, где камера была проектором изображения дивана, а Box служил полотном на которое проецировалось изображение. Вспомните кинотеатр, если кто-то впереди встанет и перегородит луч проектора, то на проекционном экране будет виден силует человека. Но здесь всё намного лучше, так как камера ничего не видет до самого Box. И ничем нельзя перекрыть проекционный луч.
А вот карта Camera Map Per Pixel в слоте Opacity материала с черно-белой маской, обрезала все лишнее кроме самого дивана. Для тех кому, интересно... уберите карту из слота Opacity, нажмите на рендер и посмотрите, как бы получилось без использования маски.
Сгрупируйте камеру 111_cm_cameraAligned и Box. Остальноё все можно удалить. Сохраните сцену и закройте редактор.
Теперь у Вас есть говая сцена, в которой камера, играющая роль проектора, настроена в таком же ракурсе как и сьемочная на исходнике.
Откройте любой готовый интерьер, в который Вы хотите вставить диван. Перекиньте в окно проекции Top сцену с настроенной камерой и боксом с помощью Merge
Далее, выберите нашу камеру 111_cm_cameraAligned в качестве источника для рендера. Переместите группу из камеры и Box, в нужное место на сцене, так группа может не соответствовать действительным размерам дивана, при необходимости воспользуйтесь масштабированием. Но только группы целиком, не разгруппировывайте её.
Зайдите во вкладку Render Setup и выставьте разрешение рендера такое же, как и на фотографии исходника, главное чтобы соотношение сторон было такое же как и на исходнике.
Переходим на окно проекции камеры и жмем F9 (рендер). Вот что получилось:
Вот и всё!. Надеюсь, что урок был Вам полезен. Совмещение фотографии и 3d таким способом, дает довольно качественный результат. Готовые работы с применением такого метода, можете помотреть в галерее в разделе 2D+3D.