A new technique for rendering 3D triangles with 'perfect' anti-aliasing. Fonts and vectors are broken into triangles and rasterised conservatively then a fragment shader determines the triangle area coverage to compute the alpha for each fragment.
GPU Rendering of vector graphics at a sub-pixel accuracy:
- Triangulate curves into triangles
- Render each triangle using conservative rasterisation
- For each fragment:
- Perform a triangle/box intersection, creating a polygon
- Sum the areas of the triangles in the polygon
- Divide the sum by the fragment area to give a percentage coverage
- Continue for all triangles, additively blending
Visit https://andrewlowndes.github.io/perfect-antialiasing/dist/ to see a set of demos showing the various techniques used in this repo.
- Ensure NodeJS installed
- Run
npm i
to install dependencies - Run
npm start
to open the demos in a web app
- CPU Demo (Canvas)
- Cubic/quadratic bezier tesselation
- Triangulate path to polygons
- Conservative rasterisation
- SVG test
- Cell logic
- Custom font rendering
- WebGL
- Conservative rasterisation (vertex-shader based shifting)
- Custom font rendering
- 3D Triangle
- 3D scene
- Screen-space tesselation
- Instancing
- Performance test
- Vulkan
- Screen-space tesselation via geometry shader
- Conservative rasterisation using gpu extensions
- Instancing
- Performance test
- Further experiments
- Exact curve coverage analytics
- Quadratic Bezier
- Cubic Bezier (prob too complicated)
- Exact curve coverage analytics
- Anti-aliasing in games (need to assess overhead of conservative rasterisation and the alpha computation in the fragment shader)
- Font rendering (still relies on triangulation - use screen-space in tesselation shader for resolution independent rendering)
Install VS Code and the following extensions:
- EditorConfig for VS Code
- ESLint
- Prettier
Vertex-based conservative rasterisation based off algorithm 2 from GPU Gems 2 Chapter 43 (https://developer.nvidia.com/gpugems/gpugems2/part-v-image-oriented-computing/chapter-42-conservative-rasterization)