Epoch Dev Log 9

上一篇 Epoch Dev Log 还是去年九月。一年过去由于实习,其他项目,以及懒,Epoch 本身并没有进展多少,不过 Unity 引擎自身倒是多了很多功能,我得以突破之前的一些问题。
首先,Epoch 的云层终于加上了,不过现有的 Ray Marching 部分还是一个 Cube,我需要后面改为一个 Sphere 的表达式。其次,得益于 Instacing API,大规模的 SpeedTree 在没有物理(风速)的影响下是可以重新实现一遍了。

接下来要实现的是升级之前的 Noise Shader。之前的 Shader 实现是靠 C# 对 Shader SetFloatArray 插入了一个 Lookup Table,而在老版本的 Unity 部分是有这个长度限制的,因此当时的 Lookup Table 从 LibNoise 的 1024 压缩到了 768。但我的新实现将完全抛弃 Lookup Table,也尽量独立于 LibNoise 的做法,这样 HeightMap 生成时间会进一步缩短。
以及基于 DepthMap 的 Runtime Culling,这个之前看到过一些 Paper 有说过,据说 BattleField 4 也有一个小分辨率的 DepthMap 用来做这个事情。但我预计要做的肯定没那么复杂,就是在某个 Layer 上的所有 GameObject 依附的 Renderer 如果在相机的 Z 轴百分比大于 DepthMap 即设置为非活跃。不过这个做法有两个隐藏的担忧:1. Mesh 过多的话是不是每 Update 检测 Depth 消耗的时间会大于省去的时间 2. Depth 的 Float 精度对于 zMin = 0.1 zMax = 99999 的游戏是否足够。