编辑: AA003 2019-12-17
1 群组动画(Crowd and Group Animation) 金小刚 Email: jin@cad.

zju.edu.cn 浙江大学CAD&

CG国家重点实验室 蒙民伟楼512室2Boids模型 ? 参考文献 Craig W. Reynolds. 1987. Flocks, herds and schools: A distributed behavioral model. SIGGRAPH Comput. Graph. 21,

4 (August 1987), 25-34. (Google citations: 10265次, 2018.12.11)

3 优先级递减的群体模拟三大原则 ? 碰撞避免原则(Collision Avoidance) ? 避免与相邻的群体成员相碰 ? 速度匹配原则(Velocity Matching) ? 尽量保持与周围邻居群体成员的速度 匹配 ? 群体合群原则(Flock Centering) ? 群体成员尽量靠近

4 Steering Behaviors for Autonomous Characters ? 参考文献 Craig W. Reynolds, Steering Behaviors For Autonomous Characters, Game Developers Conference 1999. (Google citations: 1647, 2018.12.11) 很多游戏引擎采用了这些技术,如UNITY 3D,Cocos2d-x等.

5 大纲 ? 介绍 ? 简单的车辆模型(Simple Vehicle Model) ? 模型的物理原理 ? 导航行为 ? 一个或两个角色的行为 ? 群组行为 ? 行为的结合 ? 结论

6 介绍 ? 在游戏和动画中,如何对自主角色进行栩栩 如生和即兴的方式进行导航? ? 运动行为的层次结构

7 简单的车辆模型(Simple Vehicle Model) ? Simple Vehicle Model ? mass scalar ? position vector ? velocity vector ? max_force scalar ? max_speed scalar ? orientation N basis vectors 推力 制动 导航

8 ? 简单车辆模型的物理原理为前向欧拉积分法: ? steering_force = truncate (steering_direction, max_force) acceleration = steering_force / mass velocity = truncate (velocity + acceleration, max_speed) position = position + velocity ? 构造新的基向量(局部坐标系): ? new_forward = normalize (velocity) approximate_up = normalize (approximate_up) // if needed new_side = cross (new_forward, approximate_up) new_up = cross (new_side, new_forward) 车辆模型的物理原理 new_forward approximate_up new_side new_up

9 限制(Constraint) ? 这个简单的车辆模型不 能模拟如打滑、自旋等 效果;

? 而且,该模型允许车辆 在速度为零时转弯.

10 寻找和逃离(Seek and Flee) ? http://www.red3d.com/cwr/steer/SeekFlee.html ? 寻找(或追逐)一个静态的目标 ? desired_velocity = normalize (target - position) * max_speed steering = desired_velocity C velocity ? 把追逐反过来,即为逃离

11 追逐和躲避(Pursuit and Evasion) ? http://www.red3d.com/cwr/steer/PursueEvade.html ? 追逐(Pursuit)与寻找(Seek)非常类似,其区别在于目标 为一移动的角色(猎物). ? 假设猎物在预测区间T内不会转向. ? 猎物在将来的位置可通过把它的当前速度乘以T,并把该偏移量与当 前位置相加来得到. 猎物 当前位置 下一个位置

12 追逐和躲避(Pursuit and Evasion) 注:也有把Pursuit and Evasion说成Seek and Flee的13 偏移的追逐(Offset Pursuit) ? 沿着一条接近目标的路径追逐,但是不直 接进入移动的目标(例子,战斗机进行空 中扫射);

? 对预测的目标点进行局部化(在目标角色 的局部坐标系) ,把局部目标投影到角色 的侧向(Side-Up)平面,对偏移向量进行 归一化,乘上比例因子R(偏移值),并把 它加到 局部目标点, 然后把该值进行全局 化(变换回世界坐标系). ? 采用寻找(Seek)行为来接近偏移点. 目标点 偏移点

14 偏移的追逐(Offset Pursuit)

15 到达(Arrival) slowing_distance distance Target Position ? 当角色远离目标时,到达行为与寻找行为几乎是一样的;

? 但是,寻找行为是以全速穿过目标.而对于到达行为,角 色将放慢速度,直到停止,并与目标位置重合. ? 开始减速的距离为到达行为的一个参数;

16 到达(Arrival) 目标 角色 开始减速的距离

17 到达(Arrival) ? http://www.red3d.com/cwr/steer/Arrival.html ? target_offset = target C position (这是一个矢量) distance = length (target_offset) (这是一个标量) ramped_speed = max_speed * (distance / slowing_distance) clipped_speed = minimum (ramped_speed, max_speed) desired_velocity = clipped_speed * target_offset / distance steering = desired_velocity - velocity slowing_distance: 表示开始减速的距离 DEMO

18 19 障碍避免(Obstacle Avoidance) ? http://www.red3d.com/cwr/steer/Obstacle.html ? 该行为的目标是:在该角色前面,保证有一个假想圆 柱的自由空间.

20 ? 障碍避免返回的值: ? 返回避免最有威胁障碍物的导 航值;

? 如果没有碰撞是迫在眉睫的, 返回一个特殊值(空值,或零 向量),表示在这一时刻不需 要纠正量. 障碍避免(Obstacle Avoidance)

21 障碍避免(Obstacle Avoidance)

22 徘徊(Wander) ? http://www.red3d.com/cwr/steer/Wander.html ? 导航方向表示为红色向量 ? 图中的大圆对导航进行约束 ? 小圆对导航的随机偏移量进行约束

23 徘徊(Wander)

24 ? 徘徊行为将保持一个 徘徊方向 这一状态,这里表示为一个 红点.调整的徘徊方向约束到一个黑圆上. 黑圆的半径为1, 其中心处于沿角色向前轴(forward axis)sqrt(2)单位长度的位置. ? 徘徊模型的参数: ? Strength:从0(没有转向) 到1. ? Rate:控制 徘徊方向 变化的程度,从0(没变化)到1 (快 速的飘忽不定的变化),这里表示为白圆的半径 (上图显示的 为0.6,表示最大的随机偏移量) ? 导航方向表示为青色的矢量.车辆的速度用品红矢量来表示, 导航力用蓝色矢量来表示. 徘徊(Wander) ? 一种随机导航,但又有一定的秩序:某一帧 的导航方向与下一帧的导航方向有关.这将 产生比生成一随机导航方向更有趣的运动.

25 路径跟随(Path following)

26 ? 绿圆显示了路径跟随行为.其任务是在一个给定的方 向进行路径遍历(左边进入,右边退出),同时保持 其中心位于灰色区域. ? 在该例子中,路径定义为一条折线和一个半径.该行 为与抑制(containment)和沿墙运动(wall following) 相关, 其区别在于,在路径跟随中,路径意味着行驶方向;

? 在路径跟随行为中,只有当车辆将离开灰色区域时, 才执行校正导航. 路径跟随(Path following)

27 路径跟随(Path following) ? http://www.red3d.com/cwr/steer/PathFollow.html ? 沿着一条路径移动角色,并同时保持在脊柱线的指定半径内. ? 投影距离:小于路径半径时,不需要进行导航校正. ? 否则,把预测的位置投影到路径上,把该点作为目标点,并进行 寻找(Seeking)行为. 投影距离(Projection distance) : 从预测位置到最近路径点的距离 predicted position DEMO

28 29 沿墙运动(Wall Following) ? http://www.red3d.com/cwr/steer/Wall.html

30 ? 绿色车辆使用沿墙运动行为以使得它沿标记为灰色的 区域平行移动并保持一定的偏移量.汽车在移动时, 需要保持与墙给定的距离.车辆的速度由品红色矢量 表示,导航力由一蓝色矢量表示. ? 沿墙运动行为的实现:首先根据当前的速度预测一定 时间后车辆的位置,把该位置投影到墙上离它最近的 点(红点),把该点沿墙的法向(红线)移动给定的偏移量, 从而生成一个目标点(红色的圆).最后采用寻找(Seek) 行为来接近目标点. ? 车辆与墙之间的通信通过一个通用的表面协议(generic surface protocol )来实现:车辆经过墙表面时,经过询 问可得到墙上的最近点和该点的法向.因此,导航行 为并不需要知道墙壁表面的形状信息. 沿墙运动(Wall Following)

31 抑制 (Containment, 包含在一个容器中)

32 抑制 (Containment) ? http://www.red3d.com/cwr/steer/Containment.html ? 车辆使用抑制(或广义的障碍避免)行为使得它远离标记为 灰色的区域.这种行为与前述的障碍避免密切相关(障 碍物通过包围球或圆柱表示).然而,这种行为可以处 理任意形状,并允许车辆导航接近障碍物的表面. ? 车辆通过探测点测试前面的空间(用白线表示), 当没有接 触障碍物时,车辆将采用徘徊行为,以避免使得它的运 动与 通道 对齐.当探测点接触到障碍物时,把该点 投影到障碍物的表面,并计算这点的法向,沿法向偏移 一定量的点作为Seek目标进行导航. ? 车辆与障碍物之间的通信通过一个通用的表面协议 (generic surface protocol )来实现:车辆询问探测点是否 位于障碍物内部,如果是的话,得到障碍物上的最近点 和该点的法向.因此,导航行为并不需要知道墙壁表面 的形状信息.

34 流场跟随行为(Flow Field Following) ? http://www.red3d.com/cwr/steer/FlowFollow.html ? 假设运动区域已经有一个速度流场 ? 估算角色将来的位置并计算在这点的流场 ? 得到的速度(F)即为我们期望的速度,导航方向(S)为期 望速度和当前速度的差 DEMO

35 36 流场的设置 ? Paint方法(massive 软件支持这个功能) ? 基于径向基函数的散乱点插值方法 Xiaogang Jin, Jiayi Xu, Charlie C. L. Wang, Shengsheng Huang, Jun Zhang: Interactive Control of Large-Crowd Navigation in Virtual Environments Using Vector Fields. IEEE Computer Graphics and Applications 28(6): 37-46 (2008) Interactive Control of Large-Crowd Navigation in Virtual Environments Using Vector Fields ? 二维散乱数据插值问题可以描述为: 给定k个平面约束点{c1, c2,…, ck}和对应的值{h1, h2,…, hk}, 求一个光滑曲面f(x),使得f(ci)= hi,1<

i........

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题