摘 要: 本文主要以布料实时动画的制作为例, 在介绍理论基础和制作工具的基础上, 探讨基于物理模型的实时动画实现方法。
关键词: 物理模型; 计算机实时动画; 碰撞检测技术;
在我们平时的学习和生活中, 随处都可以接触到计算机实时动画技术, 比如炫目的3D动画电影、游戏人物等。在物理模型下进行实时动画设计, 充分考虑各种外力形式对布料等模型的形变作用, 可以达到动态仿真效果, 使计算机模拟动画充分反映出现实世界的物理规律, 从而给人带来更加真实的视觉感。对计算机实时动画技术进行分析, 有利于提高我们的计算机和物理学应用能力。
1、 计算机模拟环境配置
本次设计的布料实时动画以Visual C++为开发平台, 采用C++语言和OpenGL图形API。OpenGL是一款功能强大的计算机三维图形接口, 包含120多个图形函数库, 支持几何模型构建和动态仿真。初学者也可以快速上手应用, 软件开发难度较低。OpenGL的三维场景交互程度高, 渲染效果逼真, 性能非常卓越。采用OpenGL三维图形设计界面, 可以满足本次设计的软件需求。物理引擎则选择Physx引擎, 可以自动引入牛顿动力学原理, 增加系统交互性, 高度模拟自然界中的物体特征, 得到较为逼真的模型和动画效果。在上述模拟环境配置条件下, 我们可以将布料模型设计为具有质量的三角网格模型, 遵循牛顿第二定律进行设计, 为仿真效果提供保障。
2、 质点-弹簧模型
从上述分析可知, 质点-弹簧模型易于计算和实现, 因此在计算机实时动画制作中得到了广泛应用。本文采用该模型构建的布料模型由一系列均质、离散化的质点组成, 质点之间连接有不同类型的弹簧, 假定弹簧长度不为零, 且不考虑其质量, 加入弹簧的目的是模拟布料纱线之间的相互作用力。布料纱线的内部作用力可分为结构力、弯曲力和剪切力, 因此弹簧也分为三种类型, 即结构弹簧、弯曲蛋黄和剪切弹簧。通过三种弹簧的应用, 可以充分模拟布料的各种运动形式, 获得真实的视觉感。此外, 还要考虑布料所受的外力作用, 模拟布料在下落、悬挂或与其他物体发生接触时的运动状态。可以将外力分为重力、摩擦力和空气阻力等。其中, 重力使布料模型各质量的重力之和, 空气阻力能够减缓弹簧拉伸形变, 使布料模型逐渐趋于稳态。
3 、超弹性形变处理方法
在布料的质点-弹簧模型动画模拟过程中, 若将布料某一点固定, 此时受到的拉伸力如果过大, 会导致布料被撕裂或断开。在拉力作用质点附近, 弹簧会出现超形变现象, 而远离拉力作用点的质点拉伸长度则接近正常, 这种现象被称为布料的超弹性形变, 是布料动画模拟过程中需要处理好的问题。在布料质点-弹簧模型的模拟过程中, 为方便计算, 通常假设弹簧弹性因子为线性变化, 但在实际受力情况下, 其形变并不完全符合线性规律, 这是超弹性形变问题的根本成因。另一方面, 布料动画的帧刷新速度要能够被人的肉眼所接受, 实时动画仿真对画面更新率有较高要求, 需要适当降低动画时间步长, 过大的时间步长也会引发超弹性形变问题。
针对这一问题, 传统的解决算法主要包括基于质点速度的修正方法和基于质点位置的修正方法。其中, 质点位置修正法是由Provot等人基于逆向动力学原理提出的修正方法。在每个时间步长模拟结束后, 对各质点位置进行计算, 进而计算弹簧拉伸铝, 如果超过最大拉伸率的设定值, 就对弹簧两端质点的位置进行修正, 将弹簧拉伸率控制在最大拉伸率范围内。基于速度的修正方法最早由Vassilev提出, 是在每个时间间隔结束后对弹簧拉伸率进行检查, 与预先设定值进行比较, 根据实际拉伸率与设定阈值的关系, 对质点速度进行修正。该方法后来经House.tal和Bridson等人的改进, 修正效果有所提高, 但总体来看, 修正效率较低, 且约束不严格, 可能会再次引起超弹性形变为。
针对传统解决算法的不足, 目前又提出一种新的解决方法, 即基于拉伸张量的排序算法, 该方法针对布料超弹性形变的特征和形成原因, 采用拉伸张量对质点进行倒序排列, 优先对拉伸张量值较大的质点状态进行调整, 采用迭代算法进行排序和更新, 可以明显提高超弹性形变问题的处理效率, 满足实时动画模拟效果要求。
4 、包围盒碰撞检测方法
本文采用经过优化的AABB层次包围盒法实现碰撞检测, 该方法对三角化的布料模型和待碰撞物体建立层次包围盒二叉树, 遍历两棵发生碰撞的二叉树, 判断重叠区域, 检测某个动画时间点, 布料与其他物体的碰撞情况。AABB包围盒法的应用分为两个阶段, 即初步检测阶段和详细检测阶段。在初步检测阶段, 通过判断包围盒在三个坐标轴的投影情况, 判断包围盒是否存在相交, 若包围盒的投影都重叠, 则两包围盒必然相交, 若至少有一个投影布重叠, 则不发生相交, 从而将三维碰撞检测转化为一维空间的碰撞检测问题。在湘西检测阶段, 主要应用直线-三角形碰撞检测方法, 判断碰撞是否发生, 并执行碰撞响应函数。采用上述碰撞检测方法, 可以同时满足计算机动画模拟的真实性和实时性要求。
5、 结束语
综上所述, 通过对计算机实时动画的实现原理和实现方法进行分析, 可以了解到计算机实时动画制作的关键技术, 明确模拟平台的配置条件。在此基础上, 构建合理的计算机动画模型, 做好超弹性处理和碰撞检测, 可以使动画效果接近真实, 并满足实时性要求。通过本次研究和实践, 使我对三维动画的制作有了一个新的认识, 并在查阅资料和实践过程中, 提高了知识技能的应用能力。
参考文献
[1]周冬, 邵敏之.三维真实感角色动画中运动模糊感知的实验研究[J].中国体视学与图像分析, 2016, 21 (04) :393-401.
[2]肖凡, 徐丕文.网络动画仿真演示实现分析[J].无线互联科技, 2015 (23) :24-25.
[3]范晓晔, 田丰林, 陈戈.基于GPU的实时群体仿真算法实现[J].计算机技术与发展, 2014, 24 (11) :17-22.