Is implementing something like Google Filament via C++ Ops possible?

TL/DR; Is it silly to even consider porting this to TD via C++ chops, sops, dats, tops, glsl shaders etc? Or could something like this be done with out rewriting or changing half of the code?


Ok disclaimers before I dive into this question :upside_down_face: -

  1. I realize TD has a pbr shader, and a full rendering system at it’s core that is quite nice when setup correctly.

  2. I think Derivative is waiting on Vulcan and then there may be changes coming after that to glsl and shaders in general? Maybe someone else can confirm on this.

  3. Porting this sounds like a world of hurt, as BEST CASE scenario, assuming it’s even possible with the tools and workflows we have access to as TD users.

  4. I have not looked at the license type in detail, so no idea what sort of open source license it has.


Ok, so I bring up Filament because it is a really awesome looking physically based renderer, with a massive array of features that feel much closer to current gen.




I’ve poured at least a dozen hours reading through their exhaustive documentation that covers virtually every aspect of the shading model they use, with lots of diagrams, equations, and code snippets. It has been a huge source of inspiration and learning for me with the shader / lighting stuffs I’ve been doing recently.

They have a great material guide / quickSheet too to assist in the creation of realistic pbr materials.

Here are some of the material features they support currently that we do not have in TD yet:

In addition to the awesome material properties it can simulate, there are a few other things I really like about it personally:

  • They put HUGE emphasis on real world lighting units, which when used correctly makes for very realistic when desired, and is the reason most renders break down in realism due to inconsistent use of lighting units, strengths, intensities, falloffs etc.

  • Maybe most interesting, is that they also have implemented clustered and tiled shading variants, which if you dont know are optimizations on the normal render lighting pipeline that allow for dozens, to hundreds, to sometimes thousands of realtime light sources in a scene.

All of this is to say… a library like this brings us very close to current gen, if not there. I feel like we’re missing many of these things in Touch currently, and now to my actual question:

IS it even possible to port something this big, and specifically written into TD using C++ chops, tops, dats and whatever else? Or would this not be possible?

Is this question even answerable with out starting and potentially failing / running into an issue?

My first guess is that the biggest issue would be that this library assumes it’s loading data and assets directly from hard drive, where as in Touch, the whole point is that we can pass data in and out of components. Maybe it wouldn’t be possible to do this with a library like this? Maybe it would?

If you’ve made it this far, thank you for reading! Would love to hear your thoughts.

3 Likes

+1 I think it’d be a really cool way to extend TD to be able to add another PBR renderer with more low-level control