• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            永遠(yuǎn)也不完美的程序

            不斷學(xué)習(xí),不斷實(shí)踐,不斷的重構(gòu)……

            常用鏈接

            統(tǒng)計(jì)

            積分與排名

            好友鏈接

            最新評(píng)論

            Skeletal Animation Blending(轉(zhuǎn))

            轉(zhuǎn)自:http://www.circlesoft.org/DirectMesh2/DM2Spec/pages/Features.htm

            2 Features


            This section describes the major features of DM2, in basic form.  While the functionality of these features will be discussed, more detailed information about their implementation will be given later.

                 
                  


            2.1 Skeletal Animation

            DirectMesh v2.0 will use skeletal animation as it's primary form of frame-based movement.  Skeletal animation is based on bones, which are in turn connected to individual vertices.  These vertices act as a "skin" on top of the bones. 

            Unlike keyframe animation, where each and every vertex is animated, skeletal animation consists of transforming only the bones.  The bones then act on the assigned vertices, providing the expected deformation.  Since this is how the human body actually works, it is an ideal scheme for character animation.

            These vertex deformations will be processed in a vertex shader, on GPU hardware.  If the required hardware is not available, the animation interfaces will fall back to a software implementation.  Leveraging the GPU to perform these transforms will minimize the performance hit that is normally associated with skeletal animation.

            The software implementation will also be available for use even if hardware support is present.  This could be useful in situations where the same pose must be rendered multiple times.  In this case, it is a waste to skin the mesh for each time, considering that it can be done in software once and applied to all subsequent renders.

            Each vertex will have a maximum of 4 attached bones.  This is to accommodate for the limitations of current graphics hardware, file size, and memory usage.  A case of 5 or more bones acting on a single vertex is usually uncommon, anyways.

            This maximum of 4 attached bones will be able to be changed at runtime.  This can be useful in situations where dynamic level-of-detail (LOD) is critical.  For example, if a model is far away from the viewpoint, the number of active bones can be lowered to prevent wasted transforms.  If the models moves closer to the viewpoint, the number of active bones can be raised again.


            2.2 Morph Targets

            A morph target is a keyframe of a mesh (or a portion of a mesh) in a specific pose.  Each morph target is blended with the base mesh by a certain percentage, where 0% has no effect on the mesh and 100% has full effect on the mesh.  This percentage can be animated, providing smooth transitions between targets.  When a morph target exhibits an effect on the base mesh (that is, it's blend percentage is greater than 0), it is said to be "active". 

            This morphing technique is very useful for situations where a high amount of detail is required.  Since using bones is not practical in such situations,  morph targets are used instead.  A prime example is facial animation, since individual vertices must be tweaked to get the exact pose required.

            Multiple morph targets can be active during the same frame.  For example, the face of a character may have a "winking" morph target and a "smiling" morph target.  These two targets can be blended together with the base mesh to generate a model that is both "winking" and "smiling".

            Due to the complexity of morph targets, they must be processed in software.  For this reason, there is no limit to the number of morph targets per mesh.  However, more morph targets will result in increased memory usage and file size.  Also, there is no limit to the number of active morph targets, although more active morph targets will result in a performance hit.

            Skeletal animation and morphing can both be used simultaneously.  After all of the active morph targets are composted into a dynamic buffer, the processed mesh will be deformed by the skinning shader.  This provides a very flexible solution, in which both quick, efficient animation and detailed animation can be combined.

            For a practical example of morphing, consider our friend Johnny:

            Johnny has the following morph targets defined:

            We can now combine these morph targets in any way that we like.  For example:


            2.3 Subsets

            A subset is a group of faces that share the same material.  A DirectMesh model can be divided up into multiple subsets, allowing for different materials to be used throughout the mesh.  This can be very useful when modeling, since most real-world objects and characters are actually composites of different parts.

            Depending on the number of active bones, there may be more transformation matrices than constant registers in the skinning shader.  If this occurs, the mesh must be split up into multiple subsets, based on each face's active bones.  This is done so that the shader will always have registers available for the matrices.

            Below is a table of the default maximum number of bones per subset, based on each vertex shader model.  Note that 12 or 16 constant registers will always be left over, in case the shader needs to store custom data.  Since each bone transformation matrix is 3x4 (3 rows by 4 columns; the perspective vector does not need to be store), every bone takes up 3 constants (each constant register holds a float4, and a matrix is 3 float4's).

            Vertex Shader Model Minimum Constants Available Constants Left Over Bone Matrices Available
            vs_1_1 96 12 28
            vs_2_0 256 16 80
            vs_2_x 256 16 80
            vs_3_0 256 16 80

            It is important to note that these values are only the recommended defaults.  A new value may be specified at runtime (the maximum number of active bones per subset is 255), and the subsets will be reconfigured automatically.  This is to accommodate for both shaders that need additional constant space and for substantially different hardware.

            Since each subset has different device-related properties, each subset must be rendered independently.  For this reason, it is best to keep the number of subsets as low as possible.
             


            2.4 Material Manager

            DM2 files can contain information defining a mesh's material.  A material includes the selected shader, constant values, and textures.  This will allow the artist to easily export the material properties along with the base mesh and its animations.

            At runtime, the DirectMesh interfaces can automatically load all vertex shader, pixel shader, and effect files.  Textures can also be dynamically loaded.  Before rendering, DirectMesh will setup the shader, its constants, and the textures.  No outside intervention is necessary.  However, since this tightly integrates the material system and DirectMesh, complete material management will be optional.  Some developers may prefer to handle material-related events themselves.


            2.5 Animation Blending

            An Animation Stage represents an individual, active animation that can be blended with other stages to form the final pose of the mesh.  In order to combine the Animation Stages, two types of animation blending are implemented within the pipeline:  additive blending and transitional blending.

            2.5.1 Additive Blending

            Additive blending is used to combine multiple Animation Stages.  Essentially, it overlays multiple Animation Stages on top of one another, enabling multiple animations to be playing at the same time.   There is no limit to the number of additive blends, but each additional stage will produce a small performance hit.

            To ensure that the bones are correctly blended together, the artist can flag each bone as "active" or "inactive" for each Animation Stage.  The "active" bones from the different Animation Stages will then be combined to form the final pose.  This effectively masks bones that are not essential to each animation from the bones that are.  For example, a "Walking" animation may displace the leg and arm bones.  However, only the leg bones are flagged as active, since they are essential to the "Walking" animation.  The arm bones are not essential (since you can walk and do different things with your arms at the same time), so they can be used in a different blending stage.

            All of the active animations are organized into a hierarchy.  If a conflict between animations occur (they both have the same bone(s) active at the same time), then the animation higher in the hierarchy will override the lower animation.  If the complete bone set is not flagged as active between the blended animations, then the highest animation will use the position of it's bones.  Also, if more than one blended animation has at least one active morph target, then the morphs in the higher animation will override the morphs in the lower animation(s).

            Take the following as an example:

             
             

            The "Walk" pose.  This is the first animation in the blending sequence.  On the right, the active bones are highlighted in red.

             

             

            The "Fire" pose.  This is the second animation in the blending sequence.  On the right, the active bones are highlighted in red.

             

             

            The Final pose.  Note that the active bones from the "Walk" pose are combined with the active bones from the "Fire" pose.  The bones that aren't flagged as active between "Walk" and "Fire" are taken from "Fire".

            2.5.2 Transitional Blending

            Transitional blending is used to blend the end of one animation with the beginning of another.  For example, a "Walking" animation can seamlessly transition to a "Running" animation.  This is achieved by blending a decrementing percentage of the current animation with an incrementing percentage of the future animation.

            Whereas additive blending blends separate Animation Stages together, transitional blending is used to compose an individual Animation Stage.  It never blends two stages together - just individual animations, creating it's own dynamic Animation Stage.  In effect, stages created with the Transitional Blender are fed back into the Additive Blender, allowing them to be combined with other stages. 

            This is useful if only one of the active stages needs to transition.  Referring the examples from above, assume that the "Walking" animation is being blended with the "Firing" animation.  The "Walking" animation can then be transitioned into the "Running" animation, while still being blended with the "Firing" animation.

            Also, additive blending combines Animation Stages, based on each stage's set of active bones.  Transitional blending, on the other hand, simply combines all bones.  The set of active bones in the new Animation Stage are determined by combining both sets of active bones from the animations being transitioned between. 


            2.6 File Compression

            To maintain an acceptable disk footprint, DM2 files can be compressed.  zLib will be used to deflate and inflate the files.  File compression is optional, allowing for custom file processing (ie custom compression and/or encryption) or a shorter loading time.


            2.7 Common Exporter Framework

            The Common Exporter Framework, otherwise abbreviated as CEF, serves as an exporting library, independent of 3d modeling suites.  This allows for new exporters to be created quickly, since the majority of the functionality is completely reusable.

            To create a new plugin, the programmer must provide the implementation of an abstracted Studio interface, which acts as a bridge between CEF and the modeling suite.  It allows the framework to communicate back and forth with any arbitrary program.  Dialogs (as well as other GUI-related events), file writing, and mesh processing will be handled by CEF.

            A 3D modeling program doesn't have to support all of the features of DM2 to use CEF.  When queried, the interface to the modeler can fill in data that it has, and can leave empty the data that it doesn't support.  For example, if "Studio X" doesn't support morph targets, it should just leave the morphing data blank.  However, it can still fill in all of the other information that it does support.


            2.8 Software Development Kit

            The DirectMesh Software Development Kit comes complete with source code, documentation, utilities, exporters, samples, and tutorials.  The licensing of the DMSDK is very simple:  it is completely free to use in any private, public, or commercial endeavor.  The source code can be modified without any restrictions whatsoever.

            posted on 2010-01-16 10:37 狂爛球 閱讀(1429) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 圖形編程

            亚洲国产成人久久精品影视| 99久久婷婷国产综合精品草原| 欧美伊人久久大香线蕉综合| 国产精品美女久久久| 久久久亚洲精品蜜桃臀| 久久午夜羞羞影院免费观看| 久久九九免费高清视频| 国产成人精品久久| 国产免费久久精品丫丫| 国内精品人妻无码久久久影院| 欧美久久一区二区三区| 青青青国产成人久久111网站| 亚洲欧洲日产国码无码久久99| 热久久国产精品| 狠狠精品久久久无码中文字幕| 欧美精品一区二区久久| 久久久午夜精品| 国产成人无码精品久久久免费 | 亚洲午夜久久久| 久久九九全国免费| 久久久国产乱子伦精品作者| 精品乱码久久久久久夜夜嗨| 99久久无码一区人妻a黑| 无码人妻久久一区二区三区免费 | 久久99亚洲网美利坚合众国| 亚洲AV日韩AV永久无码久久| 久久这里的只有是精品23| 国产精品成人久久久| 伊人久久大香线蕉av不变影院 | 久久久久人妻一区二区三区| 久久婷婷人人澡人人爽人人爱| 亚洲欧美一级久久精品| 久久婷婷五月综合国产尤物app| 亚洲精品无码久久千人斩| 久久精品无码专区免费青青| 久久成人国产精品二三区| 久久免费精品一区二区| 国产巨作麻豆欧美亚洲综合久久 | 欧美激情精品久久久久久久| 国产成人综合久久精品红| 亚洲午夜久久久久久久久久|