Inhaltsverzeichnis

Clipnodes

Was genau sind Clipnodes, wie entstehen sie und wie lässt sich der lästige MAX_MAP_CLIPNODES Fehler vermeiden, resp. wie reduziert man Clipnodes?

Clipnodes werden vom BSP-Compiler erstellt und werden dazu benötigt, damit die Engine weiss, wo sich der Spieler bewegen kann, und wo nicht. So erzeugen beispielsweise normale Wände und Böden Clipnodes, so dass der Spieler nicht durch diese hindurch gehen kann.

Komplexe Objekte, wie z.B. ausgebrushte Geländer, oder Gitter, welche der Spieler sowieso nicht durchqueren kann, erzeugen in ihren Lücken ebenfalls einen Haufen Clipnodes. Diese nützen aber niemandem und treiben nur die Anzahl Clipnodes in die Höhe bis unsere Map nicht mehr kompilierbar wird.

Wie vermeidet man nun solche überflüssigen Clipnodes? Die Lösung ist so einfach wie genial. Man erstellt einfach einen CLIP-Brush, in welchem man seine Detailbrushes „versteckt“, also darin einpackt. Der BSP-Compiler berechnet so nur die Clipnodes des äusseren CLIP-Brushes, da die hypothetischen Clipnodes des inneren Detailbrushes vom CLIP-Brush überdeckt werden.

Experiment

Hier mal eine kleines Beispiel zur Erläuterung:

Das im Bild grün dargestellte Objekt sind unsere Detailbrushes. Der rote Kasten ist der CLIP-Brush. Wir kompilieren nun in verschiedenen Konfigurationen der Brushes und schauen, was unsere Clipnodes so machen.

  • Als erstes kompilieren wir nur mit den Detailbrushes. Den CLIP-Brush entfernen wir zunächst.
  • Danach kompiliern wir mit den Detailbrushes und dem CLIP-Brush. Beide als Worldbrush.
  • Jetzt ein weiterer Versuch, ohne CLIP-Brush, dafür machen wir unsere Detailbrushes zu einem func_illusionary
  • Und jetzt das gleiche, einfach als func_wall
  • Und nun nehmen wir den CLIP-Brush als Worldbrush wieder zur Hand, und versuchen so die Clipnodes des leer im Raume stehend Detailbrush-Entitys zu kaschieren.
  • Zu guter letzt noch ein Versuch, in welchem wir den CLIP-Brush zum func_wall des Detailbrushes hinzufügen.

Und hier nun das Resultat unserer Versuchsreihe:

Detailbrush und CLIP-Brush Anzahl erzeugter Clipnodes
Detailbrush als Worldbrush ohne CLIP-Brush 153
Detailbrush als Worldbrush mit CLIP-Brush 31
Detailbrush als func_illusionary ohne CLIP-Brush 1) 18
Detailbrush als func_wall ohne CLIP-Brush 210
Detailbrush als func_wall mit CLIP-Brush 223
Detailbrush als func_wall und CLIP-Brush als ein Entity 36


Erschreckenderweise hat unser Versuch, die Clipnodes eines func_walls mit einem World CLIP-Brush zu kaschieren, die Clipnodes nur noch weiter in die Höhe katapultiert. Erst als wir den CLIP-Brush zum gleichen Entity wie die Detailbrushes hinzugefügt haben, haben sich unsere Clipnodes wieder auf ein erträgliches Mass gesenkt.

Fazit

  • Kleine Details können, wenn es die Compiler-Tools unterstützen, getrost zu einem func_illusionary gemacht werden.
  • Die Clipnodes von Details aus Worldbrushes kann man mit einem simplen CLIP-Brush problemlos überdecken.
  • Aber sobald wir ein Detail als Entity haben, muss der CLIP-Brush zum gleichen Entity gehören, sonst geht der Schuss nach hinten los!

Bemerkungen

  • Für das Experiment wurden die ZHLT Compiler 3.4 verwenden. Mehr Informationen: http://zhlt.info/
  • Die Versuchsmap mit dem Detail- und dem CLIP-Brush kann hier herunter geladen werden: clipnode.zip
  • Für eine Auswertung der verbrauchten Clipnodes einer Map (und anderen interessanten Daten) genügt es, wenn man den Compilern einfach als Parameter -chart hinzufügt.


Richman 2007/07/05 21:45

1) Vorsicht: Ältere Compiler berechnen die Clipnodes eines func_illusionarys möglicherweise gleich, wie eines func_walls. Vorheriger Test notwendig!
Die Verwendung aller Dokumente einschließlich der Abbildungen ausschließlich zu nichtkommerziellen Zwecken. Verbreitung des Dokuments auf Speichermedien, (insbesondere auf CD-ROMs als Beilage zu Zeitschriften und Magazinen oder sog. "Mission-Packs" etc.) ist untersagt.
 
glossar/clipnode.txt · Zuletzt geändert: 2007/07/05 21:48 von Richman