Рендеринг штриховых рисунков с постоянной шириной экрана - PullRequest
0 голосов
/ 08 октября 2019

У меня есть текстура линии, нанесенная на объект в трехмерном пространстве. Поведение по умолчанию для объекта и текстуры для получения перспективного масштабирования на основе матрицы проекции вида перспективной модели. Существует ли какой-либо установленный метод, позволяющий сохранять позиционирование и масштабирование трехмерного объекта при сохранении постоянной ширины линии относительно экрана? Желаемый эффект заключается в том, что перо (фиксированная ширина экрана) использовалось для отслеживания контура на 3D-объекте.

Помогло бы что-то вроде рендеринга шрифтов на основе SDF?

Или, может быть, какой-топроекционного наложения текстур?

Или визуализировать объект и текстуру в буфер и расширить линии, используя обнаружение краев?

К сожалению, я использую OGL ES 2, поэтому я не могу использоватьшейдер geom или что-то в этом роде.

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Решение, которое я придумал, основано на процедурной генерации SDF, как предложено @Felipe, в сочетании с улучшенным альфа-тестированием увеличения для векторных текстур и спецэффектов .

В основномЯ рисую фигуры в текстуры, используя чистый красный, зеленый и синий. Затем я рендерил сцену, используя эти текстуры, и генерирую SDF на лету за второй проход рендеринга. Генерация SDF использует алгоритм Грина с небольшим разбросом для повышения производительности. Затем SDF передается на последний проход рендеринга, который порогов и сглаживает SDF для подхода Грина, используя fwidth, чтобы поддерживать постоянный вес линии независимо от расстояния объекта до камеры.

Так как оригиналвопрос был только для подхода / концепции, я не публикую пример в данный момент. Но я посмотрю, смогу ли я в ближайшее время собрать шадерту.

0 голосов
/ 09 октября 2019

Вы можете процедурно создать текстуру в фрагментном шейдере и использовать размер в пикселях для интерполяции. Смотрите: Блог FabriceNeyret

...