aboutsummaryrefslogtreecommitdiff
path: root/docs/api_docs/files/pageextstress.html
diff options
context:
space:
mode:
authorAnton Novoselov <[email protected]>2017-08-08 20:14:22 +0300
committerAnton Novoselov <[email protected]>2017-08-08 20:14:22 +0300
commitd41654b469fa51870b5952c836c04d9da17f32d3 (patch)
tree64f8f437eef394630355f281d35ca1d53e5c4d6c /docs/api_docs/files/pageextstress.html
parentadd +x for packman script (diff)
downloadblast-d41654b469fa51870b5952c836c04d9da17f32d3.tar.xz
blast-d41654b469fa51870b5952c836c04d9da17f32d3.zip
Updated to CL 22627414:
* docs updates * authoring fixes * stress solver crash fixes
Diffstat (limited to 'docs/api_docs/files/pageextstress.html')
-rw-r--r--docs/api_docs/files/pageextstress.html26
1 files changed, 13 insertions, 13 deletions
diff --git a/docs/api_docs/files/pageextstress.html b/docs/api_docs/files/pageextstress.html
index a082f9d..5f2c878 100644
--- a/docs/api_docs/files/pageextstress.html
+++ b/docs/api_docs/files/pageextstress.html
@@ -20,34 +20,34 @@
</div>
<!-- Generated by Doxygen 1.5.8 -->
<div class="contents">
-<h1><a class="anchor" name="pageextstress">Stress Solver Extension (NvBlastExtStress) </a></h1>The Blast&trade; stress solver extension provides implementation of quite fast and easy to use stress solver which works directly with bond graph. It simulates more complex damage model on support graph by allowing to apply forces on nodes of support graph (on chunks). The most common usage is just applying gravity force on a static construction so that it will fall apart at some point when carcass can't hold anymore. Dynamic actors are also supported, you could for example add centrifugal force so that rotating object fast enough will break bonds.<p>
-It is also can be used as an another way to apply impact damage, which can give visually pleasant result of breaking actor in a weak place instead of the place of contact.<p>
+<h1><a class="anchor" name="pageextstress">Stress Solver Extension (NvBlastExtStress) </a></h1>The Blast&trade; stress solver extension provides an implementation of a quite fast and easy to use stress solver which works directly with the bond graph. It simulates more complex damage model on support graph by allowing to apply forces on nodes of the support graph (on chunks). The most common usage is just applying gravity force on a static construction so that it will fall apart at some point when the carcass cannot hold anymore. Dynamic actors are also supported, you could for example add centrifugal force so that rotating an object fast enough will break bonds.<p>
+It also can be used as another way to apply impact damage, which can give the visually pleasant result of an actor breaking in a weak place instead of the place of contact.<p>
<br>
<h2><a class="anchor" name="stresssolverfeatures">
Features</a></h2>
<ul>
-<li>Requires only core <em>NvBlast</em> </li><li>Supports both static and dynamic actors</li><li>Propagates both linear and angular momentum</li><li>Graph complexity selection (reduces support graph to smaller size trade off speed and quality)</li><li>Apply stress damage on Blast Actor</li><li>Debug Render</li></ul>
+<li>Requires only core <em>NvBlast</em> </li><li>Supports both static and dynamic actors</li><li>Propagates both linear and angular momentum</li><li>Graph complexity selection (reduces support graph to smaller size to trade-off speed for quality)</li><li>Apply stress damage on Blast&trade; actor</li><li>Debug Render</li></ul>
<p>
<br>
- <h2><a class="anchor" name="stresssolvertunning">
+ <h2><a class="anchor" name="stresssolvertuning">
Settings Tuning</a></h2>
-Computational time is linearly proprtional to <em>bondIterationsPerFrame</em> setting. To fine tune look for balance between <em>bondIterationsPerFrame</em> and <em>graphReductionLevel</em> . The more bond iterations are set the more precise computation will be. The smaller graph allows to make higher fidelity computations witihing the same bond iterations per frame (same time spent), but actual cracks (damaged bonds) will be more sparsed as the result.<p>
-Debug render could help a lot with that, consider using <em>stressSolver-&gt;fillDebugRender</em>(...) for that.<p>
+Computational time is linearly proportional to the <em>bondIterationsPerFrame</em> setting. To fine tune, look for balance between <em>bondIterationsPerFrame</em> and <em>graphReductionLevel</em> . The more bond iterations are set, the more precise the computation will be. The smaller graph allows to make higher fidelity computations within the same bond iterations per frame (same time spent), but actual cracks (damaged bonds) will be more sparse as the result.<p>
+Debug render can help a lot for tuning, consider using <em>stressSolver-&gt;fillDebugRender</em>(...) for that.<p>
<br>
<h2><a class="anchor" name="stresssolverusage">
Usage</a></h2>
-In order to use it create an instance with <em>ExtStressSolver::create</em>(...).<p>
+In order to use the stress solver, create an instance with <em>ExtStressSolver::create</em>(...).<p>
<div class="fragment"><pre class="fragment">ExtStressSolver* stressSolver = ExtStressSolver::create(family, settings);
</pre></div><p>
<em>ExtStressSolverSettings</em> are passed in create function, but also can be changed at any time with <em>stressSolver-&gt;setSettings</em>(...).<p>
-It fully utilizes the fact that it knows initial support graph structure and does maximum of processing in <em>create</em>(...) method calls. After that all actors split calls are synced internally quite fast and only the actual stress propagation takes most of computational time.<p>
-Then you need to provide physics specific information (mass, volume, position, static) for every node in support graph since Blast itself is physics agnostic. There are two ways to do it, you can call <em>stressSolver-&gt;setNodeInfo</em>(...) for every graph node. Another was is to call stressSolver-&gt;setAllNodesInfoFromLL() once all the data will be populated using <a class="el" href="struct_nv_blast_asset.html">NvBlastAsset</a> chunk's data, in particular <em>volume</em> and <em>centroid</em> are used. All nodes connected to 'world' chunk are marked as static.<p>
+It fully utilizes the fact that it knows the initial support graph structure and does a maximum of processing in the <em>create</em>(...) method call. After that, all actor split calls are synchronized internally and efficiently so only the actual stress propagation takes most of computational time.<p>
+You need to provide physics specific information (mass, volume, position, static) for every node in support graph since Blast&trade; itself is physics agnostic. There are two ways to do it. One way is to call <em>stressSolver-&gt;setNodeInfo</em>(...) for every graph node. The other way is to call stressSolver-&gt;setAllNodesInfoFromLL() once: all the data will be populated using <a class="el" href="struct_nv_blast_asset.html">NvBlastAsset</a> chunk's data, in particular <em>volume</em> and <em>centroid</em>. All nodes connected to 'world' chunk are marked as static.<p>
<div class="fragment"><pre class="fragment">stressSolver-&gt;setAllNodesInfoFromLL();
</pre></div><p>
-Stress solver needs to keep track for actor create/destroy events in order to update it's internal stress graph accordingly. So you need to call <em>stressSolver-&gt;notifyActorCreated(actor)</em> and <em>stressSolver-&gt;notifyActorDestroyed(actor)</em> every time actor is created or destroyed including the initial actor family had when stress solver were created. There is no need to track actors which contain only one or lesser graph nodes in that case <em>notifyActorCreated(actor)</em> returns 'false' as a hint, it means that stress solver will ignore them. For those actors applying forces is also doesn't make any sense.<p>
-Typical update loop would can look like this:<p>
+Stress solver needs to keep track for actor create/destroy events in order to update its internal stress graph accordingly. So you need to call <em>stressSolver-&gt;notifyActorCreated(actor)</em> and <em>stressSolver-&gt;notifyActorDestroyed(actor)</em> every time an actor is created or destroyed, including the initial actor the family had when the stress solver was created. There is no need to track actors which contain only one or less graph nodes. In that case <em>notifyActorCreated(actor)</em> returns 'false' as a hint. It means that the stress solver will ignore them, as for those actors applying forces does not make any sense.<p>
+A typical update loop looks like this:<p>
<ol type=1>
-<li>If split happend call relevant stressSolver-&gt;notifyActorCreated(actor) and stressSolver-&gt;notifyActorDestroyed(actor)</li><li>Apply all forces, use <em>stressSolver-&gt;addForce</em>(...), stressSolver-&gt;addGravityForce(...), <em>stressSolver-&gt;addAngularVelocity</em>(...)</li><li>Call <em>stressSolver-&gt;update()</em>. This is where all expensive computation happens.</li><li>If <em>stressSolver-&gt;getOverstressedBondCount()</em> &gt; 0 use one of <em>stressSolver-&gt;generateFractureCommands()</em> methods to get bond fracture commands and apply on them actors.</li></ol>
+<li>If split happened, call relevant stressSolver-&gt;notifyActorCreated(actor) and stressSolver-&gt;notifyActorDestroyed(actor)</li><li>Apply all forces, use <em>stressSolver-&gt;addForce</em>(...), stressSolver-&gt;addGravityForce(...), <em>stressSolver-&gt;addAngularVelocity</em>(...)</li><li>Call <em>stressSolver-&gt;update()</em>. This is where all expensive computation takes place.</li><li>If <em>stressSolver-&gt;getOverstressedBondCount()</em> &gt; 0, use one of <em>stressSolver-&gt;generateFractureCommands()</em> methods to get bond fracture commands and apply them on actors.</li></ol>
<p>
Example code from ExtPxStressSolverImpl:<p>
<div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> ExtPxStressSolverImpl::onActorCreated(ExtPxFamily&amp; <span class="comment">/*family*/</span>, ExtPxActor&amp; actor)
@@ -100,7 +100,7 @@ Example code from ExtPxStressSolverImpl:<p>
}
}
</pre></div><p>
-Have a look at <em>ExtPxStressSolver</em> implementation code, which is basically high level wrapper on <em>NvBlastExtStress</em> to couple it with PhysX&trade; and <em>NvBlatExtPx</em> extension (see <a class="el" href="pageextphysx.html#extpxstresssolver">ExtPxStressSolver</a>).<p>
+Have a look at <em>ExtPxStressSolver</em> implementation code, which is basically a high level wrapper on <em>NvBlastExtStress</em> to couple it with PhysX&trade; and <em>NvBlastExtPx</em> extension (see <a class="el" href="pageextphysx.html#extpxstresssolver">ExtPxStressSolver</a>).<p>
<br>
</div>
<!-- start footer part -->