This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

Mesh Upload Probleme meistern
#1
Mesh Upload Probleme (in komplexen Projekten) meistern


Gute Meshquellen gibt es viele, Links dazu finden sich hier im Forum.
Ob kostenlos oder gegen Bezahlung, sie bieten die Möglichkeit im eigene Grid etwas Individuelles zu haben
Die Datei ist schnell geholt, aber dann kommt die eigentliche Arbeit

Zunächst muss das Wandeln in eine DAE Datei erfolgen da die meisten Quellen die Dateien nur in Formaten .max .obj .fbx oder .3ds anbieten. Artikel dazu habe ich hier im Forum schon gepostet.
Meist landet das Wandlungs Ergebnis dann für einen letzten Zwischenschritt in Blender, was auch gleich genutzt wird um das Mesh vor dem Export zu untersuchen und zu reparieren.
Der .DAE Export wird im Anschluß im Simulator hochgeladen.

All dieses ist schon Inhalt etlicher Veröffentlichungen gewesen, und heute nicht Thema. Es stellt aber den Idealfall dar.
Oft läßt sich ein scheinbar intaktes Mesh, exportiert als DAE, dennoch nicht erfolgreich hochladen.

Nun sind wir im Thema dieses Artikels:

Ich werde versuchen meine Beobachtungen, Tricks und Tipps zur Reparatur von Mesh an euch weiter zu geben.
Ich sage gleich dazu das es Themenbedingt stets noch andere Fehlerquellen geben kann, und ermutige ausdrücklich eure Beobachtungen hier zu schreiben.

Ausgangslage sei also ein nicht hochladbares Mesh das in Blender (importiert oder erstellt) vorliegt.
Wir werden uns verschiedene Gründe dafür ansehen wie es zu diesem unbefriedigenden Zustand kommt, und versuchen diese Fehler zu bereinigen.

Unser Arbeitszyclus wird dabei immer gleich bleiben:
1. In Blender Korrekturen vornehmen
2. In Blender dae exportieren
3. In Firestorm dae hochladen probieren - Fehler notieren
4. In Blender zurückkehren und Fehler beheben
5. Gehe zurück auf 1.

Ich werde hier verschiedene Fehlerquellen anhand eines Komplexen Projektes beschreiben, und versuchen sie zu beseitigen:

PROBLEM - Projekt ist zu komplex:

   
Beispiel: Ich habe bei Cadnav.com ein tolles Segelschiff gefunden. Nach Wandlung ist es nun in Blender.
Wir sehen einen Menge Meshobjekte (orange Dreiecke) und insgesamt gut 450.000 Verticles.
450K Verticles in Blender werden aber zu ungefähr der doppelten Anzahl Dreiecken in Firestorm, da beide Programme den Begriff anders verwenden.

Erster Gedanke: Das kriegt man so nie hochgeladen. Bisher habe ich in Firefox korrekte Objekte bis ca 160K Dreiecke erfolgreich hochgeladen, aber mit den unten beschrieben Physik Tricks geht mehr.
Nachdem ich umfängliche Reparaturen in Blender gemacht habe um die Texturierung ordentlich hinzubekommen, teste ich zuerst mal mein Glück.
Sind wir früher davon augegangen das sowohl die Komplexität des Meshes, als auch eine zu hohe Renderzeit mittels Timer zum Abbruch führen kann,
steht mir heute nun bessere Hardware zur Verfügung, was es zumindest theoretisch ermöglicht mehr hochzuladen.

Testumgebung:
Die Tests mache ich auf einem 12Core AMD Threadriper Pro 3945WX mit 128GB RAM und M2-PCIEx4 SSDs. Als Grafik kommt eine Geforce RTX3080 zum Einsatz.
Firestorm ist lokal installiert, der Simulator läuft auf dem gleichen Rechner in einer VM. An Rechner, Netzwerk, Datenrate liegt es also nicht wenn was nicht klappt.
Uploads von komplexen intakten Meshes gehen in Sekunden, was vormals 5 Minuten brauchte.
Es zeigt sich aber auch sofort das Firestorm nicht ansatzweise die Hardware auslasten kann.
Die CPU Last geht nie über 15% im Meshupload, und die Grafik dümpelt bei 5% herum.
Es liegt nahe das Firestorm zum Berechnen des Meshes nur einen Core einsetzt.

Ich starte also mit einem Komplett Export des Projektes als DAE, und versuche diese im Uplaod Modul von Firestorm zu laden.
Das geht schon mal gar nicht. Das Mesh wird nicht einmal im Vorschau Monitor geladen. Fehler beim DAE Parsen.

LÖSUNG1: MESH Zerlegen, teilweise importieren, und inworld wieder zusammenbauen:
Also fange ich an das Gesamtprojekt in einzelne Teilexporte zu zerstückeln um diese getrennt zu laden.
Zunächst orientiere ich mich an den vorhandenen Meshelementen- was später inworld einzelne Prims eines Linksets darstellen.
Dazu ist es hilfreich ein Bezugselement zu haben das mit allen Meshobjekten exportiert wird, so kann man die Einzeluploads nachher inworld zuverlässig zusammensetzen.

- Dieses Hilfelement muss inworld durch Linkset auflösen und neu verlinken (das Referenzprim zuletzt anwählen!) zum PRIM1 werden.
Nun kann man mittels Baumenü alle Referenzprims auf gleiche Vektorposition schieben, und die Meshteile des komplexen Objektes genau passend übereinander legen.
Man verlinkt dann alles einzeln importierten Elemente, und trennt später die Referenzprims ab.
Aber erst wenn wirklich das gesamte Projekt fehlerfrei abgeschlossen ist, wird das letzte Referenzprim abgetennt!
Solange ein Referenzpim noch dran ist kann man weitere Korrekturen einfach nachladen und positionieren.
Als Referenzmesh mache ich ein neues Meshelement in Blender und nehme den Standard Würfel den ich auch 0/0/0 Position erstelle.
Ich achte bei der Namensgebung meines Referenzprims darauf, das er aufgrund der Namenssortierung ganz unten in Blender angezeigt wird. Also am besten mit Z... beginnnen.
Das wird für nachfolgenden Trick wichtig.

TRICK: MESHUPLOAD drastisch BESCHLEUNIGEN
Beobachtung: Beim Hochaden von komplexen Meshes dauert die Physikberechnung meist zehnerpotenzen länger als die Berechnung des eigentlichen Meshes.
Dazu ist sie wohl der am häufigsten vorkommende Grund warum ein Uplaod nach langer Wartezeit misslingt.
Meist brauche ich aber diese Physik Berechnung gar nicht, zum Beispiel bei Kleidung, kleinem Ambiente, oder Teilen von Fahrzeugen die nachher eh immer Phantom werden.
Ich kann sie aber nicht auf direkten Wege umgehen, jedoch austricksen.

Dieses Physik Austricksen geht so:
Man erstellt sich einen Würfel als DAE Datei. Dieser wird beim Einstellen der Meshuploads unter der Rubrik Physik, als "aus Datei laden" ausgewählt.
Neue Firestorm Viewer bietet das schon selber mit der Vorauswahl "Würfel" im Physikmenü an.

   

Diese Physik aus der Datei wird aber leider nur auf das Rootprim des Uploads angewendet.
Dann aber geht der Upload in Sekunden, was vorher für eine gemütliche Kaffeepause reichte.
Als Nebeneffekt entfällt nach 15 Minuten rendern die Fehlermeldung "missing physical Block" wenn Firstorm keine gültige Physikhülle berechnen konnte.
Ebenso kann man dadurch auch Mesh nun hochladen welches davor bereits im Physikreiter bei der Überprüfung, zu einer Fehlermeldung führte weil zuviele Physikflächen benötigt würden.

Wir müssen also in unserem Beispiel aufpassen das das Nutzmesh des Schiffs als rootprim geladen wird, und der Referenzprim die Primnummer 2 erhält.
Dafür ist die Namensgebung der Meshelemente in Blender wichtig. Blender sortiert die Meshelemente nach Namen, wobei das Oberste angezeigte das Rootprim beim Upload wird.

Werden mehrere Meshelemente hochgeladen, so kann man laut meinen Tests nur die Physik des ersten Rootprims beeinflussen. Der Rest wird stur berechnet.

Nun laden wir wie eben besprochen jeweils ein Nutzprim mit einem Referenzprim hoch. Dabei zeigt sich schnell in welchem Prim welcher Fehler liegt.
In meinem Musterbeispiel gelingt der Upload von ca 2/3 der Prims sofort. Der Rest muss untersucht und repariert werden.

Welche Fehlermeldungen in Firestorm sind bekannt:

FEHLER: - Firestorm Meldung zu viele Verticles:
  Ursache: ein Meshelement des Blender Linksets enthält mehr als 32768 Verticles, was zu über 65635 Dreiecken in der Firestorm Anzeige führt.
  Beachte das in Blender angezeigte Verts nicht das sind was Firestorm unter Verts versteht. In Blender werden diese Verticles als Tris angezeigt.
  Wählt man in Blender jedes Meshobjekt einzeln an, so werden in der oberen Leiste die Daten dieses Meshelements angezeigt.
  In diesem Foto steht "Tris 68410" - daher scheiterte der Upload. Der Tris Wert muss unter 32768 sinken damit der Upload geht.
  Die Zahlen sind nicht 2:1 rechenbar! Nur ungefähr stimmt dieser Wert.

   

Abhilfe: Teile das Meshobjekt in Blender.
Man geht in Blender in den Editmodus des betreffenden Meshelements.
Dann markiert man mit gehaltener Schift Taste so viele Flächen in Blender bis die Anzahl der nicht markeirten Dreiecke unter die kritischen Wert sinkt.
Nun wechselt man in den Object Modus dieses Meshelementes und kopiert es.
Dabei bleibt die vorher im Edit Modus getroffene Auswahl erhalten und wird auf beide Kopien dupliziert.
Nun wechselt man nacheinander in beiden Meshobjekten in den Edit Modus.
In einem löscht man die markierten Flächen, im Anderen invertiert man die Auswahl, und löscht dann die invertierte Auswahl.
Dies treibt man so lange bis jedes Meshelement die Kritische Verticles Zahl unterschreitet.
Nun wieder zu Arbeitspunkt 1 unseres Workflows.

FEHLER: - Fehler beim DAE Parsen:
Dies kann mehrere Ursachen haben. Denn hinter dieser Fehlermeldung verbirgt sich das die DAE Datei bei der Syntax Prüfung durchgefallen ist.
Dae Dateien sind eine im XML Format vorliegende Collada Textbeschreibungs Datei.
Nun gibt es aber von Collada viele Versionen dieser Beschreibungen wie eine dae datei aussehen soll, was ihr in folgenden Link nachschlagen könnt.

https://www.khronos.org/collada/

Wenn ihr einen dae Datei mit einem XML fähigen Editor wie Notepad++ öffnet, seht ihr das im Klartext:
Hier eine Collada Datei die Fehler beim DAE Parsen liefert:  (allerdings um Geometriedaten gekürzt um den Forumsserver zu schonen)

Code:
<?xml version="1.0" encoding="utf-8"?>
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <asset>
    <contributor>
      <author>Blender User</author>
      <authoring_tool>Blender 2.79.0 commit date:2018-03-22, commit time:14:10, hash:f4dc9f9d68b</authoring_tool>
    </contributor>
    <created>2022-08-03T12:38:27</created>
    <modified>2022-08-03T12:38:27</modified>
    <unit name="meter" meter="1"/>
    <up_axis>Z_UP</up_axis>
  </asset>
  <library_images>
    <image id="Holzplanken" name="Holzplanken">
      <init_from>/C:/Users/Tron/Desktop/Schiffe/140%20Sirene%20in%20ARBEIT/Max/cadnav.com_model/LA%20SIRENE%20SHIP%20OF%20LINE/SIREOLDM.jpg</init_from>
    </image>
  </library_images>
  <library_effects>
    <effect id="blue_painted_planks_diff_1k_png-effect">
      <profile_COMMON>
        <newparam sid="blue_painted_planks_diff_1k_png-surface">
          <surface type="2D">
            <init_from>blue_painted_planks_diff_1k_png</init_from>
          </surface>
        </newparam>
        <newparam sid="blue_painted_planks_diff_1k_png-sampler">
          <sampler2D>
            <source>blue_painted_planks_diff_1k_png-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="blue_painted_planks_diff_1k_png-sampler" texcoord="blue_painted_planks_diff_1k_png"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="planks_brown_10_diff_1k_png-effect">
      <profile_COMMON>
        <newparam sid="planks_brown_10_diff_1k_png-surface">
          <surface type="2D">
            <init_from>planks_brown_10_diff_1k_png</init_from>
          </surface>
        </newparam>
        <newparam sid="planks_brown_10_diff_1k_png-sampler">
          <sampler2D>
            <source>planks_brown_10_diff_1k_png-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="planks_brown_10_diff_1k_png-sampler" texcoord="planks_brown_10_diff_1k_png"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="Tex__1_001-effect">
      <profile_COMMON>
        <newparam sid="Tex__1_001-surface">
          <surface type="2D">
            <init_from>Tex__1_001</init_from>
          </surface>
        </newparam>
        <newparam sid="Tex__1_001-sampler">
          <sampler2D>
            <source>Tex__1_001-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="Tex__1_001-sampler" texcoord="Tex__1_001"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="_587_Piraten_Flagge_TJ_png-effect">
      <profile_COMMON>
        <newparam sid="_587_Piraten_Flagge_TJ_png-surface">
          <surface type="2D">
            <init_from>_587_Piraten_Flagge_TJ_png</init_from>
          </surface>
        </newparam>
        <newparam sid="_587_Piraten_Flagge_TJ_png-sampler">
          <sampler2D>
            <source>_587_Piraten_Flagge_TJ_png-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="_587_Piraten_Flagge_TJ_png-sampler" texcoord="_587_Piraten_Flagge_TJ_png"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="medieval_wood_diff_1k_png-effect">
      <profile_COMMON>
        <newparam sid="medieval_wood_diff_1k_png-surface">
          <surface type="2D">
            <init_from>medieval_wood_diff_1k_png</init_from>
          </surface>
        </newparam>
        <newparam sid="medieval_wood_diff_1k_png-sampler">
          <sampler2D>
            <source>medieval_wood_diff_1k_png-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="medieval_wood_diff_1k_png-sampler" texcoord="medieval_wood_diff_1k_png"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="Holzplanken-effect">
      <profile_COMMON>
        <newparam sid="Holzplanken-surface">
          <surface type="2D">
            <init_from>Holzplanken</init_from>
          </surface>
        </newparam>
        <newparam sid="Holzplanken-sampler">
          <sampler2D>
            <source>Holzplanken-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="Holzplanken-sampler" texcoord="Holzplanken"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="seil_geflochten_png-effect">
      <profile_COMMON>
        <newparam sid="seil_geflochten_png-surface">
          <surface type="2D">
            <init_from>seil_geflochten_png</init_from>
          </surface>
        </newparam>
        <newparam sid="seil_geflochten_png-sampler">
          <sampler2D>
            <source>seil_geflochten_png-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="seil_geflochten_png-sampler" texcoord="seil_geflochten_png"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="SIREOLDM2_JPG-effect">
      <profile_COMMON>
        <newparam sid="SIREOLDM2_JPG-surface">
          <surface type="2D">
            <init_from>SIREOLDM2_JPG</init_from>
          </surface>
        </newparam>
        <newparam sid="SIREOLDM2_JPG-sampler">
          <sampler2D>
            <source>SIREOLDM2_JPG-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="SIREOLDM2_JPG-sampler" texcoord="SIREOLDM2_JPG"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="rough_wood_Diff_1k_png-effect">
      <profile_COMMON>
        <newparam sid="rough_wood_Diff_1k_png-surface">
          <surface type="2D">
            <init_from>rough_wood_Diff_1k_png</init_from>
          </surface>
        </newparam>
        <newparam sid="rough_wood_Diff_1k_png-sampler">
          <sampler2D>
            <source>rough_wood_Diff_1k_png-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="rough_wood_Diff_1k_png-sampler" texcoord="rough_wood_Diff_1k_png"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="IMG_0449_Rost_seamless_1K_TJ_png-effect">
      <profile_COMMON>
        <newparam sid="IMG_0449_Rost_seamless_1K_TJ_png-surface">
          <surface type="2D">
            <init_from>IMG_0449_Rost_seamless_1K_TJ_png</init_from>
          </surface>
        </newparam>
        <newparam sid="IMG_0449_Rost_seamless_1K_TJ_png-sampler">
          <sampler2D>
            <source>IMG_0449_Rost_seamless_1K_TJ_png-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="IMG_0449_Rost_seamless_1K_TJ_png-sampler" texcoord="IMG_0449_Rost_seamless_1K_TJ_png"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="medieval_wood_diff_1k_quer_png-effect">
      <profile_COMMON>
        <newparam sid="medieval_wood_diff_1k_quer_png-surface">
          <surface type="2D">
            <init_from>medieval_wood_diff_1k_quer_png</init_from>
          </surface>
        </newparam>
        <newparam sid="medieval_wood_diff_1k_quer_png-sampler">
          <sampler2D>
            <source>medieval_wood_diff_1k_quer_png-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="medieval_wood_diff_1k_quer_png-sampler" texcoord="medieval_wood_diff_1k_quer_png"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="Seil2_png-effect">
      <profile_COMMON>
        <newparam sid="Seil2_png-surface">
          <surface type="2D">
            <init_from>Seil2_png</init_from>
          </surface>
        </newparam>
        <newparam sid="Seil2_png-sampler">
          <sampler2D>
            <source>Seil2_png-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="Seil2_png-sampler" texcoord="Seil2_png"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="Tex__1_012-effect">
      <profile_COMMON>
        <newparam sid="Tex__1_012-surface">
          <surface type="2D">
            <init_from>Tex__1_012</init_from>
          </surface>
        </newparam>
        <newparam sid="Tex__1_012-sampler">
          <sampler2D>
            <source>Tex__1_012-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="Tex__1_012-sampler" texcoord="Tex__1_012"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="Tex__2_002-effect">
      <profile_COMMON>
        <newparam sid="Tex__2_002-surface">
          <surface type="2D">
            <init_from>Tex__2_002</init_from>
          </surface>
        </newparam>
        <newparam sid="Tex__2_002-sampler">
          <sampler2D>
            <source>Tex__2_002-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="Tex__2_002-sampler" texcoord="Tex__2_002"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="Tex__3-effect">
      <profile_COMMON>
        <newparam sid="Tex__3-surface">
          <surface type="2D">
            <init_from>Tex__3</init_from>
          </surface>
        </newparam>
        <newparam sid="Tex__3-sampler">
          <sampler2D>
            <source>Tex__3-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="Tex__3-sampler" texcoord="Tex__3"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="Tex__2_001-effect">
      <profile_COMMON>
        <newparam sid="Tex__2_001-surface">
          <surface type="2D">
            <init_from>Tex__2_001</init_from>
          </surface>
        </newparam>
        <newparam sid="Tex__2_001-sampler">
          <sampler2D>
            <source>Tex__2_001-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="Tex__2_001-sampler" texcoord="Tex__2_001"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="Tex__1_002-effect">
      <profile_COMMON>
        <newparam sid="Tex__1_002-surface">
          <surface type="2D">
            <init_from>Tex__1_002</init_from>
          </surface>
        </newparam>
        <newparam sid="Tex__1_002-sampler">
          <sampler2D>
            <source>Tex__1_002-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="Tex__1_002-sampler" texcoord="Tex__1_002"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="Tex__1_009-effect">
      <profile_COMMON>
        <newparam sid="Tex__1_009-surface">
          <surface type="2D">
            <init_from>Tex__1_009</init_from>
          </surface>
        </newparam>
        <newparam sid="Tex__1_009-sampler">
          <sampler2D>
            <source>Tex__1_009-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="Tex__1_009-sampler" texcoord="Tex__1_009"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="Tex__1_004-effect">
      <profile_COMMON>
        <newparam sid="Tex__1_004-surface">
          <surface type="2D">
            <init_from>Tex__1_004</init_from>
          </surface>
        </newparam>
        <newparam sid="Tex__1_004-sampler">
          <sampler2D>
            <source>Tex__1_004-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="Tex__1_004-sampler" texcoord="Tex__1_004"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="Tex__1_011-effect">
      <profile_COMMON>
        <newparam sid="Tex__1_011-surface">
          <surface type="2D">
            <init_from>Tex__1_011</init_from>
          </surface>
        </newparam>
        <newparam sid="Tex__1_011-sampler">
          <sampler2D>
            <source>Tex__1_011-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="Tex__1_011-sampler" texcoord="Tex__1_011"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="Tex__1_010-effect">
      <profile_COMMON>
        <newparam sid="Tex__1_010-surface">
          <surface type="2D">
            <init_from>Tex__1_010</init_from>
          </surface>
        </newparam>
        <newparam sid="Tex__1_010-sampler">
          <sampler2D>
            <source>Tex__1_010-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="Tex__1_010-sampler" texcoord="Tex__1_010"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="Tex__1_003-effect">
      <profile_COMMON>
        <newparam sid="Tex__1_003-surface">
          <surface type="2D">
            <init_from>Tex__1_003</init_from>
          </surface>
        </newparam>
        <newparam sid="Tex__1_003-sampler">
          <sampler2D>
            <source>Tex__1_003-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="Tex__1_003-sampler" texcoord="Tex__1_003"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="Tex__1_006-effect">
      <profile_COMMON>
        <newparam sid="Tex__1_006-surface">
          <surface type="2D">
            <init_from>Tex__1_006</init_from>
          </surface>
        </newparam>
        <newparam sid="Tex__1_006-sampler">
          <sampler2D>
            <source>Tex__1_006-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="Tex__1_006-sampler" texcoord="Tex__1_006"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="Tex__1_008-effect">
      <profile_COMMON>
        <newparam sid="Tex__1_008-surface">
          <surface type="2D">
            <init_from>Tex__1_008</init_from>
          </surface>
        </newparam>
        <newparam sid="Tex__1_008-sampler">
          <sampler2D>
            <source>Tex__1_008-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="Tex__1_008-sampler" texcoord="Tex__1_008"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="Tex__1_007-effect">
      <profile_COMMON>
        <newparam sid="Tex__1_007-surface">
          <surface type="2D">
            <init_from>Tex__1_007</init_from>
          </surface>
        </newparam>
        <newparam sid="Tex__1_007-sampler">
          <sampler2D>
            <source>Tex__1_007-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="Tex__1_007-sampler" texcoord="Tex__1_007"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="Tex__1_005-effect">
      <profile_COMMON>
        <newparam sid="Tex__1_005-surface">
          <surface type="2D">
            <init_from>Tex__1_005</init_from>
          </surface>
        </newparam>
        <newparam sid="Tex__1_005-sampler">
          <sampler2D>
            <source>Tex__1_005-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="Tex__1_005-sampler" texcoord="Tex__1_005"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="Tex__1_013-effect">
      <profile_COMMON>
        <newparam sid="Tex__1_013-surface">
          <surface type="2D">
            <init_from>Tex__1_013</init_from>
          </surface>
        </newparam>
        <newparam sid="Tex__1_013-sampler">
          <sampler2D>
            <source>Tex__1_013-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="Tex__1_013-sampler" texcoord="Tex__1_013"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="Tex__2_003-effect">
      <profile_COMMON>
        <newparam sid="Tex__2_003-surface">
          <surface type="2D">
            <init_from>Tex__2_003</init_from>
          </surface>
        </newparam>
        <newparam sid="Tex__2_003-sampler">
          <sampler2D>
            <source>Tex__2_003-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="Tex__2_003-sampler" texcoord="Tex__2_003"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
    <effect id="Tex__3_001-effect">
      <profile_COMMON>
        <newparam sid="Tex__3_001-surface">
          <surface type="2D">
            <init_from>Tex__3_001</init_from>
          </surface>
        </newparam>
        <newparam sid="Tex__3_001-sampler">
          <sampler2D>
            <source>Tex__3_001-surface</source>
          </sampler2D>
        </newparam>
        <technique sid="common">
          <phong>
            <diffuse>
              <texture texture="Tex__3_001-sampler" texcoord="Tex__3_001"/>
            </diffuse>
            <specular>
              <color sid="specular">0 0 0 1</color>
            </specular>
          </phong>
        </technique>
      </profile_COMMON>
    </effect>
  </library_effects>
  <library_materials>
    <material id="blue_painted_planks_diff_1k_png-material" name="blue_painted_planks_diff_1k_png">
      <instance_effect url="#blue_painted_planks_diff_1k_png-effect"/>
    </material>
    <material id="planks_brown_10_diff_1k_png-material" name="planks_brown_10_diff_1k_png">
      <instance_effect url="#planks_brown_10_diff_1k_png-effect"/>
    </material>
    <material id="Tex__1_001-material" name="Tex__1_001">
      <instance_effect url="#Tex__1_001-effect"/>
    </material>
    <material id="_587_Piraten_Flagge_TJ_png-material" name="_587_Piraten_Flagge_TJ_png">
      <instance_effect url="#_587_Piraten_Flagge_TJ_png-effect"/>
    </material>
    <material id="medieval_wood_diff_1k_png-material" name="medieval_wood_diff_1k_png">
      <instance_effect url="#medieval_wood_diff_1k_png-effect"/>
    </material>
    <material id="Holzplanken-material" name="Holzplanken">
      <instance_effect url="#Holzplanken-effect"/>
    </material>
    <material id="seil_geflochten_png-material" name="seil_geflochten_png">
      <instance_effect url="#seil_geflochten_png-effect"/>
    </material>
    <material id="SIREOLDM2_JPG-material" name="SIREOLDM2_JPG">
      <instance_effect url="#SIREOLDM2_JPG-effect"/>
    </material>
    <material id="rough_wood_Diff_1k_png-material" name="rough_wood_Diff_1k_png">
      <instance_effect url="#rough_wood_Diff_1k_png-effect"/>
    </material>
    <material id="IMG_0449_Rost_seamless_1K_TJ_png-material" name="IMG_0449_Rost_seamless_1K_TJ_png">
      <instance_effect url="#IMG_0449_Rost_seamless_1K_TJ_png-effect"/>
    </material>
    <material id="medieval_wood_diff_1k_quer_png-material" name="medieval_wood_diff_1k_quer_png">
      <instance_effect url="#medieval_wood_diff_1k_quer_png-effect"/>
    </material>
    <material id="Seil2_png-material" name="Seil2_png">
      <instance_effect url="#Seil2_png-effect"/>
    </material>
    <material id="Tex__1_012-material" name="Tex__1_012">
      <instance_effect url="#Tex__1_012-effect"/>
    </material>
    <material id="Tex__2_002-material" name="Tex__2_002">
      <instance_effect url="#Tex__2_002-effect"/>
    </material>
    <material id="Tex__3-material" name="Tex__3">
      <instance_effect url="#Tex__3-effect"/>
    </material>
    <material id="Tex__2_001-material" name="Tex__2_001">
      <instance_effect url="#Tex__2_001-effect"/>
    </material>
    <material id="Tex__1_002-material" name="Tex__1_002">
      <instance_effect url="#Tex__1_002-effect"/>
    </material>
    <material id="Tex__1_009-material" name="Tex__1_009">
      <instance_effect url="#Tex__1_009-effect"/>
    </material>
    <material id="Tex__1_004-material" name="Tex__1_004">
      <instance_effect url="#Tex__1_004-effect"/>
    </material>
    <material id="Tex__1_011-material" name="Tex__1_011">
      <instance_effect url="#Tex__1_011-effect"/>
    </material>
    <material id="Tex__1_010-material" name="Tex__1_010">
      <instance_effect url="#Tex__1_010-effect"/>
    </material>
    <material id="Tex__1_003-material" name="Tex__1_003">
      <instance_effect url="#Tex__1_003-effect"/>
    </material>
    <material id="Tex__1_006-material" name="Tex__1_006">
      <instance_effect url="#Tex__1_006-effect"/>
    </material>
    <material id="Tex__1_008-material" name="Tex__1_008">
      <instance_effect url="#Tex__1_008-effect"/>
    </material>
    <material id="Tex__1_007-material" name="Tex__1_007">
      <instance_effect url="#Tex__1_007-effect"/>
    </material>
    <material id="Tex__1_005-material" name="Tex__1_005">
      <instance_effect url="#Tex__1_005-effect"/>
    </material>
    <material id="Tex__1_013-material" name="Tex__1_013">
      <instance_effect url="#Tex__1_013-effect"/>
    </material>
    <material id="Tex__2_003-material" name="Tex__2_003">
      <instance_effect url="#Tex__2_003-effect"/>
    </material>
    <material id="Tex__3_001-material" name="Tex__3_001">
      <instance_effect url="#Tex__3_001-effect"/>
    </material>
  </library_materials>
  <library_geometries>
    <geometry id="_073Takelageholz1_0_9K_OK-mesh" name="0073Takelageholz1 0.9K OK">
      <mesh>
        <source id="_073Takelageholz1_0_9K_OK-mesh-positions">
          <float_array id="_073Takelageholz1_0_9K_OK-mesh-positions-array" count="2640">4.096275 -1.146764 1.001157 ...   HIER LIEGEN UNZÄHLIGE GEOMETRIE DATEN ....  1.137058 2.724982 -5.684546 1.139298 2.723041</float_array>
          <technique_common>
            <accessor source="#_073Takelageholz1_0_9K_OK-mesh-positions-array" count="880" stride="3">
              <param name="X" type="float"/>
              <param name="Y" type="float"/>
              <param name="Z" type="float"/>
            </accessor>
          </technique_common>
        </source>
        <source id="_073Takelageholz1_0_9K_OK-mesh-normals">
          <float_array id="_073Takelageholz1_0_9K_OK-mesh-normals-array" count="5928">0.03372699 -0.9994295 0.001769185 ...   HIER LIEGEN UNZÄHLIGE GEOMETRIE DATEN ....  -0.3747135 -0.1323949 0.9206841 -0.367168</float_array>
          <technique_common>
            <accessor source="#_073Takelageholz1_0_9K_OK-mesh-normals-array" count="1976" stride="3">
              <param name="X" type="float"/>
              <param name="Y" type="float"/>
              <param name="Z" type="float"/>
            </accessor>
          </technique_common>
        </source>
        <source id="_073Takelageholz1_0_9K_OK-mesh-map">
          <float_array id="_073Takelageholz1_0_9K_OK-mesh-map-array" count="9168">0.554894 0.1041238 0.5781096 0.08640754 ...   HIER LIEGEN UNZÄHLIGE GEOMETRIE DATEN .... 0.949736 0.4484052 0.937247 0.5943775 0.937247</float_array>
          <technique_common>
            <accessor source="#_073Takelageholz1_0_9K_OK-mesh-map-array" count="4584" stride="2">
              <param name="S" type="float"/>
              <param name="T" type="float"/>
            </accessor>
          </technique_common>
        </source>
        <vertices id="_073Takelageholz1_0_9K_OK-mesh-vertices">
          <input semantic="POSITION" source="#_073Takelageholz1_0_9K_OK-mesh-positions"/>
        </vertices>
        <triangles material="Holzplanken-material" count="1528">
          <input semantic="VERTEX" source="#_073Takelageholz1_0_9K_OK-mesh-vertices" offset="0"/>
          <input semantic="NORMAL" source="#_073Takelageholz1_0_9K_OK-mesh-normals" offset="1"/>
          <input semantic="TEXCOORD" source="#_073Takelageholz1_0_9K_OK-mesh-map" offset="2" set="0"/>
          <p>64 0 0 ...   HIER LIEGEN UNZÄHLIGE GEOMETRIE DATEN .... 367 176 4583</p>
        </triangles>
      </mesh>
    </geometry>
    <geometry id="A00000Cube-mesh" name="A00000Cube">
      <mesh>
        <source id="A00000Cube-mesh-positions">
          <float_array id="A00000Cube-mesh-positions-array" count="24">-1 -1 -1 -1 -1 1 -1 1 -1 -1 1 1 1 -1 -1 1 -1 1 1 1 -1 1 1 1</float_array>
          <technique_common>
            <accessor source="#A00000Cube-mesh-positions-array" count="8" stride="3">
              <param name="X" type="float"/>
              <param name="Y" type="float"/>
              <param name="Z" type="float"/>
            </accessor>
          </technique_common>
        </source>
        <source id="A00000Cube-mesh-normals">
          <float_array id="A00000Cube-mesh-normals-array" count="18">-1 0 0 0 1 0 1 0 0 0 -1 0 0 0 -1 0 0 1</float_array>
          <technique_common>
            <accessor source="#A00000Cube-mesh-normals-array" count="6" stride="3">
              <param name="X" type="float"/>
              <param name="Y" type="float"/>
              <param name="Z" type="float"/>
            </accessor>
          </technique_common>
        </source>
        <vertices id="A00000Cube-mesh-vertices">
          <input semantic="POSITION" source="#A00000Cube-mesh-positions"/>
        </vertices>
        <triangles count="12">
          <input semantic="VERTEX" source="#A00000Cube-mesh-vertices" offset="0"/>
          <input semantic="NORMAL" source="#A00000Cube-mesh-normals" offset="1"/>
          <p>1 0 2  HIER LIEGEN UNZÄHLIGE GEOMETRIE DATEN 3 5 1 5 5 5</p>
        </triangles>
      </mesh>
    </geometry>
  </library_geometries>
  <library_visual_scenes>
    <visual_scene id="Scene" name="Scene">
      <node id="_073Takelageholz1_0_9K_OK" name="_073Takelageholz1_0_9K_OK" type="NODE">
        <matrix sid="transform">-6.56362e-7 2.090881 3.15714e-7 0 2.090881 6.56362e-7 7.73981e-14 0 2.17098e-14 -3.15714e-7 2.090881 0 0 0 0 1</matrix>
        <instance_geometry url="#_073Takelageholz1_0_9K_OK-mesh" name="_073Takelageholz1_0_9K_OK">
          <bind_material>
            <technique_common>
              <instance_material symbol="Holzplanken-material" target="#Holzplanken-material">
                <bind_vertex_input semantic="UVChannel_1" input_semantic="TEXCOORD" input_set="0"/>
              </instance_material>
            </technique_common>
          </bind_material>
        </instance_geometry>
      </node>
      <node id="A00000Cube" name="A00000Cube" type="NODE">
        <matrix sid="transform">1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1</matrix>
        <instance_geometry url="#A00000Cube-mesh" name="A00000Cube"/>
      </node>
    </visual_scene>
  </library_visual_scenes>
  <scene>
    <instance_visual_scene url="#Scene"/>
  </scene>
</COLLADA>


Was man gut erkennt ist die Collada Versions Nummer 1.4.1 in Zeile 2. Die Datei muss also zu dieser Syntaxbeschreibung kompatibel sein.
Das nächste Problem stellt der Firestorm Viewer dar. Der muss auch diese Collada Versions Nummer der DAE Datei unterstützen.

Hinzu kommt: Collada beschreibt wie man was für den Transport deklariert, aber nicht was alles an Funktionen von den Plattformen unterstützt werden muss.
Tatsächlich nutzt jedes Geometrie System nur Teile des Collada Umfangs, denn Collada ist ein reines Transport Format.
Es sagt nichts darüber aus was die Import Software danach damit anfangen kann.

Zurück zu Praxis: Wenn der "Fehler beim DAE Parsen" auftritt kann es sich also auch um Inkompatibilitäten der Funktionsnutzung zwischen Quellsystem( hier Blender) und Zielsystem ( Hier Firestorm) handeln.

Nachschauen kann man die Fehler im Protokoll "Firestorm.logs" welches sich sich im verborgenen Teil von Windows befindet:
   C:\Users\USERNAMEN\AppData\Roaming\Firestorm_x64\logs

Hier ein Ausschnitt dieser Datei beim Ladeabbruch eines Meshes mit "Fehler beim DAE Parsen":
Code:
2022-08-05T10:30:06Z WARNING # newview/llfloatermodelpreview.cpp(2034) LLFloaterModelPreview::onPermissionsReceived : Upload permission set to true but uploadModelUrl is empty!
2022-08-05T10:30:06Z INFO # llprimitive/lldaeloader.cpp(963) LLDAELoader::OpenFile : Collada Importer Version: 1.4.1
2022-08-05T10:30:06Z INFO # llprimitive/lldaeloader.cpp(973) LLDAELoader::OpenFile : Dae version 1.4.1
2022-08-05T10:30:06Z INFO # llprimitive/lldaeloader.cpp(1092) LLDAELoader::OpenFile : Importing 0092WantenvorneOBEN15 model with 1 material references
2022-08-05T10:30:06Z INFO # llprimitive/lldaeloader.cpp(1099) LLDAELoader::OpenFile : 0092WantenvorneOBEN15 references Seil2_png-material
2022-08-05T10:30:06Z INFO # llprimitive/lldaeloader.cpp(1132) LLDAELoader::OpenFile : Collada skins processed: 0
2022-08-05T10:30:06Z INFO # llprimitive/lldaeloader.cpp(2099) LLDAELoader::processElement : Negative scale detected, unsupported transform.  domInstance_geometry: _092WantenvorneOBEN15
2022-08-05T10:30:06Z INFO # llprimitive/lldaeloader.cpp(2122) LLDAELoader::processElement : Negative scale detected, unsupported post-normalization transform.  domInstance_geometry: _092WantenvorneOBEN15
2022-08-05T10:30:06Z INFO # llprimitive/lldaeloader.cpp(1151) LLDAELoader::OpenFile : Scene could not be parsed

Ursache des Abbruches scheint diesmal tatsächlich ein Spiegeln im Objekt Modus gewesen zu sein. Es handelt sich um die Wanten des Segelschiffes welches ja spiegelsymetrisch ist.
"Negative scale detected, unsupported Post- Normalisiation"
Ein Versuch das Mesh manuell wieder zu bereinigen scheitert, da die Fehler nicht in der Dreickstruktur liegen, sondern Teil der unsichtbaren Beschreibung der Meshelemente sind.

Fehlerbehebung in diesem Falle:
Zuerst geht man in den ObjektModus, und erstellt eine neues Meshelement (z.bsp Würfel). Dieses hat nun automatisch korrekte Beschreibungen.
Der Trick besteht nun darin das defekte Mesh dazu zu bringen diese korrekten Beschreibungen zu übernehmen. Dazu wählt man im Objekt Modus zunächst das defekte Meshobjekt und danach das Intakte an.
Nun geht man auf Verknüpfen. Am Namen des resultiernden verknüpften Objektes sieht man den Erfolg. Es soll der Name des Würfelobjektes stehen bleiben.
Nun schaltet man in diesem Objekt in den Edit Modus, und selektiert alles. Nun klickt man auf den "Mesh - Normals - Recalculate Outside" Befehl. Danach selektiert man die Flächen des Hilfswürfels und löscht diese.
Nun ist das Meshobjekt repariert und kann exportiert und geladen werden.


Daher folgt nun einen loose Sammlung an Fehlern die mir in dieser Kategorie bisher aufgefallen sind:

FEHLER: In Blender wurden Objekte im Objektmodus gespiegelt. Dies führt dazu das in der DAE Datei die Geometrie Achsen nicht mehr in der geforderten Ausrichtung liegen, was Firestorm nicht verkraftet.
Abhife: In Blender nie im Objektmodus spiegeln, sondern im Editmodus alle Dreiecke anwählen, und diese Spiegeln. Dann belieben die Bezugsachsen gleich, aber die Dreiecke liegen dazu gespiegelt. Aber nach einem Spiegeln im edit Modus sind immer die Normalen auch gespiegelt, udn daher falsch. Das ist aber schnell behoben: Unbedingt die Auswahl des vorherigen Spiegelns belassen, dann die Befehle "MESH - Normals - Flip Normals" wieder im editmodus anwenden. danach passt alles.


FEHLER: ungültige Syntax.
Typischerweise wurden bei der Objektbenamung Sonderzeichen verwendet die in XML / Collada nicht innerhalb Textfeldern zugelassen sind.
Abhilfe: Meshobjekte Umbenennen und auf Sonderzeichen verzichten. Die Umbenennung kann sowohl in Blender oder auch dae datei mittels XML Editor erfolgen.
Im XML Eeditor muss man aber alle Stellen finden wo der ungültige Name vorkommt.
Beispiel:  
         <geometry id="A00000Cube-mesh" name="A00000Cube">
         <node id="A00000Cube" name="A00000Cube" type="NODE">
        .....
Oft ist es einfacher das in Blender zu korrigieren und neu zu exportieren


FEHLER: Gleichlautende Namen von Meshobjekten
Eine häufige Fehlerursache sind gleichlautende Namen in verschiedenen Meshobjekten eines Linksets.
Das führt dazu das Firestorm nur bis zum ersten Mal des Auftretens des Linknamens sucht, und die Weiteren nicht findet.
Abhilfe: In Blender Umbenennen und Leerzeichen entfernen.
Man sucht in Blender nacheinander alle Einträge für Meshobjekte ab und ändert gleichlautende Namen.
Dabei gilt es zu beachten das beim Export nur der linke Namensteil verwendet wird bis zum ersten Leerzeichen.
Alles hinter einem Leerzeichen wird abgeschnitten ud verschluckt.
Ist der Linke Teil gleich, und die Unterschiede erst nach dem Leerzeichen vorhanden, dann kommt es zu diesem Fehler.
Beispiel: Meshobjekt1 Name: "Haus Wand1" und Meshobjekt2 Name: "Haus Wand2" würden zu diesem Fehler führen.
Dagegen wären  Meshobjekt1 Name: "Haus_Wand1" und Meshobjekt2 Name: "Haus_Wand2" korrekt.
Also am besten Leerzeichen nicht für die Namensbezeichnung in Blender verwenden, und auf Eindeutigkeit achten.
Nun wieder zu Arbeitspunkt 1 unseres Workflows.


FEHLER: Korruptes Mesh.
In diese Kategorie fallen zuerstückelte Meshes was man meist erst auf den 3. Blick erkennt.Da ist Reparatur per Hand nötig.
Suche nach geometrischen Fehlern, oft ist Dopplungen von Teilen des Meshes vorhanden (wie Linien, Punkte Dreiecke), oder aber die Verbindungen sind gestört, verdreht, unterbrochen , etc.
Ein pauschales Rezept zu Abhilfe ist mir bisher nicht bekannt.
Vielmehr ist es ein Testen verschiedener Befehle ob das Problem damit bereinigt wird. Dabei unbedingt vorab immer Backups machen.
Beispiel: Ein simples Mesh bestehe aus 4 Dreiecken, die jeweils an der Kante des zentralen Mitteldreiecks liegen. Das sieht vordergründig alles gut aus.
Aber tatsächlich ist das mittlere Dreieck nicht/oder nur teilweise mit den anderen 3 Umliegenden verbunden. Es hat unabhängige Flächen, Kanten oder Punkte die nur genau über den Anderen liegen.
In der Folge hat die Fläche ein Loch, da ja ein Dreieck fehlt. Nun gut ein Loch ist verschmerzbar, aber wenn es mehr werden, klappt der Upload bei der Physikberechnung nie mehr, und dauert ewig bis zum Abbruch.

Befehle die ich zum Reparieren verwenden:

Was manchmal hilft ist im Edit Modus alles auszuwählen, auf "Punkt" zu gehen und verbinden "Merge Verticles" anzuschalten.
Oft werden dann zerrissene Meshstrukturen wieder verbunden, und Dupletten vereinigt.
Wenn man mit Mesh - CleanUp - Limited Disolve" und einem kleinen Wert "1" repariert wird, ist manchmal danach die Fläche wieder intakt.

Weitere Nützliche Befehle:
"Mesh - CleanUp - Delete Loose"
"Mesh- CleanUp - Limited Disolve" "1" -- Dieser Befehl berechnet die Meshhülle neu und beachtet das es danach keine Winkel kleiner als das hier gewählte 1° zwischen Dreiecken gibt. Das reduziert oft auch die Dreieckszahl sowie die Flächenzahl gewaltig, aber kann die Texurorientierung zerstören. Oft muss danach neu texturiert werden.
"Merge Verticles" -- Der Befehl wird nach Auswahl aller Dreiecke durch einen Klick auf die Geometrieachsen ausgelöst. Er verbindet Punkte, Linien und Flächen die gemeinsame Koordinaten haben zu einer Struktur. In diesem Fall sieht man den den Erfolg des Befehls daran, das der Mittelpunt (Achsen/Curso) des Meshes umspringt. Das führt oft zu schliessen von unsichtbaren Löchern im Mesh. Es reduziert die Komplexität, und die Anforderungen an die Physikberechnung.
"Mesh Verticles - Remove Doubles" -- Ähnlich wie davor, jedoch mit expliziter Entfernung von übereinander liegenden doppelten Punkten, Linien, Flächen.
"Mesh - Normals - Recalculate Outside" -- Es wird versucht die gesamte Dreieckshülle bezüglich Text Ausrichtungs-Normalen neu zu berechnen. Geht es gut, so zeigen danach alle Dreiecke nach aussen. Oder anders gesagt sieht man von aussen bertrachtet eine komplette Hülle. Anwendung z.Bsp: Ein Globus der von aussen betrachtet wird.
"Mesh - Normals - Recalculate Outside" -- Dieser Befehl macht das gleiche wie der vorherige, nur liegen die Texturierten Flächen nun nach innen gewandt. Anwendung z.Bsp: Eine Weltraumspähre über der innen befindlichen Raumstation.
ebenso kann man weitere Befehle unter "Mesh - CleanUp - XXXX" testen

Wenn alles nichts hilft kopiere ich das defekte Meshelement und rekonstuiere die defekten Partien.
Oft kommen diese Fehler durch Konvertierungen auds anderen Grafikformaten.

FEHLER: Nicht alle Dreiecke einer Meshfläche haben gleiche Textur Ausrichtung (Normalen).
Hintergrund: Anders als in Blender und Collada Format kann unser Simulator nicht beidseitig texturiere Dreiecke verarbeiten.
Auch kommt es beim Editieren vor das manche Flächen falsche Normalen erhalten, wenn Blender durcheinander kommt was Innen und Aussen in einer Form ist.
Dies macht beim Hochladen bei der Physik Berechnung Ärger, und verhindert oft den erfolgreichen Upload.
Abhilfe: Meshobjekt anwählen und in den Edit Modus gehen.
Manuell: Cursor Anzeige auf "Normalen" stellen. Nun Dreiecke auswählen und schauen welche Normalen falsch liegen. Nur diese anwählen und Fehler durch "Mesh - Normals -Flip Normals" bereinigen.
Automatisch mit Risiko: alle Flächen anwählen und mit  "Mesh - Normals - Recalculate Outside" Aussenhüelle richtig berechnen lassen.


FEHLER: Missing Physical Blocks:
Die Lage der Dreiecke erlaubt keine physik Hüllen Berechnung.
Oft auch deswegen weil einige Dreiecke eines Körpers die falsche Texturausrichtung (nach innen) aufweisen.
Abhilfe1: Mesh reparieren.
Abhilfe2: Physikberechnung austricksen mit Phyikeinstellug "Würfel" oder obigen "Würfel DAE Datei".


FEHLER: Unterschreiten oder Überschreiten der im Simulator zulässigen Strukturgöße
Ein weiterer Fehler beim Upload ist etwas ganz banales. So gibt es im Simulator in der Opensim.ini Werte für minimale und maximale Strukturgrößen.
Diese minimale Strukturgröße wird auch oft unterschritten wenn beisielsweise beide Seiten eines Segels sichtbar sein sollen aber in einem Meshobjekt liegen.
Das Objekt ist schlicht zu schmal in der Segeldicke.
Abhilfe: Da würde erst ein Skalieren auf höhere Dicke einen Upload erlauben.
Durch andere Aufteilung - z.Bsp. in mehrere Meshobjekte für Vorder- und Hinterseite kann das umgangen werden.


FEHLER: Upload klappt nicht aber kein Fehler gefunden
Wie schon oben geschrieben könne XML Versions Unterstützung von Viewern und Simulatoren je nach Version abweichen.
Manchmal hilft es einfach einen anderen Viewer oder Simulator zu verwenden.
So lange es sich um nicht geriggtes Mesh handelt, hat sich bei mir Singulatity auf einem 0.8.1 Testgrid deutlich besser geschlagen, als aktuelle Firestorm Versionen bei einem 0.9.x Grid.
Aber das hängt sogar vom Betriebssystem (.NET Version bzw Mono) ab.
Ausserdem haben einige Firestorm Versionen einen SL BUG und limitieren bei uns größere Objekte, obwohl das Grid das erlaubt.



Dieser Artikel "lebt" und wird erweitert sobald neue Erkenntnisse vorliegen.
Zitieren
#2
Ich habe den Artikel am 05.08.2022 nochmals deutlich ergänzt und erweitert
Zitieren
#3
Hallo Tron, danke für den Artikel. Mir passiert immer wieder einmal, dass der upload mit der Meldung "missing physical blocks" abgebrochen wird. Ich wusste nicht, was ich damit anfangen sollte. Nun habe ich einige Hinweise von dir erhalten. Das bingt mich garantiert weiter :-)
Liebe Grüße
Loru
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste