Entwickler-Ecke

Freeware Projekte - Realtime Cloth Simulation - Version 1.321


F34r0fTh3D4rk - Fr 21.03.08 20:50
Titel: Realtime Cloth Simulation - Version 1.321
hi,

Ich habe die Tage mal eine kleine Demo gebastelt, welche eine kleine Simulation von Objekten wie Kleidung in Echtzeit darstellt.
Die Physik ist nicht gerade das, was man als korrekt bezeichnen würde, allerdings eignet sie sich gut für Echtzeitanwendungen wie z.B. Spiele.

user defined image
user defined image
Hier gibt es einen großen Screenshot:
http://www.exec-dev.de/Cloth/cloth_high_res.jpg

Die Bedienung des Programms ist einfach:
Hier gibt es den Download:
http://www.exec-dev.de/Cloth/Cloth.zip

Für Fragen und Anregungen bin ich offen, wer sich selbst mit dem Thema beschäftigen möchte, sollte sich den Artikel "Advanced Character Physics" von Thomas Jakobsen anschauen.
Falls reger Bedarf besteht, werde ich den Quellcode ein wenig aufbereiten und veröffentlichen.

mfg


BenBE - Sa 22.03.08 00:30

Hi,

kurz experimentiert, sieht auch schon sehr vielversprechend aus ... ABER:

1. Siehe Screenshot. Das solltest Du mal noch irgendwie schauen, dass da nicht das Objekt öfters mal durchschaut (und das statisch sogar so bleibt)

2. Renderfehler wenn das Tuch über sich selbst umgeklappt ist.


F34r0fTh3D4rk - Sa 22.03.08 11:07

hi,

ja ich hab schon ne kleine Gegenmaßnahme drin, die verhindern soll, dass Objekte durcheinander durchschauen, allerdings funktioniert das auch nur in begrenztem Maße. Bei der Selbstkollision (die ich nicht behandle) sieht das ganze schon schwieriger aus.

Übrigens hat das Tuch keine Rückseite, ich zeichne nur die Vorderseite und schalte Backface Culling ab, deshalb ist die auch nicht ganz so wie sie sein sollte.

mfg


F34r0fTh3D4rk - Mi 07.05.08 19:23

Ich hatte mich gewundert, warum die Kollision mit dem Würfel so viel langsamer war, als die mit der Kugel.
Das hinzufügen eines

Delphi-Quelltext
1:
2:
else
  break;

wirkt manchmal Wunder ;)

Die etwas performantere Version ist hochgeladen.

mfg


Calculon - Mi 07.05.08 19:33

Sieht echt beeindruckend aus!

Erinnert mich an das Cape von Spawn:
http://youtube.com/watch?v=NSoumRoNSt0


F34r0fTh3D4rk - Mi 07.05.08 19:35

hi,

Hab gerade Version 1.1 hochgeladen. Jetzt kann man mit den Tasten F1-F4 die Fixpunkte bestimmen.

mfg


Delete - Mi 07.05.08 19:40

Moin,
ich finde die neue Version schon richtig gut! :zustimm:
Besonders im Wireframe mode sieht man so richtig wie schön es animiert ist.
Bloß:
- wenn man licht ausschaltet sieht das alles ein bisschen komisches aus(das object ist weiß)?
-es gibt grafik fehler wenn dieses Lacken aufeinander fällt.

Kann man sicher etwas draus machen!!!!

j.klugmann


F34r0fTh3D4rk - Mi 07.05.08 19:45

hi,

hab grad nochmal hinzugefügt, dass man das Objekt jetzt auch nach oben und unten bewegen kann.
Die Fehler liegen daran, dass sich Polygone überlagern. Es sind schon einige Gegenmaßnahmen getroffen, aber so richtig behoben ist das Problem nicht. Das liegt, wie schon gesagt an der fehlenden Selbst-Kollision und der Tatsache, dass das Tuch aus Performancegründen (weil es eine Physik Demo ist) keine Rückseite hat.

Achja das mit dem Licht ist vielleicht missverständlich. Kein Licht bedeutet nicht, dass es dunkel ist. Ohne Licht gibt es kein richtiges Hell oder Dunkel, deshalb wird einfach alles weiß gezeichnet. Diese Funktion ist hauptsächlich für die Kombination mit dem Wireframe Modus gedacht.

mfg


arj - Do 08.05.08 15:15

Respekt. Saugeil. Ich hab mich im Studium mit Physiksimulationen beschäftigt.
Das sieht richtig gutaus. :)


wunsiedler - Do 08.05.08 18:28

Wenn man die 4 Fixpunkte nach unten legt und zw. Kugel und Quader umschaltet, fliegt das Tuch weg und landet neben dem Quader. Tilt. :D Fixpunkte wieder zurück, schwingt sich das Tuch wieder darüber. Sehr schön.

Allerdings: Fixpunkte unten, Kugel max. beim umschalten auf Quader verschwindet das Tuch im Nirvana....


BenBE - Fr 09.05.08 10:08

Wenn man die Fixpunkte kurzzeitig alle abschaltet, schwingt das Tuch beim Reaktivieren stark in die Richtung des ersten aktivierten Fixpunktes ... Wenn man diesen kurz darauf wieder deaktiviert, kann man damit ein sehr efektives Katapult bauen, was nicht mal, wenn man danach alle 4 Fixpunkte wieder aktiviert, das Tuch zurück ins Blickfeld holt.


F34r0fTh3D4rk - Fr 09.05.08 13:38

Ich sollte vielleicht mal eine Weltgrenze einführen ^^ ist eigentlich kein Ding, aber für solche Katapult Aktionen war das Programm auch eigentlich nicht gedacht :P

mfg


Silas - Fr 09.05.08 14:31

Mein Respekt, sieht wirklich sehr realistisch aus :zustimm:

Allerdings hat dein Programm noch einen Bug (oder ist das ein Feature?): Wenn man die Kugel/den Würfel vergrößert/verkleinert, liegt er nicht mehr auf dem "Boden". Dadurch kann man mit einer überdimensionierten Kugel das Tuch extrem weit spannen und herrlich durch die Gegend schießen :D .

Deswegen drei Featurewünsche:
- Beim verkleinern/vergrößern des Objekts sollte das untere Ende auf der gleichen Höhe bleiben
- Das Objekt sollte nicht in den Boden verschiebbar sein
- Man sollte die Objekthöhe (z.B. mit PageUp/PageDown) ändern können
- Wenn das Tuch zerreißt (was ja durchaus vorkommt), sollte es kaputt sein.

Zum letzten: kA wie kompliziert das in deinem Fall ist, deswegen: Nicht so wichtig, wäre aber schön. :)


Edit: Wer lesen kann, ist glatt im Vorteil :roll:


AXMD - Fr 09.05.08 19:44

Hallo!

Deine Demo gefällt mir sehr gut. Was mir allerdings ein bisschen fehlt ist die Möglichkeit, das Gitter, das auch im Wireframe-Modus angezeigt wird, fein- oder grobmaschiger einzustellen, um die Qualität der Simulation erhöhen bzw. verringern zu können.
Was mir noch aufgefallen ist: lässt man das Tuch zu einem ungünstigen Zeitpunkt los rutscht es mangels Reibung komplett vom Würfel herunter und bleibt dann am Boden liegt, was sehr seltsam aussieht, da das riesige Tuch auf einige wenige Pixel zusammen"fällt". Anstatt dieses Lila-Tons ist dann auch sehr viel grau zu sehen (siehe Bild im Anhang).

AXMD

PS.: Die Frameraten reichen denke ich auf eine Nachkommastelle genau, 10 sind wohl etwas zu viel des Guten ;)


Reinhard Kern - Sa 10.05.08 02:16
Titel: Re: Realtime Cloth Simulation
user profile iconF34r0fTh3D4rk hat folgendes geschrieben:
hi,

Ich habe die Tage mal eine kleine Demo gebastelt, welche eine kleine Simulation von Objekten wie Kleidung in Echtzeit darstellt.
...


Hallo,

wenn du Kugel/Quader durch Claudia Schiffer und das Tuch durch eine Kreation von Lagerfeld ersetzen kannst, könntest du damit richtig Geld verdienen. Ist ja nur ein quantitativer Unterschied...

Ich fürchte nur, man kann sowas heute nicht mehr als Einzelperson realisieren. Aber solange du Zeit dafür hast, mach weiter in der Richtung. Da steckt viel mehr Potential drin als in noch einem MP3-Player oder Texteditor.

Ich denke, mit einer Software, die einerseits individuelle Körpermasse berücksichtigt und andrerseits Kleiderstücke auf einem solchen Körper in 3D darstellt, könnte man sogar SEHR SEHR viel Geld verdienen - jeder Shop weltweit, der im Internet Klamotten anbietet, kann das brauchen.

Gruss Reinhard


huuuuuh - Sa 10.05.08 06:24

wenn man die kugel ohne fixpunkte zum würfel ändert fliegt das tuch auch weg. ohne wiederkehr


F34r0fTh3D4rk - Sa 10.05.08 16:53

So, es gibt eine neue Version ;)

user defined image

Version 1.2
Änderungen:

Allerdings scheint es noch einen Grafikfehler bei der Normalenglättung zu geben, das muss ich mir nochmal anschauen, gegebenenfalls mache ich die noch ausschaltbar. Ein optionaler Lichtshader (Phong) ist auch noch in Planung.

mfg


AXMD - Sa 10.05.08 17:05

Hallo!

Die neue ZIP-Datei scheint beschädigt zu sein.

AXMD


F34r0fTh3D4rk - Sa 10.05.08 17:09

hi, habs grad nochmal hochgeladen.
Jetzt lässt sich auch das Subsampling steuern.

Prinzipiell gilt:

Daraus folgt, dass man für eine höhere Auflösung auch mehr Subsampling benötigt, was die Simulation doppelt langsam macht.

Also entweder hohe Auflösung und niedriges Subsampling oder geringe Auflösung und hohes Subsampling, oder etwas was dazwischen liegt (was bei der Standardeinstellung der Fall ist). In Echtzeitanwendungen wie Spielen ist die Auflösung jedoch meist geringer. Das lässt sich aber durch grafische Effekte leicht überdecken.

mfg


BenBE - Sa 10.05.08 17:17

Bei den meisten Parameter-Kombinationen fällt das Tuch durch das Objekt hindurch, besonders, wenn das Objekt sehr klein oder sehr groß ist.

Außerdem sieht die Simulation jetzt an vielen Stellen etwas unnatürlich aus, besonders da sich das Tuch zu verdrehen scheint, obwohl sich die Kugel nicht dreht und solche Effekte.


F34r0fTh3D4rk - Sa 10.05.08 17:23

Es gab noch einen Bug beim Einstellen der Reibung, der jetzt behoben sein sollte.

Was du sagst ist vollkommen zutreffend, deshalb ist die Wahl der richtigen Parameter entscheidend.

mfg


huuuuuh - Sa 10.05.08 17:49

bei der höchsten auflösung verhält sich das tuch wie ne flüssigkeit
die objekte machen da garnix


F34r0fTh3D4rk - Sa 10.05.08 18:38

Wie gesagt müsstest du dann auch die Substeps hochschrauben, damit es wieder realistisch aussieht.
Der Zweck der Simulation ist nicht etwa physikalische Korrektheit, es geht primär um den visuellen Effekt.

mfg


F34r0fTh3D4rk - Sa 10.05.08 21:00

Reges Feedback bring rege Neuerungen:

Version 1.3


mfg


huuuuuh - Sa 10.05.08 21:23

ich krig jetz ne access violation wenn ichs beende (adresse 00000000 falls wichtig)....is aber nich weiter schlimm...sieht gut aus :zustimm:
hier noch ein paar vorschläge: fixpunkte sichtbar und verschiebbar und anzahl der fixpunkte veränderbar


F34r0fTh3D4rk - Sa 10.05.08 22:03

Das mit der Anzahl der Fixpunkte wüsste ich jetzt nicht so recht wie man das machen sollte, weil man ja erst einmal definieren muss, wo das Tuch denn Fix sein soll. Der Rest ist machbar, nur wird das Programm mit zunehmenden Funktionen auch zunehmend unübersichtlich und nen Editor wollte ich eigentlich nicht draus machen. ^^

Zeigt sich bei dir ein grafischer Unterschied wenn du "p" drückst ? Wenn nicht, habe ich glaube ich die Ursache für die AV. Ansonsten weiß ich noch net genau.
Bekommt denn noch wer anders die AV ?

€: hab eine gefixte Version hochgeladen, bitte mal schauen, ob der Fehler noch existiert. Danke

mfg


Marc. - Sa 10.05.08 22:19

Hi!
Wenn ich alle Fixpunkte löse und anschließend, nachdem das Tuch sich bereits ein Stück weit vom Objekt entfernt hat, wieder einen Punkt setze, dehnt sich das Tuch gegen unendlich.
Siehe Screenshot. ;)
Ich muss aber zugeben, dass ich es grad nicht schaff, den Bug ein drittes mal zu reproduzieren. :P
Lag wohl am zuvielen Schwung.


BenBE - Sa 10.05.08 22:52

Man nehme:

Highest Detail, Subsampling 1, Air 0.025, Contact 0,425, Würfel, Radius 19

Wenn's nicht auf Anhieb klappt, einfach nochmal resetten, oder kurz nach dem Reset alle Fixpunkte lösen.


huuuuuh - Sa 10.05.08 23:18

ok jetz krig ich die access violation nich mehr.


Silas - So 11.05.08 09:08

Morgen!

Beim Programmstart bekomme ich folgende Meldung:
user defined image

In der Simulation ist der Phong-Shader anschließend aktiviert, funktioniert aber aufgrund der Röhrenrechnerqualitäten meines Notebooks nicht (die ganze Simulation besteht aus einem ungeshadeten Einheitsgrau). Wäre gut, wenn dein Programm in dem Fall von vornherein den Standard-Shader verwenden würde.

Wünschenswert wäre vielleicht noch, dass sich die Kugel abhängig von der Kameraposition bewegt, weil das Bewegen an einen bestimmten Punkt nach Kameradrehung sonst zu viel Akrobatik verlangt. ;)


F34r0fTh3D4rk - So 11.05.08 09:45

Das Problem scheint entweder daran zu liegen, dass ich nicht alle Extensions prüfe, oder du hast ein Problem mit deiner Grafikkarte. Zweiteres halte ich für wahrscheinlicher, da der Shader ja scheinbar erfolgreich ans Programm Objekt gelinkt wird. (Bin kein absoluter Experte auf dem Gebiet, deshalb sagt mir, wenn ich mich irre ^^)
Er sollte die Fixed Function Pipeline nutzen, wenn er feststellt, dass keine Shader unterstützt werden. (Was bei dir scheinbar nicht der Fall ist)

@user profile iconBenBE: Subsampling hochdrehen. 2 reicht schon aus.

@user profile iconMarc.: Gegen diese unendliche Ausdehnung kann ich sicher etwas tun, danke. (Bei höherem Subsampling sollte dies allerdings auch kaum mehr auftreten -> deshalb ist 10 default, ich konnte den Fehler übrigens sofort reproduzieren)
Wenn man Subsampling auf 100 stellt, bekommt sich das Tuch wieder in den Griff, ich muss mal etwas gegen die zu hohe Energiezufuhr tun, danke ;) Das sollte viele Probleme fixen.

mfg


F34r0fTh3D4rk - So 11.05.08 14:42

Kleines Update:

Version 1.31

Viel Spass mit der neuen Version!

mfg


Regan - So 11.05.08 14:47

Also ich find das Programm richtig gut gelungen. Wie lange machst du sowas? Da muss ja eine riesige Arbeit dahinter stecken. Respekt :zustimm: .


BenBE - So 11.05.08 14:49

Wenn man das Tuch auf dem Objekt liegen hat, und etwa für 3-5 Sekunden die Titelleiste zum Verschieben des Fensters festhält, findet sich das Tuch unter dem Objekt wieder ... (Default Settings)


F34r0fTh3D4rk - So 11.05.08 15:20

Das ist in Version 1.32 bereits gefixt, ich dachte ich hätte das schon drin, war aber wohl doch nicht so ;)
Ich warte aber noch auf Verbesserungsvorschläge, bevor ich sie veröffentliche.

So viel Arbeit steckt da eigentlich nicht hinter, nach 20 Minuten war der Hauptteil an Code geschrieben, das sind wirklich nur ganz paar Zeilen.

mfg


huuuuuh - So 11.05.08 16:23

ich würd gerne noch nen tetraeder oder wenn das einfacher is ne pyramide drinhaben...


F34r0fTh3D4rk - So 11.05.08 16:27

Ich dachte mir, dass das jetzt kommt ;) Bei Pyramiden wird es allerdings vorkommen, dass die Spitze durch das Tuch hindurchguckt. Mal gucken was sich machen lässt ;)

mfg


BenBE - So 11.05.08 16:27

Ferner wär ein Zylinder und ein Ring nicht schlecht.

Was ich außerdem festgestellt hab:
- Könntest Du die Fixpunkte in der 3D-Welt einzieichnen

Auch die aktivierten Optionen (Smoothing, Phong Shader, ...) wäre mit unter nicht schlecht zu sehen, ob die an sind.

Auch wäre es hilfreich, wenn Du die Farbe von Untergrund, Objekt und Tuch so änderst, dass diese auch bei Nutzung des Phong Shaders auseinanderhaltbar sind.

@FotD: Dagegen hilft eine Kollisionserkennung :mrgreen:


F34r0fTh3D4rk - So 11.05.08 16:34

Nen Zylinder hatte ich ohnehin auf meinem Zettel ;)
-Fixpunkte einzuzeichnen hatte ich schon versucht im Ortho Modus, ging noch net so recht, kommt aber noch :)
-Ja aktivierte Optionen anzeigen hatte ich auch schon dran gedacht, mach ich ;)
-Ich kann dem Boden andere Materialeigenschaften geben, bissl andere Farbe, Wünsche ?

@Kollisionserkennung: Dann müsste ich allerdings zusätzlich zu der Kollision noch die Kollision Dreieck<>Ecke testen und das wieder auf die einzelnen Punkte umrechnen. Ist mir ein wenig zu aufwändig und würde auch bissl was an Performance kosten. Runde Objekte sind deshalb in sofern praktisch, dass sie keine Ecken haben ;)

Ein Ring ist sicher auch ne schöne Sache, da hab ich bisher aber nur schmu beim Zeichnen rausbekommen und für die Kollision wüsste ich da auch nichts. Für die Pyramide müsste ich meinen Code für die Box halt etwas erweitern, hoffentlich geht das dann, mal schauen ;)

mfg


F34r0fTh3D4rk - So 11.05.08 19:42

Version 1.32

user defined image

EDIT:
Version 1.321

user defined image

Wenn die Updates zu frequentiert kommen, sagt bescheid. Es gibt ja entweder die Möglichkeit wenige große Updates zu machen oder immer den aktuellen Entwicklungsstand hochzuladen, um Dinge die man kürzlich geändert hat, sofort wieder anpassen zu können.

Falls sich jemand für den Quellcode interessiert, ich habe noch eine (nicht ganz) 300-Zeilen Version (die allererste). Diese ist vom Code deutlich weniger umfangreich (die aktuelle Version hat an die 1200 Zeilen) aber hat eine ähnliche Funktionalität. (zumindest was die Simulation an sich angeht)
Bei Bedarf kann ich die mal hochladen. (Das Topic dann aber bitte nicht in die OpenSource-Sparte verdammen plz ^^)

mfg