Lösung des ***.spr Overflow Fehlers

Nachdem ich mir diesen Text durchgelesen und als völlig falsch erkannt habe, ersetze ich ihn durch eine eigene Lösungsmethode, die nicht solche Radikalmethoden erzwingt. Die Fehlermeldung um die es geht, ändere ich nicht, sie lautet wie folgt:

Last 32 messages parsed.
0 0000 svc_bad
0 0000 svc_bad
[...]
0 0000 svc_bad
0 0000 svc_bad
BAD: -1:svc_bad
Host_error: PF_precache_model_I: 'sprites/***.spr(mdl)' overflow

Die Half-Life-Engine kann nur eine bestimmte maximale Zahl von Entity-models precachen. Im Falle von Counter-Strike wurde das Limit auf 512 Models reduziert. Die Fehlermeldung gibt lediglich an bei welchem Model die Engine war, als das Limit überschritten wurde, daher liegt der Fehler nicht am genannten Model. Dabei kann es sich um .mdl, .spr oder Nummern handeln (Brushmodels.) Alle sichtbaren Entitys werden von der Engine als Models angesehen, egal worum es sich tatsächlich handelt. Daher landet jedes brush-based Entity in dem Precache, da jedes ein eigenes Model darstellt. Point-Entitys die Sprites oder mdl-Models im Spiel anzeigen lassen, sind Modelgruppen, beispielsweise wird für 10 Entitys die dieselbe Datei ansprechen nur ein Model geladen, das jeweilige Sprite oder .mdl-File.

Es ist also ratsam sowohl brush-based Entitys zusammenzufügen (solange sie lokal beieinander liegen) oder ähnliche Sprites mit demselben Sprite anzeigen zu lassen.

Im Gegensatz zu der Aussage des vorherigen Autors dieses Artikels zählen nicht die Brushs in den brush-based Entitys, sondern nur die Entitys selber. Die Brushs existieren nach dem Kompilieren nicht mehr, sondern werden in Flächen umgerechnet. Daher verschwinden alle Seiten eines Brushs, die sich außerhalb der Map befinden oder von einem anderen Brush überdeckt werden. Dies ist auch der Grund, weshalb Säulen Bodenflächen in viele Fragmente zerreißen. Im Falle eines brush-based Entitys werden die sichtbaren Flächen der betroffenen Brushs zu einem einzigen Model zusammengefügt.

Man kann diesen Fehler also durch geschicktes Zusammenfassen von brush-based Entitys oder Ersetzen unterschiedlicher *.spr-Dateien bei ähnlichem Gebrauch (z.B. Glow-Sprites) entfernen, ohne unbedingt das halbe Inventar an Entitys löschen zu müssen.

Dabei sollte man darauf achten, nicht unbedingt an der Grenze von 512 Models entlang zu arbeiten, da die Engine auch während des Spiels neue Models precachen muss (Decals wie Einschusslöscher beispielsweise) Daher wäre es ratsam immer unterhalb von 500 Models zu bleiben (z.B. 400 brush-based Entitys und 50 verschiedene *.spr/*.mdl)

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.
 
half-life/tutorials/sprite_overflow.txt · Zuletzt geändert: 2006/06/13 15:10 von Protector