Community-Tutorials (Source)

func_details

Hallo,
weil viele nicht genau wissen wann man func_details einsetzt, oder was es überhaupt ist, möchte ich es heute mal erklären.
Als erstes hab ich mal ein Bild mit Paint gemalt um es zu erklären. Nehmen wir an das rote Strichmännchen wäre der Spieler, die braunen Kästen wären Models und die rote Linie (Bild 2) Wäre ein func_detail, die schwarze ein ganz normaler Brush.
Im ersten Bild ist alles richtig, vvis.exe hat beim compilen einen Leaf erstellt, weil es ein normaler Worldbrush ist, die Sicht wird geblockt, alles ist ok. Wenn ihr nicht wisst was ein "Leaf" ist, hier mal ein Zitat aus Haradirkis Tutorials:

Haradirki

Sobald der Prozess vbsp.exe die Map fertig aufgeteilt hat, erstellt sie ein Portalfile (*.prt). Danach kommt der Prozess vvis.exe an die Reihe, er berechnet von welchem Leaf man welche Leafs sehen kann.


Also ist der Spieler immer in einem sogennanten Leaf, welcher andere Leafs abfragt ob diese von der derzeitigen Spielerposition berechnet werden sollen. Nun zurück zu den Bildern, im ersten ist alles richig gemacht worden:
ultio001.jpg

Hier jedoch ist die Wand ein func_detail, es wird kein leaf erstellt, die models, brushes, usw. hinter der Wand werden berechnet, die Perfomence sinkt enorm!

ultio002.jpg

Hier nochmal ein Beispiel aus dem Spiel, wie es in echt wäre:

ultio003.jpg
ultio004.jpg

Nungut, warum dann func_Details nehmen wenn die Perfomence sinkt?
Weil die Perfomence steigt, wenn man ein func_detail [FONT="Arial Black"]richtig[/FONT] anwendet!

Außerdem verkürzt sich die Compilezeit ggf. um Stunden!
Nun, wo wendet man func_details denn nun an?
Hier mal ein Screenshots aus dem Hammer Editor meiner neusten Map:

ultio005.jpg

Das Brushwork ist an den Wänden komplex, nur, wenn das alles brushes wären, müsste vvis das alles berechnen, und im Spiel müsste immer zu jedem leaf von jedem leaf die Anfrage gestellt werden:
"Muss ich dich berechnen? - Ja - Nein"
Und das Mehrmals pro Sekunde-> Perfomence sinkt!

Deshalb habe ich einfach alles was kein brush sein muss und nicht die Sicht zur berechnung blockt, zu einem func_detail gemacht, damit ihr seht was ich zu enem func_detail gemacht habe, habe ich alles func_details im Hammer editor ausgeblendet:

ultio006.jpg

D.h. die gebrushten Lampen, die Wände und der übergang vom boden zur decke sind alles func_details. Desweiteren solltet ihr alle brushes die nicht "Sicht blocken", aber eine "schwierige" Form haben, z.B. Brush's die mit dem Arch-Tool erstell worden sind, zu einem func_detail machen.
Zu beachten ist:
Ihr müsst die zwischenräume von func_details mit der "Nodraw" Textur belegen, sonst werden unnötig texturen und faces berechnet die man eh nie zu gesicht bekommt!

Hier auch nochmal ein Vergleich:

ultio007.jpg

Und hier sind die func_details ausgeblendet

ultio008.jpg

Die Details werden ausgeblendet, doch die brushes die sicht blocken oder die eine verbindung zur Void (das schwarze um die map) haben nicht.
Displacment darf auf keinen Fall zu func_Detail gemacht werden! Dann funktioniert die Map nicht und keine .bsp wird erstellt!

Hier ein weiteres Beispiel:

ultio009.jpg

ultio010.jpg

Kisten und Details an der Decke sind func_details, das gibt wieder ein paar FPS (Bilder pro Sekunde, mehr ist besser) mehr!
Auf den oberen Balken ist natürlich die Nodraw Textur, das solltet ihr überall so machen:
ultio011.jpg

Und in den zwischenräumen der func_detail-Wandverzierungen muss man auch die Nodraw benutzen:

ultio012.jpg

Die Perfomence wird es euch danken.

Und ich danke fürs lesen ;) . Ich hoffe es hat euch gefallen und was gebracht,
mfg ultio!