I’ve spent some time examining the sourcecode of DecalSet to try to understand the skinning aspect of it… It appears that the magic happens in the AddDecal method, where we pass in a target Drawable.
If that drawable is skinned, then the whole DecalSet object switches into “skinned mode” (I don’t know what happens to any static world decals we already added to the set?) which tracks bone transforms to drive the decals (again not sure what happens to existing static decals).
It looks like I need to dedicate at least one DecalSet to the static world, and another for each kinematic object, whether or not it is skinned.
Also, DecalSet appears to have no support for “AutoRemove”… that’s not a good fit with particle splatter… the HandleScenePostUpdate method does remove decals whose lifetime has expired, but does not auto-remove the component when the count reaches zero - we’re stuck with polling the count of all DecalSet instances manually, from outside of that class.