2026-10-25 18:46:27
《黑神话:悟空》写实画面游戏的技术探索之路主要聚焦于真实感、光照、手游优化及锯齿处理四大方面,具体内容如下:
真实感光照组成丢失:AO(环境光遮蔽)、GI(全局光照)缺失,存在影中影的问题,SSAO(屏幕空间环境光遮蔽)没有提供中长距离AO。
半透明物体问题:半透明物体丢失阴影,物体表面微光照无法表达。
计算精度问题:实时计算达不到精度,烘焙精度不足,光照效果不正确,光照管线达不到绝对物理光照正确,资源制作不正确。
开场场景 - 晴天:有明显方向光和明亮天空盒,Shadowmap + SSAO足以表达效果,暗部变化相对不明显,不需要精确计算的AO/GI。
开场场景 - 阴天:shadowmap效果被极度弱化,skylight效果极强但难计算和表达,GI约等于单纯的天光,AO表达是关键,包括影中影、DFAO(距离场环境光遮蔽)、物件自身AO。
引擎方面:采用PBR Shading Model(基于物理的渲染着色模型)、Physical Camera(物理相机)、physical Light Unit(物理光照单位),以及若干套优缺点的光照方案。
细节表达:注重细节光照的表达、超大视距性能和精度、半透明光影和精度、体积光的阴影和精度,以及资源的物理正确。
动态光优势:Lightmass主要依赖surface lightmap,而volumetric light无法表达精确的表面光照;开放世界中surface lightmap占用内存和容量很大,植被surface lightmap需求量大且精度大;动态场景更方便制作场景的运动和破坏效果,迭代效率方面,烘焙会降低美术迭代效率。
距离光照(Distance Field):使用距离场表达场景(静态),通过空间点到模型的最近距离模拟光追,使用三角面和BVH两种组织方式(Grid bucket和global texture),基于ray march实现软阴影/AO(DFAO)/GI等常见功能。其优点是性能好,效果远超光追,有空间查询能力,可在Shader中实现复杂效果,支持动态flowmap、terrain blend;缺点是精度低,容易出现渲染错误和漏光,细节光照无法表达。
动态物体光照 - Capsule Shadow:Capsule数据容易存储,在ray march中容易计算,可实现软间接shadow(支持影中影),是对静态Distance Field的补充。
动态管线速度并非绝对慢,如《堡垒之夜》取决于使用的特性以及对场景物件的把控。
暂时缺乏高品质GI,需要手动补光,合理运用特性(如DFAO),AO精度和表达不是问题。
可灵活运用各种手段,如DFRTS(用距离场算阴影),其Drawcall远低于shadowmap,不需要每帧把场景多渲染一次,GPU消耗更低;还可使用shadow map cache、Light culling,根据每个动态光是否cast shadow进行局部烘焙。
AO问题:SSAO/DFAO不容易表达复杂层级的AO,如衣服的褶皱、树叶之间的遮蔽效果,精度和表现不够好。AO正常下低精度,有时需要高精度,物件的AO非常重要。
阴影处理:阴影区域下的树叶需要影中影,有时可以用shadowmap模拟/代替AO。好的建模与法线能为物体带来更好细节阴影,高精度AO可直接烘焙到物体上。
主流做法是没有SSAO,有限制使用Shadow map。
手机GPU有Tile Base特性,浮点运算能力相对可以,但带宽较低,导致Deferred rendering成为非主流,Depth/GBuffer based随机采样算法代价大(如SSAO)。
手游开始流行高清高帧率,但又要尽可能低能耗低发热,Tile base的on - chip特性使带宽成为重要的耗电降频来源。
一个on chip tile的数据可以在多次绘制中共享,减少带宽消耗,后一个subpass所使用的attachments的像素可以直接从前一个subpass的attachments中的对应位置读取。
每次绘制不会立即把数据输出到framebuffer,但不能对临近像素进行采样,只能使用同一位置的像素信息。
典型应用包括on chip buffer、subpass,让高性能的Deferred Rendering成为可能,硬件API支持Vulkan/Metal。
Vain Glory(虚荣):分离透明物体和不透明物体区域,减少overdraw区域,使用alpha blend实现抗锯齿(软边过渡),不透明区域更容易规避透明排序;远景把光照烘焙到diffuse(albedo)贴图上,可以提供无限视距的光照阴影;预先烘焙多角度shader,类似unlit,节省了ALU性能消耗,比lightmap更省(少了渲染shadowmap、tex2D shadowmap和shadowmap的内存占用)。
黑色沙漠:采用直接光 + shadowmap,首次绘制shadowmap,之后根据矩阵推算,移动一定距离重新绘制新的shadowmap,烘焙仅烘焙低精度的GI diffuse,放弃烘焙AO,靠shadowmap补充。
Zen Garden:针对固定的方向光做烘焙,实现高品质高性能,其他通过Shader造假产生Material光影,高性价比、高性能,解决shadowmap不能覆盖的领域,如透明物体、天空云、远景如瀑布的假阴影和假光照,解决透明光影问题,还使用2D ray march对一些面片粒子做阴影效果,如烟雾用面片做假的体积光,通过Fake AO传入玩家坐标让地面/草面变黑造成AO的感觉。
光照表现优化:大量的Micro lighting(光照表现)无法在光照管线上表达,只能在shading model(光照模型)上实现,如SSS、Double Lobe Specular、Eye、Hair、Fiber(Moss)、Cloth等。
几何锯齿:尖锐细小的物体容易出现。
Alpha Test:导致锯齿产生。
Shading锯齿:高频的Normal变化、HDR亮度等引发。
资源侧抗锯齿
Alpha Blend:通过alpha混合实现抗锯齿。
Normal/Roughness Composite:根据法线去修改roughness,在边缘等地方提高roughness,使其看起来不尖锐,对抗Shading alias,在移动端更有优势。
mipmap:配合UE4的sharpen功能(锐化效果不要乱用),no mipmap也可用于抗锯齿。
Temporal Antialising(TAA):PS4主流抗锯齿技术,将超采样的流程分到几帧中运算,可以轻易达到16x级别的超采样样本,有效对抗shading aliasing,额外功能包括animated alpha dither使用alpha test模拟半透明,但存在残影问题,需要velocity信息去resolve,过度模糊时可进行sharpening,还可通过mipmap增强,有Temporal upsample(针对低分辨率)替代方案。
其他替代方案:NVIDIA的DLSS(深度学习超级采样),AMD的CAS(对比度感知锐化)+ RIS(Radeon图像锐化)。