New V6 Display Faster: GPU Tessellation

The latest WIP (May 2, 2017) contains an experimental feature called GPU tessellation. This feature is off by default. You can turn this on by checking the “GPU Tessellation” option on Rhino’s OpenGL options page.

What Is GPU Tessellation?
GPU tessellation attempts to move as much surface, polysurface, and extrusion wire drawing as possible on to the graphics card. All breaking down of curvy wires into tiny line segments and thickening of these segments for wire pixel thickness is performed in a series of “shader” programs on the GPU.

Does this work on all computers?
No - we use a feature of OpenGL 4.0 called tessellation shaders to perform the drawing. You must be using a graphics driver that is at least OpenGL 4.0 capable. Fortunately, OpenGL 4.0 appears to be pretty commonly available on many different graphics cards. If your graphics card is not running at or above OpenGL 4.0, then Rhino will draw these wires the same way as it has been drawing them in the past.

Why should I care?
Speed!!! Results will vary quite a bit from card to card, but we have seen huge performance improvements with some cards (most notably nVidia so far). Note that this is only for drawing the wires of polysurfaces and extrusions so if you are using a display mode that doesn’t show these items then you should notice no difference

What can you do to help?
Please turn this feature on and see if everything still “looks” correct. We have seen some problematic cards which produce odd results for wireframe drawing of polysurfaces and extrusions. We think we have this solved, but I want to to with more cards to be sure.

Why is this not on by default?
This is still early work and I don’t want to mess everyone up. We also noticed that this feature is actually performing worse than the old technique on some AMD cards. This is what we are currently investigating because we know the hardware is capable.
-Steve

9 Likes

5 posts were split to a new topic: Clipping Planes Not Working

A post was merged into an existing topic: Clipping Planes Not Working

Hi Steve,

GPU tessellation works on my GeForce GTX 970. Faster redraw but the tessellation is a bit too coarse for my taste. I can see the segments sometimes. I assume this can be tuned up.

Hello Steve,

I am very excited that you are working on the speed topic, which is crucial for my work.

I am testing right now with a mid sized architectural scene which involves medium numbers of objects, meshes, polysurfaces and blocks. At the moment I am testing on a machine with a Quadro k 4000 in shaded view mode with lines turned on, mesh lines turned off and textures turned on.

At first glance I have to say that I do not see any huge difference in manual handling or using the testmaxspeed command, with gpu tessellation it is a bit faster (36 sek vs. 40 sek.in testmaxspeed).

I also noted a serious display bug: blocks containing transparent materials cause display errors ( see attached picture)

I also did a quick test run to compare the new display engine to the old R5 which was to be honest a quite sobering experience … the old pipeline seems to be 5 times faster ( see attached pic ).

I exploded all blocks in the model and ran the test again on both versions, this time the R6 score was only 2 times slower than the R5 one ( interestingly R5 score maintained the same…) so I guess R6 has some serious issues concerning block display performance.

I will continue testing.

best

Andreas Walther

Ok, I exported my R5 shaded view settings and reimported them in R6, this seemed to help a bit, but still the blocked version in R6 is considerably slower than R5 (21,3 vs. 6,7 in R5).

the good news: after exploding the blocks R6 really performs good and archives 4,8 sek. in the scene with GPU tessellation turned on and 5,5 with GPU tessellation turned off, which is faster than R5!

So go for that blocks!

best

Andreas Walther

Of course it can be tuned up :slight_smile: Can you send me this sample at this zoom level? I would like to see what can be done about this. Thanks

Hi Andreas,
This work was done specifically for polysurface and extrusion wire drawing. If textured meshes and blocks are dominating the display time for your model, then you won’t really notice much of a difference at all. I’m also noticing in your screenshots that almost everything is a straight line. GPU tessellation can have a slight improvement over the older technique for straight lines, but probably not as much as curvy surfaces.

I am working on blocks right now, so hopefully I’ll have something to report in the near future that will have an effect on this model.

A good test to see if your card works well with this feature is to test the bike model in wireframe which can be found here:

Hi Steve,

please find attached the file. Of course it is an extreme view which overexposes the tessellation. However, I’ve noticed it in a standard perspective view.

Also distracting is the difference between curves and identical polysurface edges, For example if you snap Near the edge of that extrusion then the edge curve will be highlighted and tessellated by Rhino. If later curves will also be tessellated by the GPU this should not be such a problem.

Anyways, the tessellation should be smoother (less than 1°).
GPUtesellation.3dm (34.5 KB)

Thanks,
Jess

That’s a perfect example and I can definitely tune this up, thanks.

I agree it’s distracting, yes. When you, say, want a curve that you obtain by calling Join and use the Crv filter, and click on edges of curvy objects, the curve pulls away from the edges of the surface. That gets a bit messy…

We will eventually get curves to draw using the same method so you won’t notice a difference. Still very early days in this feature…

1 Like

Hi Steve,

during my test with the new feature I found that at block scenes the display hangs to often. Maybe you can find a solution. Simple test - convert the bike to a block and create 3x3 array. Now test max speed will be down to 1 fps.

At my transporation interiors I use a lot of blocks, most seats. Could be great to get the speed for blocks too.

On problem that could be fixed is, if I turn the scene around than the display is switched to wire frame and run quite fast. That’s fine. If I stop the movement than the display try to switch back to shaded mode and is freezed for a second. In this time a new movement is ignored until the shaded mode is ready (short time visible). Maybe you could make that a new movement stop switching to shaded mode and is immediately back to the fast wire mode.

how do you know the fps of your rhino viewport? how do you display them?

For me 1 fps is if I’m saying “21” in mind. Only raw approximation. :wink:

:frowning:
hoped there was a tool or maybe even a rhino-command for displaying fps.
would be nice, right?

Laptop with GeForce 750m (macbook running windows10)

Tested with the bike scene:

Tesselation OFF:
Wireframe: 10.72 sec
Shaded: 10.63 (shaded is faster than wireframe… seems odd)

Teselation ON:
Wireframe: 2.27 sec
Shaded: 5.55 sec

Cheers!

You can run the TestMaxSpeed command. Using the normal viewport refresh is not a good way to measure because Rhino starts degrading the display quality if it takes too long to draw a frame. With the TestMaxSpeed command each frame is drawn fully.

1 Like

interesting, thanks!