I believe that if meshes have different surface properties (texure, color, alpha etc) then those surfaces can not be combined into one surface and retain those distinct properties. Addmesh will it seems optimise surfaces that are painted with the same brush into single surfaces as shown below (I keep hearing people say addmesh does not combine surfaces, when it clearly does, so I suspect this a feature that Mark snuck in at some point). There is of course a vert limit on surfaces and I would assume that if a surface is already full then addmesh will make a new one. I have heard suggested that this sort of optimisation will be carried out on loaded meshes automatically which seems reasonable (Personally I think it should be optional). As to more fps, texture size will hit fillrate, so reducing texture size may well help on low end cards.
BTW I have noticed definate speedups when using addmesh and reducing the surface count, but you will need to consider other factors, like use of entityautofade and portaling techniques in deciding exactly what meshes you combine. You might want to throw some LOD into the mix as well.
Graphics3D 640,480,0,2
texture1=CreateTexture(128,128)
SetBuffer TextureBuffer(texture1)
Color 128,128,128 Rect 0,0,128,128
Color 128,0,0 Rect 0,0,64,64 Rect 64,64,64,64
texture2=CreateTexture(128,128)
SetBuffer TextureBuffer(texture2)
Color 128,128,0 Rect 0,0,128,128
Color 128,0,128 Rect 0,0,64,64 Rect 64,64,64,64
texture3=CreateTexture(128,128)
SetBuffer TextureBuffer(texture3)
Color 255,128,255 Rect 0,0,128,128
Color 128,0,255 Rect 0,0,64,64 Rect 64,64,64,64
; create 3 brushes
brush1=CreateBrush(255,255,255) BrushTexture brush1,texture1
brush2=CreateBrush(128,128,128) BrushTexture brush2,texture2
brush3=CreateBrush(64,64,64) BrushTexture brush3,texture3
; paintmesh with these brushes
; three solid cones (6 surfaces)
obj1=CreateCone(18) PaintMesh obj1,brush1
obj2=CreateCone(18) PaintMesh obj2,brush2
obj3=CreateCone(18) PaintMesh obj3,brush3
; three solid cylinders (6 surfaces)
obj4=CreateCylinder(18) PaintMesh obj4,brush1
obj5=CreateCylinder(18) PaintMesh obj5,brush2
obj6=CreateCylinder(18) PaintMesh obj6,brush3
; three spheres (3 surfaces)
obj7=CreateSphere(18) PaintMesh obj7,brush1
obj8=CreateSphere(18) PaintMesh obj8,brush2
obj9=CreateSphere(18) PaintMesh obj9,brush3
; combined by addmesh into 3 surfaces
; (surfaces painted with the same brush will be combined)
mesh=CreateMesh()
PositionMesh obj1,-3,3,0 AddMesh obj1,mesh FreeEntity obj1
PositionMesh obj2,0,3,0 AddMesh obj2,mesh FreeEntity obj2
PositionMesh obj3,3,3,0 AddMesh obj3,mesh FreeEntity obj3
PositionMesh obj4,-3,0,0 AddMesh obj4,mesh FreeEntity obj4
PositionMesh obj5,0,0,0 AddMesh obj5,mesh FreeEntity obj5
PositionMesh obj6,3,0,0 AddMesh obj6,mesh FreeEntity obj6
PositionMesh obj7,-3,-3,0 AddMesh obj7,mesh FreeEntity obj7
PositionMesh obj8,0,-3,0 AddMesh obj8,mesh FreeEntity obj8
PositionMesh obj9,3,-3,0 AddMesh obj9,mesh FreeEntity obj9
SetBuffer BackBuffer()
Color 255,255,255
camera=CreateCamera()
PositionEntity camera,0,0,-6
light=CreateLight()
RotateEntity light,45,-45,0
Repeat
RenderWorld
Text 0,0,TrisRendered()
For i=1 To CountSurfaces(mesh)
Text 0,i*12,CountTriangles(GetSurface(mesh,i))
Next
If keyhit(57) Then EntityColor mesh,128,128,128
Flip
Until KeyDown(1)
|