首页 > 其他分享 >Unity 3D定点数物理引擎实战系列1.1BEPUphysicsint 3D定点数物理引擎介绍

Unity 3D定点数物理引擎实战系列1.1BEPUphysicsint 3D定点数物理引擎介绍

时间:2023-12-20 15:11:25浏览次数:36  
标签:BEPUphysicsint 1.2 1111 引擎 定点数 3D 物理

1.1BEPUphysicsint 3D定点数物理引擎介绍

对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀

帧同步的游戏中如果用物理引擎,为了保证不同设备上的结果一致,需要采用定点数来计算迭代游戏过程中的物理运算。也就是我们通常说的定点数物理引擎(确定性物理引擎)。本系列教程给大家详细的讲解如何在你的项目中内置一个确定性物理引擎。确定性物理引擎我们使用github上开源的物理引擎BEPUphysicsint v1库。本节内容主要有:

定点数计算的原理与优缺点;

BEPUphysicsint v1的由来;

BEPUphysicsint v1项目的github地址:

https://github.com/sam-vdp/bepuphysics1int

 

定点数计算的原理与优缺点

首先来给第一次接触定点数的开发者介绍一下定点数计算的基本原理。定点数计算的原理很简单, 例如: 1.2 * 1.2, 我们用整数来模拟小数,原理就是确定一个精度,把小数的小数部分放大, 比如1.2, 我们确定精度为在10进制下精确到小数点后1位, 那么1.2对应的定点数为12, (定点数是对应的小数扩大10倍后取整), 如果确定精度是小数点后2位,那么1.2对应的定点数位120(定点数是对应的小数扩大100倍)。我们都知道计算机是二进制的,一个int在32位的机器上, 为32bit, 最高位表示的是符号位,剩下的是31位, 31位中多少表示小数位,就代表定点数的精度。比如 8个bit表示小数部分的精度,那么这个定点数就扩大了2^8。所以1.2变成定点数就是 int (1.2 * 256 = 307.2 整数化后就为307)。

32bit位: 1111 1111 1111 1111 1111 1111 1111 1111, 当你把精度定在哪个bit位,就相当于把小数点定在了多少位, 如上面, 小数点定在了8bit地方, 1111 1111 1111 1111 1111 1111 . 1111 1111所以叫做”定点数”。通过扩大倍数,把小数部分按照特定的精度变成了整数,后续都基于整数来进行运算。如果我们的物理引擎使用定点数计算,最后虽然将定点数转化为Unity Transform的相关浮点数显示物体位置,但是最终在决定物理碰撞,游戏事件中, 物理移动中都是定点数化后的整数运行,所以这样就做到了物理引擎迭代的确定性。做到了不同机器上跑物理引擎模拟,结果一致。

搞懂了原理后,我们来看下定点数的加,减,乘,除的模拟,以上述小数点后一位小数为例(扩大10倍):

加法: 直接让两个定点数相加即可, 1.2 + 1.2 = 2.4, 12 + 12 = 24

减法: 直接上两个定点数相减即可, 1.2 – 1.4 = -0.2 12 – 14 = -2;

乘法: 两个定点数相乘相当于多扩大了一倍,最后再除以精度倍数

1.2 * 1.2 = 1.44 12 * 12 = 144 / 10 = 14

除法:两个定点数的除法,分子,分母都扩大10倍,结果相当于没有扩大, 我们可以先把分子再继续扩大十倍,然后再除以分母。也可以把分母缩小10倍再计算(有很多种处理方式)。一般做除法,我们会把分子扩大10倍,再除以分母。1.4 / 1.2 = 1.166 定点数: 14 * 10 / 12 = 11,表示的结果为1.1,也是精确到小数点后1位。

搞懂了上述的计算过程后,我们知道定点数的优点就是都是基于整数计算,结果确定,在没有浮点运算器的CPU下计算性能好。接下来分析下定点数计算的缺点,就是定点数在做乘法 or 除法的时候容易溢出。我们拿乘法为例,假设32 bit的整数,16bit作为小数部分,那么就是 15.16的定点数(最高表示符号,15个bit表示整数部分,16bit表示小数部分),如果两个数相乘,很大的概率就溢出了(计算结果超过32bit)。如2^20与2^21两个定点数相乘为: (2^20 * 2^21) / (2^16) = 2^41 / 2^16, 计算分子相乘的时候得2^41次,在32bit的int存储中就溢出了。而2^20与2^21都是合法的定点数。

BEPUphysicsint v1的由来

在github中有一个开源的3D物理引擎的项目,叫做BEPUphysics, 它分成了v1, v2两个重大版本的分支如图1.1-1:

图1.1-1

BEPUphysicsint v1 开源项目是将BEPUphysics v1的代码中的浮点运算用定点数来代替而fork出的一个分支。BEPUphysicsint v1与BEPUphysics v1使用方式上基本都是一致的,只是内部采用的是定点与浮点的区别。在BEPUphysicsint这个项目中,采用定点数,所以精度很有限,无法达到浮点的精度,而且经常容易溢出,所以它有一个要求,物理世界中x, y, z每个轴的范围在1000的范围内。BEPUphysicsint 定点数物理引擎的性能要比BEPUphysics float版本的性能要差4倍左右。以后可能差距没有那么大,但是定点数版本的要比浮点数版本的性能差。如图1.1-2:

图1.1-2 官方关于性能与精度的介绍

如果在实际的项目中发现性能问题,也可以自己实现物理引擎或者基于自己项目实现一个阉割版的高性能物理引擎。

今天的分享就到这里了, 关注我们, 接下来还会继续更新定点3D物理引擎系列教程。

标签:BEPUphysicsint,1.2,1111,引擎,定点数,3D,物理
From: https://www.cnblogs.com/liuwenyi/p/17916561.html

相关文章

  • Unity引擎2D游戏开发,三段攻击动画的实现
    新建三段动画的Animation将Project中的三段攻击动画的素材,拖入到Animation窗口,分别命名为BlueAttack1,BlueAttack2,BlueAttack3在Animator中创建动画图层并进行进一步的操作创建新的动画图层,命名为AttackLayer在窗口中创建新的State,作为默认上一层的state入口将之前创建好......
  • 《环太平洋》流浪者机甲3D模型特效还原
    在线工具推荐:3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.jsAI自动纹理开发包 - YOLO虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎法线贴图在3D建模中扮演着重要的角色,它通过模拟表面的微小细节和凹凸不平的部分......
  • 给网站引入各大搜索引擎的关键字提示,白给的接口薅他羊毛。
    拥有一个关键词提示属于是导航网站必要的了因为网站是个导航网站,有一个搜索框,用户搜索时需要像百度一样有个搜索提示关键词列表。之前只是用百度,现在给增加了好几个,想换那个就换那个了,直接上图片可以配置属于是想选哪个选哪个,谁提示不爽就不用它,我可以用着bing的搜索引擎却使用......
  • Unity引擎2D游戏开发,受伤和死亡的逻辑和动画
    一、创建受伤动画找到相关受伤的动画素材,然后在Animation窗口创建动画。此处不再赘述。此时在Animator窗口删除刚才创建的两个动画,因为现在要采用另一种方式创建动画:采用Animator的Layer方式使用Animator→Layer创建受伤闪烁动画受伤闪烁动画意为受伤后短暂无敌时间点......
  • 「从ES到CK 04」Clickhouse表引擎选择和表结构设计
    导航在完成将公司日志数据从Elasticsearch(下称ES)转战到Clickhouse后,个人认为有必要将过程记录分享。限于篇幅及便于分类组织,我会以一个系列文章的形式记录:01《ElasticsearchvsClickhouse》02《Clickhouse的基础知识扫盲》03《Clickhouse多分片多副本集群部署》04《Clic......
  • three.js3D地图省市下钻加上钻踩坑记录(未完待续)
     1,three安装失败首先脚手架种安装three,我不知道是网络问题还是什么,three我总是安装不上,于是我就下载了网上别的博主得成品代码,把里面de包拿出来放在我自己项目中安装包链接在此,如有需要自取,https://files.cnblogs.com/files/jickma/three.rar?t=1702967875&download=true......
  • CF1733D1 题解
    原题传送门题目大意给定两个长度为\(n\)的二进制字符串\(a\)和\(b\),你可以进行若干次操作,对于每次操作:选两个数\(l\)和\(r\),且\(l<r\),将\(a_l\)和\(a_r\)交换。如果选取的\(l\)和\(r\)相邻,代价为\(x\),否则为\(y\)。保证\(y≤x\),求出最小代价使得\(a=......
  • 《安富莱嵌入式周报》第328期:自主微型机器人,火星探测器发射前失误故障分析,微软推出12
     更新一期视频教程:【实战技能】单步运行源码分析,一期视频整明白FreeRTOS内核源码框架和运行机制,RTOSTrace链表功能展示视频版:https://www.bilibili.com/video/BV1Rw411b7M1/ 1、自主无电池无线微型机器人https://millimobile.cs.washington.edu/millimobile-compressed.pdf(2.......
  • 手绘风格3D游戏场景模型纹理贴图
    在线工具推荐:3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.jsAI自动纹理开发包 - YOLO虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎当谈到游戏角色的3D模型风格时,有几种不同的风格:写实风格:这种风格追求高度真实......
  • 手绘风格人物3D模型纹理贴图
    在线工具推荐:3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.jsAI自动纹理开发包 - YOLO虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎当谈到游戏角色的3D模型风格时,有几种不同的风格:写实风格:这种风格追求高度真实......