30000 polygons or triangles? Anyhow this is too much Man... You must reduce it
On Mon, Jul 12, 2010 at 4:16 PM, Crabar <[email protected]> wrote: > Hello, developers! > > I have a problem with a performance of own scene. > I try to build about 10 000 objects on scene with away3d. Now i have > over 30 000 polygons, a visible at once is about 500-2000. It required > ~230 mb of RAM (Internet Explorer, AwayStats shows ~160 mb) and have > 5-10 fps while camera is moving. It's to much RAM is using and to low > fps rate to me. I would be pleased for help in optimization of my > engine and for some advices about optimization tricks. As well I would > be pleased for pointing out my mistakes. > > There are some screens: > http://imageshost.ru/photo/74374/id21221.html > http://imageshost.ru/photo/80867/id21220.html > > I'm using Rectangle Clipping, obectCulling = true, Renderer = BASIC. > Material is ShadingColorMAterial with one light source. > I think about using LODObject, but it probably will be used more RAM > or not? > > To limit the range of visibility i'm using following event code (on > move): > > public function onMove(e:KSEvents):void > { > for each (var Obj3D:Object3D in > baseAway.view.scene.children) > { > if > (baseCamera.position.distance(Obj3D.position)>DistanceOfView) > { > Obj3D.visible = false; > } > else > { > Obj3D.visible = true; > } > } > } > > > Creating view code: > > <?xml version="1.0" encoding="utf-8"?> > <mx:UIComponent xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" > height="100%"> > <mx:Script> > <![CDATA[ > import away3d.containers.Scene3D; > import away3d.containers.View3D; > import away3d.core.clip.FrustumClipping; > import away3d.core.clip.RectangleClipping; > import away3d.core.render.*; > > > public var view:View3D; > public var scene:Scene3D; > > override protected function createChildren():void > { > super.createChildren(); > scene = new Scene3D(); > view = new View3D(); > view.scene = scene; > view.renderer = Renderer.BASIC; > addChild(view); > view.addEventListener(Event.ADDED_TO_STAGE, > update); // Make sure > the first frame is rendered > } > > override protected function > updateDisplayList(unscaledWidth:Number, > unscaledHeight:Number):void > { > super.updateDisplayList(unscaledWidth, > unscaledHeight); > update(); > } > private function update(e:* = null):void > { > if(view.stage){ > view.x = unscaledWidth/2; > view.y = unscaledHeight/2; > view.clipping = new > RectangleClipping({minX:-unscaledWidth/ > 2,minY:-unscaledHeight/2,maxX:unscaledWidth/2,maxY:unscaledHeight/2}); > view.clipping.objectCulling = true; > view.render(); > } > } > ]]> > </mx:Script> > </mx:UIComponent> > > Some code of class my object's class: > > public class Tube extends KSMesh > { > ... > > Building faces: > > for (var i:int = 0; i< (VertexArray[j] as > Vector.<Vertex>).length-1; > i++) > { > // first triangle of quad > var FirstFace:Face = new Face(); > FirstFace.v0 = (VertexArray[j] as > Vector.<Vertex>)[i]; > FirstFace.v1 = (VertexArray[j] as > Vector.<Vertex>)[i+1]; > FirstFace.v2 = (VertexArray[j+1] as > Vector.<Vertex>)[i]; > this.addFace(FirstFace); > FirstFace = null; > // second triangle of quad > var SecondFace:Face = new Face(); > SecondFace.v0 = (VertexArray[j] as > Vector.<Vertex>)[i+1]; > SecondFace.v1 = (VertexArray[j+1] as > Vector.<Vertex>)[i+1]; > SecondFace.v2 = (VertexArray[j+1] as > Vector.<Vertex>)[i]; > this.addFace(SecondFace); > SecondFace = null; > } > ... > > constructor > > public function Tube(Points:Vector.<Number3D>, > Radius:Number, > PipeKey:Number) > { > super(null); > this.diameter = Radius*2; > this.ObjKey = PipeKey; > > > var ComplexPoints:Array = new Array; > var TwoDots:Array = new Array(); > > for (var i:int = 0; i<Points.length-1; i++) > { > // > TwoDots = GetFanCoords(Points[i], > Points[i+1], 4, Radius); > ComplexPoints[ComplexPoints.length] = > TwoDots[0]; > ComplexPoints[ComplexPoints.length] = > TwoDots[1]; > } > > // > BuildFaces(ComplexPoints); > // > this.centerPivot(); > this.material = new ShadingColorMaterial(0x555555); > this.invertFaces(); > this.bothsides = true; > // welding > var weld:Weld = new Weld(false); > weld.apply(this); > // > weld = null; > TwoDots = null; > ComplexPoints = null; > } > > > > Tnx for help. > > -- Michael Ivanov ,Programmer Neurotech Solutions Ltd. Flex|Air |3D|Unity| www.neurotechresearch.com http://blog.alladvanced.net http://www.meetup.com/GO3D-Games-Opensource-3D/ Tel:054-4962254 [email protected] [email protected]
