Seite 1 von 1
Model Format für Splines
Verfasst: 20.10.2024, 18:23
von antisteo
Moin,
gibt es eigentlich irgendein anerkanntes Model-Format für Spline-basierte 3D-Geometrie und -Animation? (bzw. es braucht ja auch entsprechende Editoren und geile Render Engines, die entweder die Geometrie je nach LoD aufblähen oder sehr intelligente Pixelshader haben, die den Spline quasi raycasten)
Re: Model Format für Splines
Verfasst: 20.10.2024, 19:09
von Schrompf
Die einzige Engine, bei der ich das jemals gelesen habe, war Quake2 - ja, das Quake2 von 2001 oder so. Die haben damals Torbögen und so als Splines abgelegt und je nach verfügbarer Rechenleistung verschieden detailliert tesseliert.
Re: Model Format für Splines
Verfasst: 20.10.2024, 19:13
von dot
.obj? 😉
Re: Model Format für Splines
Verfasst: 20.10.2024, 21:49
von Jonathan
Schrompf hat geschrieben: ↑20.10.2024, 19:09
Die einzige Engine, bei der ich das jemals gelesen habe, war Quake2 - ja,
das Quake2 von 2001 oder so. Die haben damals Torbögen und so als Splines abgelegt und je nach verfügbarer Rechenleistung verschieden detailliert tesseliert.
Du meinst Quake 3, oder?
https://quark.sourceforge.io/infobase/maped.curves.html
Das war lustig, weil GameStar damals vom Entwickler irgendetwas von wegen perfekt runden Oberflächen gehört hat und dann ein großes Beispielbild von einem der weiblichen Charaktere im Heft abgedruckt hat um dann zu behaupten, der Po sei endlich perfekt rund. Aber der hatte natürlich konstante Auflösung, nur eben hinreichend große.
Ansonsten: Blender kann natürlich alle Arten von Kurven, und das Dateiformat ist irgendwo dokumentiert. Assimp hatte ja mal einen Blender-Loader. Das würde sich als Leveleditor für dein Spiel vielleicht gut lohnen, weil du ja auch direkt Levelobjekte setzen und Exportieren kannst (über Empties und ein Custom-Export-Skript).
Aber wie anderswo schon gesagt: Wenn du Splines einfach hinreichend beim Export sampelst, sieht man eh keine Ecken mehr. Und wenn dein LOD eh mit beliebigen Punktwolken umgehen kann, dann kannst du auch einfach die hochaufgelösten, diskretisierten Splines da rein schmeißen. Wenn du statt Texel Punkte verwendest ist deine Farbauflösung fast immer eh höher als die Geometrieauflösung, du kannst also auch einfach davon ausgehen, dass alles entweder Punktwolken oder Dreiecke sind und brauchst dir über Splines keine Gedanken machen.
Re: Model Format für Splines
Verfasst: 20.10.2024, 22:54
von Schrompf
Assimp kann Blender nur in nem exotischen Branch, und lädt da nur den Triangle Preview Mesh. Assimp hat gar keine Datenstrukturen für Splines.
Aber ich stimme dem allgemeinen Tenor zu: es ist albern, das überhaupt zu wollen.
Re: Model Format für Splines
Verfasst: 20.10.2024, 23:23
von Krishty
Fast alle CAD-Formate sind Spline-basiert. IGES, STEP, DWG kommen oft genug erst garnicht tesseliert. Dafür kosten die Bibliotheken zum Laden ein kleines Vermögen. Ich nutze ein selber geforktes OpenCASCADE, und auch das kommt mit Einschränkungen wie „braucht bei einigen Dateien fünfzehn Minuten zum Laden“ und „Tesselierung sieht manchmal aus nicht erkennbaren Gründen grütze aus“ zusätzlich zu „kein Support, da gratis (sonst 6000 € pro Jahr und Arbeitsplatz)“.
Re: Model Format für Splines
Verfasst: 22.10.2024, 11:51
von Matthias Gubisch
Sorry für offtopic
Aber bei der Diskussion stellt sich mir die Frage ob man mit Hilfe von mesh shadern und workgraphs die splines nicht direkt auf der gpu tesselieren könnte.
Das würde doch wirkliches unlilited Detail ermöglichen
Re: Model Format für Splines
Verfasst: 22.10.2024, 12:31
von Schrompf
Ja, vielleicht schon. Quasi das uralte Quake-Ding mit "soweit tesselieren, wie's die Performance her gibt und es nötig ist". Aber weil's hier gerade philosophisch wird: das ist doch nicht mehr Detail! Das ist doch nur die selbe Informationsmenge, leeeiiiicht besser repräsentiert. Unlimited Detail wären die Fitzelchen der Rauhfasertapete, nicht die immer exaktere Darstellung des Krümmungsverlaufs eines Kotflügels.
Re: Model Format für Splines
Verfasst: 22.10.2024, 12:59
von Mirror
Meiner Meinung nach wird die Auflösung von Splines überschätzt. Wenn ein Objekt nicht mehrere Meter große ist, fallt eine niedrige Tesselation gar nicht auf. Bei meinem kleinen Editor verwende ich fest 64 Segmente für einen polygonalen Kreis und es fällt kaum auf.
Re: Model Format für Splines
Verfasst: 22.10.2024, 13:13
von antisteo
Mirror hat geschrieben: ↑22.10.2024, 12:59
Meiner Meinung nach wird die Auflösung von Splines überschätzt. Wenn ein Objekt nicht mehrere Meter große ist, fallt eine niedrige Tesselation gar nicht auf. Bei meinem kleinen Editor verwende ich fest 64 Segmente für einen polygonalen Kreis und es fällt kaum auf.
64 Segmente für einen Kreis sind aber ganz schön viel, wenn das Objekt in großer Entfernung nur 2-3 Pixel vom Bildschirm einnimmt.
Was ich mich frage ist: Kann man auch im Fragment Shader tesselieren? Also ein Deck-Dreieck rendern und die einzelnen Pixel dann raytracen.
Re: Model Format für Splines
Verfasst: 22.10.2024, 13:44
von Schrompf
Klar, mach. Hab neulich Guardians Of The Galaxy auf Steam gespielt, und die raytracen im PixelShader mit Silhouette und Fragment Rejection durch ein HeightField, wenn ich das richtig gesehen habe.
Slug, die Font Rendering Library, rendert die Splines direkt aus dem TrueTypeFont im FragmentShader und kann damit gleich geile Antialiasing-Sachen machen, so dass Du nen Textpanel wie in KriegDerSterne schräg rendern kannst und selbst die kleinsten Buchstaben noch gut lesbar sind.
Re: Model Format für Splines
Verfasst: 22.10.2024, 14:27
von Mirror
antisteo hat geschrieben: ↑22.10.2024, 13:13
64 Segmente für einen Kreis sind aber ganz schön viel, wenn das Objekt in großer Entfernung nur 2-3 Pixel vom Bildschirm einnimmt.
64 Segmente sind vorgegeben, man wird es aber editieren können. Bei Softcubes geht das ja schon immer.
Re: Model Format für Splines
Verfasst: 22.10.2024, 15:16
von Jonathan
antisteo hat geschrieben: ↑22.10.2024, 13:13
64 Segmente für einen Kreis sind aber ganz schön viel, wenn das Objekt in großer Entfernung nur 2-3 Pixel vom Bildschirm einnimmt.
Ja, aber das hat halt nix mit Splines zu tun, bzw. genauer gesagt es ist kein Spline-spezifisches Problem. Du hast ja auch Triangle-Meshes (Charaktere etc.) die eine ähnliche Auflösung (Vertices pro Meter) haben und auch in unterschiedlichen Entfernungen gerendert werden.
Du brauchst also auf jeden Fall eine LOD-Strategie für Dreiecksmeshs (oder in deinem Fall vlt. eher Punktwolken). Wenn du irgendein Spline-basiertes Objekt in ein Dreiecksmesh umwandelst, braucht man nicht allzu viele Dreiecke, damit es rund aussieht (egal wie nah man dran ist), es ist also absolut keine verrückte Idee, Splines in Triangles umzuwandeln. Und ab dem Punkt kannst du den selben Code verwenden, den du eh schon für Triangles hast um dein LOD zu machen.
Was du jetzt vor hast ist, überspitzt gesagt, einen zweiten Code-Pfad zu entwickeln und zu pflegen, der dein Projekt komplizierter und fehleranfälliger macht (weil mehr Logik da ist die kaputt gehen kann), allerdings keinen Mehrwert liefert. Man kann das aus mathematischer Sicht nett und elegant finden, aber aus entwicklungsökonomicher Sicht macht das schlicht keinen Sinn.
Ich wollte das nur nochmal erwähnen, weil ich dachte, dass dir effizientes Entwickeln ggf. wichtig sein könnte. Wenn du unbedingt Splines machen willst, dann ist das auch ok. Ich schreibe ja auch meine eigene 3D Engine für meine Projekte, die ehrlich gesagt nicht besonders toll ist und das macht mit Sicherheit auch absolut keinen Sinn, wenn man maximal effizient entwickeln will. Aber ist ja Hobby und kein Beruf. Eigene 3D Engine schreiben ist ehrlich gesagt keine kluge Idee, Splines statt Dreiecke zu rendern auf die selbe Art auch nicht. Aber kann man trotzdem machen. Und mit einem netten Spline Renderer wirst du bestimmt auch lobende Kommentare hier bekommen.