Содержание
- 2. 客户端 Angelica … Angelica3D GfxCommon (动画模型,特效) 客户端、引擎、GfxCommon关系简图
- 3. 目录 A3DSkinModel 简介及动画相关 3DMAX导出 文件、类说明 动作通道简介 从 A3DSkinModel 到 CECModel CECModel 使用 由.smd生成 子模型,组合动作 动作事件 物理相关
- 4. 美术制作流程 3dmax导出(骨骼,动画,皮肤) .smd, .bon, [.stck], .ski 动作合并(.bon->.stck)——将动作信息存入.smd (在A3DSkinModel中添加基础动作: A3DSkinModelActionCore) 根据.smd创建.ecm文件,创建游戏当中实际需要的组合动作,配上特效,音效等 注:美术导出动作的时候,是以.bon的形式导出来的,其中包含了骨架以及动画信息,需要经过SkeletonEditor处理之后才实际生成.stck文件 参考实际导出的文件
- 5. A3DSkinModel 从max导出 注:.phy文件已经不再使用了,曾经是用来做物理信息的,后采用基于PhysX的Aphys库提供物理功能 3dMax SkeletonExporter .max .smd .bon .ski .stck .stck .stck .stck SkeletonEditor .phy .Max可以分别导出.smd,
- 6. A3DSkinModel 文件说明 .smd -> A3DSkinModel 综合了SkinModel所需的各类信息(骨架,动作,皮肤等) .bon -> A3DSkeleton 骨架,骨骼,挂点,骨骼的父子关系等 .stck -> A3DSklTrackSet 动画数据,骨架上每个骨骼的位置朝向随时间变化的关键帧数据 .ski ->
- 7. 对应.smd文件 对应.bon文件 基础动作 对应.stck文件 A3DSkinModel类结构简图
- 8. A3DSkinModel 动作通道 动作通道是用来解决什么问题的? 多个动作同时播放,按照权重混合 例子:(身体的动作 与面部表情动作) A3DSMActionChannel 1 2 3 4 5 6 A3DSMActionChannel Skeleton Bones
- 9. Physics 从A3DSkinModel到CECModel SkeletonExporter .smd ModEditor .ecm .mphy SkeletonEditor .ski .sphy CECModelStaticData
- 10. ECModel 为什么需要CECModel? 子模型管理 多个简单动作组合成一个复杂动作(技能等) 播放动作到特定时刻播放音效(需要由美术控制) 播放动作到特定时刻播放特效(同上) 播放动作到特定时刻触发脚本 etc. 游戏里需要预设一些不同骨骼缩放系数的模型(缩放) 游戏需要对动画模型进行碰撞检测(凸包) 动画模型与物理引擎关联(物理) 其他与客户端逻辑相关的(脚本)接口(逻辑)
- 11. ECModel 与A3DSkinModel的关系 类结构简介 子模型 组合动作 动作事件 脚本 物理 其他注意事项 类: CECModel 文件: .ecm
- 12. 基础动作 ECModel与A3DSkinModel的关系 美术制作流程
- 13. ECModel 结构简图 与.ecm文件一一对应 容易引起误解的地方
- 14. ECModel 子模型 子模型用在什么场合? 武器 骑乘 父子模型间通过挂点连接 HH_ CC_(注释1) Hanger: 用来索引子模型的字符串,由客户端与美术约定 美术可指定一个效果在父模型动作的时间,以及子模型的挂点上播放(通过Hanger) 注释1:挂点区分为HH_Hook 和CC_Hook两种,分别用在挂/被挂两种场合
- 15. ECModel 组合动作 什么是组合动作?(编辑器-动作) 组合动作解决了什么问题? 节约数据:一个动作在多个技能中用到,那么只需要一份实际的动作数据,在多个组合动作中调用即可 程序,策划,美术,音效的结合 程序: 播放动作; 策划:技能动作名称;美术:动作,特效,色彩,子模型动作; 返回:为什么要有ECModel
- 16. ECModel 组合动作 数据 A3DCombinedAction & A3DComActDynData A3DCombinedAction 静态数据: 由编辑器创建 包含需要存/读的信息,各个基本动作名称,各事件信息等 A3DComActDynData 动态数据: 由PlayActionByName / QueueAction /PlayAttackAction创建
- 17. ECModel 组合动作 播放 PlayActionByName & PlayAttackAction PlayActionByName 播放组合动作(可设置Channel) PlayAttackAction 播放技能动作(需传入自身ID及目标ID,组合动作上挂载的Attack事件会播放飞行GFX及击中目标GFX,过程中回调客户端提供的函数,由客户端根据ID及其他附属信息计算位置) 参考攻击事件ATT
- 18. ECModel 组合动作 各种参数1 *FixedPoint用于没有目标玩家或怪,但是有一个特定位置的情况,该状况下nCastTarget可为0 bool PlayActionByName( int nChannel, const char* szActName, float fWeight, bool bRestart=true, int
- 19. ECModel 组合动作 各种参数2 CECModel::AddOneAttackDamageData( int nChannel, clientid_t nCaster, clientid_t nTarget, unsigned char SerialId, DWORD dwModifier, int
- 20. ECModel 动作事件 什么是动作事件?(编辑器-事件) 动作事件解决了什么问题: 在动作的特定时间点做某件事的自由性(GFX, SFX, ATT, CHILDACT, etc.)(注1) 举例:技能效果的播放,音效的播放,子模型动作,脚本事件 注1: 需要在动作时间轴上的某个时间点,触发特效、音效、攻击事件、子模型动作、模型色彩改变、脚本、摄像机镜头等
- 21. ECModel 动作事件 ATT 攻击事件 ATT 飞行、击中等GFX效果 飞行效果播放过程中回调客户端 返回ECModel播放攻击动作 GfxCommon::A3DSkillGfxMan ElementClient::SkillGfxMan 攻击事件的流程的说明
- 22. ECModel 回调 回调 伤害信息 ECModel 动作事件 ATT - 2 客户端 服务端 PlayAttackSkill 伤害计算 技能攻击 收到伤害信息 AddOneAttackDamageData
- 23. ECModel 脚本(lua) 模型发生某些事件时触发 (编辑器-脚本) 加载(初始化) 播放动作(根据动作切换武器挂点) 更换装备(根据装备ID播放特效) 物理破碎 动作脚本事件 播放动作到特定时刻触发 返回:为什么要有ECModel
- 24. ECModel 物理 APhysX与A3DSkinModel的粘合 APhysXActor -> A3DBone APhysXCloth -> A3DSkin 返回:为什么要有ECModel 物理参看编辑器 物理说明
- 25. 关于物理的简介 Actor – 刚体 Shape 实际参与物理运算的形体 由美术根据实际形体编辑 Joint – 约束(针对刚体) Joint 1.绕轴旋转角度限制 2.移动距离限制 碰撞 返回ECModel物理
- 26. ECModel 其他 – 位置 模型的逻辑位置与实际位置 CECModel 继承自A3DCoordinate(注1) CECModel包含A3DSkinModel A3DSkinModel也继承自A3DCoordinate(参考图) 注1: A3DCoordinate代表包含了位置和朝向的坐标系,此处的问题在于CECModel自身和其包含的A3DSkinModel各有一份数据 CECModel::GetAbsoluteTM() // 逻辑的位置与朝向 != CECModel::GetA3DSkinModel()->GetAbsoluteTM()
- 27. ECModel 其他 – 各种设置 SetId 在脚本中使用,于回调客户端时提供; 与Gfx中的ECModel元素配合使用 SetGfxUseLod 模型上挂 的GFX里的粒子喷射器受其影响 SetDisableCamShake 禁止模型上挂GFX中的相机振动起作用
- 28. ECModel 其他 – 附加皮肤 关于ECModel附加皮肤 只用于ModEditor编辑器显示 客户端中使用的A3DSkin的两个来源: SkeletonEditor中附加到A3DSkinModel上 客户端中自行加载的 (与ECModel中编辑的附加皮肤无关)
- 29. ECModel – 其他 透明度 SetTransparent/GetTransparent 设入的透明度和取出的透明度不等同的问题 模型色彩改变[动作事件]的影响
- 30. GFX 特效元素简介 特效关键帧简介 特效渲染机制简介 关于2D特效的说明 类: A3DGfxEx 文件: .gfx
- 31. GFX 元素简介 3D面片 2D面片 圆环 (面片圈) 电弧 (面片节,于径向使用PerlinNoise) 轨迹 (面片节,于前端生成新的面片,每节面片有TTL,通过运动形成连续的效果) 粒子 (各种形状的发射器&面片,可绑定其他元素) 模型 (.smd,文件A3DSkinModel) 子效果 (把一个完整的GFX文件看成一个元素)
- 32. GFX 结构简图 子效果 粒子系统 面片 圆环 电弧 轨迹 模型
- 33. GFX 元素的例子-1 电弧 轨迹 3D面片 2D面片 粒子 类结构
- 34. 子效果 添加一个效果为gfx的元素。可用于会多次使用的某一组效果或者元素。 子效果 GFX 元素的例子-2 类结构
- 35. GFX 关键帧 关键帧作用于A3DGFXElement 关键帧可以影响的属性 移动 旋转 颜色(透明度)改变 比例改变 Etc.
- 36. GFX的注册渲染机制 A3DGFXExMan::RegisterGfx (A3DGfxEx*) 渲染GFX,首先放到一个容器(GfxRenderContainer)中,RenderAllGfx后该容器被清空 (注册机制1,针对A3DGFXEx) 容器可以替换(可以用在一些特殊场合) A3DGFXExMan::RenderAllGfx GFX的元素被按照渲染状态注册到渲染容器中 (注册机制2,针对A3DGFXElement) 按照渲染状态的类别分别DrawPrimitive
- 37. 2D GFX的使用 程序联入的2DGFX,可以通过A3DGFXExMan提供的2DGFX接口进行加载,渲染等操作(用于登录界面等场合) 非程序联入的2DGFX,可以以3DGFX同样的方式渲染(RegisterGfx)。Flush采用Render2DGfx,而非RenderAllGfx(注1) 关于Render2DGfx的参数(backLayer)——是为了配合界面,分为前景和后景 注:2DGFX需要调用一个不同的Flush函数的原因是2DGFX被置于一个不同的渲染容器(GfxRenderContainter)中 参考编辑器2DGFX(诛仙登录界面)
- 38. 2DGFX 界面应用
- 40. Скачать презентацию