Создание текстур лица из фотографий
Суть идеи заключается в том, что вместо того, чтобы перетаскивать фотографию по кусочкам через photoshop/gimp или другой редактор, её проще деформировать 3d-редактором (т.к. сепциализированного софта для этого просто нет (можно написать, но это долго)). Здесь рассматривается только создание текстуры лица, изменение лицевой геометрии (т.е. формы лица) не рассматривается.
Сложность: Высокая.
Требуемые программы:
1) 3D редактор. В видео туториале используется gmax. К сожалению, программа хотя и бесплатная, она требует бесплатной регистрации, для которой нужно знать английский и зарегистрироваться на turbosquid. Вместо gmax можно использовать 3dsmax (т.к. gmax - это очень урезнаная версия 3dsmax). Скорее всего, подойдёт Maya или любой другой редактор, который поддерживает определённые возможности. А именно:
1.1) Модификатор "mirror" (зеркало)
1.2) Планарная генерация текстурных координат (UVW Map). Например, в blender 3d этой фишки я не обнаружил.
1.3) Редактирование текстурных координат
1.4) Отображение текстур в редакторе текстурных координат и вьюпорте.
1.5) Поддержка текстуры высокого разрешения. Это обязательно, т.к. иначе текстуры будут "размылены".
Если что-то непонятно, то можно просто взять 3dsmax, т.к. там есть всё нужное.
2) 2D редактор. подойдёт gimp, photoshop, или любой другой продвинутый, где поддерживаются слои и маски слоя. В видео используется GIMP, который можно бесплатно с множества сайтов в сети.
3) The Sims 2 с Body Shop .
Требуемые навыки:
Базовые навыки владения компьютером, 3d и 2d редактором. Большую часть вещей я постараюсь объяснить, но, например, по работе в 3d редакторе лучше найти туториал. Также рекомендуется умение понимать инструкции написанные программистами .
Исходные материалы:
Нужна одна или несколько фотографий "жертвы". В видео используется случайно выбранная фотка с "mugshot archive" на The Smoking Gun.
Для создания текстуры лица высокого качества, можно использовать несколько фотографий с разных ракурсов, которые можно деформировать по такому же принципу, затем смешать в 2d редакторе.
Текстуры должны быть приличного разрешения, т.к. размер текстуры лица в "the sims 2" - 512x512 пикселей, а при деформации в 3d редакторе они слегка "мылятся".
Краткое описание процесса (не совпадает с разбиением на шаги в видео):
1) Создаём в Body Shop новый проект скина. Это сохранит все используемые симом текстуры так, что они будут доступны для редактирования. Этот этап подробно не объясняется.
2) в 3d редакторе делаем квадратик, накладываем на него используемую по умолчанию текстуру, которую мы хотим изменить. (т.е. та текстура, которая используется в The Sims 2, а не физиономия "жертвы")
3) Делаем на квадратике с текстурой "сетку", повторяющую контуры лица на текстуре. См скриншот, если непонятно:
Сетку лучше сохранить для использования в будущем.
4) Берём фотографию "жертвы", и накладываем на тот же самый квадрат. Само собой, фотография с сеткой не совпадает, но это можно исправить.
5) Открываем редактор текстурных координат, включаем в нём отображение текстуры (т.е. фотографии), и в редакторе текстурных координат перетаскиваем вершины сетки так, чтобы они совпадали с контурами лица на фотографии. См скриншоты:
До:
После:
6) Закрываем редактор текстурных координат и видим в 3d редакторе деформированную исходную фотографию, которая теперь по форме совпадает с оригинальной текстурой, взятой из The Sims 2.
7) Рендерим или принтскриним деформированную физиономию, затем открываем в редакторе изображений (gimp/photoshop). В идеале было бы неплохо, чтобы на полученной картинке фотография была размером 512x512 пикселей, но если исходная фотография была очень высокого разрешения, то можно сделать её больше чем 512x512 (напр 1024x1024), затем уменьшить в редакторе изображений до нужного размера.
8) В редакторе изображений подгоняем цвет деформированного лица под цвет текстуры, затем смешиваем её с исходной текстурой по маске слоя.
Подробное объяснение (если непонятно краткое описание), только для G-max:
1) Не объясняется, т.к. это стандартное действие для создания скинов.
2) Создание квадрата с текстурой.
В 3d редакторе нужно создать плоскость (т.е. квадрат) с большой шириной (чтобы не было проблем с навигацией вокруг квадрат), разбитый на два сегмента по горизонтали, и один по вертикали. Это должен быть именно квадрат, ну и неплохо, чтобы он был расположен по центру коордиант (хотя это необязательно). В G-Max/3dsmax это делается следующим образом:
2.1) На панели с примитивами (справа, посередине), выбрать стандартные примитивы, нажать кнопку "Plane"
2.2) Развернуть блок параметров "Keyboard Entry", ввести Width - 250, Length - 250
2.3) Нажать "Create".
2.4) Перейти на вкладку "Modify"
2.5) Поставить Width Segs - 2, Length Segs - 1
2.6) Вызвать material editor. Это делается нажатием "M" (английская "M").
2.7) Нажимаем "New", выбираем "Standard". Внимание! В 3dsmax создание материала будет выглядеть иначе.
2.8) Перетаскиваем материал на объект. Мышкой.
2.9) Щёлкнуть на кнопку рядом с надписью "bitmap", и выбрать файл текстуры.
2.10) В свойствах материала нажать кнопку (скриншот):
это включит отображение текстуры во вьюпорте
3) Создание сетки на квадратике текстуры.
3.1) Конвертируем квадрат в Editable Mesh. Для этого делаем правый щелчок на стеке модифткаторов, выбираем "Convert to Editable Mesh".
3.2) Удаляем правую половину квадрата. Для этого либо удаляем две правые точки, либо переходим сам полигон.
3.3) Накладываем на плоскость модификатор "Mirror".
Снова появится правая половина квадрата, но с отзеркаленными текстурными координатами.
3.4) Накладываем на плоскость модификатор "UVW Map" (генерация текстурных координат),
выбираем тип генерации "Planar", и убеждаемся, что размер плоскости для генерации совпадает с размером самой плоскости (т.е. 250 в видео).
3.5) Переходим в самый низ стека модификаторов ("Editable Mesh"), доавляем точки по контурам лица,
затем сшиваем их треугольниками.
3.6) Когда большая часть лица закрыта треугольниками, удаляем фоновый затекстуренный полигон, сшиваем созданную половинку лица с имеющимися точками так, чтобы опять получилась половинка квадрата.
3.7) В стеке модификаторов выбираем модификатор "Mirror", делаем на нём правый щёлчок, выбираем "Collapse To".
3.8) Сшиваем полученные половинки лица.треугольниками.
3.9) Когда всё завершено, конвертируем весь объект в editable mesh
3.10) Добавляем модификатор "UVW Unwrap"
4) Накладываем новую текстуру. Делается так же как и накладывание первой текстуры - просто открываем редактор материалов, находим настройки диффузного цвета, выбираем другую текстуру.
5) Редактирование текстурных координат:
5.1) выбираем в стеке модификаторов "UVW Unwrap", нажимаем кнопку Edit.
5.2) Перетаскиваем в редакторе точки одну за другой так, чтобы они совпадали с чертами лица на фотографии.
6) Редактирование фотографии в редакторе.
6.1) Полученную деформированную физиономию в редакторе изображений обрезать и подогнать под размер 512x512 точек.
6.2) Открыть оригинальную текстуру лица в GIMP или Photoshop.
6.3) В файле с оригинальной текстурой создать новый слой, на который скопировать деформированную физиономию.
6.4) На новом слое создать маску слоя ("layer mask"), по умолчанию маска должна быть полностью прозрачной (в GIMP'е это значит = чёрная).
6.5) На маске слоя грубо сделать центр лица полностью непрозрачным (большой белой кистью),
затем размылить маску слоя гауссовым блюром с большим радиусом (50..100..150).
Это плавно смешает деформированное лицо полученное из фотографии с оригинальной текстурой.
6.6) Объединить слои, и сохранить полученное изображение поверх оригинальной текстуры в той папке, куда при помощи Body Shop был экспортирован скин.
7) Применить текстуру в Body Shop.
Может получиться что-то вроде этого (это не та текстура, что получилась в видео - более старая и менее удачная
Совершенно очевидно, что если потратить большее количество времени на вылизывание текстуры, подогнать цвет, использовать несколько фотографий, можно получить результат сравненимый с ручным перетаскиванием по кусочкам, но за меньшее количество времени.
Дополнительная информация:
Некоторые горячие клавиши gmax:
F3 - включить/выключить отображение объекта сеткой (wireframe)
F4 - включить/выключить отображение объекта поверх закрашенного объекта.
M - вызвать редактор материалов
Q - режим выделения
W - режим передвижения объектов.
Ctrl+Z - отменить последнее действие.
Стандартные операции в gmax/3dsmax:
0) Выделить объект или примитив: левый щелчок мышки.
1) Удалить полигон, ребро, точку или треугольник:
1.1) В стеке модификаторов развернуть "Editable MesH", там выбрать нужный тип примитива.
1.2) Левым щелчком выбрать один примитив, либо при помощи "лассо" (щёлкаем на пустом месте и тянем) выбрать
1.3) Нажать "Delete".
1.4) Если удалён полигон или треугольник, и остались точки, которые ником больше не принадлежат, появиться окно "Delete isolated vertices?". Если нажать "Да", то точки, которые больше никому не принадлежат, будут удалены, если нажать "нет", то они остануться.
2) Создать точку/точки.
2.1) В стеке модификаторов развернуть "editable mesh", выбрать "vertex".
2.2) Найти ниже кнопку "Create".
2.3) Левыми щелчками добвалять точки.
2.4) отжать кнопку "Create", когда все точки будут созданы.
3) Объединить две точки в одну.
3.1) В стеке модификаторов развернуть "Editable Mesh"
3.2) Выбрать "Vertex"
3.3) Выделить две точки, которые нужно объединить.
3.4) Найти кнопку Weld.
3.5) Рядом с кнопкой Weld есть окно для ввода дистанции. Точки будут объединены в одну, если расстояние между ними меньше, чем указанное в окне число.
В окне нужно выставить нужную дистанцию. Выставить большое число - если требуется объединить точки вне зависимости от расстояня между ними, или не очень - если выделено больше двух точек и нужно объединить только те, которые находятся недалеко друг от друга.
3.6) Нажать Weld. Если появляется сообщение "no vertices within weld thresold", это значит, что не было найдено точек, расстояние между которыми было бы меньше указанного значения.
4) Создать полигон или треугольник.
4.1) В стеке модификаторов развернуть "Editable Mesh"
4.2) Выбрать полигон или треугольник (в стеке модификаторов)
4.3) Нажать кнопку "Create".
4.4) По очереди щёлкнуть несколько точек. Точки должны быть выбраны против часовой стрелки, иначе созданный треугольник будет повернут в другую сторону и его не будет видно.
Обсудить на форуме...