《ChatGPT 编写1000怪同屏碰撞检测|征稿活动V6》

我正在参加 Cocos 征稿活动
有奖征文丨Cocos 第 6 期社区征稿正式开启,AIGC + Cocos 能碰撞出哪些火花?

大家好我是98k, 好久没更新作品了,是时候为大家作贡献了。

新作品体验连接: 98k高性能割草框架

支持 creator. 2.4.x. 3.6.x. 3.7.x

最近弹幕,割草非常的火爆,从独立开发吸血鬼幸存者大火,到大赚10亿的弹壳特工,还有后起的成绩喜人的通神榜,土豆兄弟,黎明前20分钟…相信没人能会拒绝,满屏小怪被弹雨突突的击杀的快感,还有超武的爽快激动。这次在ChatGPT AI的加持下,为大家提供一个支持1000怪同屏,通用高性能2d/3d动态碰撞检测方案。

碰撞系统分为动态和静态两种,不同的情形会使用不同策略。

  1. 动态碰撞检测 ,主要针对运动物体,例如角色,子弹,技能…
    基于智能分轴扫掠优化方案,使用了(优化版SAP + OBB等…)
    适用各种2D/3D,运动物体检测,如角色,弹幕,子弹,攻击…
    体验地址:Cocos Store

  2. 静态碰撞检测 , 主要针对静止物体,例如场景 , 物品 , 障碍…
    基于空间静态分割优化方案,使用了(octree + kdtree + gjk + epa)
    适用于3D世界行走,3D表面行走和3D边界检测(fps , mmo, rpg)
    体验地址:Cocos Store

动态碰撞检测系统组成:

  1. AABB 包围盒更新
  2. 粗略碰撞算法筛选
  3. 最后形状精确碰撞

最近AI很火,听说它要来抢我们饭碗,看能不能交个朋友,助我实现三件套。

先科普一下,这次为什么会挑选SAP,作为动态碰撞检测的核心筛选算法呢,因为各大物理引擎都能看它的身影,存在即是理由。SAP全名(sweep and prune) , 是一种对轴向排序扫掠算法(有种SAT剪枝的味道)。
2
对X轴投影可以快速分离排除相交


优点:

1.物体更新快 (物体实时更新位置)

由于要对分轴排序,你可能会想到用快排nlogn ,

但是SAP 有个真正灵魂地方,由于运动物体相邻帧情况下排序是相对稳定,所以实际中使用插入排序会更快,大部分情况接近o(n) 的性能,整体上会比nlogn快很多。其他树状如四叉,八叉,BVH ,更新物体需要调整树结构是一定消耗成本。

2.物体间相互检测快 (常说的trigger)

由于使用的顺序存取结构,读写性能比其他形树结构能高,同时轻易进行相互trigger检测,而且这顺序结构天生就带去重检测功能(例如:四叉树,八叉树,格子,这一类多次分割,还要进行去重标记检测,增加一部分性能消耗)

3.支持2D/3D无范围限制 (兼容性)

由于是对轴向排序分割检测,所以不存空间大小限制,也不受维度的限制,很好的支持全范围的2D/3D 空间检测。 (像四叉,八叉,格子,可能会受到空间范围大小限制)


本着人生第一信条,谁提出问题就让谁来解决问题。

我决定让AI它解决自己抛出的问题。


好家伙,一声音不哼的,啪啪啪打起代码来了,感觉流程可以但是还是缺少点灵魂。兄弟这不太行,老哥只能循循诱导,提起优化建议来

经过一轮交谈,也收集差不多,本着个人第二信条对技术负责,在AI编写的框架上进行自己的精准的改造,同时结合自己的优化方式,对SAP算法进行了深入的改造,为后面碰撞检测提供最大的效力。

粗略筛选完成了,成功了一大半,还有两个环节(AABB , Shape),如何实现?
本着个人第三信条,能不动手坚决不动手,于是再次唤醒AI起来啪啪啪写代码。

1. AABB 包围盒更新?
QQ图片20230417191323
求算旋转后的AABB,提供给SAP筛选

What? 打住,你给我整8个顶点的来算运动中的AABB,老板看到不得血压爆表,行行再好好规劝一下。

好家伙,你是知道得挺多的就是不给我,AI兄弟你这不厚道啊,行行赶紧给我写出代码。
兄弟(看样快成形了,我心里暗喜,再求求它),

再帮忙优化一下,游戏优化飞起,老板看到一开心,就发我薪水了。

行吧,这代码算是到点子上,本着个人第二信条对技术负责,最后优化细节简化由我再进行处理。这样AABB 旋转更新完成,可以交付到SAP进行粗略碰撞筛选。

2.Shape形状精确碰撞?

目前暂时支持Box ,Sphere检测(后续会支持其他常用),支持3D旋转操作的碰撞。
所以我们要实现OBB vs OBB 和 OBB vs Sphere 的检测。
本着个人第三信条,厚着脸皮再次唤醒了AI.

  1. Sphere vs Sphere 的碰撞检测,不为难它了。

  2. OBB vs Sphere (旋转方体与球体 精确碰撞)


    有这个检测,只需要把Sphere转到OBB 旋转坐标系下,就可以转化为AABB求交。

  3. 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

最后,欢迎大添加我微信群,进行学习交流探讨和建议,
获取最新的上线的一手信息 , 同时欢迎进行定制或者深度技术支持。

30赞

汪~嘘嘘下做个标记

:cow: 标记~~~~~~~~~~!

不发则已,一发惊人

mark~

在大量运动密集的物体情况下,动态碰撞领域。

四叉树,是针对网上常规拿得到的算法法来说。
四叉树需要进行改造,其实我也改造过,
改造后性能也可以。

为严谨起见,大家自行测试对比,
开源的好用四叉树的不多见,至少我没找到。

大量怪之间,当要进行群聚算法,或者物理去重叠时候,就很常用了。

好建议,确实比较严谨,实际上节点本身,就是十分消耗性能

1赞

mark 膜拜大佬

大佬666,支持支持

大佬666啊!!!

大佬有demo代码吗

最近会上官方商店,敬请关注

98k出品,必属精品

源码已经上线,欢迎大家来试用

体验地址:Cocos Store

我的手机测试,矩形不旋转碰撞检测,其实还是比四叉树慢一丢丢的
四叉树GameLogic10.6左右,这个11.2左右
当然肯定不严谨

体验连接:是混淆过代码大损性能,
实际代码是快40%以上,请以源码为准。
可以看上面,小米10 骁龙865 截图, 是源码实测图

测试配置:
2000 个 AABB
方格大小 20x20
范围大小 900x600

2000个 AABB 5ms 不到

本文介绍了作者在开发碰撞系统时使用AI实现自动化的过程。作者使用了三种碰撞检测算法:Sphere vs Sphere、OBB vs Sphere和OBB vs OBB,并使用AI协助解决碰撞检测的细节问题。最终,作者在AI的协助下成功开发了碰撞系统,并对其进行了性能测试。测试结果表明,该碰撞系统在小米10浏览器上运行良好,2000个运动2D AABB的平均运行时间为5ms左右,2000个运动3D AABB的平均运行时间为8ms左右。作者还展望了未来计划,包括增加实用Shape、支持群聚的优化和增加高性能查询。最后,作者欢迎大家加入他的微信群,进行学习交流和建议,并提供定制和深度技术支持。

呵呵,谢谢总结。

现在更新到1.0.2
1.支持形状的偏移和旋转

有避障功能么