Speed geht bei vielen Sprites in den Keller, Optimierung..?
Übersicht

IonPainterBetreff: Speed geht bei vielen Sprites in den Keller, Optimierung..? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
habe mir folgende funktion geschrieben:
Code: [AUSKLAPPEN] Function EmitBaum(x#, y#, z#) Baum.BaumDaten = New BaumDaten Baum\Baum1 = LoadSprite("baum.bmp",4+1) Baum\Baum2 = LoadSprite("baum.bmp",4+1) SpriteViewMode Baum\Baum2, 2 TurnEntity Baum\Baum2, 0, 90, 0 SpriteViewMode Baum\Baum1, 2 EntityFX Baum\Baum1, 16 EntityFX Baum\Baum2, 16 ScaleSprite Baum\Baum1, 5, 5 ScaleSprite Baum\Baum2, 5, 5 PositionEntity Baum\Baum1, x, y, z PositionEntity Baum\Baum2, x, y, z End Function und wollte jetzt ein *kleines* wäldchen anlegen: Code: [AUSKLAPPEN] For x = 1 To 1000 Step 25 For z = 1 To 1000 Step 25 EmitBaum(x,5,z) Next Next leider geht bei mir der speed richtig in den keller (5 fps) und das obwohl die grafikkarte nicht gerade die schlechteste ist (Radeon 9800) gibt es optimierungsmöglichkeiten um wieder in einen annehmbaren framebereich zu kommen, oder muss ich den wald roden? ![]() IonPainter |
||
INpac |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hmm...
du könntest vielleicht ein single-surface-system coden, wenn die bäume nicht mehr bewegt und irgendwie modifiziert werden. das sollte dann akzeptabel schnell gehen.. oder du versuchst mal, die anzahl der sprites zu reduzieren, aber im VRAM-mode die sprites zu laden, also "...,4+1+256)" |
||
IonPainter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hab mal nen anderen ansatz versucht:
Code: [AUSKLAPPEN] BaumTex = LoadTexture("baum.bmp") BaumX = CreateMesh() Surface = CreateSurface(BaumX) V1 = AddVertex(Surface, 0, 0, 0) V2 = AddVertex(Surface, -1, 0, 0) V3 = AddVertex(Surface, 0, 1, 0) V4 = AddVertex(Surface, -1, 1, 0) S1 = AddTriangle(Surface, v1, v2, v3) S2 = AddTriangle(Surface, v4, v2, v3) EntityFX BaumX, 16 EntityTexture BaumX, BaumTex das scheitert allerdings schon am texturieren, das mesh bleibt immer schwarz, die textur is 100% da, als sprite kann ich sie ja laden, woran kann das liegen? |
||
darkshadow |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Die Texkoords nicht richtig gesetzt? | ||
IonPainter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
jup das wars... | ||
IonPainter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
so jetzt habe ich zwar einen sprite ersatz, bekomme die eizelnen meshes aber nicht zusammengefasst.
Code: [AUSKLAPPEN] BaumX = CreateMesh() Surface = CreateSurface(BaumX) V1 = AddVertex(Surface, 0, 0, 0, 1, 0) V2 = AddVertex(Surface, -1, 0, 0, 0, 0) V3 = AddVertex(Surface, 0, 1, 0, 1, 1) V4 = AddVertex(Surface, -1, 1, 0, 0, 1) S1 = AddTriangle(Surface, v1, v2, v3) S2 = AddTriangle(Surface, v4, v2, v3) EntityFX BaumX, 16 BaumTex = LoadTexture("baum.bmp",1+4+256) Wald = CreateMesh() For x = 1 To 1000 Step 25 For z = 1 To 1000 Step 25 EmitBaum(x,0,z) Next Next und die funktion: Code: [AUSKLAPPEN] Function EmitBaum(x#, y#, z#) Baum1 = CopyEntity(Baumx) Baum2 = CopyEntity(Baumx) TurnEntity Baum2, 0, 90, 0 PositionEntity Baum1, x+.5, y, z-.5 PositionEntity Baum2, x, y, z EntityTexture Baum1, BaumTex EntityTexture Baum2, BaumTex AddMesh Baum1, Wald AddMesh Baum2, Wald FreeEntity Baum1 FreeEntity Baum2 End Function wenn ich das freeentity auskommentiere sind die bäume zwar drin aber halt 1600 meshes, lasse ich freeentity drin, sehe ich garnichts von den bäumen. |
||
![]() |
Shodan |
![]() Antworten mit Zitat ![]() |
---|---|---|
Innerhalb von EmitBaum() ist
Code: [AUSKLAPPEN] PositionEntity Baum1, x+.5, y, z-.5 PositionEntity Baum2, x, y, z verkehrt. Du musst PositionMesh benutzen. Code: [AUSKLAPPEN] PositionMesh Baum1, x+.5, y, z-.5 PositionMesh Baum2, x, y, z sonst stehen alle Bäume im Wald-Mesh auf der selben Stelle. Die Bäume, die verteilt standen, waren die kopierten Bäume Baum1 u. Baum2. Deswegen war scheinbar nix mehr da, wenn FreeEntity aktiv ist ![]() |
||
IonPainter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
gut hab jetzt ein wald und ein weiteres prob, will ein bissl fake-cullen nur geht das irgendwie nicht:
Code: [AUSKLAPPEN] Const BaumMeshes = 3 Const Baeume = 3 Dim Wald(1000) Global TFPS Global FPS Global TimerFPS AppTitle "THE BAUM! by IonPainter" Graphics3D 800, 600, 32, 2 SetBuffer BackBuffer() Kamera = CreateCamera() MoveEntity Kamera, 0, 5, -1 CameraRange Kamera, 0.01, 1000 ;<---########################### Global BaumX = CreateMesh() BaumBrush = LoadBrush("baum.bmp",1+4+256) Surface = CreateSurface(BaumX,BaumBrush) V1 = AddVertex(Surface, 0, 0, 0, 1, 1) V2 = AddVertex(Surface, -1, 0, 0, 0, 1) V3 = AddVertex(Surface, 0, 1, 0, 1, 0) V4 = AddVertex(Surface, -1, 1, 0, 0, 0) S1 = AddTriangle(Surface, v1, v2, v3) S2 = AddTriangle(Surface, v4, v2, v3) HideEntity BaumX For x = 1 To 1000 Step BaumMeshes ;<---################################## Wald(i) = CreateMesh() EntityFX Wald(i), 16 For z = 1 To 1000 Step Baeume ;<---################################## EmitBaum(x,0,z,i) Next i=i+1 Next While Not KeyHit(1) If KeyDown(200) Then MoveEntity Kamera, 0, 0, .1 If KeyDown(208) Then MoveEntity Kamera, 0, 0, -.1 If KeyDown(203) Then TurnEntity Kamera, 0, 1, 0 If KeyDown(205) Then TurnEntity Kamera, 0, -1, 0 ;Fake Culling For Zaehler = 0 To i If EntityDistance(Kamera, Wald(Zaehler)) > 100 Then HideEntity Wald(Zaehler) Else ShowEntity Wald(Zaehler) EndIf Next UpdateWorld RenderWorld Text 0,0,"Polys: "+TrisRendered() showfps() Flip 0 Wend Function EmitBaum(x#, y#, z#, i) Baum1 = CopyMesh(Baumx) Baum2 = CopyMesh(Baumx) RotateMesh Baum2, 0, 90, 0 PositionMesh Baum1, x+.5, y, z-.5 PositionMesh Baum2, x, y, z ScaleMesh Baum1, 4, 4, 4 ScaleMesh Baum2, 4, 4, 4 AddMesh Baum1, Wald(i) AddMesh Baum2, Wald(i) FreeEntity Baum1 FreeEntity Baum2 End Function Function ShowFPS () TFPS = TFPS + 1 If MilliSecs () - TimerFPS => 1000 Then TimerFPS = MilliSecs () FPS = TFPS TFPS = 0 End If Text (0,10,"FPS : "+FPS) End Function man kommentiere das culling aus und schon läufts, aber warum zum henker kann ich keine entitydistance berechnung auf meinen wald anwenden? |
||
![]() |
Shodan |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Achte mal auf deine Zählervariablen. i ist um 1 zu hoch am ende der Baumerstellung und deine Culling-Schleife fängt bei 0 an anstatt bei 1 !
Desweiteren solltest du die einzelnen Bäume in Quadraten anordnen und nicht in langen Reihen. das lässt sich besser cullen. Den Mittelpunkt der Meshes im Zentrum des Quadrats vorrausgestzt. |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
haste mal direkt mit neuerBaum=CopyEntity(MasterBaum) versucht ? Und AutoFade gesetzt ? Also 1600 Bäume sind ja nicht gerade viel . Desweiteren kannste die Bäume auch nach dem Clonen mit ScaleEntity größer oder kleiner machen . Übrigens ist ein Wald als ganzes (ein Mesh) nicht so gut für die performance . |
||
IonPainter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ko hab ich probiert mit =CopyEntity(MasterBaum). dann ist der speed so bei 5 fps... | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group