aboutsummaryrefslogtreecommitdiff
path: root/NvBlast/docs/_source/introduction.txt
diff options
context:
space:
mode:
Diffstat (limited to 'NvBlast/docs/_source/introduction.txt')
-rw-r--r--NvBlast/docs/_source/introduction.txt73
1 files changed, 73 insertions, 0 deletions
diff --git a/NvBlast/docs/_source/introduction.txt b/NvBlast/docs/_source/introduction.txt
new file mode 100644
index 0000000..e9fca5f
--- /dev/null
+++ b/NvBlast/docs/_source/introduction.txt
@@ -0,0 +1,73 @@
+/*! \page pageintroduction Introduction
+
+Blast&tm; is an NVIDIA GameWorks&tm; destruction library. It consists of a \ref pagellapi, a \ref pagehlapi (Blast&tm; Toolkit
+or BlastTk), and \ref pageextapi (Blast&tm; Extensions or BlastExt). This layered API is designed to allow short ramp-up time for
+first usage (through the Ext and Tk APIs) while also allowing for customization and optimization by experienced users through the
+low-level API.
+
+This library is intended to replace APEX Destruction. It is being developed with years of user feedback and experience, with the
+goal of addressing shortcomings in performance, stability, and customizability of the APEX Destruction module.
+
+\section asset_structure Asset Structure
+
+Blast&tm; is currently designed to support rigid body, pre-fractured destruction. Future versions may support runtime fracturing
+or deformation.
+
+The static data associated with a destructible is stored in an \{\em asset\}. Assets are instanced into actors, which may
+be damaged and fractured. When fractured, actors are broken into pieces called \{\em chunks\}. Connected groups of chunks
+belong to new actors. The grouping of chunks into actors is determined by the support graph in the asset.
+
+Chunks are defined hierarchically, so that when a chunk is fractured its child chunks are created. The user may tag any
+chunk in this hierarchy as a \{\em support\} chunk. This is covered in more detail in the \ref support_model section. The user
+also supplies a description of the connections between support chunks. A \{\em bond\} represents the surface joining neighboring
+chunks. A bond is represented by a surface centroid, an average surface normal, and the surface area. These quantities don't
+need to be exact for Blast&tm; to operate effectively.
+
+Multiple chunk hierarchies may exist in a single asset. The <em>root chunks</em> (see \ref pagedefinitions) will be visible when the
+asset is initially instanced. Subsequent fracturing has the effect of breaking the root chunks into their hierarchical descendants.
+
+\section support_model Support Model
+
+Blast&tm; requires that support chunks form an <em>exact cover</em> (see the definition of exact coverage in \ref pagedefinitions).
+However, it is quite forgiving with respect to user input when creating an asset. The geometric interpretation of exact coverage is that
+the support chunks fill the space of the root (unfractured) chunk, without any volume being covered by more than one chunk. Upon
+asset creation, missing coverage will be filled in by Blast&tm;, by assigning support to chunks at the highest place possible (closest
+to root) in the hierarchy. If support is redundant, that is a chunk and one of its descendant chunks are both marked as support
+by the user, then Blast&tm; will remove support from the descendant chunk.
+
+Support chunks that are joined by bonds will be grouped together in the same actor when fracturing occurs. In order to take
+advantage of the chunk hieararchy to reduce the number of chunks which represent an actor physically and graphically, Blast&tm;
+calculates a list of <em>visible chunks</em> from the support chunks in an actor. These may be the support chunks, or they may
+be ancestors of support chunks if all descendant support chunks are in the actor.
+
+Support chunks do not have to be leaves in the chunk hierarchy, nor do they have to be at the same depth in the hierarchy. Children
+of support chunks will always be the sole chunk in their actor, since there is no bond defined between them. If an actor consists of
+of a <em>subsupport chunk</em> (see \ref pagedefinitions), the visible chunk is the same chunk.
+
+\section damage_model Damage Model
+
+Damage is defined as loss of an actor's material integrity. This is modeled by a simple health value associated with the bonds and
+chunks in the support graph. The user applies damage to an actor at a given location, with a maximum effect radius. The resulting
+loss of bond and chunk health is determined by a user-defined <em>material function</em>. In this way the user can customize the
+effect of damage based upon the bonds' properties such as normal and area, as well as distance from impact location.
+
+Damage is applied from a damage event buffer. After all damage events are processed, bonds with non-positive healths are considered
+to be broken. Blast&tm; performs island detection on the support graph to find all groups of support chunks that are connected by unbroken
+bonds, and any new islands found result in new actors.
+
+If an actor is composed of a single support or subsupport chunk with subsupport descendants, then there is no bond structure to model
+damage. Instead, such a chunk is considered to have its own health value, which may be decreased by damage. When such a lower-support
+(see \ref pagedefinitions) chunk's health is non-positive, its associated actor is deleted and replaced by actors that represent its child
+chunks, if any.
+
+The effect of damage on leaf chunks depends upon which API is used. The low-level API does not delete leaf chunks. It is up to the
+user to delete them, and manage their physical and graphical representation outside of Blast&tm; if so desired.
+
+\section backwards_compatibility Backwards Compatibility
+
+The Blast&tm; SDK provides the \ref pageimporter tool to allow APEX Destructible assets to be reused. A Blast&tm; asset requires more information
+in its support graph than an APEX Destuctible asset does. Whereas the latter only contains a list of chunk neighbors, the bonds used by Blast&tm;
+include a small amount of geometric information, as described in \ref asset_structure.
+
+<br>
+*/