Próbowałem użyć FBX SDK (2011.3.1), aby załadować pliki FBX i zapisać je jako pliki Collada, aby móc importować pliki FBX w Panda3D. Niestety powstałe pliki Collada nie są użyteczne z kilku powodów, między innymi:
- Istnieje dodatkowa technika specyficzna dla Majów
rozproszony
<diffuse>
<texture texture="Map__2-image" texcoord="CHANNEL0">
<extra>
<technique profile="MAYA">
<wrapU sid="wrapU0">TRUE</wrapU>
<wrapV sid="wrapV0">TRUE</wrapV>
<blend_mode>ADD</blend_mode>
</technique>
</extra>
</texture>
</diffuse>
Przypisuje nazwę kanału texcoord, do którego nie ma odniesienia w innym miejscu pliku (w poprzednim przykładzie kodu żadna geometria nie używa „CHANNEL0” ...)
Każdy wielokąt jest eksportowany dwa razy, po raz pierwszy z materiałem podstawowym (tylko kolor rozproszony, kolor zwierciadłowy itp.), A drugi raz z materiałem teksturowanym -> podwaja to liczbę wielokątów każdego modelu bez żadnego cennego powodu
W każdym razie wynikowy plik Collada nie może zostać poprawnie otwarty za pomocą OpenCOLLADA lub „dae2egg” Panda3D.
Czy ktoś ma jakieś doświadczenie w tym, jak to „naprawić” i uczynić zrozumiałym przez popularnych i renomowanych importerów Collada, takich jak OpenCOLLADA?
Odpowiedzi:
Narzędzie AC # jest tutaj Twoim przyjacielem - możesz szybko napisać coś przy użyciu frameworku .NET System.Xml, który iteruje plik wejściowy, wykrywa części, które ci się nie podobają, i eliminuje (lub poprawia) je z dokumentu przed zapisaniem znowu. W rzeczywistości tak właśnie działa XSLT, ale w praktyce zawsze łatwiej mi było napisać kod C # opisujący transformację niż znaleźć tajemniczą składnię XSLT, aby zrobić to samo.
Musisz spojrzeć na „złe” przypadki i dostrzec, co mają ze sobą wspólnego. Na przykład, jeśli wszystkie techniki rozproszone, które mają teksturę używającą texcoord = "CHANNEL0", łatwo to znaleźć. Po prostu iteruj wszystkie obiekty i dla każdego obiektu sprawdź wszystkie jego techniki pod kątem atrybutu obrażającego. Jeśli go nie znajdziesz, dodaj węzeł do dokumentu wyjściowego i przejdź dalej. Jeśli nie rozpoznajesz węzła, dodaj go do wyjścia i przejdź dalej. Jeśli go znajdziesz, nie zawracaj sobie głowy dodaniem go do dokumentu wyjściowego, a zostanie on skutecznie usunięty.
Wykrywanie zduplikowanych wielokątów jest jednak nieco trudniejsze, ponieważ trzeba przeanalizować każdą parę wielokątów pod kątem równoważności. Byłoby o wiele prostsze, gdybyś mógł zdecydować się na regułę, taką jak: „Nie dbam o płaskie wielokąty, tylko teksturowane wielokąty”, wtedy możesz po prostu odrzucić odpowiednie wielokąty.
Jednak wydaje mi się bardzo dziwne, że w rzeczywistości dostajesz duplikaty; powielanie geometrii jest z oczywistych względów wielkim nie-nie, więc jestem zaskoczony, że FBX to zrobiłby. Używałem tylko Collady z Maya / Max, więc nie mogłem ręczyć za to, co produkuje FBX. Ale zapytam, czy jesteś bardzo podwójnie pewien, że tak naprawdę w pliku FBX nie ma zduplikowanej geometrii?
źródło
Znajdź lub napisz innego eksportera, a może (ponieważ pliki Collada to tylko XML) użyj [XSLT] [1], aby przekształcić niepożądane dane w bardziej uogólnioną formę?
źródło