我正在参加 Cocos 征稿活动
有奖征文丨Cocos 第 6 期社区征稿正式开启,AIGC + Cocos 能碰撞出哪些火花?
大家好我是98k, 好久没更新作品了,是时候为大家作贡献了。
新作品体验连接: 98k高性能割草框架
支持 creator. 2.4.x. 3.6.x. 3.7.x
最近弹幕,割草非常的火爆,从独立开发吸血鬼幸存者大火,到大赚10亿的弹壳特工,还有后起的成绩喜人的通神榜,土豆兄弟,黎明前20分钟…相信没人能会拒绝,满屏小怪被弹雨突突的击杀的快感,还有超武的爽快激动。这次在ChatGPT AI的加持下,为大家提供一个支持1000怪同屏,通用高性能2d/3d动态碰撞检测方案。
碰撞系统分为动态和静态两种,不同的情形会使用不同策略。
-
动态碰撞检测 ,主要针对运动物体,例如角色,子弹,技能…
基于智能分轴扫掠优化方案,使用了(优化版SAP + OBB等…)
适用各种2D/3D,运动物体检测,如角色,弹幕,子弹,攻击…
体验地址:Cocos Store -
静态碰撞检测 , 主要针对静止物体,例如场景 , 物品 , 障碍…
基于空间静态分割优化方案,使用了(octree + kdtree + gjk + epa)
适用于3D世界行走,3D表面行走和3D边界检测(fps , mmo, rpg)
体验地址:Cocos Store
动态碰撞检测系统组成:
- AABB 包围盒更新
- 粗略碰撞算法筛选
- 最后形状精确碰撞
最近AI很火,听说它要来抢我们饭碗,看能不能交个朋友,助我实现三件套。
先科普一下,这次为什么会挑选SAP,作为动态碰撞检测的核心筛选算法呢,因为各大物理引擎都能看它的身影,存在即是理由。SAP全名(sweep and prune) , 是一种对轴向排序扫掠算法(有种SAT剪枝的味道)。
对X轴投影可以快速分离排除相交
优点:
1.物体更新快 (物体实时更新位置)
由于要对分轴排序,你可能会想到用快排nlogn ,
但是SAP 有个真正灵魂地方,由于运动物体相邻帧情况下排序是相对稳定,所以实际中使用插入排序会更快,大部分情况接近o(n) 的性能,整体上会比nlogn快很多。其他树状如四叉,八叉,BVH ,更新物体需要调整树结构是一定消耗成本。
2.物体间相互检测快 (常说的trigger)
由于使用的顺序存取结构,读写性能比其他形树结构能高,同时轻易进行相互trigger检测,而且这顺序结构天生就带去重检测功能(例如:四叉树,八叉树,格子,这一类多次分割,还要进行去重标记检测,增加一部分性能消耗)
3.支持2D/3D无范围限制 (兼容性)
由于是对轴向排序分割检测,所以不存空间大小限制,也不受维度的限制,很好的支持全范围的2D/3D 空间检测。 (像四叉,八叉,格子,可能会受到空间范围大小限制)
本着人生第一信条,谁提出问题就让谁来解决问题。
我决定让AI它解决自己抛出的问题。
好家伙,一声音不哼的,啪啪啪打起代码来了,感觉流程可以但是还是缺少点灵魂。兄弟这不太行,老哥只能循循诱导,提起优化建议来
经过一轮交谈,也收集差不多,本着个人第二信条对技术负责,在AI编写的框架上进行自己的精准的改造,同时结合自己的优化方式,对SAP算法进行了深入的改造,为后面碰撞检测提供最大的效力。
粗略筛选完成了,成功了一大半,还有两个环节(AABB , Shape),如何实现?
本着个人第三信条,能不动手坚决不动手,于是再次唤醒AI起来啪啪啪写代码。
1. AABB 包围盒更新?
求算旋转后的AABB,提供给SAP筛选
What? 打住,你给我整8个顶点的来算运动中的AABB,老板看到不得血压爆表,行行再好好规劝一下。
好家伙,你是知道得挺多的就是不给我,AI兄弟你这不厚道啊,行行赶紧给我写出代码。
兄弟(看样快成形了,我心里暗喜,再求求它),
再帮忙优化一下,游戏优化飞起,老板看到一开心,就发我薪水了。
行吧,这代码算是到点子上,本着个人第二信条对技术负责,最后优化细节简化由我再进行处理。这样AABB 旋转更新完成,可以交付到SAP进行粗略碰撞筛选。
2.Shape形状精确碰撞?
目前暂时支持Box ,Sphere检测(后续会支持其他常用),支持3D旋转操作的碰撞。
所以我们要实现OBB vs OBB 和 OBB vs Sphere 的检测。
本着个人第三信条,厚着脸皮再次唤醒了AI.
-
Sphere vs Sphere 的碰撞检测,不为难它了。
-
OBB vs Sphere (旋转方体与球体 精确碰撞)
有这个检测,只需要把Sphere转到OBB 旋转坐标系下,就可以转化为AABB求交。 -
OBB vs OBB (旋转方体之间精确碰撞)
本着个人第三信条,再次让AI啪啪啪的工作起来.
本着个人第二信条原则,最后优化细节简化由我再进行处理。
自此,三大件在AI的协助下,得到了很好解决。最后在我的组装修改下,碰撞系统终于运行了起来,AI是可以写代码,但是它不一定完美,需要从业者有一定知识储备,才能更好的发挥它效力。假以时日,在不断的训练下,和全球广大的知识网库的加持下,它终究会成为那个巨人。
最后成品,来跑个分呗:
2D测试配置:
2000 个 AABB
方格大小 20x20
范围大小 900x600
小米10 浏览器:2000个 ,2D AABB 碰撞测试
小米10 浏览器:2000个 ,3D AABB 碰撞测试
小米10 浏览器: 简单使用示范demo测试
实际实测数据:
测试设备:小米10 骁龙865 , 自带浏览器
2000个运动2D AABB : 平均 5ms 左右
2000个运动3D AABB : 平均 8ms 左右
更多的测试体验,可以行运行下面体验连接。
体验地址:Cocos Store
最后,欢迎大添加我微信群,进行学习交流探讨和建议,
获取最新的上线的一手信息 , 同时欢迎进行定制或者深度技术支持。