Hi @malcolm, I’m encountering the same issue when opening FBX_MasterPlaback_update.toe in 2025.31760:
ERROR: /project1/FBX_instances/shader/MATGenerator/merge1_vertex:296: ‘expression’ : left of ‘[’ is not of type array, matrix, or vector
Line 296 of the vertex shader is simply this:
int ind = TDAttrib_BoneIndices()[i];
Any advice would be appreciated 
Cheers,
Jonas
At some point the function to access attributes in GLSL MATs has changed, it doesn’t return an array anymore,but you have to specify the array element you want to access with the first argument. By default (no arg) it returns the first element of the array.
That’s what the error message is telling you: left of ‘[’ is not of type array, matrix, or vector
See Write a GLSL Material - Derivative
So in this case I think
int ind = TDAttrib_BoneIndices(i);
should do it.
1 Like
Thank you @vincentDev. Moving the index into the function call did indeed fix the error:
~~TDAttrib_BoneIndices()[i]~~ TDAttrib_BoneIndices(i)
~~TDAttrib_BoneWeights()[i]~~ TDAttrib_BoneWeights(i)
This came up as I’m trying to get @DavidBraun’s great Boids patch to fully work in 2025.31760.
Now I can see the bone deformation is doing something, but it’s clearly not affecting the right points:
If anyone wants to have a look, here’s the version of the patch I’ve fixed up so far:
TD-Boids_almost-fixed-for-2025.toe (141.9 KB)
Hello, I had a quick look and didn’t see anything obviously wrong, I’ll take a closer look in case there is a bug somewhere (maybe in SOPs)
In the mean time I tried loading the bird asset in the simple crowd examples demonstrating the GLSL Copy POP, this went quite smoothly.
here’s the tweaked toe (should be put in same location as TD-Boids_almost-fixed-for-2025.toe)
It uses the same tox for baking to texture the animation.
GLSLCopyPOPBird.toe (29.1 KB)
The POPs workflow above separates the geometry animation from rendering making it a bit easier to tweak things (uses a bit more memory than instancing though)
1 Like
Hello again,
Sorry I was away a bit but looking at this again, I can confirm there are bugs related to skinning deformation with SOPs in 32050, we’ll aim to fix it for the next release, I’ll update this post.
In the mean time, here’s the original setup tweaked to use a bird POP as the source of instancing, the shader also needed a few more tweaks (TDPos() instead of P, TDNormal() instead of N, TDTexAttrib(0) for uv, TDAttrib_T() for tangent, Tex and T need to be declared on Attributes page).
TD-Boids_fixed-for-2025_with_POP.toe (144.4 KB)
And I updated the setup in comment above adding back instancing to the mix, since the MAT is easier to understand than in TD-Boids and it can be useful to save memory compared to GLSL Copy method
GLSLCopyPOPAndInstancingBird.toe (47.0 KB)
The overall setup can also be simplified quite a bit doing the simulation in POPs using neighbor POP etc. We’ll continue adding features to simplify further.
1 Like
Thanks for these examples @vincentDev . We’ve all been struggling with this for several years how to instance offset time on geometry. I looked through the examples and they are good. In the examples FBX needs to be cached to that “MakeDeformCacheTexture” Top process, whcih only works if you have 1 skinned mesh… well some FBX models unfortuantely have multiple skinned meshes, meaning you’d have to repeat the process several times for each piece of geo. In an ideal world there might be a way to do this kind of thing with an Alembic… so regardless of how your model is prepared from an outside application, you could just export a single merged alembic.. then make a cache texture top (or whatever is needed) and then do the animated offset instances based on that. because every model can be merged into a single animated alembic, this might be a more robust and uniform way to do this kind of thing in the future. (although FBX and bone deformations can have their advantages with speed over point caches at times)
I might also add that somehow a RFE could be added to the FBX container so that it contained a “specialized instance geo” page that would allow you to copy entire FBX multiple instances on the FBX container with a time offset parameter. I know that takes a bit of work under the hood.. . but this is what we are all looking for.