GPU view-adaptive crack-free subdivision of Bézier surfaces

gpuopen.com · 2026-10-05 · by Long Nguyen ·generic
Learn how fast, crack-free GPU work graph subdivision for bicubic Bézier surfaces dramatically reduce triangle counts while simplifying implementation and matching hardware-tessellation quality.

GPU view-adaptive crack-free subdivision of Bézier surfaces

Share on Bluesky Share on Mastadon Share on LinkedIn Share on Twitter/X Share on Reddit Share on Facebook Share on Whatsapp Share via Email

GPU view-adaptive crack-free subdivision of Bézier surfaces

Originally posted: August 6, 2026

Bastian Kuth's avatar

Bastian Kuth

Quirin Meyer's avatar

Quirin Meyer

Smooth surface tessellation

Bézier surfaces are a standard representation for smooth geometry in computer graphics. Car bodies, organic character shapes, and many other smooth objects can all be conveniently expressed as collections of bicubic Bézier patches, where each patch consists of 16 control points. To render them efficiently, those patches can be broken down into triangles. This post gives a brief look at the ideas behind our paper presented at the Eurographics Symposium on Rendering (2026) on doing exactly that, fast and crack-free, using GPU work graphs.

Hardware tessellation

Our subdivision

JPG (1920x1080)

JPG (1920x1080)

Hardware tessellation handles the conversion to triangles directly. It works by assigning tessellation factors to each patch: two inner factors controlling the interior grid density in u and v, and four outer factors that must match the neighboring patches to prevent cracks along shared edges. The factors can be made view-adaptive based on projected screen size or patch curvature. The problem is that the two inner factors dictate the entire patch uniformly. A patch that curves sharply in one corner and is nearly flat everywhere else still gets a uniform grid of triangles across its whole surface, producing more triangles than the image requires.

To avoid this, the conversion can be expressed as a recursive problem. You ask: is this patch flat enough to approximate as two triangles? If yes, draw it. If not, split it into four sub-patches and ask again. The result adapts naturally to curvature and distance from the camera, concentrating triangles only where they matter. Drag the slider above to compare the two wireframes side by side.

Implementing recursive subdivision

Recursive subdivision is difficult to implement efficiently on a GPU. Conventional compute-based approaches spread the recursion across multiple dispatches with explicit synchronization barriers between levels. Worse, they require large worst-case buffers, since the GPU must pre-allocate memory for the maximum possible number of sub-patches, even if most patches terminate early. Memory quickly becomes the bottleneck.

Our paper introduces several techniques that work together to address this. Rather than storing all 16 Bézier control points for every sub-patch (192 bytes each), we represent a sub-patch as just 8 bytes encoding its position in a subdivision quad tree. The actual control points are reconstructed on demand from the base patch using a numerically stable evaluation based on tensor product blossoms. This evaluation is designed so that neighboring patches compute bitwise-identical positions on shared boundaries, which is the key to producing a crack-free result without any communication between patches.

When adjacent patches reach different subdivision depths, cracks would normally appear along their shared edges. We close them with small wedge triangles that each patch generates independently.

The following figure shows our Work Graph:

Work Graph

The Entry node starts the process, dispatching one thread per base-patch. If a patch needs subdivision, Entry emits four child records to the Quad node, one per sub-patch. Quad performs the same job recursively: it reconstructs the sub-patch control points on demand, tests the flatness criterion, and either splits further by enqueuing itself again via work graphs’ trivial recursion, or passes the finished patch to BundleQuads. BundleQuads collects up to 512 patches at a time and forwards the batch as a single record to the Draw mesh node, which outputs the triangles and wedges directly to the rasterizer. A single CPU dispatch drives all of this. There are no explicit barriers between levels and no worst-case buffer allocations: the work graphs runtime allocates only what is actually needed.

Your browser does not support the video tag.

GPU view-adaptive crack-free subdivision of Bézier surfaces demo video.

Results

At equivalent image quality, our method renders on par with hardware tessellation while producing significantly fewer triangles across the scene. The work graphs implementation also turned out to be considerably simpler to write than the execute-indirect equivalent: one dispatch on the CPU side, no manual synchronization, and no buffer management between levels. We see this as a broader signal that GPU work graphs are a natural fit for any recursive splitting problem where the amount of work per level is not known in advance. You can see the results in the demo video above.

For more on the subdivision criterion, the watertightness guarantees, and the full performance numbers, read the paper below.

Footnotes

Links to third party sites are provided for convenience and unless explicitly stated, AMD is not responsible for the contents of such linked sites and no endorsement is implied. GD-97.

Bastian Kuth's avatar

Bastian Kuth

After completing his PhD in close collaboration with AMD in the area of Geometry Processing and GPU Work Graphs, Bastian has since joined as an engineer and researcher to work on the future of graphics.

Quirin Meyer's avatar

Quirin Meyer

Before becoming a computer graphics professor at Coburg University, Quirin Meyer obtained a Ph.D. in graphics and worked as a software engineer in the industry. His research focuses on real-time geometry processing primarily on GPUs.

Related news and technical articles

AMD Radeon™ GPU Profiler 2.4 adds support for AMD Radeon™ RX 9000 Series, pure-compute applications, DirectML applications (and more!) AMD Radeon™ GPU Profiler 2.4 adds support for AMD Radeon™ RX 9000 Series, pure-compute applications, DirectML applications (and more!) Discover the latest Radeon GPU Profiler v2.4, now supporting Radeon RX 9000 Series GPUs and profiling for pure compute and DirectML applications. Enhance your optimization with improved ISA views and Work Graphs support. Work Graph Playground a learning framework for GPU Work Graphs Work Graph Playground a learning framework for GPU Work Graphs Read about our latest sample for D3D12 GPU Work Graphs. We're making Work Graphs more accessible with a tutorial framework. GPU Work Graphs mesh nodes in Vulkan® GPU Work Graphs mesh nodes in Vulkan® We’ve added mesh nodes to our Vulkan® experimental extension, VK\AMDX\_shader\_enqueue. GPU Work Graphs mesh nodes in Microsoft DirectX® 12 GPU Work Graphs mesh nodes in Microsoft DirectX® 12 Mesh nodes are a new type of leaf node in work graphs that, unlike all other nodes, does not invoke a compute shader, but dispatches a mesh-shader graphics pipeline instead. This blog series covers how to get started with mesh nodes as well as best practices. Getting started Getting started The second part of this mesh nodes blog series focusses on initial setup of a new mesh nodes project and includes an example of a HelloMeshNodes solution. Tips, tricks, and best practices Tips, tricks, and best practices The final part of this mesh nodes blog series outlines some of the best practices for getting the best performance out of a mesh nodes project. Procedural generation Procedural generation Mesh nodes makes it much simpler to implement a fully procedurally generated world. This blog post examines an example of procedural mesh node sample. GDC 2024 Work graphs and draw calls – a match made in heaven! GDC 2024 Work graphs and draw calls – a match made in heaven! Introducing "mesh nodes", which make draw calls an integral part of the work graph, providing a higher perf alternative to ExecuteIndirect dispatches.

Related videos

Mesh Shaders – Learning Through Examples (Digital Dragons 2024) – YouTube link Mesh Shaders – Learning Through Examples (Digital Dragons 2024) – YouTube link Learn about the new Mesh Shader pipeline which can help to create even more better-looking games. GDC 2024 - GPU Work Graphs: Welcome to the Future of GPU Programming - YouTube link GDC 2024 - GPU Work Graphs: Welcome to the Future of GPU Programming - YouTube link This talk by Matthäus Chajdas gives a first look at this brand new API and shows how it's going to transform the GPU programming landscape going forward.

gpuopen.com · 14 images · 1 videos · 150 links

Comments (0)

No comments yet