Как мне сделать контурный шейдер типа «Жизнь странна»?

13

Я хочу сделать эскиз шейдера, как жизнь странным.

Шейдер состоит из двух частей:

1. анимированная пунктирная линия

2. шумный контур

Мне нравится знать, как я могу сделать шумный контур?

увидеть контур объектов

record_2019_01_21_09_43_07_10

record_2019_01_21_09_51_00_896

record_2019_01_21_09_45_53_942

record_2019_01_21_11_37_27_699

Сначала я попытался создать контур, скопировав входящие данные вершин, и масштабировал их в соответствии с нормальным направлением, затем Cull Back. Но я думаю, что это что-то вроде эффекта изображения, потому что контур иногда перемещается внутри объекта. в любом случае я буду признателен, если кто-нибудь поможет мне реализовать этот шейдер :)

Что я пробовал

Я использовал обнаружение краев и анимировал его с помощью вершинного шейдера, но это не так хорошо, как на картинках выше.

record_2019_01_21_18_16_43_440

record_2019_01_21_18_27_28_597

Сейед Мортеза Камали
источник

Ответы:

1

Я сделал нечто подобное в Unreal Engine 4, поэтому я собираюсь объяснить только концепции. Есть два способа сделать это, и они представляют собой разные градиенты компромисса между производительностью и простотой реализации.

  1. Во-первых, добавьте новый меш поверх основного меша, чуть больше (как физический меш коллайдера). Затем создайте для него шейдер из прозрачного материала и включите шейдер / покажите сетку, поскольку область видимости игрока находится в пределах x единиц расстояния от сущности. Это снижает производительность из-за прозрачности шейдера, но поскольку в определенный момент у вас выделен только небольшой набор объектов, его легко реализовать и выполнимо.

  2. Создайте базовую текстуру с помощью хеш-линий и сместите координаты текстуры в соответствии с заранее определенным набором матриц. Это создает иллюзию «анимированных текстур»; в промышленности его также называют динамическим материалом (это еще не все, но вы можете прочитать его, если хотите). Что касается плана, вы можете найти множество учебников в Интернете. Этот метод требует значительно больше времени для реализации, так как вам нужно поработать с матрицами смещения и временем обновления материала, чтобы получить результат, аналогичный приведенным выше снимкам экрана, не говоря уже о необходимости выравнивания линий хеширования при изменении угла в базовой сетке.

Если производительность не является проблемой, перейдите к 1. Если каждый FPS имеет значение, используйте 2, но ожидайте много проблем, которые требуют времени для решения.

любознательный студент
источник