Gamestudio Links
Zorro Links
Newest Posts
Zorro 2.70
by jcl. 09/29/25 09:24
optimize global parameters SOLVED
by dBc. 09/27/25 17:07
ZorroGPT
by TipmyPip. 09/27/25 10:05
assetHistory one candle shift
by jcl. 09/21/25 11:36
Plugins update
by Grant. 09/17/25 16:28
AUM Magazine
Latest Screens
Rocker`s Revenge
Stug 3 Stormartillery
Iljuschin 2
Galactic Strike X
Who's Online Now
0 registered members (), 17,416 guests, and 5 spiders.
Key: Admin, Global Mod, Mod
Newest Members
krishna, DrissB, James168, Ed_Love, xtns
19168 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Leistungsoptimierung Texturen #404090
07/02/12 11:06
07/02/12 11:06
Joined: May 2008
Posts: 113
Italien, Südtirol, Naturns
P
Patrick92 Offline OP
Member
Patrick92  Offline OP
Member
P

Joined: May 2008
Posts: 113
Italien, Südtirol, Naturns
Hallo

Wir arbeiten gerade an einem RPG. Um die Leistung zu optimieren dachten wir uns, dass wir die Auflösung der Modelltexturen in der Entfernung verkleinern. Von 512x512 (bzw. 256x256) auf 64x64 (bzw 32x32). Dazu belegen wir die Modelle mit 2 skins und der Funktion

Code:
action f_entity_default()
{
	my.skin = 1;
	
	while(1)
	{
		if(vec_dist(my.x,camera.x) < 1000)
		{
			my.skin = 1;
		}
		if(vec_dist(my.x,camera.x) > 1000)
		{
			my.skin = 2;
		}
		wait(1);
	}
	wait(1);
}



Dies ist nur ein großer aufwand. Weshalb wir Fragen wollten ob es sich Kosten Nutzen technisch auszahlt und ob es wirklich etwas bringt, da die FNC (unter "count off") auf über 1500 ansteigt???

Vielen Dank
Patti & Weisl

Re: Leistungsoptimierung Texturen [Re: Patrick92] #404094
07/02/12 12:12
07/02/12 12:12
Joined: Mar 2006
Posts: 1,993
Karlsruhe
PadMalcom Offline
Serious User
PadMalcom  Offline
Serious User

Joined: Mar 2006
Posts: 1,993
Karlsruhe
Hehe schaut euch mal das Thema LOD an, das regelt das ganze für euch automatisch. Ihr erstellt dazu 3 Modelle mit Dateinamen myModell_0.mdl, myModell_1.mdl, ... und setzt die LOD-Einstellung der Engine auf einen gewissen Distanzwert. Steht alles im Manual laugh Viel Erfolg!

Re: Leistungsoptimierung Texturen [Re: Patrick92] #404096
07/02/12 12:22
07/02/12 12:22

C
chris_oat
Unregistered
chris_oat
Unregistered
C



hey,

ich glaube kaum das sich an hand deines Beispiels die Texturengesamtgröße ändert, weil bei dem Modell ja schon beide Texturen im Speicher sind. Dann müsstest du sie wohl eher per script definieren, dazu kenn ich mich aber nicht aus.
Einen anderen wertvollen Tip kann ich dir noch geben. Setze bei allen Modellen das Häckhen "extern" bei Texture, dadurch wird nicht die Texture ins Modell gespeichern. Das hat den vorteil das wen du z.b. ein Baum-Modell hast und dieses mehrmals im Level platzierst, nur einmal die Texture in den Speicher geladen wird.

Re: Leistungsoptimierung Texturen [Re: ] #404102
07/02/12 12:55
07/02/12 12:55
Joined: Jul 2001
Posts: 6,904
H
HeelX Offline
Senior Expert
HeelX  Offline
Senior Expert
H

Joined: Jul 2001
Posts: 6,904
Interessante Fragestellung!

Nehmen wir an, dass du eine RGB 512x512 Textur im TGA Format hast und du hast mip_levels standardmäßig auf 4 stehen, dann generiert die engine für dich die mipmaps 256x256, 128x128 und 64x64 für dich. Die zweite 64x64 Textur erhält dann die mipmaps 32x32, 16x16 und 8x8. Das würde grob gerechnet bei 24bit pro Pixel fast genau 1 MB für beide Texturen bedeuten, ohne dass sich mipmap Stufen überlappen. Bei einer 256x256 Textur hingegen hast du bei mip_levels = 4 die Texturen 256x256, 128x128, 64x64, 32x32 und 32x32, 16x16, 8x8 und 4x4. Das wäre zusammen 259 KB und genau 3 KB mehr als notwendig, da die 32x32 Stufe doppelt vorhanden ist. Problem ist, dass bei großen Landschaften mit weiter Sicht sowieso ein mip_level Wert von > 4 vorteilhaft ist und du dann bei einer Textur und der Ersatztextur dann mehrere überlappende mipmaps hast.

Du kannst zwar durch den Einsatz von DDS und einer Einschränkung auf bestimmte mipmap Stufen die Generierung dieser reduzieren (also z.B. für 512x512 nur die 256x256 mipmap und für die 64x64 nur die 32x32 mipmap) und so dann wieder Speicher zu sparen, nur ist das vom Aufwand her natürlich erheblicher. Zwar kannst du das durch Batch-orientierte Programme wie die NVidia Texture Tools automatisieren, aber dann müsstest du vor jedem build ein update fahren, weil sich ja evtl die Grafiken verändert haben.

Ich weiß ja auch nicht, ob du shader mit Normalmaps usw. verwendest, da multipliziert sich der Aufwand dann nochmal enstprechend der Texturen, die du für jede Diffuse-Textur brauchst.

Ein weiteres Problem ist auch, dass die engine dann immer zwei Texturen führen muss und zusätzlichen overhead hat. Ich kann mir vorstellen, dass gerade bei statischen Entities, die dann damit ja nicht mehr statisch sind, zusätzliche Performance benötigt wird, die man somit verschwendet.

Eine viel einfachere, zugleich aber auch mächtigere Lösung wäre es, wenn du einen Shader verwendest, der beim Lookup tex2Dbias verwendet und du mit dem bias-Wert die Grenze, wann eine nächste Mipmap verwendet wird, entsprechend änderst. Du kannst auch theoretisch das Gamestudio-feature ausnutzen und techniques "lod0", "lod1", "lod2", or "lod3" ausnutzen, um die shader schrittweise abzuschalten und dann pro LOD Stufe z.B. den bias je nach LOD Stufe einzustellen. Die DIstanz der LOD Stufen stellst du dann über die d3d_lodfactor Variablen ein.

Wenn dir das zu kompliziert ist, kannst du auch einfach pro Entity die LOD0/LOD1 flags auswerten um den lod-step 0..3 zu berechnen und den dann über einen entity skill an den shader zu senden. Aufjedenfall ist es dann so oder so lohnenswert einfach mip_levels auf 8 oder sowas zu stellen und dann mit bias den miplevel im shader zu verwenden.

Du kannst mit den NVidia Texture Tools aus Einzelbildern komplett gemipmappedte Texturen zusammenstecken, allerdings weiß ich nicht wie sich das Tool verhält, wenn in der Kette welche fehlen und wie das aussieht, wenn dann im Shader darauf zugegriffen wird - ist das dann schwarz, wird die letzte mipmap-Stufe verwendet oder was? Naja, aber theoretisch könntest du dann selektiv deine Texturen ausdünnen (also mipmap Stufen rausnehmen), als DDS speichern (lädt schneller und ist komprimiert) und über den shader den bias-Wert verändern (nur eine Textur im Speicher und kein zusätzlicher overhead).

So würde ich das mal ausprobieren und testen. Auf jedenfall musst du dann mal einen Stresstest fahren, um zu gucken was sich performancemäßig ergibt. Es kann auch sein, dass das sprichwörtlich so matschig und kacke aussieht, dass du relativ schnell den Schluss ziehst, dass ihr das nicht macht wink

In jedem Fall empfehle ich, dass ihr euch für die Produktion des Spiels dafür eigens Kommandozeilentools schreibt, die die Modelle und deren Texturen automatisch aktualisieren und so weiter. Wenn Ihr da Hilfe braucht, kann ich euch gerne weiterhelfen.

Viel Erfolg,
-Christian

[EDIT] Achja, und es ist äußerst wichtig, dass Texturen, die mehrfach auf anderen Modellen benutzt werden, als externe Texturen verlinkt werden, damit die nur einmal in den Speicher geladen wird. Texturen die nur einmal im ganzen Spiel auf einem Modell vorkommen (oder nur einmal im ganzen Level), sollten hingegen intern abgespeichert werden, weil man sich dann den zusätzlichen Dateizugriff auf die Festplatte und die Dekompression bei WRS Archiven erspart - das Modell wird dann nur einmal geladen.

Last edited by HeelX; 07/02/12 13:00.
Re: Leistungsoptimierung Texturen [Re: ] #404103
07/02/12 12:58
07/02/12 12:58
Joined: Aug 2007
Posts: 1,922
Schweiz
Widi Offline
Serious User
Widi  Offline
Serious User

Joined: Aug 2007
Posts: 1,922
Schweiz
Gehe im MED mal auf "Object", "Manage Skins", "Skin settings"
Jetzt wähle eine skin aus und gehe auf "Skin Settings", "Texture Format"
Dort gibt es ein Häckchen zum setzen, "Mipmaps"
Das erzeugt automatisch die kleineren Texturen für grössere Entfernungen.
Schau auch im Handbuch unter "mip_levels".

Re: Leistungsoptimierung Texturen [Re: Patrick92] #404104
07/02/12 13:29
07/02/12 13:29
Joined: Jan 2002
Posts: 4,225
Germany / Essen
Uhrwerk Offline
Expert
Uhrwerk  Offline
Expert

Joined: Jan 2002
Posts: 4,225
Germany / Essen
Originally Posted By: Patrick92
Wir arbeiten gerade an einem RPG. Um die Leistung zu optimieren dachten wir uns ...

Hier noch eine ganz einfache Antwort. Deine Einleitung hört sich nicht gerade so an, als ob ihr ein ganz konkretes Performance Problem habt. Deswegen: Finger weg! Wenn ihr an einem RPG arbeitet, dann bringt es zu Ende. Wenn ihr es zu Ende gebracht habt und es dann zu langsam läuft, dann und erst dann optimieren.

Ob eure Optimierung was bringt? Ich würde auf Nein tippen. Ich würde tippen, dass ihr sie damit sogar verschlechtert. Aber überprüfen könnt ihr das nur selber. Mit dem Debug Panel, mehreren Rechnern und sehr viel Geduld.


Always learn from history, to be sure you make the same mistakes again...
Re: Leistungsoptimierung Texturen [Re: Uhrwerk] #404159
07/03/12 16:31
07/03/12 16:31
Joined: May 2008
Posts: 113
Italien, Südtirol, Naturns
P
Patrick92 Offline OP
Member
Patrick92  Offline OP
Member
P

Joined: May 2008
Posts: 113
Italien, Südtirol, Naturns
Hallo
Danke für die schnelle Rückmeldung

Quote:
Deine Einleitung hört sich nicht gerade so an, als ob ihr ein ganz konkretes Performance Problem habt. Deswegen: Finger weg!


Das stimmt schon. Vor allem, da wir auch viele kleine Levels anstelle eines Großen haben. Wir wollten das nur schon klären, damit wir nicht nachträglich alle Modelle ändern müssen. Und teilweise die Framerate doch schon fast auf 30 herunterging.

Und nochmal ein Danke an HeelX für deine ausführliche Hilfe

Falls wir Fragen haben werden wir uns melden

Patti u Weisl

Re: Leistungsoptimierung Texturen [Re: Patrick92] #404168
07/03/12 18:57
07/03/12 18:57
Joined: Jan 2002
Posts: 4,225
Germany / Essen
Uhrwerk Offline
Expert
Uhrwerk  Offline
Expert

Joined: Jan 2002
Posts: 4,225
Germany / Essen
Originally Posted By: Patrick92
Und teilweise die Framerate doch schon fast auf 30 herunterging.

Und dann müsst ihr erstmal sehr genau erkunden, woran dass denn liegt. Das Debug Panel ist ein guter Start dafür. Einfach mal die Texturengröße reduzieren ist verschwendete Zeit. In diesem speziellen Fall ist es ja sogar nicht unwahrscheinlich, dass ihr das Problem damit verschlimmern würdet.


Always learn from history, to be sure you make the same mistakes again...

Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

Gamestudio download | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1