Reply To: Bella GUI (as of 2019.10.03)

Forums General Bella GUI (as of 2019.10.03) Reply To: Bella GUI (as of 2019.10.03)

Jeremy HillJeremy Hill

Heh, well you should like this system then, as basically everything is dynamically generated. 🙂

The core scene model is really not even specifically rendering-related; it could just as well be used for about any purpose, as long as you abstained from trying to use any of the 3D-scene-specific convenience functionality. When we were just getting started, there was not yet a file format for defining nodes, so they were defined entirely through code, and it is still possible to do that. I will provide a .NET wrapper (and eventually ruby, python, maybe others), so at some point, maybe you could have some fun dabbling with it, for who-knows-what purpose.

Even from c++, I am really happy with how the client code ends up looking. Here is a favorite example, where I am reading an older scene file, which contains attributes which have been moved around in the structure; since nodes are defined at runtime, the scene happily reads the outdated node structure, and I then move things to their new locations if necessary:

// Move old layer["surface"] inputs into layer.
for ( auto node: scene.nodes( { "layer", "sheet" } ) )
    if ( node.hasInput( "surface", AttrType_Object ) )
        const auto inputs = ds::Vector<String>() =
            "opacity", "roughness", "anisotropy", "rotation", "ior", "coating"

        auto surface = node["surface"];

        for ( auto input: inputs )
            if ( surface.hasInput( input ) )
                node[input].set( surface[input] );

        node.removeInput( "surface" );

I like this piece of code, it really shows how simple and expressive the model has ended up (the same fixup took significantly more code in maya). But I’ll stop geeking-out now .. I could go on forever about this stuff. 🙂