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



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. 🙂