User Tag List

Ergebnis 1 bis 7 von 7

Thema: Waterindices & T-Junctions für Dummies

  1. #1
    Moderator Avatar von Dmx6
    Registriert seit
    18.06.2010
    Ort
    Zwischen Frankfurt und Darmstadt
    Alter
    29
    Beiträge
    958
    Blog-Einträge
    3
    Renommee-Modifikator
    20

    Waterindices & T-Junctions für Dummies

    Ich habe dieses Thema mal erstellt, weil man in verschiedenen Foren nur sehr wenig über Waterindices erfährt, was sie sind und wofür Sie gut sind.

    Als erstes Waterindices haben nichts mit Wasser zu tun.
    Waterindices resultieren aus den T-Junctions, die durch VBSP definiert werden.
    Der Waterindices Speicher in der Source Engine enthält die Informationen über die Tesselation der Brushfaces die VBSP durchführt. Erstmals wurde diese Methode bei Unterteilen von Wasserfaces benutzt, daher resultiert der Name der noch bis Heute noch genutzt wird: Waterindices.

    T-Junctions
    Als T-Junctions bezeichnet man eine Ecke die sich koliniear zwischen 2 anderen Ecken befindet. Das passiert wenn sich verschieden große Brushes treffen. Kolliniear = Mehrere Ecken die auf einer gerade liegen.

    Name:  T-Junctions_2.png
Hits: 71
Größe:  11,0 KB


    Nun Spieleengines haben probleme die genauen Koordinaten des Eckpunktes der T-Junctions verursacht zu bestimmen. Die Folge: Winzige Nähte zwischen den Polygonen. Sehr unschön das ganze. Hier einmal übertrieben dargestellt:

    Klicke auf die Grafik für eine größere Ansicht 

Name:	T-Junctions_3.jpg 
Hits:	14 
Größe:	109,8 KB 
ID:	5915

    Die Lösung: Das Polygon bei dem sich zwischen den 2 Eckpunkten der T-Junction befindet wird tesseliert so das ein neuer Eckpunkt an der Stelle des T-Junctions entsteht. Wenn 2 Eckpunkte übereinanderliegen haben Spieleegnines keine probleme die Koordinaten zu berechnen.

    In der Source Engine sorgen die "Waterindices" dafür das die T-Junctions verschwinden und wir keine Nähte zwischen unseren Brushfaces (Polygonen) haben. In der Source Engine wird normal jedes Face aufgefächert tesseliert, so werden keine indices gespeichert. Aber mit mehrern T-Junctions auf einer Ecke eines Face ist das nicht möglich und eine seperate tesselation muss berechnet und gespeichert werden. Diese seperate tesselation wird in der Source Engine unter den Begriff "Waterindices" abgespeichert. Und der Speicherplatz für Waterindices ist begrenzt.

    Nun schauen wir uns doch einmal an wie genau sich Waterindices zu T-Junctions verhalten. Dazu ein Beispielbild vom einem User Namens "Demented".
    In diesem Beispielbild haben wir ein Face das wir mit verschiedenen Keilförmigen "func_details" in verbindung bringen um T-Junctions zu erstellen. Wir wollen nun beobachten wie die Source Engine die T-Junctions entfernt;

    Name:  waterindices_vergleich.png
Hits: 78
Größe:  191,2 KB

    Bild A:
    Hier haben wir 2 entfernte T-Junctions (mithilfe von 2 Roten Punkten dargestellt).
    Das Face wird nicht aufgefächert tesseliert.
    Das Ergebniss: Triangles: 4, Indices: 12.

    Bild B:
    Jetzt haben wir unser Face mit 8 func_details in verbindung gebracht, also 8 T-Junctions entfernt.
    Das Face wird wieder nicht aufgefächert tesseliert.
    Das Ergebniss: Triangles: 10, Indices: 30.

    Bild C:
    Wieder haben wir unser Face mit 8 func_details in verbindung gebracht, diesmal wird das Face jedoch aufgefächert Tesseliert.
    Das Ergebniss: Triangles: 10, Indices: 0!

    Resultat unseres Experiments:
    Wenn VBSP das Face nicht aufgefächert Tesselieren kann, um T-Junctions zu entfernen, entstehen Indices. Aus dem Bild oben können wir entnehmen das für jede Triangle in das, das Face aufgeteilt wird, 3 Indices entstehen.

    Brushes die zu "func_details" umgewandelt wurden erhöhen den Waterindices Wert mehr als World Brushes. Warum genau ist unbekannt. Daher kommen viele große Maps mit vielen "func_details" an die Waterindices Grenze der Source Engine.

    Um die Indices zu reduzieren kann man mehrere "func_details" zu einem zusammenfügen oder die größe der T-Junction verursachenden Brushes abändern dass weniger T-Junctions entstehen.

    Das wissen das Detailbrushes den Waterindices Wert erhöhen, also mehr T-Junctions entfernen, können wir auch Positiv einsetzen. Die Source Engie hat nähmlich so ein paar probleme mit den Kanten zwischen Wasser und normalen Brushes. Es entstehen hässliche Nähte. Siehe das folgende Bild:

    Klicke auf die Grafik für eine größere Ansicht 

Name:	Seams mit Worldbrushes.jpg 
Hits:	17 
Größe:	195,0 KB 
ID:	5917

    Nun wenn wir alle Brushes an die das Wasser grenzt zu Detailbrushes umwandeln, entfernen wir mehr T-Junctions also der Waterindices Wert steigt aber die Nähte verschwinden:
    Klicke auf die Grafik für eine größere Ansicht 

Name:	Keine Seams mit Detailbrushes.jpg 
Hits:	22 
Größe:	196,1 KB 
ID:	5918
    Geändert von Dmx6 (19.01.2014 um 12:29:23 Uhr)

  2. #2
    Stammgast Avatar von Josch
    Registriert seit
    19.06.2010
    Ort
    Dresden, Wunschheimat: Padua
    Beiträge
    1.323
    Renommee-Modifikator
    20
    Wow, das wusste ich auch noch nicht
    Danke fürs Aufklären, selbst wenn man sich wahrscheinlich in den meisten Fällen nicht wirklich Sorgen drum machen muss, oder? Das letzte Beispiel zeigt aber, dass es doch nützlich sein kann! Gut zu wissen, wie man in so einem Falle rangehen kann
    Nur Puffin schenkt mir die Kraft und Ausdauer, die ich brauche!

  3. #3
    Administrator Avatar von DaEngineer
    Registriert seit
    23.06.2010
    Beiträge
    1.576
    Blog-Einträge
    2
    Renommee-Modifikator
    20
    Zitat Zitat von Dmx6 Beitrag anzeigen
    Dazu ein Beispielbild vom einem User Namens "Demented".
    Kannst du dazu noch die Originalquelle verlinken? Das Urheberrecht freut sich dann ein wenig.

  4. #4
    Administrator Avatar von BaShoR
    Registriert seit
    18.06.2010
    Ort
    Oberbayern
    Alter
    29
    Beiträge
    4.212
    Blog-Einträge
    1
    Renommee-Modifikator
    20
    Ganz starkes Tutorial!
    Wusste es zwar ungefähr, aber das mit den vielen quasi-Schnitten hat mich dann schon etwas überrascht!

  5. #5
    Mapping-Profi Avatar von eXi
    Registriert seit
    21.06.2010
    Ort
    Krefeld
    Alter
    28
    Beiträge
    2.554
    Renommee-Modifikator
    29
    Ich weiß noch, wie Jack damals das Problem von zu vielen T-Junctions hatte und keiner wusste ihm zu helfen. (: Bis jetzt wusste ich nicht mal was das sein soll. Danke für das Tutorial!

  6. #6
    Moderator Avatar von Dmx6
    Registriert seit
    18.06.2010
    Ort
    Zwischen Frankfurt und Darmstadt
    Alter
    29
    Beiträge
    958
    Blog-Einträge
    3
    Renommee-Modifikator
    20
    @DaEngineer: Die Originalquelle existiert nicht mehr. Sie stammt aus dem alten Chatbear Forum von Valve, was seid der Einführung des Valve Dev Wikis offline genommen wurde.

  7. #7
    Administrator Avatar von DaEngineer
    Registriert seit
    23.06.2010
    Beiträge
    1.576
    Blog-Einträge
    2
    Renommee-Modifikator
    20
    Ah okay. Ja gut, dann wird das natürlich schwierig. Davon ab echt ein super Tutorial!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
[email protected]