Over the last few weeks, we have made some major improvements to the performance of our master materials. With this performance boost, we have opened the shader budget for a much-anticipated functionality: focus and gobo morphing. In real life, the inner lens of a stage fixture allows the user to shift the focal point between different gobos, wheels, and shutters. This allows an incredible amount of dynamic blending possibilities when morphing between two or more different masks.



When tasked to implement this functionality into the system, it was sure to be a challenge as it meant implementing blurs to our gobo textures. By itself, a 2D blur is not a massive workload for a shader, but when implementing it into a material that needs to track and simulate up to 40-60 textures at any given time, the shader complexity grows exponentially. So I went to work with another engineer drafting a way we could implement this system as authentically as possible to the real-world visuals while keeping our shader instructions as low as possible. We ended up using a low-cost spiral blur for our textures and equation-based manipulations to the texture coordinates for our procedurally generated masks to blur all of the different layers in the master material. We then implemented a global variable for the max step distance of our blur, and some C++ logic to blend the blur influence between our different layers as we simulate a lens focusing in and out of different ranges within the fixture.



It was important for us not only to achieve a visual that was consistent with how a fixture behaves in the real world but was dynamic enough for us to rearrange the order of the internal masking structure so different wheels could blend into one another at any time. The results are fascinating to witness as the interactions between different morphs bring so much life to the gobo system with now nearly limitless shapes and animations to interact with. Its been so fun to test the morph system myself and see just how far gobo visuals can go. Until next time, thanks for reading!

-Joe Bonura