Создание камней для игр с помощью фотограмметрии

https://80.lv/articles/building-rocks-for-games-with-photogrammetry/
  • Перевод
Себастьян ван Элвердинге рассказывает о своём подходе к созданию потрясающих трёхмерных камней и скал с помощью множества фотографий. Более подробно о нём можно узнать в туториале на gumroad.com/sebvhe.


Введение


Привет, меня зовут Себастьян, я живу в Брюсселе, на родине лучшего картофеля фри, пива и шоколада! Сейчас я работаю художником по окружениям в Starbreeze Studios (Стокгольм). раньше я работал в Playground Games над игрой Forza Horizon 3, которая стала для меня отличной возможностью применения фотограмметрии в игре AAA-класса.



За последние четыре года я много экспериментировал с фотограмметрией. Довольно быстро я начал заниматься текстурами и материалами, о которых тогда мало знал. Примерно год назад я выпустил туториал о том, как создавать текстуры с помощью фотограмметрии.

Хотя с момента написания мой рабочий процесс немного поменялся, туториал всё равно применим к тому, что собираюсь рассказать. Если вам будет что-то непонятно в этом интервью, то, скорее всего, вы найдёте подробное объяснение в туториале.


Мой самый первый бесшовный скан 2014 года (слева) и один из последних сканов (справа)

Фотограмметрия


Обычно люди воспринимают фотограмметрию как способ переноса в игру статичных отсканированных сеток (mesh). При работе со сканированием окружений они всегда имеют дело с огромными уникальными текстурами со стороной по 4-16 килопикселей на уникальных, неповторяющихся сетках. Хорошим примером может служить демо UE4 Kite. Но то, что подходит для кинематографических роликов типа Kite, будет совсем неприменимо для использования в реальном времени, особенно на больших поверхностях.



Это было важно для меня, когда я работал над набором текстур UE4 Marketplace Rock Texture Set. Представим, что мы делаем небольшой скалистый каньон. Ошибкой будет сканирование набора из 4-8 крупных скал, из которых вы затем попробуете собрать каньон. В результате у вас скорее всего получится четыре уникальных текстуры со стороной в 4 килопикселя. Вместо этого я стремлюсь создать одну очень хорошую бесшовную текстуру камня, записывая красивые формы в её карту высот. Затем я просто создаю очень простую сетку каньона, для которой применяю смещение (displacement) на основании полученной текстуры. Таким образом я получаю целую сцену, в которой для скал используется только одна текстура на 4k.


Быстро созданная «огибающая сетка» каньона со смещением в UE4, используется одна бесшовная текстура камня и немного снега для красоты.

Можно без всяких проблем выполнить смещение заранее в 3D-редакторе на основе карты высот, а потом импортировать оптимизированную сетку вместо использования тесселяции. Выбор зависит от важности окружения и имеющихся ресурсов.

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


Просто представьте, сколько сеток пришлось бы отсканировать для замены биома, а в нашем случае требуется всего одна текстура (плюс снег, песок или мох)

Однако стоит с умом подходить к сокрытию или удалению швов. Мой материал тесселяции позволяет удалять 100% швов.

В конце концов, фотограмметрия может быть очень гибкой, стоит только задуматься о ней за пределами традиционного «жёсткого» использования.

Техника




На самом деле, кроме камеры и компьютера вам больше ничего не понадобится. Хорошая аналогия: чтобы играть на гитаре, вам не нужен Gibson за 2000 долларов, с простой гитарой за 100 долларов можно добиться очень многого. В конечном итоге мастерство значит больше, чем оборудование. При работе с фотограмметрией я использую очень простое оборудование. Я с удовольствием бы «проапгрейдился», но пока я думаю, что ограничения плохого оборудования помогали мне находить хитрые способы улучшения низкого качества сканов.


Все мои работы по сканированию я провожу с помощью Canon 100D/Rebel SL1, одной из самых дешёвых зеркалок на рынке, она стоит всего около 400 долларов.

Тем не менее, для улучшения качества сканов потребуются некоторые усилия.

  1. Ручная выдержка: хотя технически можно использовать и плохую камеру с автоматическими настройками, на самом деле отсутствие ручной выдержки очень ограничивает. Нужно, чтобы все снимки имели одинаковые настройки, иначе камера начнёт компенсировать более тёмные снимки и программному обеспечению будет гораздо сложнее привязать снимки друг к другу, а вам — удалить информацию об освещении. Почти во всех камерах и телефонах сегодня есть функция ручной выдержки.
  2. Хорошая SD-карта/высокая скорость записи: сначала это не так очевидно, но это может изменить ваш мир. Долгое время я пользовался медленной SD-картой и мне приходилось ждать примерно по 5 секунд между снимками (как только заполнялась буферная память карты). Когда делаешь сотни кадров, 5 секунд между снимками — это много.
  3. Файлы в формате RAW: это самая главная причина, по которой я рекомендую DSLR. Формат файлов RAW содержит гораздо больше информации и динамического диапазона, чем обычный JPG (который, к тому же имеет артефакты сжатия). Он позволяет предварительно обрабатывать снимки, добиваясь, среди прочего, лучшего качества, цветового баланса и устранения виньеток.

    Кроме того, он позволяет уменьшать информацию об освещении перед обработкой сканов, что упрощает удаление этой информации после процесса. Файлы RAW могут быть огромными, так что стоит учесть это при выборе SD-карты.






А теперь про оборудование, которое я не использую:

  1. Штатив: совершенно верно, я редко использую штатив, по крайней мере, при съёмках на улице. Это мой личный выбор. Для меня приоритетнее большая скорость затвора, чем большая диафрагма (подробнее об этом позже). Не поймите меня неправильно, использование штатива вне всяких сомнений улучшает качество сканов, но тут есть недостаток — на установку штатива для каждого снимка тратится время, много времени (а ведь даже несколько секунд на кадр в сумме дают очень очень много). При съёмке на улице условия освещения редко бывают идеальными, поэтому я обычно стремлюсь быть как можно быстрее (но без суеты), чтобы избежать постепенной смены условий освещения при сканировании. Повторюсь, если вы сканируете в помещении или условия освещения стабильные, то нет никаких причин не использовать штатив! Более того, возможно, для вас хорошим компромиссом между потраченным временем и качеством может быть монопод.

  2. Калибровщик цветов (color checker): нет ни одной достойной причины не использовать их, кроме дороговизны — примерно 100 долларов за X-Rite Passport. Калибровщик цветов обеспечивает правильную калибровку цветов. Скоро я его себе куплю.


  3. Хромированные шары и всё оборудование для удаления информации об освещении HDR: по-моему, это просто трата времени и денег, по крайней мере, для текстур, но может быть и пригодится для больших сканов на 360 градусов. По умолчанию, если вы сканируете текстуры, то снимаемая поверхность чаще всего смотрит в одном направлении и освещение всего скана практически одинаково. Можно избавиться от остатков освещения за несколько минут работы в Photoshop и не тратить время на возню с удалением информации об освещении HDRI.

Поговорим о компьютерах: если у вас есть стандартный игровой настольный компьютер, то проблем с обработкой не будет. Рекомендую иметь не менее 16 ГБ ОЗУ и приличную видеокарту. Я использую GTX670 и 16 ГБ ОЗУ, довольно стандартный набор. Вероятно, «узким местом» будет память.

Освещение


Хорошего освещения добиться очень трудно, потому что на улице вы не можете им управлять и нет других вариантов, кроме как ждать нужного момента. В целом, нужно избегать двух моментов:

  1. Дождя: при сканировании должно быть сухо. В зависимости от материала дождь может сделать его более отражающим или тёмным.
  2. Изменения условий: если вам не удаётся застать хорошего равномерного облачного неба, по крайней мере стремитесь к чему-то стабильному, даже если солнечно, в таком случае можно будет отсканировать что-нибудь в тени. Надо любой ценой избегать движущихся облаков, потому что они могут буквально за секунды значительно изменять освещённость.


Вот это один из наихудших примеров.

Ваша цель — облачное небо, одновременно и равномерное, и очень яркое. Не ждите слишком долго, вероятность получить его не очень велика!

Сколько снимков обычно нужно делать, чтобы получить хороший материал?


Количество снимков сильно зависит от используемого ПО (о нём чуть позже), размера сканируемой поверхности и нужного уровня детализации. Всегда лучше сделать больше снимков, чем нужно.

Разумеется, критически важно наложение. Фотограмметрическое ПО сопоставляет характерные черты на разных снимках для определения пространственного положения кадров. Поэтому на нескольких снимках должны быть одинаковые части, чем больше, тем лучше.















Итак, вы хотите отсканировать найденную поверхность, с чего же начать?

Помните, я говорил, что могу отказаться от штатива, потому что меняю узкую диафрагму на высокую скорость затвора? Я могу позволить себе узкую глубину поля резкости почти без размывания, потому что я всегда снимаю сверху вниз (но тут надо быть аккуратным, чтобы не залезть в кадр обувью!). Это не только обеспечивает наилучшие результаты, но и означает, что объект будет почти на одном расстоянии от камеры во всём кадре, снижая количество размывания глубины поля резкости. Разумеется, это относится к сканированию относительно плоских поверхностей.


Источник: руководство пользователя Agisoft

А теперь о наложении: представьте себя картографом Google Earth, сначала вы хотите запечатлеть всю Землю, весь объект в первых снимках, а потом добавить различные уровни детализации. Сначала делайте глобальные снимки, не меньше восьми, лучше больше. Возможно, их не удастся сделать сверху вниз, не волнуйтесь, просто двигайтесь по объекту, и аккуратнее с глубиной поля резкости. Теперь у вас на каждом снимке есть все характерные черты поверхности, к которым будут привязываться следующие, более точные снимки.

Далее вам нужно создать первый уровень масштабирования: сделайте снимки сверху вниз, размером примерно в 1/4 поверхности. Сделайте так, чтобы они перекрывали друг друга больше чем на 50%. Повторите снова для 1/8 поверхности, 1/16, и т.д… Всё зависит от нужного вам уровня детализации.

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

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



В этом примере общие снимки выделены синим, первый уровень снимков сверху вниз показан зелёным, а другой подробный вид сверху вниз — красным.

Программное обеспечение


Есть два основных конкурента, Agisoft Photoscan и довольно новый пакет Reality Capture. Я в основном использовал Photoscan, но недавно стал пользоваться Reality Capture. Не скажу, что один в чём-то намного лучше другого, но в последнее время индустрия, похоже, склоняется к Reality Capture.

Вот мои плюсы и минусы каждого пакета. Не забывайте, я ещё довольно неопытен в Reality Capture и могу в чём-то ошибаться.

Agisoft Photoscan


Reality Capture


Плюсы


Хорошая документация и онлайн-туториалы Безумно быстрый в обработке, иногда даже не успеваешь выпить кофе!
Хорошие инструменты фильтрации для удаления нежелательных точек после привязки.
Похоже, не делает так много дыр, как Reality Capture
Может обрабатывать тысячи снимков на простом компьютере
На мой взгляд, качество текстур в Agisoft немного лучше
Программа ни разу не вываливалась, это бывает так редко, что стоит упомянуть
Лицензия Standalone довольно дешёвая, 179 долларов, в долговременной перспективе дешевле, чем у Reality Capture.

Минусы


Довольно медленный и использует КУЧУ ОЗУ, при посредственном компьютере разрешение сканов может быть довольно сильно урезано Создаёт больше дыр и требует немного больше ручной привязки. Однако здесь проблема может быть в моих настройках, которые пока неидеальны.
Нужно аккуратно подбирать снимки, потому что компьютер, возможно, не сможет их все обработать. Большинство параметров очень загадочно, не хватает документации и примеров.
По тем же причинам скорее всего не получится добиться сеток сверхвысокого разрешения. Слишком похож на подход «решение одним нажатием». Удобно, когда это работает, но когда не получается, то при исправлении возникает куча проблем.
Система подписки делает его более дорогим в долгосрочной перспективе (от шести месяцев)

Думаю, стоит посоветовать новичкам начать с Reality Capture, он более терпим к плохим снимкам, кроме того, вы можете компенсировать некачественные снимки хорошим качеством изображений, чего Agisoft, возможно, не обеспечит на вашем компьютере.

Однако если вы планируете работать с фотограмметрией только время от времени, то наверно дешевле будет выбрать standalone-лицензию Agisoft.

Особенности


Потрясающий сверхдетализированный скан может и не выглядеть в игре красиво, если заранее не позаботиться о хорошем художественном видении.

Самое важное и трудное — это замощение (tiling). О нём стоит помнить всегда, особенно при поиске поверхности для сканирования. Многие спрашивают меня: «Есть ли более быстрый способ размещения текстур и можно ли его автоматизировать, например, с помощью Substance?»

В 90% случаев такого способа нет.

Думаю, вера в существование такого способа возникла из-за убеждения, что замощение — это удаление швов. Да, наверно так и есть, но это меньше 10% процесса соединения текстур. Реальная работа заключается в балансировке частотности и характерных черт вашей поверхности, в том, чтобы текстура выглядела хорошо даже при многократном повторении. В большинстве случаев это пока нельзя автоматизировать.

Возможно, этот процесс стоит называть не «размещением», а «соединением».

Не фокусируйтесь только на швах, перемещайте фрагменты текстуры, удаляйте слишком заметные камешки, и т.д…


Невозможно перейти от протяжённой скалы (слева) к квадратной бесшовной текстуре (справа), просто «удалив швы»

Способ, которым я делаю текстуры бесшовными в Photoshop, позволяет довольно просто двигать объекты по сравнению с 3D-редакторами, особенно когда работаешь с сетками в 50 миллионов полигонов.

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

Удаление информации об освещении


Избавление от освещения — это очень большая проблема при сканировании 3D-объектов. Для текстур же… оно не слишком важно. Чаще всего эта проблем решается быстро и прямолинейно. Важнее всего иметь при сканировании равномерное освещение. Если удалось его добиться, то дело остаётся за использованием карты AO (Ambient occlusion) для удаления затемнения из диффузной карты. Затем, возможно, придётся исправить несколько фрагментов вручную.



Я почти никогда не трачу на удаление информации об освещении больше тридцати минут.

Карты нормалей


Карты нормалей создаются достаточно просто, однако стоит обратить внимание на два момента:

  1. Любой ценой избегайте нависания: об этом нужно помнить даже во время съёмки, разберитесь, какая область может выглядеть неправильно при смещении на плоскости, и знайте, как исправить это, если всё равно решите снимать. Как я объяснил в своём туториале, большинство проблем можно решить созданием специальной низкополигональной модели. Однако это хитрая проблема, потому что вы можете не заметить её, пока уже не заберётесь в процессе очень далеко. На моих первых сканах было много растяжений из-за нависаний.


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

    Не ожидайте, что скан будет достаточно детальным для сверхчёткой карты нормалей. Потребуется регенерировать высокочастотные детали, преобразовав albedo в карту нормалей и наложив мелкие детали поверх нормалей скана.

Почему вы думаете, что использование карт отражений важно для подбора правильных типов материалов?


Очень хитрый вопрос!

Поскольку в играх широко используется PBR, мнения художников разделились. Одни хотят, чтобы система была точной на 100%, а потому заявляют, что никогда не стоит использовать карты отражений. Другие говорят, что некоторые объекты выглядят с ними лучше, хотя и технически неверно. Могу сказать, что правы обе стороны, однако я склоняюсь к использованию в определённых случаях карт отражений. Более того, возможно, они не так неточны, как вы думаете. Давайте я объясню:

При запекании органических текстур на плоскость вы слишком упрощаете чрезвычайно сложные формы, листья, небольшие камешки, и т.д… Осознавали ли вы когда-нибудь, насколько сложным может быть мох?



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

Тесселяцией можно вернуть обратно эти мелкие тени, но для маленьких деталей её недостаточно.

Можно ли решить эту проблему с помощью карты AO?

Да, может быть, но проблема с картами AO в том, что они по-настоящему работают только в затенённых частях сетки, а все освещённые прямым светом части остаются очень плоскими и «пластмассовыми».

Использование карты отражений — это простой способ для имитации сложного поведения сложных органических форм.


Без карты отражений (слева) и с картой отражений (справа). Заметьте, что грязь и очень мелкие камешки выглядят менее пластмассовыми с картой отражений.

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

При использовании карты отражений я передаю на вход с помощью линейной интерполяции только её часть, чтобы управлять количеством изменяемого отражения.

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



Другие мои работы можно посмотреть на ArtStation!

Себастьян ван Элвердинге, художник по окружениям Starbreeze Studios.
  • +41
  • 10,9k
  • 7
Поделиться публикацией
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама
Комментарии 7
  • +1
    Черт, изумительно. Надо найти время попробовать.
    • 0
      Охренеть. Как же круто. Даже фото. Особенно мох зацепил. Невероятно. Под впечатлением. Пишите еще.
      • 0
        Это перевод :)
        • 0
          Пишите еще.

          Скорей уж «Фоткайте ещё»! Пейзажи — просто супер. И в 3D выглядит не менее обалденно!
          • +1
            Пишите еще.

            https://megascans.se/

          • +1

            Нереально круто!
            А ещё статьи похожей тематики будут?

            • 0
              О чём именно, про фотограмметрию?

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.