目录

一  光线追踪的概念

前向光线追踪

反向光线追踪

混合光线追踪

二  PC端光追技术

三  移动端光追技术

参考文献


自从NVIDIA图灵架构的RTX20系显卡发布之后,我们就经常能听到“光线追踪”这个词。作为一项能够大幅度提升画面真实感的黑科技技术,光追在近几年中发展迅速,并逐步在各大端游中得到使用。最近,ARM和Imagination分别推出了在移动设备上支持光线追踪的GPU,进一步推动了移动端光追技术的发展。本文将针对光线追踪的概念、三种主要的光线追踪方法、PC端光线追踪技术以及移动端光线追踪技术展开介绍。

一  光线追踪的概念

光线追踪(Ray Tracing)是3D计算机图形学中一种特殊的渲染算法,用于在基于物理的渲染方式中模拟真实世界中的光线照射方式,包括光的反射、折射、散射,甚至可以实现波动光学中光的各种性质。在渲染过程中追踪从光线来源照射到物体上,再由物体反射的光线路径。所有路径完整计算下来非常消耗资源,因此现有技术只计算目光所及范围内的光线路径。

光线追踪主要分为前向光线追踪、逆向光线追踪以及混合光线追踪三大类。

      前向光线追踪

前向光线追踪(Forward RayTracing)遵循从光源往场景里发射光线。如图1所示,所有光线在经过和各种物体碰撞之后,只有其中一部分会进入到接收器中,通过这部分光线可以计算出具体的画面,而更多的光线将会被丢弃,消耗资源追踪被丢弃的光线就会造成性能的浪费。实际上光子会朝着每一个可能的方向传播,光源投出数以亿计的光子中可能只有一个光子进入到接收器中,因此前向光线追踪虽然遵循了真实的光学物理原理,可以最大程度的计算出正确的光照效果,但是效率极低,并不是一个有效的解决方案。

图1 前向光线追踪

      反向光线追踪

反向光线追踪(Backward RayTracing)从接收器向场景中的物体投射光线,然后追踪该光线在场景中的传递过程,若经过若干次反射、折射打到光源上,则认为该光线是有用的并递归计算其颜色,否则丢弃该光线,如图2所示。从接收器射入场景的第一条射线称为主射线(Primary Ray)或者可见射线(Visibility Ray),如果主射线没被遮挡,则命中,反之说明物体的该点不可见。命中后射出的第二条射线称为阴影线(Shadow Ray),如果阴影线没被遮挡,则用来确定接收光的多少;如果被遮挡了,则说明命中点处于阴影中。

图2 反向光线追踪

反向光线追踪的优点是计算效率较高,避免了大量的算力浪费,目前大多数光线追踪渲染器(Ray Tracers)都使用这种方法,但同样具有局限性:

(1)当处于环境光或者区域光源这类光源较大的场景下,反向光线追踪很容易就能找到光源位置。在处于灯泡这类光源较小的场景下时,很多追踪到的光线可能会完全错过光源,而那些随机找到的光源,最终会在渲染中产生白色的小高光,这种现象被称为“萤火虫效应(fireflies)”,如图3所示。

图3 萤火虫效应

(2)无法处理间接光源,其中最主要的就是焦散。计算机图形学中对焦散的定义是:焦散是任何从光源到高光(反射或折射)、到漫反射表面、再到眼睛(或摄影机)的光照贡献。也就是说,如果光线以高光反射的方式从物体表面反射,然后照亮到另一个漫反射表面,出现光子分散,类似于波光粼粼的效果,这样的过程就是焦散。在现实生活中,焦散现象几乎随处可见。计算焦散的算法非常复杂,反向光线追踪不具备这样的能力。

      混合光线追踪

混合光线追踪(Hybrid RayTracing)是在前向光线追踪和反向光线追踪的基础上提出的解决方案。仅执行前向光线追踪的前向射线,记录数据后继续执行反向光线追踪,场景的最终着色会将前向光线和反向光线都考虑在内。Veach在1995年提出了一种包括反向光线追踪、前向光线追踪以及连接线的混合方法:双向路径追踪(Bidirectional Path Tracing),基本思想是同时从视点、光源打出射线,经过若干次反弹后,将视点子路径和光源子路径上的顶点连接起来(连接时需要测试可见性),以快速产生很多路径。

光子映射技术(Photon Mapping)也是混合光线追踪的一种方式,分为光子追踪和渲染两个步骤。首先从光源像场景发射携带能量的光子, 光子在场景中与物体表面进行交互(反射或折射),并在非光泽表面物体相交时记录, 最后将这些光子存储在一个全局的光子图(Photon Map)中;然后使用反向光线追踪技术从摄像机通过屏幕向场景中发射光线并在场景中传输, 当光线与物体表面相交时, 该顶点光照计算中的漫反射部分则使用统计的方法从前面产生的光子图中计算得出。如图4所示,算法出现 Artifact(瑕疵) 的时候,光线追踪方法一般呈现高频信号,即在小范围内颜色上产生剧烈的变化,很容易被人眼察觉。光子映射产生的 Artifact 则多为低频信号,相对不容易被人眼发现。

图4 Artifact时的不同表现

正统的光线追踪大多应用在渲染照片级的静止画面或者制作影视特效之类的离线渲染器中,这些离线渲染器会为每一个像素都发射大量的光线,从而获得近乎真实的渲染结果。而在游戏的实时渲染过程中,为每一个像素都发射大量的光线将会严重降低游戏的帧率,因此游戏开发者们提出另一种混合光线追踪的方法,即将光栅化和光线追踪相结合,这种游戏中的混合光线追踪使用光栅化绘制的画面做基础,然后使用光线追踪生成一些额外的信息给画面去锦上添花。

在我的世界光追版中就使用了混合光线追踪的渲染方式。首先使用光栅化生成延迟渲染的G-buffer,然后通过路径追踪生成漫反射,镜面反射,折射以及体积雾的信息,最后使用前面生成的所有信息再去合成最终的画面。虽然我的世界光追版每一帧只计算光线弹射一次的结果,但它巧妙的把辐照度的信息缓存到了场景中模型的每个顶点中,下一帧再根据这个缓存的信息从一部分顶点处继续发射光线来累积辐照度信息。通过使用这个辐照度的缓存,就可以让游戏每多渲染一帧就增加一次光的弹射,从而获得非常真实的光线多次弹射的光照效果。这种效果就好比我们置身在一个蜿蜒曲折的洞穴中,前方不远处洞口有着明亮的光源,我们在朝着洞口前进的过程中,会观察到光的强度随着靠近光源而逐渐的变亮,这就是光线多次弹射形成的间接光照所带来的真实感。

  PC端光追技术

光线追踪这个概念并不是最近才提出的,早在20世纪80年代光线追踪已经作为一个研究课题开始了不断的探索,但是受限于当时硬件算力的不足,光线追踪的进展一直很缓慢。

直到2018年,光线追踪有了革命性的突破,因此这一年也被认为是“光线追踪元年”。 这一年,游戏开发者大会(Game Developers Conference,简称GDC)上光线追踪正式进入大众的视野。微软宣布DirectX Ray Tracing(DRX)的问世;NVIDIA、ILMxLAB、UE4联合发布了基于实时光线追踪的具有电影级视觉效果的《星球大战》短片;NVIDIA发布了RTX Tehnology Demo以及Project Sol Cinematic Demo Part 1;EA SEED团队带来了PICA实时光线追踪Demo;Remedy的Northlight引擎带来了Ray Tracing in North Light Demo;Futuremark团队发布了DirectX Raytracing Tech Demo。

自诞生以来,光线追踪技术始终是游戏开发行业的热门话题,本质上光线追踪是一种对于3D画面的渲染效果,能够为3D游戏的视觉效果带来质的提升。在光线追踪技术完全研发出来之前,绝大多数游戏的渲染方式均采用“光栅化渲染”,所谓光栅化渲染指的是对游戏中的模型以单个像素为单位,一个一个地提交给GPU进行渲染,这样做的好处是能够使单个模型的渲染质量较为出色,并且在游戏运行过程中不会占用太长的时间和后台处理空间。而光线追踪要求场景中所有的物体都必须放入显存中进行相交测试,由于计算量巨大,所以光线追踪一直以来多应用于渲染图片或者影视特效这种纯离线渲染的领域。

NVIDIA新一代的RTX20系显卡性能大幅提升,具备很强的图形计算能力,也正因为如此,其才首次带来了RTX实时光线追踪技术支持。实时光线追踪技术能够让游戏拥有电影级画质,为游戏玩家带来更加逼真的游戏画面效果 。下面我们通过游戏画面对比,来直观的感受一下普通游戏画面与打开光线追踪后的游戏画面的对比。从图5图6可以看出,打开RTX后可以通过车门的反射看见被挡住的火焰,可以让地面上的水反射出很远处的房子。总之,开启实时光线追踪,可以得到更真实的游戏光线效果。

图5

图6

从本文前面的介绍可知,实时光线追踪的计算量是非常庞大的,而NVIDIA为了保证这庞大的算力需求,在每个SM单元中配置了一个专门服务于光线追踪的RT Core。RT core的特色功能是Ray Triangle Intersection和BVH Traversal。BVH算法(Bounding Volume Hierarchy Traversal),也就是层次包围盒遍历的意思,比如渲染对象是一只兔子,要计算一条光线和兔子本身的交互,就把兔子所在空间划分成N个包围盒,计算光线和哪一个包围盒相交,是的话就再把这个包围盒继续划分成N个更小的包围盒,再次计算相交,如此反复,一直找到和光线相交的三角形所在的包围盒,再对这个三角形进行最终的渲染,这个过程如图7所示。简而言之,RT Core的工作就是在着色器(Shaders)发出光线追踪的请求后,分别进行两种测试,即Box Intersection Evaluators和Triangle Intersection Evaluators,基于BVH算法来判断形状,如果是方形,那么就返回缩小范围继续测试,如果是三角形,则反馈结果进行渲染。

图7 BVH算法

光线追踪管线渲染流程如图8所示,光线追踪渲染用到了 Ray generation着色器、Intersection 着色器、Any Hit着色器。其中 Intersection就是光追过程的求交运算,也是对于传统GPU而言最困难的部分,按NVIDIA的说法,用RT core比直接用shader快十倍。

图8 光线追踪管线渲染流程

理论上,玩游戏时开启光线追踪,可以得到更真实的游戏光线效果,但是由于性能瓶颈,开启光追特效后会出现游戏帧数降低、而实际画面效果又没有明显提升的情况。因此,为了补救开启光追所带来的游戏帧数下降问题,NVIDIA在推出光追技术的同时推出了DLSS技术。

DLSS技术全称Deep Learning Super Sampling,中文名为深度学习超级采样技术。DLSS是一种全新的独占抗锯齿技术,利用深度学习和AI的强大功能来训练GPU渲染清晰的游戏图像。具体来说,NVIDIA使用神经网络超级计算机,通过机器深度学习来训练其人工智能,不断地让人工智能自动比对超高分辨率静态图像(SSAA超级采样抗锯齿版本)和低分辨率图像之间的差异,使人工智能有能力推理出把图像从较低的分辨率提升到较高的分辨率的方法。简而言之,DLSS技术可以让画面在低分辨率下渲染,通过AI人工智能的模型脑补放大到高分辨率,再输出到显示器中。光线追踪效果是很漂亮,但这个功能非常耗费显卡运算能力,往往会对显卡的性能产生相当大的影响,而DLSS的运算过程全部在RTX显卡独有的Tensor Core(深度学习)核心单元内完成,所以并不会占用显卡的CUDA通用运算单元,避免了消耗显卡的渲染性能。

总的来说,光追技术和DLSS技术都是显卡发展的里程碑。光追技术能够使得游戏拥有电影级别的实时画面,而DLSS技术能够弥补光追所带来的帧率下降问题,两者配合使用就是传说中的“完美拍档”。在现实情况中,《战地5》是光追技术从0到1的一次落地尝试,也是游戏发展史上第一款真正支持光追的游戏。而在这之后的几年中,支持光追的游戏井喷式出现,3A大作如《赛博朋克2077》、《控制》、《堡垒之夜》、《德军总部:新血脉》、《看门狗:军团》等,国产游戏如《剑网3重置版》、《逆水寒》、《轩辕剑7》等。虽然支持光追的显卡还只是少数,光追和DLSS还只是属于初步发展阶段,但是随着游戏厂商和显卡厂商的共同努力,光追显卡终有一天会完全普及,而RTX战未来,也只是时间问题。

  移动端光追技术

随着手机性能的不断提升,越来越多数据庞大的游戏可以在手机上运行,例如原神、王者荣耀、崩坏3等。很多游戏玩家也不仅仅满足于在移动端进行正常的游戏过程,而是更希望能够在游戏中获得极致的沉浸感官体验:就比如在提瓦特大陆上肆意飞奔时,能够感受到太阳直射下湖面的波光粼粼,水波荡漾;在琉璃峰顶看朝霞初升,日出唤醒清晨,真切感受到光影透过云层雾气的氤氲朦胧之美;夜晚俯瞰璃月岛全景,万家灯火掩映着鳞次栉比的亭台楼阁,远方舳舻千里,在月光下如梦似幻;在甘金岛欣赏绚丽灿烂的烟花,捕捉那一瞬间绽放的感动;抑或是循着流明石的指引,在荧光狭道的尽头,帮助黯淡的赞玛兰重新亮起点点荧光……这些光线效果虽然在真实世界中司空见惯,但是在移动端的虚拟世界中却从未如此生动逼真的存在过,令人心驰而神往。

光线追踪作为图形处理领域的关键性技术,在电脑端的实现都需要极高的要求,而到了手机端则面临着更多的限制,手机规模的局限性带来了算力受限、功耗、散热等多方面问题,极大的限制了移动端光线追踪技术的发展。PC平台打开光线追踪,会导致游戏帧率降低,而移动端设备会因为GPU功率原因,画面流畅度降低会更为明显;其次,光线追踪会带来更多的耗电,开启后整机功耗表现有待进一步评估。一直到2015年左右,业界甚至认为3D图形根本无法在移动设备上完成。然而,Imagination提出的基于分块的延迟渲染架构(Tile Based Rendering,TBDR) 开启了一个新的时代,TBDR就是将屏幕分块成16×16或者32×32像素大小分别进行渲染,优点是节省带宽,耗电量小。即使在寿命和热性能限制非常严格的设备中,也能实现强大的 3D 图形。TBDR 完全消除了即时模式渲染器的低效过度绘制问题:耗费大量时间为像素着色,而这些像素隐藏在靠近相机的物体后面,是以用户在屏幕上永远不会看到这些像素。

Imagination后续发布的IMG CXT,采用以PowerVR TBDR架构为基础,进一步完善的PowerVR Photon光线追踪架构。IMG CXT是其首款将光线追踪加速硬件紧密集成到芯片中的GPU核 ,用了超宽ALU,优化的纹理处理单元,可配置的缓存大小和改进的压缩算法,如图9所示,CXT每个单核拥有三个紧密集成的光线加速集群(RAC),可以加速并从着色器核心分流更多的光线追踪计算。RAC 由光线存储(Ray Store)、光线任务调度器(Ray Task Scheduler)和一致性排序单元组成,并与两个 128宽的统一着色集群(USC)紧密相连,具有高速专用数据路径,以实现最高效和低功耗的光线追踪部署。RAC包含了光线存储(Ray Store)、光线任务调度器(Ray Task Scheduler)和相干性聚集器(Coherency Gatherer),并与两个128宽的统一着色器集群(USC)紧密耦合,USC拥有高速专用数据通路,可以实现最高效且功耗最低的光线追踪部署。Ray Store可以在处理过程中将光线数据结构保存在芯片上,并提供对 RAC中所有单元的高带宽读写访问,从而避免了将光线数据存储或读取至动态随机存取存储器(DRAM)所造成的速度降低或功耗增加。Ray Task Scheduler可以卸载着色器集群的任务,并通过专用硬件部署和追踪光线工作负载,同时保持高光线吞吐量和低功耗。独特的Coherency Gatherer单元可以分析所有传播中的光线,并将整个场景中的光线绑定成多个相干组,从而能够以更高的效率对它们进行处理。与前几代相比,在功耗、性能、面积和带宽(PPAB)效率方面实现了重大飞跃。目前, Imagination已完全支持主流API接口并跟应用厂商展开深度合作,支持OpenGL等渲染引擎。

图9 IMG CXT架构

三星在2019年与AMD达成合作协议,后者将RDNA GPU图形IP授权给了三星,以帮助其开发光线追踪、可变帧速率渲染等技术。三星推出的Exynos 2200新一代soc,也是同AMD合作后研发的首个在移动设备上支持硬件加速光线追踪的旗舰处理器,全新的Xclipse 920 GPU采用了AMD RDNA 2架构,带来了以前仅在PC、笔记本电脑和游戏机上才有的硬件加速光线追踪(RT)和可变速率着色(VRS)等高级图形处理功能。

2021年,OPPO在开发者大会上正式发布了面向移动端的光线追踪技术,并且让到场用户实际体验了光追游戏Demo。OPPO采用混合渲染,在初始场景中,先采用光栅化完成整体渲染,再利用光追实时生成阴影和水面、玻璃和金属等特殊材质的真实倒影,既能在最明显的地方展示光追效果,又能极大地降低光追计算量。OPPO重点提升的是渲染光线的数量,现实生活中,无数光线交织构成了真实的光影,游戏中的光线只有被量化才能够被模拟和渲染,目前ColorOS的实时光追渲染性能,已经可以达到几十兆光线/秒。通常来说,实时光追计算都会产生噪点,像英伟达就会采用DLSS等AI算法来进行降噪,面对该情况,OPPO自研了“无噪音模式”,在自动平衡算力和功耗的情况下,从技术上确保渲染时不出现噪点。同时,OPPO也与不少厂商展开合作。在游戏引擎上,除了计划支持Unity引擎,OPPO也计划支持采用虚幻引擎的游戏厂商,将光追落地到更多游戏上。硬件架构方面,OPPO会与高通和联发科等芯片厂商展开合作,并自研了相应的异构计算技术,确保光追在不同的硬件上都能得到最优性能提升。

Arm在前代的 Mali-G710 GPU 上提供了基于软件的光线追踪,而最近推出的全新GPU Immortalis-G715,具有可变速率着色(Variable Rate Shading)以及新的运行引擎,将配备至少10个内核。相比上一代Mali-G710,性能提升15%,能耗节省15%,机器学习性能提升2倍,而在功能上最大的区别就是对光线追踪的支持。Immortalis-G715支持硬件级光线追踪效果,光线追踪单元只占用了约4%的着色器核心面积,且仅耗费非常小幅的功耗,就能在相关领域带来3倍显著性能提升,效果如图10所示,左侧为未开启光线追踪,右侧为开启光线追踪。

图10 光追开启前后效果对比

移动端实时光追技术的实现也依赖于各大游戏厂商。一些游戏厂商依然使用着旧版引擎进行游戏开发,和最新的光追方案互不兼容,而他们大多基于原有引擎搭建了很多技术,升级迭代成本较高,这就需要展开多方深度合作,给出针对性的适配兼容。虽然到目前为止,移动端的实时光追技术尚未真正落地,但我们相信,随着技术日趋成熟,在不久的将来我们终将共同沐浴在实时光追之下,成为“追光”少年。

参考文献

1、实时光线追踪技术:业界发展近况与未来挑战 - 知乎

2、NVIDIA CEO黄仁勋:RTX光线追踪是豪赌 更是伟大发明!

3、手机上“光追”,挑战万元级显卡!ColorOS掀起手机画质新革命 - 智东西

未来,我们终将共同沐浴在实时光追之下相关推荐

  1. 英特尔图形学专家被AMD挖走,研发实时光追技术,从部门主管变成副总裁

    杨净 发自 凹非寺 量子位 | 公众号 QbitAI 上回说到,英特屡次从AMD挖走GPU人才. 连AMD首席独显架构师都给挖走了. 现在,轮到AMD开挖了. Mike Burrows,英特尔游戏&a ...

  2. ue4光追降噪_【RTX ON!】可能是最详细的UE4实时光追测评

    最近UE4.22 终于更新了dxr,我下意识的打开gpuz看看rtx卡是啥时候发布的...? 半年过去了啊! 废话不多说,ue开启raytracing需要改三个地方. 工程设置里,这个要打开 然后才能 ...

  3. arduino摄像头监控_如何使用Arduino和Pusher制作实时光监控器

    arduino摄像头监控 by Neo Ighodaro 由新Ighodaro 如何使用Arduino和Pusher制作实时光监控器 (How to make a realtime light mon ...

  4. 人工智能的本质和意义:未来机器终将觉醒

    https://www.toutiao.com/a6639889861350261255/ 算力与智能 计算能力不是产生智能的本质原因.人类大脑的计算能力有限却有逻辑推理能力,目前计算机的运算能力远远 ...

  5. 真的有能开光追的手游了!自带实机演示的那种,OPPO这次玩“大”了

    杨净 萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 手机上能玩到光追游戏了! 桥豆麻袋,你确定吗? 众所周知,光追渲染效果非常溜,哪怕镜面反射.水面倒影以及阳光阴影都非常真实- 但算力要 ...

  6. 华为云重定义虚实融合制作,拥抱数字媒体新未来

    3D互联网时代,内容制作由实拍走向虚实融合,带来虚拟演唱会.数字人综艺.虚拟偶像晚会等创新应用场景.华为云主张,以云上方式构建轻量化的虚拟制作新模式,通过基于云原生媒体基础设施的云上虚拟制作解决方案, ...

  7. 手机玩游戏大作难在哪?硬件性能要加码,高能效AI同样关键

    萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 在手机上就能"云"玩游戏大作,相信不少玩家听了都会心动. 然而,虽然5G已来,但云游戏这些年的落地效果并不让人满意. 确 ...

  8. 实时渲染大赛太卷了,来看提前交卷的优秀参赛作品

    小伙伴们大家好!首届实时渲染3D动画创作大赛!已经如火如荼进行了50天报名参赛人数已达120+大赛奖品总价值已达40万+报名截止至3月10日,还有42天!跃跃欲试的小伙伴们赶紧冲啊! Blender大 ...

  9. 昔日移动GPU王者,从数据中心、汽车等市场全面杀回来——专访Imagination技术创新副总裁Kristof Beets...

    来源:21IC 去年Imagination发布了其最新的C系列的GPU,通过多核拓展的方式,提供了更好的性能表现.设计灵活性和成本优势,成功杀入桌面GPU和数据中心市场.到今年,几家中国GPU黑马厂商 ...

  10. 游戏企业通关秘籍:华为云游戏全场景能力,开发+部署+运营“关关难过关关过”...

    明敏 萧箫 发自 凹非寺 量子位 | 公众号 QbitAI 就说云技术在游戏圈有多火吧,今年ChinaJoy直接在云上办了. 这一次,ChinaJoy首次采取了电脑软件端作为载体,以线上交互游玩体验作 ...

最新文章

  1. python随机生成字符串_python生成随机数、随机字符串
  2. Fedora的ifconfig命令
  3. 三十八、Java集合中的ConcurrentHashMap
  4. 展望2018:WebRTC技术现状、应用开发与前景
  5. 使用ABAP代码获得tcode RZ11里的参数值
  6. wpf的listbox循环数据滚动_滚动版 CentOS Stream 和 Fedora 的关系
  7. Java编程规约(OOP)
  8. SpringBoot xml层SQL update之foreach循环的坑
  9. 荐书:《PostgreSQL指南:内幕探索》| 留言送书
  10. HCIE Security 全套笔记整理
  11. python求解微分方程组_用python解一阶微分方程组
  12. IDEA中java文件的左下角有个像乐符一样的J符号
  13. 如何查看Dll中包含了哪些函数
  14. 运维人员的三种层次:看看你是背锅侠,还是闪修侠?
  15. Tensorflow 版本切换与 slim 问题
  16. win10锁屏壁纸文件夹位置
  17. win10多屏显示时分别设置壁纸
  18. 无人驾驶学习介绍和感悟
  19. Angular入门到精通系列教程(15)- 目录结构(工程结构)推荐
  20. AD9361使用概述

热门文章

  1. 去水印小程序源码,全新界面无加密,平台支持微信小程序和QQ小程序。支持解析抖音、快手、皮皮虾和微视等平台。带PHP下载接口。支持微信QQ流量主
  2. 工程实践中的体系与系统
  3. 深度丨语音识别技术专利申请分析及关键技术展望(上)
  4. mysql 数据库恢复模式_数据库的恢复模式
  5. 视频码率与分辨率的参考表
  6. 在html中 创建超链接使用的标记是,建立超链接标记是什么
  7. 舱机器人尾巴毛茸茸_第一千五百二十四章 毛茸茸【二合一】
  8. Python爬虫小项目——实现英语翻译功能(四)
  9. linux ubuntu git报错fatal: unsafe repository git config --global --add safe.directory解决方案
  10. c语言计算火车运行图调整暂停发售,详解铁路12306列车运行图调整,暂停发售