All Projects → JoaoBaptMG → Pathrenderinglab

JoaoBaptMG / Pathrenderinglab

Licence: other
Repository for research on complete SVG rendering

Programming Languages

csharp
926 projects

Projects that are alternatives of or similar to Pathrenderinglab

Gerbolyze
Render high-resolution bitmap images to PCB gerber files
Stars: ✭ 169 (+103.61%)
Mutual labels:  vector-graphics, svg
Php Svg
Vector graphics (SVG) library for PHP
Stars: ✭ 256 (+208.43%)
Mutual labels:  vector-graphics, svg
Psvg
Programmable Scalable Vector Graphics -- drawings that draw themselves
Stars: ✭ 177 (+113.25%)
Mutual labels:  vector-graphics, svg
Svg.skia
An SVG rendering library.
Stars: ✭ 122 (+46.99%)
Mutual labels:  vector-graphics, svg
Zrender
A lightweight graphic library providing 2d draw for Apache ECharts
Stars: ✭ 5,122 (+6071.08%)
Mutual labels:  vector-graphics, svg
Dvisvgm
A fast DVI, EPS, and PDF to SVG converter
Stars: ✭ 134 (+61.45%)
Mutual labels:  vector-graphics, svg
Vectorlogozone
3,000+ gorgeous SVG logos, perfect for your README or credits page
Stars: ✭ 239 (+187.95%)
Mutual labels:  vector-graphics, svg
Picasso
Picasso is a high quality 2D vector graphic rendering library. It support path , matrix , gradient , pattern , image and truetype font.
Stars: ✭ 205 (+146.99%)
Mutual labels:  vector-graphics, svg
Scour
Scour - An SVG Optimizer / Cleaner
Stars: ✭ 443 (+433.73%)
Mutual labels:  vector-graphics, svg
Svgtovectordrawableconverter
Batch converter of SVG images to Android vector drawable XML resource files. Online version of the converter is here:
Stars: ✭ 341 (+310.84%)
Mutual labels:  vector-graphics, svg
Rad Lines
Beautiful Vector Generator Tool
Stars: ✭ 121 (+45.78%)
Mutual labels:  vector-graphics, svg
Macsvg
macSVG - An open-source macOS app for designing HTML5 SVG (Scalable Vector Graphics) art and animation with a WebKit web view ➤➤➤
Stars: ✭ 789 (+850.6%)
Mutual labels:  vector-graphics, svg
Pixelfarm
From Vectors to (sub) Pixels, C# 2D Rendering Library
Stars: ✭ 120 (+44.58%)
Mutual labels:  vector-graphics, svg
Svglib
Read SVG files and convert them to other formats.
Stars: ✭ 139 (+67.47%)
Mutual labels:  vector-graphics, svg
Scalable Vector Graphics Plugin For Paint.net
Paint.NET filetype plugin for loading SVG (Scalable Vector Graphics) and its compressed variant SVGZ files.
Stars: ✭ 109 (+31.33%)
Mutual labels:  vector-graphics, svg
Vpype
The Swiss-Army-knife command-line tool for plotter vector graphics.
Stars: ✭ 292 (+251.81%)
Mutual labels:  vector-graphics, svg
Svg
Fork of the ms svg library (http://svg.codeplex.com/)
Stars: ✭ 676 (+714.46%)
Mutual labels:  vector-graphics, svg
Graphicsjs
A lightweight JavaScript graphics library with the intuitive API, based on SVG/VML technology.
Stars: ✭ 937 (+1028.92%)
Mutual labels:  vector-graphics, svg
Personal Goals
List of books I've read, projects I've done, videos I've seen, articles I've read or podcasts I've listened to.
Stars: ✭ 75 (-9.64%)
Mutual labels:  svg
Waveforms
An interactive, explorable explanation about the peculiar magic of sound waves.
Stars: ✭ 1,218 (+1367.47%)
Mutual labels:  svg

PathRenderingLab

Welcome to my laboratory on vector graphics!

What is this repository?

This repository aims to do research on vector graphics rendering and to (possibly) build a content pipeline extension library for MonoGame, in order to viabilize the use and construction of vector SVG files in video games. Vector graphics has the advantage of being infinitely scalable, meaning it will seem crisp and sharp on any resolution, from the smallest ones to the largest ones.

The idea is to preprocess the path data, transforming it into graphics primitives, and sending them to the GPU alongside the required fragment shader in order to let it do the heavy lifting to correctly render the curves and straight lines. For that, three primitive types are used, which I call triangles, curve triangles and double curve triangles.

  • The triangles are simple primitives which only store the position of the vertices, used to render the completely filled portions of the curve. Because of that, since they store only positional data, they can be cached and indexed, reducing their footprint on memory.
  • The curve triangles are also equipped with carefully-crafted curve coordinates that correspond to special lines on the projective space (more info on Loop--Blinn). Those primitives, when equipped with the appropriate fragment shader, will render the Bézier curves as implicit curves on the projective space.
  • The double curve triangles are similar to the curve triangles, but they carry curve coordinates for two curves instead of one. They are required on some edge cases that would be extremely difficult or impossible to properly subdivide and triangulate (like common endpoint curves with the same tangent).

The core of this project is to convert the path representation according to the SVG Specification on Paths into the adequate primitives to send to the GPU. This part is almost entirely done. The next part is parse the SVG file to gather the paths and be able to correctly render an entire SVG file -- thus making it available to be drawn on MonoGame projects. The project is still a work in progress, and I do not consider it reaching even into alpha.

How do I run the current project?

Before, you needed a specially-crafted path specification file to run an example. However, this new commit adds the possibility to specify simple SVG files. Unfortunately, the SVG support is not complete yet, but it already suport solid colors, linear and radial gradients. Support for shadow DOM and clipping and the rest might be coming soon.

Screenshots

img0 img1 img2 img3 img4 img5 img6 img7 img8 img9 img10 img11 img12 img13 img14 img15 img16 img17 img18 img19 img20 img21 img22 img23 img24 img25 img26 img27 img28 img29 img30 img31 img32 img33

How can I help?

You want to help? You are absolutely welcome! You can signal issues using the Issues panel or fork my repository and then make my pull request.

License

The entirety of this project (without the Bitlush.AvlTree folder) is under the MIT license, copyright 2018--2019 João Baptista de Paula e Silva.

With the exception of some SVG files on the example folder (namely, sonic.svg, tails.svg and knuckles.svg, which I guess configure fair use for the sake of testing this project), all the other SVG files are free to use and in public domain.

References

  1. Resolution Independent Curve Rendering using Programmable Graphics Hardware
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].