在自定义物理模拟插件中使用ispc编译

您好,

<br/>

我们项目正在开发一个自定义的物理模拟的动画节点的插件(类似于kawaii physics这样的插件,但是功能不同),我们看到引擎中的物理模拟、动画、以及一些粒子相关的部分是用ispc来写的。但是搜了下看好像这方面的教程以及文档不多,请问我们自己的插件中的物理模拟的部分也可以用ispc来写吗?我们未来会支持手游、PC、主机端,是一个跨平台项目,使用这个方案会有什么限制以及风险吗?谢谢

[Attachment Removed]

您好,先回答插件中能用 ISPC 写物理模拟吗?

技术上完全没问题,引擎内部已经大量使用 ISPC 写物理和动画相关代码​,技术路径是成熟的。在自己的插件里同样可以通过 UBT 配置.ispc文件来编译。

跨平台问题,PC完全没有问题,主机平台的话引擎有专门的主机平台 ISPC 工具链,在对应的NDA文件夹下面

​但是在Android(ARM64),由于ARM 的 SIMD 宽度和 x86 不同(128-bit NEON vs 256/512-bit AVX),向量化收益会打折扣,需要针对 ARM 调优

在iOS/Apple 平台​bCompileISPC 默认值是 false,我们内部也有jira在跟踪Apple平台的ISPC相关优化,目前至少在UE6才能有更新

因此,​标准做法是 #if INTEL_ISPC 的快路径 和 C++ 回退路径,引擎所有 ISPC 代码都是这样,如 FloatArrayMath.cpp

另外 UE5 里 FVector 是 double,ISPC 实战基本用 float(性能考量),涉及位置累加的物理模拟要注意精度差异。

[Attachment Removed]

您好,感谢您的解答。iOS/Apple平台不开的原因就是ISPC性能不一定会超过C++是吧,如果我们自己的插件测试下来,在iOS/Apple平台上开ISPC有收益,可以只针对我们自己的插件开ISPC吗?除了性能问题以外还有其他的风险因素吗?感谢。

[Attachment Removed]

ios如果打开ispc也是走的neon​,跟arm应该是类似的问题。在内部有一些工程方面的讨论,比如Apple 对工具链混用容忍度极低,会导致签名、symbol、debug info 等问题。

另外应该也很久没有专门去做过测试,在内部没有找到相关的性能数据。

【只针对我们自己的插件开ISPC】由于bCompileISPC是Target级别的开关,在ios开启,所有支持ispc的模块都会走。如果想要逐模块的话,可能需要简单修改一下UBT的代码,修改应该不大

[Attachment Removed]

了解了,我们各种情况都测试看看​,十分感谢

[Attachment Removed]