<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-gb">
	<link rel="self" type="application/atom+xml" href="https://pybullet.org/Bullet/phpBB3/app.php/feed/topic/763" />

	<title>Real-Time Physics Simulation Forum</title>
	
	<link href="https://pybullet.org/Bullet/phpBB3/index.php" />
	<updated>2006-12-06T11:11:39+00:00</updated>

	<author><name><![CDATA[Real-Time Physics Simulation Forum]]></name></author>
	<id>https://pybullet.org/Bullet/phpBB3/app.php/feed/topic/763</id>

		<entry>
		<author><name><![CDATA[XperienS]]></name></author>
		<updated>2006-12-06T11:11:39+00:00</updated>

		<published>2006-12-06T11:11:39+00:00</published>
		<id>https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=2716#p2716</id>
		<link href="https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=2716#p2716"/>
		<title type="html"><![CDATA[Possible optimization for dynamic Pyramid OBB stacking scene]]></title>

		
		<content type="html" xml:base="https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=2716#p2716"><![CDATA[
Ok, thanks for your replies <img class="smilies" src="https://pybullet.org/Bullet/phpBB3/images/smilies/icon_smile.gif" width="15" height="15" alt=":)" title="Smile"><p>Statistics: Posted by <a href="https://pybullet.org/Bullet/phpBB3/memberlist.php?mode=viewprofile&amp;u=360">XperienS</a> — Wed Dec 06, 2006 11:11 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[Dirk Gregorius]]></name></author>
		<updated>2006-12-06T11:05:21+00:00</updated>

		<published>2006-12-06T11:05:21+00:00</published>
		<id>https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=2715#p2715</id>
		<link href="https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=2715#p2715"/>
		<title type="html"><![CDATA[Possible optimization for dynamic Pyramid OBB stacking scene]]></title>

		
		<content type="html" xml:base="https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=2715#p2715"><![CDATA[
Since forces and impulse are linear related - we assume the forces to be constant over the interval dt. You still could compute the force from the accumlated impulse. It is simply F = P/dt<br><br>I recommend looking at ODE quickstep.cpp and joint.cpp and see if you can find some clever optimization there that you maybe missed in your code. <br><br>HTH,<br>-Dirk<p>Statistics: Posted by <a href="https://pybullet.org/Bullet/phpBB3/memberlist.php?mode=viewprofile&amp;u=14">Dirk Gregorius</a> — Wed Dec 06, 2006 11:05 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[XperienS]]></name></author>
		<updated>2006-12-06T10:07:26+00:00</updated>

		<published>2006-12-06T10:07:26+00:00</published>
		<id>https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=2714#p2714</id>
		<link href="https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=2714#p2714"/>
		<title type="html"><![CDATA[Possible optimization for dynamic Pyramid OBB stacking scene]]></title>

		
		<content type="html" xml:base="https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=2714#p2714"><![CDATA[
<blockquote class="uncited"><div>What do you mean by this? Can you give an example?</div></blockquote>It's not for some examples it is for idea <img class="smilies" src="https://pybullet.org/Bullet/phpBB3/images/smilies/icon_smile.gif" width="15" height="15" alt=":)" title="Smile"> I need my simulator to be force-based, not impulse-based <img class="smilies" src="https://pybullet.org/Bullet/phpBB3/images/smilies/icon_smile.gif" width="15" height="15" alt=":)" title="Smile"> [ and remember that this change adds quite small amount of fps to scene ], so this optimization is not needed for me.<br><br>About warm starting: sorry i'm confusing terminology and now i understand that warm starting is simple caching lambda values. In this case i have warm starting, yes.<p>Statistics: Posted by <a href="https://pybullet.org/Bullet/phpBB3/memberlist.php?mode=viewprofile&amp;u=360">XperienS</a> — Wed Dec 06, 2006 10:07 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[Dirk Gregorius]]></name></author>
		<updated>2006-12-06T09:27:35+00:00</updated>

		<published>2006-12-06T09:27:35+00:00</published>
		<id>https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=2713#p2713</id>
		<link href="https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=2713#p2713"/>
		<title type="html"><![CDATA[Possible optimization for dynamic Pyramid OBB stacking scene]]></title>

		
		<content type="html" xml:base="https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=2713#p2713"><![CDATA[
<blockquote class="uncited"><div>adds about 2 fps to my scene</div></blockquote>Take what you get <img class="smilies" src="https://pybullet.org/Bullet/phpBB3/images/smilies/icon_smile.gif" width="15" height="15" alt=":-)" title="Smile"><br><blockquote class="uncited"><div>but it digs right into simulator basics so it is not preferable way</div></blockquote>What do you mean by this? Can you give an example?<br><br><blockquote class="uncited"><div> I'm interested in so-called "warm starting"</div></blockquote>Warm-Starting means to use your results from the last frame as starting value for the next frame. Basically you save your lambdas and use them in the next frame instead of reseting them to zero. See Erin presentations for ideas how to match contact impulses over frames<br><br><blockquote class="uncited"><div>i've always thought that ODE uses direct solver</div></blockquote>The ODE has a direct solver, but in quickstep.cpp you have an iterative (PGS) solver<p>Statistics: Posted by <a href="https://pybullet.org/Bullet/phpBB3/memberlist.php?mode=viewprofile&amp;u=14">Dirk Gregorius</a> — Wed Dec 06, 2006 9:27 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[XperienS]]></name></author>
		<updated>2006-12-06T07:10:19+00:00</updated>

		<published>2006-12-06T07:10:19+00:00</published>
		<id>https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=2712#p2712</id>
		<link href="https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=2712#p2712"/>
		<title type="html"><![CDATA[Possible optimization for dynamic Pyramid OBB stacking scene]]></title>

		
		<content type="html" xml:base="https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=2712#p2712"><![CDATA[
I'm using PGS, not impulses and w value 1.1 is for faster convergence. Energy gain is possible, but it is a little bit faster than classical PGS algo..<br>  Solving for impulses, not for constraint forces is not much faster ( adds about 2 fps to my scene <img class="smilies" src="https://pybullet.org/Bullet/phpBB3/images/smilies/icon_smile.gif" width="15" height="15" alt=":)" title="Smile"> ) but it digs right into simulator basics so it is not preferable way <img class="smilies" src="https://pybullet.org/Bullet/phpBB3/images/smilies/icon_smile.gif" width="15" height="15" alt=":)" title="Smile"><br>  I'm interested in so-called "warm starting". What is it and why it should add performance or stability in my solver?<br><br>P/S: i've always thought that ODE uses direct solver ( something like Dantzig or Lemke ), not iterative ones..<p>Statistics: Posted by <a href="https://pybullet.org/Bullet/phpBB3/memberlist.php?mode=viewprofile&amp;u=360">XperienS</a> — Wed Dec 06, 2006 7:10 am</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[Dirk Gregorius]]></name></author>
		<updated>2006-12-05T20:34:13+00:00</updated>

		<published>2006-12-05T20:34:13+00:00</published>
		<id>https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=2706#p2706</id>
		<link href="https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=2706#p2706"/>
		<title type="html"><![CDATA[Possible optimization for dynamic Pyramid OBB stacking scene]]></title>

		
		<content type="html" xml:base="https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=2706#p2706"><![CDATA[
Do you use iterative impulses or a PGS method? BTW I suggest using w_sor = 1.0 otherwise you might add energy to the system. I am sure you know that for the case w_sor = 1.0 is SOR equivalent to PGS.<br><br>I assume for now you use PGS like solver like in the ODE. What do you solve for? The ODE tries to solve for the constraint forces: <br><br>J*W*JT*lambda = -ERP * C / dt2 - J*( v/dt + w*f_ext )<br><br>You could reformulate this and solve for impulses instead what might be a little faster since you can integrate forward in time without considering the constraints, compute the correcting impulses, apply those impulse and integrate the positions using the corrected velocities:<br><br>J*W*JT*(lambda*dt) = -ERP * C / dt - J*( v + w*f_ext*dt)<br><br>Still this this would be slower (and has most propably worse convergence) then using impulse because you implictly solve blockwise. Assume one single spherical joint. With the above method you will need to compute the impulses using:<br><br>P = JT * lampda<br><br>The contains redundant information since you will compute P1, L1 = r1 x P1, P2 and L2 = r2  x P2 instead of simply applying the computed impulse at the anchor point. You don't use that P2 = -P1 in this case. You also solve blockwise when using impulses what would equivalent to a blockwise PGS which has superior convergence.<br><br>Finally one side note. Pyramids and walls are more stable then simple stacks. I suggest stacking 5 boxes (1x1x1) with a mass of 1kg falling down onto each other (preferable also rotated against each other). I checked the method of E. Catto a while ago and this can be handled with one iteration using the accumulated impulse and warmstarting. He also suggest applying the friction at the manifold center instead at each contact point what gets you down from 12 to 7 constraints for a face-face contact and what is a nice improvement as well (I would say both in speed and quality).<br><br>HTH,<br>-Dirk<p>Statistics: Posted by <a href="https://pybullet.org/Bullet/phpBB3/memberlist.php?mode=viewprofile&amp;u=14">Dirk Gregorius</a> — Tue Dec 05, 2006 8:34 pm</p><hr />
]]></content>
	</entry>
		<entry>
		<author><name><![CDATA[XperienS]]></name></author>
		<updated>2006-12-05T14:49:10+00:00</updated>

		<published>2006-12-05T14:49:10+00:00</published>
		<id>https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=2695#p2695</id>
		<link href="https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=2695#p2695"/>
		<title type="html"><![CDATA[Possible optimization for dynamic Pyramid OBB stacking scene]]></title>

		
		<content type="html" xml:base="https://pybullet.org/Bullet/phpBB3/viewtopic.php?p=2695#p2695"><![CDATA[
Iterative Solver ( SOR-PGS, 15 iterations with W = 1.1, convergence-testing ), optimized matrix calculations ( i.e. using matrice sparsity ) and contact joints caching. But all it handles only pyramid with 10 OBBs in basement. Collision broad phase is via bounding spheres intersection tests. Is there anything that could rise performance of my engine ( on this scene )? <br>Dividing total matrix A on contact groups in this case have no point because all of the cubes connected with contact joint.<p>Statistics: Posted by <a href="https://pybullet.org/Bullet/phpBB3/memberlist.php?mode=viewprofile&amp;u=360">XperienS</a> — Tue Dec 05, 2006 2:49 pm</p><hr />
]]></content>
	</entry>
	</feed>
