OpenSubdiv GPU Tessellation WIP

Just a quick update on what”s happening in the opensubdiv-modifier branch in the Blender Git repository. This is an initial integration of GPU tessellation in Blender, it”s totally not final and still loads of work to be done to make this project master-ready. But there are some really cool results. Nothing to be mentioned in plain text, so roll the tape!

P.S. Without all that extra CPU overhead which currently happens the dragon fly cycle runs at more than 60fps!

P.P.S. Here”s the .blend file.

  1. when i can try the OpenSubdiv?

  2. I definitely use line numerbs fairly regularly, but that one must not bother me enough to turn it on. If I need a current line number, by default, the cursor’s line number is shown on the IDE status bar (bottom right: Ln ## ; still there in VS2012). Going the other way, any time I need to find a line by number, I just mash the Ctrl+G shortcut for Go To .

  3. Hi, I’m trying to build it on a Linux box, but I can’t figure out which version of OpenSubdiv I must use… osdutils lib seems to be removed on the dev branch, so I’ve tried w/ the tagged 2.4 and 2.5, and now I have an problem with a missing include file : opensubdiv/osd/cuda.h from blender/intern/opensubdiv… Please help !!

  4. H, Open subdiv will only work with GPU not with CPU ?
    only Nvida s Cuda..??
    CPU overheading ??
    Please tell more about limitations of open subdiv and show your targets and what can be aspect.

    Roadmap show no subdiv targets or limitations.


  5. hello when will release or add feature from roadmap (

    Schedule data since?

    thank you

  6. i know this is a bit late but. Is there any way to use this to create mesh tessellations for modeling structures. i would like to model tessellations for Finite element analysis using my blender models. Any chance this is what I am looking for?

  7. Will it be possible to do vertex creasing with OpenSubdiv?

  8. I’ve heard that a way to mitigate the spikes is to apply to lower first (but make a save of your file first, this can be destructive and there’s no way to get the initial mesh back)

  9. Sergey, If cycles gets adaptive subdivisions for displacement will the viewport be able to show the displacemnet from the shader?

    Also, multires often @explodes@ when you animate it stepping up and down the levels (you get stray spikes often that once they occur are really hard to fix)…

    that and viewport feedback are the main reasons that the displace modifier is so popular leaving multires for sculpting rather than rendering workflow…

    just thought i’d mention because animating a multires model ALWAYS (for me) breaks and gets artifacts…

    If viewport and cycles could use adaptive tesselation and bith display the displaced mesh from the node setup things would be GREAT! but what about BI? would that benefit too?

  10. That’s impressive, thanks you so much for making Blender always better !

    Will the crease edge control function be avaible with OpenSubdiv ? (to do hard surface modeling)

    • Yes, definitely. This is one of the main reasons why we’re integrating OSD into Blender.

  11. Hi Sergey,
    amazing work here. Since one of the strongest point is to get displaced mesh at high fps while posing or playing animation as you showed, will a displacement modifier *after* SubSurf be supported? (while keeping the speed increase by GPU backend i mean)

    Thank you.

    • Short question is: it’s complicated.

      You can not do it by applying displacement modifier on top of the SS. Displacement is a CPU-side modifier and copying hi-res mesh back-n-from to GPU in order to apply displacement is the last thing you’d want to do. Such copy would kill all the performance.

      But i plan to make multires fully benefit from OSD, and you’ll have high frame rate with this modifier.

      In the future we might port more modifiers on the GPU, but no ETA at all for this.

      And for sure you can make lo-res displacement and tweak it further with normal or displacement maps. This should be good enough for viewport preview and for Cycles i think something like adoptive subdivisions with displacement map would make you happy. No ETA for this as well tho.

  12. This make possible separate U or V subdivide, because some time is not nessesary subdivide in all direction, why make lot mesh triangles if not needed ?

    • It wasn’t covered in the video (because it’s not hooked up yet) but OpenSubdiv supports all sort of neat stuff like:

      – Adoptive subdivisions (so if curvature of the object is low then it wouldn’t be lots of faces created).
      – Screen space LOD So when you get closer to the model it gets more details visible.
      – Frustum culling. Not surer it affects on tessellation process itself, but the idea is to speed things up by avoiding processing of invisible mesh parts.

      Think this things are easier to control than U/V subdivide.

  13. i am looking for an ide or text editor and i am wondering what sergey uses? what is visible there on the screen? :)

    • This is an Emacs. Nice text editor for those who came into programming into 90ies. Wouldn’t recommend for the young players :)

      What i would recommend instead is looking into Qt Creator. Don’t get confused by Qt, Creator is useful for general C/C++ projects like Blender.

  14. Thank you Sergey!
    OpenSubdiv in Blender is incredible awsome.

  15. Sergey,
    That is one awesome demo on open subdiv :)

    I was gonna put up a test build but…
    msvc2008/scons not happy :p


    • Either you’re using SCons where openSubsurf is disabled by default for now (need some more work to fix remaining issues in the build scripts) or CMake didn’t find OpenSubsurf library. We don’t them precompiled yet for any platform. Hope to have them working tonight.

      Stay tuned!

      • Yup,
        Thanks Sergey, your last commit fixed it :)
        I’ll post a test build (If graphicall uploads play nice today :p)


  16. Thanx for Awesome work.

    I’ve try to build, but openSubdiv_finishEvaluatorDescr is void function

    then cause error in this point.
    source/blender/blenkernel/intern/CCGSubSurf.c:2501:2: error: void value not ignored as it ought to be
    return openSubdiv_finishEvaluatorDescr(ss->osd_evaluator, ss->subdivLevels) != 0;

    I should not use opensubdev 2.4(current)?

    • You should use current dev branch of OpenSubdiv repository. Some crucial changes to API and fixes were done there.

      • Sorry for my misunderstanding.
        Now I made it,due to your help.
        Though my cuda can reach around 25fps in the sample file, effectiveness is obviously. It’s so comfortable. Thanks again.

        Anyway,I noticed only one adding needed to compile in my environment.

        otherwise stopping by error: cuda_runtime.h: No such file or directory.
        For those who encounter the same.

  17. Thank you Sergey, it sounds out clear and loud: it’s fantastic, and your work is awesome. Thank you so much… Marco

  18. Pls Lets Have a TEST BUILD

  19. I can’t wait!! How I can build this branch?

    • If you’re familiar with building blender from sources, simply swicth to opensubdiv branch by doing `git checkout opensubdiv-modifier`. You’ll also need latest dev branch of OpenSubdiv repository.

      • Hello Sergey, I have a question on building this branch. I switched to the OpenSubDiv-mofifier branch, and I managed to get the source code just fine. However, Im not sure what I need to do to get the right files for opensubdiv, and where to put them. I cloned the latest master git repository to my computer, but im not very experianced in getting external libraries included to build the opensubdiv module for blender. I know this article is fairly old, but im hoping you will see this, and I would appreciate any help on this.

  20. Awesome! Is there a test-build for this yet?

  21. Hi. very excellent. is this (OpenSubdiv) next to Vergennes program will go?

  22. super cool! thanks!

In order to prevent spam, comments are closed 15 days after the post is published.
Feel free to continue the conversation on the forums.