Сразу оговорюсь, что это не туториал как правильно и нужно делать, это только мой личный подход с удобными для меня инструментами.
Что мне требуется для фотоскана, железо:Телефон с топовой или около-топовой камерой, нужна высокая детализация кадра, адекватный динамический диапазон, чтобы не было пересветов и чтобы не было черных теней, шумодав в камере без артефактов. Летом долго выбирал на 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. Кидаем на какую-нибудь болванку, я выбрал цилиндр, на нем играет светотень.
Свет, камера, рендер!
Вот таким образом я создаю подобные материалы.