Ultrafox Geschrieben 3. März 2017 Melden Share Geschrieben 3. März 2017 Hallo Leute, ich bin neu hier im Forum und relativ unbedarft, was Unity betrifft. Für ein Projekt muss ich ein via Drohne und Photogrammetrie erstelltes Modell einer großen Ruine in Unity importieren. Hier handelt es sich nicht um ein Game, sondern lediglich um die Möglichkeit, via Unity die Ruine durchlaufen und besichtigen zu können. Die Ausgangsdaten des mit RealityCapture erstellten Models: 1 Mesh mit 3 Millionen Faces 16 Texturfiles mit jeweils 16.384x16.384 Pixel Obj + mtl-File Was bisher geschah: Ich konnte das Mesh (Obj-File) erfolgreich importieren. Unity machte daraus ca. 50 Objekte. Anschließend konnte ich auch die 16 Texturfiles importieren, wobei Unity diese auf jeweils 4096x4096 Pixel reduzierte - was auch ok ist. Mein Problem ist, dass die Texturen den von Unity erstellten 50 Objekten nicht zugeordnet werden. Versuche ich dies manuell, funktioniert dies nur teilweise. Einige Teil-Texturen sind leider an falscher Stelle. Hat irgendwer von euch eine Idee, wie ich das Problem lösen könnte? Ich freue mich auf eure Antworten und bedanke mich schon einmal Beste Grüße Ultrafox Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 4. März 2017 Melden Share Geschrieben 4. März 2017 Dein Problem liegt darin, dass Unity eine GameEngine ist, die natürlich stark mit der Grafikkarte zusammenarbeitet. Auch aus diesem Grund kann ein Mesh nur 64k Polys haben und eine Texturgröße von 4096. Keine Ahnung, wie du das importiert hast, damit du diese 50 Objekte bekommen hast. Scheinbar ist da aber etwas mit den UV Maps kaputt gegangen. Ich empfehle dir, dein Mesh in einem 3D Programm selber zu zerstückeln, richtig zu benennen und die UVs zu erzeugen. Dann die Texturen dementsprechend auch benennen, damit du weißt wo welche textur hin gehört. Wenn du als FBX exportierst und deine Meshes Materialien mit eindeutigen Namen haben, dann sind die Materialien auch schon auf deinen Meshes in Unity drin. Jetzt musst du nur noch den Materialien die richtigen Texturen zuweisen. Als OBJ kommen glaube ich keine Materialien mit rüber... ich weiß es aber nicht genau. Also wie gesagt: Stell alles in einem 3D Programm zusammen, dann geht das in Unity ganz leicht und wird auch passen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 4. März 2017 Melden Share Geschrieben 4. März 2017 Keine Ahnung, wie du das importiert hast, damit du diese 50 Objekte bekommen hast Macht Unity automatisch, wenn es zu große Meshes erkennt. Es wäre natürlich wünschenswert, wenn das mit Unitys Automatik zum Laufen zu kriegen wäre, aber ansonsten ist malzbies Vorschlag sehr gut. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Ultrafox Geschrieben 5. März 2017 Autor Melden Share Geschrieben 5. März 2017 Hallo malzbie, vielen Dank für deine Antwort. Leider bin ich erste heute dazugekommen, zu antworten. Unglaublich - dieses Unity!! Ziel ist es, sogar, ein Mesh mit sechs Millionen Faces zu importieren. Eine manuelle Aufteilung in 64K-Meshes in einem 3D-Programm zu machen wäre sehr aufwändig und mit sehr viel manueller Arbeit verbunden. Zudem auch noch Fehleranfällig. Mittlerweile konnte ich das Problem allerdings lösen. Wie ich schrieb, liegen mir die Daten des Meshes im Obj + mtl vor. Die Texturen erstrecken sich über 16 jeweils 16.384x16.384 Pixel.große Jpg-Files. Problem war, dass Unity beim Import die mtl-Files nicht berücksichtigt. Üblicherweise macht das nichts, da es in der Regel lediglich ein Textur-File pro Mesh (Objekt) gibt. Eine solches einzelnes Textur-File kann man einfach nach dem Import zuweisen. Ich habe jedoch 16 TextureFiles für das eine große Mesh. Die wichtigen Informationen, auf welches File sich die jeweiligen Texturkoordinaten beziehen, stehen allerdings im mtl-File. Und da Unity dieses File nicht berücksichtigt, konnte es kein vernünftiges Mapping der Texturdaten vornehmen. Meine Lösung war, den Autodesk FBX Converter 2013 zur Konvertierung von Obj + mtl nach fbx heranzuziehen. Der berücksichtigt das mtl-File und schreibt diese Infomationen auch korrekt mit in das fbx-File. Unity wiederum berücksichtigt beim Import dir mtl-Daten, wenn sie sich in einem fbx befinden. Vor dem Import der fbx-Daten, die 16 Texturefiles in Unity importiert, dann das fbx - super, klappt alles. Sogar mit 6 Millionen Faces im Mesh. Unity teilte das Mesh in 92 einzelne Objekte, konvertierte die Texturdaten auf jeweils 8192x8192 Pixel und komprimierte diese entsprechend. Eine richtig geile Sache. Läuft absolut flüssig mit > 60 Bps. Unglaublich, was Unity in diesem Bereich kann. Nun kann ich super durch die Ruine laufen, oder drin rumfliegen - auch in VR mit der Occulus. Im Blender konnte ich das Mesh einschl. Texturen überhaupt nicht laden. Nachdem ich lernen durfte, dass die Textur-Koordinaten stets normiert sind, wurde mir klar, dass ich die Texturen eines solchen Mega-Meshes beliebig in der Größe verändern kann - passt trotzdem immer. Somit konnte ich das Projekt mit niedrigerer Auflösung der Texturen in Blender importieren. Nochmals, Danke für die Antwort Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 6. März 2017 Melden Share Geschrieben 6. März 2017 Ah, sehr gut! Hab ich doch richtig damit gelegen, dass die OBJ Datei (im Zusammenhang mit Unity) das Problem ist. Dass Unity selber die großen Meshes splittet, war mir gar nicht bewusst. Hab mich noch nie getraut so große Meshes rüber zu schieben. Unity erstaunt mich auch immer wieder. Ich finde eigentlich wöchentlich neue Dinge raus, und das, obwohl ich schon seit Jahren damit rum mache. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Torigas Geschrieben 6. März 2017 Melden Share Geschrieben 6. März 2017 Ich bin erstaunt, dass er das mit der MTL Datei nicht hinbekommen hat. Da hatte ich nie Probleme mit - und wir nutzen auch gern so große Modelle. Oh well - Wäre supi mal einen Screenshot zu sehen. Ruine aus Photogrammetrie klingt spannend! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Ultrafox Geschrieben 7. März 2017 Autor Melden Share Geschrieben 7. März 2017 Oh well - Wäre supi mal einen Screenshot zu sehen. Ruine aus Photogrammetrie klingt spannend! Gute Morgen, anbei, ein paar Screenshots der Ruine: ruine_screenshot_editor.jpg: aus der Unity-View heraus aufgenommen. In den Statistics rechts oben deutlich zu sehen, die Anzahl der berechneten Tris in dieser Scene. 30 Millionen. ruine_screenshot_build.png: das Ganze in voller Auflösung aus dem Build heraus aufgenommen tiled_mesh.jpg Gut zu sehen, wie Unity das aus 6 Millionen Faces bestehende Mesh beim Import aufgeteilt hat in 92 einzelne Objekte Gruß Ultrafox Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 7. März 2017 Melden Share Geschrieben 7. März 2017 Das ist schon verdammt sexy. VR-Brille steht bereit, hoffe ich! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Ultrafox Geschrieben 7. März 2017 Autor Melden Share Geschrieben 7. März 2017 Das ist schon verdammt sexy. VR-Brille steht bereit, hoffe ich! Ja, natürlich - eine Oculus. Funktioniert echt prima. Leider gibts ein leichtes Flickern bei weit entfernten Objekten. Habe noch nicht herausgefunden, an was das liegt. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Torigas Geschrieben 8. März 2017 Melden Share Geschrieben 8. März 2017 Sehr schick! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Ultrafox Geschrieben 17. März 2017 Autor Melden Share Geschrieben 17. März 2017 Hallo Gemeinde, habe das Projekt mittlerweile fertiggestellt. Das von mir beschriebene Flickern lag daran, dass ich das Mipmapping ausgeschaltet hatte - wegen der Textur-Qualität. Dies hatte allerdings zur Folge, dass sich bei Bewegungen viele unterschiedliche Textur-Pixel, die hinreichend weit von der Kamera entfernt sind, um den gleichen Pixel-Platz im Rasterbild stritten. In einem Frame gewinnt das Eine, im anderen Frame, ein anders Pixel Da meine Texturen sehr sehr hochauflösend sind, war das Flickern extrem. Nochmals die Eckdaten meines Projekts: Ein Mesh, beim Import von Unity in 90 Meshes aufgeteilt. 50 Texturdateien mit jeweils 8192 x 8192 Pixel Auflösung. Fazit: Bei sehr hochauflösenden Texturen sollte man Mipmapping einschalten bzw. eingeschaltet lassen, wenn die Texturen auch aus größeren Entfernungen betrachtet werden sollen - wirkt ziemlich beruhigend auf die Pixel ;) Hier, nochmals zwei Screenshots. RuinePart.jpg zeigt den Ausschnitt, der in RuineAll.jpg mit einem weißen Quadrat gekennzeichnet ist. Keine Texturen werden mehrfach verwendet. Jedes Pixel des Models hat sein eigenes Texturpixel. Übrigens: läuft mit über 70 fps bzw. 90 fps in VR - Unity ist toll!!!! Gruß Ultrafox Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Torigas Geschrieben 18. März 2017 Melden Share Geschrieben 18. März 2017 Sieht auch richtig gut aus. Gibt es da einen Download von? Ich würde das gern mit der Vive testen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Ultrafox Geschrieben 18. März 2017 Autor Melden Share Geschrieben 18. März 2017 ich würde gern einen Download zur Verfügung stellen - muss das allerdings zunächst mit meinem Auftraggeber abklären. Gruß Ultrafox Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.