Back to Overview

Bifrost R&D

Tools & Techart Topics

A while ago I started diving into bifrost, as it seemed similar to Fabric Engine which we where testing back at Guerrilla Games. I really liked the workflow of it so wanted to see how similar they are.

Bifrost has an easy way to step into it, its similar to the way the node editor in maya works, but the deeper you go into it the more complex it can be. Specifically the loop nodes can be quite tricky to work with in the beginning.

after a short while just mocking around in the editor I started converting some of my c++ nodes into the engine. the first node was the Ik system node. just a simple solver that solves a 2 bone Ik setup with Trigonometry and a lookat. slowly expanding it with the extra functionality of stretch, polevector locking and soft distance modifications.

The IK system was not that hard to implement, most of the math needed to be created from scratch but the only thing that took me some time was creating the lookat matrix function, as I did not want to be bound by wich axis is aiming and which axis is used as the upvector.

from that point on went in deeper to see how much of the nodes where available and started working with curves. In the Fabric Engine there was a node that worked with NURBS and Bezier curves, but in Bifrost there is no such thing. So working from code that I created for the skinning tools (the Bezier function was 2d but easily portable to 3d). This was a heavy introduction into for loops! In the end it managed to draw a Bezier spline in maya using (4+n)amount of inputs.

Now to use that information. For characters, tubes, spines, tails, etc. I have a c++ node called a railspline, a node that behaves similar to the IK-Spline in maya but allows every node that drives the curve also to drive the rotation of the elements on the curve. Using the previously created Bezier function I could now push the node further to create a RailSpline in Bifrost.

Also added to that I had to create a Local Rotation Axis node, just to see if the output of the RailSpline actually gave the desired results without having to add objects to the output of the Bifrost node to test it. I seperated this component as it can be usefull for a lot of other nodes as well.

Have a look at the nodes down below for more information, the nodes are properly named but the graphs are still a bit messy, I will add proper annotations in the scenes if time allows:

LRA node IkSetup RailSpine