2000 polys?

Blitz3D Forums/Blitz3D Programming/2000 polys?

Ross C(Posted 2003) [#1]
i was doing some test on surfaces and polys, and it seems that if an entity has more than 2000 polys, it renders alot slower than if it has 2000 or less.

1800 polys=83 fps
1900 polys=81 fps
2100 polys=70 fps

is this normal? is it a direct x limition or something?


Ken Lynch(Posted 2003) [#2]
The drop in speed against increase in polygons is not necessarily going to be linear. I suppose it also depends on the number of vertices, if you have a model with 2000 polys, assuming they are all separate, you need 6000 vertices, 3 for each poly. A model with 1000 polys would need only 3000 vertices. It also depends on textures and other things.

Bear in mind I'm no expert on the internal workings of DirectX and 3D graphics cards, but I think I'm on the right lines.


DrakeX(Posted 2003) [#3]
you've got a GeF4ti4600 and it's slowing down to 70FPS with a 2100-poly model?

maybe it's something wrong with your comp. i have a radeon 9500 (not as good) and doesn't slow down till i've got tens of thousands of polys onscreen. 2100 polys should be no problem.


Zmatrix(Posted 2003) [#4]
"you've got a GeF4ti4600 and it's slowing down to 70FPS with a 2100-poly model?">

Maybe its a ton of surfaces?


Zmatrix


Ross C(Posted 2003) [#5]
yeah, it's a test with many surfaces. but check this out anyway. segsize 22 is a sphere with 1800 odd polys in it, seg size 23 has 2100 odd. you'll notice the difference in fps.

key 1 to generate lots more spheres.
key 2 to generate spheres one at a time
key 3 to increase the segsize (increase poly count in each sphere)
key4 to decrease segsize

please DON'T make the poly count go to high, some computer wil crash at different amounts. mines goes at 700,000

Graphics3D 800,600
SetBuffer BackBuffer()


cam=CreatePivot()
camera=CreateCamera(cam)
PositionEntity camera,0,0,-20

light=CreateLight()

;tex=LoadTexture("fire.bmp")

Dim objects(1200)

ssize=22
ob=0

For loop=0 To ob
	objects(loop)=CreateSphere(ssize)
;	EntityTexture objects(loop),tex
	PositionEntity objects(loop),Rnd(-10,10),Rnd(-10,10),Rnd(-10,10)
;	EntityAlpha objects(loop),Rnd(0.1,1)
Next



While Not KeyHit(1)
	
	For loop=0 To ob
		temp=Rnd(0.25,8)
		TurnEntity objects(loop),temp,temp,temp
	Next
	
	If KeyDown(2) Then
		objects(loop)=CreateSphere(ssize)
;		EntityTexture objects(loop),tex
		PositionEntity objects(loop),Rnd(-10,10),Rnd(-10,10),Rnd(-10,10)
;		EntityAlpha objects(loop),Rnd(0.1,1)
		ob=ob+1
	End If
	
	If KeyHit(3) Then
		objects(loop)=CreateSphere(ssize)
;		EntityTexture objects(loop),tex
		PositionEntity objects(loop),Rnd(-10,10),Rnd(-10,10),Rnd(-10,10)
;		EntityAlpha objects(loop),Rnd(0.1,1)
		ob=ob+1
	End If
	
	If KeyHit(4) Then
		ssize=ssize+1
		For loop=0 To ob
			FreeEntity objects(loop)
			objects(loop)=CreateSphere(ssize)
			PositionEntity objects(loop),Rnd(-10,10),Rnd(-10,10),Rnd(-10,10)
;			EntityTexture objects(loop),tex
		Next
	End If
	If KeyHit(5) Then
		ssize=ssize-1
		For loop=0 To ob
			FreeEntity objects(loop)
			objects(loop)=CreateSphere(ssize)
			PositionEntity objects(loop),Rnd(-10,10),Rnd(-10,10),Rnd(-10,10)
;			EntityTexture objects(loop),tex
		Next
	End If
	If KeyDown(203) Then TurnEntity cam,0,-1,0
	If KeyDown(205) Then TurnEntity cam,0,1,0	
	If KeyDown(200) Then MoveEntity camera,0,0,1
	If KeyDown(208) Then MoveEntity camera,0,0,-1
	
	
	UpdateWorld
	RenderWorld
	If MilliSecs()<timer+1000 Then
								frame=frame+1
	Else
								fps=frame
								frame=0
								timer=MilliSecs()
	End If
	Text 0,0,"tris="+TrisRendered()+" ob="+ob+" FPS="+fps+" seg size="+ssize+" vid mem="+AvailVidMem()
	Flip False
Wend
End



Warren(Posted 2003) [#6]
You know, we're talking about a net difference of around 2ms. That doesn't sound like much of a slowdown to me.

When you have relatively high framerates (60+) you can get a seemingly major drop in FPS by adding very little. 83 to 70 FPS looks tragic on the surface, but do the math .. it's really not all that much.


Ross C(Posted 2003) [#7]
ok, well when i run them tests, i make

ob=130>>> segsize=20 >>>fps 120
ob=130>>> segsize=21 >>>fps 114
ob=130>>> segsize=22 >>>fps 105
ob=130>>> segsize=23 >>>fps 74 (at this point each sphere has 2100 polys in it
ob=130>>> segsize=24 >>>fps 69
ob=130>>> segsize=25 >>>fps 65

so the big drop seems to occur when each object has 2000 or more polys in it


SSS(Posted 2003) [#8]
another possibility is that your computer has

the problem is surfaces not polygons, try this only one object with 99 segs... my computer is still at 215 fps


Ross C(Posted 2003) [#9]
i'm still getting the drop. well, i'll just have to use models with less than 2000 polys. which is fine. just thought it was a bit odd. thanks anyway for your tests and suggestions, very grateful!


sswift(Posted 2003) [#10]
I don't get a drop. But then I also get like 500fps with the default which is over 2000 polys.


Doclar1(Posted 2003) [#11]
Now I could be wrong but, don't some of this depend on your
current graphics driver (version) / settings that your card
is tring to do ALL those polys?



....just a thought