Всем привет!
В этом уроке, я хочу поделиться одним из способов создания текстур плоских объектов типа плитки или 3D панели.
Я довольно часто прибегаю к такому методу, поскольку это быстрее, чем обрисовывать текстуру с нуля в Photoshop. Плюс, еще, в пару кликов можно быстро создать bump карту.
Я думаю, что не нужно дополнительно говорить о том, что использование текстуры вместо 3D геометрии значительно экономит ресурсы. Особенно, если вы собираете сцены в Unreal Engine, Unity или под WebGL. А результат будет ничем не хуже.
Обязательно расскажите в комментариях ваши кейсы применения данного способа и как вы создаете подобные текстуры...
Вступление
Картинка взята с сайта: https://www.daltile.com/product/Bee-Hive-Medley?color=White&shape=Hexagon
Как мы видим, плитка имеет сложный рисунок, и отрисовка в Photoshop займет довольно много времени.
Поэтому, в данном способе мы сначала создадим геометрию плитки, применим к ней текстуры, затем просто сделаем ее рендер. Таким образом мы имеем более гибкий подход и можем в процессе изменить направление фактуры для отдельных плиток, или поменять что-либо без глобальных переделок.
Дочитайте урок до конца и возможно вы узнаете о некоторых нюансах или новых трюках.
Моделирование
Всегда, перед этапом моделирования необходимо внимательно изучить референс, чтобы разбить работу на небольшие этапы и понять конструкцию или строение объекта.
Как видно, на картинке сверху, наша плитка состоит из шестиугольников с определенным рисунком, который разделяет нашу соту на три ромба.
Ряд ниже, это та-же плитка, только развернута на 180°.
Плитки прилегают друг к другу под определенным углом, около 60°.
Создадим шестиугольник при помощи Spline → NGon.
Для этого перейдите в вид Top, нажмите NGon, установите количество сторон 6 и размер 24.77 см.
Размер взят из спецификации, указанном на официальном сайте.
Далее конвертируем данный сплайн в Editable Poly, при помощи нажатия правой кнопки мышки на выделенном объекте и выберите Convert To → Editable Poly.
Перейдите в подобъекты редактирования полигонов или нажмите кнопку 4 на клавиатуре. Выделите единственный полигон, сделайте небольшой Insert.
Сделайте еще один Insert и затем нажмите Collapse. У вас должно получиться так, как на картинке ниже.
Выделите грани, нажмите кнопку 2 для работы с ребрами. Выделите как показано на картинке ниже и нажмите Backspace на клавиатуре.
У вас должно получиться так.
Сделайте Chamfer для следующих граней с такими настройками.
Можно немного изменить масштаб на глаз, чтобы линии были более ровными. Выделите полигоны как на картинке и немного примените Scale.
Сделайте Extrude, полигонам, чтобы задать высоту плитки.
В результате у вас должна получиться такая плитка.
Текстурирование
Разобьем нашу плитку на три Material ID. Смотрите картинки ниже, как стоит применить IDs.
Откройте Material Editor (кнопка M на клавиатуре), создайте Multi/Sub-Object Material с тремя слотами и сразу назначьте Standard Material для каждого из слотов.
Установите Diffuse Color:
Для ID 1 RGB: 2 2 2
Для ID 2 RGB: 38 49 50
Для ID 3 RGB: 239 243 235
Пример установки цвета смотрите на картинке ниже.
В качестве Diffuse Texture для ID 2, я назначил эту текстуру ниже. Вы можете взять ее или же создать в Photoshop при помощи инструмента Clone Stamp, используя за основу картинку с этого сайта: https://stoneandtileshoppe.com/products/bee-hive-medley-p048-cube-hex-negative-matte-porcelain-tile
Примените к отдельным полигонам модификатор UVW Xform, измените Rotation и V Tile, если нужно.
Смотрите финальный результат на картинке ниже.
Таким образом мы создали один элемент плитки с тремя ID материалами: черные швы по краям, рисунок с тремя белыми полосками и текстурой дерева.
Рендеринг
Сделайте клонирование плитки при помощи клавиши Shift, как показано на GIF-анимации ниже. Используйте для удобства Tools→Transform Toolbox и Vertex привязку.
Результат клонирования должен выглядеть следующим образом. Смотри картинку ниже.
Внимание! Теперь интересный трюк. Мы создадим Plane по размеру повторяющегося паттерна. Это в дальнейшем нам поможет удобно вырезать текстуру в Photoshop.
Сейчас будет самая ответственная часть, нам необходимо создать Plane, по размеру повторяющегося паттерна. Представьте, что Plane это прямоугольная область, которую мы позже вырежем и она должна бесшовно повторяться.
Для удобства я создал Plane с минимальным количеством сегментов, сконвертировал в Editable Poly, немного приподнял над плиткой, затем при помощи комбинации клавиш Alt+X, я сделал наш Plane полупрозрачным. Далее двигая вершины, у меня получился такой результат.
Поставьте Pivot Point для Plane в центр, для этого можно воспользоваться тем-же Transform Toolbox, нажав кнопку Center, в группе Align Pivot.
Постройте обычную Free Camera в виде Top, и при помощи инструмента Align, выровняйте по центру нашего вспомогательного Plane.
Зайдите в настройки рендера Render Setup, установите размер 5000x5000px, включите Safe Frame для Viewport при помощи клавиш Shift+F.
Для камеры включите опцию Orthographic Projection и установите Type→Target Camera. Нажмите клавишу C, чтобы включить вид из камеры.
Переместите Camera Target по оси Z в 0 координат. И поднимая или опуская камеру по оси Z, подберите ракурс, чтобы Plane было полностью видно в камере.
У меня сцена выглядит, как на картинке ниже.
Обратите внимание!
Важно, чтобы Camera Target, был на одном уровне вместе с самой нижней точкой нашей плитки.
Убедитесь, что в качестве рендера у вас установлен Scanline Renderer.
Спрячьте Plane и сделайте рендер F9, нашей текстуры.
Сохраните рендер в формате PNG в удобное для вас место, нажав на иконку Дискеты.
Теперь необходимо спрятать плитку и сделать рендер нашего Plane. Затем сохранить также в формате PNG.
Для создания bump карты, необходимо добавить в настройках рендера Render Setup новый Render Element→Z Depth.
Задайте следующие настройки для Z Depth. Выделите камеру, скопируйте Target Distance в параметр Z Max.
Далее я выбрал Camera Target, переместил с привязкой по оси Z к верху плитки и скопировал параметр Target Distance в Z Min. Затем, вернул Camera Target в 0 координат по оси Z.
Важно!
Не забудьте переместить Camera Target в исходное положение - в 0 координат по оси Z! Иначе у вас будет не правильный паттерн!
Спрячьте вспомогательный Plane, включите вид с камеры и запустите рендер F9. Если, вы сделали все правильно, у вас должен запуститься в отдельном VFB рендер нашего bump.
Сохраните также этот рендер в формате PNG.
На этом этапе весь рендеринг завершен. Мы получили высококачественные текстуры плитки и bump карты. Благодаря Scanline Renderer, мы получили картинки без искажений цветов и в большом разрешении, что нам и требовалось.
Осталось только вырезать нужный паттерн в Photoshop.
Работа в Photoshop
Откройте Photoshop, загрузите получившиеся 3 текстуры в стек. Для этого перейдите в File→Scripts→Load Files into Stack.
Нажмите Ctrl+левый клик мышки, чтобы получить выделение непрозрачной области. Таким образом, мы получаем быстрое выделение нужной нам повторяющейся области. Благодаря Plane, который мы создали как вспомогательный объект, нам остается только сделать Crop данной области.
Чтобы сделать Crop, не снимая выделения, включите инструмент Crop или нажмите клавишу C, и затем, нажмите Enter.
Попробуйте после этого применить Filter→Other→Offset, чтобы убедиться или у текстуры нету швов.
Отлично сработано! Текстура выглядит великолепно!
Теперь вы можете сохранить финальные текстуры. Для сохранения bump, спрячьте слой выше и сохраните под другим названием. Слой с рендером Plane, нам уже не нужен.
Бонус-контент
Если, вам необходимо получить Normal карту вместо черно-белой карты высот, - это можно легко сделать в Photoshop.
Перейдите в Filter→3D→Generate Normal Map...
Настройте силу выдавливания и размытость.
Готово!
Если у вас остались вопросы, вы можете посмотреть прикрепленное в начале урока видео. Или спрашивайте в комментариях.
Также расскажите, как вы создаете подобные текстуры и был ли вам данный способ полезен 😉
Финальный результат
Так к примеру выглядит Diffuse + Normal в PlayCanvas WebGL, смотрится симпатично.
Прилагаю две текстуры, которые получились в результате.











































{{comment.text}}