Iterative solver (again) [Was: Re: [ODE] Russ' plans for ODE?]

Nguyen Binh ngbinh at glassegg.com
Tue Apr 27 11:30:08 MST 2004


        Guys!

        I think ODE iterative solver is OK. We can optimize it a
        little : use more specialized solver for small matrix as we
        just need 1X1 to 6x6 matrix.

        The problem now is some of us didn't use StepFast1 properly.
        After playing with Novodex, I found out that they use a
        iterative solver like StepFast1(old story, every one know).
        Of course, Novodex's solver is much more well designed, they
        employ many optimizations like : Auto disable (But maybe much
        more better than ODE's), contacts filter and a very robust
        collision code. But beside that, they also have a different
        use of time step in simulation. Generally, they divided a
        single step to many small steps, each small step is about 1/60
        (their default value). It's really different from what many of
        ODE's users (including me) had done. We use much more small
        tiny step. For example, if I wished my simulation ran at 60Hz,
        I will :

            dWorldStepFast1 (world,REAL(1.0)/60, 5);

         So, out tiny step will be 1/600!!! I think it's too small to
         make "logical" and useful simulation. It will be much better
         if :

            dWorldStepFast1 (world,REAL(1.0)/60*5, 5);

         I had tested this thing, it works pretty believable and damn
         fast. But to make this approach useable, we need much more
         robust collider. We need collider that can survive from very
         "dangerous" situation, i.e : a sphere completely stuck inside
         a box but then safely "slide" out or else the simulation may
         explode.

         FYI : Here is code excerpt from Novodex Personal SDK.
         ( Adam and Pierre! Please don't shoot me if I violates some licences)

        /**
        Advances the simulation by an elapsedTime time.  If elapsedTime is large, it is internally
        subdivided into up to maxIter integration steps no larger than maxTimestep. The timestep method of 
        TIMESTEP_FIXED is strongly preferred for stable, reproducible simulation.
        */
        virtual void  runFor(NxF32 elapsedTime, NxF32 maxTimestep=1.0f/60.0f, NxU32 maxIter=8, NxTimeStepMethod method=NX_TIMESTEP_FIXED) = 0;
         

-- 
Best regards,

---------------------------------------------------------------------
   Nguyen Binh
   Software Engineer
   Glass Egg Digital Media
   
   E.Town Building  
   7th Floor, 364 CongHoa Street
   Tan Binh District,
   HoChiMinh City,
   VietNam,

   Phone : +84 8 8109018
   Fax   : +84 8 8109013

     www.glassegg.com
---------------------------------------------------------------------



More information about the ODE mailing list