20180527-杂记
久违的杂记。
UE4的TileRendering
贴张图。
希望后来人在移动平台使用TileRendering的时候遇到贴图上下颠倒的问题的时候不要着急。
一个HDR带宽优化技巧
使用HDR有一个重要条件,就是使用浮点帧缓冲(Floating Point Framebuffer),UE4默认使用Fp16精度(openGL下是GL_RGB16F
、GL
_RGBA16F
,vulkan下是VK_FORMAT_R16G16B16_SFLOAT
、VK_FORMAT_R16G16B16A16_SFLOAT
,metal下MTLPixelFormat是rgba16Float
)。每个颜色占用64bits。但其实HDR的颜色位数没必要那么高,一般情况下HDR10的话,只需要每个颜色10bits即可。在这种情况下,完全可以使用R11G11B10作为HDR render target。这样一个颜色只需要32bits即可完成存储,带宽占用直接折半。
这篇文章详细记录了R11G11B10F格式的各种优点。
兼容性:
- OpenGL: 小浮点格式
GL_R11G11B10F
最低需求openGL ES 3.0 - vulkan: 所有vulkan实现均支持
VK_FORMAT_B10G11R11_UFLOAT_PACK32
- metal: 所有实现均支持MTLPixelFormat为
rg11b10Float
- directx: 最低需求shadow model 4.0
移动端vulkan的一些槽点
vulkan作为新一代图形API,中央( Khornos )研究决定了,作为openGL的接班人。性能上确实不是盖的。在三星s8上,openGL ES 3.0差不多30FPS的场景,换用vulkan之后静止时60FPS,运动中保底也有40+FPS,性能进步真的不小。不过,还是有如下几个问题:
- 小米的MIUI系统并不开放vulkan(这很要命,Adreno 5xx国内大头就是小米,没了之后vulkan个人心目中使用机型直接砍大半)
- UE4 vulkan存在bug,现在发现的就有TileRendering上UV映射错误的bug。反正Epic不做Android,这些坑还是我们自己慢慢填吧。
- 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了啊。
Comments