Нормальный трипланарный маппинг в Blender

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

badmapping_1.webp

Поэтому сегодня мы сделаем нормальный трипланарный маппинг в Блендере. И для этого нам понадобится совсем немножко шейдер нодов. Создадим новый материал и удалим всё лишнее. Затем добавим текстуру радиального градиента. И отколоррампим её так, чтобы радиальный градиент набегал с краев оси Y на края оси X.

pic_1.jpg

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

pic_2.jpg

Теперь эту маску нам нужно повернуть на ось X. Поэтому добавим ноду вектор ротате и поворачиваем маску.

pic_3.jpg

Теперь из первого градиента отрезаем кусочки с помощью маски и ноды Math Subtract.

pic_4.jpg

Теперь нам надо сделать регулируемый бленд, как в стандартной ноде текстур. Для этого добавим одну мапранже на выход нашей маски, а вторую мапранже на ноду валуе, через которую будем управлять силой размытия шва между проекциями текстур. Отмапранжированное значение валуя подаётся на мин и макс выходной мапранжы через пару матвычетаний со значениями 0.5001 и 0.5002. Почему именно такие значения? Это вам вопрос для самостоятельного изучения.

pic_5.jpg

Теперь через нашу валую мы можем блендить края маски.

pic_6.webp

Какой же это бленд, если края острые? - спросите вы и будете неправы. Это бленд, но он пока спит. Мы еще разбудем чуть попозже. А пока нам нужно склеить квадратную маску. Поэтому добавим общий для всех градиентов вектор ротате, чтобы можно было поворачивать наши треугольнички. И засунем всё это в общий фрейм для красоты.

pic_7.jpg

Теперь скопируем этот фрейм и повернем ее весь на 90 градусов по оси X.

pic_8.jpg

Склеим наши два фрейма вместе с помощью Math Add. И в итоге у нас получилась одна проекция квадрата на нормали по оси Х!

pic_9.jpg

Нам надо ещё две таких же проекции. Поэтому к нашим двум фреймам прикручиваем один общий вектор ротате, чтобы крутить квадрат во все стороны. И встраиваем наши два фрейма вместе с нодой вращения в ещё один общий фрейм для красоты.

pic_10.jpg

Теперь копируем наш суперфрейм два раза. И поворачиваем второй суперфрейм на 90 по Z, а третий - на 90 по Y.

pic_11.jpg

У нас получились квадратики для каждой оси! Разве это не прекрасно!? Этими квадратиками мы нарежем текстуры.

pic_12.jpg

А чтобы нарезать текстуры квадратиками, их нужно добавить. Поэтому добавляем три текстуры и поворачиваем их так, чтобы одна смотрела в сторону Z, вторая - в сторону X, третья - в сторону Y.

pic_13.jpg

Теперь нарезаем текстурки квадратиками. Текстуру с оси Z склеиваем с текстурой с оси X через маску-квадратик из суперфрейма с оси X. Результат смешиваем с текстурой с оси Y через маску оси Y. И в конце к результату приклеиваем еще раз текстуру с оси Z через маску оси Z. Зачем текстура с оси Z два раза? - спросите вы. Это единственный способ заткнуть дыры в бленде швов, который я смог придумать. ¯\_(ツ)_/¯

pic_14.jpg

Готово! Теперь нашим валуем мы можем поблендить швы между проекциями!

pic_15.jpg

Не блендится! - скажете вы. И будете правы. Ведь мы ещё не пробудили функцию бленда швов! Для этого нам надо отыскать во втором и третьем суперфрейме по паре нижних нод Math Subtract.

pic_16.jpg

И переключить их с вычетания на сложение.

pic_17.jpg

Швы сразу начнут блендиться в нужных местах! В ненужных - не будут. И можно будет, наконец-то, начать пользоваться нормальным трипланарным маппингом в Блендере! Как видите, ничего сложного. Делов на пять минут.

pic_19.webp

А если у вас ничего не получилось, то можете свериться вот с этой небольшой картинкой.

pic_18.jpg

Вот и трипланарной сказочке конец. А кто слушал - молодец.

721 0 850 1
0
RENDER.RU