วิธีแก้ไข Collada ที่เสียที่ผลิตโดย FBX


10

ฉันพยายามใช้ FBX SDK (2011.3.1) เพื่อโหลดไฟล์ FBX และบันทึกเป็นไฟล์ Collada เพื่อให้สามารถนำเข้าไฟล์ FBX ใน Panda3D ได้ น่าเสียดายที่ไฟล์ Collada ที่ได้นั้นไม่สามารถใช้ได้หลายสาเหตุ:

  • มีเทคนิคพิเศษเฉพาะของมายา

กระจาย

<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>
  • มันกำหนดชื่อแชนเนล Texcoord ที่ไม่ได้อ้างถึงที่อื่นในไฟล์ (ในตัวอย่างโค้ดก่อนหน้านี้ไม่มีรูปทรงเรขาคณิตที่ใช้ "CHANNEL0" ... )

  • รูปหลายเหลี่ยมทุกอันจะถูกส่งออกสองครั้งครั้งแรกกับวัสดุพื้นฐาน (เฉพาะสีกระจาย, สี specular, ฯลฯ ) และครั้งที่สองด้วยวัสดุพื้นผิว -> สิ่งนี้จะเพิ่มจำนวนรูปหลายเหลี่ยมของแต่ละรุ่นโดยไม่มีเหตุผลอันมีค่า

อย่างไรก็ตามไฟล์ Collada ที่ได้นั้นไม่สามารถเปิดได้อย่างถูกต้องด้วย OpenCOLLADA หรือ "dae2egg" ของ Panda3D

ทุกคนมีประสบการณ์เกี่ยวกับวิธี "แก้ไข" และทำให้เข้าใจได้โดยผู้นำเข้า Collada ทั่วไปและมีชื่อเสียงเช่น OpenCOLLADA


3
นี่เป็นปัญหาใหญ่ที่ฉันพบกับ Collada: จริง ๆ แล้วมันไม่ได้มีประโยชน์อย่างมากสำหรับการขนส่งข้อมูลระหว่างเครื่องมือโดยพลการที่สนับสนุนการใช้งานเพราะมันเป็นรูปแบบที่มากเกินไป สามารถมีข้อมูลเกือบคีมาใด ๆ และยังคงเป็นไฟล์ Collada ที่ถูกต้องตามมาตรฐานที่ผู้นำเข้าที่คุณใช้ไม่สามารถจัดการได้ มันมีประโยชน์มากกว่าเล็กน้อยในรูปแบบการแลกเปลี่ยนข้อมูลเมื่อคุณควบคุมผู้นำเข้า / ผู้ส่งออกได้มากขึ้นหรือมีเครื่องมือในการสร้าง Collada ตามที่คุณต้องการ

1
@ Josh: อย่างน้อยมันเป็นมนุษย์อ่านได้ซึ่งแตกต่างจากรูปแบบไบนารีปิด อย่างน้อยที่สุดด้วย Collada คุณสามารถสร้างเครื่องมือและสคริปต์ที่สามารถแปลจากชุดข้อมูลหนึ่งไปยังอีกชุดหนึ่งได้ Interop เป็นไปได้อย่างน้อยที่สุดถึงแม้ว่ามันจะต้องมีงานพิเศษ
Nicol Bolas

คำตอบ:


2

เครื่องมือ AC # คือเพื่อนของคุณที่นี่คุณสามารถเขียนบางอย่างได้อย่างรวดเร็วโดยใช้. NET System.Xml framework ซึ่งวนซ้ำผ่านไฟล์อินพุตพบชิ้นส่วนที่คุณไม่ชอบและกำจัด (หรือปรับแต่ง) จากเอกสารก่อนที่จะเขียนกลับ ออกมาอีกครั้ง อย่างมีประสิทธิภาพนั่นคือสิ่งที่ XSLT ทำ แต่ในทางปฏิบัติฉันมักจะพบว่าเป็นการง่ายกว่าที่จะเขียนโค้ด C # เพื่ออธิบายการเปลี่ยนแปลงมากกว่าการหาไวยากรณ์ XSLT ที่เข้ารหัสลับเพื่อทำสิ่งเดียวกัน

สิ่งที่คุณต้องทำคือดูที่กรณี 'ไม่ดี' และดูสิ่งที่พวกเขามีเหมือนกัน ตัวอย่างเช่นหากเทคนิคการกระจายทั้งหมดที่มีพื้นผิวซึ่งใช้ texcoord = "CHANNEL0" นั่นหาง่าย คุณเพียงแค่วนวัตถุทั้งหมดและสำหรับแต่ละวัตถุให้ตรวจสอบเทคนิคทั้งหมดสำหรับแอตทริบิวต์ที่ละเมิด หากคุณไม่พบมันให้เพิ่มโหนดไปยังเอกสารขาออกแล้วไปต่อ หากคุณไม่รู้จักโหนดให้เพิ่มโหนดนั้นไปยังเอาต์พุตและดำเนินการต่อ หากคุณพบมันอย่ากังวลที่จะเพิ่มลงในเอกสารขาออกและมันจะถูกลบอย่างมีประสิทธิภาพ

การสังเกตรูปหลายเหลี่ยมที่ซ้ำกันนั้นค่อนข้างยุ่งยากกว่าเนื่องจากคุณจะต้องวิเคราะห์รูปหลายเหลี่ยมแต่ละคู่เพื่อความเท่าเทียมกัน จะง่ายกว่านี้มากถ้าคุณสามารถตัดสินใจเกี่ยวกับกฎเช่น "ฉันไม่สนใจรูปหลายเหลี่ยมสีแบน, รูปหลายเหลี่ยมพื้นผิวเท่านั้น" จากนั้นคุณสามารถยกเลิกรูปหลายเหลี่ยมที่เหมาะสมได้

อย่างไรก็ตามดูเหมือนว่าแปลกมากสำหรับฉันที่คุณได้รับสิ่งที่ซ้ำซ้อน การทำซ้ำของรูปทรงเรขาคณิตนั้นเป็นเรื่องที่ไม่ใหญ่มากนักด้วยเหตุผลที่ชัดเจนดังนั้นฉันจึงประหลาดใจที่ FBX ทำเช่นนั้น ฉันเคยใช้ Collada กับ Maya / Max จึงไม่สามารถรับรองสิ่งที่ FBX ผลิตได้ แต่ฉันถามว่าคุณแน่ใจเป็นพิเศษหรือไม่ว่ามีรูปทรงเรขาคณิตที่ซ้ำกันในไฟล์ FBX จริง ๆ หรือไม่


ขอบคุณสำหรับคำตอบ. แน่นอนว่าฉันสามารถแก้ไขได้ในผู้นำเข้าของฉันเองฉันแค่มองหาใครบางคนที่พบแล้วและแก้ไขปัญหาเดียวกันนี้เพื่อที่ฉันจะได้แก้ไขแบบมาตรฐานและอาจใช้การแก้ไขปัญหาที่ฉันยังไม่ได้ค้นพบ
David

0

ค้นหาหรือเขียนผู้ส่งออกที่แตกต่างกันหรือบางที (เนื่องจากไฟล์ Collada เป็นเพียง XML) ใช้ [XSLT] [1] เพื่อแปลงข้อมูลที่ไม่ต้องการออกไปหรือเปลี่ยนเป็นรูปแบบทั่วไปมากขึ้น?


นั่นคือสิ่งที่ฉันกำลังทำอยู่ แต่ฉันกำลังมองหาใครสักคนที่ทำสิ่งนั้นอยู่แล้ว (ไม่ต้องพลิกโฉมพวงมาลัยใช่มั้ย)
เดวิด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.