Полезное

Мы Вконтакте

Discord канал

#
Пред.
12
Модератор: icms
Аватара пользователя
Пользователь
Сообщения: 47
Всем привет. Вроде актуальная задача но четкого решения пока не нашел. нужно рисовать следы грязи, крови, других веществ на SkeletalMesh.

Добрые люди на хабре перевели статью. https://habr.com/ru/post/423165/

Имеем возможность динамически создавать маску, кидать ее в RenderTarget и по ней смешивать материалы. Все круто.
Проблема в том что рисовать мы можем только сферические маски, и их проекции на 2Д текстуру, то есть круги. Предположим я хочу взять маску какой-нибудь кляксы грязи.
Для этого сферу нужно заменить на свою маску. И вот тут начинаются проблемы. В шейдерах я ничего не понимаю. И как изобразить что-то годное не пойму. Вроде как нужно найти центр получающегося круга. И имея его UV координаты в них нарисовать запланированную текстуру заданной величины.
Вопрос, как найти 2Д координаты центра круга, радиального градиента.
На ум приходит - Сделать CustomNode что-то вроде: пробежать по всем пикселям маски и найти самый яркий, или 2 диагонально противоположных.
Если кто-то знает другой хороший способ отрисовки всякого на Skeletal Mesh то буду благодарен если поделитесь. Декали не предлагать)
_________________
Наш проект (android)
http://www.marvex.net/
Открытый бета тест https://play.google.com/apps/testing/co ... acing_0000
Аватара пользователя
Пользователь
Сообщения: 4069
может тебе поможет разобраться больше эта статья, в ней и в видео, также есть ссылки и на другие статьи и на документацию - https://www.tomlooman.com/rendering-wou ... haracters/
Аватара пользователя
Пользователь
Сообщения: 47
Prytaleks писал(а):
может тебе поможет разобраться больше эта статья, в ней и в видео, также есть ссылки и на другие статьи и на документацию - https://www.tomlooman.com/rendering-wou ... haracters/

Ага я тут был. Вот тут https://www.youtube.com/watch?v=QGIKrD7uHu8&t=3937sоб этих вещах более менее подробно объясняют.
А вот тут сорсы в виде плагина на 19 версию, что не может не радовать https://github.com/sp0lsh/UEShaderBits-GDC-Pack
И да мысли найти центр круга не корректны. Суть тут в том что Координаты хита из пространства нужно перенести в шейдер. Для сферы и некоторых шейпов это более менее просто делается, потому как мы знаем координаты пикселя в мире и можем отсекать то что должно быть черным в маске по радиусу от точки на развертке до точки попадания в мире.
Как то можно спроецировать текстуру... Эхх. Если кто-нибудь найдет конечное решение благодарности моей предела нет)
_________________
Наш проект (android)
http://www.marvex.net/
Открытый бета тест https://play.google.com/apps/testing/co ... acing_0000
Аватара пользователя
Пользователь
Сообщения: 47
Honohy писал(а):
Prytaleks писал(а):
может тебе поможет разобраться больше эта статья, в ней и в видео, также есть ссылки и на другие статьи и на документацию - https://www.tomlooman.com/rendering-wou ... haracters/

Ага я тут был. Вот тут https://www.youtube.com/watch?v=QGIKrD7uHu8&t=3937sоб этих вещах более менее подробно объясняют.
А вот тут сорсы в виде плагина на 19 версию, что не может не радовать https://github.com/sp0lsh/UEShaderBits-GDC-Pack
И да мысли найти центр круга не корректны. Суть тут в том что Координаты хита из пространства нужно перенести в шейдер. Для сферы и некоторых шейпов это более менее просто делается, потому как мы знаем координаты пикселя в мире и можем отсекать то что должно быть черным в маске по радиусу от точки на развертке до точки попадания в мире.
Как то можно спроецировать текстуру... Эхх. Если кто-нибудь найдет конечное решение благодарности моей предела нет)


Поковырявшись внимательно в указанных ссылках таки разобрался как спроецировать текстуру. Помогла векторная алгебра) Тем кто ищет способ корректно изображать что-либо на анимированных Skeletl mesh рекомендую.
_________________
Наш проект (android)
http://www.marvex.net/
Открытый бета тест https://play.google.com/apps/testing/co ... acing_0000
Аватара пользователя
Пользователь
Сообщения: 17
Вы можете объяснить более подробно как вы это сделали?
Дело в том что мне нужно рисовать следы разбившегося стекла на Skeletal Mesh, я использую рисование на Render Target, но для этого нужно сначала выяснить координаты попадания по UV развертке. Но на Skeletal Mesh этого сделать нельзя, я уже два дня мучаюсь с этим, и мне очень, очень нужна помощь. Я прочитал три статьи, но так и не нашел верного способа сделать все это.
Аватара пользователя
Пользователь
Сообщения: 47
HEllo_WORld12345332 писал(а):
Вы можете объяснить более подробно как вы это сделали?
Дело в том что мне нужно рисовать следы разбившегося стекла на Skeletal Mesh, я использую рисование на Render Target, но для этого нужно сначала выяснить координаты попадания по UV развертке. Но на Skeletal Mesh этого сделать нельзя, я уже два дня мучаюсь с этим, и мне очень, очень нужна помощь. Я прочитал три статьи, но так и не нашел верного способа сделать все это.

Мне пришлось на разбор этого всего потратить около месяца.
Выяснить координаты UV у Skeletal mesh в Unreal engine 4 не выйдет. Во всяком случае во время проигрывания анимации, так как сама анимация проигрывается в рендере если я правильно понял. Единственный рабочий способ это дотащить мировые координаты в шейдер. Для начала нужно реализовать вот такое рисование сферических масок. Тут все расписано шаг за шагом:
https://habr.com/ru/post/423165/
Нужно:
1 Применить к Skeletal mesh материал который покажет его развертку
2 Нанести на развертку какую-либо маску
3 Перенести маску в RenderTarget (сфоткать через фукнцию Capture Scene)
4 Передать полученный RenderTarget в динамический инстанс материала Skeletal mesh'a в виде параметра Texture sample
5 Применить Динамический инстанс исходного материала с подставленным в него RenderTarget
Все это сделано и подробно расписано в ссылке что я дал.
Далее, если мы знаем как нарисовать сферическую маску, то можно нарисовать и текстуру. Для этого нужно спроецировать текстуру в направлении нормально к поверхности skeletal mesh.
Тут уже я вместо сферы начал рисовать Куб, и в него вписал целевую текстуру.
Звучит запутанно и делается довольно сложно. К тому же очень серьезная нагрузка на видеокарту за счет функции Capture Scene. Гораздо проще надежнее подставлять заранее нарисованные текстуры в материал.
_________________
Наш проект (android)
http://www.marvex.net/
Открытый бета тест https://play.google.com/apps/testing/co ... acing_0000
Аватара пользователя
Пользователь
Сообщения: 17
Да я уже шестой день страдаю над этим, перерыл кучу материалов, везде сферические маски, я не могу додуматься как вместо маски текстуру рисовать. Можно подробнее про рисование куба, и текстуры ? Я буду рад если вы меня спасете в этом деле, и пофиг на производительность, как-нибудь потом заменю все это, мне бы хоть сделать чтобы оно работало. Я пытался текстуру двигать по UV координатам просто, в точку куда попал трейс, и вроде все работает, но только на кубическом меше)

Honohy писал(а):
HEllo_WORld12345332 писал(а):
Вы можете объяснить более подробно как вы это сделали?
Дело в том что мне нужно рисовать следы разбившегося стекла на Skeletal Mesh, я использую рисование на Render Target, но для этого нужно сначала выяснить координаты попадания по UV развертке. Но на Skeletal Mesh этого сделать нельзя, я уже два дня мучаюсь с этим, и мне очень, очень нужна помощь. Я прочитал три статьи, но так и не нашел верного способа сделать все это.

Мне пришлось на разбор этого всего потратить около месяца.
Выяснить координаты UV у Skeletal mesh в Unreal engine 4 не выйдет. Во всяком случае во время проигрывания анимации, так как сама анимация проигрывается в рендере если я правильно понял. Единственный рабочий способ это дотащить мировые координаты в шейдер. Для начала нужно реализовать вот такое рисование сферических масок. Тут все расписано шаг за шагом:
https://habr.com/ru/post/423165/
Нужно:
1 Применить к Skeletal mesh материал который покажет его развертку
2 Нанести на развертку какую-либо маску
3 Перенести маску в RenderTarget (сфоткать через фукнцию Capture Scene)
4 Передать полученный RenderTarget в динамический инстанс материала Skeletal mesh'a в виде параметра Texture sample
5 Применить Динамический инстанс исходного материала с подставленным в него RenderTarget
Все это сделано и подробно расписано в ссылке что я дал.
Далее, если мы знаем как нарисовать сферическую маску, то можно нарисовать и текстуру. Для этого нужно спроецировать текстуру в направлении нормально к поверхности skeletal mesh.
Тут уже я вместо сферы начал рисовать Куб, и в него вписал целевую текстуру.
Звучит запутанно и делается довольно сложно. К тому же очень серьезная нагрузка на видеокарту за счет функции Capture Scene. Гораздо проще надежнее подставлять заранее нарисованные текстуры в материал.
Аватара пользователя
Пользователь
Сообщения: 47
Суть тут в том чтобы нарисовать кубическую маску. Пересекая плоскость меша кубическая маска создает квадрат. Далее нужно скалировать стороны этого квадрата к величине от 0 до 1 и подать и в целевой TexxtureSample как координаты UV.
https://i.imgur.com/8aA7yBl.png
https://i.imgur.com/DJRGZ23.png
Чтобы корректно вычислить координаты на плоскости меша нужно отрисовать куб в новом базисе. Единичный вектор для оси Z нового базиса - это нормаль плоскости меша. Два других вектора X и Y должны быть перпендикулярны нормали и перпендикулярны друг другу. Я использовал вот такой метод:
https://i.imgur.com/XFb0UuG.png
Ну и для отсечения тех мест меша на которых мы ничего не рисуем используем кубическую маску.
https://i.imgur.com/SiQLbEx.png
_________________
Наш проект (android)
http://www.marvex.net/
Открытый бета тест https://play.google.com/apps/testing/co ... acing_0000
Последний раз редактировалось Honohy 24 дек 2019, 15:14, всего редактировалось 1 раз.
Аватара пользователя
Пользователь
Сообщения: 17
Большое спасибо, цены вам нет, буду пытаться делать

Honohy писал(а):
Суть тут в том чтобы нарисовать кубическую маску. Пересекая плоскость меша кубическая маска создает квадрат. Далее нужно скалировать стороны этого квадрата к величине от 0 до 1 и подать и в целевой TexxtureSample как координаты UV.
https://i.imgur.com/8aA7yBl.png
https://i.imgur.com/SiQLbEx.png
Чтобы корректно вычислить координаты на плоскости меша нужно отрисовать куб в новом базисе. Единичный вектор для оси Z нового базиса - это нормаль плоскости меша. Два других вектора X и Y должны быть перпендикулярны нормали и перпендикулярны друг другу. Я использовал вот такой метод:
https://i.imgur.com/XFb0UuG.png
Ну и для отсечения тех мест меша на которых мы ничего не рисуем используем кубическую маску.
https://i.imgur.com/SiQLbEx.png
Аватара пользователя
Пользователь
Сообщения: 17
Единственное что не понятно, что находиться в ProjectionTexture

Honohy писал(а):
Суть тут в том чтобы нарисовать кубическую маску. Пересекая плоскость меша кубическая маска создает квадрат. Далее нужно скалировать стороны этого квадрата к величине от 0 до 1 и подать и в целевой TexxtureSample как координаты UV.
https://i.imgur.com/8aA7yBl.png
https://i.imgur.com/SiQLbEx.png
Чтобы корректно вычислить координаты на плоскости меша нужно отрисовать куб в новом базисе. Единичный вектор для оси Z нового базиса - это нормаль плоскости меша. Два других вектора X и Y должны быть перпендикулярны нормали и перпендикулярны друг другу. Я использовал вот такой метод:
https://i.imgur.com/XFb0UuG.png
Ну и для отсечения тех мест меша на которых мы ничего не рисуем используем кубическую маску.
https://i.imgur.com/SiQLbEx.png


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница