好久没写blog了啊,想写,但大块的又写不出来随便写点杂记吧。也希望能把杂记的习惯保持一下。

1. UE4 mobile LDR/HDR的选择

       最近跟着公司大佬一起调整了一下UE4 mobileHDR的选择逻辑。之前,我实现了可以根据DeviceProfile.ini选择HDR/LDR的功能,但是,在实机测试的时候发现了点问题。就是这个文件在Android上,如果不root,是不能修改的,就是说对于每台设备,是死的。因为不能排除有玩家宁可帧数个位数,也要画面吊炸天的需求,所以必须可以修改。所以在UE4引擎配置加载完成后,立即执行一段lua代码,用来快速fix一些配置,lua是可读写的,就实现了用户可以修改画质,虽然很多时候需要重启。

       对于设备默认情况下LDR/HDR的选择,是根据设备配置选择的。公司现在iOS最低需要iPhone6,这货除了内存小,CPU单核性能还有GPU性能都是可以和高通835媲美的,再加上iOS已经全面Metal,iOS设备是放心大胆只开HDR的。在Android设备,情况比较复杂,现在选择方式是打分。Adreno 420为基准的100分,打分80以上的GPU默认开启HDR,80以下的默认关闭HDR,比如Adreno 506得分是49(高通625,代表机型红米4X),Adreno 418得分是81(高通808,代表机型小米4s)。

2. UE4 fmod集成吐槽

       作为业界顶级的音效开发库之一,fmod和UE4集成未免有点体验太差了。如果你使用的是Epic launcher上下的官方二进制包,自然是没有任何问题,但如果你是使用的源码自编译的引擎,那就各种爆炸了。

  1. 版本。Fmod提供的预编译插件从对UE4小版本支持还不错,但是源码。。。都是泪。而且Fmod插件的源码编译各种失败,我一下午就编译成功了一次。UE4版本4.16.2,Fmod版本1.09.06,当然Fmod好像说过UE4.16.2有些问题。
  2. 还是版本。公司准备在UE4.19正式发布之后,把引擎源码更新到4.19。看到内部插件长长的list,心里各种恐惧感。听说UE4.18和4.19也着重处理了移动平台包体过大的问题,这就到时候看了。
  3. 界面。我确实是个渣,但是fmod 1.08,1.09和1.10的界面差异,有点略大啊。
  4. 容量。Fmod应该并没有实现自家的音频压缩,就是开源的ogg vorbis。在默认质量(37%)的情况下,压缩比大概10:1。UE4 ogg vorbis压缩率也这么大,ogg opus压缩率还能再高点。听说隔壁Criware提供24:1的压缩比(没验证),看来对于音游还是都去用Criware吧。

3. 鲁大师跑分时的一些思考

       最近搞了个新玩具——一块GTX1080。然后按照惯例,跑一下娱乐大师玩玩。跑娱乐大师的过程中,发现了个细节。

鲁大师

       里面有很多这种场景。看到这里有很多发光的粒子。这些粒子都有bloom效果。够厉害了吧。如果我再告诉你这里面的粒子都是动态光源呢。是不是吓到了。而且帧数能保持几百,难道GTX1080这种中端卡都这么屌了?

       后来翻阅秦春林老师的《全局光照技术-从离线渲染到实时渲染》,第四章的延迟着色,终于找到了答案。

       延迟渲染的基本原理,就是将片元着色置于深度测试之后,这样可以有效减少片元着色器渲染不可见区域的问题(过度渲染)。

       延迟着色技术解决了传统渲染管线中的过度绘制的问题,这是通过牺牲内存占用来实现的,它用一个巨大的几何缓存对象将那些着色参数暂存起来,以便能够在稍后待所有不可见的像素被深度测试剔除之后再进行必要的光照计算,能这样做的原因是深度测试本身和着色计算几乎是完全独立的,所以延迟着色计算的结构几乎和传统渲染管线是一致的,并且延迟着色使渲染性能不再与场景的复杂度像耦合(尤其延迟着色支持数量巨大的光源),能够保证稳定的帧率,稳定的帧率是实时渲染领域中技术的一个重要的衡量指标。

       延迟渲染使得着色器计算仅针对屏幕空间中的像素点进行,但还是有些问题

  1. 不支持半透明物体
  2. 巨大的帧缓冲占用(显存占用)
  3. 对屏幕区域的像素点(而不是根据每个物体自身的类型)进行着色计算,这使得我们很难针对每中物体使用自定义的着色器,因为各种类型的物体被混在一个屏幕区域,我们必须使用同一的着色器,这使得自定义着色器变得非常困难
  4. 内存访问的高带宽占用

       之后通过2D分块,3D分簇,着色器通道合并压缩等方式优化,总之几个优化原则

  1. 减少带宽压力
  2. 减少GPU分支运算

       看看神海4中人家通道的用法,简直节约到了令人发指的地步。。

神海4 G-buffer

       不过这样合并通道不是什么显卡都能用的,因为HLSL和GLSL都是没有位运算的,这是GCN架构的GPU提供的整数按位解码方法。最后神海4的延迟渲染比一般的延迟渲染还有20%~30%的性能提升。

4. 自虐,立flag

       最近几个月,一直在被某大佬虐爆。被虐得久了都自己有点想放弃人生了。特别是看到人家高产似那啥,技术牛得一逼。而自己除了装逼什么都不会,真得觉得自己很失败。在此立两个flag吧,这大概也是今年的计划了,不敢定多,希望实现吧。

  1. 看了这个之后,萌生了自己也试着拿UE4撸个ACT scene的想法。毕竟顶着UE引擎师的title,居然UE怎么用都不会,会不会被人耻笑
  2. 虽然以前就想着做个MMD viewer,但是每次都无疾而终。最近看到一个repo,再次萌生了搞一发的念头。刚好今年《全局光照技术》也是要看的。也许也能顺便作为GI的试验场。技术选型初步定为Qt+vulkan或者bgfx吧,因为人家用了DX12,所以自己也想来点骚操作。Qt + vulkan的组合应该已经非常靠谱了,已经有RPCS3充分证明,而bgfx开发的游戏引擎更是数都数不过来。然后,希望自己不要拖延症吧,毕竟一拖就啥都不做了

5. MUG

       现在发现,自己说自己是个MUG玩家,但是实力却是非常的不济啊。绝大部分音游只能打最简单的难度。太鼓最多7段,DIVA最多8级,SDVX瞬光,少数个人差能到12级,IIDX3级都打不了。看到SDVX后光天下一之后新追加的暴徒段位,渐渐明白,大佬暴龙天,是因为以前段位只到暴龙天。(不过讲道理,重力战争老子也是拿过天下一的,虽然重力战争里天下一并不值钱)

       也许,对于我这种超水休闲玩家,也就只能开最简单难度去Feel the O2Jam了。