<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Spinel on Dispatch3 Inc.</title><link>https://dispatch3.com/tags/spinel/</link><description>Recent content in Spinel on Dispatch3 Inc.</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sun, 20 Oct 2024 09:00:02 -0400</lastBuildDate><atom:link href="https://dispatch3.com/tags/spinel/index.xml" rel="self" type="application/rss+xml"/><item><title>Spinel: Accelerated Vector Graphics</title><link>https://dispatch3.com/projects/spinel/</link><pubDate>Sun, 20 Oct 2024 09:00:02 -0400</pubDate><guid>https://dispatch3.com/projects/spinel/</guid><description>Spinel is a high-performance GPU-accelerated vector graphics, compositing and image processing pipeline for Vulkan 1.2+ GPUs.
Spinel differs from other vector graphics implementations by providing explicit APIs for defining:
Paths: first-class standalone objects Rasters: transformed-to-screen-space rasterized Paths Compositions: an arrangement of Rasters on Layers Stylings: rendering instructions for each Layer in a Composition These new explicit sub-APIs allow new programming idioms that untangle the canonical immediate-mode 2D API.
Spinel was first implemented using CUDA in 2012.</description></item><item><title>Spinel Layer Styling — Knockout Groups</title><link>https://dispatch3.com/posts/spinel_knockout_groups/</link><pubDate>Fri, 01 Jul 2016 09:00:00 -0400</pubDate><guid>https://dispatch3.com/posts/spinel_knockout_groups/</guid><description>Spinel Effect Scripts implement group and layer effects using short sequences of styling operators.
This post will focus on the knockout group operator.
A knockout group takes a collection of layers and accumulates layer color contributions from front to back proportional to subpixel coverage.
When the frontmost layer completely covers a pixel then its color contribution will &amp;ldquo;knockout&amp;rdquo; any contribution from a lower layer.
If the frontmost layer only partially covers a pixel then the layer&amp;rsquo;s color contribution is proportional to coverage and lower layers can contribute color proportional to the pixel&amp;rsquo;s remaining uncovered area.</description></item><item><title>Spinel Layer Styling — Soft Masks</title><link>https://dispatch3.com/posts/spinel_soft_masks/</link><pubDate>Wed, 29 Jun 2016 09:00:00 -0400</pubDate><guid>https://dispatch3.com/posts/spinel_soft_masks/</guid><description>Spinel&amp;rsquo;s Styling API is used to declare how layers are rendered.
Group and layer effects are driven by short sequences of styling operators.
Spinel Effect Scripts are executed near the end of the Spinel pipeline and can be altered as often as required.
This post will focus on the soft mask coverage operator.
Soft masks are clipping masks with subpixel precision and represent the accumulated coverage of one or more layers or groups of transformed vector paths.</description></item><item><title>Spinel Layer Styling — Linear Gradients</title><link>https://dispatch3.com/posts/spinel_gradients/</link><pubDate>Mon, 27 Jun 2016 09:00:00 -0400</pubDate><guid>https://dispatch3.com/posts/spinel_gradients/</guid><description>Spinel&amp;rsquo;s Styling API is used to declare how layers are rendered.
The API supports a rich set of operators for defining richly rendered hierarchical compositions of layers.
These operators include:
solid color fills gradient color fills blending modes soft masks coverage operations isolation groups knockout groups Most of the previous posts on the blog have focused on the rendering quality and performance of SVG 1.1 artwork. The majority of the examples in the posts used solid color fills and the Porter-Duff OVER operator.</description></item><item><title>Spinel Path Effects — Perspective Transforms</title><link>https://dispatch3.com/posts/spinel_perspective_transforms/</link><pubDate>Tue, 12 Apr 2016 09:00:00 -0400</pubDate><guid>https://dispatch3.com/posts/spinel_perspective_transforms/</guid><description>Here&amp;rsquo;s an early look at Spinel&amp;rsquo;s support for perspective transforms:</description></item><item><title>Spinel Performance — Vectorized Image</title><link>https://dispatch3.com/posts/spinel_perf_vectorized/</link><pubDate>Fri, 18 Mar 2016 09:00:03 -0400</pubDate><guid>https://dispatch3.com/posts/spinel_perf_vectorized/</guid><description>This fun example was created using Adobe Illustrator&amp;rsquo;s Image Trace feature.
Spinel is rendering the vectorized image on a GTX 980 at 4K.
There are over 3100 vector paths in this example.
With Vsync off, the page renders at 245-542 FPS with GPU load reaching a peak of 92%.
With Vsync on, the frame rate is locked at 60 FPS and the utilization is:
GPU load: 13-23% MEM load: 9-10% Power: 35-37% of TDP (video removed)</description></item><item><title>Spinel Performance — 90K Glyphs</title><link>https://dispatch3.com/posts/spinel_perf_glyphs/</link><pubDate>Fri, 18 Mar 2016 09:00:02 -0400</pubDate><guid>https://dispatch3.com/posts/spinel_perf_glyphs/</guid><description>This challenging example demonstrates the raw power and efficiency of the Spinel pipeline when rendering a poorly constructed and extremely large vector graphics file.
Like the last post, there is no intelligent instancing of glyphs in the vector graphics source. From the Spinel pipeline&amp;rsquo;s perspective, every glyph on the page is a unique path. A proper implementation of a viewer or editor would use Spinel&amp;rsquo;s fast paths for instancing.
The 90k glyphs — 7 columns of very fine text — are rendered by Spinel on a GTX 980 at 4K.</description></item><item><title>Spinel Performance — Technical Paper</title><link>https://dispatch3.com/posts/spinel_perf_tech_paper/</link><pubDate>Fri, 18 Mar 2016 09:00:01 -0400</pubDate><guid>https://dispatch3.com/posts/spinel_perf_tech_paper/</guid><description>This example demonstrates a 4-page technical paper that has both text and fine line art.
Like the last post, there is no intelligent instancing of glyphs in the vector graphics source. From the Spinel pipeline&amp;rsquo;s perspective, every glyph on the page is a unique path. A proper implementation of a viewer or editor would use Spinel&amp;rsquo;s fast paths for instancing.
The 4-page technical paper is rendered by Spinel on a GTX 980 at 4K.</description></item><item><title>Spinel Performance — Newspapers</title><link>https://dispatch3.com/posts/spinel_perf_newspaper/</link><pubDate>Fri, 18 Mar 2016 09:00:00 -0400</pubDate><guid>https://dispatch3.com/posts/spinel_perf_newspaper/</guid><description>There are five newspaper front pages in this example.
The two German newspapers have particularly dense and small type while the Japanese newspaper&amp;rsquo;s glyphs are much more complex than the glyphs on the other four pages.
It&amp;rsquo;s very important to note that these examples were converted directly from a PDF to an SVG and there was no intelligent instancing of glyphs. From the Spinel pipeline&amp;rsquo;s perspective, every glyph on the page is a unique path.</description></item><item><title>Spinel Performance — Emoji Gallery</title><link>https://dispatch3.com/posts/spinel_perf_emoji/</link><pubDate>Tue, 15 Mar 2016 09:00:01 -0400</pubDate><guid>https://dispatch3.com/posts/spinel_perf_emoji/</guid><description>Now for a more colorful demonstration of Spinel&amp;rsquo;s extreme performance.
The Emoji One gallery has 1624 emojis which fit on a 4K display in a 58x28 grid.
The combined emojis total 24k paths and over 15k layers.
With Vsync off, Spinel renders this gallery at 135-405 FPS on a GTX 980 at 4K.
With Vsync on, the frame rate is locked at 60 FPS and the GPU is coasting:
GPU load: 17-34% MEM load: 9-11% Power: 37-41% of TDP (video removed)</description></item><item><title>Spinel Performance — Maps</title><link>https://dispatch3.com/posts/spinel_perf_maps/</link><pubDate>Tue, 15 Mar 2016 09:00:01 -0400</pubDate><guid>https://dispatch3.com/posts/spinel_perf_maps/</guid><description>A vector map is an excellent test of vector graphics pipeline performance because it&amp;rsquo;s likely a user interface will allow users to to translate, scale and rotate the the map&amp;hellip; hopefully in real time.
Like the previous performance post, the following videos demonstrate Spinel&amp;rsquo;s immense performance improvement over other vector graphics engines.
The videos were rendered by Spinel at 4K using a GTX 980 and captured using GeForce Shadowplay.
(video removed)</description></item><item><title>Spinel Performance — CPU vs. GPU</title><link>https://dispatch3.com/posts/spinel_perf_cpu_vs_gpu/</link><pubDate>Tue, 15 Mar 2016 09:00:00 -0400</pubDate><guid>https://dispatch3.com/posts/spinel_perf_cpu_vs_gpu/</guid><description>Vector graphics are slow Most operating systems and applications execute their vector graphics pipelines almost exclusively on the CPU.
Graphics folklore states that vector graphics is an especially suitable task for CPUs because scanline rasterization and compositing are sequential, cache-friendly and difficult to parallelize.
As a developer of CPU rasterizers for almost a decade, I agree with this claim. Sequential scanline vector graphics rasterizers really do map well to CPUs.</description></item><item><title>Spinel Antialiasing — Summary</title><link>https://dispatch3.com/posts/spinel_aa_summary/</link><pubDate>Sun, 06 Mar 2016 09:00:03 -0500</pubDate><guid>https://dispatch3.com/posts/spinel_aa_summary/</guid><description>Below is an animation that shows the significant pixel differences between type rendered with Spinel&amp;rsquo;s default antialiasing and Chrome, Microsoft Edge and Adobe Illustrator with NV Path enabled.
Using Beyond Compare, if a pixel difference is greater than 25 then it is drawn in red.
Spinel antialiasing appears most similar to Chrome and Edge and least similar to the antialiasing produced by Adobe Illustrator with NV Path + MSAA 8x.</description></item><item><title>Spinel Antialiasing — Spinel vs. Illustrator</title><link>https://dispatch3.com/posts/spinel_aa_adobe/</link><pubDate>Sun, 06 Mar 2016 09:00:02 -0500</pubDate><guid>https://dispatch3.com/posts/spinel_aa_adobe/</guid><description>Adobe Illustrator CC on Windows can preview vector artwork using NVIDIA&amp;rsquo;s GPU-accelerated NV Path OpenGL extension. MSAA appears to be locked at 8x.
Because the Illustrator capture appears match the other gamma-incorrect captures it will be compared to Spinel with sRGB correction disabled.
If you look closely you&amp;rsquo;ll see the Adobe Illustrator rendering exhibits uneven coverage and overly dark and light &amp;ldquo;pixel popping&amp;rdquo; in many of the letter forms while Spinel remains consistent.</description></item><item><title>Spinel Antialiasing — Spinel vs. Edge</title><link>https://dispatch3.com/posts/spinel_aa_edge/</link><pubDate>Sun, 06 Mar 2016 09:00:01 -0500</pubDate><guid>https://dispatch3.com/posts/spinel_aa_edge/</guid><description>This example uses the SVG file from the previous post and compares Spinel with Microsoft&amp;rsquo;s Edge browser.
Interestingly, Microsoft Edge appears to increase the coverage of horizontal and vertical lines with subpixel thickness.
Otherwise, the differences between Edge and Spinel are minor.
Note that Microsoft Edge browser is similar to Chrome and appears to not be gamma-correcting its output.
Spinel: Edge:</description></item><item><title>Spinel Antialiasing — Spinel vs. Chrome</title><link>https://dispatch3.com/posts/spinel_aa_chrome/</link><pubDate>Sun, 06 Mar 2016 09:00:00 -0500</pubDate><guid>https://dispatch3.com/posts/spinel_aa_chrome/</guid><description>In this example, the front page of today&amp;rsquo;s Wall Street Journal has been converted to an SVG file and rendered in both Spinel and the Chrome browser on Windows 10.
The two captures have reasonably similar output but why are the glyphs darker than in the previous post?
The answer is that Chrome&amp;rsquo;s SVG rasterizer is not gamma correcting its linear output which, in this case, is almost entirely grayscale letter forms.</description></item><item><title>Spinel Antialiasing — Text</title><link>https://dispatch3.com/posts/spinel_aa_text/</link><pubDate>Sat, 05 Mar 2016 09:00:01 -0500</pubDate><guid>https://dispatch3.com/posts/spinel_aa_text/</guid><description>Quality antialiasing of small glyphs requires precise pixel coverage information.
Spinel achieves high-quality antialiasing by retaining the subpixel geometry of paths throughout its pipeline. This enables both high-resolution pixel coverage calculation and is one gateway to efficient subpixel-aware rendering.
In the comparison below, the capture on the left was produced by NVIDIA&amp;rsquo;s NV Path OpenGL extension with MSAA 8x antialiasing.
The Spinel text capture is on the right. Note the capture in this post is not demonstrating subpixel-aware antialiasing.</description></item><item><title>Spinel Antialiasing — Test Pattern</title><link>https://dispatch3.com/posts/spinel_aa_test_pattern/</link><pubDate>Sat, 05 Mar 2016 09:00:00 -0500</pubDate><guid>https://dispatch3.com/posts/spinel_aa_test_pattern/</guid><description>A mandatory feature for any vector graphics engine is that the quality of its antialiasing should be at least as good as a 20-year-old CPU rasterizer.
The Spinel vector graphics engine meets this requirement.
Most other GPU-accelerated vector graphic rasterizers do not meet this requirement because they rely on multisample antialiasing (MSAA).
In the comparison below, the capture on the left was produced by NVIDIA&amp;rsquo;s NV Path OpenGL extension with MSAA 8x antialiasing.</description></item></channel></rss>