基于Raymarching的体积云,在它的每一步都涉及大量的计算。我们一般需要至少每条光线64步,每一步都涉及许多纹理读取和ALU指令。在手机上,这样的计算量难以取得较好性能,以满足我们渲染天空的预算要求。
我们的方案是,使用半八面体映射,把Raymarching的结果缓存在一个512 x 512的2D纹理中。由于天气以及太阳方向在我们的游戏中变化较慢,因此我们可以将缓存分多帧更新;
另外,我们需要两张RT,一张用于渲染天空,一张用于分帧的Raymarching,并且在Raymarching完全结束时交换两张RT。