Чернильное пятно Роршаха (aka Psychology test pictures) шейдер

12

введите описание изображения здесь

введите описание изображения здесь введите описание изображения здесь
(источник: bonnefil.com )

Я хочу, чтобы этот великолепный образец был в моей игре. Пока я разобрался ...

  1. Нарисуйте одну сторону, затем сделайте это дважды влево и вправо.
  2. Как мне сделать этот шаблон на одной стороне? хмм ...
  3. Мне нужна помощь.

Мне нужно некоторое понимание написания шейдеров для этого.

Если вы считаете, что задача не подходит для шейдеров, дайте мне знать, надеюсь, с альтернативным решением!

Однако я не вижу никакого возможного подхода к достижению этого без GPU. (если вы не предлагаете хранить кучу готовых картинок Rorscach Pic)

Синий жук
источник
Какой движок / язык / рамки вы используете?
Акалтар
@akaltar Unity Shaderlab
Blue Bug

Ответы:

15

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

Затем вы можете случайным образом выбрать какое-то количество из них, чтобы расположить и случайно повернуть половину изображения. (С уклоном к краю шва, так что середина теста Роршаха является самой плотной. Вы могли бы использовать систему частиц для этого рассеяния)

Отобразите это в текстуру с режимом обтекания, установленным в зеркало, и теперь у вас есть симметричное чернильное пятно, которое вы можете отображать без каких-либо пользовательских шейдеров.

Вот пример результата, который вы можете получить, делая это следующим образом:

Инкблот собран из библиотеки сплат изображений

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

Это метод, который dnk drone.vs.drones предлагает в другом ответе, и он может дать результаты, подобные этому:

Чернильный порог от шума

Изменить: вот разбивка того, как работает подход на основе шума ...

Сначала мы начнем с небольшого шума. Шум 1 / f , часто называемый турбулентностью, работает довольно хорошо. Вы можете добавить шум текстуры в текстуру, а затем суммировать один или несколько сэмплов из нее, изменяя их смещения / повороты, чтобы варьировать формы, которые вы получаете.

турбулентность пороговый

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

Мы можем сделать эту работу, добавив градиент сверху (контраст здесь преувеличен для ясности)

Краевая маска Маска добавлена ​​к шуму

Тогда порог это, принимая (sum - blackLevel) * contrast

(Вот blackLevelпараметр, который контролирует, насколько пятнистый результат по сравнению с пятнами - более высокие значения означают более чистый черный цвет - и contrastконтролирует, насколько резкими являются края)

пороговый

Зеркальное отображение этого изображения даст вам пример Роршаха выше.

ДМГригорий
источник
Я пытаюсь достичь с помощью методов дронов. Не могли бы вы уточнить, как это делается? Я использую традиционную функцию шума Перлина, но моя выглядит скорее как набор случайных точек.
Blue Bug
@BlueBug, я добавил пошаговую разбивку выше.
DMGregory
8

Вы можете попробовать перлин шум (используя правильный черно-белый градиент), а затем применить правое / левое отражение

введите описание изображения здесь

dnk drone.vs.drones
источник
Это шум Перлина? Это сильно отличается от традиционного перлин-шума. Ничего себе, что действительно фатально похоже на «облачные чернила», как в фильме «Сторож».
Голубая ошибка
2
Все зависит от вашей передаточной функции от значения шума -> значения пикселя. Похоже, что здесь довольно маленький уровень окна, что приводит к резкому контрасту между черным и белым с небольшим количеством мягких краев
MistaGiggles
Да, просто сделайте фильтр верхних частот где-то вокруг серого, а затем сдуйте верхние значения (то есть умножьте на большое число и вычислите верхнюю часть до 255 или любого другого значения максимального пикселя)
Шейн,