it depends on the genre you are talking about. I think you work on something fps/3rdps-ish, right?
There are several traps you should ship around carefully. A high polycount doesn't neccessarily mean a low framerate, especialy on faster cards. But there are several nonos you shoulda avoid:
-Too much Linepicking. CameraPick, LinePick, EntityVisible etc. are in this categorie.
-MeshesIntersect or other exotic and slow Commands.
-Too much bones Animations, with too bug animated meshes.
-logical bottlenecks in your code. Sometimes people are using insane slow algotrithms.
-Meshes not fregmented, so the camera cannot skip rendering parts that are out of sight.
-Too many surfaces onscreen
In case you have one huge map mesh I have written a little app lately that will take a huge mesh and split it into multiple fragments. You will then be abl to lower the camerarange to allow the camera to ignore geometry that is out of its range or behind its back:
http://www.blitzbasic.com/codearcs/codearcs.php?code=1244Based on this Map fragmentation code you may be able to create a working VIS occlusion system, btw.
Well I think the best way to optimize speed is to learn how to find bottlenecks. Learn how to include some benchmarktests in your engine, so you'll see what's slow and what's not. And also try to test commands in gereral, like
t1=millisecs()
for i=0 to 1000000
n=camerapick(camera,320,240)
next
t2=millisecs()
print "this took "+((t2-t1)/1000.0)+" secs"
And of course, when you design maps and meshes for a game, you should always be aware of the polycount and how it should be.