Продуктивність векторної графіки та растрової графіки


20

Іноді я використовую векторну графіку, просто тому, що в деяких випадках вони виглядають трохи приємніше, а в інших випадках я використовую растрову / растрову графіку.

Мені було цікаво, чи є суттєві відмінності між цими двома варіантами?


6
Дійсно, це залежить від багатьох факторів. NVIDIA забезпечує апаратне прискорення для векторної графіки. Ви бачили його? developer.nvidia.com/nv-path-rendering-videos
TheBuzzSaw

Відповіді:


15

Як сказав TheBuzzSaw, це залежить від багатьох речей, включаючи реалізацію растерізованої графіки проти векторної графіки.

Ось кілька високоефективних методів векторної графіки, які відображаються традиційно методами растризації.

Цикл та Блінн показують, як візуалізувати квадратичну криву безьє векторної графіки шляхом надання єдиного трикутника та за допомогою текстурних координат у піксельній шейдері сказати, чи є піксель вище або нижче кривої: http: //www.msr-waypoint. net / en-us / um / people / cloop / LoopBlinn05.pdf

Основна ідея полягає в тому, щоб ви встановили положення кутів трикутника на 3 положення контрольної точки, а координати текстури у кожному куті були (0,0), (0,5,0) та (1,1) відповідно. У вашому шейдері, якщо інтерпольована координата текстури (x * xy) <0, піксель знаходиться під кривою, інакше - над кривою.

Ви можете побачити штучну реалізацію його на shadertoy тут: https://www.shadertoy.com/view/4tj3Dy

Щодо другого методу, то ось метод Valve, де відстані до фігури зберігаються в текстурі замість піксельних даних, що дозволяє малювати векторну графіку за допомогою вибірки текстури. Розшифровка настільки проста, вона може бути реалізована навіть на апаратному забезпеченні з фіксованою функцією, використовуючи лише альфа-тест! http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf

Щоб дати вам уявлення про те, наскільки добре працює друга техніка, це зображення вусів 1024x768 було сформовано із вихідного зображення розміром 64x32, що мав єдиний кольоровий канал! (aka 2KB нестиснений)

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

Я також написав про це щось у своєму блозі: http://blog.demofox.org/2014/06/30/distance-field-textures/

Ось приклад коду OpenCL, який показує, наскільки він простий:

float alpha = read_imagef(tex3dIn, g_textureSampler, textureCoords).w;
float3 color = (alpha < 0.5f) ? (float3)(1.0f) : (float3)(0.0f);

Обидві ці методи дуже швидкі та трохи розмивають межу між векторною та растрованою графікою. Вони відображаються за допомогою методів растерізації, але мають властивості масштабування / масштабування, як методи векторної графіки.



Так, це дуже класна техніка, це вже друга техніка, яку я згадав, і я також посилаюся на той самий PDF-файл.
Алан Вулф

Вуп, пропустив, вибач.
Інтернети зроблені з Catz

1
Тут можна знайти адаптивне рішення для крайового згладжування полів відстані: basicmath.com/blog/?p=151 .
Джим Ван Верт

8

Може бути.

Менш технічна відповідь:

Якщо ви будуєте веб-сайт або інший додаток, де ви не маєте нічого спільного з графічним програмуванням, то відповідь, ймовірно, так. Основні API будуть намагатися вгадати, як їх візуалізувати та кешувати. Однак, оскільки ваша програма запускається і API іноді неправильно здогадується, можливо, доведеться повторно рендерувати та вплинути на продуктивність.

Більш технічні:

Майте на увазі, що якщо ви не використовуєте один з найновіших графічних процесорів та бібліотеку для малювання векторних контурів на графічному процесорі, то всі графічні текстури надаються GPU.

Я розгляну типовий випадок, коли векторна графіка надається текстурам. Тут ефективність залежить від вашої ланцюга інструментів, від того, чи ваша програма динамічно створює текстури з векторних ресурсів, а також чи переглядається графіка на різних рівнях збільшення. Є два питання: створення ресурсів та текстура. Якщо ви показуєте графіку лише в статичному розмірі, то я б сказав, що різниці немає, і, можливо, ваша інструментальна мережа може перетворити активи в графічну графіку перед виконанням. Однак, якщо вони відображаються в різних розмірах або в 3D-світі, то вам знадобляться картографічні текстури, які займають більше пам'яті. Вони займуть багато пам’яті, якщо ви дійсно хочете побачити їхню вірність «впритул» з більшою текстурою.

Я сподіваюся, що це допомагає.


6

Існує кілька способів візуалізації векторної графіки. Як згадує TheBuzzSaw, NVIDIA має розширення, яке може виводити загальні шляхи досить швидко (але, звичайно, це працює лише на графічних процесорах NVIDIA). І Алан Вулф згадує неявні поверхневі методи (Loop-Blinn / відстані поля), які визначають функцію, яка говорить про те, ви знаходитесь всередині чи поза формою, і розфарбуйте пікселі на основі цієї функції. Інший метод - це трафарет і кришка, де ви перетворюєте шлях у буфер трафарету і використовуєте непарний підрахунок, щоб визначити, чи охоплює шлях піксель.

Однак, як правило, компроміс полягає в тому, що візуалізація растру буде швидшою, але більш чутлива до згладжування (навіть поля відстані руйнуються на низьких і високих масштабах). Шляхи візуалізації вимагають багато налаштувань, але теоретично їх можна масштабувати до будь-якої роздільної здатності.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.