Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: Spiele-/Grafikprogrammierung ::  Signed Distance Fields mit Ray Casting anzeigen?     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
DBert
Unregistrierter




Beitrag DBert Unregistrierter 18:56:56 04.04.2018   Titel:   Signed Distance Fields mit Ray Casting anzeigen?            Zitieren

Hallo, ich arbeite seit 20 Jahren hauptberuflich als C++ Entwickler und entwickle seit ein paar Jahren an einem 3D Simulationssystem.

Ich möchte Octree basierte Signed Distance Fields möglichst genau und schnell anzeigen. Bisher mache ich dies indirekt über Triangulierung der SDFs (schönes Ergebnis, aber leider viel zu langsam). Hat hier jemand Erfahrung mit direkten Verfahren wie z.B. Ray Casting von SDFs?

Ich kann mir auch professionelle Unterstützung vorstellen, falls ich mit dem Thema nicht vorankomme.
rapso
Moderator

Benutzerprofil
Anmeldungsdatum: 17.06.2002
Beiträge: 8807
Beitrag rapso Moderator 09:50:40 05.04.2018   Titel:              Zitieren

Ich hab erfahrung, und manch anderer bestimmt auch. wie koennen wir dir helfen?

_________________
follow me|
-Mod im Spiele-/Grafikprogrammierung
DBert
Unregistrierter




Beitrag DBert Unregistrierter 18:59:03 05.04.2018   Titel:              Zitieren

Vielen Dank für die Antwort.

Ich habe bisher nur ein paar sehr einfache Versuche diesbezüglich gemacht und möchte vermeiden in die falsche Richtung zu gehen.

Ich habe eine Bounding Box um die SDFs und kann diese in Bildschirmkoordinaten umwandeln und somit den Bildschirmbereich ermitteln der betroffen ist.
Für diese Bildschirmpunkte kann ich Punkt und Richtung des Rays im Objektraum ermitteln und den Schnittpunkt mit den SDFs bestimmen.

Nun Frage ich mich ob es ein mir unbekanntes Verfahren gibt welche es ermöglicht Rays adaptiv zu verteilen ohne Gefahr zu laufen wesentliche Geometrien zu verfehlen.
Also z.B. nur die Ecken eines 8 Pixel breiten Quadrats zu ermitteln und dann Aufgrund der Normalen, der Distanz und der SDF-ID zu sehen ob der Bereich Flach genug ist oder nicht.
Wenn Flach genug, dann ein Quad rendern und wenn nicht das Quadrat halbieren und nochmal testen.
rapso
Moderator

Benutzerprofil
Anmeldungsdatum: 17.06.2002
Beiträge: 8807
Beitrag rapso Moderator 23:12:50 05.04.2018   Titel:              Zitieren

du kannst der radius eines pixels in der welt ermitteln, je "tiefer" der strahl in die welt traced, desto groesser wird der radius in world space.

Du kannst damit auch mehrere pixel zusammenfassen (z.b. 2x2 oder 4x4 oder 8x8 oder...) und somit fuer die pixelgruppe durch den raum tracen. wenn du eine collision errechnest, teilst du die gruppe und tracest fuer jede untergruppe.

falls du absolut keine kollision ueberspringen willst, kannst du beim adaptiven steppen immer den radius des pixels abziehen, wobei das sehr viel langsammer werden keonnte und dieser fehler eher selten auftritt.

_________________
follow me|
-Mod im Spiele-/Grafikprogrammierung
DBert
Unregistrierter




Beitrag DBert Unregistrierter 19:40:08 06.04.2018   Titel:              Zitieren

Sozusagen einen Konus statt eines Rays verwenden, um auch Geometrien zu erkennen, die sonst in keinem Pixel vorkommen würden.

Das mit den Pixelgruppen scheint mir ein vielversprechender Ansatz zu sein.

Womöglich war aber mein Begriff 3D Simulation nicht genau genug. Es handelt sich mehr um eine 3D Sculpting Simulation, bei der mit Werkzeugen Material abgetragen wird und das Ergebnis visualisiert werden soll. Was nicht sichtbar ist, weil kleiner als ein Pixel, muss nicht dargestellt werden. Was sichtbar sein kann, muss aber dargestellt werden.
Es entstehen dann Bereiche, die sehr homogen sind und mit einer groben Darstellung gut genug aussehen. Ebenso gibt es Bereiche, in denen sich kleine Details mit scharfen Kanten wiederfinden die möglichst genau angezeigt werden sollen.
C++ Forum :: Spiele-/Grafikprogrammierung ::  Signed Distance Fields mit Ray Casting anzeigen?   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.