脑洞题怎么能少了我呢?
大家好,奥迪又来开脑洞啦~这道题简直是为我们量身定做。为什么这么说呢?这就要从“都市玩家”说起了。
现在真是越来越多的人追求随心所欲的生活方式。乐于打破陈规,彰显个性自我。独立独行、不拘一格是他们的极致追求。对于这群人,我们管他们叫“都市玩家”。
我们前不久发布了一款车——奥迪Q2L,就是一款属于“都市玩家”的车。
一个多月之前,我们曾在知乎上发起了一项创意征集:
征集大家结合奥迪Q2L和“都市玩家”的创意想法。最终从重多脑洞大开的想法中我们选择了它:
来自@赵楠 的创意,“把Q2L改造成赛车游戏外设,可以在游戏中随便豁~“。
作为“躺”赢吃鸡的专用座驾奥迪A8L来说,将车改成游戏外设,这可难不倒我。
但是,这种玩法只有坐车的人爽快,开车的人更像司机,这也实在不符合“都市玩家”的定义。既然 @赵楠 指定的是一款赛车游戏的外设,最初的想法是,在地下车库,拉一张180°环绕车头的投影幕布,然后用奥迪Q2L做一套沉浸式的赛车模拟器。要是能让这套游戏外设动起来,那就更棒了。
唯一的焦虑,可能就将Q2L改装成一套动态游戏模拟器,放在地下停车位里玩,万一摇得太嗨……容易引起误会。
所以,我们把(gei)这(zi)个(ji)创(wa)意(le)又(ge)丰(ju)满(da)了(de)一(keng)些。
不仅打造了一套拟真度极高的游戏外设,还为Q2L找了一个对手——它自己。我们让游戏中的虚拟赛车,去挑战赛道上的真实赛车。
简单来说就是,我们在游戏中打造了一台Q2L,同时把真实赛道上跑着的Q2L导入游戏充当影子赛车,让这两台奥迪Q2L展开一场虚拟与现实的较量。
(友情提示:文末有本文视频,懒人可以直接观看。)
但是要将这两台车放在同一个赛场上,可并不是件容易的事情。首先,我们要在虚拟的游戏中,创造出一台一摸一样的Q2L。相对来说,这个比较简单。借助于现在强大的三维扫描技术,我们能够非常精确的将Q2L的外观模型导入到电脑中。
再手动调整了像高亮黑色装饰条、黑色轮胎等三维扫描比较不容易被捕捉到的细节。
接着,对车辆添加材质。自古红蓝出CP,我们将游戏中Q2L的车身颜色设定成凯拉什蓝。
为什么选用这个颜色呢?凯拉什,是世界公认的神山,被誉为神山之王,位于中国西藏,同时被印度教、藏传佛教、西藏原生雍仲苯教以及古耆那教认定为世界的中心。它终年积雪的峰顶能够在阳光照耀下闪耀着奇异的光芒,夺人眼目。
而它的对手,赛道上的真实赛车,选用颜色为珊瑚橙。文艺复兴三杰之一的弗朗西斯克·彼特拉克,特别喜欢用这个词来形容女人的嘴唇,就如珊瑚橙这个颜色一般,带给人一种阳光、热情,但又不失神秘的感觉。
将做好的车辆MOD,根据对应的格式,进行素模、贴图拓扑等文件进行分层到处之后,再导入到游戏引擎,进行相关的测试。
本次比赛,我们所选的赛道是浙江国际赛车场的赛道。这是一条国内全新的赛道,经国际汽联认证的一条二级赛道。非常具有挑战性。依山而建,连续的上山弯道环绕山体,还有超长的大直线。考验驾驶技术的同时,也非常适合验证车辆在激烈驾驶下的综合表现。
这条浙江国际赛车场的赛道,在MOD的论坛上,已经能下载到。但我们在期初的实际测试中,遇到了一点麻烦,真车驾驶反馈的实时数据无法完美贴合赛道模型。会经常出现Q2L轮胎离开地面、车辆模型潜入草丛等bug画面。后来,我们只能在SDK编辑器里,重新修整赛道MOD,以及精挑参数。
主要是因为,浙赛这条赛道真是太有意思了,虽然不长,但是大量上坡弯道,我们重新将赛道分段,对每一个弧度以及高度进行微调。然后再对赛道进去贴图的制作,通过Length repeat调整贴图细节。
并且,根据实际赛道的设计,在部分弯道处添加了KERB路肩。虽然,在之后的测试中,游戏中虚拟的Q2L压着路肩过弯,给到的感受反馈并没有真车那么直接,但是路肩的设置一定程度上拓展了赛道的宽度,有利于游戏中的玩家,跑出更完美的走线。
最后,我们在游戏中设置完PIT房、计时器点等必要参数后,导出FBX格式的文件,与做好的车辆MOD进行测试。
游戏中的虚拟Q2L搞定了,为了促成这场比赛,最重要也是最难的就是把赛道上那台Q2L的位置信息,以及实时的操作同步进游戏当中。为了实现它我们着实下了一番功夫。起初,我们的想法是将真实车辆的方向盘、油门、刹车踏板作为游戏的体感外设,进行同步的参数设置,实时传回电脑同步到游戏。
但是经过多次实验和调试,我们发现这种方案不行,BUG太多。这是因为将真车的方向盘转向角度、阻尼、油门刹车的阻尼以及行程一一同步到游戏中并不能完美对应,参数调整的工作量巨大。毕竟游戏还是游戏,即便是高拟真赛车游戏与真实还有一定的差距。
最后,我们决定通过特殊手段精确捕捉真实赛道上车辆的位置信息,再通过逆向计算,获取车辆的参数,最后同步到游戏当中。
完全把一个车的状况反馈回来,大致需要这么几个关键信息:时间、地点、角度。有了时间、地点和角度,可以知道速度、加速度等等的数据,就可以非常精确的获取车辆在赛道中的位置。
但是,这几个基本数据一定要准。
大家最容易想到的就是使用GPS,来定位车辆位置。
但是,实际上以目前的技术,特别是民用级GPS的定位,准确度并不是很好。或者说,对于分秒必争的赛车游戏中所需的精度是远远满足不了的。比如我们手机上,日常导航常用的GPS模块,目前能做到的比较好的一个结果就是车道级定位。说白了就是误差有一个车道,其实也已经是非常厉害了,但一个车道的误差可能还是有1.5-3米。
哪怕是跑“01”(0到100公里/小时加速)的小伙伴都熟悉的P-Gear,定位精度比普通的手机高出了不知多少,但还是有轻微误差的存在。这个误差反馈到游戏里,还是会出现明明赛道上真实的操作是压着路肩杀进弯心,但游戏中,却是车屁股擦着护栏走了个外线,白白让出了超车线。
为了车辆定位的精度,我们还试过在整个赛场上布几个雷达。通过三点定位法精确的获得车辆的位置(经费燃烧ing.jpg)。
原理就是汽车上的天线不停的发出讯号,几个不同位置的雷达收到信号的时间不同,然后通过雷达位置和收到信号的时间就可以精确的反推出汽车的位置,算法也非常简单。
信心满满的去浙赛做测试,结果平面的定位非常准确,但浙赛是条多上坡弯道环绕山体的一条赛道,山体信号的遮挡,以及起伏的高度都影响到了定位的精度。
而且,这个方法,只能定位到车辆的位置。不能推算出车辆的驾驶姿态。有时候,处理过弯推头、转向不足等也是驾驶的一种乐趣,对吧?
于是,我们又把车推回了PIT房进行改装设计。正焦头烂额的时候,我们从某军事节目中介绍的ICBM(洲际弹道导弹)中,找到了灵感。
导弹的定位是通过陀螺仪和加速计来确定的。它所使用的是光纤陀螺仪,光纤陀螺仪的精度远远远超机械陀螺仪。
因为一个物体在三维空间中活动有6个自由度,简单的说就是XYZ三个轴的平移和绕XYZ3个轴的旋转。如果是纯平面的赛道,就是XY轴两个加速计和绕Z轴的角速度计。像浙赛这样是有上下坡的三维空间的,就是3个加速度计和3个角速度计。
我们采购了三个光纤陀螺仪(经费继续燃烧ing.jpg),来精确采集车辆在真是赛道上位置、车头朝向,以及运动姿态。这样就可以在虚拟赛道上面呈现出一个位置很精确的Q2L了。
那天,将全副武装的这台Q2L开出去的时候,路人都打趣的问。奥迪的自动驾驶开始路测了?
经测试,这套定位、以及车辆状态控制系统还是非常靠谱的。同时游戏中的虚拟Q2L的行驶状态,通过模拟器的油门刹车方向盘等输入到系统。
系统计算后,把两个车辆位置呈现在建好MOD的游戏赛道中,然后把整体图像输出到VR眼镜。
挑战者通过VR眼镜和驾驶模拟器,操控虚拟的Q2L进行比赛。赛道上的真实Q2L的位置信息数据通过无线信号回传给总的计算机系统,然后对相关参数信息进行绑定,Q2L真车将以“影子战车”的形态,出现在挑战者的VR眼镜里。
同一个赛道,相同的Q2L,现实与虚拟的两个时空。
姊妹之战,马上开始。
我们在游戏中藏了一个小小彩蛋,以知乎用户赵楠的用户名拼音Zhao Nan登录了Player2的账户。
起点发车之后,迅速杀出1号弯。紧接着就是连续的山坡弯道。这对真实行驶在赛道上的这台红色Q2L算是第一个挑战。
这台Q2L搭载了EA211 1.4T涡轮增压发动机和7速双离合变速箱的动力总成。1.4T爆发出的250Nm的扭矩,加速能力说不上凶残,但在赛道上依然游刃有余。
因为游戏引擎参数调教的关系,游戏中的虚拟战车,对赛道的反馈非常直接。每一次杀进弯道,路面给的阻尼都直接反应在方向盘上,十分真实的赛车驾驶体验。
相比之下,赛道上真实的Q2L就显得好开很多,它采用的是渐进式转向,可以实现可变转向传动比。跑山路时转向幅度小,转向很直接。高速驾驶的时候,保证安全性,让你抓着手中的方向盘,有种非常可靠的感觉。
这场比赛,最不可控的因素就是天气。比赛当天,浙赛下着蒙蒙一下雨。虽然我们在游戏中也选择雨战,但天气对游戏中车手,除了视线,其他的影响微乎其微。
但对赛道上的真实赛车,不管轮胎抓地力还是刹车制动力都有很大的影响。
经过几轮角逐,最后红车率先冲过了终点线。
完整视频:
https://www.zhihu.com/video/1065568239651868672这条浙江国际赛车场的赛道,已经在游戏里上线。当然,你也可以带着自己的战车亲自征战浙赛。我们也会继续完善这个传感器,说不定之后会增加更多的奥迪车型,进行真实与虚拟的对决。
下一台,拿什么车你来定。
取缔了,我们怎么接孩子?
现在哪个学校接送孩子不是车堵?
我开车去送孩子,小区门口都堵了十几分钟,开到学校,更是停车都没有地方停。
所以干脆买了两辆电动车,跟老婆一人骑一辆,送两孩子上学。
十分钟就能搞定。
否则半个小时也搞不定。
那上班迟到怎么办呢?
……
我岳父岳母中风过,腿脚不方便,出门必须骑三轮。
没有三轮车,他们只能在小区里转转。
有了三轮他们就可以去买菜,钓鱼,带娃兜风。
生活质量立马不一样了。
并且三轮车带东西,比汽车还方便。
农民有一辆三轮车,就可以拉农产品,拉家具,拉农具,不要太方便哦。
……
我建议中国大力推广电动车和电动三轮车 专门建个电动车道。
这样老百姓的幸福指数会大大提高。
如下图
两天过去了,看的人,关注的人不少,能说得上话的看来是寥寥无几,除了青椒牛老板忆苦思甜了一下,七位靓号豹哥连回答的勇气都木有了,被吓跑了
那我先写一些目前已知的信息,权当是抛砖引玉
先说一下两个现有的低延时(low latency)的gc策略,zgc和shenandoah
zgc应该都很熟悉了,出来有一段时间了,这个是oracle官方团队做的,虽然说是官方团队,但其实是bea jrockit的人写的,以前sun的hotspot和bea的jrockit是早期比较出名的两个jvm实现,hotspot用c++实现,jrockit用c和java实现,说起来还挺好笑的,当时的评测结果是,hotspot更适合客户端,需要快速启动的程序,而jrockit更适合长期运行的程序[1],后来sun和bea都被oracle收购了,这两个jvm也就合二为一,其实更确切一点说就是,合并到hotspot中去,然后jrockit被贡献给了openjdk。然后jrockit的工程师per liden就是后来的zgc的team lead。zgc现在已经做到,大部分gc的latency在1ms以内,平均只有0.1 - 0.2ms之间,基本上无感知了,正常人条件反射的时间是0.25s,也就是250ms,经过训练的运动员,可以达到100ms,眼睛对于动画的感知,在1/60s左右,也就是17ms左右,经过训练的电竞之类的,可能可以达到90或者120fps,也就是8-9ms,就是人的极限了,现在gc最长导致程序的停顿在0.2ms以下,这种级别的停顿,人是不可能感知得到的
shenandoah是red hat的作品,现在red hat被ibm收购了,以前red hat和ibm,都有自己的jvm,分别是开源的iced tea和openj9,后者到现在还在不断出新,据说内存占用上会有一定优势,现在叫terium,北洋的下载网站[2]上对terium和openj9的支持是很好的,更新得很积极。而iced tea在openjdk出来之后,基本上就处于被放弃的状态。那red hat后来基于openjdk,制作了自己的低延时的gc策略,就是shenandoah,shenandoah对比zgc,对硬件的要求相对低一点,但是对用户给出的承诺,也低一点,就像zgc早期,承诺在10ms以内完成全部gc,shenandoah从来没有给过任何这种承诺,也就是说,我尽力。然后官方oracle提供的openjdk的build里面,并不提供shenandoah,被oracle删了,但是其他的openjdk的build,都提供shenandoah这个gc策略,一般认为,zgc更适合客户端程序,shenandoah更适合服务器端程序,因为前者更满足一些硬性指标,比如保证10ms以内一定完成,后者就没有这个承诺,但是相对应的,前者对于资源的消耗也更大,一般要腾出15%左右的内存富余给zgc使用,然后cpu处理能力会有所下降,因为拿去给zgc用了,那相比之下,shenandoah对于这种资源的硬性要求就低,但是它同样也不给这个承诺,更像是随缘,我尽量,风险你自担
这是现有两个低延时gc
那按照新的gc的论文里面写的内容看,zgc和shenandoah虽然都实现了low latency,但是是以牺牲吞吐为代价,也就是需要一定的cpu和内存消耗,你需要为low latency腾出为了实现low latency gc的资源,相应的,等同cpu和内存的硬件的处理能力,就会相应下降一点,这其实也很合理,不能说既要马儿跑,又不让马儿吃草,让机器给你干点活,总要给人家点资源
但是,新的gc策略,简称lxr
认为,可以通过基于引用计数的策略,可以进一步降低对系统资源的占用,让gc在实现低延时的同时,又不需要牺牲太多cpu和内存资源,进而使得吞吐不受影响,所以论文的标题就是:低延时,高吞吐的gc策略
然后给出了一堆的评测结果,对于评测结果,你可能会怀疑,是吧,对比的openjdk 11的结果
但实际上,论文中有具体的validity,意思就是,他们打算把这个gc port到17上去,但是他们同时也对比了17的shenandoah,发现17的shenandoah和11的shenandoah结果几乎是一样的,而且11有backported improviement,也就是在后续版本中,shenandoah的改良,都会回溯到11的高版本中去,所以shenandoah的11没什么问题,17的zgc整体策略改变了,比较难对比,这个期待后续的比较吧
所以11没什么问题,然后期待他们给出17的build
然后说一下实现的过程,这个过程很有意思,他们先用rust开发了一个工具mmtk,然后这个工具提供了openjdk(c++写的)jikes rvm(java写的java研究虚拟机)和v8(c++写的)的绑定,然后再用这个rust写的绑定工具,实现了新的gc策略
从这一点上,可以看出,现在很多软件的研发,都已经从c++上转移到其他语言上去,这并不是坏事,因为c++的代码确实太难阅读了,openjdk的开发进度,其实受到c++语言本身混乱语法颇深,就是你可以感觉到,一大堆人做了好久(接近10年),但是进步相当有限,没什么成果,相比之下,你用其他语言,往往都能做得比c++更快,而且性能更好,就像graal的jit(用java aot实现的工具),什么都没改,直接替换openjdk里面的jit也就是c1/c2,都能在一些时候有高达15%的性能提升,所以现在这个时间点,没有什么太多理由继续沿用c++,当然openjdk本身的开发还要继续,只是源码这些,正在一点一点从c++中转移出去,那最终发展成什么样子,拭目以待了
然后这个gc本身诞生的环境,也很值得玩味
这是一个高校的论文,虽然三作是谷歌,但最重要的一作和二作,都是高校,这就预示了我之前说的,现在的科学和技术的发展,哪怕是技术这种科学的应用面,也越来越多,不再是企业能够推动得了的了,企业的目的是赚钱,但是推动科学技术的进步,更多的是一项事业,所谓事业,就是你要牺牲眼前短期利益,为了长远的发展考虑,那这个投入,都是动不动十年二十年的投入,企业没有那个耐心去等待,所以最好的方式就是,企业出钱,投资到高校等研究机构中去,这样一来可以减轻政府对高校的负担,人也更专业,高校里面教授博士一大堆,每天就是搞研究,企业里面,教授都罕见,教授也不愿意放弃铁饭碗去给你修福报,同时,因为是项目制的,所以搞完研究之后,一拍两散,企业不用负担教授博士们搞完研究离开公司(也就是裁员)的成本,所以这是多赢的局面,我国政府其实也正在推动这种校企合作,产学研嘛
然后这个就很好滴展示了,将来,对于技术的推动和进步,会是怎样的一种局面,除此之外,llvm,graal这些项目,研发主体也都在高校里面,现在是连传统openjdk的开发,也在逐步转移到高校中去,企业搞研究的时代,差不多过去了
所以你看,达摩院开始大面积裁员,湖畔大学关停,但是这些高校的研究成果,开始频频出现,以前关于gc的论文,还有不少是ibm,azul之类的企业发的,现在越来越多是高校发出来的,实际上虽然国内阿里用java的频次比较高,但是你看我写了这么多,有阿里什么事吗?
技术发展到一定阶段,就必然要求更高的研发门槛,就不是随便一个企业的打工仔,就能凭着一腔热血,搞搞搞,就能有所成就的,现在慢慢都过了那个阶段了,像国外贝尔实验室,早就不行了
最后本论文的一作好像是个华人