久违的杂记。

UE4的TileRendering

       贴张图。

TileRendering

       希望后来人在移动平台使用TileRendering的时候遇到贴图上下颠倒的问题的时候不要着急。

一个HDR带宽优化技巧

       使用HDR有一个重要条件,就是使用浮点帧缓冲(Floating Point Framebuffer),UE4默认使用Fp16精度(openGL下是GL_RGB16FGL _RGBA16F,vulkan下是VK_FORMAT_R16G16B16_SFLOATVK_FORMAT_R16G16B16A16_SFLOAT,metal下MTLPixelFormatrgba16Float)。每个颜色占用64bits。但其实HDR的颜色位数没必要那么高,一般情况下HDR10的话,只需要每个颜色10bits即可。在这种情况下,完全可以使用R11G11B10作为HDR render target。这样一个颜色只需要32bits即可完成存储,带宽占用直接折半。

       这篇文章详细记录了R11G11B10F格式的各种优点。

       兼容性:

  1. OpenGL: 小浮点格式GL_R11G11B10F最低需求openGL ES 3.0
  2. vulkan: 所有vulkan实现均支持VK_FORMAT_B10G11R11_UFLOAT_PACK32
  3. metal: 所有实现均支持MTLPixelFormatrg11b10Float
  4. directx: 最低需求shadow model 4.0

移动端vulkan的一些槽点

       vulkan作为新一代图形API,中央( Khornos )研究决定了,作为openGL的接班人。性能上确实不是盖的。在三星s8上,openGL ES 3.0差不多30FPS的场景,换用vulkan之后静止时60FPS,运动中保底也有40+FPS,性能进步真的不小。不过,还是有如下几个问题:

  1. 小米的MIUI系统并不开放vulkan(这很要命,Adreno 5xx国内大头就是小米,没了之后vulkan个人心目中使用机型直接砍大半)
  2. UE4 vulkan存在bug,现在发现的就有TileRendering上UV映射错误的bug。反正Epic不做Android,这些坑还是我们自己慢慢填吧。
  3. android上vulkan调试并不好,MGD、snapdragon Profiler现在都只支持vulkan runtime resource analysis,不支持frame debug。GAPID支持vulkan,但是卡得要死,还经常抓失败和莫名其妙的崩溃。Renderdoc我至今连Android都没有成功,无论GL还是VK都不行。真的是无语。也许Android上现在vulkan唯一靠谱的frame debugger也就是Nsight了吧,但是就一个调试几个场景就申请一块Jetson或者Shield,估计财务肯定不给批吧

       必须抽空研究一下移动平台的vulkan了啊。