夏航宇
教育背景
墨尔本大学 2017.2 - 2019.1 @墨尔本,澳大利亚
- 计算机科学 理学硕士学位
华中农业大学(211) 2012.9 - 2016.6 @武汉,中国
- 计算机科学与技术 工学学士学位
个人简述
有0-1的成功上线项目经历,并且经历了1年的上线版本的开发。有成功项目经验。深入理解ALS, Lyra, GASP的设计思路。三个系统都有在项目中的深度使用经验,可以从零开始为项目定制动画框架,动画资源管理,皮肤系统,角色状态机,武器系统,多角色交互的暗杀处决系统等。射击类、ARPG类均可。此外,还深入使用过UE5的MotionMatching,AnimWarping,MotionWarping以及DistanceMatching技术。对于后三者有源码级理解,可以深入定制。熟知常用的IK算法和FootPlacement的计算,能在项目中落地。深度使用过骨骼的物理动画模拟如KawaiiPhysics、基于PhysicsAsset的PhysicsAnimation。对移动和动画模块的底层实现十分熟悉,具备在引擎层面深度开发的能力,比如如何多线程执行rootmotion的animsequence动画,如何单动画实例实现任意搭配部位的换装系统(支持各部位有独立的locomotion动画)。对动画的多线程更新、评估、动画状态机、动画图表的底层实现十分熟悉。对动画的导入流程有一定了解。有UE5使用IKRetargeter做离线和运行时动画重定向以及UE4遗留的运行时动画资源对模型的retargeting有使用经验,后者有源码级理解。移动方面有攀爬,直立跑墙(任何角度,任何墙面衔接方式),载具(马匹)的开发经验。能够深度定制移动组件,处理DS架构下网络同步的问题。有处理移动拉扯的经验。除此之外,还具备丰富的Gameplay开发经验,包括但不限于: GAS, 玩家操控,DS网络同步架构底层实现,相机管理,玩法开发。
个人技术文档和练手Demo
- 顶部个人信息栏(https://ri77tlp7on3.feishu.cn/drive/folder/XCjqfQeTvlj2RfdVCAKcNF84nud?from=space_shared_folder)
项目经历
广州库洛科技有限公司(NAMI) 2024.12 - 至今
- 动画系统的重构:主要目的为逻辑解耦,规范框架使用思路,提升框架拓展性的同时保证功能的稳定性。包括但不限于父子状态选取,状态切换,GameplayTag,状态对技能流程的响应,状态对移动的管理。
- 跑线,、地面自动避障、爬墙、全地形跑墙:根据相机、墙面、移动方向,构造不同的输入坐标系。相机与墙面或者速度方向正向反向都能有很好的手感,支持倒立行走,可以处理非常复杂的墙面过渡。RootComponent和模型插值处理。RootComponent碰撞穿插后的调整,任何时候都不会卡住。
- 蹬墙跳、出墙跳、下落边缘跳:每种跳跃都有多种触发动画。综合相机、高度、墙面角度,技能状态、Loco状态等因素决定。支持曲线对速度,重力,能否落地的控制。
- 地面移动动画表现优化:非常自然流畅慢跑、快跑、冲刺的过渡表现,以及动画叠加和过渡时副手IK的稳定(VB)。
- 任意搭配的部位的换装(类似Dota2):
- 以插件形式通过组件和接口赋予Actor换装的功能。不限于角色,任何需要此功能的Actor都可以通过组件赋予这个功能。哪怕是个飞船,或者一扇门。
- 增量骨架,以及对源码做了轻微的修改。仅需要一个AnimInstance,一套主骨架动画。每个部位的每个皮肤一套动画,BindPose差别不大时可以复用。
- 动画逻辑处理只需要关心主骨架动画,AnimInstance会根据部位动画的配置Asset根据名称找到对应的部位动画进行播放。支持蒙太奇,BlendSpace。
- 极简的外部接口使用。使用时只需要通过组件接口传入部件信息的Array即可。部件信息仅包括部件ID和部件皮肤ID。
- 需要额外在组件上配置一个Actor的资源目录,组件会根据传入的部件ID、皮肤ID构造资源路径读取和皮肤相关的所有配置,并构造和维护运行时使用数据。其中包括,部位皮肤信息配置,模型配置,动画配置,特效配置,音效配置,以及筛选器(Chooser)配置等,支持拓展。
- 筛选器配置是一套固定流程时执行的筛选器CLASS集合,用于无状态地处理传入的皮肤信息。主要用于处理部件指定皮肤的风格化,即SubID的管理(默认000)。比如,一个指定部位皮肤在与其他部位皮肤混搭时,需要出现不同的变种。可以做散件和套装的区分,做在其他部位有不同设计时与其一定程度的衔接。
- UE4.27升级到UE5.5.4:移动和动画。4.27时项目引擎使用的是鸣潮早期的版本。
- 动画相关的内容不多。此前大部分内容都弃用。整个过程更多的是了解鸣潮此前对动画做了哪些引擎相关的改动,需要判断哪些需要保留,哪些需要移除。
- 移动组件的情况复杂很多。一方面是有大量鸣潮旧版本对源码的修改,一方面是项目组成员此前大量的不规范使用。比如将PhysWalking继承出来,舍弃Super调用。Velocity想改就改。
- 源码方面:同样整理了鸣潮此前对引擎的修改内容。还原了大量目前我们不需要的修改,大部分是和移动模式相关的计算。
- 项目方面:将子类的暴力继承改回了使用父类的逻辑。调整一些逻辑的实现位置,比如此前PhysXXX相关的修改该放到PerformMovement的哪个环节中,哪些该用RootMotion实现,哪些该用动力学方法实现等。源码实在不支持的修改再从源码合适位置引申出一个由子类负责的处理函数。
- KawaiiPhysics实装:主导项目KawaiiPhysics的完整落地,推动美术对KawaiiPhysics的使用。并提供一些方便美术使用的功能。
- 源码级理解,有实操经验。知道KawaiiPhysics的能力边界。
- 对KawaiiPhysics每一个参数的实现和使用方法整理成了图文文档(顶部个人技术文档中有,但是部分图片涉及在研项目,已经移除),供美术使用。
- 提供了模板化PhysicSettings的配置方式。以Asset的形式保存常用PhysicSettings,Kawaii节点中通过选择Asset来初始化PhysicSettings。
深圳前海创梦天地(卡拉彼丘) 2020.4 - 2024.11
- 24年开始全盘接受卡拉彼丘所有动画系统: 能从零开始搭建卡拉比丘的角色、武器、召唤物动画框架。在动画跳帧,过渡问题的处理上十分有经验。
- 参与了卡拉彼丘早期技能系统的两次重构,一次武器系统的重构:能从零完成枪械武器,角色状态机,基于GAS的角色技能开发。
- 制定并且统一了卡拉彼丘局内所有玩法效果的管理方案: 涉及特效,材质,音效,UI,透视,团队色,贴花。
- 通过组件和对应的SubSystem提供不同层面的控制。
- 游戏逻辑和资源解耦,以及统一的资源配置方式,蓝图数据只用关心逻辑,逻辑开发时只用关心流程操控。不需要每次都额外关心资源的获取和配置。
- 支持不同皮肤的效果变化。
- 自我的生命周期管理,不依赖模型和材质的加载时机。
- 支持GC对玩法效果的控制。
- 角色的重生系统:
- 重生不销毁角色以及需要继续使用的所有actor。减少网络开销。数据初始流程组件化。
- 细分重生阶段,每个阶段支持功能原子化配置化。通过配置不同的操控类可以动态修改重生流程(修改出生点、属性、技能、武器等)。
- 支持可选的分帧重生。严格管理RestartPlayer的调用,统一复活时机的管理。
- 长按切换操作的管理系统:侧身、飘飞、开火、肩射开镜等操作需要根据当前的角色状态、武器状态、技能状态等进行合理的恢复和打断。
- 一套底层代码,同时支持PC和MB的不同操作行为。
- 支持同个操作同时具备多个按键、多个切换模式。
- 同时涉及到角色,武器,技能,按键控制。极其复杂的事件处理和规划。
- 具备动态调整的灵活性,不会因为经常性小范围的调整导致整个底层代码的不兼容。
- 玩法模式的配置化:
- 玩法重要部件完全放弃继承。仅使用最基础的父类。功能90%以上由组件和功能类组合的方式实现。
- 事件监听组件:监听事件的发生,或者标签的添加和移除。执行对应的功能类。
- 状态组件:简化的同步状态机。状态变化执行对应的功能类。
- 等级经验组件、计时组件。类似UE5的GameEvent系统,大量使用GameplayTag对控制和具体的逻辑进行解耦。
- 使用同步数据和TimeStamp保证关键流程的一致性。
深圳市腾讯计算机系统有限公司 2019.4 - 2020.4
- IEG TuringLab:测试开发