AwayStats show "30000 polygons". I think it mean "faces". Scene is big and in one moment camera sees no more then 2500.
On 12 июл, 16:22, Michael Iv <[email protected]> wrote: > 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.comhttp://blog.alladvanced.nethttp://www.meetup.com/GO3D-Games-Opensource-3D/ > Tel:054-4962254 > [email protected] > [email protected]
