Direct3D optimierte 3D-Modell Erstellung

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Direct3D optimierte 3D-Modell Erstellung

Beitrag von Tiles »

Ihr glaub einem hier echt nix ^^
Dateianhänge
narp.jpg
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Benutzeravatar
Zudomon
Establishment
Beiträge: 2253
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Direct3D optimierte 3D-Modell Erstellung

Beitrag von Zudomon »

Okay, das hat mit meiner Vermutung nichts zu tun. Nun muss ich zugeben, bin ich ratlos. Warum ist das da so?

Was passiert denn, wenn du die Oberfläche für die zweite Säule auch so zuschneidest, ABER das ganze nicht verbindest?
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Direct3D optimierte 3D-Modell Erstellung

Beitrag von Tiles »

Okay, das hat mit meiner Vermutung nichts zu tun. Nun muss ich zugeben, bin ich ratlos. Warum ist das da so?
Ich habs doch schon erklärt. Das sind Floatingpoint Errors. Schön sichtbar gemacht indem ich hier in die Grenzwerte gegangen bin. Die Texel der Fläche veranstalten da mit dem losen Objekt einen ZFight Tanz :)
Was passiert denn, wenn du die Oberfläche für die zweite Säule auch so zuschneidest, ABER das ganze nicht verbindest?
Mache ich die feste Säule lose dann hast du da genau das gleiche Spiel wie mit der losen Säule. Das Beweisfoto schenke ich mir mal, irgendwann ist auch mal gut mit der Beweisführung ^^

EDIT sagt, von wegen. Beweisfoto wichtig. Ich habe den Pfosten hier mal vereinzelt. Er clippt doch nicht. Was aber auch logisch ist. Er schliesst im Moment noch mit den Kanten der Fläche ab. Schiebe ich ihn aber auch nur ein kleines bisschen in die Fläche habe ich wieder mein Zfighting. ^^
Dateianhänge
beweisfoto.jpg
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Benutzeravatar
Zudomon
Establishment
Beiträge: 2253
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Direct3D optimierte 3D-Modell Erstellung

Beitrag von Zudomon »

Tiles hat geschrieben:Ich habs doch schon erklärt. Das sind Floatingpoint Errors.
Da widerspreche ich dir nicht. ABER was mich halt stutzig macht: Die Vertices werden von 3D auf 2D umgerechnet. Also was ich sagen will ist, die Dreiecksstruktur des Objektes ist auf Vertexebene. Da können Ungenauigkeiten auftreten, die die Position nicht exakt im Raum wieder geben. Dieser Effekt wirkt sich aber erst aus, wenn man extrem weit vom Zentrum weg ist. Dazu hatte ich doch sogar mal ein Video gemacht...
[youtube]PIavdOqCqEE[/youtube]

Nach dem VS werden dann ja die möglicherweise nicht exakt liegenden Punkte interpoliert. Auch diese sind dann natürlich entsprechend quantisiert. Nun redest du aber vom Z-Buffer. Dieser Arbeitet ja jetzt anhand dieser quantisierten Interpolationswerte. Demnach müssten die Vertices im Raum springen, aber der Z-Buffer müsste denn noch vernünftig mit den Werten arbeiten können.
In dem Video, ist selbst, wo dann die Geometrie merklich zerreißt (etwa in der Mitte des Videos) der Z-Buffer selbst immer noch plausibel. Von daher verstehe ich deine Artefakte nicht.

Kannst du mir noch mehr Informationen über die dargestellte Szene geben? Wo befindet sich das ganze im Raum, welche Ausdehnung hat der große Klotz, wie sahen die Near- und Far-Planewerte aus? Ist die Projektionsmatrix Orthogonal oder Perspektiv, wenn letzteres, welches FOV wird da verwendet?
Und warum wird das ganze in dem einen Vorschaufenster eigentlich (fast komplett) Artefaktfrei dargstellt, in den anderen nicht?
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Direct3D optimierte 3D-Modell Erstellung

Beitrag von Krishty »

Ach verdammt. Wenn ich mal eine Stunde hätte, würde ich den Testfall direkt minimal nachprogrammieren, damit wir wissen, über was wir hier sprechen.

Die 2D-Genauigkeit, von der du sprichst, soll für Bildqualität noch stärker ausschlaggebend sein als die davon entkoppelte Tiefengenauigkeit (dazu gab’s mal ein Paper; entweder Cat oder eXile hatten das vor rund fünf Jahren verlinkt). Falls sie das Problem wäre, würde das Loch in der Mitte aber sowieso kollabieren. Ich kann’s mir gerade überhaupt nicht erklären.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Direct3D optimierte 3D-Modell Erstellung

Beitrag von Tiles »

Also bei der detaillierten Beweisführung muss ich leider passen. So weit bin ich nie in die Engineprogrammierung eingestiegen. Ich weiss dass das an Floatingpoint Ungenauigkeiten liegt. Weil da die Z Position der einzelnen Texelpositionen der Fläche gegen die Geometrie kämpft. Das wars dann aber auch schon mit meinem detaillierten Fachwissen über die Ursache. Ich kenne das Phänomen eben hauptsächlich als Grafiker.

Ich weiss dass es existiert. In den unterschiedlichsten Engines. Ich kenne bis jetzt keine die dagegen gefeit ist. Ich bin wie gesagt schon selber drüber gestolpert, in Unity. Ich habe das auch schon in kommerziellen Spielen so flackern sehen. Und mein Lieblingssauriermodeler trueSpace packt das Flackern schon im Normalbereich aus weil die Grafikengine gelinde gesagt nicht die Beste ist. Weswegen ich hier so schöne Beispielbilder liefern kann.

Vielleicht kann das ja jemand anders mit dir auseinanderklabüsern. Für mich ist als Grafiker wichtig dass es das Phänomen gibt, und wie ich es möglichst vermeide.
Und warum wird das ganze in dem einen Vorschaufenster eigentlich (fast komplett) Artefaktfrei dargstellt, in den anderen nicht?
Weil ich hier das eine Extrem des Flackerns eingefangen habe, die Minimalwerte. Sobald ich die Kamera in dem Vorschaufenster bewege flackert es lustig hin und her. Das brauchte ein paar Versuche das so hinzuflackern dass der Pfosten komplett zu sehen ist :)
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Benutzeravatar
Zudomon
Establishment
Beiträge: 2253
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Direct3D optimierte 3D-Modell Erstellung

Beitrag von Zudomon »

Hier nochmal ein paar "Beweisbilder" ;)
Ich weiß allerdings nicht genau, was die beweisen... aber irgendwas bestimmt

Die Position ist ja noch relativ Zentral, kann man auf der Minimap ablesen, wobei ich glaube, durch die Halbblöcke muss man das nochmal mit 2 oder 0.5 multiplizieren...

Ansonsten habe ich hier extreme Werte für near und far gewählt
Near/Far: 0.0001 / 100000
An dem Hausdach im Hintergrund sieht man ein paar dunkle Artefakte. Die kommen vom Z-Buffer... die einzelnen Würfelflächen haben an den Seiten noch Schürzen und die flackern da durch
20151024_1.jpg
Near/Far: 0.01 / 10
Artefaktfrei
20151024_2.jpg
Near/Far: 0.0001 / 10
Artefakte ohne Ende und ich glaube, es sind sogar die gleichen, die du da hast :D
20151024_3.jpg
FAZIT: Wie schon erwähnt kann man mit falschen Werten in der Computergrafik alles irgendwie kaputt machen. Nimm richtige Werte, dann brauchst du dir um Artefakte keine Gedanken machen und brauchst nicht deine Modelle so umbiegen, dass es irgendwie diese Fehler wieder korrigiert!
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Direct3D optimierte 3D-Modell Erstellung

Beitrag von Tiles »

Öh, nein, das ist komplett was anderes :)
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Benutzeravatar
Zudomon
Establishment
Beiträge: 2253
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Direct3D optimierte 3D-Modell Erstellung

Beitrag von Zudomon »

Warum?
Benutzeravatar
B.G.Michi
Establishment
Beiträge: 163
Registriert: 07.03.2006, 20:38
Alter Benutzername: B.G.Michi
Kontaktdaten:

Re: Direct3D optimierte 3D-Modell Erstellung

Beitrag von B.G.Michi »

Zudomon: derart extreme Werte für Near- und Farplane sind nicht unbedingt nötig um Z-Fighting zu provozieren. Man erhält Ähnliches auch durch starkes Heranzoomen an ein weit entferntes Objekt. Wenn ich das richtig deute macht Tiles das in seinen Bildern.
Benutzeravatar
Zudomon
Establishment
Beiträge: 2253
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Direct3D optimierte 3D-Modell Erstellung

Beitrag von Zudomon »

Deswegen hatte ich ja mal nach den ganzen Werten gefragt, damit man verstehen kann, was da überhaupt passiert.
Weil so Wasserdicht ist ja seine Erklärung dafür nicht, wenn selbst Krishty sich das nicht erklären kann und nach Cat und eXile ruft :D
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Direct3D optimierte 3D-Modell Erstellung

Beitrag von Tiles »

Das hatte ich doch gleich zu Anfang erwähnt wie ich das hinbekommen habe. Das Objekt ist ein Standardcube von 2 Einheiten. Und das Objekt ist 500 Einheiten vom Zentrum weg. Und dann eben rangezoomt. Und das hatte ich ja auch gesagt dass das extra provoziert ist. Schön fett und extrem. Um zu zeigen worum es geht und was es zu vermeiden gilt. Ein Beispiel wo nix zu sehen ist macht ja als Beispiel keinen Sinn :)

Bei meinem Weidezaun im Spiel ist überhaupt nichts provoziert. Und da bewege ich mich auch in keinem Extrembereich. Die lose Steckverbindung flackert schon im Normalbetrieb ganz leicht. Das fällt aber vermutlich nur mir da auf weil ich als Grafiker genau weiss auf was ich achten muss. Der Spieler schaut überall anders hin, nur nicht auf das minimale Flackern zwischen den Balkensteckverbindungen das man mit der Lupe suchen muss. Da gibts viel grössere Flackereien schon allein durch das Bewegen.

Es ist einfach so dass lose Steckverbindungen in der Fläche beim Übergang zum Flackern neigen weil da eben der ZFight zwischen der Fläche und dem losen Objekt stattfindet. Wenn ein loses Objekt in einer Fläche steht wird es auch beim Übergang zwischen den Zweien flackern wenn du die Ansicht bewegst. Immer. Das mag so minimal sein dass es nicht zu sehen ist. Aber es ist da. Und es wird eben dann doch hier und da sichtbar, und kann dich in den Hintern zwicken wenn du nicht drauf achtest. Wie bei meinem Weidezaun. Was man vermeiden kann wenn man es eben gleich gescheit modelt. Nämlich geschlossen. Kante an Kante, nie Kante auf Fläche.

Ich habe ja nun auch wiederholt die Erklärung geliefert wieso das so ist. Hier übrigens schon wieder. Ich kann nur nicht mit einem genauen mathematischen Beweis dienen weil ich kein Mathematiker bin. Und auch kein 3D Engine Ingenieur. Mir als Grafiker langt die Info: das is ZFight, weil die Schnittkante in der Fläche durch die Floatingpoint Errors nie genau definiert ist, weswegen es bei Bewegung flackert. Und das tuste besser nich. Aber du glaubst ja einem alten Grafiker nichts, und konstruierst dir lieber die wildesten Erklärungen und Schlussfolgerungen zusammen. Was die Diskusison hier unglaublich mühsam macht. Ich rede von Äpfeln, du wirfst Birnen und Bananen mit rein ^^

Es hat jedenfalls nichts mit den Clipping Werten der Near und Farclip Plane zu tun. Das Clipping habe ich in meinem Fall nicht angelangt. Das ist eine komplett andere Geschichte.
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Benutzeravatar
Zudomon
Establishment
Beiträge: 2253
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Direct3D optimierte 3D-Modell Erstellung

Beitrag von Zudomon »

Okay, okay. Aber ich glaube schon, dass wir dann eigentlich von dem gleichen Sachverhalt reden. Ich provoziere ihn einfach durch die Near- Far-Plane und du durch das zoomen auf einen Weit entfernten Punkt. Prinzipiell ist das Phänomen aber dann doch die schlechte Auflösung des Z-Buffers in bestimmten Wertebereichen.
Und um dich zu beruhigen, ich glaube dir ja, hast mich überzeugt. ;)

Aber nun hast du so oft deinen Weidezaun erwähnt, dass ich das gerne mal sehen würde... hattest du das gepostet irgendwo?
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Direct3D optimierte 3D-Modell Erstellung

Beitrag von Tiles »

Das Spiel gibts auf meiner Seite zum runterladen. Aber wie gesagt fällt mir das wohl als Einzigem auf, weil ich eben genau weiss wo ich hinschauen muss. Es ist halt echt gering. Aber zu sehen wenn man es weiss :)
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Re: Direct3D optimierte 3D-Modell Erstellung

Beitrag von starcow »

Ich möchte das Thema nochmals aufgreifen, weil man noch eine andere "verwandte" Situation beim modellieren antreffen kann.

Bild

Wie man unschwer erkennen kann zeigt Bild A zwei - und Bild B drei Dreiecke. Die Anzahl der Vertices ist genau die selbe.
Bei Situation A spart man sich allerdings das zeichnen eines dritten Dreieckes.
Auf Bild A liegt Vertex E mathematisch exakt auf der Geraden BC.
Auf Bild B gibt es keine Gerade BC sondern nur die beiden Geraden BE und EC.

Ich glaube ihr wisst worauf ich hinaus will:
Meine Vermutung ist, dass es Situation A zu vermeiden gilt, da es bei den entsprechenden Polygon-Kanten zu Rundungsfehlern resp. Rechnungs-Ungenauigkeiten kommen kann.
Dies könnte sich dann in flackernden Kanten oder einem durchscheinenden Hintergrund bemerkbar machen.
Vielleicht könnt ihr ja etwas zu meiner These sagen. Ist eine Situation wie auf Bild A technisch tatsächlich problematisch?

Zu der eigentlichen Thread-Frage von SilconDanny möchte ich auch noch kurz meine Erfahrungen schildern.
Die Frage welchen Ansatz man jetzt wählen sollte, ist eine Frage, die bei mir auch noch nach Jahren des Modellierens auftauchen kann.
In gewissen Situationen ist es tatsächlich nicht einfach sich (richtig) zu entscheiden.

Grundsätzlich würde ich persönlich ja immer zu Methode 2 tendieren - einfach aus meiner Grundhaltung heraus, es sich nicht leicht auf Kosten der Qualität zu machen.

Dem stehen aber zwei Argumente gegenüber:
1. Siuation 1) wie von SilconDanny beschrieben wird so oder so nicht zu vermeiden sein, sobald man beginnt Assets auf einen Boden zu setzen (eigentlich noch eine verschärfte Situation, da bei geschlossenen Assets folglich die Bodenfläche und die Standfläche des Assets mathematisch eine Schnittfläche bilden)

2. Es gibt einige Situationen, bei welchen sich Methode 2 schnell in einem deutlich erhöhten Polycount bemerkbar macht.
Als Beispiel folgendes:
In jeder Stil-Epoche der Architektur gibt es an Häuserfassaden oftmals komplexere eingelassene Fenster-Architekturen mit Friese, Simsen, Säulen und Kämpfer, Zierwerke und Fenstergiebel, etc.
Mit Methode 1 lässt sich ein solches Fenster Asset einfach über einer rechteckigen, lochartigen Aussparung bündig platzieren. Muss aber diese lochartige Aussparung die exakte Aussenlinie der Fensterarchitektur aufweisen (Methode 2), sind oftmals zusätzliche Polygone im zwei- bis dreistelligen Bereich notwendig. Und dies _pro_ eingelassenem Fenster.
An dieser Stelle habe ich dann bei aller liebe zu Methode 2 nicht gross eine andere Wahl, als mich für die simplere Methode 1 zu entschieden.

Gruss starcow
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Direct3D optimierte 3D-Modell Erstellung

Beitrag von Schrompf »

Zur Frage: Ich würde zu Situation B raten. Ich habe früher öfter Probleme damit gehabt - ich hatte bei den Splitterwelten z.B. vereinzelt Höhlen so gebaut, in denen es ja naturgemäß sehr dunkel ist. Das HDR hat dort dann ordentlich ausgeholt. Und Situation A sorgt dafür, dass in der Bewegung hier und da dann ein Pixel auf der Kante von keinem der beiden Dreiecke abgedeckt wurde, und der durchscheinende Himmelspixel durch das HDR dann grellweiß leuchtete. Unangenehm.

Und zur zweiten Thematik: sei Dir jederzeit Deiner Zielgruppe bewusst. PC, aktuelle Konsolen, First oder Third Person-Perspektive? Besser die paar dutzend Polys zusätzlich verwenden. Mobile, Last-Gen-Konsolen oder Vogelperspektive? Keiner wird was bemerken, also nimm jede Abkürzung, die Du kriegen kannst.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Jonathan
Establishment
Beiträge: 2353
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Direct3D optimierte 3D-Modell Erstellung

Beitrag von Jonathan »

Ich würde sagen, dass Methode A im eigentlichen Sinne keine geschlossene Oberfläche ist (einfach weil nicht garantiert ist, dass es geschlossen gerendert wird) und deshalb unbedingt vermieden werden sollte.
Das würde sich aber nur auf ein einzelnes Mesh beziehen. Natürlich ist es irgendwie schön, wenn alles perfekt geschlossen ist, aber um große Welten zusammen zu bauen, halte ich es für sehr viel praktikabler, Objekte einfach ein wenig ineinander zu stecken. Ein Baumstamm geht dann halt noch 20 cm unter dem Boden weiter, das hat aber den Vorteil, dass man ihn überall am Boden platzieren kann ohne das Gelände-Mesh anzupassen oder sich um die Steigung des Geländes Sorgen machen zu müssen. Solange der Winkel nicht zu flach ist, sollte man an den Übergängen auch keine Z-Fighting Probleme bekommen, und auch wenn es vorkommen kann, dass man mal einen Pixel mehr oder weniger von dem Baum sieht, spielt das keine Rolle, weil es kein sichtbarer Fehler ist.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Antworten