dhemberg
I understand that what I am doing is - at least conceptually - instancing.
Nope, it's not instancing since the geometry is one giant primitive soup. Even if it were individually named primitives, it still wouldn't be instancing unless the geometry is instanced. Creating packed geometries in sops can translate as instances in solaris.
dhemberg
I can append a "name" node after the Copy/Stamping to create a name for this conglomeration of trees. In Solaris, I see a single prim in my Scene Hierarchy, with GeomSubsets that seem to correspond to the shop_materialpath attributes (so, a subset for the geometry that has a leaf shader assigned, and a different subset for trunks).
Using one name makes a single mesh, using geomsubsets for material assignments. The prim attributes for texture paths turn into a 'uniform' array attribute (per face). This works with the karma principled shader, but like you said some renderers don't support driving texture paths with shaders.
The USD way would be to create a material per texture path value. The material can be a reference to an existing material with an over. One way to create "referenced materials with layering" is to use material overrides to set the texture path rather than primitive attributes. This is still limited to the principled shader, but it demonstrates the layering.