Как-то раз залипал я в стену из OSB, она так красиво переливалась на закате и подумал я - вот бы сделать такой материал, да вот только как? Фотографии явно недостаточно. Скан? А как же угол поворота каждой щепки?
Значит остаётся один вариант- собрать OSB с нуля. Задачка на пол вечера, подумал я...
ОСБ плита состоит из склеенных и спрессованных стружки и щепок. Поэтому я отправился на участок в поисках чего-то похожего. Затем сделал несколько фотографий в заливающем свете на каком-то куске от стройматериалов, на нём заранее нарисовал сетку, чтобы упростить в будущем нарезание текстуры на отдельные куски.
Фотографии были сшиты в один большой файл, осталось только получить прозрачность.
Для кеинга использовал нюковскую ноду Primatte - это один из самых точных и гибких кейеров.
Заодно в фотошопе сделал карту нормалей, чтобы далее в максе уже ничего не крутить с бампом.
В максе я все это дело применил к плоскости, отдетачил полигоны и немного подвигал рёбра, чтобы центры будущих частиц более менее совпадали с центрами щепок на текстуре, хотя можно было обойтись и без этого.
Раскидать в случайном порядке щепки по плоскости с помощью TYflow труда не представляет. Однако, необходимо получить значения поворота каждой отдельной частицы в виде ЧБ текстуры. На данный момент Тайсон (Tyson Ibele создатель TYflow) не добавил в оператор Rotation никакой интеграции с текстурами. Сам же он рекомендует использовать Script С#. И вот тут начались приключения...
На базе скрипта из примеров я выяснил как получить яркостное значение текстуры в диапазоне 0-1 по координатам UV. ОК, это пол дела. Теперь эти значения нужно перевести во вращение частиц по одной оси.
Всё просто когда вы живёте в мире с Эйлеровым описанием движения, но в tyflow используются кватернионы и это считается наиболее точным и корректным способом задавать вращение объекту. Хорошо, я погуглил как вращать кватернион. W,X,Y,Z компоненты, синусы, косинусы... Но вот только я НЕ НАШЕЛ в tyflow script ни синусов, ни косинусов и вот тут уже боль, отчаяние, унижение.
Т.е. просто так с ходу не получится вращать частицы более чем на Пи. Было предпринято много попыток подогнать значения, но всё тщетно. Я уже смирился с тем, что щепки будут повернуты в диапазоне 0-90 или в лучшем случае 0-180 градусов. Соответственно карта анизотропии будет от 0 до 0,25 или 0,5.
Но чуть позже я прикинул, раз я не могу сделать в скрипте, я сделаю это на уровне самих текстур. Просто с помощью карты Output. Получилось вместо одной текстуры две, в первой функция линейна, во второй идёт по пиле. Это, конечно не косинус в чистом виде, но для работы кватерниона оказалось достаточно.
Теперь вместо считывания одной карты, производится считывание двух. W меняется в диапазоне от -1 до 1, а X меняется в это время 0-1-0.
Ура, оно вращается! Тестовый линейный градиент:
Чтобы получить значения поворота в виде ЧБ текстуры применяется оператор Mapping, он устанавливает UV координаты для всех вершин частицы равными именно той точке на которой она расположена на родительском объекте. Рендерится изначальная текстура шума, которая была до карты Output.
Все 100000 частиц я сохранил в TyCache и его клонировал 9 раз, чтобы добиться честной бесшовности при "запекании" текстуры.
Далее необходимо отрендерить все полезные в этом материалы пассы. Я произвёл рендер ортогональной проекции 3 раза в 8k 32-bit EXR. В первом я забрал пассы VrayDiffuseFilter (собственно цвет), VrayBumpNormal и VraySamplerInfo (потом из него вытянется дисплейсмент). Во втором я отрендерил ЧБ карту анизотропии, ну и третий как вишенка на торте просто рандомная ЧБ маска для разнообразия из VrayMultiSubTex, т.к. у частиц заранее раскиданы Random MatID 0-20.
Всё это я раскидал, подмешал, перемешал в нюке и отправил на выход в JPEG.
Собственно вот они:
Ну и что получилось по итогу. Есть конечно куда стремиться, возможно, когда сделаю фото более похожих щепок, я просто подставлю их в существующий проект с небольшими поправками и получу новую текстуру.
А пока этот и другие материалы вы можете найти у меня в моделях .
PS: На все эксперименты ушло почти 3 дня...А начиналось всё так обнадёживающе...
Первые тесты даже показывать стыдно))