Fork me on GitHub

UE移动端渲染问题及设置

移动端渲染设置总结

1. 阴影马赛克问题

image-20240130212107176

调整渲染设置 r.shadowquality=3

image-20240130212518457

移动平台的照明 - 官方文档

2. 部分贴图马赛克问题

image-20240130213207401

SamplerSource 改成 Shared:Wrap?

3. 远景闪烁问题

[/Script/Engine.Engine]
NearClipPlane=1.000000

NearClipPlane=0.1 改为 1.0

它是相机的一个参数,用于定义相机视椎体的近裁剪平面。视椎体是一个用于确定哪些对象会被渲染的区域,它由近裁剪平面、远裁剪平面、以及左、右、上和下平面组成。

近裁剪平面式相机视椎体靠近相机位置的那个平面。所有距离相机小于这个值的物体都会被裁剪掉,即不会被渲染。这个值可以通过相机设置进行调整。

设置近裁剪平面的值有助于防止渲染过近的物体,同时确保渲染引擎只关注于相机视野内的有效场景。调整近裁剪平面还可以影响渲染的精度和深度缓冲的分辨率,因此需要根据特定场景的需求来选择合适的值。

4. 偶发的满屏乱码问题

image-20240130214229814

很难复现的问题,最终发现每次场景中有其他用户下蹲则必然触发此问题。原因是在 ALS 的下蹲中打了这么一行日志

GEngine->AddOnScreenDebugMessage(77, 8.0f, FColor::Silver, FString::Printf(TEXT("%s:Crouching"), GEngine->GetNetMode(GEngine->GetWorld()) ? "S" : "C"));
  • ChatGPT 给的解释:
    • 在 UE 中,使用 AddOnScreenDebugMessage 打印日志时,如果日志内容中包含中文或者其他非 ASCII 字符,可能会导致在某些情况下出现乱码的问题,特别是在 Android 设备上。这个问题可能是由于字符编码或文本转换问题引起的。为了解决这个问题,可以尝试用 FText 来处理文本,以确保正确的字符编码。
    • 试了,用 FText 并不行。。。

5. 部分地形材质无法加载的问题

主要原因是移动端材质只支持最多16个 Sampler,我们的地形材质比较复杂

image-20240130220637448

简单几种材质叠加即超过了16个 Sampler,解决方案:

  1. 不使用高度混合而采用权重混合

    image-20240130220824604

  2. 去掉某些复杂材质的法线输入,采用世界位置偏移。

image-20240130220607039

优点是材质可以正常显示,缺点是效果受影响。

6. 相同光照设置低端机型进入发白

使用 renderdoc 截帧,调整如图所示红框中的范围值,可以确定是光照的问题。

image-20240130221055714

尝试修改光照单位

image-20240130221420381

未果

最后定位到

image-20240130221519870

场景中除了平行光还有天光,光源类型设置的 SLS Captured Scene,应该设置为 SLS Specified Cubemap

  • SLS Captured Scene

    • (SLS, Sky Light Source)使用场景中实时捕获的天空作为光源
    • 这种类型的 SLS 光源会动态地捕捉场景的天空,并将其用作全局光照的一部分。这样可以获得更加动态和真实的光照效果,特别是在天空和云层等环境元素发生变化时。
  • SLS Specified Cubemap

    • 使用开发者提供的特定立方体贴图(Cubemap)作为光源
posted @ 2024-01-30 22:22  icewalnut  阅读(228)  评论(0编辑  收藏  举报