From 23878468343d4dbe4ab840673dc0e871e88be05a Mon Sep 17 00:00:00 2001 From: Dorian Rudolph <mail@dorianrudolph.com> Date: Mon, 5 Feb 2024 13:26:57 +0100 Subject: [PATCH] update plan --- README.md | 42 +++++++++++++++++++++++++++++------------- talk/talk.tex | 30 ++++++++++++++++++------------ 2 files changed, 47 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index d5ac73b..fde290f 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,5 @@ # Project Group: Vector Graphics on Modern Hardware -🚧🚧🚧 **WORK IN PROGRESS** 🚧🚧🚧 - -(I still need to add more references and explanations) - {width=350} <sup>Example of vector graphics [1]</sup> @@ -30,11 +26,37 @@ Hence we will not just nVidia CUDA (like e.g. [GLFN14]), but a cross-platform in ## 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. +Science: +- Understand the current state of the art. This includes both academic publications, as well as practical implementations. Specifically [vello](https://github.com/linebender/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. + +See [LP05, NH08, GLFN14, LHZ16] for prior work. + +Programming: +- Build a collaborative digital whiteboard platform using the renderer you develop. +- Compare rendering algorithms in practice. +- Publish the software under an open source license, so other universities can develop it further. +- Try to port to all platforms (Linux, Windows, Mac, Android, iOS, web) + - Use techniques suitable for cross platform applications. I.e., avoid platform specific SDKs like Metal, DirectX, AppKit, ... + - Note, it is not expected that you really port to all platforms, but it should at least be possible without major difficulties. +- Implement some nice-to-have features in the whiteboard: + - PDF integration via [PDFium](https://pdfium.googlesource.com/pdfium/) + - Note, if you want to publish on iOS, this is really your only choice for a PDF library in terms of license. + - End-to-end encryption + - Your own ideas... + +See [2]-[6] for more practical information. + +## Skills + +During the project group, you will learn and apply the following skills: +- Programming in a system programming language like Rust, C, C++ +- GPU programming (e.g. CUDA, OpenGL, Vulkan, Metal, DirectX, wgpu) +- Read and understand scientific papers +- Graphics rendering + ## References @@ -51,14 +73,8 @@ Hence we will not just nVidia CUDA (like e.g. [GLFN14]), but a cross-platform in - [3] Diego Nehab. 2D Computer Graphics (course). 2020.https://w3.impa.br/~diego/teaching/vg/ - [4] Google. The Raster Tragedy in Skia (blog post). https://skia.org/docs/dev/design/raster_tragedy/ - [5] Nicolas Silva. List of vector graphics rendering approaches: https://github.com/nical/lyon/wiki/Related-projects -## Prerequisites - -- Programming in a system programming language like Rust, C, C++ -- GPU programming (e.g. CUDA, OpenGL, Vulkan, Metal, DirectX, wgpu) -- Read and understand scientific papers -- Interest in graphics rendering +- [6] Beat Stamm. The Raster Tragedy at Low-Resolution Revisited: Opportunities and Challenges beyond “Delta-Hinting”. http://rastertragedy.com/ -Note, these are not necessarily rigid requirements and it would be fine for you to learn during the project. ## Contact diff --git a/talk/talk.tex b/talk/talk.tex index 1ad9bc2..28f0071 100644 --- a/talk/talk.tex +++ b/talk/talk.tex @@ -52,23 +52,29 @@ \begin{frame} \frametitle{Motivation} - \emph{Why are the quantum computing people doing a project group on vector graphics?} - \begin{itemize} - \item<3-> None of the existing digital whiteboard apps are \emph{great}. - \begin{itemize} - \item<4-> not supporting all platforms (Linux, Windows, Mac, Android, iOS, Web) - \item<5-> bad performance - \item<6-> missing ``multiplayer'' (though MS Whiteboard is good) - \item<7-> bad/missing PDF integration - \end{itemize} - \end{itemize} - + \emph<+->{Why are the quantum computing people doing a project group on vector graphics?} \begin{tikzpicture}[overlay, remember picture] \node at (current page.center)[] { - \only<2>{\shadowimage[height=.95\paperheight]{mswhiteboardscreenshot.jpeg}} + \only<+-+>{\shadowimage[height=.95\paperheight]{mswhiteboardscreenshot.jpeg}} }; \end{tikzpicture} + \begin{itemize}[<+->] + \item None of the existing digital whiteboard apps are \emph{great}. + \begin{itemize} + \item not supporting all platforms (Linux, Windows, Mac, Android, iOS, Web) + \item bad performance + \item missing ``multiplayer'' + \item bad/missing PDF integration + \end{itemize} + \end{itemize} + \onslide<+->{\emph{Ok, so how can we build a better app?}} + \begin{itemize}[<+->] + \item Need to render vector graphics + \item Chrome uses skia, so let's try that... + \end{itemize} + + \end{frame} -- GitLab