@@ -20,18 +22,35 @@ Hence, we would like to render on the GPU.
The most natural approach is to tesselate vector graphics to triangles and leverage the traditional raster pipeline of the GPU.
However, this still requires rasterization on the CPU.
Another issue is aliasing.
Of course, we can still use MSAA like in 3D rendering, which comes with a significant performance penalty, but quality also suffers when a very thin pass "snakes" between the [sample points](https://learn.microsoft.com/en-us/windows/win32/api/d3d11/ne-d3d11-d3d11_standard_multisample_quality_levels)(see this Chromium [issue](https://bugs.chromium.org/p/chromium/issues/detail?id=1287455#c1))
Of course, we can still use MSAA like in 3D rendering, which comes with a significant performance penalty, but quality also suffers when a very thin pass "snakes" between the [sample points](https://learn.microsoft.com/en-us/windows/win32/api/d3d11/ne-d3d11-d3d11_standard_multisample_quality_levels), causing discontinuities in the path (see this Chromium [issue](https://bugs.chromium.org/p/chromium/issues/detail?id=1287455#c1)).
The best quality is achieved with analytic anti-aliasing, where the intersection area of shapes and pixels is calculated.
We are interested in rendering vector graphics on the GPU and comparing different approaches on modern hardware.
Hence we will not just nVidia CUDA (like e.g. [GLFN14]), but a cross-platform interface like Vulkan or WebGPU/wgpu.
## Plan
- Understand the current state of the art. This includes both academic publications, as well as practical implementations. Specifically vello seems very interesting algorithmically, but there is no academic publication.
- Implement one or multiple techniques (depending on number of participants and time). Define a common interface so that the different implementations can be tested.
- Perhaps develop your own rendering algorithm, or modifications. Also consider scenes with animations and how to do as little work as possible when the scene changes slightly.
- Develop benchmarks to compare implementations (your own and existing). Compare visual fidelity and performance.
- Develop your own application using the vector graphics renderer. My suggestion would be an interactive whiteboard collaborative, similar to MS Whiteboard, but use your own renderer to make it actually performant. Could also add additional nice features like PDF support. But this is just a suggestion, you could also come up with your own ideas for an application.
## References
-
- [LP05] Charles Loop and Jim Blinn. 2005. Resolution independent curve rendering using programmable graphics hardware. ACM Trans. Graph. 24, 3 (July 2005), 1000–1009. https://doi.org/10.1145/1073204.1073303
- [NH08] Diego Nehab and Hugues Hoppe. 2008. Random-access rendering of general vector graphics. ACM Trans. Graph. 27, 5, Article 135 (December 2008), 10 pages. https://doi.org/10.1145/1409060.1409088
- [GLFN14] Francisco Ganacim, Rodolfo S. Lima, Luiz Henrique de Figueiredo, and Diego Nehab. 2014. Massively-parallel vector graphics. ACM Trans. Graph. 33, 6, Article 229 (November 2014), 14 pages. https://doi.org/10.1145/2661229.2661274 https://w3.impa.br/~diego/projects/GanEtAl14/
- [LHZ16] Rui Li, Qiming Hou, and Kun Zhou. 2016. Efficient GPU path rendering using scanline rasterization. ACM Trans. Graph. 35, 6, Article 228 (November 2016), 12 pages. https://doi.org/10.1145/2980179.2982434 http://kunzhou.net/zjugaps/pathrendering/