Crowd —— 简介

目录

一,基础概念

二,Agent Primitives

三,States

四,Crowd state triggers and transitions

五,Caches


一,基础概念

        群集本质上是附加到粒子上的动画角色,群集模拟中的角色移动是基于DOP中的粒子模拟;

        在群集模拟内,角色被称为代理(Agent),在任意时间代理是处于特定状态(如standing、walking、或running);事件(Event,称为trigger)可改变代理的状态(如从walking到running);

        可让一些代理处于“idle”状态,一些处于“walk”状态;“idle”状态内,代理被附加的点保持静止,“walk”状态内,点将移动;trigger检测每个代理处于当前状态是否达到指定时间,对于满足条件的代理,状态将被转换(idle → walk或walk → idle);

群集模拟要求SOP和DOP网络:

  • SOP,用于创建和定义代理,可从现有模型(如Terraria)创建代理位置;
  • DOP,用于真实的群集模拟,包含控制每粒子运动的逻辑,代理可与其他动力学元素交互;

概念

  • Agents,代理是群集模拟的演员(actor),一个代理是具有蒙皮几何体和动画的角色骨骼;在群集内的每粒子都有一个代理附加于它;
  • Crowd source,群集模拟的源是SOP内的点,代理被拷贝到这些点上,这些点表示群集的起始位置;如未给定源点,crowd source节点会随机撒点;
  • Clips,是代理处于特定状态下的动画片段(walk或run);
  • States,在给定时间点,每个代理都处于特定状态(如walk、idle、attack、或run_to_goal);一个状态是被一个动画clip定义;
  • Triggers and transitions,在群集模拟的每步幅,houdini均查看代理并检测一系列的触发条件;如一触发应用,将检测赋予触发的转换,以将代理改为新状态;转换有一个过渡时间,会自动融合新旧状态;
  • Weights,houdini有许多有用的POP力,可使用作为行为节点以控制粒子行为;这些“steering force”本质上是添加了weights概念的粒子力,提供了有用的群集行为(如向一点移动或沿路径);在给定的时刻,代理可被多个力影响(如沿此路径和避开障碍物);群集解算器处理多个力,通过标准化weights(缩放它们以加起来为1),然后将单个力乘以标准化的权重;
    • 群集解算器也有默认的权重概念的力;
  • Obstacles,可指定静态的DOP对象,以让代理避开;
  • Terrain,当前支持单个地形对象,代理将沿着地形,可选的IK足部适应;

二,Agent Primitives

        Agent Primitives是一种packed primitive类型,通常用于表示群集内的角色;与其他packed primitive类型一样,此类型包含一个点,在许多情况下可作为一个粒子;

Agent Definition

  • 一个Agent Primitive存储多个数据(代理副本间共享的数据)的引用,常被称为代理定义;
  • 组成部分:rig、shape library、layers、clips、transform groups、及可选的metadata;代理的当前层、变换、通道值确定解包时的几何体;
  • 当存储一组Agent Primitives时,代理定义的组件也会嵌入到几何体文件;每个组件也可单独存储,并作为外部引用对待;如,当从群集模拟存储序列帧时,可显著减低冗余数据;在这种情况下,仅存储到组件的路径;Agent render node节点可将现有的Agent Primitive代理定义写入到磁盘,或从角色rig或FBX文件创建代理定义;

Rig

  • 存储代理的变换层级(被命名的变换树)和通道;
  • 每个变换有一个父级,或是层级的根;如在动画片段内没有joint,或代理没有pose或clip,rest pose可被指定;
  • 每个通道可提供默认值(当在动画片段内没有通道时被使用),可关联一个变换;

Shape Library

  • 提供由代理使用一组几何体(外形),库内的每个外形有唯一的名字;

Layers

  • 控制代理几何体(当代理解包时应使用的外形),以及外形如何变换或变形;
  • 一层是由一组外形绑定组成,将外形库中的外形附加到rig中的变换(如,将命名的sword_1的外形附加到RHand的变换上);
  • 每个外形绑定也对外形的边界框指定一个缩放因素,及当解包外形时将使用的变形器;如没有变形器,外形绑定是静态的,外形简单的被joint变换;

Deformers 在外形绑定中有多个变形器类型

  • Skinning,这些变形器等价于Bone Deform节点的Skinning Method选项;形状几何体应为rest pose,且包含capture attributes(描述几何体咋样被变换影响);几何体基于capture attributes和代理的当前变换变形;
  • Blend Shapes,使用代理的通道值提供的权重,融合一组输入的外形,等价于Blend Shape节点的操作;

Clips

  • 提供动画数据,能被用于驱动代理的变换和通道值;

Transform Groups

  • 是在rig内被命名的变换和通道的子集;
  • 当应用clips到代理骨骼的部分时,可被使用;
  • 0-1的权重值也可被赋予到组内的每个变换;

Metadata

  • 可被用于在代理定义内存储额外的自定义数据(如,用于构建代理的资产信息);
  • 由于是在代理实例中共享的,比在代理上创建属性更有效‘’;
  • 是作为字典存储的,字典的关键字始终是字符串,值可以是字符串、数字、数组、或字典;

三,States

        在给定时间点,每个代理都应在特定的状态下,如“walk”,“idle”,“attack”,或“run_to_goal”;状态可被以下定义:

  • animation clip
  • behavior nodes,影响粒子的运动;
  • 影响代理骨骼动画的节点,如Agent Look At DOP,Agent Clip Layer DOP;

Movement behaviors

  • POP Steer Align
  • POP Steer Avoid
  • POP Steer Cohesion
  • POP Steer Obstacle
  • POP Steer Path
  • POP Steer Seek
  • POP Steer Separate
  • POP Steer Wander
  • POP Steer Custom

四,Crowd state triggers and transitions

        在群集模拟的每步幅,houdini均查看代理并检测一系列的触发条件;如一触发应用,将检测赋予触发的转换,以将代理改为新状态;转换有一个过渡时间,会自动融合新旧状态;

  • 代理属性可用于自定义触发器;
  • 多个触发/转换激活,被选择的转换在技术上是未定义的(但可能是最后一个转换);最好不要创建多个具有相同的“from”状态触发/转换;

 

内建触发类型
Trigger typeWhat it doesExample
Object bounds当代理进入、离开、或在几何体内部时激活当代理超过终点线时停止跑动
Object attribute基于在代理附近一些对象的属性值激活当在红灯时停,在绿灯时行走(在灯对象上使用stop属性)
Object distance基于代理与对象或点云的距离激活如代理离基地太远会停止转身

Object ray cast

如一对象直接在代理的前面且在一定距离内激活如代理看见一幅画,停下并欣赏

Particle speed

基于代理的速度从走到跑在到冲刺

Particle proximity

基于其他代理的接近度激活不同组代理接近时转换为战斗状态
Particle attribute lookup基于代理属性的某个值活如代理的health属性太低切换为待死状态
Particle attribute comparison基于将代理属性值与附加代理相比较激活代理逃离更大的对手
Time基于场景时间激活穿过场景一半时代理跑动
Current state duration基于代理在当前状态的时间警卫在30秒后离开“警戒”状态
Animated parameter基于触发节点的参数(可手动K帧或表达式)代理对其他部分手动动画事件做出反应
Custom VEXpression基于变量的值激活对更加复杂或自定义要求使用
RBD impact data当代理被一个对象撞击并impact大于阈值时激活代理被箭击中并转化为ragdolls
Animation clip loops基于代理当前动画片段的循环次数激活代理在弹跳一定次数时跑动
Look At target基于代理当前查看目标代理在看画5秒后开始跑动
RBD sticky collisions基于发生在代理上的粘性碰撞次数激活代理被箭集中(黏在他们上)转化为ragdolls

五,Caches

        当存储agent primitives到磁盘时,它们的共享代理定义也会嵌入到几何体文件,以便在加载文件时可重建代理;

        代理定义的每个组件可被标记为磁盘上文件的外部引用,如当Agent SOP节点Input参数设置为Disk,或使用Agent Clip SOP节点从磁盘加载动画片段;在这个情况下,仅有文件路径存储在几何体文件(当存储代理定义),可显著降低几何体文件尺寸;

        当从几何体文件加载代理时,代理定义和任何外部引用文件也被从磁盘读取;如代理定义不包含外部引用,可能会在加载序列文件时降低性能;除了必须加载更大文件外,每文件代理定义的单独副本可能降低视图性能,由于代理定义每帧改变;

        如果代理定义是外部引用,houdini能避免每帧重复加载代理定义文件以提高性能;houdini维护一个代理定义的引用计数缓存,当没有代理引用这些文件,entries会被移除;建议设置File SOP的Cache Frames参数至少为1;否则,当在加载下一个文件前几何体被清理,导致代理定义不必要的刷新和加载;

  • 27
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值