ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Unity URP/HDRP与UE4全局光照方案对比与选型实战

Unity URP/HDRP与UE4全局光照方案对比与选型实战 Part 1聊PBR材质的时候很多人在评论区催更问我什么时候写全局光照。其实这个选题比材质更值钱因为材质只能决定物体“看起来是什么”而全局光照决定的是物体“处在什么环境里”。没有合理的GI哪怕你PBR贴图扫得再准画面里也全是死黑死灰。这篇Part 2就把Unity URP、Unity HDRP、UE4三者各自的全局光照方案摊开来从技术路线、参数设置、实际选型到排查经验一次性讲透。先说清楚一个概念全局光照Global IlluminationGI不是某个引擎的“开关键”而是一整套渲染策略。URP、HDRP、UE4对GI的取舍完全不同。URP走的是轻量烘焙流HDRP偏向多层次混合UE4则从传统Lightmass一路演进到UE5的Lumen。哪怕你只打算用一个引擎这篇对比也能让你看得更清楚——你的项目瓶颈到底在哪为什么画面总是不对劲以及换引擎时GI方案为什么不能直接搬。1. 全局光照到底难在哪先弄清三款引擎各自的世界观1.1 从PBR到全局光照为什么GI是渲染链路里的“重头戏”PBR材质本身并不会发光它的输出只是“这个点在给定光照下应该反射多少光到相机”。但一个画面里物体表面接收到的光并不只来自直接光源。太阳照进窗户打在地板上地板再反射一部分光到墙角和沙发底部这个过程就是间接光。如果没有间接光背光面就是纯黑室内场景就是一片死暗金属和皮肤更是直接崩掉。理论上完全的全局光照需要解渲染方程计算场景中所有表面之间的多次光线弹射。这在离线渲染里不算难无非是多跑几分钟。但到了实时渲染每帧只有16毫秒左右的预算还要兼顾CPU、GPU、显存带宽和发热事情就变得棘手了。所以现实方案都是“预计算一部分 实时妥协一部分”要么烘焙到纹理要么采样到探针要么用屏幕空间近似。URP、HDRP、UE4的不同本质上是这三者的配比不同。1.2 实时GI的三种技术路线烘焙、屏幕空间、体素/探针先把技术路线分清楚后面讲引擎参数才不会晕。烘焙式GIBaked GI在编辑器里提前计算间接光写进光照贴图Lightmap或光照探针。运行时开销基本为零效果稳定质感和离线渲染接近。缺点是场景一旦移动静态物体就要重新烘焙内存会随着光照贴图分辨率上涨。屏幕空间GIScreen Space GISSGI在运行时借助深度、法线、颜色缓冲把可见像素当成“光源”去弹射一次模拟间接光。优点是动态、实时响应不需要预计算缺点是只能看到屏幕内已有信息屏幕外的场景对GI没有贡献而且低分辨率下容易出噪点和闪烁。体素/探针/表面缓存类GI把场景离散为均匀网格、距离场或探针集合存储每块区域的光照信息。运行时对某点查询附近光照并做插值。代表技术有HDRP的Adaptive Probe Volumes、UE5的Lumen Surface Cache、甚至老引擎里的Irradiance Volume。它介于烘焙和全实时之间灵活性高但会占用额外内存和流送带宽。路线预计算动态支持移动端表现典型代表烘焙Lightmap需要静态场景很强动态物体弱最好URP/HDRP/UE4全支持屏幕空间SSGI不需要实时性强但信息不全较贵HDRP、UE5部分场景探针/体积缓存需要动态物体间接光优秀中等HDRP APV、UE5 Lumen选哪条路线不是看哪个“更高级”而是看你的项目类型。后面每个引擎的章节我会按这个框架去拆。2. Unity URP 的全局光照轻量但够用的“烘焙流”2.1 URP实际可选方案Lightmap 反射探针 光探头URP是Unity为移动端、WebGL和低功耗设备准备的渲染管线设计上优先保证性能和兼容性。所以在URP里官方不会给你放一套重型的实时光照系统。你打开Lighting窗口Realtime Global IlluminationEnlighten那一项基本都是灰色的没法勾。这不是bug是架构上就不支持。因此URP项目里最标准的GI组合是静态物体用Lightmap把烘焙好的间接光存进光照贴图运行时直接采样。URP支持单张纹理的Baked Lightmaps分辨率、压缩格式都可以在Player Settings里调。动态物体用Light Probe Group给场景里移动的角色、载具、生物提供间接光照样。它本质上是稀疏分布的一堆SH探针运行时按位置做插值。高频反射用Reflection Probe静态物体表面的镜面反射金属、玻璃、车漆靠它出效果。URP没有内置的屏幕空间反射不像HDRP和UE4有SSR所以反射探针的布点直接决定画面质感。这套组合在移动端非常成熟几乎所有Unity手游的夜间室内场景都是这么做的。它的上限不高但胜在可控、易调试、帧率稳定。对绝大多数中小型项目来说URP的烘焙GI不是“妥协”而是最合理的选择。2.2 参数设置与工作流细节在URP里做烘焙我建议按这个顺序来能少走很多弯路先确认所有静态物体Tag为Static并且勾选Lightmap Static。不勾的话烘焙时会直接报“Mesh not marked as Static”一类提示或者干脆漏光。打开Window Rendering LightingLightmapper选Progressive GPU。如果显卡是NVIDIA 20系及以上速度比CPU快一个数量级老卡或者用Mac跑烘焙再退回Progressive CPU。设置Baked Lightmap分辨率。具体数值看物体大小和纹理密度常见室内场景用40~60 texels per unit大场景可以降到20~30。这些参数在Lightmap Parameters里控制max Lightmap Size和Padding。检查模型的Lightmap UVUV2。Unity有自动生成选项在模型导入面板里勾Generate Lightmap UVs。烘焙后如果发现接缝、渗色多半是UV2展开不好需要调整UV Packing的Margin。Generate Lighting。这里有个很多人忽略的细节URP的Lighting Environment里的Ambient Mode可以设成Procedural或Custom。烘焙时天空盒会提供环境光但运行时如果角色走到室内环境光如果还是室外那套整个人物会明显“发飘”。建议配合Volume的Environment参数在室内区域用单独的天空盒或梯度环境光效果立竿见影。2.3 常见局限没有内置SSGI怎么补救URP最被诟病的一点就是没有官方内置的屏幕空间全局光照。这意味着动态光源比如人物打手电筒打出来的间接光是没有弹射的手电照亮了墙墙却不会把光反弹到角色身上。某些项目里玩家举着火把走过走廊墙上明明亮堂堂角色正面却全是黑的非常出戏。补救办法有几个按投入从低到高排序预先烘焙好有火把的Lightmap这是最省事但最不灵活的方式比较适合固定演出。多用Reflection Probe。反射探针对镜面反射贡献大虽然它是用于反射的但对“环境感”的提升很明显玩家会觉得场景“更亮、更立体”。在URP基础上加社区或自研SSGI。URP是Scriptable Render Pipeline允许你用RenderFeature注入全屏Pass自己实现一遍屏幕空间GI。性能开销视分辨率而定1080p下至少要吃掉0.5~1毫秒。这个方法适合有渲染能力的中大型团队。用Light Probe Group生成更密集的探针网络让动态物体在光源附近移动时能尽量贴合间接光变化但本质是近似不要指望它替代真正的GI。URP的现实就是如此它的定位决定了它不会有一整套豪华GI但只要你合理排布烘焙、探针和反射视觉上限一点都不低。3. Unity HDRP 的全局光照从烘焙到屏幕空间到自适应探针3.1 HDRP三套方案Lightmap、SSGI、APV、Path TracingHDRP是Unity面向PC、主机、高端移动设备的高端管线GI体系也比URP厚实得多。同一个HDRP项目里你可以同时看到好几套GI技术在起作用关键是搞清楚每套的职责边界。Baked Lightmap和URP一样负责静态场景的主间接光。HDRP的高清渲染管线对光照贴图的编码、质量、体积感支持更好。Screen Space Global IlluminationSSGIHDRP内置的屏幕空间GI可以通过HDRP Asset和Volume开关。它有一个专门的质量参数和降噪器适合场景动态变化、没时间频繁烘焙的场景比如实时演算的交互式装置或模拟器。Adaptive Probe VolumesAPV这是HDRP 14以后主推的光照探针系统可以理解为Light Probe Group的加强版。它用自适应网格在场景里放置探针支持烘焙时存储镜面反射方向和间接光动态物体从中采样效果比传统光探针平滑得多。Path Tracing严格来说是离线渲染器但它能在编辑器里用来烘焙光照贴图和APV数据质量接近影视级只是速度慢适合产品展示或AR/VR静帧烘焙。HDRP的灵活既是优点也是负担。项目里如果全开SSGISSR光追APV性能会直接爆掉。所以实操中一定要分清主次谁是主角谁是辅助。3.2 SSGI 与 APV 的选型逻辑和配置SSGI和APV这两个名字很容易让人纠结很多人觉得SSGI是实时的APV是烘焙的那肯定选SSGI。其实不一定。SSGI的优势是“所见即所得”光源、墙面颜色、遮挡体变化都能实时反应。但它有两个硬伤一是屏幕空间信息有限物体一离开屏幕就没有间接光贡献导致画面边角发暗或者偶发性闪烁二是它默认只处理漫反射间接光镜面反射还是得靠SSR或Reflection Probe。所以SSGI适合角色扮演、步行模拟这类场景相对集中、相机运动不太剧烈的游戏。APV则是把间接光烘焙到场景体积中。它的优势是数据不依赖屏幕空间不会出现“离开屏幕就没光”的问题而且对动态物体支持比Light Probe Group稳定。缺点是场景变化后需要重新烘焙并且APV的生成需要较长时间调试。配置APV的步骤通常是在Lighting窗口的Adaptive Probe Volumes面板里点击创建一个APV Volume调整包裹范围。使用Visible Scene模式或Auto placement设置探针密度。复杂区域楼梯、转角调高密度空旷区域调低。点击Generate Lighting烘焙。烘焙参数里要注意Baking Batch Size内存不足时报错很常见此时减小Batch Size。对动态物体启用Volume采样HDRP会自动把APV数据绑定到物体shader里。SSGI则相对简单在HDRP Asset的Lighting Screen Space Global Illumination里设为Enabled然后在Volume里添加Screen Space Global Illumination override设置Quality低/中/高和Radius。Radius控制间接光在屏幕空间传播距离室内小场景建议设小一点比如2~3米室外开阔场景再拉大不然会有明显的光晕拖尾。3.3 实操记录一个室内场景的HDRP GI配置我拿一个常见样板间场景举例客厅、走廊、厨房面积大约80平米静态模型带家具有一个人物在屋里走动。目标帧率是主机60FPS。我的配置组合是“Lightmap APV 少量Reflection Probe 关闭SSGI”。原因很实际样板间是固定场景根本没有动态几何体改变间接光烘焙能获得最稳定的画面。APV用来解决人物走到角落时角色受光不自然的问题。Reflection Probe摆三四个覆盖主要视野方向避免金属家具和玻璃茶几一片糊。具体参数我记得很清楚LightmapMax Lightmap Size 1024texels per unit 50Final Gather Rays提高20%为的是减少墙面接缝和暗斑。APV探针间距在走廊设为1米客厅2米烘焙后查看可视化分布角落补了几颗。Reflection ProbeBox Projection全部打开近处反射采样用1080 cubemap远处用512。SSGI关掉。真需要动态响应的地方单独用灯光Change触发一个临时的高质量SSGI Volume其余时间不浪费性能。这套配置在PC上是2~3毫秒GPU开销主机上略高但可控。如果项目硬要全动态、无烘焙那就得把SSGI打开同时接受天气系统变化带来的噪点这需要更细腻的降噪器调校慎用。4. UE4 的全局光照Lightmass 到 Lumen 的演进4.1 UE4 与 UE5 的GI体系差异UE4和UE5在全局光照上的路线差异比Unity内部的URP/HDRP差距还要大。UE4从4.20开始逐渐把实时GI的希望寄托在硬件光追上但多数项目默认还是用Lightmass烘焙。UE5则直接用Lumen取代了Lightmass在动态GI里的位置。具体拆开看UE4的静态光照Lightmass烘焙生成光照贴图Lightmap同时生成Volumetric Lightmap用于动态物体间接光Reflection Capture提供镜面反射。这是最经典、最稳的方案。UE4的动态光照Movable光源理论上支持动态间接光但用的是Surface Cache Indirect Lighting Cache效果很粗糙业界基本不拿它做量产。UE4.26有硬件光追GI选项性能开销大画面表现也不如Lumen成熟。UE5的Lumen一套融合了软件光线追踪Screen Traces Signed Distance Field Traces的全局光照系统漫反射间接光和镜面反射都可以实时更新。它不需要Lightmap但兼容已有的烘焙数据室内外大场景表现都很好。跨版本迁移时最容易踩坑的项目就是UE4的Lightmap数据在UE5里还可以用但Lumen一旦开启光照贴图的意义就变了。静态烘焙不再承担“实时表现为主”你反而要处理Lumen和Lightmap两套数据叠加导致的光照过亮问题。4.2 Lightmass 烘焙工作流与参数UE4项目用Lightmass烘焙打开Build Build Lighting后大部分时间都在调World Settings里的Lightmass参数Static Lighting Level Scale缩放场景尺寸以匹配Lightmass的精度单位大型世界建议调到0.1或0.2否则漏光严重。Num Indirect Lighting Bounces间接光反弹次数默认3室内场景尽量拉到5~6能显著改善墙角过渡。Indirect Lighting Quality曝光和采样密度默认1.0烘焙出现大面积噪点时提升到2.0或4.0代价是烘焙时间倍涨。Indirect Lighting Smoothness滤波强度过大会糊掉细节一般0.75左右。Final Gather Rays每像素的FG射线数决定光照贴图的细碎噪点室内高精度需要256以上。烘焙时我习惯把所有Lightmap分辨率通过LightmassImportanceScale设置成1.5~2.0再在关键资产如主角常站的位置单独提高。还有很关键的一点UE4的Reflection Capture不是自动生成的你得手动在场景里摆。捕捉后如果CubeMap偏黑多半是捕获范围太小或天空Ambient Cubemap没设置好。4.3 Lumen 动态GI的核心原理与参数Lumen的出现让很多UE4老项目迁移变得痛苦因为它的默认参数你基本都得重调。Lumen的本质是把场景光照编码到Surface Cache里再用屏幕光追和SDF光追逐步追踪间接光。它在Project Settings Engine Rendering Global Illumination里配置可以选Software或Hardware Ray Tracing。Hardware必须配合RTX级别显卡画面和纯光追更接近但性能开销巨大Software在多数项目里已经足够而且不用等光追硬件普及。Lumen几个关键参数Quality数值范围0到100对应最终追踪质量。默认是1.0实际默认质量是1.0但你可以调Grade为50甚至更低。项目性能紧张时优先降低Quality而不是关掉Lumen。Final Gather Quality控制最终汇聚采样的数量越高噪点越少。画面闪得厉害时调它。Screen Space Software TracingLumen屏幕追踪开关。开了以后近距离GI更准但相机剧烈运动时容易闪关掉则完全依赖SDF追踪稳定但细节少。Use Hardware Ray Tracing开启后Lumen使用光追核心画质最好但对场景的BVH构建和显存要求很高。Lumen对我最大的吸引力是“所见即所得”改一堵墙的颜色走廊里其他物体的环境光立刻会跳变这在传统烘焙工作流里几乎不可能实现。但它不是免费的即使是Software Lumen在复杂场景里也要吃1~2毫秒GPU时间移动端就别想了。5. 三方全局光照方案横向对比与选型决策5.1 技术指标与性能矩阵把URP、HDRP、UE4Lightmass和Lumen放在同一张表里看选型逻辑会清晰很多对比维度Unity URPUnity HDRPUE4LightmassUE5Lumen静态烘焙GI成熟高效成熟且质量高成熟但偏慢可选兼容Lightmap动态漫反射GI无官方SSGISSGI/APV/光追GI较弱光追GI成熟度低默认Lumen强镜面反射方式Reflection Probe为主SSRR 反射探针Reflection Capture SSRLumen Reflection SSR移动端适用性极佳不推荐一般不推荐室内大世界一般很好很好极好烘焙时间GPU快较慢但质量高CPU耗时明显烘焙非必需运行时时序极低中等低中等偏高这张表不是死的。比如移动端你用HDRP做高端演示也不是不行但发热量会像暖手宝一样。选型的基本原则是项目跑在什么设备上决定了你能用哪套GI。5.2 不同项目类型怎么选我按项目类型直接给结论移动端手游/微信小游戏选URP烘焙Lightmap Light Probe Group Reflection Probe。Unity自身生态最完善压缩格式也成熟。不要觊觎HDRP或Lumen。PC/主机第三人称或第一人称游戏UE5的Lumen是首选它可以给你极高的迭代效率和视觉上限。如果你的项目是Unity写定不想换引擎那就用HDRPLightmap APV组合最稳。建筑可视化/数字孪生/VR样板间HDRP的Path Tracing用来出图Lightmap APV用来运行。UE4的Lightmass烘焙也完全可以但UE4的GPU Lightmass在4.27才逐渐好用效率不如Unity GPU Lightmapper。大世界开放世界UE5 Lumen World Partition是真主流。HDRP在大世界上优势不大因为它的体积雾、光照计算动态开销更高。URP做大世界没问题但烘焙每个区域的Lightmap组织和管理成本很高需要自己写调度。5.3 我个人踩过的坑换引擎/换版本时的GI迁移经验这部分是用真金白银换来的。跨引擎、跨版本迁移GI最常见的坑有光照贴图不是直接通用的。Unity烘焙出的exrUE4并不认。真要迁移只能重烘焙。重烘焙时千万别忘了把模型缩放统一不然UV1的密度错位接缝会非常明显。HDRP的APV和UE4的Lightmass烘焙结果差异极大。APV更偏向动态物体Lightmass更偏向静态地板墙面。迁移后如果发现动态物体在静态场景里“格格不入”优先检查Probe位置而不是盲目调数值。Lumen开启后原来在UE4里精心烘焙的Lightmap会变成背景层画面可能会发灰。我建议直接关掉Lightmap数据重新用Lumen的默认GI跑一版再决定是否采用混合烘焙。两个系统叠加出来的亮度往往不是你想要的。阴影设置也要跟着GI一起改。URP的Shadowmask、HDRP的Shadow Map、UE4的Shadowmap都各自独立迁移只改GI阴影会显脏。尽量整套渲染配置一起迁移别只动一个模块。6. 实战排查全局光照十大常见问题6.1 Lightmap 漏光、接缝、烘焙噪点漏光基本是光照贴图展开问题模型UV2有重叠或有缝隙烘焙时光线从缝隙穿过去。排查方法也很简单用Debug视图查看光照贴图UV找到重叠的面重新展开。也可以把Lightmap Padding调大一点比如从2改成4能缓解一部分但根治只能修模型。烘焙噪点多半是采样不足Final Gather Rays或采样质量不够。每次出噪点先不要盲目加分辨率分辨率上去了噪点更多、烘焙更慢。先加采样数再加分辨率。URP里可以提升Progressive GPU的降噪质量UE4里则是Indirect Lighting Quality。黑白噪点全部集中在阳光下的话记得检查天空光是否正常阴影偏移被拉得过大也会导致光照贴图表层出现假噪点。6.2 动态物体GI闪烁/角色发黑这类问题几乎都出在“动态物体采样的探针数据不够平滑”。URP里就是Light Probe Group的覆盖密度太低角色在探针稀疏区域移动时SH系数跳变看起来就是闪烁。解决方式是补探针尤其是墙角、门洞、楼梯转角。HDRP APV同理但APV还要注意探针距离墙面的距离探针贴墙太近会把墙内光照采样进来角色靠墙时发黑。UE4 Lumen闪光的点不太一样。Lumen的Final Gather Quality太低或Screen Space Tracing在相机剧烈运动时开得太大也会闪。我做直播测试时经常把Screen Space关掉只留SDF虽然间接光细节差一点但美术看板稳定不容易闪。如果角色发黑先看角色本身有没有接受到间接光动态Mesh往往需要打开Receive Dynamic GI或相关设置不是所有资产默认都接收Lumen间接光的。6.3 反射与间接光不一致问题这可能是最难调的一类明明GI看起来不错但金属桌面反射的周围环境颜色和漫反射明显对不上。原因通常是镜面反射用的数据源和漫反射用的数据源不是一套。URP里反射探针的Cubemap是场景快照和光照贴图画面对不上几乎是必然的只能通过多布点、调Box Projection来改善。HDRP和UE4有SSR所以在物体边缘能拿到更多屏幕内的实时反射但屏幕外部分仍然靠探针。Lumen的镜面反射和漫反射则同源最一致这也是我推荐主机项目用Lumen的原因。如果Lumen下反射还是发闷跑一下Reflection视锥调试看看是不是SDF体素分辨率不够、反射追踪半径设太小。全都调完仍不一致通常是场景里有一些发光材质既没有写入漫反射GI也没有被反射捕获捕获到检查自发光Mesh的GI设置即可。结尾的部分一些实际操作后的额外体会如果你正在做跨引擎对比或项目选型我的建议是别迷信某个引擎的某个默认GI方案多花一周时间做原型验证用你自己项目的实际场景内容跑一遍看帧时间、看显存占用、看画面噪点。URP的烘焙流看起来简陋但在移动端就是最稳的解Lumen看起来高级但半室外大场景的SDF精度不够时灯光表现并不会比烘焙好太多。全局光照本质上是“渲染预算 内容组织 视觉目标”三者之间的权衡没有银弹。最后分享一个小技巧无论用哪套GI都建议在工程里保留一个“GI灰盒测试场景”。用普通灰色Lambert材质把所有GI都调度起来你会立刻看到间接光是否合理而不是被花里胡哨的贴图掩盖问题。我每次调表都靠它省下无数无用功。
返回列表