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]

Reply via email to