Unity粒子特效与UI Canvas融合:渲染原理与三大解决方案详解

发布时间:2026/8/17 12:05:59

Unity粒子特效与UI Canvas融合:渲染原理与三大解决方案详解
1. 问题现象与核心矛盾解析“为什么粒子不会显示在UICanvas上面” 这个问题几乎是每一位从3D世界转向UI开发的Unity开发者都会遇到的“新手墙”。你可能会遇到这样的场景精心设计了一个华丽的粒子特效比如按钮点击时的火花、角色升级时的光晕或者仅仅是界面切换时的转场星尘。当你信心满满地将Particle System拖到UI层级下期望它悬浮在按钮、文字之上时却发现它要么完全看不见要么鬼鬼祟祟地躲在UI元素的后面甚至可能出现在屏幕的奇怪角落。这种预期与现实的落差根源在于对Unity渲染管线的理解出现了断层。UI Canvas和3D粒子系统虽然同处一个场景却运行在两套几乎平行的渲染规则之下。理解这个问题的本质是打通2D UI与3D/2D特效视觉融合的关键第一步。简单来说UICanvas默认使用一套称为“屏幕空间覆盖”Screen Space - Overlay或“屏幕空间摄像机”Screen Space - Camera的渲染模式。这套模式是为了高效、精确地处理2D界面元素而设计的它独立于3D场景的几何体渲染流程。而标准的Particle System作为一个3D或2D渲染器组件其输出目标是场景中的摄像机遵循的是基于深度Z轴或排序图层Sorting Layer/顺序Order in Layer的渲染队列。当这两套系统没有正确的“握手协议”时粒子自然就无法出现在你期望的UI层之上。本文将彻底拆解这背后的渲染原理并提供从原理到实践的多种解决方案让你不仅能解决“显示”问题更能驾驭粒子与UI的深度融合。2. 渲染管线隔离Canvas与粒子的世界为何不同要解决问题必须先理解问题背后的两套规则。我们可以把Unity的渲染想象成两个不同的“绘画车间”。2.1 UICanvas的渲染规则屏幕空间的霸主Canvas的渲染模式决定了它的工作方式Screen Space - Overlay这是最常用的UI模式。在此模式下Canvas完全无视任何3D摄像机。它将自己绘制在屏幕的最顶层其渲染由Unity的UI系统直接管理。所有UI元素Image, Text, Button的绘制顺序由它们在Hierarchy中的顺序从上到下后绘制的覆盖先绘制的以及它们各自的Canvas Renderer组件的Sort Order决定。这里没有Z轴深度的概念只有绘制命令的先后。Screen Space - Camera此模式将UI渲染绑定到一个特定的摄像机。UI元素被投影到该摄像机的近裁剪平面上。虽然它关联了摄像机但其渲染仍然处于一个特殊的、晚于大部分不透明物体的队列中并且默认会遮挡住处于标准几何体队列中的3D物体包括粒子。它的深度由与摄像机的距离投影后的和Canvas的Sort Order共同决定。World Space这种模式下Canvas就像一个3D物体拥有Transform可以放在场景的任何位置。它的渲染完全融入3D场景受光照、遮挡影响其显示顺序由3D渲染队列决定。这通常用于游戏内的3D交互面板如VR界面、世界空间血条。核心矛盾点在Overlay和Screen Space - Camera模式下Canvas的渲染是一个相对封闭的后期过程。标准粒子系统作为通过Renderer组件如Particle System Renderer输出的物体默认被归类到“透明”Transparent或“几何体”Geometry渲染队列。Unity的渲染引擎会先绘制大部分不透明物体和粒子最后才绘制UI层。因此粒子被画在了“下面”然后UI覆盖了上去这就是你看不到粒子的最常见原因——不是粒子没画而是被UI盖住了。2.2 粒子系统的渲染归属它听谁的指挥一个Particle SystemGameObject能否被看见取决于它的Renderer模块。在Particle System组件的最后有一个Renderer部分它定义了粒子如何被绘制到屏幕上。关键参数是Render Mode和Sorting Layer。Render Mode决定了粒子网格的渲染方式如Billboard, Stretched Billboard, Mesh等但这不影响其渲染队列的归属。Sorting Layer / Order in Layer这是连接粒子与2D渲染系统的桥梁。但默认情况下新创建的粒子系统其Sorting Layer是“Default”这与UI系统使用的“UI”层是不同的。即使你在同一个Sorting Layer如果没有正确的Order in Layer也无法控制谁前谁后。更重要的是仅设置Sorting Layer对Screen Space - Overlay模式的Canvas无效因为Overlay Canvas根本不参与Sorting Layer排序。一个常见的误解开发者试图通过将粒子物体的Z轴位置调到摄像机前面来解决。在World Space Canvas中这或许有效但在Screen Space模式下UI的渲染与3D坐标Z值无关。调整Z轴只会影响粒子在3D空间中的位置可能让它飞出摄像机视锥体反而彻底消失。3. 解决方案一调整渲染队列与排序层针对Screen Space - Camera如果你的Canvas使用的是Screen Space - Camera模式那么你拥有一个统一的坐标参照系——那就是你所绑定的那个摄像机。此时可以让粒子和UI在这个摄像机的渲染队列里“同台竞技”。操作步骤确保你的Canvas渲染模式为“Screen Space - Camera”并指定一个摄像机通常是Main Camera。选中你的粒子系统GameObject。在Inspector中找到Particle System组件底部的Renderer模块如果没展开请展开。在Renderer模块中找到Sorting Layer和Order in Layer属性。点击Sorting Layer下拉框选择“UI”如果没有需要点击“Add Sorting Layer...”去Tag Layers设置中添加。设置Order in Layer为一个较大的值比如10。Canvas及其子UI元素的默认Order是0。数值越大渲染得越晚越靠前。原理与注意事项注意此方法之所以对Screen Space - Camera有效是因为该模式下的Canvas和设置了相同Sorting Layer的粒子都被投影到了同一个摄像机的近裁剪面它们进入了同一个基于Sorting Layer/Order的2D排序系统。Unity会按照Order in Layer的数值从小到大依次渲染。将粒子的Order设得比Canvas高它就会在Canvas之后被渲染从而显示在UI之上。实操心得这里有个坑。如果Canvas下有多个子Canvas或UI元素拥有不同的Order你需要确保粒子的Order大于所有你希望它覆盖的UI元素的Order。一个实用的技巧是创建一个专用的、高Order的Canvas来放置所有需要显示在最顶层的特效粒子便于统一管理。验证与调试完成后在Scene视图中你可以通过选择粒子系统并在右上角的“Scene视图渲染模式”下拉菜单中选择“2D”模式来直观地查看所有2D渲染对象包括UI和设置了UI Sorting Layer的粒子的叠放次序。4. 解决方案二使用Render Texture与Raw Image通用且强大当你的Canvas是Screen Space - Overlay模式或者你需要更复杂的混合效果比如让粒子与UI有独特的混合模式时调整Sorting Layer是行不通的。此时Render Texture渲染纹理是终极解决方案。其核心思想是让粒子在一个独立的“小舞台”由另一个摄像机拍摄上表演然后将这个“演出录像”Render Texture作为一张“图片”Raw Image贴在UI Canvas上。详细操作流程4.1 创建渲染摄像机与Render Texture在Hierarchy中创建一个新的摄像机命名为“Particle Camera”。调整此摄像机的位置和旋转使其对准你希望显示粒子的区域。通常你可以让它与Main Camera对齐或者只拍摄一个局部区域。关键一步将此摄像机的Clear Flags设置为“Solid Color”并将背景颜色的Alpha值设为0完全透明。这样它只会拍摄粒子背景是透明的。将此摄像机的Culling Mask设置为只渲染粒子所在的层例如你可以新建一个“ParticleUI”层并将粒子对象分配到此层然后摄像机只勾选此层。这可以避免拍到不必要的场景物体。将此摄像机的Depth设置为比Main Camera更大的值例如Main Camera是-1此相机设为0。Depth值更大的摄像机后渲染。在Project窗口中右键 - Create - Render Texture命名为“UIParticleRT”。将“UIParticleRT”拖拽赋值给“Particle Camera”的Target Texture属性。现在这个摄像机的画面就不会直接显示到屏幕而是输出到这张Render Texture上。4.2 在UI Canvas上显示Render Texture在你的UI Canvas下创建一个Raw Image组件GameObject - UI - Raw Image。Raw Image比Image更适合显示动态的纹理。将刚才创建的“UIParticleRT”拖拽赋值给Raw Image的Texture属性。调整Raw Image的Rect Transform使其大小和位置与你希望粒子显示的区域匹配。你可以将其设置为全屏或者只是一个按钮的大小。确保这个Raw Image在Hierarchy中的顺序处于你想要粒子覆盖的UI元素之上对于Overlay Canvas或者其Canvas的Sort Order足够高。深度解析与优化技巧原理Particle Camera将粒子渲染到一张透明的纹理上这张纹理作为一张普通的图片被UI系统绘制。由于UI系统绘制这张图片是在其自身的渲染流程中完成的因此粒子自然就能遵循UI的层级顺序显示在任何你指定的UI位置。性能考量每一张活动的Render Texture都会带来额外的渲染开销相当于多了一个摄像机在渲染。对于移动平台需谨慎使用。优化方法包括降低分辨率在Render Texture的导入设置中降低其尺寸如512x512只要在UI上看起来不模糊即可。控制更新如果粒子不是一直需要可以通过脚本控制Particle Camera的enabled属性只在需要时开启。合并渲染尽量将多个UI粒子特效安排到同一个Render Texture中共用一台Particle Camera。混合与交互通过调整Raw Image的Material使用UI默认的UI/Default材质变体或自定义材质你可以实现粒子与下层UI的特殊混合效果如Additive、Multiply等这比直接调整粒子渲染器在UI上的混合要灵活得多。坐标匹配如果希望粒子在UI上的位置与3D世界中的某个点对应比如跟随一个3D物体你需要编写脚本将3D世界坐标通过Camera.WorldToScreenPoint或Camera.WorldToViewportPoint转换为屏幕坐标或视口坐标然后动态计算Particle Camera的视口矩形rect或投影矩阵这是一个进阶话题但提供了无与伦比的灵活性。5. 解决方案三使用专门的世界空间CanvasWorld Space如果你的需求是让粒子作为游戏世界的一部分但与一个同样存在于世界空间的UI如角色头顶的血条、3D物体上的交互面板进行交互和遮挡那么使用World Space Canvas是最自然的选择。操作与配置将你的Canvas的Render Mode改为“World Space”。此时Canvas变成一个拥有3D Transform的物体。你可以像摆放其他3D物体一样把它放在场景中。粒子系统也作为普通的3D物体存在于场景中。此时粒子和Canvas的显示顺序完全由它们与摄像机的相对距离深度、它们的渲染队列通过材质的Render Queue设置以及它们是否被其他物体遮挡来决定。适用场景与局限适用VR/AR界面、3D游戏中的沉浸式菜单、物体标签、血条等。粒子可以物理上位于Canvas的前面或后面产生真实的3D遮挡关系。局限它不再是“覆盖”在屏幕上的UI其位置和透视会随着摄像机移动而变化。不适合用于传统的、固定位置的2D游戏UI如背包、设置菜单。一个关键技巧对于World Space Canvas你可以通过为Canvas下的UI元素或粒子材质设置更高的Render Queue值来强制它们晚渲染。在Unity中标准的透明物体队列从3000开始。你可以创建一个材质将其Render Queue设为3001赋给粒子并确保Canvas使用的材质的Render Queue低于此值UI/Default材质通常在Transparent100即3100这里需要查证实际上UI默认材质队列是Transparent值为3000。所以需要具体测试或调整。更可靠的方法是使用Sorting Layer和Order in Layer这在World Space下同样有效因为所有渲染都通过同一个摄像机。6. 常见问题排查与实战技巧实录即使按照上述方法操作你可能还是会遇到一些诡异的情况。下面是我在项目中踩过的坑和总结的排查清单。6.1 粒子完全不可见黑屏/透明检查1摄像机裁剪粒子系统的位置是否在Particle Camera或主摄像机的视锥体之外调整粒子位置或摄像机参数。检查2Render Texture透明度确保Particle Camera的背景Alpha为0且Render Texture的格式支持Alpha通道如ARGB32。在Render Texture的导入设置中查看。检查3粒子渲染器是否启用确保粒子GameObject上的Particle System Renderer组件勾选启用。检查4材质与着色器检查粒子渲染器使用的材质和着色器是否支持透明混合。对于UI显示通常需要Particles/Standard Unlit或类似的透明着色器。6.2 粒子显示在UI后面但调整Order无效情况Canvas是Screen Space - Camera粒子Order已设高但仍被遮挡。排查检查Canvas下是否有子Canvas。子Canvas的Override Sorting属性如果启用会覆盖父Canvas的排序并以其自身的Order为准。你需要确保粒子的Order高于所有相关Canvas的Order。6.3 使用Render Texture时性能骤降诊断在Game视图的Stats面板中观察SetPass calls和Batches是否异常增加。优化如前所述降低Render Texture分辨率。检查Particle Camera的Culling Mask是否精确避免渲染无关物体。如果粒子是静态的不变化可以考虑将Render Texture缓存而不是每帧更新。6.4 粒子与UI混合颜色异常问题描述粒子在Raw Image上显示为奇怪的黑色或白色没有正确的透明叠加效果。原因Raw Image的默认材质可能不支持粒子纹理的Alpha混合或者粒子的着色器输出格式不匹配。解决为Raw Image创建一个新的材质使用UI/Default着色器。在该材质的Inspector中将Rendering Mode改为“Fade”或“Transparent”。将这个材质赋给Raw Image。同时检查粒子材质确保其着色器是用于粒子的并且混合模式Blend Mode设置正确如 SrcAlpha OneMinusSrcAlpha 用于普通透明。6.5 移动设备上的兼容性问题问题在部分Android或iOS设备上透明Render Texture显示异常粉红或闪烁。解决这通常与ES2.0或某些GPU的纹理格式支持有关。尝试将Render Texture的格式从ARGB32改为RGB565牺牲Alpha或ARGBHalf并在Raw Image上使用一个不依赖Alpha的显示方案如将粒子背景设为某种颜色并扣去。最稳妥的方案是如果支持将图形API级别提高到OpenGL ES 3.0或Metal/Vulkan。7. 进阶方案与插件推荐对于大型项目或需要频繁使用UI特效的团队手动管理Render Texture和摄像机显得繁琐。社区和资源商店有一些优秀的解决方案。1. Unity官方 UIEffect 或 Third-party插件 (如 UI Particle)许多第三方插件对Unity的UI粒子系统进行了深度封装。它们通常通过重写MaskableGraphic类使标准的Particle System能够直接作为UI元素被Canvas渲染和管理。这意味着你可以像放置一个Image一样放置一个“Particle”元素并享受RectTransform、Raycast过滤、Mask裁剪等所有UI特性。这是最优雅、性能相对较好的解决方案值得在项目初期进行评估和引入。2. 自定义Shader与Command Buffer对于图形程序高手可以使用Command Buffer在摄像机的特定渲染事件如AfterForwardAlpha中抓取粒子的渲染结果并将其“注入”到UI渲染流程中。同时编写自定义的UI着色器使其能够与这些注入的渲染缓冲区正确混合。这是最高效但也最复杂的方案需要对Unity渲染管线有深刻理解。3. 使用Sprite Sheet动画模拟简单粒子对于性能极度敏感的移动平台尤其是低端机如果粒子效果不复杂如简单的闪烁、小范围爆炸可以考虑放弃使用Particle System转而使用Image组件播放Sprite序列帧动画。这完全在UI系统内完成零额外渲染开销且层级控制绝对精准。虽然表现力有限但对于很多UI反馈效果如点击反馈、获得金币来说已经足够。在我个人的项目经验中对于简单的、需要精准层级控制的UI附着粒子如按钮特效我首选调整Sorting LayerScreen Space - Camera下因为它最简单直接。对于复杂的、全屏的或需要与UI深度混合的粒子特效如菜单背景星云Render Texture方案是可靠的主力。而在开发一个以UI为核心、特效繁多的游戏时投资一个成熟的UI Particle插件往往会节省大量的开发和调试时间从长远看是性价比最高的选择。记住没有银弹根据你的具体场景和性能预算选择最合适的那把“钥匙”。

相关新闻

零预算实现跨网段互通:挖掘现有设备路由功能的实战指南

零预算实现跨网段互通:挖掘现有设备路由功能的实战指南

2026/8/17 12:05:59

最近遇到一个挺典型的现场问题,一个朋友在客户那边做网络调整,客户那边有几个不同网段的设备需要互通,比如办公网段和监控网段。朋友的第一反应是,这得加个三层交换机做路由啊,结果刚开口提方案,就被客户一…

战略采购代理:基于LLM与数据驱动的智能采购决策系统设计与实践

战略采购代理:基于LLM与数据驱动的智能采购决策系统设计与实践

2026/8/17 12:05:59

1. 项目概述:什么是“战略采购代理”? 最近几年,AI Agent这个概念火得不行,从写代码的Devin到帮你订机票的旅行助手,感觉啥都能干。但如果你问我,在商业领域,哪个方向的Agent最能直接、最硬核地…

Ubuntu 22.04中文输入法与VS Code配置全攻略:打造高效开发环境

Ubuntu 22.04中文输入法与VS Code配置全攻略:打造高效开发环境

2026/8/17 12:05:59

1. 从零开始的Ubuntu桌面环境配置:为什么需要中文输入法与VS Code 如果你刚从Windows或macOS切换到Ubuntu,或者正准备在Ubuntu上搭建一个高效的开发或学习环境,那么有两样东西几乎是绕不开的:一个趁手的中文输入法,和一…

定制你的PHP运行时:魔改发行版架构设计与源码剖析

定制你的PHP运行时:魔改发行版架构设计与源码剖析

2026/8/17 15:36:09

定制你的 PHP 运行时:魔改发行版——架构设计与源码剖析这是把你前 25 个阶段做的事情工程化、产品化:不再是一次性改一个函数,而是造一个"针对你自己项目的专属 PHP 发行版"。就像RedHat 之于内核、Tideways/Blackfire 之于 PHP—…

Mac上Java环境搭建:从JDK安装到多版本管理的完整指南

Mac上Java环境搭建:从JDK安装到多版本管理的完整指南

2026/8/17 15:36:09

1. 为什么Mac上的Java环境总让人“又爱又恨”?如果你刚拿到一台新的Mac,或者准备开始学习Java、Spring Boot,又或者需要运行某个依赖特定Java版本的老项目,安装和配置Java环境几乎是绕不开的第一步。这事儿听起来简单,…

小程序隐私协议实战指南:从合规到体验的完整开发方案

小程序隐私协议实战指南:从合规到体验的完整开发方案

2026/8/17 15:36:09

1. 从“合规”到“体验”:为什么隐私协议不再是摆设 最近和几个做小程序的朋友聊天,发现一个挺有意思的现象:一提到“隐私协议”,大家的第一反应往往是“哦,那个弹窗啊,找个模板抄一下,让法务看…

FreeRTOS之事件标志组

FreeRTOS之事件标志组

2026/8/17 15:36:09

事件标志组用于任务间通信或同步 事件标志组和全局变量 全局变量一般用在无RTOS的程序中,因此程序对全局变量的访问是顺序的,全局变量对于每一个访问它的程序来说都是最新值事件标志组一般用在多任务系统中,多任务使用事件标志组可以防止访问…

【文件操作、目录操作】-覆盖:ini文件、yaml/yml文件、excel文件、json文件的python操作封装

【文件操作、目录操作】-覆盖:ini文件、yaml/yml文件、excel文件、json文件的python操作封装

2026/8/17 15:36:08

python之文件读写、目录操作、序列化str操作后写入文档、xml模块、configparser模块 关于常见文档格式的操作封装一 .ini文件的操作类二 .yaml文件的操作类三 .excel文件的操作类 (xlrd1.2.0版本才有好的支持,最新的支持不好)四、 pandas 读取…

卫星变轨技术全解析:从推进系统到轨道力学实战

卫星变轨技术全解析:从推进系统到轨道力学实战

2026/8/17 15:26:08

1. 从“固定轨道”到“灵活机动”:卫星变轨的底层逻辑很多人以为卫星一旦被火箭送入太空,就会像被设定好的钟表一样,永远在同一个轨道上运行。这个印象对,但也不全对。对,是因为大部分卫星确实在长期执行任务时&#x…

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

2026/8/17 1:28:42

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

2026/8/16 0:04:13

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

2026/8/17 8:40:51

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

LabVIEW异步调用实战:从原理到生产者消费者模式,解决界面卡顿与并行处理难题

LabVIEW异步调用实战:从原理到生产者消费者模式,解决界面卡顿与并行处理难题

2026/8/17 0:05:22

1. 项目概述:为什么异步调用是LabVIEW进阶的必修课? 如果你用LabVIEW做过稍微复杂点的项目,尤其是涉及界面响应、多任务并行或者硬件IO等待的场景,大概率遇到过这样的窘境:前面板点个按钮,整个程序就“卡死…

LabVIEW异步调用实战:解决界面卡顿与并行处理难题

LabVIEW异步调用实战:解决界面卡顿与并行处理难题

2026/8/17 0:05:22

1. 项目概述:为什么异步调用是LabVIEW进阶的必经之路如果你在LabVIEW里写过稍微复杂点的程序,尤其是涉及到界面响应、多任务并行或者硬件IO等待,大概率会遇到一个头疼的问题:程序“卡”住了。前面板点不动,进度条不更新…

飞书局域网文件传输实战:3种方案实现高速点对点传输

飞书局域网文件传输实战:3种方案实现高速点对点传输

2026/8/17 0:05:22

1. 项目概述:为什么要在局域网内用飞书传文件? 飞书作为一款主流的协同办公套件,其核心功能是围绕云端协作设计的。无论是文档、表格还是文件,通常的分享逻辑都是“上传到云端 -> 生成链接 -> 分享给同事”。这个流程在互联…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/17 12:00:53

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/15 10:10:27

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/14 19:35:14

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…