Pull to refresh

Сделаем фотомодель по-быстрому!

Reading time8 min
Views5.7K
Не знаю о чем Вы там подумали из названия, но знайте — я этого в виду не имел! :)
Итак, продолжим становиться «Колумбами и открывать то, что до нас знали миллионы людей», кто вспомнит откуда эта почти-цитата (подсказка: про Интернет) тому 4 балла к гик-карме. Итак…

Итак, в свободное время, когда я не создаю безумные проекты, не учу людей зарабатывать на стартапах, в это время я изучаю всяческие гик-технологии, в т.ч. одна из них прямо-таки у меня стала навязчивой идеей. А именно — взять свой городок в пригороде большого города и превратить его в 3d-уровень для какой-нибудь игры (в FarCry/Crysis я продвинулся в этом больше всего), при том с фотограмметрической точностью (погрешности в метр или меньше от реального расположения домов).

Для того, чтобы это сделать нам понадобится:
  1. 3d-модели;
  2. 3d-движок;
  3. наука со страшным названием фотограмметрия;
  4. даже математика — а то, когда читаешь про Spherical harmonics — радуешься, что приматом был некоторое время; грустишь что все-равно не понимаешь о чем там...
  5. тонна терпения (впрочем, я не был бы мировым лентяем, если бы это и правда было так);

Начнем с 3D моделей



В годах уже давно затертых пылью, когда Интернет еще носили кони в упряжках и злобный Цезарь решал быть Вашему сайту в Google или не быть, в незапамятные времена, существовала компания MetaCreations, которая создала один из самых необычайно удобных и логичных программных продуктов, что я видел, но судьбой ей было предначертано пройти путь вечной лампочки и оказаться закованной в мрачных сырых патентных подземельях Adobe и больше свет не видеть.

Тому же кто сейчас хочет до нее пробраться — необходимо три дня скакать на скорости 5кб в секунду, найти ее путник может в краях, где подстерегают его знаменитые Пираты Стемительных Потоков Шведской Бухты. [disclaimer: здесь подтекста нет]

В общем, существует, друзья мои, такая наука, фотограмметрия. Занимается она тем, что плоскую, в общем-то, фотографию (а лучше 2 или полсотни) превращает в объемную такую модель. Наука эта старая, и программа, о которой я расскажу — не моложе (ну помоложе).

В общем, встречаем Canoma, создана 9[!] лет назад и до сих пор не превзойдена! (Есть ImageModeler, PhotoModeler, но кроме того, что стоят они немало — ни один из них рядом не стоял рядом по простоте и визуальности.

Итак, сделаем пару фотографий местности с разных углов.


Затрем курсоры, попавшие в поле зрения фотоаппарата.


И вообще затрем нафиг все лишее. :) Этот шаг опционален, если Вы не собираетесь публиковать свои исходные фотографии в интернете. Я сделал 3 фотографии, но сэкономим место — тут и так будет много скринов.

/ Если у Вас плохо с воображением и абзац про шведов не навел Вас на мысли, то может быть поиск «Canoma Demo» по интернету Вам что-то подскажет. /

Открываем Canoma. Вот это перед нами. Напоминаю, что интерфейс сделан в 1999 году! Винда б научилась так интерфейсы делать. Кстати, многое можно двигать и переставлять (элементы интерфейса) простым перетаскиванием.


Внимательное разглядывание картинки позволит найти желтую стрелочку, нажмем на "+" и добавим одну картинку. А пока Вы это ищете, я уничтожу одного из актеров, нет, не Нэцкэ, а того, который обещает, что я от него эффект почувствую уже на восьмой день. Хотя, конечно, лучше все-таки восемь дней его открытым не держать, а то эффект точно будет… взрывной…

Для тех, кто хочет знать что за чертовщина на экране — это бот РедчайшихНовостей шарится по инету с Amazon EC2 — четыре бота точнее — fastbot, regularbot, categorizerbot и studybot, еще на фоне uploadbot, но он самый скучный :) Об этом проекте я рассказывал в посте про заработки на стартапах. Ну и для самых рассматривающих — это «Ubuntu», книга «Веб-мастеринг для профессионалов», служащая подставкой под две карты, оторванную обложку от ежедневника и пипку от штатива, которая я не знаю как называется. :)

Возвращаемся от мыслей об утраченной Активии к модели. Для Каномы не работают все обычные правила фотограмметрии, в ней нужно начинать с одного снимка! Нужно как можно больше нанести на одном, прежде чем переходить ко второму. В том же ImageModeler гораздо лучше результаты получаются если работать с 2 фото сразу. Здесь не надо!

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



Кстати, обычные правила фотограмметрии подсказывают, что перед тем, как пользовать фотографию — у нее нужно исправить искривление линз (ссылки первые попашиеся Google SOAP API ставлю). Это делает прога PTLens — бесплатно 10 фоток сделает, потом платите (там 10, кажется, долларов, но за эту прогу не жалко — все сама делает и пакетно, кстати если делаете панорамы — она тоже может очень пригодится).




Если Вы тащите вершину (там где соединяются линии) — то старайтесь ставить ее точно — используйте "+" и "-" на цифровой клавиатуре, чтобы приближаться-удаляться; а пробел и левая кнопка — таскать изображение («hand tool»).

Также можно фиксировать и грани — тогда вместо перевернутого треугольника будет кружочек. Но, к сожалению, фиксирование граней на порядок менее точно, чем фиксирование вершин, так что делайте все вершины сразу.

Кстати, очень важно не ставить вершины там, где Вы их не видите — это так называемый «guesstimation» («угадоприкидки»), чем точнее все будет расставлено — тем точнее будет результат. Хотя, именно Канома к этому терпима довольно-таки. Как Вы увидите позже, я очень лениво расставил точки, но получил вполне приемлимый результат.




Слева Вы видите вот такую штуку (далее я ее буду называть «шариком» или «сферой»). Ей можно крутить модель, кстати, на мой взгляд удобнее, чем во многих программах 3D. Крестики — двигают модель. Чтобы вернуться в прошлый режим — нажмите «Edit» над ними. Эти колесики позволяют понять — как сейчас думает Канома расположены предметы — иногда это позволяет увидеть ошибку.

Что важно — по умолчанию Канома предполагает, что все предметы расположены на одной плоскости — столе, полу, и т.п. Это отключаемо через кнопочку (i) в кружочке — там есть «Unfix Y» и другие полезные параметры — также канома изначально полагает, что предметы все стоят ровно вертикально — тоже можно отключить «Unfix all», но эти ограничения помогают ей не делать жуткие догадки об огромных предметах. Но, с другой стороны, об этом легко забыть (что я позднее и сделаю :) и соображу об этом только уже при написании этого топика).

Постарайтесь нанести все видимые вершины хотя бы одной «коробки» (в моем случае это колода карт), прежде чем двигаться дальше.



Дальше я продолжил наносить вершины и грани. Стол я зафиксировал пока на глаз. Плоскость (горизонтальная) делается с помощью второй слева иконки «Horizontal Rectangle» — см. подсказки справа. А вот цилиндра я не нашел в Каноме, поэтому кружку пришлось имитировать через «Curtain». Далее еще одна «коробка» — книга. И листок лежащий на столе. Он не очень-то нужен, потому что текстура стола его будет включать, но обычные правила фотограмметрии подсказывают, что чем больше мы нанесем четких точек, которые точно видим (а лист хорошо контрастирует с фоном), тем лучше.



Активию, павшую в боях с этой статьей, я сделал через инструмент усеченной пирамиды («truncated pyramid»). И теперь покрутим, посмотрим что получилось. Неплохо для одной фотографии.


Покрутим сцену, а чтобы вернуться в обычный режим — «edit» (который над шариком).

Далее, с помощью еще одной коробки («box») сделаем нужнюю часть ноута, а с помощью вертикального прямоугольника — монитор. Теперь вот пара хитростей.

Дисплей ноута не стоит на основании стола, а на коробке, которая имитирует нижнюю часть (с клавой). Чтобы ее «повесить» в воздух — нужно нажать на кнопочку (i), она рядом с надписью «Solo off» и там нажать «Unfix Y».

Вторая хитрость — надо «приклеить» ее нижнюю часть к верхней части коробки. Проще говоря — сказать Каноме, что эти две вершины совпадают (в месте соединения) — поэтому нажмите CTRL, и тащите нижний левый угол дисплея, на верхний левый задний угол коробки, имитирующей ту часть с клавиатурой. Теперь они склеились.

Кстати, если что — нажимая правой кнопкой на вершинах, гранях, клейках и т.п. — их можно удалять или модифицировать.

Третья хитрость — можно просто поставить крышку на ноутбук, но для этого нужно было перед ее созданием нажать кнопку Stack слева снизу. Также можно указывать, что два предмета в сцене стоят концентрически друг на друге или имеют одинаковую ориентацию (гусары, молчать!)


Покрутим шариком сцену, посмотрим что получилось. Активию как будто ядерным взрывом вмазало в ноутбук. Ну и ничего удивительно в наше время Больших Коллайдеров таким никого не удивишь. Разумеется это из-за того, что с одной фотографии Каноме не видно что там за этим молокозаводом по производству живых бактерий. Добавим еще фотографию, заодно и поточнее предметы расставим.

Но сначала! Посмотрите фотографию, которую Вы хотите добавить. Теперь покрутите сферой (шариком, слева который в интерфейса) 3d модель так, чтобы она получилась примерно в том же ракурсе, что и на фото. Это необязательно, но поможет Каноме понять расположение камеры.



Я этот шаг пропустил намеренно, чтобы показать, что Канома достаточно умна, чтобы даже прошлого ракурса найти правильное положение камеры. Я перетащил все углы что я видел на фотографии на их законное место, и зафиксировал несколько граней, кстати это выглядит так:


Как видите — картинка наложилась очень даже неплохо.
Здесь Важно рассказать о том, что некоторые линии не будут совпадать с тем, что Вы видите и это нормальный побочный эффект фотограмметрии — нет там 100% точности. Но вот если Вы начнете видеть «пульс Каномы» — это уже значит, что что-то Вы прицепили не туда. «Пульс Каномы» это когда желтые линии очертаний предметов (или красная выбранного) начинает биться как сердце.

[заумь] Канома постоянно пытается полировать решение и постоянно находится в движении, решая огромные матрицы, и если Вы даете неправильные входные данные, то из-за методов решения этих матриц (уравнений) получится колебательное движение (в обычном случае ошибка решения уменьшается, а в случае неправильных вводов — начинает осциллировать вокруг решения, за подробностями к методу наименьших квадратов и алгоритму Левенберга-Маркара и Sparse Bundle Ajustment.[/заумь]


Ну что — вполне похоже, по крайней мере для целей 5-минутного перевода в 3d — неплохо.


Жмем на Тортиллу и наслаждаемся результатами самого ленивого способа сделать 3d из фотографий.




Кстати, в Каноме можно делать и анимацию — вкладка слева снизу. А вообще там хэлповый PDF очень полезен и не забит всякими зачем нужна эта кнопка. Молодцы МетаСоздания (MetaCreations) — медаль им за позитивный продукт и мануал.

Экспортируем в .obj и садимся думать дальше про то, как игру сделать реальной. Напоминаю, что я представления никакого не имел о том, что такое фотограмметрия и как ее едят и у меня не было целью ее пытаться изучать (хотя и пришлось), я хочу лишь взять реальный город и сделать из него 3d-уровень для игры. Получилось ли это с Каномой (или вообще) — пока нет, но для этих целей Канома подошла БЛИЖЕ всех остальных (ImageModeler, PhotoModeler, Leica и т.п.). Надеюсь, что когда-нибудь VideoTrace доделают все-таки.

Почему не получилось? У меня есть 10 тысяч фотографий города. Так вот на пятидесятой фотографии Канома начала безумно тормозить, хотя нанесено было всего полсотни зданий. Ну не было в 1999 году GPU-поддержки класса бытовых видеоплат сейчас, а если бы ее сейчас переписали под GPU — уверен она бы тысячи полторы, а то и больше выдержала бы.

Собственно, игра и виртуальный город на этом еще даже не начались, есть еще о чем рассказать, а пока можно почитать что я уже писал.

Как пример того, что может Canoma: Battersea Powerstation. И не забывайте, что сделана она 9 лет назад и с тех пор не обновлялась. :)

Кстати, запускается под Linux под Wine, как проверено тов. SovGVD.

P.S. Есть так же способ очень быстро и грубо смоделить что-то типа Нэцке — когда формы очень сложные (Каномой это не сделать) — программа называется 3DSOM (примеры тут), но даже не знаю насколько надо по не туториал сделать, все слишком просто там :)

P.P.S. Зачем этот топик вообще? Есть у меня ощущение, что в скором будущем Интернет и десктоп перейдет плотно в сферу 3D, где мы будем путешествовать по 3D мирам, раскладывать файлы в 3d коробки и т.п. С учетом того, куда движутся технологии — практически каждый сможет создать свой 3d мир, зачастую люди (это естественно) захотят воссоздать место, где живут или куда ездили в отпуск. Эта технология — лишь малая часть того, что в будущем будет. Она не является конкурентом серьезных 3D пакетов (хотя и в них я не могу гео.точно город воспроизвести — одно здание — да, два здания относительно друг друга — кое как — три — по фотографиям — почти нереально, триста? не шутите… проблема не в смоделировать, а именно в расположить географически точно).

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


Йои Хаджи,
вид с Хабра
Tags:
Hubs:
Total votes 139: ↑119 and ↓20+99
Comments76

Articles