I haven’t posted about this yet, but for a while now I’ve been talking outside of this forum about a need to publish a new official document on COLLADA’s homepage.
So far I have two MAJOR CONCERNS for COLLADA, if it’s ever to be a workable standard. The thought behind this effort is to change COLLADA without affecting the schema, and without doing anything that requires parties at Khronos be in agreement since it seems like if changing COLLADA was so simple it would’ve been changed by now many times.
Concern 1) Morph-animations are not a thing. <morph> is thought to be complementary to <skin> but <skin> is for animation, but <morph> is for what? Well it turns out not animation, or it cannot do animation anyway. Dramatic works require a morph-animation feature. Without that COLLADA is a nonstarter.
Concern 2) I started working with Physics a few days ago. If you thought COLLADA was bad. You probably haven’t looked at Physics yet! Because woah darling, Physics takes the cake. It has a whole host of problems. But there’s just one that is really in need of addressing. The others are less significant, and probably cannot be addressed. The short version is a Physics document cannot use <instance_node> and that many of Physics’ <instance_*> elements use URIs instead of SIDREFs in a way that just doesn’t make any sense at all, because it’s meaningless for the Physics simulation to refer to an external document, and to only use the # fragment part of the URI for internal references is so restrictive that it means <instance_node> cannot be used, and that SIDs cannot be used to address nodes.
To address concern 1) my recommendation is just to let animations target the morph weights in their <source>. They can either target the <float_array> by ID or the <source> by ID which would work like an <instance_> element by following the <accessor> URL to the external <float_array>. To achieve this I want to say that A) if no SID is found, then it decays into an ID. This also solves ambiguous wording in the manual which fails to distinguish between SIDs and IDs. And that a <_array> is not special. It is a value like anything else, and can be the target of an animation. It’s not raw data. Functionally there is no difference. It’s targetable. That doesn’t necessarily mean you should target it. But yes, if you want to animate a single vertex or something, then you can do that. (Maybe software will honor it, maybe it won’t.)
To address concern 2) my recommendation is to treat the degenerate/meaningless anyURI references like HTML treats its # fragments. That is a # in a URL can either refer to an “id” or a “title” attribute. To let the Physics node bindings work as SIDREFs as they clearly should have worked from ALWAYS the new rule is that a # fragment that refers to a COLLADA region can be a SIDREF. This is probably not useful outside of being a bandaid for Physics. A #SIDREF should just begin with #. It needs to be case-sensitive to be able to compare the reference as a unique-string (since the target itself doesn’t describe the path to it) and full URLs are not case-sensitive. And furthermore external SIDREFs are meaningless in a normal context.
(EDITED: I wrote case-INsensitive before. I meant that SIDREFs should be equal regardless of case. Not that the case should be considered. Which means “insenstive” in one intuitive sense of the word, but not in terms of string-comparisons, where insensitive means being sensitive to the case: that’s a little messed up if you think about it.)
Both of these fixes deal with interpreting SIDREF references. The Physics #SIDREF is a completely legit URI. But like I say, where it’s needed a URI doesn’t even make sense. COLLADA Physics is a misfire. If we cannot get these corrections instituted then we can only conclude someone made Khronos sabotage COLLADA. THESE ARE VERY SERIOUS ALLEGATIONS