Предположим, что существует некоторое значение p
, рассчитанное для каждого кадра, которое непрерывно изменяется на поверхности объекта. Значение p
определяет плотность некоторого рисунка на поверхности. Например, в случае только двух возможных плотностей, если p < 0.3
это высокая плотность, в противном случае она низкая.
Я подумал о простом высокоуровневом решении: создать две текстуры, каждая из которых имеет разную плотность, и основываясь на значении p
выборки из соответствующей. Однако есть проблема с границей между высокой и низкой плотностями.
Вот пример, чтобы проиллюстрировать проблему (обратите внимание, что моя проблема не является исключительной для этого примера шаблона точек. Я опишу шаблоны, с которыми я работаю позже):
А вот пороговое значение между низким и высоким (отображается на текстуре с высокой плотностью, но это не имеет значения.) Если под линией, это означает, что текстуру с высокой плотностью следует выбирать.
И, наконец, вот сравнение между желаемым и тем, что на самом деле произойдет с использованием этого метода:
Проблема состоит в том, что, когда круг только высокой плотности пересекает линию, он будет игнорироваться, когда p
указывает на текстуру низкой плотности, которая должна быть отобрана, в результате чего получается усеченный круг. Я не знаю, как решить эту проблему, потому что p
меняется каждый кадр, поэтому я не могу просто «испечь» границу между двумя плотностями. Легко предотвратить обратную проблему, создав текстуру высокой плотности из нижней (т. Е. Если круг на текстуре низкой плотности, убедитесь, что он на текстуре высокой плотности).
Мне интересно, есть ли у кого-нибудь способ улучшить мое решение или хотя бы есть другой метод полностью. Здесь ограничение заключается в том, что p
он рассчитывается для каждого кадра в режиме реального времени. Другое ограничение связано с текстурой рисунка: рисунок является черно-белым, где черный - это рисунок, а белый - это фон (как в примере круги). Шаблон может быть не только повторяющимися идентичными фигурами, но и любым расположением произвольных черных фигур на белом фоне. (Возможно, шаблон - неправильный выбор слова.)
Я не знаком с исследованиями в этой области, поэтому я не был уверен, какие ключевые слова искать, поэтому я даже был бы признателен, если бы кто-нибудь мог указать мне правильное направление.
Ответы:
Чтобы гарантировать, что формы рисунка всегда либо полностью присутствуют, либо отсутствуют, никогда не обрезаются, необходимо убедиться, что одно и то же
p
значение используется для всех текселей внутри фигуры. В вашем примере кругов все тексели в данном круге должны быть согласованыp
.Я предполагаю, что у вас есть какой-то способ оценки
p
в данной точке поверхности (независимо от того, просматривается ли она из текстуры или вычисляется по какой-то функции). Тогда один из способов обеспечения одинаковогоp
значения для группы текселей состоит в том, чтобы они все смотрели с одной и той же точки.УФ-лучи этой точки оценки могут быть сохранены в дополнительных каналах текстуры рисунка. Например, у вас могут быть красный и зеленый каналы, в которых хранятся координаты ультрафиолетового излучения для оценки
p
, синий канал - пороговое значение для включения этого элемента шаблона, а в альфа-канале - уровень сглаженного серого для отображаемого шаблона. Данные порогового значения УФ + также могут быть в отдельной вторичной текстуре, если это необходимо.Чтобы сгенерировать эту пороговую текстуру UV +, начиная с текстуры входного паттерна, вы можете программно найти связанные компоненты (например, путем поиска черных пикселей и заливки). Установите точку оценки для всех текселей в каждом компоненте в УФ-центре компонента и сгенерируйте случайный порог для него. Затем при рендеринге используйте пиксельный шейдер, который сначала сэмплирует эту текстуру, затем смотрит
p
на заданную точку оценки и сравнивает ее с заданным порогом.Таким образом, каждая фигура шаблона будет видеть одинаковое
p
значение и порог и будет либо включаться, либо полностью выключаться. По мереp
увеличения, все больше форм преодолеет свой порог и появятся, создавая впечатление постоянно изменяющейся плотности.источник
Другая мысль в том же духе. Если у вас есть определенный набор точек, определенный на плоскости, и функция отображения от плоскости к целевой поверхности, то функция плотности на поверхности - это то, как области отображаются от плоской поверхности к цели. Таким образом, карта, сохраняющая область, приведет к появлению одинаковых точек на цели.
источник