Animation Part 3: Compression, Animation Pipeline

Animation Part 3

11.8 Compression Techniques

4 bytes * 10 channels * 30 samples/second = 1200 bytes per second per joint , quite large!

channel omisson

  • scale channel: 3 to 1, even 0
  • quaternions are always normalized, so w in (x, y, z ,w) can be omitted and reconstructed at runtime
  • for poses that do not change, the entire animation for that frame can be stored as a single bit, indicating not changing

quantization

  • converting a 32-bit IEEE float into an n-bit integer representation
    • for example, 32-bit float is too precise for a quat that lies in [-1, 1]
    • often 16 bit is enough
  • encoding & decoding in quantization
    • encoding : float to n-bit integer presentation
    • decoding: opposite
    • decoding only recovers approximation, because quantization is lossy

Sampling frequency and key omission

  • three problems causing animation data large
    • up to 10 channels(channel omission helps)
    • large number of joints(hard to solve for high-res character)
    • high sample rate
      • reduce sample rate overall(when 15 fps satisfies, don’t do 30)
      • omit linear changing frames, use LERP to restore

Curved-based compression

  • use non-uniform B-splines to approximate each channel curve
    在这里插入图片描述

selective loading and streaming

  • load only necessary clips
  • keep core clips

11.9 Animation System Architecture

  • three distinct layers for a Animation System
  • Animation Pipeline
    • generate a single local skeleton pose, and post-process
  • Action State Machine (ASM)
    • upper-level animation transitions
  • Animation Controller
    • high-level control of animation mode
    • such as drive mode, run and gun mode…

11.10 The Animation Pipeline

  • input: animation clips and blend specifications
  • output: local and global poses, matrix palette
  • stages:
    1. Clip decompression and pose extraction
    2. Pose Blending
    3. Global pose generation
    4. Post-Processing
    5. Recalculating of global poses
    6. Matrix palette generation
  • review: local pose and global pose of a joint
    • local joint pose: the joint transformation in parent joint space
    • global joint pose: the joint transformation in model space
    • P j → M = Π i = j 0 P i → p ( i ) P_{j \to M} = \Pi_{i=j}^0P_{i \to p(i)} PjM=Πi=j0Pip(i), where p ( 0 ) ≡ M p(0) \equiv M p(0)M
    • M is model space, P i → p ( i ) P_{i \to p(i)} Pip(i) is transform from local joint i to parent p(i)

Data structure

  • shared resources
    • Skeleton: joint hierarchy and its bind pose
    • Skinned meshes
    • Animation Clips
      在这里插入图片描述
  • A set of animation clips only apply to one skeleton
    • better use different meshes for the same skeleton to create new characters, so that they can all share a set of animation clips
    • animation retargeting system makes it less strict
  • per-instance data
    • each character instance has its own state data
    • including:
      • Clip state
        • Local clock: determines which frame to be extracted
        • Playback rate: speed of the clip
      • Blend specification
        • how to blend multiple clips
      • Partial Skeleton joint weight
      • Local Pose
      • Global Pose
      • Matrix palette

Flat-weighted Average Blend v.s. Blend Tree

pass

Cross Fading Architectures

  • cross-fades with a flat weighed average
    • Ramping down A, Ramping up B在这里插入图片描述
    • Complex blends cross fades, from ABC to DE
      • keep relative weights of A,B,C( or D,E) constant
      • ramping up or down ABC, DE as a whole
  • Cross Fades with Expression Trees
    • simply introduce a new LERP node at root
      在这里插入图片描述

Animation Pipeline Optimization

  • different on most hardware platforms
  • main RAM <—> Local cache of processing units
  • hUMA: heterogeneous unified memory architecture
  • however, optimization techniques can apply to multiple platforms at most times, more or less
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值