ViTcore
Как я создаю бесшовные материалы
ViTcore 12785

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

Что мне требуется для фотоскана, железо:Телефон с  топовой или около-топовой камерой, нужна высокая детализация кадра, адекватный динамический диапазон, чтобы не было пересветов и чтобы не было черных теней, шумодав в камере без артефактов. Летом долго выбирал на gsamarena и прочих  тестах камер, мой выбор - MiMix2S.Комплюктер. Что-то многоядерное, но и не 20 медленных ядер ксеонов, согласно исследованиям, фотоскан не ускоряется линейно от прибавления ядер (привет закон Амдала). Мой выбор остановился на Threadripper 1920X.

Память - от 64Гб, я пока мучаюсь с 32Гб, поэтому приходится идти на компромиссы качества или уменьшать площадь сканируемого образца. Скорость памяти кардинально не повлияет, лучше около 3000мГц.Софт:Прога сканирования - Agisoft PhotoScan. Тут практически без конкурентов.Что-то для работы с высокополигональной сеткой. Zbrush например. Но сам я мало дорабатываю именно форму, поэтому делаю все в 3ds max. Запекаю на текстуру  иногда там же, но лучше в xNormal, в один клик без шаманства делает отличные  бэйки. Прога где скорректировать у текстур неровности освещения и формы, сделать бесшовность. Photoshop тут сразу нет. Нужно что-то пакетное. After effects, например, и процедурное... упс, тогда Nuke - мой выбор. В сабстансе не работал и не буду))Погода, дааа... вот тут засада с этими фотосканами, мало просто найти подходящий референс, нужно чтобы погодные и световые условия соответсвовали. Вы не можете скнировать под солнцем, вы не можете сканировать в дождь, вы не можете сканировать при переменной облачности.  И сканируя в неравномерном освещении, например в тени дерева или забора, рискуете получить слишком неравномерную пятнистую текстуру, что потом  тяжело вытягивать, либо вообще не получится, нельзя забывать, что мы же не в RAW на профессиональный фотик делаем снимки. Да  и там  проблемы будут те же.Ну что народ, погнали.

Первое, конечно, правильно сфотографировать поверхность. Фотографируется перпендикулярно поверхности,  всё в фокусе, перекрытие кадров между собой 40-50%.  Примерно 40 фоток на квадратный метр стены/земли. Большую плотность мои 32гб не вывезут при 12мп фотографиях. На моей камере мылят крайние углы, лучше выбрать квадратное кадрирование.

Дальше все эти 150-200 фоток закидываются в фотоскан. Там все просто как 1-2-3-4.  Минимум ручной работы. Настройки для этой стенки были такие. HeghtField и Orthophoto применимы только к плоским поверхностям, зато экономит памяти и считается быстро. Обычный меш можно считать и 10, и 20 часов.

Первый этап - определение позиций камер. Для 12мп фоток, опять же по исследованиям, не смысла в более чем 60000 key points. Пока что-то непонятное. На то он и первый этап.

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

Далее - полигональная сетка поверх этих точек. Дырки закрылись как и говорил, всё из-за Interpolation "Enabled".

Ну и вишенкой на торте осталась текстура с цветом. Для поверхности подобного размера достаточно 16K текстуры. При 32K уже видно скорее артефакты и шумы  камеры, чем новые детали.

Вот и всё, прога сама сделала высокодетализированную полигональную поверхность с 16к текстурой и Вы великолепны. Но постойте, чего делать с 9 миллионами полигонов. Поставить в углу сцены эту стенку, чтоб не отсвечивала и  тихонько сжирала свои гигабайты памяти на рендер. Ну уж нет уж.  Джесси, нам надо печь!

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

Получить текстуру цвета и нормалей можно прямо в 3дмаксе, но там надо создавать проекцию, настраивать всё, а нам карту высот еще надо, там вообще плохо с этим. Надо переключаться в scanline render, шаманствовать с настройками, короче к чёрту все это. Делаем два экспорта - лоупольки и хайпольки, импортируем в xNormal, надо указать base текстуру для хайпольки, еще пара кликов мышкой и всё, текстуры запечены. Запекаю я уже в 8К, а карты высот и нормалей в будущем вообще порежутся до 2-4К, т.к. они не содержат в себе столько деталей, чтобы шиковать на 8К. Тут 8192*4096, т.к. текстура будет с соотношением 2:1,  так устроен наш взгляд, что для кирпичной кладки важнее добавить кирпичей по горизонтали, чтобы повторяемость была менее явной. Все естественно в EXR 32-bit. Иначе никак.

Вот что выдает xNormal после себя.  При желании уже можно использовать.

Вот только всё какое-то блеклое, гамма  потеряна, карта высот не понятно что показывает, да и весит это все еще много, напомню, openEXR 8192*4096 32-bit float. Нам бы шакалоформат, жпег родимый. А еще нет никакой текстуры позволяющей делать  отражения материалу.

Итак, получили мы после запекания текстурки, но они малопригодны для применения, нет бесшовности, цвета не те, резкости нет, также нет карты для отражений.Дорабатываю в Nuke, первым делом цветокоррекция для диффуза, поджимание черного и белого для карты высот, выставление гаммы для карты нормалей. Это то, что для каждой входящей текстуры уникально, далее идёт switch, это просто для удобства выходного рендеринга, чтобы автоматически переключались входы в зависимости от того, какую текстуру рендеришь нюком.

А вот дальше идет пакетная обработка, т.е. все операции применяются сразу ко всем текстурам. У меня уже готовы настройки для 4К, 8К, 16К текстур, просто подключаю новые файлы. Первым делом скрываю швы, сначала вертикальный, потом горизонтальный. Разберем ноды вертикального шва. Смысл тут простой, раздвигаем трансформациями 2 копии влево и вправо, с небольшим нахлёстом. Тут не очень удачный пример, т.к. запёк я недостаточно информации, обычно я запекаю нужный мне кусок с запасом +10% в каждую сторону. Потом на эти 10% и делаю нахлёст.Потом с верхнего слоя срезаю по маске контур, если фактура мелкая, то можно вообще вертикальную линию нарисовать и не париться, т.к. альфа канал я еще дорабатываю подмешиванием в него изначальных RGB данных, так получается рваный контур, который хорошо маскирует искусственность маски. Но если речь идет о каменной кладке или кирпичах, то маску придется вручную подвигать, обводя камни или кирпичи. Как можете заметить в этом примере я забил на это)) Аргументирую тем, что в общей массе и при общей равномерности всех входных текстур шов не бросается в глаза.

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

Примитивным кейнгом (подрезкой по цветам) по желтому я сделал маску по краске. Она нам пригодится для двух вещей.

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

И последующей перекраски на уровне материала.

Всё, текстуры готовы. Одна лишь карта высот выделяется, все потому что её я шакалить не стал. Конечно, убавил у неё разрешение, но 32-битный цвет оставил. 

Осталось только всё это собрать в материал. Просто подключить в соответствующие инпуты.

Разберём подробнее, диффузный цвет. Тут оригинальная текстура, а поверх цвет по маске. Вот и перекрашиваем.

Карты specular и glossinnes это один и тот же файл. Получается где на текстуре темно там слабый и матовый блик, где светло там яркий и четкий блик. Большего и не требуется.

Дисплейсмент заведён через модификатор VrayDisplacementMod, никогда не использую дисплейсмент внутри самого материала. И микродетали с помощью VrayColor2Bump в которую закинул диффуз, делать отдельную текстуру под такое накладно, она должна быть также 8К разрешением, а память-то не лишняя, вот и грузим одну карту в разные слоты. А еще я немного диффуза подмешал в дисплейсмент через overlay. Кидаем на какую-нибудь болванку, я выбрал цилиндр, на нем играет светотень.

Свет, камера, рендер!

Вот таким образом я создаю подобные материалы.

материал, кирпич, фотограмметрия, создание, 3ds max, nuke, phoroscan, xnormal

Комментарии (74)

+31
Quasar
Quasar
Отличный урок! Жаль многие Трупероподобные не оценят, так как для них это оверсложно)
+1
ViTcore
ViTcore
трупероподобные?
+21
kokoasfalt
kokoasfalt
Конформизм, дизайнерская безупречность и ласкающий тело «физиологическо ощутимый» глянец всё совершенствующейся современной жизни, накладывающих свой отпечаток на обустройстве жилищ актуального обитания не любят жизнь в её сущностном естестве, предпочитая дешевые подделки, безжизненные суррогаты и трупоподобные клоны. Красивое омертвление живых тканей бытия
0
imFeodor
imFeodor
Комментарий удален
+4
MountainTrooper
MountainTrooper
Не обращайте внимание. Это мой личный хейтер. Подобно шакалёнку Табаки из "Маугли" он в каждом комментарии пытается меня уколоть, всякий раз безуспешно и, как в данном случае, совершенно без повода, так как я никак не высказался ни в целом о материале, ни о его сложности.
+7
Quasar
Quasar
Вы ничего не попутали?) От кто шакаленок, так это вы) Изворотливый) Все наизнанку вывернули) Сами ко мне прицепились еще давно) айяяй так завираться.
Но большемни слова о вас не скажу и вы от меня отцепитесь пожалуйста)
+1
Suhanaev
Suhanaev
Хорошо сказали. Создается впечатление что Вы человек редкой адекватности) Это круто.
0
i7NOX
i7NOX
Ну это Тролли с мозгом от амебы, даже не от обезьяны, которые лезут в чужую жизнь с грязными культяпками и ногами и заражают своим Интеллектом и всем остальным. Такие только в одной стране обитают. Можно не отвечать.
+3
Valentin_K
Valentin_K
)) Я даже знаю, о ком идет речь)
0
Kenzo80
Kenzo80
Для меня тоже оч сложно)
0
Po3Dnyakov
Po3Dnyakov
Ты тру)
П.С. Настоящий, правдивый, РЕАЛЬНЫЙ!!! Это перевод если кто не понял)
0
пек
пек
=))))
+38
Uraken
Uraken
пожалуй продолжу накладывать битмапу на плейн...
+4
bysochi
bysochi
ее же в бамп, рофнас, спекуляр итд...
+13
Uraken
Uraken
это как-то сложно уже
+18
Suhanaev
Suhanaev
и бессмысленно) и без всего этого вертексы крутятся, лавеха мутится)
0
igor55555777
igor55555777
Если не лениться будет проще! на лень уходит слишком много сил
0
sander_alek
sander_alek
"Ну че? Погнали!..."

Круто! Спасибо
+9
AlexHappy
AlexHappy
Здорово!!! Спасибо большое за урок! Только хотел поинтересоваться как вы это делаете и.. вуаля! Благодарю!
0
tony_black
tony_black
намечается супер мега крутой моделинг внимание спойлер =D!!! согласен на счет урока просто мега профессионально!!!!!
+1
viktor-erfurt94
viktor-erfurt94
Классный урок и прикольная подача! :)
Только вот не понял для чего карта нормалей в слоте Fog color?
+7
ViTcore
ViTcore
Fog выключен, она там чтобы по быстрому свапнуть в бамп при отключенном дисплейсменте, например для дальних ракурсов для экономии ресурсов.
+2
viktor-erfurt94
viktor-erfurt94
Все продумано)
+2
c3dm
c3dm
Жизненно ))) Спасибо
0
xt13r
xt13r
омайгад) вот это труд. вот это набор программ)
спасибо!
+9
Чеширский_КОТ
годнота подъехала
на моём цилиндре заиграла светотень
0
Levan_ko
Levan_ko
Крутой урок! 5+
случайно ткнул в 4(
+1
StunBreaker
StunBreaker
Витя молодец.. но.. фотоскан ускоряется в 10ки раз, когда используешь GPU..
Может ты и используешь, просто ничего не сказал про выбор GPU..

p.s. : Статья об этом и бэнч тест: https://blog.paperspace.com/gpu-acceleration-in-agisoft-photoscan/#gpu 
+2
ViTcore
ViTcore
конечно карточка подключена и ускоряет, у меня просто GTX 1063 и выбора пока нет))
вот так ускоряют карточкиhttps://www.pugetsystems.com/pic_disp.php?id=47233&width=800&height=800 

кстати там при MultiGPU прирост jот каждой добавленной еще менее ярковыраженный
+2
StunBreaker
StunBreaker
Сегодня будем кое-что сканить, и заодно проверю это ) отключу 3 карты из настроек, оставлю одну.. все карты 1080ки.
p.s. да но на картинке только один этап как я понял )

А GPU влияет на следующие этапы: Image Matching, Depth maps generation and mesh refinement. )
В общем по факту проверю на сколько проваливает, выдам все данные )

В верхней статье которую я скинул, на ультрах делали скан..
чисто на CPU = 32 часа, с подключенной GPU P5000 стало 1.75 часа =)
0
ViTcore
ViTcore
+3
xpp_nd_ruphus
xpp_nd_ruphus
GPU еще считает плотное облако, а это самый долгий этап при сканировании
+3
StunBreaker
StunBreaker
всё верно )
0
ViTcore
ViTcore
сегодня обновил версию фотоскана (у меня была 1.2) и добавил еще одну GTX1060 и в разгон обе +100+700, таким образом ускорил dense cloud в 2 раза))
0
StunBreaker
StunBreaker
это уже прогресс.. ) со временем ещё вставишь, будет совсем кайф )
+3
xpp_nd_ruphus
xpp_nd_ruphus
для фотоскана лучше иметь несколько карточек причем совершенно неважно AMD или Nvidia и кстати если есть рендернода, то ее можно подключить к просчету, что кратно увеличит скорость обработки, если нода сопоставима с головной машиной
+1
ElizabethBess
ElizabethBess
Хм, Nuke. Интересно, пойду посмотрю
0
Oleg.budeanu
Oleg.budeanu
Отличный урок, спасибо.
Файлы Nuke не будете выкладывать? Интересно было бы посмотреть. Процесс описан немного сумбурно.
+2
larrs
larrs
о мой любимый Blinn думал уже и не увижу его никода
+1
X_N
X_N
Отличный материал, спасибо!
+1
Evgeny.koshel
Evgeny.koshel
Оскар человеку за такой урок)
спасибо
+1
Dreana
Dreana
Привет с Пикабу =))
+4
ewwa111
ewwa111
Очень круто. Но для меня пока из серии-как нарисовать сову :)
0
Seliverstone
Seliverstone
Основательно однако.Благодарствую за инфу.
+18
olegwer
olegwer
90% людей закончило чтение на первой картинке с Nuke )
0
Ecarum
Ecarum
Познавательно) Спасибо автору!
0
Godlena
Godlena
сколько времени занял весь процесс?
+1
ViTcore
ViTcore
Пару дней
+2
petrovich23rus
petrovich23rus
отличный урок. спасибо!
0
yuraolar
yuraolar
в закладки
+1
dontpiter
dontpiter
А почему текстуры на выходе не квадратные?
0
ViTcore
ViTcore
Зачем?
+2
dontpiter
dontpiter
Квадратные меньше грузят систему
+1
ViTcore
ViTcore
Система потерпит, зато уникальных кирпичей больше и на стене лучше смотреться будет. Так-то ничего не мешает разрезать на 2 квадрата или сплющить по горизонтали в раза.
+5
Sean
Sean
Вот маленький лайфхак, как сэкономить место, количество карт и оперативку: берёте свои АО, маску, спекулар, через шафлкопи всё печёте в ргб в разные каналы, в максе это всё распаковываете нодой ргб сплит. Имеем: 1 текстура загружается в память, 1 текстура хранится на диске. И ещё маленькие советы: уходите от жпег, нормали пеките в 16битные форматы, чтобы минимизировать косяки с градиентами. И да, для карты высот тоже в целом хватает 16битной точности с плавающей запятой.
+2
Suhanaev
Suhanaev
очень глубокие и необходимо нужные знания, всегда восхищался подобным. Спасибо
+2
GreatWhiteShark
GreatWhiteShark
И почему нельзя шесть звёзд поставить? Ну мало же пять за такой урок!
+1
larrs
larrs
я поставил за тебя
+1
r4ichi
r4ichi
Вот и авард по Блогу подьехал
+1
KiraJensen
KiraJensen
Крутота!
+1
surferdude
surferdude
Вместо Nuke подойдёт также Affinity Photo, по проще будет
+1
Nayt
Nayt
познавательный контент +5 спасибо за труды товарищ!
+1
ViTcore
ViTcore
спасибо, но чтобы действительно было +5 надо нажать на крайнюю правую звёдочку вверху поста ;)
0
EkaterinaJolie
EkaterinaJolie
спасибо! очень крутой урок. надеюсь, когда-нибудь разберусь)
0
dremmer8
dremmer8
Замечательный урок, вы большой профессионал!
0
Vanillaman
Vanillaman
Урок превосходный! Это очень нужная вещь, и подход супер. Спасибо!
0
nkv3d
nkv3d
Хороший урок +5! еще у исходников далайт и баланс белого делать и вообще можно в продакшн ;)...
+3
ViTcore
ViTcore
https://3ddd.ru/3dmodels/show/kamennaia_stena_material вот у этой текстуры делал делайт, в оригинале там тень от неба приличная была. Эта кладка в московском зоопарке, пока фотографировал 200 фоток, народ тормозил, предполагая, что я какое-то диковенное животное так долго фотаю)) а там стена просто за углом XD
0
nkv3d
nkv3d
Зачет;)
0
sorter
sorter
жиза))
0
JaxxTrend
JaxxTrend
Урок годный, но выбор софта, я вас умоляю. Не спорю нюк прога отличная, но она тут не в тему совершенно. Её цена стартует от 4.5 килобакса или от 1.5 за квартал по подписке, что то больно жирно. Mне кажется оптимальный выбор очевиден - фотошоп, хотите более современный пайплайн ну тогда это сабастанс дизайнер (19.9$/мес) в нем кстати с весны появились ноды для обработки сканов . Далее, агисофт фотоскан в разы тормознее reality capture подписка на которую стоит что то вроде 800 рублей, Карл, в месяц. В общем понятно ваше дело в чем делать, но для других пусть будет этот мини гайд. Минусите Warezlovers ;)
0
nkv3d
nkv3d
Логика есть, но Вы тоже не совсем правы. В этом вопросе все зависит от какой "системы координат" отталкиваться.
Например нюк в кино и рекламе есть почти у всех студий, а вот покупать еще субстанс ради узкой задачи и интегрировать его в работу- спорный вопрос. Если геймдев то тогда да скорее субстанс...
Так что я считаю выбор софта вполне оправдан, и пайплайн тут не более и не менее современный, он просто другой.
0
Ben-Hur
Ben-Hur
Вы просто забыли, вы говорите за совесть, а тут в 99,9 % ПИРАТКА,,,
кстате у автора 100% вероятно она тоже)nuke мало кто потянет, уж сильно сильно дорого)
0
lucky001
lucky001
лайт версию надо для таких как я "трупероподобных"