private void ExportCollada_NodeSub(XmlWriter xml, IReadOnlyList<string> boneNames, Kn5Node node) {
xml.WriteStartElement("node");
xml.WriteAttributeStringSafe("id", node.Name);
xml.WriteAttributeStringSafe("sid", node.Name);
xml.WriteAttributeStringSafe("name", node.Name);
xml.WriteAttributeString("layer", node.Active ? "Visible" : "Hidden");
xml.WriteAttributeString("type", node.NodeClass == Kn5NodeClass.Base && boneNames.Contains(node.Name) ? "JOINT" : "NODE");
if (node.Children?.FirstOrDefault()?.NodeClass != Kn5NodeClass.SkinnedMesh) {
xml.WriteElement("matrix",
"sid", "transform",
node.NodeClass == Kn5NodeClass.Base ? XmlWriterExtension.MatrixToCollada(node.Transform) : "1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0");
}
if (IsMultiMaterial(node) && node.Children != null) {
xml.WriteStartElement("instance_geometry");
xml.WriteAttributeStringSafe("url", $"#{node.Name}-mesh");
ExportCollada_NodeSub_BindMaterial(xml, node.Children.Select(x => x.MaterialId).ToArray());
xml.WriteEndElement();
} else {
ExportCollada_NodeSub_Inner(xml, boneNames, node);
}
xml.WriteEndElement(); // node
}
}