opensubdiv: the core needs only the standard library, and the default build is not that
An Open-Source subdivision surface library.
At a glance
- What is it?
- OpenSubdiv is a subdivision surface library built at a film studio and used far outside it, and its most striking line is a prerequisite: the core is written in C++ with no dependencies other than the standard library. The sentence after it adds the caveat, because a second library switches on external processor and graphics backends by default and you have to configure them off.
- Who is it for?
- Use OpenSubdiv if you are evaluating subdivision surfaces and want a library you can compile against nothing but a toolchain, or if you need it to match a commercial renderer's limit surface exactly, which the page claims to numerical precision. Three things to check.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 19 days ago.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 14, 2026, and from our analysis. They are not legal advice.
Star history
- PixarAnimationStudios/OpenSubdiv3,091 ★ · +17
| Repository | 2026-09-24 | 2026-11-14 |
|---|---|---|
| PixarAnimationStudios/OpenSubdiv | 3.1k | 3.1k |
17 Stars in the last 51 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
The core has one dependency, and the default build is not the core alone
The prerequisite section is two sentences and the first is the one to quote. The core libraries are implemented in C++ with no dependencies other than the C++ standard library. For a library of this size, in this field, that is a remarkable position, and it is why it is worth being precise about what the second sentence adds. A second library contains additional conditionally compiled components that use specific external processor and graphics interfaces for evaluation and display, and there are optional interactive examples alongside them. Some of those optional parts are enabled by default and can be disabled while configuring the build. So the library you can compile with nothing but a compiler is not the library you get unless you ask for it, and every per-platform recipe on the page is largely a list of switches turning those pieces off. That is a reasonable design for graphics code, where the hardware paths genuinely differ, and it does mean that a build following the page and a build following the dependency claim are two different builds.
Sixteen examples across three graphics interfaces, and none for two listed backends
The examples directory reads as a map of the project if you look at the prefixes. Three graphics interfaces appear, one for DirectX, one for the browser interface and one for Metal, and each has a general viewer plus a texture-viewing variant. Around those sit purpose-built demonstrations: rendering at distance, evaluating a limit surface directly, a viewer for data that varies across a face, an imaging sample, a paint test, a shared-topology sample and a stencil sample, with a common directory they all share. Two of the optional backends in the dependency table have no example directory at all. The parallel accelerator toolkit is listed as a supported optional dependency, and the portable compute interface is listed, and neither appears among the examples. That is a boundary rather than a gap: the parallel backends exist to evaluate in place, while the viewers are built for the three interfaces that have loaders and windowing. It is still the first thing to check if you arrived wanting to see the parallel path work.
Two contributor licence agreements at the root, and no licence recorded
The licensing picture in this repository is four files and one absence. There is a licence text file and a notice file, and there are two contributor licence agreement documents committed at the root, one addressed to organisations and one to individuals, which is the usual pattern for a project that wants to accept contributions from a company without asking that company to adopt the project's own licence. Nothing on the front page mentions any of the four, and the licence recorded for the repository is not an identifiable one. For a library that came out of a film studio's rendering pipeline and is now embedded in other people's tools and pipelines, those four files are the actual answer to the question of what a user may do with it, and the only way to find them is to open the repository. The same applies to attribution requirements: the notice file is where those live, and it is not linked from the readme either.
The tested matrix has a ceiling on the build tool and a compression library two years old
The versions section is framed carefully, which deserves credit. It says these are the versions used to test the current release, that earlier and later versions will generally work, and that the table represents versions known to work. That is exactly the right way to present a matrix that people will otherwise treat as a requirement. Two rows are worth stopping on. The core row sets a language floor and gives the build tool a range with an upper bound, and the note beside it is misspelled, which is a small thing but it is in the row people copy from. And in the optional examples block, the compression library is pinned to a release from a couple of years back, while the parallel accelerator toolkit row names a specific current release. None of it is a hard requirement. What it does mean is that a build tool newer than the stated ceiling is untested by definition, which matters more here than it would for a library with one platform and one configuration.
The Windows recipe names a generator from 2019 and the iOS one disables eleven things
The four per-platform recipes are otherwise near-identical: the same install prefix, the same seven switches turning off the optional processor, texture, documentation, threading, accelerator, portable-compute and loopback components:
cmake -B buildDir \
-D CMAKE_INSTALL_PREFIX=instDir \
-D NO_PTEX=1 -D NO_DOC=1 \
-D NO_OMP=1 -D NO_TBB=1 -D NO_CUDA=1 -D NO_OPENCL=1 -D NO_CLEW=1 \
-D "GLFW_LOCATION=/path/to/glfw" \
-S .The Windows recipe adds a generator name and an architecture, and that generator is the one shipped with a 2019 release of the build tool. Since it is the only Windows instruction on the page, a contributor on a current machine has to work out the modern equivalent themselves. The iOS recipe adds four more switches on top of the common seven, so eleven components are off there, which fits: the recipe asks the build system to use the phone toolchain, produces a project file to open in the development environment, and turns off the browser graphics path among the rest. The page's own note in the windowing-library section gives two library file names, one for Linux and one for Windows, and none for macOS, which is the one small hole in an otherwise careful set of instructions.
Build status is a grid of pipeline links across two branches
The top of the page is a table, not a status image. One column per operating system, three of them, and two rows, one for the development branch and one for the release branch, every cell a link into a hosted pipeline service filtered to that branch. That arrangement says two things. First, that continuous integration runs somewhere other than the forge the code lives on, which is why the repository also carries a pipeline definition file at its root. Second, that the release line is a maintained branch rather than something cut from the default one, which is normal for a library where a stable line and a development line carry different risk. It also means the two rows are the honest measure of project health: if the release row is green, the version people are using is still being built; if the development row is red, the next version is not ready. Neither row is visible without clicking.
A bundled OpenGL loader and a marker file that tells scripts where the root is
Two entries in the tree explain a lot about how this project is put together. First, it ships its own OpenGL loader rather than depending on one, which is consistent with the claim about the core having no external dependencies and with the examples being built on the browser graphics interface. Bundling a loader is a choice with a cost, since it means tracking that code, and it is the same choice that lets the examples build without a package manager. Second, there is a marker file at the root whose only job is to tell a script where the top of the repository is, so that build automation works from any subdirectory. That is a small courtesy with a large effect in a repository of this shape, which has directories for the library, examples, tutorials, tools, documentation, regression tests and the build scripts themselves. The regression directory in particular is worth knowing about: it is the part of the tree that tells you whether a change altered the numbers.
Editorial conclusion
Use OpenSubdiv if you are evaluating subdivision surfaces and want a library you can compile against nothing but a toolchain, or if you need it to match a commercial renderer's limit surface exactly, which the page claims to numerical precision. Three things to check. What you actually need switched off, because the default build is not the minimal one and every platform recipe on the page is mostly a list of things to disable. Which toolchain versions you have, because the tested matrix has an upper bound on the build tool and a Windows recipe naming a generator from 2019. And the licensing, which is four files in the repository root: a licence text, a notice, and two contributor licence agreements, one for organisations and one for individuals, none of them mentioned on the front page. There are no published releases on the forge, so release notes live on the project website. The default branch is called dev, and it was last pushed on 2026-10-02.
Frequently asked questions
What does subdivide do in Blender?
That question is about a different application. This repository is the library that implements subdivision surface evaluation for several graphics interfaces, written at a film studio and used by other tools; it is not an application with a modifier you operate on a mesh. Its own claim about accuracy is that the resulting limit surface matches the studio's commercial renderer to numerical precision.
How to subdivide a mesh in Maya?
Nothing here is about that application or its modelling tools. This repository provides the evaluation library, its documentation, generated API reference and sixteen example programs across three graphics interfaces, plus tutorials and a regression suite. Performing the subdivision in a modelling package is a question for that package's documentation.
3ds max opensubdiv vs turbosmooth
That comparison is between two modifiers in one application, and this repository takes no position on it. What it does say is that its limit surface matches the studio's commercial renderer to numerical precision, and that evaluation is optimised for deforming surfaces with static topology at interactive frame rates. If you are choosing inside that application, its own documentation is the place to compare the two.
How do I build OpenSubdiv with no optional dependencies?
Every per-platform recipe on the page is mostly a list of switches that turn optional components off: the texture library, the documentation, the threading library, the accelerator toolkits, the portable compute interface and one loopback component. Install the build tool and the windowing library first, point the configure step at where that library lives, and pass the switches. The core itself needs nothing beyond a compiler and the language's standard library.
What licence is OpenSubdiv under?
The front page does not say. The repository root holds a licence text file, a notice file, and two contributor licence agreements, one addressed to organisations and one to individuals. The licence recorded for the repository is not an identifiable one, so the files in the root are the only place the terms appear, and anyone depending on the library for commercial use should read them there.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/pixaranimationstudios-opensubdiv)Star history chart for your README
[](https://hysenlabs.com/projects/pixaranimationstudios-opensubdiv)Was this useful?