|
|
Entitys weg clippen, wenn Wand zwischen ist...
#155996
09/21/07 15:48
09/21/07 15:48
|
Joined: Apr 2005
Posts: 3,076 Germany, NRW
rvL_eXile
OP

3D Artist
|
OP

3D Artist
Joined: Apr 2005
Posts: 3,076
Germany, NRW
|
Hi,
Vielleicht könnte man dieses Feature mal einbauen. Wenn beispielsweise der SPieler vor einem Haus steht und ich beispielsweise 10000 Modele im Hausplatziert habe, das die Modele durch die Levelgeometrie nicht gerendert wird, nur durch Modele (für die Fenster Scheiben). Damit könnte einiges an FPS gespart werden und einiges würde schneller laufen ohne rum tricksen zu müssen.
Bitte um Antwort, wenn Sie wieder "zu Hause" sind JCL
cYa Sebastian
Tutorials: [Blender]Terrain creation ENG/GER [Blender]Low Poly Tree Modeling [GIMP]Create a Texture for Terrains CLICK HERE
|
|
|
Re: Entitys weg clippen, wenn Wand zwischen ist...
[Re: Damocles]
#155998
09/22/07 14:27
09/22/07 14:27
|
Joined: Sep 2003
Posts: 5,900 Bielefeld, Germany
Pappenheimer
Senior Expert
|
Senior Expert
Joined: Sep 2003
Posts: 5,900
Bielefeld, Germany
|
Quote:
Was man höchstens machen könnte ist ein Modell einem Block zuweisen. Wird der Block nicht gerendert, wird auch das Modell nicht gerendert.
Du meinst, eine WMP, eine Mapentity, in der Models positioniert werden?
|
|
|
Re: Entitys weg clippen, wenn Wand zwischen ist...
[Re: Damocles]
#156000
09/22/07 15:17
09/22/07 15:17
|
Joined: May 2005
Posts: 2,713 Lübeck
Slin
Expert
|
Expert
Joined: May 2005
Posts: 2,713
Lübeck
|
Um mal mich selbst zu zitieren  ( http://www.coniserver.net/ubbthreads/showflat.php/Cat/0/Number/787215/an/0/page/0#Post787215): Quote:
Wenn jetzt z.B. ein "Zombie" mit dem Mittelpunkt hinter einem anderen steht, oder zur hälfte hinter einer Wand oder was auch immer, dann wird es nicht mehr dargestellt, obwohl es zum Teil eigentlich noch sichtbar ist.
c_trace ist außerdem recht langsam. Bei zehn 10000poly Modellen würde es sich wohl lohnen, aber bei tausend 100-1000 poly Modellen, ist es viel zu langsam. Auch wenn nur jeden 15. frame "getraced" wird, geschieht es immer gleichzeitig und wird jeden 15. frame heftig stocken. Auch dies könnte man ändern, indem von den 1000 Modellen jeweils 66 überprüfen, ob etwas im weg ist. Auch dies ist nicht gerade schnell aber vielleicht noch zumutbar.
Es bleibt aber das erste Problem. Es müssten also verschiedene Teile eines Modelles überprüft werden. Mit vec_for_vertex ist dies zwar kein problem, aber es bedeutet auch mindestenz 8 zusätzliche aufrufe von c_trace pro Modell. 8*66 = 528, 528 mal c_trace ist aber nicht mehr besonders zumutbar, und wäre ein erheblicher Implementierungsaufwand, da die 8 vertices für jedes modell per Hand gesetzt werden müssten. Selbst bei überprüfen aller Vertices könnte im schlechtesten fall noch das zuerst genannte Problem zutreffen.
Tatsächlich dachte ich, dass BSP dieses normalerweise durch das Zerlegen des Levels in Regionen und zusätzlichem zuordnen von Modellen zu den entsprechenden Regionen, selbst handhabt...
Für vec_for_screen ist es egal, ob etwas im weg ist oder nicht und selbst wenn, würde das erste Problem zutreffen
Ich habe keine Idee, die dieses Problem lösen könnte, außer eben gutes Scene Management durch die Engine.
Das mit den Triggern ist aber wirklich eine relativ simple und teilweise auch sehr sinnvolle Sache glaube ich.
Last edited by Slin; 09/22/07 15:17.
|
|
|
Re: Entitys weg clippen, wenn Wand zwischen ist...
[Re: rvL_eXile]
#156001
09/22/07 18:09
09/22/07 18:09
|
Joined: Sep 2003
Posts: 5,900 Bielefeld, Germany
Pappenheimer
Senior Expert
|
Senior Expert
Joined: Sep 2003
Posts: 5,900
Bielefeld, Germany
|
Dann hilft doch nur BSP wie in Half-Life 2:
Die Fenster haben keine Löcher, sondern nur ein FFP environement mapping oder Spiegelung, der Eingang hat einen Vorraum, der ein direktes Einsehen von draußen verhindert, man muß also einmal um die Ecke gehen.
Oder man macht es über einen Schalter beim Türeingang (Trigger oder Abfrage, ob der Spieler sich innerhalb des Quaders des Hauses befindet), der die Modelle im Moment des Betretens erschafft. Für Blicke von außen ins Haus, fasst man die Modelle im Haus in einem Modell zusammen.
|
|
|
Re: Entitys weg clippen, wenn Wand zwischen ist...
[Re: rvL_eXile]
#156002
09/23/07 09:32
09/23/07 09:32
|
Joined: Apr 2005
Posts: 4,506 Germany
fogman
Expert
|
Expert
Joined: Apr 2005
Posts: 4,506
Germany
|
Sollte es eigentlich nicht schon so sein...? Zumindest ist das auch meine Erfahrung. Aus dem Manual: Quote:
...When rendering a frame, the engine loops through the BSP regions to find out which region the camera is currently in. Once it's found it, it uses the PVS to find out what regions might be seen from there, and tosses out the regions that can't be seen under any circumstance - including all objects in those regions. This is a very effective form of visibility determination and can remove up to 90% of all objects, depending on the level architecture.
Wenn man also, wie Pappenheimer so schön beschreibt, die Level richtig konstruiert, werden die Entities automatisch ausgeblendet.
no science involved
|
|
|
Re: Entitys weg clippen, wenn Wand zwischen ist...
[Re: fogman]
#156003
09/23/07 13:12
09/23/07 13:12
|
Joined: Apr 2005
Posts: 3,076 Germany, NRW
rvL_eXile
OP

3D Artist
|
OP

3D Artist
Joined: Apr 2005
Posts: 3,076
Germany, NRW
|
Ich hab gerade en kleinen Test gemacht, da meine Räume noch offen sind. Habe einfahc mal einen Hollow Cube erstellt un 50 Entitys drin platziert. Diese werden nicht von der Cam erfasst. Es scheint also daran zuliegen ob ein Raum offen oder geschlossen ist... Dann habe ich aber ein weiteres Problem, denn wenn ich eine Tür einbaue, dann werden die Entitys wieder gerendert... Egal von welcher Seite ich schaue...
cYa Sebastian
Tutorials: [Blender]Terrain creation ENG/GER [Blender]Low Poly Tree Modeling [GIMP]Create a Texture for Terrains CLICK HERE
|
|
|
Re: Entitys weg clippen, wenn Wand zwischen ist...
[Re: rvL_eXile]
#156004
09/23/07 14:19
09/23/07 14:19
|
Joined: Jul 2001
Posts: 6,904
HeelX
Senior Expert
|
Senior Expert
Joined: Jul 2001
Posts: 6,904
|
Ich glaube es macht keinen Sinn, wild darüber zu spekulieren  Kurz zusammengefasst: BSP tree rendering nutzt die Tatsache aus, dass ein Level so aufgebaut ist, dass es Orte gibt, an denen man _sicher_ weiß, dass andere Orte/Areale NICHT sichtbar sind. Wenn du also einen Raum hast und da ist eine Wand in der Mitte, die an der anderen Seite des Raumes offen ist, dann wird alles hinter der Wand gerendert werden, weil die Kamera ja theoretisch auch so stehen kann, dass beide Seiten des Raumes gesehen werden können. Das geht jetzt alles noch mehr ins Detail, deshalb Folgendes: Das BSP Verfahren ist ein sehr mächtiges Verfahren. Mit Sachverstand, gutem Leveldesign und Kenntniss über die Vor- und Nachteile, kann man superschnelle Levels erzeugen und auch die Compilerzeit positiv, als auch negativ beeinflussen. Zum Glück gibt es zahlreiche Dokumente, die das alles mal zusammenfassen: BSP Map Optimization Erklärung des Binary Space Partioning Verfahrens Visibility Determination Controlling Geometry Visibility and Compile Times Optimization (level design) Darüberhinaus wird auch geschildert, wie man den BSP Aufbau debugged (indem man dem gesamten BSP mesh, also in unserem Fall den block surfaces, zur Laufzeit ein FFP wireframe material gibt, sodass man sieht welche Areale zur Zeit sichtbar sind und welche eben nicht. Somit kann man schnell feststellen das bestimmte Areale fälschlicherweise noch gerendert werden - und somit Fehler im Leveldesign vorliegen). Conitec hat bewussterweise den BSP renderer in ein A7 pro feature geändert, weil die meisten user keinen Plan haben, wie man das ganze Ding denn nun effizient benutzt und was man dafür machen muss. Alle als BSP kompilierten maps werden mit dem ABT renderer gerendert, wenn man keine Pro Lizenz hat. Um noch mal auf den Kern des Themas zurückzukommen: der Aufwand, festzustellen, ob ein Model hinter einem anderen Mesh/Model steht und nicht sichtbar ist, ist unverhältnismäßig groß. Wenn deine Levels auf Modelbasis erstellt sind, kannst du eine Art BSP emulation mit manuell gesetzten Triggern erzeugen. So kannst du ganz einfach Entities in einem Skill eine Art Areal-Nummer geben und jenachdem durch welchen Trigger man läuft, wird nur das aktuelle und oder die angrenzenden Areal ein/aus geschaltet. Ist kein großer Aufwand... also könntest du das mal selbst probieren. c_trace Geschichten sind auch langsam, wenn du für sowas da rumfrickelst. Eventuell ist der Gewinn, den du durch einen eigenen clipping algorithmus auf c_trace Basis erzielst, genauso hoch, wie die Performance, die durch deine Rumorgelei mit c_trace verloren geht.. also kommst du vielleicht sogar bei 0 wieder raus, wahrscheinlich erzielst du dennoch einen negativen Gewinn... also quasi verbratene Frames. Ich hoffe mal, das dich das ein wenig weiterbringt 
Last edited by HeelX; 09/23/07 14:23.
|
|
|
Re: Entitys weg clippen, wenn Wand zwischen ist...
[Re: HeelX]
#156005
09/23/07 17:00
09/23/07 17:00
|
Joined: Nov 2004
Posts: 7,121 Potsdam, Brandenburg, Germany
Machinery_Frank
Senior Expert
|
Senior Expert
Joined: Nov 2004
Posts: 7,121
Potsdam, Brandenburg, Germany
|
Ich stimme mit HeelX überein und hatte auch mal mit ihm darüber per MSN diskutiert. Ich halte diese Idee für gut, ein eigenes Szenenmanagment zu bauen (nicht mit Traces sondern mit Zonen und Portalen).
Aber ich würde empfehlen, nicht in großen Schleifen alle Modelle und deren Skills zu prüfen, sondern einen eigenen Szenenbaum zu integrieren. Ein Raum bekommt also eine Nummer und einen Verweis auf die ihm zugehörigen Modelle. Damit kann man gezielt nur die notwendigen Objekte ein- und ausschalten.
Interessant wäre für dieses Feature, wenn man in 3dgs so einen Szenenbaum zur Verfügung hätte und in einem Objekt die Eigenschaft Sichtbarkeit ändert und damit automatisch alle Kindobjekte mit beeinflussen könnte.
Aber sicher lässt sich sowas auch manuell programmieren. Nur wäre es leichter, diese Gruppen von Objekte gleich im WED zu definieren. Anderenfalls müsste der Leveldesigner Listen von Modellen erstellen und bei jeder Änderung diese Listen wieder aktualisieren, wobei sich natürlich Fehler einschleichen.
Hat denn überhaupt jemand den neuen A7-BSP getestet auf seine Rendergeschwindigkeit (mit und ohne Shader). Leider gibt es keine Demos dazu. Wenn er für Indoor-Level den ABT deutlich schlägt, wäre das eine wichtige und interessante Information, die den Kauf der Pro-Version in Betracht ziehen könnte.
Models, Textures and Games from Dexsoft
|
|
|
|